diff --git a/README.md b/README.md index 5b43191a..aa1b5975 100644 --- a/README.md +++ b/README.md @@ -436,7 +436,7 @@ For more info, see [**Configuration Details**](https://github.com/vladmandic/hum


-`Human` library is written in [TypeScript](https://www.typescriptlang.org/docs/handbook/intro.html) **4.9** using [TensorFlow/JS](https://www.tensorflow.org/js/) **4.0** and conforming to latest `JavaScript` [ECMAScript version 2022](https://262.ecma-international.org/) standard +`Human` library is written in [TypeScript](https://www.typescriptlang.org/docs/handbook/intro.html) **4.9** using [TensorFlow/JS](https://www.tensorflow.org/js/) **4.1** and conforming to latest `JavaScript` [ECMAScript version 2022](https://262.ecma-international.org/) standard Build target for distributables is `JavaScript` [EMCAScript version 2018](https://262.ecma-international.org/9.0/) diff --git a/TODO.md b/TODO.md index f1208a35..642e8330 100644 --- a/TODO.md +++ b/TODO.md @@ -77,7 +77,7 @@ Features: See `human.result.face[n].distance` Architecture: -- Upgrade to **TFJS 4.0** with **strong typing** +- Upgrade to **TFJS 4.1** with **strong typing** see [notes](https://github.com/vladmandic/human#typedefs) on how to use - `TypeDef` refactoring - Re-architect `human.models` namespace for better dynamic model handling diff --git a/demo/faceid/index.js b/demo/faceid/index.js index 635d01de..67a9f377 100644 --- a/demo/faceid/index.js +++ b/demo/faceid/index.js @@ -4,6 +4,359 @@ author: ' */ -import*as S from"../../dist/human.esm.js";var l,F="human",f="person",v=(...a)=>console.log("indexdb",...a);async function h(){return l?!0:new Promise(a=>{let n=indexedDB.open(F,1);n.onerror=o=>v("error:",o),n.onupgradeneeded=o=>{v("create:",o.target),l=o.target.result,l.createObjectStore(f,{keyPath:"id",autoIncrement:!0})},n.onsuccess=o=>{l=o.target.result,v("open:",l),a(!0)}})}async function C(){let a=[];return l||await h(),new Promise(n=>{let o=l.transaction([f],"readwrite").objectStore(f).openCursor(null,"next");o.onerror=i=>v("load error:",i),o.onsuccess=i=>{i.target.result?(a.push(i.target.result.value),i.target.result.continue()):n(a)}})}async function b(){return l||await h(),new Promise(a=>{let n=l.transaction([f],"readwrite").objectStore(f).count();n.onerror=o=>v("count error:",o),n.onsuccess=()=>a(n.result)})}async function x(a){l||await h();let n={name:a.name,descriptor:a.descriptor,image:a.image};l.transaction([f],"readwrite").objectStore(f).put(n),v("save:",n)}async function D(a){l||await h(),l.transaction([f],"readwrite").objectStore(f).delete(a.id),v("delete:",a)}var g={cacheSensitivity:0,modelBasePath:"../../models",filter:{enabled:!0,equalization:!0},debug:!0,face:{enabled:!0,detector:{rotation:!0,return:!0,cropFactor:1.6,mask:!1},description:{enabled:!0},iris:{enabled:!0},emotion:{enabled:!1},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!1},hand:{enabled:!1},object:{enabled:!1},gesture:{enabled:!0}},B={order:2,multiplier:25,min:.2,max:.8},r={minConfidence:.6,minSize:224,maxTime:3e4,blinkMin:10,blinkMax:800,threshold:.5,distanceMin:.4,distanceMax:1,mask:g.face.detector.mask,rotation:g.face.detector.rotation,cropFactor:g.face.detector.cropFactor,...B},e={faceCount:{status:!1,val:0},faceConfidence:{status:!1,val:0},facingCenter:{status:!1,val:0},lookingCenter:{status:!1,val:0},blinkDetected:{status:!1,val:0},faceSize:{status:!1,val:0},antispoofCheck:{status:!1,val:0},livenessCheck:{status:!1,val:0},distance:{status:!1,val:0},age:{status:!1,val:0},gender:{status:!1,val:0},timeout:{status:!0,val:0},descriptor:{status:!1,val:0},elapsedMs:{status:void 0,val:0},detectFPS:{status:void 0,val:0},drawFPS:{status:void 0,val:0}},E=()=>e.faceCount.status&&e.faceSize.status&&e.blinkDetected.status&&e.facingCenter.status&&e.lookingCenter.status&&e.faceConfidence.status&&e.antispoofCheck.status&&e.livenessCheck.status&&e.distance.status&&e.descriptor.status&&e.age.status&&e.gender.status,c={face:null,record:null},u={start:0,end:0,time:0},s=new S.Human(g);s.env.perfadd=!1;s.draw.options.font='small-caps 18px "Lato"';s.draw.options.lineHeight=20;var t={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("fps"),match:document.getElementById("match"),name:document.getElementById("name"),save:document.getElementById("save"),delete:document.getElementById("delete"),retry:document.getElementById("retry"),source:document.getElementById("source"),ok:document.getElementById("ok")},y={detect:0,draw:0},I=0,d=(...a)=>{t.log.innerText+=a.join(" ")+` -`,console.log(...a)};async function H(){let a={audio:!1,video:{facingMode:"user",resizeMode:"none",width:{ideal:document.body.clientWidth}}},n=await navigator.mediaDevices.getUserMedia(a),o=new Promise(i=>{t.video.onloadeddata=()=>i(!0)});t.video.srcObject=n,t.video.play(),await o,t.canvas.width=t.video.videoWidth,t.canvas.height=t.video.videoHeight,t.canvas.style.width="50%",t.canvas.style.height="50%",s.env.initial&&d("video:",t.video.videoWidth,t.video.videoHeight,"|",n.getVideoTracks()[0].label),t.canvas.onclick=()=>{t.video.paused?t.video.play():t.video.pause()}}async function T(){var a;if(!t.video.paused){(a=c.face)!=null&&a.tensor&&s.tf.dispose(c.face.tensor),await s.detect(t.video);let n=s.now();e.detectFPS.val=Math.round(1e4/(n-y.detect))/10,y.detect=n,requestAnimationFrame(T)}}function P(){let a=32;for(let[n,o]of Object.entries(e)){let i=document.getElementById(`ok-${n}`);i||(i=document.createElement("div"),i.id=`ok-${n}`,i.innerText=n,i.className="ok",i.style.top=`${a}px`,t.ok.appendChild(i)),typeof o.status=="boolean"&&(i.style.backgroundColor=o.status?"lightgreen":"lightcoral");let m=o.status?"ok":"fail";i.innerText=`${n}: ${o.val===0?m:o.val}`,a+=28}}async function R(){var o;let a=s.next(s.result);s.draw.canvas(t.video,t.canvas),await s.draw.all(t.canvas,a);let n=s.now();if(e.drawFPS.val=Math.round(1e4/(n-y.draw))/10,y.draw=n,e.faceCount.val=s.result.face.length,e.faceCount.status=e.faceCount.val===1,e.faceCount.status){let i=Object.values(s.result.gesture).map(m=>m.gesture);(i.includes("blink left eye")||i.includes("blink right eye"))&&(u.start=s.now()),u.start>0&&!i.includes("blink left eye")&&!i.includes("blink right eye")&&(u.end=s.now()),e.blinkDetected.status=e.blinkDetected.status||Math.abs(u.end-u.start)>r.blinkMin&&Math.abs(u.end-u.start)=r.minConfidence,e.antispoofCheck.val=s.result.face[0].real||0,e.antispoofCheck.status=e.antispoofCheck.val>=r.minConfidence,e.livenessCheck.val=s.result.face[0].live||0,e.livenessCheck.status=e.livenessCheck.val>=r.minConfidence,e.faceSize.val=Math.min(s.result.face[0].box[2],s.result.face[0].box[3]),e.faceSize.status=e.faceSize.val>=r.minSize,e.distance.val=s.result.face[0].distance||0,e.distance.status=e.distance.val>=r.distanceMin&&e.distance.val<=r.distanceMax,e.descriptor.val=((o=s.result.face[0].embedding)==null?void 0:o.length)||0,e.descriptor.status=e.descriptor.val>0,e.age.val=s.result.face[0].age||0,e.age.status=e.age.val>0,e.gender.val=s.result.face[0].genderScore||0,e.gender.status=e.gender.val>=r.minConfidence}return e.timeout.status=e.elapsedMs.val<=r.maxTime,P(),E()||!e.timeout.status?(t.video.pause(),s.result.face[0]):(e.elapsedMs.val=Math.trunc(s.now()-I),new Promise(i=>{setTimeout(async()=>{await R(),i(s.result.face[0])},30)}))}async function z(){var a,n,o,i;if(t.name.value.length>0){let m=(a=t.canvas.getContext("2d"))==null?void 0:a.getImageData(0,0,t.canvas.width,t.canvas.height),p={id:0,name:t.name.value,descriptor:(n=c.face)==null?void 0:n.embedding,image:m};await x(p),d("saved face record:",p.name,"descriptor length:",(i=(o=c.face)==null?void 0:o.embedding)==null?void 0:i.length),d("known face records:",await b())}else d("invalid name")}async function j(){c.record&&c.record.id>0&&await D(c.record)}async function $(){var i,m,p,k;if(t.canvas.style.height="",(i=t.canvas.getContext("2d"))==null||i.clearRect(0,0,r.minSize,r.minSize),!((m=c==null?void 0:c.face)!=null&&m.tensor)||!((p=c==null?void 0:c.face)!=null&&p.embedding))return!1;if(console.log("face record:",c.face),d(`detected face: ${c.face.gender} ${c.face.age||0}y distance ${100*(c.face.distance||0)}cm/${Math.round(100*(c.face.distance||0)/2.54)}in`),await s.tf.browser.toPixels(c.face.tensor,t.canvas),await b()===0)return d("face database is empty: nothing to compare face with"),document.body.style.background="black",t.delete.style.display="none",!1;let a=await C(),n=a.map(w=>w.descriptor).filter(w=>w.length>0),o=s.match.find(c.face.embedding,n,B);return c.record=a[o.index]||null,c.record&&(d(`best match: ${c.record.name} | id: ${c.record.id} | similarity: ${Math.round(1e3*o.similarity)/10}%`),t.name.value=c.record.name,t.source.style.display="",(k=t.source.getContext("2d"))==null||k.putImageData(c.record.image,0,0)),document.body.style.background=o.similarity>r.threshold?"darkgreen":"maroon",o.similarity>r.threshold}async function M(){var a,n,o,i;return e.faceCount.status=!1,e.faceConfidence.status=!1,e.facingCenter.status=!1,e.blinkDetected.status=!1,e.faceSize.status=!1,e.antispoofCheck.status=!1,e.livenessCheck.status=!1,e.age.status=!1,e.gender.status=!1,e.elapsedMs.val=0,t.match.style.display="none",t.retry.style.display="none",t.source.style.display="none",t.canvas.style.height="50%",document.body.style.background="black",await H(),await T(),I=s.now(),c.face=await R(),t.canvas.width=((n=(a=c.face)==null?void 0:a.tensor)==null?void 0:n.shape[1])||r.minSize,t.canvas.height=((i=(o=c.face)==null?void 0:o.tensor)==null?void 0:i.shape[0])||r.minSize,t.source.width=t.canvas.width,t.source.height=t.canvas.height,t.canvas.style.width="",t.match.style.display="flex",t.save.style.display="flex",t.delete.style.display="flex",t.retry.style.display="block",E()?$():(d("did not find valid face"),!1)}async function q(){var a,n;d("human version:",s.version,"| tfjs version:",s.tf.version["tfjs-core"]),d("options:",JSON.stringify(r).replace(/{|}|"|\[|\]/g,"").replace(/,/g," ")),d("initializing webcam..."),await H(),d("loading human models..."),await s.load(),d("initializing human..."),d("face embedding model:",g.face.description.enabled?"faceres":"",(a=g.face.mobilefacenet)!=null&&a.enabled?"mobilefacenet":"",(n=g.face.insightface)!=null&&n.enabled?"insightface":""),d("loading face database..."),d("known face records:",await b()),t.retry.addEventListener("click",M),t.save.addEventListener("click",z),t.delete.addEventListener("click",j),await s.warmup(),await M()}window.onload=q; + +// demo/faceid/index.ts +import * as H from "../../dist/human.esm.js"; + +// demo/faceid/indexdb.ts +var db; +var database = "human"; +var table = "person"; +var log = (...msg) => console.log("indexdb", ...msg); +async function open() { + if (db) + return true; + return new Promise((resolve) => { + const request = indexedDB.open(database, 1); + request.onerror = (evt) => log("error:", evt); + request.onupgradeneeded = (evt) => { + log("create:", evt.target); + db = evt.target.result; + db.createObjectStore(table, { keyPath: "id", autoIncrement: true }); + }; + request.onsuccess = (evt) => { + db = evt.target.result; + log("open:", db); + resolve(true); + }; + }); +} +async function load() { + const faceDB = []; + if (!db) + await open(); + return new Promise((resolve) => { + const cursor = db.transaction([table], "readwrite").objectStore(table).openCursor(null, "next"); + cursor.onerror = (evt) => log("load error:", evt); + cursor.onsuccess = (evt) => { + if (evt.target.result) { + faceDB.push(evt.target.result.value); + evt.target.result.continue(); + } else { + resolve(faceDB); + } + }; + }); +} +async function count() { + if (!db) + await open(); + return new Promise((resolve) => { + const store = db.transaction([table], "readwrite").objectStore(table).count(); + store.onerror = (evt) => log("count error:", evt); + store.onsuccess = () => resolve(store.result); + }); +} +async function save(faceRecord) { + if (!db) + await open(); + const newRecord = { name: faceRecord.name, descriptor: faceRecord.descriptor, image: faceRecord.image }; + db.transaction([table], "readwrite").objectStore(table).put(newRecord); + log("save:", newRecord); +} +async function remove(faceRecord) { + if (!db) + await open(); + db.transaction([table], "readwrite").objectStore(table).delete(faceRecord.id); + log("delete:", faceRecord); +} + +// demo/faceid/index.ts +var humanConfig = { + cacheSensitivity: 0, + modelBasePath: "../../models", + filter: { enabled: true, equalization: true }, + debug: true, + face: { + enabled: true, + detector: { rotation: true, return: true, cropFactor: 1.6, mask: false }, + description: { enabled: true }, + iris: { enabled: true }, + emotion: { enabled: false }, + antispoof: { enabled: true }, + liveness: { enabled: true } + }, + body: { enabled: false }, + hand: { enabled: false }, + object: { enabled: false }, + gesture: { enabled: true } +}; +var matchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }; +var options = { + minConfidence: 0.6, + minSize: 224, + maxTime: 3e4, + blinkMin: 10, + blinkMax: 800, + threshold: 0.5, + distanceMin: 0.4, + distanceMax: 1, + mask: humanConfig.face.detector.mask, + rotation: humanConfig.face.detector.rotation, + cropFactor: humanConfig.face.detector.cropFactor, + ...matchOptions +}; +var ok = { + faceCount: { status: false, val: 0 }, + faceConfidence: { status: false, val: 0 }, + facingCenter: { status: false, val: 0 }, + lookingCenter: { status: false, val: 0 }, + blinkDetected: { status: false, val: 0 }, + faceSize: { status: false, val: 0 }, + antispoofCheck: { status: false, val: 0 }, + livenessCheck: { status: false, val: 0 }, + distance: { status: false, val: 0 }, + age: { status: false, val: 0 }, + gender: { status: false, val: 0 }, + timeout: { status: true, val: 0 }, + descriptor: { status: false, val: 0 }, + elapsedMs: { status: void 0, val: 0 }, + detectFPS: { status: void 0, val: 0 }, + drawFPS: { status: void 0, val: 0 } +}; +var allOk = () => ok.faceCount.status && ok.faceSize.status && ok.blinkDetected.status && ok.facingCenter.status && ok.lookingCenter.status && ok.faceConfidence.status && ok.antispoofCheck.status && ok.livenessCheck.status && ok.distance.status && ok.descriptor.status && ok.age.status && ok.gender.status; +var current = { face: null, record: null }; +var blink = { + start: 0, + end: 0, + time: 0 +}; +var human = new H.Human(humanConfig); +human.env.perfadd = false; +human.draw.options.font = 'small-caps 18px "Lato"'; +human.draw.options.lineHeight = 20; +var dom = { + video: document.getElementById("video"), + canvas: document.getElementById("canvas"), + log: document.getElementById("log"), + fps: document.getElementById("fps"), + match: document.getElementById("match"), + name: document.getElementById("name"), + save: document.getElementById("save"), + delete: document.getElementById("delete"), + retry: document.getElementById("retry"), + source: document.getElementById("source"), + ok: document.getElementById("ok") +}; +var timestamp = { detect: 0, draw: 0 }; +var startTime = 0; +var log2 = (...msg) => { + dom.log.innerText += msg.join(" ") + "\n"; + console.log(...msg); +}; +async function webCam() { + const cameraOptions = { audio: false, video: { facingMode: "user", resizeMode: "none", width: { ideal: document.body.clientWidth } } }; + const stream = await navigator.mediaDevices.getUserMedia(cameraOptions); + const ready = new Promise((resolve) => { + dom.video.onloadeddata = () => resolve(true); + }); + dom.video.srcObject = stream; + void dom.video.play(); + await ready; + dom.canvas.width = dom.video.videoWidth; + dom.canvas.height = dom.video.videoHeight; + dom.canvas.style.width = "50%"; + dom.canvas.style.height = "50%"; + if (human.env.initial) + log2("video:", dom.video.videoWidth, dom.video.videoHeight, "|", stream.getVideoTracks()[0].label); + dom.canvas.onclick = () => { + if (dom.video.paused) + void dom.video.play(); + else + dom.video.pause(); + }; +} +async function detectionLoop() { + var _a; + if (!dom.video.paused) { + if ((_a = current.face) == null ? void 0 : _a.tensor) + human.tf.dispose(current.face.tensor); + await human.detect(dom.video); + const now = human.now(); + ok.detectFPS.val = Math.round(1e4 / (now - timestamp.detect)) / 10; + timestamp.detect = now; + requestAnimationFrame(detectionLoop); + } +} +function drawValidationTests() { + let y = 32; + for (const [key, val] of Object.entries(ok)) { + let el = document.getElementById(`ok-${key}`); + if (!el) { + el = document.createElement("div"); + el.id = `ok-${key}`; + el.innerText = key; + el.className = "ok"; + el.style.top = `${y}px`; + dom.ok.appendChild(el); + } + if (typeof val.status === "boolean") + el.style.backgroundColor = val.status ? "lightgreen" : "lightcoral"; + const status = val.status ? "ok" : "fail"; + el.innerText = `${key}: ${val.val === 0 ? status : val.val}`; + y += 28; + } +} +async function validationLoop() { + var _a; + const interpolated = human.next(human.result); + human.draw.canvas(dom.video, dom.canvas); + await human.draw.all(dom.canvas, interpolated); + const now = human.now(); + ok.drawFPS.val = Math.round(1e4 / (now - timestamp.draw)) / 10; + timestamp.draw = now; + ok.faceCount.val = human.result.face.length; + ok.faceCount.status = ok.faceCount.val === 1; + if (ok.faceCount.status) { + const gestures = Object.values(human.result.gesture).map((gesture) => gesture.gesture); + if (gestures.includes("blink left eye") || gestures.includes("blink right eye")) + blink.start = human.now(); + if (blink.start > 0 && !gestures.includes("blink left eye") && !gestures.includes("blink right eye")) + blink.end = human.now(); + ok.blinkDetected.status = ok.blinkDetected.status || Math.abs(blink.end - blink.start) > options.blinkMin && Math.abs(blink.end - blink.start) < options.blinkMax; + if (ok.blinkDetected.status && blink.time === 0) + blink.time = Math.trunc(blink.end - blink.start); + ok.facingCenter.status = gestures.includes("facing center"); + ok.lookingCenter.status = gestures.includes("looking center"); + ok.faceConfidence.val = human.result.face[0].faceScore || human.result.face[0].boxScore || 0; + ok.faceConfidence.status = ok.faceConfidence.val >= options.minConfidence; + ok.antispoofCheck.val = human.result.face[0].real || 0; + ok.antispoofCheck.status = ok.antispoofCheck.val >= options.minConfidence; + ok.livenessCheck.val = human.result.face[0].live || 0; + ok.livenessCheck.status = ok.livenessCheck.val >= options.minConfidence; + ok.faceSize.val = Math.min(human.result.face[0].box[2], human.result.face[0].box[3]); + ok.faceSize.status = ok.faceSize.val >= options.minSize; + ok.distance.val = human.result.face[0].distance || 0; + ok.distance.status = ok.distance.val >= options.distanceMin && ok.distance.val <= options.distanceMax; + ok.descriptor.val = ((_a = human.result.face[0].embedding) == null ? void 0 : _a.length) || 0; + ok.descriptor.status = ok.descriptor.val > 0; + ok.age.val = human.result.face[0].age || 0; + ok.age.status = ok.age.val > 0; + ok.gender.val = human.result.face[0].genderScore || 0; + ok.gender.status = ok.gender.val >= options.minConfidence; + } + ok.timeout.status = ok.elapsedMs.val <= options.maxTime; + drawValidationTests(); + if (allOk() || !ok.timeout.status) { + dom.video.pause(); + return human.result.face[0]; + } + ok.elapsedMs.val = Math.trunc(human.now() - startTime); + return new Promise((resolve) => { + setTimeout(async () => { + await validationLoop(); + resolve(human.result.face[0]); + }, 30); + }); +} +async function saveRecords() { + var _a, _b, _c, _d; + if (dom.name.value.length > 0) { + const image = (_a = dom.canvas.getContext("2d")) == null ? void 0 : _a.getImageData(0, 0, dom.canvas.width, dom.canvas.height); + const rec = { id: 0, name: dom.name.value, descriptor: (_b = current.face) == null ? void 0 : _b.embedding, image }; + await save(rec); + log2("saved face record:", rec.name, "descriptor length:", (_d = (_c = current.face) == null ? void 0 : _c.embedding) == null ? void 0 : _d.length); + log2("known face records:", await count()); + } else { + log2("invalid name"); + } +} +async function deleteRecord() { + if (current.record && current.record.id > 0) { + await remove(current.record); + } +} +async function detectFace() { + var _a, _b, _c, _d; + dom.canvas.style.height = ""; + (_a = dom.canvas.getContext("2d")) == null ? void 0 : _a.clearRect(0, 0, options.minSize, options.minSize); + if (!((_b = current == null ? void 0 : current.face) == null ? void 0 : _b.tensor) || !((_c = current == null ? void 0 : current.face) == null ? void 0 : _c.embedding)) + return false; + console.log("face record:", current.face); + log2(`detected face: ${current.face.gender} ${current.face.age || 0}y distance ${100 * (current.face.distance || 0)}cm/${Math.round(100 * (current.face.distance || 0) / 2.54)}in`); + await human.tf.browser.toPixels(current.face.tensor, dom.canvas); + if (await count() === 0) { + log2("face database is empty: nothing to compare face with"); + document.body.style.background = "black"; + dom.delete.style.display = "none"; + return false; + } + const db2 = await load(); + const descriptors = db2.map((rec) => rec.descriptor).filter((desc) => desc.length > 0); + const res = human.match.find(current.face.embedding, descriptors, matchOptions); + current.record = db2[res.index] || null; + if (current.record) { + log2(`best match: ${current.record.name} | id: ${current.record.id} | similarity: ${Math.round(1e3 * res.similarity) / 10}%`); + dom.name.value = current.record.name; + dom.source.style.display = ""; + (_d = dom.source.getContext("2d")) == null ? void 0 : _d.putImageData(current.record.image, 0, 0); + } + document.body.style.background = res.similarity > options.threshold ? "darkgreen" : "maroon"; + return res.similarity > options.threshold; +} +async function main() { + var _a, _b, _c, _d; + ok.faceCount.status = false; + ok.faceConfidence.status = false; + ok.facingCenter.status = false; + ok.blinkDetected.status = false; + ok.faceSize.status = false; + ok.antispoofCheck.status = false; + ok.livenessCheck.status = false; + ok.age.status = false; + ok.gender.status = false; + ok.elapsedMs.val = 0; + dom.match.style.display = "none"; + dom.retry.style.display = "none"; + dom.source.style.display = "none"; + dom.canvas.style.height = "50%"; + document.body.style.background = "black"; + await webCam(); + await detectionLoop(); + startTime = human.now(); + current.face = await validationLoop(); + dom.canvas.width = ((_b = (_a = current.face) == null ? void 0 : _a.tensor) == null ? void 0 : _b.shape[1]) || options.minSize; + dom.canvas.height = ((_d = (_c = current.face) == null ? void 0 : _c.tensor) == null ? void 0 : _d.shape[0]) || options.minSize; + dom.source.width = dom.canvas.width; + dom.source.height = dom.canvas.height; + dom.canvas.style.width = ""; + dom.match.style.display = "flex"; + dom.save.style.display = "flex"; + dom.delete.style.display = "flex"; + dom.retry.style.display = "block"; + if (!allOk()) { + log2("did not find valid face"); + return false; + } + return detectFace(); +} +async function init() { + var _a, _b; + log2("human version:", human.version, "| tfjs version:", human.tf.version["tfjs-core"]); + log2("options:", JSON.stringify(options).replace(/{|}|"|\[|\]/g, "").replace(/,/g, " ")); + log2("initializing webcam..."); + await webCam(); + log2("loading human models..."); + await human.load(); + log2("initializing human..."); + log2("face embedding model:", humanConfig.face.description.enabled ? "faceres" : "", ((_a = humanConfig.face["mobilefacenet"]) == null ? void 0 : _a.enabled) ? "mobilefacenet" : "", ((_b = humanConfig.face["insightface"]) == null ? void 0 : _b.enabled) ? "insightface" : ""); + log2("loading face database..."); + log2("known face records:", await count()); + dom.retry.addEventListener("click", main); + dom.save.addEventListener("click", saveRecords); + dom.delete.addEventListener("click", deleteRecord); + await human.warmup(); + await main(); +} +window.onload = init; //# sourceMappingURL=index.js.map diff --git a/demo/faceid/index.js.map b/demo/faceid/index.js.map index e15df82b..3f5d4efb 100644 --- a/demo/faceid/index.js.map +++ b/demo/faceid/index.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["index.ts", "indexdb.ts"], "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport * as H from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\nimport * as indexDb from './indexdb'; // methods to deal with indexdb\n\nconst humanConfig = { // user configuration for human, used to fine-tune behavior\n cacheSensitivity: 0,\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: true }, // lets run with histogram equilizer\n debug: true,\n face: {\n enabled: true,\n detector: { rotation: true, return: true, cropFactor: 1.6, mask: false }, // return tensor is used to get detected face image\n description: { enabled: true }, // default model for face descriptor extraction is faceres\n // mobilefacenet: { enabled: true, modelPath: 'https://vladmandic.github.io/human-models/models/mobilefacenet.json' }, // alternative model\n // insightface: { enabled: true, modelPath: 'https://vladmandic.github.io/insightface/models/insightface-mobilenet-swish.json' }, // alternative model\n iris: { enabled: true }, // needed to determine gaze direction\n emotion: { enabled: false }, // not needed\n antispoof: { enabled: true }, // enable optional antispoof module\n liveness: { enabled: true }, // enable optional liveness module\n },\n body: { enabled: false },\n hand: { enabled: false },\n object: { enabled: false },\n gesture: { enabled: true }, // parses face and iris gestures\n};\n\n// const matchOptions = { order: 2, multiplier: 1000, min: 0.0, max: 1.0 }; // for embedding model\nconst matchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }; // for faceres model\n\nconst options = {\n minConfidence: 0.6, // overal face confidence for box, face, gender, real, live\n minSize: 224, // min input to face descriptor model before degradation\n maxTime: 30000, // max time before giving up\n blinkMin: 10, // minimum duration of a valid blink\n blinkMax: 800, // maximum duration of a valid blink\n threshold: 0.5, // minimum similarity\n distanceMin: 0.4, // closest that face is allowed to be to the cammera in cm\n distanceMax: 1.0, // farthest that face is allowed to be to the cammera in cm\n mask: humanConfig.face.detector.mask,\n rotation: humanConfig.face.detector.rotation,\n cropFactor: humanConfig.face.detector.cropFactor,\n ...matchOptions,\n};\n\nconst ok: Record = { // must meet all rules\n faceCount: { status: false, val: 0 },\n faceConfidence: { status: false, val: 0 },\n facingCenter: { status: false, val: 0 },\n lookingCenter: { status: false, val: 0 },\n blinkDetected: { status: false, val: 0 },\n faceSize: { status: false, val: 0 },\n antispoofCheck: { status: false, val: 0 },\n livenessCheck: { status: false, val: 0 },\n distance: { status: false, val: 0 },\n age: { status: false, val: 0 },\n gender: { status: false, val: 0 },\n timeout: { status: true, val: 0 },\n descriptor: { status: false, val: 0 },\n elapsedMs: { status: undefined, val: 0 }, // total time while waiting for valid face\n detectFPS: { status: undefined, val: 0 }, // mark detection fps performance\n drawFPS: { status: undefined, val: 0 }, // mark redraw fps performance\n};\n\nconst allOk = () => ok.faceCount.status\n && ok.faceSize.status\n && ok.blinkDetected.status\n && ok.facingCenter.status\n && ok.lookingCenter.status\n && ok.faceConfidence.status\n && ok.antispoofCheck.status\n && ok.livenessCheck.status\n && ok.distance.status\n && ok.descriptor.status\n && ok.age.status\n && ok.gender.status;\n\nconst current: { face: H.FaceResult | null, record: indexDb.FaceRecord | null } = { face: null, record: null }; // current face record and matched database record\n\nconst blink = { // internal timers for blink start/end/duration\n start: 0,\n end: 0,\n time: 0,\n};\n\n// let db: Array<{ name: string, source: string, embedding: number[] }> = []; // holds loaded face descriptor database\nconst human = new H.Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env.perfadd = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('fps') as HTMLPreElement,\n match: document.getElementById('match') as HTMLDivElement,\n name: document.getElementById('name') as HTMLInputElement,\n save: document.getElementById('save') as HTMLSpanElement,\n delete: document.getElementById('delete') as HTMLSpanElement,\n retry: document.getElementById('retry') as HTMLDivElement,\n source: document.getElementById('source') as HTMLCanvasElement,\n ok: document.getElementById('ok') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0 }; // holds information used to calculate performance and possible memory leaks\nlet startTime = 0;\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n console.log(...msg); // eslint-disable-line no-console\n};\n\nasync function webCam() { // initialize webcam\n // @ts-ignore resizeMode is not yet defined in tslib\n const cameraOptions: MediaStreamConstraints = { audio: false, video: { facingMode: 'user', resizeMode: 'none', width: { ideal: document.body.clientWidth } } };\n const stream: MediaStream = await navigator.mediaDevices.getUserMedia(cameraOptions);\n const ready = new Promise((resolve) => { dom.video.onloadeddata = () => resolve(true); });\n dom.video.srcObject = stream;\n void dom.video.play();\n await ready;\n dom.canvas.width = dom.video.videoWidth;\n dom.canvas.height = dom.video.videoHeight;\n dom.canvas.style.width = '50%';\n dom.canvas.style.height = '50%';\n if (human.env.initial) log('video:', dom.video.videoWidth, dom.video.videoHeight, '|', stream.getVideoTracks()[0].label);\n dom.canvas.onclick = () => { // pause when clicked on screen and resume on next click\n if (dom.video.paused) void dom.video.play();\n else dom.video.pause();\n };\n}\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n if (current.face?.tensor) human.tf.dispose(current.face.tensor); // dispose previous tensor\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const now = human.now();\n ok.detectFPS.val = Math.round(10000 / (now - timestamp.detect)) / 10;\n timestamp.detect = now;\n requestAnimationFrame(detectionLoop); // start new frame immediately\n }\n}\n\nfunction drawValidationTests() {\n let y = 32;\n for (const [key, val] of Object.entries(ok)) {\n let el = document.getElementById(`ok-${key}`);\n if (!el) {\n el = document.createElement('div');\n el.id = `ok-${key}`;\n el.innerText = key;\n el.className = 'ok';\n el.style.top = `${y}px`;\n dom.ok.appendChild(el);\n }\n if (typeof val.status === 'boolean') el.style.backgroundColor = val.status ? 'lightgreen' : 'lightcoral';\n const status = val.status ? 'ok' : 'fail';\n el.innerText = `${key}: ${val.val === 0 ? status : val.val}`;\n y += 28;\n }\n}\n\nasync function validationLoop(): Promise { // main screen refresh loop\n const interpolated = human.next(human.result); // smoothen result using last-known results\n human.draw.canvas(dom.video, dom.canvas); // draw canvas to screen\n await human.draw.all(dom.canvas, interpolated); // draw labels, boxes, lines, etc.\n const now = human.now();\n ok.drawFPS.val = Math.round(10000 / (now - timestamp.draw)) / 10;\n timestamp.draw = now;\n ok.faceCount.val = human.result.face.length;\n ok.faceCount.status = ok.faceCount.val === 1; // must be exactly detected face\n if (ok.faceCount.status) { // skip the rest if no face\n const gestures: string[] = Object.values(human.result.gesture).map((gesture: H.GestureResult) => gesture.gesture); // flatten all gestures\n if (gestures.includes('blink left eye') || gestures.includes('blink right eye')) blink.start = human.now(); // blink starts when eyes get closed\n if (blink.start > 0 && !gestures.includes('blink left eye') && !gestures.includes('blink right eye')) blink.end = human.now(); // if blink started how long until eyes are back open\n ok.blinkDetected.status = ok.blinkDetected.status || (Math.abs(blink.end - blink.start) > options.blinkMin && Math.abs(blink.end - blink.start) < options.blinkMax);\n if (ok.blinkDetected.status && blink.time === 0) blink.time = Math.trunc(blink.end - blink.start);\n ok.facingCenter.status = gestures.includes('facing center');\n ok.lookingCenter.status = gestures.includes('looking center'); // must face camera and look at camera\n ok.faceConfidence.val = human.result.face[0].faceScore || human.result.face[0].boxScore || 0;\n ok.faceConfidence.status = ok.faceConfidence.val >= options.minConfidence;\n ok.antispoofCheck.val = human.result.face[0].real || 0;\n ok.antispoofCheck.status = ok.antispoofCheck.val >= options.minConfidence;\n ok.livenessCheck.val = human.result.face[0].live || 0;\n ok.livenessCheck.status = ok.livenessCheck.val >= options.minConfidence;\n ok.faceSize.val = Math.min(human.result.face[0].box[2], human.result.face[0].box[3]);\n ok.faceSize.status = ok.faceSize.val >= options.minSize;\n ok.distance.val = human.result.face[0].distance || 0;\n ok.distance.status = (ok.distance.val >= options.distanceMin) && (ok.distance.val <= options.distanceMax);\n ok.descriptor.val = human.result.face[0].embedding?.length || 0;\n ok.descriptor.status = ok.descriptor.val > 0;\n ok.age.val = human.result.face[0].age || 0;\n ok.age.status = ok.age.val > 0;\n ok.gender.val = human.result.face[0].genderScore || 0;\n ok.gender.status = ok.gender.val >= options.minConfidence;\n }\n // run again\n ok.timeout.status = ok.elapsedMs.val <= options.maxTime;\n drawValidationTests();\n if (allOk() || !ok.timeout.status) { // all criteria met\n dom.video.pause();\n return human.result.face[0];\n }\n ok.elapsedMs.val = Math.trunc(human.now() - startTime);\n return new Promise((resolve) => {\n setTimeout(async () => {\n await validationLoop(); // run validation loop until conditions are met\n resolve(human.result.face[0]); // recursive promise resolve\n }, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n });\n}\n\nasync function saveRecords() {\n if (dom.name.value.length > 0) {\n const image = dom.canvas.getContext('2d')?.getImageData(0, 0, dom.canvas.width, dom.canvas.height) as ImageData;\n const rec = { id: 0, name: dom.name.value, descriptor: current.face?.embedding as number[], image };\n await indexDb.save(rec);\n log('saved face record:', rec.name, 'descriptor length:', current.face?.embedding?.length);\n log('known face records:', await indexDb.count());\n } else {\n log('invalid name');\n }\n}\n\nasync function deleteRecord() {\n if (current.record && current.record.id > 0) {\n await indexDb.remove(current.record);\n }\n}\n\nasync function detectFace() {\n dom.canvas.style.height = '';\n dom.canvas.getContext('2d')?.clearRect(0, 0, options.minSize, options.minSize);\n if (!current?.face?.tensor || !current?.face?.embedding) return false;\n console.log('face record:', current.face); // eslint-disable-line no-console\n log(`detected face: ${current.face.gender} ${current.face.age || 0}y distance ${100 * (current.face.distance || 0)}cm/${Math.round(100 * (current.face.distance || 0) / 2.54)}in`);\n await human.tf.browser.toPixels(current.face.tensor, dom.canvas);\n if (await indexDb.count() === 0) {\n log('face database is empty: nothing to compare face with');\n document.body.style.background = 'black';\n dom.delete.style.display = 'none';\n return false;\n }\n const db = await indexDb.load();\n const descriptors = db.map((rec) => rec.descriptor).filter((desc) => desc.length > 0);\n const res = human.match.find(current.face.embedding, descriptors, matchOptions);\n current.record = db[res.index] || null;\n if (current.record) {\n log(`best match: ${current.record.name} | id: ${current.record.id} | similarity: ${Math.round(1000 * res.similarity) / 10}%`);\n dom.name.value = current.record.name;\n dom.source.style.display = '';\n dom.source.getContext('2d')?.putImageData(current.record.image, 0, 0);\n }\n document.body.style.background = res.similarity > options.threshold ? 'darkgreen' : 'maroon';\n return res.similarity > options.threshold;\n}\n\nasync function main() { // main entry point\n ok.faceCount.status = false;\n ok.faceConfidence.status = false;\n ok.facingCenter.status = false;\n ok.blinkDetected.status = false;\n ok.faceSize.status = false;\n ok.antispoofCheck.status = false;\n ok.livenessCheck.status = false;\n ok.age.status = false;\n ok.gender.status = false;\n ok.elapsedMs.val = 0;\n dom.match.style.display = 'none';\n dom.retry.style.display = 'none';\n dom.source.style.display = 'none';\n dom.canvas.style.height = '50%';\n document.body.style.background = 'black';\n await webCam();\n await detectionLoop(); // start detection loop\n startTime = human.now();\n current.face = await validationLoop(); // start validation loop\n dom.canvas.width = current.face?.tensor?.shape[1] || options.minSize;\n dom.canvas.height = current.face?.tensor?.shape[0] || options.minSize;\n dom.source.width = dom.canvas.width;\n dom.source.height = dom.canvas.height;\n dom.canvas.style.width = '';\n dom.match.style.display = 'flex';\n dom.save.style.display = 'flex';\n dom.delete.style.display = 'flex';\n dom.retry.style.display = 'block';\n if (!allOk()) { // is all criteria met?\n log('did not find valid face');\n return false;\n }\n return detectFace();\n}\n\nasync function init() {\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('options:', JSON.stringify(options).replace(/{|}|\"|\\[|\\]/g, '').replace(/,/g, ' '));\n log('initializing webcam...');\n await webCam(); // start webcam\n log('loading human models...');\n await human.load(); // preload all models\n log('initializing human...');\n log('face embedding model:', humanConfig.face.description.enabled ? 'faceres' : '', humanConfig.face['mobilefacenet']?.enabled ? 'mobilefacenet' : '', humanConfig.face['insightface']?.enabled ? 'insightface' : '');\n log('loading face database...');\n log('known face records:', await indexDb.count());\n dom.retry.addEventListener('click', main);\n dom.save.addEventListener('click', saveRecords);\n dom.delete.addEventListener('click', deleteRecord);\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await main();\n}\n\nwindow.onload = init;\n", "let db: IDBDatabase; // instance of indexdb\n\nconst database = 'human';\nconst table = 'person';\n\nexport interface FaceRecord { id: number, name: string, descriptor: number[], image: ImageData }\n\nconst log = (...msg) => console.log('indexdb', ...msg); // eslint-disable-line no-console\n\nexport async function open() {\n if (db) return true;\n return new Promise((resolve) => {\n const request: IDBOpenDBRequest = indexedDB.open(database, 1);\n request.onerror = (evt) => log('error:', evt);\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => { // create if doesnt exist\n log('create:', evt.target);\n db = (evt.target as IDBOpenDBRequest).result;\n db.createObjectStore(table, { keyPath: 'id', autoIncrement: true });\n };\n request.onsuccess = (evt) => { // open\n db = (evt.target as IDBOpenDBRequest).result;\n log('open:', db);\n resolve(true);\n };\n });\n}\n\nexport async function load(): Promise {\n const faceDB: FaceRecord[] = [];\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const cursor: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).openCursor(null, 'next');\n cursor.onerror = (evt) => log('load error:', evt);\n cursor.onsuccess = (evt) => {\n if ((evt.target as IDBRequest).result) {\n faceDB.push((evt.target as IDBRequest).result.value);\n (evt.target as IDBRequest).result.continue();\n } else {\n resolve(faceDB);\n }\n };\n });\n}\n\nexport async function count(): Promise {\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const store: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).count();\n store.onerror = (evt) => log('count error:', evt);\n store.onsuccess = () => resolve(store.result);\n });\n}\n\nexport async function save(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n const newRecord = { name: faceRecord.name, descriptor: faceRecord.descriptor, image: faceRecord.image }; // omit id as its autoincrement\n db.transaction([table], 'readwrite').objectStore(table).put(newRecord);\n log('save:', newRecord);\n}\n\nexport async function remove(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n db.transaction([table], 'readwrite').objectStore(table).delete(faceRecord.id); // delete based on id\n log('delete:', faceRecord);\n}\n"], - "mappings": "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", - "names": ["H", "db", "database", "table", "log", "msg", "open", "resolve", "request", "evt", "load", "faceDB", "cursor", "count", "store", "save", "faceRecord", "newRecord", "remove", "humanConfig", "matchOptions", "options", "ok", "allOk", "current", "blink", "human", "dom", "timestamp", "startTime", "log", "msg", "webCam", "cameraOptions", "stream", "ready", "resolve", "detectionLoop", "_a", "now", "drawValidationTests", "y", "key", "val", "el", "status", "validationLoop", "interpolated", "gestures", "gesture", "saveRecords", "_b", "_c", "_d", "image", "rec", "save", "count", "deleteRecord", "remove", "detectFace", "db", "load", "descriptors", "desc", "res", "main", "init"] + "mappings": ";;;;;;;;AASA,YAAY,OAAO;;;ACTnB,IAAI;AAEJ,IAAM,WAAW;AACjB,IAAM,QAAQ;AAId,IAAM,MAAM,IAAI,QAAQ,QAAQ,IAAI,WAAW,GAAG,GAAG;AAErD,eAAsB,OAAO;AAC3B,MAAI;AAAI,WAAO;AACf,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,UAA4B,UAAU,KAAK,UAAU,CAAC;AAC5D,YAAQ,UAAU,CAAC,QAAQ,IAAI,UAAU,GAAG;AAC5C,YAAQ,kBAAkB,CAAC,QAA+B;AACxD,UAAI,WAAW,IAAI,MAAM;AACzB,WAAM,IAAI,OAA4B;AACtC,SAAG,kBAAkB,OAAO,EAAE,SAAS,MAAM,eAAe,KAAK,CAAC;AAAA,IACpE;AACA,YAAQ,YAAY,CAAC,QAAQ;AAC3B,WAAM,IAAI,OAA4B;AACtC,UAAI,SAAS,EAAE;AACf,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,OAA8B;AAClD,QAAM,SAAuB,CAAC;AAC9B,MAAI,CAAC;AAAI,UAAM,KAAK;AACpB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAqB,GAAG,YAAY,CAAC,KAAK,GAAG,WAAW,EAAE,YAAY,KAAK,EAAE,WAAW,MAAM,MAAM;AAC1G,WAAO,UAAU,CAAC,QAAQ,IAAI,eAAe,GAAG;AAChD,WAAO,YAAY,CAAC,QAAQ;AAC1B,UAAK,IAAI,OAAsB,QAAQ;AACrC,eAAO,KAAM,IAAI,OAAsB,OAAO,KAAK;AACnD,QAAC,IAAI,OAAsB,OAAO,SAAS;AAAA,MAC7C,OAAO;AACL,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,QAAyB;AAC7C,MAAI,CAAC;AAAI,UAAM,KAAK;AACpB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAoB,GAAG,YAAY,CAAC,KAAK,GAAG,WAAW,EAAE,YAAY,KAAK,EAAE,MAAM;AACxF,UAAM,UAAU,CAAC,QAAQ,IAAI,gBAAgB,GAAG;AAChD,UAAM,YAAY,MAAM,QAAQ,MAAM,MAAM;AAAA,EAC9C,CAAC;AACH;AAEA,eAAsB,KAAK,YAAwB;AACjD,MAAI,CAAC;AAAI,UAAM,KAAK;AACpB,QAAM,YAAY,EAAE,MAAM,WAAW,MAAM,YAAY,WAAW,YAAY,OAAO,WAAW,MAAM;AACtG,KAAG,YAAY,CAAC,KAAK,GAAG,WAAW,EAAE,YAAY,KAAK,EAAE,IAAI,SAAS;AACrE,MAAI,SAAS,SAAS;AACxB;AAEA,eAAsB,OAAO,YAAwB;AACnD,MAAI,CAAC;AAAI,UAAM,KAAK;AACpB,KAAG,YAAY,CAAC,KAAK,GAAG,WAAW,EAAE,YAAY,KAAK,EAAE,OAAO,WAAW,EAAE;AAC5E,MAAI,WAAW,UAAU;AAC3B;;;ADpDA,IAAM,cAAc;AAAA,EAClB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,QAAQ,EAAE,SAAS,MAAM,cAAc,KAAK;AAAA,EAC5C,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU,EAAE,UAAU,MAAM,QAAQ,MAAM,YAAY,KAAK,MAAM,MAAM;AAAA,IACvE,aAAa,EAAE,SAAS,KAAK;AAAA,IAG7B,MAAM,EAAE,SAAS,KAAK;AAAA,IACtB,SAAS,EAAE,SAAS,MAAM;AAAA,IAC1B,WAAW,EAAE,SAAS,KAAK;AAAA,IAC3B,UAAU,EAAE,SAAS,KAAK;AAAA,EAC5B;AAAA,EACA,MAAM,EAAE,SAAS,MAAM;AAAA,EACvB,MAAM,EAAE,SAAS,MAAM;AAAA,EACvB,QAAQ,EAAE,SAAS,MAAM;AAAA,EACzB,SAAS,EAAE,SAAS,KAAK;AAC3B;AAGA,IAAM,eAAe,EAAE,OAAO,GAAG,YAAY,IAAI,KAAK,KAAK,KAAK,IAAI;AAEpE,IAAM,UAAU;AAAA,EACd,eAAe;AAAA,EACf,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,MAAM,YAAY,KAAK,SAAS;AAAA,EAChC,UAAU,YAAY,KAAK,SAAS;AAAA,EACpC,YAAY,YAAY,KAAK,SAAS;AAAA,EACtC,GAAG;AACL;AAEA,IAAM,KAAmE;AAAA,EACvE,WAAW,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACnC,gBAAgB,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACxC,cAAc,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACtC,eAAe,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACvC,eAAe,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACvC,UAAU,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EAClC,gBAAgB,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACxC,eAAe,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACvC,UAAU,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EAClC,KAAK,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EAC7B,QAAQ,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EAChC,SAAS,EAAE,QAAQ,MAAM,KAAK,EAAE;AAAA,EAChC,YAAY,EAAE,QAAQ,OAAO,KAAK,EAAE;AAAA,EACpC,WAAW,EAAE,QAAQ,QAAW,KAAK,EAAE;AAAA,EACvC,WAAW,EAAE,QAAQ,QAAW,KAAK,EAAE;AAAA,EACvC,SAAS,EAAE,QAAQ,QAAW,KAAK,EAAE;AACvC;AAEA,IAAM,QAAQ,MAAM,GAAG,UAAU,UAC5B,GAAG,SAAS,UACZ,GAAG,cAAc,UACjB,GAAG,aAAa,UAChB,GAAG,cAAc,UACjB,GAAG,eAAe,UAClB,GAAG,eAAe,UAClB,GAAG,cAAc,UACjB,GAAG,SAAS,UACZ,GAAG,WAAW,UACd,GAAG,IAAI,UACP,GAAG,OAAO;AAEf,IAAM,UAA4E,EAAE,MAAM,MAAM,QAAQ,KAAK;AAE7G,IAAM,QAAQ;AAAA,EACZ,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR;AAGA,IAAM,QAAQ,IAAM,QAAM,WAAW;AAErC,MAAM,IAAI,UAAU;AACpB,MAAM,KAAK,QAAQ,OAAO;AAC1B,MAAM,KAAK,QAAQ,aAAa;AAEhC,IAAM,MAAM;AAAA,EACV,OAAO,SAAS,eAAe,OAAO;AAAA,EACtC,QAAQ,SAAS,eAAe,QAAQ;AAAA,EACxC,KAAK,SAAS,eAAe,KAAK;AAAA,EAClC,KAAK,SAAS,eAAe,KAAK;AAAA,EAClC,OAAO,SAAS,eAAe,OAAO;AAAA,EACtC,MAAM,SAAS,eAAe,MAAM;AAAA,EACpC,MAAM,SAAS,eAAe,MAAM;AAAA,EACpC,QAAQ,SAAS,eAAe,QAAQ;AAAA,EACxC,OAAO,SAAS,eAAe,OAAO;AAAA,EACtC,QAAQ,SAAS,eAAe,QAAQ;AAAA,EACxC,IAAI,SAAS,eAAe,IAAI;AAClC;AACA,IAAM,YAAY,EAAE,QAAQ,GAAG,MAAM,EAAE;AACvC,IAAI,YAAY;AAEhB,IAAMA,OAAM,IAAI,QAAQ;AACtB,MAAI,IAAI,aAAa,IAAI,KAAK,GAAG,IAAI;AACrC,UAAQ,IAAI,GAAG,GAAG;AACpB;AAEA,eAAe,SAAS;AAEtB,QAAM,gBAAwC,EAAE,OAAO,OAAO,OAAO,EAAE,YAAY,QAAQ,YAAY,QAAQ,OAAO,EAAE,OAAO,SAAS,KAAK,YAAY,EAAE,EAAE;AAC7J,QAAM,SAAsB,MAAM,UAAU,aAAa,aAAa,aAAa;AACnF,QAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AAAE,QAAI,MAAM,eAAe,MAAM,QAAQ,IAAI;AAAA,EAAG,CAAC;AACxF,MAAI,MAAM,YAAY;AACtB,OAAK,IAAI,MAAM,KAAK;AACpB,QAAM;AACN,MAAI,OAAO,QAAQ,IAAI,MAAM;AAC7B,MAAI,OAAO,SAAS,IAAI,MAAM;AAC9B,MAAI,OAAO,MAAM,QAAQ;AACzB,MAAI,OAAO,MAAM,SAAS;AAC1B,MAAI,MAAM,IAAI;AAAS,IAAAA,KAAI,UAAU,IAAI,MAAM,YAAY,IAAI,MAAM,aAAa,KAAK,OAAO,eAAe,EAAE,GAAG,KAAK;AACvH,MAAI,OAAO,UAAU,MAAM;AACzB,QAAI,IAAI,MAAM;AAAQ,WAAK,IAAI,MAAM,KAAK;AAAA;AACrC,UAAI,MAAM,MAAM;AAAA,EACvB;AACF;AAEA,eAAe,gBAAgB;AA3I/B;AA4IE,MAAI,CAAC,IAAI,MAAM,QAAQ;AACrB,SAAI,aAAQ,SAAR,mBAAc;AAAQ,YAAM,GAAG,QAAQ,QAAQ,KAAK,MAAM;AAC9D,UAAM,MAAM,OAAO,IAAI,KAAK;AAC5B,UAAM,MAAM,MAAM,IAAI;AACtB,OAAG,UAAU,MAAM,KAAK,MAAM,OAAS,MAAM,UAAU,OAAO,IAAI;AAClE,cAAU,SAAS;AACnB,0BAAsB,aAAa;AAAA,EACrC;AACF;AAEA,SAAS,sBAAsB;AAC7B,MAAI,IAAI;AACR,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,EAAE,GAAG;AAC3C,QAAI,KAAK,SAAS,eAAe,MAAM,KAAK;AAC5C,QAAI,CAAC,IAAI;AACP,WAAK,SAAS,cAAc,KAAK;AACjC,SAAG,KAAK,MAAM;AACd,SAAG,YAAY;AACf,SAAG,YAAY;AACf,SAAG,MAAM,MAAM,GAAG;AAClB,UAAI,GAAG,YAAY,EAAE;AAAA,IACvB;AACA,QAAI,OAAO,IAAI,WAAW;AAAW,SAAG,MAAM,kBAAkB,IAAI,SAAS,eAAe;AAC5F,UAAM,SAAS,IAAI,SAAS,OAAO;AACnC,OAAG,YAAY,GAAG,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI;AACvD,SAAK;AAAA,EACP;AACF;AAEA,eAAe,iBAAwC;AAzKvD;AA0KE,QAAM,eAAe,MAAM,KAAK,MAAM,MAAM;AAC5C,QAAM,KAAK,OAAO,IAAI,OAAO,IAAI,MAAM;AACvC,QAAM,MAAM,KAAK,IAAI,IAAI,QAAQ,YAAY;AAC7C,QAAM,MAAM,MAAM,IAAI;AACtB,KAAG,QAAQ,MAAM,KAAK,MAAM,OAAS,MAAM,UAAU,KAAK,IAAI;AAC9D,YAAU,OAAO;AACjB,KAAG,UAAU,MAAM,MAAM,OAAO,KAAK;AACrC,KAAG,UAAU,SAAS,GAAG,UAAU,QAAQ;AAC3C,MAAI,GAAG,UAAU,QAAQ;AACvB,UAAM,WAAqB,OAAO,OAAO,MAAM,OAAO,OAAO,EAAE,IAAI,CAAC,YAA6B,QAAQ,OAAO;AAChH,QAAI,SAAS,SAAS,gBAAgB,KAAK,SAAS,SAAS,iBAAiB;AAAG,YAAM,QAAQ,MAAM,IAAI;AACzG,QAAI,MAAM,QAAQ,KAAK,CAAC,SAAS,SAAS,gBAAgB,KAAK,CAAC,SAAS,SAAS,iBAAiB;AAAG,YAAM,MAAM,MAAM,IAAI;AAC5H,OAAG,cAAc,SAAS,GAAG,cAAc,UAAW,KAAK,IAAI,MAAM,MAAM,MAAM,KAAK,IAAI,QAAQ,YAAY,KAAK,IAAI,MAAM,MAAM,MAAM,KAAK,IAAI,QAAQ;AAC1J,QAAI,GAAG,cAAc,UAAU,MAAM,SAAS;AAAG,YAAM,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK;AAChG,OAAG,aAAa,SAAS,SAAS,SAAS,eAAe;AAC1D,OAAG,cAAc,SAAS,SAAS,SAAS,gBAAgB;AAC5D,OAAG,eAAe,MAAM,MAAM,OAAO,KAAK,GAAG,aAAa,MAAM,OAAO,KAAK,GAAG,YAAY;AAC3F,OAAG,eAAe,SAAS,GAAG,eAAe,OAAO,QAAQ;AAC5D,OAAG,eAAe,MAAM,MAAM,OAAO,KAAK,GAAG,QAAQ;AACrD,OAAG,eAAe,SAAS,GAAG,eAAe,OAAO,QAAQ;AAC5D,OAAG,cAAc,MAAM,MAAM,OAAO,KAAK,GAAG,QAAQ;AACpD,OAAG,cAAc,SAAS,GAAG,cAAc,OAAO,QAAQ;AAC1D,OAAG,SAAS,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,GAAG,IAAI,IAAI,MAAM,OAAO,KAAK,GAAG,IAAI,EAAE;AACnF,OAAG,SAAS,SAAS,GAAG,SAAS,OAAO,QAAQ;AAChD,OAAG,SAAS,MAAM,MAAM,OAAO,KAAK,GAAG,YAAY;AACnD,OAAG,SAAS,SAAU,GAAG,SAAS,OAAO,QAAQ,eAAiB,GAAG,SAAS,OAAO,QAAQ;AAC7F,OAAG,WAAW,QAAM,WAAM,OAAO,KAAK,GAAG,cAArB,mBAAgC,WAAU;AAC9D,OAAG,WAAW,SAAS,GAAG,WAAW,MAAM;AAC3C,OAAG,IAAI,MAAM,MAAM,OAAO,KAAK,GAAG,OAAO;AACzC,OAAG,IAAI,SAAS,GAAG,IAAI,MAAM;AAC7B,OAAG,OAAO,MAAM,MAAM,OAAO,KAAK,GAAG,eAAe;AACpD,OAAG,OAAO,SAAS,GAAG,OAAO,OAAO,QAAQ;AAAA,EAC9C;AAEA,KAAG,QAAQ,SAAS,GAAG,UAAU,OAAO,QAAQ;AAChD,sBAAoB;AACpB,MAAI,MAAM,KAAK,CAAC,GAAG,QAAQ,QAAQ;AACjC,QAAI,MAAM,MAAM;AAChB,WAAO,MAAM,OAAO,KAAK;AAAA,EAC3B;AACA,KAAG,UAAU,MAAM,KAAK,MAAM,MAAM,IAAI,IAAI,SAAS;AACrD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,YAAY;AACrB,YAAM,eAAe;AACrB,cAAQ,MAAM,OAAO,KAAK,EAAE;AAAA,IAC9B,GAAG,EAAE;AAAA,EACP,CAAC;AACH;AAEA,eAAe,cAAc;AA3N7B;AA4NE,MAAI,IAAI,KAAK,MAAM,SAAS,GAAG;AAC7B,UAAM,SAAQ,SAAI,OAAO,WAAW,IAAI,MAA1B,mBAA6B,aAAa,GAAG,GAAG,IAAI,OAAO,OAAO,IAAI,OAAO;AAC3F,UAAM,MAAM,EAAE,IAAI,GAAG,MAAM,IAAI,KAAK,OAAO,aAAY,aAAQ,SAAR,mBAAc,WAAuB,MAAM;AAClG,UAAc,KAAK,GAAG;AACtB,IAAAA,KAAI,sBAAsB,IAAI,MAAM,uBAAsB,mBAAQ,SAAR,mBAAc,cAAd,mBAAyB,MAAM;AACzF,IAAAA,KAAI,uBAAuB,MAAc,MAAM,CAAC;AAAA,EAClD,OAAO;AACL,IAAAA,KAAI,cAAc;AAAA,EACpB;AACF;AAEA,eAAe,eAAe;AAC5B,MAAI,QAAQ,UAAU,QAAQ,OAAO,KAAK,GAAG;AAC3C,UAAc,OAAO,QAAQ,MAAM;AAAA,EACrC;AACF;AAEA,eAAe,aAAa;AA7O5B;AA8OE,MAAI,OAAO,MAAM,SAAS;AAC1B,YAAI,OAAO,WAAW,IAAI,MAA1B,mBAA6B,UAAU,GAAG,GAAG,QAAQ,SAAS,QAAQ;AACtE,MAAI,GAAC,wCAAS,SAAT,mBAAe,WAAU,GAAC,wCAAS,SAAT,mBAAe;AAAW,WAAO;AAChE,UAAQ,IAAI,gBAAgB,QAAQ,IAAI;AACxC,EAAAA,KAAI,kBAAkB,QAAQ,KAAK,UAAU,QAAQ,KAAK,OAAO,eAAe,OAAO,QAAQ,KAAK,YAAY,QAAQ,KAAK,MAAM,OAAO,QAAQ,KAAK,YAAY,KAAK,IAAI,KAAK;AACjL,QAAM,MAAM,GAAG,QAAQ,SAAS,QAAQ,KAAK,QAAQ,IAAI,MAAM;AAC/D,MAAI,MAAc,MAAM,MAAM,GAAG;AAC/B,IAAAA,KAAI,sDAAsD;AAC1D,aAAS,KAAK,MAAM,aAAa;AACjC,QAAI,OAAO,MAAM,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,QAAMC,MAAK,MAAc,KAAK;AAC9B,QAAM,cAAcA,IAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACpF,QAAM,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,WAAW,aAAa,YAAY;AAC9E,UAAQ,SAASA,IAAG,IAAI,UAAU;AAClC,MAAI,QAAQ,QAAQ;AAClB,IAAAD,KAAI,eAAe,QAAQ,OAAO,cAAc,QAAQ,OAAO,oBAAoB,KAAK,MAAM,MAAO,IAAI,UAAU,IAAI,KAAK;AAC5H,QAAI,KAAK,QAAQ,QAAQ,OAAO;AAChC,QAAI,OAAO,MAAM,UAAU;AAC3B,cAAI,OAAO,WAAW,IAAI,MAA1B,mBAA6B,aAAa,QAAQ,OAAO,OAAO,GAAG;AAAA,EACrE;AACA,WAAS,KAAK,MAAM,aAAa,IAAI,aAAa,QAAQ,YAAY,cAAc;AACpF,SAAO,IAAI,aAAa,QAAQ;AAClC;AAEA,eAAe,OAAO;AAxQtB;AAyQE,KAAG,UAAU,SAAS;AACtB,KAAG,eAAe,SAAS;AAC3B,KAAG,aAAa,SAAS;AACzB,KAAG,cAAc,SAAS;AAC1B,KAAG,SAAS,SAAS;AACrB,KAAG,eAAe,SAAS;AAC3B,KAAG,cAAc,SAAS;AAC1B,KAAG,IAAI,SAAS;AAChB,KAAG,OAAO,SAAS;AACnB,KAAG,UAAU,MAAM;AACnB,MAAI,MAAM,MAAM,UAAU;AAC1B,MAAI,MAAM,MAAM,UAAU;AAC1B,MAAI,OAAO,MAAM,UAAU;AAC3B,MAAI,OAAO,MAAM,SAAS;AAC1B,WAAS,KAAK,MAAM,aAAa;AACjC,QAAM,OAAO;AACb,QAAM,cAAc;AACpB,cAAY,MAAM,IAAI;AACtB,UAAQ,OAAO,MAAM,eAAe;AACpC,MAAI,OAAO,UAAQ,mBAAQ,SAAR,mBAAc,WAAd,mBAAsB,MAAM,OAAM,QAAQ;AAC7D,MAAI,OAAO,WAAS,mBAAQ,SAAR,mBAAc,WAAd,mBAAsB,MAAM,OAAM,QAAQ;AAC9D,MAAI,OAAO,QAAQ,IAAI,OAAO;AAC9B,MAAI,OAAO,SAAS,IAAI,OAAO;AAC/B,MAAI,OAAO,MAAM,QAAQ;AACzB,MAAI,MAAM,MAAM,UAAU;AAC1B,MAAI,KAAK,MAAM,UAAU;AACzB,MAAI,OAAO,MAAM,UAAU;AAC3B,MAAI,MAAM,MAAM,UAAU;AAC1B,MAAI,CAAC,MAAM,GAAG;AACZ,IAAAA,KAAI,yBAAyB;AAC7B,WAAO;AAAA,EACT;AACA,SAAO,WAAW;AACpB;AAEA,eAAe,OAAO;AA5StB;AA6SE,EAAAA,KAAI,kBAAkB,MAAM,SAAS,mBAAmB,MAAM,GAAG,QAAQ,YAAY;AACrF,EAAAA,KAAI,YAAY,KAAK,UAAU,OAAO,EAAE,QAAQ,gBAAgB,EAAE,EAAE,QAAQ,MAAM,GAAG,CAAC;AACtF,EAAAA,KAAI,wBAAwB;AAC5B,QAAM,OAAO;AACb,EAAAA,KAAI,yBAAyB;AAC7B,QAAM,MAAM,KAAK;AACjB,EAAAA,KAAI,uBAAuB;AAC3B,EAAAA,KAAI,yBAAyB,YAAY,KAAK,YAAY,UAAU,YAAY,MAAI,iBAAY,KAAK,qBAAjB,mBAAmC,WAAU,kBAAkB,MAAI,iBAAY,KAAK,mBAAjB,mBAAiC,WAAU,gBAAgB,EAAE;AACpN,EAAAA,KAAI,0BAA0B;AAC9B,EAAAA,KAAI,uBAAuB,MAAc,MAAM,CAAC;AAChD,MAAI,MAAM,iBAAiB,SAAS,IAAI;AACxC,MAAI,KAAK,iBAAiB,SAAS,WAAW;AAC9C,MAAI,OAAO,iBAAiB,SAAS,YAAY;AACjD,QAAM,MAAM,OAAO;AACnB,QAAM,KAAK;AACb;AAEA,OAAO,SAAS;", + "names": ["log", "db"] } diff --git a/demo/index.js b/demo/index.js index 65fbdd66..934d159b 100644 --- a/demo/index.js +++ b/demo/index.js @@ -977,8 +977,7 @@ async function main() { if (ui.modelsPreload && !ui.useWorker) { status('loading'); await human.load(userConfig); // this is not required, just pre-loads all models - const loaded = Object.keys(human.models).filter((a) => human.models[a]); - log('demo loaded models:', loaded); + log('demo loaded models:', human.models.loaded()); } else { await human.init(); } diff --git a/demo/nodejs/node-canvas.js b/demo/nodejs/node-canvas.js index ca250c0b..2a49e589 100644 --- a/demo/nodejs/node-canvas.js +++ b/demo/nodejs/node-canvas.js @@ -35,7 +35,7 @@ async function main() { log.info('Human:', human.version, 'TF:', tf.version_core); await human.load(); // pre-load models - log.info('Loaded models:', Object.keys(human.models).filter((a) => human.models[a])); + log.info('Loaded models:', human.models.loaded()); log.info('Memory state:', human.tf.engine().memory()); // parse cmdline diff --git a/demo/nodejs/node-event.js b/demo/nodejs/node-event.js index 5d46777c..6703965c 100644 --- a/demo/nodejs/node-event.js +++ b/demo/nodejs/node-event.js @@ -65,8 +65,7 @@ async function main() { }); human.events.addEventListener('load', () => { - const loaded = Object.keys(human.models).filter((a) => human.models[a]); - log.info('Event Loaded:', loaded, human.tf.engine().memory()); + log.info('Event Loaded:', human.models.loaded(), human.tf.engine().memory()); }); human.events.addEventListener('image', () => { diff --git a/demo/nodejs/node-similarity.js b/demo/nodejs/node-similarity.js index e9dbdf3d..902caf7d 100644 --- a/demo/nodejs/node-similarity.js +++ b/demo/nodejs/node-similarity.js @@ -27,8 +27,7 @@ async function init() { await human.tf.ready(); log.info('Human:', human.version, 'TF:', tf.version_core); await human.load(); - const loaded = Object.keys(human.models).filter((a) => human.models[a]); - log.info('Loaded:', loaded); + log.info('Loaded:', human.models.loaded()); log.info('Memory state:', human.tf.engine().memory()); } diff --git a/demo/nodejs/node.js b/demo/nodejs/node.js index 6e02405d..24df7e20 100644 --- a/demo/nodejs/node.js +++ b/demo/nodejs/node.js @@ -49,8 +49,7 @@ async function init() { log.info('Human:', human.version); // log.info('Active Configuration', human.config); await human.load(); - const loaded = Object.keys(human.models).filter((a) => human.models[a]); - log.info('Loaded:', loaded); + log.info('Loaded:', human.models.loaded()); // log.info('Memory state:', human.tf.engine().memory()); log.data(tf.backend().binding ? tf.backend().binding.TF_Version : null); } diff --git a/demo/nodejs/process-folder.js b/demo/nodejs/process-folder.js index fc2500b6..a066ba34 100644 --- a/demo/nodejs/process-folder.js +++ b/demo/nodejs/process-folder.js @@ -80,7 +80,7 @@ async function main() { const configErrors = await human.validate(); if (configErrors.length > 0) log.error('Configuration errors:', configErrors); await human.load(); // pre-load models - log.info('Loaded models:', Object.keys(human.models).filter((a) => human.models[a])); + log.info('Loaded models:', human.models.loaded()); const inDir = process.argv[2]; const outDir = process.argv[3]; diff --git a/demo/segmentation/index.js b/demo/segmentation/index.js index 7b9ba172..d09f3e7a 100644 --- a/demo/segmentation/index.js +++ b/demo/segmentation/index.js @@ -53,7 +53,7 @@ async function main() { await human.load(); // preload all models log('backend:', human.tf.getBackend(), '| available:', human.env.backends); log('models stats:', human.models.stats()); - log('models loaded:', Object.values(human.models).filter((model) => model !== null).length); + log('models loaded:', human.models.loaded()); await human.warmup(); // warmup function to initialize backend for future faster detection const numTensors = human.tf.engine().state.numTensors; diff --git a/demo/typescript/index.js b/demo/typescript/index.js index 0d696947..ae0b945e 100644 --- a/demo/typescript/index.js +++ b/demo/typescript/index.js @@ -4,6 +4,100 @@ author: ' */ -import*as m from"../../dist/human.esm.js";var f=1920,b={modelBasePath:"../../models",filter:{enabled:!0,equalization:!1,flip:!1,width:f},face:{enabled:!0,detector:{rotation:!0},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!0},hand:{enabled:!1},object:{enabled:!1},segmentation:{enabled:!1},gesture:{enabled:!0}},e=new m.Human(b);e.env.perfadd=!1;e.draw.options.font='small-caps 18px "Lato"';e.draw.options.lineHeight=20;var a={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),perf:document.getElementById("performance")},n={detect:0,draw:0,tensors:0,start:0},s={detectFPS:0,drawFPS:0,frames:0,averageMs:0},o=(...t)=>{a.log.innerText+=t.join(" ")+` -`,console.log(...t)},r=t=>a.fps.innerText=t,g=t=>a.perf.innerText="tensors:"+e.tf.memory().numTensors.toString()+" | performance: "+JSON.stringify(t).replace(/"|{|}/g,"").replace(/,/g," | ");async function u(){if(!a.video.paused){n.start===0&&(n.start=e.now()),await e.detect(a.video);let t=e.tf.memory().numTensors;t-n.tensors!==0&&o("allocated tensors:",t-n.tensors),n.tensors=t,s.detectFPS=Math.round(1e3*1e3/(e.now()-n.detect))/1e3,s.frames++,s.averageMs=Math.round(1e3*(e.now()-n.start)/s.frames)/1e3,s.frames%100===0&&!a.video.paused&&o("performance",{...s,tensors:n.tensors})}n.detect=e.now(),requestAnimationFrame(u)}async function p(){var d,i,c;if(!a.video.paused){let l=e.next(e.result),w=await e.image(a.video);e.draw.canvas(w.canvas,a.canvas);let v={bodyLabels:`person confidence [score] and ${(c=(i=(d=e.result)==null?void 0:d.body)==null?void 0:i[0])==null?void 0:c.keypoints.length} keypoints`};await e.draw.all(a.canvas,l,v),g(l.performance)}let t=e.now();s.drawFPS=Math.round(1e3*1e3/(t-n.draw))/1e3,n.draw=t,r(a.video.paused?"paused":`fps: ${s.detectFPS.toFixed(1).padStart(5," ")} detect | ${s.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(p,30)}async function h(){let d=(await e.webcam.enumerate())[0].deviceId;await e.webcam.start({element:a.video,crop:!0,width:f,id:d}),a.canvas.width=e.webcam.width,a.canvas.height=e.webcam.height,a.canvas.onclick=async()=>{e.webcam.paused?await e.webcam.play():e.webcam.pause()}}async function y(){o("human version:",e.version,"| tfjs version:",e.tf.version["tfjs-core"]),o("platform:",e.env.platform,"| agent:",e.env.agent),r("loading..."),await e.load(),o("backend:",e.tf.getBackend(),"| available:",e.env.backends),o("models stats:",e.models.stats()),o("models loaded:",Object.values(e.models).filter(t=>t!==null).length),o("environment",e.env),r("initializing..."),await e.warmup(),await h(),await u(),await p()}window.onload=y; + +// demo/typescript/index.ts +import * as H from "../../dist/human.esm.js"; +var width = 1920; +var humanConfig = { + modelBasePath: "../../models", + filter: { enabled: true, equalization: false, flip: false, width }, + face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } }, + body: { enabled: true }, + hand: { enabled: false }, + object: { enabled: false }, + segmentation: { enabled: false }, + gesture: { enabled: true } +}; +var human = new H.Human(humanConfig); +human.env.perfadd = false; +human.draw.options.font = 'small-caps 18px "Lato"'; +human.draw.options.lineHeight = 20; +var dom = { + video: document.getElementById("video"), + canvas: document.getElementById("canvas"), + log: document.getElementById("log"), + fps: document.getElementById("status"), + perf: document.getElementById("performance") +}; +var timestamp = { detect: 0, draw: 0, tensors: 0, start: 0 }; +var fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 0 }; +var log = (...msg) => { + dom.log.innerText += msg.join(" ") + "\n"; + console.log(...msg); +}; +var status = (msg) => dom.fps.innerText = msg; +var perf = (msg) => dom.perf.innerText = "tensors:" + human.tf.memory().numTensors.toString() + " | performance: " + JSON.stringify(msg).replace(/"|{|}/g, "").replace(/,/g, " | "); +async function detectionLoop() { + if (!dom.video.paused) { + if (timestamp.start === 0) + timestamp.start = human.now(); + await human.detect(dom.video); + const tensors = human.tf.memory().numTensors; + if (tensors - timestamp.tensors !== 0) + log("allocated tensors:", tensors - timestamp.tensors); + timestamp.tensors = tensors; + fps.detectFPS = Math.round(1e3 * 1e3 / (human.now() - timestamp.detect)) / 1e3; + fps.frames++; + fps.averageMs = Math.round(1e3 * (human.now() - timestamp.start) / fps.frames) / 1e3; + if (fps.frames % 100 === 0 && !dom.video.paused) + log("performance", { ...fps, tensors: timestamp.tensors }); + } + timestamp.detect = human.now(); + requestAnimationFrame(detectionLoop); +} +async function drawLoop() { + var _a, _b, _c; + if (!dom.video.paused) { + const interpolated = human.next(human.result); + const processed = await human.image(dom.video); + human.draw.canvas(processed.canvas, dom.canvas); + const opt = { bodyLabels: `person confidence [score] and ${(_c = (_b = (_a = human.result) == null ? void 0 : _a.body) == null ? void 0 : _b[0]) == null ? void 0 : _c.keypoints.length} keypoints` }; + await human.draw.all(dom.canvas, interpolated, opt); + perf(interpolated.performance); + } + const now = human.now(); + fps.drawFPS = Math.round(1e3 * 1e3 / (now - timestamp.draw)) / 1e3; + timestamp.draw = now; + status(dom.video.paused ? "paused" : `fps: ${fps.detectFPS.toFixed(1).padStart(5, " ")} detect | ${fps.drawFPS.toFixed(1).padStart(5, " ")} draw`); + setTimeout(drawLoop, 30); +} +async function webCam() { + const devices = await human.webcam.enumerate(); + const id = devices[0].deviceId; + await human.webcam.start({ element: dom.video, crop: true, width, id }); + dom.canvas.width = human.webcam.width; + dom.canvas.height = human.webcam.height; + dom.canvas.onclick = async () => { + if (human.webcam.paused) + await human.webcam.play(); + else + human.webcam.pause(); + }; +} +async function main() { + log("human version:", human.version, "| tfjs version:", human.tf.version["tfjs-core"]); + log("platform:", human.env.platform, "| agent:", human.env.agent); + status("loading..."); + await human.load(); + log("backend:", human.tf.getBackend(), "| available:", human.env.backends); + log("models stats:", human.models.stats()); + log("models loaded:", human.models.loaded()); + log("environment", human.env); + status("initializing..."); + await human.warmup(); + await webCam(); + await detectionLoop(); + await drawLoop(); +} +window.onload = main; //# sourceMappingURL=index.js.map diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index e5987da1..7f7b95c1 100644 --- a/demo/typescript/index.js.map +++ b/demo/typescript/index.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["index.ts"], - "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport * as H from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\n\nconst width = 1920; // used by webcam config as well as human maximum resultion // can be anything, but resolutions higher than 4k will disable internal optimizations\n\nconst humanConfig: Partial = { // user configuration for human, used to fine-tune behavior\n // backend: 'webgpu',\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: false, flip: false, width },\n face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } },\n body: { enabled: true },\n // hand: { enabled: true },\n hand: { enabled: false },\n object: { enabled: false },\n segmentation: { enabled: false },\n gesture: { enabled: true },\n};\n\nconst human = new H.Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env.perfadd = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n// human.draw.options.fillPolygons = true;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('status') as HTMLPreElement,\n perf: document.getElementById('performance') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0, tensors: 0, start: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 0 }; // holds calculated fps information for both detect and screen refresh\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n console.log(...msg); // eslint-disable-line no-console\n};\nconst status = (msg) => dom.fps.innerText = msg; // print status element\nconst perf = (msg) => dom.perf.innerText = 'tensors:' + human.tf.memory().numTensors.toString() + ' | performance: ' + JSON.stringify(msg).replace(/\"|{|}/g, '').replace(/,/g, ' | '); // print performance element\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n if (timestamp.start === 0) timestamp.start = human.now();\n // log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks\n if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak\n timestamp.tensors = tensors;\n fps.detectFPS = Math.round(1000 * 1000 / (human.now() - timestamp.detect)) / 1000;\n fps.frames++;\n fps.averageMs = Math.round(1000 * (human.now() - timestamp.start) / fps.frames) / 1000;\n if (fps.frames % 100 === 0 && !dom.video.paused) log('performance', { ...fps, tensors: timestamp.tensors });\n }\n timestamp.detect = human.now();\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nasync function drawLoop() { // main screen refresh loop\n if (!dom.video.paused) {\n const interpolated = human.next(human.result); // smoothen result using last-known results\n const processed = await human.image(dom.video); // get current video frame, but enhanced with human.filters\n human.draw.canvas(processed.canvas as HTMLCanvasElement, dom.canvas);\n\n const opt: Partial = { bodyLabels: `person confidence [score] and ${human.result?.body?.[0]?.keypoints.length} keypoints` };\n await human.draw.all(dom.canvas, interpolated, opt); // draw labels, boxes, lines, etc.\n perf(interpolated.performance); // write performance data\n }\n const now = human.now();\n fps.drawFPS = Math.round(1000 * 1000 / (now - timestamp.draw)) / 1000;\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detectFPS.toFixed(1).padStart(5, ' ')} detect | ${fps.drawFPS.toFixed(1).padStart(5, ' ')} draw`); // write status\n setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n}\n\nasync function webCam() {\n const devices = await human.webcam.enumerate();\n const id = devices[0].deviceId; // use first available video source\n await human.webcam.start({ element: dom.video, crop: true, width, id }); // use human webcam helper methods and associate webcam stream with a dom element\n dom.canvas.width = human.webcam.width;\n dom.canvas.height = human.webcam.height;\n dom.canvas.onclick = async () => { // pause when clicked on screen and resume on next click\n if (human.webcam.paused) await human.webcam.play();\n else human.webcam.pause();\n };\n}\n\nasync function main() { // main entry point\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('platform:', human.env.platform, '| agent:', human.env.agent);\n status('loading...');\n await human.load(); // preload all models\n log('backend:', human.tf.getBackend(), '| available:', human.env.backends);\n log('models stats:', human.models.stats());\n log('models loaded:', Object.values(human.models).filter((model) => model !== null).length);\n log('environment', human.env);\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await webCam(); // start webcam\n await detectionLoop(); // start detection loop\n await drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n"], - "mappings": "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", - "names": ["H", "width", "humanConfig", "human", "dom", "timestamp", "fps", "log", "msg", "status", "perf", "detectionLoop", "tensors", "drawLoop", "_a", "_b", "_c", "interpolated", "processed", "opt", "now", "webCam", "id", "main", "model"] + "sourcesContent": ["/**\n * Human demo for browsers\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\nimport * as H from '../../dist/human.esm.js'; // equivalent of @vladmandic/Human\n\nconst width = 1920; // used by webcam config as well as human maximum resultion // can be anything, but resolutions higher than 4k will disable internal optimizations\n\nconst humanConfig: Partial = { // user configuration for human, used to fine-tune behavior\n // backend: 'webgpu',\n modelBasePath: '../../models',\n filter: { enabled: true, equalization: false, flip: false, width },\n face: { enabled: true, detector: { rotation: true }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } },\n body: { enabled: true },\n // hand: { enabled: true },\n hand: { enabled: false },\n object: { enabled: false },\n segmentation: { enabled: false },\n gesture: { enabled: true },\n};\n\nconst human = new H.Human(humanConfig); // create instance of human with overrides from user configuration\n\nhuman.env.perfadd = false; // is performance data showing instant or total values\nhuman.draw.options.font = 'small-caps 18px \"Lato\"'; // set font used to draw labels when using draw methods\nhuman.draw.options.lineHeight = 20;\n// human.draw.options.fillPolygons = true;\n\nconst dom = { // grab instances of dom objects so we dont have to look them up later\n video: document.getElementById('video') as HTMLVideoElement,\n canvas: document.getElementById('canvas') as HTMLCanvasElement,\n log: document.getElementById('log') as HTMLPreElement,\n fps: document.getElementById('status') as HTMLPreElement,\n perf: document.getElementById('performance') as HTMLDivElement,\n};\nconst timestamp = { detect: 0, draw: 0, tensors: 0, start: 0 }; // holds information used to calculate performance and possible memory leaks\nconst fps = { detectFPS: 0, drawFPS: 0, frames: 0, averageMs: 0 }; // holds calculated fps information for both detect and screen refresh\n\nconst log = (...msg) => { // helper method to output messages\n dom.log.innerText += msg.join(' ') + '\\n';\n console.log(...msg); // eslint-disable-line no-console\n};\nconst status = (msg) => dom.fps.innerText = msg; // print status element\nconst perf = (msg) => dom.perf.innerText = 'tensors:' + human.tf.memory().numTensors.toString() + ' | performance: ' + JSON.stringify(msg).replace(/\"|{|}/g, '').replace(/,/g, ' | '); // print performance element\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused) {\n if (timestamp.start === 0) timestamp.start = human.now();\n // log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video); // actual detection; were not capturing output in a local variable as it can also be reached via human.result\n const tensors = human.tf.memory().numTensors; // check current tensor usage for memory leaks\n if (tensors - timestamp.tensors !== 0) log('allocated tensors:', tensors - timestamp.tensors); // printed on start and each time there is a tensor leak\n timestamp.tensors = tensors;\n fps.detectFPS = Math.round(1000 * 1000 / (human.now() - timestamp.detect)) / 1000;\n fps.frames++;\n fps.averageMs = Math.round(1000 * (human.now() - timestamp.start) / fps.frames) / 1000;\n if (fps.frames % 100 === 0 && !dom.video.paused) log('performance', { ...fps, tensors: timestamp.tensors });\n }\n timestamp.detect = human.now();\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nasync function drawLoop() { // main screen refresh loop\n if (!dom.video.paused) {\n const interpolated = human.next(human.result); // smoothen result using last-known results\n const processed = await human.image(dom.video); // get current video frame, but enhanced with human.filters\n human.draw.canvas(processed.canvas as HTMLCanvasElement, dom.canvas);\n\n const opt: Partial = { bodyLabels: `person confidence [score] and ${human.result?.body?.[0]?.keypoints.length} keypoints` };\n await human.draw.all(dom.canvas, interpolated, opt); // draw labels, boxes, lines, etc.\n perf(interpolated.performance); // write performance data\n }\n const now = human.now();\n fps.drawFPS = Math.round(1000 * 1000 / (now - timestamp.draw)) / 1000;\n timestamp.draw = now;\n status(dom.video.paused ? 'paused' : `fps: ${fps.detectFPS.toFixed(1).padStart(5, ' ')} detect | ${fps.drawFPS.toFixed(1).padStart(5, ' ')} draw`); // write status\n setTimeout(drawLoop, 30); // use to slow down refresh from max refresh rate to target of 30 fps\n}\n\nasync function webCam() {\n const devices = await human.webcam.enumerate();\n const id = devices[0].deviceId; // use first available video source\n await human.webcam.start({ element: dom.video, crop: true, width, id }); // use human webcam helper methods and associate webcam stream with a dom element\n dom.canvas.width = human.webcam.width;\n dom.canvas.height = human.webcam.height;\n dom.canvas.onclick = async () => { // pause when clicked on screen and resume on next click\n if (human.webcam.paused) await human.webcam.play();\n else human.webcam.pause();\n };\n}\n\nasync function main() { // main entry point\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('platform:', human.env.platform, '| agent:', human.env.agent);\n status('loading...');\n await human.load(); // preload all models\n log('backend:', human.tf.getBackend(), '| available:', human.env.backends);\n log('models stats:', human.models.stats());\n log('models loaded:', human.models.loaded());\n log('environment', human.env);\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await webCam(); // start webcam\n await detectionLoop(); // start detection loop\n await drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n"], + "mappings": "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", + "names": [] } diff --git a/demo/typescript/index.ts b/demo/typescript/index.ts index ed53b09b..b56bbb58 100644 --- a/demo/typescript/index.ts +++ b/demo/typescript/index.ts @@ -101,7 +101,7 @@ async function main() { // main entry point await human.load(); // preload all models log('backend:', human.tf.getBackend(), '| available:', human.env.backends); log('models stats:', human.models.stats()); - log('models loaded:', Object.values(human.models).filter((model) => model !== null).length); + log('models loaded:', human.models.loaded()); log('environment', human.env); status('initializing...'); await human.warmup(); // warmup function to initialize backend for future faster detection diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index 46f72414..0df1e74d 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -4,7 +4,271 @@ author: ' */ -var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Object.getOwnPropertyNames;var Vn=Object.prototype.hasOwnProperty;var Zn=(e,t,n)=>t in e?nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var te=(e,t)=>{for(var n in t)nt(e,n,{get:t[n],enumerable:!0})},C5=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gn(t))!Vn.call(e,s)&&s!==n&&nt(e,s,{get:()=>t[s],enumerable:!(o=Hn(t,s))||o.enumerable});return e},w=(e,t,n)=>(C5(e,t,"default"),n&&C5(n,t,"default"));var E=(e,t,n)=>(Zn(e,typeof t!="symbol"?t+"":t,n),n),W5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var V0=(e,t,n)=>(W5(e,t,"read from private field"),n?n.call(e):t.get(e)),Ne=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Ye=(e,t,n,o)=>(W5(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var r={};te(r,{version:()=>Ke});w(r,fA);w(r,mA);w(r,pA);w(r,uA);w(r,hA);w(r,bA);import*as fA from"@tensorflow/tfjs-core/dist/index.js";import*as mA from"@tensorflow/tfjs-converter/dist/index.js";import*as pA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as uA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as hA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as bA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var D5="4.0.0",Xn="4.0.0",qn="4.0.0",Un="4.0.0",Yn="4.0.0",Kn="0.0.1-alpha.14",Ke={tfjs:D5,"tfjs-core":D5,"tfjs-converter":Xn,"tfjs-backend-cpu":qn,"tfjs-backend-webgl":Un,"tfjs-backend-wasm":Yn,"tfjs-backend-webgpu":Kn};function h(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function F5(e,t){let n=e.endsWith("/")?"":"/",s=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!s.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${s}`);return s}var T=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function ot(e,t,n="config",o=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")ot(e[s],t[s],s,o);else{let A=e&&typeof e[s]!="undefined";A||o.push({reason:"unknown property",where:`${n}.${s} = ${t[s]}`});let a=e&&typeof e[s]==typeof t[s];A&&!a&&o.push({reason:"property type mismatch",where:`${n}.${s} = ${t[s]}`,expected:typeof e[s]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function J(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(s=>{let A=n[s],a=o[s];Array.isArray(A)&&Array.isArray(a)?n[s]=A.concat(...a):t(A)&&t(a)?n[s]=J(A,a):n[s]=a}),n),{})}var Ie={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var B5=` +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod3, secondTarget) => (__copyProps(target, mod3, "default"), secondTarget && __copyProps(secondTarget, mod3, "default")); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// dist/tfjs.esm.js +var tfjs_esm_exports = {}; +__export(tfjs_esm_exports, { + version: () => version7 +}); +__reExport(tfjs_esm_exports, dist_star); +__reExport(tfjs_esm_exports, dist_star2); +__reExport(tfjs_esm_exports, dist_star3); +__reExport(tfjs_esm_exports, dist_star4); +__reExport(tfjs_esm_exports, dist_star5); +__reExport(tfjs_esm_exports, dist_star6); +import * as dist_star from "@tensorflow/tfjs-core/dist/index.js"; +import * as dist_star2 from "@tensorflow/tfjs-converter/dist/index.js"; +import * as dist_star3 from "@tensorflow/tfjs-backend-cpu/dist/index.js"; +import * as dist_star4 from "@tensorflow/tfjs-backend-webgl/dist/index.js"; +import * as dist_star5 from "@tensorflow/tfjs-backend-wasm/dist/index.js"; +import * as dist_star6 from "@tensorflow/tfjs-backend-webgpu/dist/index.js"; +var version = "4.1.0"; +var version2 = "4.1.0"; +var version3 = "4.1.0"; +var version4 = "4.1.0"; +var version5 = "4.1.0"; +var version6 = "0.0.1-alpha.16"; +var version7 = { + tfjs: version, + "tfjs-core": version, + "tfjs-converter": version2, + "tfjs-backend-cpu": version3, + "tfjs-backend-webgl": version4, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 +}; + +// src/util/util.ts +function log(...msg) { + const dt = new Date(); + const ts = `${dt.getHours().toString().padStart(2, "0")}:${dt.getMinutes().toString().padStart(2, "0")}:${dt.getSeconds().toString().padStart(2, "0")}.${dt.getMilliseconds().toString().padStart(3, "0")}`; + if (msg) + console.log(ts, "Human:", ...msg); +} +function join(folder, file) { + const separator = folder.endsWith("/") ? "" : "/"; + const skipJoin = file.startsWith(".") || file.startsWith("/") || file.startsWith("http:") || file.startsWith("https:") || file.startsWith("file:"); + const path = skipJoin ? `${file}` : `${folder}${separator}${file}`; + if (!path.toLocaleLowerCase().includes(".json")) + throw new Error(`modelpath error: expecting json file: ${path}`); + return path; +} +var now = () => { + if (typeof performance !== "undefined") + return performance.now(); + return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString()); +}; +function validate(defaults, config3, parent = "config", msgs = []) { + for (const key of Object.keys(config3)) { + if (typeof config3[key] === "object") { + validate(defaults[key], config3[key], key, msgs); + } else { + const defined = defaults && typeof defaults[key] !== "undefined"; + if (!defined) + msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` }); + const same = defaults && typeof defaults[key] === typeof config3[key]; + if (defined && !same) + msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] }); + } + } + if (config3.debug && parent === "config" && msgs.length > 0) + log("invalid configuration", msgs); + return msgs; +} +function mergeDeep(...objects) { + const isObject = (obj) => obj && typeof obj === "object"; + return objects.reduce((prev, obj) => { + Object.keys(obj || {}).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + if (Array.isArray(pVal) && Array.isArray(oVal)) + prev[key] = pVal.concat(...oVal); + else if (isObject(pVal) && isObject(oVal)) + prev[key] = mergeDeep(pVal, oVal); + else + prev[key] = oVal; + }); + return prev; + }, {}); +} + +// src/config.ts +var config = { + backend: "", + modelBasePath: "", + cacheModels: true, + validateModels: true, + wasmPath: "", + wasmPlatformFetch: false, + debug: false, + async: true, + warmup: "full", + cacheSensitivity: 0.7, + skipAllowed: false, + deallocate: false, + flags: {}, + softwareKernels: false, + filter: { + enabled: true, + equalization: false, + width: 0, + height: 0, + flip: false, + return: true, + autoBrightness: true, + brightness: 0, + contrast: 0, + sharpness: 0, + blur: 0, + saturation: 0, + hue: 0, + negative: false, + sepia: false, + vintage: false, + kodachrome: false, + technicolor: false, + polaroid: false, + pixelate: 0 + }, + gesture: { + enabled: true + }, + face: { + enabled: true, + detector: { + modelPath: "blazeface.json", + rotation: true, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + iouThreshold: 0.1, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + modelPath: "iris.json" + }, + emotion: { + enabled: true, + minConfidence: 0.1, + skipFrames: 99, + skipTime: 1500, + modelPath: "emotion.json" + }, + description: { + enabled: true, + modelPath: "faceres.json", + skipFrames: 99, + skipTime: 3e3, + minConfidence: 0.1 + }, + antispoof: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "antispoof.json" + }, + liveness: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "liveness.json" + } + }, + body: { + enabled: true, + modelPath: "movenet-lightning.json", + maxDetected: -1, + minConfidence: 0.3, + skipFrames: 1, + skipTime: 200 + }, + hand: { + enabled: true, + rotation: true, + skipFrames: 99, + skipTime: 1e3, + minConfidence: 0.5, + iouThreshold: 0.2, + maxDetected: -1, + landmarks: true, + detector: { + modelPath: "handtrack.json" + }, + skeleton: { + modelPath: "handlandmark-full.json" + } + }, + object: { + enabled: false, + modelPath: "centernet.json", + minConfidence: 0.2, + iouThreshold: 0.4, + maxDetected: 10, + skipFrames: 99, + skipTime: 2e3 + }, + segmentation: { + enabled: false, + modelPath: "rvm.json", + ratio: 0.5, + mode: "default" + } +}; + +// src/image/imagefxshaders.ts +var vertexIdentity = ` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -14,7 +278,8 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var H5=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +291,8 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14]; gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19]; } -`,G5=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +304,8 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,V5=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +318,8 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,Z5=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +342,8 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794; gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265; } -`,X5=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +365,6026 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var rt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(s,A)=>(n[A]=0,s))},st=class{constructor(t,n,o){E(this,"uniform",{});E(this,"attribute",{});E(this,"gl");E(this,"id");E(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let s=this.compile(n,this.gl.VERTEX_SHADER),A=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!s||!A)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,s),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),rt(n,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);rt(n,"uniform",this.uniform),rt(o,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function q5(){let e=0,t=null,n=!1,o=-1,s=[null,null],A=[],a=null,i=null,c=I0(100,100),x={},y={INTERMEDIATE:1},l=c.getContext("webgl");if(!l){h("filter: cannot get webgl context");return}this.gl=l;function f(v,p){if(!(v===c.width&&p===c.height)){if(c.width=v,c.height=p,!a){let b=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);a=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,a),l.bufferData(l.ARRAY_BUFFER,b,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,c.width,c.height),s=[null,null]}}function d(v,p){let b=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,b);let j=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,j);let k=l.createTexture();return l.bindTexture(l.TEXTURE_2D,k),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,v,p,0,l.RGBA,l.UNSIGNED_BYTE,null),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,k,0),l.bindTexture(l.TEXTURE_2D,null),l.bindFramebuffer(l.FRAMEBUFFER,null),{fbo:b,texture:k}}function u(v){return s[v]=s[v]||d(c.width,c.height),s[v]}function m(v=0){if(!i)return;let p=null,b=null,j=!1;e===0?p=t:p=u(o).texture||null,e++,n&&!(v&y.INTERMEDIATE)?(b=null,j=e%2===0):(o=(o+1)%2,b=u(o).fbo||null),l.bindTexture(l.TEXTURE_2D,p),l.bindFramebuffer(l.FRAMEBUFFER,b),l.uniform1f(i.uniform.flipY,j?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function g(v){if(x[v])return i=x[v],l.useProgram((i?i.id:null)||null),i;if(i=new st(l,B5,v),!i)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,b,0*p),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,b,2*p),x[v]=i,i}let P={colorMatrix:v=>{let p=new Float32Array(v);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?G5:H5,j=g(b);!j||(l.uniform1fv(j.uniform.m,p),m())},brightness:v=>{let p=(v||0)+1;P.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:v=>{let p=(v||0)*2/3+1,b=(p-1)*-.5;P.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{P.saturation(-1)},contrast:v=>{let p=(v||0)+1,b=-128*(p-1);P.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{P.contrast(-2)},hue:v=>{v=(v||0)/180*Math.PI;let p=Math.cos(v),b=Math.sin(v),j=.213,k=.715,I=.072;P.colorMatrix([j+p*(1-j)+b*-j,k+p*-k+b*-k,I+p*-I+b*(1-I),0,0,j+p*-j+b*.143,k+p*(1-k)+b*.14,I+p*-I+b*-.283,0,0,j+p*-j+b*-(1-j),k+p*-k+b*k,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{P.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{P.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{P.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{P.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{P.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{P.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{P.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{P.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:v=>{let p=new Float32Array(v),b=1/c.width,j=1/c.height,k=g(X5);!k||(l.uniform1fv(k.uniform.m,p),l.uniform2f(k.uniform.px,b,j),m())},detectEdges:()=>{P.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{P.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{P.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:v=>{let p=v||1;P.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:v=>{let p=v||1;P.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:v=>{let p=v/7/c.width,b=v/7/c.height,j=g(Z5);!j||(l.uniform2f(j.uniform.px,0,b),m(y.INTERMEDIATE),l.uniform2f(j.uniform.px,p,0),m())},pixelate:v=>{let p=v/c.width,b=v/c.height,j=g(V5);!j||(l.uniform2f(j.uniform.size,p,b),m())}};this.add=function(v){let p=Array.prototype.slice.call(arguments,1),b=P[v];A.push({func:b,args:p})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(v){f(v.width,v.height),e=0,t||(t=l.createTexture()),l.bindTexture(l.TEXTURE_2D,t),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,v);for(let p=0;py.data())),a=Math.max(A[0][0],A[1][0],A[2][0]),c=(a>1?255:1)/a,x;if(c>1){let y=[r.sub(n[0],o[0]),r.sub(n[1],o[1]),r.sub(n[2],o[2])],l=[r.sub(s[0],o[0]),r.sub(s[1],o[1]),r.sub(s[2],o[2])],f=[r.mul(y[0],c),r.mul(y[1],c),r.mul(y[2],c)],d=r.stack([f[0],f[1],f[2]],2);x=r.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),r.dispose([...y,...l,...f])}else x=r.expandDims(t,0);return r.dispose([...n,...o,...s,n,t,e]),x}var i2=3840,l0=null,c0=null,Le=null,X,E0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function At(){E0.inputSum=0,E0.cacheDiff=1,E0.sumMethod=0,E0.inputTensor=void 0}function I0(e,t){let n;if(M.browser)if(M.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof M.Canvas!="undefined"?n=new M.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function l2(e,t){let n=t||I0(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function c2(e,t,n=!0){var f,d,u;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof r.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof M.Canvas!="undefined"&&e instanceof M.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof r.Tensor){let m=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)m=r.expandDims(e,0);else if(e.shape[2]===4){let g=r.slice3d(e,[0,0,0],[-1,-1,3]);m=r.expandDims(g,0),r.dispose(g)}}else e.shape.length===4&&(e.shape[3]===3?m=r.clone(e):e.shape[3]===4&&(m=r.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(m==null||m.shape.length!==4||m.shape[0]!==1||m.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(m.dtype==="int32"){let g=r.cast(m,"float32");r.dispose(m),m=g}return{tensor:m,canvas:t.filter.return?c0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:l0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,s=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!s)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:l0};let A=o,a=s;if(A>i2&&(A=i2,a=Math.trunc(A*s/o)),a>i2&&(a=i2,A=Math.trunc(a*o/s)),(((f=t.filter)==null?void 0:f.width)||0)>0?A=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(A=o*((t.filter.height||0)/s)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=s*((t.filter.width||0)/o)),!A||!a)throw new Error("input error: cannot determine dimension");(!l0||l0.width!==A||l0.height!==a)&&(l0=I0(A,a));let i=l0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(o,0),i.scale(-1,1),i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),(!c0||l0.width!==c0.width||l0.height!==c0.height)&&(c0=I0(l0.width,l0.height)),t.filter.enabled&&M.webgl.supported?(X||(X=M.browser?new q5:null),M.filter=!!X,X!=null&&X.add?(X.reset(),t.filter.brightness!==0&&X.add("brightness",t.filter.brightness),t.filter.contrast!==0&&X.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&X.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&X.add("blur",t.filter.blur),t.filter.saturation!==0&&X.add("saturation",t.filter.saturation),t.filter.hue!==0&&X.add("hue",t.filter.hue),t.filter.negative&&X.add("negative"),t.filter.sepia&&X.add("sepia"),t.filter.vintage&&X.add("brownie"),t.filter.sepia&&X.add("sepia"),t.filter.kodachrome&&X.add("kodachrome"),t.filter.technicolor&&X.add("technicolor"),t.filter.polaroid&&X.add("polaroid"),t.filter.pixelate!==0&&X.add("pixelate",t.filter.pixelate),((u=X.get())==null?void 0:u.length)>1?c0=X.apply(l0):c0=X.draw(l0)):(t.debug&&h("input process error: cannot initialize filters"),M.webgl.supported=!1,t.filter.enabled=!1,l2(l0,c0))):(l2(l0,c0),X&&(X=null),M.filter=!!X),!n)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let c,x=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(M.browser&&r.browser)c=r.browser?r.browser.fromPixels(e):null;else{x=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);c=r.tensor(m,[e.height,e.width,x],"int32")}else if((!Le||c0.width!==Le.width||c0.height!==Le.height)&&(Le=I0(c0.width,c0.height)),r.browser&&M.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?c=r.browser.fromPixels(c0):(Le=l2(c0),c=r.browser.fromPixels(Le));else{let P=l2(c0).getContext("2d").getImageData(0,0,A,a);x=P.data.length/A/a;let v=new Uint8Array(P.data.buffer);c=r.tensor(v,[A,a,x])}if(x===4){let m=r.slice3d(c,[0,0,0],[-1,-1,3]);r.dispose(c),c=m}if(!c)throw new Error("input error: cannot create tensor");let y=r.cast(c,"float32"),l=t.filter.equalization?await a2(y):r.expandDims(y,0);if(r.dispose([c,y]),t.filter.autoBrightness){let m=r.max(l),g=await m.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],r.dispose(m)}return{tensor:l,canvas:t.filter.return?c0:null}}async function U5(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!E0.inputTensor)E0.inputTensor=r.clone(t);else if(E0.inputTensor.shape[1]!==t.shape[1]||E0.inputTensor.shape[2]!==t.shape[2])r.dispose(E0.inputTensor),E0.inputTensor=r.clone(t);else{let o={};o.diff=r.sub(t,E0.inputTensor),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;r.dispose([E0.inputTensor,o.diff,o.squared,o.sum]),E0.inputTensor=r.clone(t),n=A<=(e.cacheSensitivity||0)}return n}async function Y5(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=r.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?r.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):r.clone(n),o.diff=r.sub(o.input1,o.input2),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return r.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),A}var d2=class{constructor(){E(this,"browser");E(this,"node");E(this,"worker");E(this,"platform","");E(this,"agent","");E(this,"backends",[]);E(this,"initial");E(this,"filter");E(this,"tfjs");E(this,"offscreen");E(this,"perfadd",!1);E(this,"tensorflow",{version:void 0,gpu:void 0});E(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});E(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});E(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});E(this,"cpu",{model:void 0,flags:[]});E(this,"kernels",[]);E(this,"Canvas");E(this,"Image");E(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Ke["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(r.engine().registryFactory);try{this.tensorflow={version:r.backend().binding?r.backend().binding.TF_Version:void 0,gpu:r.backend().binding?r.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=I0(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=r.getKernelsForBackend(r.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},M=new d2;var y2=class{constructor(){E(this,"config");E(this,"element");E(this,"stream");E(this,"devices",[]);E(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});E(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let s=document.getElementById(t.element);if(s&&s instanceof HTMLVideoElement)this.element=s;else{this.config.debug&&h("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&h("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&h("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(s){h("webcam",s);return}if(!this.stream){this.config.debug&&h("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(s=>{this.element?this.element.onloadeddata=()=>s(!0):s(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});E(this,"pause",()=>{this.element&&this.element.pause()});E(this,"play",async()=>{this.element&&await this.element.play()});E(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var at={};te(at,{age:()=>xo,"anti-spoofing":()=>Xo,antispoof:()=>$n,blazeface:()=>eo,"blazeface-back":()=>yo,"blazeface-front":()=>fo,"blazepose-detect":()=>Zo,"blazepose-detector2d":()=>mo,"blazepose-detector3d":()=>po,"blazepose-full":()=>uo,"blazepose-heavy":()=>ho,"blazepose-lite":()=>bo,centernet:()=>to,default:()=>rr,efficientpose:()=>go,"efficientpose-i-lite":()=>qo,"efficientpose-ii-lite":()=>Uo,"efficientpose-iv":()=>Yo,emotion:()=>no,faceboxes:()=>To,facemesh:()=>oo,"facemesh-attention":()=>Ro,"facemesh-attention-alt":()=>vo,"facemesh-detection-full":()=>Mo,"facemesh-detection-short":()=>Po,"facemesh-orig":()=>ko,faceres:()=>ro,"faceres-deep":()=>wo,gear:()=>Eo,gender:()=>So,"gender-ssrnet-imdb":()=>zo,handdetect:()=>jo,"handlandmark-full":()=>so,"handlandmark-lite":()=>No,"handlandmark-sparse":()=>Io,handskeleton:()=>Lo,handtrack:()=>Ao,"insightface-efficientnet-b0":()=>Ko,"insightface-ghostnet-strides1":()=>Jo,"insightface-ghostnet-strides2":()=>Qo,"insightface-mobilenet-emore":()=>_o,"insightface-mobilenet-swish":()=>$o,iris:()=>ao,liveness:()=>io,meet:()=>Oo,mobileface:()=>Co,mobilefacenet:()=>Wo,models:()=>lo,"movenet-lightning":()=>co,"movenet-multipose":()=>Do,"movenet-thunder":()=>Fo,nanodet:()=>Bo,"nanodet-e":()=>er,"nanodet-g":()=>tr,"nanodet-m":()=>nr,"nanodet-t":()=>or,posenet:()=>Ho,rvm:()=>Go,selfie:()=>Vo});var $n=853098,eo=538928,to=4030290,no=820516,oo=1477958,ro=6978814,so=5431368,Ao=2964837,ao=2599092,io=592976,lo=0,co=4650216,xo=161240,yo=538928,fo=402048,mo=7499400,po=5928856,uo=6338290,ho=27501554,bo=2725490,go=5651240,To=2013002,vo=2387598,Ro=2382414,Mo=1026192,Po=201268,ko=2955780,wo=13957620,Eo=1498916,zo=161236,So=201808,jo=3515612,No=2023432,Io=5286322,Lo=5502280,Oo=372228,Co=2183192,Wo=5171976,Do=9448838,Fo=12477112,Bo=7574558,Ho=5032780,Go=3739355,Vo=212886,Zo=5928804,Xo=853098,qo=2269064,Uo=5651240,Yo=25643252,Ko=13013224,Jo=8093408,Qo=8049584,_o=6938536,$o=12168584,er=12319156,tr=7574558,nr=1887474,or=5294216,rr={antispoof:$n,blazeface:eo,centernet:to,emotion:no,facemesh:oo,faceres:ro,"handlandmark-full":so,handtrack:Ao,iris:ao,liveness:io,models:lo,"movenet-lightning":co,age:xo,"blazeface-back":yo,"blazeface-front":fo,"blazepose-detector2d":mo,"blazepose-detector3d":po,"blazepose-full":uo,"blazepose-heavy":ho,"blazepose-lite":bo,efficientpose:go,faceboxes:To,"facemesh-attention-alt":vo,"facemesh-attention":Ro,"facemesh-detection-full":Mo,"facemesh-detection-short":Po,"facemesh-orig":ko,"faceres-deep":wo,gear:Eo,"gender-ssrnet-imdb":zo,gender:So,handdetect:jo,"handlandmark-lite":No,"handlandmark-sparse":Io,handskeleton:Lo,meet:Oo,mobileface:Co,mobilefacenet:Wo,"movenet-multipose":Do,"movenet-thunder":Fo,nanodet:Bo,posenet:Ho,rvm:Go,selfie:Vo,"blazepose-detect":Zo,"anti-spoofing":Xo,"efficientpose-i-lite":qo,"efficientpose-ii-lite":Uo,"efficientpose-iv":Yo,"insightface-efficientnet-b0":Ko,"insightface-ghostnet-strides1":Jo,"insightface-ghostnet-strides2":Qo,"insightface-mobilenet-emore":_o,"insightface-mobilenet-swish":$o,"nanodet-e":er,"nanodet-g":tr,"nanodet-m":nr,"nanodet-t":or};var u0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},y0={};async function sr(e,t){return u0.debug&&h("load model fetch:",e,t),fetch(e,t)}function K5(e){u0.cacheModels=e.cacheModels,u0.verbose=e.debug,u0.modelBasePath=e.modelBasePath}async function L(e){var x,y,l,f;let t=F5(u0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),s="indexeddb://"+o;y0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:at[o],inCache:!1,url:""},u0.cacheSupported=typeof indexedDB!="undefined";let A={};try{A=u0.cacheSupported&&u0.cacheModels?await r.io.listModels():{}}catch(d){u0.cacheSupported=!1}y0[o].inCache=u0.cacheSupported&&u0.cacheModels&&Object.keys(A).includes(s),y0[o].url=y0[o].inCache?s:t;let a=typeof fetch=="undefined"?{}:{fetchFunc:(d,u)=>sr(d,u)},i=new r.GraphModel(y0[o].url,a),c=!1;try{i.findIOHandler(),u0.debug&&h("model load handler:",i.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((x=i.handler)==null?void 0:x.load())||null;y0[o].sizeFromManifest=((y=d==null?void 0:d.weightData)==null?void 0:y.byteLength)||0,d?i.loadSync(d):i=await r.loadGraphModel(y0[o].inCache?s:t,a),y0[o].sizeLoadedWeights=((f=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:f.byteLength)||0,u0.verbose&&h("load:",{model:o,url:i.modelUrl,bytes:y0[o].sizeLoadedWeights}),c=!0}catch(d){h("error loading model:",t,d)}if(c&&u0.cacheModels&&u0.cacheSupported&&!y0[o].inCache)try{let d=await i.save(s);u0.debug&&h("model saved:",s,d)}catch(d){h("error saving model:",t,d)}return i}var it="3.0.0";var U={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ir(){let e=U.gl;!e||(U.extensions=e.getSupportedExtensions())}function J5(e){var t;if(e.config.backend==="humangl"&&(U.name in r.engine().registry&&!((t=U==null?void 0:U.gl)!=null&&t.getParameter(U.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!r.findBackend(U.name))){try{U.canvas=I0(100,100)}catch(s){h("humangl error: cannot create canvas:",s);return}try{if(U.gl=U.canvas.getContext("webgl2",U.webGLattr),!U.gl){h("humangl error: cannot get webgl context");return}if(!U.gl.getParameter(U.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}U.canvas&&(U.canvas.addEventListener("webglcontextlost",A=>{throw h("humangl error:",A.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),U.canvas.addEventListener("webglcontextrestored",A=>{h("humangl error: context restored:",A)}),U.canvas.addEventListener("webglcontextcreationerror",A=>{h("humangl error: context create:",A)}))}catch(s){h("humangl error: cannot get webgl context:",s);return}try{r.setWebGLContext(2,U.gl)}catch(s){h("humangl error: cannot set webgl context:",s);return}try{let s=new r.GPGPUContext(U.gl);r.registerBackend(U.name,()=>new r.MathBackendWebGL(s),U.priority)}catch(s){h("humangl error: cannot register webgl backend:",s);return}try{r.getKernelsForBackend("webgl").forEach(A=>{let a={...A,backendName:U.name};r.registerKernel(a)})}catch(s){h("humangl error: cannot update webgl backend registration:",s);return}try{r.env().flagRegistry.WEBGL_VERSION&&r.env().set("WEBGL_VERSION",2)}catch(s){h("humangl error: cannot set WebGL backend flags:",s);return}ir();let n=r.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,U.gl)}}var O={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Q5(){O.tf255=r.scalar(255,"float32"),O.tf1=r.scalar(1,"float32"),O.tf2=r.scalar(2,"float32"),O.tf05=r.scalar(.5,"float32"),O.tf127=r.scalar(127.5,"float32"),O.rgb=r.tensor1d([.2989,.587,.114],"float32")}async function xr(){return await M.updateBackend(),M.browser?M.webgpu.supported&&M.webgpu.backend?"webgpu":M.webgl.supported&&M.webgl.backend?"webgl":M.wasm.supported&&M.wasm.backend?"wasm":"cpu":"tensorflow"}function dr(e){let t=[];if(!M.kernels.includes("mod")){let n={kernelName:"Mod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.sub(o.inputs.a,r.mul(r.div(o.inputs.a,o.inputs.b),o.inputs.b)))};r.registerKernel(n),M.kernels.push("mod"),t.push("mod")}if(!M.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.add(r.mul(r.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),r.mod(o.inputs.a,o.inputs.b)))};r.registerKernel(n),M.kernels.push("floormod"),t.push("floormod")}if(!M.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>{let s=r.getBackend();r.setBackend("cpu");let A=r.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return r.setBackend(s),A})};r.registerKernel(n),M.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var _5={};async function Je(e,t=!1){var n;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await xr()),t||M.initial||e.config.backend&&e.config.backend.length>0&&r.getBackend()!==e.config.backend){let o=T();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),M.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),M.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),M.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}let s=Object.keys(r.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(J5(e),s=Object.keys(r.engine().registryFactory)),e.config.debug&&h("available backends:",s),s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=M.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(r.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&r.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof r.setWasmPaths!="undefined")r.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(i){h("wasm detection failed")}}try{await r.setBackend(e.config.backend),await r.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(_5=JSON.parse(JSON.stringify(r.env().flags)))}if((r.getBackend()==="humangl"||r.getBackend()==="webgl")&&(r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),r.env().flagRegistry.WEBGL_EXP_CONV&&r.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),r.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),r.getBackend(),e.config.debug){let s=r.env().flags,A={};for(let a of Object.keys(s))_5[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",r.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))r.env().set(s,A)}r.enableProdMode(),Q5(),e.performance.initBackend=Math.trunc(T()-o),e.config.backend=r.getBackend(),await M.updateBackend(),dr(e.config),M.initial=!1}return!0}function f2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:s=>{var A;return t.debug&&h("kernelFunc",n,t.backend,s),(A=s==null?void 0:s.inputs)==null?void 0:A.info}};r.registerKernel(o)}M.kernels=r.getKernelsForBackend(r.getBackend()).map(n=>n.kernelName.toLowerCase())}var pt={};te(pt,{all:()=>Vr,body:()=>p2,canvas:()=>Gr,face:()=>m2,gesture:()=>b2,hand:()=>u2,init:()=>mt,object:()=>h2,options:()=>$,person:()=>Hr});var z0=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)h("draw error: cannot get canvas context");else return t}return null},ue=e=>Math.round(e*180/Math.PI),V=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),he=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function L0(e,t,n,o,s){let A=t.replace(/\[.*\]/g,"").split(` -`).map(i=>i.trim()),a=Math.max(0,n);for(let i=A.length-1;i>=0;i--){let c=i*s.lineHeight+o;s.shadowColor&&s.shadowColor!==""&&(e.fillStyle=s.shadowColor,e.fillText(A[i],a+5,c+16)),e.fillStyle=s.labelColor,e.fillText(A[i],a+4,c+15)}}function U0(e,t,n,o,s){e.fillStyle=he(o,s),e.beginPath(),e.arc(t,n,s.pointSize,0,2*Math.PI),e.fill()}function Z0(e,t,n,o,s,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let a=(t+t+o)/2,i=(n+n+s)/2;e.ellipse(a,i,o/2,s/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,n),e.lineTo(t+o-A.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+A.roundRect),e.lineTo(t+o,n+s-A.roundRect),e.quadraticCurveTo(t+o,n+s,t+o-A.roundRect,n+s),e.lineTo(t+A.roundRect,n+s),e.quadraticCurveTo(t,n+s,t,n+s-A.roundRect),e.lineTo(t,n+A.roundRect),e.quadraticCurveTo(t,n,t+A.roundRect,n),e.closePath();e.stroke()}function lt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=he(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function e1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){lt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oQe[e]),HA=fr.map(e=>Qe[e]),GA=mr.map(e=>Qe[e]);function ne(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var pr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ur=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],hr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],br=[[474,475],[475,476],[476,477],[477,474]],gr=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Tr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],vr=[[469,470],[470,471],[471,472],[472,469]],Rr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],VA={lips:ne(pr),leftEye:ne(ur),leftEyebrow:ne(hr),leftIris:ne(br),rightEye:ne(gr),rightEyebrow:ne(Tr),rightIris:ne(vr),faceOval:ne(Rr)};var Mr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Pr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],kr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],wr=[[474,475],[475,476],[476,477],[477,474]],Er=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],zr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Sr=[[469,470],[470,471],[471,472],[472,469]],jr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function oe(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Nr={lips:oe(Mr),leftEye:oe(Pr),leftEyebrow:oe(kr),leftIris:oe(wr),rightEye:oe(Er),rightEyebrow:oe(zr),rightIris:oe(Sr),faceOval:oe(jr)},Ir=Object.entries(Nr).map(([e,t])=>t.map(n=>[n,e])).flat(),ZA=new Map(Ir),_e=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Te=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],ve=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var G;function Lr(e,t){var o,s,A,a,i,c,x,y,l;if(!G.drawLabels||((o=G.faceLabels)==null?void 0:o.length)===0)return;let n=G.faceLabels.slice();if(e.score&&(n=V(n,"[score]",100*e.score)),e.gender&&(n=V(n,"[gender]",e.gender)),e.genderScore&&(n=V(n,"[genderScore]",100*e.genderScore)),e.age&&(n=V(n,"[age]",e.age)),e.distance&&(n=V(n,"[distance]",100*e.distance)),e.real&&(n=V(n,"[real]",100*e.real)),e.live&&(n=V(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let f=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);f.length>3&&(f.length=3),n=V(n,"[emotions]",f.join(" "))}(A=(s=e.rotation)==null?void 0:s.angle)!=null&&A.roll&&(n=V(n,"[roll]",ue(e.rotation.angle.roll))),(i=(a=e.rotation)==null?void 0:a.angle)!=null&&i.yaw&&(n=V(n,"[yaw]",ue(e.rotation.angle.yaw))),(x=(c=e.rotation)==null?void 0:c.angle)!=null&&x.pitch&&(n=V(n,"[pitch]",ue(e.rotation.angle.pitch))),(l=(y=e.rotation)==null?void 0:y.gaze)!=null&&l.bearing&&(n=V(n,"[gaze]",ue(e.rotation.gaze.bearing))),L0(t,n,e.box[0],e.box[1],G)}function Or(e,t){var n,o,s,A;if(((n=e.annotations)==null?void 0:n.leftEyeIris)&&((o=e.annotations)==null?void 0:o.leftEyeIris[0])){t.strokeStyle=G.useDepth?"rgba(255, 200, 255, 0.3)":G.color,t.beginPath();let a=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,i=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],a,i,0,0,2*Math.PI),t.stroke(),G.fillPolygons&&(t.fillStyle=G.useDepth?"rgba(255, 255, 200, 0.3)":G.color,t.fill())}if(((s=e.annotations)==null?void 0:s.rightEyeIris)&&((A=e.annotations)==null?void 0:A.rightEyeIris[0])){t.strokeStyle=G.useDepth?"rgba(255, 200, 255, 0.3)":G.color,t.beginPath();let a=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,i=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],a,i,0,0,2*Math.PI),t.stroke(),G.fillPolygons&&(t.fillStyle=G.useDepth?"rgba(255, 255, 200, 0.3)":G.color,t.fill())}}function Cr(e,t){var n;if(G.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*ue(e.rotation.angle.yaw)/90,s=e.box[1]+e.box[3]/2+e.box[2]*ue(e.rotation.angle.pitch)/90,A=new Path2D(` - M ${e.box[0]+e.box[2]/2} ${e.box[1]} +`; + +// src/image/imagefx.ts +var collect = (source, prefix, collection) => { + const r = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r, (match2, name) => { + collection[name] = 0; + return match2; + }); +}; +var GLProgram = class { + constructor(gl, vertexSource, fragmentSource) { + __publicField(this, "uniform", {}); + __publicField(this, "attribute", {}); + __publicField(this, "gl"); + __publicField(this, "id"); + __publicField(this, "compile", (source, type) => { + const shader = this.gl.createShader(type); + if (!shader) { + log("filter: could not create shader"); + return null; + } + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) { + log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || "unknown"}`); + return null; + } + return shader; + }); + this.gl = gl; + const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER); + const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER); + this.id = this.gl.createProgram(); + if (!vertexShader || !fragmentShader) + return; + if (!this.id) { + log("filter: could not create webgl program"); + return; + } + this.gl.attachShader(this.id, vertexShader); + this.gl.attachShader(this.id, fragmentShader); + this.gl.linkProgram(this.id); + if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) { + log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || "unknown"}`); + return; + } + this.gl.useProgram(this.id); + collect(vertexSource, "attribute", this.attribute); + for (const a in this.attribute) + this.attribute[a] = this.gl.getAttribLocation(this.id, a); + collect(vertexSource, "uniform", this.uniform); + collect(fragmentSource, "uniform", this.uniform); + for (const u in this.uniform) + this.uniform[u] = this.gl.getUniformLocation(this.id, u); + } +}; +function GLImageFilter() { + let drawCount = 0; + let sourceTexture = null; + let lastInChain = false; + let currentFramebufferIndex = -1; + let tempFramebuffers = [null, null]; + let filterChain = []; + let vertexBuffer = null; + let currentProgram = null; + const fxcanvas = canvas(100, 100); + const shaderProgramCache = {}; + const DRAW = { INTERMEDIATE: 1 }; + const gl = fxcanvas.getContext("webgl"); + if (!gl) { + log("filter: cannot get webgl context"); + return; + } + this.gl = gl; + function resize(width, height) { + if (width === fxcanvas.width && height === fxcanvas.height) + return; + fxcanvas.width = width; + fxcanvas.height = height; + if (!vertexBuffer) { + const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); + vertexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + } + gl.viewport(0, 0, fxcanvas.width, fxcanvas.height); + tempFramebuffers = [null, null]; + } + function createFramebufferTexture(width, height) { + const fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + const renderbuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return { fbo, texture }; + } + function getTempFramebuffer(index2) { + tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height); + return tempFramebuffers[index2]; + } + function draw(flags = 0) { + if (!currentProgram) + return; + let source = null; + let target = null; + let flipY = false; + if (drawCount === 0) + source = sourceTexture; + else + source = getTempFramebuffer(currentFramebufferIndex).texture || null; + drawCount++; + if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { + target = null; + flipY = drawCount % 2 === 0; + } else { + currentFramebufferIndex = (currentFramebufferIndex + 1) % 2; + target = getTempFramebuffer(currentFramebufferIndex).fbo || null; + } + gl.bindTexture(gl.TEXTURE_2D, source); + gl.bindFramebuffer(gl.FRAMEBUFFER, target); + gl.uniform1f(currentProgram.uniform["flipY"], flipY ? -1 : 1); + gl.drawArrays(gl.TRIANGLES, 0, 6); + } + function compileShader(fragmentSource) { + if (shaderProgramCache[fragmentSource]) { + currentProgram = shaderProgramCache[fragmentSource]; + gl.useProgram((currentProgram ? currentProgram.id : null) || null); + return currentProgram; + } + currentProgram = new GLProgram(gl, vertexIdentity, fragmentSource); + if (!currentProgram) { + log("filter: could not get webgl program"); + return null; + } + const floatSize = Float32Array.BYTES_PER_ELEMENT; + const vertSize = 4 * floatSize; + gl.enableVertexAttribArray(currentProgram.attribute["pos"]); + gl.vertexAttribPointer(currentProgram.attribute["pos"], 2, gl.FLOAT, false, vertSize, 0 * floatSize); + gl.enableVertexAttribArray(currentProgram.attribute["uv"]); + gl.vertexAttribPointer(currentProgram.attribute["uv"], 2, gl.FLOAT, false, vertSize, 2 * floatSize); + shaderProgramCache[fragmentSource] = currentProgram; + return currentProgram; + } + const filter = { + colorMatrix: (matrix) => { + const m = new Float32Array(matrix); + m[4] /= 255; + m[9] /= 255; + m[14] /= 255; + m[19] /= 255; + const shader = m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0 ? colorMatrixWithoutAlpha : colorMatrixWithAlpha; + const program = compileShader(shader); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + draw(); + }, + brightness: (brightness) => { + const b = (brightness || 0) + 1; + filter.colorMatrix([ + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + saturation: (amount) => { + const x = (amount || 0) * 2 / 3 + 1; + const y = (x - 1) * -0.5; + filter.colorMatrix([ + x, + y, + y, + 0, + 0, + y, + x, + y, + 0, + 0, + y, + y, + x, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturate: () => { + filter.saturation(-1); + }, + contrast: (amount) => { + const v = (amount || 0) + 1; + const o = -128 * (v - 1); + filter.colorMatrix([ + v, + 0, + 0, + 0, + o, + 0, + v, + 0, + 0, + o, + 0, + 0, + v, + 0, + o, + 0, + 0, + 0, + 1, + 0 + ]); + }, + negative: () => { + filter.contrast(-2); + }, + hue: (rotation) => { + rotation = (rotation || 0) / 180 * Math.PI; + const cos = Math.cos(rotation); + const sin = Math.sin(rotation); + const lumR = 0.213; + const lumG = 0.715; + const lumB = 0.072; + filter.colorMatrix([ + lumR + cos * (1 - lumR) + sin * -lumR, + lumG + cos * -lumG + sin * -lumG, + lumB + cos * -lumB + sin * (1 - lumB), + 0, + 0, + lumR + cos * -lumR + sin * 0.143, + lumG + cos * (1 - lumG) + sin * 0.14, + lumB + cos * -lumB + sin * -0.283, + 0, + 0, + lumR + cos * -lumR + sin * -(1 - lumR), + lumG + cos * -lumG + sin * lumG, + lumB + cos * (1 - lumB) + sin * lumB, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturateLuminance: () => { + filter.colorMatrix([ + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0, + 0, + 0, + 1, + 0 + ]); + }, + sepia: () => { + filter.colorMatrix([ + 0.393, + 0.7689999, + 0.18899999, + 0, + 0, + 0.349, + 0.6859999, + 0.16799999, + 0, + 0, + 0.272, + 0.5339999, + 0.13099999, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + brownie: () => { + filter.colorMatrix([ + 0.5997023498159715, + 0.34553243048391263, + -0.2708298674538042, + 0, + 47.43192855600873, + -0.037703249837783157, + 0.8609577587992641, + 0.15059552388459913, + 0, + -36.96841498319127, + 0.24113635128153335, + -0.07441037908422492, + 0.44972182064877153, + 0, + -7.562075277591283, + 0, + 0, + 0, + 1, + 0 + ]); + }, + vintagePinhole: () => { + filter.colorMatrix([ + 0.6279345635605994, + 0.3202183420819367, + -0.03965408211312453, + 0, + 9.651285835294123, + 0.02578397704808868, + 0.6441188644374771, + 0.03259127616149294, + 0, + 7.462829176470591, + 0.0466055556782719, + -0.0851232987247891, + 0.5241648018700465, + 0, + 5.159190588235296, + 0, + 0, + 0, + 1, + 0 + ]); + }, + kodachrome: () => { + filter.colorMatrix([ + 1.1285582396593525, + -0.3967382283601348, + -0.03992559172921793, + 0, + 63.72958762196502, + -0.16404339962244616, + 1.0835251566291304, + -0.05498805115633132, + 0, + 24.732407896706203, + -0.16786010706155763, + -0.5603416277695248, + 1.6014850761964943, + 0, + 35.62982807460946, + 0, + 0, + 0, + 1, + 0 + ]); + }, + technicolor: () => { + filter.colorMatrix([ + 1.9125277891456083, + -0.8545344976951645, + -0.09155508482755585, + 0, + 11.793603434377337, + -0.3087833385928097, + 1.7658908555458428, + -0.10601743074722245, + 0, + -70.35205161461398, + -0.231103377548616, + -0.7501899197440212, + 1.847597816108189, + 0, + 30.950940869491138, + 0, + 0, + 0, + 1, + 0 + ]); + }, + polaroid: () => { + filter.colorMatrix([ + 1.438, + -0.062, + -0.062, + 0, + 0, + -0.122, + 1.378, + -0.122, + 0, + 0, + -0.016, + -0.016, + 1.483, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + shiftToBGR: () => { + filter.colorMatrix([ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + convolution: (matrix) => { + const m = new Float32Array(matrix); + const pixelSizeX = 1 / fxcanvas.width; + const pixelSizeY = 1 / fxcanvas.height; + const program = compileShader(convolution); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + gl.uniform2f(program.uniform["px"], pixelSizeX, pixelSizeY); + draw(); + }, + detectEdges: () => { + filter.convolution.call(this, [ + 0, + 1, + 0, + 1, + -4, + 1, + 0, + 1, + 0 + ]); + }, + sobelX: () => { + filter.convolution.call(this, [ + -1, + 0, + 1, + -2, + 0, + 2, + -1, + 0, + 1 + ]); + }, + sobelY: () => { + filter.convolution.call(this, [ + -1, + -2, + -1, + 0, + 0, + 0, + 1, + 2, + 1 + ]); + }, + sharpen: (amount) => { + const a = amount || 1; + filter.convolution.call(this, [ + 0, + -1 * a, + 0, + -1 * a, + 1 + 4 * a, + -1 * a, + 0, + -1 * a, + 0 + ]); + }, + emboss: (size2) => { + const s = size2 || 1; + filter.convolution.call(this, [ + -2 * s, + -1 * s, + 0, + -1 * s, + 1, + 1 * s, + 0, + 1 * s, + 2 * s + ]); + }, + blur: (size2) => { + const blurSizeX = size2 / 7 / fxcanvas.width; + const blurSizeY = size2 / 7 / fxcanvas.height; + const program = compileShader(blur); + if (!program) + return; + gl.uniform2f(program.uniform["px"], 0, blurSizeY); + draw(DRAW.INTERMEDIATE); + gl.uniform2f(program.uniform["px"], blurSizeX, 0); + draw(); + }, + pixelate: (size2) => { + const blurSizeX = size2 / fxcanvas.width; + const blurSizeY = size2 / fxcanvas.height; + const program = compileShader(pixelate); + if (!program) + return; + gl.uniform2f(program.uniform["size"], blurSizeX, blurSizeY); + draw(); + } + }; + this.add = function(name) { + const args = Array.prototype.slice.call(arguments, 1); + const func = filter[name]; + filterChain.push({ func, args }); + }; + this.reset = function() { + filterChain = []; + }; + this.get = function() { + return filterChain; + }; + this.apply = function(image28) { + resize(image28.width, image28.height); + drawCount = 0; + if (!sourceTexture) + sourceTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, sourceTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image28); + for (let i = 0; i < filterChain.length; i++) { + lastInChain = i === filterChain.length - 1; + const f = filterChain[i]; + f.func.apply(this, f.args || []); + } + return fxcanvas; + }; + this.draw = function(image28) { + this.add("brightness", 0); + return this.apply(image28); + }; +} + +// src/image/enhance.ts +async function histogramEqualization(inputImage) { + const squeeze14 = inputImage.shape.length === 4 ? tfjs_esm_exports.squeeze(inputImage) : inputImage; + const rgb2 = tfjs_esm_exports.split(squeeze14, 3, 2); + const min2 = [tfjs_esm_exports.min(rgb2[0]), tfjs_esm_exports.min(rgb2[1]), tfjs_esm_exports.min(rgb2[2])]; + const max5 = [tfjs_esm_exports.max(rgb2[0]), tfjs_esm_exports.max(rgb2[1]), tfjs_esm_exports.max(rgb2[2])]; + const absMax = await Promise.all(max5.map((channel) => channel.data())); + const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); + const maxRange = maxValue > 1 ? 255 : 1; + const factor = maxRange / maxValue; + let final; + if (factor > 1) { + const sub11 = [tfjs_esm_exports.sub(rgb2[0], min2[0]), tfjs_esm_exports.sub(rgb2[1], min2[1]), tfjs_esm_exports.sub(rgb2[2], min2[2])]; + const range = [tfjs_esm_exports.sub(max5[0], min2[0]), tfjs_esm_exports.sub(max5[1], min2[1]), tfjs_esm_exports.sub(max5[2], min2[2])]; + const enh = [tfjs_esm_exports.mul(sub11[0], factor), tfjs_esm_exports.mul(sub11[1], factor), tfjs_esm_exports.mul(sub11[2], factor)]; + const stack5 = tfjs_esm_exports.stack([enh[0], enh[1], enh[2]], 2); + final = tfjs_esm_exports.reshape(stack5, [1, squeeze14.shape[0] || 0, squeeze14.shape[1] || 0, 3]); + tfjs_esm_exports.dispose([...sub11, ...range, ...enh]); + } else { + final = tfjs_esm_exports.expandDims(squeeze14, 0); + } + tfjs_esm_exports.dispose([...rgb2, ...min2, ...max5, rgb2, squeeze14, inputImage]); + return final; +} + +// src/image/image.ts +var maxSize = 3840; +var inCanvas = null; +var outCanvas = null; +var tmpCanvas = null; +var fx; +var last = { + inputSum: 0, + cacheDiff: 1, + sumMethod: 0, + inputTensor: void 0 +}; +function reset() { + last.inputSum = 0; + last.cacheDiff = 1; + last.sumMethod = 0; + last.inputTensor = void 0; +} +function canvas(width, height) { + let c; + if (env.browser) { + if (env.worker) { + if (typeof OffscreenCanvas === "undefined") + throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported"); + c = new OffscreenCanvas(width, height); + } else { + if (typeof document === "undefined") + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } + } else { + if (typeof env.Canvas !== "undefined") + c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") + c = new globalThis.Canvas(width, height); + } + return c; +} +function copy(input, output) { + const outputCanvas = output || canvas(input.width, input.height); + const ctx = outputCanvas.getContext("2d"); + ctx.drawImage(input, 0, 0); + return outputCanvas; +} +async function process2(input, config3, getTensor = true) { + var _a, _b, _c; + if (!input) { + if (config3.debug) + log("input error: input is missing"); + return { tensor: null, canvas: null }; + } + if (!(input instanceof tfjs_esm_exports.Tensor) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + throw new Error("input error: type is not recognized"); + } + if (input instanceof tfjs_esm_exports.Tensor) { + let tensor7 = null; + if (input["isDisposedInternal"]) + throw new Error("input error: attempted to use tensor but it is disposed"); + if (!input.shape) + throw new Error("input error: attempted to use tensor without a shape"); + if (input.shape.length === 3) { + if (input.shape[2] === 3) { + tensor7 = tfjs_esm_exports.expandDims(input, 0); + } else if (input.shape[2] === 4) { + const rgb2 = tfjs_esm_exports.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tfjs_esm_exports.expandDims(rgb2, 0); + tfjs_esm_exports.dispose(rgb2); + } + } else if (input.shape.length === 4) { + if (input.shape[3] === 3) { + tensor7 = tfjs_esm_exports.clone(input); + } else if (input.shape[3] === 4) { + tensor7 = tfjs_esm_exports.slice4d(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + } + } + if (tensor7 == null || tensor7.shape.length !== 4 || tensor7.shape[0] !== 1 || tensor7.shape[3] !== 3) + throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); + if (tensor7.dtype === "int32") { + const cast8 = tfjs_esm_exports.cast(tensor7, "float32"); + tfjs_esm_exports.dispose(tensor7); + tensor7 = cast8; + } + return { tensor: tensor7, canvas: config3.filter.return ? outCanvas : null }; + } + if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) { + if (config3.debug) + log("input stream is not ready"); + return { tensor: null, canvas: inCanvas }; + } + const originalWidth = input["naturalWidth"] || input["videoWidth"] || input["width"] || input["shape"] && input["shape"][1] > 0; + const originalHeight = input["naturalHeight"] || input["videoHeight"] || input["height"] || input["shape"] && input["shape"][2] > 0; + if (!originalWidth || !originalHeight) { + if (config3.debug) + log("cannot determine input dimensions"); + return { tensor: null, canvas: inCanvas }; + } + let targetWidth = originalWidth; + let targetHeight = originalHeight; + if (targetWidth > maxSize) { + targetWidth = maxSize; + targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth); + } + if (targetHeight > maxSize) { + targetHeight = maxSize; + targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight); + } + if ((((_a = config3.filter) == null ? void 0 : _a.width) || 0) > 0) + targetWidth = config3.filter.width; + else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) + targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); + if ((config3.filter.height || 0) > 0) + targetHeight = config3.filter.height; + else if ((config3.filter.width || 0) > 0) + targetHeight = originalHeight * ((config3.filter.width || 0) / originalWidth); + if (!targetWidth || !targetHeight) + throw new Error("input error: cannot determine dimension"); + if (!inCanvas || inCanvas.width !== targetWidth || inCanvas.height !== targetHeight) + inCanvas = canvas(targetWidth, targetHeight); + const inCtx = inCanvas.getContext("2d"); + if (typeof ImageData !== "undefined" && input instanceof ImageData) { + inCtx.putImageData(input, 0, 0); + } else { + if (config3.filter.flip && typeof inCtx.translate !== "undefined") { + inCtx.translate(originalWidth, 0); + inCtx.scale(-1, 1); + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + inCtx.setTransform(1, 0, 0, 1, 0, 0); + } else { + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + } + } + if (!outCanvas || inCanvas.width !== outCanvas.width || inCanvas.height !== outCanvas.height) + outCanvas = canvas(inCanvas.width, inCanvas.height); + if (config3.filter.enabled && env.webgl.supported) { + if (!fx) + fx = env.browser ? new GLImageFilter() : null; + env.filter = !!fx; + if (!(fx == null ? void 0 : fx.add)) { + if (config3.debug) + log("input process error: cannot initialize filters"); + env.webgl.supported = false; + config3.filter.enabled = false; + copy(inCanvas, outCanvas); + } else { + fx.reset(); + if (config3.filter.brightness !== 0) + fx.add("brightness", config3.filter.brightness); + if (config3.filter.contrast !== 0) + fx.add("contrast", config3.filter.contrast); + if (config3.filter.sharpness !== 0) + fx.add("sharpen", config3.filter.sharpness); + if (config3.filter.blur !== 0) + fx.add("blur", config3.filter.blur); + if (config3.filter.saturation !== 0) + fx.add("saturation", config3.filter.saturation); + if (config3.filter.hue !== 0) + fx.add("hue", config3.filter.hue); + if (config3.filter.negative) + fx.add("negative"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.vintage) + fx.add("brownie"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.kodachrome) + fx.add("kodachrome"); + if (config3.filter.technicolor) + fx.add("technicolor"); + if (config3.filter.polaroid) + fx.add("polaroid"); + if (config3.filter.pixelate !== 0) + fx.add("pixelate", config3.filter.pixelate); + if (((_c = fx.get()) == null ? void 0 : _c.length) > 1) + outCanvas = fx.apply(inCanvas); + else + outCanvas = fx.draw(inCanvas); + } + } else { + copy(inCanvas, outCanvas); + if (fx) + fx = null; + env.filter = !!fx; + } + if (!getTensor) + return { tensor: null, canvas: outCanvas }; + if (!outCanvas) + throw new Error("canvas error: cannot create output"); + let pixels; + let depth = 3; + if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { + if (env.browser && tfjs_esm_exports.browser) { + pixels = tfjs_esm_exports.browser ? tfjs_esm_exports.browser.fromPixels(input) : null; + } else { + depth = input.data.length / input.height / input.width; + const arr = new Uint8Array(input.data.buffer); + pixels = tfjs_esm_exports.tensor(arr, [input.height, input.width, depth], "int32"); + } + } else { + if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) + tmpCanvas = canvas(outCanvas.width, outCanvas.height); + if (tfjs_esm_exports.browser && env.browser) { + if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { + pixels = tfjs_esm_exports.browser.fromPixels(outCanvas); + } else { + tmpCanvas = copy(outCanvas); + pixels = tfjs_esm_exports.browser.fromPixels(tmpCanvas); + } + } else { + const tempCanvas = copy(outCanvas); + const tempCtx = tempCanvas.getContext("2d"); + const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); + depth = tempData.data.length / targetWidth / targetHeight; + const arr = new Uint8Array(tempData.data.buffer); + pixels = tfjs_esm_exports.tensor(arr, [targetWidth, targetHeight, depth]); + } + } + if (depth === 4) { + const rgb2 = tfjs_esm_exports.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tfjs_esm_exports.dispose(pixels); + pixels = rgb2; + } + if (!pixels) + throw new Error("input error: cannot create tensor"); + const casted = tfjs_esm_exports.cast(pixels, "float32"); + const tensor6 = config3.filter.equalization ? await histogramEqualization(casted) : tfjs_esm_exports.expandDims(casted, 0); + tfjs_esm_exports.dispose([pixels, casted]); + if (config3.filter.autoBrightness) { + const max5 = tfjs_esm_exports.max(tensor6); + const maxVal = await max5.data(); + config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; + tfjs_esm_exports.dispose(max5); + } + return { tensor: tensor6, canvas: config3.filter.return ? outCanvas : null }; +} +async function skip(config3, input) { + let skipFrame = false; + if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) + return skipFrame; + if (!last.inputTensor) { + last.inputTensor = tfjs_esm_exports.clone(input); + } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { + tfjs_esm_exports.dispose(last.inputTensor); + last.inputTensor = tfjs_esm_exports.clone(input); + } else { + const t2 = {}; + t2.diff = tfjs_esm_exports.sub(input, last.inputTensor); + t2.squared = tfjs_esm_exports.mul(t2.diff, t2.diff); + t2.sum = tfjs_esm_exports.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; + tfjs_esm_exports.dispose([last.inputTensor, t2.diff, t2.squared, t2.sum]); + last.inputTensor = tfjs_esm_exports.clone(input); + skipFrame = diffRelative <= (config3.cacheSensitivity || 0); + } + return skipFrame; +} +async function compare(config3, input1, input2) { + const t2 = {}; + if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) { + if (!config3.debug) + log("invalid input tensor or tensor shapes do not match:", input1.shape, input2.shape); + return 0; + } + if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) { + if (!config3.debug) + log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); + return 0; + } + t2.input1 = tfjs_esm_exports.clone(input1); + t2.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? tfjs_esm_exports.image.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : tfjs_esm_exports.clone(input2); + t2.diff = tfjs_esm_exports.sub(t2.input1, t2.input2); + t2.squared = tfjs_esm_exports.mul(t2.diff, t2.diff); + t2.sum = tfjs_esm_exports.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; + tfjs_esm_exports.dispose([t2.input1, t2.input2, t2.diff, t2.squared, t2.sum]); + return diffRelative; +} + +// src/util/env.ts +var Env = class { + constructor() { + __publicField(this, "browser"); + __publicField(this, "node"); + __publicField(this, "worker"); + __publicField(this, "platform", ""); + __publicField(this, "agent", ""); + __publicField(this, "backends", []); + __publicField(this, "initial"); + __publicField(this, "filter"); + __publicField(this, "tfjs"); + __publicField(this, "offscreen"); + __publicField(this, "perfadd", false); + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + __publicField(this, "kernels", []); + __publicField(this, "Canvas"); + __publicField(this, "Image"); + __publicField(this, "ImageData"); + this.browser = typeof navigator !== "undefined"; + this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; + this.tfjs = { version: version7["tfjs-core"] }; + this.offscreen = typeof OffscreenCanvas !== "undefined"; + this.initial = true; + this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; + if (typeof navigator !== "undefined") { + const raw = navigator.userAgent.match(/\(([^()]+)\)/g); + if (raw == null ? void 0 : raw[0]) { + const platformMatch = raw[0].match(/\(([^()]+)\)/g); + this.platform = (platformMatch == null ? void 0 : platformMatch[0]) ? platformMatch[0].replace(/\(|\)/g, "") : ""; + this.agent = navigator.userAgent.replace(raw[0], ""); + if (this.platform[1]) + this.agent = this.agent.replace(raw[1], ""); + this.agent = this.agent.replace(/ /g, " "); + } + } else if (typeof process !== "undefined") { + this.platform = `${process.platform} ${process.arch}`; + this.agent = `NodeJS ${process.version}`; + } + } + async updateBackend() { + this.backends = Object.keys(tfjs_esm_exports.engine().registryFactory); + try { + this.tensorflow = { + version: tfjs_esm_exports.backend()["binding"] ? tfjs_esm_exports.backend()["binding"].TF_Version : void 0, + gpu: tfjs_esm_exports.backend()["binding"] ? tfjs_esm_exports.backend()["binding"].isUsingGpuDevice() : void 0 + }; + } catch (e) { + } + this.wasm.supported = typeof WebAssembly !== "undefined"; + this.wasm.backend = this.backends.includes("wasm"); + if (this.wasm.supported && this.wasm.backend) { + this.wasm.simd = await tfjs_esm_exports.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + this.wasm.multithread = await tfjs_esm_exports.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + } + const c = canvas(100, 100); + const gl = c ? c.getContext("webgl2") : void 0; + this.webgl.supported = typeof gl !== "undefined"; + this.webgl.backend = this.backends.includes("webgl"); + if (this.webgl.supported && this.webgl.backend && gl) { + this.webgl.version = gl.getParameter(gl.VERSION); + this.webgl.vendor = gl.getParameter(gl.VENDOR); + this.webgl.renderer = gl.getParameter(gl.RENDERER); + this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION); + } + this.webgpu.supported = this.browser && typeof navigator.gpu !== "undefined"; + this.webgpu.backend = this.backends.includes("webgpu"); + try { + if (this.webgpu.supported) { + const adapter = await navigator.gpu.requestAdapter(); + this.webgpu.adapter = await (adapter == null ? void 0 : adapter.requestAdapterInfo()); + } + } catch (e) { + this.webgpu.supported = false; + } + try { + this.kernels = tfjs_esm_exports.getKernelsForBackend(tfjs_esm_exports.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); + } catch (e) { + } + } + updateCPU() { + const cpu = { model: "", flags: [] }; + if (this.node && this.platform.startsWith("linux")) { + } + if (!this.cpu) + Object.defineProperty(this, "cpu", { value: cpu }); + else + this.cpu = cpu; + } +}; +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + __publicField(this, "config"); + __publicField(this, "element"); + __publicField(this, "stream"); + __publicField(this, "devices", []); + __publicField(this, "enumerate", async () => { + try { + const devices = await navigator.mediaDevices.enumerateDevices(); + this.devices = devices.filter((device) => device.kind === "videoinput"); + } catch (e) { + this.devices = []; + } + return this.devices; + }); + __publicField(this, "start", async (webcamConfig) => { + if (webcamConfig == null ? void 0 : webcamConfig.debug) + this.config.debug = webcamConfig == null ? void 0 : webcamConfig.debug; + if (webcamConfig == null ? void 0 : webcamConfig.crop) + this.config.crop = webcamConfig == null ? void 0 : webcamConfig.crop; + if (webcamConfig == null ? void 0 : webcamConfig.mode) + this.config.mode = webcamConfig == null ? void 0 : webcamConfig.mode; + if (webcamConfig == null ? void 0 : webcamConfig.width) + this.config.width = webcamConfig == null ? void 0 : webcamConfig.width; + if (webcamConfig == null ? void 0 : webcamConfig.height) + this.config.height = webcamConfig == null ? void 0 : webcamConfig.height; + if (webcamConfig == null ? void 0 : webcamConfig.id) + this.config.id = webcamConfig == null ? void 0 : webcamConfig.id; + if (webcamConfig == null ? void 0 : webcamConfig.element) { + if (typeof webcamConfig.element === "string") { + const el = document.getElementById(webcamConfig.element); + if (el && el instanceof HTMLVideoElement) { + this.element = el; + } else { + if (this.config.debug) + log("webcam", "cannot get dom element", webcamConfig.element); + return; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) + log("webcam", "unknown dom element", webcamConfig.element); + return; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + resizeMode: this.config.crop ? "crop-and-scale" : "none", + width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth }, + height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight } + } + }; + if (this.config.id) + requestedConstraints.video.deviceId = this.config.id; + this.element.addEventListener("play", () => { + if (this.config.debug) + log("webcam", "play"); + }); + this.element.addEventListener("pause", () => { + if (this.config.debug) + log("webcam", "pause"); + }); + this.element.addEventListener("click", async () => { + if (!this.element || !this.stream) + return; + if (this.element.paused) + await this.element.play(); + else + this.element.pause(); + }); + if (!(navigator == null ? void 0 : navigator.mediaDevices)) { + if (this.config.debug) + log("webcam", "no devices"); + return; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return; + } + if (!this.stream) { + if (this.config.debug) + log("webcam", "no stream"); + return; + } + this.element.srcObject = this.stream; + const ready3 = new Promise((resolve) => { + if (!this.element) + resolve(false); + else + this.element.onloadeddata = () => resolve(true); + }); + await ready3; + await this.element.play(); + if (this.config.debug) { + log("webcam", { + width: this.width, + height: this.height, + label: this.label, + stream: this.stream, + track: this.track, + settings: this.settings, + constraints: this.constraints, + capabilities: this.capabilities + }); + } + }); + __publicField(this, "pause", () => { + if (this.element) + this.element.pause(); + }); + __publicField(this, "play", async () => { + if (this.element) + await this.element.play(); + }); + __publicField(this, "stop", () => { + if (this.config.debug) + log("webcam", "stop"); + if (this.track) + this.track.stop(); + }); + this.config = { + element: void 0, + debug: true, + mode: "front", + crop: false, + width: 0, + height: 0 + }; + } + get track() { + if (!this.stream) + return void 0; + return this.stream.getVideoTracks()[0]; + } + get capabilities() { + if (!this.track) + return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + get constraints() { + if (!this.track) + return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + get settings() { + if (!this.stream) + return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + get label() { + if (!this.track) + return ""; + return this.track.label; + } + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + get height() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; + } +}; + +// models/models.json +var models_exports = {}; +__export(models_exports, { + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "blazepose-detector2d": () => blazepose_detector2d, + "blazepose-detector3d": () => blazepose_detector3d, + "blazepose-full": () => blazepose_full, + "blazepose-heavy": () => blazepose_heavy, + "blazepose-lite": () => blazepose_lite, + centernet: () => centernet, + default: () => models_default, + efficientpose: () => efficientpose, + "efficientpose-i-lite": () => efficientpose_i_lite, + "efficientpose-ii-lite": () => efficientpose_ii_lite, + "efficientpose-iv": () => efficientpose_iv, + emotion: () => emotion, + faceboxes: () => faceboxes, + facemesh: () => facemesh, + "facemesh-attention": () => facemesh_attention, + "facemesh-attention-alt": () => facemesh_attention_alt, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + "facemesh-orig": () => facemesh_orig, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + gender: () => gender, + "gender-ssrnet-imdb": () => gender_ssrnet_imdb, + handdetect: () => handdetect, + "handlandmark-full": () => handlandmark_full, + "handlandmark-lite": () => handlandmark_lite, + "handlandmark-sparse": () => handlandmark_sparse, + handskeleton: () => handskeleton, + handtrack: () => handtrack, + "insightface-efficientnet-b0": () => insightface_efficientnet_b0, + "insightface-ghostnet-strides1": () => insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": () => insightface_ghostnet_strides2, + "insightface-mobilenet-emore": () => insightface_mobilenet_emore, + "insightface-mobilenet-swish": () => insightface_mobilenet_swish, + iris: () => iris, + liveness: () => liveness, + meet: () => meet, + mobileface: () => mobileface, + mobilefacenet: () => mobilefacenet, + models: () => models, + "movenet-lightning": () => movenet_lightning, + "movenet-multipose": () => movenet_multipose, + "movenet-thunder": () => movenet_thunder, + nanodet: () => nanodet, + "nanodet-e": () => nanodet_e, + "nanodet-g": () => nanodet_g, + "nanodet-m": () => nanodet_m, + "nanodet-t": () => nanodet_t, + posenet: () => posenet, + rvm: () => rvm, + selfie: () => selfie +}); +var antispoof = 853098; +var blazeface = 538928; +var centernet = 4030290; +var emotion = 820516; +var facemesh = 1477958; +var faceres = 6978814; +var handlandmark_full = 5431368; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector2d = 7499400; +var blazepose_detector3d = 5928856; +var blazepose_full = 6338290; +var blazepose_heavy = 27501554; +var blazepose_lite = 2725490; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_alt = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var facemesh_orig = 2955780; +var faceres_deep = 13957620; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_lite = 2023432; +var handlandmark_sparse = 5286322; +var handskeleton = 5502280; +var meet = 372228; +var mobileface = 2183192; +var mobilefacenet = 5171976; +var movenet_multipose = 9448838; +var movenet_thunder = 12477112; +var nanodet = 7574558; +var posenet = 5032780; +var rvm = 3739355; +var selfie = 212886; +var blazepose_detector = 5928856; +var anti_spoofing = 853098; +var efficientpose_i_lite = 2269064; +var efficientpose_ii_lite = 5651240; +var efficientpose_iv = 25643252; +var insightface_efficientnet_b0 = 13013224; +var insightface_ghostnet_strides1 = 8093408; +var insightface_ghostnet_strides2 = 8049584; +var insightface_mobilenet_emore = 6938536; +var insightface_mobilenet_swish = 12168584; +var nanodet_e = 12319156; +var nanodet_g = 7574558; +var nanodet_m = 1887474; +var nanodet_t = 5294216; +var models_default = { + antispoof, + blazeface, + centernet, + emotion, + facemesh, + faceres, + "handlandmark-full": handlandmark_full, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector2d": blazepose_detector2d, + "blazepose-detector3d": blazepose_detector3d, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-alt": facemesh_attention_alt, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "facemesh-orig": facemesh_orig, + "faceres-deep": faceres_deep, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-lite": handlandmark_lite, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "blazepose-detector": blazepose_detector, + "anti-spoofing": anti_spoofing, + "efficientpose-i-lite": efficientpose_i_lite, + "efficientpose-ii-lite": efficientpose_ii_lite, + "efficientpose-iv": efficientpose_iv, + "insightface-efficientnet-b0": insightface_efficientnet_b0, + "insightface-ghostnet-strides1": insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": insightface_ghostnet_strides2, + "insightface-mobilenet-emore": insightface_mobilenet_emore, + "insightface-mobilenet-swish": insightface_mobilenet_swish, + "nanodet-e": nanodet_e, + "nanodet-g": nanodet_g, + "nanodet-m": nanodet_m, + "nanodet-t": nanodet_t +}; + +// src/tfjs/load.ts +var options = { + cacheModels: true, + cacheSupported: true, + verbose: true, + debug: false, + modelBasePath: "" +}; +var modelStats = {}; +async function httpHandler(url, init4) { + if (options.debug) + log("load model fetch:", url, init4); + return fetch(url, init4); +} +function setModelLoadOptions(config3) { + options.cacheModels = config3.cacheModels; + options.verbose = config3.debug; + options.modelBasePath = config3.modelBasePath; +} +async function loadModel(modelPath) { + var _a, _b, _c, _d; + let modelUrl = join(options.modelBasePath, modelPath || ""); + if (!modelUrl.toLowerCase().endsWith(".json")) + modelUrl += ".json"; + const modelPathSegments = modelUrl.includes("/") ? modelUrl.split("/") : modelUrl.split("\\"); + const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace(".json", ""); + const cachedModelName = "indexeddb://" + shortModelName; + modelStats[shortModelName] = { + name: shortModelName, + sizeFromManifest: 0, + sizeLoadedWeights: 0, + sizeDesired: models_exports[shortModelName], + inCache: false, + url: "" + }; + options.cacheSupported = typeof indexedDB !== "undefined"; + let cachedModels = {}; + try { + cachedModels = options.cacheSupported && options.cacheModels ? await tfjs_esm_exports.io.listModels() : {}; + } catch (e) { + options.cacheSupported = false; + } + modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); + modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; + const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; + let model23 = new tfjs_esm_exports.GraphModel(modelStats[shortModelName].url, tfLoadOptions); + let loaded = false; + try { + model23.findIOHandler(); + if (options.debug) + log("model load handler:", model23["handler"]); + } catch (err) { + log("error finding model i/o handler:", modelUrl, err); + } + try { + const artifacts = await ((_a = model23.handler) == null ? void 0 : _a.load()) || null; + modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; + if (artifacts) + model23.loadSync(artifacts); + else + model23 = await tfjs_esm_exports.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + modelStats[shortModelName].sizeLoadedWeights = ((_d = (_c = model23.artifacts) == null ? void 0 : _c.weightData) == null ? void 0 : _d.byteLength) || 0; + if (options.verbose) + log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); + loaded = true; + } catch (err) { + log("error loading model:", modelUrl, err); + } + if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { + try { + const saveResult = await model23.save(cachedModelName); + if (options.debug) + log("model saved:", cachedModelName, saveResult); + } catch (err) { + log("error saving model:", modelUrl, err); + } + } + return model23; +} + +// package.json +var version8 = "3.0.0"; + +// src/tfjs/humangl.ts +var config2 = { + name: "humangl", + priority: 999, + canvas: null, + gl: null, + extensions: [], + webGLattr: { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + desynchronized: true + } +}; +function extensions() { + const gl = config2.gl; + if (!gl) + return; + config2.extensions = gl.getSupportedExtensions(); +} +function register(instance) { + var _a; + if (instance.config.backend !== "humangl") + return; + if (config2.name in tfjs_esm_exports.engine().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { + log("humangl error: backend invalid context"); + instance.models.reset(); + } + if (!tfjs_esm_exports.findBackend(config2.name)) { + try { + config2.canvas = canvas(100, 100); + } catch (err) { + log("humangl error: cannot create canvas:", err); + return; + } + try { + config2.gl = config2.canvas.getContext("webgl2", config2.webGLattr); + if (!config2.gl) { + log("humangl error: cannot get webgl context"); + return; + } + const glv2 = config2.gl.getParameter(config2.gl.VERSION).includes("2.0"); + if (!glv2) { + log("backend override: using fallback webgl backend as webgl 2.0 is not detected"); + instance.config.backend = "webgl"; + return; + } + if (config2.canvas) { + config2.canvas.addEventListener("webglcontextlost", (e) => { + log("humangl error:", e.type); + log("possible browser memory leak using webgl or conflict with multiple backend registrations"); + instance.emit("error"); + throw new Error("backend error: webgl context lost"); + }); + config2.canvas.addEventListener("webglcontextrestored", (e) => { + log("humangl error: context restored:", e); + }); + config2.canvas.addEventListener("webglcontextcreationerror", (e) => { + log("humangl error: context create:", e); + }); + } + } catch (err) { + log("humangl error: cannot get webgl context:", err); + return; + } + try { + tfjs_esm_exports.setWebGLContext(2, config2.gl); + } catch (err) { + log("humangl error: cannot set webgl context:", err); + return; + } + try { + const ctx = new tfjs_esm_exports.GPGPUContext(config2.gl); + tfjs_esm_exports.registerBackend(config2.name, () => new tfjs_esm_exports.MathBackendWebGL(ctx), config2.priority); + } catch (err) { + log("humangl error: cannot register webgl backend:", err); + return; + } + try { + const kernels = tfjs_esm_exports.getKernelsForBackend("webgl"); + kernels.forEach((kernelConfig) => { + const newKernelConfig = { ...kernelConfig, backendName: config2.name }; + tfjs_esm_exports.registerKernel(newKernelConfig); + }); + } catch (err) { + log("humangl error: cannot update webgl backend registration:", err); + return; + } + try { + if (tfjs_esm_exports.env().flagRegistry.WEBGL_VERSION) + tfjs_esm_exports.env().set("WEBGL_VERSION", 2); + } catch (err) { + log("humangl error: cannot set WebGL backend flags:", err); + return; + } + extensions(); + const backend4 = tfjs_esm_exports.backend(); + const current = typeof backend4["gpgpu"] !== "undefined" ? backend4["getGPGPUContext"]().gl : null; + if (current) { + if (instance.config.debug) + log("humangl backend registered:", { webgl: current.getParameter(current.VERSION), renderer: current.getParameter(current.RENDERER) }); + } else { + log("humangl error: no current gl context:", current, config2.gl); + } + } +} + +// src/tfjs/constants.ts +var constants = { + tf255: 255, + tf1: 1, + tf2: 2, + tf05: 0.5, + tf127: 127.5, + rgb: [0.2989, 0.587, 0.114] +}; +function init() { + constants.tf255 = tfjs_esm_exports.scalar(255, "float32"); + constants.tf1 = tfjs_esm_exports.scalar(1, "float32"); + constants.tf2 = tfjs_esm_exports.scalar(2, "float32"); + constants.tf05 = tfjs_esm_exports.scalar(0.5, "float32"); + constants.tf127 = tfjs_esm_exports.scalar(127.5, "float32"); + constants.rgb = tfjs_esm_exports.tensor1d([0.2989, 0.587, 0.114], "float32"); +} + +// src/tfjs/backend.ts +async function getBestBackend() { + await env.updateBackend(); + if (!env.browser) + return "tensorflow"; + if (env.webgpu.supported && env.webgpu.backend) + return "webgpu"; + if (env.webgl.supported && env.webgl.backend) + return "webgl"; + if (env.wasm.supported && env.wasm.backend) + return "wasm"; + return "cpu"; +} +function registerCustomOps(config3) { + const newKernels = []; + if (!env.kernels.includes("mod")) { + const kernelMod = { + kernelName: "Mod", + backendName: tfjs_esm_exports.getBackend(), + kernelFunc: (op) => tfjs_esm_exports.tidy(() => tfjs_esm_exports.sub(op.inputs.a, tfjs_esm_exports.mul(tfjs_esm_exports.div(op.inputs.a, op.inputs.b), op.inputs.b))) + }; + tfjs_esm_exports.registerKernel(kernelMod); + env.kernels.push("mod"); + newKernels.push("mod"); + } + if (!env.kernels.includes("floormod")) { + const kernelFloorMod = { + kernelName: "FloorMod", + backendName: tfjs_esm_exports.getBackend(), + kernelFunc: (op) => tfjs_esm_exports.tidy(() => tfjs_esm_exports.add(tfjs_esm_exports.mul(tfjs_esm_exports.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tfjs_esm_exports.mod(op.inputs.a, op.inputs.b))) + }; + tfjs_esm_exports.registerKernel(kernelFloorMod); + env.kernels.push("floormod"); + newKernels.push("floormod"); + } + if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { + const kernelRotateWithOffset = { + kernelName: "RotateWithOffset", + backendName: tfjs_esm_exports.getBackend(), + kernelFunc: (op) => tfjs_esm_exports.tidy(() => { + const backend4 = tfjs_esm_exports.getBackend(); + tfjs_esm_exports.setBackend("cpu"); + const t2 = tfjs_esm_exports.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center); + tfjs_esm_exports.setBackend(backend4); + return t2; + }) + }; + tfjs_esm_exports.registerKernel(kernelRotateWithOffset); + env.kernels.push("rotatewithoffset"); + newKernels.push("rotatewithoffset"); + } + if (newKernels.length > 0 && config3.debug) + log("registered kernels:", newKernels); +} +var defaultFlags = {}; +async function check(instance, force = false) { + var _a; + instance.state = "backend"; + if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) + instance.config.backend = await getBestBackend(); + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tfjs_esm_exports.getBackend() !== instance.config.backend) { + const timeStamp = now(); + if (instance.config.backend && instance.config.backend.length > 0) { + if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { + if (instance.config.debug) + log("running inside web worker"); + } + if (env.browser && instance.config.backend === "tensorflow") { + if (instance.config.debug) + log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && (instance.config.backend === "webgl" || instance.config.backend === "humangl")) { + if (instance.config.debug) + log(`override: backend set to ${instance.config.backend} while running in nodejs`); + instance.config.backend = "tensorflow"; + } + if (env.browser && instance.config.backend === "webgpu") { + if (typeof navigator === "undefined" || typeof navigator.gpu === "undefined") { + log("override: backend set to webgpu but browser does not support webgpu"); + instance.config.backend = "webgl"; + } else { + const adapter = await navigator.gpu.requestAdapter(); + if (instance.config.debug) + log("enumerated webgpu adapter:", adapter); + if (!adapter) { + log("override: backend set to webgpu but browser reports no available gpu"); + instance.config.backend = "webgl"; + } else { + const adapterInfo = "requestAdapterInfo" in adapter ? await adapter.requestAdapterInfo() : void 0; + log("webgpu adapter info:", adapterInfo); + } + } + } + let available = Object.keys(tfjs_esm_exports.engine().registryFactory); + if (instance.config.backend === "humangl" && !available.includes("humangl")) { + register(instance); + available = Object.keys(tfjs_esm_exports.engine().registryFactory); + } + if (instance.config.debug) + log("available backends:", available); + if (!available.includes(instance.config.backend)) { + log(`error: backend ${instance.config.backend} not found in registry`); + instance.config.backend = env.node ? "tensorflow" : "webgl"; + if (instance.config.debug) + log(`override: setting backend ${instance.config.backend}`); + } + if (instance.config.debug) + log("setting backend:", [instance.config.backend]); + if (instance.config.backend === "wasm") { + if (tfjs_esm_exports.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) + tfjs_esm_exports.env().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (instance.config.debug) + log("wasm path:", instance.config.wasmPath); + if (typeof tfjs_esm_exports.setWasmPaths !== "undefined") + tfjs_esm_exports.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch); + else + throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); + let mt = false; + let simd = false; + try { + mt = await tfjs_esm_exports.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + simd = await tfjs_esm_exports.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + if (instance.config.debug) + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); + if (instance.config.debug && !simd) + log("warning: wasm simd support is not enabled"); + } catch (e) { + log("wasm detection failed"); + } + } + try { + await tfjs_esm_exports.setBackend(instance.config.backend); + await tfjs_esm_exports.ready(); + } catch (err) { + log("error: cannot set backend:", instance.config.backend, err); + return false; + } + if (instance.config.debug) + defaultFlags = JSON.parse(JSON.stringify(tfjs_esm_exports.env().flags)); + } + if (tfjs_esm_exports.getBackend() === "humangl" || tfjs_esm_exports.getBackend() === "webgl") { + if (tfjs_esm_exports.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) + tfjs_esm_exports.env().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (tfjs_esm_exports.env().flagRegistry.WEBGL_EXP_CONV) + tfjs_esm_exports.env().set("WEBGL_EXP_CONV", true); + if (instance.config.debug && typeof instance.config.deallocate !== "undefined" && instance.config.deallocate) { + log("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:", true); + tfjs_esm_exports.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); + } + } + if (tfjs_esm_exports.getBackend() === "webgpu") { + } + if (instance.config.debug) { + const newFlags = tfjs_esm_exports.env().flags; + const updatedFlags = {}; + for (const key of Object.keys(newFlags)) { + if (defaultFlags[key] === newFlags[key]) + continue; + updatedFlags[key] = newFlags[key]; + } + if (instance.config.debug && Object.keys(updatedFlags).length > 0) + log("backend:", tfjs_esm_exports.getBackend(), "flags:", updatedFlags); + } + if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { + if (instance.config.debug) + log("flags:", instance.config["flags"]); + for (const [key, val] of Object.entries(instance.config.flags)) { + tfjs_esm_exports.env().set(key, val); + } + } + tfjs_esm_exports.enableProdMode(); + init(); + instance.performance.initBackend = Math.trunc(now() - timeStamp); + instance.config.backend = tfjs_esm_exports.getBackend(); + await env.updateBackend(); + registerCustomOps(instance.config); + env.initial = false; + } + return true; +} +function fakeOps(kernelNames, config3) { + for (const kernelName of kernelNames) { + const kernelConfig = { + kernelName, + backendName: config3.backend, + kernelFunc: (param) => { + var _a; + if (config3.debug) + log("kernelFunc", kernelName, config3.backend, param); + return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; + } + }; + tfjs_esm_exports.registerKernel(kernelConfig); + } + env.kernels = tfjs_esm_exports.getKernelsForBackend(tfjs_esm_exports.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); +} + +// src/draw/draw.ts +var draw_exports = {}; +__export(draw_exports, { + all: () => all, + body: () => body, + canvas: () => canvas2, + face: () => face, + gesture: () => gesture, + hand: () => hand, + init: () => init2, + object: () => object, + options: () => options2, + person: () => person +}); + +// src/draw/primitives.ts +var getCanvasContext = (input) => { + if (!input) + log("draw error: invalid canvas"); + else if (!input.getContext) + log("draw error: canvas context not defined"); + else { + const ctx = input.getContext("2d"); + if (!ctx) + log("draw error: cannot get canvas context"); + else + return ctx; + } + return null; +}; +var rad2deg = (theta) => Math.round(theta * 180 / Math.PI); +var replace = (str, source, target) => str.replace(source, typeof target === "number" ? target.toFixed(1) : target); +var colorDepth = (z, opt) => { + if (!opt.useDepth || typeof z === "undefined") + return opt.color; + const rgb2 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb2[0]}, ${rgb2[1]}, ${rgb2[2]}, ${opt.alpha})`; +}; +function labels(ctx, str, startX, startY, localOptions2) { + const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); + const x = Math.max(0, startX); + for (let i = line.length - 1; i >= 0; i--) { + const y = i * localOptions2.lineHeight + startY; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(line[i], x + 5, y + 16); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(line[i], x + 4, y + 15); + } +} +function point(ctx, x, y, z, localOptions2) { + ctx.fillStyle = colorDepth(z, localOptions2); + ctx.beginPath(); + ctx.arc(x, y, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.fill(); +} +function rect(ctx, x, y, width, height, localOptions2) { + ctx.beginPath(); + ctx.lineWidth = localOptions2.lineWidth; + if (localOptions2.useCurves) { + const cx = (x + x + width) / 2; + const cy = (y + y + height) / 2; + ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + ctx.moveTo(x + localOptions2.roundRect, y); + ctx.lineTo(x + width - localOptions2.roundRect, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions2.roundRect); + ctx.lineTo(x + width, y + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions2.roundRect, y + height); + ctx.lineTo(x + localOptions2.roundRect, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions2.roundRect); + ctx.lineTo(x, y + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y, x + localOptions2.roundRect, y); + ctx.closePath(); + } + ctx.stroke(); +} +function lines(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.beginPath(); + ctx.moveTo(points[0][0], points[0][1]); + for (const pt of points) { + ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions2); + ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1])); + } + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function curves(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.lineWidth = localOptions2.lineWidth; + if (!localOptions2.useCurves || points.length <= 2) { + lines(ctx, points, localOptions2); + return; + } + ctx.moveTo(points[0][0], points[0][1]); + for (let i = 0; i < points.length - 2; i++) { + const xc = (points[i][0] + points[i + 1][0]) / 2; + const yc = (points[i][1] + points[i + 1][1]) / 2; + ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc); + } + ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]); + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function arrow(ctx, from, to, radius = 5) { + let angle; + let x; + let y; + ctx.beginPath(); + ctx.moveTo(from[0], from[1]); + ctx.lineTo(to[0], to[1]); + angle = Math.atan2(to[1] - from[1], to[0] - from[0]); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.moveTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + ctx.closePath(); + ctx.stroke(); + ctx.fill(); +} + +// src/draw/options.ts +var options2 = { + color: "rgba(173, 216, 230, 0.6)", + labelColor: "rgba(173, 216, 230, 1)", + shadowColor: "black", + alpha: 0.5, + font: 'small-caps 16px "Segoe UI"', + lineHeight: 18, + lineWidth: 4, + pointSize: 2, + roundRect: 8, + drawPoints: false, + drawLabels: true, + drawBoxes: true, + drawAttention: true, + drawGestures: true, + drawPolygons: true, + drawGaze: true, + fillPolygons: false, + useDepth: true, + useCurves: false, + faceLabels: "", + bodyLabels: "", + bodyPartLabels: "", + objectLabels: "", + handLabels: "", + fingerLabels: "", + gestureLabels: "" +}; + +// src/face/facemeshcoords.ts +var meshAnnotations = { + silhouette: [ + 10, + 338, + 297, + 332, + 284, + 251, + 389, + 356, + 454, + 323, + 361, + 288, + 397, + 365, + 379, + 378, + 400, + 377, + 152, + 148, + 176, + 149, + 150, + 136, + 172, + 58, + 132, + 93, + 234, + 127, + 162, + 21, + 54, + 103, + 67, + 109 + ], + lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409], + lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291], + lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415], + lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], + lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306], + lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408], + lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292], + lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407], + rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + rightEyeIris: [473, 474, 475, 476, 477], + leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398], + leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362], + leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414], + leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463], + leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413], + leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464], + leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465], + leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417], + leftEyebrowLower: [265, 353, 276, 283, 282, 295], + leftEyeIris: [468, 469, 470, 471, 472], + midwayBetweenEyes: [168], + noseTip: [1], + noseBottom: [2], + noseRightCorner: [98], + noseLeftCorner: [327], + rightCheek: [205], + leftCheek: [425] +}; +var meshLandmarks = { + count: 468, + mouth: 13, + symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]] +}; +var blazeFaceLandmarks = { + leftEye: 0, + rightEye: 1, + nose: 2, + mouth: 3, + leftEar: 4, + rightEar: 5, + symmetryLine: [3, 2] +}; +var irisIndices = [ + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } +]; +var UV468 = [ + [0.499976992607117, 0.652534008026123], + [0.500025987625122, 0.547487020492554], + [0.499974012374878, 0.602371990680695], + [0.482113003730774, 0.471979022026062], + [0.500150978565216, 0.527155995368958], + [0.499909996986389, 0.498252987861633], + [0.499523013830185, 0.40106201171875], + [0.289712011814117, 0.380764007568359], + [0.499954998493195, 0.312398016452789], + [0.499987006187439, 0.269918978214264], + [0.500023007392883, 0.107050001621246], + [0.500023007392883, 0.666234016418457], + [0.5000159740448, 0.679224014282227], + [0.500023007392883, 0.692348003387451], + [0.499976992607117, 0.695277988910675], + [0.499976992607117, 0.70593398809433], + [0.499976992607117, 0.719385027885437], + [0.499976992607117, 0.737019002437592], + [0.499967992305756, 0.781370997428894], + [0.499816000461578, 0.562981009483337], + [0.473773002624512, 0.573909997940063], + [0.104906998574734, 0.254140973091125], + [0.365929991006851, 0.409575998783112], + [0.338757991790771, 0.41302502155304], + [0.311120003461838, 0.409460008144379], + [0.274657994508743, 0.389131009578705], + [0.393361985683441, 0.403706014156342], + [0.345234006643295, 0.344011008739471], + [0.370094001293182, 0.346076011657715], + [0.319321990013123, 0.347265005111694], + [0.297903001308441, 0.353591024875641], + [0.24779200553894, 0.410809993743896], + [0.396889001131058, 0.842755019664764], + [0.280097991228104, 0.375599980354309], + [0.106310002505779, 0.399955987930298], + [0.2099249958992, 0.391353011131287], + [0.355807989835739, 0.534406006336212], + [0.471751004457474, 0.65040397644043], + [0.474155008792877, 0.680191993713379], + [0.439785003662109, 0.657229006290436], + [0.414617002010345, 0.66654098033905], + [0.450374007225037, 0.680860996246338], + [0.428770989179611, 0.682690978050232], + [0.374971002340317, 0.727805018424988], + [0.486716985702515, 0.547628998756409], + [0.485300987958908, 0.527395009994507], + [0.257764995098114, 0.314490020275116], + [0.401223003864288, 0.455172002315521], + [0.429818987846375, 0.548614978790283], + [0.421351999044418, 0.533740997314453], + [0.276895999908447, 0.532056987285614], + [0.483370006084442, 0.499586999416351], + [0.33721199631691, 0.282882988452911], + [0.296391993761063, 0.293242990970612], + [0.169294998049736, 0.193813979625702], + [0.447580009698868, 0.302609980106354], + [0.392390012741089, 0.353887975215912], + [0.354490011930466, 0.696784019470215], + [0.067304998636246, 0.730105042457581], + [0.442739009857178, 0.572826027870178], + [0.457098007202148, 0.584792017936707], + [0.381974011659622, 0.694710969924927], + [0.392388999462128, 0.694203019142151], + [0.277076005935669, 0.271932005882263], + [0.422551989555359, 0.563233017921448], + [0.385919004678726, 0.281364023685455], + [0.383103013038635, 0.255840003490448], + [0.331431001424789, 0.119714021682739], + [0.229923993349075, 0.232002973556519], + [0.364500999450684, 0.189113974571228], + [0.229622006416321, 0.299540996551514], + [0.173287004232407, 0.278747975826263], + [0.472878992557526, 0.666198015213013], + [0.446828007698059, 0.668527007102966], + [0.422762006521225, 0.673889994621277], + [0.445307999849319, 0.580065965652466], + [0.388103008270264, 0.693961024284363], + [0.403039008378983, 0.706539988517761], + [0.403629004955292, 0.693953037261963], + [0.460041999816895, 0.557139039039612], + [0.431158006191254, 0.692366003990173], + [0.452181994915009, 0.692366003990173], + [0.475387006998062, 0.692366003990173], + [0.465828001499176, 0.779190003871918], + [0.472328990697861, 0.736225962638855], + [0.473087012767792, 0.717857003211975], + [0.473122000694275, 0.704625964164734], + [0.473033010959625, 0.695277988910675], + [0.427942007780075, 0.695277988910675], + [0.426479011774063, 0.703539967536926], + [0.423162013292313, 0.711845993995667], + [0.4183090031147, 0.720062971115112], + [0.390094995498657, 0.639572978019714], + [0.013953999616206, 0.560034036636353], + [0.499913990497589, 0.58014702796936], + [0.413199990987778, 0.69539999961853], + [0.409626007080078, 0.701822996139526], + [0.468080013990402, 0.601534962654114], + [0.422728985548019, 0.585985004901886], + [0.463079988956451, 0.593783974647522], + [0.37211999297142, 0.47341400384903], + [0.334562003612518, 0.496073007583618], + [0.411671012639999, 0.546965003013611], + [0.242175996303558, 0.14767599105835], + [0.290776997804642, 0.201445996761322], + [0.327338010072708, 0.256527006626129], + [0.399509996175766, 0.748921036720276], + [0.441727995872498, 0.261676013469696], + [0.429764986038208, 0.187834024429321], + [0.412198007106781, 0.108901023864746], + [0.288955003023148, 0.398952007293701], + [0.218936994671822, 0.435410976409912], + [0.41278201341629, 0.398970007896423], + [0.257135003805161, 0.355440020561218], + [0.427684992551804, 0.437960982322693], + [0.448339998722076, 0.536936044692993], + [0.178560003638268, 0.45755398273468], + [0.247308000922203, 0.457193970680237], + [0.286267012357712, 0.467674970626831], + [0.332827985286713, 0.460712015628815], + [0.368755996227264, 0.447206974029541], + [0.398963987827301, 0.432654976844788], + [0.476410001516342, 0.405806005001068], + [0.189241006970406, 0.523923993110657], + [0.228962004184723, 0.348950982093811], + [0.490725994110107, 0.562400996685028], + [0.404670000076294, 0.485132992267609], + [0.019469000399113, 0.401564002037048], + [0.426243007183075, 0.420431017875671], + [0.396993011236191, 0.548797011375427], + [0.266469985246658, 0.376977026462555], + [0.439121007919312, 0.51895797252655], + [0.032313998788595, 0.644356966018677], + [0.419054001569748, 0.387154996395111], + [0.462783008813858, 0.505746960639954], + [0.238978996872902, 0.779744982719421], + [0.198220998048782, 0.831938028335571], + [0.107550002634525, 0.540755033493042], + [0.183610007166862, 0.740257024765015], + [0.134409993886948, 0.333683013916016], + [0.385764002799988, 0.883153975009918], + [0.490967005491257, 0.579378008842468], + [0.382384985685349, 0.508572995662689], + [0.174399003386497, 0.397670984268188], + [0.318785011768341, 0.39623498916626], + [0.343364000320435, 0.400596976280212], + [0.396100014448166, 0.710216999053955], + [0.187885001301765, 0.588537991046906], + [0.430987000465393, 0.944064974784851], + [0.318993002176285, 0.898285031318665], + [0.266247987747192, 0.869701027870178], + [0.500023007392883, 0.190576016902924], + [0.499976992607117, 0.954452991485596], + [0.366169989109039, 0.398822009563446], + [0.393207013607025, 0.39553701877594], + [0.410373002290726, 0.391080021858215], + [0.194993004202843, 0.342101991176605], + [0.388664990663528, 0.362284004688263], + [0.365961998701096, 0.355970978736877], + [0.343364000320435, 0.355356991291046], + [0.318785011768341, 0.35834002494812], + [0.301414996385574, 0.363156020641327], + [0.058132998645306, 0.319076001644135], + [0.301414996385574, 0.387449026107788], + [0.499987989664078, 0.618434011936188], + [0.415838003158569, 0.624195992946625], + [0.445681989192963, 0.566076993942261], + [0.465844005346298, 0.620640993118286], + [0.49992299079895, 0.351523995399475], + [0.288718998432159, 0.819945991039276], + [0.335278987884521, 0.852819979190826], + [0.440512001514435, 0.902418971061707], + [0.128294005990028, 0.791940987110138], + [0.408771991729736, 0.373893976211548], + [0.455606997013092, 0.451801002025604], + [0.499877005815506, 0.908990025520325], + [0.375436991453171, 0.924192011356354], + [0.11421000212431, 0.615022003650665], + [0.448662012815475, 0.695277988910675], + [0.4480200111866, 0.704632043838501], + [0.447111994028091, 0.715808033943176], + [0.444831997156143, 0.730794012546539], + [0.430011987686157, 0.766808986663818], + [0.406787008047104, 0.685672998428345], + [0.400738000869751, 0.681069016456604], + [0.392399996519089, 0.677703022956848], + [0.367855995893478, 0.663918972015381], + [0.247923001646996, 0.601333022117615], + [0.452769994735718, 0.420849978923798], + [0.43639200925827, 0.359887003898621], + [0.416164010763168, 0.368713974952698], + [0.413385987281799, 0.692366003990173], + [0.228018000721931, 0.683571994304657], + [0.468268007040024, 0.352671027183533], + [0.411361992359161, 0.804327011108398], + [0.499989002943039, 0.469825029373169], + [0.479153990745544, 0.442654013633728], + [0.499974012374878, 0.439637005329132], + [0.432112008333206, 0.493588984012604], + [0.499886006116867, 0.866917014122009], + [0.49991300702095, 0.821729004383087], + [0.456548988819122, 0.819200992584229], + [0.344549000263214, 0.745438992977142], + [0.37890899181366, 0.574010014533997], + [0.374292999505997, 0.780184984207153], + [0.319687992334366, 0.570737957954407], + [0.357154995203018, 0.604269981384277], + [0.295284003019333, 0.621580958366394], + [0.447750002145767, 0.862477004528046], + [0.410986006259918, 0.508723020553589], + [0.31395098567009, 0.775308012962341], + [0.354128003120422, 0.812552988529205], + [0.324548006057739, 0.703992962837219], + [0.189096003770828, 0.646299958229065], + [0.279776990413666, 0.71465802192688], + [0.1338230073452, 0.682700991630554], + [0.336768001317978, 0.644733011722565], + [0.429883986711502, 0.466521978378296], + [0.455527991056442, 0.548622965812683], + [0.437114000320435, 0.558896005153656], + [0.467287987470627, 0.529924988746643], + [0.414712011814117, 0.335219979286194], + [0.37704598903656, 0.322777986526489], + [0.344107985496521, 0.320150971412659], + [0.312875986099243, 0.32233202457428], + [0.283526003360748, 0.333190023899078], + [0.241245999932289, 0.382785975933075], + [0.102986000478268, 0.468762993812561], + [0.267612010240555, 0.424560010433197], + [0.297879010438919, 0.433175981044769], + [0.333433985710144, 0.433878004550934], + [0.366427004337311, 0.426115989685059], + [0.396012008190155, 0.416696012020111], + [0.420121014118195, 0.41022801399231], + [0.007561000064015, 0.480777025222778], + [0.432949006557465, 0.569517970085144], + [0.458638995885849, 0.479089021682739], + [0.473466008901596, 0.545744001865387], + [0.476087987422943, 0.563830018043518], + [0.468472003936768, 0.555056989192963], + [0.433990985155106, 0.582361996173859], + [0.483518004417419, 0.562983989715576], + [0.482482999563217, 0.57784903049469], + [0.42645001411438, 0.389798998832703], + [0.438998997211456, 0.39649498462677], + [0.450067013502121, 0.400434017181396], + [0.289712011814117, 0.368252992630005], + [0.276670008897781, 0.363372981548309], + [0.517862021923065, 0.471948027610779], + [0.710287988185883, 0.380764007568359], + [0.526226997375488, 0.573909997940063], + [0.895093023777008, 0.254140973091125], + [0.634069979190826, 0.409575998783112], + [0.661242008209229, 0.41302502155304], + [0.688880026340485, 0.409460008144379], + [0.725341975688934, 0.389131009578705], + [0.606630027294159, 0.40370500087738], + [0.654766023159027, 0.344011008739471], + [0.629905998706818, 0.346076011657715], + [0.680678009986877, 0.347265005111694], + [0.702096998691559, 0.353591024875641], + [0.75221198797226, 0.410804986953735], + [0.602918028831482, 0.842862963676453], + [0.719901978969574, 0.375599980354309], + [0.893692970275879, 0.399959981441498], + [0.790081977844238, 0.391354024410248], + [0.643998026847839, 0.534487962722778], + [0.528249025344849, 0.65040397644043], + [0.525849997997284, 0.680191040039062], + [0.560214996337891, 0.657229006290436], + [0.585384011268616, 0.66654098033905], + [0.549625992774963, 0.680860996246338], + [0.57122802734375, 0.682691991329193], + [0.624852001667023, 0.72809898853302], + [0.513050019741058, 0.547281980514526], + [0.51509702205658, 0.527251958847046], + [0.742246985435486, 0.314507007598877], + [0.598631024360657, 0.454979002475739], + [0.570338010787964, 0.548575043678284], + [0.578631997108459, 0.533622980117798], + [0.723087012767792, 0.532054007053375], + [0.516445994377136, 0.499638974666595], + [0.662801027297974, 0.282917976379395], + [0.70362401008606, 0.293271005153656], + [0.830704987049103, 0.193813979625702], + [0.552385985851288, 0.302568018436432], + [0.607609987258911, 0.353887975215912], + [0.645429015159607, 0.696707010269165], + [0.932694971561432, 0.730105042457581], + [0.557260990142822, 0.572826027870178], + [0.542901992797852, 0.584792017936707], + [0.6180260181427, 0.694710969924927], + [0.607590973377228, 0.694203019142151], + [0.722943007946014, 0.271963000297546], + [0.577413976192474, 0.563166975975037], + [0.614082992076874, 0.281386971473694], + [0.616907000541687, 0.255886018276215], + [0.668509006500244, 0.119913995265961], + [0.770092010498047, 0.232020974159241], + [0.635536015033722, 0.189248979091644], + [0.77039098739624, 0.299556016921997], + [0.826722025871277, 0.278755009174347], + [0.527121007442474, 0.666198015213013], + [0.553171992301941, 0.668527007102966], + [0.577238023281097, 0.673889994621277], + [0.554691970348358, 0.580065965652466], + [0.611896991729736, 0.693961024284363], + [0.59696102142334, 0.706539988517761], + [0.596370995044708, 0.693953037261963], + [0.539958000183105, 0.557139039039612], + [0.568841993808746, 0.692366003990173], + [0.547818005084991, 0.692366003990173], + [0.52461302280426, 0.692366003990173], + [0.534089982509613, 0.779141008853912], + [0.527670979499817, 0.736225962638855], + [0.526912987232208, 0.717857003211975], + [0.526877999305725, 0.704625964164734], + [0.526966989040375, 0.695277988910675], + [0.572058022022247, 0.695277988910675], + [0.573521018028259, 0.703539967536926], + [0.57683801651001, 0.711845993995667], + [0.581691026687622, 0.720062971115112], + [0.609944999217987, 0.639909982681274], + [0.986046016216278, 0.560034036636353], + [0.5867999792099, 0.69539999961853], + [0.590372025966644, 0.701822996139526], + [0.531915009021759, 0.601536989212036], + [0.577268004417419, 0.585934996604919], + [0.536915004253387, 0.593786001205444], + [0.627542972564697, 0.473352015018463], + [0.665585994720459, 0.495950996875763], + [0.588353991508484, 0.546862006187439], + [0.757824003696442, 0.14767599105835], + [0.709249973297119, 0.201507985591888], + [0.672684013843536, 0.256581008434296], + [0.600408971309662, 0.74900496006012], + [0.55826598405838, 0.261672019958496], + [0.570303976535797, 0.187870979309082], + [0.588165998458862, 0.109044015407562], + [0.711045026779175, 0.398952007293701], + [0.781069993972778, 0.435405015945435], + [0.587247014045715, 0.398931980133057], + [0.742869973182678, 0.355445981025696], + [0.572156012058258, 0.437651991844177], + [0.55186802148819, 0.536570012569427], + [0.821442008018494, 0.457556009292603], + [0.752701997756958, 0.457181990146637], + [0.71375697851181, 0.467626988887787], + [0.66711300611496, 0.460672974586487], + [0.631101012229919, 0.447153985500336], + [0.6008620262146, 0.432473003864288], + [0.523481011390686, 0.405627012252808], + [0.810747981071472, 0.523926019668579], + [0.771045982837677, 0.348959028720856], + [0.509127020835876, 0.562718033790588], + [0.595292985439301, 0.485023975372314], + [0.980530977249146, 0.401564002037048], + [0.573499977588654, 0.420000016689301], + [0.602994978427887, 0.548687994480133], + [0.733529984951019, 0.376977026462555], + [0.560611009597778, 0.519016981124878], + [0.967685997486115, 0.644356966018677], + [0.580985009670258, 0.387160003185272], + [0.537728011608124, 0.505385041236877], + [0.760966002941132, 0.779752969741821], + [0.801778972148895, 0.831938028335571], + [0.892440974712372, 0.54076099395752], + [0.816350996494293, 0.740260004997253], + [0.865594983100891, 0.333687007427216], + [0.614073991775513, 0.883246004581451], + [0.508952975273132, 0.579437971115112], + [0.617941975593567, 0.508316040039062], + [0.825608015060425, 0.397674977779388], + [0.681214988231659, 0.39623498916626], + [0.656635999679565, 0.400596976280212], + [0.603900015354156, 0.710216999053955], + [0.81208598613739, 0.588539004325867], + [0.56801301240921, 0.944564998149872], + [0.681007981300354, 0.898285031318665], + [0.733752012252808, 0.869701027870178], + [0.633830010890961, 0.398822009563446], + [0.606792986392975, 0.39553701877594], + [0.589659988880157, 0.391062021255493], + [0.805015981197357, 0.342108011245728], + [0.611334979534149, 0.362284004688263], + [0.634037971496582, 0.355970978736877], + [0.656635999679565, 0.355356991291046], + [0.681214988231659, 0.35834002494812], + [0.698584973812103, 0.363156020641327], + [0.941866993904114, 0.319076001644135], + [0.698584973812103, 0.387449026107788], + [0.584177017211914, 0.624107003211975], + [0.554318010807037, 0.566076993942261], + [0.534153997898102, 0.62064003944397], + [0.711217999458313, 0.819975018501282], + [0.664629995822906, 0.852871000766754], + [0.559099972248077, 0.902631998062134], + [0.871706008911133, 0.791940987110138], + [0.591234028339386, 0.373893976211548], + [0.544341027736664, 0.451583981513977], + [0.624562978744507, 0.924192011356354], + [0.88577002286911, 0.615028977394104], + [0.551338016986847, 0.695277988910675], + [0.551980018615723, 0.704632043838501], + [0.552887976169586, 0.715808033943176], + [0.555167973041534, 0.730794012546539], + [0.569944024085999, 0.767035007476807], + [0.593203008174896, 0.685675978660583], + [0.599261999130249, 0.681069016456604], + [0.607599973678589, 0.677703022956848], + [0.631937980651855, 0.663500010967255], + [0.752032995223999, 0.601315021514893], + [0.547226011753082, 0.420395016670227], + [0.563543975353241, 0.359827995300293], + [0.583841025829315, 0.368713974952698], + [0.586614012718201, 0.692366003990173], + [0.771915018558502, 0.683578014373779], + [0.531597018241882, 0.352482974529266], + [0.588370978832245, 0.804440975189209], + [0.52079701423645, 0.442565023899078], + [0.567984998226166, 0.493479013442993], + [0.543282985687256, 0.819254994392395], + [0.655317008495331, 0.745514988899231], + [0.621008992195129, 0.574018001556396], + [0.625559985637665, 0.78031200170517], + [0.680198013782501, 0.570719003677368], + [0.64276397228241, 0.604337990283966], + [0.704662978649139, 0.621529996395111], + [0.552012026309967, 0.862591981887817], + [0.589071989059448, 0.508637011051178], + [0.685944974422455, 0.775357007980347], + [0.645735025405884, 0.812640011310577], + [0.675342977046967, 0.703978002071381], + [0.810858011245728, 0.646304965019226], + [0.72012197971344, 0.714666962623596], + [0.866151988506317, 0.682704985141754], + [0.663187026977539, 0.644596993923187], + [0.570082008838654, 0.466325998306274], + [0.544561982154846, 0.548375964164734], + [0.562758982181549, 0.558784961700439], + [0.531987011432648, 0.530140042304993], + [0.585271000862122, 0.335177004337311], + [0.622952997684479, 0.32277899980545], + [0.655896008014679, 0.320163011550903], + [0.687132000923157, 0.322345972061157], + [0.716481983661652, 0.333200991153717], + [0.758756995201111, 0.382786989212036], + [0.897013008594513, 0.468769013881683], + [0.732392013072968, 0.424547016620636], + [0.70211398601532, 0.433162987232208], + [0.66652500629425, 0.433866024017334], + [0.633504986763, 0.426087975502014], + [0.603875994682312, 0.416586995124817], + [0.579657971858978, 0.409945011138916], + [0.992439985275269, 0.480777025222778], + [0.567192018032074, 0.569419980049133], + [0.54136598110199, 0.478899002075195], + [0.526564002037048, 0.546118021011353], + [0.523913025856018, 0.563830018043518], + [0.531529009342194, 0.555056989192963], + [0.566035985946655, 0.582329034805298], + [0.51631098985672, 0.563053965568542], + [0.5174720287323, 0.577877044677734], + [0.573594987392426, 0.389806985855103], + [0.560697972774506, 0.395331978797913], + [0.549755990505219, 0.399751007556915], + [0.710287988185883, 0.368252992630005], + [0.723330020904541, 0.363372981548309] +]; +var TRI468 = [ + 127, + 34, + 139, + 11, + 0, + 37, + 232, + 231, + 120, + 72, + 37, + 39, + 128, + 121, + 47, + 232, + 121, + 128, + 104, + 69, + 67, + 175, + 171, + 148, + 157, + 154, + 155, + 118, + 50, + 101, + 73, + 39, + 40, + 9, + 151, + 108, + 48, + 115, + 131, + 194, + 204, + 211, + 74, + 40, + 185, + 80, + 42, + 183, + 40, + 92, + 186, + 230, + 229, + 118, + 202, + 212, + 214, + 83, + 18, + 17, + 76, + 61, + 146, + 160, + 29, + 30, + 56, + 157, + 173, + 106, + 204, + 194, + 135, + 214, + 192, + 203, + 165, + 98, + 21, + 71, + 68, + 51, + 45, + 4, + 144, + 24, + 23, + 77, + 146, + 91, + 205, + 50, + 187, + 201, + 200, + 18, + 91, + 106, + 182, + 90, + 91, + 181, + 85, + 84, + 17, + 206, + 203, + 36, + 148, + 171, + 140, + 92, + 40, + 39, + 193, + 189, + 244, + 159, + 158, + 28, + 247, + 246, + 161, + 236, + 3, + 196, + 54, + 68, + 104, + 193, + 168, + 8, + 117, + 228, + 31, + 189, + 193, + 55, + 98, + 97, + 99, + 126, + 47, + 100, + 166, + 79, + 218, + 155, + 154, + 26, + 209, + 49, + 131, + 135, + 136, + 150, + 47, + 126, + 217, + 223, + 52, + 53, + 45, + 51, + 134, + 211, + 170, + 140, + 67, + 69, + 108, + 43, + 106, + 91, + 230, + 119, + 120, + 226, + 130, + 247, + 63, + 53, + 52, + 238, + 20, + 242, + 46, + 70, + 156, + 78, + 62, + 96, + 46, + 53, + 63, + 143, + 34, + 227, + 173, + 155, + 133, + 123, + 117, + 111, + 44, + 125, + 19, + 236, + 134, + 51, + 216, + 206, + 205, + 154, + 153, + 22, + 39, + 37, + 167, + 200, + 201, + 208, + 36, + 142, + 100, + 57, + 212, + 202, + 20, + 60, + 99, + 28, + 158, + 157, + 35, + 226, + 113, + 160, + 159, + 27, + 204, + 202, + 210, + 113, + 225, + 46, + 43, + 202, + 204, + 62, + 76, + 77, + 137, + 123, + 116, + 41, + 38, + 72, + 203, + 129, + 142, + 64, + 98, + 240, + 49, + 102, + 64, + 41, + 73, + 74, + 212, + 216, + 207, + 42, + 74, + 184, + 169, + 170, + 211, + 170, + 149, + 176, + 105, + 66, + 69, + 122, + 6, + 168, + 123, + 147, + 187, + 96, + 77, + 90, + 65, + 55, + 107, + 89, + 90, + 180, + 101, + 100, + 120, + 63, + 105, + 104, + 93, + 137, + 227, + 15, + 86, + 85, + 129, + 102, + 49, + 14, + 87, + 86, + 55, + 8, + 9, + 100, + 47, + 121, + 145, + 23, + 22, + 88, + 89, + 179, + 6, + 122, + 196, + 88, + 95, + 96, + 138, + 172, + 136, + 215, + 58, + 172, + 115, + 48, + 219, + 42, + 80, + 81, + 195, + 3, + 51, + 43, + 146, + 61, + 171, + 175, + 199, + 81, + 82, + 38, + 53, + 46, + 225, + 144, + 163, + 110, + 246, + 33, + 7, + 52, + 65, + 66, + 229, + 228, + 117, + 34, + 127, + 234, + 107, + 108, + 69, + 109, + 108, + 151, + 48, + 64, + 235, + 62, + 78, + 191, + 129, + 209, + 126, + 111, + 35, + 143, + 163, + 161, + 246, + 117, + 123, + 50, + 222, + 65, + 52, + 19, + 125, + 141, + 221, + 55, + 65, + 3, + 195, + 197, + 25, + 7, + 33, + 220, + 237, + 44, + 70, + 71, + 139, + 122, + 193, + 245, + 247, + 130, + 33, + 71, + 21, + 162, + 153, + 158, + 159, + 170, + 169, + 150, + 188, + 174, + 196, + 216, + 186, + 92, + 144, + 160, + 161, + 2, + 97, + 167, + 141, + 125, + 241, + 164, + 167, + 37, + 72, + 38, + 12, + 145, + 159, + 160, + 38, + 82, + 13, + 63, + 68, + 71, + 226, + 35, + 111, + 158, + 153, + 154, + 101, + 50, + 205, + 206, + 92, + 165, + 209, + 198, + 217, + 165, + 167, + 97, + 220, + 115, + 218, + 133, + 112, + 243, + 239, + 238, + 241, + 214, + 135, + 169, + 190, + 173, + 133, + 171, + 208, + 32, + 125, + 44, + 237, + 86, + 87, + 178, + 85, + 86, + 179, + 84, + 85, + 180, + 83, + 84, + 181, + 201, + 83, + 182, + 137, + 93, + 132, + 76, + 62, + 183, + 61, + 76, + 184, + 57, + 61, + 185, + 212, + 57, + 186, + 214, + 207, + 187, + 34, + 143, + 156, + 79, + 239, + 237, + 123, + 137, + 177, + 44, + 1, + 4, + 201, + 194, + 32, + 64, + 102, + 129, + 213, + 215, + 138, + 59, + 166, + 219, + 242, + 99, + 97, + 2, + 94, + 141, + 75, + 59, + 235, + 24, + 110, + 228, + 25, + 130, + 226, + 23, + 24, + 229, + 22, + 23, + 230, + 26, + 22, + 231, + 112, + 26, + 232, + 189, + 190, + 243, + 221, + 56, + 190, + 28, + 56, + 221, + 27, + 28, + 222, + 29, + 27, + 223, + 30, + 29, + 224, + 247, + 30, + 225, + 238, + 79, + 20, + 166, + 59, + 75, + 60, + 75, + 240, + 147, + 177, + 215, + 20, + 79, + 166, + 187, + 147, + 213, + 112, + 233, + 244, + 233, + 128, + 245, + 128, + 114, + 188, + 114, + 217, + 174, + 131, + 115, + 220, + 217, + 198, + 236, + 198, + 131, + 134, + 177, + 132, + 58, + 143, + 35, + 124, + 110, + 163, + 7, + 228, + 110, + 25, + 356, + 389, + 368, + 11, + 302, + 267, + 452, + 350, + 349, + 302, + 303, + 269, + 357, + 343, + 277, + 452, + 453, + 357, + 333, + 332, + 297, + 175, + 152, + 377, + 384, + 398, + 382, + 347, + 348, + 330, + 303, + 304, + 270, + 9, + 336, + 337, + 278, + 279, + 360, + 418, + 262, + 431, + 304, + 408, + 409, + 310, + 415, + 407, + 270, + 409, + 410, + 450, + 348, + 347, + 422, + 430, + 434, + 313, + 314, + 17, + 306, + 307, + 375, + 387, + 388, + 260, + 286, + 414, + 398, + 335, + 406, + 418, + 364, + 367, + 416, + 423, + 358, + 327, + 251, + 284, + 298, + 281, + 5, + 4, + 373, + 374, + 253, + 307, + 320, + 321, + 425, + 427, + 411, + 421, + 313, + 18, + 321, + 405, + 406, + 320, + 404, + 405, + 315, + 16, + 17, + 426, + 425, + 266, + 377, + 400, + 369, + 322, + 391, + 269, + 417, + 465, + 464, + 386, + 257, + 258, + 466, + 260, + 388, + 456, + 399, + 419, + 284, + 332, + 333, + 417, + 285, + 8, + 346, + 340, + 261, + 413, + 441, + 285, + 327, + 460, + 328, + 355, + 371, + 329, + 392, + 439, + 438, + 382, + 341, + 256, + 429, + 420, + 360, + 364, + 394, + 379, + 277, + 343, + 437, + 443, + 444, + 283, + 275, + 440, + 363, + 431, + 262, + 369, + 297, + 338, + 337, + 273, + 375, + 321, + 450, + 451, + 349, + 446, + 342, + 467, + 293, + 334, + 282, + 458, + 461, + 462, + 276, + 353, + 383, + 308, + 324, + 325, + 276, + 300, + 293, + 372, + 345, + 447, + 382, + 398, + 362, + 352, + 345, + 340, + 274, + 1, + 19, + 456, + 248, + 281, + 436, + 427, + 425, + 381, + 256, + 252, + 269, + 391, + 393, + 200, + 199, + 428, + 266, + 330, + 329, + 287, + 273, + 422, + 250, + 462, + 328, + 258, + 286, + 384, + 265, + 353, + 342, + 387, + 259, + 257, + 424, + 431, + 430, + 342, + 353, + 276, + 273, + 335, + 424, + 292, + 325, + 307, + 366, + 447, + 345, + 271, + 303, + 302, + 423, + 266, + 371, + 294, + 455, + 460, + 279, + 278, + 294, + 271, + 272, + 304, + 432, + 434, + 427, + 272, + 407, + 408, + 394, + 430, + 431, + 395, + 369, + 400, + 334, + 333, + 299, + 351, + 417, + 168, + 352, + 280, + 411, + 325, + 319, + 320, + 295, + 296, + 336, + 319, + 403, + 404, + 330, + 348, + 349, + 293, + 298, + 333, + 323, + 454, + 447, + 15, + 16, + 315, + 358, + 429, + 279, + 14, + 15, + 316, + 285, + 336, + 9, + 329, + 349, + 350, + 374, + 380, + 252, + 318, + 402, + 403, + 6, + 197, + 419, + 318, + 319, + 325, + 367, + 364, + 365, + 435, + 367, + 397, + 344, + 438, + 439, + 272, + 271, + 311, + 195, + 5, + 281, + 273, + 287, + 291, + 396, + 428, + 199, + 311, + 271, + 268, + 283, + 444, + 445, + 373, + 254, + 339, + 263, + 466, + 249, + 282, + 334, + 296, + 449, + 347, + 346, + 264, + 447, + 454, + 336, + 296, + 299, + 338, + 10, + 151, + 278, + 439, + 455, + 292, + 407, + 415, + 358, + 371, + 355, + 340, + 345, + 372, + 390, + 249, + 466, + 346, + 347, + 280, + 442, + 443, + 282, + 19, + 94, + 370, + 441, + 442, + 295, + 248, + 419, + 197, + 263, + 255, + 359, + 440, + 275, + 274, + 300, + 383, + 368, + 351, + 412, + 465, + 263, + 467, + 466, + 301, + 368, + 389, + 380, + 374, + 386, + 395, + 378, + 379, + 412, + 351, + 419, + 436, + 426, + 322, + 373, + 390, + 388, + 2, + 164, + 393, + 370, + 462, + 461, + 164, + 0, + 267, + 302, + 11, + 12, + 374, + 373, + 387, + 268, + 12, + 13, + 293, + 300, + 301, + 446, + 261, + 340, + 385, + 384, + 381, + 330, + 266, + 425, + 426, + 423, + 391, + 429, + 355, + 437, + 391, + 327, + 326, + 440, + 457, + 438, + 341, + 382, + 362, + 459, + 457, + 461, + 434, + 430, + 394, + 414, + 463, + 362, + 396, + 369, + 262, + 354, + 461, + 457, + 316, + 403, + 402, + 315, + 404, + 403, + 314, + 405, + 404, + 313, + 406, + 405, + 421, + 418, + 406, + 366, + 401, + 361, + 306, + 408, + 407, + 291, + 409, + 408, + 287, + 410, + 409, + 432, + 436, + 410, + 434, + 416, + 411, + 264, + 368, + 383, + 309, + 438, + 457, + 352, + 376, + 401, + 274, + 275, + 4, + 421, + 428, + 262, + 294, + 327, + 358, + 433, + 416, + 367, + 289, + 455, + 439, + 462, + 370, + 326, + 2, + 326, + 370, + 305, + 460, + 455, + 254, + 449, + 448, + 255, + 261, + 446, + 253, + 450, + 449, + 252, + 451, + 450, + 256, + 452, + 451, + 341, + 453, + 452, + 413, + 464, + 463, + 441, + 413, + 414, + 258, + 442, + 441, + 257, + 443, + 442, + 259, + 444, + 443, + 260, + 445, + 444, + 467, + 342, + 445, + 459, + 458, + 250, + 289, + 392, + 290, + 290, + 328, + 460, + 376, + 433, + 435, + 250, + 290, + 392, + 411, + 416, + 433, + 341, + 463, + 464, + 453, + 464, + 465, + 357, + 465, + 412, + 343, + 412, + 399, + 360, + 363, + 440, + 437, + 399, + 456, + 420, + 456, + 363, + 401, + 435, + 288, + 372, + 383, + 353, + 339, + 255, + 249, + 448, + 261, + 255, + 133, + 243, + 190, + 133, + 155, + 112, + 33, + 246, + 247, + 33, + 130, + 25, + 398, + 384, + 286, + 362, + 398, + 414, + 362, + 463, + 341, + 263, + 359, + 467, + 263, + 249, + 255, + 466, + 467, + 260, + 75, + 60, + 166, + 238, + 239, + 79, + 162, + 127, + 139, + 72, + 11, + 37, + 121, + 232, + 120, + 73, + 72, + 39, + 114, + 128, + 47, + 233, + 232, + 128, + 103, + 104, + 67, + 152, + 175, + 148, + 173, + 157, + 155, + 119, + 118, + 101, + 74, + 73, + 40, + 107, + 9, + 108, + 49, + 48, + 131, + 32, + 194, + 211, + 184, + 74, + 185, + 191, + 80, + 183, + 185, + 40, + 186, + 119, + 230, + 118, + 210, + 202, + 214, + 84, + 83, + 17, + 77, + 76, + 146, + 161, + 160, + 30, + 190, + 56, + 173, + 182, + 106, + 194, + 138, + 135, + 192, + 129, + 203, + 98, + 54, + 21, + 68, + 5, + 51, + 4, + 145, + 144, + 23, + 90, + 77, + 91, + 207, + 205, + 187, + 83, + 201, + 18, + 181, + 91, + 182, + 180, + 90, + 181, + 16, + 85, + 17, + 205, + 206, + 36, + 176, + 148, + 140, + 165, + 92, + 39, + 245, + 193, + 244, + 27, + 159, + 28, + 30, + 247, + 161, + 174, + 236, + 196, + 103, + 54, + 104, + 55, + 193, + 8, + 111, + 117, + 31, + 221, + 189, + 55, + 240, + 98, + 99, + 142, + 126, + 100, + 219, + 166, + 218, + 112, + 155, + 26, + 198, + 209, + 131, + 169, + 135, + 150, + 114, + 47, + 217, + 224, + 223, + 53, + 220, + 45, + 134, + 32, + 211, + 140, + 109, + 67, + 108, + 146, + 43, + 91, + 231, + 230, + 120, + 113, + 226, + 247, + 105, + 63, + 52, + 241, + 238, + 242, + 124, + 46, + 156, + 95, + 78, + 96, + 70, + 46, + 63, + 116, + 143, + 227, + 116, + 123, + 111, + 1, + 44, + 19, + 3, + 236, + 51, + 207, + 216, + 205, + 26, + 154, + 22, + 165, + 39, + 167, + 199, + 200, + 208, + 101, + 36, + 100, + 43, + 57, + 202, + 242, + 20, + 99, + 56, + 28, + 157, + 124, + 35, + 113, + 29, + 160, + 27, + 211, + 204, + 210, + 124, + 113, + 46, + 106, + 43, + 204, + 96, + 62, + 77, + 227, + 137, + 116, + 73, + 41, + 72, + 36, + 203, + 142, + 235, + 64, + 240, + 48, + 49, + 64, + 42, + 41, + 74, + 214, + 212, + 207, + 183, + 42, + 184, + 210, + 169, + 211, + 140, + 170, + 176, + 104, + 105, + 69, + 193, + 122, + 168, + 50, + 123, + 187, + 89, + 96, + 90, + 66, + 65, + 107, + 179, + 89, + 180, + 119, + 101, + 120, + 68, + 63, + 104, + 234, + 93, + 227, + 16, + 15, + 85, + 209, + 129, + 49, + 15, + 14, + 86, + 107, + 55, + 9, + 120, + 100, + 121, + 153, + 145, + 22, + 178, + 88, + 179, + 197, + 6, + 196, + 89, + 88, + 96, + 135, + 138, + 136, + 138, + 215, + 172, + 218, + 115, + 219, + 41, + 42, + 81, + 5, + 195, + 51, + 57, + 43, + 61, + 208, + 171, + 199, + 41, + 81, + 38, + 224, + 53, + 225, + 24, + 144, + 110, + 105, + 52, + 66, + 118, + 229, + 117, + 227, + 34, + 234, + 66, + 107, + 69, + 10, + 109, + 151, + 219, + 48, + 235, + 183, + 62, + 191, + 142, + 129, + 126, + 116, + 111, + 143, + 7, + 163, + 246, + 118, + 117, + 50, + 223, + 222, + 52, + 94, + 19, + 141, + 222, + 221, + 65, + 196, + 3, + 197, + 45, + 220, + 44, + 156, + 70, + 139, + 188, + 122, + 245, + 139, + 71, + 162, + 145, + 153, + 159, + 149, + 170, + 150, + 122, + 188, + 196, + 206, + 216, + 92, + 163, + 144, + 161, + 164, + 2, + 167, + 242, + 141, + 241, + 0, + 164, + 37, + 11, + 72, + 12, + 144, + 145, + 160, + 12, + 38, + 13, + 70, + 63, + 71, + 31, + 226, + 111, + 157, + 158, + 154, + 36, + 101, + 205, + 203, + 206, + 165, + 126, + 209, + 217, + 98, + 165, + 97, + 237, + 220, + 218, + 237, + 239, + 241, + 210, + 214, + 169, + 140, + 171, + 32, + 241, + 125, + 237, + 179, + 86, + 178, + 180, + 85, + 179, + 181, + 84, + 180, + 182, + 83, + 181, + 194, + 201, + 182, + 177, + 137, + 132, + 184, + 76, + 183, + 185, + 61, + 184, + 186, + 57, + 185, + 216, + 212, + 186, + 192, + 214, + 187, + 139, + 34, + 156, + 218, + 79, + 237, + 147, + 123, + 177, + 45, + 44, + 4, + 208, + 201, + 32, + 98, + 64, + 129, + 192, + 213, + 138, + 235, + 59, + 219, + 141, + 242, + 97, + 97, + 2, + 141, + 240, + 75, + 235, + 229, + 24, + 228, + 31, + 25, + 226, + 230, + 23, + 229, + 231, + 22, + 230, + 232, + 26, + 231, + 233, + 112, + 232, + 244, + 189, + 243, + 189, + 221, + 190, + 222, + 28, + 221, + 223, + 27, + 222, + 224, + 29, + 223, + 225, + 30, + 224, + 113, + 247, + 225, + 99, + 60, + 240, + 213, + 147, + 215, + 60, + 20, + 166, + 192, + 187, + 213, + 243, + 112, + 244, + 244, + 233, + 245, + 245, + 128, + 188, + 188, + 114, + 174, + 134, + 131, + 220, + 174, + 217, + 236, + 236, + 198, + 134, + 215, + 177, + 58, + 156, + 143, + 124, + 25, + 110, + 7, + 31, + 228, + 25, + 264, + 356, + 368, + 0, + 11, + 267, + 451, + 452, + 349, + 267, + 302, + 269, + 350, + 357, + 277, + 350, + 452, + 357, + 299, + 333, + 297, + 396, + 175, + 377, + 381, + 384, + 382, + 280, + 347, + 330, + 269, + 303, + 270, + 151, + 9, + 337, + 344, + 278, + 360, + 424, + 418, + 431, + 270, + 304, + 409, + 272, + 310, + 407, + 322, + 270, + 410, + 449, + 450, + 347, + 432, + 422, + 434, + 18, + 313, + 17, + 291, + 306, + 375, + 259, + 387, + 260, + 424, + 335, + 418, + 434, + 364, + 416, + 391, + 423, + 327, + 301, + 251, + 298, + 275, + 281, + 4, + 254, + 373, + 253, + 375, + 307, + 321, + 280, + 425, + 411, + 200, + 421, + 18, + 335, + 321, + 406, + 321, + 320, + 405, + 314, + 315, + 17, + 423, + 426, + 266, + 396, + 377, + 369, + 270, + 322, + 269, + 413, + 417, + 464, + 385, + 386, + 258, + 248, + 456, + 419, + 298, + 284, + 333, + 168, + 417, + 8, + 448, + 346, + 261, + 417, + 413, + 285, + 326, + 327, + 328, + 277, + 355, + 329, + 309, + 392, + 438, + 381, + 382, + 256, + 279, + 429, + 360, + 365, + 364, + 379, + 355, + 277, + 437, + 282, + 443, + 283, + 281, + 275, + 363, + 395, + 431, + 369, + 299, + 297, + 337, + 335, + 273, + 321, + 348, + 450, + 349, + 359, + 446, + 467, + 283, + 293, + 282, + 250, + 458, + 462, + 300, + 276, + 383, + 292, + 308, + 325, + 283, + 276, + 293, + 264, + 372, + 447, + 346, + 352, + 340, + 354, + 274, + 19, + 363, + 456, + 281, + 426, + 436, + 425, + 380, + 381, + 252, + 267, + 269, + 393, + 421, + 200, + 428, + 371, + 266, + 329, + 432, + 287, + 422, + 290, + 250, + 328, + 385, + 258, + 384, + 446, + 265, + 342, + 386, + 387, + 257, + 422, + 424, + 430, + 445, + 342, + 276, + 422, + 273, + 424, + 306, + 292, + 307, + 352, + 366, + 345, + 268, + 271, + 302, + 358, + 423, + 371, + 327, + 294, + 460, + 331, + 279, + 294, + 303, + 271, + 304, + 436, + 432, + 427, + 304, + 272, + 408, + 395, + 394, + 431, + 378, + 395, + 400, + 296, + 334, + 299, + 6, + 351, + 168, + 376, + 352, + 411, + 307, + 325, + 320, + 285, + 295, + 336, + 320, + 319, + 404, + 329, + 330, + 349, + 334, + 293, + 333, + 366, + 323, + 447, + 316, + 15, + 315, + 331, + 358, + 279, + 317, + 14, + 316, + 8, + 285, + 9, + 277, + 329, + 350, + 253, + 374, + 252, + 319, + 318, + 403, + 351, + 6, + 419, + 324, + 318, + 325, + 397, + 367, + 365, + 288, + 435, + 397, + 278, + 344, + 439, + 310, + 272, + 311, + 248, + 195, + 281, + 375, + 273, + 291, + 175, + 396, + 199, + 312, + 311, + 268, + 276, + 283, + 445, + 390, + 373, + 339, + 295, + 282, + 296, + 448, + 449, + 346, + 356, + 264, + 454, + 337, + 336, + 299, + 337, + 338, + 151, + 294, + 278, + 455, + 308, + 292, + 415, + 429, + 358, + 355, + 265, + 340, + 372, + 388, + 390, + 466, + 352, + 346, + 280, + 295, + 442, + 282, + 354, + 19, + 370, + 285, + 441, + 295, + 195, + 248, + 197, + 457, + 440, + 274, + 301, + 300, + 368, + 417, + 351, + 465, + 251, + 301, + 389, + 385, + 380, + 386, + 394, + 395, + 379, + 399, + 412, + 419, + 410, + 436, + 322, + 387, + 373, + 388, + 326, + 2, + 393, + 354, + 370, + 461, + 393, + 164, + 267, + 268, + 302, + 12, + 386, + 374, + 387, + 312, + 268, + 13, + 298, + 293, + 301, + 265, + 446, + 340, + 380, + 385, + 381, + 280, + 330, + 425, + 322, + 426, + 391, + 420, + 429, + 437, + 393, + 391, + 326, + 344, + 440, + 438, + 458, + 459, + 461, + 364, + 434, + 394, + 428, + 396, + 262, + 274, + 354, + 457, + 317, + 316, + 402, + 316, + 315, + 403, + 315, + 314, + 404, + 314, + 313, + 405, + 313, + 421, + 406, + 323, + 366, + 361, + 292, + 306, + 407, + 306, + 291, + 408, + 291, + 287, + 409, + 287, + 432, + 410, + 427, + 434, + 411, + 372, + 264, + 383, + 459, + 309, + 457, + 366, + 352, + 401, + 1, + 274, + 4, + 418, + 421, + 262, + 331, + 294, + 358, + 435, + 433, + 367, + 392, + 289, + 439, + 328, + 462, + 326, + 94, + 2, + 370, + 289, + 305, + 455, + 339, + 254, + 448, + 359, + 255, + 446, + 254, + 253, + 449, + 253, + 252, + 450, + 252, + 256, + 451, + 256, + 341, + 452, + 414, + 413, + 463, + 286, + 441, + 414, + 286, + 258, + 441, + 258, + 257, + 442, + 257, + 259, + 443, + 259, + 260, + 444, + 260, + 467, + 445, + 309, + 459, + 250, + 305, + 289, + 290, + 305, + 290, + 460, + 401, + 376, + 435, + 309, + 250, + 392, + 376, + 411, + 433, + 453, + 341, + 464, + 357, + 453, + 465, + 343, + 357, + 412, + 437, + 343, + 399, + 344, + 360, + 440, + 420, + 437, + 456, + 360, + 420, + 363, + 361, + 401, + 288, + 265, + 372, + 353, + 390, + 339, + 249, + 339, + 448, + 255 +]; +var VTX68 = [ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + 78, + 81, + 13, + 311, + 308, + 402, + 14, + 178 +]; +var VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; +var VTX7 = [33, 133, 362, 263, 1, 78, 308]; +var UV68 = VTX68.map((x) => UV468[x]); +var UV33 = VTX33.map((x) => UV468[x]); +var UV7 = VTX7.map((x) => UV468[x]); +function connectionsToIndices(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var pairsLips = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var pairsLeftEye = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var pairsLeftEyebrow = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var pairsLeftIris = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var pairsRightEye = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var pairsRightEyebrow = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var pairsRightIris = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var pairsFaceContour = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +var contourKeypoints = { + lips: connectionsToIndices(pairsLips), + leftEye: connectionsToIndices(pairsLeftEye), + leftEyebrow: connectionsToIndices(pairsLeftEyebrow), + leftIris: connectionsToIndices(pairsLeftIris), + rightEye: connectionsToIndices(pairsRightEye), + rightEyebrow: connectionsToIndices(pairsRightEyebrow), + rightIris: connectionsToIndices(pairsRightIris), + faceOval: connectionsToIndices(pairsFaceContour) +}; + +// src/face/constants.ts +var LIPS_CONNECTIONS = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var LEFT_EYE_CONNECTIONS = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var LEFT_EYEBROW_CONNECTIONS = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var LEFT_IRIS_CONNECTIONS = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var RIGHT_EYE_CONNECTIONS = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var RIGHT_EYEBROW_CONNECTIONS = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var RIGHT_IRIS_CONNECTIONS = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var FACE_OVAL_CONNECTIONS = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +function connectionsToIndices2(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = { + lips: connectionsToIndices2(LIPS_CONNECTIONS), + leftEye: connectionsToIndices2(LEFT_EYE_CONNECTIONS), + leftEyebrow: connectionsToIndices2(LEFT_EYEBROW_CONNECTIONS), + leftIris: connectionsToIndices2(LEFT_IRIS_CONNECTIONS), + rightEye: connectionsToIndices2(RIGHT_EYE_CONNECTIONS), + rightEyebrow: connectionsToIndices2(RIGHT_EYEBROW_CONNECTIONS), + rightIris: connectionsToIndices2(RIGHT_IRIS_CONNECTIONS), + faceOval: connectionsToIndices2(FACE_OVAL_CONNECTIONS) +}; +var indexLabelPairs = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR).map(([label, indices]) => indices.map((index2) => [index2, label])).flat(); +var MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs); +var LANDMARKS_REFINEMENT_LIPS_CONFIG = [ + 61, + 146, + 91, + 181, + 84, + 17, + 314, + 405, + 321, + 375, + 291, + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + 246, + 161, + 160, + 159, + 158, + 157, + 173, + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + 247, + 30, + 29, + 27, + 28, + 56, + 190, + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + 113, + 225, + 224, + 223, + 222, + 221, + 189, + 35, + 124, + 46, + 53, + 52, + 65, + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + 466, + 388, + 387, + 386, + 385, + 384, + 398, + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + 467, + 260, + 259, + 257, + 258, + 286, + 414, + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + 342, + 445, + 444, + 443, + 442, + 441, + 413, + 265, + 353, + 276, + 283, + 282, + 295, + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 +]; + +// src/draw/face.ts +var localOptions; +function drawLabels(f, ctx) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) + return; + let l = localOptions.faceLabels.slice(); + if (f.score) + l = replace(l, "[score]", 100 * f.score); + if (f.gender) + l = replace(l, "[gender]", f.gender); + if (f.genderScore) + l = replace(l, "[genderScore]", 100 * f.genderScore); + if (f.age) + l = replace(l, "[age]", f.age); + if (f.distance) + l = replace(l, "[distance]", 100 * f.distance); + if (f.real) + l = replace(l, "[real]", 100 * f.real); + if (f.live) + l = replace(l, "[live]", 100 * f.live); + if (f.emotion && f.emotion.length > 0) { + const emotion2 = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`); + if (emotion2.length > 3) + emotion2.length = 3; + l = replace(l, "[emotions]", emotion2.join(" ")); + } + if ((_c = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c.roll) + l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); + if ((_e = (_d = f.rotation) == null ? void 0 : _d.angle) == null ? void 0 : _e.yaw) + l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); + if ((_g = (_f = f.rotation) == null ? void 0 : _f.angle) == null ? void 0 : _g.pitch) + l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); + if ((_i = (_h = f.rotation) == null ? void 0 : _h.gaze) == null ? void 0 : _i.bearing) + l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); + labels(ctx, l, f.box[0], f.box[1], localOptions); +} +function drawIrisElipse(f, ctx) { + var _a, _b, _c, _d; + if (((_a = f.annotations) == null ? void 0 : _a.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } + if (((_c = f.annotations) == null ? void 0 : _c.rightEyeIris) && ((_d = f.annotations) == null ? void 0 : _d.rightEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } +} +function drawGazeSpheres(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.angle) && typeof Path2D !== "undefined") { + ctx.strokeStyle = "pink"; + const valX = f.box[0] + f.box[2] / 2 - f.box[3] * rad2deg(f.rotation.angle.yaw) / 90; + const valY = f.box[1] + f.box[3] / 2 + f.box[2] * rad2deg(f.rotation.angle.pitch) / 90; + const pathV = new Path2D(` + M ${f.box[0] + f.box[2] / 2} ${f.box[1]} C - ${o} ${e.box[1]}, - ${o} ${e.box[1]+e.box[3]}, - ${e.box[0]+e.box[2]/2} ${e.box[1]+e.box[3]} - `),a=new Path2D(` - M ${e.box[0]} ${e.box[1]+e.box[3]/2} + ${valX} ${f.box[1]}, + ${valX} ${f.box[1] + f.box[3]}, + ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]} + `); + const pathH = new Path2D(` + M ${f.box[0]} ${f.box[1] + f.box[3] / 2} C - ${e.box[0]} ${s}, - ${e.box[0]+e.box[2]} ${s}, - ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(a),t.stroke(A)}}function Wr(e,t){var n;if(G.drawGaze&&((n=e.rotation)==null?void 0:n.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let o=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];ct(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[o[0],o[1]],4);let s=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];ct(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[s[0],s[1]],4)}}function Dr(e,t){if(G.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[s]);lt(t,o,G)}Or(e,t)}}function Fr(e,t){if(G.drawPoints&&e.mesh.length>=468)for(let n=0;n0&&(Fr(s,o),Dr(s,o),Cr(s,o),Wr(s,o))}}function p2(e,t,n){var A,a;let o=J($,n);if(!t||!e)return;let s=z0(e);if(!!s){s.lineJoin="round";for(let i=0;i0)){let c=o.bodyLabels.slice();c=V(c,"[score]",100*t[i].score),L0(s,c,t[i].box[0],t[i].box[1],o)}if(o.drawPoints&&t[i].keypoints)for(let c=0;c0&&t[i].keypoints){s.font=o.font;for(let c of t[i].keypoints){if(!c.score||c.score===0)continue;let x=o.bodyPartLabels.slice();x=V(x,"[label]",c.part),x=V(x,"[score]",100*c.score),L0(s,x,c.position[0],c.position[1],o)}}if(o.drawPolygons&&t[i].keypoints&&t[i].annotations)for(let c of Object.values(t[i].annotations))for(let x of c)e1(s,x,o)}}}function u2(e,t,n){var A,a;let o=J($,n);if(!t||!e)return;let s=z0(e);if(!!s){s.lineJoin="round",s.font=o.font;for(let i of t){if(o.drawBoxes){if(s.strokeStyle=o.color,s.fillStyle=o.color,Z0(s,i.box[0],i.box[1],i.box[2],i.box[3],o),o.drawLabels&&((A=o.handLabels)==null?void 0:A.length)>0){let c=o.handLabels.slice();c=V(c,"[label]",i.label),c=V(c,"[score]",100*i.score),L0(s,c,i.box[0],i.box[1],o)}s.stroke()}if(o.drawPoints&&i.keypoints&&i.keypoints.length>0)for(let c of i.keypoints)s.fillStyle=he(c[2],o),U0(s,c[0],c[1],0,o);if(o.drawLabels&&i.annotations&&((a=o.fingerLabels)==null?void 0:a.length)>0)for(let[c,x]of Object.entries(i.annotations)){let y=o.fingerLabels.slice();y=V(y,"[label]",c),L0(s,y,x[x.length-1][0],x[x.length-1][1],o)}if(o.drawPolygons&&i.annotations){let c=x=>{if(!(!x||x.length===0||!x[0]))for(let y=0;y0?y-1:0][0],x[y>0?y-1:0][1]),s.lineTo(x[y][0],x[y][1]),s.stroke()}};s.lineWidth=o.lineWidth,c(i.annotations.index),c(i.annotations.middle),c(i.annotations.ring),c(i.annotations.pinky),c(i.annotations.thumb)}}}}function h2(e,t,n){var A;let o=J($,n);if(!t||!e)return;let s=z0(e);if(!!s){s.lineJoin="round",s.font=o.font;for(let a of t)if(o.drawBoxes){if(s.strokeStyle=o.color,s.fillStyle=o.color,Z0(s,a.box[0],a.box[1],a.box[2],a.box[3],o),o.drawLabels&&((A=o.objectLabels)==null?void 0:A.length)>0){let i=o.objectLabels.slice();i=V(i,"[label]",a.label),i=V(i,"[score]",100*a.score),L0(s,i,a.box[0],a.box[1],o)}s.stroke()}}}function b2(e,t,n){var s;let o=J($,n);if(!(!t||!e)&&o.drawGestures&&((s=o.gestureLabels)==null?void 0:s.length)>0){let A=z0(e);if(!A)return;A.font=o.font,A.fillStyle=o.color;let a=1;for(let i=0;i1&&x[1].length>0){let y=c[1]>0?`#${c[1]}`:"",l=o.gestureLabels.slice();l=V(l,"[where]",c[0]),l=V(l,"[who]",y),l=V(l,"[what]",x[1]),L0(A,l,8,2+a*o.lineHeight,o),a+=1}}}}var re={face:`face + ${f.box[0]} ${valY}, + ${f.box[0] + f.box[2]} ${valY}, + ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2} + `); + ctx.stroke(pathH); + ctx.stroke(pathV); + } +} +function drawGazeArrows(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { + ctx.strokeStyle = "pink"; + ctx.fillStyle = "pink"; + const leftGaze = [ + f.annotations.leftEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.leftEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4); + const rightGaze = [ + f.annotations.rightEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.rightEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4); + } +} +function drawFacePolygons(f, ctx) { + if (localOptions.drawPolygons && f.mesh.length >= 468) { + ctx.lineWidth = 1; + for (let i = 0; i < TRI468.length / 3; i++) { + const points = [TRI468[i * 3 + 0], TRI468[i * 3 + 1], TRI468[i * 3 + 2]].map((index2) => f.mesh[index2]); + lines(ctx, points, localOptions); + } + drawIrisElipse(f, ctx); + } +} +function drawFacePoints(f, ctx) { + if (localOptions.drawPoints && f.mesh.length >= 468) { + for (let i = 0; i < f.mesh.length; i++) { + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions); + if (localOptions.drawAttention) { + if (LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] + 127, localOptions); + if (LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + if (LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + } + } + } +} +function drawFaceBoxes(f, ctx) { + if (localOptions.drawBoxes) { + rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions); + } +} +function face(inCanvas2, result, drawOptions) { + localOptions = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions.font; + ctx.strokeStyle = localOptions.color; + ctx.fillStyle = localOptions.color; + for (const f of result) { + drawFaceBoxes(f, ctx); + drawLabels(f, ctx); + if (f.mesh && f.mesh.length > 0) { + drawFacePoints(f, ctx); + drawFacePolygons(f, ctx); + drawGazeSpheres(f, ctx); + drawGazeArrows(f, ctx); + } + } +} + +// src/draw/body.ts +function body(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + for (let i = 0; i < result.length; i++) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + ctx.lineWidth = localOptions2.lineWidth; + ctx.font = localOptions2.font; + if (localOptions2.drawBoxes && result[i].box && result[i].box.length === 4) { + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.bodyLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.bodyLabels.slice(); + l = replace(l, "[score]", 100 * result[i].score); + labels(ctx, l, result[i].box[0], result[i].box[1], localOptions2); + } + } + if (localOptions2.drawPoints && result[i].keypoints) { + for (let pt = 0; pt < result[i].keypoints.length; pt++) { + if (!result[i].keypoints[pt].score || result[i].keypoints[pt].score === 0) + continue; + ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions2); + point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions2); + } + } + if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { + ctx.font = localOptions2.font; + for (const pt of result[i].keypoints) { + if (!pt.score || pt.score === 0) + continue; + let l = localOptions2.bodyPartLabels.slice(); + l = replace(l, "[label]", pt.part); + l = replace(l, "[score]", 100 * pt.score); + labels(ctx, l, pt.position[0], pt.position[1], localOptions2); + } + } + if (localOptions2.drawPolygons && result[i].keypoints && result[i].annotations) { + for (const part of Object.values(result[i].annotations)) { + for (const connected4 of part) + curves(ctx, connected4, localOptions2); + } + } + } +} + +// src/draw/hand.ts +function hand(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.handLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.handLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + if (localOptions2.drawPoints) { + if (h.keypoints && h.keypoints.length > 0) { + for (const pt of h.keypoints) { + ctx.fillStyle = colorDepth(pt[2], localOptions2); + point(ctx, pt[0], pt[1], 0, localOptions2); + } + } + } + if (localOptions2.drawLabels && h.annotations && ((_b = localOptions2.fingerLabels) == null ? void 0 : _b.length) > 0) { + for (const [part, pt] of Object.entries(h.annotations)) { + let l = localOptions2.fingerLabels.slice(); + l = replace(l, "[label]", part); + labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions2); + } + } + if (localOptions2.drawPolygons && h.annotations) { + const addHandLine = (part) => { + if (!part || part.length === 0 || !part[0]) + return; + for (let i = 0; i < part.length; i++) { + ctx.beginPath(); + const z = part[i][2] || 0; + ctx.strokeStyle = colorDepth(i * z, localOptions2); + ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]); + ctx.lineTo(part[i][0], part[i][1]); + ctx.stroke(); + } + }; + ctx.lineWidth = localOptions2.lineWidth; + addHandLine(h.annotations.index); + addHandLine(h.annotations.middle); + addHandLine(h.annotations.ring); + addHandLine(h.annotations.pinky); + addHandLine(h.annotations.thumb); + } + } +} + +// src/draw/object.ts +function object(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.objectLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.objectLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + } +} + +// src/draw/gesture.ts +function gesture(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions2.font; + ctx.fillStyle = localOptions2.color; + let i = 1; + for (let j = 0; j < result.length; j++) { + const [where, what] = Object.entries(result[j]); + if (what.length > 1 && what[1].length > 0) { + const who = where[1] > 0 ? `#${where[1]}` : ""; + let l = localOptions2.gestureLabels.slice(); + l = replace(l, "[where]", where[0]); + l = replace(l, "[who]", who); + l = replace(l, "[what]", what[1]); + labels(ctx, l, 8, 2 + i * localOptions2.lineHeight, localOptions2); + i += 1; + } + } + } +} + +// src/draw/labels.ts +var defaultLabels = { + face: `face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -118,7 +6393,7471 @@ var nt=Object.defineProperty;var Hn=Object.getOwnPropertyDescriptor;var Gn=Objec live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var ft=0;function Hr(e,t,n){let o=J($,n);if(!t||!e)return;let s=z0(e);if(!!s){s.lineJoin="round",s.font=o.font;for(let A=0;Aht,kpt:()=>ut});var ut=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],ht={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var S0,Re=224,o1,Zr=5,T2=[8,16,32,32,32];function Xr(){let e=[],t=0;for(;tn.x)),y:r.tensor1d(e.map(n=>n.y))}}async function r1(e){if(M.initial&&(S0=null),!S0&&e.body.detector&&e.body.detector.modelPath){S0=await L(e.body.detector.modelPath);let t=S0!=null&&S0.executor?Object.values(S0.modelSignature.inputs):void 0;Re=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&S0&&h("cached model:",S0.modelUrl);return Xr(),S0}var n1=[5,5];function qr(e,t){return r.tidy(()=>{let n=r.split(e,12,1),o=r.squeeze(n[0]),s=r.squeeze(n[1]),A=r.squeeze(n[2]),a=r.squeeze(n[3]);o=r.add(r.div(o,Re),t.x),s=r.add(r.div(s,Re),t.y),A=r.mul(r.div(A,Re),n1[0]),a=r.mul(r.div(a,Re),n1[1]);let i=r.sub(o,r.div(A,2)),c=r.sub(s,r.div(a,2)),x=r.add(i,A),y=r.add(c,a);return r.stack([i,c,x,y],1)})}async function Ur(e,t,n,o){var x,y;let s=[],A={};A.boxes=qr(e,o1),A.scores=r.sigmoid(t),A.nms=await r.image.nonMaxSuppressionAsync(A.boxes,A.scores,1,((x=n.body.detector)==null?void 0:x.minConfidence)||.1,((y=n.body.detector)==null?void 0:y.iouThreshold)||.1);let a=await A.nms.data(),i=await A.scores.data(),c=await A.boxes.array();for(let l of Array.from(a)){let f=i[l],d=c[l],u=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],m={score:f,boxRaw:d,box:u};s.push(m)}return Object.keys(A).forEach(l=>r.dispose(A[l])),s}async function s1(e,t,n){let o={};o.res=S0==null?void 0:S0.execute(e,["Identity"]),o.logitsRaw=r.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=r.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=r.squeeze(o.logitsRaw),o.boxes=r.squeeze(o.boxesRaw);let s=await Ur(o.boxes,o.logits,t,n);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}function Y0(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[o[0],o[1],s[0]-o[0],s[1]-o[1]],a=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:a}}function A1(e,t=[1,1]){let n=[e.map(x=>x[0]),e.map(x=>x[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[(o[0]+s[0])/2,(o[1]+s[1])/2],a=Math.max(A[0]-o[0],A[1]-o[1],-A[0]+s[0],-A[1]+s[1]),i=[Math.trunc(A[0]-a),Math.trunc(A[1]-a),Math.trunc(2*a),Math.trunc(2*a)],c=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:c}}function v2(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var g0,gt=256,bt=Number.MAX_SAFE_INTEGER,Yr={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},M2=[],se=[[0,0],[0,0],[0,0],[0,0]],a1=0,i1=e=>1-1/(1+Math.exp(e)),c1=e=>r1(e);async function x1(e){if(M.initial&&(g0=null),g0)e.debug&&h("cached model:",g0.modelUrl);else{g0=await L(e.body.modelPath);let t=g0!=null&&g0.executor?Object.values(g0.modelSignature.inputs):void 0;gt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return g0}function l1(e,t,n){var A,a;let o={};if(!((A=e==null?void 0:e.shape)!=null&&A[1])||!((a=e==null?void 0:e.shape)!=null&&a[2]))return e;let s;if(n&&(o.cropped=r.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let i=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],c=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];se=[[0,0],i,c,[0,0]],o.pad=r.pad(o.cropped||e,se),o.resize=r.image.resizeBilinear(o.pad,[t,t]),s=r.div(o.resize,O.tf255)}else e.shape[1]!==t?(o.resize=r.image.resizeBilinear(o.cropped||e,[t,t]),s=r.div(o.resize,O.tf255)):s=r.div(o.cropped||e,O.tf255);return Object.keys(o).forEach(i=>r.dispose(o[i])),s}function Kr(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+se[2][0]+se[2][1])/t[0]-se[2][0]),Math.trunc(o.position[1]*(t[1]+se[1][0]+se[1][1])/t[1]-se[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],s=n[3]-n[1];for(let A of e)A.positionRaw=[A.positionRaw[0]/s+n[1],A.positionRaw[1]/o+n[0],A.positionRaw[2]],A.position=[Math.trunc(A.positionRaw[0]*t[0]),Math.trunc(A.positionRaw[1]*t[1]),A.positionRaw[2]]}return e}function Jr(e){let t=e.find(i=>i.part==="leftPalm"),n=e.find(i=>i.part==="leftWrist"),o=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let s=e.find(i=>i.part==="rightPalm"),A=e.find(i=>i.part==="rightWrist"),a=e.find(i=>i.part==="rightIndex");s.position[2]=((A.position[2]||0)+(a.position[2]||0))/2}async function Qr(e,t,n){if(!(g0!=null&&g0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=g0==null?void 0:g0.execute(e,Yr.landmarks);let s=(await o.poseflag.data())[0],A=await o.ld.data(),a=await o.world.data();Object.keys(o).forEach(u=>r.dispose(o[u]));let i=[],c=5;for(let u=0;uu.position),l=Y0(y,[n[0],n[1]]),f={};for(let[u,m]of Object.entries(ht)){let g=[];for(let P=0;Pb.part===m[P]),p=x.find(b=>b.part===m[P+1]);v&&p&&g.push([v.position,p.position])}f[u]=g}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:x,annotations:f}}async function Tt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>T()-a1,s=bt<(t.body.skipFrames||0);if(t.skipAllowed&&o&&s&&M2!==null)bt++;else{let c=[];if((a=(A=t.body)==null?void 0:A.detector)!=null&&a.enabled){let x=l1(e,224);c=await s1(x,t,n),r.dispose(x)}else c=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let x=0;xr.dispose(o[x])),s}async function Mt(e,t){if(!(T0!=null&&T0.executor))return[];let n=(t.object.skipTime||0)>T()-y1,o=Rt<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&vt.length>0?(Rt++,vt):(Rt=0,new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[Me,Me]),i=t.object.enabled?T0==null?void 0:T0.execute(a,["tower_0/detections"]):null;y1=T(),r.dispose(a);let c=await _r(i,A,t);vt=c,s(c)}))}var P2={};te(P2,{connected:()=>kt,kpt:()=>Pt});var Pt=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],kt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Q,p1=0,h0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},wt=Number.MAX_SAFE_INTEGER;async function u1(e){return M.initial&&(Q=null),Q?e.debug&&h("cached model:",Q.modelUrl):Q=await L(e.body.modelPath),Q}async function $r(e,t){let[n,o]=e.shape,s=r.reshape(e,[o*n]),A=r.max(s,0),a=(await A.data())[0];if(a>t){let i=r.argMax(s,0),c=r.mod(i,n),x=(await c.data())[0],y=r.div(i,n),l=(await y.data())[0];return r.dispose([s,A,i,c,y]),[x,l,a]}return r.dispose([s,A]),[0,0,a]}async function Et(e,t){if(!(Q!=null&&Q.executor)||!(Q!=null&&Q.inputs[0].shape))return[];let n=(t.body.skipTime||0)>T()-p1,o=wt<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(h0.keypoints).length>0?(wt++,[h0]):(wt=0,new Promise(async s=>{let A=r.tidy(()=>{var u,m;let l=r.image.resizeBilinear(e,[((u=Q==null?void 0:Q.inputs[0].shape)==null?void 0:u[2])||0,((m=Q==null?void 0:Q.inputs[0].shape)==null?void 0:m[1])||0],!1),f=r.mul(l,O.tf2);return r.sub(f,O.tf1)}),a;if(t.body.enabled&&(a=Q==null?void 0:Q.execute(A)),p1=T(),r.dispose(A),a){h0.keypoints.length=0;let l=r.squeeze(a);r.dispose(a);let f=r.unstack(l,2);r.dispose(l);for(let d=0;d(t.body.minConfidence||0)&&h0.keypoints.push({score:Math.round(100*g)/100,part:Pt[d],positionRaw:[u/Q.inputs[0].shape[2],m/Q.inputs[0].shape[1]],position:[Math.round(e.shape[2]*u/Q.inputs[0].shape[2]),Math.round(e.shape[1]*m/Q.inputs[0].shape[1])]})}f.forEach(d=>r.dispose(d))}h0.score=h0.keypoints.reduce((l,f)=>f.score>l?f.score:l,0);let i=h0.keypoints.map(l=>l.position[0]),c=h0.keypoints.map(l=>l.position[1]);h0.box=[Math.min(...i),Math.min(...c),Math.max(...i)-Math.min(...i),Math.max(...c)-Math.min(...c)];let x=h0.keypoints.map(l=>l.positionRaw[0]),y=h0.keypoints.map(l=>l.positionRaw[1]);h0.boxRaw=[Math.min(...x),Math.min(...y),Math.max(...x)-Math.min(...x),Math.max(...y)-Math.min(...y)];for(let[l,f]of Object.entries(kt)){let d=[];for(let u=0;uP.part===f[u]),g=h0.keypoints.find(P=>P.part===f[u+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&d.push([m.position,g.position])}h0.annotations[l]=d}s([h0])}))}var Ce=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],k2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],w2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],E2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],T1=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],o=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:o,landmarks:e.landmarks,confidence:e.confidence}},zt=(e,t,n)=>{let o=t.shape[1],s=t.shape[2],A=[e.startPoint[1]/o,e.startPoint[0]/s,e.endPoint[1]/o,e.endPoint[0]/s],a=r.image.cropAndResize(t,[A],[0],n),i=r.div(a,O.tf255);return r.dispose(a),i},z2=(e,t)=>{let n=k2(e),o=Ce(e),s=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-s[0],n[1]-s[1]],endPoint:[n[0]+s[0],n[1]+s[1]],landmarks:e.landmarks,confidence:e.confidence}},S2=e=>{let t=k2(e),n=Ce(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence}},v1=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},St=[[1,0,0],[0,1,0],[0,0,1]],es=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),ts=(e,t)=>es(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var b1=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Pe=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let s=0;s{let n=Math.cos(e),o=Math.sin(e),s=[[n,-o,0],[o,n,0],[0,0,1]],A=b1(t[0],t[1]),a=g1(A,s),i=b1(-t[0],-t[1]);return g1(a,i)},os=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-Pe(t[0],n),-Pe(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},rs=(e,t)=>[Pe(e,t[0]),Pe(e,t[1])];function M1(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[A[0]/s*(d[0]-s/2),A[1]/s*(d[1]-s/2),d[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,c=i?R1(n,[0,0]):St,x=i?a.map(d=>[...rs(d,c),d[2]]):a,y=i?os(o):St,l=k2(t),f=[Pe(l,y[0]),Pe(l,y[1])];return x.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2]||0)])}function k1(e,t,n,o){let s=t.landmarks.length>=xt.count?xt.symmetryLine:be.symmetryLine,A=0,a=St,i;if(e&&M.kernels.includes("rotatewithoffset"))if(A=ts(t.landmarks[s[0]],t.landmarks[s[1]]),A&&A!==0&&Math.abs(A)>.2){let x=k2(t),y=[x[0]/n.shape[2],x[1]/n.shape[1]],l=r.image.rotateWithOffset(n,A,0,[y[0],y[1]]);a=R1(-A,x),i=zt(t,l,[o,o]),r.dispose(l)}else i=zt(t,n,[o,o]);else i=zt(t,n,[o,o]);return[A,a,i]}var ss=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},w1=(e,t)=>{let n=ss(e),o=Ce(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var E1=6,As=1.4,F0,Nt=null,Ae=0,We=null,De=()=>Ae;async function z1(e){var t;return M.initial&&(F0=null),F0?e.debug&&h("cached model:",F0.modelUrl):F0=await L((t=e.face.detector)==null?void 0:t.modelPath),Ae=F0.executor&&F0.inputs[0].shape?F0.inputs[0].shape[2]:256,We=r.scalar(Ae,"int32"),Nt=r.tensor2d(M1(Ae)),F0}function as(e){if(!Nt||!We)return r.zeros([0,0]);let t={};t.boxStarts=r.slice(e,[0,1],[-1,2]),t.centers=r.add(t.boxStarts,Nt),t.boxSizes=r.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=r.div(t.boxSizes,We),t.centersNormalized=r.div(t.centers,We),t.halfBoxSize=r.div(t.boxSizesNormalized,O.tf2),t.starts=r.sub(t.centersNormalized,t.halfBoxSize),t.ends=r.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=r.mul(t.starts,We),t.endNormalized=r.mul(t.ends,We);let n=r.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>r.dispose(t[o])),n}async function S1(e,t){var i,c,x,y;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=r.image.resizeBilinear(e,[Ae,Ae]),n.div=r.div(n.resized,O.tf127),n.normalized=r.sub(n.div,O.tf05);let o=F0==null?void 0:F0.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let l=o.sort((f,d)=>f.size-d.size);n.concat384=r.concat([l[0],l[2]],2),n.concat512=r.concat([l[1],l[3]],2),n.concat=r.concat([n.concat512,n.concat384],1),n.batch=r.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=r.squeeze(o[0]):n.batch=r.squeeze(o);r.dispose(o),n.boxes=as(n.batch),n.logits=r.slice(n.batch,[0,0],[-1,1]),n.sigmoid=r.sigmoid(n.logits),n.scores=r.squeeze(n.sigmoid),n.nms=await r.image.nonMaxSuppressionAsync(n.boxes,n.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((c=t.face.detector)==null?void 0:c.iouThreshold)||0,((x=t.face.detector)==null?void 0:x.minConfidence)||0);let s=await n.nms.array(),A=[],a=await n.scores.data();for(let l=0;l(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let d={};d.bbox=r.slice(n.boxes,[s[l],0],[1,-1]),d.slice=r.slice(n.batch,[s[l],E1-1],[1,-1]),d.squeeze=r.squeeze(d.slice),d.landmarks=r.reshape(d.squeeze,[E1,-1]);let u=await d.bbox.data(),m={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await d.landmarks.array(),confidence:f},g=T1(m,[(e.shape[2]||0)/Ae,(e.shape[1]||0)/Ae]),P=z2(g,t.face.scale||As),v=S2(P);A.push(v),Object.keys(d).forEach(p=>r.dispose(d[p]))}}return Object.keys(n).forEach(l=>r.dispose(n[l])),A}var v0,ae=0,is=2.3,It=O0.leftEyeLower0,Lt=O0.rightEyeLower0,Fe={leftBounds:[It[0],It[It.length-1]],rightBounds:[Lt[0],Lt[Lt.length-1]]},Be={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function O1(e){var t,n;return M.initial&&(v0=null),v0?e.debug&&h("cached model:",v0.modelUrl):v0=await L((t=e.face.iris)==null?void 0:t.modelPath),ae=(v0==null?void 0:v0.executor)&&((n=v0.inputs)==null?void 0:n[0].shape)?v0.inputs[0].shape[2]:0,ae===-1&&(ae=64),v0}function j2(e,t,n,o){for(let s=0;s{let t=e[Fe.leftBounds[0]][2],n=e[Fe.rightBounds[0]][2];return t-n},N1=(e,t,n,o,s,A=!1)=>{let a=S2(z2(v1([e[n],e[o]]),is)),i=Ce(a),c=r.image.cropAndResize(t,[[a.startPoint[1]/s,a.startPoint[0]/s,a.endPoint[1]/s,a.endPoint[0]/s]],[0],[ae,ae]);if(A&&M.kernels.includes("flipleftright")){let x=r.image.flipLeftRight(c);r.dispose(c),c=x}return{box:a,boxSize:i,crop:c}},I1=(e,t,n,o=!1)=>{let s=[];for(let A=0;A{let o=e[O0[`${n}EyeUpper0`][Be.upperCenter]][2],s=e[O0[`${n}EyeLower0`][Be.lowerCenter]][2],A=(o+s)/2;return t.map((a,i)=>{let c=A;return i===2?c=o:i===4&&(c=s),[a[0],a[1],c]})};async function C1(e,t,n){if(!(v0!=null&&v0.executor))return e;let{box:o,boxSize:s,crop:A}=N1(e,t,Fe.leftBounds[0],Fe.leftBounds[1],n,!0),{box:a,boxSize:i,crop:c}=N1(e,t,Fe.rightBounds[0],Fe.rightBounds[1],n,!0),x=r.concat([A,c]);r.dispose(A),r.dispose(c);let y=v0.execute(x);r.dispose(x);let l=await y.data();r.dispose(y);let f=l.slice(0,Be.numCoordinates*3),{rawCoords:d,iris:u}=I1(f,o,s,!0),m=l.slice(Be.numCoordinates*3),{rawCoords:g,iris:P}=I1(m,a,i,!1),v=ls(e);Math.abs(v)<30?(j2(e,d,"left",null),j2(e,g,"right",null)):v<1?j2(e,d,"left",["EyeUpper0","EyeLower0"]):j2(e,g,"right",["EyeUpper0","EyeLower0"]);let p=L1(e,u,"left"),b=L1(e,P,"right");return e.concat(p).concat(b)}async function D1(e,t){var A,a,i,c,x,y,l,f,d,u;let n={lips:await((a=(A=t.filter(m=>m.size===160))==null?void 0:A[0])==null?void 0:a.data()),irisL:await((c=(i=t.filter(m=>m.size===10))==null?void 0:i[0])==null?void 0:c.data()),eyeL:await((y=(x=t.filter(m=>m.size===142))==null?void 0:x[0])==null?void 0:y.data()),irisR:await((f=(l=t.filter(m=>m.size===10))==null?void 0:l[1])==null?void 0:f.data()),eyeR:await((u=(d=t.filter(m=>m.size===142))==null?void 0:d[1])==null?void 0:u.data())};for(let m of Object.values(n))if(!m)return e;let o=Te.reduce((m,g)=>m+=e[g][2],0)/Te.length;for(let m=0;mm+=e[g][2],0)/ve.length;for(let m=0;mT()-X0.timestamp,o=X0.skipped<(((x=t.face.detector)==null?void 0:x.skipFrames)||0);!t.skipAllowed||!n||!o||X0.boxes.length===0?(X0.boxes=await S1(e,t),X0.timestamp=T(),X0.skipped=0):X0.skipped++;let s=[],A=[],a=0,i=$e;for(let v=0;vW.shape[W.shape.length-1]===1).data();if(k.faceScore=Math.round(100*q[0])/100,k.faceScore<(((u=t.face.detector)==null?void 0:u.minConfidence)||1)){if(p.confidence=k.faceScore,t.face.mesh.keepInvalid){k.box=w2(p,e),k.boxRaw=E2(p,e),k.score=k.boxScore,k.mesh=p.landmarks.map(W=>[(p.startPoint[0]+p.endPoint[0])/2+(p.endPoint[0]+p.startPoint[0])*W[0]/De(),(p.startPoint[1]+p.endPoint[1])/2+(p.endPoint[1]+p.startPoint[1])*W[1]/De()]),k.meshRaw=k.mesh.map(W=>[W[0]/(e.shape[2]||1),W[1]/(e.shape[1]||1),(W[2]||0)/i]);for(let W of Object.keys(be))k.annotations[W]=[k.mesh[be[W]]]}}else{let W=I.find(D=>D.shape[D.shape.length-1]===1404),Z=r.reshape(W,[-1,3]),K=await Z.array();r.dispose(Z),(m=t.face.attention)!=null&&m.enabled?K=await D1(K,I):(g=t.face.iris)!=null&&g.enabled&&(K=await C1(K,k.tensor,$e)),k.mesh=P1(K,p,b,j,$e),k.meshRaw=k.mesh.map(D=>[D[0]/(e.shape[2]||0),D[1]/(e.shape[1]||0),(D[2]||0)/i]);for(let D of Object.keys(O0))k.annotations[D]=O0[D].map(A0=>k.mesh[A0]);k.score=k.faceScore;let R={...w1(k.mesh,p),confidence:p.confidence,landmarks:p.landmarks};k.box=w2(R,e),k.boxRaw=E2(R,e),A.push(R)}r.dispose(I)}else{k.box=w2(p,e),k.boxRaw=E2(p,e),k.score=k.boxScore,k.mesh=p.landmarks.map(I=>[(p.startPoint[0]+p.endPoint[0])/2+(p.endPoint[0]+p.startPoint[0])*I[0]/De(),(p.startPoint[1]+p.endPoint[1])/2+(p.endPoint[1]+p.startPoint[1])*I[1]/De()]),k.meshRaw=k.mesh.map(I=>[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/i]);for(let I of Object.keys(be))k.annotations[I]=[k.mesh[be[I]]]}k.score>(((P=t.face.detector)==null?void 0:P.minConfidence)||1)?s.push(k):r.dispose(k.tensor)}return X0.boxes=A,s}async function B1(e){var t,n,o,s,A,a;return M.initial&&(Y=null),((t=e.face.attention)==null?void 0:t.enabled)&&(Y==null?void 0:Y.signature)&&Object.keys(((n=Y==null?void 0:Y.signature)==null?void 0:n.outputs)||{}).length<6&&(Y=null),Y?e.debug&&h("cached model:",Y.modelUrl):(o=e.face.attention)!=null&&o.enabled?Y=await L(e.face.attention.modelPath):Y=await L((s=e.face.mesh)==null?void 0:s.modelPath),$e=Y.executor&&((A=Y==null?void 0:Y.inputs)==null?void 0:A[0].shape)?(a=Y==null?void 0:Y.inputs)==null?void 0:a[0].shape[2]:256,Y}var H1=ge,G1=Qe;var xs=["angry","disgust","fear","happy","sad","surprise","neutral"],j0,N2=[],V1=0,Z1=0,Ct=Number.MAX_SAFE_INTEGER;async function X1(e){var t;return M.initial&&(j0=null),j0?e.debug&&h("cached model:",j0.modelUrl):j0=await L((t=e.face.emotion)==null?void 0:t.modelPath),j0}async function Wt(e,t,n,o){var a,i;if(!j0)return[];let s=Ct<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),A=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>T()-Z1;return t.skipAllowed&&A&&s&&V1===o&&N2[n]&&N2[n].length>0?(Ct++,N2[n]):(Ct=0,new Promise(async c=>{var y;let x=[];if((y=t.face.emotion)!=null&&y.enabled){let l={},f=j0!=null&&j0.inputs[0].shape?j0.inputs[0].shape[2]:0;l.resize=r.image.resizeBilinear(e,[f,f],!1),l.channels=r.mul(l.resize,O.rgb),l.grayscale=r.sum(l.channels,3,!0),l.grayscaleSub=r.sub(l.grayscale,O.tf05),l.grayscaleMul=r.mul(l.grayscaleSub,O.tf2),l.emotion=j0==null?void 0:j0.execute(l.grayscaleMul),Z1=T();let d=await l.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&x.push({score:Math.min(.99,Math.trunc(100*d[u])/100),emotion:xs[u]});x.sort((u,m)=>m.score-u.score),Object.keys(l).forEach(u=>r.dispose(l[u]))}N2[n]=x,V1=o,c(x)}))}var f0,ie=[],U1=0,Y1=0,Dt=Number.MAX_SAFE_INTEGER;async function K1(e){var t;return M.initial&&(f0=null),f0?e.debug&&h("cached model:",f0.modelUrl):f0=await L((t=e.face.description)==null?void 0:t.modelPath),f0}function ds(e){let t=e.image||e.tensor||e;if(!(f0!=null&&f0.inputs[0].shape))return t;let n=r.image.resizeBilinear(t,[f0.inputs[0].shape[2],f0.inputs[0].shape[1]],!1),o=r.mul(n,O.tf255);return r.dispose(n),o}async function Ft(e,t,n,o){var i,c,x,y;let s={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(f0!=null&&f0.executor))return s;let A=Dt<(((i=t.face.description)==null?void 0:i.skipFrames)||0),a=(((c=t.face.description)==null?void 0:c.skipTime)||0)>T()-U1;return t.skipAllowed&&A&&a&&Y1===o&&((x=ie==null?void 0:ie[n])==null?void 0:x.age)>0&&((y=ie==null?void 0:ie[n])==null?void 0:y.genderScore)>0?(Dt++,ie[n]):(Dt=0,new Promise(async l=>{var f;if((f=t.face.description)!=null&&f.enabled){let d=ds(e),u=f0==null?void 0:f0.execute(d);U1=T(),r.dispose(d);let g=await u.find(B=>B.shape[1]===1).data(),P=Math.trunc(200*Math.abs(g[0]-.5))/100;P>(t.face.description.minConfidence||0)&&(s.gender=g[0]<=.5?"female":"male",s.genderScore=Math.min(.99,P));let v=r.argMax(u.find(B=>B.shape[1]===100),1),p=(await v.data())[0];r.dispose(v);let j=await u.find(B=>B.shape[1]===100).data();s.age=Math.round(j[p-1]>j[p+1]?10*p-100*j[p-1]:10*p+100*j[p+1])/10,(Number.isNaN(g[0])||Number.isNaN(j[0]))&&h("faceres error:",{model:f0,result:u});let k=u.find(B=>B.shape[1]===1024),I=k?await k.data():[];s.descriptor=Array.from(I),u.forEach(B=>r.dispose(B))}ie[n]=s,Y1=o,l(s)}))}var He=.1,Bt=.5;function ys(e,t,n){let o=!1,s=n.length-1;for(let A=0;At!=n[s].y>t&&e<(n[s].x-n[A].x)*(t-n[A].y)/(n[s].y-n[A].y)+n[A].x&&(o=!o);return o}async function Q1(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),s=[];for(let a of O0.silhouette)s.push({x:(e.mesh[a][0]-e.box[0])/e.box[2],y:(e.mesh[a][1]-e.box[1])/e.box[3]});He&&He>0&&(s=s.map(a=>({x:a.x>.5?a.x+He:a.x-He,y:a.y>.5?a.y+He:a.y-He})));for(let a=0;aT()-$1,A=Ht<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&_1===o&&I2[n]?(Ht++,I2[n]):(Ht=0,new Promise(async c=>{let x=r.image.resizeBilinear(e,[x0!=null&&x0.inputs[0].shape?x0.inputs[0].shape[2]:0,x0!=null&&x0.inputs[0].shape?x0.inputs[0].shape[1]:0],!1),y=x0==null?void 0:x0.execute(x),l=(await y.data())[0];I2[n]=Math.round(100*l)/100,_1=o,$1=T(),r.dispose([x,y]),c(I2[n])}))}var d0,L2=[],Vt=Number.MAX_SAFE_INTEGER,n3=0,o3=0;async function r3(e){var t;return M.initial&&(d0=null),d0?e.debug&&h("cached model:",d0.modelUrl):d0=await L((t=e.face.liveness)==null?void 0:t.modelPath),d0}async function Zt(e,t,n,o){var a,i;if(!(d0!=null&&d0.executor))return 0;let s=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>T()-o3,A=Vt<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&n3===o&&L2[n]?(Vt++,L2[n]):(Vt=0,new Promise(async c=>{let x=r.image.resizeBilinear(e,[d0!=null&&d0.inputs[0].shape?d0.inputs[0].shape[2]:0,d0!=null&&d0.inputs[0].shape?d0.inputs[0].shape[1]:0],!1),y=d0==null?void 0:d0.execute(x),l=(await y.data())[0];L2[n]=Math.round(100*l)/100,n3=o,o3=T(),r.dispose([x,y]),c(L2[n])}))}var C0,Xt=[],ms=["white","black","asian","indian","other"],ps=[15,23,28,35.5,45.5,55.5,65],A3=0,a3=0,qt=Number.MAX_SAFE_INTEGER;async function i3(e){var t;return M.initial&&(C0=null),C0?e.debug&&h("cached model:",C0.modelUrl):C0=await L((t=e.face.gear)==null?void 0:t.modelPath),C0}async function Ut(e,t,n,o){var a,i;if(!C0)return{age:0,gender:"unknown",genderScore:0,race:[]};let s=qt<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),A=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>T()-a3;return t.skipAllowed&&A&&s&&A3===o&&Xt[n]?(qt++,Xt[n]):(qt=0,new Promise(async c=>{var P,v;if(!(C0!=null&&C0.inputs[0].shape))return;let x={},y=[[0,.1,.9,.9]];x.resize=r.image.cropAndResize(e,y,[0],[C0.inputs[0].shape[2],C0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(P=t.face.gear)!=null&&P.enabled&&([x.age,x.gender,x.race]=C0.execute(x.resize,["age_output","gender_output","race_output"]));let f=await x.gender.data();l.gender=f[0]>f[1]?"male":"female",l.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[1]))/100;let d=await x.race.data();for(let p=0;p(((v=t.face.gear)==null?void 0:v.minConfidence)||.2)&&l.race.push({score:Math.round(100*d[p])/100,race:ms[p]});l.race.sort((p,b)=>b.score-p.score);let m=Array.from(await x.age.data()).map((p,b)=>[ps[b],p]).sort((p,b)=>b[1]-p[1]),g=m[0][0];for(let p=1;pr.dispose(x[p])),Xt[n]=l,A3=o,a3=T(),c(l)}))}var R0,O2=[],c3=0,x3=0,Yt=Number.MAX_SAFE_INTEGER;async function d3(e){return M.initial&&(R0=null),R0?e.debug&&h("cached model:",R0.modelUrl):R0=await L(e.face.ssrnet.modelPathAge),R0}async function Kt(e,t,n,o){var a,i,c,x;if(!R0)return{age:0};let s=Yt<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>T()-x3;return t.skipAllowed&&s&&A&&c3===o&&((c=O2[n])==null?void 0:c.age)&&((x=O2[n])==null?void 0:x.age)>0?(Yt++,O2[n]):(Yt=0,new Promise(async y=>{var d;if(!(R0!=null&&R0.inputs)||!R0.inputs[0]||!R0.inputs[0].shape)return;let l={};l.resize=r.image.resizeBilinear(e,[R0.inputs[0].shape[2],R0.inputs[0].shape[1]],!1),l.enhance=r.mul(l.resize,O.tf255);let f={age:0};if((d=t.face.ssrnet)!=null&&d.enabled&&(l.age=R0.execute(l.enhance)),l.age){let u=await l.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(l).forEach(u=>r.dispose(l[u])),O2[n]=f,c3=o,x3=T(),y(f)}))}var W0,C2=[],f3=0,m3=0,Jt=Number.MAX_SAFE_INTEGER,Qt=[.2989,.587,.114];async function p3(e){var t;return M.initial&&(W0=null),W0?e.debug&&h("cached model:",W0.modelUrl):W0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),W0}async function _t(e,t,n,o){var a,i,c,x;if(!W0)return{gender:"unknown",genderScore:0};let s=Jt<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>T()-m3;return t.skipAllowed&&s&&A&&f3===o&&((c=C2[n])==null?void 0:c.gender)&&((x=C2[n])==null?void 0:x.genderScore)>0?(Jt++,C2[n]):(Jt=0,new Promise(async y=>{var u;if(!(W0!=null&&W0.inputs[0].shape))return;let l={};l.resize=r.image.resizeBilinear(e,[W0.inputs[0].shape[2],W0.inputs[0].shape[1]],!1),l.enhance=r.tidy(()=>{let[m,g,P]=r.split(l.resize,3,3),v=r.mul(m,Qt[0]),p=r.mul(g,Qt[1]),b=r.mul(P,Qt[2]),j=r.addN([v,p,b]);return r.mul(r.sub(j,O.tf05),2)});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(l.gender=W0.execute(l.enhance));let d=await l.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(l).forEach(m=>r.dispose(l[m])),C2[n]=f,f3=o,m3=T(),y(f)}))}var M0,$t=[],h3=0,b3=0,g3=Number.MAX_SAFE_INTEGER;async function T3(e){var t;return M.initial&&(M0=null),M0?e.debug&&h("cached model:",M0.modelUrl):M0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),M0}async function e5(e,t,n,o){var a,i;if(!(M0!=null&&M0.executor))return[];let s=g3<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>T()-b3;return t.skipAllowed&&A&&s&&h3===o&&$t[n]?(g3++,$t[n]):new Promise(async c=>{var y;let x=[];if(((y=t.face.mobilefacenet)==null?void 0:y.enabled)&&(M0==null?void 0:M0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[M0.inputs[0].shape[2],M0.inputs[0].shape[1]],!1),l.data=M0.execute(l.crop);let f=await l.data.data();x=Array.from(f),Object.keys(l).forEach(d=>r.dispose(l[d]))}$t[n]=x,h3=o,b3=T(),c(x)})}var P0,t5=[],R3=0,M3=0,P3=Number.MAX_SAFE_INTEGER;async function k3(e){return M.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):P0=await L(e.face.insightface.modelPath),P0}async function n5(e,t,n,o){var a,i;if(!(P0!=null&&P0.executor))return[];let s=P3<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),A=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>T()-M3;return t.skipAllowed&&A&&s&&R3===o&&t5[n]?(P3++,t5[n]):new Promise(async c=>{var y;let x=[];if(((y=t.face.insightface)==null?void 0:y.enabled)&&(P0==null?void 0:P0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[P0.inputs[0].shape[2],P0.inputs[0].shape[1]],!1),l.data=P0.execute(l.crop);let f=await l.data.data();x=Array.from(f),Object.keys(l).forEach(d=>r.dispose(l[d]))}t5[n]=x,R3=o,M3=T(),c(x)})}var us=e=>{let t=(l,f)=>Math.atan2(l[1]-f[1],l[0]-f[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,s=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),A=s?e.mesh[473]:e.mesh[468],a=s?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],i=s?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],c=[(a[0]-A[0])/i[0]-n[0],o*(A[1]-a[1])/i[1]-n[1]],x=Math.sqrt(c[0]*c[0]+c[1]*c[1]);return x=Math.min(x,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],c)+Math.PI/2)%Math.PI,strength:x}},E3=(e,t)=>{let n=m=>{let g=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=g,m[1]/=g,m[2]/=g,m},o=(m,g)=>{let P=m[0]-g[0],v=m[1]-g[1],p=m[2]-g[2];return[P,v,p]},s=(m,g)=>{let P=m[1]*g[2]-m[2]*g[1],v=m[2]*g[0]-m[0]*g[2],p=m[0]*g[1]-m[1]*g[0];return[P,v,p]},A=m=>{let[g,P,v,p,b,j,k,I,B]=m,q,W,Z;return p<1?p>-1?(Z=Math.asin(p),W=Math.atan2(-k,g),q=Math.atan2(-j,b)):(Z=-Math.PI/2,W=-Math.atan2(I,B),q=0):(Z=Math.PI/2,W=Math.atan2(I,B),q=0),Number.isNaN(q)&&(q=0),Number.isNaN(W)&&(W=0),Number.isNaN(Z)&&(Z=0),{pitch:2*-q,yaw:2*-W,roll:2*-Z}},a=e.meshRaw;if(!a||a.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let i=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,c=[a[10],a[152],a[234],a[454]].map(m=>[m[0]*t[0]/i,m[1]*t[1]/i,m[2]]),x=n(o(c[1],c[0])),y=n(o(c[3],c[2])),l=n(s(y,x));y=s(x,l);let f=[y[0],y[1],y[2],x[0],x[1],x[2],l[0],l[1],l[2]],d=A(f),u=a.length===478?us(e):{bearing:0,strength:0};return{angle:d,matrix:f,gaze:u}};function z3(e,t){let n=e==null?void 0:e.annotations;if(!n)return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var o5=async(e,t)=>{var u,m,g,P,v,p,b,j,k,I,B,q,W,Z,K,R,D,A0,H,a0,n0,C,F;let n=T(),o,s,A,a,i,c,x,y,l,f=[];e.state="run:face";let d=await F1(t,e.config);if(e.performance.face=M.perfadd?(e.performance.face||0)+Math.trunc(T()-n):Math.trunc(T()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let S=0;S200?E3(d[S],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?a=(m=e.config.face.emotion)!=null&&m.enabled?Wt(d[S].tensor||r.tensor([]),e.config,S,d.length):[]:(e.state="run:emotion",n=T(),a=(g=e.config.face.emotion)!=null&&g.enabled?await Wt(d[S].tensor||r.tensor([]),e.config,S,d.length):[],e.performance.emotion=M.perfadd?(e.performance.emotion||0)+Math.trunc(T()-n):Math.trunc(T()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?x=(P=e.config.face.antispoof)!=null&&P.enabled?Gt(d[S].tensor||r.tensor([]),e.config,S,d.length):0:(e.state="run:antispoof",n=T(),x=(v=e.config.face.antispoof)!=null&&v.enabled?await Gt(d[S].tensor||r.tensor([]),e.config,S,d.length):0,e.performance.antispoof=M.perfadd?(e.performance.antispoof||0)+Math.trunc(T()-n):Math.trunc(T()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?y=(p=e.config.face.liveness)!=null&&p.enabled?Zt(d[S].tensor||r.tensor([]),e.config,S,d.length):0:(e.state="run:liveness",n=T(),y=(b=e.config.face.liveness)!=null&&b.enabled?await Zt(d[S].tensor||r.tensor([]),e.config,S,d.length):0,e.performance.liveness=M.perfadd?(e.performance.antispoof||0)+Math.trunc(T()-n):Math.trunc(T()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?s=(j=e.config.face.gear)!=null&&j.enabled?Ut(d[S].tensor||r.tensor([]),e.config,S,d.length):null:(e.state="run:gear",n=T(),s=(k=e.config.face.gear)!=null&&k.enabled?await Ut(d[S].tensor||r.tensor([]),e.config,S,d.length):null,e.performance.gear=Math.trunc(T()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?Kt(d[S].tensor||r.tensor([]),e.config,S,d.length):null,A=(B=e.config.face.ssrnet)!=null&&B.enabled?_t(d[S].tensor||r.tensor([]),e.config,S,d.length):null):(e.state="run:ssrnet",n=T(),o=(q=e.config.face.ssrnet)!=null&&q.enabled?await Kt(d[S].tensor||r.tensor([]),e.config,S,d.length):null,A=(W=e.config.face.ssrnet)!=null&&W.enabled?await _t(d[S].tensor||r.tensor([]),e.config,S,d.length):null,e.performance.ssrnet=Math.trunc(T()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?i=(Z=e.config.face.mobilefacenet)!=null&&Z.enabled?e5(d[S].tensor||r.tensor([]),e.config,S,d.length):null:(e.state="run:mobilefacenet",n=T(),i=(K=e.config.face.mobilefacenet)!=null&&K.enabled?await e5(d[S].tensor||r.tensor([]),e.config,S,d.length):null,e.performance.mobilefacenet=Math.trunc(T()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?c=(R=e.config.face.insightface)!=null&&R.enabled?n5(d[S].tensor||r.tensor([]),e.config,S,d.length):null:(e.state="run:mobilefacenet",n=T(),c=(D=e.config.face.insightface)!=null&&D.enabled?await n5(d[S].tensor||r.tensor([]),e.config,S,d.length):null,e.performance.mobilefacenet=Math.trunc(T()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?l=Ft(d[S].tensor||r.tensor([]),e.config,S,d.length):(e.state="run:description",n=T(),l=await Ft(d[S].tensor||r.tensor([]),e.config,S,d.length),e.performance.description=M.perfadd?(e.performance.description||0)+Math.trunc(T()-n):Math.trunc(T()-n)),e.analyze("End Description:"),e.config.async&&([o,A,a,i,c,l,s,x,y]=await Promise.all([o,A,a,i,c,l,s,x,y])),e.analyze("Finish Face:"),((A0=e.config.face.ssrnet)==null?void 0:A0.enabled)&&o&&A&&(l={...l,age:o.age,gender:A.gender,genderScore:A.genderScore}),((H=e.config.face.gear)==null?void 0:H.enabled)&&s&&(l={...l,age:s.age,gender:s.gender,genderScore:s.genderScore,race:s.race}),((a0=e.config.face.mobilefacenet)==null?void 0:a0.enabled)&&i&&(l.descriptor=i),((n0=e.config.face.insightface)==null?void 0:n0.enabled)&&c&&(l.descriptor=c);let $0=(C=e.config.face.iris)!=null&&C.enabled?z3(d[S],t.shape[2]):0,ee=(F=e.config.face.detector)!=null&&F.return?r.squeeze(d[S].tensor):null;r.dispose(d[S].tensor),d[S].tensor&&delete d[S].tensor;let i0={...d[S],id:S};l.age&&(i0.age=l.age),l.gender&&(i0.gender=l.gender),l.genderScore&&(i0.genderScore=l.genderScore),l.descriptor&&(i0.embedding=l.descriptor),l.race&&(i0.race=l.race),a&&(i0.emotion=a),x&&(i0.real=x),y&&(i0.live=y),$0>0&&(i0.distance=$0),N0&&(i0.rotation=N0),ee&&(i0.tensor=ee),f.push(i0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),f};var b0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>b0.nameMapping[e],getPoints:e=>b0.pointsMapping[e]},ce={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ce.nameMapping[e]},_={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>_.nameMapping[e]},le=class{constructor(t){E(this,"name");E(this,"curls");E(this,"directions");E(this,"weights");E(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((s,A)=>s+A,0);this.weightsRelative=this.weights.map(s=>s*5/o)}matchAgainst(t,n){let o=0;for(let s in t){let A=t[s],a=this.curls[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}for(let s in n){let A=n[s],a=this.directions[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}return o/10}};var{thumb:B0,index:K0,middle:J0,ring:ke,pinky:we}=b0,{none:H0,half:bs,full:G0}=ce,{verticalUp:Ge,verticalDown:Ya,horizontalLeft:r5,horizontalRight:gs,diagonalUpRight:Ts,diagonalUpLeft:Ve,diagonalDownRight:Ka,diagonalDownLeft:Ja}=_,xe=new le("thumbs up");xe.curl(B0,H0,1);xe.direction(B0,Ge,1);xe.direction(B0,Ve,.25);xe.direction(B0,Ts,.25);for(let e of[b0.index,b0.middle,b0.ring,b0.pinky])xe.curl(e,G0,1),xe.direction(e,r5,1),xe.direction(e,gs,1);var o0=new le("victory");o0.curl(B0,bs,.5);o0.curl(B0,H0,.5);o0.direction(B0,Ge,1);o0.direction(B0,Ve,1);o0.curl(K0,H0,1);o0.direction(K0,Ge,.75);o0.direction(K0,Ve,1);o0.curl(J0,H0,1);o0.direction(J0,Ge,1);o0.direction(J0,Ve,.75);o0.curl(ke,G0,1);o0.direction(ke,Ge,.2);o0.direction(ke,Ve,1);o0.direction(ke,r5,.2);o0.curl(we,G0,1);o0.direction(we,Ge,.2);o0.direction(we,Ve,1);o0.direction(we,r5,.2);o0.weight(K0,2);o0.weight(J0,2);var de=new le("point");de.curl(B0,G0,1);de.curl(K0,H0,.5);de.curl(J0,G0,.5);de.curl(ke,G0,.5);de.curl(we,G0,.5);de.weight(K0,2);de.weight(J0,2);var ye=new le("middle finger");ye.curl(B0,H0,1);ye.curl(K0,G0,.5);ye.curl(J0,G0,.5);ye.curl(ke,G0,.5);ye.curl(we,G0,.5);ye.weight(K0,2);ye.weight(J0,2);var Ze=new le("open palm");Ze.curl(B0,H0,.75);Ze.curl(K0,H0,.75);Ze.curl(J0,H0,.75);Ze.curl(ke,H0,.75);Ze.curl(we,H0,.75);var S3=[xe,o0,de,ye,Ze];var vs=.7,Ee={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function j3(e,t,n,o){let s=(t-o)/(e-n),A=Math.atan(s)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function I3(e,t){if(!e||!t)return[0,0];let n=j3(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=j3(e[1],e[2],t[1],t[2]);return[n,o]}function N3(e,t=1){let n=0,o=0,s=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:s=1*t,[n,o,s]}function Rs(e,t,n){let o=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],i=e[1]-n[1],c=t[1]-n[1],x=e[2]-t[2],y=e[2]-n[2],l=t[2]-n[2],f=Math.sqrt(o*o+a*a+x*x),d=Math.sqrt(s*s+i*i+y*y),u=Math.sqrt(A*A+c*c+l*l),m=(u*u+f*f-d*d)/(2*u*f);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let P;return g>Ee.NO_CURL_START_LIMIT?P=ce.none:g>Ee.HALF_CURL_START_LIMIT?P=ce.half:P=ce.full,P}function L3(e,t,n,o){let s;return o===Math.abs(e)?e>0?s=_.horizontalLeft:s=_.horizontalRight:o===Math.abs(t)?t>0?s=_.horizontalLeft:s=_.horizontalRight:n>0?s=_.horizontalLeft:s=_.horizontalRight,s}function O3(e,t,n,o){let s;return o===Math.abs(e)?e<0?s=_.verticalDown:s=_.verticalUp:o===Math.abs(t)?t<0?s=_.verticalDown:s=_.verticalUp:n<0?s=_.verticalDown:s=_.verticalUp,s}function Ms(e,t,n,o,s,A,a,i){let c,x=O3(e,t,n,o),y=L3(s,A,a,i);return x===_.verticalUp?y===_.horizontalLeft?c=_.diagonalUpLeft:c=_.diagonalUpRight:y===_.horizontalLeft?c=_.diagonalDownLeft:c=_.diagonalDownRight,c}function Ps(e,t,n,o){let s=e[0]-t[0],A=e[0]-n[0],a=t[0]-n[0],i=e[1]-t[1],c=e[1]-n[1],x=t[1]-n[1],y=Math.max(Math.abs(s),Math.abs(A),Math.abs(a)),l=Math.max(Math.abs(i),Math.abs(c),Math.abs(x)),f=0,d=0,u=0,m=l/(y+1e-5);m>1.5?f+=Ee.DISTANCE_VOTE_POWER:m>.66?d+=Ee.DISTANCE_VOTE_POWER:u+=Ee.DISTANCE_VOTE_POWER;let g=Math.sqrt(s*s+i*i),P=Math.sqrt(A*A+c*c),v=Math.sqrt(a*a+x*x),p=Math.max(g,P,v),b=e[0],j=e[1],k=n[0],I=n[1];p===g?(k=n[0],I=n[1]):p===v&&(b=t[0],j=t[1]);let W=I3([b,j],[k,I]),Z=N3(W,Ee.TOTAL_ANGLE_VOTE_POWER);f+=Z[0],d+=Z[1],u+=Z[2];for(let R of o){let D=N3(R,Ee.SINGLE_ANGLE_VOTE_POWER);f+=D[0],d+=D[1],u+=D[2]}let K;return f===Math.max(f,d,u)?K=O3(c,i,x,l):u===Math.max(d,u)?K=L3(A,s,a,y):K=Ms(c,i,x,l,A,s,a,y),K}function C3(e){let t=[],n=[],o=[],s=[];if(!e)return{curls:o,directions:s};for(let A of b0.all){let a=b0.getPoints(A),i=[],c=[];for(let x of a){let y=e[x[0]],l=e[x[1]],f=I3(y,l),d=f[0],u=f[1];i.push(d),c.push(u)}t.push(i),n.push(c)}for(let A of b0.all){let a=A===b0.thumb?1:0,i=b0.getPoints(A),c=e[i[a][0]],x=e[i[a+1][1]],y=e[i[3][1]],l=Rs(c,x,y),f=Ps(c,x,y,t[A].slice(a));o[A]=l,s[A]=f}return{curls:o,directions:s}}function W2(e){if(!e||e.length===0)return null;let t=C3(e),n={};for(let o of b0.all)n[b0.getName(o)]={curl:ce.getName(t.curls[o]),direction:_.getName(t.directions[o])};return n}function W3(e){let t=[];if(!e||e.length===0)return t;let n=C3(e);for(let o of S3){let s=o.matchAgainst(n.curls,n.directions);s>=vs&&t.push({name:o.name,confidence:s})}return t}var D3=e=>{if(!e)return[];let t=[];for(let n=0;nc.part==="leftWrist"),s=e[n].keypoints.find(c=>c.part==="rightWrist"),A=e[n].keypoints.find(c=>c.part==="nose");A&&o&&s&&o.position[1]c.part==="leftShoulder"),i=e[n].keypoints.find(c=>c.part==="rightShoulder");a&&i&&Math.abs(a.positionRaw[1]-i.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${a.position[1]>i.position[1]?"left":"right"}`})}return t},F3=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),s=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/s)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let i=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));i>10&&t.push({face:n,gesture:`mouth ${Math.trunc(i)}% open`});let c=e[n].mesh[152][2]||0;Math.abs(c)>10&&t.push({face:n,gesture:`head ${c<0?"up":"down"}`})}return t},B3=e=>{var n,o,s,A;if(!e)return[];let t=[];for(let a=0;a.06||g>.06)&&(d=!1),m>g?m>.05&&t.push({iris:a,gesture:"looking right"}):g>.05&&t.push({iris:a,gesture:"looking left"});let P=Math.abs(e[a].mesh[145][1]-e[a].annotations.rightEyeIris[0][1])/e[a].box[3],v=Math.abs(e[a].mesh[374][1]-e[a].annotations.leftEyeIris[0][1])/e[a].box[3];(v<.01||P<.01||v>.022||P>.022)&&(d=!1),(v<.01||P<.01)&&t.push({iris:a,gesture:"looking down"}),(v>.022||P>.022)&&t.push({iris:a,gesture:"looking up"}),d&&t.push({iris:a,gesture:"looking center"})}return t},H3=e=>{if(!e)return[];let t=[];for(let n=0;n0){let s=o.reduce((a,i)=>(a.position[2]||0)<(i.position[2]||0)?a:i);t.push({hand:n,gesture:`${s.name} forward`});let A=o.reduce((a,i)=>a.position[1][A[0]*t[0],A[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:s,confidence:e.confidence}}function F2(e,t=1.5){let n=e2(e),o=D2(e),s=[t*o[0]/2,t*o[1]/2],A=[n[0]-s[0],n[1]-s[1]],a=[n[0]+s[0],n[1]+s[1]];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function B2(e){let t=e2(e),n=D2(e),s=Math.max(...n)/2,A=[t[0]-s,t[1]-s],a=[t[0]+s,t[1]+s];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function ws(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function q3(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return ws(n)}var G3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function fe(e,t){let n=0;for(let o=0;o[a.x,a.y]),this.anchorsTensor=r.tensor2d(this.anchors),this.inputSize=((A=(s=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:s.shape)==null?void 0:A[2])||0,this.inputSizeTensor=r.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=r.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=r.slice(t,[0,0],[-1,2]),n.boxSizes=r.slice(t,[0,2],[-1,2]),n.div=r.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=r.add(n.div,this.anchorsTensor),n.halfBoxSizes=r.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=r.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=r.mul(n.sub,this.inputSizeTensor),n.add=r.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=r.mul(n.add,this.inputSizeTensor);let o=r.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(s=>r.dispose(n[s])),o}normalizeLandmarks(t,n){let o={};o.reshape=r.reshape(t,[-1,7,2]),o.div=r.div(o.reshape,this.inputSizeTensor),o.landmarks=r.add(o.div,this.anchors[n]?this.anchors[n]:0);let s=r.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}async predict(t,n){var i;let o={};o.resize=r.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=r.div(o.resize,O.tf127),o.image=r.sub(o.div,O.tf1),o.batched=this.model.execute(o.image),o.predictions=r.squeeze(o.batched),o.slice=r.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=r.sigmoid(o.slice),o.scores=r.squeeze(o.sigmoid);let s=await o.scores.data();o.boxes=r.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await r.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((i=n.hand)==null?void 0:i.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let A=await o.nms.array(),a=[];for(let c of A){let x={};x.box=r.slice(o.norm,[c,0],[1,-1]),x.slice=r.slice(o.predictions,[c,5],[1,14]),x.norm=this.normalizeLandmarks(x.slice,c),x.palmLandmarks=r.reshape(x.norm,[-1,2]);let y=await x.box.data(),l=y.slice(0,2),f=y.slice(2,4),d=await x.palmLandmarks.array(),u={startPoint:l,endPoint:f,palmLandmarks:d,confidence:s[c]},m=X3(u,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(m),Object.keys(x).forEach(g=>r.dispose(x[g]))}return Object.keys(o).forEach(c=>r.dispose(o[c])),a}};var js=5,J3=1.65,Q3=[0,5,9,13,17,1,2],Ns=0,Is=2,_3=0,G2=class{constructor(t,n){E(this,"handDetector");E(this,"handPoseModel");E(this,"inputSize");E(this,"storedBoxes");E(this,"skipped");E(this,"detectedHands");var o,s,A;this.handDetector=t,this.handPoseModel=n,this.inputSize=((A=(s=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:s[0].shape)==null?void 0:A[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(a=>a[0]),o=t.map(a=>a[1]),s=[Math.min(...n),Math.min(...o)],A=[Math.max(...n),Math.max(...o)];return{startPoint:s,endPoint:A}}getBoxForPalmLandmarks(t,n){let o=t.map(A=>a5([...A,1],n)),s=this.calculateLandmarksBoundingBox(o);return F2(B2(s),js)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=F2(B2(n),J3);o.palmLandmarks=[];for(let s=0;s[a[0]*(d[0]-this.inputSize/2),a[1]*(d[1]-this.inputSize/2),a[2]*d[2]]),c=A5(o,[0,0]),x=i.map(d=>[...a5(d,c),d[2]]),y=U3(s),l=[...e2(n),1],f=[fe(l,y[0]),fe(l,y[1])];return x.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,s,A=(n.hand.skipTime||0)>T()-_3,a=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&A&&a&&(s=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,s&&s.length>0&&(s.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...s],this.storedBoxes.length>0&&(o=!0));let i=[];for(let c=0;c=n.hand.minConfidence/4){let j=r.reshape(p,[-1,3]),k=await j.array();r.dispose(p),r.dispose(j);let I=this.transformRawCoords(k,m,y,u),B=this.getBoxForHandLandmarks(I);this.storedBoxes[c]={...B,confidence:b};let q={landmarks:I,confidence:b,boxConfidence:x.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};i.push(q)}else this.storedBoxes[c]=null;r.dispose(p)}else{let y=F2(B2(x),J3),l={confidence:x.confidence,boxConfidence:x.confidence,fingerConfidence:0,box:{topLeft:y.startPoint,bottomRight:y.endPoint},landmarks:[]};i.push(l)}}return this.storedBoxes=this.storedBoxes.filter(c=>c!==null),this.detectedHands=i.length,i.length>n.hand.maxDetected&&(i.length=n.hand.maxDetected),i}};var $3={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},ze,Se,en;async function i5(e,t){let n=await en.estimateHands(e,t);if(!n)return[];let o=[];for(let s=0;sn[s].landmarks[l]);let a=n[s].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],c=[0,0,0,0];if(a&&a.length>0){for(let y of a)y[0]i[2]&&(i[2]=y[0]),y[1]>i[3]&&(i[3]=y[1]);i[2]-=i[0],i[3]-=i[1],c=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[s].box?[Math.trunc(Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.max(0,n[s].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[s].box.bottomRight[0])-Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[s].box.bottomRight[1])-Math.max(0,n[s].box.topLeft[1]))]:[0,0,0,0],c=[n[s].box.topLeft[0]/(e.shape[2]||0),n[s].box.topLeft[1]/(e.shape[1]||0),(n[s].box.bottomRight[0]-n[s].box.topLeft[0])/(e.shape[2]||0),(n[s].box.bottomRight[1]-n[s].box.topLeft[1])/(e.shape[1]||0)];let x=W2(a);o.push({id:s,score:Math.round(100*n[s].confidence)/100,boxScore:Math.round(100*n[s].boxConfidence)/100,fingerScore:Math.round(100*n[s].fingerConfidence)/100,label:"hand",box:i,boxRaw:c,keypoints:a,annotations:A,landmarks:x})}return o}async function tn(e){var n,o;M.initial&&(ze=null,Se=null),!ze||!Se?[ze,Se]=await Promise.all([e.hand.enabled?L((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?L((o=e.hand.skeleton)==null?void 0:o.modelPath):null]):(e.debug&&h("cached model:",ze.modelUrl),e.debug&&h("cached model:",Se.modelUrl));let t=ze?new H2(ze):void 0;return t&&Se&&(en=new G2(t,Se)),[ze,Se]}var t0=[null,null],Os=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],me=[[0,0],[0,0]],Cs=["hand","fist","pinch","point","face","tip","pinchtip"],on=4,rn=1.6,Ws=512,Ds=1.4,V2=Number.MAX_SAFE_INTEGER,l5=0,Q0=[0,0],e0={boxes:[],hands:[]},sn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function An(e){var t;if(M.initial&&(t0[0]=null),t0[0])e.debug&&h("cached model:",t0[0].modelUrl);else{f2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),t0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=t0[0].executor?Object.values(t0[0].modelSignature.inputs):void 0;me[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,me[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return t0[0]}async function an(e){var t;if(M.initial&&(t0[1]=null),t0[1])e.debug&&h("cached model:",t0[1].modelUrl);else{t0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=t0[1].executor?Object.values(t0[1].modelSignature.inputs):void 0;me[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,me[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return t0[1]}async function Fs(e,t){let n=[];if(!e||!t0[0])return n;let o={},s=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,Ws),a=Math.round(A*s/8)*8;o.resize=r.image.resizeBilinear(e,[A,a]),o.cast=r.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await t0[0].executeAsync(o.cast,Os),o.boxes=r.squeeze(o.rawBoxes,[0,2]),o.scores=r.squeeze(o.rawScores,[0]);let i=r.unstack(o.scores,1);r.dispose(i[on]),i.splice(on,1),o.filtered=r.stack(i,1),r.dispose(i),o.max=r.max(o.filtered,1),o.argmax=r.argMax(o.filtered,1);let c=0;o.nms=await r.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let x=await o.nms.data(),y=await o.max.data(),l=await o.argmax.data();for(let f of Array.from(x)){let d=r.slice(o.boxes,f,1),u=await d.data();r.dispose(d);let m=[u[1],u[0],u[3]-u[1],u[2]-u[0]],g=v2(m,Ds),P=[Math.trunc(m[0]*Q0[0]),Math.trunc(m[1]*Q0[1]),Math.trunc(m[2]*Q0[0]),Math.trunc(m[3]*Q0[1])],v=y[f],p=Cs[l[f]],b={id:c++,score:v,box:P,boxRaw:g,label:p};n.push(b)}return Object.keys(o).forEach(f=>r.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function c5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&t0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let s={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];s.crop=r.image.cropAndResize(e,[A],[0],[me[1][0],me[1][1]],"bilinear"),s.div=r.div(s.crop,O.tf255),[s.score,s.keypoints]=t0[1].execute(s.div,["Identity_1","Identity"]);let a=(await s.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(i>=(n.hand.minConfidence||0)){o.fingerScore=i,s.reshaped=r.reshape(s.keypoints,[-1,3]);let y=(await s.reshaped.array()).map(l=>[l[0]/me[1][1],l[1]/me[1][0],l[2]||0]).map(l=>[l[0]*t.boxRaw[2],l[1]*t.boxRaw[3],l[2]||0]);o.keypoints=y.map(l=>[Q0[0]*(l[0]+t.boxRaw[0]),Q0[1]*(l[1]+t.boxRaw[1]),l[2]||0]),o.landmarks=W2(o.keypoints);for(let l of Object.keys(sn))o.annotations[l]=sn[l].map(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]:null)}Object.keys(s).forEach(c=>r.dispose(s[c]))}return o}async function x5(e,t){var s,A;if(!((s=t0[0])!=null&&s.executor)||!((A=t0[1])!=null&&A.executor)||!t0[0].inputs[0].shape||!t0[1].inputs[0].shape)return[];Q0=[e.shape[2]||0,e.shape[1]||0],V2++;let n=(t.hand.skipTime||0)>T()-l5,o=V2<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?e0.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>T()-l5,c=V2<3*(t.hand.skipFrames||0);t.skipAllowed&&e0.hands.length===t.hand.maxDetected?e0.hands=await Promise.all(e0.boxes.map(y=>c5(e,y,t))):t.skipAllowed&&i&&c&&e0.hands.length>0?e0.hands=await Promise.all(e0.boxes.map(y=>c5(e,y,t))):(e0.boxes=await Fs(e,t),l5=T(),e0.hands=await Promise.all(e0.boxes.map(y=>c5(e,y,t))),V2=0);let x=[...e0.boxes];if(e0.boxes.length=0,t.cacheSensitivity>0)for(let y=0;y.05&&l.box[3]/(e.shape[1]||1)>.05&&e0.hands[y].fingerScore&&e0.hands[y].fingerScore>(t.hand.minConfidence||0)){let f=v2(l.box,rn),d=v2(l.boxRaw,rn);e0.boxes.push({...x[y],box:f,boxRaw:d})}}for(let y=0;y({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var t2={};te(t2,{connected:()=>X2,horizontal:()=>d5,kpt:()=>Z2,relative:()=>f5,vertical:()=>y5});var Z2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],d5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],y5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],f5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],X2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=_0(),m5=0;function cn(e,t){var a,i,c,x,y,l,f,d,u,m,g,P,v,p,b,j,k,I,B,q,W,Z,K;let n=T();if(!e)return _0();let o=Date.now()-e.timestamp,s=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let R=0;R((s-1)*z.body[R].box[F]+C)/s),A0=e.body[R].boxRaw.map((C,F)=>((s-1)*z.body[R].boxRaw[F]+C)/s),H=e.body[R].keypoints.map((C,F)=>{var S,N0,$0,ee,i0,Ue,I5,L5,O5;return{score:C.score,part:C.part,position:[z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].position[0]||0)+(C.position[0]||0))/s:C.position[0],z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].position[1]||0)+(C.position[1]||0))/s:C.position[1],z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].position[2]||0)+(C.position[2]||0))/s:C.position[2]],positionRaw:[z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].positionRaw[0]||0)+(C.positionRaw[0]||0))/s:C.positionRaw[0],z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].positionRaw[1]||0)+(C.positionRaw[1]||0))/s:C.positionRaw[1],z.body[R].keypoints[F]?((s-1)*(z.body[R].keypoints[F].positionRaw[2]||0)+(C.positionRaw[2]||0))/s:C.positionRaw[2]],distance:[z.body[R].keypoints[F]?((s-1)*(((S=z.body[R].keypoints[F].distance)==null?void 0:S[0])||0)+(((N0=C.distance)==null?void 0:N0[0])||0))/s:($0=C.distance)==null?void 0:$0[0],z.body[R].keypoints[F]?((s-1)*(((ee=z.body[R].keypoints[F].distance)==null?void 0:ee[1])||0)+(((i0=C.distance)==null?void 0:i0[1])||0))/s:(Ue=C.distance)==null?void 0:Ue[1],z.body[R].keypoints[F]?((s-1)*(((I5=z.body[R].keypoints[F].distance)==null?void 0:I5[2])||0)+(((L5=C.distance)==null?void 0:L5[2])||0))/s:(O5=C.distance)==null?void 0:O5[2]]}}),a0={},n0={connected:{}};(a=t.body.modelPath)!=null&&a.includes("efficientpose")?n0=P2:(i=t.body.modelPath)!=null&&i.includes("blazepose")?n0=g2:(c=t.body.modelPath)!=null&&c.includes("movenet")&&(n0=t2);for(let[C,F]of Object.entries(n0.connected)){let S=[];for(let N0=0;N0i0.part===F[N0]),ee=H.find(i0=>i0.part===F[N0+1]);$0&&ee&&S.push([$0.position,ee.position])}a0[C]=S}z.body[R]={...e.body[R],box:D,boxRaw:A0,keypoints:H,annotations:a0}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let R=0;R((s-1)*z.hand[R].box[C]+n0)/s),A0=e.hand[R].boxRaw.map((n0,C)=>((s-1)*z.hand[R].boxRaw[C]+n0)/s);z.hand[R].keypoints.length!==e.hand[R].keypoints.length&&(z.hand[R].keypoints=e.hand[R].keypoints);let H=e.hand[R].keypoints&&e.hand[R].keypoints.length>0?e.hand[R].keypoints.map((n0,C)=>n0.map((F,S)=>((s-1)*(z.hand[R].keypoints[C][S]||1)+(F||0))/s)):[],a0={};if(Object.keys(z.hand[R].annotations).length!==Object.keys(e.hand[R].annotations).length)z.hand[R].annotations=e.hand[R].annotations,a0=z.hand[R].annotations;else if(e.hand[R].annotations)for(let n0 of Object.keys(e.hand[R].annotations))a0[n0]=(l=(y=(x=e.hand[R])==null?void 0:x.annotations)==null?void 0:y[n0])!=null&&l[0]?e.hand[R].annotations[n0].map((C,F)=>C.map((S,N0)=>((s-1)*z.hand[R].annotations[n0][F][N0]+S)/s)):null;z.hand[R]={...e.hand[R],box:D,boxRaw:A0,keypoints:H,annotations:a0}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let R=0;R((s-1)*z.face[R].box[a0]+H)/s),A0=e.face[R].boxRaw.map((H,a0)=>((s-1)*z.face[R].boxRaw[a0]+H)/s);if(e.face[R].rotation){let H={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};H.matrix=(f=e.face[R].rotation)==null?void 0:f.matrix,H.angle={roll:((s-1)*(((u=(d=z.face[R].rotation)==null?void 0:d.angle)==null?void 0:u.roll)||0)+(((g=(m=e.face[R].rotation)==null?void 0:m.angle)==null?void 0:g.roll)||0))/s,yaw:((s-1)*(((v=(P=z.face[R].rotation)==null?void 0:P.angle)==null?void 0:v.yaw)||0)+(((b=(p=e.face[R].rotation)==null?void 0:p.angle)==null?void 0:b.yaw)||0))/s,pitch:((s-1)*(((k=(j=z.face[R].rotation)==null?void 0:j.angle)==null?void 0:k.pitch)||0)+(((B=(I=e.face[R].rotation)==null?void 0:I.angle)==null?void 0:B.pitch)||0))/s},H.gaze={bearing:((s-1)*(((q=z.face[R].rotation)==null?void 0:q.gaze.bearing)||0)+(((W=e.face[R].rotation)==null?void 0:W.gaze.bearing)||0))/s,strength:((s-1)*(((Z=z.face[R].rotation)==null?void 0:Z.gaze.strength)||0)+(((K=e.face[R].rotation)==null?void 0:K.gaze.strength)||0))/s},z.face[R]={...e.face[R],rotation:H,box:D,boxRaw:A0}}else z.face[R]={...e.face[R],box:D,boxRaw:A0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let R=0;R((s-1)*z.object[R].box[a0]+H)/s),A0=e.object[R].boxRaw.map((H,a0)=>((s-1)*z.object[R].boxRaw[a0]+H)/s);z.object[R]={...e.object[R],box:D,boxRaw:A0}}if(e.persons){let R=e.persons;if(!z.persons||R.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(R));else for(let D=0;D((s-1)*z.persons[D].box[H]+A0)/s)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let A=T();return m5=M.perfadd?m5+Math.round(A-n):Math.round(A-n),e.performance&&(z.performance={...e.performance,interpolate:m5}),z}var m0;async function p5(e){return!m0||M.initial?m0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",m0.modelUrl),m0}async function xn(e,t){var s;if(m0||(m0=await p5(t)),!(m0!=null&&m0.executor)||!((s=m0==null?void 0:m0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[m0.inputs[0].shape?m0.inputs[0].shape[1]:0,m0.inputs[0].shape?m0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=m0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r.unstack(n.squeeze,2),n.fg=r.softmax(n.fgRaw),n.mul=r.mul(n.fg,O.tf255),n.expand=r.expandDims(n.mul,2),n.output=r.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.output],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.output,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}var h5={};te(h5,{distance:()=>u5,find:()=>Gs,similarity:()=>Hs});function u5(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let s=0;s{if(e===0)return 1;let A=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(A,1),0)};function Hs(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=u5(e,t,n);return yn(o,n.order||2,n.min||0,n.max||1)}function Gs(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,s=-1;for(let a=0;ar2,validateModel:()=>_2});var fn=.005,k0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function b5(e){for(let t of d5){let n=e.keypoints.findIndex(s=>s.part===t[0]),o=e.keypoints.findIndex(s=>s.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]s&&s.part===t[0]),o=e.keypoints.findIndex(s=>s&&s.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]x&&x.part===t[0]),s=e.keypoints.findIndex(x=>x&&x.part===t[1]),A=e.keypoints.findIndex(x=>x&&x.part===n[0]),a=e.keypoints.findIndex(x=>x&&x.part===n[1]);if(!e.keypoints[A]||!e.keypoints[a])continue;let i=e.keypoints[o]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[o].position[0])]:[0,0],c=e.keypoints[s]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[s].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[s].position[0])]:[0,0];if(i[0]>i[1]||c[0]>c[1]){let x=e.keypoints[o];e.keypoints[o]=e.keypoints[s],e.keypoints[s]=x}}}function mn(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=r.pad(e,k0.padding),n.resize=r.image.resizeBilinear(n.pad,[t,t]);let o=r.cast(n.resize,"int32");return Object.keys(n).forEach(a=>r.dispose(n[a])),o}function un(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+k0.padding[2][0]+k0.padding[2][1])/t[0]-k0.padding[2][0],o.position[1]*(t[1]+k0.padding[1][0]+k0.padding[1][1])/t[1]-k0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Y0(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var r0,q2=0,g5=Number.MAX_SAFE_INTEGER,je={boxes:[],bodies:[],last:0};async function hn(e){var t;return M.initial&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(f2(["size"],e),r0=await L(e.body.modelPath)),q2=(r0==null?void 0:r0.executor)&&((t=r0==null?void 0:r0.inputs)==null?void 0:t[0].shape)?r0.inputs[0].shape[2]:0,q2<64&&(q2=256),r0}function Zs(e,t,n){let o=e[0][0],s=[],A=0;for(let y=0;yt.body.minConfidence){let l=[o[y][1],o[y][0]];s.push({score:Math.round(100*A)/100,part:Z2[y],positionRaw:l,position:[Math.round((n.shape[2]||0)*l[0]),Math.round((n.shape[1]||0)*l[1])]})}A=s.reduce((y,l)=>l.score>y?l.score:y,0);let a=[],i=Y0(s.map(y=>y.position),[n.shape[2],n.shape[1]]),c={};for(let[y,l]of Object.entries(X2)){let f=[];for(let d=0;dg.part===l[d]),m=s.find(g=>g.part===l[d+1]);u&&m&&u.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&f.push([u.position,m.position])}c[y]=f}let x={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return b5(x),a.push(x),a}function Xs(e,t,n){let o=[];for(let s=0;st.body.minConfidence){let i=[];for(let l=0;l<17;l++){let f=A[3*l+2];if(f>t.body.minConfidence){let d=[A[3*l+1],A[3*l+0]];i.push({part:Z2[l],score:Math.round(100*f)/100,positionRaw:d,position:[Math.round((n.shape[2]||0)*d[0]),Math.round((n.shape[1]||0)*d[1])]})}}let c=Y0(i.map(l=>l.position),[n.shape[2],n.shape[1]]),x={};for(let[l,f]of Object.entries(X2)){let d=[];for(let u=0;uP.part===f[u]),g=i.find(P=>P.part===f[u+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&d.push([m.position,g.position])}x[l]=d}let y={id:s,score:a,box:c.box,boxRaw:c.boxRaw,keypoints:[...i],annotations:x};b5(y),o.push(y)}}return o.sort((s,A)=>A.score-s.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function T5(e,t){var s;if(!(r0!=null&&r0.executor)||!((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape))return[];t.skipAllowed||(je.boxes.length=0),g5++;let n=(t.body.skipTime||0)>T()-je.last,o=g5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?je.bodies:new Promise(async A=>{let a={};g5=0,a.input=pn(e,q2),a.res=r0==null?void 0:r0.execute(a.input),je.last=T();let i=await a.res.array();je.bodies=a.res.shape[2]===17?Zs(i,t,e):Xs(i,t,e);for(let c of je.bodies)un(c,[e.shape[2]||1,e.shape[1]||1]),mn(c.keypoints);Object.keys(a).forEach(c=>r.dispose(a[c])),A(je.bodies)})}var D0,U2=[],gn=0,v5=Number.MAX_SAFE_INTEGER,K2=0,Y2=2.5;async function Tn(e){if(!D0||M.initial){D0=await L(e.object.modelPath);let t=D0!=null&&D0.executor?Object.values(D0.modelSignature.inputs):void 0;K2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",D0.modelUrl);return D0}async function qs(e,t,n){var x,y;let o=0,s=[],A=K2;for(let l of[1,2,4]){let f=l*13,d=r.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===Oe.length)),u=await d.array(),m=r.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let k=(.5+Math.trunc(p%f))/f,I=(.5+Math.trunc(p/f))/f,B=v[p].map(H=>H*(f/l/A)),[q,W]=[k-Y2/l*B[0],I-Y2/l*B[1]],[Z,K]=[k+Y2/l*B[2]-q,I+Y2/l*B[3]-W],R=[q,W,Z,K];R=R.map(H=>Math.max(0,Math.min(H,1)));let D=[R[0]*t[0],R[1]*t[1],R[2]*t[0],R[3]*t[1]],A0={id:o++,score:Math.round(100*j)/100,class:b+1,label:Oe[b].label,box:D.map(H=>Math.trunc(H)),boxRaw:R};s.push(A0)}}r.dispose([d,m,g,P])}let a=s.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),i=s.map(l=>l.score),c=[];if(a&&a.length>0){let l=await r.image.nonMaxSuppressionAsync(a,i,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);c=Array.from(await l.data()),r.dispose(l)}return s=s.filter((l,f)=>c.includes(f)).sort((l,f)=>f.score-l.score),s}async function R5(e,t){if(!(D0!=null&&D0.executor))return[];let n=(t.object.skipTime||0)>T()-gn,o=v5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&U2.length>0?(v5++,U2):(v5=0,!M.kernels.includes("mod")||!M.kernels.includes("sparsetodense")?U2:new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[K2,K2],!1),i=r.div(a,O.tf255),c=r.transpose(i,[0,3,1,2]),x;t.object.enabled&&(x=D0.execute(c)),gn=T();let y=await qs(x,A,t);U2=y,r.dispose([a,i,c,...x]),s(y)}))}var o2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],Us=o2.length,n2=o2.reduce((e,t,n)=>(e[t]=n,e),{}),Ys=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],H7=Ys.map(([e,t])=>[n2[e],n2[t]]),Rn=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Mn(e){let t=e.reduce(({maxX:n,maxY:o,minX:s,minY:A},{position:{x:a,y:i}})=>({maxX:Math.max(n,a),maxY:Math.max(o,i),minX:Math.min(s,a),minY:Math.min(A,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Pn(e,[t,n],[o,s]){let A=t/o,a=n/s,i=(x,y)=>({id:y,score:x.score,boxRaw:[x.box[0]/s,x.box[1]/o,x.box[2]/s,x.box[3]/o],box:[Math.trunc(x.box[0]*a),Math.trunc(x.box[1]*A),Math.trunc(x.box[2]*a),Math.trunc(x.box[3]*A)],keypoints:x.keypoints.map(({score:l,part:f,position:d})=>({score:l,part:f,position:[Math.trunc(d.x*a),Math.trunc(d.y*A)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((x,y)=>i(x,y))}var J2=class{constructor(t,n){E(this,"priorityQueue");E(this,"numberOfElements");E(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function kn(e,t,n,o){let s=n-e,A=o-t;return s*s+A*A}function w5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var w0,Js=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Q2=1,Xe=16,Qs=50**2;function wn(e,t,n,o,s,A,a=2){let i=P=>({y:A.get(P.y,P.x,e),x:A.get(P.y,P.x,A.shape[2]/2+e)}),c=(P,v,p)=>({y:k5(Math.round(P.y/Xe),0,v-1),x:k5(Math.round(P.x/Xe),0,p-1)}),[x,y]=o.shape,l=c(t.position,x,y),f=i(l),u=w5(t.position,f);for(let P=0;P[n2[f],n2[d]]),a=A.map(([,f])=>f),i=A.map(([f])=>f),c=t.shape[2],x=a.length,y=new Array(c),l=P5(e.part,Xe,n);y[e.part.id]={score:e.score,part:o2[e.part.id],position:l};for(let f=x-1;f>=0;--f){let d=a[f],u=i[f];y[d]&&!y[u]&&(y[u]=wn(f,y[d],u,t,n,s))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function eA(e,t){let[n,o,s]=t.shape,A=new J2(n*o*s,({score:a})=>a);for(let a=0;a{var a;let A=(a=s[o])==null?void 0:a.position;return A?kn(n,t,A.y,A.x)<=Qs:!1})}function tA(e,t){return t.reduce((o,{position:s,score:A},a)=>(En(e,s,a)||(o+=A),o),0)/t.length}function nA(e,t,n,o,s,A){let a=[],i=eA(A,t);for(;a.lengthd.score>A);let l=tA(a,y),f=Mn(y);l>A&&a.push({keypoints:y,box:f,score:Math.round(100*l)/100})}return a}async function E5(e,t){if(!(w0!=null&&w0.executor))return[];let n=r.tidy(()=>{if(!w0.inputs[0].shape)return[];let a=r.image.resizeBilinear(e,[w0.inputs[0].shape[2],w0.inputs[0].shape[1]]),i=r.sub(r.div(r.cast(a,"float32"),127.5),1),x=w0.execute(i,Js).map(y=>r.squeeze(y,[0]));return x[1]=r.sigmoid(x[1]),x}),o=await Promise.all(n.map(a=>a.buffer()));for(let a of n)r.dispose(a);let s=nA(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return w0.inputs[0].shape?Pn(s,[e.shape[1],e.shape[2]],[w0.inputs[0].shape[2],w0.inputs[0].shape[1]]):[]}async function zn(e){return!w0||M.initial?w0=await L(e.body.modelPath):e.debug&&h("cached model:",w0.modelUrl),w0}var q0,oA=["fgr","pha","r1o","r2o","r3o","r4o"],s0={},S5=0;function Nn(e){r.dispose([s0.r1i,s0.r2i,s0.r3i,s0.r4i,s0.downsample_ratio]),s0.r1i=r.tensor(0),s0.r2i=r.tensor(0),s0.r3i=r.tensor(0),s0.r4i=r.tensor(0),S5=e.segmentation.ratio||.5,s0.downsample_ratio=r.tensor(S5)}async function j5(e){return!q0||M.initial?q0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",q0.modelUrl),Nn(e),q0}var jn=e=>r.tidy(()=>{let t=r.squeeze(e,[0]),n=r.mul(t,O.tf255);return r.cast(n,"int32")});function z5(e,t){let n=e?jn(e):r.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?jn(t):r.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),s=r.concat([n,o],-1);return r.dispose([n,o]),s}function rA(e){return r.tidy(()=>{let t={};return t.unstack=r.unstack(e,-1),t.concat=r.concat(t.unstack,1),t.split=r.split(t.concat,4,1),t.stack=r.concat(t.split,2),t.squeeze=r.squeeze(t.stack,[0]),t.expand=r.expandDims(t.squeeze,-1),t.add=r.add(t.expand,1),t.mul=r.mul(t.add,127.5),t.cast=r.cast(t.mul,"int32"),t.tile=r.tile(t.cast,[1,1,3]),t.alpha=r.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),r.concat([t.tile,t.alpha],-1)})}async function In(e,t){if(q0||(q0=await j5(t)),!(q0!=null&&q0.executor))return null;s0.src=r.div(e,255),S5!==t.segmentation.ratio&&Nn(t);let[n,o,s,A,a,i]=await q0.executeAsync(s0,oA),c;switch(t.segmentation.mode||"default"){case"default":c=z5(n,o);break;case"alpha":c=z5(null,o);break;case"foreground":c=z5(n,null);break;case"state":c=rA(s);break;default:c=r.tensor(0)}return r.dispose([s0.src,n,o,s0.r1i,s0.r2i,s0.r3i,s0.r4i]),[s0.r1i,s0.r2i,s0.r3i,s0.r4i]=[s,A,a,i],c}var p0;async function N5(e){return!p0||M.initial?p0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",p0.modelUrl),p0}async function On(e,t){var s;if(p0||(p0=await N5(t)),!(p0!=null&&p0.executor)||!((s=p0==null?void 0:p0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[p0.inputs[0].shape?p0.inputs[0].shape[1]:0,p0.inputs[0].shape?p0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=p0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),n.alpha=r.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=r.mul(n.alpha,O.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.mul],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.mul,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}function _2(e,t,n){var x,y;if(!t||!((x=e==null?void 0:e.config)!=null&&x.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],s=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],A=[],a=[],i=t.modelUrl,c=t.executor;if((y=c==null?void 0:c.graph)!=null&&y.nodes)for(let l of Object.values(c.graph.nodes)){let f=l.op.toLowerCase();A.includes(f)||A.push(f)}else!c&&e.config.debug&&h("model not loaded",n);for(let l of A)!o.includes(l)&&!s.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&a.push(l);return e.config.debug&&a.length>0&&h("model validation failed:",n,a),a.length>0?{name:n,missing:a,ops:A,url:i}:null}var r2=class{constructor(t){E(this,"instance");E(this,"models");this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let A of Object.values(y0))t+=A.sizeFromManifest,n+=A.sizeLoadedWeights,o+=A.sizeDesired;let s=o>0?n/o:0;return{numLoadedModels:Object.values(y0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:s,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(y0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(){var n,o,s,A,a,i,c,x,y,l,f,d,u,m,g,P,v,p,b,j,k,I,B,q,W,Z,K;M.initial&&this.reset();let t={};t.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?z1(this.instance.config):null,t.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)==null?void 0:n.enabled)&&!this.models.antispoof?e3(this.instance.config):null,t.liveness=this.instance.config.face.enabled&&((o=this.instance.config.face.liveness)==null?void 0:o.enabled)&&!this.models.liveness?r3(this.instance.config):null,t.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)==null?void 0:s.enabled)&&!this.models.faceres?K1(this.instance.config):null,t.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)==null?void 0:A.enabled)&&!this.models.emotion?X1(this.instance.config):null,t.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)==null?void 0:a.enabled)&&!((i=this.instance.config.face.attention)!=null&&i.enabled)&&!this.models.iris?O1(this.instance.config):null,t.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)==null?void 0:c.enabled)&&!this.models.facemesh?B1(this.instance.config):null,t.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)==null?void 0:x.enabled)&&!this.models.gear?i3(this.instance.config):null,t.ssrnetage=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)==null?void 0:y.enabled)&&!this.models.ssrnetage?d3(this.instance.config):null,t.ssrnetgender=this.instance.config.face.enabled&&((l=this.instance.config.face.ssrnet)==null?void 0:l.enabled)&&!this.models.ssrnetgender?p3(this.instance.config):null,t.mobilefacenet=this.instance.config.face.enabled&&((f=this.instance.config.face.mobilefacenet)==null?void 0:f.enabled)&&!this.models.mobilefacenet?T3(this.instance.config):null,t.insightface=this.instance.config.face.enabled&&((d=this.instance.config.face.insightface)==null?void 0:d.enabled)&&!this.models.insightface?k3(this.instance.config):null,t.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((u=this.instance.config.body.modelPath)==null?void 0:u.includes("blazepose"))?x1(this.instance.config):null,t.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?c1(this.instance.config):null,t.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((m=this.instance.config.body.modelPath)==null?void 0:m.includes("efficientpose"))?u1(this.instance.config):null,t.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)==null?void 0:g.includes("movenet"))?hn(this.instance.config):null,t.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((P=this.instance.config.body.modelPath)==null?void 0:P.includes("posenet"))?zn(this.instance.config):null,t.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((p=(v=this.instance.config.hand.detector)==null?void 0:v.modelPath)==null?void 0:p.includes("handtrack"))?An(this.instance.config):null,t.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((j=(b=this.instance.config.hand.detector)==null?void 0:b.modelPath)==null?void 0:j.includes("handtrack"))?an(this.instance.config):null,(I=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&I.includes("handdetect")&&([t.handpose,t.handskeleton]=this.models.handpose?[null,null]:await tn(this.instance.config)),t.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((B=this.instance.config.object.modelPath)==null?void 0:B.includes("centernet"))?f1(this.instance.config):null,t.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((q=this.instance.config.object.modelPath)==null?void 0:q.includes("nanodet"))?Tn(this.instance.config):null,t.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((W=this.instance.config.segmentation.modelPath)==null?void 0:W.includes("selfie"))?N5(this.instance.config):null,t.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((Z=this.instance.config.segmentation.modelPath)==null?void 0:Z.includes("meet"))?p5(this.instance.config):null,t.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((K=this.instance.config.segmentation.modelPath)==null?void 0:K.includes("rvm"))?j5(this.instance.config):null,await Promise.all([...Object.values(t)]);for(let R of Object.keys(t))this.models[R]=t[R]||this.models[R]||null}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(y0).find(s=>s.startsWith(n.name));!o||(n.size=y0[o].sizeLoadedWeights,n.url=y0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let s=_2(this.instance,o,n);s&&t.push(s)}return t}};function Dn(e,t,n,o,s){var i,c,x,y,l,f;let A=0,a=[];for(let d of e){let u={id:A++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]u.body.box[0]&&b.box[0]+b.box[2]u.body.box[1]&&b.box[1]+b.box[3]u.body.box[0]&&b.box[1]+b.box[3]>u.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(m.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};P(u.face.box),P((y=u.body)==null?void 0:y.box),P((l=u.hands.left)==null?void 0:l.box),P((f=u.hands.right)==null?void 0:f.box);let v=Math.min(...m),p=Math.min(...g);u.box=[v,p,Math.max(...m)-v,Math.max(...g)-p],(s==null?void 0:s[1])&&(s==null?void 0:s[2])&&(u.boxRaw=[u.box[0]/s[2],u.box[1]/s[1],u.box[2]/s[2],u.box[3]/s[1]]),a.push(u)}return a}var $2=` + gaze: [gaze]\xB0`, + body: "body [score]%", + bodyPart: "[label] [score]%", + object: "[label] [score]%", + hand: "[label] [score]%", + finger: "[label]", + gesture: "[where] [who]: [what]" +}; + +// src/draw/draw.ts +var drawTime = 0; +function person(inCanvas2, result, drawOptions) { + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (let i = 0; i < result.length; i++) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels) { + const label = `person #${i}`; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.stroke(); + } + } +} +function canvas2(input, output) { + if (!input || !output) + return; + const ctx = getCanvasContext(output); + if (!ctx) + return; + ctx.drawImage(input, 0, 0); +} +async function all(inCanvas2, result, drawOptions) { + if (!(result == null ? void 0 : result.performance) || !inCanvas2) + return null; + const timeStamp = now(); + const localOptions2 = mergeDeep(options2, drawOptions); + const promise = Promise.all([ + face(inCanvas2, result.face, localOptions2), + body(inCanvas2, result.body, localOptions2), + hand(inCanvas2, result.hand, localOptions2), + object(inCanvas2, result.object, localOptions2), + gesture(inCanvas2, result.gesture, localOptions2) + ]); + drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp); + result.performance.draw = drawTime; + return promise; +} +function init2() { + options2.faceLabels = defaultLabels.face; + options2.bodyLabels = defaultLabels.body; + options2.bodyPartLabels = defaultLabels.bodyPart; + options2.handLabels = defaultLabels.hand; + options2.fingerLabels = defaultLabels.finger; + options2.objectLabels = defaultLabels.object; + options2.gestureLabels = defaultLabels.gesture; +} + +// src/body/blazeposecoords.ts +var blazeposecoords_exports = {}; +__export(blazeposecoords_exports, { + connected: () => connected, + kpt: () => kpt +}); +var kpt = [ + "nose", + "leftEyeInside", + "leftEye", + "leftEyeOutside", + "rightEyeInside", + "rightEye", + "rightEyeOutside", + "leftEar", + "rightEar", + "leftMouth", + "rightMouth", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftPinky", + "rightPinky", + "leftIndex", + "rightIndex", + "leftThumb", + "rightThumb", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle", + "leftHeel", + "rightHeel", + "leftFoot", + "rightFoot", + "bodyCenter", + "bodyTop", + "leftPalm", + "leftHand", + "rightPalm", + "rightHand" +]; +var connected = { + shoulders: ["leftShoulder", "rightShoulder"], + hips: ["rightHip", "leftHip"], + mouth: ["leftMouth", "rightMouth"], + leftLegUpper: ["leftHip", "leftKnee"], + leftLegLower: ["leftKnee", "leftAnkle"], + leftFoot: ["leftAnkle", "leftHeel", "leftFoot"], + leftTorso: ["leftShoulder", "leftHip"], + leftArmUpper: ["leftShoulder", "leftElbow"], + leftArmLower: ["leftElbow", "leftWrist"], + leftHand: ["leftWrist", "leftPalm"], + leftHandPinky: ["leftPalm", "leftPinky"], + leftHandIndex: ["leftPalm", "leftIndex"], + leftHandThumb: ["leftPalm", "leftThumb"], + leftEyeOutline: ["leftEyeInside", "leftEyeOutside"], + rightLegUpper: ["rightHip", "rightKnee"], + rightLegLower: ["rightKnee", "rightAnkle"], + rightFoot: ["rightAnkle", "rightHeel", "rightFoot"], + rightTorso: ["rightShoulder", "rightHip"], + rightArmUpper: ["rightShoulder", "rightElbow"], + rightArmLower: ["rightElbow", "rightWrist"], + rightHand: ["rightWrist", "rightPalm"], + rightHandPinky: ["rightPalm", "rightPinky"], + rightHandIndex: ["rightPalm", "rightIndex"], + rightHandThumb: ["rightPalm", "rightThumb"], + rightEyeOutline: ["rightEyeInside", "rightEyeOutside"] +}; + +// src/body/blazeposedetector.ts +var model; +var inputSize = 224; +var anchorTensor; +var numLayers = 5; +var strides = [8, 16, 32, 32, 32]; +function createAnchors() { + const anchors3 = []; + let layerId = 0; + while (layerId < numLayers) { + let anchorCount = 0; + let lastSameStrideLayer = layerId; + while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) { + anchorCount += 2; + lastSameStrideLayer++; + } + const stride = strides[layerId]; + const featureMapHeight = Math.ceil(inputSize / stride); + const featureMapWidth = Math.ceil(inputSize / stride); + for (let y = 0; y < featureMapHeight; ++y) { + for (let x = 0; x < featureMapWidth; ++x) { + for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight }); + } + } + } + layerId = lastSameStrideLayer; + } + anchorTensor = { x: tfjs_esm_exports.tensor1d(anchors3.map((a) => a.x)), y: tfjs_esm_exports.tensor1d(anchors3.map((a) => a.y)) }; +} +async function loadDetector(config3) { + if (env.initial) + model = null; + if (!model && config3.body["detector"] && config3.body["detector"].modelPath || "") { + model = await loadModel(config3.body["detector"].modelPath); + const inputs = (model == null ? void 0 : model["executor"]) ? Object.values(model.modelSignature["inputs"]) : void 0; + inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug && model) + log("cached model:", model["modelUrl"]); + createAnchors(); + return model; +} +var cropFactor = [5, 5]; +function decodeBoxes(boxesTensor, anchor) { + return tfjs_esm_exports.tidy(() => { + const split6 = tfjs_esm_exports.split(boxesTensor, 12, 1); + let xCenter = tfjs_esm_exports.squeeze(split6[0]); + let yCenter = tfjs_esm_exports.squeeze(split6[1]); + let width = tfjs_esm_exports.squeeze(split6[2]); + let height = tfjs_esm_exports.squeeze(split6[3]); + xCenter = tfjs_esm_exports.add(tfjs_esm_exports.div(xCenter, inputSize), anchor.x); + yCenter = tfjs_esm_exports.add(tfjs_esm_exports.div(yCenter, inputSize), anchor.y); + width = tfjs_esm_exports.mul(tfjs_esm_exports.div(width, inputSize), cropFactor[0]); + height = tfjs_esm_exports.mul(tfjs_esm_exports.div(height, inputSize), cropFactor[1]); + const xMin = tfjs_esm_exports.sub(xCenter, tfjs_esm_exports.div(width, 2)); + const yMin = tfjs_esm_exports.sub(yCenter, tfjs_esm_exports.div(height, 2)); + const xMax = tfjs_esm_exports.add(xMin, width); + const yMax = tfjs_esm_exports.add(yMin, height); + const boxes = tfjs_esm_exports.stack([xMin, yMin, xMax, yMax], 1); + return boxes; + }); +} +async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { + var _a, _b; + const detectedBoxes = []; + const t2 = {}; + t2.boxes = decodeBoxes(boxesTensor, anchorTensor); + t2.scores = tfjs_esm_exports.sigmoid(logitsTensor); + t2.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, 1, ((_a = config3.body["detector"]) == null ? void 0 : _a.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); + const nms = await t2.nms.data(); + const scores = await t2.scores.data(); + const boxes = await t2.boxes.array(); + for (const i of Array.from(nms)) { + const score = scores[i]; + const boxRaw = boxes[i]; + const box = [Math.round(boxRaw[0] * outputSize2[0]), Math.round(boxRaw[1] * outputSize2[1]), Math.round(boxRaw[2] * outputSize2[0]), Math.round(boxRaw[3] * outputSize2[1])]; + const detectedBox = { score, boxRaw, box }; + detectedBoxes.push(detectedBox); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return detectedBoxes; +} +async function detectBoxes(input, config3, outputSize2) { + const t2 = {}; + t2.res = model == null ? void 0 : model.execute(input, ["Identity"]); + t2.logitsRaw = tfjs_esm_exports.slice(t2.res, [0, 0, 0], [1, -1, 1]); + t2.boxesRaw = tfjs_esm_exports.slice(t2.res, [0, 0, 1], [1, -1, -1]); + t2.logits = tfjs_esm_exports.squeeze(t2.logitsRaw); + t2.boxes = tfjs_esm_exports.squeeze(t2.boxesRaw); + const boxes = await decodeResults(t2.boxes, t2.logits, config3, outputSize2); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return boxes; +} + +// src/util/box.ts +function calc(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const box = [min2[0], min2[1], max5[0] - min2[0], max5[1] - min2[1]]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function square(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const center = [(min2[0] + max5[0]) / 2, (min2[1] + max5[1]) / 2]; + const dist = Math.max(center[0] - min2[0], center[1] - min2[1], -center[0] + max5[0], -center[1] + max5[1]); + const box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function scale(box, scaleFact) { + const dist = [box[2] * scaleFact, box[3] * scaleFact]; + const newBox = [ + box[0] - (dist[0] - box[2]) / 2, + box[1] - (dist[1] - box[3]) / 2, + dist[0], + dist[1] + ]; + return newBox; +} + +// src/body/blazepose.ts +var model2; +var inputSize2 = 256; +var skipped = Number.MAX_SAFE_INTEGER; +var outputNodes = { + landmarks: ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"], + detector: [] +}; +var cache = []; +var padding = [[0, 0], [0, 0], [0, 0], [0, 0]]; +var lastTime = 0; +var sigmoid2 = (x) => 1 - 1 / (1 + Math.exp(x)); +var loadDetect = (config3) => loadDetector(config3); +async function loadPose(config3) { + if (env.initial) + model2 = null; + if (!model2) { + model2 = await loadModel(config3.body.modelPath); + const inputs = (model2 == null ? void 0 : model2["executor"]) ? Object.values(model2.modelSignature["inputs"]) : void 0; + inputSize2 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug) + log("cached model:", model2["modelUrl"]); + return model2; +} +function prepareImage(input, size2, cropBox) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + let final; + if (cropBox) { + t2.cropped = tfjs_esm_exports.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + } + if (input.shape[1] !== input.shape[2]) { + const height = [ + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0 + ]; + const width = [ + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0 + ]; + padding = [ + [0, 0], + height, + width, + [0, 0] + ]; + t2.pad = tfjs_esm_exports.pad(t2.cropped || input, padding); + t2.resize = tfjs_esm_exports.image.resizeBilinear(t2.pad, [size2, size2]); + final = tfjs_esm_exports.div(t2.resize, constants.tf255); + } else if (input.shape[1] !== size2) { + t2.resize = tfjs_esm_exports.image.resizeBilinear(t2.cropped || input, [size2, size2]); + final = tfjs_esm_exports.div(t2.resize, constants.tf255); + } else { + final = tfjs_esm_exports.div(t2.cropped || input, constants.tf255); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return final; +} +function rescaleKeypoints(keypoints, outputSize2, cropBox) { + for (const kpt4 of keypoints) { + kpt4.position = [ + Math.trunc(kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0]), + Math.trunc(kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0]), + kpt4.position[2] + ]; + kpt4.positionRaw = [kpt4.position[0] / outputSize2[0], kpt4.position[1] / outputSize2[1], 2 * kpt4.position[2] / (outputSize2[0] + outputSize2[1])]; + } + if (cropBox) { + const width = cropBox[2] - cropBox[0]; + const height = cropBox[3] - cropBox[1]; + for (const kpt4 of keypoints) { + kpt4.positionRaw = [ + kpt4.positionRaw[0] / height + cropBox[1], + kpt4.positionRaw[1] / width + cropBox[0], + kpt4.positionRaw[2] + ]; + kpt4.position = [ + Math.trunc(kpt4.positionRaw[0] * outputSize2[0]), + Math.trunc(kpt4.positionRaw[1] * outputSize2[1]), + kpt4.positionRaw[2] + ]; + } + } + return keypoints; +} +function fixKeypoints(keypoints) { + const leftPalm = keypoints.find((k) => k.part === "leftPalm"); + const leftWrist = keypoints.find((k) => k.part === "leftWrist"); + const leftIndex = keypoints.find((k) => k.part === "leftIndex"); + leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2; + const rightPalm = keypoints.find((k) => k.part === "rightPalm"); + const rightWrist = keypoints.find((k) => k.part === "rightWrist"); + const rightIndex = keypoints.find((k) => k.part === "rightIndex"); + rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2; +} +async function detectLandmarks(input, config3, outputSize2) { + if (!(model2 == null ? void 0 : model2["executor"])) + return null; + const t2 = {}; + [t2.ld, t2.segmentation, t2.heatmap, t2.world, t2.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); + const poseScore = (await t2.poseflag.data())[0]; + const points = await t2.ld.data(); + const distances = await t2.world.data(); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + const keypointsRelative = []; + const depth = 5; + for (let i = 0; i < points.length / depth; i++) { + const score = sigmoid2(points[depth * i + 3]); + const presence = sigmoid2(points[depth * i + 4]); + const adjScore = Math.trunc(100 * score * presence * poseScore) / 100; + const positionRaw = [points[depth * i + 0] / inputSize2, points[depth * i + 1] / inputSize2, points[depth * i + 2] + 0]; + const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]]; + const distance2 = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0]; + keypointsRelative.push({ part: kpt[i], positionRaw, position, distance: distance2, score: adjScore }); + } + if (poseScore < (config3.body.minConfidence || 0)) + return null; + fixKeypoints(keypointsRelative); + const keypoints = rescaleKeypoints(keypointsRelative, outputSize2); + const kpts = keypoints.map((k) => k.position); + const boxes = calc(kpts, [outputSize2[0], outputSize2[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations: annotations2 }; + return body4; +} +async function predict(input, config3) { + var _a, _b, _c; + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime; + const skipFrame = skipped < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && cache !== null) { + skipped++; + } else { + let boxes = []; + if ((_b = (_a = config3.body) == null ? void 0 : _a["detector"]) == null ? void 0 : _b["enabled"]) { + const preparedImage = prepareImage(input, 224); + boxes = await detectBoxes(preparedImage, config3, outputSize2); + tfjs_esm_exports.dispose(preparedImage); + } else { + boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; + } + for (let i = 0; i < boxes.length; i++) { + const preparedBox = prepareImage(input, 256, (_c = boxes[i]) == null ? void 0 : _c.boxRaw); + cache.length = 0; + const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); + tfjs_esm_exports.dispose(preparedBox); + if (!bodyResult) + continue; + bodyResult.id = i; + cache.push(bodyResult); + } + lastTime = now(); + skipped = 0; + } + return cache; +} + +// src/object/labels.ts +var labels2 = [ + { class: 1, label: "person" }, + { class: 2, label: "bicycle" }, + { class: 3, label: "car" }, + { class: 4, label: "motorcycle" }, + { class: 5, label: "airplane" }, + { class: 6, label: "bus" }, + { class: 7, label: "train" }, + { class: 8, label: "truck" }, + { class: 9, label: "boat" }, + { class: 10, label: "traffic light" }, + { class: 11, label: "fire hydrant" }, + { class: 12, label: "stop sign" }, + { class: 13, label: "parking meter" }, + { class: 14, label: "bench" }, + { class: 15, label: "bird" }, + { class: 16, label: "cat" }, + { class: 17, label: "dog" }, + { class: 18, label: "horse" }, + { class: 19, label: "sheep" }, + { class: 20, label: "cow" }, + { class: 21, label: "elephant" }, + { class: 22, label: "bear" }, + { class: 23, label: "zebra" }, + { class: 24, label: "giraffe" }, + { class: 25, label: "backpack" }, + { class: 26, label: "umbrella" }, + { class: 27, label: "handbag" }, + { class: 28, label: "tie" }, + { class: 29, label: "suitcase" }, + { class: 30, label: "frisbee" }, + { class: 31, label: "skis" }, + { class: 32, label: "snowboard" }, + { class: 33, label: "sports ball" }, + { class: 34, label: "kite" }, + { class: 35, label: "baseball bat" }, + { class: 36, label: "baseball glove" }, + { class: 37, label: "skateboard" }, + { class: 38, label: "surfboard" }, + { class: 39, label: "tennis racket" }, + { class: 40, label: "bottle" }, + { class: 41, label: "wine glass" }, + { class: 42, label: "cup" }, + { class: 43, label: "fork" }, + { class: 44, label: "knife" }, + { class: 45, label: "spoon" }, + { class: 46, label: "bowl" }, + { class: 47, label: "banana" }, + { class: 48, label: "apple" }, + { class: 49, label: "sandwich" }, + { class: 50, label: "orange" }, + { class: 51, label: "broccoli" }, + { class: 52, label: "carrot" }, + { class: 53, label: "hot dog" }, + { class: 54, label: "pizza" }, + { class: 55, label: "donut" }, + { class: 56, label: "cake" }, + { class: 57, label: "chair" }, + { class: 58, label: "couch" }, + { class: 59, label: "potted plant" }, + { class: 60, label: "bed" }, + { class: 61, label: "dining table" }, + { class: 62, label: "toilet" }, + { class: 63, label: "tv" }, + { class: 64, label: "laptop" }, + { class: 65, label: "mouse" }, + { class: 66, label: "remote" }, + { class: 67, label: "keyboard" }, + { class: 68, label: "cell phone" }, + { class: 69, label: "microwave" }, + { class: 70, label: "oven" }, + { class: 71, label: "toaster" }, + { class: 72, label: "sink" }, + { class: 73, label: "refrigerator" }, + { class: 74, label: "book" }, + { class: 75, label: "clock" }, + { class: 76, label: "vase" }, + { class: 77, label: "scissors" }, + { class: 78, label: "teddy bear" }, + { class: 79, label: "hair drier" }, + { class: 80, label: "toothbrush" } +]; + +// src/object/centernet.ts +var model3; +var inputSize3 = 0; +var last2 = []; +var lastTime2 = 0; +var skipped2 = Number.MAX_SAFE_INTEGER; +async function load(config3) { + if (env.initial) + model3 = null; + if (!model3) { + model3 = await loadModel(config3.object.modelPath); + const inputs = (model3 == null ? void 0 : model3["executor"]) ? Object.values(model3.modelSignature["inputs"]) : void 0; + inputSize3 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", model3["modelUrl"]); + return model3; +} +async function process3(res, outputShape, config3) { + if (!res) + return []; + const t2 = {}; + const results = []; + const detections = await res.array(); + t2.squeeze = tfjs_esm_exports.squeeze(res); + const arr = tfjs_esm_exports.split(t2.squeeze, 6, 1); + t2.stack = tfjs_esm_exports.stack([arr[1], arr[0], arr[3], arr[2]], 1); + t2.boxes = tfjs_esm_exports.squeeze(t2.stack); + t2.scores = tfjs_esm_exports.squeeze(arr[4]); + t2.classes = tfjs_esm_exports.squeeze(arr[5]); + tfjs_esm_exports.dispose([res, ...arr]); + t2.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + const nms = await t2.nms.data(); + let i = 0; + for (const id of Array.from(nms)) { + const score = Math.trunc(100 * detections[0][id][4]) / 100; + const classVal = detections[0][id][5]; + if (Number.isNaN(classVal)) + continue; + const label = labels2[classVal].label; + const [x, y] = [ + detections[0][id][0] / inputSize3, + detections[0][id][1] / inputSize3 + ]; + const boxRaw = [ + x, + y, + detections[0][id][2] / inputSize3 - x, + detections[0][id][3] / inputSize3 - y + ]; + const box = [ + Math.trunc(boxRaw[0] * outputShape[0]), + Math.trunc(boxRaw[1] * outputShape[1]), + Math.trunc(boxRaw[2] * outputShape[0]), + Math.trunc(boxRaw[3] * outputShape[1]) + ]; + results.push({ id: i++, score, class: classVal, label, box, boxRaw }); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return results; +} +async function predict2(input, config3) { + if (!(model3 == null ? void 0 : model3["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime2; + const skipFrame = skipped2 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last2.length > 0) { + skipped2++; + return last2; + } + skipped2 = 0; + return new Promise(async (resolve) => { + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const resize = tfjs_esm_exports.image.resizeBilinear(input, [inputSize3, inputSize3]); + const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; + lastTime2 = now(); + tfjs_esm_exports.dispose(resize); + const obj = await process3(objectT, outputSize2, config3); + last2 = obj; + resolve(obj); + }); +} + +// src/body/efficientposecoords.ts +var efficientposecoords_exports = {}; +__export(efficientposecoords_exports, { + connected: () => connected2, + kpt: () => kpt2 +}); +var kpt2 = [ + "head", + "neck", + "rightShoulder", + "rightElbow", + "rightWrist", + "chest", + "leftShoulder", + "leftElbow", + "leftWrist", + "bodyCenter", + "rightHip", + "rightKnee", + "rightAnkle", + "leftHip", + "leftKnee", + "leftAnkle" +]; +var connected2 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/body/efficientpose.ts +var model4; +var lastTime3 = 0; +var cache2 = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} }; +var skipped3 = Number.MAX_SAFE_INTEGER; +async function load2(config3) { + if (env.initial) + model4 = null; + if (!model4) + model4 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model4["modelUrl"]); + return model4; +} +async function max2d(inputs, minScore) { + const [width, height] = inputs.shape; + const reshaped = tfjs_esm_exports.reshape(inputs, [height * width]); + const max5 = tfjs_esm_exports.max(reshaped, 0); + const newScore = (await max5.data())[0]; + if (newScore > minScore) { + const coordinates = tfjs_esm_exports.argMax(reshaped, 0); + const mod3 = tfjs_esm_exports.mod(coordinates, width); + const x = (await mod3.data())[0]; + const div15 = tfjs_esm_exports.div(coordinates, width); + const y = (await div15.data())[0]; + tfjs_esm_exports.dispose([reshaped, max5, coordinates, mod3, div15]); + return [x, y, newScore]; + } + tfjs_esm_exports.dispose([reshaped, max5]); + return [0, 0, newScore]; +} +async function predict3(image28, config3) { + if (!(model4 == null ? void 0 : model4["executor"]) || !(model4 == null ? void 0 : model4.inputs[0].shape)) + return []; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime3; + const skipFrame = skipped3 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && Object.keys(cache2.keypoints).length > 0) { + skipped3++; + return [cache2]; + } + skipped3 = 0; + return new Promise(async (resolve) => { + const tensor6 = tfjs_esm_exports.tidy(() => { + var _a, _b; + const resize = tfjs_esm_exports.image.resizeBilinear(image28, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); + const enhance2 = tfjs_esm_exports.mul(resize, constants.tf2); + const norm = tfjs_esm_exports.sub(enhance2, constants.tf1); + return norm; + }); + let resT; + if (config3.body.enabled) + resT = model4 == null ? void 0 : model4.execute(tensor6); + lastTime3 = now(); + tfjs_esm_exports.dispose(tensor6); + if (resT) { + cache2.keypoints.length = 0; + const squeeze14 = tfjs_esm_exports.squeeze(resT); + tfjs_esm_exports.dispose(resT); + const stack5 = tfjs_esm_exports.unstack(squeeze14, 2); + tfjs_esm_exports.dispose(squeeze14); + for (let id = 0; id < stack5.length; id++) { + const [x2, y2, partScore] = await max2d(stack5[id], config3.body.minConfidence); + if (partScore > (config3.body.minConfidence || 0)) { + cache2.keypoints.push({ + score: Math.round(100 * partScore) / 100, + part: kpt2[id], + positionRaw: [ + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + Math.round(image28.shape[2] * x2 / model4.inputs[0].shape[2]), + Math.round(image28.shape[1] * y2 / model4.inputs[0].shape[1]) + ] + }); + } + } + stack5.forEach((s) => tfjs_esm_exports.dispose(s)); + } + cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const x = cache2.keypoints.map((a) => a.position[0]); + const y = cache2.keypoints.map((a) => a.position[1]); + cache2.box = [ + Math.min(...x), + Math.min(...y), + Math.max(...x) - Math.min(...x), + Math.max(...y) - Math.min(...y) + ]; + const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); + const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); + cache2.boxRaw = [ + Math.min(...xRaw), + Math.min(...yRaw), + Math.max(...xRaw) - Math.min(...xRaw), + Math.max(...yRaw) - Math.min(...yRaw) + ]; + for (const [name, indexes] of Object.entries(connected2)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + cache2.annotations[name] = pt; + } + resolve([cache2]); + }); +} + +// src/face/facemeshutil.ts +var getBoxSize = (box) => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])]; +var getBoxCenter = (box) => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1]; +var clampBox = (box, input) => box ? [ + Math.trunc(Math.max(0, box.startPoint[0])), + Math.trunc(Math.max(0, box.startPoint[1])), + Math.trunc(Math.min(input.shape[2] || 0, box.endPoint[0]) - Math.max(0, box.startPoint[0])), + Math.trunc(Math.min(input.shape[1] || 0, box.endPoint[1]) - Math.max(0, box.startPoint[1])) +] : [0, 0, 0, 0]; +var getRawBox = (box, input) => box ? [ + box.startPoint[0] / (input.shape[2] || 0), + box.startPoint[1] / (input.shape[1] || 0), + (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0), + (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0) +] : [0, 0, 0, 0]; +var scaleBoxCoordinates = (box, factor) => { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence }; +}; +var cutAndResize = (box, image28, cropSize) => { + const h = image28.shape[1]; + const w = image28.shape[2]; + const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; + const crop = tfjs_esm_exports.image.cropAndResize(image28, [cutBox], [0], cropSize); + const norm = tfjs_esm_exports.div(crop, constants.tf255); + tfjs_esm_exports.dispose(crop); + return norm; +}; +var enlargeBox = (box, factor) => { + const center = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]], endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]], landmarks: box.landmarks, confidence: box.confidence }; +}; +var squarifyBox = (box) => { + const centers = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = Math.max(...size2) / 2; + return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)], endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)], landmarks: box.landmarks, confidence: box.confidence }; +}; +var calculateLandmarksBoundingBox = (landmarks) => { + const x = landmarks.map((d) => d[0]); + const y = landmarks.map((d) => d[1]); + return { startPoint: [Math.min(...x), Math.min(...y)], endPoint: [Math.max(...x), Math.max(...y)], landmarks }; +}; +var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; +var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); +var buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +var dot = (v1, v2) => { + let product = 0; + for (let i = 0; i < v1.length; i++) + product += v1[i] * v2[i]; + return product; +}; +var getColumnFrom2DArr = (arr, columnIndex) => { + const column = []; + for (let i = 0; i < arr.length; i++) + column.push(arr[i][columnIndex]); + return column; +}; +var multiplyTransformMatrices = (mat1, mat2) => { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) + product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col))); + } + return product; +}; +var buildRotationMatrix = (rotation, center) => { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]); + return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix); +}; +var invertTransformMatrix = (matrix) => { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)]; + return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]]; +}; +var rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])]; +function generateAnchors(inputSize10) { + const spec = inputSize10 === 192 ? { strides: [4], anchors: [1] } : { strides: [inputSize10 / 16, inputSize10 / 8], anchors: [2, 6] }; + const anchors3 = []; + for (let i = 0; i < spec.strides.length; i++) { + const stride = spec.strides[i]; + const gridRows = Math.floor((inputSize10 + stride - 1) / stride); + const gridCols = Math.floor((inputSize10 + stride - 1) / stride); + const anchorsNum = spec.anchors[i]; + for (let gridY = 0; gridY < gridRows; gridY++) { + const anchorY = stride * (gridY + 0.5); + for (let gridX = 0; gridX < gridCols; gridX++) { + const anchorX = stride * (gridX + 0.5); + for (let n = 0; n < anchorsNum; n++) + anchors3.push([anchorX, anchorY]); + } + } + } + return anchors3; +} +function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize10) { + const boxSize = getBoxSize(box); + const coordsScaled = coordsRaw.map((coord) => [ + boxSize[0] / inputSize10 * (coord[0] - inputSize10 / 2), + boxSize[1] / inputSize10 * (coord[1] - inputSize10 / 2), + coord[2] || 0 + ]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix; + const coordsRotated = largeAngle ? coordsScaled.map((coord) => [...rotatePoint(coord, coordsRotationMatrix), coord[2]]) : coordsScaled; + const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix; + const boxCenter = getBoxCenter(box); + const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + offsets[0]), + Math.trunc(coord[1] + offsets[1]), + Math.trunc(coord[2] || 0) + ]); +} +function correctFaceRotation(rotate, box, input, inputSize10) { + const symmetryLine = box.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; + let angle = 0; + let rotationMatrix = fixedRotationMatrix; + let face4; + if (rotate && env.kernels.includes("rotatewithoffset")) { + angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + if (largeAngle) { + const center = getBoxCenter(box); + const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; + const rotated = tfjs_esm_exports.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + rotationMatrix = buildRotationMatrix(-angle, center); + face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); + tfjs_esm_exports.dispose(rotated); + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + return [angle, rotationMatrix, face4]; +} +var findFaceCenter = (mesh) => { + const x = mesh.map((m) => m[0]); + const y = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2]; +}; +var calculateFaceBox = (mesh, previousBox) => { + const center = findFaceCenter(mesh); + const boxSize = getBoxSize(previousBox); + const calculatedBox = { + startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2], + endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] + }; + return calculatedBox; +}; + +// src/face/blazeface.ts +var keypointsCount = 6; +var faceBoxScaleFactor = 1.4; +var model5; +var anchors = null; +var inputSize4 = 0; +var inputSizeT = null; +var size = () => inputSize4; +async function load3(config3) { + var _a; + if (env.initial) + model5 = null; + if (!model5) + model5 = await loadModel((_a = config3.face.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model5["modelUrl"]); + inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; + inputSizeT = tfjs_esm_exports.scalar(inputSize4, "int32"); + anchors = tfjs_esm_exports.tensor2d(generateAnchors(inputSize4)); + return model5; +} +function decodeBoxes2(boxOutputs) { + if (!anchors || !inputSizeT) + return tfjs_esm_exports.zeros([0, 0]); + const t2 = {}; + t2.boxStarts = tfjs_esm_exports.slice(boxOutputs, [0, 1], [-1, 2]); + t2.centers = tfjs_esm_exports.add(t2.boxStarts, anchors); + t2.boxSizes = tfjs_esm_exports.slice(boxOutputs, [0, 3], [-1, 2]); + t2.boxSizesNormalized = tfjs_esm_exports.div(t2.boxSizes, inputSizeT); + t2.centersNormalized = tfjs_esm_exports.div(t2.centers, inputSizeT); + t2.halfBoxSize = tfjs_esm_exports.div(t2.boxSizesNormalized, constants.tf2); + t2.starts = tfjs_esm_exports.sub(t2.centersNormalized, t2.halfBoxSize); + t2.ends = tfjs_esm_exports.add(t2.centersNormalized, t2.halfBoxSize); + t2.startNormalized = tfjs_esm_exports.mul(t2.starts, inputSizeT); + t2.endNormalized = tfjs_esm_exports.mul(t2.ends, inputSizeT); + const boxes = tfjs_esm_exports.concat2d([t2.startNormalized, t2.endNormalized], 1); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return boxes; +} +async function getBoxes(inputImage, config3) { + var _a, _b, _c, _d; + if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) + return []; + const t2 = {}; + t2.resized = tfjs_esm_exports.image.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t2.div = tfjs_esm_exports.div(t2.resized, constants.tf127); + t2.normalized = tfjs_esm_exports.sub(t2.div, constants.tf05); + const res = model5 == null ? void 0 : model5.execute(t2.normalized); + if (Array.isArray(res) && res.length > 2) { + const sorted = res.sort((a, b) => a.size - b.size); + t2.concat384 = tfjs_esm_exports.concat([sorted[0], sorted[2]], 2); + t2.concat512 = tfjs_esm_exports.concat([sorted[1], sorted[3]], 2); + t2.concat = tfjs_esm_exports.concat([t2.concat512, t2.concat384], 1); + t2.batch = tfjs_esm_exports.squeeze(t2.concat, [0]); + } else if (Array.isArray(res)) { + t2.batch = tfjs_esm_exports.squeeze(res[0]); + } else { + t2.batch = tfjs_esm_exports.squeeze(res); + } + tfjs_esm_exports.dispose(res); + t2.boxes = decodeBoxes2(t2.batch); + t2.logits = tfjs_esm_exports.slice(t2.batch, [0, 0], [-1, 1]); + t2.sigmoid = tfjs_esm_exports.sigmoid(t2.logits); + t2.scores = tfjs_esm_exports.squeeze(t2.sigmoid); + t2.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c = config3.face.detector) == null ? void 0 : _c.minConfidence) || 0); + const nms = await t2.nms.array(); + const boxes = []; + const scores = await t2.scores.data(); + for (let i = 0; i < nms.length; i++) { + const confidence = scores[nms[i]]; + if (confidence > (((_d = config3.face.detector) == null ? void 0 : _d.minConfidence) || 0)) { + const b = {}; + b.bbox = tfjs_esm_exports.slice(t2.boxes, [nms[i], 0], [1, -1]); + b.slice = tfjs_esm_exports.slice(t2.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = tfjs_esm_exports.squeeze(b.slice); + b.landmarks = tfjs_esm_exports.reshape(b.squeeze, [keypointsCount, -1]); + const points = await b.bbox.data(); + const rawBox = { + startPoint: [points[0], points[1]], + endPoint: [points[2], points[3]], + landmarks: await b.landmarks.array(), + confidence + }; + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4]); + const enlargedBox = enlargeBox(scaledBox, config3.face["scale"] || faceBoxScaleFactor); + const squaredBox = squarifyBox(enlargedBox); + boxes.push(squaredBox); + Object.keys(b).forEach((tensor6) => tfjs_esm_exports.dispose(b[tensor6])); + } + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return boxes; +} + +// src/face/iris.ts +var model6; +var inputSize5 = 0; +var irisEnlarge = 2.3; +var leftOutline = meshAnnotations.leftEyeLower0; +var rightOutline = meshAnnotations.rightEyeLower0; +var eyeLandmarks = { + leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]], + rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]] +}; +var irisLandmarks = { + upperCenter: 3, + lowerCenter: 4, + index: 71, + numCoordinates: 76 +}; +async function load4(config3) { + var _a, _b; + if (env.initial) + model6 = null; + if (!model6) + model6 = await loadModel((_a = config3.face.iris) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model6["modelUrl"]); + inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; + if (inputSize5 === -1) + inputSize5 = 64; + return model6; +} +function replaceIrisCoords(rawCoords, newCoords, prefix, keys) { + for (let i = 0; i < irisIndices.length; i++) { + const { key, indices } = irisIndices[i]; + const originalIndices = meshAnnotations[`${prefix}${key}`]; + if (!keys || keys.includes(key)) { + for (let j = 0; j < indices.length; j++) { + const index2 = indices[j]; + rawCoords[originalIndices[j]] = [ + newCoords[index2][0], + newCoords[index2][1], + (newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2 + ]; + } + } + } +} +var getLeftToRightEyeDepthDifference = (rawCoords) => { + const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2]; + const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2]; + return leftEyeZ - rightEyeZ; +}; +var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); + const boxSize = getBoxSize(box); + let crop = tfjs_esm_exports.image.cropAndResize(face4, [[ + box.startPoint[1] / meshSize, + box.startPoint[0] / meshSize, + box.endPoint[1] / meshSize, + box.endPoint[0] / meshSize + ]], [0], [inputSize5, inputSize5]); + if (flip && env.kernels.includes("flipleftright")) { + const flipped = tfjs_esm_exports.image.flipLeftRight(crop); + tfjs_esm_exports.dispose(crop); + crop = flipped; + } + return { box, boxSize, crop }; +}; +var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { + const eyeRawCoords = []; + for (let i = 0; i < irisLandmarks.numCoordinates; i++) { + const x = eyeData[i * 3]; + const y = eyeData[i * 3 + 1]; + const z = eyeData[i * 3 + 2]; + eyeRawCoords.push([ + (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], + y / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + z + ]); + } + return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) }; +}; +var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { + const upperCenterZ = rawCoords[meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2]; + const lowerCenterZ = rawCoords[meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2]; + const averageZ = (upperCenterZ + lowerCenterZ) / 2; + return irisCoords.map((coord, i) => { + let z = averageZ; + if (i === 2) { + z = upperCenterZ; + } else if (i === 4) { + z = lowerCenterZ; + } + return [coord[0], coord[1], z]; + }); +}; +async function augmentIris(rawCoords, face4, meshSize) { + if (!(model6 == null ? void 0 : model6["executor"])) + return rawCoords; + const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); + const combined = tfjs_esm_exports.concat([leftEyeCrop, rightEyeCrop]); + tfjs_esm_exports.dispose(leftEyeCrop); + tfjs_esm_exports.dispose(rightEyeCrop); + const eyePredictions = model6.execute(combined); + tfjs_esm_exports.dispose(combined); + const eyePredictionsData = await eyePredictions.data(); + tfjs_esm_exports.dispose(eyePredictions); + const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); + const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); + const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); + const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false); + const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords); + if (Math.abs(leftToRightEyeDepthDifference) < 30) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", null); + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", null); + } else if (leftToRightEyeDepthDifference < 1) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", ["EyeUpper0", "EyeLower0"]); + } else { + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", ["EyeUpper0", "EyeLower0"]); + } + const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, "left"); + const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, "right"); + const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords); + return newCoords; +} + +// src/face/attention.ts +async function augment(rawCoords, results) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + const t2 = { + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + }; + for (const val of Object.values(t2)) { + if (!val) + return rawCoords; + } + const irisLDepth = LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisL.length / 2; i++) + rawCoords.push([t2.irisL[2 * i + 0], t2.irisL[2 * i + 1], irisLDepth]); + const irisRDepth = LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisR.length / 2; i++) + rawCoords.push([t2.irisR[2 * i + 0], t2.irisR[2 * i + 1], irisRDepth]); + for (let i = 0; i < t2.eyeL.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t2.eyeL[2 * i + 0], t2.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.eyeR.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t2.eyeR[2 * i + 0], t2.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.lips.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t2.lips[2 * i + 0], t2.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; + return rawCoords; +} + +// src/face/facemesh.ts +var cache3 = { + boxes: [], + skipped: Number.MAX_SAFE_INTEGER, + timestamp: 0 +}; +var model7 = null; +var inputSize6 = 0; +async function predict4(input, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + if (!(model7 == null ? void 0 : model7["executor"])) + return []; + const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - cache3.timestamp; + const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); + if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { + cache3.boxes = await getBoxes(input, config3); + cache3.timestamp = now(); + cache3.skipped = 0; + } else { + cache3.skipped++; + } + const faces = []; + const newCache = []; + let id = 0; + const size2 = inputSize6; + for (let i = 0; i < cache3.boxes.length; i++) { + const box = cache3.boxes[i]; + let angle = 0; + let rotationMatrix; + const face4 = { + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + annotations: {} + }; + [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c = config3.face.detector) == null ? void 0 : _c.rotation, box, input, ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) ? inputSize6 : size()); + if (config3.filter.equalization) { + const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; + tfjs_esm_exports.dispose(face4.tensor); + if (equilized) + face4.tensor = equilized; + } + face4.boxScore = Math.round(100 * box.confidence) / 100; + if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } else if (!model7) { + if (config3.debug) + log("face mesh detection requested, but model is not loaded"); + } else { + if (((_f = config3.face.attention) == null ? void 0 : _f.enabled) && !env.kernels.includes("atan2")) { + config3.face.attention.enabled = false; + tfjs_esm_exports.dispose(face4.tensor); + return faces; + } + const results = model7.execute(face4.tensor); + const confidenceT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1); + const faceConfidence = await confidenceT.data(); + face4.faceScore = Math.round(100 * faceConfidence[0]) / 100; + if (face4.faceScore < (((_g = config3.face.detector) == null ? void 0 : _g.minConfidence) || 1)) { + box.confidence = face4.faceScore; + if (config3.face.mesh.keepInvalid) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } + } else { + const meshT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1404); + const coordsReshaped = tfjs_esm_exports.reshape(meshT, [-1, 3]); + let rawCoords = await coordsReshaped.array(); + tfjs_esm_exports.dispose(coordsReshaped); + if ((_h = config3.face.attention) == null ? void 0 : _h.enabled) { + rawCoords = await augment(rawCoords, results); + } else if ((_i = config3.face.iris) == null ? void 0 : _i.enabled) { + rawCoords = await augmentIris(rawCoords, face4.tensor, inputSize6); + } + face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(meshAnnotations)) + face4.annotations[key] = meshAnnotations[key].map((index2) => face4.mesh[index2]); + face4.score = face4.faceScore; + const calculatedBox = { ...calculateFaceBox(face4.mesh, box), confidence: box.confidence, landmarks: box.landmarks }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + newCache.push(calculatedBox); + } + tfjs_esm_exports.dispose(results); + } + if (face4.score > (((_j = config3.face.detector) == null ? void 0 : _j.minConfidence) || 1)) + faces.push(face4); + else + tfjs_esm_exports.dispose(face4.tensor); + } + cache3.boxes = newCache; + return faces; +} +async function load5(config3) { + var _a, _b, _c, _d, _e, _f; + if (env.initial) + model7 = null; + if (((_a = config3.face.attention) == null ? void 0 : _a.enabled) && (model7 == null ? void 0 : model7["signature"])) { + if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) + model7 = null; + } + if (!model7) { + if ((_c = config3.face.attention) == null ? void 0 : _c.enabled) + model7 = await loadModel(config3.face.attention.modelPath); + else + model7 = await loadModel((_d = config3.face.mesh) == null ? void 0 : _d.modelPath); + } else if (config3.debug) { + log("cached model:", model7["modelUrl"]); + } + inputSize6 = model7["executor"] && ((_e = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _e[0].shape) ? (_f = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _f[0].shape[2] : 256; + return model7; +} +var triangulation = TRI468; +var uvmap = UV468; + +// src/gear/emotion.ts +var annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +async function load6(config3) { + var _a; + if (env.initial) + model8 = null; + if (!model8) + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model8["modelUrl"]); + return model8; +} +async function predict5(image28, config3, idx, count2) { + var _a, _b; + if (!model8) + return []; + const skipFrame = skipped4 < (((_a = config3.face.emotion) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; + if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { + skipped4++; + return last3[idx]; + } + skipped4 = 0; + return new Promise(async (resolve) => { + var _a2; + const obj = []; + if ((_a2 = config3.face.emotion) == null ? void 0 : _a2.enabled) { + const t2 = {}; + const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; + t2.resize = tfjs_esm_exports.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + t2.channels = tfjs_esm_exports.mul(t2.resize, constants.rgb); + t2.grayscale = tfjs_esm_exports.sum(t2.channels, 3, true); + t2.grayscaleSub = tfjs_esm_exports.sub(t2.grayscale, constants.tf05); + t2.grayscaleMul = tfjs_esm_exports.mul(t2.grayscaleSub, constants.tf2); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.grayscaleMul); + lastTime4 = now(); + const data = await t2.emotion.data(); + for (let i = 0; i < data.length; i++) { + if (data[i] > (config3.face.emotion.minConfidence || 0)) + obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); + } + obj.sort((a, b) => b.score - a.score); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + } + last3[idx] = obj; + lastCount = count2; + resolve(obj); + }); +} + +// src/face/faceres.ts +var model9; +var last4 = []; +var lastTime5 = 0; +var lastCount2 = 0; +var skipped5 = Number.MAX_SAFE_INTEGER; +async function load7(config3) { + var _a; + if (env.initial) + model9 = null; + if (!model9) + model9 = await loadModel((_a = config3.face.description) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model9["modelUrl"]); + return model9; +} +function enhance(input) { + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) + return tensor6; + const crop = tfjs_esm_exports.image.resizeBilinear(tensor6, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + const norm = tfjs_esm_exports.mul(crop, constants.tf255); + tfjs_esm_exports.dispose(crop); + return norm; +} +async function predict6(image28, config3, idx, count2) { + var _a, _b, _c, _d; + const obj = { + age: 0, + gender: "unknown", + genderScore: 0, + descriptor: [] + }; + if (!(model9 == null ? void 0 : model9["executor"])) + return obj; + const skipFrame = skipped5 < (((_a = config3.face.description) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; + if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c.age) > 0 && ((_d = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped5++; + return last4[idx]; + } + skipped5 = 0; + return new Promise(async (resolve) => { + var _a2; + if ((_a2 = config3.face.description) == null ? void 0 : _a2.enabled) { + const enhanced = enhance(image28); + const resT = model9 == null ? void 0 : model9.execute(enhanced); + lastTime5 = now(); + tfjs_esm_exports.dispose(enhanced); + const genderT = resT.find((t2) => t2.shape[1] === 1); + const gender2 = await genderT.data(); + const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; + if (confidence > (config3.face.description.minConfidence || 0)) { + obj.gender = gender2[0] <= 0.5 ? "female" : "male"; + obj.genderScore = Math.min(0.99, confidence); + } + const argmax = tfjs_esm_exports.argMax(resT.find((t2) => t2.shape[1] === 100), 1); + const ageIdx = (await argmax.data())[0]; + tfjs_esm_exports.dispose(argmax); + const ageT = resT.find((t2) => t2.shape[1] === 100); + const all2 = await ageT.data(); + obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; + if (Number.isNaN(gender2[0]) || Number.isNaN(all2[0])) + log("faceres error:", { model: model9, result: resT }); + const desc = resT.find((t2) => t2.shape[1] === 1024); + const descriptor = desc ? await desc.data() : []; + obj.descriptor = Array.from(descriptor); + resT.forEach((t2) => tfjs_esm_exports.dispose(t2)); + } + last4[idx] = obj; + lastCount2 = count2; + resolve(obj); + }); +} + +// src/face/mask.ts +var expandFact = 0.1; +var alpha = 0.5; +function insidePoly(x, y, polygon) { + let inside = false; + let j = polygon.length - 1; + for (let i = 0; i < polygon.length; j = i++) { + if (polygon[i].y > y !== polygon[j].y > y && x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + inside = !inside; + } + return inside; +} +async function mask(face4) { + if (!face4.tensor) + return face4.tensor; + if (!face4.mesh || face4.mesh.length < 100) + return face4.tensor; + const width = face4.tensor.shape[2] || 0; + const height = face4.tensor.shape[1] || 0; + const buffer = await face4.tensor.buffer(); + let silhouette = []; + for (const pt of meshAnnotations.silhouette) + silhouette.push({ x: (face4.mesh[pt][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt][1] - face4.box[1]) / face4.box[3] }); + if (expandFact && expandFact > 0) + silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const inside = insidePoly(x / width, y / width, silhouette); + if (!inside) { + buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0); + buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1); + buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2); + } + } + } + const output = buffer.toTensor(); + return output; +} + +// src/face/antispoof.ts +var model10; +var cached = []; +var skipped6 = Number.MAX_SAFE_INTEGER; +var lastCount3 = 0; +var lastTime6 = 0; +async function load8(config3) { + var _a; + if (env.initial) + model10 = null; + if (!model10) + model10 = await loadModel((_a = config3.face.antispoof) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model10["modelUrl"]); + return model10; +} +async function predict7(image28, config3, idx, count2) { + var _a, _b; + if (!(model10 == null ? void 0 : model10["executor"])) + return 0; + const skipTime = (((_a = config3.face.antispoof) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6; + const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { + skipped6++; + return cached[idx]; + } + skipped6 = 0; + return new Promise(async (resolve) => { + const resize = tfjs_esm_exports.image.resizeBilinear(image28, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const res = model10 == null ? void 0 : model10.execute(resize); + const num = (await res.data())[0]; + cached[idx] = Math.round(100 * num) / 100; + lastCount3 = count2; + lastTime6 = now(); + tfjs_esm_exports.dispose([resize, res]); + resolve(cached[idx]); + }); +} + +// src/face/liveness.ts +var model11; +var cached2 = []; +var skipped7 = Number.MAX_SAFE_INTEGER; +var lastCount4 = 0; +var lastTime7 = 0; +async function load9(config3) { + var _a; + if (env.initial) + model11 = null; + if (!model11) + model11 = await loadModel((_a = config3.face.liveness) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model11["modelUrl"]); + return model11; +} +async function predict8(image28, config3, idx, count2) { + var _a, _b; + if (!(model11 == null ? void 0 : model11["executor"])) + return 0; + const skipTime = (((_a = config3.face.liveness) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime7; + const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { + skipped7++; + return cached2[idx]; + } + skipped7 = 0; + return new Promise(async (resolve) => { + const resize = tfjs_esm_exports.image.resizeBilinear(image28, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const res = model11 == null ? void 0 : model11.execute(resize); + const num = (await res.data())[0]; + cached2[idx] = Math.round(100 * num) / 100; + lastCount4 = count2; + lastTime7 = now(); + tfjs_esm_exports.dispose([resize, res]); + resolve(cached2[idx]); + }); +} + +// src/gear/gear.ts +var model12; +var last5 = []; +var raceNames = ["white", "black", "asian", "indian", "other"]; +var ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65]; +var lastCount5 = 0; +var lastTime8 = 0; +var skipped8 = Number.MAX_SAFE_INTEGER; +async function load10(config3) { + var _a; + if (env.initial) + model12 = null; + if (!model12) + model12 = await loadModel((_a = config3.face.gear) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model12["modelUrl"]); + return model12; +} +async function predict9(image28, config3, idx, count2) { + var _a, _b; + if (!model12) + return { age: 0, gender: "unknown", genderScore: 0, race: [] }; + const skipFrame = skipped8 < (((_a = config3.face.gear) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; + if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { + skipped8++; + return last5[idx]; + } + skipped8 = 0; + return new Promise(async (resolve) => { + var _a2, _b2; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) + return; + const t2 = {}; + const box = [[0, 0.1, 0.9, 0.9]]; + t2.resize = tfjs_esm_exports.image.cropAndResize(image28, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; + if ((_a2 = config3.face.gear) == null ? void 0 : _a2.enabled) + [t2.age, t2.gender, t2.race] = model12.execute(t2.resize, ["age_output", "gender_output", "race_output"]); + const gender2 = await t2.gender.data(); + obj.gender = gender2[0] > gender2[1] ? "male" : "female"; + obj.genderScore = Math.round(100 * (gender2[0] > gender2[1] ? gender2[0] : gender2[1])) / 100; + const race = await t2.race.data(); + for (let i = 0; i < race.length; i++) { + if (race[i] > (((_b2 = config3.face.gear) == null ? void 0 : _b2.minConfidence) || 0.2)) + obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); + } + obj.race.sort((a, b) => b.score - a.score); + const ageDistribution = Array.from(await t2.age.data()); + const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]); + let age2 = ageSorted[0][0]; + for (let i = 1; i < ageSorted.length; i++) + age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); + obj.age = Math.round(10 * age2) / 10; + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + last5[idx] = obj; + lastCount5 = count2; + lastTime8 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-age.ts +var model13; +var last6 = []; +var lastCount6 = 0; +var lastTime9 = 0; +var skipped9 = Number.MAX_SAFE_INTEGER; +async function load11(config3) { + if (env.initial) + model13 = null; + if (!model13) + model13 = await loadModel(config3.face["ssrnet"].modelPathAge); + else if (config3.debug) + log("cached model:", model13["modelUrl"]); + return model13; +} +async function predict10(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model13) + return { age: 0 }; + const skipFrame = skipped9 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; + if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c = last6[idx]) == null ? void 0 : _c.age) && ((_d = last6[idx]) == null ? void 0 : _d.age) > 0) { + skipped9++; + return last6[idx]; + } + skipped9 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) + return; + const t2 = {}; + t2.resize = tfjs_esm_exports.image.resizeBilinear(image28, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t2.enhance = tfjs_esm_exports.mul(t2.resize, constants.tf255); + const obj = { age: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.age = model13.execute(t2.enhance); + if (t2.age) { + const data = await t2.age.data(); + obj.age = Math.trunc(10 * data[0]) / 10; + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + last6[idx] = obj; + lastCount6 = count2; + lastTime9 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-gender.ts +var model14; +var last7 = []; +var lastCount7 = 0; +var lastTime10 = 0; +var skipped10 = Number.MAX_SAFE_INTEGER; +var rgb = [0.2989, 0.587, 0.114]; +async function load12(config3) { + var _a; + if (env.initial) + model14 = null; + if (!model14) + model14 = await loadModel((_a = config3.face["ssrnet"]) == null ? void 0 : _a.modelPathGender); + else if (config3.debug) + log("cached model:", model14["modelUrl"]); + return model14; +} +async function predict11(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model14) + return { gender: "unknown", genderScore: 0 }; + const skipFrame = skipped10 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; + if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c = last7[idx]) == null ? void 0 : _c.gender) && ((_d = last7[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped10++; + return last7[idx]; + } + skipped10 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) + return; + const t2 = {}; + t2.resize = tfjs_esm_exports.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t2.enhance = tfjs_esm_exports.tidy(() => { + const [red, green, blue] = tfjs_esm_exports.split(t2.resize, 3, 3); + const redNorm = tfjs_esm_exports.mul(red, rgb[0]); + const greenNorm = tfjs_esm_exports.mul(green, rgb[1]); + const blueNorm = tfjs_esm_exports.mul(blue, rgb[2]); + const grayscale = tfjs_esm_exports.addN([redNorm, greenNorm, blueNorm]); + const normalize2 = tfjs_esm_exports.mul(tfjs_esm_exports.sub(grayscale, constants.tf05), 2); + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.gender = model14.execute(t2.enhance); + const data = await t2.gender.data(); + obj.gender = data[0] > data[1] ? "female" : "male"; + obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + last7[idx] = obj; + lastCount7 = count2; + lastTime10 = now(); + resolve(obj); + }); +} + +// src/face/mobilefacenet.ts +var model15; +var last8 = []; +var lastCount8 = 0; +var lastTime11 = 0; +var skipped11 = Number.MAX_SAFE_INTEGER; +async function load13(config3) { + var _a; + if (env.initial) + model15 = null; + if (!model15) + model15 = await loadModel((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model15["modelUrl"]); + return model15; +} +async function predict12(input, config3, idx, count2) { + var _a, _b; + if (!(model15 == null ? void 0 : model15["executor"])) + return []; + const skipFrame = skipped11 < (((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; + if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { + skipped11++; + return last8[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { + const t2 = {}; + t2.crop = tfjs_esm_exports.image.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t2.data = model15.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + } + last8[idx] = data; + lastCount8 = count2; + lastTime11 = now(); + resolve(data); + }); +} + +// src/face/insightface.ts +var model16; +var last9 = []; +var lastCount9 = 0; +var lastTime12 = 0; +var skipped12 = Number.MAX_SAFE_INTEGER; +async function load14(config3) { + if (env.initial) + model16 = null; + if (!model16) + model16 = await loadModel(config3.face["insightface"].modelPath); + else if (config3.debug) + log("cached model:", model16["modelUrl"]); + return model16; +} +async function predict13(input, config3, idx, count2) { + var _a, _b; + if (!(model16 == null ? void 0 : model16["executor"])) + return []; + const skipFrame = skipped12 < (((_a = config3.face["insightface"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; + if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { + skipped12++; + return last9[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { + const t2 = {}; + t2.crop = tfjs_esm_exports.image.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t2.data = model16.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + } + last9[idx] = data; + lastCount9 = count2; + lastTime12 = now(); + resolve(data); + }); +} + +// src/face/angles.ts +var calculateGaze = (face4) => { + const radians = (pt1, pt2) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); + if (!face4.annotations.rightEyeIris || !face4.annotations.leftEyeIris) + return { bearing: 0, strength: 0 }; + const offsetIris = [0, -0.1]; + const eyeRatio = 1; + const left = (face4.mesh[33][2] || 0) > (face4.mesh[263][2] || 0); + const irisCenter = left ? face4.mesh[473] : face4.mesh[468]; + const eyeCenter = left ? [(face4.mesh[133][0] + face4.mesh[33][0]) / 2, (face4.mesh[133][1] + face4.mesh[33][1]) / 2] : [(face4.mesh[263][0] + face4.mesh[362][0]) / 2, (face4.mesh[263][1] + face4.mesh[362][1]) / 2]; + const eyeSize = left ? [face4.mesh[133][0] - face4.mesh[33][0], face4.mesh[23][1] - face4.mesh[27][1]] : [face4.mesh[263][0] - face4.mesh[362][0], face4.mesh[253][1] - face4.mesh[257][1]]; + const eyeDiff = [ + (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0], + eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1] + ]; + let strength = Math.sqrt(eyeDiff[0] * eyeDiff[0] + eyeDiff[1] * eyeDiff[1]); + strength = Math.min(strength, face4.boxRaw[2] / 2, face4.boxRaw[3] / 2); + const bearing = (radians([0, 0], eyeDiff) + Math.PI / 2) % Math.PI; + return { bearing, strength }; +}; +var calculateFaceAngle = (face4, imageSize) => { + const normalize2 = (v) => { + const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + v[0] /= length; + v[1] /= length; + v[2] /= length; + return v; + }; + const subVectors = (a, b) => { + const x = a[0] - b[0]; + const y = a[1] - b[1]; + const z = a[2] - b[2]; + return [x, y, z]; + }; + const crossVectors = (a, b) => { + const x = a[1] * b[2] - a[2] * b[1]; + const y = a[2] * b[0] - a[0] * b[2]; + const z = a[0] * b[1] - a[1] * b[0]; + return [x, y, z]; + }; + const rotationMatrixToEulerAngle = (r) => { + const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; + let thetaX; + let thetaY; + let thetaZ; + if (r10 < 1) { + if (r10 > -1) { + thetaZ = Math.asin(r10); + thetaY = Math.atan2(-r20, r00); + thetaX = Math.atan2(-r12, r11); + } else { + thetaZ = -Math.PI / 2; + thetaY = -Math.atan2(r21, r22); + thetaX = 0; + } + } else { + thetaZ = Math.PI / 2; + thetaY = Math.atan2(r21, r22); + thetaX = 0; + } + if (Number.isNaN(thetaX)) + thetaX = 0; + if (Number.isNaN(thetaY)) + thetaY = 0; + if (Number.isNaN(thetaZ)) + thetaZ = 0; + return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ }; + }; + const mesh = face4.meshRaw; + if (!mesh || mesh.length < 300) + return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } }; + const size2 = Math.max(face4.boxRaw[2] * imageSize[0], face4.boxRaw[3] * imageSize[1]) / 1.5; + const pts = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size2, pt[1] * imageSize[1] / size2, pt[2]]); + const yAxis = normalize2(subVectors(pts[1], pts[0])); + let xAxis = normalize2(subVectors(pts[3], pts[2])); + const zAxis = normalize2(crossVectors(xAxis, yAxis)); + xAxis = crossVectors(yAxis, zAxis); + const matrix = [ + xAxis[0], + xAxis[1], + xAxis[2], + yAxis[0], + yAxis[1], + yAxis[2], + zAxis[0], + zAxis[1], + zAxis[2] + ]; + const angle = rotationMatrixToEulerAngle(matrix); + const gaze = mesh.length === 478 ? calculateGaze(face4) : { bearing: 0, strength: 0 }; + return { angle, matrix, gaze }; +}; + +// src/face/anthropometry.ts +function calculateCameraDistance(face4, width) { + const f = face4 == null ? void 0 : face4.annotations; + if (!f) + return 0; + const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width; + const cameraDistance = Math.round(1.17 / irisSize) / 100; + return cameraDistance; +} + +// src/face/face.ts +var detectFace = async (instance, input) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + let timeStamp = now(); + let ageRes; + let gearRes; + let genderRes; + let emotionRes; + let mobilefacenetRes; + let insightfaceRes; + let antispoofRes; + let livenessRes; + let descRes; + const faceRes = []; + instance.state = "run:face"; + const faces = await predict4(input, instance.config); + instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + if (!input.shape || input.shape.length !== 4) + return []; + if (!faces) + return []; + for (let i = 0; i < faces.length; i++) { + instance.analyze("Get Face"); + if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) { + log("Face object is disposed:", faces[i].tensor); + continue; + } + if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { + const masked = await mask(faces[i]); + tfjs_esm_exports.dispose(faces[i].tensor); + if (masked) + faces[i].tensor = masked; + } + const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; + instance.analyze("Start Emotion:"); + if (instance.config.async) { + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : []; + } else { + instance.state = "run:emotion"; + timeStamp = now(); + emotionRes = ((_c = instance.config.face.emotion) == null ? void 0 : _c.enabled) ? await predict5(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : []; + instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Emotion:"); + instance.analyze("Start AntiSpoof:"); + if (instance.config.async) { + antispoofRes = ((_d = instance.config.face.antispoof) == null ? void 0 : _d.enabled) ? predict7(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:antispoof"; + timeStamp = now(); + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End AntiSpoof:"); + instance.analyze("Start Liveness:"); + if (instance.config.async) { + livenessRes = ((_f = instance.config.face.liveness) == null ? void 0 : _f.enabled) ? predict8(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:liveness"; + timeStamp = now(); + livenessRes = ((_g = instance.config.face.liveness) == null ? void 0 : _g.enabled) ? await predict8(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Liveness:"); + instance.analyze("Start GEAR:"); + if (instance.config.async) { + gearRes = ((_h = instance.config.face.gear) == null ? void 0 : _h.enabled) ? predict9(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:gear"; + timeStamp = now(); + gearRes = ((_i = instance.config.face.gear) == null ? void 0 : _i.enabled) ? await predict9(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + instance.performance.gear = Math.trunc(now() - timeStamp); + } + instance.analyze("End GEAR:"); + instance.analyze("Start SSRNet:"); + if (instance.config.async) { + ageRes = ((_j = instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) ? predict10(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_k = instance.config.face["ssrnet"]) == null ? void 0 : _k.enabled) ? predict11(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:ssrnet"; + timeStamp = now(); + ageRes = ((_l = instance.config.face["ssrnet"]) == null ? void 0 : _l.enabled) ? await predict10(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + instance.performance.ssrnet = Math.trunc(now() - timeStamp); + } + instance.analyze("End SSRNet:"); + instance.analyze("Start MobileFaceNet:"); + if (instance.config.async) { + mobilefacenetRes = ((_n = instance.config.face["mobilefacenet"]) == null ? void 0 : _n.enabled) ? predict12(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + mobilefacenetRes = ((_o = instance.config.face["mobilefacenet"]) == null ? void 0 : _o.enabled) ? await predict12(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End MobileFaceNet:"); + instance.analyze("Start InsightFace:"); + if (instance.config.async) { + insightfaceRes = ((_p = instance.config.face["insightface"]) == null ? void 0 : _p.enabled) ? predict13(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + insightfaceRes = ((_q = instance.config.face["insightface"]) == null ? void 0 : _q.enabled) ? await predict13(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End InsightFace:"); + instance.analyze("Start Description:"); + if (instance.config.async) { + descRes = predict6(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length); + } else { + instance.state = "run:description"; + timeStamp = now(); + descRes = await predict6(faces[i].tensor || tfjs_esm_exports.tensor([]), instance.config, i, faces.length); + instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Description:"); + if (instance.config.async) { + [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]); + } + instance.analyze("Finish Face:"); + if (((_r = instance.config.face["ssrnet"]) == null ? void 0 : _r.enabled) && ageRes && genderRes) { + descRes = { + ...descRes, + age: ageRes.age, + gender: genderRes.gender, + genderScore: genderRes.genderScore + }; + } + if (((_s = instance.config.face.gear) == null ? void 0 : _s.enabled) && gearRes) { + descRes = { + ...descRes, + age: gearRes.age, + gender: gearRes.gender, + genderScore: gearRes.genderScore, + race: gearRes.race + }; + } + if (((_t = instance.config.face["mobilefacenet"]) == null ? void 0 : _t.enabled) && mobilefacenetRes) { + descRes.descriptor = mobilefacenetRes; + } + if (((_u = instance.config.face["insightface"]) == null ? void 0 : _u.enabled) && insightfaceRes) { + descRes.descriptor = insightfaceRes; + } + const irisSize = ((_v = instance.config.face.iris) == null ? void 0 : _v.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; + const tensor6 = ((_w = instance.config.face.detector) == null ? void 0 : _w.return) ? tfjs_esm_exports.squeeze(faces[i].tensor) : null; + tfjs_esm_exports.dispose(faces[i].tensor); + if (faces[i].tensor) + delete faces[i].tensor; + const res = { + ...faces[i], + id: i + }; + if (descRes.age) + res.age = descRes.age; + if (descRes.gender) + res.gender = descRes.gender; + if (descRes.genderScore) + res.genderScore = descRes.genderScore; + if (descRes.descriptor) + res.embedding = descRes.descriptor; + if (descRes.race) + res.race = descRes.race; + if (emotionRes) + res.emotion = emotionRes; + if (antispoofRes) + res.real = antispoofRes; + if (livenessRes) + res.live = livenessRes; + if (irisSize > 0) + res.distance = irisSize; + if (rotation) + res.rotation = rotation; + if (tensor6) + res.tensor = tensor6; + faceRes.push(res); + instance.analyze("End Face"); + } + instance.analyze("End FaceMesh:"); + if (instance.config.async) { + if (instance.performance.face) + delete instance.performance.face; + if (instance.performance.age) + delete instance.performance.age; + if (instance.performance.gender) + delete instance.performance.gender; + if (instance.performance.emotion) + delete instance.performance.emotion; + } + return faceRes; +}; + +// src/hand/fingerdef.ts +var Finger = { + thumb: 0, + index: 1, + middle: 2, + ring: 3, + pinky: 4, + all: [0, 1, 2, 3, 4], + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + pointsMapping: { + 0: [[0, 1], [1, 2], [2, 3], [3, 4]], + 1: [[0, 5], [5, 6], [6, 7], [7, 8]], + 2: [[0, 9], [9, 10], [10, 11], [11, 12]], + 3: [[0, 13], [13, 14], [14, 15], [15, 16]], + 4: [[0, 17], [17, 18], [18, 19], [19, 20]] + }, + getName: (value) => Finger.nameMapping[value], + getPoints: (value) => Finger.pointsMapping[value] +}; +var FingerCurl = { + none: 0, + half: 1, + full: 2, + nameMapping: { 0: "none", 1: "half", 2: "full" }, + getName: (value) => FingerCurl.nameMapping[value] +}; +var FingerDirection = { + verticalUp: 0, + verticalDown: 1, + horizontalLeft: 2, + horizontalRight: 3, + diagonalUpRight: 4, + diagonalUpLeft: 5, + diagonalDownRight: 6, + diagonalDownLeft: 7, + nameMapping: { 0: "verticalUp", 1: "verticalDown", 2: "horizontalLeft", 3: "horizontalRight", 4: "diagonalUpRight", 5: "diagonalUpLeft", 6: "diagonalDownRight", 7: "diagonalDownLeft" }, + getName: (value) => FingerDirection.nameMapping[value] +}; +var FingerGesture = class { + constructor(name) { + __publicField(this, "name"); + __publicField(this, "curls"); + __publicField(this, "directions"); + __publicField(this, "weights"); + __publicField(this, "weightsRelative"); + this.name = name; + this.curls = {}; + this.directions = {}; + this.weights = [1, 1, 1, 1, 1]; + this.weightsRelative = [1, 1, 1, 1, 1]; + } + curl(finger, curl, confidence) { + if (typeof this.curls[finger] === "undefined") + this.curls[finger] = []; + this.curls[finger].push([curl, confidence]); + } + direction(finger, position, confidence) { + if (!this.directions[finger]) + this.directions[finger] = []; + this.directions[finger].push([position, confidence]); + } + weight(finger, weight) { + this.weights[finger] = weight; + const total = this.weights.reduce((a, b) => a + b, 0); + this.weightsRelative = this.weights.map((el) => el * 5 / total); + } + matchAgainst(detectedCurls, detectedDirections) { + let confidence = 0; + for (const fingerIdx in detectedCurls) { + const detectedCurl = detectedCurls[fingerIdx]; + const expectedCurls = this.curls[fingerIdx]; + if (typeof expectedCurls === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedCurl, score] of expectedCurls) { + if (detectedCurl === expectedCurl) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + for (const fingerIdx in detectedDirections) { + const detectedDirection = detectedDirections[fingerIdx]; + const expectedDirections = this.directions[fingerIdx]; + if (typeof expectedDirections === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedDirection, score] of expectedDirections) { + if (detectedDirection === expectedDirection) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + return confidence / 10; + } +}; + +// src/hand/fingergesture.ts +var { thumb, index, middle, ring, pinky } = Finger; +var { none, half, full } = FingerCurl; +var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection; +var ThumbsUp = new FingerGesture("thumbs up"); +ThumbsUp.curl(thumb, none, 1); +ThumbsUp.direction(thumb, verticalUp, 1); +ThumbsUp.direction(thumb, diagonalUpLeft, 0.25); +ThumbsUp.direction(thumb, diagonalUpRight, 0.25); +for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) { + ThumbsUp.curl(finger, full, 1); + ThumbsUp.direction(finger, horizontalLeft, 1); + ThumbsUp.direction(finger, horizontalRight, 1); +} +var Victory = new FingerGesture("victory"); +Victory.curl(thumb, half, 0.5); +Victory.curl(thumb, none, 0.5); +Victory.direction(thumb, verticalUp, 1); +Victory.direction(thumb, diagonalUpLeft, 1); +Victory.curl(index, none, 1); +Victory.direction(index, verticalUp, 0.75); +Victory.direction(index, diagonalUpLeft, 1); +Victory.curl(middle, none, 1); +Victory.direction(middle, verticalUp, 1); +Victory.direction(middle, diagonalUpLeft, 0.75); +Victory.curl(ring, full, 1); +Victory.direction(ring, verticalUp, 0.2); +Victory.direction(ring, diagonalUpLeft, 1); +Victory.direction(ring, horizontalLeft, 0.2); +Victory.curl(pinky, full, 1); +Victory.direction(pinky, verticalUp, 0.2); +Victory.direction(pinky, diagonalUpLeft, 1); +Victory.direction(pinky, horizontalLeft, 0.2); +Victory.weight(index, 2); +Victory.weight(middle, 2); +var Point = new FingerGesture("point"); +Point.curl(thumb, full, 1); +Point.curl(index, none, 0.5); +Point.curl(middle, full, 0.5); +Point.curl(ring, full, 0.5); +Point.curl(pinky, full, 0.5); +Point.weight(index, 2); +Point.weight(middle, 2); +var MiddleFinger = new FingerGesture("middle finger"); +MiddleFinger.curl(thumb, none, 1); +MiddleFinger.curl(index, full, 0.5); +MiddleFinger.curl(middle, full, 0.5); +MiddleFinger.curl(ring, full, 0.5); +MiddleFinger.curl(pinky, full, 0.5); +MiddleFinger.weight(index, 2); +MiddleFinger.weight(middle, 2); +var OpenPalm = new FingerGesture("open palm"); +OpenPalm.curl(thumb, none, 0.75); +OpenPalm.curl(index, none, 0.75); +OpenPalm.curl(middle, none, 0.75); +OpenPalm.curl(ring, none, 0.75); +OpenPalm.curl(pinky, none, 0.75); +var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm]; + +// src/hand/fingerpose.ts +var minConfidence = 0.7; +var options3 = { + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + DISTANCE_VOTE_POWER: 1.1, + SINGLE_ANGLE_VOTE_POWER: 0.9, + TOTAL_ANGLE_VOTE_POWER: 1.6 +}; +function calculateSlope(point1x, point1y, point2x, point2y) { + const value = (point1y - point2y) / (point1x - point2x); + let slope = Math.atan(value) * 180 / Math.PI; + if (slope <= 0) + slope = -slope; + else if (slope > 0) + slope = 180 - slope; + return slope; +} +function getSlopes(point1, point2) { + if (!point1 || !point2) + return [0, 0]; + const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]); + if (point1.length === 2) + return slopeXY; + const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]); + return [slopeXY, slopeYZ]; +} +function angleOrientationAt(angle, weightageAt = 1) { + let isVertical = 0; + let isDiagonal = 0; + let isHorizontal = 0; + if (angle >= 75 && angle <= 105) + isVertical = 1 * weightageAt; + else if (angle >= 25 && angle <= 155) + isDiagonal = 1 * weightageAt; + else + isHorizontal = 1 * weightageAt; + return [isVertical, isDiagonal, isHorizontal]; +} +function estimateFingerCurl(startPoint, midPoint, endPoint) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const start_mid_z_dist = startPoint[2] - midPoint[2]; + const start_end_z_dist = startPoint[2] - endPoint[2]; + const mid_end_z_dist = midPoint[2] - endPoint[2]; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist); + let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist); + if (cos_in > 1) + cos_in = 1; + else if (cos_in < -1) + cos_in = -1; + let angleOfCurve = Math.acos(cos_in); + angleOfCurve = 57.2958 * angleOfCurve % 180; + let fingerCurl; + if (angleOfCurve > options3.NO_CURL_START_LIMIT) + fingerCurl = FingerCurl.none; + else if (angleOfCurve > options3.HALF_CURL_START_LIMIT) + fingerCurl = FingerCurl.half; + else + fingerCurl = FingerCurl.full; + return fingerCurl; +} +function estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + if (max_dist_x === Math.abs(start_end_x_dist)) { + if (start_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else if (max_dist_x === Math.abs(start_mid_x_dist)) { + if (start_mid_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else { + if (mid_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } + return estimatedDirection; +} +function estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) { + let estimatedDirection; + if (max_dist_y === Math.abs(start_end_y_dist)) { + if (start_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else if (max_dist_y === Math.abs(start_mid_y_dist)) { + if (start_mid_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else { + if (mid_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } + return estimatedDirection; +} +function estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + if (reqd_vertical_direction === FingerDirection.verticalUp) { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalUpLeft; + else + estimatedDirection = FingerDirection.diagonalUpRight; + } else { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalDownLeft; + else + estimatedDirection = FingerDirection.diagonalDownRight; + } + return estimatedDirection; +} +function calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist)); + const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist)); + let voteVertical = 0; + let voteDiagonal = 0; + let voteHorizontal = 0; + const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 1e-5); + if (start_end_x_y_dist_ratio > 1.5) + voteVertical += options3.DISTANCE_VOTE_POWER; + else if (start_end_x_y_dist_ratio > 0.66) + voteDiagonal += options3.DISTANCE_VOTE_POWER; + else + voteHorizontal += options3.DISTANCE_VOTE_POWER; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist); + const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist); + let calc_start_point_x = startPoint[0]; + let calc_start_point_y = startPoint[1]; + let calc_end_point_x = endPoint[0]; + let calc_end_point_y = endPoint[1]; + if (max_dist === start_mid_dist) { + calc_end_point_x = endPoint[0]; + calc_end_point_y = endPoint[1]; + } else if (max_dist === mid_end_dist) { + calc_start_point_x = midPoint[0]; + calc_start_point_y = midPoint[1]; + } + const calcStartPoint = [calc_start_point_x, calc_start_point_y]; + const calcEndPoint = [calc_end_point_x, calc_end_point_y]; + const totalAngle = getSlopes(calcStartPoint, calcEndPoint); + const votes = angleOrientationAt(totalAngle, options3.TOTAL_ANGLE_VOTE_POWER); + voteVertical += votes[0]; + voteDiagonal += votes[1]; + voteHorizontal += votes[2]; + for (const fingerSlope of fingerSlopes) { + const fingerVotes = angleOrientationAt(fingerSlope, options3.SINGLE_ANGLE_VOTE_POWER); + voteVertical += fingerVotes[0]; + voteDiagonal += fingerVotes[1]; + voteHorizontal += fingerVotes[2]; + } + let estimatedDirection; + if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } else { + estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } + return estimatedDirection; +} +function estimate(landmarks) { + const slopesXY = []; + const slopesYZ = []; + const fingerCurls = []; + const fingerDirections = []; + if (!landmarks) + return { curls: fingerCurls, directions: fingerDirections }; + for (const finger of Finger.all) { + const points = Finger.getPoints(finger); + const slopeAtXY = []; + const slopeAtYZ = []; + for (const point2 of points) { + const point1 = landmarks[point2[0]]; + const point22 = landmarks[point2[1]]; + const slopes = getSlopes(point1, point22); + const slopeXY = slopes[0]; + const slopeYZ = slopes[1]; + slopeAtXY.push(slopeXY); + slopeAtYZ.push(slopeYZ); + } + slopesXY.push(slopeAtXY); + slopesYZ.push(slopeAtYZ); + } + for (const finger of Finger.all) { + const pointIndexAt = finger === Finger.thumb ? 1 : 0; + const fingerPointsAt = Finger.getPoints(finger); + const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]]; + const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]]; + const endPoint = landmarks[fingerPointsAt[3][1]]; + const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint); + const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt)); + fingerCurls[finger] = fingerCurled; + fingerDirections[finger] = fingerPosition; + } + return { curls: fingerCurls, directions: fingerDirections }; +} +function analyze(keypoints) { + if (!keypoints || keypoints.length === 0) + return null; + const estimatorRes = estimate(keypoints); + const landmarks = {}; + for (const fingerIdx of Finger.all) { + landmarks[Finger.getName(fingerIdx)] = { + curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]), + direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]) + }; + } + return landmarks; +} +function match(keypoints) { + const poses = []; + if (!keypoints || keypoints.length === 0) + return poses; + const estimatorRes = estimate(keypoints); + for (const gesture2 of fingergesture_default) { + const confidence = gesture2.matchAgainst(estimatorRes.curls, estimatorRes.directions); + if (confidence >= minConfidence) + poses.push({ name: gesture2.name, confidence }); + } + return poses; +} + +// src/gesture/gesture.ts +var body2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const leftWrist = res[i].keypoints.find((a) => a.part === "leftWrist"); + const rightWrist = res[i].keypoints.find((a) => a.part === "rightWrist"); + const nose = res[i].keypoints.find((a) => a.part === "nose"); + if (nose && leftWrist && rightWrist && leftWrist.position[1] < nose.position[1] && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "i give up" }); + else if (nose && leftWrist && leftWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise left hand" }); + else if (nose && rightWrist && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise right hand" }); + const leftShoulder = res[i].keypoints.find((a) => a.part === "leftShoulder"); + const rightShoulder = res[i].keypoints.find((a) => a.part === "rightShoulder"); + if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) { + gestures.push({ body: i, gesture: `leaning ${leftShoulder.position[1] > rightShoulder.position[1] ? "left" : "right"}` }); + } + } + return gestures; +}; +var face2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (res[i].mesh && res[i].mesh.length > 450) { + const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0); + const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0]; + if (Math.abs(zDiff / xDiff) <= 0.15) + gestures.push({ face: i, gesture: "facing center" }); + else + gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? "left" : "right"}` }); + const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); + if (openLeft < 0.2) + gestures.push({ face: i, gesture: "blink left eye" }); + const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); + if (openRight < 0.2) + gestures.push({ face: i, gesture: "blink right eye" }); + const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1])); + if (mouthOpen > 10) + gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` }); + const chinDepth = res[i].mesh[152][2] || 0; + if (Math.abs(chinDepth) > 10) + gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? "up" : "down"}` }); + } + } + return gestures; +}; +var iris2 = (res) => { + var _a, _b, _c, _d; + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[0]) || !((_d = (_c = res[i].annotations) == null ? void 0 : _c.rightEyeIris) == null ? void 0 : _d[0])) + continue; + const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; + const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; + const areaLeft = Math.abs(sizeXLeft * sizeYLeft); + const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0]; + const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1]; + const areaRight = Math.abs(sizeXRight * sizeYRight); + let center = false; + const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight); + if (difference < 0.25) { + center = true; + gestures.push({ iris: i, gesture: "facing center" }); + } + const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2]; + const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2]; + if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) + center = false; + if (leftIrisCenterX > rightIrisCenterX) { + if (leftIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (rightIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking left" }); + } + const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3]; + const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3]; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + center = false; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) + gestures.push({ iris: i, gesture: "looking down" }); + if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + gestures.push({ iris: i, gesture: "looking up" }); + if (center) + gestures.push({ iris: i, gesture: "looking center" }); + } + return gestures; +}; +var hand2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const fingers = []; + if (res[i].annotations) { + for (const [finger, pos] of Object.entries(res[i].annotations)) { + if (finger !== "palmBase" && Array.isArray(pos) && pos[0]) + fingers.push({ name: finger.toLowerCase(), position: pos[0] }); + } + } + if (fingers && fingers.length > 0) { + const closest = fingers.reduce((best, a) => (best.position[2] || 0) < (a.position[2] || 0) ? best : a); + gestures.push({ hand: i, gesture: `${closest.name} forward` }); + const highest = fingers.reduce((best, a) => best.position[1] < a.position[1] ? best : a); + gestures.push({ hand: i, gesture: `${highest.name} up` }); + } + if (res[i].keypoints) { + const poses = match(res[i].keypoints); + for (const pose of poses) + gestures.push({ hand: i, gesture: pose.name }); + } + } + return gestures; +}; + +// src/hand/handposeutil.ts +function getBoxSize2(box) { + return [ + Math.abs(box.endPoint[0] - box.startPoint[0]), + Math.abs(box.endPoint[1] - box.startPoint[1]) + ]; +} +function getBoxCenter2(box) { + return [ + box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, + box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2 + ]; +} +function cutBoxFromImageAndResize(box, image28, cropSize) { + const h = image28.shape[1]; + const w = image28.shape[2]; + const boxes = [[ + box.startPoint[1] / h, + box.startPoint[0] / w, + box.endPoint[1] / h, + box.endPoint[0] / w + ]]; + return tfjs_esm_exports.image.cropAndResize(image28, boxes, [0], cropSize); +} +function scaleBoxCoordinates2(box, factor) { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + const palmLandmarks = box.palmLandmarks.map((coord) => { + const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]]; + return scaledCoord; + }); + return { startPoint, endPoint, palmLandmarks, confidence: box.confidence }; +} +function enlargeBox2(box, factor = 1.5) { + const center = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const newHalfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]]; + const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function squarifyBox2(box) { + const centers = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const maxEdge = Math.max(...size2); + const halfSize = maxEdge / 2; + const startPoint = [centers[0] - halfSize, centers[1] - halfSize]; + const endPoint = [centers[0] + halfSize, centers[1] + halfSize]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function normalizeRadians2(angle) { + return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +} +function computeRotation2(point1, point2) { + const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); + return normalizeRadians2(radians); +} +var buildTranslationMatrix2 = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +function dot2(v1, v2) { + let product = 0; + for (let i = 0; i < v1.length; i++) { + product += v1[i] * v2[i]; + } + return product; +} +function getColumnFrom2DArr2(arr, columnIndex) { + const column = []; + for (let i = 0; i < arr.length; i++) { + column.push(arr[i][columnIndex]); + } + return column; +} +function multiplyTransformMatrices2(mat1, mat2) { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) { + product[row].push(dot2(mat1[row], getColumnFrom2DArr2(mat2, col))); + } + } + return product; +} +function buildRotationMatrix2(rotation, center) { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix2(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices2(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix2(-center[0], -center[1]); + return multiplyTransformMatrices2(translationTimesRotation, negativeTranslationMatrix); +} +function invertTransformMatrix2(matrix) { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [ + -dot2(rotationComponent[0], translationComponent), + -dot2(rotationComponent[1], translationComponent) + ]; + return [ + rotationComponent[0].concat(invertedTranslation[0]), + rotationComponent[1].concat(invertedTranslation[1]), + [0, 0, 1] + ]; +} +function rotatePoint2(homogeneousCoordinate, rotationMatrix) { + return [ + dot2(homogeneousCoordinate, rotationMatrix[0]), + dot2(homogeneousCoordinate, rotationMatrix[1]) + ]; +} + +// src/hand/handposeanchors.ts +var anchors2 = [ + { x: 0.015625, y: 0.015625 }, + { x: 0.015625, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 } +]; + +// src/hand/handposedetector.ts +var HandDetector = class { + constructor(model23) { + __publicField(this, "model"); + __publicField(this, "anchors"); + __publicField(this, "anchorsTensor"); + __publicField(this, "inputSize"); + __publicField(this, "inputSizeTensor"); + __publicField(this, "doubleInputSizeTensor"); + var _a, _b, _c, _d; + this.model = model23; + this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); + this.anchorsTensor = tfjs_esm_exports.tensor2d(this.anchors); + this.inputSize = ((_d = (_c = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c.shape) == null ? void 0 : _d[2]) || 0; + this.inputSizeTensor = tfjs_esm_exports.tensor1d([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = tfjs_esm_exports.tensor1d([this.inputSize * 2, this.inputSize * 2]); + } + normalizeBoxes(boxes) { + const t2 = {}; + t2.boxOffsets = tfjs_esm_exports.slice(boxes, [0, 0], [-1, 2]); + t2.boxSizes = tfjs_esm_exports.slice(boxes, [0, 2], [-1, 2]); + t2.div = tfjs_esm_exports.div(t2.boxOffsets, this.inputSizeTensor); + t2.boxCenterPoints = tfjs_esm_exports.add(t2.div, this.anchorsTensor); + t2.halfBoxSizes = tfjs_esm_exports.div(t2.boxSizes, this.doubleInputSizeTensor); + t2.sub = tfjs_esm_exports.sub(t2.boxCenterPoints, t2.halfBoxSizes); + t2.startPoints = tfjs_esm_exports.mul(t2.sub, this.inputSizeTensor); + t2.add = tfjs_esm_exports.add(t2.boxCenterPoints, t2.halfBoxSizes); + t2.endPoints = tfjs_esm_exports.mul(t2.add, this.inputSizeTensor); + const res = tfjs_esm_exports.concat2d([t2.startPoints, t2.endPoints], 1); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return res; + } + normalizeLandmarks(rawPalmLandmarks, index2) { + const t2 = {}; + t2.reshape = tfjs_esm_exports.reshape(rawPalmLandmarks, [-1, 7, 2]); + t2.div = tfjs_esm_exports.div(t2.reshape, this.inputSizeTensor); + t2.landmarks = tfjs_esm_exports.add(t2.div, this.anchors[index2] ? this.anchors[index2] : 0); + const res = tfjs_esm_exports.mul(t2.landmarks, this.inputSizeTensor); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return res; + } + async predict(input, config3) { + var _a; + const t2 = {}; + t2.resize = tfjs_esm_exports.image.resizeBilinear(input, [this.inputSize, this.inputSize]); + t2.div = tfjs_esm_exports.div(t2.resize, constants.tf127); + t2.image = tfjs_esm_exports.sub(t2.div, constants.tf1); + t2.batched = this.model.execute(t2.image); + t2.predictions = tfjs_esm_exports.squeeze(t2.batched); + t2.slice = tfjs_esm_exports.slice(t2.predictions, [0, 0], [-1, 1]); + t2.sigmoid = tfjs_esm_exports.sigmoid(t2.slice); + t2.scores = tfjs_esm_exports.squeeze(t2.sigmoid); + const scores = await t2.scores.data(); + t2.boxes = tfjs_esm_exports.slice(t2.predictions, [0, 1], [-1, 4]); + t2.norm = this.normalizeBoxes(t2.boxes); + t2.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t2.norm, t2.scores, 3 * (((_a = config3.hand) == null ? void 0 : _a.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + const nms = await t2.nms.array(); + const hands = []; + for (const index2 of nms) { + const p = {}; + p.box = tfjs_esm_exports.slice(t2.norm, [index2, 0], [1, -1]); + p.slice = tfjs_esm_exports.slice(t2.predictions, [index2, 5], [1, 14]); + p.norm = this.normalizeLandmarks(p.slice, index2); + p.palmLandmarks = tfjs_esm_exports.reshape(p.norm, [-1, 2]); + const box = await p.box.data(); + const startPoint = box.slice(0, 2); + const endPoint = box.slice(2, 4); + const palmLandmarks = await p.palmLandmarks.array(); + const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; + const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); + hands.push(scaled); + Object.keys(p).forEach((tensor6) => tfjs_esm_exports.dispose(p[tensor6])); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return hands; + } +}; + +// src/hand/handposepipeline.ts +var palmBoxEnlargeFactor = 5; +var handBoxEnlargeFactor = 1.65; +var palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2]; +var palmLandmarksPalmBase = 0; +var palmLandmarksMiddleFingerBase = 2; +var lastTime13 = 0; +var HandPipeline = class { + constructor(handDetector, handPoseModel2) { + __publicField(this, "handDetector"); + __publicField(this, "handPoseModel"); + __publicField(this, "inputSize"); + __publicField(this, "storedBoxes"); + __publicField(this, "skipped"); + __publicField(this, "detectedHands"); + var _a, _b, _c; + this.handDetector = handDetector; + this.handPoseModel = handPoseModel2; + this.inputSize = ((_c = (_b = (_a = this.handPoseModel) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[2]) || 0; + this.storedBoxes = []; + this.skipped = Number.MAX_SAFE_INTEGER; + this.detectedHands = 0; + } + calculateLandmarksBoundingBox(landmarks) { + const xs = landmarks.map((d) => d[0]); + const ys = landmarks.map((d) => d[1]); + const startPoint = [Math.min(...xs), Math.min(...ys)]; + const endPoint = [Math.max(...xs), Math.max(...ys)]; + return { startPoint, endPoint }; + } + getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) { + const rotatedPalmLandmarks = palmLandmarks.map((coord) => rotatePoint2([...coord, 1], rotationMatrix)); + const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks); + return enlargeBox2(squarifyBox2(boxAroundPalm), palmBoxEnlargeFactor); + } + getBoxForHandLandmarks(landmarks) { + const boundingBox = this.calculateLandmarksBoundingBox(landmarks); + const boxAroundHand = enlargeBox2(squarifyBox2(boundingBox), handBoxEnlargeFactor); + boxAroundHand.palmLandmarks = []; + for (let i = 0; i < palmLandmarkIds.length; i++) { + boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2)); + } + return boxAroundHand; + } + transformRawCoords(rawCoords, box2, angle, rotationMatrix) { + const boxSize = getBoxSize2(box2); + const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2]; + const coordsScaled = rawCoords.map((coord) => [ + scaleFactor[0] * (coord[0] - this.inputSize / 2), + scaleFactor[1] * (coord[1] - this.inputSize / 2), + scaleFactor[2] * coord[2] + ]); + const coordsRotationMatrix = buildRotationMatrix2(angle, [0, 0]); + const coordsRotated = coordsScaled.map((coord) => { + const rotated = rotatePoint2(coord, coordsRotationMatrix); + return [...rotated, coord[2]]; + }); + const inverseRotationMatrix = invertTransformMatrix2(rotationMatrix); + const boxCenter = [...getBoxCenter2(box2), 1]; + const originalBoxCenter = [ + dot2(boxCenter, inverseRotationMatrix[0]), + dot2(boxCenter, inverseRotationMatrix[1]) + ]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + originalBoxCenter[0]), + Math.trunc(coord[1] + originalBoxCenter[1]), + Math.trunc(coord[2]) + ]); + } + async estimateHands(image28, config3) { + let useFreshBox = false; + let boxes; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime13; + const skipFrame = this.skipped < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + if (config3.skipAllowed) + this.skipped++; + if (boxes && boxes.length > 0 && (boxes.length !== this.detectedHands && this.detectedHands !== config3.hand.maxDetected || !config3.hand.landmarks)) { + this.detectedHands = 0; + this.storedBoxes = [...boxes]; + if (this.storedBoxes.length > 0) + useFreshBox = true; + } + const hands = []; + for (let i = 0; i < this.storedBoxes.length; i++) { + const currentBox = this.storedBoxes[i]; + if (!currentBox) + continue; + if (config3.hand.landmarks) { + const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; + const palmCenter = getBoxCenter2(currentBox); + const palmCenterNormalized = [palmCenter[0] / image28.shape[2], palmCenter[1] / image28.shape[1]]; + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? tfjs_esm_exports.image.rotateWithOffset(image28, angle, 0, palmCenterNormalized) : image28.clone(); + const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); + const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; + const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); + const handImage = tfjs_esm_exports.div(croppedInput, constants.tf255); + tfjs_esm_exports.dispose(croppedInput); + tfjs_esm_exports.dispose(rotatedImage); + const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); + lastTime13 = now(); + tfjs_esm_exports.dispose(handImage); + const confidence = (await confidenceT.data())[0]; + tfjs_esm_exports.dispose(confidenceT); + if (confidence >= config3.hand.minConfidence / 4) { + const keypointsReshaped = tfjs_esm_exports.reshape(keypoints, [-1, 3]); + const rawCoords = await keypointsReshaped.array(); + tfjs_esm_exports.dispose(keypoints); + tfjs_esm_exports.dispose(keypointsReshaped); + const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); + const nextBoundingBox = this.getBoxForHandLandmarks(coords); + this.storedBoxes[i] = { ...nextBoundingBox, confidence }; + const result = { + landmarks: coords, + confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: confidence, + box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint } + }; + hands.push(result); + } else { + this.storedBoxes[i] = null; + } + tfjs_esm_exports.dispose(keypoints); + } else { + const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); + const result = { + confidence: currentBox.confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: 0, + box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint }, + landmarks: [] + }; + hands.push(result); + } + } + this.storedBoxes = this.storedBoxes.filter((a) => a !== null); + this.detectedHands = hands.length; + if (hands.length > config3.hand.maxDetected) + hands.length = config3.hand.maxDetected; + return hands; + } +}; + +// src/hand/handpose.ts +var meshAnnotations2 = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + palm: [0] +}; +var handDetectorModel; +var handPoseModel; +var handPipeline; +async function predict14(input, config3) { + const predictions = await handPipeline.estimateHands(input, config3); + if (!predictions) + return []; + const hands = []; + for (let i = 0; i < predictions.length; i++) { + const annotations2 = {}; + if (predictions[i].landmarks) { + for (const key of Object.keys(meshAnnotations2)) { + annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]); + } + } + const keypoints = predictions[i].landmarks; + let box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; + let boxRaw = [0, 0, 0, 0]; + if (keypoints && keypoints.length > 0) { + for (const pt of keypoints) { + if (pt[0] < box[0]) + box[0] = pt[0]; + if (pt[1] < box[1]) + box[1] = pt[1]; + if (pt[0] > box[2]) + box[2] = pt[0]; + if (pt[1] > box[3]) + box[3] = pt[1]; + } + box[2] -= box[0]; + box[3] -= box[1]; + boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)]; + } else { + box = predictions[i].box ? [ + Math.trunc(Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.max(0, predictions[i].box.topLeft[1])), + Math.trunc(Math.min(input.shape[2] || 0, predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.min(input.shape[1] || 0, predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])) + ] : [0, 0, 0, 0]; + boxRaw = [ + predictions[i].box.topLeft[0] / (input.shape[2] || 0), + predictions[i].box.topLeft[1] / (input.shape[1] || 0), + (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0), + (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0) + ]; + } + const landmarks = analyze(keypoints); + hands.push({ + id: i, + score: Math.round(100 * predictions[i].confidence) / 100, + boxScore: Math.round(100 * predictions[i].boxConfidence) / 100, + fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100, + label: "hand", + box, + boxRaw, + keypoints, + annotations: annotations2, + landmarks + }); + } + return hands; +} +async function load15(config3) { + var _a, _b; + if (env.initial) { + handDetectorModel = null; + handPoseModel = null; + } + if (!handDetectorModel || !handPoseModel) { + [handDetectorModel, handPoseModel] = await Promise.all([ + config3.hand.enabled ? loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath) : null, + config3.hand.landmarks ? loadModel((_b = config3.hand.skeleton) == null ? void 0 : _b.modelPath) : null + ]); + } else { + if (config3.debug) + log("cached model:", handDetectorModel["modelUrl"]); + if (config3.debug) + log("cached model:", handPoseModel["modelUrl"]); + } + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) + handPipeline = new HandPipeline(handDetector, handPoseModel); + return [handDetectorModel, handPoseModel]; +} + +// src/hand/handtrack.ts +var models2 = [null, null]; +var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; +var inputSize7 = [[0, 0], [0, 0]]; +var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; +var faceIndex = 4; +var boxExpandFact = 1.6; +var maxDetectorResolution = 512; +var detectorExpandFact = 1.4; +var skipped13 = Number.MAX_SAFE_INTEGER; +var lastTime14 = 0; +var outputSize = [0, 0]; +var cache4 = { + boxes: [], + hands: [] +}; +var fingerMap = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + base: [0], + palm: [0, 17, 13, 9, 5, 1, 0] +}; +async function loadDetect2(config3) { + var _a; + if (env.initial) + models2[0] = null; + if (!models2[0]) { + fakeOps(["tensorlistreserve", "enter", "tensorlistfromtensor", "merge", "loopcond", "switch", "exit", "tensorliststack", "nextiteration", "tensorlistsetitem", "tensorlistgetitem", "reciprocal", "shape", "split", "where"], config3); + models2[0] = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + const inputs = models2[0]["executor"] ? Object.values(models2[0].modelSignature["inputs"]) : void 0; + inputSize7[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[0]["modelUrl"]); + return models2[0]; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) + models2[1] = null; + if (!models2[1]) { + models2[1] = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + const inputs = models2[1]["executor"] ? Object.values(models2[1].modelSignature["inputs"]) : void 0; + inputSize7[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[1]["modelUrl"]); + return models2[1]; +} +async function detectHands(input, config3) { + const hands = []; + if (!input || !models2[0]) + return hands; + const t2 = {}; + const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); + const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); + const width = Math.round(height * ratio2 / 8) * 8; + t2.resize = tfjs_esm_exports.image.resizeBilinear(input, [height, width]); + t2.cast = tfjs_esm_exports.cast(t2.resize, "int32"); + [t2.rawScores, t2.rawBoxes] = await models2[0].executeAsync(t2.cast, modelOutputNodes); + t2.boxes = tfjs_esm_exports.squeeze(t2.rawBoxes, [0, 2]); + t2.scores = tfjs_esm_exports.squeeze(t2.rawScores, [0]); + const classScores = tfjs_esm_exports.unstack(t2.scores, 1); + tfjs_esm_exports.dispose(classScores[faceIndex]); + classScores.splice(faceIndex, 1); + t2.filtered = tfjs_esm_exports.stack(classScores, 1); + tfjs_esm_exports.dispose(classScores); + t2.max = tfjs_esm_exports.max(t2.filtered, 1); + t2.argmax = tfjs_esm_exports.argMax(t2.filtered, 1); + let id = 0; + t2.nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(t2.boxes, t2.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + const nms = await t2.nms.data(); + const scores = await t2.max.data(); + const classNum = await t2.argmax.data(); + for (const nmsIndex of Array.from(nms)) { + const boxSlice = tfjs_esm_exports.slice(t2.boxes, nmsIndex, 1); + const boxYX = await boxSlice.data(); + tfjs_esm_exports.dispose(boxSlice); + const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; + const boxRaw = scale(boxData, detectorExpandFact); + const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; + const score = scores[nmsIndex]; + const label = classes[classNum[nmsIndex]]; + const hand3 = { id: id++, score, box: boxFull, boxRaw, label }; + hands.push(hand3); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + hands.sort((a, b) => b.score - a.score); + if (hands.length > (config3.hand.maxDetected || 1)) + hands.length = config3.hand.maxDetected || 1; + return hands; +} +async function detectFingers(input, h, config3) { + const hand3 = { + id: h.id, + score: Math.round(100 * h.score) / 100, + boxScore: Math.round(100 * h.score) / 100, + fingerScore: 0, + box: h.box, + boxRaw: h.boxRaw, + label: h.label, + keypoints: [], + landmarks: {}, + annotations: {} + }; + if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { + const t2 = {}; + const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; + t2.crop = tfjs_esm_exports.image.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t2.div = tfjs_esm_exports.div(t2.crop, constants.tf255); + [t2.score, t2.keypoints] = models2[1].execute(t2.div, ["Identity_1", "Identity"]); + const rawScore = (await t2.score.data())[0]; + const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; + if (score >= (config3.hand.minConfidence || 0)) { + hand3.fingerScore = score; + t2.reshaped = tfjs_esm_exports.reshape(t2.keypoints, [-1, 3]); + const coordsData = await t2.reshaped.array(); + const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize7[1][1], kpt4[1] / inputSize7[1][0], kpt4[2] || 0]); + const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); + hand3.keypoints = coordsNorm.map((kpt4) => [outputSize[0] * (kpt4[0] + h.boxRaw[0]), outputSize[1] * (kpt4[1] + h.boxRaw[1]), kpt4[2] || 0]); + hand3.landmarks = analyze(hand3.keypoints); + for (const key of Object.keys(fingerMap)) { + hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); + } + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + } + return hand3; +} +async function predict15(input, config3) { + var _a, _b; + if (!((_a = models2[0]) == null ? void 0 : _a["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + return []; + outputSize = [input.shape[2] || 0, input.shape[1] || 0]; + skipped13++; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrame = skipped13 < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache4.hands; + } + return new Promise(async (resolve) => { + const skipTimeExtended = 3 * (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrameExtended = skipped13 < 3 * (config3.hand.skipFrames || 0); + if (config3.skipAllowed && cache4.hands.length === config3.hand.maxDetected) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else if (config3.skipAllowed && skipTimeExtended && skipFrameExtended && cache4.hands.length > 0) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else { + cache4.boxes = await detectHands(input, config3); + lastTime14 = now(); + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + skipped13 = 0; + } + const oldCache = [...cache4.boxes]; + cache4.boxes.length = 0; + if (config3.cacheSensitivity > 0) { + for (let i = 0; i < cache4.hands.length; i++) { + const boxKpt = square(cache4.hands[i].keypoints, outputSize); + if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache4.hands[i].fingerScore && cache4.hands[i].fingerScore > (config3.hand.minConfidence || 0)) { + const boxScale = scale(boxKpt.box, boxExpandFact); + const boxScaleRaw = scale(boxKpt.boxRaw, boxExpandFact); + cache4.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw }); + } + } + } + for (let i = 0; i < cache4.hands.length; i++) { + const bbox = calc(cache4.hands[i].keypoints, outputSize); + cache4.hands[i].box = bbox.box; + cache4.hands[i].boxRaw = bbox.boxRaw; + } + resolve(cache4.hands); + }); +} + +// src/result.ts +var empty = (error = null) => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error }); + +// src/body/movenetcoords.ts +var movenetcoords_exports = {}; +__export(movenetcoords_exports, { + connected: () => connected3, + horizontal: () => horizontal, + kpt: () => kpt3, + relative: () => relative, + vertical: () => vertical +}); +var kpt3 = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/util/interpolate.ts +var bufferedResult = empty(); +var interpolateTime = 0; +function calc2(newResult, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + const t0 = now(); + if (!newResult) + return empty(); + const elapsed = Date.now() - newResult.timestamp; + const bufferedFactor = elapsed < 1e3 ? 8 - Math.log(elapsed + 1) : 1; + if (newResult.canvas) + bufferedResult.canvas = newResult.canvas; + if (newResult.error) + bufferedResult.error = newResult.error; + if (!bufferedResult.body || newResult.body.length !== bufferedResult.body.length) { + bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)); + } else { + for (let i = 0; i < newResult.body.length; i++) { + const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); + const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); + const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2; + return { + score: newKpt.score, + part: newKpt.part, + position: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2] + ], + positionRaw: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] + ], + distance: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a2[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c2 = newKpt.distance) == null ? void 0 : _c2[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d2[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f2 = newKpt.distance) == null ? void 0 : _f2[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g2[2]) || 0) + (((_h2 = newKpt.distance) == null ? void 0 : _h2[2]) || 0)) / bufferedFactor : (_i2 = newKpt.distance) == null ? void 0 : _i2[2] + ] + }; + }); + const annotations2 = {}; + let coords = { connected: {} }; + if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("efficientpose")) + coords = efficientposecoords_exports; + else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + coords = blazeposecoords_exports; + else if ((_c = config3.body.modelPath) == null ? void 0 : _c.includes("movenet")) + coords = movenetcoords_exports; + for (const [name, indexes] of Object.entries(coords.connected)) { + const pt = []; + for (let j = 0; j < indexes.length - 1; j++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[j]); + const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.hand || newResult.hand.length !== bufferedResult.hand.length) { + bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); + } else { + for (let i = 0; i < newResult.hand.length; i++) { + const box = newResult.hand[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.hand[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor); + if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) + bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; + const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : []; + let annotations2 = {}; + if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) { + bufferedResult.hand[i].annotations = newResult.hand[i].annotations; + annotations2 = bufferedResult.hand[i].annotations; + } else if (newResult.hand[i].annotations) { + for (const key of Object.keys(newResult.hand[i].annotations)) { + annotations2[key] = ((_f = (_e = (_d = newResult.hand[i]) == null ? void 0 : _d.annotations) == null ? void 0 : _e[key]) == null ? void 0 : _f[0]) ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) { + bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)); + } else { + for (let i = 0; i < newResult.face.length; i++) { + const box = newResult.face[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.face[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor); + if (newResult.face[i].rotation) { + const rotation = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } }; + rotation.matrix = (_g = newResult.face[i].rotation) == null ? void 0 : _g.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_i = (_h = bufferedResult.face[i].rotation) == null ? void 0 : _h.angle) == null ? void 0 : _i.roll) || 0) + (((_k = (_j = newResult.face[i].rotation) == null ? void 0 : _j.angle) == null ? void 0 : _k.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_m = (_l = bufferedResult.face[i].rotation) == null ? void 0 : _l.angle) == null ? void 0 : _m.yaw) || 0) + (((_o = (_n = newResult.face[i].rotation) == null ? void 0 : _n.angle) == null ? void 0 : _o.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_q = (_p = bufferedResult.face[i].rotation) == null ? void 0 : _p.angle) == null ? void 0 : _q.pitch) || 0) + (((_s = (_r = newResult.face[i].rotation) == null ? void 0 : _r.angle) == null ? void 0 : _s.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + bearing: ((bufferedFactor - 1) * (((_t = bufferedResult.face[i].rotation) == null ? void 0 : _t.gaze.bearing) || 0) + (((_u = newResult.face[i].rotation) == null ? void 0 : _u.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_v = bufferedResult.face[i].rotation) == null ? void 0 : _v.gaze.strength) || 0) + (((_w = newResult.face[i].rotation) == null ? void 0 : _w.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; + } + } + } + if (!bufferedResult.object || newResult.object.length !== bufferedResult.object.length) { + bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)); + } else { + for (let i = 0; i < newResult.object.length; i++) { + const box = newResult.object[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.object[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor); + bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; + } + } + if (newResult.persons) { + const newPersons = newResult.persons; + if (!bufferedResult.persons || newPersons.length !== bufferedResult.persons.length) { + bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)); + } else { + for (let i = 0; i < newPersons.length; i++) { + bufferedResult.persons[i].box = newPersons[i].box.map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor); + } + } + } + if (newResult.gesture) + bufferedResult.gesture = newResult.gesture; + bufferedResult.width = newResult.width; + bufferedResult.height = newResult.height; + const t1 = now(); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0); + if (newResult.performance) + bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; + return bufferedResult; +} + +// src/segmentation/meet.ts +var model17; +async function load16(config3) { + if (!model17 || env.initial) + model17 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model17["modelUrl"]); + return model17; +} +async function predict16(input, config3) { + var _a; + if (!model17) + model17 = await load16(config3); + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tfjs_esm_exports.image.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t2.norm = tfjs_esm_exports.div(t2.resize, constants.tf255); + t2.res = model17.execute(t2.norm); + t2.squeeze = tfjs_esm_exports.squeeze(t2.res, [0]); + [t2.bgRaw, t2.fgRaw] = tfjs_esm_exports.unstack(t2.squeeze, 2); + t2.fg = tfjs_esm_exports.softmax(t2.fgRaw); + t2.mul = tfjs_esm_exports.mul(t2.fg, constants.tf255); + t2.expand = tfjs_esm_exports.expandDims(t2.mul, 2); + t2.output = tfjs_esm_exports.image.resizeBilinear(t2.expand, [input.shape[1] || 0, input.shape[2] || 0]); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tfjs_esm_exports.squeeze(input); + t2.concat = tfjs_esm_exports.concat([t2.input, t2.output], -1); + rgba = tfjs_esm_exports.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tfjs_esm_exports.cast(t2.output, "int32"); + break; + default: + rgba = tfjs_esm_exports.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return rgba; +} + +// src/face/match.ts +var match_exports = {}; +__export(match_exports, { + distance: () => distance, + find: () => find, + similarity: () => similarity +}); +function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25 }) { + if (!descriptor1 || !descriptor1) + return Number.MAX_SAFE_INTEGER; + let sum3 = 0; + for (let i = 0; i < descriptor1.length; i++) { + const diff = !options4.order || options4.order === 2 ? descriptor1[i] - descriptor2[i] : Math.abs(descriptor1[i] - descriptor2[i]); + sum3 += !options4.order || options4.order === 2 ? diff * diff : diff ** options4.order; + } + return (options4.multiplier || 20) * sum3; +} +var normalizeDistance = (dist, order, min2, max5) => { + if (dist === 0) + return 1; + const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); + const norm = (1 - root / 100 - min2) / (max5 - min2); + const clamp2 = Math.max(Math.min(norm, 1), 0); + return clamp2; +}; +function similarity(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) { + const dist = distance(descriptor1, descriptor2, options4); + return normalizeDistance(dist, options4.order || 2, options4.min || 0, options4.max || 1); +} +function find(descriptor, descriptors, options4 = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) { + if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { + return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 }; + } + let lowestDistance = Number.MAX_SAFE_INTEGER; + let index2 = -1; + for (let i = 0; i < descriptors.length; i++) { + const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options4) : Number.MAX_SAFE_INTEGER; + if (res < lowestDistance) { + lowestDistance = res; + index2 = i; + } + if (lowestDistance < (options4.threshold || 0)) + break; + } + const normalizedSimilarity = normalizeDistance(lowestDistance, options4.order || 2, options4.min || 0, options4.max || 1); + return { index: index2, distance: lowestDistance, similarity: normalizedSimilarity }; +} + +// src/models.ts +var models_exports2 = {}; +__export(models_exports2, { + Models: () => Models, + validateModel: () => validateModel +}); + +// src/body/movenetfix.ts +var maxJitter = 5e-3; +var cache5 = { + keypoints: [], + padding: [[0, 0], [0, 0], [0, 0], [0, 0]] +}; +function bodyParts(body4) { + for (const pair of horizontal) { + const left = body4.keypoints.findIndex((kp) => kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp.part === pair[1]); + if (body4.keypoints[left] && body4.keypoints[right]) { + if (body4.keypoints[left].position[0] < body4.keypoints[right].position[0]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } + } + for (const pair of vertical) { + const lower = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const higher = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + if (body4.keypoints[lower] && body4.keypoints[higher]) { + if (body4.keypoints[lower].position[1] < body4.keypoints[higher].position[1]) { + body4.keypoints.splice(lower, 1); + } + } + } + for (const [pair, compare2] of relative) { + const left = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + const leftTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[0]); + const rightTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[1]); + if (!body4.keypoints[leftTo] || !body4.keypoints[rightTo]) + continue; + const distanceLeft = body4.keypoints[left] ? [ + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[left].position[0]), + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[left].position[0]) + ] : [0, 0]; + const distanceRight = body4.keypoints[right] ? [ + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[right].position[0]), + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[right].position[0]) + ] : [0, 0]; + if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } +} +function jitter(keypoints) { + for (let i = 0; i < keypoints.length; i++) { + if (keypoints[i] && cache5.keypoints[i]) { + const diff = [Math.abs(keypoints[i].positionRaw[0] - cache5.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache5.keypoints[i].positionRaw[1])]; + if (diff[0] < maxJitter && diff[1] < maxJitter) { + keypoints[i] = cache5.keypoints[i]; + } else { + cache5.keypoints[i] = keypoints[i]; + } + } else { + cache5.keypoints[i] = keypoints[i]; + } + } + return keypoints; +} +function padInput(input, inputSize10) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + cache5.padding = [ + [0, 0], + [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], + [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], + [0, 0] + ]; + t2.pad = tfjs_esm_exports.pad(input, cache5.padding); + t2.resize = tfjs_esm_exports.image.resizeBilinear(t2.pad, [inputSize10, inputSize10]); + const final = tfjs_esm_exports.cast(t2.resize, "int32"); + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return final; +} +function rescaleBody(body4, outputSize2) { + body4.keypoints = body4.keypoints.filter((kpt4) => kpt4 == null ? void 0 : kpt4.position); + for (const kpt4 of body4.keypoints) { + kpt4.position = [ + kpt4.position[0] * (outputSize2[0] + cache5.padding[2][0] + cache5.padding[2][1]) / outputSize2[0] - cache5.padding[2][0], + kpt4.position[1] * (outputSize2[1] + cache5.padding[1][0] + cache5.padding[1][1]) / outputSize2[1] - cache5.padding[1][0] + ]; + kpt4.positionRaw = [ + kpt4.position[0] / outputSize2[0], + kpt4.position[1] / outputSize2[1] + ]; + } + const rescaledBoxes = calc(body4.keypoints.map((pt) => pt.position), outputSize2); + body4.box = rescaledBoxes.box; + body4.boxRaw = rescaledBoxes.boxRaw; + return body4; +} + +// src/body/movenet.ts +var model18; +var inputSize8 = 0; +var skipped14 = Number.MAX_SAFE_INTEGER; +var cache6 = { + boxes: [], + bodies: [], + last: 0 +}; +async function load17(config3) { + var _a; + if (env.initial) + model18 = null; + if (!model18) { + fakeOps(["size"], config3); + model18 = await loadModel(config3.body.modelPath); + } else if (config3.debug) + log("cached model:", model18["modelUrl"]); + inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape) ? model18.inputs[0].shape[2] : 0; + if (inputSize8 < 64) + inputSize8 = 256; + return model18; +} +function parseSinglePose(res, config3, image28) { + const kpt4 = res[0][0]; + const keypoints = []; + let score = 0; + for (let id = 0; id < kpt4.length; id++) { + score = kpt4[id][2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[id][1], kpt4[id][0]]; + keypoints.push({ + score: Math.round(100 * score) / 100, + part: kpt3[id], + positionRaw, + position: [ + Math.round((image28.shape[2] || 0) * positionRaw[0]), + Math.round((image28.shape[1] || 0) * positionRaw[1]) + ] + }); + } + } + score = keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const bodies = []; + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + return bodies; +} +function parseMultiPose(res, config3, image28) { + const bodies = []; + for (let id = 0; id < res[0].length; id++) { + const kpt4 = res[0][id]; + const totalScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (totalScore > config3.body.minConfidence) { + const keypoints = []; + for (let i = 0; i < 17; i++) { + const score = kpt4[3 * i + 2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[3 * i + 1], kpt4[3 * i + 0]]; + keypoints.push({ + part: kpt3[i], + score: Math.round(100 * score) / 100, + positionRaw, + position: [Math.round((image28.shape[2] || 0) * positionRaw[0]), Math.round((image28.shape[1] || 0) * positionRaw[1])] + }); + } + } + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + } + } + bodies.sort((a, b) => b.score - a.score); + if (bodies.length > config3.body.maxDetected) + bodies.length = config3.body.maxDetected; + return bodies; +} +async function predict17(input, config3) { + var _a; + if (!(model18 == null ? void 0 : model18["executor"]) || !((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape)) + return []; + if (!config3.skipAllowed) + cache6.boxes.length = 0; + skipped14++; + const skipTime = (config3.body.skipTime || 0) > now() - cache6.last; + const skipFrame = skipped14 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache6.bodies; + } + return new Promise(async (resolve) => { + const t2 = {}; + skipped14 = 0; + t2.input = padInput(input, inputSize8); + t2.res = model18 == null ? void 0 : model18.execute(t2.input); + cache6.last = now(); + const res = await t2.res.array(); + cache6.bodies = t2.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); + for (const body4 of cache6.bodies) { + rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); + jitter(body4.keypoints); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + resolve(cache6.bodies); + }); +} + +// src/object/nanodet.ts +var model19; +var last10 = []; +var lastTime15 = 0; +var skipped15 = Number.MAX_SAFE_INTEGER; +var inputSize9 = 0; +var scaleBox = 2.5; +async function load18(config3) { + if (!model19 || env.initial) { + model19 = await loadModel(config3.object.modelPath); + const inputs = (model19 == null ? void 0 : model19["executor"]) ? Object.values(model19.modelSignature["inputs"]) : void 0; + inputSize9 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416; + } else if (config3.debug) + log("cached model:", model19["modelUrl"]); + return model19; +} +async function process4(res, outputShape, config3) { + var _a, _b; + let id = 0; + let results = []; + const size2 = inputSize9; + for (const strideSize of [1, 2, 4]) { + const baseSize = strideSize * 13; + const scoresT = tfjs_esm_exports.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scores = await scoresT.array(); + const featuresT = tfjs_esm_exports.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const boxesMaxT = tfjs_esm_exports.reshape(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); + const boxIdxT = tfjs_esm_exports.argMax(boxesMaxT, 2); + const boxIdx = await boxIdxT.array(); + for (let i = 0; i < scoresT.shape[0]; i++) { + for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { + const score = scores[i][j]; + if (score > (config3.object.minConfidence || 0) && j !== 61) { + const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; + const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; + const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); + const [x, y] = [ + cx - scaleBox / strideSize * boxOffset[0], + cy - scaleBox / strideSize * boxOffset[1] + ]; + const [w, h] = [ + cx + scaleBox / strideSize * boxOffset[2] - x, + cy + scaleBox / strideSize * boxOffset[3] - y + ]; + let boxRaw = [x, y, w, h]; + boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); + const box = [ + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + box: box.map((a) => Math.trunc(a)), + boxRaw + }; + results.push(result); + } + } + } + tfjs_esm_exports.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]); + } + const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); + const nmsScores = results.map((a) => a.score); + let nmsIdx = []; + if (nmsBoxes && nmsBoxes.length > 0) { + const nms = await tfjs_esm_exports.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + nmsIdx = Array.from(await nms.data()); + tfjs_esm_exports.dispose(nms); + } + results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); + return results; +} +async function predict18(image28, config3) { + if (!(model19 == null ? void 0 : model19["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime15; + const skipFrame = skipped15 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last10.length > 0) { + skipped15++; + return last10; + } + skipped15 = 0; + if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) + return last10; + return new Promise(async (resolve) => { + const outputSize2 = [image28.shape[2] || 0, image28.shape[1] || 0]; + const resizeT = tfjs_esm_exports.image.resizeBilinear(image28, [inputSize9, inputSize9], false); + const normT = tfjs_esm_exports.div(resizeT, constants.tf255); + const transposeT = tfjs_esm_exports.transpose(normT, [0, 3, 1, 2]); + let objectT; + if (config3.object.enabled) + objectT = model19.execute(transposeT); + lastTime15 = now(); + const obj = await process4(objectT, outputSize2, config3); + last10 = obj; + tfjs_esm_exports.dispose([resizeT, normT, transposeT, ...objectT]); + resolve(obj); + }); +} + +// src/body/posenetutils.ts +var partNames = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var count = partNames.length; +var partIds = partNames.reduce((result, jointName, i) => { + result[jointName] = i; + return result; +}, {}); +var connectedPartNames = [ + ["leftHip", "leftShoulder"], + ["leftElbow", "leftShoulder"], + ["leftElbow", "leftWrist"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["rightHip", "rightShoulder"], + ["rightElbow", "rightShoulder"], + ["rightElbow", "rightWrist"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"], + ["leftShoulder", "rightShoulder"], + ["leftHip", "rightHip"] +]; +var connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => [partIds[jointNameA], partIds[jointNameB]]); +var poseChain = [ + ["nose", "leftEye"], + ["leftEye", "leftEar"], + ["nose", "rightEye"], + ["rightEye", "rightEar"], + ["nose", "leftShoulder"], + ["leftShoulder", "leftElbow"], + ["leftElbow", "leftWrist"], + ["leftShoulder", "leftHip"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["nose", "rightShoulder"], + ["rightShoulder", "rightElbow"], + ["rightElbow", "rightWrist"], + ["rightShoulder", "rightHip"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"] +]; +function getBoundingBox(keypoints) { + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({ + maxX: Math.max(maxX, x), + maxY: Math.max(maxY, y), + minX: Math.min(minX, x), + minY: Math.min(minY, y) + }), { + maxX: Number.NEGATIVE_INFINITY, + maxY: Number.NEGATIVE_INFINITY, + minX: Number.POSITIVE_INFINITY, + minY: Number.POSITIVE_INFINITY + }); + return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY]; +} +function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]) { + const scaleY = height / inputResolutionHeight; + const scaleX = width / inputResolutionWidth; + const scalePose = (pose, i) => ({ + id: i, + score: pose.score, + boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight], + box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)], + keypoints: pose.keypoints.map(({ score, part, position }) => ({ + score, + part, + position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)], + positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] + })), + annotations: {} + }); + const scaledPoses = poses.map((pose, i) => scalePose(pose, i)); + return scaledPoses; +} +var MaxHeap = class { + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + __publicField(this, "numberOfElements"); + __publicField(this, "getElementValue"); + this.priorityQueue = new Array(maxSize2); + this.numberOfElements = -1; + this.getElementValue = getElementValue; + } + enqueue(x) { + this.priorityQueue[++this.numberOfElements] = x; + this.swim(this.numberOfElements); + } + dequeue() { + const max5 = this.priorityQueue[0]; + this.exchange(0, this.numberOfElements--); + this.sink(0); + this.priorityQueue[this.numberOfElements + 1] = null; + return max5; + } + empty() { + return this.numberOfElements === -1; + } + size() { + return this.numberOfElements + 1; + } + all() { + return this.priorityQueue.slice(0, this.numberOfElements + 1); + } + max() { + return this.priorityQueue[0]; + } + swim(k) { + while (k > 0 && this.less(Math.floor(k / 2), k)) { + this.exchange(k, Math.floor(k / 2)); + k = Math.floor(k / 2); + } + } + sink(k) { + while (2 * k <= this.numberOfElements) { + let j = 2 * k; + if (j < this.numberOfElements && this.less(j, j + 1)) + j++; + if (!this.less(k, j)) + break; + this.exchange(k, j); + k = j; + } + } + getValueAt(i) { + return this.getElementValue(this.priorityQueue[i]); + } + less(i, j) { + return this.getValueAt(i) < this.getValueAt(j); + } + exchange(i, j) { + const t2 = this.priorityQueue[i]; + this.priorityQueue[i] = this.priorityQueue[j]; + this.priorityQueue[j] = t2; + } +}; +function getOffsetPoint(y, x, keypoint, offsets) { + return { + y: offsets.get(y, x, keypoint), + x: offsets.get(y, x, keypoint + count) + }; +} +function getImageCoords(part, outputStride2, offsets) { + const { heatmapY, heatmapX, id: keypoint } = part; + const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + return { + x: part.heatmapX * outputStride2 + x, + y: part.heatmapY * outputStride2 + y + }; +} +function clamp(a, min2, max5) { + if (a < min2) + return min2; + if (a > max5) + return max5; + return a; +} +function squaredDistance(y1, x1, y2, x2) { + const dy = y2 - y1; + const dx = x2 - x1; + return dy * dy + dx * dx; +} +function addVectors(a, b) { + return { x: a.x + b.x, y: a.y + b.y }; +} + +// src/body/posenet.ts +var model20; +var poseNetOutputs = ["MobilenetV1/offset_2/BiasAdd", "MobilenetV1/heatmap_2/BiasAdd", "MobilenetV1/displacement_fwd_2/BiasAdd", "MobilenetV1/displacement_bwd_2/BiasAdd"]; +var localMaximumRadius = 1; +var outputStride = 16; +var squaredNmsRadius = 50 ** 2; +function traverse(edgeId, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) { + const getDisplacement = (point2) => ({ + y: displacements.get(point2.y, point2.x, edgeId), + x: displacements.get(point2.y, point2.x, displacements.shape[2] / 2 + edgeId) + }); + const getStridedIndexNearPoint = (point2, height2, width2) => ({ + y: clamp(Math.round(point2.y / outputStride), 0, height2 - 1), + x: clamp(Math.round(point2.x / outputStride), 0, width2 - 1) + }); + const [height, width] = scores.shape; + const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width); + const displacement = getDisplacement(sourceKeypointIndices); + const displacedPoint = addVectors(sourceKeypoint.position, displacement); + let targetKeypoint = displacedPoint; + for (let i = 0; i < offsetRefineStep; i++) { + const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const offsetPoint = getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets); + targetKeypoint = addVectors( + { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride }, + { x: offsetPoint.x, y: offsetPoint.y } + ); + } + const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId); + return { position: targetKeypoint, part: partNames[targetId], score }; +} +function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) { + const tuples = poseChain.map(([parentJoinName, childJoinName]) => [partIds[parentJoinName], partIds[childJoinName]]); + const edgesFwd = tuples.map(([, childJointId]) => childJointId); + const edgesBwd = tuples.map(([parentJointId]) => parentJointId); + const numParts = scores.shape[2]; + const numEdges = edgesFwd.length; + const keypoints = new Array(numParts); + const rootPoint = getImageCoords(root.part, outputStride, offsets); + keypoints[root.part.id] = { + score: root.score, + part: partNames[root.part.id], + position: rootPoint + }; + for (let edge = numEdges - 1; edge >= 0; --edge) { + const sourceId = edgesFwd[edge]; + const targetId = edgesBwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd); + } + } + for (let edge = 0; edge < numEdges; ++edge) { + const sourceId = edgesBwd[edge]; + const targetId = edgesFwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd); + } + } + return keypoints; +} +function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores) { + const [height, width] = scores.shape; + let localMaximum = true; + const yStart = Math.max(heatmapY - localMaximumRadius, 0); + const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height); + for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) { + const xStart = Math.max(heatmapX - localMaximumRadius, 0); + const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width); + for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) { + if (scores.get(yCurrent, xCurrent, keypointId) > score) { + localMaximum = false; + break; + } + } + if (!localMaximum) + break; + } + return localMaximum; +} +function buildPartWithScoreQueue(minConfidence2, scores) { + const [height, width, numKeypoints] = scores.shape; + const queue = new MaxHeap(height * width * numKeypoints, ({ score }) => score); + for (let heatmapY = 0; heatmapY < height; ++heatmapY) { + for (let heatmapX = 0; heatmapX < width; ++heatmapX) { + for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) { + const score = scores.get(heatmapY, heatmapX, keypointId); + if (score < minConfidence2) + continue; + if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) + queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } }); + } + } + } + return queue; +} +function withinRadius(poses, { x, y }, keypointId) { + return poses.some(({ keypoints }) => { + var _a; + const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; + if (!correspondingKeypoint) + return false; + return squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + }); +} +function getInstanceScore(existingPoses, keypoints) { + const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => { + if (!withinRadius(existingPoses, position, keypointId)) + result += score; + return result; + }, 0); + return notOverlappedKeypointScores / keypoints.length; +} +function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence2) { + const poses = []; + const queue = buildPartWithScoreQueue(minConfidence2, scores); + while (poses.length < maxDetected && !queue.empty()) { + const root = queue.dequeue(); + const rootImageCoords = getImageCoords(root.part, outputStride, offsets); + if (withinRadius(poses, rootImageCoords, root.part.id)) + continue; + let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd); + keypoints = keypoints.filter((a) => a.score > minConfidence2); + const score = getInstanceScore(poses, keypoints); + const box = getBoundingBox(keypoints); + if (score > minConfidence2) + poses.push({ keypoints, box, score: Math.round(100 * score) / 100 }); + } + return poses; +} +async function predict19(input, config3) { + if (!(model20 == null ? void 0 : model20["executor"])) + return []; + const res = tfjs_esm_exports.tidy(() => { + if (!model20.inputs[0].shape) + return []; + const resized = tfjs_esm_exports.image.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = tfjs_esm_exports.sub(tfjs_esm_exports.div(tfjs_esm_exports.cast(resized, "float32"), 127.5), 1); + const results = model20.execute(normalized, poseNetOutputs); + const results3d = results.map((y) => tfjs_esm_exports.squeeze(y, [0])); + results3d[1] = tfjs_esm_exports.sigmoid(results3d[1]); + return results3d; + }); + const buffers = await Promise.all(res.map((tensor6) => tensor6.buffer())); + for (const t2 of res) + tfjs_esm_exports.dispose(t2); + const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); + if (!model20.inputs[0].shape) + return []; + const scaled = scalePoses(decoded, [input.shape[1], input.shape[2]], [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + return scaled; +} +async function load19(config3) { + if (!model20 || env.initial) + model20 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model20["modelUrl"]); + return model20; +} + +// src/segmentation/rvm.ts +var model21; +var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; +var t = {}; +var ratio = 0; +function init3(config3) { + tfjs_esm_exports.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = tfjs_esm_exports.tensor(0); + t.r2i = tfjs_esm_exports.tensor(0); + t.r3i = tfjs_esm_exports.tensor(0); + t.r4i = tfjs_esm_exports.tensor(0); + ratio = config3.segmentation.ratio || 0.5; + t.downsample_ratio = tfjs_esm_exports.tensor(ratio); +} +async function load20(config3) { + if (!model21 || env.initial) + model21 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model21["modelUrl"]); + init3(config3); + return model21; +} +var normalize = (r) => tfjs_esm_exports.tidy(() => { + const squeeze14 = tfjs_esm_exports.squeeze(r, [0]); + const mul15 = tfjs_esm_exports.mul(squeeze14, constants.tf255); + const cast8 = tfjs_esm_exports.cast(mul15, "int32"); + return cast8; +}); +function getRGBA(fgr, pha) { + const rgb2 = fgr ? normalize(fgr) : tfjs_esm_exports.fill([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : tfjs_esm_exports.fill([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgba = tfjs_esm_exports.concat([rgb2, a], -1); + tfjs_esm_exports.dispose([rgb2, a]); + return rgba; +} +function getState(state) { + return tfjs_esm_exports.tidy(() => { + const r = {}; + r.unstack = tfjs_esm_exports.unstack(state, -1); + r.concat = tfjs_esm_exports.concat(r.unstack, 1); + r.split = tfjs_esm_exports.split(r.concat, 4, 1); + r.stack = tfjs_esm_exports.concat(r.split, 2); + r.squeeze = tfjs_esm_exports.squeeze(r.stack, [0]); + r.expand = tfjs_esm_exports.expandDims(r.squeeze, -1); + r.add = tfjs_esm_exports.add(r.expand, 1); + r.mul = tfjs_esm_exports.mul(r.add, 127.5); + r.cast = tfjs_esm_exports.cast(r.mul, "int32"); + r.tile = tfjs_esm_exports.tile(r.cast, [1, 1, 3]); + r.alpha = tfjs_esm_exports.fill([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); + return tfjs_esm_exports.concat([r.tile, r.alpha], -1); + }); +} +async function predict20(input, config3) { + if (!model21) + model21 = await load20(config3); + if (!(model21 == null ? void 0 : model21["executor"])) + return null; + t.src = tfjs_esm_exports.div(input, 255); + if (ratio !== config3.segmentation.ratio) + init3(config3); + const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + rgba = getRGBA(fgr, pha); + break; + case "alpha": + rgba = getRGBA(null, pha); + break; + case "foreground": + rgba = getRGBA(fgr, null); + break; + case "state": + rgba = getState(r1o); + break; + default: + rgba = tfjs_esm_exports.tensor(0); + } + tfjs_esm_exports.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; + return rgba; +} + +// src/segmentation/selfie.ts +var model22; +async function load21(config3) { + if (!model22 || env.initial) + model22 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model22["modelUrl"]); + return model22; +} +async function predict21(input, config3) { + var _a; + if (!model22) + model22 = await load21(config3); + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tfjs_esm_exports.image.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t2.norm = tfjs_esm_exports.div(t2.resize, constants.tf255); + t2.res = model22.execute(t2.norm); + t2.squeeze = tfjs_esm_exports.squeeze(t2.res, [0]); + t2.alpha = tfjs_esm_exports.image.resizeBilinear(t2.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t2.mul = tfjs_esm_exports.mul(t2.alpha, constants.tf255); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tfjs_esm_exports.squeeze(input); + t2.concat = tfjs_esm_exports.concat([t2.input, t2.mul], -1); + rgba = tfjs_esm_exports.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tfjs_esm_exports.cast(t2.mul, "int32"); + break; + default: + rgba = tfjs_esm_exports.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tfjs_esm_exports.dispose(t2[tensor6])); + return rgba; +} + +// src/models.ts +function validateModel(instance, model23, name) { + var _a, _b; + if (!model23) + return null; + if (!((_a = instance == null ? void 0 : instance.config) == null ? void 0 : _a.validateModels)) + return null; + const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"]; + const ignoreOps = ["biasadd", "fusedbatchnormv3", "matmul", "switch", "shape", "merge", "split", "broadcastto"]; + const ops = []; + const missing = []; + const url = model23["modelUrl"]; + const executor = model23["executor"]; + if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { + for (const kernel of Object.values(executor.graph.nodes)) { + const op = kernel.op.toLowerCase(); + if (!ops.includes(op)) + ops.push(op); + } + } else { + if (!executor && instance.config.debug) { + log("model not loaded", name); + } + } + for (const op of ops) { + if (!simpleOps.includes(op) && !ignoreOps.includes(op) && !instance.env.kernels.includes(op) && !instance.env.kernels.includes(op.replace("_", "")) && !instance.env.kernels.includes(op.replace("native", "")) && !instance.env.kernels.includes(op.replace("v2", ""))) { + missing.push(op); + } + } + if (instance.config.debug && missing.length > 0) + log("model validation failed:", name, missing); + return missing.length > 0 ? { name, missing, ops, url } : null; +} +var Models = class { + constructor(currentInstance) { + __publicField(this, "instance"); + __publicField(this, "models", {}); + this.models = {}; + this.instance = currentInstance; + } + stats() { + let totalSizeFromManifest = 0; + let totalSizeWeights = 0; + let totalSizeLoading = 0; + for (const m of Object.values(modelStats)) { + totalSizeFromManifest += m.sizeFromManifest; + totalSizeWeights += m.sizeLoadedWeights; + totalSizeLoading += m.sizeDesired; + } + const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0; + return { + numLoadedModels: Object.values(modelStats).length, + numDefinedModels: Object.keys(this.models).length, + percentageLoaded, + totalSizeFromManifest, + totalSizeWeights, + totalSizeLoading, + modelStats: Object.values(modelStats) + }; + } + reset() { + for (const model23 of Object.keys(this.models)) + this.models[model23] = null; + } + async load(instance) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A; + if (env.initial) + this.reset(); + if (instance) + this.instance = instance; + const m = {}; + m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; + m.antispoof = this.instance.config.face.enabled && ((_a = this.instance.config.face.antispoof) == null ? void 0 : _a.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; + m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; + m.faceres = this.instance.config.face.enabled && ((_c = this.instance.config.face.description) == null ? void 0 : _c.enabled) && !this.models.faceres ? load7(this.instance.config) : null; + m.emotion = this.instance.config.face.enabled && ((_d = this.instance.config.face.emotion) == null ? void 0 : _d.enabled) && !this.models.emotion ? load6(this.instance.config) : null; + m.iris = this.instance.config.face.enabled && ((_e = this.instance.config.face.iris) == null ? void 0 : _e.enabled) && !((_f = this.instance.config.face.attention) == null ? void 0 : _f.enabled) && !this.models.iris ? load4(this.instance.config) : null; + m.facemesh = this.instance.config.face.enabled && ((_g = this.instance.config.face.mesh) == null ? void 0 : _g.enabled) && !this.models.facemesh ? load5(this.instance.config) : null; + m.gear = this.instance.config.face.enabled && ((_h = this.instance.config.face["gear"]) == null ? void 0 : _h.enabled) && !this.models.gear ? load10(this.instance.config) : null; + m.ssrnetage = this.instance.config.face.enabled && ((_i = this.instance.config.face["ssrnet"]) == null ? void 0 : _i.enabled) && !this.models.ssrnetage ? load11(this.instance.config) : null; + m.ssrnetgender = this.instance.config.face.enabled && ((_j = this.instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; + m.mobilefacenet = this.instance.config.face.enabled && ((_k = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; + m.insightface = this.instance.config.face.enabled && ((_l = this.instance.config.face["insightface"]) == null ? void 0 : _l.enabled) && !this.models.insightface ? load14(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; + m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n = this.instance.config.body.modelPath) == null ? void 0 : _n.includes("efficientpose")) ? load2(this.instance.config) : null; + m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o = this.instance.config.body.modelPath) == null ? void 0 : _o.includes("movenet")) ? load17(this.instance.config) : null; + m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p = this.instance.config.body.modelPath) == null ? void 0 : _p.includes("posenet")) ? load19(this.instance.config) : null; + m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r = (_q = this.instance.config.hand.detector) == null ? void 0 : _q.modelPath) == null ? void 0 : _r.includes("handtrack")) ? loadDetect2(this.instance.config) : null; + m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s = this.instance.config.hand.detector) == null ? void 0 : _s.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton(this.instance.config) : null; + if ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect")) + [m.handpose, m.handskeleton] = !this.models.handpose ? await load15(this.instance.config) : [null, null]; + m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w = this.instance.config.object.modelPath) == null ? void 0 : _w.includes("centernet")) ? load(this.instance.config) : null; + m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x = this.instance.config.object.modelPath) == null ? void 0 : _x.includes("nanodet")) ? load18(this.instance.config) : null; + m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load21(this.instance.config) : null; + m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z = this.instance.config.segmentation.modelPath) == null ? void 0 : _z.includes("meet")) ? load16(this.instance.config) : null; + m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A = this.instance.config.segmentation.modelPath) == null ? void 0 : _A.includes("rvm")) ? load20(this.instance.config) : null; + await Promise.all([...Object.values(m)]); + for (const model23 of Object.keys(m)) + this.models[model23] = m[model23] || this.models[model23] || null; + } + list() { + const models3 = Object.keys(this.models).map((model23) => { + var _a; + return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a = this.models[model23]) == null ? void 0 : _a["modelUrl"] : null }; + }); + for (const m of models3) { + const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); + if (!stats) + continue; + m.size = modelStats[stats].sizeLoadedWeights; + m.url = modelStats[stats].url; + } + return models3; + } + loaded() { + const list = this.list(); + const loaded = list.filter((model23) => model23.loaded).map((model23) => model23.name); + return loaded; + } + validate() { + const missing = []; + for (const defined of Object.keys(this.models)) { + const model23 = this.models[defined]; + if (!model23) + continue; + const res = validateModel(this.instance, model23, defined); + if (res) + missing.push(res); + } + return missing; + } +}; + +// src/util/persons.ts +function join2(faces, bodies, hands, gestures, shape) { + var _a, _b, _c, _d, _e, _f; + let id = 0; + const persons = []; + for (const face4 of faces) { + const person2 = { id: id++, face: face4, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] }; + for (const body4 of bodies) { + if (face4.box[0] > body4.box[0] && face4.box[0] < body4.box[0] + body4.box[2] && face4.box[1] + face4.box[3] > body4.box[1] && face4.box[1] + face4.box[3] < body4.box[1] + body4.box[3]) { + person2.body = body4; + } + } + if (person2.body) { + for (const hand3 of hands) { + if (hand3.box[0] + hand3.box[2] > person2.body.box[0] && hand3.box[0] + hand3.box[2] < person2.body.box[0] + person2.body.box[2] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.left = hand3; + } + if (hand3.box[0] < person2.body.box[0] + person2.body.box[2] && hand3.box[0] > person2.body.box[0] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.right = hand3; + } + } + } + for (const gesture2 of gestures) { + if (gesture2["face"] !== void 0 && gesture2["face"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["iris"] !== void 0 && gesture2["iris"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a = person2.body) == null ? void 0 : _a.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_c = person2.hands.right) == null ? void 0 : _c.id)) + person2.gestures.push(gesture2); + } + const x = []; + const y = []; + const extractXY = (box) => { + if (box && box.length === 4) { + x.push(box[0], box[0] + box[2]); + y.push(box[1], box[1] + box[3]); + } + }; + extractXY(person2.face.box); + extractXY((_d = person2.body) == null ? void 0 : _d.box); + extractXY((_e = person2.hands.left) == null ? void 0 : _e.box); + extractXY((_f = person2.hands.right) == null ? void 0 : _f.box); + const minX = Math.min(...x); + const minY = Math.min(...y); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; + if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) + person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; + persons.push(person2); + } + return persons; +} + +// src/sample.ts +var face3 = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -269,7 +14008,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,et=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14577,559 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function aA(e){let t=(s,A="application/octet-stream")=>fetch(`data:${A};base64,${s}`).then(a=>a.blob()),n,o;switch(e.config.warmup){case"face":n=await t($2);break;case"body":case"full":n=await t(et);break;default:n=null}if(n){let s=await createImageBitmap(n);o=await e.detect(s,e.config),s.close()}return o}async function iA(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+$2;break;case"full":case"body":n="data:image/jpeg;base64,"+et;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(M.Image)o=new M.Image;else return;o.onload=async()=>{let s=I0(o.naturalWidth,o.naturalHeight);if(!s)h("Warmup: Canvas not found"),t(void 0);else{let A=s.getContext("2d");A&&A.drawImage(o,0,0);let a=await e.image(s,!0),i=a.tensor?await e.detect(a.tensor,e.config):void 0;t(i)}},n?o.src=n:t(void 0)})}async function lA(e){let t=s=>Buffer.from(s,"base64"),n;e.config.warmup==="face"?n=t($2):n=t(et);let o;if("node"in r&&r.getBackend()==="tensorflow"){let s=r.node.decodeJpeg(n),A=r.expandDims(s,0);e.tf.dispose(s),o=await e.detect(A,e.config),e.tf.dispose(A)}else e.config.debug&&h("Warmup tfjs-node not loaded");return o}async function cA(e){let t;return typeof createImageBitmap=="function"?t=await aA(e):typeof Image!="undefined"||M.Canvas!==void 0?t=await iA(e):t=await lA(e),t}async function xA(e){var i,c,x,y;if(!r.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=r.getBackend(),n=r.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;r.env().set("ENGINE_COMPILE_ONLY",!0);let o=r.engine().state.numTensors,s=[];for(let[l,f]of Object.entries(e.models).filter(([d,u])=>d!==null&&u!==null)){let d=(f==null?void 0:f.modelSignature)&&((c=(i=f==null?void 0:f.inputs)==null?void 0:i[0])==null?void 0:c.shape)?[...f.inputs[0].shape]:[1,64,64,3],u=(f==null?void 0:f.modelSignature)&&((y=(x=f==null?void 0:f.inputs)==null?void 0:x[0])==null?void 0:y.dtype)?f.inputs[0].dtype:"float32";for(let g=0;gr.dispose(P)):r.dispose(g)}catch(g){e.config.debug&&h("compile fail model:",l)}r.dispose(m)}let A=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&h("compile pass:",{models:s,kernels:A.length}),r.env().set("ENGINE_COMPILE_ONLY",!1);let a=r.engine().state.numTensors;a-o>0&&h("tensor leak:",a-o)}async function Fn(e,t){await Je(e,!1);let n=T();return e.state="warmup",t&&(e.config=J(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?_0():new Promise(async o=>{await e.models.load(),await xA(e);let s=await cA(e),A=T();e.config.debug&&h("warmup",e.config.warmup,Math.round(A-n),"ms"),e.emit("warmup"),o(s)})}var qe,s2,A2,tt,pe,Bn=class{constructor(t){E(this,"version");E(this,"config");E(this,"result");E(this,"state");E(this,"process");E(this,"tf");E(this,"env",M);E(this,"draw",pt);E(this,"match",h5);E(this,"models");E(this,"events");E(this,"faceTriangulation");E(this,"faceUVMap");E(this,"performance");Ne(this,qe,void 0);Ne(this,s2,void 0);Ne(this,A2,void 0);E(this,"analyze",(...t)=>{if(!V0(this,s2))return;let n=this.tf.engine().state.numTensors,o=V0(this,qe);Ye(this,qe,n);let s=n-o;s!==0&&h(...t,s)});Ne(this,tt,t=>{if(!V0(this,A2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof r.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});E(this,"webcam",new y2);E(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});Ne(this,pe,{});let n=(Ke.tfjs||r.version_core).replace(/-(.*)/,"");Ie.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,Ie.modelBasePath=M.browser?"../models/":"file://models/",this.version=it,Object.defineProperty(this,"version",{value:it}),this.config=JSON.parse(JSON.stringify(Ie)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=J(this.config,t)),K5(this.config),this.tf=r,this.state="idle",Ye(this,qe,0),Ye(this,s2,!1),Ye(this,A2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new r2(this),mt(),this.result=_0(),this.process={tensor:null,canvas:null},this.faceTriangulation=H1,this.faceUVMap=G1,_2(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&h(`version: ${this.version}`),this.config.debug&&h(`tfjs version: ${this.tf.version["tfjs-core"]}`);let o=JSON.parse(JSON.stringify(this.env));delete o.kernels,delete o.initial,delete o.perfadd,this.config.debug&&h("environment:",o)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(Ie)),this.config.backend=t,At(),M.initial=!0}validate(t){let n=ot(Ie,t||this.config);return n.length===0&&(this.config=J(this.config,t)),n}now(){return T()}image(t,n=!1){return c2(t,this.config,n)}async segmentation(t,n){var A,a,i;if(n&&(this.config=J(this.config,n)),!this.config.segmentation.enabled)return null;let o=await c2(t,this.config);if(!o.tensor)return null;let s=null;return(A=this.config.segmentation.modelPath)!=null&&A.includes("rvm")&&(s=await In(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("meet")&&(s=await xn(o.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("selfie")&&(s=await On(o.tensor,this.config)),r.dispose(o.tensor),s}compare(t,n){return Y5(this.config,t,n)}async init(){await Je(this,!0),await this.tf.ready(),At()}async load(t){this.state="load";let n=T(),o=Object.values(this.models).filter(a=>a).length;t&&(this.config=J(this.config,t)),this.env.initial&&(await Je(this,!1)||h("error: backend check failed"),await r.ready(),this.env.browser&&(this.config.debug&&h("configuration:",this.config),this.config.debug&&h("tf flags:",this.tf.ENV.flags))),await this.models.load(),this.env.initial&&this.config.debug&&h("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models).filter(a=>a).length!==o&&(this.models.validate(),this.emit("load"));let A=Math.trunc(T()-n);A>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+A:A)}next(t=this.result){return cn(t,this.config)}async warmup(t){let n=T(),o=await Fn(this,t),s=T();return this.performance.warmup=Math.trunc(s-n),o}async profile(t,n){let o=await this.tf.profile(()=>this.detect(t,n)),s={},A=0;for(let i of o.kernels){let c=Number(i.kernelTimeMs)||0;s[i.name]?s[i.name]+=c:s[i.name]=c,A+=c}let a=[];Object.entries(s).forEach(i=>a.push({kernel:i[0],time:i[1],perc:0}));for(let i of a)i.perc=Math.round(1e3*i.time/A)/1e3,i.time=Math.round(1e3*i.time)/1e3;return a.sort((i,c)=>c.time-i.time),a.length=20,a}async detect(t,n){return this.state="detect",new Promise(async o=>{var g,P,v,p,b,j,k,I,B,q,W,Z,K,R,D,A0,H,a0,n0,C,F;this.state="config";let s;this.config=J(this.config,n),this.state="check";let A=V0(this,tt).call(this,t);A&&(h(A,t),this.emit("error"),o(_0(A)));let a=T();await this.load(),s=T(),this.state="image";let i=await c2(t,this.config);if(this.process=i,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(T()-s):Math.trunc(T()-s),this.analyze("Get Image:"),!i.tensor){this.config.debug&&h("could not convert input to tensor"),this.emit("error"),o(_0("could not convert input to tensor"));return}this.emit("image"),s=T(),this.config.skipAllowed=await U5(this.config,i.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(T()-s):Math.trunc(T()-s),this.analyze("Check Changed:");let c=[],x=[],y=[],l=[];this.state="detect:face",this.config.async?(c=this.config.face.enabled?o5(this,i.tensor):[],this.performance.face&&delete this.performance.face):(s=T(),c=this.config.face.enabled?await o5(this,i.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(T()-s):Math.trunc(T()-s)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(c=await c),this.analyze("Start Body:"),this.state="detect:body";let f=this.config.body.maxDetected===-1?J(this.config,{body:{maxDetected:this.config.face.enabled?1*c.length:1}}):this.config;this.config.async?((g=this.config.body.modelPath)!=null&&g.includes("posenet")?x=this.config.body.enabled?E5(i.tensor,f):[]:(P=this.config.body.modelPath)!=null&&P.includes("blazepose")?x=this.config.body.enabled?Tt(i.tensor,f):[]:(v=this.config.body.modelPath)!=null&&v.includes("efficientpose")?x=this.config.body.enabled?Et(i.tensor,f):[]:(p=this.config.body.modelPath)!=null&&p.includes("movenet")&&(x=this.config.body.enabled?T5(i.tensor,f):[]),this.performance.body&&delete this.performance.body):(s=T(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?x=this.config.body.enabled?await E5(i.tensor,f):[]:(j=this.config.body.modelPath)!=null&&j.includes("blazepose")?x=this.config.body.enabled?await Tt(i.tensor,f):[]:(k=this.config.body.modelPath)!=null&&k.includes("efficientpose")?x=this.config.body.enabled?await Et(i.tensor,f):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(x=this.config.body.enabled?await T5(i.tensor,f):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(T()-s):Math.trunc(T()-s)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let d=this.config.hand.maxDetected===-1?J(this.config,{hand:{maxDetected:this.config.face.enabled?2*c.length:1}}):this.config;this.config.async?((q=(B=this.config.hand.detector)==null?void 0:B.modelPath)!=null&&q.includes("handdetect")?y=this.config.hand.enabled?i5(i.tensor,d):[]:(Z=(W=this.config.hand.detector)==null?void 0:W.modelPath)!=null&&Z.includes("handtrack")&&(y=this.config.hand.enabled?x5(i.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(s=T(),(R=(K=this.config.hand.detector)==null?void 0:K.modelPath)!=null&&R.includes("handdetect")?y=this.config.hand.enabled?await i5(i.tensor,d):[]:(A0=(D=this.config.hand.detector)==null?void 0:D.modelPath)!=null&&A0.includes("handtrack")&&(y=this.config.hand.enabled?await x5(i.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(T()-s):Math.trunc(T()-s)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((H=this.config.object.modelPath)!=null&&H.includes("nanodet")?l=this.config.object.enabled?R5(i.tensor,this.config):[]:(a0=this.config.object.modelPath)!=null&&a0.includes("centernet")&&(l=this.config.object.enabled?Mt(i.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(s=T(),(n0=this.config.object.modelPath)!=null&&n0.includes("nanodet")?l=this.config.object.enabled?await R5(i.tensor,this.config):[]:(C=this.config.object.modelPath)!=null&&C.includes("centernet")&&(l=this.config.object.enabled?await Mt(i.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(T()-s):Math.trunc(T()-s)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([c,x,y,l]=await Promise.all([c,x,y,l])),this.state="detect:gesture";let u=[];this.config.gesture.enabled&&(s=T(),u=[...F3(c),...D3(x),...H3(y),...B3(c)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(T()-s):Math.trunc(T()-s)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(T()-a):Math.trunc(T()-a);let m=((F=this.process.tensor)==null?void 0:F.shape)||[0,0,0,0];this.result={face:c,body:x,hand:y,gesture:u,object:l,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:m[2],height:m[1],get persons(){return Dn(c,x,y,u,m)}},r.dispose(i.tensor),this.emit("detect"),this.state="idle",o(this.result)})}async sleep(t){return new Promise(n=>{setTimeout(n,t)})}async video(t,n=!0,o=0){n?(V0(this,pe)[t.id]||(this.config.debug&&h("video start",t.id),V0(this,pe)[t.id]=!0),!t.paused&&V0(this,pe)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),V0(this,pe)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&h("video stop",t.id),V0(this,pe)[t.id]=!1)}};qe=new WeakMap,s2=new WeakMap,A2=new WeakMap,tt=new WeakMap,pe=new WeakMap;export{d2 as Env,Bn as Human,Bn as default,Ie as defaults,pt as draw,_0 as empty,M as env,h5 as match,Wn as models}; +2Q==`; + +// src/warmup.ts +async function warmupBitmap(instance) { + const b64toBlob = (base64, type = "application/octet-stream") => fetch(`data:${type};base64,${base64}`).then((res2) => res2.blob()); + let blob; + let res; + switch (instance.config.warmup) { + case "face": + blob = await b64toBlob(face3); + break; + case "body": + case "full": + blob = await b64toBlob(body3); + break; + default: + blob = null; + } + if (blob) { + const bitmap = await createImageBitmap(blob); + res = await instance.detect(bitmap, instance.config); + bitmap.close(); + } + return res; +} +async function warmupCanvas(instance) { + return new Promise((resolve) => { + let src; + switch (instance.config.warmup) { + case "face": + src = "data:image/jpeg;base64," + face3; + break; + case "full": + case "body": + src = "data:image/jpeg;base64," + body3; + break; + default: + src = ""; + } + let img; + if (typeof Image !== "undefined") + img = new Image(); + else if (env.Image) + img = new env.Image(); + else + return; + img.onload = async () => { + const canvas3 = canvas(img.naturalWidth, img.naturalHeight); + if (!canvas3) { + log("Warmup: Canvas not found"); + resolve(void 0); + } else { + const ctx = canvas3.getContext("2d"); + if (ctx) + ctx.drawImage(img, 0, 0); + const tensor6 = await instance.image(canvas3, true); + const res = tensor6.tensor ? await instance.detect(tensor6.tensor, instance.config) : void 0; + resolve(res); + } + }; + if (src) + img.src = src; + else + resolve(void 0); + }); +} +async function warmupNode(instance) { + const atob = (str) => Buffer.from(str, "base64"); + let img; + if (instance.config.warmup === "face") + img = atob(face3); + else + img = atob(body3); + let res; + if ("node" in tfjs_esm_exports && tfjs_esm_exports.getBackend() === "tensorflow") { + const data = tfjs_esm_exports["node"].decodeJpeg(img); + const expanded = tfjs_esm_exports.expandDims(data, 0); + instance.tf.dispose(data); + res = await instance.detect(expanded, instance.config); + instance.tf.dispose(expanded); + } else { + if (instance.config.debug) + log("Warmup tfjs-node not loaded"); + } + return res; +} +async function runInference(instance) { + let res; + if (typeof createImageBitmap === "function") + res = await warmupBitmap(instance); + else if (typeof Image !== "undefined" || env.Canvas !== void 0) + res = await warmupCanvas(instance); + else + res = await warmupNode(instance); + return res; +} +async function runCompile(instance) { + var _a, _b, _c, _d; + if (!tfjs_esm_exports.env().flagRegistry.ENGINE_COMPILE_ONLY) + return; + const backendType = tfjs_esm_exports.getBackend(); + const webGLBackend = tfjs_esm_exports.backend(); + if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { + return; + } + tfjs_esm_exports.env().set("ENGINE_COMPILE_ONLY", true); + const numTensorsStart = tfjs_esm_exports.engine().state.numTensors; + const compiledModels = []; + for (const [modelName, model23] of Object.entries(instance.models).filter(([key, val]) => key !== null && val !== null)) { + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d = (_c = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c[0]) == null ? void 0 : _d.dtype) ? model23.inputs[0].dtype : "float32"; + for (let dim = 0; dim < shape.length; dim++) { + if (shape[dim] === -1) + shape[dim] = dim === 0 ? 1 : 64; + } + const tensor6 = tfjs_esm_exports.zeros(shape, dtype); + try { + const res = model23.execute(tensor6); + compiledModels.push(modelName); + if (Array.isArray(res)) + res.forEach((t2) => tfjs_esm_exports.dispose(t2)); + else + tfjs_esm_exports.dispose(res); + } catch (e) { + if (instance.config.debug) + log("compile fail model:", modelName); + } + tfjs_esm_exports.dispose(tensor6); + } + const kernels = await webGLBackend["checkCompileCompletionAsync"](); + webGLBackend["getUniformLocations"](); + if (instance.config.debug) + log("compile pass:", { models: compiledModels, kernels: kernels.length }); + tfjs_esm_exports.env().set("ENGINE_COMPILE_ONLY", false); + const numTensorsEnd = tfjs_esm_exports.engine().state.numTensors; + if (numTensorsEnd - numTensorsStart > 0) + log("tensor leak:", numTensorsEnd - numTensorsStart); +} +async function warmup(instance, userConfig) { + await check(instance, false); + const t0 = now(); + instance.state = "warmup"; + if (userConfig) + instance.config = mergeDeep(instance.config, userConfig); + if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === "none") { + return empty(); + } + return new Promise(async (resolve) => { + await instance.models.load(); + await runCompile(instance); + const res = await runInference(instance); + const t1 = now(); + if (instance.config.debug) + log("warmup", instance.config.warmup, Math.round(t1 - t0), "ms"); + instance.emit("warmup"); + resolve(res); + }); +} + +// src/human.ts +var _numTensors, _analyzeMemoryLeaks, _checkSanity, _sanity, _loops; +var Human = class { + constructor(userConfig) { + __publicField(this, "version"); + __publicField(this, "config"); + __publicField(this, "result"); + __publicField(this, "state"); + __publicField(this, "process"); + __publicField(this, "tf"); + __publicField(this, "env", env); + __publicField(this, "draw", draw_exports); + __publicField(this, "match", match_exports); + __publicField(this, "models"); + __publicField(this, "events"); + __publicField(this, "faceTriangulation"); + __publicField(this, "faceUVMap"); + __publicField(this, "performance"); + __privateAdd(this, _numTensors, void 0); + __privateAdd(this, _analyzeMemoryLeaks, void 0); + __privateAdd(this, _checkSanity, void 0); + __publicField(this, "analyze", (...msg) => { + if (!__privateGet(this, _analyzeMemoryLeaks)) + return; + const currentTensors = this.tf.engine().state.numTensors; + const previousTensors = __privateGet(this, _numTensors); + __privateSet(this, _numTensors, currentTensors); + const leaked = currentTensors - previousTensors; + if (leaked !== 0) + log(...msg, leaked); + }); + __privateAdd(this, _sanity, (input) => { + if (!__privateGet(this, _checkSanity)) + return null; + if (!input) + return "input is not defined"; + if (this.env.node && !(input instanceof tfjs_esm_exports.Tensor)) + return "input must be a tensor"; + try { + this.tf.getBackend(); + } catch (e) { + return "backend not loaded"; + } + return null; + }); + __publicField(this, "webcam", new WebCam()); + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) + this.events.dispatchEvent(new Event(event)); + }); + __privateAdd(this, _loops, {}); + const tfVersion = (version7.tfjs || tfjs_esm_exports.version_core).replace(/-(.*)/, ""); + config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; + config.modelBasePath = env.browser ? "../models/" : "file://models/"; + this.version = version8; + Object.defineProperty(this, "version", { value: version8 }); + this.config = JSON.parse(JSON.stringify(config)); + Object.seal(this.config); + this.config.cacheModels = typeof indexedDB !== "undefined"; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + setModelLoadOptions(this.config); + this.tf = tfjs_esm_exports; + this.state = "idle"; + __privateSet(this, _numTensors, 0); + __privateSet(this, _analyzeMemoryLeaks, false); + __privateSet(this, _checkSanity, false); + this.performance = {}; + this.events = typeof EventTarget !== "undefined" ? new EventTarget() : void 0; + this.models = new Models(this); + init2(); + this.result = empty(); + this.process = { tensor: null, canvas: null }; + this.faceTriangulation = triangulation; + this.faceUVMap = uvmap; + validateModel(this, null, ""); + this.emit("create"); + if (this.config.debug || this.env.browser) + log(`version: ${this.version}`); + if (this.config.debug) + log(`tfjs version: ${this.tf.version["tfjs-core"]}`); + const envTemp = JSON.parse(JSON.stringify(this.env)); + delete envTemp.kernels; + delete envTemp.initial; + delete envTemp.perfadd; + if (this.config.debug) + log("environment:", envTemp); + } + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) + this.config = mergeDeep(this.config, userConfig); + return msgs; + } + now() { + return now(); + } + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + async segmentation(input, userConfig) { + var _a, _b, _c; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (!this.config.segmentation.enabled) + return null; + const processed = await process2(input, this.config); + if (!processed.tensor) + return null; + let tensor6 = null; + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) + tensor6 = await predict20(processed.tensor, this.config); + if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) + tensor6 = await predict16(processed.tensor, this.config); + if ((_c = this.config.segmentation.modelPath) == null ? void 0 : _c.includes("selfie")) + tensor6 = await predict21(processed.tensor, this.config); + tfjs_esm_exports.dispose(processed.tensor); + return tensor6; + } + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + async load(userConfig) { + this.state = "load"; + const timeStamp = now(); + const count2 = Object.values(this.models.models).filter((model23) => model23).length; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (this.env.initial) { + if (!await check(this, false)) + log("error: backend check failed"); + await tfjs_esm_exports.ready(); + if (this.env.browser) { + if (this.config.debug) + log("configuration:", this.config); + if (this.config.debug) + log("tf flags:", this.tf.ENV.flags); + } + } + await this.models.load(this); + if (this.env.initial && this.config.debug) + log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); + this.env.initial = false; + const loaded = Object.values(this.models.models).filter((model23) => model23).length; + if (loaded !== count2) { + this.models.validate(); + this.emit("load"); + } + const current = Math.trunc(now() - timeStamp); + if (current > (this.performance.loadModels || 0)) + this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current; + } + next(result = this.result) { + return calc2(result, this.config); + } + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + async profile(input, userConfig) { + const profile = await this.tf.profile(() => this.detect(input, userConfig)); + const kernels = {}; + let total = 0; + for (const kernel of profile.kernels) { + const ms = Number(kernel.kernelTimeMs) || 0; + if (kernels[kernel.name]) + kernels[kernel.name] += ms; + else + kernels[kernel.name] = ms; + total += ms; + } + const kernelArr = []; + Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1], perc: 0 })); + for (const kernel of kernelArr) { + kernel.perc = Math.round(1e3 * kernel.time / total) / 1e3; + kernel.time = Math.round(1e3 * kernel.time) / 1e3; + } + kernelArr.sort((a, b) => b.time - a.time); + kernelArr.length = 20; + return kernelArr; + } + async detect(input, userConfig) { + this.state = "detect"; + return new Promise(async (resolve) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u; + this.state = "config"; + let timeStamp; + this.config = mergeDeep(this.config, userConfig); + this.state = "check"; + const error = __privateGet(this, _sanity).call(this, input); + if (error) { + log(error, input); + this.emit("error"); + resolve(empty(error)); + } + const timeStart = now(); + await this.load(); + timeStamp = now(); + this.state = "image"; + const img = await process2(input, this.config); + this.process = img; + this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Get Image:"); + if (!img.tensor) { + if (this.config.debug) + log("could not convert input to tensor"); + this.emit("error"); + resolve(empty("could not convert input to tensor")); + return; + } + this.emit("image"); + timeStamp = now(); + this.config.skipAllowed = await skip(this.config, img.tensor); + this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; + if (!this.performance.totalFrames) + this.performance.totalFrames = 0; + if (!this.performance.cachedFrames) + this.performance.cachedFrames = 0; + this.performance.totalFrames++; + if (this.config.skipAllowed) + this.performance.cachedFrames++; + this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Check Changed:"); + let faceRes = []; + let bodyRes = []; + let handRes = []; + let objectRes = []; + this.state = "detect:face"; + if (this.config.async) { + faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : []; + if (this.performance.face) + delete this.performance.face; + } else { + timeStamp = now(); + faceRes = this.config.face.enabled ? await detectFace(this, img.tensor) : []; + this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) + faceRes = await faceRes; + this.analyze("Start Body:"); + this.state = "detect:body"; + const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet")) + bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; + else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; + else if ((_c = this.config.body.modelPath) == null ? void 0 : _c.includes("efficientpose")) + bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; + else if ((_d = this.config.body.modelPath) == null ? void 0 : _d.includes("movenet")) + bodyRes = this.config.body.enabled ? predict17(img.tensor, bodyConfig) : []; + if (this.performance.body) + delete this.performance.body; + } else { + timeStamp = now(); + if ((_e = this.config.body.modelPath) == null ? void 0 : _e.includes("posenet")) + bodyRes = this.config.body.enabled ? await predict19(img.tensor, bodyConfig) : []; + else if ((_f = this.config.body.modelPath) == null ? void 0 : _f.includes("blazepose")) + bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; + else if ((_g = this.config.body.modelPath) == null ? void 0 : _g.includes("efficientpose")) + bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; + else if ((_h = this.config.body.modelPath) == null ? void 0 : _h.includes("movenet")) + bodyRes = this.config.body.enabled ? await predict17(img.tensor, bodyConfig) : []; + this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Body:"); + this.analyze("Start Hand:"); + this.state = "detect:hand"; + const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_j = (_i = this.config.hand.detector) == null ? void 0 : _i.modelPath) == null ? void 0 : _j.includes("handdetect")) + handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; + else if ((_l = (_k = this.config.hand.detector) == null ? void 0 : _k.modelPath) == null ? void 0 : _l.includes("handtrack")) + handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; + if (this.performance.hand) + delete this.performance.hand; + } else { + timeStamp = now(); + if ((_n = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n.includes("handdetect")) + handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; + else if ((_p = (_o = this.config.hand.detector) == null ? void 0 : _o.modelPath) == null ? void 0 : _p.includes("handtrack")) + handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; + this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Hand:"); + this.analyze("Start Object:"); + this.state = "detect:object"; + if (this.config.async) { + if ((_q = this.config.object.modelPath) == null ? void 0 : _q.includes("nanodet")) + objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; + else if ((_r = this.config.object.modelPath) == null ? void 0 : _r.includes("centernet")) + objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; + if (this.performance.object) + delete this.performance.object; + } else { + timeStamp = now(); + if ((_s = this.config.object.modelPath) == null ? void 0 : _s.includes("nanodet")) + objectRes = this.config.object.enabled ? await predict18(img.tensor, this.config) : []; + else if ((_t = this.config.object.modelPath) == null ? void 0 : _t.includes("centernet")) + objectRes = this.config.object.enabled ? await predict2(img.tensor, this.config) : []; + this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Object:"); + this.state = "detect:await"; + if (this.config.async) + [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]); + this.state = "detect:gesture"; + let gestureRes = []; + if (this.config.gesture.enabled) { + timeStamp = now(); + gestureRes = [...face2(faceRes), ...body2(bodyRes), ...hand2(handRes), ...iris2(faceRes)]; + if (!this.config.async) + this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + else if (this.performance.gesture) + delete this.performance.gesture; + } + this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart); + const shape = ((_u = this.process.tensor) == null ? void 0 : _u.shape) || [0, 0, 0, 0]; + this.result = { + face: faceRes, + body: bodyRes, + hand: handRes, + gesture: gestureRes, + object: objectRes, + performance: this.performance, + canvas: this.process.canvas, + timestamp: Date.now(), + error: null, + width: shape[2], + height: shape[1], + get persons() { + return join2(faceRes, bodyRes, handRes, gestureRes, shape); + } + }; + tfjs_esm_exports.dispose(img.tensor); + this.emit("detect"); + this.state = "idle"; + resolve(this.result); + }); + } + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + async video(element, run = true, delay = 0) { + if (run) { + if (!__privateGet(this, _loops)[element.id]) { + if (this.config.debug) + log("video start", element.id); + __privateGet(this, _loops)[element.id] = true; + } + if (!element.paused && __privateGet(this, _loops)[element.id] && element.readyState >= 2) + await this.detect(element); + if (delay > 0) + await this.sleep(delay); + if (__privateGet(this, _loops)[element.id]) + requestAnimationFrame(() => this.video(element, run, delay)); + } else { + if (this.config.debug) + log("video stop", element.id); + __privateGet(this, _loops)[element.id] = false; + } + } +}; +_numTensors = new WeakMap(); +_analyzeMemoryLeaks = new WeakMap(); +_checkSanity = new WeakMap(); +_sanity = new WeakMap(); +_loops = new WeakMap(); +export { + Env, + Human, + Human as default, + config as defaults, + draw_exports as draw, + empty, + env, + match_exports as match, + models_exports2 as models +}; diff --git a/dist/human.esm.js b/dist/human.esm.js index 463c5b5a..de625a38 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -6,12 +6,12 @@ var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __require = /* @__PURE__ */ ((x6) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x6, { +var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] -}) : x6)(function(x6) { +}) : x)(function(x) { if (typeof require !== "undefined") return require.apply(this, arguments); - throw new Error('Dynamic require of "' + x6 + '" is not supported'); + throw new Error('Dynamic require of "' + x + '" is not supported'); }); var __export = (target, all2) => { for (var name in all2) @@ -43,623 +43,623 @@ var __privateSet = (obj, member, value, setter) => { // dist/tfjs.esm.js var tfjs_esm_exports = {}; __export(tfjs_esm_exports, { - Abs: () => sn, - Acos: () => Li, - Acosh: () => Bi, - AdadeltaOptimizer: () => xi, - AdagradOptimizer: () => yi, - AdamOptimizer: () => bi, - AdamaxOptimizer: () => Ci, - Add: () => _r, - AddN: () => an, - All: () => oa, - Any: () => na, - ArgMax: () => un, - ArgMin: () => ja, - Asin: () => Vi, - Asinh: () => zi, - Atan: () => Wi, - Atan2: () => sa, - Atanh: () => Ui, - AvgPool: () => pn, + Abs: () => gs, + Acos: () => sa, + Acosh: () => aa, + AdadeltaOptimizer: () => Ei, + AdagradOptimizer: () => $i, + AdamOptimizer: () => Ai, + AdamaxOptimizer: () => Ri, + Add: () => eo, + AddN: () => Mo, + All: () => Lo, + Any: () => Bo, + ArgMax: () => Vo, + ArgMin: () => Za, + Asin: () => ia, + Asinh: () => ua, + Atan: () => pa, + Atan2: () => la, + Atanh: () => ca, + AvgPool: () => zo, AvgPool3D: () => ip, - AvgPool3DGrad: () => Fm, - AvgPoolGrad: () => Am, - BackendWasm: () => Gl, - BatchMatMul: () => cn, - BatchToSpaceND: () => hs, - Bincount: () => up, - BroadcastArgs: () => pp, - BroadcastTo: () => Tne, - Cast: () => to, - Ceil: () => ro, - ClipByValue: () => Ro, - Complex: () => aa, - ComplexAbs: () => cp, - Concat: () => gs, - Conv2D: () => ln, - Conv2DBackpropFilter: () => lp, - Conv2DBackpropInput: () => mn, - Conv3D: () => mp, - Conv3DBackpropFilterV2: () => Dm, - Conv3DBackpropInputV2: () => fp, - Cos: () => fn, - Cosh: () => dn, - CropAndResize: () => xn, - Cumprod: () => hn, - Cumsum: () => gn, - DataStorage: () => rn, - DenseBincount: () => dp, - DepthToSpace: () => yn, - DepthwiseConv2dNative: () => bn, - DepthwiseConv2dNativeBackpropFilter: () => hp, - DepthwiseConv2dNativeBackpropInput: () => gp, - Diag: () => xp, - Dilation2D: () => yp, - Dilation2DBackpropFilter: () => vb, - Dilation2DBackpropInput: () => Sb, - ENV: () => Cb, - Einsum: () => Xa, - Elu: () => In, - EluGrad: () => Pm, - Environment: () => Qc, - Equal: () => oo, - Erf: () => Gi, - Exp: () => no, - ExpandDims: () => xs, - Expm1: () => wn, - FFT: () => bp, - Fill: () => ys, - FlipLeftRight: () => Sn, - Floor: () => so, - FloorDiv: () => vn, + AvgPool3DGrad: () => Im, + AvgPoolGrad: () => wm, + BackendWasm: () => Pl, + BatchMatMul: () => Wo, + BatchToSpaceND: () => xs, + Bincount: () => Ja, + BroadcastArgs: () => up, + BroadcastTo: () => wne, + Cast: () => co, + Ceil: () => Uo, + ClipByValue: () => lo, + Complex: () => ei, + ComplexAbs: () => pp, + Concat: () => ys, + Conv2D: () => Go, + Conv2DBackpropFilter: () => cp, + Conv2DBackpropInput: () => Ho, + Conv3D: () => lp, + Conv3DBackpropFilterV2: () => vm, + Conv3DBackpropInputV2: () => mp, + Cos: () => qo, + Cosh: () => Ko, + CropAndResize: () => Yo, + Cumprod: () => jo, + Cumsum: () => Xo, + DataStorage: () => Do, + DenseBincount: () => ti, + DepthToSpace: () => Qo, + DepthwiseConv2dNative: () => Zo, + DepthwiseConv2dNativeBackpropFilter: () => dp, + DepthwiseConv2dNativeBackpropInput: () => fp, + Diag: () => hp, + Dilation2D: () => gp, + Dilation2DBackpropFilter: () => bb, + Dilation2DBackpropInput: () => yb, + ENV: () => hb, + Einsum: () => ri, + Elu: () => en, + EluGrad: () => km, + Environment: () => Uc, + Equal: () => tn, + Erf: () => ma, + Exp: () => rn, + ExpandDims: () => bs, + Expm1: () => da, + FFT: () => oi, + Fill: () => Cs, + FlipLeftRight: () => on, + Floor: () => nn, + FloorDiv: () => sn, FromPixels: () => Zi, - FusedBatchNorm: () => kn, - FusedConv2D: () => Do, - FusedDepthwiseConv2D: () => Po, + FusedBatchNorm: () => an, + FusedConv2D: () => ho, + FusedDepthwiseConv2D: () => go, GPGPUContext: () => Fu, - GatherNd: () => Tn, - GatherV2: () => bs, - GraphModel: () => bl, - Greater: () => ao, - GreaterEqual: () => io, - IFFT: () => Cp, - Identity: () => uo, - Imag: () => Ya, - IsFinite: () => Hi, - IsInf: () => qi, - IsNan: () => ia, - KernelBackend: () => Jr, - LRN: () => wp, - LRNGrad: () => Om, - LeakyRelu: () => Nn, - Less: () => po, - LessEqual: () => co, - LinSpace: () => Ip, - Log: () => lo, - Log1p: () => Ki, - LogSoftmax: () => Nne, - LogicalAnd: () => _n, - LogicalNot: () => En, - LogicalOr: () => ua, - LogicalXor: () => g0, - LowerBound: () => _ne, - MathBackendCPU: () => Si, - MathBackendWebGL: () => Ni, - Max: () => $n, - MaxPool: () => Rn, - MaxPool3D: () => Sp, - MaxPool3DGrad: () => Lm, - MaxPoolGrad: () => Mm, - MaxPoolWithArgmax: () => vp, - Maximum: () => mo, - Mean: () => An, - Min: () => Fn, - Minimum: () => fo, - MirrorPad: () => Dn, - Mod: () => ji, - MomentumOptimizer: () => Ii, - Multinomial: () => kp, - Multiply: () => ho, - Neg: () => Pn, - NonMaxSuppressionV3: () => On, - NonMaxSuppressionV4: () => pa, - NonMaxSuppressionV5: () => Mn, - NotEqual: () => go, - OP_SCOPE_SUFFIX: () => Ub, - OneHot: () => ca, - OnesLike: () => Cs, + GatherNd: () => un, + GatherV2: () => Ss, + GraphModel: () => ll, + Greater: () => pn, + GreaterEqual: () => cn, + IFFT: () => ni, + Identity: () => mo, + Imag: () => si, + IsFinite: () => fa, + IsInf: () => ha, + IsNan: () => ln, + KernelBackend: () => Zr, + LRN: () => yp, + LRNGrad: () => Nm, + LeakyRelu: () => mn, + Less: () => dn, + LessEqual: () => fn, + LinSpace: () => xp, + Log: () => hn, + Log1p: () => ga, + LogSoftmax: () => Ine, + LogicalAnd: () => gn, + LogicalNot: () => xn, + LogicalOr: () => xa, + LogicalXor: () => GI, + LowerBound: () => vne, + MathBackendCPU: () => Oi, + MathBackendWebGL: () => Bi, + Max: () => yn, + MaxPool: () => Cn, + MaxPool3D: () => bp, + MaxPool3DGrad: () => _m, + MaxPoolGrad: () => Tm, + MaxPoolWithArgmax: () => Cp, + Maximum: () => bn, + Mean: () => Sn, + Min: () => wn, + Minimum: () => In, + MirrorPad: () => vn, + Mod: () => ya, + MomentumOptimizer: () => Fi, + Multinomial: () => Sp, + Multiply: () => kn, + Neg: () => ws, + NonMaxSuppressionV3: () => Tn, + NonMaxSuppressionV4: () => ba, + NonMaxSuppressionV5: () => _n, + NotEqual: () => Nn, + OP_SCOPE_SUFFIX: () => Lb, + OneHot: () => En, + OnesLike: () => Is, Optimizer: () => wr, OptimizerConstructors: () => ns, - Pack: () => Is, - PadV2: () => Ln, - Pool: () => Ene, - Pow: () => Bn, - Prelu: () => Vn, - Prod: () => Ao, - RMSPropOptimizer: () => wi, - RaggedGather: () => Tp, - RaggedRange: () => Np, - RaggedTensorToTensor: () => _p, - Range: () => ws, - Rank: () => Fb, - Real: () => la, - RealDiv: () => Cn, - Reciprocal: () => ma, + Pack: () => vs, + PadV2: () => $n, + Pool: () => kne, + Pow: () => An, + Prelu: () => Rn, + Prod: () => Fn, + RMSPropOptimizer: () => Di, + RaggedGather: () => wp, + RaggedRange: () => Ip, + RaggedTensorToTensor: () => vp, + Range: () => ks, + Rank: () => _b, + Real: () => ai, + RealDiv: () => Jo, + Reciprocal: () => Dn, Reduction: () => Et, - Relu: () => zn, - Relu6: () => Gn, - Reshape: () => Ss, - ResizeBilinear: () => Un, - ResizeBilinearGrad: () => Vm, - ResizeNearestNeighbor: () => Wn, - ResizeNearestNeighborGrad: () => Bm, - Reverse: () => fa, + Relu: () => On, + Relu6: () => Ln, + Reshape: () => Ns, + ResizeBilinear: () => Mn, + ResizeBilinearGrad: () => $m, + ResizeNearestNeighbor: () => Pn, + ResizeNearestNeighborGrad: () => Em, + Reverse: () => Bn, RotateWithOffset: () => es, - Round: () => da, - Rsqrt: () => xo, - SGDOptimizer: () => Us, - ScatterNd: () => Hn, - SearchSorted: () => Ep, - Select: () => vs, + Round: () => Ca, + Rsqrt: () => Vn, + SGDOptimizer: () => qs, + ScatterNd: () => zn, + SearchSorted: () => ii, + Select: () => Ts, Selu: () => Xi, - Sigmoid: () => yo, + Sigmoid: () => Un, Sign: () => Yi, - Sin: () => Kn, - Sinh: () => ha, - Slice: () => qn, - Softmax: () => Xn, + Sin: () => Wn, + Sinh: () => Sa, + Slice: () => _s, + Softmax: () => qn, Softplus: () => Qi, - SpaceToBatchND: () => ks, - SparseFillEmptyRows: () => Qa, - SparseReshape: () => ga, - SparseSegmentMean: () => Za, - SparseSegmentSum: () => Ja, - SparseToDense: () => ei, - SplitV: () => Ts, - Sqrt: () => bo, - Square: () => ti, - SquaredDifference: () => Co, - Step: () => $s, - StridedSlice: () => Yn, - StringNGrams: () => Ns, - StringSplit: () => ri, - StringToHashBucketFast: () => oi, - Sub: () => Io, - Sum: () => jn, - Tan: () => xa, + SpaceToBatchND: () => Es, + SparseFillEmptyRows: () => ui, + SparseReshape: () => wa, + SparseSegmentMean: () => pi, + SparseSegmentSum: () => ci, + SparseToDense: () => li, + SplitV: () => $s, + Sqrt: () => Gn, + Square: () => mi, + SquaredDifference: () => Kn, + Step: () => Ds, + StridedSlice: () => jn, + StringNGrams: () => As, + StringSplit: () => di, + StringToHashBucketFast: () => fi, + Sub: () => Xn, + Sum: () => Hn, + Tan: () => Yn, Tanh: () => Qn, - Tensor: () => ut, - TensorBuffer: () => je, - Tile: () => wo, + Tensor: () => it, + TensorBuffer: () => st, + Tile: () => to, TopK: () => Zn, Transform: () => Jn, - Transpose: () => Mr, - Unique: () => $p, - Unpack: () => _s, - UnsortedSegmentSum: () => Rp, - UpperBound: () => $ne, - Variable: () => ba, - WebGPUBackend: () => Ai, - ZerosLike: () => Es, - _FusedMatMul: () => Fo, - abs: () => Qt, - acos: () => Vv, - acosh: () => zv, - add: () => ge, - addN: () => Wv, - all: () => Uv, - any: () => Gv, - argMax: () => Hv, - argMin: () => qv, - asin: () => Kv, - asinh: () => jv, - atan: () => Xv, - atan2: () => Yv, - atanh: () => Qv, - avgPool: () => mf, - avgPool3d: () => ek, - backend: () => Bie, - backend_util: () => I, - basicLSTMCell: () => tk, - batchNorm: () => li, - batchNorm2d: () => ok, - batchNorm3d: () => nk, - batchNorm4d: () => sk, - batchToSpaceND: () => ff, - bincount: () => df, - booleanMaskAsync: () => _H, - broadcastArgs: () => ak, - broadcastTo: () => Ls, + Transpose: () => ro, + Unique: () => kp, + Unpack: () => Rs, + UnsortedSegmentSum: () => Np, + UpperBound: () => Nne, + Variable: () => va, + WebGPUBackend: () => Ui, + ZerosLike: () => Fs, + _FusedMatMul: () => fo, + abs: () => Yt, + acos: () => f0, + acosh: () => h0, + add: () => xe, + addN: () => g0, + all: () => x0, + any: () => y0, + argMax: () => b0, + argMin: () => C0, + asin: () => S0, + asinh: () => w0, + atan: () => I0, + atan2: () => v0, + atanh: () => k0, + avgPool: () => td, + avgPool3d: () => _0, + backend: () => Oie, + backend_util: () => S, + basicLSTMCell: () => E0, + batchNorm: () => wi, + batchNorm2d: () => A0, + batchNorm3d: () => R0, + batchNorm4d: () => F0, + batchToSpaceND: () => rd, + bincount: () => od, + booleanMaskAsync: () => XG, + broadcastArgs: () => D0, + broadcastTo: () => Ii, broadcast_util: () => br, - browser: () => Sv, - buffer: () => ne, - cast: () => qe, - ceil: () => ik, - clipByValue: () => uk, - clone: () => zr, - complex: () => Er, + browser: () => Qv, + buffer: () => le, + cast: () => Ke, + ceil: () => O0, + clipByValue: () => P0, + clone: () => Br, + complex: () => Tr, concat: () => gt, - concat1d: () => pk, - concat2d: () => ck, - concat3d: () => lk, - concat4d: () => mk, - conv1d: () => fk, - conv2d: () => mi, - conv2dTranspose: () => dk, - conv3d: () => hk, - conv3dTranspose: () => xk, - copyRegisteredKernels: () => Lne, - cos: () => yk, - cosh: () => bk, - cosineWindow: () => hl, - cumprod: () => Ck, - cumsum: () => Ik, + concat1d: () => M0, + concat2d: () => L0, + concat3d: () => B0, + concat4d: () => V0, + conv1d: () => z0, + conv2d: () => vi, + conv2dTranspose: () => W0, + conv3d: () => U0, + conv3dTranspose: () => H0, + copyRegisteredKernels: () => Dne, + cos: () => q0, + cosh: () => K0, + cosineWindow: () => il, + cumprod: () => j0, + cumsum: () => X0, customGrad: () => Cr, - denseBincount: () => wk, - deprecationWarn: () => sC, - depthToSpace: () => Sk, - depthwiseConv2d: () => Gp, - deregisterOp: () => YK, - device_util: () => ii, - diag: () => vk, - dilation2d: () => kk, - disableDeprecationWarnings: () => _ie, - dispose: () => Ft, - disposeVariables: () => Eie, - div: () => We, - divNoNan: () => Tk, - dot: () => Nk, - dropout: () => BH, - einsum: () => _k, - elu: () => xf, - enableDebugMode: () => Nie, - enableProdMode: () => Tie, - enclosingPowerOfTwo: () => wC, + denseBincount: () => Y0, + deprecationWarn: () => eC, + depthToSpace: () => Q0, + depthwiseConv2d: () => Bp, + deregisterOp: () => xK, + device_util: () => yi, + diag: () => Z0, + dilation2d: () => J0, + disableDeprecationWarnings: () => vie, + dispose: () => Dt, + disposeVariables: () => kie, + div: () => Ge, + divNoNan: () => ek, + dot: () => tk, + dropout: () => aH, + einsum: () => rk, + elu: () => ad, + enableDebugMode: () => Iie, + enableProdMode: () => wie, + enclosingPowerOfTwo: () => xC, engine: () => cr, - env: () => P, - equal: () => gf, - erf: () => Ek, - euclideanNorm: () => Ak, - exp: () => Bo, - expandDims: () => _a, - expm1: () => Fk, - eye: () => yf, - fft: () => qp, - fill: () => Bs, - findBackend: () => Mie, - findBackendFactory: () => Lie, - floor: () => bf, - floorDiv: () => cf, - forceHalfFloat: () => pR, - fused: () => SC, - gather: () => Cf, - gatherND: () => MH, - gather_util: () => af, - getBackend: () => Pie, - getGradient: () => kb, - getKernel: () => el, - getKernelsForBackend: () => zm, - getThreadsCount: () => nte, - gpgpu_util: () => Sw, - grad: () => GG, - grads: () => HG, + env: () => O, + equal: () => sd, + erf: () => ok, + euclideanNorm: () => ak, + exp: () => Co, + expandDims: () => Fa, + expm1: () => ik, + eye: () => id, + fft: () => zp, + fill: () => Ws, + findBackend: () => Fie, + findBackendFactory: () => Die, + floor: () => ud, + floorDiv: () => Jm, + forceHalfFloat: () => L$, + fused: () => yC, + gather: () => pd, + gatherND: () => nH, + gather_util: () => Ym, + getBackend: () => Aie, + getGradient: () => Cb, + getKernel: () => qc, + getKernelsForBackend: () => Am, + getThreadsCount: () => Nee, + gpgpu_util: () => yw, + grad: () => l4, + grads: () => m4, greater: () => cu, - greaterEqual: () => If, + greaterEqual: () => cd, ifft: () => hu, - imag: () => ci, - image: () => zq, - inTopKAsync: () => zH, - io: () => va, - irfft: () => Gf, - isFinite: () => Dk, - isInf: () => Pk, - isNaN: () => Ok, - keep: () => So, - kernel_impls: () => Bt, - leakyRelu: () => wf, - less: () => Mk, - lessEqual: () => Hp, - linalg: () => Wq, - linspace: () => Lk, - loadGraphModel: () => U6, - loadGraphModelSync: () => G6, - localResponseNormalization: () => Bk, - log: () => Ea, - log1p: () => Sf, - logSigmoid: () => Vk, - logSoftmax: () => zk, - logSumExp: () => Tf, + imag: () => Si, + image: () => uq, + inTopKAsync: () => uH, + io: () => Ea, + irfft: () => Fd, + isFinite: () => uk, + isInf: () => pk, + isNaN: () => ck, + keep: () => _r, + kernel_impls: () => Lt, + leakyRelu: () => ld, + less: () => lk, + lessEqual: () => Vp, + linalg: () => pq, + linspace: () => mk, + loadGraphModel: () => l6, + loadGraphModelSync: () => m6, + localResponseNormalization: () => dk, + log: () => Da, + log1p: () => md, + logSigmoid: () => fk, + logSoftmax: () => hk, + logSumExp: () => hd, logicalAnd: () => lu, - logicalNot: () => Nf, - logicalOr: () => _f, - logicalXor: () => Wk, - losses: () => Uq, - lowerBound: () => Uk, + logicalNot: () => gd, + logicalOr: () => xd, + logicalXor: () => gk, + losses: () => cq, + lowerBound: () => xk, matMul: () => Xe, - math: () => Cv, - max: () => Vs, - maxPool: () => $f, - maxPool3d: () => Gk, - maxPoolWithArgmax: () => Hk, - maximum: () => Rf, + math: () => jv, + max: () => Us, + maxPool: () => bd, + maxPool3d: () => yk, + maxPoolWithArgmax: () => bk, + maximum: () => Cd, mean: () => mu, - memory: () => $ie, - meshgrid: () => qk, - min: () => fl, - minimum: () => Af, - mirrorPad: () => Kk, - mod: () => jk, - moments: () => Xk, - movingAverage: () => $H, - mul: () => oe, - multiRNNCell: () => Yk, - multinomial: () => Qk, + memory: () => Nie, + meshgrid: () => Ck, + min: () => sl, + minimum: () => Sd, + mirrorPad: () => Sk, + mod: () => wk, + moments: () => Ik, + movingAverage: () => QG, + mul: () => ae, + multiRNNCell: () => vk, + multinomial: () => kk, neg: () => yr, - nextFrame: () => kC, + nextFrame: () => CC, norm: () => pu, - notEqual: () => Ff, - oneHot: () => pl, - ones: () => zs, - onesLike: () => Zk, - op: () => T, - outerProduct: () => Jk, - pad: () => Ws, - pad1d: () => e1, - pad2d: () => t1, - pad3d: () => r1, - pad4d: () => o1, - pool: () => n1, - pow: () => Na, - prelu: () => Pf, - print: () => ef, - prod: () => s1, - profile: () => Rie, - raggedGather: () => a1, - raggedRange: () => i1, - raggedTensorToTensor: () => u1, - rand: () => p1, - randomGamma: () => T1, - randomNormal: () => Vf, - randomStandardNormal: () => N1, - randomUniform: () => zf, - range: () => di, - ready: () => Die, - real: () => ka, - reciprocal: () => _1, - registerBackend: () => pi, - registerGradient: () => Pne, - registerKernel: () => ya, - registerOp: () => XK, - relu: () => hi, - relu6: () => Wf, - removeBackend: () => Oie, + notEqual: () => wd, + oneHot: () => tl, + ones: () => Gs, + onesLike: () => Nk, + op: () => N, + outerProduct: () => Tk, + pad: () => Hs, + pad1d: () => _k, + pad2d: () => Ek, + pad3d: () => $k, + pad4d: () => Ak, + pool: () => Rk, + pow: () => Ra, + prelu: () => vd, + print: () => Gm, + prod: () => Fk, + profile: () => Tie, + raggedGather: () => Dk, + raggedRange: () => Ok, + raggedTensorToTensor: () => Pk, + rand: () => Mk, + randomGamma: () => e1, + randomNormal: () => Ed, + randomStandardNormal: () => t1, + randomUniform: () => $d, + range: () => Ni, + ready: () => $ie, + real: () => $a, + reciprocal: () => r1, + registerBackend: () => Ci, + registerGradient: () => Ane, + registerKernel: () => Ia, + registerOp: () => gK, + relu: () => Ti, + relu6: () => Ad, + removeBackend: () => Rie, reshape: () => z, - reverse: () => vo, - reverse1d: () => E1, - reverse2d: () => $1, - reverse3d: () => R1, - reverse4d: () => A1, - rfft: () => Kp, - round: () => Uf, - rsqrt: () => F1, + reverse: () => no, + reverse1d: () => o1, + reverse2d: () => n1, + reverse3d: () => s1, + reverse4d: () => a1, + rfft: () => Wp, + round: () => Rd, + rsqrt: () => i1, scalar: () => be, - scatterND: () => AH, - scatter_util: () => cl, - searchSorted: () => dl, - selu: () => D1, - separableConv2d: () => P1, - serialization: () => Pv, - setBackend: () => Fie, - setPlatform: () => Vie, - setThreadsCount: () => ote, - setWasmPath: () => tte, - setWasmPaths: () => rte, - setWebGLContext: () => MI, - setdiff1dAsync: () => O1, - shared: () => Ad, - sigmoid: () => Ms, - sign: () => M1, - signal: () => Vq, - sin: () => L1, - sinh: () => B1, - slice: () => Ue, - slice1d: () => V1, - slice2d: () => z1, - slice3d: () => W1, - slice4d: () => U1, - slice_util: () => et, - softmax: () => G1, - softplus: () => kf, - spaceToBatchND: () => Df, - sparse: () => Gq, - sparseToDense: () => PH, - spectral: () => Bq, - split: () => $a, - sqrt: () => Rr, - square: () => Zt, - squaredDifference: () => Hf, - squeeze: () => jp, - stack: () => Ir, - step: () => qf, - stridedSlice: () => H1, - string: () => Hq, - sub: () => ke, - sum: () => tt, - sumOutType: () => Ca, - tan: () => q1, - tanh: () => ml, + scatterND: () => JG, + scatter_util: () => rl, + searchSorted: () => al, + selu: () => u1, + separableConv2d: () => p1, + serialization: () => p0, + setBackend: () => Eie, + setPlatform: () => Pie, + setThreadsCount: () => kee, + setWasmPath: () => Iee, + setWasmPaths: () => vee, + setWebGLContext: () => RS, + setdiff1dAsync: () => c1, + shared: () => Qp, + sigmoid: () => zs, + sign: () => l1, + signal: () => iq, + sin: () => m1, + sinh: () => d1, + slice: () => He, + slice1d: () => f1, + slice2d: () => h1, + slice3d: () => g1, + slice4d: () => x1, + slice_util: () => ut, + softmax: () => y1, + softplus: () => fd, + spaceToBatchND: () => Id, + sparse: () => lq, + sparseToDense: () => rH, + spectral: () => aq, + split: () => Oa, + sqrt: () => $r, + square: () => Qt, + squaredDifference: () => Dd, + squeeze: () => Up, + stack: () => Sr, + step: () => Od, + stridedSlice: () => b1, + string: () => mq, + sub: () => Ne, + sum: () => et, + sumOutType: () => ka, + tan: () => C1, + tanh: () => nl, tensor: () => nr, tensor1d: () => mr, - tensor2d: () => gi, - tensor3d: () => sf, - tensor4d: () => K1, - tensor5d: () => j1, - tensor6d: () => X1, - tensor_util: () => z0, - test_util: () => Bv, - tidy: () => Ne, - tile: () => fi, - time: () => Aie, - topk: () => Y1, - train: () => pMe, - transpose: () => Wp, - truncatedNormal: () => Q1, - unique: () => Z1, - unregisterGradient: () => Mne, - unregisterKernel: () => One, - unsortedSegmentSum: () => J1, - unstack: () => ko, - upcastType: () => ct, - upperBound: () => eT, - util: () => x, - valueAndGrad: () => qG, - valueAndGrads: () => KG, - variable: () => tT, - variableGrads: () => dC, - version: () => Cne, - version_converter: () => q6, - version_core: () => YW, - version_cpu: () => Ij, - version_wasm: () => ste, - version_webgl: () => gY, - webgl: () => R9e, - webgl_util: () => ic, - webgpu_util: () => pS, + tensor2d: () => _i, + tensor3d: () => Xm, + tensor4d: () => S1, + tensor5d: () => w1, + tensor6d: () => I1, + tensor_util: () => hv, + test_util: () => d0, + tidy: () => Ee, + tile: () => ki, + time: () => _ie, + topk: () => v1, + train: () => hMe, + transpose: () => Mp, + truncatedNormal: () => k1, + unique: () => N1, + unregisterGradient: () => Fne, + unregisterKernel: () => Rne, + unsortedSegmentSum: () => T1, + unstack: () => so, + upcastType: () => dt, + upperBound: () => _1, + util: () => y, + valueAndGrad: () => d4, + valueAndGrads: () => f4, + variable: () => E1, + variableGrads: () => pC, + version: () => gne, + version_converter: () => f6, + version_core: () => xW, + version_cpu: () => U6, + version_wasm: () => Tee, + version_webgl: () => L8, + webgl: () => L9e, + webgl_util: () => oc, + webgpu_util: () => nI, where: () => os, - whereAsync: () => jf, - zeros: () => Wr, - zerosLike: () => Gt + whereAsync: () => Md, + zeros: () => Vr, + zerosLike: () => Ut }); -var QV = Object.create; -var fb = Object.defineProperty; -var ZV = Object.getOwnPropertyDescriptor; -var JV = Object.getOwnPropertyNames; -var ez = Object.getPrototypeOf; -var tz = Object.prototype.hasOwnProperty; -var Em = ((r) => typeof __require != "undefined" ? __require : typeof Proxy != "undefined" ? new Proxy(r, { get: (e, t10) => (typeof __require != "undefined" ? __require : e)[t10] }) : r)(function(r) { +var yV = Object.create; +var ub = Object.defineProperty; +var bV = Object.getOwnPropertyDescriptor; +var CV = Object.getOwnPropertyNames; +var SV = Object.getPrototypeOf; +var wV = Object.prototype.hasOwnProperty; +var bm = ((r) => typeof __require != "undefined" ? __require : typeof Proxy != "undefined" ? new Proxy(r, { get: (e, t6) => (typeof __require != "undefined" ? __require : e)[t6] }) : r)(function(r) { if (typeof __require != "undefined") return __require.apply(this, arguments); throw new Error('Dynamic require of "' + r + '" is not supported'); }); -var Kt = (r, e) => () => (e || r((e = { exports: {} }).exports, e), e.exports); -var Be = (r, e) => { - for (var t10 in e) - fb(r, t10, { get: e[t10], enumerable: true }); +var qt = (r, e) => () => (e || r((e = { exports: {} }).exports, e), e.exports); +var Ue = (r, e) => { + for (var t6 in e) + ub(r, t6, { get: e[t6], enumerable: true }); }; -var rz = (r, e, t10, o) => { +var IV = (r, e, t6, o) => { if (e && typeof e == "object" || typeof e == "function") - for (let n of JV(e)) - !tz.call(r, n) && n !== t10 && fb(r, n, { get: () => e[n], enumerable: !(o = ZV(e, n)) || o.enumerable }); + for (let n of CV(e)) + !wV.call(r, n) && n !== t6 && ub(r, n, { get: () => e[n], enumerable: !(o = bV(e, n)) || o.enumerable }); return r; }; -var rp = (r, e, t10) => (t10 = r != null ? QV(ez(r)) : {}, rz(e || !r || !r.__esModule ? fb(t10, "default", { value: r, enumerable: true }) : t10, r)); -var _0 = Kt((Vne, N0) => { - N0.exports = wt; - var Oo = null; +var rp = (r, e, t6) => (t6 = r != null ? yV(SV(r)) : {}, IV(e || !r || !r.__esModule ? ub(t6, "default", { value: r, enumerable: true }) : t6, r)); +var rv = qt((Pne, tv) => { + tv.exports = It; + var xo = null; try { - Oo = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports; + xo = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports; } catch (r) { } - function wt(r, e, t10) { - this.low = r | 0, this.high = e | 0, this.unsigned = !!t10; + function It(r, e, t6) { + this.low = r | 0, this.high = e | 0, this.unsigned = !!t6; } - wt.prototype.__isLong__; - Object.defineProperty(wt.prototype, "__isLong__", { value: true }); - function Br(r) { + It.prototype.__isLong__; + Object.defineProperty(It.prototype, "__isLong__", { value: true }); + function Lr(r) { return (r && r.__isLong__) === true; } - wt.isLong = Br; - var y0 = {}, b0 = {}; + It.isLong = Lr; + var qI = {}, KI = {}; function eu(r, e) { - var t10, o, n; - return e ? (r >>>= 0, (n = 0 <= r && r < 256) && (o = b0[r], o) ? o : (t10 = St(r, (r | 0) < 0 ? -1 : 0, true), n && (b0[r] = t10), t10)) : (r |= 0, (n = -128 <= r && r < 128) && (o = y0[r], o) ? o : (t10 = St(r, r < 0 ? -1 : 0, false), n && (y0[r] = t10), t10)); + var t6, o, n; + return e ? (r >>>= 0, (n = 0 <= r && r < 256) && (o = KI[r], o) ? o : (t6 = vt(r, (r | 0) < 0 ? -1 : 0, true), n && (KI[r] = t6), t6)) : (r |= 0, (n = -128 <= r && r < 128) && (o = qI[r], o) ? o : (t6 = vt(r, r < 0 ? -1 : 0, false), n && (qI[r] = t6), t6)); } - wt.fromInt = eu; - function Mo(r, e) { + It.fromInt = eu; + function yo(r, e) { if (isNaN(r)) - return e ? Ji : Lo; + return e ? Ji : bo; if (e) { if (r < 0) return Ji; - if (r >= S0) - return T0; + if (r >= QI) + return ev; } else { - if (r <= -I0) - return Lr; - if (r + 1 >= I0) - return k0; + if (r <= -XI) + return Mr; + if (r + 1 >= XI) + return JI; } - return r < 0 ? Mo(-r, e).neg() : St(r % Dp | 0, r / Dp | 0, e); + return r < 0 ? yo(-r, e).neg() : vt(r % Ep | 0, r / Ep | 0, e); } - wt.fromNumber = Mo; - function St(r, e, t10) { - return new wt(r, e, t10); + It.fromNumber = yo; + function vt(r, e, t6) { + return new It(r, e, t6); } - wt.fromBits = St; - var Wm = Math.pow; - function _b(r, e, t10) { + It.fromBits = vt; + var Rm = Math.pow; + function Ib(r, e, t6) { if (r.length === 0) throw Error("empty string"); if (r === "NaN" || r === "Infinity" || r === "+Infinity" || r === "-Infinity") - return Lo; - if (typeof e == "number" ? (t10 = e, e = false) : e = !!e, t10 = t10 || 10, t10 < 2 || 36 < t10) + return bo; + if (typeof e == "number" ? (t6 = e, e = false) : e = !!e, t6 = t6 || 10, t6 < 2 || 36 < t6) throw RangeError("radix"); var o; if ((o = r.indexOf("-")) > 0) throw Error("interior hyphen"); if (o === 0) - return _b(r.substring(1), e, t10).neg(); - for (var n = Mo(Wm(t10, 8)), s = Lo, a = 0; a < r.length; a += 8) { - var i = Math.min(8, r.length - a), p = parseInt(r.substring(a, a + i), t10); + return Ib(r.substring(1), e, t6).neg(); + for (var n = yo(Rm(t6, 8)), s = bo, a = 0; a < r.length; a += 8) { + var i = Math.min(8, r.length - a), p = parseInt(r.substring(a, a + i), t6); if (i < 8) { - var u = Mo(Wm(t10, i)); - s = s.mul(u).add(Mo(p)); + var u = yo(Rm(t6, i)); + s = s.mul(u).add(yo(p)); } else - s = s.mul(n), s = s.add(Mo(p)); + s = s.mul(n), s = s.add(yo(p)); } return s.unsigned = e, s; } - wt.fromString = _b; + It.fromString = Ib; function ts(r, e) { - return typeof r == "number" ? Mo(r, e) : typeof r == "string" ? _b(r, e) : St(r.low, r.high, typeof e == "boolean" ? e : r.unsigned); + return typeof r == "number" ? yo(r, e) : typeof r == "string" ? Ib(r, e) : vt(r.low, r.high, typeof e == "boolean" ? e : r.unsigned); } - wt.fromValue = ts; - var C0 = 1 << 16, vz = 1 << 24, Dp = C0 * C0, S0 = Dp * Dp, I0 = S0 / 2, w0 = eu(vz), Lo = eu(0); - wt.ZERO = Lo; + It.fromValue = ts; + var jI = 1 << 16, HV = 1 << 24, Ep = jI * jI, QI = Ep * Ep, XI = QI / 2, YI = eu(HV), bo = eu(0); + It.ZERO = bo; var Ji = eu(0, true); - wt.UZERO = Ji; - var Fp = eu(1); - wt.ONE = Fp; - var v0 = eu(1, true); - wt.UONE = v0; - var Nb = eu(-1); - wt.NEG_ONE = Nb; - var k0 = St(-1, 2147483647, false); - wt.MAX_VALUE = k0; - var T0 = St(-1, -1, true); - wt.MAX_UNSIGNED_VALUE = T0; - var Lr = St(0, -2147483648, false); - wt.MIN_VALUE = Lr; - var ce = wt.prototype; - ce.toInt = function() { + It.UZERO = Ji; + var _p = eu(1); + It.ONE = _p; + var ZI = eu(1, true); + It.UONE = ZI; + var wb = eu(-1); + It.NEG_ONE = wb; + var JI = vt(-1, 2147483647, false); + It.MAX_VALUE = JI; + var ev = vt(-1, -1, true); + It.MAX_UNSIGNED_VALUE = ev; + var Mr = vt(0, -2147483648, false); + It.MIN_VALUE = Mr; + var me = It.prototype; + me.toInt = function() { return this.unsigned ? this.low >>> 0 : this.low; }; - ce.toNumber = function() { - return this.unsigned ? (this.high >>> 0) * Dp + (this.low >>> 0) : this.high * Dp + (this.low >>> 0); + me.toNumber = function() { + return this.unsigned ? (this.high >>> 0) * Ep + (this.low >>> 0) : this.high * Ep + (this.low >>> 0); }; - ce.toString = function(e) { + me.toString = function(e) { if (e = e || 10, e < 2 || 36 < e) throw RangeError("radix"); if (this.isZero()) return "0"; if (this.isNegative()) - if (this.eq(Lr)) { - var t10 = Mo(e), o = this.div(t10), n = o.mul(t10).sub(this); + if (this.eq(Mr)) { + var t6 = yo(e), o = this.div(t6), n = o.mul(t6).sub(this); return o.toString(e) + n.toInt().toString(e); } else return "-" + this.neg().toString(e); - for (var s = Mo(Wm(e, 6), this.unsigned), a = this, i = ""; ; ) { + for (var s = yo(Rm(e, 6), this.unsigned), a = this, i = ""; ; ) { var p = a.div(s), u = a.sub(p.mul(s)).toInt() >>> 0, c = u.toString(e); if (a = p, a.isZero()) return c + i; @@ -668,228 +668,228 @@ var _0 = Kt((Vne, N0) => { i = "" + c + i; } }; - ce.getHighBits = function() { + me.getHighBits = function() { return this.high; }; - ce.getHighBitsUnsigned = function() { + me.getHighBitsUnsigned = function() { return this.high >>> 0; }; - ce.getLowBits = function() { + me.getLowBits = function() { return this.low; }; - ce.getLowBitsUnsigned = function() { + me.getLowBitsUnsigned = function() { return this.low >>> 0; }; - ce.getNumBitsAbs = function() { + me.getNumBitsAbs = function() { if (this.isNegative()) - return this.eq(Lr) ? 64 : this.neg().getNumBitsAbs(); - for (var e = this.high != 0 ? this.high : this.low, t10 = 31; t10 > 0 && (e & 1 << t10) == 0; t10--) + return this.eq(Mr) ? 64 : this.neg().getNumBitsAbs(); + for (var e = this.high != 0 ? this.high : this.low, t6 = 31; t6 > 0 && (e & 1 << t6) == 0; t6--) ; - return this.high != 0 ? t10 + 33 : t10 + 1; + return this.high != 0 ? t6 + 33 : t6 + 1; }; - ce.isZero = function() { + me.isZero = function() { return this.high === 0 && this.low === 0; }; - ce.eqz = ce.isZero; - ce.isNegative = function() { + me.eqz = me.isZero; + me.isNegative = function() { return !this.unsigned && this.high < 0; }; - ce.isPositive = function() { + me.isPositive = function() { return this.unsigned || this.high >= 0; }; - ce.isOdd = function() { + me.isOdd = function() { return (this.low & 1) === 1; }; - ce.isEven = function() { + me.isEven = function() { return (this.low & 1) === 0; }; - ce.equals = function(e) { - return Br(e) || (e = ts(e)), this.unsigned !== e.unsigned && this.high >>> 31 === 1 && e.high >>> 31 === 1 ? false : this.high === e.high && this.low === e.low; + me.equals = function(e) { + return Lr(e) || (e = ts(e)), this.unsigned !== e.unsigned && this.high >>> 31 === 1 && e.high >>> 31 === 1 ? false : this.high === e.high && this.low === e.low; }; - ce.eq = ce.equals; - ce.notEquals = function(e) { + me.eq = me.equals; + me.notEquals = function(e) { return !this.eq(e); }; - ce.neq = ce.notEquals; - ce.ne = ce.notEquals; - ce.lessThan = function(e) { + me.neq = me.notEquals; + me.ne = me.notEquals; + me.lessThan = function(e) { return this.comp(e) < 0; }; - ce.lt = ce.lessThan; - ce.lessThanOrEqual = function(e) { + me.lt = me.lessThan; + me.lessThanOrEqual = function(e) { return this.comp(e) <= 0; }; - ce.lte = ce.lessThanOrEqual; - ce.le = ce.lessThanOrEqual; - ce.greaterThan = function(e) { + me.lte = me.lessThanOrEqual; + me.le = me.lessThanOrEqual; + me.greaterThan = function(e) { return this.comp(e) > 0; }; - ce.gt = ce.greaterThan; - ce.greaterThanOrEqual = function(e) { + me.gt = me.greaterThan; + me.greaterThanOrEqual = function(e) { return this.comp(e) >= 0; }; - ce.gte = ce.greaterThanOrEqual; - ce.ge = ce.greaterThanOrEqual; - ce.compare = function(e) { - if (Br(e) || (e = ts(e)), this.eq(e)) + me.gte = me.greaterThanOrEqual; + me.ge = me.greaterThanOrEqual; + me.compare = function(e) { + if (Lr(e) || (e = ts(e)), this.eq(e)) return 0; - var t10 = this.isNegative(), o = e.isNegative(); - return t10 && !o ? -1 : !t10 && o ? 1 : this.unsigned ? e.high >>> 0 > this.high >>> 0 || e.high === this.high && e.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(e).isNegative() ? -1 : 1; + var t6 = this.isNegative(), o = e.isNegative(); + return t6 && !o ? -1 : !t6 && o ? 1 : this.unsigned ? e.high >>> 0 > this.high >>> 0 || e.high === this.high && e.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(e).isNegative() ? -1 : 1; }; - ce.comp = ce.compare; - ce.negate = function() { - return !this.unsigned && this.eq(Lr) ? Lr : this.not().add(Fp); + me.comp = me.compare; + me.negate = function() { + return !this.unsigned && this.eq(Mr) ? Mr : this.not().add(_p); }; - ce.neg = ce.negate; - ce.add = function(e) { - Br(e) || (e = ts(e)); - var t10 = this.high >>> 16, o = this.high & 65535, n = this.low >>> 16, s = this.low & 65535, a = e.high >>> 16, i = e.high & 65535, p = e.low >>> 16, u = e.low & 65535, c = 0, l = 0, m = 0, f = 0; - return f += s + u, m += f >>> 16, f &= 65535, m += n + p, l += m >>> 16, m &= 65535, l += o + i, c += l >>> 16, l &= 65535, c += t10 + a, c &= 65535, St(m << 16 | f, c << 16 | l, this.unsigned); + me.neg = me.negate; + me.add = function(e) { + Lr(e) || (e = ts(e)); + var t6 = this.high >>> 16, o = this.high & 65535, n = this.low >>> 16, s = this.low & 65535, a = e.high >>> 16, i = e.high & 65535, p = e.low >>> 16, u = e.low & 65535, c = 0, l = 0, m = 0, d = 0; + return d += s + u, m += d >>> 16, d &= 65535, m += n + p, l += m >>> 16, m &= 65535, l += o + i, c += l >>> 16, l &= 65535, c += t6 + a, c &= 65535, vt(m << 16 | d, c << 16 | l, this.unsigned); }; - ce.subtract = function(e) { - return Br(e) || (e = ts(e)), this.add(e.neg()); + me.subtract = function(e) { + return Lr(e) || (e = ts(e)), this.add(e.neg()); }; - ce.sub = ce.subtract; - ce.multiply = function(e) { + me.sub = me.subtract; + me.multiply = function(e) { if (this.isZero()) - return Lo; - if (Br(e) || (e = ts(e)), Oo) { - var t10 = Oo.mul(this.low, this.high, e.low, e.high); - return St(t10, Oo.get_high(), this.unsigned); + return bo; + if (Lr(e) || (e = ts(e)), xo) { + var t6 = xo.mul(this.low, this.high, e.low, e.high); + return vt(t6, xo.get_high(), this.unsigned); } if (e.isZero()) - return Lo; - if (this.eq(Lr)) - return e.isOdd() ? Lr : Lo; - if (e.eq(Lr)) - return this.isOdd() ? Lr : Lo; + return bo; + if (this.eq(Mr)) + return e.isOdd() ? Mr : bo; + if (e.eq(Mr)) + return this.isOdd() ? Mr : bo; if (this.isNegative()) return e.isNegative() ? this.neg().mul(e.neg()) : this.neg().mul(e).neg(); if (e.isNegative()) return this.mul(e.neg()).neg(); - if (this.lt(w0) && e.lt(w0)) - return Mo(this.toNumber() * e.toNumber(), this.unsigned); - var o = this.high >>> 16, n = this.high & 65535, s = this.low >>> 16, a = this.low & 65535, i = e.high >>> 16, p = e.high & 65535, u = e.low >>> 16, c = e.low & 65535, l = 0, m = 0, f = 0, d = 0; - return d += a * c, f += d >>> 16, d &= 65535, f += s * c, m += f >>> 16, f &= 65535, f += a * u, m += f >>> 16, f &= 65535, m += n * c, l += m >>> 16, m &= 65535, m += s * u, l += m >>> 16, m &= 65535, m += a * p, l += m >>> 16, m &= 65535, l += o * c + n * u + s * p + a * i, l &= 65535, St(f << 16 | d, l << 16 | m, this.unsigned); + if (this.lt(YI) && e.lt(YI)) + return yo(this.toNumber() * e.toNumber(), this.unsigned); + var o = this.high >>> 16, n = this.high & 65535, s = this.low >>> 16, a = this.low & 65535, i = e.high >>> 16, p = e.high & 65535, u = e.low >>> 16, c = e.low & 65535, l = 0, m = 0, d = 0, f = 0; + return f += a * c, d += f >>> 16, f &= 65535, d += s * c, m += d >>> 16, d &= 65535, d += a * u, m += d >>> 16, d &= 65535, m += n * c, l += m >>> 16, m &= 65535, m += s * u, l += m >>> 16, m &= 65535, m += a * p, l += m >>> 16, m &= 65535, l += o * c + n * u + s * p + a * i, l &= 65535, vt(d << 16 | f, l << 16 | m, this.unsigned); }; - ce.mul = ce.multiply; - ce.divide = function(e) { - if (Br(e) || (e = ts(e)), e.isZero()) + me.mul = me.multiply; + me.divide = function(e) { + if (Lr(e) || (e = ts(e)), e.isZero()) throw Error("division by zero"); - if (Oo) { + if (xo) { if (!this.unsigned && this.high === -2147483648 && e.low === -1 && e.high === -1) return this; - var t10 = (this.unsigned ? Oo.div_u : Oo.div_s)(this.low, this.high, e.low, e.high); - return St(t10, Oo.get_high(), this.unsigned); + var t6 = (this.unsigned ? xo.div_u : xo.div_s)(this.low, this.high, e.low, e.high); + return vt(t6, xo.get_high(), this.unsigned); } if (this.isZero()) - return this.unsigned ? Ji : Lo; + return this.unsigned ? Ji : bo; var o, n, s; if (this.unsigned) { if (e.unsigned || (e = e.toUnsigned()), e.gt(this)) return Ji; if (e.gt(this.shru(1))) - return v0; + return ZI; s = Ji; } else { - if (this.eq(Lr)) { - if (e.eq(Fp) || e.eq(Nb)) - return Lr; - if (e.eq(Lr)) - return Fp; + if (this.eq(Mr)) { + if (e.eq(_p) || e.eq(wb)) + return Mr; + if (e.eq(Mr)) + return _p; var a = this.shr(1); - return o = a.div(e).shl(1), o.eq(Lo) ? e.isNegative() ? Fp : Nb : (n = this.sub(e.mul(o)), s = o.add(n.div(e)), s); - } else if (e.eq(Lr)) - return this.unsigned ? Ji : Lo; + return o = a.div(e).shl(1), o.eq(bo) ? e.isNegative() ? _p : wb : (n = this.sub(e.mul(o)), s = o.add(n.div(e)), s); + } else if (e.eq(Mr)) + return this.unsigned ? Ji : bo; if (this.isNegative()) return e.isNegative() ? this.neg().div(e.neg()) : this.neg().div(e).neg(); if (e.isNegative()) return this.div(e.neg()).neg(); - s = Lo; + s = bo; } for (n = this; n.gte(e); ) { o = Math.max(1, Math.floor(n.toNumber() / e.toNumber())); - for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Wm(2, i - 48), u = Mo(o), c = u.mul(e); c.isNegative() || c.gt(n); ) - o -= p, u = Mo(o, this.unsigned), c = u.mul(e); - u.isZero() && (u = Fp), s = s.add(u), n = n.sub(c); + for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Rm(2, i - 48), u = yo(o), c = u.mul(e); c.isNegative() || c.gt(n); ) + o -= p, u = yo(o, this.unsigned), c = u.mul(e); + u.isZero() && (u = _p), s = s.add(u), n = n.sub(c); } return s; }; - ce.div = ce.divide; - ce.modulo = function(e) { - if (Br(e) || (e = ts(e)), Oo) { - var t10 = (this.unsigned ? Oo.rem_u : Oo.rem_s)(this.low, this.high, e.low, e.high); - return St(t10, Oo.get_high(), this.unsigned); + me.div = me.divide; + me.modulo = function(e) { + if (Lr(e) || (e = ts(e)), xo) { + var t6 = (this.unsigned ? xo.rem_u : xo.rem_s)(this.low, this.high, e.low, e.high); + return vt(t6, xo.get_high(), this.unsigned); } return this.sub(this.div(e).mul(e)); }; - ce.mod = ce.modulo; - ce.rem = ce.modulo; - ce.not = function() { - return St(~this.low, ~this.high, this.unsigned); + me.mod = me.modulo; + me.rem = me.modulo; + me.not = function() { + return vt(~this.low, ~this.high, this.unsigned); }; - ce.and = function(e) { - return Br(e) || (e = ts(e)), St(this.low & e.low, this.high & e.high, this.unsigned); + me.and = function(e) { + return Lr(e) || (e = ts(e)), vt(this.low & e.low, this.high & e.high, this.unsigned); }; - ce.or = function(e) { - return Br(e) || (e = ts(e)), St(this.low | e.low, this.high | e.high, this.unsigned); + me.or = function(e) { + return Lr(e) || (e = ts(e)), vt(this.low | e.low, this.high | e.high, this.unsigned); }; - ce.xor = function(e) { - return Br(e) || (e = ts(e)), St(this.low ^ e.low, this.high ^ e.high, this.unsigned); + me.xor = function(e) { + return Lr(e) || (e = ts(e)), vt(this.low ^ e.low, this.high ^ e.high, this.unsigned); }; - ce.shiftLeft = function(e) { - return Br(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? St(this.low << e, this.high << e | this.low >>> 32 - e, this.unsigned) : St(0, this.low << e - 32, this.unsigned); + me.shiftLeft = function(e) { + return Lr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? vt(this.low << e, this.high << e | this.low >>> 32 - e, this.unsigned) : vt(0, this.low << e - 32, this.unsigned); }; - ce.shl = ce.shiftLeft; - ce.shiftRight = function(e) { - return Br(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? St(this.low >>> e | this.high << 32 - e, this.high >> e, this.unsigned) : St(this.high >> e - 32, this.high >= 0 ? 0 : -1, this.unsigned); + me.shl = me.shiftLeft; + me.shiftRight = function(e) { + return Lr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? vt(this.low >>> e | this.high << 32 - e, this.high >> e, this.unsigned) : vt(this.high >> e - 32, this.high >= 0 ? 0 : -1, this.unsigned); }; - ce.shr = ce.shiftRight; - ce.shiftRightUnsigned = function(e) { - if (Br(e) && (e = e.toInt()), e &= 63, e === 0) + me.shr = me.shiftRight; + me.shiftRightUnsigned = function(e) { + if (Lr(e) && (e = e.toInt()), e &= 63, e === 0) return this; - var t10 = this.high; + var t6 = this.high; if (e < 32) { var o = this.low; - return St(o >>> e | t10 << 32 - e, t10 >>> e, this.unsigned); + return vt(o >>> e | t6 << 32 - e, t6 >>> e, this.unsigned); } else - return e === 32 ? St(t10, 0, this.unsigned) : St(t10 >>> e - 32, 0, this.unsigned); + return e === 32 ? vt(t6, 0, this.unsigned) : vt(t6 >>> e - 32, 0, this.unsigned); }; - ce.shru = ce.shiftRightUnsigned; - ce.shr_u = ce.shiftRightUnsigned; - ce.toSigned = function() { - return this.unsigned ? St(this.low, this.high, false) : this; + me.shru = me.shiftRightUnsigned; + me.shr_u = me.shiftRightUnsigned; + me.toSigned = function() { + return this.unsigned ? vt(this.low, this.high, false) : this; }; - ce.toUnsigned = function() { - return this.unsigned ? this : St(this.low, this.high, true); + me.toUnsigned = function() { + return this.unsigned ? this : vt(this.low, this.high, true); }; - ce.toBytes = function(e) { + me.toBytes = function(e) { return e ? this.toBytesLE() : this.toBytesBE(); }; - ce.toBytesLE = function() { - var e = this.high, t10 = this.low; - return [t10 & 255, t10 >>> 8 & 255, t10 >>> 16 & 255, t10 >>> 24, e & 255, e >>> 8 & 255, e >>> 16 & 255, e >>> 24]; + me.toBytesLE = function() { + var e = this.high, t6 = this.low; + return [t6 & 255, t6 >>> 8 & 255, t6 >>> 16 & 255, t6 >>> 24, e & 255, e >>> 8 & 255, e >>> 16 & 255, e >>> 24]; }; - ce.toBytesBE = function() { - var e = this.high, t10 = this.low; - return [e >>> 24, e >>> 16 & 255, e >>> 8 & 255, e & 255, t10 >>> 24, t10 >>> 16 & 255, t10 >>> 8 & 255, t10 & 255]; + me.toBytesBE = function() { + var e = this.high, t6 = this.low; + return [e >>> 24, e >>> 16 & 255, e >>> 8 & 255, e & 255, t6 >>> 24, t6 >>> 16 & 255, t6 >>> 8 & 255, t6 & 255]; }; - wt.fromBytes = function(e, t10, o) { - return o ? wt.fromBytesLE(e, t10) : wt.fromBytesBE(e, t10); + It.fromBytes = function(e, t6, o) { + return o ? It.fromBytesLE(e, t6) : It.fromBytesBE(e, t6); }; - wt.fromBytesLE = function(e, t10) { - return new wt(e[0] | e[1] << 8 | e[2] << 16 | e[3] << 24, e[4] | e[5] << 8 | e[6] << 16 | e[7] << 24, t10); + It.fromBytesLE = function(e, t6) { + return new It(e[0] | e[1] << 8 | e[2] << 16 | e[3] << 24, e[4] | e[5] << 8 | e[6] << 16 | e[7] << 24, t6); }; - wt.fromBytesBE = function(e, t10) { - return new wt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7], e[0] << 24 | e[1] << 16 | e[2] << 8 | e[3], t10); + It.fromBytesBE = function(e, t6) { + return new It(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7], e[0] << 24 | e[1] << 16 | e[2] << 8 | e[3], t6); }; }); -var pv = Kt(() => { +var Mv = qt(() => { }); -var cv = Kt(() => { +var Lv = qt(() => { }); -var l1 = Kt((c1, hC) => { - (function(r, e, t10) { +var Bk = qt((Lk, cC) => { + (function(r, e, t6) { function o(i) { var p = this, u = a(); p.next = function() { @@ -922,13 +922,13 @@ var l1 = Kt((c1, hC) => { }; return p; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.alea = s; - })(c1, typeof hC == "object" && hC, typeof define == "function" && define); + })(Lk, typeof cC == "object" && cC, typeof define == "function" && define); }); -var f1 = Kt((m1, gC) => { - (function(r, e, t10) { +var zk = qt((Vk, lC) => { + (function(r, e, t6) { function o(a) { var i = this, p = ""; i.x = 0, i.y = 0, i.z = 0, i.w = 0, i.next = function() { @@ -947,20 +947,20 @@ var f1 = Kt((m1, gC) => { }; return c.double = function() { do - var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, f = (l + m) / (1 << 21); - while (f === 0); - return f; + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); + while (d === 0); + return d; }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); }), c; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.xor128 = s; - })(m1, typeof gC == "object" && gC, typeof define == "function" && define); + })(Vk, typeof lC == "object" && lC, typeof define == "function" && define); }); -var h1 = Kt((d1, xC) => { - (function(r, e, t10) { +var Uk = qt((Wk, mC) => { + (function(r, e, t6) { function o(a) { var i = this, p = ""; i.next = function() { @@ -979,38 +979,38 @@ var h1 = Kt((d1, xC) => { }; return c.double = function() { do - var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, f = (l + m) / (1 << 21); - while (f === 0); - return f; + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); + while (d === 0); + return d; }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); }), c; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.xorwow = s; - })(d1, typeof xC == "object" && xC, typeof define == "function" && define); + })(Wk, typeof mC == "object" && mC, typeof define == "function" && define); }); -var x1 = Kt((g1, yC) => { - (function(r, e, t10) { +var Hk = qt((Gk, dC) => { + (function(r, e, t6) { function o(a) { var i = this; i.next = function() { - var u = i.x, c = i.i, l, m, f; + var u = i.x, c = i.i, l, m, d; return l = u[c], l ^= l >>> 7, m = l ^ l << 24, l = u[c + 1 & 7], m ^= l ^ l >>> 10, l = u[c + 3 & 7], m ^= l ^ l >>> 3, l = u[c + 4 & 7], m ^= l ^ l << 7, l = u[c + 7 & 7], l = l ^ l << 13, m ^= l ^ l << 9, u[c] = m, i.i = c + 1 & 7, m; }; function p(u, c) { - var l, m, f = []; + var l, m, d = []; if (c === (c | 0)) - m = f[0] = c; + m = d[0] = c; else for (c = "" + c, l = 0; l < c.length; ++l) - f[l & 7] = f[l & 7] << 15 ^ c.charCodeAt(l) + f[l + 1 & 7] << 13; - for (; f.length < 8; ) - f.push(0); - for (l = 0; l < 8 && f[l] === 0; ++l) + d[l & 7] = d[l & 7] << 15 ^ c.charCodeAt(l) + d[l + 1 & 7] << 13; + for (; d.length < 8; ) + d.push(0); + for (l = 0; l < 8 && d[l] === 0; ++l) ; - for (l == 8 ? m = f[7] = -1 : m = f[l], u.x = f, u.i = 0, l = 256; l > 0; --l) + for (l == 8 ? m = d[7] = -1 : m = d[l], u.x = d, u.i = 0, l = 256; l > 0; --l) u.next(); } p(i, a); @@ -1025,33 +1025,33 @@ var x1 = Kt((g1, yC) => { }; return c.double = function() { do - var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, f = (l + m) / (1 << 21); - while (f === 0); - return f; + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); + while (d === 0); + return d; }, c.int32 = p.next, c.quick = c, u && (u.x && n(u, p), c.state = function() { return n(p, {}); }), c; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.xorshift7 = s; - })(g1, typeof yC == "object" && yC, typeof define == "function" && define); + })(Gk, typeof dC == "object" && dC, typeof define == "function" && define); }); -var b1 = Kt((y1, bC) => { - (function(r, e, t10) { +var Kk = qt((qk, fC) => { + (function(r, e, t6) { function o(a) { var i = this; i.next = function() { - var u = i.w, c = i.X, l = i.i, m, f; - return i.w = u = u + 1640531527 | 0, f = c[l + 34 & 127], m = c[l = l + 1 & 127], f ^= f << 13, m ^= m << 17, f ^= f >>> 15, m ^= m >>> 12, f = c[l] = f ^ m, i.i = l, f + (u ^ u >>> 16) | 0; + var u = i.w, c = i.X, l = i.i, m, d; + return i.w = u = u + 1640531527 | 0, d = c[l + 34 & 127], m = c[l = l + 1 & 127], d ^= d << 13, m ^= m << 17, d ^= d >>> 15, m ^= m >>> 12, d = c[l] = d ^ m, i.i = l, d + (u ^ u >>> 16) | 0; }; function p(u, c) { - var l, m, f, d, h, g = [], y = 128; - for (c === (c | 0) ? (m = c, c = null) : (c = c + "\0", m = 0, y = Math.max(y, c.length)), f = 0, d = -32; d < y; ++d) - c && (m ^= c.charCodeAt((d + 32) % c.length)), d === 0 && (h = m), m ^= m << 10, m ^= m >>> 15, m ^= m << 4, m ^= m >>> 13, d >= 0 && (h = h + 1640531527 | 0, l = g[d & 127] ^= m + h, f = l == 0 ? f + 1 : 0); - for (f >= 128 && (g[(c && c.length || 0) & 127] = -1), f = 127, d = 4 * 128; d > 0; --d) - m = g[f + 34 & 127], l = g[f = f + 1 & 127], m ^= m << 13, l ^= l << 17, m ^= m >>> 15, l ^= l >>> 12, g[f] = m ^ l; - u.w = h, u.X = g, u.i = f; + var l, m, d, f, h, g = [], x = 128; + for (c === (c | 0) ? (m = c, c = null) : (c = c + "\0", m = 0, x = Math.max(x, c.length)), d = 0, f = -32; f < x; ++f) + c && (m ^= c.charCodeAt((f + 32) % c.length)), f === 0 && (h = m), m ^= m << 10, m ^= m >>> 15, m ^= m << 4, m ^= m >>> 13, f >= 0 && (h = h + 1640531527 | 0, l = g[f & 127] ^= m + h, d = l == 0 ? d + 1 : 0); + for (d >= 128 && (g[(c && c.length || 0) & 127] = -1), d = 127, f = 4 * 128; f > 0; --f) + m = g[d + 34 & 127], l = g[d = d + 1 & 127], m ^= m << 13, l ^= l << 17, m ^= m >>> 15, l ^= l >>> 12, g[d] = m ^ l; + u.w = h, u.X = g, u.i = d; } p(i, a); } @@ -1065,25 +1065,25 @@ var b1 = Kt((y1, bC) => { }; return c.double = function() { do - var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, f = (l + m) / (1 << 21); - while (f === 0); - return f; + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); + while (d === 0); + return d; }, c.int32 = p.next, c.quick = c, u && (u.X && n(u, p), c.state = function() { return n(p, {}); }), c; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.xor4096 = s; - })(y1, typeof bC == "object" && bC, typeof define == "function" && define); + })(qk, typeof fC == "object" && fC, typeof define == "function" && define); }); -var I1 = Kt((C1, CC) => { - (function(r, e, t10) { +var Xk = qt((jk, hC) => { + (function(r, e, t6) { function o(a) { var i = this, p = ""; i.next = function() { - var c = i.b, l = i.c, m = i.d, f = i.a; - return c = c << 25 ^ c >>> 7 ^ l, l = l - m | 0, m = m << 24 ^ m >>> 8 ^ f, f = f - c | 0, i.b = c = c << 20 ^ c >>> 12 ^ l, i.c = l = l - m | 0, i.d = m << 16 ^ l >>> 16 ^ f, i.a = f - c | 0; + var c = i.b, l = i.c, m = i.d, d = i.a; + return c = c << 25 ^ c >>> 7 ^ l, l = l - m | 0, m = m << 24 ^ m >>> 8 ^ d, d = d - c | 0, i.b = c = c << 20 ^ c >>> 12 ^ l, i.c = l = l - m | 0, i.d = m << 16 ^ l >>> 16 ^ d, i.a = d - c | 0; }, i.a = 0, i.b = 0, i.c = -1640531527, i.d = 1367130551, a === Math.floor(a) ? (i.a = a / 4294967296 | 0, i.b = a | 0) : p += a; for (var u = 0; u < p.length + 20; u++) i.b ^= p.charCodeAt(u) | 0, i.next(); @@ -1097,74 +1097,74 @@ var I1 = Kt((C1, CC) => { }; return c.double = function() { do - var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, f = (l + m) / (1 << 21); - while (f === 0); - return f; + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); + while (d === 0); + return d; }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); }), c; } - e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { + e && e.exports ? e.exports = s : t6 && t6.amd ? t6(function() { return s; }) : this.tychei = s; - })(C1, typeof CC == "object" && CC, typeof define == "function" && define); + })(jk, typeof hC == "object" && hC, typeof define == "function" && define); }); -var w1 = Kt(() => { +var Yk = qt(() => { }); -var v1 = Kt((S1, Of) => { - (function(r, e, t10) { - var o = 256, n = 6, s = 52, a = "random", i = t10.pow(o, n), p = t10.pow(2, s), u = p * 2, c = o - 1, l; +var Zk = qt((Qk, kd) => { + (function(r, e, t6) { + var o = 256, n = 6, s = 52, a = "random", i = t6.pow(o, n), p = t6.pow(2, s), u = p * 2, c = o - 1, l; function m(C, w, k) { var _ = []; w = w == true ? { entropy: true } : w || {}; - var E = g(h(w.entropy ? [C, b(e)] : C == null ? y() : C, 3), _), R = new f(_), A = function() { - for (var D = R.g(n), O = i, M = 0; D < p; ) - D = (D + M) * o, O *= o, M = R.g(1); + var $ = g(h(w.entropy ? [C, b(e)] : C == null ? x() : C, 3), _), A = new d(_), R = function() { + for (var D = A.g(n), P = i, M = 0; D < p; ) + D = (D + M) * o, P *= o, M = A.g(1); for (; D >= u; ) - D /= 2, O /= 2, M >>>= 1; - return (D + M) / O; + D /= 2, P /= 2, M >>>= 1; + return (D + M) / P; }; - return A.int32 = function() { - return R.g(4) | 0; - }, A.quick = function() { - return R.g(4) / 4294967296; - }, A.double = A, g(b(R.S), e), (w.pass || k || function(D, O, M, L) { - return L && (L.S && d(L, R), D.state = function() { - return d(R, {}); - }), M ? (t10[a] = D, O) : D; - })(A, E, "global" in w ? w.global : this == t10, w.state); + return R.int32 = function() { + return A.g(4) | 0; + }, R.quick = function() { + return A.g(4) / 4294967296; + }, R.double = R, g(b(A.S), e), (w.pass || k || function(D, P, M, L) { + return L && (L.S && f(L, A), D.state = function() { + return f(A, {}); + }), M ? (t6[a] = D, P) : D; + })(R, $, "global" in w ? w.global : this == t6, w.state); } - function f(C) { - var w, k = C.length, _ = this, E = 0, R = _.i = _.j = 0, A = _.S = []; - for (k || (C = [k++]); E < o; ) - A[E] = E++; - for (E = 0; E < o; E++) - A[E] = A[R = c & R + C[E % k] + (w = A[E])], A[R] = w; + function d(C) { + var w, k = C.length, _ = this, $ = 0, A = _.i = _.j = 0, R = _.S = []; + for (k || (C = [k++]); $ < o; ) + R[$] = $++; + for ($ = 0; $ < o; $++) + R[$] = R[A = c & A + C[$ % k] + (w = R[$])], R[A] = w; (_.g = function(D) { - for (var O, M = 0, L = _.i, W = _.j, V = _.S; D--; ) - O = V[L = c & L + 1], M = M * o + V[c & (V[L] = V[W = c & W + O]) + (V[W] = O)]; + for (var P, M = 0, L = _.i, W = _.j, V = _.S; D--; ) + P = V[L = c & L + 1], M = M * o + V[c & (V[L] = V[W = c & W + P]) + (V[W] = P)]; return _.i = L, _.j = W, M; })(o); } - function d(C, w) { + function f(C, w) { return w.i = C.i, w.j = C.j, w.S = C.S.slice(), w; } function h(C, w) { - var k = [], _ = typeof C, E; + var k = [], _ = typeof C, $; if (w && _ == "object") - for (E in C) + for ($ in C) try { - k.push(h(C[E], w - 1)); - } catch (R) { + k.push(h(C[$], w - 1)); + } catch (A) { } return k.length ? k : _ == "string" ? C : C + "\0"; } function g(C, w) { - for (var k = C + "", _, E = 0; E < k.length; ) - w[c & E] = c & (_ ^= w[c & E] * 19) + k.charCodeAt(E++); + for (var k = C + "", _, $ = 0; $ < k.length; ) + w[c & $] = c & (_ ^= w[c & $] * 19) + k.charCodeAt($++); return b(w); } - function y() { + function x() { try { var C; return l && (C = l.randomBytes) ? C = C(o) : (C = new Uint8Array(o), (r.crypto || r.msCrypto).getRandomValues(C)), b(C); @@ -1176,63 +1176,63 @@ var v1 = Kt((S1, Of) => { function b(C) { return String.fromCharCode.apply(0, C); } - if (g(t10.random(), e), typeof Of == "object" && Of.exports) { - Of.exports = m; + if (g(t6.random(), e), typeof kd == "object" && kd.exports) { + kd.exports = m; try { - l = w1(); + l = Yk(); } catch (C) { } } else typeof define == "function" && define.amd ? define(function() { return m; - }) : t10["seed" + a] = m; - })(typeof self != "undefined" ? self : S1, [], Math); + }) : t6["seed" + a] = m; + })(typeof self != "undefined" ? self : Qk, [], Math); }); -var IC = Kt((_we, k1) => { - var F4 = l1(), D4 = f1(), P4 = h1(), O4 = x1(), M4 = b1(), L4 = I1(), fu = v1(); - fu.alea = F4; - fu.xor128 = D4; - fu.xorwow = P4; - fu.xorshift7 = O4; - fu.xor4096 = M4; - fu.tychei = L4; - k1.exports = fu; +var gC = qt((_we, Jk) => { + var eG = Bk(), tG = zk(), rG = Uk(), oG = Hk(), nG = Kk(), sG = Xk(), du = Zk(); + du.alea = eG; + du.xor128 = tG; + du.xorwow = rG; + du.xorshift7 = oG; + du.xor4096 = nG; + du.tychei = sG; + Jk.exports = du; }); -var Vl = Kt(() => { +var Rl = qt(() => { }); -var Qw = Kt(() => { +var qw = qt(() => { }); -var D3 = Kt(() => { +var l3 = qt(() => { }); -var P3 = Kt(() => { +var m3 = qt(() => { }); -var O3 = Kt(() => { +var d3 = qt(() => { }); -var M3 = Kt((Fg, Jw) => { - var Zw = (() => { +var f3 = qt((wg, jw) => { + var Kw = (() => { var r = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; return typeof __filename != "undefined" && (r = r || __filename), function(e) { e = e || {}; - function t10() { - return Q.buffer != De && Tt(Q.buffer), ft; + function t6() { + return J.buffer != Oe && Nt(J.buffer), mt; } function o() { - return Q.buffer != De && Tt(Q.buffer), at; + return J.buffer != Oe && Nt(J.buffer), at; } function n() { - return Q.buffer != De && Tt(Q.buffer), dt; + return J.buffer != Oe && Nt(J.buffer), ft; } function s() { - return Q.buffer != De && Tt(Q.buffer), Fr; + return J.buffer != Oe && Nt(J.buffer), Fr; } function a() { - return Q.buffer != De && Tt(Q.buffer), Pt; + return J.buffer != Oe && Nt(J.buffer), Ot; } function i() { - return Q.buffer != De && Tt(Q.buffer), jr; + return J.buffer != Oe && Nt(J.buffer), Kr; } function p() { - return Q.buffer != De && Tt(Q.buffer), er; + return J.buffer != Oe && Nt(J.buffer), er; } var u = typeof e != "undefined" ? e : {}, c, l; u.ready = new Promise(function(F, B) { @@ -1240,422 +1240,422 @@ var M3 = Kt((Fg, Jw) => { }); var m; typeof process != "undefined" && process.listeners && (m = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }); - var f = Object.assign({}, u), d = [], h = "./this.program", g = (F, B) => { + var d = Object.assign({}, u), f = [], h = "./this.program", g = (F, B) => { throw B; - }, y = typeof window == "object", b = typeof importScripts == "function", C = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", w = u.ENVIRONMENT_IS_PTHREAD || false, k = ""; + }, x = typeof window == "object", b = typeof importScripts == "function", C = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", w = u.ENVIRONMENT_IS_PTHREAD || false, k = ""; function _(F) { return u.locateFile ? u.locateFile(F, k) : k + F; } - var E, R, A, D; - function O(F) { - if (F instanceof Di) + var $, A, R, D; + function P(F) { + if (F instanceof Hi) return; q("exiting due to exception: " + F); } if (C) { - b ? k = Vl().dirname(k) + "/" : k = __dirname + "/"; + b ? k = Rl().dirname(k) + "/" : k = __dirname + "/"; var M, L; - typeof Em == "function" && (M = Qw(), L = Vl()), E = (B, re) => (B = L.normalize(B), M.readFileSync(B, re ? void 0 : "utf8")), A = (B) => { - var re = E(B, true); - return re.buffer || (re = new Uint8Array(re)), re; - }, R = (B, re, le) => { + typeof bm == "function" && (M = qw(), L = Rl()), $ = (B, ne) => (B = L.normalize(B), M.readFileSync(B, ne ? void 0 : "utf8")), R = (B) => { + var ne = $(B, true); + return ne.buffer || (ne = new Uint8Array(ne)), ne; + }, A = (B, ne, fe) => { B = L.normalize(B), M.readFile(B, function(Te, Ze) { - Te ? le(Te) : re(Ze.buffer); + Te ? fe(Te) : ne(Ze.buffer); }); - }, process.argv.length > 1 && (h = process.argv[1].replace(/\\/g, "/")), d = process.argv.slice(2), process.on("uncaughtException", function(B) { - if (!(B instanceof Di)) + }, process.argv.length > 1 && (h = process.argv[1].replace(/\\/g, "/")), f = process.argv.slice(2), process.on("uncaughtException", function(B) { + if (!(B instanceof Hi)) throw B; }), process.on("unhandledRejection", function(B) { throw B; - }), g = (B, re) => { - if (tn()) - throw process.exitCode = B, re; - O(re), process.exit(B); + }), g = (B, ne) => { + if (Fo()) + throw process.exitCode = B, ne; + P(ne), process.exit(B); }, u.inspect = function() { return "[Emscripten Module object]"; }; let F; try { - F = D3(); + F = l3(); } catch (B) { throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'), B; } global.Worker = F.Worker; } else - (y || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r != "undefined" && r && (k = r), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", C || (E = (F) => { + (x || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r != "undefined" && r && (k = r), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", C || ($ = (F) => { var B = new XMLHttpRequest(); return B.open("GET", F, false), B.send(null), B.responseText; - }, b && (A = (F) => { + }, b && (R = (F) => { var B = new XMLHttpRequest(); return B.open("GET", F, false), B.responseType = "arraybuffer", B.send(null), new Uint8Array(B.response); - }), R = (F, B, re) => { - var le = new XMLHttpRequest(); - le.open("GET", F, true), le.responseType = "arraybuffer", le.onload = () => { - if (le.status == 200 || le.status == 0 && le.response) { - B(le.response); + }), A = (F, B, ne) => { + var fe = new XMLHttpRequest(); + fe.open("GET", F, true), fe.responseType = "arraybuffer", fe.onload = () => { + if (fe.status == 200 || fe.status == 0 && fe.response) { + B(fe.response); return; } - re(); - }, le.onerror = re, le.send(null); + ne(); + }, fe.onerror = ne, fe.send(null); }), D = (F) => document.title = F); - C && typeof performance == "undefined" && (global.performance = P3().performance); + C && typeof performance == "undefined" && (global.performance = m3().performance); var W = console.log.bind(console), V = console.warn.bind(console); C && (W = (F) => M.writeSync(1, F + ` `), V = (F) => M.writeSync(2, F + ` `)); - var G = u.print || W, q = u.printErr || V; - Object.assign(u, f), f = null, u.arguments && (d = u.arguments), u.thisProgram && (h = u.thisProgram), u.quit && (g = u.quit); - var H = 4, j = Atomics.load, Y = Atomics.store, Z = Atomics.compareExchange, ee; + var U = u.print || W, q = u.printErr || V; + Object.assign(u, d), d = null, u.arguments && (f = u.arguments), u.thisProgram && (h = u.thisProgram), u.quit && (g = u.quit); + var H = 4, j = Atomics.load, X = Atomics.store, Z = Atomics.compareExchange, ee; u.wasmBinary && (ee = u.wasmBinary); - var X = u.noExitRuntime || true; + var Y = u.noExitRuntime || true; typeof WebAssembly != "object" && Xu("no native wasm support detected"); - var Q, se, ie = false, de; - function Ie(F, B) { + var J, ie, pe = false, he; + function we(F, B) { F || Xu(B); } - var Se = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; - function Ee(F, B, re) { - for (var le = B + re, Te = B; F[Te] && !(Te >= le); ) + var ve = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; + function $e(F, B, ne) { + for (var fe = B + ne, Te = B; F[Te] && !(Te >= fe); ) ++Te; - if (Te - B > 16 && F.buffer && Se) - return Se.decode(F.buffer instanceof SharedArrayBuffer ? F.slice(B, Te) : F.subarray(B, Te)); + if (Te - B > 16 && F.buffer && ve) + return ve.decode(F.buffer instanceof SharedArrayBuffer ? F.slice(B, Te) : F.subarray(B, Te)); for (var Ze = ""; B < Te; ) { - var $e = F[B++]; - if (!($e & 128)) { - Ze += String.fromCharCode($e); + var Ae = F[B++]; + if (!(Ae & 128)) { + Ze += String.fromCharCode(Ae); continue; } var Pe = F[B++] & 63; - if (($e & 224) == 192) { - Ze += String.fromCharCode(($e & 31) << 6 | Pe); + if ((Ae & 224) == 192) { + Ze += String.fromCharCode((Ae & 31) << 6 | Pe); continue; } - var Wt = F[B++] & 63; - if (($e & 240) == 224 ? $e = ($e & 15) << 12 | Pe << 6 | Wt : $e = ($e & 7) << 18 | Pe << 12 | Wt << 6 | F[B++] & 63, $e < 65536) - Ze += String.fromCharCode($e); + var zt = F[B++] & 63; + if ((Ae & 240) == 224 ? Ae = (Ae & 15) << 12 | Pe << 6 | zt : Ae = (Ae & 7) << 18 | Pe << 12 | zt << 6 | F[B++] & 63, Ae < 65536) + Ze += String.fromCharCode(Ae); else { - var Zr = $e - 65536; - Ze += String.fromCharCode(55296 | Zr >> 10, 56320 | Zr & 1023); + var Qr = Ae - 65536; + Ze += String.fromCharCode(55296 | Qr >> 10, 56320 | Qr & 1023); } } return Ze; } - function Me(F, B) { - return F ? Ee(o(), F, B) : ""; + function Le(F, B) { + return F ? $e(o(), F, B) : ""; } - function st(F, B, re, le) { - if (!(le > 0)) + function nt(F, B, ne, fe) { + if (!(fe > 0)) return 0; - for (var Te = re, Ze = re + le - 1, $e = 0; $e < F.length; ++$e) { - var Pe = F.charCodeAt($e); + for (var Te = ne, Ze = ne + fe - 1, Ae = 0; Ae < F.length; ++Ae) { + var Pe = F.charCodeAt(Ae); if (Pe >= 55296 && Pe <= 57343) { - var Wt = F.charCodeAt(++$e); - Pe = 65536 + ((Pe & 1023) << 10) | Wt & 1023; + var zt = F.charCodeAt(++Ae); + Pe = 65536 + ((Pe & 1023) << 10) | zt & 1023; } if (Pe <= 127) { - if (re >= Ze) + if (ne >= Ze) break; - B[re++] = Pe; + B[ne++] = Pe; } else if (Pe <= 2047) { - if (re + 1 >= Ze) + if (ne + 1 >= Ze) break; - B[re++] = 192 | Pe >> 6, B[re++] = 128 | Pe & 63; + B[ne++] = 192 | Pe >> 6, B[ne++] = 128 | Pe & 63; } else if (Pe <= 65535) { - if (re + 2 >= Ze) + if (ne + 2 >= Ze) break; - B[re++] = 224 | Pe >> 12, B[re++] = 128 | Pe >> 6 & 63, B[re++] = 128 | Pe & 63; + B[ne++] = 224 | Pe >> 12, B[ne++] = 128 | Pe >> 6 & 63, B[ne++] = 128 | Pe & 63; } else { - if (re + 3 >= Ze) + if (ne + 3 >= Ze) break; - B[re++] = 240 | Pe >> 18, B[re++] = 128 | Pe >> 12 & 63, B[re++] = 128 | Pe >> 6 & 63, B[re++] = 128 | Pe & 63; + B[ne++] = 240 | Pe >> 18, B[ne++] = 128 | Pe >> 12 & 63, B[ne++] = 128 | Pe >> 6 & 63, B[ne++] = 128 | Pe & 63; } } - return B[re] = 0, re - Te; + return B[ne] = 0, ne - Te; } - function pt(F, B, re) { - return st(F, o(), B, re); + function pt(F, B, ne) { + return nt(F, o(), B, ne); } - var De, ft, at, dt, It, Fr, Pt, jr, er; - w && (De = u.buffer); - function Tt(F) { - De = F, u.HEAP8 = ft = new Int8Array(F), u.HEAP16 = dt = new Int16Array(F), u.HEAP32 = Fr = new Int32Array(F), u.HEAPU8 = at = new Uint8Array(F), u.HEAPU16 = It = new Uint16Array(F), u.HEAPU32 = Pt = new Uint32Array(F), u.HEAPF32 = jr = new Float32Array(F), u.HEAPF64 = er = new Float64Array(F); + var Oe, mt, at, ft, wt, Fr, Ot, Kr, er; + w && (Oe = u.buffer); + function Nt(F) { + Oe = F, u.HEAP8 = mt = new Int8Array(F), u.HEAP16 = ft = new Int16Array(F), u.HEAP32 = Fr = new Int32Array(F), u.HEAPU8 = at = new Uint8Array(F), u.HEAPU16 = wt = new Uint16Array(F), u.HEAPU32 = Ot = new Uint32Array(F), u.HEAPF32 = Kr = new Float32Array(F), u.HEAPF64 = er = new Float64Array(F); } var tr = u.INITIAL_MEMORY || 16777216; if (w) - Q = u.wasmMemory, De = u.buffer; + J = u.wasmMemory, Oe = u.buffer; else if (u.wasmMemory) - Q = u.wasmMemory; - else if (Q = new WebAssembly.Memory({ initial: tr / 65536, maximum: 32768, shared: true }), !(Q.buffer instanceof SharedArrayBuffer)) + J = u.wasmMemory; + else if (J = new WebAssembly.Memory({ initial: tr / 65536, maximum: 32768, shared: true }), !(J.buffer instanceof SharedArrayBuffer)) throw q("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"), C && console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"), Error("bad memory"); - Q && (De = Q.buffer), tr = De.byteLength, Tt(De); - var rr, Xr = [], Yr = [], pr = [], Qs = false; - function tn() { - return X; + J && (Oe = J.buffer), tr = Oe.byteLength, Nt(Oe); + var rr, jr = [], Xr = [], pr = [], Js = false; + function Fo() { + return Y; } - function Ua() { + function Ka() { if (u.preRun) for (typeof u.preRun == "function" && (u.preRun = [u.preRun]); u.preRun.length; ) - Lc(u.preRun.shift()); - Uc(Xr); + Ac(u.preRun.shift()); + Pc(jr); } - function jt() { - Qs = true, !w && Uc(Yr); + function Kt() { + Js = true, !w && Pc(Xr); } - function Zs() { + function ea() { if (!w) { if (u.postRun) for (typeof u.postRun == "function" && (u.postRun = [u.postRun]); u.postRun.length; ) - KS(u.postRun.shift()); - Uc(pr); + SI(u.postRun.shift()); + Pc(pr); } } - function Lc(F) { + function Ac(F) { + jr.unshift(F); + } + function Rc(F) { Xr.unshift(F); } - function Bc(F) { - Yr.unshift(F); - } - function KS(F) { + function SI(F) { pr.unshift(F); } - var Ga = 0, ju = null, Js = null; - function jS(F) { - Ga++, u.monitorRunDependencies && u.monitorRunDependencies(Ga); + var ja = 0, ju = null, ta = null; + function wI(F) { + ja++, u.monitorRunDependencies && u.monitorRunDependencies(ja); } - function XS(F) { - if (Ga--, u.monitorRunDependencies && u.monitorRunDependencies(Ga), Ga == 0 && (ju !== null && (clearInterval(ju), ju = null), Js)) { - var B = Js; - Js = null, B(); + function II(F) { + if (ja--, u.monitorRunDependencies && u.monitorRunDependencies(ja), ja == 0 && (ju !== null && (clearInterval(ju), ju = null), ta)) { + var B = ta; + ta = null, B(); } } function Xu(F) { - w ? postMessage({ cmd: "onAbort", arg: F }) : u.onAbort && u.onAbort(F), F = "Aborted(" + F + ")", q(F), ie = true, de = 1, F += ". Build with -sASSERTIONS for more info."; + w ? postMessage({ cmd: "onAbort", arg: F }) : u.onAbort && u.onAbort(F), F = "Aborted(" + F + ")", q(F), pe = true, he = 1, F += ". Build with -sASSERTIONS for more info."; var B = new WebAssembly.RuntimeError(F); throw l(B), B; } - var $x = "data:application/octet-stream;base64,"; - function nm(F) { - return F.startsWith($x); + var Ix = "data:application/octet-stream;base64,"; + function jl(F) { + return F.startsWith(Ix); } - function Vc(F) { + function Fc(F) { return F.startsWith("file://"); } - var dr; - dr = "tfjs-backend-wasm-threaded-simd.wasm", nm(dr) || (dr = _(dr)); - function sm(F) { + var fr; + fr = "tfjs-backend-wasm-threaded-simd.wasm", jl(fr) || (fr = _(fr)); + function Xl(F) { try { - if (F == dr && ee) + if (F == fr && ee) return new Uint8Array(ee); - if (A) - return A(F); + if (R) + return R(F); throw "both async and sync fetching of the wasm failed"; } catch (B) { Xu(B); } } - function Rx() { - if (!ee && (y || b)) { - if (typeof fetch == "function" && !Vc(dr)) - return fetch(dr, { credentials: "same-origin" }).then(function(F) { + function vx() { + if (!ee && (x || b)) { + if (typeof fetch == "function" && !Fc(fr)) + return fetch(fr, { credentials: "same-origin" }).then(function(F) { if (!F.ok) - throw "failed to load wasm binary file at '" + dr + "'"; + throw "failed to load wasm binary file at '" + fr + "'"; return F.arrayBuffer(); }).catch(function() { - return sm(dr); + return Xl(fr); }); - if (R) + if (A) return new Promise(function(F, B) { - R(dr, function(re) { - F(new Uint8Array(re)); + A(fr, function(ne) { + F(new Uint8Array(ne)); }, B); }); } return Promise.resolve().then(function() { - return sm(dr); + return Xl(fr); }); } - function Ax() { - var F = { env: xm, wasi_snapshot_preview1: xm }; - function B($e, Pe) { - var Wt = $e.exports; - if (u.asm = Wt, Wx(u.asm._emscripten_tls_init), rr = u.asm.__indirect_function_table, Bc(u.asm.__wasm_call_ctors), se = Pe, !w) { - var Zr = Fe.unusedWorkers.length; - Fe.unusedWorkers.forEach(function(ta) { - Fe.loadWasmModuleToWorker(ta, function() { - --Zr || XS("wasm-instantiate"); + function kx() { + var F = { env: im, wasi_snapshot_preview1: im }; + function B(Ae, Pe) { + var zt = Ae.exports; + if (u.asm = zt, Ox(u.asm._emscripten_tls_init), rr = u.asm.__indirect_function_table, Rc(u.asm.__wasm_call_ctors), ie = Pe, !w) { + var Qr = De.unusedWorkers.length; + De.unusedWorkers.forEach(function(oa) { + De.loadWasmModuleToWorker(oa, function() { + --Qr || II("wasm-instantiate"); }); }); } } - w || jS("wasm-instantiate"); - function re($e) { - B($e.instance, $e.module); + w || wI("wasm-instantiate"); + function ne(Ae) { + B(Ae.instance, Ae.module); } - function le($e) { - return Rx().then(function(Pe) { + function fe(Ae) { + return vx().then(function(Pe) { return WebAssembly.instantiate(Pe, F); }).then(function(Pe) { return Pe; - }).then($e, function(Pe) { + }).then(Ae, function(Pe) { q("failed to asynchronously prepare wasm: " + Pe), Xu(Pe); }); } function Te() { - return !ee && typeof WebAssembly.instantiateStreaming == "function" && !nm(dr) && !Vc(dr) && !C && typeof fetch == "function" ? fetch(dr, { credentials: "same-origin" }).then(function($e) { - var Pe = WebAssembly.instantiateStreaming($e, F); - return Pe.then(re, function(Wt) { - return q("wasm streaming compile failed: " + Wt), q("falling back to ArrayBuffer instantiation"), le(re); + return !ee && typeof WebAssembly.instantiateStreaming == "function" && !jl(fr) && !Fc(fr) && !C && typeof fetch == "function" ? fetch(fr, { credentials: "same-origin" }).then(function(Ae) { + var Pe = WebAssembly.instantiateStreaming(Ae, F); + return Pe.then(ne, function(zt) { + return q("wasm streaming compile failed: " + zt), q("falling back to ArrayBuffer instantiation"), fe(ne); }); - }) : le(re); + }) : fe(ne); } if (u.instantiateWasm) try { var Ze = u.instantiateWasm(F, B); return Ze; - } catch ($e) { - q("Module.instantiateWasm callback failed with error: " + $e), l($e); + } catch (Ae) { + q("Module.instantiateWasm callback failed with error: " + Ae), l(Ae); } return Te().catch(l), {}; } - var Fx, YS, Dx = {}; - function Di(F) { + var Nx, vI, Tx = {}; + function Hi(F) { this.name = "ExitStatus", this.message = "Program terminated with exit(" + F + ")", this.status = F; } - function Px(F) { - var B = Fe.pthreads[F]; - delete Fe.pthreads[F], B.terminate(), cb(F), Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(B), 1), B.pthread_ptr = 0; + function _x(F) { + var B = De.pthreads[F]; + delete De.pthreads[F], B.terminate(), sb(F), De.runningWorkers.splice(De.runningWorkers.indexOf(B), 1), B.pthread_ptr = 0; } - function Ox(F) { - var B = Fe.pthreads[F]; + function Ex(F) { + var B = De.pthreads[F]; B.postMessage({ cmd: "cancel" }); } - function zc(F) { - var B = Fe.pthreads[F]; - Ie(B), Fe.returnWorkerToPool(B); + function Dc(F) { + var B = De.pthreads[F]; + we(B), De.returnWorkerToPool(B); } - function am(F) { - var B = Fe.getNewWorker(); + function Yl(F) { + var B = De.getNewWorker(); if (!B) return 6; - Fe.runningWorkers.push(B), Fe.pthreads[F.pthread_ptr] = B, B.pthread_ptr = F.pthread_ptr; - var re = { cmd: "run", start_routine: F.startRoutine, arg: F.arg, pthread_ptr: F.pthread_ptr }; + De.runningWorkers.push(B), De.pthreads[F.pthread_ptr] = B, B.pthread_ptr = F.pthread_ptr; + var ne = { cmd: "run", start_routine: F.startRoutine, arg: F.arg, pthread_ptr: F.pthread_ptr }; return B.runPthread = () => { - re.time = performance.now(), B.postMessage(re, F.transferList); + ne.time = performance.now(), B.postMessage(ne, F.transferList); }, B.loaded && (B.runPthread(), delete B.runPthread), 0; } - var im = { varargs: void 0, get: function() { - im.varargs += 4; - var F = s()[im.varargs - 4 >> 2]; + var Ql = { varargs: void 0, get: function() { + Ql.varargs += 4; + var F = s()[Ql.varargs - 4 >> 2]; return F; }, getStr: function(F) { - var B = Me(F); + var B = Le(F); return B; } }; - function Wc(F) { + function Oc(F) { if (w) - return Ha(1, 1, F); - de = F, tn() || (Fe.terminateAllThreads(), u.onExit && u.onExit(F), ie = true), g(F, new Di(F)); + return Xa(1, 1, F); + he = F, Fo() || (De.terminateAllThreads(), u.onExit && u.onExit(F), pe = true), g(F, new Hi(F)); } - function QS(F, B) { - if (de = F, !B && w) - throw pm(F), "unwind"; - Wc(F); + function kI(F, B) { + if (he = F, !B && w) + throw Jl(F), "unwind"; + Oc(F); } - var um = QS; - function Mx(F) { - if (F instanceof Di || F == "unwind") - return de; + var Zl = kI; + function $x(F) { + if (F instanceof Hi || F == "unwind") + return he; g(1, F); } - var Fe = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], pthreads: {}, init: function() { - w ? Fe.initWorker() : Fe.initMainThread(); + var De = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], pthreads: {}, init: function() { + w ? De.initWorker() : De.initMainThread(); }, initMainThread: function() { for (var F = 8; F--; ) - Fe.allocateUnusedWorker(); + De.allocateUnusedWorker(); }, initWorker: function() { - X = false; + Y = false; }, setExitStatus: function(F) { - de = F; + he = F; }, terminateAllThreads: function() { - for (var F of Object.values(Fe.pthreads)) - Fe.returnWorkerToPool(F); - for (var F of Fe.unusedWorkers) + for (var F of Object.values(De.pthreads)) + De.returnWorkerToPool(F); + for (var F of De.unusedWorkers) F.terminate(); - Fe.unusedWorkers = []; + De.unusedWorkers = []; }, returnWorkerToPool: function(F) { var B = F.pthread_ptr; - delete Fe.pthreads[B], Fe.unusedWorkers.push(F), Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(F), 1), F.pthread_ptr = 0, cb(B); + delete De.pthreads[B], De.unusedWorkers.push(F), De.runningWorkers.splice(De.runningWorkers.indexOf(F), 1), F.pthread_ptr = 0, sb(B); }, receiveObjectTransfer: function(F) { }, threadInitTLS: function() { - Fe.tlsInitFunctions.forEach((F) => F()); + De.tlsInitFunctions.forEach((F) => F()); }, loadWasmModuleToWorker: function(F, B) { - F.onmessage = (re) => { - var le = re.data, Te = le.cmd; - if (F.pthread_ptr && (Fe.currentProxiedOperationCallerThread = F.pthread_ptr), le.targetThread && le.targetThread != Sm()) { - var Ze = Fe.pthreads[le.targetThread]; - Ze ? Ze.postMessage(le, le.transferList) : q('Internal error! Worker sent a message "' + Te + '" to target pthread ' + le.targetThread + ", but that thread no longer exists!"), Fe.currentProxiedOperationCallerThread = void 0; + F.onmessage = (ne) => { + var fe = ne.data, Te = fe.cmd; + if (F.pthread_ptr && (De.currentProxiedOperationCallerThread = F.pthread_ptr), fe.targetThread && fe.targetThread != dm()) { + var Ze = De.pthreads[fe.targetThread]; + Ze ? Ze.postMessage(fe, fe.transferList) : q('Internal error! Worker sent a message "' + Te + '" to target pthread ' + fe.targetThread + ", but that thread no longer exists!"), De.currentProxiedOperationCallerThread = void 0; return; } - Te === "processProxyingQueue" ? Gc(le.queue) : Te === "spawnThread" ? am(le) : Te === "cleanupThread" ? zc(le.thread) : Te === "killThread" ? Px(le.thread) : Te === "cancelThread" ? Ox(le.thread) : Te === "loaded" ? (F.loaded = true, B && B(F), F.runPthread && (F.runPthread(), delete F.runPthread)) : Te === "print" ? G("Thread " + le.threadId + ": " + le.text) : Te === "printErr" ? q("Thread " + le.threadId + ": " + le.text) : Te === "alert" ? alert("Thread " + le.threadId + ": " + le.text) : le.target === "setimmediate" ? F.postMessage(le) : Te === "onAbort" ? u.onAbort && u.onAbort(le.arg) : Te && q("worker sent an unknown command " + Te), Fe.currentProxiedOperationCallerThread = void 0; - }, F.onerror = (re) => { - var le = "worker sent an error!"; - throw q(le + " " + re.filename + ":" + re.lineno + ": " + re.message), re; - }, C && (F.on("message", function(re) { - F.onmessage({ data: re }); - }), F.on("error", function(re) { - F.onerror(re); + Te === "processProxyingQueue" ? Mc(fe.queue) : Te === "spawnThread" ? Yl(fe) : Te === "cleanupThread" ? Dc(fe.thread) : Te === "killThread" ? _x(fe.thread) : Te === "cancelThread" ? Ex(fe.thread) : Te === "loaded" ? (F.loaded = true, B && B(F), F.runPthread && (F.runPthread(), delete F.runPthread)) : Te === "print" ? U("Thread " + fe.threadId + ": " + fe.text) : Te === "printErr" ? q("Thread " + fe.threadId + ": " + fe.text) : Te === "alert" ? alert("Thread " + fe.threadId + ": " + fe.text) : fe.target === "setimmediate" ? F.postMessage(fe) : Te === "onAbort" ? u.onAbort && u.onAbort(fe.arg) : Te && q("worker sent an unknown command " + Te), De.currentProxiedOperationCallerThread = void 0; + }, F.onerror = (ne) => { + var fe = "worker sent an error!"; + throw q(fe + " " + ne.filename + ":" + ne.lineno + ": " + ne.message), ne; + }, C && (F.on("message", function(ne) { + F.onmessage({ data: ne }); + }), F.on("error", function(ne) { + F.onerror(ne); }), F.on("detachedExit", function() { - })), F.postMessage({ cmd: "load", urlOrBlob: u.mainScriptUrlOrBlob || r, wasmMemory: Q, wasmModule: se }); + })), F.postMessage({ cmd: "load", urlOrBlob: u.mainScriptUrlOrBlob || r, wasmMemory: J, wasmModule: ie }); }, allocateUnusedWorker: function() { var F = _("tfjs-backend-wasm-threaded-simd.worker.js"); - Fe.unusedWorkers.push(new Worker(F)); + De.unusedWorkers.push(new Worker(F)); }, getNewWorker: function() { - return Fe.unusedWorkers.length == 0 && (Fe.allocateUnusedWorker(), Fe.loadWasmModuleToWorker(Fe.unusedWorkers[0])), Fe.unusedWorkers.pop(); + return De.unusedWorkers.length == 0 && (De.allocateUnusedWorker(), De.loadWasmModuleToWorker(De.unusedWorkers[0])), De.unusedWorkers.pop(); } }; - u.PThread = Fe; - function Uc(F) { + u.PThread = De; + function Pc(F) { for (; F.length > 0; ) F.shift()(u); } - function Lx(F) { - var B = lb(), re = F(); - return vm(B), re; + function Ax(F) { + var B = ab(), ne = F(); + return fm(B), ne; } - function ZS(F) { + function NI(F) { return F; } - function JS(F) { + function TI(F) { var B = /\b_Z[\w\d_]+/g; - return F.replace(B, function(re) { - var le = re; - return re === le ? re : le + " [" + re + "]"; + return F.replace(B, function(ne) { + var fe = ne; + return ne === fe ? ne : fe + " [" + ne + "]"; }); } - function Bx() { - var F = Sm(), B = s()[F + 44 >> 2], re = s()[F + 48 >> 2], le = B - re; - a0(B, le), vm(B); + function Rx() { + var F = dm(), B = s()[F + 44 >> 2], ne = s()[F + 48 >> 2], fe = B - ne; + DI(B, fe), fm(B); } - u.establishStackSpace = Bx; - function pm(F) { + u.establishStackSpace = Rx; + function Jl(F) { if (w) - return Ha(2, 0, F); + return Xa(2, 0, F); try { - um(F); + Zl(F); } catch (B) { - Mx(B); + $x(B); } } var Yu = []; - function Vx(F) { + function Fx(F) { var B = Yu[F]; return B || (F >= Yu.length && (Yu.length = F + 1), Yu[F] = B = rr.get(F)), B; } - function zx(F, B) { - var re = Vx(F)(B); - tn() ? Fe.setExitStatus(re) : s0(re); + function Dx(F, B) { + var ne = Fx(F)(B); + Fo() ? De.setExitStatus(ne) : FI(ne); } - u.invokeEntryPoint = zx; - function e0() { + u.invokeEntryPoint = Dx; + function _I() { var F = new Error(); if (!F.stack) { try { @@ -1668,443 +1668,447 @@ var M3 = Kt((Fg, Jw) => { } return F.stack.toString(); } - function Wx(F) { - Fe.tlsInitFunctions.push(F); + function Ox(F) { + De.tlsInitFunctions.push(F); } - function Ux(F, B) { - t10().set(F, B); + function Px(F, B) { + t6().set(F, B); } - function Gx(F) { - r0(F, !b, 1, !y), Fe.threadInitTLS(); + function Mx(F) { + $I(F, !b, 1, !x), De.threadInitTLS(); } - function Hx(F) { - w ? postMessage({ cmd: "cleanupThread", thread: F }) : zc(F); + function Lx(F) { + w ? postMessage({ cmd: "cleanupThread", thread: F }) : Dc(F); } - function cm(F, B, re, le) { - return w ? Ha(3, 1, F, B, re, le) : lm(F, B, re, le); + function em(F, B, ne, fe) { + return w ? Xa(3, 1, F, B, ne, fe) : tm(F, B, ne, fe); } - function lm(F, B, re, le) { + function tm(F, B, ne, fe) { if (typeof SharedArrayBuffer == "undefined") return q("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; var Te = [], Ze = 0; if (w && (Te.length === 0 || Ze)) - return cm(F, B, re, le); + return em(F, B, ne, fe); if (Ze) return Ze; - var $e = { startRoutine: re, pthread_ptr: F, arg: le, transferList: Te }; - return w ? ($e.cmd = "spawnThread", postMessage($e, Te), 0) : am($e); + var Ae = { startRoutine: ne, pthread_ptr: F, arg: fe, transferList: Te }; + return w ? (Ae.cmd = "spawnThread", postMessage(Ae, Te), 0) : Yl(Ae); } - function qx() { + function Bx() { return 2097152; } - var Kx = true; - function jx() { - return Kx; + var Vx = true; + function zx() { + return Vx; } - function Gc(F) { - Atomics.store(s(), F >> 2, 1), Sm() && n0(F), Atomics.compareExchange(s(), F >> 2, 1, 0); + function Mc(F) { + Atomics.store(s(), F >> 2, 1), dm() && RI(F), Atomics.compareExchange(s(), F >> 2, 1, 0); } - u.executeNotifiedProxyingQueue = Gc; - function Xx(F, B, re, le) { + u.executeNotifiedProxyingQueue = Mc; + function Wx(F, B, ne, fe) { if (F == B) - setTimeout(() => Gc(le)); + setTimeout(() => Mc(fe)); else if (w) - postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: le }); + postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: fe }); else { - var Te = Fe.pthreads[F]; + var Te = De.pthreads[F]; if (!Te) return; - Te.postMessage({ cmd: "processProxyingQueue", queue: le }); + Te.postMessage({ cmd: "processProxyingQueue", queue: fe }); } return 1; } - function Yx(F, B, re) { + function Ux(F, B, ne) { return -1; } - function Qx() { + function Gx() { Xu(""); } - function Pi(F) { - Pi.shown || (Pi.shown = {}), Pi.shown[F] || (Pi.shown[F] = 1, C && (F = "warning: " + F), q(F)); + function qi(F) { + qi.shown || (qi.shown = {}), qi.shown[F] || (qi.shown[F] = 1, C && (F = "warning: " + F), q(F)); } - function Zx() { - C || b || Pi("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); + function Hx() { + C || b || qi("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); } - function Jx() { + function qx() { return Date.now(); } - function mm() { + function rm() { return 2147483648; } - function ey() { - return mm(); + function Kx() { + return rm(); } var Qu; C ? Qu = () => { var F = process.hrtime(); return F[0] * 1e3 + F[1] / 1e6; } : w ? Qu = () => performance.now() - u.__performance_now_clock_drift : Qu = () => performance.now(); - function ty(F, B, re) { - o().copyWithin(F, B, B + re); + function jx(F, B, ne) { + o().copyWithin(F, B, B + ne); } - function ry() { - return C ? O3().cpus().length : navigator.hardwareConcurrency; + function Xx() { + return C ? d3().cpus().length : navigator.hardwareConcurrency; } - function Ha(F, B) { - var re = arguments.length - 2, le = arguments; - return Lx(() => { - for (var Te = re, Ze = km(Te * 8), $e = Ze >> 3, Pe = 0; Pe < re; Pe++) { - var Wt = le[2 + Pe]; - p()[$e + Pe] = Wt; + function Xa(F, B) { + var ne = arguments.length - 2, fe = arguments; + return Ax(() => { + for (var Te = ne, Ze = hm(Te * 8), Ae = Ze >> 3, Pe = 0; Pe < ne; Pe++) { + var zt = fe[2 + Pe]; + p()[Ae + Pe] = zt; } - return o0(F, Te, Ze, B); + return AI(F, Te, Ze, B); }); } - var Hc = []; - function oy(F, B, re) { - Hc.length = B; - for (var le = re >> 3, Te = 0; Te < B; Te++) - Hc[Te] = p()[le + Te]; - var Ze = F < 0, $e = Ze ? Dx[-F - 1] : ly[F]; - return $e.apply(null, Hc); + var Lc = []; + function Yx(F, B, ne) { + Lc.length = B; + for (var fe = ne >> 3, Te = 0; Te < B; Te++) + Lc[Te] = p()[fe + Te]; + var Ze = F < 0, Ae = Ze ? Tx[-F - 1] : ny[F]; + return Ae.apply(null, Lc); } - function ny(F) { + function Qx(F) { try { - return Q.grow(F - De.byteLength + 65535 >>> 16), Tt(Q.buffer), 1; + return J.grow(F - Oe.byteLength + 65535 >>> 16), Nt(J.buffer), 1; } catch (B) { } } - function sy(F) { + function Zx(F) { var B = o().length; if (F = F >>> 0, F <= B) return false; - var re = mm(); - if (F > re) + var ne = rm(); + if (F > ne) return false; - let le = (Wt, Zr) => Wt + (Zr - Wt % Zr) % Zr; + let fe = (zt, Qr) => zt + (Qr - zt % Qr) % Qr; for (var Te = 1; Te <= 4; Te *= 2) { var Ze = B * (1 + 0.2 / Te); Ze = Math.min(Ze, F + 100663296); - var $e = Math.min(re, le(Math.max(F, Ze), 65536)), Pe = ny($e); + var Ae = Math.min(ne, fe(Math.max(F, Ze), 65536)), Pe = Qx(Ae); if (Pe) return true; } return false; } - function ay() { + function Jx() { throw "unwind"; } - function fm(F) { - return w ? Ha(4, 1, F) : 52; + function om(F) { + return w ? Xa(4, 1, F) : 52; } - function dm(F, B, re, le, Te) { - return w ? Ha(5, 1, F, B, re, le, Te) : 70; + function nm(F, B, ne, fe, Te) { + return w ? Xa(5, 1, F, B, ne, fe, Te) : 70; } - var iy = [null, [], []]; - function uy(F, B) { - var re = iy[F]; - B === 0 || B === 10 ? ((F === 1 ? G : q)(Ee(re, 0)), re.length = 0) : re.push(B); + var ey = [null, [], []]; + function ty(F, B) { + var ne = ey[F]; + B === 0 || B === 10 ? ((F === 1 ? U : q)($e(ne, 0)), ne.length = 0) : ne.push(B); } - function hm(F, B, re, le) { + function sm(F, B, ne, fe) { if (w) - return Ha(6, 1, F, B, re, le); - for (var Te = 0, Ze = 0; Ze < re; Ze++) { - var $e = a()[B >> 2], Pe = a()[B + 4 >> 2]; + return Xa(6, 1, F, B, ne, fe); + for (var Te = 0, Ze = 0; Ze < ne; Ze++) { + var Ae = a()[B >> 2], Pe = a()[B + 4 >> 2]; B += 8; - for (var Wt = 0; Wt < Pe; Wt++) - uy(F, o()[$e + Wt]); + for (var zt = 0; zt < Pe; zt++) + ty(F, o()[Ae + zt]); Te += Pe; } - return a()[le >> 2] = Te, 0; + return a()[fe >> 2] = Te, 0; } - function gm(F) { + function am(F) { var B = u["_" + F]; return B; } - function py(F, B, re, le, Te) { + function ry(F, B, ne, fe, Te) { var Ze = { string: (Dr) => { var tp = 0; if (Dr != null && Dr !== 0) { - var p0 = (Dr.length << 2) + 1; - tp = km(p0), pt(Dr, tp, p0); + var MI = (Dr.length << 2) + 1; + tp = hm(MI), pt(Dr, tp, MI); } return tp; }, array: (Dr) => { - var tp = km(Dr.length); - return Ux(Dr, tp), tp; + var tp = hm(Dr.length); + return Px(Dr, tp), tp; } }; - function $e(Dr) { - return B === "string" ? Me(Dr) : B === "boolean" ? Boolean(Dr) : Dr; + function Ae(Dr) { + return B === "string" ? Le(Dr) : B === "boolean" ? Boolean(Dr) : Dr; } - var Pe = gm(F), Wt = [], Zr = 0; - if (le) - for (var ta = 0; ta < le.length; ta++) { - var u0 = Ze[re[ta]]; - u0 ? (Zr === 0 && (Zr = lb()), Wt[ta] = u0(le[ta])) : Wt[ta] = le[ta]; + var Pe = am(F), zt = [], Qr = 0; + if (fe) + for (var oa = 0; oa < fe.length; oa++) { + var PI = Ze[ne[oa]]; + PI ? (Qr === 0 && (Qr = ab()), zt[oa] = PI(fe[oa])) : zt[oa] = fe[oa]; } - var mb = Pe.apply(null, Wt); - function YV(Dr) { - return Zr !== 0 && vm(Zr), $e(Dr); + var ib = Pe.apply(null, zt); + function xV(Dr) { + return Qr !== 0 && fm(Qr), Ae(Dr); } - return mb = YV(mb), mb; + return ib = xV(ib), ib; } - function cy(F, B, re, le) { - re = re || []; - var Te = re.every(($e) => $e === "number" || $e === "boolean"), Ze = B !== "string"; - return Ze && Te && !le ? gm(F) : function() { - return py(F, B, re, arguments, le); + function oy(F, B, ne, fe) { + ne = ne || []; + var Te = ne.every((Ae) => Ae === "number" || Ae === "boolean"), Ze = B !== "string"; + return Ze && Te && !fe ? am(F) : function() { + return ry(F, B, ne, arguments, fe); }; } - Fe.init(); - var ly = [null, Wc, pm, cm, fm, dm, hm], xm = { __emscripten_init_main_thread_js: Gx, __emscripten_thread_cleanup: Hx, __pthread_create_js: lm, _emscripten_default_pthread_stack_size: qx, _emscripten_get_now_is_monotonic: jx, _emscripten_notify_task_queue: Xx, _emscripten_set_offscreencanvas_size: Yx, abort: Qx, emscripten_check_blocking_allowed: Zx, emscripten_date_now: Jx, emscripten_get_heap_max: ey, emscripten_get_now: Qu, emscripten_memcpy_big: ty, emscripten_num_logical_cores: ry, emscripten_receive_on_main_thread_js: oy, emscripten_resize_heap: sy, emscripten_unwind_to_js_event_loop: ay, exit: um, fd_close: fm, fd_seek: dm, fd_write: hm, memory: Q || u.wasmMemory }, t0 = Ax(), my = u.___wasm_call_ctors = function() { - return (my = u.___wasm_call_ctors = u.asm.__wasm_call_ctors).apply(null, arguments); - }, fy = u._init = function() { - return (fy = u._init = u.asm.init).apply(null, arguments); - }, dy = u._init_with_threads_count = function() { - return (dy = u._init_with_threads_count = u.asm.init_with_threads_count).apply(null, arguments); - }, hy = u._get_threads_count = function() { - return (hy = u._get_threads_count = u.asm.get_threads_count).apply(null, arguments); - }, gy = u._register_tensor = function() { - return (gy = u._register_tensor = u.asm.register_tensor).apply(null, arguments); - }, xy = u._dispose_data = function() { - return (xy = u._dispose_data = u.asm.dispose_data).apply(null, arguments); - }, yy = u._dispose = function() { - return (yy = u._dispose = u.asm.dispose).apply(null, arguments); - }, by = u._Abs = function() { - return (by = u._Abs = u.asm.Abs).apply(null, arguments); - }, Cy = u._Add = function() { - return (Cy = u._Add = u.asm.Add).apply(null, arguments); - }, Iy = u._AddN = function() { - return (Iy = u._AddN = u.asm.AddN).apply(null, arguments); - }, wy = u._All = function() { - return (wy = u._All = u.asm.All).apply(null, arguments); - }, Sy = u._Any = function() { - return (Sy = u._Any = u.asm.Any).apply(null, arguments); - }, vy = u._ArgMax = function() { - return (vy = u._ArgMax = u.asm.ArgMax).apply(null, arguments); - }, ky = u._AvgPool = function() { - return (ky = u._AvgPool = u.asm.AvgPool).apply(null, arguments); - }, Ty = u._BatchMatMul = function() { - return (Ty = u._BatchMatMul = u.asm.BatchMatMul).apply(null, arguments); - }, Ny = u._Ceil = function() { - return (Ny = u._Ceil = u.asm.Ceil).apply(null, arguments); - }, _y = u._ClipByValue = function() { - return (_y = u._ClipByValue = u.asm.ClipByValue).apply(null, arguments); - }, Ey = u._Conv2D = function() { - return (Ey = u._Conv2D = u.asm.Conv2D).apply(null, arguments); - }, $y = u._Conv2DBackpropInput = function() { - return ($y = u._Conv2DBackpropInput = u.asm.Conv2DBackpropInput).apply(null, arguments); - }, Ry = u._Cos = function() { - return (Ry = u._Cos = u.asm.Cos).apply(null, arguments); - }, Ay = u._Cosh = function() { - return (Ay = u._Cosh = u.asm.Cosh).apply(null, arguments); - }, Fy = u._CropAndResize = function() { - return (Fy = u._CropAndResize = u.asm.CropAndResize).apply(null, arguments); - }, Dy = u._Cumprod = function() { - return (Dy = u._Cumprod = u.asm.Cumprod).apply(null, arguments); - }, Py = u._Cumsum = function() { - return (Py = u._Cumsum = u.asm.Cumsum).apply(null, arguments); - }, Oy = u._DepthToSpace = function() { - return (Oy = u._DepthToSpace = u.asm.DepthToSpace).apply(null, arguments); - }, My = u._DepthwiseConv2dNative = function() { - return (My = u._DepthwiseConv2dNative = u.asm.DepthwiseConv2dNative).apply(null, arguments); - }, Ly = u._Elu = function() { - return (Ly = u._Elu = u.asm.Elu).apply(null, arguments); - }, By = u._Equal = function() { - return (By = u._Equal = u.asm.Equal).apply(null, arguments); - }, Vy = u._Exp = function() { - return (Vy = u._Exp = u.asm.Exp).apply(null, arguments); - }, zy = u._FlipLeftRight = function() { - return (zy = u._FlipLeftRight = u.asm.FlipLeftRight).apply(null, arguments); - }, Wy = u._Floor = function() { - return (Wy = u._Floor = u.asm.Floor).apply(null, arguments); - }, Uy = u._FloorDiv = function() { - return (Uy = u._FloorDiv = u.asm.FloorDiv).apply(null, arguments); - }, Gy = u._FusedBatchNorm = function() { - return (Gy = u._FusedBatchNorm = u.asm.FusedBatchNorm).apply(null, arguments); - }, Hy = u._FusedConv2D = function() { - return (Hy = u._FusedConv2D = u.asm.FusedConv2D).apply(null, arguments); - }, qy = u._FusedDepthwiseConv2D = function() { - return (qy = u._FusedDepthwiseConv2D = u.asm.FusedDepthwiseConv2D).apply(null, arguments); - }, Ky = u._Gather = function() { - return (Ky = u._Gather = u.asm.Gather).apply(null, arguments); - }, jy = u._GatherNd = function() { - return (jy = u._GatherNd = u.asm.GatherNd).apply(null, arguments); - }, Xy = u._Greater = function() { - return (Xy = u._Greater = u.asm.Greater).apply(null, arguments); - }, Yy = u._GreaterEqual = function() { - return (Yy = u._GreaterEqual = u.asm.GreaterEqual).apply(null, arguments); - }, Qy = u._LeakyRelu = function() { - return (Qy = u._LeakyRelu = u.asm.LeakyRelu).apply(null, arguments); - }, Zy = u._Less = function() { - return (Zy = u._Less = u.asm.Less).apply(null, arguments); - }, Jy = u._LessEqual = function() { - return (Jy = u._LessEqual = u.asm.LessEqual).apply(null, arguments); - }, eb = u._Log = function() { - return (eb = u._Log = u.asm.Log).apply(null, arguments); - }, tb = u._LogicalAnd = function() { - return (tb = u._LogicalAnd = u.asm.LogicalAnd).apply(null, arguments); - }, rb = u._LogicalNot = function() { - return (rb = u._LogicalNot = u.asm.LogicalNot).apply(null, arguments); - }, ob = u._LogicalOr = function() { - return (ob = u._LogicalOr = u.asm.LogicalOr).apply(null, arguments); - }, nb = u._LogicalXor = function() { - return (nb = u._LogicalXor = u.asm.LogicalXor).apply(null, arguments); - }, sb = u._Max = function() { - return (sb = u._Max = u.asm.Max).apply(null, arguments); - }, ym = u._MaxPool = function() { - return (ym = u._MaxPool = u.asm.MaxPool).apply(null, arguments); - }, bm = u._Maximum = function() { - return (bm = u._Maximum = u.asm.Maximum).apply(null, arguments); - }, qc = u._Mean = function() { - return (qc = u._Mean = u.asm.Mean).apply(null, arguments); - }, ab = u._Min = function() { - return (ab = u._Min = u.asm.Min).apply(null, arguments); - }, ib = u._Minimum = function() { - return (ib = u._Minimum = u.asm.Minimum).apply(null, arguments); - }, Zu = u._MirrorPad = function() { - return (Zu = u._MirrorPad = u.asm.MirrorPad).apply(null, arguments); - }, Cm = u._Multiply = function() { - return (Cm = u._Multiply = u.asm.Multiply).apply(null, arguments); - }, Ju = u._Neg = function() { - return (Ju = u._Neg = u.asm.Neg).apply(null, arguments); - }, ep = u._NonMaxSuppressionV3 = function() { - return (ep = u._NonMaxSuppressionV3 = u.asm.NonMaxSuppressionV3).apply(null, arguments); - }, ub = u._NonMaxSuppressionV4 = function() { - return (ub = u._NonMaxSuppressionV4 = u.asm.NonMaxSuppressionV4).apply(null, arguments); - }, U = u._NonMaxSuppressionV5 = function() { - return (U = u._NonMaxSuppressionV5 = u.asm.NonMaxSuppressionV5).apply(null, arguments); - }, te = u._NotEqual = function() { - return (te = u._NotEqual = u.asm.NotEqual).apply(null, arguments); - }, ve = u._OneHot = function() { - return (ve = u._OneHot = u.asm.OneHot).apply(null, arguments); - }, Ke = u._PadV2 = function() { - return (Ke = u._PadV2 = u.asm.PadV2).apply(null, arguments); - }, Nt = u._Pow = function() { - return (Nt = u._Pow = u.asm.Pow).apply(null, arguments); - }, _t = u._Prelu = function() { - return (_t = u._Prelu = u.asm.Prelu).apply(null, arguments); - }, He = u._Prod = function() { - return (He = u._Prod = u.asm.Prod).apply(null, arguments); - }, ze = u._RealDiv = function() { - return (ze = u._RealDiv = u.asm.RealDiv).apply(null, arguments); - }, zt = u._Relu = function() { - return (zt = u._Relu = u.asm.Relu).apply(null, arguments); - }, Qr = u._Relu6 = function() { - return (Qr = u._Relu6 = u.asm.Relu6).apply(null, arguments); - }, ea = u._ResizeBilinear = function() { - return (ea = u._ResizeBilinear = u.asm.ResizeBilinear).apply(null, arguments); - }, Im = u._ResizeNearestNeighbor = function() { - return (Im = u._ResizeNearestNeighbor = u.asm.ResizeNearestNeighbor).apply(null, arguments); - }, Kc = u._Reverse = function() { - return (Kc = u._Reverse = u.asm.Reverse).apply(null, arguments); - }, pb = u._RotateWithOffset = function() { - return (pb = u._RotateWithOffset = u.asm.RotateWithOffset).apply(null, arguments); + De.init(); + var ny = [null, Oc, Jl, em, om, nm, sm], im = { __emscripten_init_main_thread_js: Mx, __emscripten_thread_cleanup: Lx, __pthread_create_js: tm, _emscripten_default_pthread_stack_size: Bx, _emscripten_get_now_is_monotonic: zx, _emscripten_notify_task_queue: Wx, _emscripten_set_offscreencanvas_size: Ux, abort: Gx, emscripten_check_blocking_allowed: Hx, emscripten_date_now: qx, emscripten_get_heap_max: Kx, emscripten_get_now: Qu, emscripten_memcpy_big: jx, emscripten_num_logical_cores: Xx, emscripten_receive_on_main_thread_js: Yx, emscripten_resize_heap: Zx, emscripten_unwind_to_js_event_loop: Jx, exit: Zl, fd_close: om, fd_seek: nm, fd_write: sm, memory: J || u.wasmMemory }, EI = kx(), sy = u.___wasm_call_ctors = function() { + return (sy = u.___wasm_call_ctors = u.asm.__wasm_call_ctors).apply(null, arguments); + }, ay = u._init = function() { + return (ay = u._init = u.asm.init).apply(null, arguments); + }, iy = u._init_with_threads_count = function() { + return (iy = u._init_with_threads_count = u.asm.init_with_threads_count).apply(null, arguments); + }, uy = u._get_threads_count = function() { + return (uy = u._get_threads_count = u.asm.get_threads_count).apply(null, arguments); + }, py = u._register_tensor = function() { + return (py = u._register_tensor = u.asm.register_tensor).apply(null, arguments); + }, cy = u._dispose_data = function() { + return (cy = u._dispose_data = u.asm.dispose_data).apply(null, arguments); + }, ly = u._dispose = function() { + return (ly = u._dispose = u.asm.dispose).apply(null, arguments); + }, my = u._Abs = function() { + return (my = u._Abs = u.asm.Abs).apply(null, arguments); + }, dy = u._Add = function() { + return (dy = u._Add = u.asm.Add).apply(null, arguments); + }, fy = u._AddN = function() { + return (fy = u._AddN = u.asm.AddN).apply(null, arguments); + }, hy = u._All = function() { + return (hy = u._All = u.asm.All).apply(null, arguments); + }, gy = u._Any = function() { + return (gy = u._Any = u.asm.Any).apply(null, arguments); + }, xy = u._ArgMax = function() { + return (xy = u._ArgMax = u.asm.ArgMax).apply(null, arguments); + }, yy = u._AvgPool = function() { + return (yy = u._AvgPool = u.asm.AvgPool).apply(null, arguments); + }, by = u._BatchMatMul = function() { + return (by = u._BatchMatMul = u.asm.BatchMatMul).apply(null, arguments); + }, Cy = u._Ceil = function() { + return (Cy = u._Ceil = u.asm.Ceil).apply(null, arguments); + }, Sy = u._ClipByValue = function() { + return (Sy = u._ClipByValue = u.asm.ClipByValue).apply(null, arguments); + }, wy = u._Conv2D = function() { + return (wy = u._Conv2D = u.asm.Conv2D).apply(null, arguments); + }, Iy = u._Conv2DBackpropInput = function() { + return (Iy = u._Conv2DBackpropInput = u.asm.Conv2DBackpropInput).apply(null, arguments); + }, vy = u._Cos = function() { + return (vy = u._Cos = u.asm.Cos).apply(null, arguments); + }, ky = u._Cosh = function() { + return (ky = u._Cosh = u.asm.Cosh).apply(null, arguments); + }, Ny = u._CropAndResize = function() { + return (Ny = u._CropAndResize = u.asm.CropAndResize).apply(null, arguments); + }, Ty = u._Cumprod = function() { + return (Ty = u._Cumprod = u.asm.Cumprod).apply(null, arguments); + }, _y = u._Cumsum = function() { + return (_y = u._Cumsum = u.asm.Cumsum).apply(null, arguments); + }, Ey = u._DepthToSpace = function() { + return (Ey = u._DepthToSpace = u.asm.DepthToSpace).apply(null, arguments); + }, $y = u._DepthwiseConv2dNative = function() { + return ($y = u._DepthwiseConv2dNative = u.asm.DepthwiseConv2dNative).apply(null, arguments); + }, Ay = u._Elu = function() { + return (Ay = u._Elu = u.asm.Elu).apply(null, arguments); + }, Ry = u._Equal = function() { + return (Ry = u._Equal = u.asm.Equal).apply(null, arguments); + }, Fy = u._Exp = function() { + return (Fy = u._Exp = u.asm.Exp).apply(null, arguments); + }, Dy = u._FlipLeftRight = function() { + return (Dy = u._FlipLeftRight = u.asm.FlipLeftRight).apply(null, arguments); + }, Oy = u._Floor = function() { + return (Oy = u._Floor = u.asm.Floor).apply(null, arguments); + }, Py = u._FloorDiv = function() { + return (Py = u._FloorDiv = u.asm.FloorDiv).apply(null, arguments); + }, My = u._FusedBatchNorm = function() { + return (My = u._FusedBatchNorm = u.asm.FusedBatchNorm).apply(null, arguments); + }, Ly = u._FusedConv2D = function() { + return (Ly = u._FusedConv2D = u.asm.FusedConv2D).apply(null, arguments); + }, By = u._FusedDepthwiseConv2D = function() { + return (By = u._FusedDepthwiseConv2D = u.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, Vy = u._Gather = function() { + return (Vy = u._Gather = u.asm.Gather).apply(null, arguments); + }, zy = u._GatherNd = function() { + return (zy = u._GatherNd = u.asm.GatherNd).apply(null, arguments); + }, Wy = u._Greater = function() { + return (Wy = u._Greater = u.asm.Greater).apply(null, arguments); + }, Uy = u._GreaterEqual = function() { + return (Uy = u._GreaterEqual = u.asm.GreaterEqual).apply(null, arguments); + }, Gy = u._IsNan = function() { + return (Gy = u._IsNan = u.asm.IsNan).apply(null, arguments); + }, Hy = u._LeakyRelu = function() { + return (Hy = u._LeakyRelu = u.asm.LeakyRelu).apply(null, arguments); + }, qy = u._Less = function() { + return (qy = u._Less = u.asm.Less).apply(null, arguments); + }, Ky = u._LessEqual = function() { + return (Ky = u._LessEqual = u.asm.LessEqual).apply(null, arguments); + }, jy = u._Log = function() { + return (jy = u._Log = u.asm.Log).apply(null, arguments); + }, Xy = u._LogicalAnd = function() { + return (Xy = u._LogicalAnd = u.asm.LogicalAnd).apply(null, arguments); + }, Yy = u._LogicalNot = function() { + return (Yy = u._LogicalNot = u.asm.LogicalNot).apply(null, arguments); + }, Qy = u._LogicalOr = function() { + return (Qy = u._LogicalOr = u.asm.LogicalOr).apply(null, arguments); + }, Zy = u._LogicalXor = function() { + return (Zy = u._LogicalXor = u.asm.LogicalXor).apply(null, arguments); + }, Jy = u._Max = function() { + return (Jy = u._Max = u.asm.Max).apply(null, arguments); + }, eb = u._MaxPool = function() { + return (eb = u._MaxPool = u.asm.MaxPool).apply(null, arguments); + }, um = u._Maximum = function() { + return (um = u._Maximum = u.asm.Maximum).apply(null, arguments); + }, pm = u._Mean = function() { + return (pm = u._Mean = u.asm.Mean).apply(null, arguments); + }, Bc = u._Min = function() { + return (Bc = u._Min = u.asm.Min).apply(null, arguments); + }, tb = u._Minimum = function() { + return (tb = u._Minimum = u.asm.Minimum).apply(null, arguments); + }, rb = u._MirrorPad = function() { + return (rb = u._MirrorPad = u.asm.MirrorPad).apply(null, arguments); + }, Zu = u._Multiply = function() { + return (Zu = u._Multiply = u.asm.Multiply).apply(null, arguments); + }, cm = u._Neg = function() { + return (cm = u._Neg = u.asm.Neg).apply(null, arguments); + }, Ju = u._NonMaxSuppressionV3 = function() { + return (Ju = u._NonMaxSuppressionV3 = u.asm.NonMaxSuppressionV3).apply(null, arguments); + }, ep = u._NonMaxSuppressionV4 = function() { + return (ep = u._NonMaxSuppressionV4 = u.asm.NonMaxSuppressionV4).apply(null, arguments); + }, ob = u._NonMaxSuppressionV5 = function() { + return (ob = u._NonMaxSuppressionV5 = u.asm.NonMaxSuppressionV5).apply(null, arguments); + }, G = u._NotEqual = function() { + return (G = u._NotEqual = u.asm.NotEqual).apply(null, arguments); + }, oe = u._OneHot = function() { + return (oe = u._OneHot = u.asm.OneHot).apply(null, arguments); + }, ke = u._PadV2 = function() { + return (ke = u._PadV2 = u.asm.PadV2).apply(null, arguments); + }, je = u._Pow = function() { + return (je = u._Pow = u.asm.Pow).apply(null, arguments); + }, Tt = u._Prelu = function() { + return (Tt = u._Prelu = u.asm.Prelu).apply(null, arguments); + }, _t = u._Prod = function() { + return (_t = u._Prod = u.asm.Prod).apply(null, arguments); + }, qe = u._RealDiv = function() { + return (qe = u._RealDiv = u.asm.RealDiv).apply(null, arguments); + }, We = u._Reciprocal = function() { + return (We = u._Reciprocal = u.asm.Reciprocal).apply(null, arguments); + }, Vt = u._Relu = function() { + return (Vt = u._Relu = u.asm.Relu).apply(null, arguments); + }, Yr = u._Relu6 = function() { + return (Yr = u._Relu6 = u.asm.Relu6).apply(null, arguments); + }, ra = u._ResizeBilinear = function() { + return (ra = u._ResizeBilinear = u.asm.ResizeBilinear).apply(null, arguments); + }, lm = u._ResizeNearestNeighbor = function() { + return (lm = u._ResizeNearestNeighbor = u.asm.ResizeNearestNeighbor).apply(null, arguments); + }, Vc = u._Reverse = function() { + return (Vc = u._Reverse = u.asm.Reverse).apply(null, arguments); + }, nb = u._RotateWithOffset = function() { + return (nb = u._RotateWithOffset = u.asm.RotateWithOffset).apply(null, arguments); }, hr = u._Round = function() { return (hr = u._Round = u.asm.Round).apply(null, arguments); - }, qa = u._Rsqrt = function() { - return (qa = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); - }, wm = u._ScatterNd = function() { - return (wm = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); - }, yV = u._SelectV2 = function() { - return (yV = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); - }, bV = u._Sigmoid = function() { - return (bV = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); - }, CV = u._Sin = function() { - return (CV = u._Sin = u.asm.Sin).apply(null, arguments); - }, IV = u._Softmax = function() { - return (IV = u._Softmax = u.asm.Softmax).apply(null, arguments); - }, wV = u._SparseFillEmptyRows = function() { - return (wV = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); - }, SV = u._SparseReshape = function() { - return (SV = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); - }, vV = u._SparseSegmentReduction = function() { - return (vV = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); - }, kV = u._Sqrt = function() { - return (kV = u._Sqrt = u.asm.Sqrt).apply(null, arguments); - }, TV = u._Square = function() { - return (TV = u._Square = u.asm.Square).apply(null, arguments); - }, NV = u._SquaredDifference = function() { - return (NV = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); - }, _V = u._Step = function() { - return (_V = u._Step = u.asm.Step).apply(null, arguments); - }, EV = u._StridedSlice = function() { - return (EV = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); - }, $V = u._Sub = function() { - return ($V = u._Sub = u.asm.Sub).apply(null, arguments); - }, RV = u._Sum = function() { - return (RV = u._Sum = u.asm.Sum).apply(null, arguments); - }, AV = u._Tan = function() { - return (AV = u._Tan = u.asm.Tan).apply(null, arguments); - }, FV = u._Tanh = function() { - return (FV = u._Tanh = u.asm.Tanh).apply(null, arguments); - }, DV = u._Tile = function() { - return (DV = u._Tile = u.asm.Tile).apply(null, arguments); - }, PV = u._TopK = function() { - return (PV = u._TopK = u.asm.TopK).apply(null, arguments); - }, OV = u._Transform = function() { - return (OV = u._Transform = u.asm.Transform).apply(null, arguments); - }, MV = u._Transpose = function() { - return (MV = u._Transpose = u.asm.Transpose).apply(null, arguments); - }, LV = u.__FusedMatMul = function() { - return (LV = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); - }, BV = u._malloc = function() { - return (BV = u._malloc = u.asm.malloc).apply(null, arguments); - }, VV = u._free = function() { - return (VV = u._free = u.asm.free).apply(null, arguments); - }, zV = u.__emscripten_tls_init = function() { - return (zV = u.__emscripten_tls_init = u.asm._emscripten_tls_init).apply(null, arguments); - }, Sm = u._pthread_self = function() { - return (Sm = u._pthread_self = u.asm.pthread_self).apply(null, arguments); - }, WV = u.___errno_location = function() { - return (WV = u.___errno_location = u.asm.__errno_location).apply(null, arguments); - }, r0 = u.__emscripten_thread_init = function() { - return (r0 = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); - }, UV = u.__emscripten_thread_crashed = function() { - return (UV = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); - }, GV = u._emscripten_main_thread_process_queued_calls = function() { - return (GV = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); - }, HV = u._emscripten_main_browser_thread_id = function() { - return (HV = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); - }, o0 = u._emscripten_run_in_main_runtime_thread_js = function() { - return (o0 = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); - }, qV = u._emscripten_dispatch_to_thread_ = function() { - return (qV = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); - }, n0 = u.__emscripten_proxy_execute_task_queue = function() { - return (n0 = u.__emscripten_proxy_execute_task_queue = u.asm._emscripten_proxy_execute_task_queue).apply(null, arguments); - }, cb = u.__emscripten_thread_free_data = function() { - return (cb = u.__emscripten_thread_free_data = u.asm._emscripten_thread_free_data).apply(null, arguments); - }, s0 = u.__emscripten_thread_exit = function() { - return (s0 = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); - }, a0 = u._emscripten_stack_set_limits = function() { - return (a0 = u._emscripten_stack_set_limits = u.asm.emscripten_stack_set_limits).apply(null, arguments); - }, lb = u.stackSave = function() { - return (lb = u.stackSave = u.asm.stackSave).apply(null, arguments); - }, vm = u.stackRestore = function() { - return (vm = u.stackRestore = u.asm.stackRestore).apply(null, arguments); - }, km = u.stackAlloc = function() { - return (km = u.stackAlloc = u.asm.stackAlloc).apply(null, arguments); - }, KV = u.dynCall_iijjiiii = function() { - return (KV = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); - }, jV = u.dynCall_jiji = function() { - return (jV = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); + }, Ya = u._Rsqrt = function() { + return (Ya = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); + }, mm = u._ScatterNd = function() { + return (mm = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); + }, BB = u._SelectV2 = function() { + return (BB = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); + }, VB = u._Sigmoid = function() { + return (VB = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); + }, zB = u._Sin = function() { + return (zB = u._Sin = u.asm.Sin).apply(null, arguments); + }, WB = u._Softmax = function() { + return (WB = u._Softmax = u.asm.Softmax).apply(null, arguments); + }, UB = u._SparseFillEmptyRows = function() { + return (UB = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); + }, GB = u._SparseReshape = function() { + return (GB = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); + }, HB = u._SparseSegmentReduction = function() { + return (HB = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); + }, qB = u._Sqrt = function() { + return (qB = u._Sqrt = u.asm.Sqrt).apply(null, arguments); + }, KB = u._Square = function() { + return (KB = u._Square = u.asm.Square).apply(null, arguments); + }, jB = u._SquaredDifference = function() { + return (jB = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); + }, XB = u._Step = function() { + return (XB = u._Step = u.asm.Step).apply(null, arguments); + }, YB = u._StridedSlice = function() { + return (YB = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); + }, QB = u._Sub = function() { + return (QB = u._Sub = u.asm.Sub).apply(null, arguments); + }, ZB = u._Sum = function() { + return (ZB = u._Sum = u.asm.Sum).apply(null, arguments); + }, JB = u._Tan = function() { + return (JB = u._Tan = u.asm.Tan).apply(null, arguments); + }, eV = u._Tanh = function() { + return (eV = u._Tanh = u.asm.Tanh).apply(null, arguments); + }, tV = u._Tile = function() { + return (tV = u._Tile = u.asm.Tile).apply(null, arguments); + }, rV = u._TopK = function() { + return (rV = u._TopK = u.asm.TopK).apply(null, arguments); + }, oV = u._Transform = function() { + return (oV = u._Transform = u.asm.Transform).apply(null, arguments); + }, nV = u._Transpose = function() { + return (nV = u._Transpose = u.asm.Transpose).apply(null, arguments); + }, sV = u.__FusedMatMul = function() { + return (sV = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); + }, aV = u._malloc = function() { + return (aV = u._malloc = u.asm.malloc).apply(null, arguments); + }, iV = u._free = function() { + return (iV = u._free = u.asm.free).apply(null, arguments); + }, uV = u.__emscripten_tls_init = function() { + return (uV = u.__emscripten_tls_init = u.asm._emscripten_tls_init).apply(null, arguments); + }, dm = u._pthread_self = function() { + return (dm = u._pthread_self = u.asm.pthread_self).apply(null, arguments); + }, pV = u.___errno_location = function() { + return (pV = u.___errno_location = u.asm.__errno_location).apply(null, arguments); + }, $I = u.__emscripten_thread_init = function() { + return ($I = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); + }, cV = u.__emscripten_thread_crashed = function() { + return (cV = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); + }, lV = u._emscripten_main_thread_process_queued_calls = function() { + return (lV = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); + }, mV = u._emscripten_main_browser_thread_id = function() { + return (mV = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); + }, AI = u._emscripten_run_in_main_runtime_thread_js = function() { + return (AI = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); + }, dV = u._emscripten_dispatch_to_thread_ = function() { + return (dV = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); + }, RI = u.__emscripten_proxy_execute_task_queue = function() { + return (RI = u.__emscripten_proxy_execute_task_queue = u.asm._emscripten_proxy_execute_task_queue).apply(null, arguments); + }, sb = u.__emscripten_thread_free_data = function() { + return (sb = u.__emscripten_thread_free_data = u.asm._emscripten_thread_free_data).apply(null, arguments); + }, FI = u.__emscripten_thread_exit = function() { + return (FI = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); + }, DI = u._emscripten_stack_set_limits = function() { + return (DI = u._emscripten_stack_set_limits = u.asm.emscripten_stack_set_limits).apply(null, arguments); + }, ab = u.stackSave = function() { + return (ab = u.stackSave = u.asm.stackSave).apply(null, arguments); + }, fm = u.stackRestore = function() { + return (fm = u.stackRestore = u.asm.stackRestore).apply(null, arguments); + }, hm = u.stackAlloc = function() { + return (hm = u.stackAlloc = u.asm.stackAlloc).apply(null, arguments); + }, fV = u.dynCall_iijjiiii = function() { + return (fV = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); + }, hV = u.dynCall_jiji = function() { + return (hV = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); }; - u.keepRuntimeAlive = tn, u.wasmMemory = Q, u.cwrap = cy, u.ExitStatus = Di, u.PThread = Fe; - var Tm; - Js = function F() { - Tm || i0(), Tm || (Js = F); + u.keepRuntimeAlive = Fo, u.wasmMemory = J, u.cwrap = oy, u.ExitStatus = Hi, u.PThread = De; + var gm; + ta = function F() { + gm || OI(), gm || (ta = F); }; - function i0(F) { - if (F = F || d, Ga > 0) + function OI(F) { + if (F = F || f, ja > 0) return; if (w) { - c(u), jt(), postMessage({ cmd: "loaded" }); + c(u), Kt(), postMessage({ cmd: "loaded" }); return; } - if (Ua(), Ga > 0) + if (Ka(), ja > 0) return; function B() { - Tm || (Tm = true, u.calledRun = true, !ie && (jt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Zs())); + gm || (gm = true, u.calledRun = true, !pe && (Kt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), ea())); } u.setStatus ? (u.setStatus("Running..."), setTimeout(function() { setTimeout(function() { @@ -2115,26 +2119,26 @@ var M3 = Kt((Fg, Jw) => { if (u.preInit) for (typeof u.preInit == "function" && (u.preInit = [u.preInit]); u.preInit.length > 0; ) u.preInit.pop()(); - i0(); - var Nm; - m && (Nm = { uncaughtException: process.listeners("uncaughtException").filter(function(F) { + OI(); + var xm; + m && (xm = { uncaughtException: process.listeners("uncaughtException").filter(function(F) { return !m.uncaughtException.indexOf(F) > -1; }), unhandledRejection: process.listeners("unhandledRejection").filter(function(F) { return !m.unhandledRejection.indexOf(F) > -1; }) }); - var _m; + var ym; if (typeof WasmBackendModule != "undefined") - _m = WasmBackendModule; + ym = WasmBackendModule; else if (typeof e != "undefined") - _m = e; + ym = e; else throw new Error("Could not find wasm module in post.js"); - if (Nm) { - var XV = _m._dispose; - _m._dispose = function() { - XV(), Nm.uncaughtException.forEach(function(F) { + if (xm) { + var gV = ym._dispose; + ym._dispose = function() { + gV(), xm.uncaughtException.forEach(function(F) { process.removeListener("uncaughtException", F); - }), Nm.unhandledRejection.forEach(function(F) { + }), xm.unhandledRejection.forEach(function(F) { process.removeListener("unhandledRejection", F); }); }; @@ -2142,642 +2146,646 @@ var M3 = Kt((Fg, Jw) => { return e.ready; }; })(); - typeof Fg == "object" && typeof Jw == "object" ? Jw.exports = Zw : typeof define == "function" && define.amd ? define([], function() { - return Zw; - }) : typeof Fg == "object" && (Fg.WasmBackendModuleThreadedSimd = Zw); + typeof wg == "object" && typeof jw == "object" ? jw.exports = Kw : typeof define == "function" && define.amd ? define([], function() { + return Kw; + }) : typeof wg == "object" && (wg.WasmBackendModuleThreadedSimd = Kw); }); -var B3 = Kt((ukt, L3) => { - L3.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +var g3 = qt((kkt, h3) => { + h3.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" ");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`; }); -var V3 = Kt((Dg, tS) => { - var eS = (() => { +var x3 = qt((Ig, Yw) => { + var Xw = (() => { var r = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; return typeof __filename != "undefined" && (r = r || __filename), function(e) { e = e || {}; - var t10 = typeof e != "undefined" ? e : {}, o, n; - t10.ready = new Promise(function(U, te) { - o = U, n = te; + var t6 = typeof e != "undefined" ? e : {}, o, n; + t6.ready = new Promise(function(G, oe) { + o = G, n = oe; }); var s; typeof process != "undefined" && process.listeners && (s = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }); - var a = Object.assign({}, t10), i = [], p = "./this.program", u = (U, te) => { - throw te; - }, c = typeof window == "object", l = typeof importScripts == "function", m = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", f = ""; - function d(U) { - return t10.locateFile ? t10.locateFile(U, f) : f + U; + var a = Object.assign({}, t6), i = [], p = "./this.program", u = (G, oe) => { + throw oe; + }, c = typeof window == "object", l = typeof importScripts == "function", m = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", d = ""; + function f(G) { + return t6.locateFile ? t6.locateFile(G, d) : d + G; } - var h, g, y, b; - function C(U) { - if (U instanceof ju) + var h, g, x, b; + function C(G) { + if (G instanceof ju) return; - E("exiting due to exception: " + U); + $("exiting due to exception: " + G); } if (m) { - l ? f = Vl().dirname(f) + "/" : f = __dirname + "/"; + l ? d = Rl().dirname(d) + "/" : d = __dirname + "/"; var w, k; - typeof Em == "function" && (w = Qw(), k = Vl()), h = (U, te) => (U = k.normalize(U), w.readFileSync(U, te ? void 0 : "utf8")), y = (U) => { - var te = h(U, true); - return te.buffer || (te = new Uint8Array(te)), te; - }, g = (U, te, ve) => { - U = k.normalize(U), w.readFile(U, function(Ke, Nt) { - Ke ? ve(Ke) : te(Nt.buffer); + typeof bm == "function" && (w = qw(), k = Rl()), h = (G, oe) => (G = k.normalize(G), w.readFileSync(G, oe ? void 0 : "utf8")), x = (G) => { + var oe = h(G, true); + return oe.buffer || (oe = new Uint8Array(oe)), oe; + }, g = (G, oe, ke) => { + G = k.normalize(G), w.readFile(G, function(je, Tt) { + je ? ke(je) : oe(Tt.buffer); }); - }, process.argv.length > 1 && (p = process.argv[1].replace(/\\/g, "/")), i = process.argv.slice(2), process.on("uncaughtException", function(U) { - if (!(U instanceof ju)) - throw U; - }), process.on("unhandledRejection", function(U) { - throw U; - }), u = (U, te) => { + }, process.argv.length > 1 && (p = process.argv[1].replace(/\\/g, "/")), i = process.argv.slice(2), process.on("uncaughtException", function(G) { + if (!(G instanceof ju)) + throw G; + }), process.on("unhandledRejection", function(G) { + throw G; + }), u = (G, oe) => { if (at()) - throw process.exitCode = U, te; - C(te), process.exit(U); - }, t10.inspect = function() { + throw process.exitCode = G, oe; + C(oe), process.exit(G); + }, t6.inspect = function() { return "[Emscripten Module object]"; }; } else - (c || l) && (l ? f = self.location.href : typeof document != "undefined" && document.currentScript && (f = document.currentScript.src), r && (f = r), f.indexOf("blob:") !== 0 ? f = f.substr(0, f.replace(/[?#].*/, "").lastIndexOf("/") + 1) : f = "", h = (U) => { - var te = new XMLHttpRequest(); - return te.open("GET", U, false), te.send(null), te.responseText; - }, l && (y = (U) => { - var te = new XMLHttpRequest(); - return te.open("GET", U, false), te.responseType = "arraybuffer", te.send(null), new Uint8Array(te.response); - }), g = (U, te, ve) => { - var Ke = new XMLHttpRequest(); - Ke.open("GET", U, true), Ke.responseType = "arraybuffer", Ke.onload = () => { - if (Ke.status == 200 || Ke.status == 0 && Ke.response) { - te(Ke.response); + (c || l) && (l ? d = self.location.href : typeof document != "undefined" && document.currentScript && (d = document.currentScript.src), r && (d = r), d.indexOf("blob:") !== 0 ? d = d.substr(0, d.replace(/[?#].*/, "").lastIndexOf("/") + 1) : d = "", h = (G) => { + var oe = new XMLHttpRequest(); + return oe.open("GET", G, false), oe.send(null), oe.responseText; + }, l && (x = (G) => { + var oe = new XMLHttpRequest(); + return oe.open("GET", G, false), oe.responseType = "arraybuffer", oe.send(null), new Uint8Array(oe.response); + }), g = (G, oe, ke) => { + var je = new XMLHttpRequest(); + je.open("GET", G, true), je.responseType = "arraybuffer", je.onload = () => { + if (je.status == 200 || je.status == 0 && je.response) { + oe(je.response); return; } - ve(); - }, Ke.onerror = ve, Ke.send(null); - }, b = (U) => document.title = U); - var _ = t10.print || console.log.bind(console), E = t10.printErr || console.warn.bind(console); - Object.assign(t10, a), a = null, t10.arguments && (i = t10.arguments), t10.thisProgram && (p = t10.thisProgram), t10.quit && (u = t10.quit); - var R = 4, A; - t10.wasmBinary && (A = t10.wasmBinary); - var D = t10.noExitRuntime || true; + ke(); + }, je.onerror = ke, je.send(null); + }, b = (G) => document.title = G); + var _ = t6.print || console.log.bind(console), $ = t6.printErr || console.warn.bind(console); + Object.assign(t6, a), a = null, t6.arguments && (i = t6.arguments), t6.thisProgram && (p = t6.thisProgram), t6.quit && (u = t6.quit); + var A = 4, R; + t6.wasmBinary && (R = t6.wasmBinary); + var D = t6.noExitRuntime || true; typeof WebAssembly != "object" && pr("no native wasm support detected"); - var O, M = false, L; - function W(U, te) { - U || pr(te); + var P, M = false, L; + function W(G, oe) { + G || pr(oe); } var V = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; - function G(U, te, ve) { - for (var Ke = te + ve, Nt = te; U[Nt] && !(Nt >= Ke); ) - ++Nt; - if (Nt - te > 16 && U.buffer && V) - return V.decode(U.subarray(te, Nt)); - for (var _t = ""; te < Nt; ) { - var He = U[te++]; - if (!(He & 128)) { - _t += String.fromCharCode(He); + function U(G, oe, ke) { + for (var je = oe + ke, Tt = oe; G[Tt] && !(Tt >= je); ) + ++Tt; + if (Tt - oe > 16 && G.buffer && V) + return V.decode(G.subarray(oe, Tt)); + for (var _t = ""; oe < Tt; ) { + var qe = G[oe++]; + if (!(qe & 128)) { + _t += String.fromCharCode(qe); continue; } - var ze = U[te++] & 63; - if ((He & 224) == 192) { - _t += String.fromCharCode((He & 31) << 6 | ze); + var We = G[oe++] & 63; + if ((qe & 224) == 192) { + _t += String.fromCharCode((qe & 31) << 6 | We); continue; } - var zt = U[te++] & 63; - if ((He & 240) == 224 ? He = (He & 15) << 12 | ze << 6 | zt : He = (He & 7) << 18 | ze << 12 | zt << 6 | U[te++] & 63, He < 65536) - _t += String.fromCharCode(He); + var Vt = G[oe++] & 63; + if ((qe & 240) == 224 ? qe = (qe & 15) << 12 | We << 6 | Vt : qe = (qe & 7) << 18 | We << 12 | Vt << 6 | G[oe++] & 63, qe < 65536) + _t += String.fromCharCode(qe); else { - var Qr = He - 65536; - _t += String.fromCharCode(55296 | Qr >> 10, 56320 | Qr & 1023); + var Yr = qe - 65536; + _t += String.fromCharCode(55296 | Yr >> 10, 56320 | Yr & 1023); } } return _t; } - function q(U, te) { - return U ? G(ee, U, te) : ""; + function q(G, oe) { + return G ? U(ee, G, oe) : ""; } - function H(U, te, ve, Ke) { - if (!(Ke > 0)) + function H(G, oe, ke, je) { + if (!(je > 0)) return 0; - for (var Nt = ve, _t = ve + Ke - 1, He = 0; He < U.length; ++He) { - var ze = U.charCodeAt(He); - if (ze >= 55296 && ze <= 57343) { - var zt = U.charCodeAt(++He); - ze = 65536 + ((ze & 1023) << 10) | zt & 1023; + for (var Tt = ke, _t = ke + je - 1, qe = 0; qe < G.length; ++qe) { + var We = G.charCodeAt(qe); + if (We >= 55296 && We <= 57343) { + var Vt = G.charCodeAt(++qe); + We = 65536 + ((We & 1023) << 10) | Vt & 1023; } - if (ze <= 127) { - if (ve >= _t) + if (We <= 127) { + if (ke >= _t) break; - te[ve++] = ze; - } else if (ze <= 2047) { - if (ve + 1 >= _t) + oe[ke++] = We; + } else if (We <= 2047) { + if (ke + 1 >= _t) break; - te[ve++] = 192 | ze >> 6, te[ve++] = 128 | ze & 63; - } else if (ze <= 65535) { - if (ve + 2 >= _t) + oe[ke++] = 192 | We >> 6, oe[ke++] = 128 | We & 63; + } else if (We <= 65535) { + if (ke + 2 >= _t) break; - te[ve++] = 224 | ze >> 12, te[ve++] = 128 | ze >> 6 & 63, te[ve++] = 128 | ze & 63; + oe[ke++] = 224 | We >> 12, oe[ke++] = 128 | We >> 6 & 63, oe[ke++] = 128 | We & 63; } else { - if (ve + 3 >= _t) + if (ke + 3 >= _t) break; - te[ve++] = 240 | ze >> 18, te[ve++] = 128 | ze >> 12 & 63, te[ve++] = 128 | ze >> 6 & 63, te[ve++] = 128 | ze & 63; + oe[ke++] = 240 | We >> 18, oe[ke++] = 128 | We >> 12 & 63, oe[ke++] = 128 | We >> 6 & 63, oe[ke++] = 128 | We & 63; } } - return te[ve] = 0, ve - Nt; + return oe[ke] = 0, ke - Tt; } - function j(U, te, ve) { - return H(U, ee, te, ve); + function j(G, oe, ke) { + return H(G, ee, oe, ke); } - var Y, Z, ee, X, Q, se, ie, de, Ie; - function Se(U) { - Y = U, t10.HEAP8 = Z = new Int8Array(U), t10.HEAP16 = X = new Int16Array(U), t10.HEAP32 = se = new Int32Array(U), t10.HEAPU8 = ee = new Uint8Array(U), t10.HEAPU16 = Q = new Uint16Array(U), t10.HEAPU32 = ie = new Uint32Array(U), t10.HEAPF32 = de = new Float32Array(U), t10.HEAPF64 = Ie = new Float64Array(U); + var X, Z, ee, Y, J, ie, pe, he, we; + function ve(G) { + X = G, t6.HEAP8 = Z = new Int8Array(G), t6.HEAP16 = Y = new Int16Array(G), t6.HEAP32 = ie = new Int32Array(G), t6.HEAPU8 = ee = new Uint8Array(G), t6.HEAPU16 = J = new Uint16Array(G), t6.HEAPU32 = pe = new Uint32Array(G), t6.HEAPF32 = he = new Float32Array(G), t6.HEAPF64 = we = new Float64Array(G); } - var Ee = t10.INITIAL_MEMORY || 16777216, Me, st = [], pt = [], De = [], ft = false; + var $e = t6.INITIAL_MEMORY || 16777216, Le, nt = [], pt = [], Oe = [], mt = false; function at() { return D; } - function dt() { - if (t10.preRun) - for (typeof t10.preRun == "function" && (t10.preRun = [t10.preRun]); t10.preRun.length; ) - Pt(t10.preRun.shift()); - Js(st); + function ft() { + if (t6.preRun) + for (typeof t6.preRun == "function" && (t6.preRun = [t6.preRun]); t6.preRun.length; ) + Ot(t6.preRun.shift()); + ta(nt); } - function It() { - ft = true, Js(pt); + function wt() { + mt = true, ta(pt); } function Fr() { - if (t10.postRun) - for (typeof t10.postRun == "function" && (t10.postRun = [t10.postRun]); t10.postRun.length; ) - er(t10.postRun.shift()); - Js(De); + if (t6.postRun) + for (typeof t6.postRun == "function" && (t6.postRun = [t6.postRun]); t6.postRun.length; ) + er(t6.postRun.shift()); + ta(Oe); } - function Pt(U) { - st.unshift(U); + function Ot(G) { + nt.unshift(G); } - function jr(U) { - pt.unshift(U); + function Kr(G) { + pt.unshift(G); } - function er(U) { - De.unshift(U); + function er(G) { + Oe.unshift(G); } - var Tt = 0, tr = null, rr = null; - function Xr(U) { - Tt++, t10.monitorRunDependencies && t10.monitorRunDependencies(Tt); + var Nt = 0, tr = null, rr = null; + function jr(G) { + Nt++, t6.monitorRunDependencies && t6.monitorRunDependencies(Nt); } - function Yr(U) { - if (Tt--, t10.monitorRunDependencies && t10.monitorRunDependencies(Tt), Tt == 0 && (tr !== null && (clearInterval(tr), tr = null), rr)) { - var te = rr; - rr = null, te(); + function Xr(G) { + if (Nt--, t6.monitorRunDependencies && t6.monitorRunDependencies(Nt), Nt == 0 && (tr !== null && (clearInterval(tr), tr = null), rr)) { + var oe = rr; + rr = null, oe(); } } - function pr(U) { - t10.onAbort && t10.onAbort(U), U = "Aborted(" + U + ")", E(U), M = true, L = 1, U += ". Build with -sASSERTIONS for more info."; - var te = new WebAssembly.RuntimeError(U); - throw n(te), te; + function pr(G) { + t6.onAbort && t6.onAbort(G), G = "Aborted(" + G + ")", $(G), M = true, L = 1, G += ". Build with -sASSERTIONS for more info."; + var oe = new WebAssembly.RuntimeError(G); + throw n(oe), oe; } - var Qs = "data:application/octet-stream;base64,"; - function tn(U) { - return U.startsWith(Qs); + var Js = "data:application/octet-stream;base64,"; + function Fo(G) { + return G.startsWith(Js); } - function Ua(U) { - return U.startsWith("file://"); + function Ka(G) { + return G.startsWith("file://"); } - var jt; - jt = "tfjs-backend-wasm.wasm", tn(jt) || (jt = d(jt)); - function Zs(U) { + var Kt; + Kt = "tfjs-backend-wasm.wasm", Fo(Kt) || (Kt = f(Kt)); + function ea(G) { try { - if (U == jt && A) - return new Uint8Array(A); - if (y) - return y(U); + if (G == Kt && R) + return new Uint8Array(R); + if (x) + return x(G); throw "both async and sync fetching of the wasm failed"; - } catch (te) { - pr(te); + } catch (oe) { + pr(oe); } } - function Lc() { - if (!A && (c || l)) { - if (typeof fetch == "function" && !Ua(jt)) - return fetch(jt, { credentials: "same-origin" }).then(function(U) { - if (!U.ok) - throw "failed to load wasm binary file at '" + jt + "'"; - return U.arrayBuffer(); + function Ac() { + if (!R && (c || l)) { + if (typeof fetch == "function" && !Ka(Kt)) + return fetch(Kt, { credentials: "same-origin" }).then(function(G) { + if (!G.ok) + throw "failed to load wasm binary file at '" + Kt + "'"; + return G.arrayBuffer(); }).catch(function() { - return Zs(jt); + return ea(Kt); }); if (g) - return new Promise(function(U, te) { - g(jt, function(ve) { - U(new Uint8Array(ve)); - }, te); + return new Promise(function(G, oe) { + g(Kt, function(ke) { + G(new Uint8Array(ke)); + }, oe); }); } return Promise.resolve().then(function() { - return Zs(jt); + return ea(Kt); }); } - function Bc() { - var U = { env: Wc, wasi_snapshot_preview1: Wc }; - function te(He, ze) { - var zt = He.exports; - t10.asm = zt, O = t10.asm.memory, Se(O.buffer), Me = t10.asm.__indirect_function_table, jr(t10.asm.__wasm_call_ctors), Yr("wasm-instantiate"); + function Rc() { + var G = { env: Oc, wasi_snapshot_preview1: Oc }; + function oe(qe, We) { + var Vt = qe.exports; + t6.asm = Vt, P = t6.asm.memory, ve(P.buffer), Le = t6.asm.__indirect_function_table, Kr(t6.asm.__wasm_call_ctors), Xr("wasm-instantiate"); } - Xr("wasm-instantiate"); - function ve(He) { - te(He.instance); + jr("wasm-instantiate"); + function ke(qe) { + oe(qe.instance); } - function Ke(He) { - return Lc().then(function(ze) { - return WebAssembly.instantiate(ze, U); - }).then(function(ze) { - return ze; - }).then(He, function(ze) { - E("failed to asynchronously prepare wasm: " + ze), pr(ze); + function je(qe) { + return Ac().then(function(We) { + return WebAssembly.instantiate(We, G); + }).then(function(We) { + return We; + }).then(qe, function(We) { + $("failed to asynchronously prepare wasm: " + We), pr(We); }); } - function Nt() { - return !A && typeof WebAssembly.instantiateStreaming == "function" && !tn(jt) && !Ua(jt) && !m && typeof fetch == "function" ? fetch(jt, { credentials: "same-origin" }).then(function(He) { - var ze = WebAssembly.instantiateStreaming(He, U); - return ze.then(ve, function(zt) { - return E("wasm streaming compile failed: " + zt), E("falling back to ArrayBuffer instantiation"), Ke(ve); + function Tt() { + return !R && typeof WebAssembly.instantiateStreaming == "function" && !Fo(Kt) && !Ka(Kt) && !m && typeof fetch == "function" ? fetch(Kt, { credentials: "same-origin" }).then(function(qe) { + var We = WebAssembly.instantiateStreaming(qe, G); + return We.then(ke, function(Vt) { + return $("wasm streaming compile failed: " + Vt), $("falling back to ArrayBuffer instantiation"), je(ke); }); - }) : Ke(ve); + }) : je(ke); } - if (t10.instantiateWasm) + if (t6.instantiateWasm) try { - var _t = t10.instantiateWasm(U, te); + var _t = t6.instantiateWasm(G, oe); return _t; - } catch (He) { - E("Module.instantiateWasm callback failed with error: " + He), n(He); + } catch (qe) { + $("Module.instantiateWasm callback failed with error: " + qe), n(qe); } - return Nt().catch(n), {}; + return Tt().catch(n), {}; } - var KS, Ga; - function ju(U) { - this.name = "ExitStatus", this.message = "Program terminated with exit(" + U + ")", this.status = U; + var SI, ja; + function ju(G) { + this.name = "ExitStatus", this.message = "Program terminated with exit(" + G + ")", this.status = G; } - function Js(U) { - for (; U.length > 0; ) - U.shift()(t10); + function ta(G) { + for (; G.length > 0; ) + G.shift()(t6); } - function jS(U) { - return U; + function wI(G) { + return G; } - function XS(U) { - var te = /\b_Z[\w\d_]+/g; - return U.replace(te, function(ve) { - var Ke = ve; - return ve === Ke ? ve : Ke + " [" + ve + "]"; + function II(G) { + var oe = /\b_Z[\w\d_]+/g; + return G.replace(oe, function(ke) { + var je = ke; + return ke === je ? ke : je + " [" + ke + "]"; }); } function Xu() { - var U = new Error(); - if (!U.stack) { + var G = new Error(); + if (!G.stack) { try { throw new Error(); - } catch (te) { - U = te; + } catch (oe) { + G = oe; } - if (!U.stack) + if (!G.stack) return "(no stack trace available)"; } - return U.stack.toString(); + return G.stack.toString(); } - function $x(U, te) { - Z.set(U, te); + function Ix(G, oe) { + Z.set(G, oe); } - function nm() { + function jl() { pr(""); } - function Vc() { + function Fc() { return 2147483648; } - function dr() { - return Vc(); + function fr() { + return Fc(); } - function sm(U, te, ve) { - ee.copyWithin(U, te, te + ve); + function Xl(G, oe, ke) { + ee.copyWithin(G, oe, oe + ke); } - function Rx(U) { + function vx(G) { try { - return O.grow(U - Y.byteLength + 65535 >>> 16), Se(O.buffer), 1; - } catch (te) { + return P.grow(G - X.byteLength + 65535 >>> 16), ve(P.buffer), 1; + } catch (oe) { } } - function Ax(U) { - var te = ee.length; - U = U >>> 0; - var ve = Vc(); - if (U > ve) + function kx(G) { + var oe = ee.length; + G = G >>> 0; + var ke = Fc(); + if (G > ke) return false; - let Ke = (zt, Qr) => zt + (Qr - zt % Qr) % Qr; - for (var Nt = 1; Nt <= 4; Nt *= 2) { - var _t = te * (1 + 0.2 / Nt); - _t = Math.min(_t, U + 100663296); - var He = Math.min(ve, Ke(Math.max(U, _t), 65536)), ze = Rx(He); - if (ze) + let je = (Vt, Yr) => Vt + (Yr - Vt % Yr) % Yr; + for (var Tt = 1; Tt <= 4; Tt *= 2) { + var _t = oe * (1 + 0.2 / Tt); + _t = Math.min(_t, G + 100663296); + var qe = Math.min(ke, je(Math.max(G, _t), 65536)), We = vx(qe); + if (We) return true; } return false; } - var Fx = { varargs: void 0, get: function() { - Fx.varargs += 4; - var U = se[Fx.varargs - 4 >> 2]; - return U; - }, getStr: function(U) { - var te = q(U); - return te; + var Nx = { varargs: void 0, get: function() { + Nx.varargs += 4; + var G = ie[Nx.varargs - 4 >> 2]; + return G; + }, getStr: function(G) { + var oe = q(G); + return oe; } }; - function YS(U) { + function vI(G) { return 52; } - function Dx(U, te, ve, Ke, Nt) { + function Tx(G, oe, ke, je, Tt) { return 70; } - var Di = [null, [], []]; - function Px(U, te) { - var ve = Di[U]; - te === 0 || te === 10 ? ((U === 1 ? _ : E)(G(ve, 0)), ve.length = 0) : ve.push(te); + var Hi = [null, [], []]; + function _x(G, oe) { + var ke = Hi[G]; + oe === 0 || oe === 10 ? ((G === 1 ? _ : $)(U(ke, 0)), ke.length = 0) : ke.push(oe); } - function Ox(U, te, ve, Ke) { - for (var Nt = 0, _t = 0; _t < ve; _t++) { - var He = ie[te >> 2], ze = ie[te + 4 >> 2]; - te += 8; - for (var zt = 0; zt < ze; zt++) - Px(U, ee[He + zt]); - Nt += ze; + function Ex(G, oe, ke, je) { + for (var Tt = 0, _t = 0; _t < ke; _t++) { + var qe = pe[oe >> 2], We = pe[oe + 4 >> 2]; + oe += 8; + for (var Vt = 0; Vt < We; Vt++) + _x(G, ee[qe + Vt]); + Tt += We; } - return ie[Ke >> 2] = Nt, 0; + return pe[je >> 2] = Tt, 0; } - function zc(U) { - var te = t10["_" + U]; - return te; + function Dc(G) { + var oe = t6["_" + G]; + return oe; } - function am(U, te, ve, Ke, Nt) { + function Yl(G, oe, ke, je, Tt) { var _t = { string: (hr) => { - var qa = 0; + var Ya = 0; if (hr != null && hr !== 0) { - var wm = (hr.length << 2) + 1; - qa = qc(wm), j(hr, qa, wm); + var mm = (hr.length << 2) + 1; + Ya = Bc(mm), j(hr, Ya, mm); } - return qa; + return Ya; }, array: (hr) => { - var qa = qc(hr.length); - return $x(hr, qa), qa; + var Ya = Bc(hr.length); + return Ix(hr, Ya), Ya; } }; - function He(hr) { - return te === "string" ? q(hr) : te === "boolean" ? Boolean(hr) : hr; + function qe(hr) { + return oe === "string" ? q(hr) : oe === "boolean" ? Boolean(hr) : hr; } - var ze = zc(U), zt = [], Qr = 0; - if (Ke) - for (var ea = 0; ea < Ke.length; ea++) { - var Im = _t[ve[ea]]; - Im ? (Qr === 0 && (Qr = ym()), zt[ea] = Im(Ke[ea])) : zt[ea] = Ke[ea]; + var We = Dc(G), Vt = [], Yr = 0; + if (je) + for (var ra = 0; ra < je.length; ra++) { + var lm = _t[ke[ra]]; + lm ? (Yr === 0 && (Yr = um()), Vt[ra] = lm(je[ra])) : Vt[ra] = je[ra]; } - var Kc = ze.apply(null, zt); - function pb(hr) { - return Qr !== 0 && bm(Qr), He(hr); + var Vc = We.apply(null, Vt); + function nb(hr) { + return Yr !== 0 && pm(Yr), qe(hr); } - return Kc = pb(Kc), Kc; + return Vc = nb(Vc), Vc; } - function im(U, te, ve, Ke) { - ve = ve || []; - var Nt = ve.every((He) => He === "number" || He === "boolean"), _t = te !== "string"; - return _t && Nt && !Ke ? zc(U) : function() { - return am(U, te, ve, arguments, Ke); + function Ql(G, oe, ke, je) { + ke = ke || []; + var Tt = ke.every((qe) => qe === "number" || qe === "boolean"), _t = oe !== "string"; + return _t && Tt && !je ? Dc(G) : function() { + return Yl(G, oe, ke, arguments, je); }; } - var Wc = { abort: nm, emscripten_get_heap_max: dr, emscripten_memcpy_big: sm, emscripten_resize_heap: Ax, fd_close: YS, fd_seek: Dx, fd_write: Ox }, QS = Bc(), um = t10.___wasm_call_ctors = function() { - return (um = t10.___wasm_call_ctors = t10.asm.__wasm_call_ctors).apply(null, arguments); - }, Mx = t10._init = function() { - return (Mx = t10._init = t10.asm.init).apply(null, arguments); - }, Fe = t10._init_with_threads_count = function() { - return (Fe = t10._init_with_threads_count = t10.asm.init_with_threads_count).apply(null, arguments); - }, Uc = t10._get_threads_count = function() { - return (Uc = t10._get_threads_count = t10.asm.get_threads_count).apply(null, arguments); - }, Lx = t10._register_tensor = function() { - return (Lx = t10._register_tensor = t10.asm.register_tensor).apply(null, arguments); - }, ZS = t10._dispose_data = function() { - return (ZS = t10._dispose_data = t10.asm.dispose_data).apply(null, arguments); - }, JS = t10._dispose = function() { - return (JS = t10._dispose = t10.asm.dispose).apply(null, arguments); - }, Bx = t10._Abs = function() { - return (Bx = t10._Abs = t10.asm.Abs).apply(null, arguments); - }, pm = t10._Add = function() { - return (pm = t10._Add = t10.asm.Add).apply(null, arguments); - }, Yu = t10._AddN = function() { - return (Yu = t10._AddN = t10.asm.AddN).apply(null, arguments); - }, Vx = t10._All = function() { - return (Vx = t10._All = t10.asm.All).apply(null, arguments); - }, zx = t10._Any = function() { - return (zx = t10._Any = t10.asm.Any).apply(null, arguments); - }, e0 = t10._ArgMax = function() { - return (e0 = t10._ArgMax = t10.asm.ArgMax).apply(null, arguments); - }, Wx = t10._AvgPool = function() { - return (Wx = t10._AvgPool = t10.asm.AvgPool).apply(null, arguments); - }, Ux = t10._BatchMatMul = function() { - return (Ux = t10._BatchMatMul = t10.asm.BatchMatMul).apply(null, arguments); - }, Gx = t10._Ceil = function() { - return (Gx = t10._Ceil = t10.asm.Ceil).apply(null, arguments); - }, Hx = t10._ClipByValue = function() { - return (Hx = t10._ClipByValue = t10.asm.ClipByValue).apply(null, arguments); - }, cm = t10._Conv2D = function() { - return (cm = t10._Conv2D = t10.asm.Conv2D).apply(null, arguments); - }, lm = t10._Conv2DBackpropInput = function() { - return (lm = t10._Conv2DBackpropInput = t10.asm.Conv2DBackpropInput).apply(null, arguments); - }, qx = t10._Cos = function() { - return (qx = t10._Cos = t10.asm.Cos).apply(null, arguments); - }, Kx = t10._Cosh = function() { - return (Kx = t10._Cosh = t10.asm.Cosh).apply(null, arguments); - }, jx = t10._CropAndResize = function() { - return (jx = t10._CropAndResize = t10.asm.CropAndResize).apply(null, arguments); - }, Gc = t10._Cumprod = function() { - return (Gc = t10._Cumprod = t10.asm.Cumprod).apply(null, arguments); - }, Xx = t10._Cumsum = function() { - return (Xx = t10._Cumsum = t10.asm.Cumsum).apply(null, arguments); - }, Yx = t10._DepthToSpace = function() { - return (Yx = t10._DepthToSpace = t10.asm.DepthToSpace).apply(null, arguments); - }, Qx = t10._DepthwiseConv2dNative = function() { - return (Qx = t10._DepthwiseConv2dNative = t10.asm.DepthwiseConv2dNative).apply(null, arguments); - }, Pi = t10._Elu = function() { - return (Pi = t10._Elu = t10.asm.Elu).apply(null, arguments); - }, Zx = t10._Equal = function() { - return (Zx = t10._Equal = t10.asm.Equal).apply(null, arguments); - }, Jx = t10._Exp = function() { - return (Jx = t10._Exp = t10.asm.Exp).apply(null, arguments); - }, mm = t10._FlipLeftRight = function() { - return (mm = t10._FlipLeftRight = t10.asm.FlipLeftRight).apply(null, arguments); - }, ey = t10._Floor = function() { - return (ey = t10._Floor = t10.asm.Floor).apply(null, arguments); - }, Qu = t10._FloorDiv = function() { - return (Qu = t10._FloorDiv = t10.asm.FloorDiv).apply(null, arguments); - }, ty = t10._FusedBatchNorm = function() { - return (ty = t10._FusedBatchNorm = t10.asm.FusedBatchNorm).apply(null, arguments); - }, ry = t10._FusedConv2D = function() { - return (ry = t10._FusedConv2D = t10.asm.FusedConv2D).apply(null, arguments); - }, Ha = t10._FusedDepthwiseConv2D = function() { - return (Ha = t10._FusedDepthwiseConv2D = t10.asm.FusedDepthwiseConv2D).apply(null, arguments); - }, Hc = t10._Gather = function() { - return (Hc = t10._Gather = t10.asm.Gather).apply(null, arguments); - }, oy = t10._GatherNd = function() { - return (oy = t10._GatherNd = t10.asm.GatherNd).apply(null, arguments); - }, ny = t10._Greater = function() { - return (ny = t10._Greater = t10.asm.Greater).apply(null, arguments); - }, sy = t10._GreaterEqual = function() { - return (sy = t10._GreaterEqual = t10.asm.GreaterEqual).apply(null, arguments); - }, ay = t10._LeakyRelu = function() { - return (ay = t10._LeakyRelu = t10.asm.LeakyRelu).apply(null, arguments); - }, fm = t10._Less = function() { - return (fm = t10._Less = t10.asm.Less).apply(null, arguments); - }, dm = t10._LessEqual = function() { - return (dm = t10._LessEqual = t10.asm.LessEqual).apply(null, arguments); - }, iy = t10._Log = function() { - return (iy = t10._Log = t10.asm.Log).apply(null, arguments); - }, uy = t10._LogicalAnd = function() { - return (uy = t10._LogicalAnd = t10.asm.LogicalAnd).apply(null, arguments); - }, hm = t10._LogicalNot = function() { - return (hm = t10._LogicalNot = t10.asm.LogicalNot).apply(null, arguments); - }, gm = t10._LogicalOr = function() { - return (gm = t10._LogicalOr = t10.asm.LogicalOr).apply(null, arguments); - }, py = t10._LogicalXor = function() { - return (py = t10._LogicalXor = t10.asm.LogicalXor).apply(null, arguments); - }, cy = t10._Max = function() { - return (cy = t10._Max = t10.asm.Max).apply(null, arguments); - }, ly = t10._MaxPool = function() { - return (ly = t10._MaxPool = t10.asm.MaxPool).apply(null, arguments); - }, xm = t10._Maximum = function() { - return (xm = t10._Maximum = t10.asm.Maximum).apply(null, arguments); - }, t0 = t10._Mean = function() { - return (t0 = t10._Mean = t10.asm.Mean).apply(null, arguments); - }, my = t10._Min = function() { - return (my = t10._Min = t10.asm.Min).apply(null, arguments); - }, fy = t10._Minimum = function() { - return (fy = t10._Minimum = t10.asm.Minimum).apply(null, arguments); - }, dy = t10._MirrorPad = function() { - return (dy = t10._MirrorPad = t10.asm.MirrorPad).apply(null, arguments); - }, hy = t10._Multiply = function() { - return (hy = t10._Multiply = t10.asm.Multiply).apply(null, arguments); - }, gy = t10._Neg = function() { - return (gy = t10._Neg = t10.asm.Neg).apply(null, arguments); - }, xy = t10._NonMaxSuppressionV3 = function() { - return (xy = t10._NonMaxSuppressionV3 = t10.asm.NonMaxSuppressionV3).apply(null, arguments); - }, yy = t10._NonMaxSuppressionV4 = function() { - return (yy = t10._NonMaxSuppressionV4 = t10.asm.NonMaxSuppressionV4).apply(null, arguments); - }, by = t10._NonMaxSuppressionV5 = function() { - return (by = t10._NonMaxSuppressionV5 = t10.asm.NonMaxSuppressionV5).apply(null, arguments); - }, Cy = t10._NotEqual = function() { - return (Cy = t10._NotEqual = t10.asm.NotEqual).apply(null, arguments); - }, Iy = t10._OneHot = function() { - return (Iy = t10._OneHot = t10.asm.OneHot).apply(null, arguments); - }, wy = t10._PadV2 = function() { - return (wy = t10._PadV2 = t10.asm.PadV2).apply(null, arguments); - }, Sy = t10._Pow = function() { - return (Sy = t10._Pow = t10.asm.Pow).apply(null, arguments); - }, vy = t10._Prelu = function() { - return (vy = t10._Prelu = t10.asm.Prelu).apply(null, arguments); - }, ky = t10._Prod = function() { - return (ky = t10._Prod = t10.asm.Prod).apply(null, arguments); - }, Ty = t10._RealDiv = function() { - return (Ty = t10._RealDiv = t10.asm.RealDiv).apply(null, arguments); - }, Ny = t10._Relu = function() { - return (Ny = t10._Relu = t10.asm.Relu).apply(null, arguments); - }, _y = t10._Relu6 = function() { - return (_y = t10._Relu6 = t10.asm.Relu6).apply(null, arguments); - }, Ey = t10._ResizeBilinear = function() { - return (Ey = t10._ResizeBilinear = t10.asm.ResizeBilinear).apply(null, arguments); - }, $y = t10._ResizeNearestNeighbor = function() { - return ($y = t10._ResizeNearestNeighbor = t10.asm.ResizeNearestNeighbor).apply(null, arguments); - }, Ry = t10._Reverse = function() { - return (Ry = t10._Reverse = t10.asm.Reverse).apply(null, arguments); - }, Ay = t10._RotateWithOffset = function() { - return (Ay = t10._RotateWithOffset = t10.asm.RotateWithOffset).apply(null, arguments); - }, Fy = t10._Round = function() { - return (Fy = t10._Round = t10.asm.Round).apply(null, arguments); - }, Dy = t10._Rsqrt = function() { - return (Dy = t10._Rsqrt = t10.asm.Rsqrt).apply(null, arguments); - }, Py = t10._ScatterNd = function() { - return (Py = t10._ScatterNd = t10.asm.ScatterNd).apply(null, arguments); - }, Oy = t10._SelectV2 = function() { - return (Oy = t10._SelectV2 = t10.asm.SelectV2).apply(null, arguments); - }, My = t10._Sigmoid = function() { - return (My = t10._Sigmoid = t10.asm.Sigmoid).apply(null, arguments); - }, Ly = t10._Sin = function() { - return (Ly = t10._Sin = t10.asm.Sin).apply(null, arguments); - }, By = t10._Softmax = function() { - return (By = t10._Softmax = t10.asm.Softmax).apply(null, arguments); - }, Vy = t10._SparseFillEmptyRows = function() { - return (Vy = t10._SparseFillEmptyRows = t10.asm.SparseFillEmptyRows).apply(null, arguments); - }, zy = t10._SparseReshape = function() { - return (zy = t10._SparseReshape = t10.asm.SparseReshape).apply(null, arguments); - }, Wy = t10._SparseSegmentReduction = function() { - return (Wy = t10._SparseSegmentReduction = t10.asm.SparseSegmentReduction).apply(null, arguments); - }, Uy = t10._Sqrt = function() { - return (Uy = t10._Sqrt = t10.asm.Sqrt).apply(null, arguments); - }, Gy = t10._Square = function() { - return (Gy = t10._Square = t10.asm.Square).apply(null, arguments); - }, Hy = t10._SquaredDifference = function() { - return (Hy = t10._SquaredDifference = t10.asm.SquaredDifference).apply(null, arguments); - }, qy = t10._Step = function() { - return (qy = t10._Step = t10.asm.Step).apply(null, arguments); - }, Ky = t10._StridedSlice = function() { - return (Ky = t10._StridedSlice = t10.asm.StridedSlice).apply(null, arguments); - }, jy = t10._Sub = function() { - return (jy = t10._Sub = t10.asm.Sub).apply(null, arguments); - }, Xy = t10._Sum = function() { - return (Xy = t10._Sum = t10.asm.Sum).apply(null, arguments); - }, Yy = t10._Tan = function() { - return (Yy = t10._Tan = t10.asm.Tan).apply(null, arguments); - }, Qy = t10._Tanh = function() { - return (Qy = t10._Tanh = t10.asm.Tanh).apply(null, arguments); - }, Zy = t10._Tile = function() { - return (Zy = t10._Tile = t10.asm.Tile).apply(null, arguments); - }, Jy = t10._TopK = function() { - return (Jy = t10._TopK = t10.asm.TopK).apply(null, arguments); - }, eb = t10._Transform = function() { - return (eb = t10._Transform = t10.asm.Transform).apply(null, arguments); - }, tb = t10._Transpose = function() { - return (tb = t10._Transpose = t10.asm.Transpose).apply(null, arguments); - }, rb = t10.__FusedMatMul = function() { - return (rb = t10.__FusedMatMul = t10.asm._FusedMatMul).apply(null, arguments); - }, ob = t10._malloc = function() { - return (ob = t10._malloc = t10.asm.malloc).apply(null, arguments); - }, nb = t10._free = function() { - return (nb = t10._free = t10.asm.free).apply(null, arguments); - }, sb = t10.___errno_location = function() { - return (sb = t10.___errno_location = t10.asm.__errno_location).apply(null, arguments); - }, ym = t10.stackSave = function() { - return (ym = t10.stackSave = t10.asm.stackSave).apply(null, arguments); - }, bm = t10.stackRestore = function() { - return (bm = t10.stackRestore = t10.asm.stackRestore).apply(null, arguments); - }, qc = t10.stackAlloc = function() { - return (qc = t10.stackAlloc = t10.asm.stackAlloc).apply(null, arguments); - }, ab = t10.dynCall_iijjiiii = function() { - return (ab = t10.dynCall_iijjiiii = t10.asm.dynCall_iijjiiii).apply(null, arguments); - }, ib = t10.dynCall_jiji = function() { - return (ib = t10.dynCall_jiji = t10.asm.dynCall_jiji).apply(null, arguments); + var Oc = { abort: jl, emscripten_get_heap_max: fr, emscripten_memcpy_big: Xl, emscripten_resize_heap: kx, fd_close: vI, fd_seek: Tx, fd_write: Ex }, kI = Rc(), Zl = t6.___wasm_call_ctors = function() { + return (Zl = t6.___wasm_call_ctors = t6.asm.__wasm_call_ctors).apply(null, arguments); + }, $x = t6._init = function() { + return ($x = t6._init = t6.asm.init).apply(null, arguments); + }, De = t6._init_with_threads_count = function() { + return (De = t6._init_with_threads_count = t6.asm.init_with_threads_count).apply(null, arguments); + }, Pc = t6._get_threads_count = function() { + return (Pc = t6._get_threads_count = t6.asm.get_threads_count).apply(null, arguments); + }, Ax = t6._register_tensor = function() { + return (Ax = t6._register_tensor = t6.asm.register_tensor).apply(null, arguments); + }, NI = t6._dispose_data = function() { + return (NI = t6._dispose_data = t6.asm.dispose_data).apply(null, arguments); + }, TI = t6._dispose = function() { + return (TI = t6._dispose = t6.asm.dispose).apply(null, arguments); + }, Rx = t6._Abs = function() { + return (Rx = t6._Abs = t6.asm.Abs).apply(null, arguments); + }, Jl = t6._Add = function() { + return (Jl = t6._Add = t6.asm.Add).apply(null, arguments); + }, Yu = t6._AddN = function() { + return (Yu = t6._AddN = t6.asm.AddN).apply(null, arguments); + }, Fx = t6._All = function() { + return (Fx = t6._All = t6.asm.All).apply(null, arguments); + }, Dx = t6._Any = function() { + return (Dx = t6._Any = t6.asm.Any).apply(null, arguments); + }, _I = t6._ArgMax = function() { + return (_I = t6._ArgMax = t6.asm.ArgMax).apply(null, arguments); + }, Ox = t6._AvgPool = function() { + return (Ox = t6._AvgPool = t6.asm.AvgPool).apply(null, arguments); + }, Px = t6._BatchMatMul = function() { + return (Px = t6._BatchMatMul = t6.asm.BatchMatMul).apply(null, arguments); + }, Mx = t6._Ceil = function() { + return (Mx = t6._Ceil = t6.asm.Ceil).apply(null, arguments); + }, Lx = t6._ClipByValue = function() { + return (Lx = t6._ClipByValue = t6.asm.ClipByValue).apply(null, arguments); + }, em = t6._Conv2D = function() { + return (em = t6._Conv2D = t6.asm.Conv2D).apply(null, arguments); + }, tm = t6._Conv2DBackpropInput = function() { + return (tm = t6._Conv2DBackpropInput = t6.asm.Conv2DBackpropInput).apply(null, arguments); + }, Bx = t6._Cos = function() { + return (Bx = t6._Cos = t6.asm.Cos).apply(null, arguments); + }, Vx = t6._Cosh = function() { + return (Vx = t6._Cosh = t6.asm.Cosh).apply(null, arguments); + }, zx = t6._CropAndResize = function() { + return (zx = t6._CropAndResize = t6.asm.CropAndResize).apply(null, arguments); + }, Mc = t6._Cumprod = function() { + return (Mc = t6._Cumprod = t6.asm.Cumprod).apply(null, arguments); + }, Wx = t6._Cumsum = function() { + return (Wx = t6._Cumsum = t6.asm.Cumsum).apply(null, arguments); + }, Ux = t6._DepthToSpace = function() { + return (Ux = t6._DepthToSpace = t6.asm.DepthToSpace).apply(null, arguments); + }, Gx = t6._DepthwiseConv2dNative = function() { + return (Gx = t6._DepthwiseConv2dNative = t6.asm.DepthwiseConv2dNative).apply(null, arguments); + }, qi = t6._Elu = function() { + return (qi = t6._Elu = t6.asm.Elu).apply(null, arguments); + }, Hx = t6._Equal = function() { + return (Hx = t6._Equal = t6.asm.Equal).apply(null, arguments); + }, qx = t6._Exp = function() { + return (qx = t6._Exp = t6.asm.Exp).apply(null, arguments); + }, rm = t6._FlipLeftRight = function() { + return (rm = t6._FlipLeftRight = t6.asm.FlipLeftRight).apply(null, arguments); + }, Kx = t6._Floor = function() { + return (Kx = t6._Floor = t6.asm.Floor).apply(null, arguments); + }, Qu = t6._FloorDiv = function() { + return (Qu = t6._FloorDiv = t6.asm.FloorDiv).apply(null, arguments); + }, jx = t6._FusedBatchNorm = function() { + return (jx = t6._FusedBatchNorm = t6.asm.FusedBatchNorm).apply(null, arguments); + }, Xx = t6._FusedConv2D = function() { + return (Xx = t6._FusedConv2D = t6.asm.FusedConv2D).apply(null, arguments); + }, Xa = t6._FusedDepthwiseConv2D = function() { + return (Xa = t6._FusedDepthwiseConv2D = t6.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, Lc = t6._Gather = function() { + return (Lc = t6._Gather = t6.asm.Gather).apply(null, arguments); + }, Yx = t6._GatherNd = function() { + return (Yx = t6._GatherNd = t6.asm.GatherNd).apply(null, arguments); + }, Qx = t6._Greater = function() { + return (Qx = t6._Greater = t6.asm.Greater).apply(null, arguments); + }, Zx = t6._GreaterEqual = function() { + return (Zx = t6._GreaterEqual = t6.asm.GreaterEqual).apply(null, arguments); + }, Jx = t6._IsNan = function() { + return (Jx = t6._IsNan = t6.asm.IsNan).apply(null, arguments); + }, om = t6._LeakyRelu = function() { + return (om = t6._LeakyRelu = t6.asm.LeakyRelu).apply(null, arguments); + }, nm = t6._Less = function() { + return (nm = t6._Less = t6.asm.Less).apply(null, arguments); + }, ey = t6._LessEqual = function() { + return (ey = t6._LessEqual = t6.asm.LessEqual).apply(null, arguments); + }, ty = t6._Log = function() { + return (ty = t6._Log = t6.asm.Log).apply(null, arguments); + }, sm = t6._LogicalAnd = function() { + return (sm = t6._LogicalAnd = t6.asm.LogicalAnd).apply(null, arguments); + }, am = t6._LogicalNot = function() { + return (am = t6._LogicalNot = t6.asm.LogicalNot).apply(null, arguments); + }, ry = t6._LogicalOr = function() { + return (ry = t6._LogicalOr = t6.asm.LogicalOr).apply(null, arguments); + }, oy = t6._LogicalXor = function() { + return (oy = t6._LogicalXor = t6.asm.LogicalXor).apply(null, arguments); + }, ny = t6._Max = function() { + return (ny = t6._Max = t6.asm.Max).apply(null, arguments); + }, im = t6._MaxPool = function() { + return (im = t6._MaxPool = t6.asm.MaxPool).apply(null, arguments); + }, EI = t6._Maximum = function() { + return (EI = t6._Maximum = t6.asm.Maximum).apply(null, arguments); + }, sy = t6._Mean = function() { + return (sy = t6._Mean = t6.asm.Mean).apply(null, arguments); + }, ay = t6._Min = function() { + return (ay = t6._Min = t6.asm.Min).apply(null, arguments); + }, iy = t6._Minimum = function() { + return (iy = t6._Minimum = t6.asm.Minimum).apply(null, arguments); + }, uy = t6._MirrorPad = function() { + return (uy = t6._MirrorPad = t6.asm.MirrorPad).apply(null, arguments); + }, py = t6._Multiply = function() { + return (py = t6._Multiply = t6.asm.Multiply).apply(null, arguments); + }, cy = t6._Neg = function() { + return (cy = t6._Neg = t6.asm.Neg).apply(null, arguments); + }, ly = t6._NonMaxSuppressionV3 = function() { + return (ly = t6._NonMaxSuppressionV3 = t6.asm.NonMaxSuppressionV3).apply(null, arguments); + }, my = t6._NonMaxSuppressionV4 = function() { + return (my = t6._NonMaxSuppressionV4 = t6.asm.NonMaxSuppressionV4).apply(null, arguments); + }, dy = t6._NonMaxSuppressionV5 = function() { + return (dy = t6._NonMaxSuppressionV5 = t6.asm.NonMaxSuppressionV5).apply(null, arguments); + }, fy = t6._NotEqual = function() { + return (fy = t6._NotEqual = t6.asm.NotEqual).apply(null, arguments); + }, hy = t6._OneHot = function() { + return (hy = t6._OneHot = t6.asm.OneHot).apply(null, arguments); + }, gy = t6._PadV2 = function() { + return (gy = t6._PadV2 = t6.asm.PadV2).apply(null, arguments); + }, xy = t6._Pow = function() { + return (xy = t6._Pow = t6.asm.Pow).apply(null, arguments); + }, yy = t6._Prelu = function() { + return (yy = t6._Prelu = t6.asm.Prelu).apply(null, arguments); + }, by = t6._Prod = function() { + return (by = t6._Prod = t6.asm.Prod).apply(null, arguments); + }, Cy = t6._RealDiv = function() { + return (Cy = t6._RealDiv = t6.asm.RealDiv).apply(null, arguments); + }, Sy = t6._Reciprocal = function() { + return (Sy = t6._Reciprocal = t6.asm.Reciprocal).apply(null, arguments); + }, wy = t6._Relu = function() { + return (wy = t6._Relu = t6.asm.Relu).apply(null, arguments); + }, Iy = t6._Relu6 = function() { + return (Iy = t6._Relu6 = t6.asm.Relu6).apply(null, arguments); + }, vy = t6._ResizeBilinear = function() { + return (vy = t6._ResizeBilinear = t6.asm.ResizeBilinear).apply(null, arguments); + }, ky = t6._ResizeNearestNeighbor = function() { + return (ky = t6._ResizeNearestNeighbor = t6.asm.ResizeNearestNeighbor).apply(null, arguments); + }, Ny = t6._Reverse = function() { + return (Ny = t6._Reverse = t6.asm.Reverse).apply(null, arguments); + }, Ty = t6._RotateWithOffset = function() { + return (Ty = t6._RotateWithOffset = t6.asm.RotateWithOffset).apply(null, arguments); + }, _y = t6._Round = function() { + return (_y = t6._Round = t6.asm.Round).apply(null, arguments); + }, Ey = t6._Rsqrt = function() { + return (Ey = t6._Rsqrt = t6.asm.Rsqrt).apply(null, arguments); + }, $y = t6._ScatterNd = function() { + return ($y = t6._ScatterNd = t6.asm.ScatterNd).apply(null, arguments); + }, Ay = t6._SelectV2 = function() { + return (Ay = t6._SelectV2 = t6.asm.SelectV2).apply(null, arguments); + }, Ry = t6._Sigmoid = function() { + return (Ry = t6._Sigmoid = t6.asm.Sigmoid).apply(null, arguments); + }, Fy = t6._Sin = function() { + return (Fy = t6._Sin = t6.asm.Sin).apply(null, arguments); + }, Dy = t6._Softmax = function() { + return (Dy = t6._Softmax = t6.asm.Softmax).apply(null, arguments); + }, Oy = t6._SparseFillEmptyRows = function() { + return (Oy = t6._SparseFillEmptyRows = t6.asm.SparseFillEmptyRows).apply(null, arguments); + }, Py = t6._SparseReshape = function() { + return (Py = t6._SparseReshape = t6.asm.SparseReshape).apply(null, arguments); + }, My = t6._SparseSegmentReduction = function() { + return (My = t6._SparseSegmentReduction = t6.asm.SparseSegmentReduction).apply(null, arguments); + }, Ly = t6._Sqrt = function() { + return (Ly = t6._Sqrt = t6.asm.Sqrt).apply(null, arguments); + }, By = t6._Square = function() { + return (By = t6._Square = t6.asm.Square).apply(null, arguments); + }, Vy = t6._SquaredDifference = function() { + return (Vy = t6._SquaredDifference = t6.asm.SquaredDifference).apply(null, arguments); + }, zy = t6._Step = function() { + return (zy = t6._Step = t6.asm.Step).apply(null, arguments); + }, Wy = t6._StridedSlice = function() { + return (Wy = t6._StridedSlice = t6.asm.StridedSlice).apply(null, arguments); + }, Uy = t6._Sub = function() { + return (Uy = t6._Sub = t6.asm.Sub).apply(null, arguments); + }, Gy = t6._Sum = function() { + return (Gy = t6._Sum = t6.asm.Sum).apply(null, arguments); + }, Hy = t6._Tan = function() { + return (Hy = t6._Tan = t6.asm.Tan).apply(null, arguments); + }, qy = t6._Tanh = function() { + return (qy = t6._Tanh = t6.asm.Tanh).apply(null, arguments); + }, Ky = t6._Tile = function() { + return (Ky = t6._Tile = t6.asm.Tile).apply(null, arguments); + }, jy = t6._TopK = function() { + return (jy = t6._TopK = t6.asm.TopK).apply(null, arguments); + }, Xy = t6._Transform = function() { + return (Xy = t6._Transform = t6.asm.Transform).apply(null, arguments); + }, Yy = t6._Transpose = function() { + return (Yy = t6._Transpose = t6.asm.Transpose).apply(null, arguments); + }, Qy = t6.__FusedMatMul = function() { + return (Qy = t6.__FusedMatMul = t6.asm._FusedMatMul).apply(null, arguments); + }, Zy = t6._malloc = function() { + return (Zy = t6._malloc = t6.asm.malloc).apply(null, arguments); + }, Jy = t6._free = function() { + return (Jy = t6._free = t6.asm.free).apply(null, arguments); + }, eb = t6.___errno_location = function() { + return (eb = t6.___errno_location = t6.asm.__errno_location).apply(null, arguments); + }, um = t6.stackSave = function() { + return (um = t6.stackSave = t6.asm.stackSave).apply(null, arguments); + }, pm = t6.stackRestore = function() { + return (pm = t6.stackRestore = t6.asm.stackRestore).apply(null, arguments); + }, Bc = t6.stackAlloc = function() { + return (Bc = t6.stackAlloc = t6.asm.stackAlloc).apply(null, arguments); + }, tb = t6.dynCall_iijjiiii = function() { + return (tb = t6.dynCall_iijjiiii = t6.asm.dynCall_iijjiiii).apply(null, arguments); + }, rb = t6.dynCall_jiji = function() { + return (rb = t6.dynCall_jiji = t6.asm.dynCall_jiji).apply(null, arguments); }; - t10.cwrap = im; + t6.cwrap = Ql; var Zu; - rr = function U() { - Zu || Cm(), Zu || (rr = U); + rr = function G() { + Zu || cm(), Zu || (rr = G); }; - function Cm(U) { - if (U = U || i, Tt > 0 || (dt(), Tt > 0)) + function cm(G) { + if (G = G || i, Nt > 0 || (ft(), Nt > 0)) return; - function te() { - Zu || (Zu = true, t10.calledRun = true, !M && (It(), o(t10), t10.onRuntimeInitialized && t10.onRuntimeInitialized(), Fr())); + function oe() { + Zu || (Zu = true, t6.calledRun = true, !M && (wt(), o(t6), t6.onRuntimeInitialized && t6.onRuntimeInitialized(), Fr())); } - t10.setStatus ? (t10.setStatus("Running..."), setTimeout(function() { + t6.setStatus ? (t6.setStatus("Running..."), setTimeout(function() { setTimeout(function() { - t10.setStatus(""); - }, 1), te(); - }, 1)) : te(); + t6.setStatus(""); + }, 1), oe(); + }, 1)) : oe(); } - if (t10.preInit) - for (typeof t10.preInit == "function" && (t10.preInit = [t10.preInit]); t10.preInit.length > 0; ) - t10.preInit.pop()(); - Cm(); + if (t6.preInit) + for (typeof t6.preInit == "function" && (t6.preInit = [t6.preInit]); t6.preInit.length > 0; ) + t6.preInit.pop()(); + cm(); var Ju; - s && (Ju = { uncaughtException: process.listeners("uncaughtException").filter(function(U) { - return !s.uncaughtException.indexOf(U) > -1; - }), unhandledRejection: process.listeners("unhandledRejection").filter(function(U) { - return !s.unhandledRejection.indexOf(U) > -1; + s && (Ju = { uncaughtException: process.listeners("uncaughtException").filter(function(G) { + return !s.uncaughtException.indexOf(G) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(G) { + return !s.unhandledRejection.indexOf(G) > -1; }) }); var ep; if (typeof e != "undefined") @@ -2787,31 +2795,31 @@ var V3 = Kt((Dg, tS) => { else throw new Error("Could not find wasm module in post.js"); if (Ju) { - var ub = ep._dispose; + var ob = ep._dispose; ep._dispose = function() { - ub(), Ju.uncaughtException.forEach(function(U) { - process.removeListener("uncaughtException", U); - }), Ju.unhandledRejection.forEach(function(U) { - process.removeListener("unhandledRejection", U); + ob(), Ju.uncaughtException.forEach(function(G) { + process.removeListener("uncaughtException", G); + }), Ju.unhandledRejection.forEach(function(G) { + process.removeListener("unhandledRejection", G); }); }; } return e.ready; }; })(); - typeof Dg == "object" && typeof tS == "object" ? tS.exports = eS : typeof define == "function" && define.amd ? define([], function() { - return eS; - }) : typeof Dg == "object" && (Dg.WasmBackendModule = eS); + typeof Ig == "object" && typeof Yw == "object" ? Yw.exports = Xw : typeof define == "function" && define.amd ? define([], function() { + return Xw; + }) : typeof Ig == "object" && (Ig.WasmBackendModule = Xw); }); -var rn = class { - constructor(e, t10) { - this.backend = e, this.dataMover = t10, this.data = /* @__PURE__ */ new WeakMap(), this.dataIdsCount = 0; +var Do = class { + constructor(e, t6) { + this.backend = e, this.dataMover = t6, this.data = /* @__PURE__ */ new WeakMap(), this.dataIdsCount = 0; } get(e) { return this.data.has(e) || this.dataMover.moveData(this.backend, e), this.data.get(e); } - set(e, t10) { - this.dataIdsCount++, this.data.set(e, t10); + set(e, t6) { + this.dataIdsCount++, this.data.set(e, t6); } has(e) { return this.data.has(e); @@ -2823,142 +2831,142 @@ var rn = class { return this.dataIdsCount; } }; -var Jr = class { +var Zr = class { refCount(e) { - return Pr("refCount"); + return Or("refCount"); } incRef(e) { - return Pr("incRef"); + return Or("incRef"); } timerAvailable() { return true; } time(e) { - return Pr("time"); + return Or("time"); } read(e) { - return Pr("read"); + return Or("read"); } readSync(e) { - return Pr("readSync"); + return Or("readSync"); } - readToGPU(e, t10) { - return Pr("readToGPU"); + readToGPU(e, t6) { + return Or("readToGPU"); } numDataIds() { - return Pr("numDataIds"); + return Or("numDataIds"); } - disposeData(e, t10) { - return Pr("disposeData"); + disposeData(e, t6) { + return Or("disposeData"); } - write(e, t10, o) { - return Pr("write"); + write(e, t6, o) { + return Or("write"); } - move(e, t10, o, n, s) { - return Pr("move"); + move(e, t6, o, n, s) { + return Or("move"); } - createTensorFromTexture(e, t10, o) { - return Pr("createTensorFromTexture"); + createTensorFromTexture(e, t6, o) { + return Or("createTensorFromTexture"); } memory() { - return Pr("memory"); + return Or("memory"); } floatPrecision() { - return Pr("floatPrecision"); + return Or("floatPrecision"); } epsilon() { return this.floatPrecision() === 32 ? 1e-7 : 1e-4; } dispose() { - return Pr("dispose"); + return Or("dispose"); } }; -function Pr(r) { +function Or(r) { throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); } -function c0(r) { - let e = r.length, t10 = 0; +function LI(r) { + let e = r.length, t6 = 0; for (; e > 0; ) - t10 = Math.random() * e | 0, e--, $m(r, e, t10); + t6 = Math.random() * e | 0, e--, Cm(r, e, t6); } -function oz(r, e) { +function vV(r, e) { if (r.length !== e.length) throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`); - let t10 = r.length, o = 0; - for (; t10 > 0; ) - o = Math.random() * t10 | 0, t10--, $m(r, t10, o), $m(e, t10, o); + let t6 = r.length, o = 0; + for (; t6 > 0; ) + o = Math.random() * t6 | 0, t6--, Cm(r, t6, o), Cm(e, t6, o); } -function op(r, e, t10) { - return Math.max(r, Math.min(e, t10)); +function op(r, e, t6) { + return Math.max(r, Math.min(e, t6)); } -function nz(r) { +function kV(r) { return r % 2 === 0 ? r : r + 1; } -function $m(r, e, t10) { +function Cm(r, e, t6) { let o = r[e]; - r[e] = r[t10], r[t10] = o; + r[e] = r[t6], r[t6] = o; } -function sz(r) { +function NV(r) { let e = 0; - for (let t10 = 0; t10 < r.length; t10++) - e += r[t10]; + for (let t6 = 0; t6 < r.length; t6++) + e += r[t6]; return e; } -function az(r, e) { - let t10 = Math.random(); - return e * t10 + (1 - t10) * r; +function TV(r, e) { + let t6 = Math.random(); + return e * t6 + (1 - t6) * r; } -function iz(r, e) { - let t10 = 0; +function _V(r, e) { + let t6 = 0; for (let o = 0; o < r.length; o++) { let n = Number(r[o]) - Number(e[o]); - t10 += n * n; + t6 += n * n; } - return t10; + return t6; } -function $(r, e) { +function E(r, e) { if (!r) throw new Error(typeof e == "string" ? e : e()); } -function ht(r, e, t10 = "") { - $(Or(r, e), () => t10 + ` Shapes ${r} and ${e} must match`); +function ht(r, e, t6 = "") { + E(Pr(r, e), () => t6 + ` Shapes ${r} and ${e} must match`); } -function eo(r) { - $(r != null, () => "The input to the tensor constructor must be a non-null value."); +function Jr(r) { + E(r != null, () => "The input to the tensor constructor must be a non-null value."); } -function on(r, e = [], t10 = false) { - if (e == null && (e = []), Array.isArray(r) || Ut(r) && !t10) +function Oo(r, e = [], t6 = false) { + if (e == null && (e = []), Array.isArray(r) || Wt(r) && !t6) for (let o = 0; o < r.length; ++o) - on(r[o], e, t10); + Oo(r[o], e, t6); else e.push(r); return e; } -function Ve(r) { +function ze(r) { if (r.length === 0) return 1; let e = r[0]; - for (let t10 = 1; t10 < r.length; t10++) - e *= r[t10]; + for (let t6 = 1; t6 < r.length; t6++) + e *= r[t6]; return e; } -function uz(r) { +function EV(r) { return r.length === 0; } -function Or(r, e) { +function Pr(r, e) { if (r === e) return true; if (r == null || e == null || r.length !== e.length) return false; - for (let t10 = 0; t10 < r.length; t10++) - if (r[t10] !== e[t10]) + for (let t6 = 0; t6 < r.length; t6++) + if (r[t6] !== e[t6]) return false; return true; } -function ra(r) { +function na(r) { return r % 1 === 0; } -function pz(r) { +function $V(r) { if (Math.tanh != null) return Math.tanh(r); if (r === 1 / 0) @@ -2970,20 +2978,20 @@ function pz(r) { return (e - 1) / (e + 1); } } -function cz(r) { +function AV(r) { let e = Math.ceil(Math.sqrt(r)); return [e, Math.ceil(r / e)]; } -function lz(r) { +function RV(r) { let e = new Uint32Array(r); - for (let t10 = 0; t10 < r; ++t10) - e[t10] = t10; - return c0(e), e; + for (let t6 = 0; t6 < r; ++t6) + e[t6] = t6; + return LI(e), e; } -function Mi(r, e) { +function ji(r, e) { return e <= r.length ? r : r + " ".repeat(e - r.length); } -function mz(r, e = (n) => 0, t10, o) { +function FV(r, e = (n) => 0, t6, o) { return new Promise((n, s) => { let a = 0, i = () => { if (r()) { @@ -2992,7 +3000,7 @@ function mz(r, e = (n) => 0, t10, o) { } a++; let p = e(a); - if (t10 != null && a >= t10) { + if (t6 != null && a >= t6) { s(); return; } @@ -3001,11 +3009,11 @@ function mz(r, e = (n) => 0, t10, o) { i(); }); } -function fz(r, e) { - let t10 = 1, o = -1; +function DV(r, e) { + let t6 = 1, o = -1; for (let s = 0; s < r.length; ++s) if (r[s] >= 0) - t10 *= r[s]; + t6 *= r[s]; else if (r[s] === -1) { if (o !== -1) throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`); @@ -3013,76 +3021,76 @@ function fz(r, e) { } else if (r[s] < 0) throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`); if (o === -1) { - if (e > 0 && e !== t10) + if (e > 0 && e !== t6) throw Error(`Size(${e}) must match the product of shape ${r}`); return r; } - if (t10 === 0) + if (t6 === 0) throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`); - if (e % t10 !== 0) - throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t10}`); + if (e % t6 !== 0) + throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t6}`); let n = r.slice(); - return n[o] = e / t10, n; + return n[o] = e / t6, n; } -function Ka(r, e) { - let t10 = e.length; - return r = r == null ? e.map((o, n) => n) : [].concat(r), $(r.every((o) => o >= -t10 && o < t10), () => `All values in axis param must be in range [-${t10}, ${t10}) but got axis ${r}`), $(r.every((o) => ra(o)), () => `All values in axis param must be integers but got axis ${r}`), r.map((o) => o < 0 ? t10 + o : o); +function Qa(r, e) { + let t6 = e.length; + return r = r == null ? e.map((o, n) => n) : [].concat(r), E(r.every((o) => o >= -t6 && o < t6), () => `All values in axis param must be in range [-${t6}, ${t6}) but got axis ${r}`), E(r.every((o) => na(o)), () => `All values in axis param must be integers but got axis ${r}`), r.map((o) => o < 0 ? t6 + o : o); } -function db(r, e) { - let t10 = [], o = [], n = e != null && Array.isArray(e) && e.length === 0, s = e == null || n ? null : Ka(e, r).sort(), a = 0; +function pb(r, e) { + let t6 = [], o = [], n = e != null && Array.isArray(e) && e.length === 0, s = e == null || n ? null : Qa(e, r).sort(), a = 0; for (let i = 0; i < r.length; ++i) { if (s != null) { if (s[a] === i && r[i] !== 1) throw new Error(`Can't squeeze axis ${i} since its dim '${r[i]}' is not 1`); - (s[a] == null || s[a] > i) && r[i] === 1 && (t10.push(r[i]), o.push(i)), s[a] <= i && a++; + (s[a] == null || s[a] > i) && r[i] === 1 && (t6.push(r[i]), o.push(i)), s[a] <= i && a++; } - r[i] !== 1 && (t10.push(r[i]), o.push(i)); + r[i] !== 1 && (t6.push(r[i]), o.push(i)); } - return { newShape: t10, keptDims: o }; + return { newShape: t6, keptDims: o }; } -function hb(r, e) { - let t10 = null; +function cb(r, e) { + let t6 = null; if (r == null || r === "float32") - t10 = new Float32Array(e); + t6 = new Float32Array(e); else if (r === "int32") - t10 = new Int32Array(e); + t6 = new Int32Array(e); else if (r === "bool") - t10 = new Uint8Array(e); + t6 = new Uint8Array(e); else throw new Error(`Unknown data type ${r}`); - return t10; + return t6; } -function gb(r, e) { - let t10 = null; +function lb(r, e) { + let t6 = null; if (r == null || r === "float32") - t10 = new Float32Array(e); + t6 = new Float32Array(e); else if (r === "int32") - t10 = new Int32Array(e); + t6 = new Int32Array(e); else if (r === "bool") - t10 = new Uint8Array(e); + t6 = new Uint8Array(e); else if (r === "string") - t10 = new Array(e); + t6 = new Array(e); else throw new Error(`Unknown data type ${r}`); - return t10; + return t6; } -function xb(r, e) { - for (let t10 = 0; t10 < r.length; t10++) { - let o = r[t10]; +function mb(r, e) { + for (let t6 = 0; t6 < r.length; t6++) { + let o = r[t6]; if (isNaN(o) || !isFinite(o)) throw Error(`A tensor of type ${e} being uploaded contains ${o}.`); } } -function yb(r) { +function db(r) { return r === "bool" || r === "complex64" || r === "float32" || r === "int32" || r === "string"; } -function dz(r, e) { +function OV(r, e) { return !(e === "complex64" || e === "float32" && r !== "complex64" || e === "int32" && r !== "float32" && r !== "complex64" || e === "bool" && r === "bool"); } -function Ut(r) { +function Wt(r) { return r instanceof Float32Array || r instanceof Int32Array || r instanceof Uint8Array || r instanceof Uint8ClampedArray; } -function Rm(r) { +function Sm(r) { if (r === "float32" || r === "int32") return 4; if (r === "complex64") @@ -3091,71 +3099,71 @@ function Rm(r) { return 1; throw new Error(`Unknown dtype ${r}`); } -function bb(r) { +function fb(r) { if (r == null) return 0; let e = 0; - return r.forEach((t10) => e += t10.length), e; + return r.forEach((t6) => e += t6.length), e; } -function nn(r) { +function Po(r) { return typeof r == "string" || r instanceof String; } -function l0(r) { +function BI(r) { return typeof r == "boolean"; } -function m0(r) { +function VI(r) { return typeof r == "number"; } function np(r) { - return Array.isArray(r) ? np(r[0]) : r instanceof Float32Array ? "float32" : r instanceof Int32Array || r instanceof Uint8Array || r instanceof Uint8ClampedArray ? "int32" : m0(r) ? "float32" : nn(r) ? "string" : l0(r) ? "bool" : "float32"; + return Array.isArray(r) ? np(r[0]) : r instanceof Float32Array ? "float32" : r instanceof Int32Array || r instanceof Uint8Array || r instanceof Uint8ClampedArray ? "int32" : VI(r) ? "float32" : Po(r) ? "string" : BI(r) ? "bool" : "float32"; } function fs(r) { return !!(r && r.constructor && r.call && r.apply); } function sp(r, e) { - for (let t10 = e; t10 < r; ++t10) - if (r % t10 === 0) - return t10; + for (let t6 = e; t6 < r; ++t6) + if (r % t6 === 0) + return t6; return r; } -function ds(r) { +function hs(r) { let e = r.length; if (e < 2) return []; - let t10 = new Array(e - 1); - t10[e - 2] = r[e - 1]; + let t6 = new Array(e - 1); + t6[e - 2] = r[e - 1]; for (let o = e - 3; o >= 0; --o) - t10[o] = t10[o + 1] * r[o + 1]; - return t10; + t6[o] = t6[o + 1] * r[o + 1]; + return t6; } -function f0(r, e, t10, o = false) { +function zI(r, e, t6, o = false) { let n = new Array(); if (e.length === 1) { let s = e[0] * (o ? 2 : 1); for (let a = 0; a < s; a++) - n[a] = t10[r + a]; + n[a] = t6[r + a]; } else { let s = e[0], a = e.slice(1), i = a.reduce((p, u) => p * u) * (o ? 2 : 1); for (let p = 0; p < s; p++) - n[p] = f0(r + p * i, a, t10, o); + n[p] = zI(r + p * i, a, t6, o); } return n; } -function Oi(r, e, t10 = false) { +function Ki(r, e, t6 = false) { if (r.length === 0) return e[0]; - let o = r.reduce((n, s) => n * s) * (t10 ? 2 : 1); + let o = r.reduce((n, s) => n * s) * (t6 ? 2 : 1); if (o === 0) return []; if (o !== e.length) - throw new Error(`[${r}] does not match the input size ${e.length}${t10 ? " for a complex tensor" : ""}.`); - return f0(0, r, e, t10); + throw new Error(`[${r}] does not match the input size ${e.length}${t6 ? " for a complex tensor" : ""}.`); + return zI(0, r, e, t6); } -function jc(r, e) { - let t10 = ap(r, e); - for (let o = 0; o < t10.length; o++) - t10[o] = 1; - return t10; +function zc(r, e) { + let t6 = ap(r, e); + for (let o = 0; o < t6.length; o++) + t6[o] = 1; + return t6; } function ap(r, e) { if (e == null || e === "float32" || e === "complex64") @@ -3166,56 +3174,56 @@ function ap(r, e) { return new Uint8Array(r); throw new Error(`Unknown data type ${e}`); } -function hz(r, e) { - let t10 = r.reduce((o, n) => o * n, 1); +function PV(r, e) { + let t6 = r.reduce((o, n) => o * n, 1); if (e == null || e === "float32") - return Oi(r, new Float32Array(t10)); + return Ki(r, new Float32Array(t6)); if (e === "int32") - return Oi(r, new Int32Array(t10)); + return Ki(r, new Int32Array(t6)); if (e === "bool") - return Oi(r, new Uint8Array(t10)); + return Ki(r, new Uint8Array(t6)); throw new Error(`Unknown data type ${e}`); } -function Xc(r) { +function yt(r) { r.forEach((e) => { - $(Number.isInteger(e) && e >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r}].`); + E(Number.isInteger(e) && e >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r}].`); }); } -function gz(r, e, t10) { +function MV(r, e, t6) { if (e === 0) return 0; if (e === 1) return r[0]; let o = r[r.length - 1]; for (let n = 0; n < r.length - 1; ++n) - o += t10[n] * r[n]; + o += t6[n] * r[n]; return o; } -function xz(r, e, t10) { +function LV(r, e, t6) { if (e === 0) return []; if (e === 1) return [r]; let o = new Array(e); for (let n = 0; n < o.length - 1; ++n) - o[n] = Math.floor(r / t10[n]), r -= o[n] * t10[n]; + o[n] = Math.floor(r / t6[n]), r -= o[n] * t6[n]; return o[o.length - 1] = r, o; } -function Yc(r) { +function Wc(r) { return r && r.then && typeof r.then == "function"; } -var d0 = "tfjsflags"; -var Qc = class { +var WI = "tfjsflags"; +var Uc = class { constructor(e) { - this.global = e, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = bz, this.populateURLFlags(); + this.global = e, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = VV, this.populateURLFlags(); } - setPlatform(e, t10) { - this.platform != null && (P().getBool("IS_TEST") || P().getBool("PROD") || console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)), this.platformName = e, this.platform = t10; + setPlatform(e, t6) { + this.platform != null && (O().getBool("IS_TEST") || O().getBool("PROD") || console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)), this.platformName = e, this.platform = t6; } - registerFlag(e, t10, o) { - if (this.flagRegistry[e] = { evaluationFn: t10, setHook: o }, this.urlFlags[e] != null) { + registerFlag(e, t6, o) { + if (this.flagRegistry[e] = { evaluationFn: t6, setHook: o }, this.urlFlags[e] != null) { let n = this.urlFlags[e]; - P().getBool("IS_TEST") || P().getBool("PROD") || console.warn(`Setting feature override from URL ${e}: ${n}.`), this.set(e, n); + O().getBool("IS_TEST") || O().getBool("PROD") || console.warn(`Setting feature override from URL ${e}: ${n}.`), this.set(e, n); } } async getAsync(e) { @@ -3224,10 +3232,10 @@ var Qc = class { get(e) { if (e in this.flags) return this.flags[e]; - let t10 = this.evaluateFlag(e); - if (Yc(t10)) + let t6 = this.evaluateFlag(e); + if (Wc(t6)) throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`); - return this.flags[e] = t10, this.flags[e]; + return this.flags[e] = t6, this.flags[e]; } getNumber(e) { return this.get(e); @@ -3241,10 +3249,10 @@ var Qc = class { get features() { return this.flags; } - set(e, t10) { + set(e, t6) { if (this.flagRegistry[e] == null) throw new Error(`Cannot set flag ${e} as it has not been registered.`); - this.flags[e] = t10, this.flagRegistry[e].setHook != null && this.flagRegistry[e].setHook(t10); + this.flags[e] = t6, this.flagRegistry[e].setHook != null && this.flagRegistry[e].setHook(t6); } evaluateFlag(e) { if (this.flagRegistry[e] == null) @@ -3261,36 +3269,36 @@ var Qc = class { if (typeof this.global == "undefined" || typeof this.global.location == "undefined" || typeof this.global.location.search == "undefined") return; let e = this.getQueryParams(this.global.location.search); - d0 in e && e[d0].split(",").forEach((o) => { + WI in e && e[WI].split(",").forEach((o) => { let [n, s] = o.split(":"); - this.urlFlags[n] = Iz(n, s); + this.urlFlags[n] = WV(n, s); }); } }; -function bz(r) { +function VV(r) { let e = {}; - return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (t10, ...o) => (Cz(e, o[0], o[1]), o.join("="))), e; + return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (t6, ...o) => (zV(e, o[0], o[1]), o.join("="))), e; } -function Cz(r, e, t10) { - r[decodeURIComponent(e)] = decodeURIComponent(t10 || ""); +function zV(r, e, t6) { + r[decodeURIComponent(e)] = decodeURIComponent(t6 || ""); } -function Iz(r, e) { +function WV(r, e) { if (e = e.toLowerCase(), e === "true" || e === "false") return e === "true"; if (`${+e}` === e) return +e; throw new Error(`Could not parse value flag value ${e} for flag ${r}.`); } -function P() { - return Cb; +function O() { + return hb; } -var Cb = null; -function h0(r) { - Cb = r; +var hb = null; +function UI(r) { + hb = r; } -var Ib; -function wb() { - if (Ib == null) { +var gb; +function xb() { + if (gb == null) { let r; if (typeof window != "undefined") r = window; @@ -3302,370 +3310,370 @@ function wb() { r = self; else throw new Error("Could not find a global object"); - Ib = r; + gb = r; } - return Ib; + return gb; } -function wz() { - let r = wb(); +function UV() { + let r = xb(); return r._tfGlobals == null && (r._tfGlobals = /* @__PURE__ */ new Map()), r._tfGlobals; } -function Zc(r, e) { - let t10 = wz(); - if (t10.has(r)) - return t10.get(r); +function Gc(r, e) { + let t6 = UV(); + if (t6.has(r)) + return t6.get(r); { let o = e(); - return t10.set(r, o), t10.get(r); + return t6.set(r, o), t6.get(r); } } -var sn = "Abs"; -var Li = "Acos"; -var Bi = "Acosh"; -var _r = "Add"; -var an = "AddN"; -var oa = "All"; -var na = "Any"; -var un = "ArgMax"; -var ja = "ArgMin"; -var Vi = "Asin"; -var zi = "Asinh"; -var Wi = "Atan"; -var Ui = "Atanh"; -var sa = "Atan2"; -var pn = "AvgPool"; -var Am = "AvgPoolGrad"; +var gs = "Abs"; +var sa = "Acos"; +var aa = "Acosh"; +var eo = "Add"; +var Mo = "AddN"; +var Lo = "All"; +var Bo = "Any"; +var Vo = "ArgMax"; +var Za = "ArgMin"; +var ia = "Asin"; +var ua = "Asinh"; +var pa = "Atan"; +var ca = "Atanh"; +var la = "Atan2"; +var zo = "AvgPool"; +var wm = "AvgPoolGrad"; var ip = "AvgPool3D"; -var Fm = "AvgPool3DGrad"; -var cn = "BatchMatMul"; -var hs = "BatchToSpaceND"; -var up = "Bincount"; -var Tne = "BroadcastTo"; -var pp = "BroadcastArgs"; -var to = "Cast"; -var ro = "Ceil"; -var Ro = "ClipByValue"; -var aa = "Complex"; -var cp = "ComplexAbs"; -var gs = "Concat"; -var ln = "Conv2D"; -var lp = "Conv2DBackpropFilter"; -var mn = "Conv2DBackpropInput"; -var mp = "Conv3D"; -var Dm = "Conv3DBackpropFilterV2"; -var fp = "Conv3DBackpropInputV2"; -var fn = "Cos"; -var dn = "Cosh"; -var hn = "Cumprod"; -var gn = "Cumsum"; -var xn = "CropAndResize"; -var dp = "DenseBincount"; -var yn = "DepthToSpace"; -var bn = "DepthwiseConv2dNative"; -var hp = "DepthwiseConv2dNativeBackpropFilter"; -var gp = "DepthwiseConv2dNativeBackpropInput"; -var xp = "Diag"; -var yp = "Dilation2D"; -var Sb = "Dilation2DBackpropInput"; -var vb = "Dilation2DBackpropFilter"; -var Cn = "RealDiv"; -var Xa = "Einsum"; -var In = "Elu"; -var Pm = "EluGrad"; -var Gi = "Erf"; -var oo = "Equal"; -var no = "Exp"; -var xs = "ExpandDims"; -var wn = "Expm1"; -var bp = "FFT"; -var ys = "Fill"; -var Sn = "FlipLeftRight"; -var so = "Floor"; -var vn = "FloorDiv"; -var kn = "FusedBatchNorm"; -var bs = "GatherV2"; -var Tn = "GatherNd"; -var ao = "Greater"; -var io = "GreaterEqual"; -var uo = "Identity"; -var Cp = "IFFT"; -var Ya = "Imag"; -var Hi = "IsFinite"; -var qi = "IsInf"; -var ia = "IsNan"; -var Nn = "LeakyRelu"; -var po = "Less"; -var co = "LessEqual"; -var Ip = "LinSpace"; -var lo = "Log"; -var Ki = "Log1p"; -var _n = "LogicalAnd"; -var En = "LogicalNot"; -var ua = "LogicalOr"; -var g0 = "LogicalXor"; -var Nne = "LogSoftmax"; -var _ne = "LowerBound"; -var wp = "LRN"; -var Om = "LRNGrad"; -var $n = "Max"; -var mo = "Maximum"; -var Rn = "MaxPool"; -var Mm = "MaxPoolGrad"; -var Sp = "MaxPool3D"; -var Lm = "MaxPool3DGrad"; -var vp = "MaxPoolWithArgmax"; -var An = "Mean"; -var Fn = "Min"; -var fo = "Minimum"; -var Dn = "MirrorPad"; -var ji = "Mod"; -var kp = "Multinomial"; -var ho = "Multiply"; -var Pn = "Neg"; -var go = "NotEqual"; -var On = "NonMaxSuppressionV3"; -var pa = "NonMaxSuppressionV4"; -var Mn = "NonMaxSuppressionV5"; -var Cs = "OnesLike"; -var ca = "OneHot"; -var Is = "Pack"; -var Ln = "PadV2"; -var Ene = "Pool"; -var Bn = "Pow"; -var Vn = "Prelu"; -var Ao = "Prod"; -var Tp = "RaggedGather"; -var Np = "RaggedRange"; -var _p = "RaggedTensorToTensor"; -var ws = "Range"; -var la = "Real"; -var ma = "Reciprocal"; -var zn = "Relu"; -var Ss = "Reshape"; -var Wn = "ResizeNearestNeighbor"; -var Bm = "ResizeNearestNeighborGrad"; -var Un = "ResizeBilinear"; -var Vm = "ResizeBilinearGrad"; -var Gn = "Relu6"; -var fa = "Reverse"; -var da = "Round"; -var xo = "Rsqrt"; -var Hn = "ScatterNd"; -var Ep = "SearchSorted"; -var vs = "Select"; +var Im = "AvgPool3DGrad"; +var Wo = "BatchMatMul"; +var xs = "BatchToSpaceND"; +var Ja = "Bincount"; +var wne = "BroadcastTo"; +var up = "BroadcastArgs"; +var co = "Cast"; +var Uo = "Ceil"; +var lo = "ClipByValue"; +var ei = "Complex"; +var pp = "ComplexAbs"; +var ys = "Concat"; +var Go = "Conv2D"; +var cp = "Conv2DBackpropFilter"; +var Ho = "Conv2DBackpropInput"; +var lp = "Conv3D"; +var vm = "Conv3DBackpropFilterV2"; +var mp = "Conv3DBackpropInputV2"; +var qo = "Cos"; +var Ko = "Cosh"; +var jo = "Cumprod"; +var Xo = "Cumsum"; +var Yo = "CropAndResize"; +var ti = "DenseBincount"; +var Qo = "DepthToSpace"; +var Zo = "DepthwiseConv2dNative"; +var dp = "DepthwiseConv2dNativeBackpropFilter"; +var fp = "DepthwiseConv2dNativeBackpropInput"; +var hp = "Diag"; +var gp = "Dilation2D"; +var yb = "Dilation2DBackpropInput"; +var bb = "Dilation2DBackpropFilter"; +var Jo = "RealDiv"; +var ri = "Einsum"; +var en = "Elu"; +var km = "EluGrad"; +var ma = "Erf"; +var tn = "Equal"; +var rn = "Exp"; +var bs = "ExpandDims"; +var da = "Expm1"; +var oi = "FFT"; +var Cs = "Fill"; +var on = "FlipLeftRight"; +var nn = "Floor"; +var sn = "FloorDiv"; +var an = "FusedBatchNorm"; +var Ss = "GatherV2"; +var un = "GatherNd"; +var pn = "Greater"; +var cn = "GreaterEqual"; +var mo = "Identity"; +var ni = "IFFT"; +var si = "Imag"; +var fa = "IsFinite"; +var ha = "IsInf"; +var ln = "IsNan"; +var mn = "LeakyRelu"; +var dn = "Less"; +var fn = "LessEqual"; +var xp = "LinSpace"; +var hn = "Log"; +var ga = "Log1p"; +var gn = "LogicalAnd"; +var xn = "LogicalNot"; +var xa = "LogicalOr"; +var GI = "LogicalXor"; +var Ine = "LogSoftmax"; +var vne = "LowerBound"; +var yp = "LRN"; +var Nm = "LRNGrad"; +var yn = "Max"; +var bn = "Maximum"; +var Cn = "MaxPool"; +var Tm = "MaxPoolGrad"; +var bp = "MaxPool3D"; +var _m = "MaxPool3DGrad"; +var Cp = "MaxPoolWithArgmax"; +var Sn = "Mean"; +var wn = "Min"; +var In = "Minimum"; +var vn = "MirrorPad"; +var ya = "Mod"; +var Sp = "Multinomial"; +var kn = "Multiply"; +var ws = "Neg"; +var Nn = "NotEqual"; +var Tn = "NonMaxSuppressionV3"; +var ba = "NonMaxSuppressionV4"; +var _n = "NonMaxSuppressionV5"; +var Is = "OnesLike"; +var En = "OneHot"; +var vs = "Pack"; +var $n = "PadV2"; +var kne = "Pool"; +var An = "Pow"; +var Rn = "Prelu"; +var Fn = "Prod"; +var wp = "RaggedGather"; +var Ip = "RaggedRange"; +var vp = "RaggedTensorToTensor"; +var ks = "Range"; +var ai = "Real"; +var Dn = "Reciprocal"; +var On = "Relu"; +var Ns = "Reshape"; +var Pn = "ResizeNearestNeighbor"; +var Em = "ResizeNearestNeighborGrad"; +var Mn = "ResizeBilinear"; +var $m = "ResizeBilinearGrad"; +var Ln = "Relu6"; +var Bn = "Reverse"; +var Ca = "Round"; +var Vn = "Rsqrt"; +var zn = "ScatterNd"; +var ii = "SearchSorted"; +var Ts = "Select"; var Xi = "Selu"; -var qn = "Slice"; -var Kn = "Sin"; -var ha = "Sinh"; +var _s = "Slice"; +var Wn = "Sin"; +var Sa = "Sinh"; var Yi = "Sign"; -var yo = "Sigmoid"; +var Un = "Sigmoid"; var Qi = "Softplus"; -var bo = "Sqrt"; -var jn = "Sum"; -var ks = "SpaceToBatchND"; -var Ts = "SplitV"; -var Xn = "Softmax"; -var Qa = "SparseFillEmptyRows"; -var ga = "SparseReshape"; -var Za = "SparseSegmentMean"; -var Ja = "SparseSegmentSum"; -var ei = "SparseToDense"; -var Co = "SquaredDifference"; -var ti = "Square"; -var Yn = "StridedSlice"; -var Ns = "StringNGrams"; -var ri = "StringSplit"; -var oi = "StringToHashBucketFast"; -var Io = "Sub"; -var xa = "Tan"; +var Gn = "Sqrt"; +var Hn = "Sum"; +var Es = "SpaceToBatchND"; +var $s = "SplitV"; +var qn = "Softmax"; +var ui = "SparseFillEmptyRows"; +var wa = "SparseReshape"; +var pi = "SparseSegmentMean"; +var ci = "SparseSegmentSum"; +var li = "SparseToDense"; +var Kn = "SquaredDifference"; +var mi = "Square"; +var jn = "StridedSlice"; +var As = "StringNGrams"; +var di = "StringSplit"; +var fi = "StringToHashBucketFast"; +var Xn = "Sub"; +var Yn = "Tan"; var Qn = "Tanh"; -var wo = "Tile"; +var to = "Tile"; var Zn = "TopK"; var Jn = "Transform"; -var Mr = "Transpose"; -var $p = "Unique"; -var _s = "Unpack"; -var Rp = "UnsortedSegmentSum"; -var $ne = "UpperBound"; -var Es = "ZerosLike"; -var $s = "Step"; +var ro = "Transpose"; +var kp = "Unique"; +var Rs = "Unpack"; +var Np = "UnsortedSegmentSum"; +var Nne = "UpperBound"; +var Fs = "ZerosLike"; +var Ds = "Step"; var Zi = "FromPixels"; var es = "RotateWithOffset"; -var Fo = "_FusedMatMul"; -var Do = "FusedConv2D"; -var Po = "FusedDepthwiseConv2D"; -function Rs(...r) { - P().getBool("IS_TEST") || P().getBool("PROD") || console.warn(...r); +var fo = "_FusedMatMul"; +var ho = "FusedConv2D"; +var go = "FusedDepthwiseConv2D"; +function Os(...r) { + O().getBool("IS_TEST") || O().getBool("PROD") || console.warn(...r); } -function Sz(...r) { - P().getBool("IS_TEST") || P().getBool("PROD") || console.log(...r); +function GV(...r) { + O().getBool("IS_TEST") || O().getBool("PROD") || console.log(...r); } -var Ap = Zc("kernelRegistry", () => /* @__PURE__ */ new Map()); -var Jc = Zc("gradRegistry", () => /* @__PURE__ */ new Map()); -function el(r, e) { - let t10 = Tb(r, e); - return Ap.get(t10); +var Tp = Gc("kernelRegistry", () => /* @__PURE__ */ new Map()); +var Hc = Gc("gradRegistry", () => /* @__PURE__ */ new Map()); +function qc(r, e) { + let t6 = Sb(r, e); + return Tp.get(t6); } -function kb(r) { - return Jc.get(r); +function Cb(r) { + return Hc.get(r); } -function zm(r) { - let e = Ap.entries(), t10 = []; +function Am(r) { + let e = Tp.entries(), t6 = []; for (; ; ) { let { done: o, value: n } = e.next(); if (o) break; let [s, a] = n, [i] = s.split("_"); - i === r && t10.push(a); + i === r && t6.push(a); } - return t10; + return t6; } -function ya(r) { - let { kernelName: e, backendName: t10 } = r, o = Tb(e, t10); - Ap.has(o) && Rs(`The kernel '${e}' for backend '${t10}' is already registered`), Ap.set(o, r); +function Ia(r) { + let { kernelName: e, backendName: t6 } = r, o = Sb(e, t6); + Tp.has(o) && Os(`The kernel '${e}' for backend '${t6}' is already registered`), Tp.set(o, r); } -function Pne(r) { +function Ane(r) { let { kernelName: e } = r; - Jc.has(e) && P().getBool("DEBUG") && Rs(`Overriding the gradient for '${e}'`), Jc.set(e, r); + Hc.has(e) && O().getBool("DEBUG") && Os(`Overriding the gradient for '${e}'`), Hc.set(e, r); } -function One(r, e) { - let t10 = Tb(r, e); - if (!Ap.has(t10)) +function Rne(r, e) { + let t6 = Sb(r, e); + if (!Tp.has(t6)) throw new Error(`The kernel '${r}' for backend '${e}' is not registered`); - Ap.delete(t10); + Tp.delete(t6); } -function Mne(r) { - if (!Jc.has(r)) +function Fne(r) { + if (!Hc.has(r)) throw new Error(`The gradient '${r}' for backend is not registered`); - Jc.delete(r); + Hc.delete(r); } -function Lne(r, e) { - zm(r).forEach((o) => { +function Dne(r, e) { + Am(r).forEach((o) => { let n = Object.assign({}, o, { backendName: e }); - ya(n); + Ia(n); }); } -function Tb(r, e) { +function Sb(r, e) { return `${e}_${r}`; } -var x = {}; -Be(x, { arraysEqual: () => Or, assert: () => $, assertNonNegativeIntegerDimensions: () => Xc, assertNonNull: () => eo, assertShapesMatch: () => ht, bytesFromStringArray: () => bb, bytesPerElement: () => Rm, checkConversionForErrors: () => xb, clamp: () => op, computeStrides: () => ds, createScalarValue: () => $z, createShuffledIndices: () => lz, decodeString: () => Op, distSquared: () => iz, encodeString: () => si, fetch: () => Az, fingerPrint64: () => Ez, flatten: () => on, getArrayFromDType: () => gb, getTypedArrayFromDType: () => hb, hasEncodingLoss: () => dz, hexToLong: () => tl, indexToLoc: () => xz, inferDtype: () => np, inferFromImplicitShape: () => fz, isBoolean: () => l0, isFunction: () => fs, isInt: () => ra, isNumber: () => m0, isPromise: () => Yc, isScalarShape: () => uz, isString: () => nn, isTypedArray: () => Ut, isValidDtype: () => yb, locToIndex: () => gz, makeOnesTypedArray: () => jc, makeZerosNestedTypedArray: () => hz, makeZerosTypedArray: () => ap, nearestDivisor: () => sp, nearestLargerEven: () => nz, now: () => ou, parseAxisParam: () => Ka, randUniform: () => az, repeatedTry: () => mz, rightPad: () => Mi, shuffle: () => c0, shuffleCombo: () => oz, sizeFromShape: () => Ve, sizeToSquarishShape: () => cz, squeezeShape: () => db, sum: () => sz, swap: () => $m, tanh: () => pz, toNestedArray: () => Oi, toTypedArray: () => Pp }); -var $b = rp(_0()); -var ru = $b.default || $b; -function tl(r) { +var y = {}; +Ue(y, { arraysEqual: () => Pr, assert: () => E, assertNonNegativeIntegerDimensions: () => yt, assertNonNull: () => Jr, assertShapesMatch: () => ht, bytesFromStringArray: () => fb, bytesPerElement: () => Sm, checkConversionForErrors: () => mb, clamp: () => op, computeStrides: () => hs, createScalarValue: () => QV, createShuffledIndices: () => RV, decodeString: () => Ap, distSquared: () => _V, encodeString: () => gi, fetch: () => JV, fingerPrint64: () => YV, flatten: () => Oo, getArrayFromDType: () => lb, getTypedArrayFromDType: () => cb, hasEncodingLoss: () => OV, hexToLong: () => Kc, indexToLoc: () => LV, inferDtype: () => np, inferFromImplicitShape: () => DV, isBoolean: () => BI, isFunction: () => fs, isInt: () => na, isNumber: () => VI, isPromise: () => Wc, isScalarShape: () => EV, isString: () => Po, isTypedArray: () => Wt, isValidDtype: () => db, locToIndex: () => MV, makeOnesTypedArray: () => zc, makeZerosNestedTypedArray: () => PV, makeZerosTypedArray: () => ap, nearestDivisor: () => sp, nearestLargerEven: () => kV, now: () => ou, parseAxisParam: () => Qa, randUniform: () => TV, repeatedTry: () => FV, rightPad: () => ji, shuffle: () => LI, shuffleCombo: () => vV, sizeFromShape: () => ze, sizeToSquarishShape: () => AV, squeezeShape: () => pb, sum: () => NV, swap: () => Cm, tanh: () => $V, toNestedArray: () => Ki, toTypedArray: () => $p }); +var kb = rp(rv()); +var ru = kb.default || kb; +function Kc(r) { return ru.fromString(r, true, 16); } -var $0 = tl("c3a5c85c97cb3127"); -var tu = tl("b492b66fbe98f273"); -var gr = tl("9ae16a3b2f90404f"); -function Eb(r) { +var nv = Kc("c3a5c85c97cb3127"); +var tu = Kc("b492b66fbe98f273"); +var gr = Kc("9ae16a3b2f90404f"); +function vb(r) { return r.xor(r.shru(47)); } -function R0(r, e, t10) { - let o = r.slice(e, e + t10); +function sv(r, e, t6) { + let o = r.slice(e, e + t6); return ru.fromBytes(Array.from(o), true, true); } -function yt(r, e) { - return R0(r, e, 8); +function bt(r, e) { + return sv(r, e, 8); } -function E0(r, e) { - return R0(r, e, 4); +function ov(r, e) { + return sv(r, e, 4); } -function Xt(r, e) { +function jt(r, e) { return e === 0 ? r : r.shru(e).or(r.shl(64 - e)); } -function ni(r, e, t10 = tl("9ddfea08eb382d69")) { - let o = r.xor(e).mul(t10); +function hi(r, e, t6 = Kc("9ddfea08eb382d69")) { + let o = r.xor(e).mul(t6); o = o.xor(o.shru(47)); - let n = e.xor(o).mul(t10); - return n = n.xor(n.shru(47)), n = n.mul(t10), n; + let n = e.xor(o).mul(t6); + return n = n.xor(n.shru(47)), n = n.mul(t6), n; } -function kz(r, e, t10, o, n, s) { - n = n.add(r), s = Xt(s.add(n).add(o), 21); +function qV(r, e, t6, o, n, s) { + n = n.add(r), s = jt(s.add(n).add(o), 21); let a = n; - return n = n.add(e), n = n.add(t10), s = s.add(Xt(n, 44)), [n.add(o), s.add(a)]; + return n = n.add(e), n = n.add(t6), s = s.add(jt(n, 44)), [n.add(o), s.add(a)]; } -function Um(r, e, t10, o) { - return kz(yt(r, e), yt(r, e + 8), yt(r, e + 16), yt(r, e + 24), t10, o); +function Fm(r, e, t6, o) { + return qV(bt(r, e), bt(r, e + 8), bt(r, e + 16), bt(r, e + 24), t6, o); } -function Tz(r, e = r.length) { +function KV(r, e = r.length) { if (e >= 8) { - let t10 = gr.add(e * 2), o = yt(r, 0).add(gr), n = yt(r, e - 8), s = Xt(n, 37).mul(t10).add(o), a = Xt(o, 25).add(n).mul(t10); - return ni(s, a, t10); + let t6 = gr.add(e * 2), o = bt(r, 0).add(gr), n = bt(r, e - 8), s = jt(n, 37).mul(t6).add(o), a = jt(o, 25).add(n).mul(t6); + return hi(s, a, t6); } if (e >= 4) { - let t10 = gr.add(e * 2), o = E0(r, 0); - return ni(o.shl(3).add(e), E0(r, e - 4), t10); + let t6 = gr.add(e * 2), o = ov(r, 0); + return hi(o.shl(3).add(e), ov(r, e - 4), t6); } if (e > 0) { - let t10 = r[0], o = r[e >> 1], n = r[e - 1], s = t10 + (o << 8), a = e + (n << 2); - return Eb(gr.mul(s).xor($0.mul(a))).mul(gr); + let t6 = r[0], o = r[e >> 1], n = r[e - 1], s = t6 + (o << 8), a = e + (n << 2); + return vb(gr.mul(s).xor(nv.mul(a))).mul(gr); } return gr; } -function Nz(r, e = r.length) { - let t10 = gr.add(e * 2), o = yt(r, 0).mul(tu), n = yt(r, 8), s = yt(r, e - 8).mul(t10), a = yt(r, e - 16).mul(gr); - return ni(Xt(o.add(n), 43).add(Xt(s, 30)).add(a), o.add(Xt(n.add(gr), 18)).add(s), t10); +function jV(r, e = r.length) { + let t6 = gr.add(e * 2), o = bt(r, 0).mul(tu), n = bt(r, 8), s = bt(r, e - 8).mul(t6), a = bt(r, e - 16).mul(gr); + return hi(jt(o.add(n), 43).add(jt(s, 30)).add(a), o.add(jt(n.add(gr), 18)).add(s), t6); } -function _z(r, e = r.length) { - let t10 = gr.add(e * 2), o = yt(r, 0).mul(gr), n = yt(r, 8), s = yt(r, e - 8).mul(t10), a = yt(r, e - 16).mul(gr), i = Xt(o.add(n), 43).add(Xt(s, 30)).add(a), p = ni(i, o.add(Xt(n.add(gr), 18)).add(s), t10), u = yt(r, 16).mul(t10), c = yt(r, 24), l = i.add(yt(r, e - 32)).mul(t10), m = p.add(yt(r, e - 24)).mul(t10); - return ni(Xt(u.add(c), 43).add(Xt(l, 30)).add(m), u.add(Xt(c.add(o), 18)).add(l), t10); +function XV(r, e = r.length) { + let t6 = gr.add(e * 2), o = bt(r, 0).mul(gr), n = bt(r, 8), s = bt(r, e - 8).mul(t6), a = bt(r, e - 16).mul(gr), i = jt(o.add(n), 43).add(jt(s, 30)).add(a), p = hi(i, o.add(jt(n.add(gr), 18)).add(s), t6), u = bt(r, 16).mul(t6), c = bt(r, 24), l = i.add(bt(r, e - 32)).mul(t6), m = p.add(bt(r, e - 24)).mul(t6); + return hi(jt(u.add(c), 43).add(jt(l, 30)).add(m), u.add(jt(c.add(o), 18)).add(l), t6); } -function Ez(r, e = r.length) { - let t10 = ru.fromNumber(81, true); +function YV(r, e = r.length) { + let t6 = ru.fromNumber(81, true); if (e <= 32) - return e <= 16 ? Tz(r, e) : Nz(r, e); + return e <= 16 ? KV(r, e) : jV(r, e); if (e <= 64) - return _z(r, e); - let o = t10, n = t10.mul(tu).add(113), s = Eb(n.mul(gr).add(113)).mul(gr), a = [ru.UZERO, ru.UZERO], i = [ru.UZERO, ru.UZERO]; - o = o.mul(gr).add(yt(r, 0)); + return XV(r, e); + let o = t6, n = t6.mul(tu).add(113), s = vb(n.mul(gr).add(113)).mul(gr), a = [ru.UZERO, ru.UZERO], i = [ru.UZERO, ru.UZERO]; + o = o.mul(gr).add(bt(r, 0)); let p = 0, u = (e - 1 >> 6) * 64, c = u + (e - 1 & 63) - 63; do - o = Xt(o.add(n).add(a[0]).add(yt(r, p + 8)), 37).mul(tu), n = Xt(n.add(a[1]).add(yt(r, p + 48)), 42).mul(tu), o = o.xor(i[1]), n = n.add(a[0]).add(yt(r, p + 40)), s = Xt(s.add(i[0]), 33).mul(tu), a = Um(r, p, a[1].mul(tu), o.add(i[0])), i = Um(r, p + 32, s.add(i[1]), n.add(yt(r, p + 16))), [s, o] = [o, s], p += 64; + o = jt(o.add(n).add(a[0]).add(bt(r, p + 8)), 37).mul(tu), n = jt(n.add(a[1]).add(bt(r, p + 48)), 42).mul(tu), o = o.xor(i[1]), n = n.add(a[0]).add(bt(r, p + 40)), s = jt(s.add(i[0]), 33).mul(tu), a = Fm(r, p, a[1].mul(tu), o.add(i[0])), i = Fm(r, p + 32, s.add(i[1]), n.add(bt(r, p + 16))), [s, o] = [o, s], p += 64; while (p !== u); let l = tu.add(s.and(255).shl(1)); - return p = c, i[0] = i[0].add(e - 1 & 63), a[0] = a[0].add(i[0]), i[0] = i[0].add(a[0]), o = Xt(o.add(n).add(a[0]).add(yt(r, p + 8)), 37).mul(l), n = Xt(n.add(a[1]).add(yt(r, p + 48)), 42).mul(l), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(yt(r, p + 40))), s = Xt(s.add(i[0]), 33).mul(l), a = Um(r, p, a[1].mul(l), o.add(i[0])), i = Um(r, p + 32, s.add(i[1]), n.add(yt(r, p + 16))), [s, o] = [o, s], ni(ni(a[0], i[0], l).add(Eb(n).mul($0)).add(s), ni(a[1], i[1], l).add(o), l); + return p = c, i[0] = i[0].add(e - 1 & 63), a[0] = a[0].add(i[0]), i[0] = i[0].add(a[0]), o = jt(o.add(n).add(a[0]).add(bt(r, p + 8)), 37).mul(l), n = jt(n.add(a[1]).add(bt(r, p + 48)), 42).mul(l), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(bt(r, p + 40))), s = jt(s.add(i[0]), 33).mul(l), a = Fm(r, p, a[1].mul(l), o.add(i[0])), i = Fm(r, p + 32, s.add(i[1]), n.add(bt(r, p + 16))), [s, o] = [o, s], hi(hi(a[0], i[0], l).add(vb(n).mul(nv)).add(s), hi(a[1], i[1], l).add(o), l); } -function $z(r, e) { - return e === "string" ? si(r) : Pp([r], e); +function QV(r, e) { + return e === "string" ? gi(r) : $p([r], e); } -function Rz(r, e) { +function ZV(r, e) { return r instanceof Float32Array && e === "float32" || r instanceof Int32Array && e === "int32" || r instanceof Uint8Array && e === "bool"; } -function Pp(r, e) { +function $p(r, e) { if (e === "string") throw new Error("Cannot convert a string[] to a TypedArray"); - if (Array.isArray(r) && (r = on(r)), P().getBool("DEBUG") && xb(r, e), Rz(r, e)) + if (Array.isArray(r) && (r = Oo(r)), O().getBool("DEBUG") && mb(r, e), ZV(r, e)) return r; if (e == null || e === "float32" || e === "complex64") return new Float32Array(r); if (e === "int32") return new Int32Array(r); if (e === "bool") { - let t10 = new Uint8Array(r.length); - for (let o = 0; o < t10.length; ++o) - Math.round(r[o]) !== 0 && (t10[o] = 1); - return t10; + let t6 = new Uint8Array(r.length); + for (let o = 0; o < t6.length; ++o) + Math.round(r[o]) !== 0 && (t6[o] = 1); + return t6; } else throw new Error(`Unknown data type ${e}`); } function ou() { - return P().platform.now(); + return O().platform.now(); } -function Az(r, e) { - return P().platform.fetch(r, e); +function JV(r, e) { + return O().platform.fetch(r, e); } -function si(r, e = "utf-8") { - return e = e || "utf-8", P().platform.encode(r, e); +function gi(r, e = "utf-8") { + return e = e || "utf-8", O().platform.encode(r, e); } -function Op(r, e = "utf-8") { - return e = e || "utf-8", P().platform.decode(r, e); +function Ap(r, e = "utf-8") { + return e = e || "utf-8", O().platform.decode(r, e); } -var Gm = class { - constructor(e, t10) { - this.backendTimer = e, this.logger = t10, t10 == null && (this.logger = new Rb()); +var Dm = class { + constructor(e, t6) { + this.backendTimer = e, this.logger = t6, t6 == null && (this.logger = new Nb()); } - profileKernel(e, t10, o) { + profileKernel(e, t6, o) { let n, s = () => { n = o(); }, a, i = ou(); @@ -3677,66 +3685,66 @@ var Gm = class { u.dataSync(); a = Promise.resolve({ kernelMs: ou() - i }); } - if (P().getBool("CHECK_COMPUTATION_FOR_ERRORS")) + if (O().getBool("CHECK_COMPUTATION_FOR_ERRORS")) for (let u = 0; u < n.length; u++) { let c = n[u]; c.data().then((l) => { - Fz(l, c.dtype, e); + ez(l, c.dtype, e); }); } - return { kernelName: e, outputs: n, inputs: t10, timeMs: a.then((u) => u.kernelMs), extraInfo: a.then((u) => u.getExtraProfileInfo != null ? u.getExtraProfileInfo() : "") }; + return { kernelName: e, outputs: n, inputs: t6, timeMs: a.then((u) => u.kernelMs), extraInfo: a.then((u) => u.getExtraProfileInfo != null ? u.getExtraProfileInfo() : "") }; } logKernelProfile(e) { - let { kernelName: t10, outputs: o, timeMs: n, inputs: s, extraInfo: a } = e; + let { kernelName: t6, outputs: o, timeMs: n, inputs: s, extraInfo: a } = e; o.forEach((i) => { Promise.all([i.data(), n, a]).then((p) => { - this.logger.logKernelProfile(t10, i, p[0], p[1], s, p[2]); + this.logger.logKernelProfile(t6, i, p[0], p[1], s, p[2]); }); }); } }; -function Fz(r, e, t10) { +function ez(r, e, t6) { if (e !== "float32") return false; for (let o = 0; o < r.length; o++) { let n = r[o]; if (isNaN(n) || !isFinite(n)) - return console.warn(`Found ${n} in the result of '${t10}'`), true; + return console.warn(`Found ${n} in the result of '${t6}'`), true; } return false; } -var Rb = class { - logKernelProfile(e, t10, o, n, s, a) { - let i = typeof n == "number" ? Mi(`${n}ms`, 9) : n.error, p = Mi(e, 25), u = t10.rank, c = t10.size, l = Mi(t10.shape.toString(), 14), m = ""; - for (let f in s) { - let d = s[f]; - if (d != null) { - let h = d.shape || t10.shape, g = h.length; - m += `${f}: ${g}D ${g > 0 ? h : ""} `; +var Nb = class { + logKernelProfile(e, t6, o, n, s, a) { + let i = typeof n == "number" ? ji(`${n}ms`, 9) : n.error, p = ji(e, 25), u = t6.rank, c = t6.size, l = ji(t6.shape.toString(), 14), m = ""; + for (let d in s) { + let f = s[d]; + if (f != null) { + let h = f.shape || t6.shape, g = h.length; + m += `${d}: ${g}D ${g > 0 ? h : ""} `; } } console.log(`%c${p} %c${i} %c${u}D ${l} %c${c} %c${m} %c${a}`, "font-weight:bold", "color:red", "color:blue", "color: orange", "color: green", "color: steelblue"); } }; -function A0(r, e, t10) { +function av(r, e, t6) { let o = {}, n = {}; for (let p = 0; p < e.length; p++) o[e[p].id] = true; for (let p = 0; p < r.length; p++) { let u = r[p], c = u.inputs; for (let l in c) { - let m = c[l], f = false; - for (let d = 0; d < e.length; d++) + let m = c[l], d = false; + for (let f = 0; f < e.length; f++) if (o[m.id]) { - u.outputs.forEach((h) => o[h.id] = true), f = true, n[u.id] = true; + u.outputs.forEach((h) => o[h.id] = true), d = true, n[u.id] = true; break; } - if (f) + if (d) break; } } let s = {}; - s[t10.id] = true; + s[t6.id] = true; let a = {}; for (let p = r.length - 1; p >= 0; p--) { let u = r[p], c = u.inputs; @@ -3753,8 +3761,8 @@ function A0(r, e, t10) { if (n[u.id] && a[u.id]) { let c = {}; for (let m in u.inputs) { - let f = u.inputs[m]; - o[f.id] && (c[m] = f); + let d = u.inputs[m]; + o[d.id] && (c[m] = d); } let l = Object.assign({}, u); l.inputs = c, l.outputs = u.outputs, i.push(l); @@ -3762,7 +3770,7 @@ function A0(r, e, t10) { } return i; } -function F0(r, e, t10, o) { +function iv(r, e, t6, o) { for (let n = e.length - 1; n >= 0; n--) { let s = e[n], a = []; if (s.outputs.forEach((p) => { @@ -3774,11 +3782,11 @@ function F0(r, e, t10, o) { for (let p in s.inputs) { if (!(p in i)) throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`); - let u = t10(() => i[p]()); + let u = t6(() => i[p]()); if (u.dtype !== "float32") throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`); let c = s.inputs[p]; - if (!Or(u.shape, c.shape)) + if (!Pr(u.shape, c.shape)) throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`); if (r[c.id] == null) r[c.id] = u; @@ -3789,105 +3797,105 @@ function F0(r, e, t10, o) { } } } -var D0 = 20; -var rl = 3; -var Ab = 7; -function P0(r, e, t10, o) { - let n = ds(e), s = Dz(r, e, t10, n), a = e.length, i = Hm(r, e, t10, n, s), p = ["Tensor"]; - return o && (p.push(` dtype: ${t10}`), p.push(` rank: ${a}`), p.push(` shape: [${e}]`), p.push(" values:")), p.push(i.map((u) => " " + u).join(` +var uv = 20; +var jc = 3; +var Tb = 7; +function pv(r, e, t6, o) { + let n = hs(e), s = tz(r, e, t6, n), a = e.length, i = Om(r, e, t6, n, s), p = ["Tensor"]; + return o && (p.push(` dtype: ${t6}`), p.push(` rank: ${a}`), p.push(` shape: [${e}]`), p.push(" values:")), p.push(i.map((u) => " " + u).join(` `)), p.join(` `); } -function Dz(r, e, t10, o) { - let n = Ve(e), s = o[o.length - 1], a = new Array(s).fill(0), i = e.length, p = t10 === "complex64" ? nl(r) : r; +function tz(r, e, t6, o) { + let n = ze(e), s = o[o.length - 1], a = new Array(s).fill(0), i = e.length, p = t6 === "complex64" ? Yc(r) : r; if (i > 1) for (let u = 0; u < n / s; u++) { let c = u * s; for (let l = 0; l < s; l++) - a[l] = Math.max(a[l], ol(p[c + l], 0, t10).length); + a[l] = Math.max(a[l], Xc(p[c + l], 0, t6).length); } return a; } -function ol(r, e, t10) { +function Xc(r, e, t6) { let o; - return Array.isArray(r) ? o = `${parseFloat(r[0].toFixed(Ab))} + ${parseFloat(r[1].toFixed(Ab))}j` : nn(r) ? o = `'${r}'` : t10 === "bool" ? o = O0(r) : o = parseFloat(r.toFixed(Ab)).toString(), Mi(o, e); + return Array.isArray(r) ? o = `${parseFloat(r[0].toFixed(Tb))} + ${parseFloat(r[1].toFixed(Tb))}j` : Po(r) ? o = `'${r}'` : t6 === "bool" ? o = cv(r) : o = parseFloat(r.toFixed(Tb)).toString(), ji(o, e); } -function O0(r) { +function cv(r) { return r === 0 ? "false" : "true"; } -function Hm(r, e, t10, o, n, s = true) { - let a = t10 === "complex64" ? 2 : 1, i = e[0], p = e.length; +function Om(r, e, t6, o, n, s = true) { + let a = t6 === "complex64" ? 2 : 1, i = e[0], p = e.length; if (p === 0) { - if (t10 === "complex64") { - let h = nl(r); - return [ol(h[0], 0, t10)]; + if (t6 === "complex64") { + let h = Yc(r); + return [Xc(h[0], 0, t6)]; } - return t10 === "bool" ? [O0(r[0])] : [r[0].toString()]; + return t6 === "bool" ? [cv(r[0])] : [r[0].toString()]; } if (p === 1) { - if (i > D0) { - let g = rl * a, y = Array.from(r.slice(0, g)), b = Array.from(r.slice((i - rl) * a, i * a)); - return t10 === "complex64" && (y = nl(y), b = nl(b)), ["[" + y.map((C, w) => ol(C, n[w], t10)).join(", ") + ", ..., " + b.map((C, w) => ol(C, n[i - rl + w], t10)).join(", ") + "]"]; + if (i > uv) { + let g = jc * a, x = Array.from(r.slice(0, g)), b = Array.from(r.slice((i - jc) * a, i * a)); + return t6 === "complex64" && (x = Yc(x), b = Yc(b)), ["[" + x.map((C, w) => Xc(C, n[w], t6)).join(", ") + ", ..., " + b.map((C, w) => Xc(C, n[i - jc + w], t6)).join(", ") + "]"]; } - return ["[" + (t10 === "complex64" ? nl(r) : Array.from(r)).map((g, y) => ol(g, n[y], t10)).join(", ") + "]"]; + return ["[" + (t6 === "complex64" ? Yc(r) : Array.from(r)).map((g, x) => Xc(g, n[x], t6)).join(", ") + "]"]; } let u = e.slice(1), c = o.slice(1), l = o[0] * a, m = []; - if (i > D0) { - for (let h = 0; h < rl; h++) { - let g = h * l, y = g + l; - m.push(...Hm(r.slice(g, y), u, t10, c, n, false)); + if (i > uv) { + for (let h = 0; h < jc; h++) { + let g = h * l, x = g + l; + m.push(...Om(r.slice(g, x), u, t6, c, n, false)); } m.push("..."); - for (let h = i - rl; h < i; h++) { - let g = h * l, y = g + l; - m.push(...Hm(r.slice(g, y), u, t10, c, n, h === i - 1)); + for (let h = i - jc; h < i; h++) { + let g = h * l, x = g + l; + m.push(...Om(r.slice(g, x), u, t6, c, n, h === i - 1)); } } else for (let h = 0; h < i; h++) { - let g = h * l, y = g + l; - m.push(...Hm(r.slice(g, y), u, t10, c, n, h === i - 1)); + let g = h * l, x = g + l; + m.push(...Om(r.slice(g, x), u, t6, c, n, h === i - 1)); } - let f = p === 2 ? "," : ""; - m[0] = "[" + m[0] + f; + let d = p === 2 ? "," : ""; + m[0] = "[" + m[0] + d; for (let h = 1; h < m.length - 1; h++) - m[h] = " " + m[h] + f; - let d = `, + m[h] = " " + m[h] + d; + let f = `, `; for (let h = 2; h < p; h++) - d += ` + f += ` `; - return m[m.length - 1] = " " + m[m.length - 1] + "]" + (s ? "" : d), m; + return m[m.length - 1] = " " + m[m.length - 1] + "]" + (s ? "" : f), m; } -function nl(r) { +function Yc(r) { let e = []; - for (let t10 = 0; t10 < r.length; t10 += 2) - e.push([r[t10], r[t10 + 1]]); + for (let t6 = 0; t6 < r.length; t6 += 2) + e.push([r[t6], r[t6 + 1]]); return e; } -var je = class { - constructor(e, t10, o) { - if (this.dtype = t10, this.shape = e.slice(), this.size = Ve(e), o != null) { +var st = class { + constructor(e, t6, o) { + if (this.dtype = t6, this.shape = e.slice(), this.size = ze(e), o != null) { let n = o.length; - $(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); + E(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); } - if (t10 === "complex64") + if (t6 === "complex64") throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag)."); - this.values = o || gb(t10, this.size), this.strides = ds(e); + this.values = o || lb(t6, this.size), this.strides = hs(e); } - set(e, ...t10) { - t10.length === 0 && (t10 = [0]), $(t10.length === this.rank, () => `The number of provided coordinates (${t10.length}) must match the rank (${this.rank})`); - let o = this.locToIndex(t10); + set(e, ...t6) { + t6.length === 0 && (t6 = [0]), E(t6.length === this.rank, () => `The number of provided coordinates (${t6.length}) must match the rank (${this.rank})`); + let o = this.locToIndex(t6); this.values[o] = e; } get(...e) { e.length === 0 && (e = [0]); - let t10 = 0; + let t6 = 0; for (let n of e) { - if (n < 0 || n >= this.shape[t10]) { + if (n < 0 || n >= this.shape[t6]) { let s = `Requested out of range element at ${e}. Buffer shape=${this.shape}`; throw new Error(s); } - t10++; + t6++; } let o = e[e.length - 1]; for (let n = 0; n < e.length - 1; ++n) @@ -3899,20 +3907,20 @@ var je = class { return 0; if (this.rank === 1) return e[0]; - let t10 = e[e.length - 1]; + let t6 = e[e.length - 1]; for (let o = 0; o < e.length - 1; ++o) - t10 += this.strides[o] * e[o]; - return t10; + t6 += this.strides[o] * e[o]; + return t6; } indexToLoc(e) { if (this.rank === 0) return []; if (this.rank === 1) return [e]; - let t10 = new Array(this.shape.length); - for (let o = 0; o < t10.length - 1; ++o) - t10[o] = Math.floor(e / this.strides[o]), e -= t10[o] * this.strides[o]; - return t10[t10.length - 1] = e, t10; + let t6 = new Array(this.shape.length); + for (let o = 0; o < t6.length - 1; ++o) + t6[o] = Math.floor(e / this.strides[o]), e -= t6[o] * this.strides[o]; + return t6[t6.length - 1] = e, t6; } get rank() { return this.shape.length; @@ -3922,45 +3930,45 @@ var je = class { } }; var rs = null; -var Mp = null; -var Pz = null; -function M0(r) { +var Rp = null; +var rz = null; +function lv(r) { rs = r; } -function L0(r) { - Mp = r; +function mv(r) { + Rp = r; } -function B0(r) { - Pz = r; +function dv(r) { + rz = r; } -var ut = class { - constructor(e, t10, o, n) { - this.kept = false, this.isDisposedInternal = false, this.shape = e.slice(), this.dtype = t10 || "float32", this.size = Ve(e), this.strides = ds(e), this.dataId = o, this.id = n, this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; +var it = class { + constructor(e, t6, o, n) { + this.kept = false, this.isDisposedInternal = false, this.shape = e.slice(), this.dtype = t6 || "float32", this.size = ze(e), this.strides = hs(e), this.dataId = o, this.id = n, this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; } get rank() { return this.shape.length; } async buffer() { let e = await this.data(); - return Mp.buffer(this.shape, this.dtype, e); + return Rp.buffer(this.shape, this.dtype, e); } bufferSync() { - return Mp.buffer(this.shape, this.dtype, this.dataSync()); + return Rp.buffer(this.shape, this.dtype, this.dataSync()); } async array() { let e = await this.data(); - return Oi(this.shape, e, this.dtype === "complex64"); + return Ki(this.shape, e, this.dtype === "complex64"); } arraySync() { - return Oi(this.shape, this.dataSync(), this.dtype === "complex64"); + return Ki(this.shape, this.dataSync(), this.dtype === "complex64"); } async data() { this.throwIfDisposed(); let e = rs().read(this.dataId); if (this.dtype === "string") { - let t10 = await e; + let t6 = await e; try { - return t10.map((o) => Op(o)); + return t6.map((o) => Ap(o)); } catch (o) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } @@ -3975,8 +3983,8 @@ var ut = class { let e = rs().readSync(this.dataId); if (this.dtype === "string") try { - return e.map((t10) => Op(t10)); - } catch (t10) { + return e.map((t6) => Ap(t6)); + } catch (t6) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } return e; @@ -3997,35 +4005,35 @@ var ut = class { throw new Error("Tensor is disposed."); } print(e = false) { - return Mp.print(this, e); + return Rp.print(this, e); } clone() { - return this.throwIfDisposed(), Mp.clone(this); + return this.throwIfDisposed(), Rp.clone(this); } toString(e = false) { - let t10 = this.dataSync(); - return P0(t10, this.shape, this.dtype, e); + let t6 = this.dataSync(); + return pv(t6, this.shape, this.dtype, e); } cast(e) { - return this.throwIfDisposed(), Mp.cast(this, e); + return this.throwIfDisposed(), Rp.cast(this, e); } - variable(e = true, t10, o) { - return this.throwIfDisposed(), rs().makeVariable(this, e, t10, o); + variable(e = true, t6, o) { + return this.throwIfDisposed(), rs().makeVariable(this, e, t6, o); } }; -Object.defineProperty(ut, Symbol.hasInstance, { value: (r) => !!r && r.data != null && r.dataSync != null && r.throwIfDisposed != null }); -function Oz() { - return Zc("Tensor", () => ut); +Object.defineProperty(it, Symbol.hasInstance, { value: (r) => !!r && r.data != null && r.dataSync != null && r.throwIfDisposed != null }); +function oz() { + return Gc("Tensor", () => it); } -Oz(); -var ba = class extends ut { - constructor(e, t10, o, n) { - super(e.shape, e.dtype, e.dataId, n), this.trainable = t10, this.name = o; +oz(); +var va = class extends it { + constructor(e, t6, o, n) { + super(e.shape, e.dtype, e.dataId, n), this.trainable = t6, this.name = o; } assign(e) { if (e.dtype !== this.dtype) throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`); - if (!Or(e.shape, this.shape)) + if (!Pr(e.shape, this.shape)) throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`); rs().disposeTensor(this), this.dataId = e.dataId, rs().incRef(this, null); } @@ -4033,79 +4041,79 @@ var ba = class extends ut { rs().disposeVariable(this), this.isDisposedInternal = true; } }; -Object.defineProperty(ba, Symbol.hasInstance, { value: (r) => r instanceof ut && r.assign != null && r.assign instanceof Function }); -var z0 = {}; -Be(z0, { assertTypesMatch: () => Lb, getTensorsInContainer: () => sl, isTensorInList: () => Lz, makeTypesMatch: () => Re }); -var Fb; +Object.defineProperty(va, Symbol.hasInstance, { value: (r) => r instanceof it && r.assign != null && r.assign instanceof Function }); +var hv = {}; +Ue(hv, { assertTypesMatch: () => Fb, getTensorsInContainer: () => Qc, isTensorInList: () => sz, makeTypesMatch: () => Re }); +var _b; (function(r) { r.R0 = "R0", r.R1 = "R1", r.R2 = "R2", r.R3 = "R3", r.R4 = "R4", r.R5 = "R5", r.R6 = "R6"; -})(Fb || (Fb = {})); -var Db; +})(_b || (_b = {})); +var Eb; (function(r) { r.float32 = "float32", r.int32 = "int32", r.bool = "int32", r.complex64 = "complex64"; -})(Db || (Db = {})); -var Pb; +})(Eb || (Eb = {})); +var $b; (function(r) { r.float32 = "float32", r.int32 = "int32", r.bool = "bool", r.complex64 = "complex64"; -})(Pb || (Pb = {})); -var Ob; +})($b || ($b = {})); +var Ab; (function(r) { r.float32 = "float32", r.int32 = "float32", r.bool = "float32", r.complex64 = "complex64"; -})(Ob || (Ob = {})); -var Mb; +})(Ab || (Ab = {})); +var Rb; (function(r) { r.float32 = "complex64", r.int32 = "complex64", r.bool = "complex64", r.complex64 = "complex64"; -})(Mb || (Mb = {})); -var Mz = { float32: Ob, int32: Db, bool: Pb, complex64: Mb }; -function ct(r, e) { +})(Rb || (Rb = {})); +var nz = { float32: Ab, int32: Eb, bool: $b, complex64: Rb }; +function dt(r, e) { if (r === "string" || e === "string") { if (r === "string" && e === "string") return "string"; throw new Error(`Can not upcast ${r} with ${e}`); } - return Mz[r][e]; + return nz[r][e]; } -function Ca(r) { - return ct(r, "int32"); +function ka(r) { + return dt(r, "int32"); } function Re(r, e) { if (r.dtype === e.dtype) return [r, e]; - let t10 = ct(r.dtype, e.dtype); - return [r.cast(t10), e.cast(t10)]; + let t6 = dt(r.dtype, e.dtype); + return [r.cast(t6), e.cast(t6)]; } -function Lb(r, e) { - $(r.dtype === e.dtype, () => `The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`); +function Fb(r, e) { + E(r.dtype === e.dtype, () => `The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`); } -function Lz(r, e) { - return e.some((t10) => t10.id === r.id); +function sz(r, e) { + return e.some((t6) => t6.id === r.id); } -function sl(r) { +function Qc(r) { let e = []; - return V0(r, e, /* @__PURE__ */ new Set()), e; + return fv(r, e, /* @__PURE__ */ new Set()), e; } -function V0(r, e, t10) { +function fv(r, e, t6) { if (r == null) return; - if (r instanceof ut) { + if (r instanceof it) { e.push(r); return; } - if (!Bz(r)) + if (!az(r)) return; let o = r; for (let n in o) { let s = o[n]; - t10.has(s) || (t10.add(s), V0(s, e, t10)); + t6.has(s) || (t6.add(s), fv(s, e, t6)); } } -function Bz(r) { +function az(r) { return Array.isArray(r) || typeof r == "object"; } -function Bb(r) { +function Db(r) { return r.kernelName != null; } -var qm = class { +var Pm = class { constructor() { this.registeredVariables = {}, this.nextTapeNodeId = 0, this.numBytes = 0, this.numTensors = 0, this.numStringTensors = 0, this.numDataBuffers = 0, this.gradientDepth = 0, this.kernelDepth = 0, this.scopeStack = [], this.numDataMovesStack = [], this.nextScopeId = 0, this.tensorInfo = /* @__PURE__ */ new WeakMap(), this.profiling = false, this.activeProfile = { newBytes: 0, newTensors: 0, peakBytes: 0, kernels: [], result: null, get kernelNames() { return Array.from(new Set(this.kernels.map((e) => e.name))); @@ -4116,9 +4124,9 @@ var qm = class { this.registeredVariables[e].dispose(); } }; -var ai = class { +var xi = class { constructor(e) { - this.ENV = e, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new qm(); + this.ENV = e, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new Pm(); } async ready() { if (this.pendingBackendInit != null) @@ -4127,8 +4135,8 @@ var ai = class { if (this.backendInstance != null) return; let e = this.getSortedBackends(); - for (let t10 = 0; t10 < e.length; t10++) { - let o = e[t10]; + for (let t6 = 0; t6 < e.length; t6++) { + let o = e[t6]; if (await this.initializeBackend(o).success) { await this.setBackend(o); return; @@ -4140,8 +4148,8 @@ var ai = class { if (this.pendingBackendInit != null) throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); if (this.backendInstance == null) { - let { name: e, asyncInit: t10 } = this.initializeBackendsAndReturnBest(); - if (t10) + let { name: e, asyncInit: t6 } = this.initializeBackendsAndReturnBest(); + if (t6) throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); this.setBackend(e); } @@ -4153,8 +4161,8 @@ var ai = class { findBackend(e) { if (!(e in this.registry)) if (e in this.registryFactory) { - let { asyncInit: t10 } = this.initializeBackend(e); - if (t10) + let { asyncInit: t6 } = this.initializeBackend(e); + if (t6) return null; } else return null; @@ -4163,43 +4171,43 @@ var ai = class { findBackendFactory(e) { return e in this.registryFactory ? this.registryFactory[e].factory : null; } - registerBackend(e, t10, o = 1) { - return e in this.registryFactory ? (Rs(`${e} backend was already registered. Reusing existing backend factory.`), false) : (this.registryFactory[e] = { factory: t10, priority: o }, true); + registerBackend(e, t6, o = 1) { + return e in this.registryFactory ? (Os(`${e} backend was already registered. Reusing existing backend factory.`), false) : (this.registryFactory[e] = { factory: t6, priority: o }, true); } async setBackend(e) { if (this.registryFactory[e] == null) throw new Error(`Backend name '${e}' not found in registry`); if (this.backendName = e, this.registry[e] == null) { this.backendInstance = null; - let { success: t10, asyncInit: o } = this.initializeBackend(e); - if (!(o ? await t10 : t10)) + let { success: t6, asyncInit: o } = this.initializeBackend(e); + if (!(o ? await t6 : t6)) return false; } - return this.backendInstance = this.registry[e], this.setupRegisteredKernels(), this.profiler = new Gm(this.backendInstance), true; + return this.backendInstance = this.registry[e], this.setupRegisteredKernels(), this.profiler = new Dm(this.backendInstance), true; } setupRegisteredKernels() { - zm(this.backendName).forEach((t10) => { - t10.setupFunc != null && t10.setupFunc(this.backendInstance); + Am(this.backendName).forEach((t6) => { + t6.setupFunc != null && t6.setupFunc(this.backendInstance); }); } disposeRegisteredKernels(e) { - zm(e).forEach((o) => { + Am(e).forEach((o) => { o.disposeFunc != null && o.disposeFunc(this.registry[e]); }); } initializeBackend(e) { - let t10 = this.registryFactory[e]; - if (t10 == null) + let t6 = this.registryFactory[e]; + if (t6 == null) throw new Error(`Cannot initialize backend ${e}, no registration found.`); try { - let o = t10.factory(); - if (o && !(o instanceof Jr) && typeof o.then == "function") { - let n = ++this.pendingBackendInitId, s = o.then((a) => n < this.pendingBackendInitId ? false : (this.registry[e] = a, this.pendingBackendInit = null, true)).catch((a) => (n < this.pendingBackendInitId || (this.pendingBackendInit = null, Rs(`Initialization of backend ${e} failed`), Rs(a.stack || a.message)), false)); + let o = t6.factory(); + if (o && !(o instanceof Zr) && typeof o.then == "function") { + let n = ++this.pendingBackendInitId, s = o.then((a) => n < this.pendingBackendInitId ? false : (this.registry[e] = a, this.pendingBackendInit = null, true)).catch((a) => (n < this.pendingBackendInitId || (this.pendingBackendInit = null, Os(`Initialization of backend ${e} failed`), Os(a.stack || a.message)), false)); return this.pendingBackendInit = s, { success: s, asyncInit: true }; } else return this.registry[e] = o, { success: true, asyncInit: false }; } catch (o) { - return Rs(`Initialization of backend ${e} failed`), Rs(o.stack || o.message), { success: false, asyncInit: false }; + return Os(`Initialization of backend ${e} failed`), Os(o.stack || o.message), { success: false, asyncInit: false }; } } removeBackend(e) { @@ -4210,181 +4218,181 @@ var ai = class { getSortedBackends() { if (Object.keys(this.registryFactory).length === 0) throw new Error("No backend found in registry."); - return Object.keys(this.registryFactory).sort((e, t10) => this.registryFactory[t10].priority - this.registryFactory[e].priority); + return Object.keys(this.registryFactory).sort((e, t6) => this.registryFactory[t6].priority - this.registryFactory[e].priority); } initializeBackendsAndReturnBest() { let e = this.getSortedBackends(); - for (let t10 = 0; t10 < e.length; t10++) { - let o = e[t10], { success: n, asyncInit: s } = this.initializeBackend(o); + for (let t6 = 0; t6 < e.length; t6++) { + let o = e[t6], { success: n, asyncInit: s } = this.initializeBackend(o); if (s || n) return { name: o, asyncInit: s }; } throw new Error("Could not initialize any backends, all backend initializations failed."); } - moveData(e, t10) { - let o = this.state.tensorInfo.get(t10), n = o.backend, s = this.readSync(t10), a = n.refCount(t10); - n.disposeData(t10, true), o.backend = e, e.move(t10, s, o.shape, o.dtype, a), this.shouldCheckForMemLeaks() && this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++; + moveData(e, t6) { + let o = this.state.tensorInfo.get(t6), n = o.backend, s = this.readSync(t6), a = n.refCount(t6); + n.disposeData(t6, true), o.backend = e, e.move(t6, s, o.shape, o.dtype, a), this.shouldCheckForMemLeaks() && this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++; } - tidy(e, t10) { + tidy(e, t6) { let o = null; - if (t10 == null) { + if (t6 == null) { if (typeof e != "function") throw new Error("Please provide a function to tidy()"); - t10 = e; + t6 = e; } else { if (typeof e != "string" && !(e instanceof String)) throw new Error("When calling with two arguments, the first argument to tidy() must be a string"); - if (typeof t10 != "function") + if (typeof t6 != "function") throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function"); o = e; } let n; - return this.scopedRun(() => this.startScope(o), () => this.endScope(n), () => (n = t10(), n instanceof Promise && console.error("Cannot return a Promise inside of tidy."), n)); + return this.scopedRun(() => this.startScope(o), () => this.endScope(n), () => (n = t6(), n instanceof Promise && console.error("Cannot return a Promise inside of tidy."), n)); } - scopedRun(e, t10, o) { + scopedRun(e, t6, o) { e(); try { let n = o(); - return t10(), n; + return t6(), n; } catch (n) { - throw t10(), n; + throw t6(), n; } } nextTensorId() { - return ai.nextTensorId++; + return xi.nextTensorId++; } nextVariableId() { - return ai.nextVariableId++; + return xi.nextVariableId++; } clone(e) { - let t10 = N.runKernel(uo, { x: e }), o = { x: e }, n = (a) => ({ x: () => { + let t6 = T.runKernel(mo, { x: e }), o = { x: e }, n = (a) => ({ x: () => { let i = "float32", p = { x: a }, u = { dtype: i }; - return N.runKernel(to, p, u); + return T.runKernel(co, p, u); } }), s = []; - return this.addTapeNode(this.state.activeScope.name, o, [t10], n, s, {}), t10; + return this.addTapeNode(this.state.activeScope.name, o, [t6], n, s, {}), t6; } - runKernel(e, t10, o) { - if (this.backendName == null && this.backend, !(el(e, this.backendName) != null)) + runKernel(e, t6, o) { + if (this.backendName == null && this.backend, !(qc(e, this.backendName) != null)) throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`); - return this.runKernelFunc({ kernelName: e, inputs: t10, attrs: o }); + return this.runKernelFunc({ kernelName: e, inputs: t6, attrs: o }); } shouldCheckForMemLeaks() { return this.ENV.getBool("IS_TEST"); } - checkKernelForMemLeak(e, t10, o) { + checkKernelForMemLeak(e, t6, o) { let n = this.backend.numDataIds(), s = 0; o.forEach((p) => { s += p.dtype === "complex64" ? 3 : 1; }); - let a = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1], i = n - t10 - s - a; + let a = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1], i = n - t6 - s - a; if (i > 0) throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`); } runKernelFunc(e) { - let t10, o = [], n = this.isTapeOn(), s = this.state.numBytes, a = this.state.numTensors; + let t6, o = [], n = this.isTapeOn(), s = this.state.numBytes, a = this.state.numTensors; this.shouldCheckForMemLeaks() && this.state.numDataMovesStack.push(0); let i; this.backendName == null && this.backend; - let p, u = Bb(e) ? e.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; - if (Bb(e)) { - let { kernelName: d, inputs: h, attrs: g } = e; + let p, u = Db(e) ? e.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; + if (Db(e)) { + let { kernelName: f, inputs: h, attrs: g } = e; this.backendName == null && this.backend; - let y = el(d, this.backendName); - $(y != null, () => `Cannot find registered kernel '${d}' for backend '${this.backendName}'`), i = () => { + let x = qc(f, this.backendName); + E(x != null, () => `Cannot find registered kernel '${f}' for backend '${this.backendName}'`), i = () => { let b = this.backend.numDataIds(); - p = y.kernelFunc({ inputs: h, attrs: g, backend: this.backend }); + p = x.kernelFunc({ inputs: h, attrs: g, backend: this.backend }); let C = Array.isArray(p) ? p : [p]; - this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(d, b, C); + this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(f, b, C); let w = C.map((k) => k.rank != null ? k : this.makeTensorFromTensorInfo(k)); if (n) { - let k = this.getTensorsForGradient(d, h, w); + let k = this.getTensorsForGradient(f, h, w); o = this.saveTensorsForBackwardMode(k); } return w; }; } else { - let { forwardFunc: d } = e, h = (g) => { - !n || (o = g.map((y) => this.keep(this.clone(y)))); + let { forwardFunc: f } = e, h = (g) => { + !n || (o = g.map((x) => this.keep(this.clone(x)))); }; i = () => { let g = this.backend.numDataIds(); - p = this.tidy(() => d(this.backend, h)); - let y = Array.isArray(p) ? p : [p]; - return this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(u, g, y), y; + p = this.tidy(() => f(this.backend, h)); + let x = Array.isArray(p) ? p : [p]; + return this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(u, g, x), x; }; } - let { inputs: c, attrs: l } = e, m = Bb(e) ? null : e.backwardsFunc, f; + let { inputs: c, attrs: l } = e, m = Db(e) ? null : e.backwardsFunc, d; return this.scopedRun(() => this.state.kernelDepth++, () => this.state.kernelDepth--, () => { - !this.ENV.getBool("DEBUG") && !this.state.profiling ? t10 = i() : (f = this.profiler.profileKernel(u, c, () => i()), this.ENV.getBool("DEBUG") && this.profiler.logKernelProfile(f), t10 = f.outputs); - }), n && this.addTapeNode(u, c, t10, m, o, l), this.state.profiling && this.state.activeProfile.kernels.push({ name: u, bytesAdded: this.state.numBytes - s, totalBytesSnapshot: this.state.numBytes, tensorsAdded: this.state.numTensors - a, totalTensorsSnapshot: this.state.numTensors, inputShapes: Object.keys(c).map((d) => c[d] != null ? c[d].shape : null), outputShapes: t10.map((d) => d.shape), kernelTimeMs: f.timeMs, extraInfo: f.extraInfo }), Array.isArray(p) ? t10 : t10[0]; + !this.ENV.getBool("DEBUG") && !this.state.profiling ? t6 = i() : (d = this.profiler.profileKernel(u, c, () => i()), this.ENV.getBool("DEBUG") && this.profiler.logKernelProfile(d), t6 = d.outputs); + }), n && this.addTapeNode(u, c, t6, m, o, l), this.state.profiling && this.state.activeProfile.kernels.push({ name: u, bytesAdded: this.state.numBytes - s, totalBytesSnapshot: this.state.numBytes, tensorsAdded: this.state.numTensors - a, totalTensorsSnapshot: this.state.numTensors, inputShapes: Object.keys(c).map((f) => c[f] != null ? c[f].shape : null), outputShapes: t6.map((f) => f.shape), kernelTimeMs: d.timeMs, extraInfo: d.extraInfo }), Array.isArray(p) ? t6 : t6[0]; } saveTensorsForBackwardMode(e) { return e.map((o) => this.keep(this.clone(o))); } - getTensorsForGradient(e, t10, o) { - let n = kb(e); + getTensorsForGradient(e, t6, o) { + let n = Cb(e); if (n != null) { let s = n.inputsToSave || [], a = n.outputsToSave || [], i; - n.saveAllInputs ? ($(Array.isArray(t10), () => "saveAllInputs is true, expected inputs to be an array."), i = Object.keys(t10).map((u) => t10[u])) : i = s.map((u) => t10[u]); + n.saveAllInputs ? (E(Array.isArray(t6), () => "saveAllInputs is true, expected inputs to be an array."), i = Object.keys(t6).map((u) => t6[u])) : i = s.map((u) => t6[u]); let p = o.filter((u, c) => a[c]); return i.concat(p); } return []; } - makeTensor(e, t10, o, n) { + makeTensor(e, t6, o, n) { if (e == null) throw new Error("Values passed to engine.makeTensor() are null"); o = o || "float32", n = n || this.backend; let s = e; - o === "string" && nn(e[0]) && (s = e.map((p) => si(p))); - let a = n.write(s, t10, o), i = new ut(t10, o, a, this.nextTensorId()); + o === "string" && Po(e[0]) && (s = e.map((p) => gi(p))); + let a = n.write(s, t6, o), i = new it(t6, o, a, this.nextTensorId()); if (this.trackTensor(i, n), o === "string") { - let p = this.state.tensorInfo.get(a), u = bb(s); + let p = this.state.tensorInfo.get(a), u = fb(s); this.state.numBytes += u - p.bytes, p.bytes = u; } return i; } - makeTensorFromDataId(e, t10, o, n) { + makeTensorFromDataId(e, t6, o, n) { o = o || "float32"; - let s = { dataId: e, shape: t10, dtype: o }; + let s = { dataId: e, shape: t6, dtype: o }; return this.makeTensorFromTensorInfo(s, n); } - makeTensorFromTensorInfo(e, t10) { - let { dataId: o, shape: n, dtype: s } = e, a = new ut(n, s, o, this.nextTensorId()); - return this.trackTensor(a, t10), a; + makeTensorFromTensorInfo(e, t6) { + let { dataId: o, shape: n, dtype: s } = e, a = new it(n, s, o, this.nextTensorId()); + return this.trackTensor(a, t6), a; } - makeVariable(e, t10 = true, o, n) { + makeVariable(e, t6 = true, o, n) { o = o || this.nextVariableId().toString(), n != null && n !== e.dtype && (e = e.cast(n)); - let s = new ba(e, t10, o, this.nextTensorId()); + let s = new va(e, t6, o, this.nextTensorId()); if (this.state.registeredVariables[s.name] != null) throw new Error(`Variable with name ${s.name} was already registered`); return this.state.registeredVariables[s.name] = s, this.incRef(s, this.backend), s; } - trackTensor(e, t10) { + trackTensor(e, t6) { this.state.numTensors++, e.dtype === "string" && this.state.numStringTensors++; let o = 0; - e.dtype !== "complex64" && e.dtype !== "string" && (o = e.size * Rm(e.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(e.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(e.dataId, { backend: t10 || this.backend, dtype: e.dtype, shape: e.shape, bytes: o })), e instanceof ba || this.track(e); + e.dtype !== "complex64" && e.dtype !== "string" && (o = e.size * Sm(e.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(e.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(e.dataId, { backend: t6 || this.backend, dtype: e.dtype, shape: e.shape, bytes: o })), e instanceof va || this.track(e); } - incRef(e, t10) { - this.trackTensor(e, t10), this.backend.incRef(e.dataId); + incRef(e, t6) { + this.trackTensor(e, t6), this.backend.incRef(e.dataId); } - removeDataId(e, t10) { - this.state.tensorInfo.has(e) && this.state.tensorInfo.get(e).backend === t10 && (this.state.tensorInfo.delete(e), this.state.numDataBuffers--); + removeDataId(e, t6) { + this.state.tensorInfo.has(e) && this.state.tensorInfo.get(e).backend === t6 && (this.state.tensorInfo.delete(e), this.state.numDataBuffers--); } disposeTensor(e) { if (!this.state.tensorInfo.has(e.dataId)) return; - let t10 = this.state.tensorInfo.get(e.dataId); - if (this.state.numTensors--, e.dtype === "string" && (this.state.numStringTensors--, this.state.numBytes -= t10.bytes), e.dtype !== "complex64" && e.dtype !== "string") { - let o = e.size * Rm(e.dtype); + let t6 = this.state.tensorInfo.get(e.dataId); + if (this.state.numTensors--, e.dtype === "string" && (this.state.numStringTensors--, this.state.numBytes -= t6.bytes), e.dtype !== "complex64" && e.dtype !== "string") { + let o = e.size * Sm(e.dtype); this.state.numBytes -= o; } - t10.backend.disposeData(e.dataId) && this.removeDataId(e.dataId, t10.backend); + t6.backend.disposeData(e.dataId) && this.removeDataId(e.dataId, t6.backend); } disposeVariables() { for (let e in this.state.registeredVariables) { - let t10 = this.state.registeredVariables[e]; - this.disposeVariable(t10); + let t6 = this.state.registeredVariables[e]; + this.disposeVariable(t6); } } disposeVariable(e) { @@ -4396,8 +4404,8 @@ var ai = class { } async profile(e) { this.state.profiling = true; - let t10 = this.state.numBytes, o = this.state.numTensors; - this.state.activeProfile.kernels = [], this.state.activeProfile.result = await e(), this.state.profiling = false, this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map((n) => n.totalBytesSnapshot)), this.state.activeProfile.newBytes = this.state.numBytes - t10, this.state.activeProfile.newTensors = this.state.numTensors - o; + let t6 = this.state.numBytes, o = this.state.numTensors; + this.state.activeProfile.kernels = [], this.state.activeProfile.result = await e(), this.state.profiling = false, this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map((n) => n.totalBytesSnapshot)), this.state.activeProfile.newBytes = this.state.numBytes - t6, this.state.activeProfile.newTensors = this.state.numTensors - o; for (let n of this.state.activeProfile.kernels) n.kernelTimeMs = await n.kernelTimeMs, n.extraInfo = await n.extraInfo; return this.state.activeProfile; @@ -4405,12 +4413,12 @@ var ai = class { isTapeOn() { return this.state.gradientDepth > 0 && this.state.kernelDepth === 0; } - addTapeNode(e, t10, o, n, s, a) { - let i = { id: this.state.nextTapeNodeId++, kernelName: e, inputs: t10, outputs: o, saved: s }, p = kb(e); + addTapeNode(e, t6, o, n, s, a) { + let i = { id: this.state.nextTapeNodeId++, kernelName: e, inputs: t6, outputs: o, saved: s }, p = Cb(e); p != null && (n = p.gradFunc), n != null && (i.gradient = (u) => (u = u.map((c, l) => { if (c == null) { - let m = o[l], f = ap(m.size, m.dtype); - return this.makeTensor(f, m.shape, m.dtype); + let m = o[l], d = ap(m.size, m.dtype); + return this.makeTensor(d, m.shape, m.dtype); } return c; }), n(u.length > 1 ? u : u[0], s, a))), this.state.activeTape.push(i); @@ -4425,32 +4433,32 @@ var ai = class { this.state.gradientDepth--; } startScope(e) { - let t10 = { track: [], name: "unnamed scope", id: this.state.nextScopeId++ }; - e && (t10.name = e), this.state.scopeStack.push(t10), this.state.activeScope = t10; + let t6 = { track: [], name: "unnamed scope", id: this.state.nextScopeId++ }; + e && (t6.name = e), this.state.scopeStack.push(t6), this.state.activeScope = t6; } endScope(e) { - let t10 = sl(e), o = new Set(t10.map((s) => s.id)); + let t6 = Qc(e), o = new Set(t6.map((s) => s.id)); for (let s = 0; s < this.state.activeScope.track.length; s++) { let a = this.state.activeScope.track[s]; !a.kept && !o.has(a.id) && a.dispose(); } let n = this.state.scopeStack.pop(); - this.state.activeScope = this.state.scopeStack.length === 0 ? null : this.state.scopeStack[this.state.scopeStack.length - 1], t10.forEach((s) => { + this.state.activeScope = this.state.scopeStack.length === 0 ? null : this.state.scopeStack[this.state.scopeStack.length - 1], t6.forEach((s) => { !s.kept && s.scopeId === n.id && this.track(s); }); } - gradients(e, t10, o, n = false) { - if ($(t10.length > 0, () => "gradients() received an empty list of xs."), o != null && o.dtype !== "float32") + gradients(e, t6, o, n = false) { + if (E(t6.length > 0, () => "gradients() received an empty list of xs."), o != null && o.dtype !== "float32") throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`); let s = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy("forward", e)); - $(s instanceof ut, () => "The result y returned by f() must be a tensor."); - let a = A0(this.state.activeTape, t10, s); - if (!n && a.length === 0 && t10.length > 0) + E(s instanceof it, () => "The result y returned by f() must be a tensor."); + let a = av(this.state.activeTape, t6, s); + if (!n && a.length === 0 && t6.length > 0) throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y."); return this.tidy("backward", () => { let i = {}; - i[s.id] = o == null ? Vz(s.shape) : o, F0(i, a, (u) => this.tidy(u), zz); - let p = t10.map((u) => i[u.id]); + i[s.id] = o == null ? iz(s.shape) : o, iv(i, a, (u) => this.tidy(u), uz); + let p = t6.map((u) => i[u.id]); return this.state.gradientDepth === 0 && (this.state.activeTape.forEach((u) => { for (let c of u.saved) c.dispose(); @@ -4458,18 +4466,18 @@ var ai = class { }); } customGrad(e) { - return $(fs(e), () => "The f passed in customGrad(f) must be a function."), (...t10) => { - $(t10.every((i) => i instanceof ut), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); + return E(fs(e), () => "The f passed in customGrad(f) must be a function."), (...t6) => { + E(t6.every((i) => i instanceof it), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); let o, n = {}; - t10.forEach((i, p) => { + t6.forEach((i, p) => { n[p] = i; }); - let s = (i, p) => (o = e(...t10, p), $(o.value instanceof ut, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), $(fs(o.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."), o.value), a = (i, p) => { + let s = (i, p) => (o = e(...t6, p), E(o.value instanceof it, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), E(fs(o.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."), o.value), a = (i, p) => { let u = o.gradFunc(i, p), c = Array.isArray(u) ? u : [u]; - $(c.length === t10.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."), $(c.every((m) => m instanceof ut), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."); + E(c.length === t6.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."), E(c.every((m) => m instanceof it), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."); let l = {}; - return c.forEach((m, f) => { - l[f] = () => m; + return c.forEach((m, d) => { + l[d] = () => m; }), l; }; return this.runKernelFunc({ forwardFunc: s, backwardsFunc: a, inputs: n }); @@ -4481,12 +4489,12 @@ var ai = class { read(e) { return this.state.tensorInfo.get(e).backend.read(e); } - readToGPU(e, t10) { - return this.state.tensorInfo.get(e).backend.readToGPU(e, t10); + readToGPU(e, t6) { + return this.state.tensorInfo.get(e).backend.readToGPU(e, t6); } async time(e) { - let t10 = ou(), o = await this.backend.time(e); - return o.wallMs = ou() - t10, o; + let t6 = ou(), o = await this.backend.time(e); + return o.wallMs = ou() - t6, o; } track(e) { return this.state.activeScope != null && (e.scopeId = this.state.activeScope.id, this.state.activeScope.track.push(e)), e; @@ -4495,77 +4503,76 @@ var ai = class { return this.state.registeredVariables; } reset() { - this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new qm(); + this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new Pm(); for (let e in this.registry) this.disposeRegisteredKernels(e), this.registry[e].dispose(), delete this.registry[e]; this.backendName = null, this.backendInstance = null, this.pendingBackendInit = null; } }; -ai.nextTensorId = 0; -ai.nextVariableId = 0; -function Vz(r) { - let e = jc(Ve(r), "float32"); - return N.makeTensor(e, r, "float32"); +xi.nextTensorId = 0; +xi.nextVariableId = 0; +function iz(r) { + let e = zc(ze(r), "float32"); + return T.makeTensor(e, r, "float32"); } -function Vb() { - let r = wb(); +function Ob() { + let r = xb(); if (r._tfengine == null) { - let e = new Qc(r); - r._tfengine = new ai(e); + let e = new Uc(r); + r._tfengine = new xi(e); } - return h0(r._tfengine.ENV), M0(() => r._tfengine), r._tfengine; + return UI(r._tfengine.ENV), lv(() => r._tfengine), r._tfengine; } -var N = Vb(); -function zz(r, e) { - let t10 = { a: r, b: e }; - return N.runKernel(_r, t10); +var T = Ob(); +function uz(r, e) { + let t6 = { a: r, b: e }; + return T.runKernel(eo, t6); } -var ii = {}; -Be(ii, { isBrowser: () => Wb, isMobile: () => Gz, mockIsMobile: () => Uz }); -function Wz() { +var yi = {}; +Ue(yi, { isBrowser: () => Mb, isMobile: () => lz, mockIsMobile: () => cz }); +function pz() { return typeof navigator != "undefined" && navigator != null; } -var zb; -function Uz(r) { - zb = r; +var Pb; +function cz(r) { + Pb = r; } -function Gz(r) { - if (zb !== void 0) - return zb; - if (r || Wz()) { +function lz(r) { + if (Pb !== void 0) + return Pb; + if (r || pz()) { if (r || (r = navigator), r.product === "ReactNative") return true; let e = r.userAgent || r.vendor || (typeof window != "undefined" ? window.opera : ""); if (!e) { - let t10 = r; - return t10.userAgentData && t10.userAgentData.mobile; + let t6 = r; + return t6.userAgentData && t6.userAgentData.mobile; } return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0, 4)); } return false; } -function Wb() { +function Mb() { return typeof window != "undefined" && window.document != null || typeof WorkerGlobalScope != "undefined"; } -var Vr = P(); -Vr.registerFlag("DEBUG", () => false, (r) => { +var oo = O(); +oo.registerFlag("DEBUG", () => false, (r) => { r && console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance."); }); -Vr.registerFlag("IS_BROWSER", () => Wb()); -Vr.registerFlag("IS_NODE", () => typeof process != "undefined" && typeof process.versions != "undefined" && typeof process.versions.node != "undefined"); -Vr.registerFlag("IS_CHROME", () => typeof navigator != "undefined" && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)); -Vr.registerFlag("PROD", () => false); -Vr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => Vr.getBool("DEBUG")); -Vr.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); -Vr.registerFlag("IS_TEST", () => false); -Vr.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => true); -Vr.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); -Vr.registerFlag("ENGINE_COMPILE_ONLY", () => false); -Vr.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); -Vr.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); +oo.registerFlag("IS_BROWSER", () => Mb()); +oo.registerFlag("IS_NODE", () => typeof process != "undefined" && typeof process.versions != "undefined" && typeof process.versions.node != "undefined"); +oo.registerFlag("IS_CHROME", () => typeof navigator != "undefined" && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)); +oo.registerFlag("PROD", () => false); +oo.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => oo.getBool("DEBUG")); +oo.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); +oo.registerFlag("IS_TEST", () => false); +oo.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => true); +oo.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); +oo.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); +oo.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); function or(r, e) { - let t10 = r; - if (Ut(r)) + let t6 = r; + if (Wt(r)) return e === "string" ? [] : [r.length]; if (typeof r == "object" && "texture" in r) { let n = r.channels || "RGBA"; @@ -4574,100 +4581,100 @@ function or(r, e) { if (!Array.isArray(r)) return []; let o = []; - for (; Array.isArray(t10) || Ut(t10) && e !== "string"; ) - o.push(t10.length), t10 = t10[0]; - return Array.isArray(r) && P().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && U0(r, o, []), o; + for (; Array.isArray(t6) || Wt(t6) && e !== "string"; ) + o.push(t6.length), t6 = t6[0]; + return Array.isArray(r) && O().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && xv(r, o, []), o; } -function U0(r, e, t10) { - if (t10 = t10 || [], !Array.isArray(r) && !Ut(r)) { - $(e.length === 0, () => `Element arr[${t10.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`); +function xv(r, e, t6) { + if (t6 = t6 || [], !Array.isArray(r) && !Wt(r)) { + E(e.length === 0, () => `Element arr[${t6.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`); return; } - $(e.length > 0, () => `Element arr[${t10.join("][")}] should be a primitive, but is an array of ${r.length} elements`), $(r.length === e[0], () => `Element arr[${t10.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`); + E(e.length > 0, () => `Element arr[${t6.join("][")}] should be a primitive, but is an array of ${r.length} elements`), E(r.length === e[0], () => `Element arr[${t6.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`); let o = e.slice(1); for (let n = 0; n < r.length; ++n) - U0(r[n], o, t10.concat(n)); + xv(r[n], o, t6.concat(n)); } -function W0(r, e, t10, o) { +function gv(r, e, t6, o) { if (r !== "string_or_numeric") { if (r == null) throw new Error("Expected dtype cannot be null."); if (r !== "numeric" && r !== e || r === "numeric" && e === "string") - throw new Error(`Argument '${t10}' passed to '${o}' must be ${r} tensor, but got ${e} tensor`); + throw new Error(`Argument '${t6}' passed to '${o}' must be ${r} tensor, but got ${e} tensor`); } } -function v(r, e, t10, o = "numeric") { - if (r instanceof ut) - return W0(o, r.dtype, e, t10), r; +function v(r, e, t6, o = "numeric") { + if (r instanceof it) + return gv(o, r.dtype, e, t6), r; let n = np(r); - if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), W0(o, n, e, t10), r == null || !Ut(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") { + if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), gv(o, n, e, t6), r == null || !Wt(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") { let p = r == null ? "null" : r.constructor.name; - throw new Error(`Argument '${e}' passed to '${t10}' must be a Tensor or TensorLike, but got '${p}'`); + throw new Error(`Argument '${e}' passed to '${t6}' must be a Tensor or TensorLike, but got '${p}'`); } let s = or(r, n); - !Ut(r) && !Array.isArray(r) && (r = [r]); - let i = n !== "string" ? Pp(r, n) : on(r, [], true); - return N.makeTensor(i, s, n); + !Wt(r) && !Array.isArray(r) && (r = [r]); + let i = n !== "string" ? $p(r, n) : Oo(r, [], true); + return T.makeTensor(i, s, n); } -function Ia(r, e, t10, o = "numeric") { +function Na(r, e, t6, o = "numeric") { if (!Array.isArray(r)) - throw new Error(`Argument ${e} passed to ${t10} must be a \`Tensor[]\` or \`TensorLike[]\``); - return r.map((s, a) => v(s, `${e}[${a}]`, t10, o)); + throw new Error(`Argument ${e} passed to ${t6} must be a \`Tensor[]\` or \`TensorLike[]\``); + return r.map((s, a) => v(s, `${e}[${a}]`, t6, o)); } -var Ub = "__op"; -function T(r) { +var Lb = "__op"; +function N(r) { let e = Object.keys(r); if (e.length !== 1) throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`); - let t10 = e[0], o = r[t10]; - t10.endsWith("_") && (t10 = t10.substring(0, t10.length - 1)), t10 = t10 + Ub; + let t6 = e[0], o = r[t6]; + t6.endsWith("_") && (t6 = t6.substring(0, t6.length - 1)), t6 = t6 + Lb; let n = (...s) => { - N.startScope(t10); + T.startScope(t6); try { let a = o(...s); - return Yc(a) && console.error("Cannot return a Promise inside of tidy."), N.endScope(a), a; + return Wc(a) && console.error("Cannot return a Promise inside of tidy."), T.endScope(a), a; } catch (a) { - throw N.endScope(null), a; + throw T.endScope(null), a; } }; - return Object.defineProperty(n, "name", { value: t10, configurable: true }), n; + return Object.defineProperty(n, "name", { value: t6, configurable: true }), n; } -function Hz(r, e) { - let t10 = v(r, "real", "complex"), o = v(e, "imag", "complex"); - ht(t10.shape, o.shape, `real and imag shapes, ${t10.shape} and ${o.shape}, must match in call to tf.complex().`); - let n = { real: t10, imag: o }; - return N.runKernel(aa, n); +function mz(r, e) { + let t6 = v(r, "real", "complex"), o = v(e, "imag", "complex"); + ht(t6.shape, o.shape, `real and imag shapes, ${t6.shape} and ${o.shape}, must match in call to tf.complex().`); + let n = { real: t6, imag: o }; + return T.runKernel(ei, n); } -var Er = T({ complex_: Hz }); -function xr(r, e, t10, o) { +var Tr = N({ complex_: mz }); +function xr(r, e, t6, o) { if (o == null && (o = np(r)), o === "complex64") throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag)."); if (typeof r == "object" && "texture" in r) { if (o !== "float32" && o !== "int32") throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${o}.`); - return r.channels = r.channels || "RGBA", N.backend.createTensorFromTexture(r, e || t10, o); + return r.channels = r.channels || "RGBA", T.backend.createTensorFromTexture(r, e || t6, o); } - if (!Ut(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") + if (!Wt(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray"); if (e != null) { - Xc(e); - let n = Ve(e), s = Ve(t10); - $(n === s, () => `Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`); - for (let a = 0; a < t10.length; ++a) { - let i = t10[a], p = a === t10.length - 1 ? i !== Ve(e.slice(a)) : true; - $(t10[a] === e[a] || !p, () => `Error creating a new Tensor. Inferred shape (${t10}) does not match the provided shape (${e}). `); + yt(e); + let n = ze(e), s = ze(t6); + E(n === s, () => `Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`); + for (let a = 0; a < t6.length; ++a) { + let i = t6[a], p = a === t6.length - 1 ? i !== ze(e.slice(a)) : true; + E(t6[a] === e[a] || !p, () => `Error creating a new Tensor. Inferred shape (${t6}) does not match the provided shape (${e}). `); } } - return !Ut(r) && !Array.isArray(r) && (r = [r]), e = e || t10, r = o !== "string" ? Pp(r, o) : on(r, [], true), N.makeTensor(r, e, o); + return !Wt(r) && !Array.isArray(r) && (r = [r]), e = e || t6, r = o !== "string" ? $p(r, o) : Oo(r, [], true), T.makeTensor(r, e, o); } -function nr(r, e, t10) { - let o = or(r, t10); - return xr(r, e, o, t10); +function nr(r, e, t6) { + let o = or(r, t6); + return xr(r, e, o, t6); } -var al = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; -var Km = 4; -async function H0(r, e) { - let t10 = [], o = [], n = Array.isArray(r) ? r.map((a) => a.name) : Object.keys(r); +var Zc = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; +var Mm = 4; +async function bv(r, e) { + let t6 = [], o = [], n = Array.isArray(r) ? r.map((a) => a.name) : Object.keys(r); for (let a = 0; a < n.length; ++a) { let i = n[a], p = Array.isArray(r) ? r[a].tensor : r[i]; if (p.dtype !== "float32" && p.dtype !== "int32" && p.dtype !== "bool" && p.dtype !== "string" && p.dtype !== "complex64") @@ -4675,25 +4682,25 @@ async function H0(r, e) { let u = { name: i, shape: p.shape, dtype: p.dtype }; if (p.dtype === "string") { let c = new Promise(async (l) => { - let m = await p.bytes(), f = m.reduce((g, y) => g + y.length, 0) + Km * m.length, d = new Uint8Array(f), h = 0; + let m = await p.bytes(), d = m.reduce((g, x) => g + x.length, 0) + Mm * m.length, f = new Uint8Array(d), h = 0; for (let g = 0; g < m.length; g++) { - let y = m[g], b = new Uint8Array(new Uint32Array([y.length]).buffer); - d.set(b, h), h += Km, d.set(y, h), h += y.length; + let x = m[g], b = new Uint8Array(new Uint32Array([x.length]).buffer); + f.set(b, h), h += Mm, f.set(x, h), h += x.length; } - l(d); + l(f); }); o.push(c); } else o.push(p.data()); - e != null && (u.group = e), t10.push(u); + e != null && (u.group = e), t6.push(u); } let s = await Promise.all(o); - return { data: qz(s), specs: t10 }; + return { data: dz(s), specs: t6 }; } -function jm(r, e) { - let t10 = {}, o, n = 0; +function Lm(r, e) { + let t6 = {}, o, n = 0; for (let s of e) { - let a = s.name, i = s.dtype, p = s.shape, u = Ve(p), c; + let a = s.name, i = s.dtype, p = s.shape, u = ze(p), c; if ("quantization" in s) { let l = s.quantization; if (l.dtype === "uint8" || l.dtype === "uint16") { @@ -4704,40 +4711,40 @@ function jm(r, e) { throw new Error(`Weight ${s.name} is quantized with ${l.dtype} which only supports weights of type float32 not ${i}.`); } else throw new Error(`Weight ${s.name} has unknown quantization dtype ${l.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); - let m = al[l.dtype], f = r.slice(n, n + u * m), d = l.dtype === "uint8" ? new Uint8Array(f) : new Uint16Array(f); + let m = Zc[l.dtype], d = r.slice(n, n + u * m), f = l.dtype === "uint8" ? new Uint8Array(d) : new Uint16Array(d); if (i === "float32") if (l.dtype === "uint8" || l.dtype === "uint16") { - c = new Float32Array(d.length); - for (let h = 0; h < d.length; h++) { - let g = d[h]; + c = new Float32Array(f.length); + for (let h = 0; h < f.length; h++) { + let g = f[h]; c[h] = g * l.scale + l.min; } } else if (l.dtype === "float16") - o === void 0 && (o = Yz()), c = o(d); + o === void 0 && (o = xz()), c = o(f); else throw new Error(`Unsupported quantization type ${l.dtype} for weight type float32.`); else if (i === "int32") { if (l.dtype !== "uint8" && l.dtype !== "uint16") throw new Error(`Unsupported quantization type ${l.dtype} for weight type int32.`); - c = new Int32Array(d.length); - for (let h = 0; h < d.length; h++) { - let g = d[h]; + c = new Int32Array(f.length); + for (let h = 0; h < f.length; h++) { + let g = f[h]; c[h] = Math.round(g * l.scale + l.min); } } else throw new Error(`Unsupported dtype in weight '${a}': ${i}`); n += u * m; } else if (i === "string") { - let l = Ve(s.shape); + let l = ze(s.shape); c = []; for (let m = 0; m < l; m++) { - let f = new Uint32Array(r.slice(n, n + Km))[0]; - n += Km; - let d = new Uint8Array(r.slice(n, n + f)); - c.push(d), n += f; + let d = new Uint32Array(r.slice(n, n + Mm))[0]; + n += Mm; + let f = new Uint8Array(r.slice(n, n + d)); + c.push(f), n += d; } } else { - let l = al[i], m = r.slice(n, n + u * l); + let l = Zc[i], m = r.slice(n, n + u * l); if (i === "float32") c = new Float32Array(m); else if (i === "int32") @@ -4746,118 +4753,118 @@ function jm(r, e) { c = new Uint8Array(m); else if (i === "complex64") { c = new Float32Array(m); - let f = new Float32Array(c.length / 2), d = new Float32Array(c.length / 2); - for (let y = 0; y < f.length; y++) - f[y] = c[y * 2], d[y] = c[y * 2 + 1]; - let h = nr(f, p, "float32"), g = nr(d, p, "float32"); - t10[a] = Er(h, g), h.dispose(), g.dispose(); + let d = new Float32Array(c.length / 2), f = new Float32Array(c.length / 2); + for (let x = 0; x < d.length; x++) + d[x] = c[x * 2], f[x] = c[x * 2 + 1]; + let h = nr(d, p, "float32"), g = nr(f, p, "float32"); + t6[a] = Tr(h, g), h.dispose(), g.dispose(); } else throw new Error(`Unsupported dtype in weight '${a}': ${i}`); n += u * l; } - i !== "complex64" && (t10[a] = nr(c, p, i)); + i !== "complex64" && (t6[a] = nr(c, p, i)); } - return t10; + return t6; } -function qz(r) { +function dz(r) { if (r === null) throw new Error(`Invalid input value: ${JSON.stringify(r)}`); - let e = 0, t10 = []; + let e = 0, t6 = []; r.forEach((s) => { - if (e += s.byteLength, t10.push(s.byteLength === s.buffer.byteLength ? s : new s.constructor(s)), !(s instanceof Float32Array || s instanceof Int32Array || s instanceof Uint8Array)) + if (e += s.byteLength, t6.push(s.byteLength === s.buffer.byteLength ? s : new s.constructor(s)), !(s instanceof Float32Array || s instanceof Int32Array || s instanceof Uint8Array)) throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`); }); let o = new Uint8Array(e), n = 0; - return t10.forEach((s) => { + return t6.forEach((s) => { o.set(new Uint8Array(s.buffer), n), n += s.byteLength; }), o.buffer; } -var Gb = typeof Buffer != "undefined" && (typeof Blob == "undefined" || typeof atob == "undefined" || typeof btoa == "undefined"); -function G0(r) { - return Gb ? Buffer.byteLength(r) : new Blob([r]).size; +var Bb = typeof Buffer != "undefined" && (typeof Blob == "undefined" || typeof atob == "undefined" || typeof btoa == "undefined"); +function yv(r) { + return Bb ? Buffer.byteLength(r) : new Blob([r]).size; } -function q0(r) { - if (Gb) +function Cv(r) { + if (Bb) return Buffer.from(r).toString("base64"); - let e = new Uint8Array(r), t10 = ""; + let e = new Uint8Array(r), t6 = ""; for (let o = 0, n = e.length; o < n; o++) - t10 += String.fromCharCode(e[o]); - return btoa(t10); + t6 += String.fromCharCode(e[o]); + return btoa(t6); } -function K0(r) { - if (Gb) { +function Sv(r) { + if (Bb) { let o = Buffer.from(r, "base64"); return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength); } - let e = atob(r), t10 = new Uint8Array(e.length); + let e = atob(r), t6 = new Uint8Array(e.length); for (let o = 0; o < e.length; ++o) - t10.set([e.charCodeAt(o)], o); - return t10.buffer; + t6.set([e.charCodeAt(o)], o); + return t6.buffer; } -function Lp(r) { +function Fp(r) { if (r.length === 1) return r[0]; let e = 0; r.forEach((n) => { e += n.byteLength; }); - let t10 = new Uint8Array(e), o = 0; + let t6 = new Uint8Array(e), o = 0; return r.forEach((n) => { - t10.set(new Uint8Array(n), o), o += n.byteLength; - }), t10.buffer; + t6.set(new Uint8Array(n), o), o += n.byteLength; + }), t6.buffer; } -function Hb(r) { +function Vb(r) { let e = "/"; for (r = r.trim(); r.endsWith(e); ) r = r.slice(0, r.length - 1); - let t10 = r.split(e); - return t10[t10.length - 1]; + let t6 = r.split(e); + return t6[t6.length - 1]; } -function Xm(r, e) { - let t10 = { modelTopology: r.modelTopology, format: r.format, generatedBy: r.generatedBy, convertedBy: r.convertedBy, weightsManifest: e }; - return r.signature != null && (t10.signature = r.signature), r.userDefinedMetadata != null && (t10.userDefinedMetadata = r.userDefinedMetadata), r.modelInitializer != null && (t10.modelInitializer = r.modelInitializer), r.initializerSignature != null && (t10.initializerSignature = r.initializerSignature), r.trainingConfig != null && (t10.trainingConfig = r.trainingConfig), t10; +function Bm(r, e) { + let t6 = { modelTopology: r.modelTopology, format: r.format, generatedBy: r.generatedBy, convertedBy: r.convertedBy, weightsManifest: e }; + return r.signature != null && (t6.signature = r.signature), r.userDefinedMetadata != null && (t6.userDefinedMetadata = r.userDefinedMetadata), r.modelInitializer != null && (t6.modelInitializer = r.modelInitializer), r.initializerSignature != null && (t6.initializerSignature = r.initializerSignature), r.trainingConfig != null && (t6.trainingConfig = r.trainingConfig), t6; } -function qb(r, e, t10) { +function zb(r, e, t6) { let o = { modelTopology: r.modelTopology, format: r.format, generatedBy: r.generatedBy, convertedBy: r.convertedBy }; if (r.trainingConfig != null && (o.trainingConfig = r.trainingConfig), r.weightsManifest != null) { if (!e) throw new Error("modelJSON has weightsManifest but weightSpecs is null"); - if (!t10) + if (!t6) throw new Error("modelJSON has weightsManifest but weightData is null"); - o.weightSpecs = e, o.weightData = t10; + o.weightSpecs = e, o.weightData = t6; } return r.signature != null && (o.signature = r.signature), r.userDefinedMetadata != null && (o.userDefinedMetadata = r.userDefinedMetadata), r.modelInitializer != null && (o.modelInitializer = r.modelInitializer), r.initializerSignature != null && (o.initializerSignature = r.initializerSignature), o; } -async function Bp(r, e) { - let t10, o; - return r.weightsManifest != null && ([t10, o] = await e(r.weightsManifest)), qb(r, t10, o); +async function Dp(r, e) { + let t6, o; + return r.weightsManifest != null && ([t6, o] = await e(r.weightsManifest)), zb(r, t6, o); } -function As(r) { +function Ps(r) { if (r.modelTopology instanceof ArrayBuffer) throw new Error("Expected JSON model topology, received ArrayBuffer."); - return { dateSaved: new Date(), modelTopologyType: "JSON", modelTopologyBytes: r.modelTopology == null ? 0 : G0(JSON.stringify(r.modelTopology)), weightSpecsBytes: r.weightSpecs == null ? 0 : G0(JSON.stringify(r.weightSpecs)), weightDataBytes: r.weightData == null ? 0 : r.weightData.byteLength }; + return { dateSaved: new Date(), modelTopologyType: "JSON", modelTopologyBytes: r.modelTopology == null ? 0 : yv(JSON.stringify(r.modelTopology)), weightSpecsBytes: r.weightSpecs == null ? 0 : yv(JSON.stringify(r.weightSpecs)), weightDataBytes: r.weightData == null ? 0 : r.weightData.byteLength }; } -function Ym(r) { +function Vm(r) { let e = []; - for (let t10 of r) - e.push(...t10.weights); + for (let t6 of r) + e.push(...t6.weights); return e; } -function Kz() { - let r = (t10) => { - let o = t10 << 13, n = 0; +function fz() { + let r = (t6) => { + let o = t6 << 13, n = 0; for (; (o & 8388608) === 0; ) n -= 8388608, o <<= 1; return o &= -8388609, n += 947912704, o | n; }, e = new Uint32Array(2048); e[0] = 0; - for (let t10 = 1; t10 < 1024; t10++) - e[t10] = r(t10); - for (let t10 = 1024; t10 < 2048; t10++) - e[t10] = 939524096 + (t10 - 1024 << 13); + for (let t6 = 1; t6 < 1024; t6++) + e[t6] = r(t6); + for (let t6 = 1024; t6 < 2048; t6++) + e[t6] = 939524096 + (t6 - 1024 << 13); return e; } -function jz() { +function hz() { let r = new Uint32Array(64); r[0] = 0, r[31] = 1199570944, r[32] = 2147483648, r[63] = 3347054592; for (let e = 1; e < 31; e++) @@ -4866,73 +4873,73 @@ function jz() { r[e] = 2147483648 + (e - 32 << 23); return r; } -function Xz() { +function gz() { let r = new Uint32Array(64); for (let e = 0; e < 64; e++) r[e] = 1024; return r[0] = r[32] = 0, r; } -function Yz() { - let r = Kz(), e = jz(), t10 = Xz(); +function xz() { + let r = fz(), e = hz(), t6 = gz(); return (o) => { let n = new ArrayBuffer(4 * o.length), s = new Uint32Array(n); for (let a = 0; a < o.length; a++) { - let i = o[a], p = r[t10[i >> 10] + (i & 1023)] + e[i >> 10]; + let i = o[a], p = r[t6[i >> 10] + (i & 1023)] + e[i >> 10]; s[a] = p; } return new Float32Array(n); }; } -var mt = class { +var lt = class { constructor() { this.saveRouters = [], this.loadRouters = []; } static getInstance() { - return mt.instance == null && (mt.instance = new mt()), mt.instance; + return lt.instance == null && (lt.instance = new lt()), lt.instance; } static registerSaveRouter(e) { - mt.getInstance().saveRouters.push(e); + lt.getInstance().saveRouters.push(e); } static registerLoadRouter(e) { - mt.getInstance().loadRouters.push(e); + lt.getInstance().loadRouters.push(e); } static getSaveHandlers(e) { - return mt.getHandlers(e, "save"); + return lt.getHandlers(e, "save"); } - static getLoadHandlers(e, t10) { - return mt.getHandlers(e, "load", t10); + static getLoadHandlers(e, t6) { + return lt.getHandlers(e, "load", t6); } - static getHandlers(e, t10, o) { + static getHandlers(e, t6, o) { let n = []; - return (t10 === "load" ? mt.getInstance().loadRouters : mt.getInstance().saveRouters).forEach((a) => { + return (t6 === "load" ? lt.getInstance().loadRouters : lt.getInstance().saveRouters).forEach((a) => { let i = a(e, o); i !== null && n.push(i); }), n; } }; -var j0 = (r) => mt.registerSaveRouter(r); -var X0 = (r) => mt.registerLoadRouter(r); -var Y0 = (r) => mt.getSaveHandlers(r); -var Q0 = (r, e) => mt.getLoadHandlers(r, e); -var Kb = "tensorflowjs"; -var jb = 1; +var wv = (r) => lt.registerSaveRouter(r); +var Iv = (r) => lt.registerLoadRouter(r); +var vv = (r) => lt.getSaveHandlers(r); +var kv = (r, e) => lt.getLoadHandlers(r, e); +var Wb = "tensorflowjs"; +var Ub = 1; var nu = "models_store"; -var ui = "model_info_store"; -function Z0() { - if (!P().getBool("IS_BROWSER")) +var bi = "model_info_store"; +function Nv() { + if (!O().getBool("IS_BROWSER")) throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); let r = typeof window == "undefined" ? self : window, e = r.indexedDB || r.mozIndexedDB || r.webkitIndexedDB || r.msIndexedDB || r.shimIndexedDB; if (e == null) throw new Error("The current browser does not appear to support IndexedDB."); return e; } -function Xb(r) { +function Gb(r) { let e = r.result; - e.createObjectStore(nu, { keyPath: "modelPath" }), e.createObjectStore(ui, { keyPath: "modelPath" }); + e.createObjectStore(nu, { keyPath: "modelPath" }), e.createObjectStore(bi, { keyPath: "modelPath" }); } -var Fs = class { +var Ms = class { constructor(e) { - if (this.indexedDB = Z0(), e == null || !e) + if (this.indexedDB = Nv(), e == null || !e) throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); this.modelPath = e; } @@ -4944,12 +4951,12 @@ var Fs = class { async load() { return this.databaseAction(this.modelPath); } - databaseAction(e, t10) { + databaseAction(e, t6) { return new Promise((o, n) => { - let s = this.indexedDB.open(Kb, jb); - s.onupgradeneeded = () => Xb(s), s.onsuccess = () => { + let s = this.indexedDB.open(Wb, Ub); + s.onupgradeneeded = () => Gb(s), s.onsuccess = () => { let a = s.result; - if (t10 == null) { + if (t6 == null) { let i = a.transaction(nu, "readonly"), u = i.objectStore(nu).get(this.modelPath); u.onsuccess = () => { if (u.result == null) @@ -4957,14 +4964,14 @@ var Fs = class { o(u.result.modelArtifacts); }, u.onerror = (c) => (a.close(), n(u.error)), i.oncomplete = () => a.close(); } else { - let i = As(t10), p = a.transaction(ui, "readwrite"), u = p.objectStore(ui), c = u.put({ modelPath: this.modelPath, modelArtifactsInfo: i }), l; + let i = Ps(t6), p = a.transaction(bi, "readwrite"), u = p.objectStore(bi), c = u.put({ modelPath: this.modelPath, modelArtifactsInfo: i }), l; c.onsuccess = () => { l = a.transaction(nu, "readwrite"); - let f = l.objectStore(nu).put({ modelPath: this.modelPath, modelArtifacts: t10, modelArtifactsInfo: i }); - f.onsuccess = () => o({ modelArtifactsInfo: i }), f.onerror = (d) => { - u = p.objectStore(ui); + let d = l.objectStore(nu).put({ modelPath: this.modelPath, modelArtifacts: t6, modelArtifactsInfo: i }); + d.onsuccess = () => o({ modelArtifactsInfo: i }), d.onerror = (f) => { + u = p.objectStore(bi); let h = u.delete(this.modelPath); - h.onsuccess = () => (a.close(), n(f.error)), h.onerror = (g) => (a.close(), n(f.error)); + h.onsuccess = () => (a.close(), n(d.error)), h.onerror = (g) => (a.close(), n(d.error)); }; }, c.onerror = (m) => (a.close(), n(c.error)), p.oncomplete = () => { l == null ? a.close() : l.oncomplete = () => a.close(); @@ -4974,47 +4981,47 @@ var Fs = class { }); } }; -Fs.URL_SCHEME = "indexeddb://"; -var J0 = (r) => P().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Fs.URL_SCHEME) ? Qz(r.slice(Fs.URL_SCHEME.length)) : null; -mt.registerSaveRouter(J0); -mt.registerLoadRouter(J0); -function Qz(r) { - return new Fs(r); +Ms.URL_SCHEME = "indexeddb://"; +var Tv = (r) => O().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Ms.URL_SCHEME) ? yz(r.slice(Ms.URL_SCHEME.length)) : null; +lt.registerSaveRouter(Tv); +lt.registerLoadRouter(Tv); +function yz(r) { + return new Ms(r); } -function Zz(r) { - return r.startsWith(Fs.URL_SCHEME) ? r.slice(Fs.URL_SCHEME.length) : r; +function bz(r) { + return r.startsWith(Ms.URL_SCHEME) ? r.slice(Ms.URL_SCHEME.length) : r; } -var Qm = class { +var zm = class { constructor() { - this.indexedDB = Z0(); + this.indexedDB = Nv(); } async listModels() { - return new Promise((e, t10) => { - let o = this.indexedDB.open(Kb, jb); - o.onupgradeneeded = () => Xb(o), o.onsuccess = () => { - let n = o.result, s = n.transaction(ui, "readonly"), i = s.objectStore(ui).getAll(); + return new Promise((e, t6) => { + let o = this.indexedDB.open(Wb, Ub); + o.onupgradeneeded = () => Gb(o), o.onsuccess = () => { + let n = o.result, s = n.transaction(bi, "readonly"), i = s.objectStore(bi).getAll(); i.onsuccess = () => { let p = {}; for (let u of i.result) p[u.modelPath] = u.modelArtifactsInfo; e(p); - }, i.onerror = (p) => (n.close(), t10(i.error)), s.oncomplete = () => n.close(); - }, o.onerror = (n) => t10(o.error); + }, i.onerror = (p) => (n.close(), t6(i.error)), s.oncomplete = () => n.close(); + }, o.onerror = (n) => t6(o.error); }); } async removeModel(e) { - return e = Zz(e), new Promise((t10, o) => { - let n = this.indexedDB.open(Kb, jb); - n.onupgradeneeded = () => Xb(n), n.onsuccess = () => { - let s = n.result, a = s.transaction(ui, "readwrite"), i = a.objectStore(ui), p = i.get(e), u; + return e = bz(e), new Promise((t6, o) => { + let n = this.indexedDB.open(Wb, Ub); + n.onupgradeneeded = () => Gb(n), n.onsuccess = () => { + let s = n.result, a = s.transaction(bi, "readwrite"), i = a.objectStore(bi), p = i.get(e), u; p.onsuccess = () => { if (p.result == null) return s.close(), o(new Error(`Cannot find model with path '${e}' in IndexedDB.`)); { let c = i.delete(e), l = () => { u = s.transaction(nu, "readwrite"); - let f = u.objectStore(nu).delete(e); - f.onsuccess = () => t10(p.result.modelArtifactsInfo), f.onerror = (d) => o(p.error); + let d = u.objectStore(nu).delete(e); + d.onsuccess = () => t6(p.result.modelArtifactsInfo), d.onerror = (f) => o(p.error); }; c.onsuccess = l, c.onerror = (m) => (l(), s.close(), o(p.error)); } @@ -5025,48 +5032,48 @@ var Qm = class { }); } }; -var wa = "/"; -var Vp = "tensorflowjs_models"; -var ev = "info"; -var Jz = "model_topology"; -var eW = "weight_specs"; -var tW = "weight_data"; -var rW = "model_metadata"; -function tv(r) { - return { info: [Vp, r, ev].join(wa), topology: [Vp, r, Jz].join(wa), weightSpecs: [Vp, r, eW].join(wa), weightData: [Vp, r, tW].join(wa), modelMetadata: [Vp, r, rW].join(wa) }; +var Ta = "/"; +var Op = "tensorflowjs_models"; +var _v = "info"; +var Cz = "model_topology"; +var Sz = "weight_specs"; +var wz = "weight_data"; +var Iz = "model_metadata"; +function Ev(r) { + return { info: [Op, r, _v].join(Ta), topology: [Op, r, Cz].join(Ta), weightSpecs: [Op, r, Sz].join(Ta), weightData: [Op, r, wz].join(Ta), modelMetadata: [Op, r, Iz].join(Ta) }; } -function rv(r) { +function $v(r) { for (let e of Object.values(r)) window.localStorage.removeItem(e); } -function oW(r) { - let e = r.split(wa); +function vz(r) { + let e = r.split(Ta); if (e.length < 3) throw new Error(`Invalid key format: ${r}`); - return e.slice(1, e.length - 1).join(wa); + return e.slice(1, e.length - 1).join(Ta); } -function nW(r) { - return r.startsWith(Ds.URL_SCHEME) ? r.slice(Ds.URL_SCHEME.length) : r; +function kz(r) { + return r.startsWith(Ls.URL_SCHEME) ? r.slice(Ls.URL_SCHEME.length) : r; } -var Ds = class { +var Ls = class { constructor(e) { - if (!P().getBool("IS_BROWSER") || typeof window == "undefined" || typeof window.localStorage == "undefined") + if (!O().getBool("IS_BROWSER") || typeof window == "undefined" || typeof window.localStorage == "undefined") throw new Error("The current environment does not support local storage."); if (this.LS = window.localStorage, e == null || !e) throw new Error("For local storage, modelPath must not be null, undefined or empty."); - this.modelPath = e, this.keys = tv(this.modelPath); + this.modelPath = e, this.keys = Ev(this.modelPath); } async save(e) { if (e.modelTopology instanceof ArrayBuffer) throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); { - let t10 = JSON.stringify(e.modelTopology), o = JSON.stringify(e.weightSpecs), n = As(e); + let t6 = JSON.stringify(e.modelTopology), o = JSON.stringify(e.weightSpecs), n = Ps(e); try { - this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, t10), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, q0(e.weightData)); + this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, t6), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, Cv(e.weightData)); let s = { format: e.format, generatedBy: e.generatedBy, convertedBy: e.convertedBy, signature: e.signature != null ? e.signature : void 0, userDefinedMetadata: e.userDefinedMetadata != null ? e.userDefinedMetadata : void 0, modelInitializer: e.modelInitializer != null ? e.modelInitializer : void 0, initializerSignature: e.initializerSignature != null ? e.initializerSignature : void 0, trainingConfig: e.trainingConfig != null ? e.trainingConfig : void 0 }; return this.LS.setItem(this.keys.modelMetadata, JSON.stringify(s)), { modelArtifactsInfo: n }; } catch (s) { - throw rv(this.keys), new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`); + throw $v(this.keys), new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`); } } } @@ -5076,142 +5083,142 @@ var Ds = class { throw new Error(`In local storage, there is no model with name '${this.modelPath}'`); if (e.modelTopologyType !== "JSON") throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet."); - let t10 = {}, o = JSON.parse(this.LS.getItem(this.keys.topology)); + let t6 = {}, o = JSON.parse(this.LS.getItem(this.keys.topology)); if (o == null) throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`); - t10.modelTopology = o; + t6.modelTopology = o; let n = JSON.parse(this.LS.getItem(this.keys.weightSpecs)); if (n == null) throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`); - t10.weightSpecs = n; + t6.weightSpecs = n; let s = this.LS.getItem(this.keys.modelMetadata); if (s != null) { let i = JSON.parse(s); - t10.format = i.format, t10.generatedBy = i.generatedBy, t10.convertedBy = i.convertedBy, i.signature != null && (t10.signature = i.signature), i.userDefinedMetadata != null && (t10.userDefinedMetadata = i.userDefinedMetadata), i.modelInitializer != null && (t10.modelInitializer = i.modelInitializer), i.initializerSignature != null && (t10.initializerSignature = i.initializerSignature), i.trainingConfig != null && (t10.trainingConfig = i.trainingConfig); + t6.format = i.format, t6.generatedBy = i.generatedBy, t6.convertedBy = i.convertedBy, i.signature != null && (t6.signature = i.signature), i.userDefinedMetadata != null && (t6.userDefinedMetadata = i.userDefinedMetadata), i.modelInitializer != null && (t6.modelInitializer = i.modelInitializer), i.initializerSignature != null && (t6.initializerSignature = i.initializerSignature), i.trainingConfig != null && (t6.trainingConfig = i.trainingConfig); } let a = this.LS.getItem(this.keys.weightData); if (a == null) throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`); - return t10.weightData = K0(a), t10; + return t6.weightData = Sv(a), t6; } }; -Ds.URL_SCHEME = "localstorage://"; -var ov = (r) => P().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Ds.URL_SCHEME) ? sW(r.slice(Ds.URL_SCHEME.length)) : null; -mt.registerSaveRouter(ov); -mt.registerLoadRouter(ov); -function sW(r) { - return new Ds(r); +Ls.URL_SCHEME = "localstorage://"; +var Av = (r) => O().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Ls.URL_SCHEME) ? Nz(r.slice(Ls.URL_SCHEME.length)) : null; +lt.registerSaveRouter(Av); +lt.registerLoadRouter(Av); +function Nz(r) { + return new Ls(r); } -var Zm = class { +var Wm = class { constructor() { - $(P().getBool("IS_BROWSER"), () => "Current environment is not a web browser"), $(typeof window == "undefined" || typeof window.localStorage != "undefined", () => "Current browser does not appear to support localStorage"), this.LS = window.localStorage; + E(O().getBool("IS_BROWSER"), () => "Current environment is not a web browser"), E(typeof window == "undefined" || typeof window.localStorage != "undefined", () => "Current browser does not appear to support localStorage"), this.LS = window.localStorage; } async listModels() { - let e = {}, t10 = Vp + wa, o = wa + ev; + let e = {}, t6 = Op + Ta, o = Ta + _v; for (let n = 0; n < this.LS.length; ++n) { let s = this.LS.key(n); - if (s.startsWith(t10) && s.endsWith(o)) { - let a = oW(s); + if (s.startsWith(t6) && s.endsWith(o)) { + let a = vz(s); e[a] = JSON.parse(this.LS.getItem(s)); } } return e; } async removeModel(e) { - e = nW(e); - let t10 = tv(e); - if (this.LS.getItem(t10.info) == null) + e = kz(e); + let t6 = Ev(e); + if (this.LS.getItem(t6.info) == null) throw new Error(`Cannot find model at path '${e}'`); - let o = JSON.parse(this.LS.getItem(t10.info)); - return rv(t10), o; + let o = JSON.parse(this.LS.getItem(t6.info)); + return $v(t6), o; } }; -var zp = "://"; -var Yt = class { +var Pp = "://"; +var Xt = class { constructor() { this.managers = {}; } static getInstance() { - return Yt.instance == null && (Yt.instance = new Yt()), Yt.instance; + return Xt.instance == null && (Xt.instance = new Xt()), Xt.instance; } - static registerManager(e, t10) { - $(e != null, () => "scheme must not be undefined or null."), e.endsWith(zp) && (e = e.slice(0, e.indexOf(zp))), $(e.length > 0, () => "scheme must not be an empty string."); - let o = Yt.getInstance(); - $(o.managers[e] == null, () => `A model store manager is already registered for scheme '${e}'.`), o.managers[e] = t10; + static registerManager(e, t6) { + E(e != null, () => "scheme must not be undefined or null."), e.endsWith(Pp) && (e = e.slice(0, e.indexOf(Pp))), E(e.length > 0, () => "scheme must not be an empty string."); + let o = Xt.getInstance(); + E(o.managers[e] == null, () => `A model store manager is already registered for scheme '${e}'.`), o.managers[e] = t6; } static getManager(e) { - let t10 = Yt.getInstance().managers[e]; - if (t10 == null) + let t6 = Xt.getInstance().managers[e]; + if (t6 == null) throw new Error(`Cannot find model manager for scheme '${e}'`); - return t10; + return t6; } static getSchemes() { - return Object.keys(Yt.getInstance().managers); + return Object.keys(Xt.getInstance().managers); } }; -function Jm(r) { - if (r.indexOf(zp) === -1) - throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Yt.getSchemes().join(",")}`); - return { scheme: r.split(zp)[0], path: r.split(zp)[1] }; +function Um(r) { + if (r.indexOf(Pp) === -1) + throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Xt.getSchemes().join(",")}`); + return { scheme: r.split(Pp)[0], path: r.split(Pp)[1] }; } -async function nv(r, e, t10 = false) { - $(r !== e, () => `Old path and new path are the same: '${r}'`); - let o = mt.getLoadHandlers(r); - $(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r}.`), $(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`); - let n = o[0], s = mt.getSaveHandlers(e); - $(s.length > 0, () => `Copying failed because no save handler is found for destination URL ${e}.`), $(s.length < 2, () => `Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`); - let a = s[0], i = Jm(r).scheme, p = Jm(r).path, u = i === Jm(r).scheme, c = await n.load(); - t10 && u && await Yt.getManager(i).removeModel(p); +async function Rv(r, e, t6 = false) { + E(r !== e, () => `Old path and new path are the same: '${r}'`); + let o = lt.getLoadHandlers(r); + E(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r}.`), E(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`); + let n = o[0], s = lt.getSaveHandlers(e); + E(s.length > 0, () => `Copying failed because no save handler is found for destination URL ${e}.`), E(s.length < 2, () => `Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`); + let a = s[0], i = Um(r).scheme, p = Um(r).path, u = i === Um(r).scheme, c = await n.load(); + t6 && u && await Xt.getManager(i).removeModel(p); let l = await a.save(c); - return t10 && !u && await Yt.getManager(i).removeModel(p), l.modelArtifactsInfo; + return t6 && !u && await Xt.getManager(i).removeModel(p), l.modelArtifactsInfo; } -async function sv() { - let r = Yt.getSchemes(), e = {}; - for (let t10 of r) { - let o = await Yt.getManager(t10).listModels(); +async function Fv() { + let r = Xt.getSchemes(), e = {}; + for (let t6 of r) { + let o = await Xt.getManager(t6).listModels(); for (let n in o) { - let s = t10 + zp + n; + let s = t6 + Pp + n; e[s] = o[n]; } } return e; } -async function av(r) { - let e = Jm(r); - return Yt.getManager(e.scheme).removeModel(e.path); +async function Dv(r) { + let e = Um(r); + return Xt.getManager(e.scheme).removeModel(e.path); } -async function iv(r, e) { - return nv(r, e, false); +async function Ov(r, e) { + return Rv(r, e, false); } -async function uv(r, e) { - return nv(r, e, true); +async function Pv(r, e) { + return Rv(r, e, true); } -var Yb = class { +var Hb = class { constructor() { this.messageName = "setTimeoutCustom", this.functionRefs = [], this.handledMessageCount = 0, this.hasEventListener = false; } - fetch(e, t10) { - return fetch(e, t10); + fetch(e, t6) { + return fetch(e, t6); } now() { return performance.now(); } - encode(e, t10) { - if (t10 !== "utf-8" && t10 !== "utf8") - throw new Error(`Browser's encoder only supports utf-8, but got ${t10}`); + encode(e, t6) { + if (t6 !== "utf-8" && t6 !== "utf8") + throw new Error(`Browser's encoder only supports utf-8, but got ${t6}`); return this.textEncoder == null && (this.textEncoder = new TextEncoder()), this.textEncoder.encode(e); } - decode(e, t10) { - return new TextDecoder(t10).decode(e); + decode(e, t6) { + return new TextDecoder(t6).decode(e); } - setTimeoutCustom(e, t10) { - if (typeof window == "undefined" || !P().getBool("USE_SETTIMEOUTCUSTOM")) { - setTimeout(e, t10); + setTimeoutCustom(e, t6) { + if (typeof window == "undefined" || !O().getBool("USE_SETTIMEOUTCUSTOM")) { + setTimeout(e, t6); return; } this.functionRefs.push(e), setTimeout(() => { window.postMessage({ name: this.messageName, index: this.functionRefs.length - 1 }, "*"); - }, t10), this.hasEventListener || (this.hasEventListener = true, window.addEventListener("message", (o) => { + }, t6), this.hasEventListener || (this.hasEventListener = true, window.addEventListener("message", (o) => { if (o.source === window && o.data.name === this.messageName) { o.stopPropagation(); let n = this.functionRefs[o.data.index]; @@ -5220,301 +5227,301 @@ var Yb = class { }, true)); } }; -if (P().get("IS_BROWSER")) { - P().setPlatform("browser", new Yb()); +if (O().get("IS_BROWSER")) { + O().setPlatform("browser", new Hb()); try { - Yt.registerManager(Ds.URL_SCHEME, new Zm()); + Xt.registerManager(Ls.URL_SCHEME, new Wm()); } catch (r) { } try { - Yt.registerManager(Fs.URL_SCHEME, new Qm()); + Xt.registerManager(Ms.URL_SCHEME, new zm()); } catch (r) { } } -var aW = { importFetch: () => pv() }; -var Qb; -var Zb = class { +var Tz = { importFetch: () => Mv() }; +var qb; +var Kb = class { constructor() { - this.util = cv(), this.textEncoder = new this.util.TextEncoder(); + this.util = Lv(), this.textEncoder = new this.util.TextEncoder(); } - fetch(e, t10) { - return P().global.fetch != null ? P().global.fetch(e, t10) : (Qb == null && (Qb = aW.importFetch()), Qb(e, t10)); + fetch(e, t6) { + return O().global.fetch != null ? O().global.fetch(e, t6) : (qb == null && (qb = Tz.importFetch()), qb(e, t6)); } now() { let e = process.hrtime(); return e[0] * 1e3 + e[1] / 1e6; } - encode(e, t10) { - if (t10 !== "utf-8" && t10 !== "utf8") - throw new Error(`Node built-in encoder only supports utf-8, but got ${t10}`); + encode(e, t6) { + if (t6 !== "utf-8" && t6 !== "utf8") + throw new Error(`Node built-in encoder only supports utf-8, but got ${t6}`); return this.textEncoder.encode(e); } - decode(e, t10) { - return e.length === 0 ? "" : new this.util.TextDecoder(t10).decode(e); + decode(e, t6) { + return e.length === 0 ? "" : new this.util.TextDecoder(t6).decode(e); } }; -P().get("IS_NODE") && !P().get("IS_BROWSER") && P().setPlatform("node", new Zb()); -function ne(r, e = "float32", t10) { - return e = e || "float32", Xc(r), new je(r, e, t10); +O().get("IS_NODE") && !O().get("IS_BROWSER") && O().setPlatform("node", new Kb()); +function le(r, e = "float32", t6) { + return e = e || "float32", yt(r), new st(r, e, t6); } -function iW(r, e) { - let t10 = v(r, "x", "cast"); - if (!yb(e)) +function _z(r, e) { + let t6 = v(r, "x", "cast"); + if (!db(e)) throw new Error(`Failed to cast to unknown dtype ${e}`); - if (e === "string" && t10.dtype !== "string" || e !== "string" && t10.dtype === "string") + if (e === "string" && t6.dtype !== "string" || e !== "string" && t6.dtype === "string") throw new Error("Only strings can be casted to strings"); - let o = { x: t10 }, n = { dtype: e }; - return N.runKernel(to, o, n); + let o = { x: t6 }, n = { dtype: e }; + return T.runKernel(co, o, n); } -var qe = T({ cast_: iW }); -function uW(r) { - let t10 = { x: v(r, "x", "clone", "string_or_numeric") }; - return N.runKernel(uo, t10); +var Ke = N({ cast_: _z }); +function Ez(r) { + let t6 = { x: v(r, "x", "clone", "string_or_numeric") }; + return T.runKernel(mo, t6); } -var zr = T({ clone_: uW }); -function ef(r, e = false) { +var Br = N({ clone_: Ez }); +function Gm(r, e = false) { console.log(r.toString(e)); } -Vb(); -var pW = { buffer: ne, cast: qe, clone: zr, print: ef }; -L0(pW); -var va = {}; -Be(va, { browserFiles: () => mv, browserHTTPRequest: () => hv, concatenateArrayBuffers: () => Lp, copyModel: () => iv, decodeWeights: () => jm, encodeWeights: () => H0, fromMemory: () => gv, fromMemorySync: () => nC, getLoadHandlers: () => Q0, getModelArtifactsForJSON: () => Bp, getModelArtifactsForJSONSync: () => qb, getModelArtifactsInfoForJSON: () => As, getSaveHandlers: () => Y0, getWeightSpecs: () => Ym, http: () => rf, isHTTPScheme: () => tf, listModels: () => sv, loadWeights: () => fv, moveModel: () => uv, registerLoadRouter: () => X0, registerSaveRouter: () => j0, removeModel: () => av, weightsLoaderFactory: () => rC, withSaveHandler: () => xv, withSaveHandlerSync: () => yv }); -var cW = "model"; -var lW = ".json"; -var mW = ".weights.bin"; -function lv(r) { +Ob(); +var $z = { buffer: le, cast: Ke, clone: Br, print: Gm }; +mv($z); +var Ea = {}; +Ue(Ea, { browserFiles: () => Vv, browserHTTPRequest: () => Uv, concatenateArrayBuffers: () => Fp, copyModel: () => Ov, decodeWeights: () => Lm, encodeWeights: () => bv, fromMemory: () => Gv, fromMemorySync: () => Jb, getLoadHandlers: () => kv, getModelArtifactsForJSON: () => Dp, getModelArtifactsForJSONSync: () => zb, getModelArtifactsInfoForJSON: () => Ps, getSaveHandlers: () => vv, getWeightSpecs: () => Vm, http: () => qm, isHTTPScheme: () => Hm, listModels: () => Fv, loadWeights: () => zv, moveModel: () => Pv, registerLoadRouter: () => Iv, registerSaveRouter: () => wv, removeModel: () => Dv, weightsLoaderFactory: () => Qb, withSaveHandler: () => Hv, withSaveHandlerSync: () => qv }); +var Az = "model"; +var Rz = ".json"; +var Fz = ".weights.bin"; +function Bv(r) { return new Promise((e) => setTimeout(e)).then(r); } -var Sa = class { +var _a = class { constructor(e) { - if (!P().getBool("IS_BROWSER")) + if (!O().getBool("IS_BROWSER")) throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); - e.startsWith(Sa.URL_SCHEME) && (e = e.slice(Sa.URL_SCHEME.length)), (e == null || e.length === 0) && (e = cW), this.modelJsonFileName = e + lW, this.weightDataFileName = e + mW; + e.startsWith(_a.URL_SCHEME) && (e = e.slice(_a.URL_SCHEME.length)), (e == null || e.length === 0) && (e = Az), this.modelJsonFileName = e + Rz, this.weightDataFileName = e + Fz; } async save(e) { if (typeof document == "undefined") throw new Error("Browser downloads are not supported in this environment since `document` is not present"); - let t10 = window.URL.createObjectURL(new Blob([e.weightData], { type: "application/octet-stream" })); + let t6 = window.URL.createObjectURL(new Blob([e.weightData], { type: "application/octet-stream" })); if (e.modelTopology instanceof ArrayBuffer) throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); { - let o = [{ paths: ["./" + this.weightDataFileName], weights: e.weightSpecs }], n = Xm(e, o), s = window.URL.createObjectURL(new Blob([JSON.stringify(n)], { type: "application/json" })), a = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; - if (a.download = this.modelJsonFileName, a.href = s, await lv(() => a.dispatchEvent(new MouseEvent("click"))), e.weightData != null) { + let o = [{ paths: ["./" + this.weightDataFileName], weights: e.weightSpecs }], n = Bm(e, o), s = window.URL.createObjectURL(new Blob([JSON.stringify(n)], { type: "application/json" })), a = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; + if (a.download = this.modelJsonFileName, a.href = s, await Bv(() => a.dispatchEvent(new MouseEvent("click"))), e.weightData != null) { let i = this.weightDataAnchor == null ? document.createElement("a") : this.weightDataAnchor; - i.download = this.weightDataFileName, i.href = t10, await lv(() => i.dispatchEvent(new MouseEvent("click"))); + i.download = this.weightDataFileName, i.href = t6, await Bv(() => i.dispatchEvent(new MouseEvent("click"))); } - return { modelArtifactsInfo: As(e) }; + return { modelArtifactsInfo: Ps(e) }; } } }; -Sa.URL_SCHEME = "downloads://"; -var Jb = class { +_a.URL_SCHEME = "downloads://"; +var jb = class { constructor(e) { if (e == null || e.length < 1) throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`); this.jsonFile = e[0], this.weightsFiles = e.slice(1); } async load() { - return new Promise((e, t10) => { + return new Promise((e, t6) => { let o = new FileReader(); o.onload = (n) => { let s = JSON.parse(n.target.result), a = s.modelTopology; if (a == null) { - t10(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`)); + t6(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`)); return; } if (s.weightsManifest == null) { - t10(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`)); + t6(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`)); return; } if (this.weightsFiles.length === 0) { e({ modelTopology: a }); return; } - let p = Bp(s, (u) => this.loadWeights(u)); + let p = Dp(s, (u) => this.loadWeights(u)); e(p); - }, o.onerror = (n) => t10(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`), o.readAsText(this.jsonFile); + }, o.onerror = (n) => t6(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`), o.readAsText(this.jsonFile); }); } loadWeights(e) { - let t10 = [], o = []; + let t6 = [], o = []; for (let a of e) - t10.push(...a.weights), o.push(...a.paths); + t6.push(...a.weights), o.push(...a.paths); let n = this.checkManifestAndWeightFiles(e), s = o.map((a) => this.loadWeightsFile(a, n[a])); - return Promise.all(s).then((a) => [t10, Lp(a)]); + return Promise.all(s).then((a) => [t6, Fp(a)]); } - loadWeightsFile(e, t10) { + loadWeightsFile(e, t6) { return new Promise((o, n) => { let s = new FileReader(); s.onload = (a) => { let i = a.target.result; o(i); - }, s.onerror = (a) => n(`Failed to weights data from file of path '${e}'.`), s.readAsArrayBuffer(t10); + }, s.onerror = (a) => n(`Failed to weights data from file of path '${e}'.`), s.readAsArrayBuffer(t6); }); } checkManifestAndWeightFiles(e) { - let t10 = [], o = this.weightsFiles.map((s) => Hb(s.name)), n = {}; + let t6 = [], o = this.weightsFiles.map((s) => Vb(s.name)), n = {}; for (let s of e) s.paths.forEach((a) => { - let i = Hb(a); - if (t10.indexOf(i) !== -1) + let i = Vb(a); + if (t6.indexOf(i) !== -1) throw new Error(`Duplicate file basename found in weights manifest: '${i}'`); - if (t10.push(i), o.indexOf(i) === -1) + if (t6.push(i), o.indexOf(i) === -1) throw new Error(`Weight file with basename '${i}' is not provided.`); n[a] = this.weightsFiles[o.indexOf(i)]; }); - if (t10.length !== this.weightsFiles.length) - throw new Error(`Mismatch in the number of files in weights manifest (${t10.length}) and the number of weight files provided (${this.weightsFiles.length}).`); + if (t6.length !== this.weightsFiles.length) + throw new Error(`Mismatch in the number of files in weights manifest (${t6.length}) and the number of weight files provided (${this.weightsFiles.length}).`); return n; } }; -var fW = (r) => P().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Sa.URL_SCHEME) ? dW(r.slice(Sa.URL_SCHEME.length)) : null; -mt.registerSaveRouter(fW); -function dW(r = "model") { - return new Sa(r); +var Dz = (r) => O().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(_a.URL_SCHEME) ? Oz(r.slice(_a.URL_SCHEME.length)) : null; +lt.registerSaveRouter(Dz); +function Oz(r = "model") { + return new _a(r); } -function mv(r) { - return new Jb(r); +function Vv(r) { + return new jb(r); } -function eC(r, e, t10, o) { - a(r), t10 = t10 == null ? 0 : t10, o = o == null ? 1 : o, i(t10, o); +function Xb(r, e, t6, o) { + a(r), t6 = t6 == null ? 0 : t6, o = o == null ? 1 : o, i(t6, o); let n = 0, s = (p) => (p.then((u) => { - let c = t10 + ++n / r.length * (o - t10); + let c = t6 + ++n / r.length * (o - t6); return e(c), u; }), p); function a(p) { - $(p != null && Array.isArray(p) && p.length > 0, () => "promises must be a none empty array"); + E(p != null && Array.isArray(p) && p.length > 0, () => "promises must be a none empty array"); } function i(p, u) { - $(p >= 0 && p <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${p}`), $(u >= 0 && u <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${u}`), $(u >= p, () => `startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`); + E(p >= 0 && p <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${p}`), E(u >= 0 && u <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${u}`), E(u >= p, () => `startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`); } return Promise.all(r.map(s)); } -async function tC(r, e) { +async function Yb(r, e) { e == null && (e = {}); - let t10 = e.fetchFunc == null ? P().platform.fetch : e.fetchFunc, o = r.map((l) => t10(l, e.requestInit, { isBinary: true })), n = 0, s = 0.5, i = (e.onProgress == null ? await Promise.all(o) : await eC(o, e.onProgress, n, s)).map((l) => l.arrayBuffer()), p = 0.5, u = 1; - return e.onProgress == null ? await Promise.all(i) : await eC(i, e.onProgress, p, u); + let t6 = e.fetchFunc == null ? O().platform.fetch : e.fetchFunc, o = r.map((l) => t6(l, e.requestInit, { isBinary: true })), n = 0, s = 0.5, i = (e.onProgress == null ? await Promise.all(o) : await Xb(o, e.onProgress, n, s)).map((l) => l.arrayBuffer()), p = 0.5, u = 1; + return e.onProgress == null ? await Promise.all(i) : await Xb(i, e.onProgress, p, u); } -async function fv(r, e = "", t10, o) { - return rC((a) => tC(a, { requestInit: o }))(r, e, t10); +async function zv(r, e = "", t6, o) { + return Qb((a) => Yb(a, { requestInit: o }))(r, e, t6); } -function rC(r) { - return async (e, t10 = "", o) => { +function Qb(r) { + return async (e, t6 = "", o) => { let n = e.map(() => false), s = {}, a = o != null ? o.map(() => false) : [], i = []; - if (e.forEach((f, d) => { + if (e.forEach((d, f) => { let h = 0; - f.weights.forEach((g) => { - let y = "quantization" in g ? g.quantization.dtype : g.dtype, b = al[y] * Ve(g.shape), C = () => { - n[d] = true, s[d] == null && (s[d] = []), s[d].push({ manifestEntry: g, groupOffset: h, sizeBytes: b }); + d.weights.forEach((g) => { + let x = "quantization" in g ? g.quantization.dtype : g.dtype, b = Zc[x] * ze(g.shape), C = () => { + n[f] = true, s[f] == null && (s[f] = []), s[f].push({ manifestEntry: g, groupOffset: h, sizeBytes: b }); }; o != null ? o.forEach((w, k) => { w === g.name && (C(), a[k] = true); }) : C(), i.push(g.name), h += b; }); - }), !a.every((f) => f)) { - let f = o.filter((d, h) => !a[h]); - throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}. + }), !a.every((d) => d)) { + let d = o.filter((f, h) => !a[h]); + throw new Error(`Could not find weights in manifest with names: ${d.join(", ")}. Manifest JSON has weights with names: ${i.join(", ")}.`); } - let p = n.reduce((f, d, h) => (d && f.push(h), f), []), u = []; - p.forEach((f) => { - e[f].paths.forEach((d) => { - let h = t10 + (t10.endsWith("/") ? "" : "/") + d; + let p = n.reduce((d, f, h) => (f && d.push(h), d), []), u = []; + p.forEach((d) => { + e[d].paths.forEach((f) => { + let h = t6 + (t6.endsWith("/") ? "" : "/") + f; u.push(h); }); }); let c = await r(u), l = {}, m = 0; - return p.forEach((f) => { - let d = e[f].paths.length, h = 0; - for (let w = 0; w < d; w++) + return p.forEach((d) => { + let f = e[d].paths.length, h = 0; + for (let w = 0; w < f; w++) h += c[m + w].byteLength; - let g = new ArrayBuffer(h), y = new Uint8Array(g), b = 0; - for (let w = 0; w < d; w++) { + let g = new ArrayBuffer(h), x = new Uint8Array(g), b = 0; + for (let w = 0; w < f; w++) { let k = new Uint8Array(c[m + w]); - y.set(k, b), b += k.byteLength; + x.set(k, b), b += k.byteLength; } - s[f].forEach((w) => { - let k = g.slice(w.groupOffset, w.groupOffset + w.sizeBytes), _ = jm(k, [w.manifestEntry]); - for (let E in _) - l[E] = _[E]; - }), m += d; + s[d].forEach((w) => { + let k = g.slice(w.groupOffset, w.groupOffset + w.sizeBytes), _ = Lm(k, [w.manifestEntry]); + for (let $ in _) + l[$] = _[$]; + }), m += f; }), l; }; } -var hW = "application/octet-stream"; -var gW = "application/json"; -var il = class { - constructor(e, t10) { - if (this.DEFAULT_METHOD = "POST", t10 == null && (t10 = {}), this.weightPathPrefix = t10.weightPathPrefix, this.onProgress = t10.onProgress, this.weightUrlConverter = t10.weightUrlConverter, t10.fetchFunc != null ? ($(typeof t10.fetchFunc == "function", () => "Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"), this.fetch = t10.fetchFunc) : this.fetch = P().platform.fetch, $(e != null && e.length > 0, () => "URL path for http must not be null, undefined or empty."), Array.isArray(e) && $(e.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${e.length}).`), this.path = e, t10.requestInit != null && t10.requestInit.body != null) +var Pz = "application/octet-stream"; +var Mz = "application/json"; +var Jc = class { + constructor(e, t6) { + if (this.DEFAULT_METHOD = "POST", t6 == null && (t6 = {}), this.weightPathPrefix = t6.weightPathPrefix, this.onProgress = t6.onProgress, this.weightUrlConverter = t6.weightUrlConverter, t6.fetchFunc != null ? (E(typeof t6.fetchFunc == "function", () => "Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"), this.fetch = t6.fetchFunc) : this.fetch = O().platform.fetch, E(e != null && e.length > 0, () => "URL path for http must not be null, undefined or empty."), Array.isArray(e) && E(e.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${e.length}).`), this.path = e, t6.requestInit != null && t6.requestInit.body != null) throw new Error("requestInit is expected to have no pre-existing body, but has one."); - this.requestInit = t10.requestInit || {}; + this.requestInit = t6.requestInit || {}; } async save(e) { if (e.modelTopology instanceof ArrayBuffer) throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); - let t10 = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); - t10.body = new FormData(); - let o = [{ paths: ["./model.weights.bin"], weights: e.weightSpecs }], n = Xm(e, o); - t10.body.append("model.json", new Blob([JSON.stringify(n)], { type: gW }), "model.json"), e.weightData != null && t10.body.append("model.weights.bin", new Blob([e.weightData], { type: hW }), "model.weights.bin"); - let s = await this.fetch(this.path, t10); + let t6 = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); + t6.body = new FormData(); + let o = [{ paths: ["./model.weights.bin"], weights: e.weightSpecs }], n = Bm(e, o); + t6.body.append("model.json", new Blob([JSON.stringify(n)], { type: Mz }), "model.json"), e.weightData != null && t6.body.append("model.weights.bin", new Blob([e.weightData], { type: Pz }), "model.weights.bin"); + let s = await this.fetch(this.path, t6); if (s.ok) - return { modelArtifactsInfo: As(e), responses: [s] }; + return { modelArtifactsInfo: Ps(e), responses: [s] }; throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`); } async load() { let e = await this.fetch(this.path, this.requestInit); if (!e.ok) throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`); - let t10; + let t6; try { - t10 = await e.json(); + t6 = await e.json(); } catch (s) { let a = `Failed to parse model JSON of response from ${this.path}.`; throw this.path.endsWith(".pb") ? a += " Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository." : a += " Please make sure the server is serving valid JSON for this request.", new Error(a); } - let o = t10.modelTopology, n = t10.weightsManifest; + let o = t6.modelTopology, n = t6.weightsManifest; if (o == null && n == null) throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`); - return Bp(t10, (s) => this.loadWeights(s)); + return Dp(t6, (s) => this.loadWeights(s)); } async loadWeights(e) { - let t10 = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = xW(t10), s = this.weightPathPrefix || o, a = Ym(e), i = [], p = []; + let t6 = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = Lz(t6), s = this.weightPathPrefix || o, a = Vm(e), i = [], p = []; for (let c of e) for (let l of c.paths) this.weightUrlConverter != null ? p.push(this.weightUrlConverter(l)) : i.push(s + l + n); this.weightUrlConverter && i.push(...await Promise.all(p)); - let u = await tC(i, { requestInit: this.requestInit, fetchFunc: this.fetch, onProgress: this.onProgress }); - return [a, Lp(u)]; + let u = await Yb(i, { requestInit: this.requestInit, fetchFunc: this.fetch, onProgress: this.onProgress }); + return [a, Fp(u)]; } }; -il.URL_SCHEME_REGEX = /^https?:\/\//; -function xW(r) { - let e = r.lastIndexOf("/"), t10 = r.lastIndexOf("?"), o = r.substring(0, e), n = t10 > e ? r.substring(t10) : ""; +Jc.URL_SCHEME_REGEX = /^https?:\/\//; +function Lz(r) { + let e = r.lastIndexOf("/"), t6 = r.lastIndexOf("?"), o = r.substring(0, e), n = t6 > e ? r.substring(t6) : ""; return [o + "/", n]; } -function tf(r) { - return r.match(il.URL_SCHEME_REGEX) != null; +function Hm(r) { + return r.match(Jc.URL_SCHEME_REGEX) != null; } -var dv = (r, e) => { +var Wv = (r, e) => { if (typeof fetch == "undefined" && (e == null || e.fetchFunc == null)) return null; { - let t10 = true; - if (Array.isArray(r) ? t10 = r.every((o) => tf(o)) : t10 = tf(r), t10) - return rf(r, e); + let t6 = true; + if (Array.isArray(r) ? t6 = r.every((o) => Hm(o)) : t6 = Hm(r), t6) + return qm(r, e); } return null; }; -mt.registerSaveRouter(dv); -mt.registerLoadRouter(dv); -function rf(r, e) { - return new il(r, e); +lt.registerSaveRouter(Wv); +lt.registerLoadRouter(Wv); +function qm(r, e) { + return new Jc(r, e); } -function hv(r, e) { - return rf(r, e); +function Uv(r, e) { + return qm(r, e); } -var ul = class { +var el = class { constructor(e) { this.modelArtifacts = e; } @@ -5522,7 +5529,7 @@ var ul = class { return this.modelArtifacts; } }; -var of = class { +var Km = class { constructor(e) { this.saveHandler = e; } @@ -5530,196 +5537,196 @@ var of = class { return this.saveHandler(e); } }; -var oC = class { +var Zb = class { constructor(e) { - e.load && (this.load = () => Promise.resolve(e.load())), e.save && (this.save = (t10) => Promise.resolve(e.save(t10))); + e.load && (this.load = () => Promise.resolve(e.load())), e.save && (this.save = (t6) => Promise.resolve(e.save(t6))); } }; -function gv(r, e, t10, o) { +function Gv(r, e, t6, o) { let n = arguments; - return new oC(nC(...n)); + return new Zb(Jb(...n)); } -function nC(r, e, t10, o) { - return arguments.length === 1 ? r.modelTopology != null || r.weightSpecs != null ? new ul(r) : (console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."), new ul({ modelTopology: r })) : (console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."), new ul({ modelTopology: r, weightSpecs: e, weightData: t10, trainingConfig: o })); +function Jb(r, e, t6, o) { + return arguments.length === 1 ? r.modelTopology != null || r.weightSpecs != null ? new el(r) : (console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."), new el({ modelTopology: r })) : (console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."), new el({ modelTopology: r, weightSpecs: e, weightData: t6, trainingConfig: o })); } -function xv(r) { - return new of(r); +function Hv(r) { + return new Km(r); } -function yv(r) { - return new of(r); +function qv(r) { + return new Km(r); } -var Cv = {}; -Be(Cv, { confusionMatrix: () => bv }); -function yW(r, e, t10 = false, o = false) { +var jv = {}; +Ue(jv, { confusionMatrix: () => Kv }); +function Bz(r, e, t6 = false, o = false) { let n = v(r, "a", "matMul"), s = v(e, "b", "matMul"); [n, s] = Re(n, s); - let a = { a: n, b: s }, i = { transposeA: t10, transposeB: o }; - return N.runKernel(cn, a, i); + let a = { a: n, b: s }, i = { transposeA: t6, transposeB: o }; + return T.runKernel(Wo, a, i); } -var Xe = T({ matMul_: yW }); -function bW(r, e, t10 = 1, o = 0, n = "int32") { +var Xe = N({ matMul_: Bz }); +function Vz(r, e, t6 = 1, o = 0, n = "int32") { if (e < 2) throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`); - let a = { indices: v(r, "indices", "oneHot", "int32") }, i = { dtype: n, depth: e, onValue: t10, offValue: o }; - return N.runKernel(ca, a, i); + let a = { indices: v(r, "indices", "oneHot", "int32") }, i = { dtype: n, depth: e, onValue: t6, offValue: o }; + return T.runKernel(En, a, i); } -var pl = T({ oneHot_: bW }); -function Tie() { - P().set("PROD", true); +var tl = N({ oneHot_: Vz }); +function wie() { + O().set("PROD", true); } -function Nie() { - P().set("DEBUG", true); +function Iie() { + O().set("DEBUG", true); } -function _ie() { - P().set("DEPRECATION_WARNINGS_ENABLED", false), console.warn("TensorFlow.js deprecation warnings have been disabled."); +function vie() { + O().set("DEPRECATION_WARNINGS_ENABLED", false), console.warn("TensorFlow.js deprecation warnings have been disabled."); } -function sC(r) { - P().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); +function eC(r) { + O().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); } -B0(sC); -function Eie() { - N.disposeVariables(); +dv(eC); +function kie() { + T.disposeVariables(); } function cr() { - return N; + return T; +} +function Nie() { + return T.memory(); +} +function Tie(r) { + return T.profile(r); +} +function Ee(r, e) { + return T.tidy(r, e); +} +function Dt(r) { + Qc(r).forEach((t6) => t6.dispose()); +} +function _r(r) { + return T.keep(r); +} +function _ie(r) { + return T.time(r); +} +function Eie(r) { + return T.setBackend(r); } function $ie() { - return N.memory(); + return T.ready(); +} +function Aie() { + return T.backendName; } function Rie(r) { - return N.profile(r); -} -function Ne(r, e) { - return N.tidy(r, e); -} -function Ft(r) { - sl(r).forEach((t10) => t10.dispose()); -} -function So(r) { - return N.keep(r); -} -function Aie(r) { - return N.time(r); + T.removeBackend(r); } function Fie(r) { - return N.setBackend(r); + return T.findBackend(r); } -function Die() { - return N.ready(); +function Die(r) { + return T.findBackendFactory(r); } -function Pie() { - return N.backendName; +function Ci(r, e, t6 = 1) { + return T.registerBackend(r, e, t6); } -function Oie(r) { - N.removeBackend(r); +function Oie() { + return T.backend; } -function Mie(r) { - return N.findBackend(r); +function Pie(r, e) { + O().setPlatform(r, e); } -function Lie(r) { - return N.findBackendFactory(r); +function zz(r) { + let t6 = { input: v(r, "input", "imag") }; + return T.runKernel(si, t6); } -function pi(r, e, t10 = 1) { - return N.registerBackend(r, e, t10); +var Si = N({ imag_: zz }); +function Wz(r) { + let t6 = { x: v(r, "x", "neg") }; + return T.runKernel(ws, t6); } -function Bie() { - return N.backend; +var yr = N({ neg_: Wz }); +function Uz(r) { + let t6 = { input: v(r, "input", "real") }; + return T.runKernel(ai, t6); } -function Vie(r, e) { - P().setPlatform(r, e); -} -function CW(r) { - let t10 = { input: v(r, "input", "imag") }; - return N.runKernel(Ya, t10); -} -var ci = T({ imag_: CW }); -function IW(r) { - let t10 = { x: v(r, "x", "neg") }; - return N.runKernel(Pn, t10); -} -var yr = T({ neg_: IW }); -function wW(r) { - let t10 = { input: v(r, "input", "real") }; - return N.runKernel(la, t10); -} -var ka = T({ real_: wW }); -function SW(r, e, t10) { +var $a = N({ real_: Uz }); +function Gz(r, e, t6) { let o = v(r, "x", "transpose"); - if (e == null && (e = o.shape.map((a, i) => i).reverse()), $(o.rank === e.length, () => `Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`), e.forEach((a) => { - $(a >= 0 && a < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${e}`); + if (e == null && (e = o.shape.map((a, i) => i).reverse()), E(o.rank === e.length, () => `Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`), e.forEach((a) => { + E(a >= 0 && a < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${e}`); }), o.rank <= 1) return o.clone(); let n = { x: o }, s = { perm: e }; - return o.dtype === "complex64" ? Ne(() => { - let a = ka(o), i = ci(o); - return a = N.runKernel(Mr, { x: a }, s), i = N.runKernel(Mr, { x: i }, s), t10 && (i = yr(i)), Er(a, i); - }) : N.runKernel(Mr, n, s); + return o.dtype === "complex64" ? Ee(() => { + let a = $a(o), i = Si(o); + return a = T.runKernel(ro, { x: a }, s), i = T.runKernel(ro, { x: i }, s), t6 && (i = yr(i)), Tr(a, i); + }) : T.runKernel(ro, n, s); } -var Wp = T({ transpose_: SW }); -function vW(r, e, t10) { +var Mp = N({ transpose_: Gz }); +function Hz(r, e, t6) { let o = v(r, "labels", "confusionMatrix"), n = v(e, "predictions", "confusionMatrix"); - $(t10 == null || t10 > 0 && Number.isInteger(t10), () => `If provided, numClasses must be a positive integer, but got ${t10}`), $(o.rank === 1, () => `Expected the rank of labels to be 1, but got ${o.rank}`), $(n.rank === 1, () => `Expected the rank of predictions to be 1, but got ${n.rank}`), $(o.shape[0] === n.shape[0], () => `Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`), $(t10 > 0 && Number.isInteger(t10), () => `numClasses is required to be a positive integer, but got ${t10}`); - let s = pl(qe(o, "int32"), t10), a = pl(qe(n, "int32"), t10), i = Wp(s), p = Xe(i, a); - return qe(p, "int32"); + E(t6 == null || t6 > 0 && Number.isInteger(t6), () => `If provided, numClasses must be a positive integer, but got ${t6}`), E(o.rank === 1, () => `Expected the rank of labels to be 1, but got ${o.rank}`), E(n.rank === 1, () => `Expected the rank of predictions to be 1, but got ${n.rank}`), E(o.shape[0] === n.shape[0], () => `Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`), E(t6 > 0 && Number.isInteger(t6), () => `numClasses is required to be a positive integer, but got ${t6}`); + let s = tl(Ke(o, "int32"), t6), a = tl(Ke(n, "int32"), t6), i = Mp(s), p = Xe(i, a); + return Ke(p, "int32"); } -var bv = T({ confusionMatrix_: vW }); +var Kv = N({ confusionMatrix_: Hz }); var br = {}; -Be(br, { assertAndGetBroadcastShape: () => Je, getBroadcastDims: () => Iv, getReductionAxes: () => nf }); -function Iv(r, e) { - let t10 = r.length, o = []; - for (let n = 0; n < t10; n++) { - let s = t10 - 1 - n, a = r[s] || 1; +Ue(br, { assertAndGetBroadcastShape: () => Je, getBroadcastDims: () => Xv, getReductionAxes: () => jm }); +function Xv(r, e) { + let t6 = r.length, o = []; + for (let n = 0; n < t6; n++) { + let s = t6 - 1 - n, a = r[s] || 1; (e[e.length - 1 - n] || 1) > 1 && a === 1 && o.unshift(s); } return o; } -function nf(r, e) { - let t10 = []; +function jm(r, e) { + let t6 = []; for (let o = 0; o < e.length; o++) { let n = r[r.length - o - 1], s = e.length - o - 1, a = e[s]; - (n == null || n === 1 && a > 1) && t10.unshift(s); + (n == null || n === 1 && a > 1) && t6.unshift(s); } - return t10; + return t6; } function Je(r, e) { - let t10 = [], o = Math.max(r.length, e.length); + let t6 = [], o = Math.max(r.length, e.length); for (let n = 0; n < o; n++) { let s = r[r.length - n - 1]; s == null && (s = 1); let a = e[e.length - n - 1]; if (a == null && (a = 1), s === 1) - t10.unshift(a); + t6.unshift(a); else if (a === 1) - t10.unshift(s); + t6.unshift(s); else if (s !== a) { let i = `Operands could not be broadcast together with shapes ${r} and ${e}.`; throw Error(i); } else - t10.unshift(s); + t6.unshift(s); } - return t10; + return t6; } -var Sv = {}; -Be(Sv, { fromPixels: () => RW, fromPixelsAsync: () => EW, toPixels: () => $W }); -function sf(r, e, t10) { - if (eo(r), e != null && e.length !== 3) +var Qv = {}; +Ue(Qv, { fromPixels: () => Zz, fromPixelsAsync: () => Yz, toPixels: () => Qz }); +function Xm(r, e, t6) { + if (Jr(r), e != null && e.length !== 3) throw new Error("tensor3d() requires shape to have three numbers"); - let o = or(r, t10); + let o = or(r, t6); if (o.length !== 3 && o.length !== 1) throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor3d() requires shape to be provided when `values` are a flat array"); - return xr(r, e, o, t10); + return xr(r, e, o, t6); } var su; -function wv(r, e = 3) { +function Yv(r, e = 3) { if (e > 4) throw new Error("Cannot construct Tensor with more than 4 channels from pixels."); if (r == null) throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); - let t10 = false, o = false, n = false, s = false, a = false, i = false; + let t6 = false, o = false, n = false, s = false, a = false, i = false; if (r.data instanceof Uint8Array) - t10 = true; + t6 = true; else if (typeof ImageData != "undefined" && r instanceof ImageData) o = true; else if (typeof HTMLVideoElement != "undefined" && r instanceof HTMLVideoElement) @@ -5732,14 +5739,14 @@ function wv(r, e = 3) { i = true; else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`); - if (el(Zi, N.backendName) != null) { - let d = { pixels: r }, h = { numChannels: e }; - return N.runKernel(Zi, d, h); + if (qc(Zi, T.backendName) != null) { + let f = { pixels: r }, h = { numChannels: e }; + return T.runKernel(Zi, f, h); } let [u, c] = n ? [r.videoWidth, r.videoHeight] : [r.width, r.height], l; if (a) l = r.getContext("2d").getImageData(0, 0, u, c).data; - else if (o || t10) + else if (o || t6) l = r.data; else if (s || n || i) { if (su == null) @@ -5756,64 +5763,64 @@ function wv(r, e = 3) { if (e === 4) m = new Int32Array(l); else { - let d = u * c; - m = new Int32Array(d * e); - for (let h = 0; h < d; h++) + let f = u * c; + m = new Int32Array(f * e); + for (let h = 0; h < f; h++) for (let g = 0; g < e; ++g) m[h * e + g] = l[h * 4 + g]; } - return sf(m, [c, u, e], "int32"); + return Xm(m, [c, u, e], "int32"); } -function kW(r) { +function qz(r) { return r != null && r.data instanceof Uint8Array; } -function TW() { +function Kz() { return typeof window != "undefined" && typeof ImageBitmap != "undefined" && window.hasOwnProperty("createImageBitmap"); } -function NW(r) { +function jz(r) { return r != null && r.width !== 0 && r.height !== 0; } -function _W(r) { - return TW() && !(r instanceof ImageBitmap) && NW(r) && !kW(r); +function Xz(r) { + return Kz() && !(r instanceof ImageBitmap) && jz(r) && !qz(r); } -async function EW(r, e = 3) { - let t10 = null; - if (P().getBool("WRAP_TO_IMAGEBITMAP") && _W(r)) { +async function Yz(r, e = 3) { + let t6 = null; + if (O().getBool("WRAP_TO_IMAGEBITMAP") && Xz(r)) { let o; try { o = await createImageBitmap(r, { premultiplyAlpha: "none" }); } catch (n) { o = null; } - o != null && o.width === r.width && o.height === r.height ? t10 = o : t10 = r; + o != null && o.width === r.width && o.height === r.height ? t6 = o : t6 = r; } else - t10 = r; - return wv(t10, e); + t6 = r; + return Yv(t6, e); } -async function $W(r, e) { - let t10 = v(r, "img", "toPixels"); - if (!(r instanceof ut)) { - let u = t10; - t10 = qe(u, "int32"), u.dispose(); +async function Qz(r, e) { + let t6 = v(r, "img", "toPixels"); + if (!(r instanceof it)) { + let u = t6; + t6 = Ke(u, "int32"), u.dispose(); } - if (t10.rank !== 2 && t10.rank !== 3) - throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${t10.rank}.`); - let [o, n] = t10.shape.slice(0, 2), s = t10.rank === 2 ? 1 : t10.shape[2]; + if (t6.rank !== 2 && t6.rank !== 3) + throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${t6.rank}.`); + let [o, n] = t6.shape.slice(0, 2), s = t6.rank === 2 ? 1 : t6.shape[2]; if (s > 4 || s === 2) throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`); - if (t10.dtype !== "float32" && t10.dtype !== "int32") - throw new Error(`Unsupported type for toPixels: ${t10.dtype}. Please use float32 or int32 tensors.`); - let a = await t10.data(), i = t10.dtype === "float32" ? 255 : 1, p = new Uint8ClampedArray(n * o * 4); + if (t6.dtype !== "float32" && t6.dtype !== "int32") + throw new Error(`Unsupported type for toPixels: ${t6.dtype}. Please use float32 or int32 tensors.`); + let a = await t6.data(), i = t6.dtype === "float32" ? 255 : 1, p = new Uint8ClampedArray(n * o * 4); for (let u = 0; u < o * n; ++u) { let c = [0, 0, 0, 255]; for (let m = 0; m < s; m++) { - let f = a[u * s + m]; - if (t10.dtype === "float32") { - if (f < 0 || f > 1) - throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`); - } else if (t10.dtype === "int32" && (f < 0 || f > 255)) - throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${f}.`); - s === 1 ? (c[0] = f * i, c[1] = f * i, c[2] = f * i) : c[m] = f * i; + let d = a[u * s + m]; + if (t6.dtype === "float32") { + if (d < 0 || d > 1) + throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`); + } else if (t6.dtype === "int32" && (d < 0 || d > 255)) + throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`); + s === 1 ? (c[0] = d * i, c[1] = d * i, c[2] = d * i) : c[m] = d * i; } let l = u * 4; p[l + 0] = Math.round(c[0]), p[l + 1] = Math.round(c[1]), p[l + 2] = Math.round(c[2]), p[l + 3] = Math.round(c[3]); @@ -5823,22 +5830,22 @@ async function $W(r, e) { let u = e.getContext("2d"), c = new ImageData(p, n, o); u.putImageData(c, 0, 0); } - return t10 !== r && t10.dispose(), p; + return t6 !== r && t6.dispose(), p; } -var RW = T({ fromPixels_: wv }); -var af = {}; -Be(af, { prepareAndValidate: () => vv }); -function vv(r, e) { - let t10 = r.shape.length, o = e.shape.length; - if (t10 < 1) - throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t10}.`); +var Zz = N({ fromPixels_: Yv }); +var Ym = {}; +Ue(Ym, { prepareAndValidate: () => Zv }); +function Zv(r, e) { + let t6 = r.shape.length, o = e.shape.length; + if (t6 < 1) + throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t6}.`); if (o < 1) throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`); if (e.dtype !== "int32") throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`); - if (e.shape[o - 1] > t10) - throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o - 1]} vs. ${t10}`); - if (Ve(r.shape) === 0) + if (e.shape[o - 1] > t6) + throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o - 1]} vs. ${t6}`); + if (ze(r.shape) === 0) throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`); let n = e.shape, s = n[n.length - 1], a = 1; for (let l = 0; l < n.length - 1; ++l) @@ -5846,119 +5853,119 @@ function vv(r, e) { let i = r.shape, p = n.slice(); p.pop(); let u = 1; - for (let l = s; l < t10; ++l) + for (let l = s; l < t6; ++l) u *= i[l], p.push(i[l]); - let c = [...ds(r.shape).map((l) => l / u), 1].slice(0, s); + let c = [...hs(r.shape).map((l) => l / u), 1].slice(0, s); return [p, a, u, c]; } -var cl = {}; -Be(cl, { calculateShapes: () => kv, validateInput: () => uf, validateUpdateShape: () => aC }); -function aC(r, e, t10) { - let o = e.rank > 1 ? e.shape[e.rank - 1] : 1, n = e.rank > 1 ? e.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t10.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`; - if (t10.rank < n) +var rl = {}; +Ue(rl, { calculateShapes: () => Jv, validateInput: () => Qm, validateUpdateShape: () => tC }); +function tC(r, e, t6) { + let o = e.rank > 1 ? e.shape[e.rank - 1] : 1, n = e.rank > 1 ? e.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t6.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`; + if (t6.rank < n) throw new Error(s + ` update.rank < ${n}. `); - if (r.length < o + (t10.rank - n)) - throw new Error(s + ` Output shape length < ${o + (t10.rank - n)}`); - if (t10.rank !== n + r.length - o) + if (r.length < o + (t6.rank - n)) + throw new Error(s + ` Output shape length < ${o + (t6.rank - n)}`); + if (t6.rank !== n + r.length - o) throw new Error(s + ` update.rank != ${n + r.length - o}`); for (let a = 0; a < n; ++a) - if (t10.shape[a] !== e.shape[a]) - throw new Error(s + ` updates.shape[${a}] (${t10.shape[a]}) != indices.shape[${a}] (${e.shape[a]}).`); - for (let a = 0; a < t10.rank - n; ++a) - if (t10.shape[a + n] !== r[a + o]) - throw new Error(s + ` updates.shape[${a + n}] (${t10.shape[a + n]}) != shape[${a + n}] (${r[a + n]})`); + if (t6.shape[a] !== e.shape[a]) + throw new Error(s + ` updates.shape[${a}] (${t6.shape[a]}) != indices.shape[${a}] (${e.shape[a]}).`); + for (let a = 0; a < t6.rank - n; ++a) + if (t6.shape[a + n] !== r[a + o]) + throw new Error(s + ` updates.shape[${a + n}] (${t6.shape[a + n]}) != shape[${a + n}] (${r[a + n]})`); } -function uf(r, e, t10) { +function Qm(r, e, t6) { if (e.rank < 1) throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${e.rank}.`); if (r.rank < 1) throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r.rank}.`); if (e.dtype !== "int32") throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${e.dtype}`); - if (t10.length < 1) - throw new Error(`Output rank must be greater or equal to 1, but got shape: ${t10}`); - if (t10.length === 0) { + if (t6.length < 1) + throw new Error(`Output rank must be greater or equal to 1, but got shape: ${t6}`); + if (t6.length === 0) { if (e.size === 0) throw new Error(`Indices specified for empty output. indices shape: ${e.shape}`); if (r.size === 0) throw new Error(`Updates specified for empty output. updates shape: ${r.shape}`); } - aC(t10, e, r); + tC(t6, e, r); } -function kv(r, e, t10) { - let o = e.shape.length, n = o > 1 ? e.shape[o - 1] : 1, s = t10.length, a = 1; +function Jv(r, e, t6) { + let o = e.shape.length, n = o > 1 ? e.shape[o - 1] : 1, s = t6.length, a = 1; for (let l = n; l < s; ++l) - a *= t10[l]; - let i = n < 1 ? 1 : n, p = Ve(e.shape) / i, u = [...ds(t10.slice(0, n)), 1], c = Ve(t10); + a *= t6[l]; + let i = n < 1 ? 1 : n, p = ze(e.shape) / i, u = [...hs(t6.slice(0, n)), 1], c = ze(t6); return { sliceRank: n, numUpdates: p, sliceSize: a, strides: u, outputSize: c }; } -var et = {}; -Be(et, { assertParamsValid: () => FW, computeFlatOffset: () => LW, computeOutShape: () => PW, getNormalizedAxes: () => OW, isSliceContinous: () => MW, maskToAxes: () => DW, parseSliceParams: () => BW, sliceInfo: () => VW, startForAxis: () => Fv, startIndicesWithElidedDims: () => $v, stopForAxis: () => Dv, stopIndicesWithElidedDims: () => Rv, stridesForAxis: () => Av, stridesWithElidedDims: () => Nv }); -var iC = -2; -var AW = -1; -function FW(r, e, t10) { +var ut = {}; +Ue(ut, { assertParamsValid: () => eW, computeFlatOffset: () => sW, computeOutShape: () => rW, getNormalizedAxes: () => oW, isSliceContinous: () => nW, maskToAxes: () => tW, parseSliceParams: () => aW, sliceInfo: () => iW, startForAxis: () => i0, startIndicesWithElidedDims: () => n0, stopForAxis: () => u0, stopIndicesWithElidedDims: () => s0, stridesForAxis: () => a0, stridesWithElidedDims: () => t0 }); +var rC = -2; +var Jz = -1; +function eW(r, e, t6) { let o = r.shape.length; - $(o === e.length, () => `Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`), $(o === t10.length, () => `Error in slice${o}D: Length of size ${t10} must match the rank of the array (${o}).`); + E(o === e.length, () => `Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`), E(o === t6.length, () => `Error in slice${o}D: Length of size ${t6} must match the rank of the array (${o}).`); for (let n = 0; n < o; ++n) - $(e[n] + t10[n] <= r.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t10[n]}) would overflow input.shape[${n}] (${r.shape[n]})`); + E(e[n] + t6[n] <= r.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t6[n]}) would overflow input.shape[${n}] (${r.shape[n]})`); } -function DW(r) { - let e = [], t10 = 0; +function tW(r) { + let e = [], t6 = 0; for (; r > 0; ) - r & 1 && e.push(t10), r /= 2, t10++; + r & 1 && e.push(t6), r /= 2, t6++; return e; } -function PW(r, e, t10) { +function rW(r, e, t6) { let o = []; for (let n = 0; n < r.length; n++) - o[n] = Math.ceil((e[n] - r[n]) / t10[n]); + o[n] = Math.ceil((e[n] - r[n]) / t6[n]); return o; } -function Nv(r, e, t10, o) { +function t0(r, e, t6, o) { let n = [...r]; for (let s = n.length; s < o.length; s++) n.push(1); - for (let s = 0; s < t10; s++) + for (let s = 0; s < t6; s++) s === 0 ? n[e] = 1 : (n.splice(e, 0, 1), n.pop()); return n; } -function _v(r, e, t10) { - return t10 <= r ? t10 : t10 - (e - 1); +function r0(r, e, t6) { + return t6 <= r ? t6 : t6 - (e - 1); } -function Ev(r, e) { - let t10 = []; +function o0(r, e) { + let t6 = []; for (let o = 0; o < r; o++) - t10.push(e + o); - return t10; + t6.push(e + o); + return t6; } -function OW(r, e, t10, o, n, s, a, i, p) { +function oW(r, e, t6, o, n, s, a, i, p) { let u = r.length, c = new Array(u), l = new Array(u), m = new Array(u); - if (e.length && t10 > 0) { - let f = e[0], d = t10 + 1; - c = $v(a, f, d, o, r), l = Rv(i, f, d, n, r), m = Nv(s, f, d, r); + if (e.length && t6 > 0) { + let d = e[0], f = t6 + 1; + c = n0(a, d, f, o, r), l = s0(i, d, f, n, r), m = t0(s, d, f, r); } else - for (let f = 0; f < u; f++) - c[f] = Fv(a, o, s, r, f, p), l[f] = Dv(i, n, s, r, f, p), m[f] = Av(s, f, p); + for (let d = 0; d < u; d++) + c[d] = i0(a, o, s, r, d, p), l[d] = u0(i, n, s, r, d, p), m[d] = a0(s, d, p); return { begin: c, end: l, strides: m }; } -function $v(r, e, t10, o, n) { - let s = [...n], a = Ev(t10, e); +function n0(r, e, t6, o, n) { + let s = [...n], a = o0(t6, e); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = 0; else { - let p = _v(e, t10, i), u = o[p]; + let p = r0(e, t6, i), u = o[p]; r & 1 << p && (u = 0), s[i] = u; } return s; } -function Rv(r, e, t10, o, n) { - let s = [...n], a = Ev(t10, e); +function s0(r, e, t6, o, n) { + let s = [...n], a = o0(t6, e); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = Number.MAX_SAFE_INTEGER; else { - let p = _v(e, t10, i), u = o[p]; + let p = r0(e, t6, i), u = o[p]; r & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; } for (let i = 0; i < s.length; i++) { @@ -5967,59 +5974,59 @@ function Rv(r, e, t10, o, n) { } return s; } -function Av(r, e, t10) { +function a0(r, e, t6) { let o = r[e]; - return (t10 & 1 << e || o == null) && (o = 1), o; + return (t6 & 1 << e || o == null) && (o = 1), o; } -function Fv(r, e, t10, o, n, s) { - let a = e[n], i = t10[n] || 1; +function i0(r, e, t6, o, n, s) { + let a = e[n], i = t6[n] || 1; (r & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MIN_SAFE_INTEGER : a = Number.MAX_SAFE_INTEGER); let p = o[n]; return a < 0 && (a += p), a = op(0, a, p - 1), a; } -function Dv(r, e, t10, o, n, s) { - let a = e[n], i = t10[n] || 1; +function u0(r, e, t6, o, n, s) { + let a = e[n], i = t6[n] || 1; (r & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MAX_SAFE_INTEGER : a = Number.MIN_SAFE_INTEGER); let p = o[n]; return a < 0 && (a += p), i > 0 ? a = op(0, a, p) : a = op(-1, a, p - 1), a; } -function MW(r, e, t10) { - let o = t10.length; - for (let n = 0; n < t10.length; n++) - if (t10[n] > 1) { +function nW(r, e, t6) { + let o = t6.length; + for (let n = 0; n < t6.length; n++) + if (t6[n] > 1) { o = n; break; } - for (let n = o + 1; n < t10.length; n++) - if (e[n] > 0 || t10[n] !== r[n]) + for (let n = o + 1; n < t6.length; n++) + if (e[n] > 0 || t6[n] !== r[n]) return false; return true; } -function LW(r, e) { - let t10 = r.length > 0 ? r[r.length - 1] : 1; +function sW(r, e) { + let t6 = r.length > 0 ? r[r.length - 1] : 1; for (let o = 0; o < r.length - 1; o++) - t10 += r[o] * e[o]; - return t10; + t6 += r[o] * e[o]; + return t6; } -function BW(r, e, t10) { +function aW(r, e, t6) { let o, n = r.shape.length; typeof e == "number" ? o = [e, ...new Array(n - 1).fill(0)] : e.length < n ? o = e.concat(new Array(n - e.length).fill(0)) : o = e.slice(), o.forEach((a) => { - $(a !== -1, () => "slice() does not support negative begin indexing."); + E(a !== -1, () => "slice() does not support negative begin indexing."); }); let s; - return t10 == null ? s = new Array(n).fill(-1) : typeof t10 == "number" ? s = [t10, ...new Array(n - 1).fill(-1)] : t10.length < n ? s = t10.concat(new Array(n - t10.length).fill(-1)) : s = t10, s = s.map((a, i) => a >= 0 ? a : ($(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r.shape[i] - o[i])), [o, s]; + return t6 == null ? s = new Array(n).fill(-1) : typeof t6 == "number" ? s = [t6, ...new Array(n - 1).fill(-1)] : t6.length < n ? s = t6.concat(new Array(n - t6.length).fill(-1)) : s = t6, s = s.map((a, i) => a >= 0 ? a : (E(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r.shape[i] - o[i])), [o, s]; } -function VW(r, e, t10, o, n, s, a, i, p) { +function iW(r, e, t6, o, n, s, a, i, p) { let u; if (o == null ? (u = new Array(e.length), u.fill(1)) : u = o, a != null && (a & a - 1) !== 0) throw new Error("Multiple ellipses in slice is not allowed."); - let c = false, l = { dims: u.length, numAddAxisAfterEllipsis: 0, begin: e.slice(), end: t10.slice(), strides: u.slice(), beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; + let c = false, l = { dims: u.length, numAddAxisAfterEllipsis: 0, begin: e.slice(), end: t6.slice(), strides: u.slice(), beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; for (let C = 0; C < l.dims; C++) c && (1 << C & i) !== 0 && l.numAddAxisAfterEllipsis++, 1 << C & a && (c = true); c || (l.ellipsisMask |= 1 << l.dims, l.dims++); let m = { dims: r.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; - zW(l, m); - let f = true, d = true, h = true, g = [], y = []; + uW(l, m); + let d = true, f = true, h = true, g = [], x = []; for (let C = 0; C < r.length; ++C) { if (m.strides[C] === 0) throw Error(`strides[${C}] must be non-zero`); @@ -6028,303 +6035,303 @@ function VW(r, e, t10, o, n, s, a, i, p) { g.push(w ? 1 : -1); continue; } - let _ = [m.beginMask & 1 << C, m.endMask & 1 << C], E = [m.strides[C] > 0 ? 0 : -1, m.strides[C] > 0 ? k : k - 1]; + let _ = [m.beginMask & 1 << C, m.endMask & 1 << C], $ = [m.strides[C] > 0 ? 0 : -1, m.strides[C] > 0 ? k : k - 1]; if (w && m.strides[C] <= 0) throw Error("only stride 1 allowed on non-range indexing."); h = h && m.strides[C] === 1; - let R = !!(m.beginMask & 1 << C && m.endMask & 1 << C); + let A = !!(m.beginMask & 1 << C && m.endMask & 1 << C); if (m.beginValid && m.endValid) { if (w) { let M = m.begin[C] < 0 ? k + m.begin[C] : m.begin[C]; if (m.begin[C] = M, m.end[C] = m.begin[C] + 1, M < 0 || M >= k) throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`); } else - m.begin[C] = Tv(m.begin[C], 0, m.strides[C], k, _, E), m.end[C] = Tv(m.end[C], 1, m.strides[C], k, _, E); - let O = m.strides[C] === 1 && m.begin[C] === 0 && m.end[C] === k; - f = f && O, d = d && (C === 0 && m.strides[C] === 1 || O); + m.begin[C] = e0(m.begin[C], 0, m.strides[C], k, _, $), m.end[C] = e0(m.end[C], 1, m.strides[C], k, _, $); + let P = m.strides[C] === 1 && m.begin[C] === 0 && m.end[C] === k; + d = d && P, f = f && (C === 0 && m.strides[C] === 1 || P); } else - f = f && m.strides[C] === 1 && R, d = d && (C === 0 && m.strides[C] === 1 || R); - let A, D = false; - if (m.beginValid && m.endValid ? (A = m.end[C] - m.begin[C], D = true) : w ? (A = 1, D = true) : R && k >= 0 && (m.strides[C] < 0 ? A = -k : A = k, D = true), D) { - let O; - A === 0 || A < 0 != m.strides[C] < 0 ? O = 0 : O = Math.trunc(A / m.strides[C]) + (A % m.strides[C] !== 0 ? 1 : 0), g.push(O); + d = d && m.strides[C] === 1 && A, f = f && (C === 0 && m.strides[C] === 1 || A); + let R, D = false; + if (m.beginValid && m.endValid ? (R = m.end[C] - m.begin[C], D = true) : w ? (R = 1, D = true) : A && k >= 0 && (m.strides[C] < 0 ? R = -k : R = k, D = true), D) { + let P; + R === 0 || R < 0 != m.strides[C] < 0 ? P = 0 : P = Math.trunc(R / m.strides[C]) + (R % m.strides[C] !== 0 ? 1 : 0), g.push(P); } else g.push(-1); } for (let C = 0; C < m.finalShapeGatherIndices.length; ++C) { let w = m.finalShapeGatherIndices[C]; - w >= 0 ? y.push(g[w]) : w === iC && y.push(1); + w >= 0 ? x.push(g[w]) : w === rC && x.push(1); } - return { finalShapeSparse: y.filter((C, w) => m.finalShapeGatherIndices[w] !== iC), finalShape: y, isIdentity: f, sliceDim0: d, isSimpleSlice: h, begin: m.begin, end: m.end, strides: m.strides }; + return { finalShapeSparse: x.filter((C, w) => m.finalShapeGatherIndices[w] !== rC), finalShape: x, isIdentity: d, sliceDim0: f, isSimpleSlice: h, begin: m.begin, end: m.end, strides: m.strides }; } -function zW(r, e) { +function uW(r, e) { e.beginMask = 0, e.endMask = 0, e.shrinkAxisMask = 0; - let t10 = 0; + let t6 = 0; e.beginValid = r.begin != null, e.endValid = r.end != null, e.begin = new Array(e.dims), e.end = new Array(e.dims), e.strides = new Array(e.dims), e.finalShapeGatherIndices = [], e.finalShapeGatherIndicesSparse = [], e.inputShapeGatherIndicesSparse = new Array(e.dims); for (let o = 0; o < r.dims; o++) if (1 << o & r.ellipsisMask) { let n = Math.min(e.dims - (r.dims - o) + 1 + r.numAddAxisAfterEllipsis, e.dims); - for (; t10 < n; t10++) - e.begin[t10] = 0, e.end[t10] = 0, e.strides[t10] = 1, e.beginMask |= 1 << t10, e.endMask |= 1 << t10, e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(-1), e.inputShapeGatherIndicesSparse[t10] = o; + for (; t6 < n; t6++) + e.begin[t6] = 0, e.end[t6] = 0, e.strides[t6] = 1, e.beginMask |= 1 << t6, e.endMask |= 1 << t6, e.finalShapeGatherIndices.push(t6), e.finalShapeGatherIndicesSparse.push(-1), e.inputShapeGatherIndicesSparse[t6] = o; } else if (1 << o & r.newAxisMask) - e.finalShapeGatherIndices.push(iC), e.finalShapeGatherIndicesSparse.push(-1); + e.finalShapeGatherIndices.push(rC), e.finalShapeGatherIndicesSparse.push(-1); else { - if (t10 === e.begin.length) - throw Error(`Index out of range using input dim ${t10}; input has only ${e.dims} dims, ${e.begin.length}.`); - r.begin != null && (e.begin[t10] = r.begin[o]), r.end != null && (e.end[t10] = r.end[o]), e.strides[t10] = r.strides[o], r.beginMask & 1 << o && (e.beginMask |= 1 << t10), r.endMask & 1 << o && (e.endMask |= 1 << t10), r.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(AW), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t10) : (e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t10] = o, t10++; + if (t6 === e.begin.length) + throw Error(`Index out of range using input dim ${t6}; input has only ${e.dims} dims, ${e.begin.length}.`); + r.begin != null && (e.begin[t6] = r.begin[o]), r.end != null && (e.end[t6] = r.end[o]), e.strides[t6] = r.strides[o], r.beginMask & 1 << o && (e.beginMask |= 1 << t6), r.endMask & 1 << o && (e.endMask |= 1 << t6), r.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(Jz), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t6) : (e.finalShapeGatherIndices.push(t6), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t6] = o, t6++; } } -function Tv(r, e, t10, o, n, s) { +function e0(r, e, t6, o, n, s) { if (n[e]) - return t10 > 0 ? s[e] : s[e + 1 & 1]; + return t6 > 0 ? s[e] : s[e + 1 & 1]; { let a = r < 0 ? o + r : r; return a < s[0] ? s[0] : a > s[1] ? s[1] : a; } } -var Pv = {}; -Be(Pv, { Serializable: () => ll, SerializationMap: () => Ps, registerClass: () => $r }); -var ll = class { +var p0 = {}; +Ue(p0, { Serializable: () => ol, SerializationMap: () => Bs, registerClass: () => Er }); +var ol = class { getClassName() { return this.constructor.className; } - static fromConfig(e, t10) { - return new e(t10); + static fromConfig(e, t6) { + return new e(t6); } }; -var Ps = class { +var Bs = class { constructor() { this.classNameMap = {}; } static getMap() { - return Ps.instance == null && (Ps.instance = new Ps()), Ps.instance; + return Bs.instance == null && (Bs.instance = new Bs()), Bs.instance; } static register(e) { - Ps.getMap().classNameMap[e.className] = [e, e.fromConfig]; + Bs.getMap().classNameMap[e.className] = [e, e.fromConfig]; } }; -function $r(r) { - $(r.className != null, () => "Class being registered does not have the static className property defined."), $(typeof r.className == "string", () => "className is required to be a string, but got type " + typeof r.className), $(r.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), Ps.register(r); +function Er(r) { + E(r.className != null, () => "Class being registered does not have the static className property defined."), E(typeof r.className == "string", () => "className is required to be a string, but got type " + typeof r.className), E(r.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), Bs.register(r); } -var Bv = {}; -Be(Bv, { TEST_EPSILON_FLOAT16: () => Ov, createVideoElement: () => jW, encodeStrings: () => Lv, expectArrayBuffersEqual: () => KW, expectArraysClose: () => UW, expectArraysEqual: () => HW, expectNumbersClose: () => Mv, expectPromiseToFail: () => GW, expectValuesInRange: () => qW, play: () => XW, testEpsilon: () => pf }); -var WW = 1e-3; -var Ov = 0.1; -function UW(r, e, t10) { - return t10 == null && (t10 = pf()), uC(r, e, (o, n) => pC(o, n, t10)); +var d0 = {}; +Ue(d0, { TEST_EPSILON_FLOAT16: () => c0, createVideoElement: () => hW, encodeStrings: () => m0, expectArrayBuffersEqual: () => fW, expectArraysClose: () => cW, expectArraysEqual: () => mW, expectNumbersClose: () => l0, expectPromiseToFail: () => lW, expectValuesInRange: () => dW, play: () => gW, testEpsilon: () => Zm }); +var pW = 1e-3; +var c0 = 0.1; +function cW(r, e, t6) { + return t6 == null && (t6 = Zm()), oC(r, e, (o, n) => nC(o, n, t6)); } -function pf() { - return N.backend.floatPrecision() === 32 ? WW : Ov; +function Zm() { + return T.backend.floatPrecision() === 32 ? pW : c0; } -function uC(r, e, t10) { +function oC(r, e, t6) { let o = true; - if ((Ut(r) || Ut(e)) && (o = false), Ut(r) && Ut(e) && (o = true), o) { + if ((Wt(r) || Wt(e)) && (o = false), Wt(r) && Wt(e) && (o = true), o) { let a = r.constructor.name, i = e.constructor.name; if (a !== i) throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`); } if (Array.isArray(r) && Array.isArray(e)) { let a = or(r), i = or(e); - if (!Or(a, i)) + if (!Pr(a, i)) throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`); } - let n = Ut(r) ? r : on(r), s = Ut(e) ? e : on(e); + let n = Wt(r) ? r : Oo(r), s = Wt(e) ? e : Oo(e); if (n.length !== s.length) throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. Actual: ${n}. Expected: ${s}.`); for (let a = 0; a < s.length; ++a) { let i = n[a], p = s[a]; - if (!t10(i, p)) + if (!t6(i, p)) throw new Error(`Arrays differ: actual[${a}] = ${i}, expected[${a}] = ${p}. Actual: ${n}. Expected: ${s}.`); } typeof expect != "undefined" && expect().nothing(); } -function GW(r, e) { +function lW(r, e) { r().then(() => e.fail(), () => e()), typeof expect != "undefined" && expect().nothing(); } -function HW(r, e) { - let t10 = typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? [e] : e; - return nn(r) || nn(r[0]) || nn(e) || nn(e[0]) ? uC(r, t10, (o, n) => o == n) : uC(r, e, (o, n) => pC(o, n, 0)); +function mW(r, e) { + let t6 = typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? [e] : e; + return Po(r) || Po(r[0]) || Po(e) || Po(e[0]) ? oC(r, t6, (o, n) => o == n) : oC(r, e, (o, n) => nC(o, n, 0)); } -function Mv(r, e, t10) { - if (t10 == null && (t10 = pf()), !pC(r, e, t10)) +function l0(r, e, t6) { + if (t6 == null && (t6 = Zm()), !nC(r, e, t6)) throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`); typeof expect != "undefined" && expect().nothing(); } -function pC(r, e, t10) { - return !isFinite(r) && !isFinite(e) ? true : !(isNaN(r) || isNaN(e) || Math.abs(r - e) > t10); +function nC(r, e, t6) { + return !isFinite(r) && !isFinite(e) ? true : !(isNaN(r) || isNaN(e) || Math.abs(r - e) > t6); } -function qW(r, e, t10) { +function dW(r, e, t6) { for (let o = 0; o < r.length; o++) - if (r[o] < e || r[o] > t10) - throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t10}`); + if (r[o] < e || r[o] > t6) + throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t6}`); } -function KW(r, e) { - let t10 = new Float32Array(r), o = new Float32Array(e); - if (t10.length !== o.length) - throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t10.length}`); +function fW(r, e) { + let t6 = new Float32Array(r), o = new Float32Array(e); + if (t6.length !== o.length) + throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t6.length}`); for (let n = 0; n < o.length; n++) - if (t10[n] !== o[n]) - throw new Error(`Expected ArrayBuffer value at ${n} to be ${o[n]} but got ${t10[n]} instead`); + if (t6[n] !== o[n]) + throw new Error(`Expected ArrayBuffer value at ${n} to be ${o[n]} but got ${t6[n]} instead`); } -function Lv(r) { +function m0(r) { for (let e = 0; e < r.length; e++) { - let t10 = r[e]; - Array.isArray(t10) ? Lv(t10) : r[e] = si(t10); + let t6 = r[e]; + Array.isArray(t6) ? m0(t6) : r[e] = gi(t6); } return r; } -function jW(r) { +function hW(r) { let e = document.createElement("video"); - return "playsInline" in e && (e.playsInline = true), e.muted = true, e.loop = true, e.style.position = "fixed", e.style.left = "0px", e.style.top = "0px", e.preload = "auto", e.appendChild(r), new Promise((t10) => { - e.addEventListener("loadeddata", (o) => t10(e)), e.load(); + return "playsInline" in e && (e.playsInline = true), e.muted = true, e.loop = true, e.style.position = "fixed", e.style.left = "0px", e.style.top = "0px", e.preload = "auto", e.appendChild(r), new Promise((t6) => { + e.addEventListener("loadeddata", (o) => t6(e)), e.load(); }); } -async function XW(r) { +async function gW(r) { await r.play(), "requestVideoFrameCallback" in r && await new Promise((e) => { r.requestVideoFrameCallback(e); }); } -var YW = "4.0.0"; -function QW(r, e) { - let t10 = v(r, "a", "add"), o = v(e, "b", "add"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(_r, n); +var xW = "4.1.0"; +function yW(r, e) { + let t6 = v(r, "a", "add"), o = v(e, "b", "add"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(eo, n); } -var ge = T({ add_: QW }); -function ZW(r, e) { - let t10 = v(r, "a", "floorDiv"), o = v(e, "b", "floorDiv"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(vn, n); +var xe = N({ add_: yW }); +function bW(r, e) { + let t6 = v(r, "a", "floorDiv"), o = v(e, "b", "floorDiv"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(sn, n); } -var cf = T({ floorDiv_: ZW }); -function JW(r, e) { - let t10 = v(r, "a", "div"), o = v(e, "b", "div"); - if ([t10, o] = Re(t10, o), t10.dtype === "int32" && o.dtype === "int32") - return cf(t10, o); - let n = { a: t10, b: o }, s = {}; - return N.runKernel(Cn, n, s); +var Jm = N({ floorDiv_: bW }); +function CW(r, e) { + let t6 = v(r, "a", "div"), o = v(e, "b", "div"); + if ([t6, o] = Re(t6, o), t6.dtype === "int32" && o.dtype === "int32") + return Jm(t6, o); + let n = { a: t6, b: o }, s = {}; + return T.runKernel(Jo, n, s); } -var We = T({ div_: JW }); -function eU(r, e) { - let t10 = v(r, "a", "mul"), o = v(e, "b", "mul"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(ho, n); +var Ge = N({ div_: CW }); +function SW(r, e) { + let t6 = v(r, "a", "mul"), o = v(e, "b", "mul"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(kn, n); } -var oe = T({ mul_: eU }); -function tU(r) { +var ae = N({ mul_: SW }); +function wW(r) { let e = v(r, "x", "abs"); if (e.dtype === "complex64") { - let t10 = { x: e }; - return N.runKernel(cp, t10); + let t6 = { x: e }; + return T.runKernel(pp, t6); } else { - let t10 = { x: e }; - return N.runKernel(sn, t10); + let t6 = { x: e }; + return T.runKernel(gs, t6); } } -var Qt = T({ abs_: tU }); -function rU(r) { - let t10 = { x: v(r, "x", "acos") }; - return N.runKernel(Li, t10); +var Yt = N({ abs_: wW }); +function IW(r) { + let t6 = { x: v(r, "x", "acos") }; + return T.runKernel(sa, t6); } -var Vv = T({ acos_: rU }); -function oU(r) { - let t10 = { x: v(r, "x", "acosh") }; - return N.runKernel(Bi, t10); +var f0 = N({ acos_: IW }); +function vW(r) { + let t6 = { x: v(r, "x", "acosh") }; + return T.runKernel(aa, t6); } -var zv = T({ acosh_: oU }); -function nU(r) { - $(Array.isArray(r), () => "The argument passed to tf.addN() must be a list of tensors"), $(r.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r.length}`); - let e = r.map((n, s) => v(n, `tensors${s}`, "addN")), t10 = e[0]; +var h0 = N({ acosh_: vW }); +function kW(r) { + E(Array.isArray(r), () => "The argument passed to tf.addN() must be a list of tensors"), E(r.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r.length}`); + let e = r.map((n, s) => v(n, `tensors${s}`, "addN")), t6 = e[0]; e.forEach((n) => { - if (n.dtype !== t10.dtype) + if (n.dtype !== t6.dtype) throw new Error("All tensors passed to tf.addN() must have the same dtype"); }), e.forEach((n) => { - if (!Or(n.shape, t10.shape)) + if (!Pr(n.shape, t6.shape)) throw new Error("All tensors passed to tf.addN() must have the same shape"); }); let o = e; - return N.runKernel(an, o); + return T.runKernel(Mo, o); } -var Wv = T({ addN_: nU }); -function sU(r, e = null, t10 = false) { - let n = { x: v(r, "x", "all", "bool") }, s = { axis: e, keepDims: t10 }; - return N.runKernel(oa, n, s); +var g0 = N({ addN_: kW }); +function NW(r, e = null, t6 = false) { + let n = { x: v(r, "x", "all", "bool") }, s = { axis: e, keepDims: t6 }; + return T.runKernel(Lo, n, s); } -var Uv = T({ all_: sU }); -function aU(r, e = null, t10 = false) { - let n = { x: v(r, "x", "any", "bool") }, s = { axis: e, keepDims: t10 }; - return N.runKernel(na, n, s); +var x0 = N({ all_: NW }); +function TW(r, e = null, t6 = false) { + let n = { x: v(r, "x", "any", "bool") }, s = { axis: e, keepDims: t6 }; + return T.runKernel(Bo, n, s); } -var Gv = T({ any_: aU }); -function iU(r, e = 0) { +var y0 = N({ any_: TW }); +function _W(r, e = 0) { let o = { x: v(r, "x", "argMax") }, n = { axis: e }; - return N.runKernel(un, o, n); + return T.runKernel(Vo, o, n); } -var Hv = T({ argMax_: iU }); -function uU(r, e = 0) { +var b0 = N({ argMax_: _W }); +function EW(r, e = 0) { let o = { x: v(r, "x", "argMin") }, n = { axis: e }; - return N.runKernel(ja, o, n); + return T.runKernel(Za, o, n); } -var qv = T({ argMin_: uU }); -function pU(r) { - let t10 = { x: v(r, "x", "asin") }; - return N.runKernel(Vi, t10); +var C0 = N({ argMin_: EW }); +function $W(r) { + let t6 = { x: v(r, "x", "asin") }; + return T.runKernel(ia, t6); } -var Kv = T({ asin_: pU }); -function cU(r) { - let t10 = { x: v(r, "x", "asinh") }; - return N.runKernel(zi, t10); +var S0 = N({ asin_: $W }); +function AW(r) { + let t6 = { x: v(r, "x", "asinh") }; + return T.runKernel(ua, t6); } -var jv = T({ asinh_: cU }); -function lU(r) { - let t10 = { x: v(r, "x", "atan") }; - return N.runKernel(Wi, t10); +var w0 = N({ asinh_: AW }); +function RW(r) { + let t6 = { x: v(r, "x", "atan") }; + return T.runKernel(pa, t6); } -var Xv = T({ atan_: lU }); -function mU(r, e) { - let t10 = v(r, "a", "atan2"), o = v(e, "b", "atan2"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(sa, n); +var I0 = N({ atan_: RW }); +function FW(r, e) { + let t6 = v(r, "a", "atan2"), o = v(e, "b", "atan2"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(la, n); } -var Yv = T({ atan2_: mU }); -function fU(r) { - let t10 = { x: v(r, "x", "atanh") }; - return N.runKernel(Ui, t10); +var v0 = N({ atan2_: FW }); +function DW(r) { + let t6 = { x: v(r, "x", "atanh") }; + return T.runKernel(ca, t6); } -var Qv = T({ atanh_: fU }); -function dU(r, e, t10, o, n = "NHWC", s) { - let a = r[3], i = [...e, a], p = Jv(n); - return uu(r, i, t10, s, o, null, null, p); +var k0 = N({ atanh_: DW }); +function OW(r, e, t6, o, n = "NHWC", s) { + let a = r[3], i = [...e, a], p = T0(n); + return uu(r, i, t6, s, o, null, null, p); } -function lC(r, e, t10, o, n, s, a = "channelsLast") { - let [i, p] = lf(e), u; +function aC(r, e, t6, o, n, s, a = "channelsLast") { + let [i, p] = ed(e), u; if (a === "channelsLast") u = [i, p, r[3], r[3]]; else if (a === "channelsFirst") u = [i, p, r[1], r[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return uu(r, u, t10, o, n, s, false, a); + return uu(r, u, t6, o, n, s, false, a); } -function hU(r, e, t10, o, n, s, a = "NDHWC") { - let [i, p, u] = cC(e), c, l; +function PW(r, e, t6, o, n, s, a = "NDHWC") { + let [i, p, u] = sC(e), c, l; if (a === "NDHWC") l = "channelsLast", c = [i, p, u, r[4], r[4]]; else if (a === "NCDHW") l = "channelsFirst", c = [i, p, u, r[1], r[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return Zv(r, c, t10, o, n, false, l, s); + return N0(r, c, t6, o, n, false, l, s); } -function uu(r, e, t10, o, n, s, a = false, i = "channelsLast") { +function uu(r, e, t6, o, n, s, a = false, i = "channelsLast") { let [p, u, c, l] = [-1, -1, -1, -1]; if (i === "channelsLast") [p, u, c, l] = r; @@ -6332,10 +6339,10 @@ function uu(r, e, t10, o, n, s, a = false, i = "channelsLast") { [p, l, u, c] = r; else throw new Error(`Unknown dataFormat ${i}`); - let [m, f, , d] = e, [h, g] = lf(t10), [y, b] = lf(o), C = Up(m, y), w = Up(f, b), { padInfo: k, outHeight: _, outWidth: E } = yU(n, u, c, h, g, C, w, s, i), R = a ? d * l : d, A; - return i === "channelsFirst" ? A = [p, R, _, E] : i === "channelsLast" && (A = [p, _, E, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: E, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: f, effectiveFilterHeight: C, effectiveFilterWidth: w, dilationHeight: y, dilationWidth: b, inShape: r, outShape: A, filterShape: e }; + let [m, d, , f] = e, [h, g] = ed(t6), [x, b] = ed(o), C = Lp(m, x), w = Lp(d, b), { padInfo: k, outHeight: _, outWidth: $ } = BW(n, u, c, h, g, C, w, s, i), A = a ? f * l : f, R; + return i === "channelsFirst" ? R = [p, A, _, $] : i === "channelsLast" && (R = [p, _, $, A]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: $, outChannels: A, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: C, effectiveFilterWidth: w, dilationHeight: x, dilationWidth: b, inShape: r, outShape: R, filterShape: e }; } -function Zv(r, e, t10, o, n, s = false, a = "channelsLast", i) { +function N0(r, e, t6, o, n, s = false, a = "channelsLast", i) { let [p, u, c, l, m] = [-1, -1, -1, -1, -1]; if (a === "channelsLast") [p, u, c, l, m] = r; @@ -6343,66 +6350,66 @@ function Zv(r, e, t10, o, n, s = false, a = "channelsLast", i) { [p, m, u, c, l] = r; else throw new Error(`Unknown dataFormat ${a}`); - let [f, d, h, , g] = e, [y, b, C] = cC(t10), [w, k, _] = cC(o), E = Up(f, w), R = Up(d, k), A = Up(h, _), { padInfo: D, outDepth: O, outHeight: M, outWidth: L } = bU(n, u, c, l, y, b, C, E, R, A, i), W = s ? g * m : g, V; - return a === "channelsFirst" ? V = [p, W, O, M, L] : a === "channelsLast" && (V = [p, O, M, L, W]), { batchSize: p, dataFormat: a, inDepth: u, inHeight: c, inWidth: l, inChannels: m, outDepth: O, outHeight: M, outWidth: L, outChannels: W, padInfo: D, strideDepth: y, strideHeight: b, strideWidth: C, filterDepth: f, filterHeight: d, filterWidth: h, effectiveFilterDepth: E, effectiveFilterHeight: R, effectiveFilterWidth: A, dilationDepth: w, dilationHeight: k, dilationWidth: _, inShape: r, outShape: V, filterShape: e }; + let [d, f, h, , g] = e, [x, b, C] = sC(t6), [w, k, _] = sC(o), $ = Lp(d, w), A = Lp(f, k), R = Lp(h, _), { padInfo: D, outDepth: P, outHeight: M, outWidth: L } = VW(n, u, c, l, x, b, C, $, A, R, i), W = s ? g * m : g, V; + return a === "channelsFirst" ? V = [p, W, P, M, L] : a === "channelsLast" && (V = [p, P, M, L, W]), { batchSize: p, dataFormat: a, inDepth: u, inHeight: c, inWidth: l, inChannels: m, outDepth: P, outHeight: M, outWidth: L, outChannels: W, padInfo: D, strideDepth: x, strideHeight: b, strideWidth: C, filterDepth: d, filterHeight: f, filterWidth: h, effectiveFilterDepth: $, effectiveFilterHeight: A, effectiveFilterWidth: R, dilationDepth: w, dilationHeight: k, dilationWidth: _, inShape: r, outShape: V, filterShape: e }; } -function gU(r, e, t10, o, n) { - o == null && (o = mC(r, e, t10)); - let s = r[0], a = r[1], i = au((s - e + 2 * o) / t10 + 1, n), p = au((a - e + 2 * o) / t10 + 1, n); +function MW(r, e, t6, o, n) { + o == null && (o = iC(r, e, t6)); + let s = r[0], a = r[1], i = au((s - e + 2 * o) / t6 + 1, n), p = au((a - e + 2 * o) / t6 + 1, n); return [i, p]; } -function xU(r, e, t10, o, n, s) { - n == null && (n = mC(r, e, o)); +function LW(r, e, t6, o, n, s) { + n == null && (n = iC(r, e, o)); let a = r[0], i = r[1], p = r[2], u = au((a - e + 2 * n) / o + 1, s), c = au((i - e + 2 * n) / o + 1, s), l = au((p - e + 2 * n) / o + 1, s); - return [u, c, l, t10]; + return [u, c, l, t6]; } -function mC(r, e, t10, o = 1) { - let n = Up(e, o); - return Math.floor((r[0] * (t10 - 1) - t10 + n) / 2); +function iC(r, e, t6, o = 1) { + let n = Lp(e, o); + return Math.floor((r[0] * (t6 - 1) - t6 + n) / 2); } -function lf(r) { +function ed(r) { return typeof r == "number" ? [r, r, r] : r.length === 2 ? [r[0], r[1], 1] : r; } -function cC(r) { +function sC(r) { return typeof r == "number" ? [r, r, r] : r; } -function Up(r, e) { +function Lp(r, e) { return e <= 1 ? r : r + (r - 1) * (e - 1); } -function yU(r, e, t10, o, n, s, a, i, p) { +function BW(r, e, t6, o, n, s, a, i, p) { let u, c, l; if (typeof r == "number") { u = { top: r, bottom: r, left: r, right: r, type: r === 0 ? "VALID" : "NUMBER" }; - let f = gU([e, t10], s, o, r, i); - c = f[0], l = f[1]; + let d = MW([e, t6], s, o, r, i); + c = d[0], l = d[1]; } else if (r === "same") { - c = Math.ceil(e / o), l = Math.ceil(t10 / n); - let m = Math.max(0, (c - 1) * o + s - e), f = Math.max(0, (l - 1) * n + a - t10), d = Math.floor(m / 2), h = m - d, g = Math.floor(f / 2), y = f - g; - u = { top: d, bottom: h, left: g, right: y, type: "SAME" }; + c = Math.ceil(e / o), l = Math.ceil(t6 / n); + let m = Math.max(0, (c - 1) * o + s - e), d = Math.max(0, (l - 1) * n + a - t6), f = Math.floor(m / 2), h = m - f, g = Math.floor(d / 2), x = d - g; + u = { top: f, bottom: h, left: g, right: x, type: "SAME" }; } else if (r === "valid") - u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }, c = Math.ceil((e - s + 1) / o), l = Math.ceil((t10 - a + 1) / n); + u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }, c = Math.ceil((e - s + 1) / o), l = Math.ceil((t6 - a + 1) / n); else if (typeof r == "object") { - let m = p === "channelsLast" ? r[1][0] : r[2][0], f = p === "channelsLast" ? r[1][1] : r[2][1], d = p === "channelsLast" ? r[2][0] : r[3][0], h = p === "channelsLast" ? r[2][1] : r[3][1]; - u = { top: m, bottom: f, left: d, right: h, type: m === 0 && f === 0 && d === 0 && h === 0 ? "VALID" : "EXPLICIT" }, c = au((e - s + m + f) / o + 1, i), l = au((t10 - a + d + h) / n + 1, i); + let m = p === "channelsLast" ? r[1][0] : r[2][0], d = p === "channelsLast" ? r[1][1] : r[2][1], f = p === "channelsLast" ? r[2][0] : r[3][0], h = p === "channelsLast" ? r[2][1] : r[3][1]; + u = { top: m, bottom: d, left: f, right: h, type: m === 0 && d === 0 && f === 0 && h === 0 ? "VALID" : "EXPLICIT" }, c = au((e - s + m + d) / o + 1, i), l = au((t6 - a + f + h) / n + 1, i); } else throw Error(`Unknown padding parameter: ${r}`); return { padInfo: u, outHeight: c, outWidth: l }; } -function bU(r, e, t10, o, n, s, a, i, p, u, c) { - let l, m, f, d; +function VW(r, e, t6, o, n, s, a, i, p, u, c) { + let l, m, d, f; if (typeof r == "number") { l = { top: r, bottom: r, left: r, right: r, front: r, back: r, type: r === 0 ? "VALID" : "NUMBER" }; - let g = xU([e, t10, o, 1], i, 1, n, r, c); - m = g[0], f = g[1], d = g[2]; + let g = LW([e, t6, o, 1], i, 1, n, r, c); + m = g[0], d = g[1], f = g[2]; } else if (r === "same") { - m = Math.ceil(e / n), f = Math.ceil(t10 / s), d = Math.ceil(o / a); - let h = (m - 1) * n + i - e, g = (f - 1) * s + p - t10, y = (d - 1) * a + u - o, b = Math.floor(h / 2), C = h - b, w = Math.floor(g / 2), k = g - w, _ = Math.floor(y / 2), E = y - _; - l = { top: w, bottom: k, left: _, right: E, front: b, back: C, type: "SAME" }; + m = Math.ceil(e / n), d = Math.ceil(t6 / s), f = Math.ceil(o / a); + let h = (m - 1) * n + i - e, g = (d - 1) * s + p - t6, x = (f - 1) * a + u - o, b = Math.floor(h / 2), C = h - b, w = Math.floor(g / 2), k = g - w, _ = Math.floor(x / 2), $ = x - _; + l = { top: w, bottom: k, left: _, right: $, front: b, back: C, type: "SAME" }; } else if (r === "valid") - l = { top: 0, bottom: 0, left: 0, right: 0, front: 0, back: 0, type: "VALID" }, m = Math.ceil((e - i + 1) / n), f = Math.ceil((t10 - p + 1) / s), d = Math.ceil((o - u + 1) / a); + l = { top: 0, bottom: 0, left: 0, right: 0, front: 0, back: 0, type: "VALID" }, m = Math.ceil((e - i + 1) / n), d = Math.ceil((t6 - p + 1) / s), f = Math.ceil((o - u + 1) / a); else throw Error(`Unknown padding parameter: ${r}`); - return { padInfo: l, outDepth: m, outHeight: f, outWidth: d }; + return { padInfo: l, outDepth: m, outHeight: d, outWidth: f }; } function au(r, e) { if (!e) @@ -6419,868 +6426,867 @@ function au(r, e) { } } function iu(r) { - let [e, t10, o] = lf(r); - return e === 1 && t10 === 1 && o === 1; + let [e, t6, o] = ed(r); + return e === 1 && t6 === 1 && o === 1; } function lr(r, e) { return iu(r) || iu(e); } -function Jv(r) { +function T0(r) { if (r === "NHWC") return "channelsLast"; if (r === "NCHW") return "channelsFirst"; throw new Error(`Unknown dataFormat ${r}`); } -function Ot(r, e, t10) { - if (t10 != null) { +function Pt(r, e, t6) { + if (t6 != null) { if (typeof e == "string") - throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t6} but got pad ${e}.`); if (typeof e == "number") - $(ra(e), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + E(na(e), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${t6} but got pad ${e}.`); else if (typeof e == "object") e.forEach((o) => { o.forEach((n) => { - $(ra(n), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${n}.`); + E(na(n), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${t6} but got pad ${n}.`); }); }); else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`); } } -function CU(r, e) { +function zW(r, e) { let o = { x: v(r, "x", "reshape", "string_or_numeric") }, n = { shape: e }; - return N.runKernel(Ss, o, n); + return T.runKernel(Ns, o, n); } -var z = T({ reshape_: CU }); -function IU(r, e, t10, o, n) { +var z = N({ reshape_: zW }); +function WW(r, e, t6, o, n) { let s = v(r, "x", "avgPool", "float32"), a = 1; - $(lr(t10, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`); + E(lr(t6, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${t6} and dilations '${a}'`); let i = s, p = false; - s.rank === 3 && (p = true, i = z(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), Ot("avgPool", o, n); - let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, l = N.runKernel(pn, u, c); - return l = qe(l, s.dtype), p ? z(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; + s.rank === 3 && (p = true, i = z(s, [1, s.shape[0], s.shape[1], s.shape[2]])), E(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), Pt("avgPool", o, n); + let u = { x: i }, c = { filterSize: e, strides: t6, pad: o, dimRoundingMode: n }, l = T.runKernel(zo, u, c); + return l = Ke(l, s.dtype), p ? z(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; } -var mf = T({ avgPool_: IU }); -function wU(r, e, t10, o, n, s = "NDHWC") { +var td = N({ avgPool_: WW }); +function UW(r, e, t6, o, n, s = "NDHWC") { let a = v(r, "x", "avgPool3d", "float32"), i = a, p = false; - a.rank === 4 && (p = true, i = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Ot("avgPool3d", o, n); - let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, l = N.runKernel(ip, u, c); - return l = qe(l, i.dtype), p ? z(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; + a.rank === 4 && (p = true, i = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), E(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Pt("avgPool3d", o, n); + let u = { x: i }, c = { filterSize: e, strides: t6, pad: o, dimRoundingMode: n, dataFormat: s }, l = T.runKernel(ip, u, c); + return l = Ke(l, i.dtype), p ? z(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; } -var ek = T({ avgPool3d_: wU }); -function SU(r, e = 0) { - $(r.length >= 1, () => "Pass at least one tensor to concat"); - let t10 = Ia(r, "tensors", "concat", "string_or_numeric"); - if (t10[0].dtype === "complex64" && t10.forEach((s) => { +var _0 = N({ avgPool3d_: UW }); +function GW(r, e = 0) { + E(r.length >= 1, () => "Pass at least one tensor to concat"); + let t6 = Na(r, "tensors", "concat", "string_or_numeric"); + if (t6[0].dtype === "complex64" && t6.forEach((s) => { if (s.dtype !== "complex64") throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${s.dtype}. `); - }), t10.length === 1) - return zr(t10[0]); - let o = t10, n = { axis: e }; - return N.runKernel(gs, o, n); + }), t6.length === 1) + return Br(t6[0]); + let o = t6, n = { axis: e }; + return T.runKernel(ys, o, n); } -var gt = T({ concat_: SU }); -function vU(r) { - let t10 = { x: v(r, "x", "sigmoid", "float32") }; - return N.runKernel(yo, t10); +var gt = N({ concat_: GW }); +function HW(r) { + let t6 = { x: v(r, "x", "sigmoid", "float32") }; + return T.runKernel(Un, t6); } -var Ms = T({ sigmoid_: vU }); -function kU(r, e, t10) { +var zs = N({ sigmoid_: HW }); +function qW(r, e, t6) { let o = v(r, "x", "slice", "string_or_numeric"); if (o.rank === 0) throw new Error("Slicing scalar is not possible"); - let n = { x: o }, s = { begin: e, size: t10 }; - return N.runKernel(qn, n, s); + let n = { x: o }, s = { begin: e, size: t6 }; + return T.runKernel(_s, n, s); } -var Ue = T({ slice_: kU }); -function TU(r) { - let t10 = { x: v(r, "x", "tanh", "float32") }; - return N.runKernel(Qn, t10); +var He = N({ slice_: qW }); +function KW(r) { + let t6 = { x: v(r, "x", "tanh", "float32") }; + return T.runKernel(Qn, t6); } -var ml = T({ tanh_: TU }); -function NU(r, e, t10, o, n, s) { - let a = v(r, "forgetBias", "basicLSTMCell"), i = v(e, "lstmKernel", "basicLSTMCell"), p = v(t10, "lstmBias", "basicLSTMCell"), u = v(o, "data", "basicLSTMCell"), c = v(n, "c", "basicLSTMCell"), l = v(s, "h", "basicLSTMCell"), m = gt([u, l], 1), f = Xe(m, i), d = ge(f, p), h = d.shape[0], g = d.shape[1] / 4, y = [h, g], b = Ue(d, [0, 0], y), C = Ue(d, [0, g], y), w = Ue(d, [0, g * 2], y), k = Ue(d, [0, g * 3], y), _ = ge(oe(Ms(b), ml(C)), oe(c, Ms(ge(a, w)))), E = oe(ml(_), Ms(k)); - return [_, E]; +var nl = N({ tanh_: KW }); +function jW(r, e, t6, o, n, s) { + let a = v(r, "forgetBias", "basicLSTMCell"), i = v(e, "lstmKernel", "basicLSTMCell"), p = v(t6, "lstmBias", "basicLSTMCell"), u = v(o, "data", "basicLSTMCell"), c = v(n, "c", "basicLSTMCell"), l = v(s, "h", "basicLSTMCell"), m = gt([u, l], 1), d = Xe(m, i), f = xe(d, p), h = f.shape[0], g = f.shape[1] / 4, x = [h, g], b = He(f, [0, 0], x), C = He(f, [0, g], x), w = He(f, [0, g * 2], x), k = He(f, [0, g * 3], x), _ = xe(ae(zs(b), nl(C)), ae(c, zs(xe(a, w)))), $ = ae(nl(_), zs(k)); + return [_, $]; } -var tk = T({ basicLSTMCell_: NU }); -function _U(r, e, t10) { +var E0 = N({ basicLSTMCell_: jW }); +function XW(r, e, t6) { let o = v(r, "x", "batchToSpaceND"), n = e.reduce((i, p) => i * p); - $(o.rank >= 1 + e.length, () => `input rank is ${o.rank} but should be > than blockShape.length ${e.length}`), $(t10.length === e.length, () => `crops.length is ${t10.length} but should be equal to blockShape.length ${e.length}`), $(o.shape[0] % n === 0, () => `input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`); - let s = { x: o }, a = { blockShape: e, crops: t10 }; - return N.runKernel(hs, s, a); + E(o.rank >= 1 + e.length, () => `input rank is ${o.rank} but should be > than blockShape.length ${e.length}`), E(t6.length === e.length, () => `crops.length is ${t6.length} but should be equal to blockShape.length ${e.length}`), E(o.shape[0] % n === 0, () => `input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`); + let s = { x: o }, a = { blockShape: e, crops: t6 }; + return T.runKernel(xs, s, a); } -var ff = T({ batchToSpaceND_: _U }); -function rk(r) { +var rd = N({ batchToSpaceND_: XW }); +function $0(r) { let e; return r.rank === 0 || r.rank === 1 ? e = z(r, [1, 1, 1, r.size]) : r.rank === 2 ? e = z(r, [1, 1, r.shape[0], r.shape[1]]) : r.rank === 3 ? e = z(r, [1, r.shape[0], r.shape[1], r.shape[2]]) : e = r, e; } -function EU(r, e, t10, o, n, s) { +function YW(r, e, t6, o, n, s) { s == null && (s = 1e-3); - let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; + let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t6, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - o != null && (c = v(o, "offset", "batchNorm")), $(i.rank === p.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."), $(c == null || i.rank === c.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."), $(u == null || i.rank === u.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); - let m = { x: rk(a), scale: u, offset: c, mean: i, variance: p }, f = { varianceEpsilon: s }, d = N.runKernel(kn, m, f); - return z(d, a.shape); + o != null && (c = v(o, "offset", "batchNorm")), E(i.rank === p.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."), E(c == null || i.rank === c.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."), E(u == null || i.rank === u.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + let m = { x: $0(a), scale: u, offset: c, mean: i, variance: p }, d = { varianceEpsilon: s }, f = T.runKernel(an, m, d); + return z(f, a.shape); } -var li = T({ batchNorm_: EU }); -function $U(r, e, t10, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var wi = N({ batchNorm_: YW }); +function QW(r, e, t6, o, n, s) { + let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t6, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), $(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), $(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 2 || c.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`), li(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), E(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), E(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 2 || c.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`), wi(a, i, p, c, u, s); } -var ok = T({ batchNorm2d_: $U }); -function RU(r, e, t10, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var A0 = N({ batchNorm2d_: QW }); +function ZW(r, e, t6, o, n, s) { + let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t6, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), $(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), $(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 3 || c.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`), li(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), E(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), E(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 3 || c.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`), wi(a, i, p, c, u, s); } -var nk = T({ batchNorm3d_: RU }); -function AU(r, e, t10, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var R0 = N({ batchNorm3d_: ZW }); +function JW(r, e, t6, o, n, s) { + let a = v(r, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t6, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), $(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), $(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 4 || c.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`), li(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), E(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), E(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 4 || c.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`), wi(a, i, p, c, u, s); } -var sk = T({ batchNorm4d_: AU }); -function FU(r, e, t10) { +var F0 = N({ batchNorm4d_: JW }); +function eU(r, e, t6) { let o = v(r, "x", "bincount"), n = v(e, "weights", "bincount"); - $(o.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${o.dtype}`), $(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), $(n.size === o.size || n.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`); - let s = { x: o, weights: n }, a = { size: t10 }; - return N.runKernel(up, s, a); + E(o.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${o.dtype}`), E(t6 >= 0, () => `size must be non-negative, but got ${t6}.`), E(n.size === o.size || n.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`); + let s = { x: o, weights: n }, a = { size: t6 }; + return T.runKernel(Ja, s, a); } -var df = T({ bincount_: FU }); -function DU(r, e) { - let t10 = v(r, "s0", "broadcastArgs", "int32"), o = v(e, "s1", "broadcastArgs", "int32"); - if (t10.rank !== 1) - throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t10.rank}`); +var od = N({ bincount_: eU }); +function tU(r, e) { + let t6 = v(r, "s0", "broadcastArgs", "int32"), o = v(e, "s1", "broadcastArgs", "int32"); + if (t6.rank !== 1) + throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t6.rank}`); if (o.rank !== 1) throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`); - let n = { s0: t10, s1: o }; - return N.runKernel(pp, n); + let n = { s0: t6, s1: o }; + return T.runKernel(up, n); } -var ak = T({ broadcastArgs_: DU }); -function PU(r, e) { - let t10 = v(r, "broadcastTo", "x"), o = t10.shape; - if (e.some((u) => !(u > 0) || u % 1 !== 0)) - throw new Error(`broadcastTo(): Invalid broadcast shape [${e}].`); - if (e.length < t10.rank) - throw new Error(`broadcastTo(): shape.length=${e.length} < input.rank=${t10.rank}.`); - if (e.length > t10.rank) { - let u = t10.shape.slice(); +var D0 = N({ broadcastArgs_: tU }); +function rU(r, e) { + let t6 = v(r, "broadcastTo", "x"), o = t6.shape; + if (yt(e), e.length < t6.rank) + throw new Error(`broadcastTo(): shape.length=${e.length} < input.rank=${t6.rank}.`); + if (e.length > t6.rank) { + let u = t6.shape.slice(); for (; u.length < e.length; ) u.unshift(1); - t10 = z(t10, u); + t6 = z(t6, u); } - let n = t10.shape, s = Array.from(e); + let n = t6.shape, s = Array.from(e); for (let u = e.length - 1; u >= 0; u--) if (n[u] === e[u]) s[u] = 1; - else if (t10.shape[u] !== 1) + else if (t6.shape[u] !== 1) throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`); if (s.map((u, c) => u > 1 ? c : -1).filter((u) => u >= 0).length === 0) - return zr(t10); - let i = { x: t10 }, p = { reps: s }; - return N.runKernel(wo, i, p); + return Br(t6); + let i = { x: t6 }, p = { reps: s }; + return T.runKernel(to, i, p); } -var Ls = T({ broadcastTo_: PU }); -function OU(r) { - let t10 = { x: v(r, "x", "ceil", "float32") }; - return N.runKernel(ro, t10); +var Ii = N({ broadcastTo_: rU }); +function oU(r) { + let t6 = { x: v(r, "x", "ceil", "float32") }; + return T.runKernel(Uo, t6); } -var ik = T({ ceil_: OU }); -function Bs(r, e, t10) { - let o = { shape: r, value: e, dtype: t10 }; - return N.runKernel(ys, {}, o); +var O0 = N({ ceil_: oU }); +function Ws(r, e, t6) { + yt(r); + let o = { shape: r, value: e, dtype: t6 }; + return T.runKernel(Cs, {}, o); } -function MU(r, e, t10) { +function nU(r, e, t6) { let o = v(r, "x", "clipByValue"); - if ($(e <= t10, () => `Error in clip: min (${e}) must be less than or equal to max (${t10}).`), e === t10) - return Bs(o.shape, e, o.dtype); - let n = { x: o }, s = { clipValueMin: e, clipValueMax: t10 }; - return N.runKernel(Ro, n, s); + if (E(e <= t6, () => `Error in clip: min (${e}) must be less than or equal to max (${t6}).`), e === t6) + return Ws(o.shape, e, o.dtype); + let n = { x: o }, s = { clipValueMin: e, clipValueMax: t6 }; + return T.runKernel(lo, n, s); } -var uk = T({ clipByValue_: MU }); -function LU(r) { +var P0 = N({ clipByValue_: nU }); +function sU(r) { return gt(r, 0); } -var pk = T({ concat1d_: LU }); -function BU(r, e) { +var M0 = N({ concat1d_: sU }); +function aU(r, e) { return gt(r, e); } -var ck = T({ concat2d_: BU }); -function VU(r, e) { +var L0 = N({ concat2d_: aU }); +function iU(r, e) { return gt(r, e); } -var lk = T({ concat3d_: VU }); -function zU(r, e) { +var B0 = N({ concat3d_: iU }); +function uU(r, e) { return gt(r, e); } -var mk = T({ concat4d_: zU }); -function WU(r, e, t10, o, n = "NHWC", s = [1, 1], a) { +var V0 = N({ concat4d_: uU }); +function pU(r, e, t6, o, n = "NHWC", s = [1, 1], a) { let i = v(r, "x", "conv2d", "float32"), p = v(e, "filter", "conv2d", "float32"), u = i, c = false; - i.rank === 3 && (c = true, u = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), Ot("conv2d", o, a); + i.rank === 3 && (c = true, u = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), E(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), Pt("conv2d", o, a); let l = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(l === p.shape[2], () => `Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`), $(lr(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`); - let m = { x: u, filter: p }, f = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, d = N.runKernel(ln, m, f); - return c ? z(d, [d.shape[1], d.shape[2], d.shape[3]]) : d; + E(l === p.shape[2], () => `Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`), E(lr(t6, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t6} and dilations '${s}'`); + let m = { x: u, filter: p }, d = { strides: t6, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(Go, m, d); + return c ? z(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; } -var mi = T({ conv2d_: WU }); -function UU(r, e, t10, o, n = "NWC", s = 1, a) { +var vi = N({ conv2d_: pU }); +function cU(r, e, t6, o, n = "NWC", s = 1, a) { let i = v(r, "x", "conv1d"), p = v(e, "filter", "conv1d"), u = i, c = false; - i.rank === 2 && (c = true, u = z(i, [1, i.shape[0], i.shape[1]])), $(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), $(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), Ot("conv1d", o, a), $(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), $(lr(t10, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${t10} and dilation '${s}'`), $(n === "NWC", () => `Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`); - let l = z(p, [1, p.shape[0], p.shape[1], p.shape[2]]), m = z(u, [u.shape[0], 1, u.shape[1], u.shape[2]]), g = mi(m, l, [1, t10], o, "NHWC", [1, s], a); + i.rank === 2 && (c = true, u = z(i, [1, i.shape[0], i.shape[1]])), E(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), E(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), Pt("conv1d", o, a), E(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), E(lr(t6, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${t6} and dilation '${s}'`), E(n === "NWC", () => `Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`); + let l = z(p, [1, p.shape[0], p.shape[1], p.shape[2]]), m = z(u, [u.shape[0], 1, u.shape[1], u.shape[2]]), g = vi(m, l, [1, t6], o, "NHWC", [1, s], a); return c ? z(g, [g.shape[2], g.shape[3]]) : z(g, [g.shape[0], g.shape[2], g.shape[3]]); } -var fk = T({ conv1d_: UU }); -function GU(r, e, t10, o, n, s = "NHWC", a) { - $(r.length === e.rank, () => `Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`); +var z0 = N({ conv1d_: cU }); +function lU(r, e, t6, o, n, s = "NHWC", a) { + E(r.length === e.rank, () => `Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`); let i = r, p = e, u = false; - e.rank === 3 && (u = true, p = z(e, [1, e.shape[0], e.shape[1], e.shape[2]]), i = [1, r[0], r[1], r[2]]), $(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), $(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), $(t10.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${t10.rank}`); + e.rank === 3 && (u = true, p = z(e, [1, e.shape[0], e.shape[1], e.shape[2]]), i = [1, r[0], r[1], r[2]]), E(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), E(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), E(t6.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${t6.rank}`); let c = s === "NHWC" ? i[3] : i[1], l = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(c === t10.shape[2], () => `Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t10.shape[2]}.`), $(l === t10.shape[3], () => `Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t10.shape[3]}.`), Ot("conv2dDerInput", n, a); - let m = { dy: p, filter: t10 }, f = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, inputShape: i }, d = N.runKernel(mn, m, f); - return u ? z(d, [d.shape[1], d.shape[2], d.shape[3]]) : d; + E(c === t6.shape[2], () => `Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t6.shape[2]}.`), E(l === t6.shape[3], () => `Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t6.shape[3]}.`), Pt("conv2dDerInput", n, a); + let m = { dy: p, filter: t6 }, d = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, inputShape: i }, f = T.runKernel(Ho, m, d); + return u ? z(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; } -var hf = T({ conv2DBackpropInput_: GU }); -function HU(r, e, t10, o, n, s) { +var nd = N({ conv2DBackpropInput_: lU }); +function mU(r, e, t6, o, n, s) { let a = v(r, "x", "conv2dTranspose"), i = v(e, "filter", "conv2dTranspose"); - return hf(t10, a, i, o, n, "NHWC", s); + return nd(t6, a, i, o, n, "NHWC", s); } -var dk = T({ conv2dTranspose_: HU }); -function qU(r, e, t10, o, n = "NDHWC", s = [1, 1, 1]) { +var W0 = N({ conv2dTranspose_: mU }); +function dU(r, e, t6, o, n = "NDHWC", s = [1, 1, 1]) { let a = v(r, "x", "conv3d"), i = v(e, "filter", "conv3d"), p = a, u = false; - a.rank === 4 && (u = true, p = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), $(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), $(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), $(lr(t10, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), $(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`); - let c = { x: p, filter: i }, l = { strides: t10, pad: o, dataFormat: n, dilations: s }, m = N.runKernel(mp, c, l); + a.rank === 4 && (u = true, p = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), E(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), E(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), E(lr(t6, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${t6} and dilations '${s}'`), E(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`); + let c = { x: p, filter: i }, l = { strides: t6, pad: o, dataFormat: n, dilations: s }, m = T.runKernel(lp, c, l); return u ? z(m, [m.shape[1], m.shape[2], m.shape[3], m.shape[4]]) : m; } -var hk = T({ conv3d_: qU }); -function KU(r, e, t10, o, n) { - $(r.length === e.rank, () => `Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`); +var U0 = N({ conv3d_: dU }); +function fU(r, e, t6, o, n) { + E(r.length === e.rank, () => `Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`); let s = r, a = e, i = false; e.rank === 4 && (i = true, a = z(e, [1, e.shape[0], e.shape[1], e.shape[2], e.shape[3]]), s = [1, r[0], r[1], r[2], r[3]]); let p = s[4], u = a.shape[4]; - $(s.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`), $(a.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`), $(t10.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${t10.rank}`), $(p === t10.shape[3], () => `Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t10.shape[3]}.`), $(u === t10.shape[4], () => `Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t10.shape[4]}.`); - let c = { dy: a, filter: t10 }, l = { pad: n, strides: o, inputShape: s }, m = N.runKernel(fp, c, l); + E(s.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`), E(a.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`), E(t6.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${t6.rank}`), E(p === t6.shape[3], () => `Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t6.shape[3]}.`), E(u === t6.shape[4], () => `Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t6.shape[4]}.`); + let c = { dy: a, filter: t6 }, l = { pad: n, strides: o, inputShape: s }, m = T.runKernel(mp, c, l); return i ? z(m, [m.shape[1], m.shape[2], m.shape[3], m.shape[4]]) : m; } -var gk = T({ conv3DBackpropInput_: KU }); -function jU(r, e, t10, o, n) { +var G0 = N({ conv3DBackpropInput_: fU }); +function hU(r, e, t6, o, n) { let s = v(r, "x", "conv3dTranspose"), a = v(e, "filter", "conv3dTranspose"); - return gk(t10, s, a, o, n); + return G0(t6, s, a, o, n); } -var xk = T({ conv3dTranspose_: jU }); -function XU(r) { - let t10 = { x: v(r, "x", "cos", "float32") }; - return N.runKernel(fn, t10); +var H0 = N({ conv3dTranspose_: hU }); +function gU(r) { + let t6 = { x: v(r, "x", "cos", "float32") }; + return T.runKernel(qo, t6); } -var yk = T({ cos_: XU }); -function YU(r) { - let t10 = { x: v(r, "x", "cosh", "float32") }; - return N.runKernel(dn, t10); +var q0 = N({ cos_: gU }); +function xU(r) { + let t6 = { x: v(r, "x", "cosh", "float32") }; + return T.runKernel(Ko, t6); } -var bk = T({ cosh_: YU }); -function QU(r, e = 0, t10 = false, o = false) { - let s = { x: v(r, "x", "cumprod") }, a = { axis: e, exclusive: t10, reverse: o }; - return N.runKernel(hn, s, a); +var K0 = N({ cosh_: xU }); +function yU(r, e = 0, t6 = false, o = false) { + let s = { x: v(r, "x", "cumprod") }, a = { axis: e, exclusive: t6, reverse: o }; + return T.runKernel(jo, s, a); } -var Ck = T({ cumprod_: QU }); -function ZU(r, e = 0, t10 = false, o = false) { - let s = { x: v(r, "x", "cumsum") }, a = { axis: e, exclusive: t10, reverse: o }; - return N.runKernel(gn, s, a); +var j0 = N({ cumprod_: yU }); +function bU(r, e = 0, t6 = false, o = false) { + let s = { x: v(r, "x", "cumsum") }, a = { axis: e, exclusive: t6, reverse: o }; + return T.runKernel(Xo, s, a); } -var Ik = T({ cumsum_: ZU }); -function JU(r, e, t10, o = false) { +var X0 = N({ cumsum_: bU }); +function CU(r, e, t6, o = false) { let n = v(r, "x", "denseBincount"), s = v(e, "weights", "denseBincount"); - $(n.dtype === "int32", () => `Error in denseBincount: input dtype must be int32, but got ${n.dtype}`), $(n.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`), $(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), $(s.size === n.size || s.size === 0, () => `Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`); - let a = { x: n, weights: s }, i = { size: t10, binaryOutput: o }; - return N.runKernel(dp, a, i); + E(n.dtype === "int32", () => `Error in denseBincount: input dtype must be int32, but got ${n.dtype}`), E(n.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`), E(t6 >= 0, () => `size must be non-negative, but got ${t6}.`), E(s.size === n.size || s.size === 0, () => `Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`); + let a = { x: n, weights: s }, i = { size: t6, binaryOutput: o }; + return T.runKernel(ti, a, i); } -var wk = T({ denseBincount_: JU }); -function eG(r, e, t10 = "NHWC") { - let o = v(r, "x", "depthToSpace", "float32"), n = t10 === "NHWC" ? o.shape[1] : o.shape[2], s = t10 === "NHWC" ? o.shape[2] : o.shape[3], a = t10 === "NHWC" ? o.shape[3] : o.shape[1]; - $(e > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${e}`), $(n * e >= 0, () => `Negative dimension size caused by overflow when multiplying +var Y0 = N({ denseBincount_: CU }); +function SU(r, e, t6 = "NHWC") { + let o = v(r, "x", "depthToSpace", "float32"), n = t6 === "NHWC" ? o.shape[1] : o.shape[2], s = t6 === "NHWC" ? o.shape[2] : o.shape[3], a = t6 === "NHWC" ? o.shape[3] : o.shape[1]; + E(e > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${e}`), E(n * e >= 0, () => `Negative dimension size caused by overflow when multiplying ${n} and ${e} for depthToSpace with input shape - ${o.shape}`), $(s * e >= 0, () => `Negative dimension size caused by overflow when multiplying + ${o.shape}`), E(s * e >= 0, () => `Negative dimension size caused by overflow when multiplying ${s} and ${e} for depthToSpace with input shape - ${o.shape}`), $(a % (e * e) === 0, () => `Dimension size must be evenly divisible by ${e * e} but is ${a} for depthToSpace with input shape ${o.shape}`); - let i = { x: o }, p = { blockSize: e, dataFormat: t10 }; - return N.runKernel(yn, i, p); + ${o.shape}`), E(a % (e * e) === 0, () => `Dimension size must be evenly divisible by ${e * e} but is ${a} for depthToSpace with input shape ${o.shape}`); + let i = { x: o }, p = { blockSize: e, dataFormat: t6 }; + return T.runKernel(Qo, i, p); } -var Sk = T({ depthToSpace_: eG }); -function tG(r, e, t10, o, n = "NHWC", s = [1, 1], a) { +var Q0 = N({ depthToSpace_: SU }); +function wU(r, e, t6, o, n = "NHWC", s = [1, 1], a) { let i = v(r, "x", "depthwiseConv2d", "float32"), p = v(e, "filter", "depthwiseConv2d", "float32"), u = i, c = false; - i.rank === 3 && (c = true, u = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`); + i.rank === 3 && (c = true, u = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(u.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`), E(p.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`); let l = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(l === p.shape[2], () => `Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`), Ot("depthwiseConv2d", o, a); - let m = { x: u, filter: p }, f = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, d = N.runKernel(bn, m, f); - return c ? z(d, [d.shape[1], d.shape[2], d.shape[3]]) : d; + E(l === p.shape[2], () => `Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`), Pt("depthwiseConv2d", o, a); + let m = { x: u, filter: p }, d = { strides: t6, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(Zo, m, d); + return c ? z(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; } -var Gp = T({ depthwiseConv2d_: tG }); -function rG(r) { - let t10 = { x: v(r, "x", "diag") }; - return N.runKernel(xp, t10); +var Bp = N({ depthwiseConv2d_: wU }); +function IU(r) { + let t6 = { x: v(r, "x", "diag") }; + return T.runKernel(hp, t6); } -var vk = T({ diag_: rG }); -function oG(r, e, t10, o, n = [1, 1], s = "NHWC") { +var Z0 = N({ diag_: IU }); +function vU(r, e, t6, o, n = [1, 1], s = "NHWC") { let a = v(r, "x", "dilation2d"), i = v(e, "filter", "dilation2d"); - $(a.rank === 3 || a.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`), $(i.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`), $(s === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`); + E(a.rank === 3 || a.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`), E(i.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`), E(s === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`); let p = a, u = false; a.rank === 3 && (p = z(a, [1, a.shape[0], a.shape[1], a.shape[2]]), u = true); - let c = { x: p, filter: i }, l = { strides: t10, pad: o, dilations: n }, m = N.runKernel(yp, c, l); + let c = { x: p, filter: i }, l = { strides: t6, pad: o, dilations: n }, m = T.runKernel(gp, c, l); return u ? z(m, [m.shape[1], m.shape[2], m.shape[3]]) : m; } -var kk = T({ dilation2d_: oG }); -function nG(r, e) { - let t10 = v(r, "a", "equal", "string_or_numeric"), o = v(e, "b", "equal", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(oo, n); +var J0 = N({ dilation2d_: vU }); +function kU(r, e) { + let t6 = v(r, "a", "equal", "string_or_numeric"), o = v(e, "b", "equal", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(tn, n); } -var gf = T({ equal_: nG }); -function sG(r, e, t10) { - let o = v(e, "a", "where"), n = v(t10, "b", "where"), s = v(r, "condition", "where", "bool"), a = Je(Je(s.shape, o.shape), n.shape), i = Ls(s, a), p = Ls(o, a), u = Ls(n, a), c = { condition: i, t: p, e: u }; - return N.runKernel(vs, c); +var sd = N({ equal_: kU }); +function NU(r, e, t6) { + let o = v(e, "a", "where"), n = v(t6, "b", "where"), s = v(r, "condition", "where", "bool"), a = Je(Je(s.shape, o.shape), n.shape), i = Ii(s, a), p = Ii(o, a), u = Ii(n, a), c = { condition: i, t: p, e: u }; + return T.runKernel(Ts, c); } -var os = T({ where_: sG }); -function aG(r) { - let t10 = { x: v(r, "x", "zerosLike") }; - return N.runKernel(Es, t10); +var os = N({ where_: NU }); +function TU(r) { + let t6 = { x: v(r, "x", "zerosLike") }; + return T.runKernel(Fs, t6); } -var Gt = T({ zerosLike_: aG }); -function iG(r, e) { - let t10 = v(r, "a", "div"), o = v(e, "b", "div"); - [t10, o] = Re(t10, o); - let n = We(t10, o), s = Gt(n), a = gf(o, s); +var Ut = N({ zerosLike_: TU }); +function _U(r, e) { + let t6 = v(r, "a", "div"), o = v(e, "b", "div"); + [t6, o] = Re(t6, o); + let n = Ge(t6, o), s = Ut(n), a = sd(o, s); return os(a, s, n); } -var Tk = T({ divNoNan_: iG }); -function uG(r, e) { - let t10 = v(r, "t1", "dot"), o = v(e, "t2", "dot"); - $((t10.rank === 1 || t10.rank === 2) && (o.rank === 1 || o.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${t10.rank} and ${o.rank}.`); - let n = t10.rank === 1 ? t10.size : t10.shape[1], s = o.rank === 1 ? o.size : o.shape[0]; - if ($(n === s, () => `Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`), t10.rank === 1 && o.rank === 1) { - let a = z(t10, [1, -1]), i = z(o, [-1, 1]), p = Xe(a, i); +var ek = N({ divNoNan_: _U }); +function EU(r, e) { + let t6 = v(r, "t1", "dot"), o = v(e, "t2", "dot"); + E((t6.rank === 1 || t6.rank === 2) && (o.rank === 1 || o.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${t6.rank} and ${o.rank}.`); + let n = t6.rank === 1 ? t6.size : t6.shape[1], s = o.rank === 1 ? o.size : o.shape[0]; + if (E(n === s, () => `Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`), t6.rank === 1 && o.rank === 1) { + let a = z(t6, [1, -1]), i = z(o, [-1, 1]), p = Xe(a, i); return z(p, []); - } else if (t10.rank === 1 && o.rank === 2) { - let a = z(t10, [1, -1]), i = z(o, [o.shape[0], o.shape[1]]), p = Xe(a, i); + } else if (t6.rank === 1 && o.rank === 2) { + let a = z(t6, [1, -1]), i = z(o, [o.shape[0], o.shape[1]]), p = Xe(a, i); return z(p, [p.size]); - } else if (t10.rank === 2 && o.rank === 1) { - let a = z(o, [-1, 1]), i = Xe(t10, a); + } else if (t6.rank === 2 && o.rank === 1) { + let a = z(o, [-1, 1]), i = Xe(t6, a); return z(i, [i.size]); } else { let a = z(o, [o.shape[0], o.shape[1]]); - return Xe(t10, a); + return Xe(t6, a); } } -var Nk = T({ dot_: uG }); -function pG(r, ...e) { - let t10 = e.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r }; - return N.runKernel(Xa, t10, o); +var tk = N({ dot_: EU }); +function $U(r, ...e) { + let t6 = e.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r }; + return T.runKernel(ri, t6, o); } -var _k = T({ einsum_: pG }); -function cG(r) { - let t10 = { x: v(r, "x", "elu", "float32") }; - return N.runKernel(In, t10); +var rk = N({ einsum_: $U }); +function AU(r) { + let t6 = { x: v(r, "x", "elu", "float32") }; + return T.runKernel(en, t6); } -var xf = T({ elu_: cG }); -function lG(r) { +var ad = N({ elu_: AU }); +function RU(r) { let e = v(r, "x", "erf"); - $(e.dtype === "int32" || e.dtype === "float32", () => "Input dtype must be `int32` or `float32`."), e.dtype === "int32" && (e = qe(e, "float32")); - let t10 = { x: e }; - return N.runKernel(Gi, t10); + E(e.dtype === "int32" || e.dtype === "float32", () => "Input dtype must be `int32` or `float32`."), e.dtype === "int32" && (e = Ke(e, "float32")); + let t6 = { x: e }; + return T.runKernel(ma, t6); } -var Ek = T({ erf_: lG }); -function fC(r, e) { - for (let t10 = 0; t10 < r.length; ++t10) - if (r[r.length - t10 - 1] !== e - 1 - t10) +var ok = N({ erf_: RU }); +function uC(r, e) { + for (let t6 = 0; t6 < r.length; ++t6) + if (r[r.length - t6 - 1] !== e - 1 - t6) return false; return true; } -function $k(r, e, t10) { +function nk(r, e, t6) { let o = r.length + e.length, n = [], s = 0, a = 0; for (let i = 0; i < o; i++) - t10.indexOf(i) === -1 ? n.push(r[s++]) : n.push(e[a++]); + t6.indexOf(i) === -1 ? n.push(r[s++]) : n.push(e[a++]); return n; } -function mG(r, e) { - let t10 = [], o = r.length; +function FU(r, e) { + let t6 = [], o = r.length; for (let s = 0; s < o; s++) - e.indexOf(s) === -1 && t10.push(r[s]); + e.indexOf(s) === -1 && t6.push(r[s]); let n = e.map((s) => r[s]); - return [t10, n]; + return [t6, n]; } -function Ta(r, e) { - let t10 = e.map((o) => 1); - return $k(r, t10, e); +function Aa(r, e) { + let t6 = e.map((o) => 1); + return nk(r, t6, e); } -function fG(r, e, t10) { - $(fC(e, t10), () => `${r} supports only inner-most axes for now. Got axes ${e} and rank-${t10} input.`); +function DU(r, e, t6) { + E(uC(e, t6), () => `${r} supports only inner-most axes for now. Got axes ${e} and rank-${t6} input.`); } -function dG(r, e) { - if (fC(r, e)) +function OU(r, e) { + if (uC(r, e)) return null; - let t10 = []; + let t6 = []; for (let o = 0; o < e; ++o) - r.indexOf(o) === -1 && t10.push(o); - return r.forEach((o) => t10.push(o)), t10; + r.indexOf(o) === -1 && t6.push(o); + return r.forEach((o) => t6.push(o)), t6; } -function hG(r) { - return r.map((e, t10) => [t10, e]).sort((e, t10) => e[1] - t10[1]).map((e) => e[0]); +function PU(r) { + return r.map((e, t6) => [t6, e]).sort((e, t6) => e[1] - t6[1]).map((e) => e[0]); } -function gG(r, e) { - let t10 = []; +function MU(r, e) { + let t6 = []; for (let o = e - r; o < e; ++o) - t10.push(o); - return t10; + t6.push(o); + return t6; } -function yG(r, e = null, t10 = false) { - let n = { x: v(r, "x", "max") }, s = { reductionIndices: e, keepDims: t10 }; - return N.runKernel($n, n, s); +function BU(r, e = null, t6 = false) { + let n = { x: v(r, "x", "max") }, s = { reductionIndices: e, keepDims: t6 }; + return T.runKernel(yn, n, s); } -var Vs = T({ max_: yG }); -function bG(r, e = null, t10 = false) { - let n = { x: v(r, "x", "min") }, s = { axis: e, keepDims: t10 }; - return N.runKernel(Fn, n, s); +var Us = N({ max_: BU }); +function VU(r, e = null, t6 = false) { + let n = { x: v(r, "x", "min") }, s = { axis: e, keepDims: t6 }; + return T.runKernel(wn, n, s); } -var fl = T({ min_: bG }); -function CG(r, e) { - let t10 = v(r, "base", "pow"), o = v(e, "exp", "pow"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(Bn, n); +var sl = N({ min_: VU }); +function zU(r, e) { + let t6 = v(r, "base", "pow"), o = v(e, "exp", "pow"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(An, n); } -var Na = T({ pow_: CG }); +var Ra = N({ pow_: zU }); function be(r, e) { - if ((Ut(r) && e !== "string" || Array.isArray(r)) && e !== "complex64") + if ((Wt(r) && e !== "string" || Array.isArray(r)) && e !== "complex64") throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); - if (e === "string" && Ut(r) && !(r instanceof Uint8Array)) + if (e === "string" && Wt(r) && !(r instanceof Uint8Array)) throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); return xr(r, [], [], e); } -function IG(r) { - let t10 = { x: v(r, "x", "sqrt", "float32") }; - return N.runKernel(bo, t10); +function WU(r) { + let t6 = { x: v(r, "x", "sqrt", "float32") }; + return T.runKernel(Gn, t6); } -var Rr = T({ sqrt_: IG }); -function wG(r) { - let e = v(r, "x", "square"), t10 = {}; - return N.runKernel("Square", { x: e }, t10); +var $r = N({ sqrt_: WU }); +function UU(r) { + let e = v(r, "x", "square"), t6 = {}; + return T.runKernel("Square", { x: e }, t6); } -var Zt = T({ square_: wG }); -function SG(r, e = null, t10 = false) { +var Qt = N({ square_: UU }); +function GU(r, e = null, t6 = false) { let o = v(r, "x", "sum"); - o.dtype === "bool" && (o = qe(o, "int32")); - let n = { x: o }, s = { axis: e, keepDims: t10 }; - return N.runKernel(jn, n, s); + o.dtype === "bool" && (o = Ke(o, "int32")); + let n = { x: o }, s = { axis: e, keepDims: t6 }; + return T.runKernel(Hn, n, s); } -var tt = T({ sum_: SG }); -function vG(r, e = "euclidean", t10 = null, o = false) { +var et = N({ sum_: GU }); +function HU(r, e = "euclidean", t6 = null, o = false) { r = v(r, "x", "norm"); - let n = Rk(r, e, t10), s = n.shape; + let n = sk(r, e, t6), s = n.shape; if (o) { - let a = Ka(t10, r.shape); - s = Ta(n.shape, a); + let a = Qa(t6, r.shape); + s = Aa(n.shape, a); } return z(n, s); } -function Rk(r, e, t10 = null) { +function sk(r, e, t6 = null) { if (r.rank === 0) - return Qt(r); - if (r.rank !== 1 && t10 === null) - return Rk(z(r, [-1]), e, t10); - if (r.rank === 1 || typeof t10 == "number" || Array.isArray(t10) && t10.length === 1) { + return Yt(r); + if (r.rank !== 1 && t6 === null) + return sk(z(r, [-1]), e, t6); + if (r.rank === 1 || typeof t6 == "number" || Array.isArray(t6) && t6.length === 1) { if (e === 1) - return tt(Qt(r), t10); + return et(Yt(r), t6); if (e === 1 / 0) - return Vs(Qt(r), t10); + return Us(Yt(r), t6); if (e === -1 / 0) - return fl(Qt(r), t10); + return sl(Yt(r), t6); if (e === "euclidean" || e === 2) - return Rr(tt(Na(Qt(r), be(2, "int32")), t10)); + return $r(et(Ra(Yt(r), be(2, "int32")), t6)); throw new Error(`Error in norm: invalid ord value: ${e}`); } - if (Array.isArray(t10) && t10.length === 2) { + if (Array.isArray(t6) && t6.length === 2) { if (e === 1) - return Vs(tt(Qt(r), t10[0]), t10[1] - 1); + return Us(et(Yt(r), t6[0]), t6[1] - 1); if (e === 1 / 0) - return Vs(tt(Qt(r), t10[1]), t10[0]); + return Us(et(Yt(r), t6[1]), t6[0]); if (e === -1 / 0) - return fl(tt(Qt(r), t10[1]), t10[0]); + return sl(et(Yt(r), t6[1]), t6[0]); if (e === "fro" || e === "euclidean") - return Rr(tt(Zt(r), t10)); + return $r(et(Qt(r), t6)); throw new Error(`Error in norm: invalid ord value: ${e}`); } - throw new Error(`Error in norm: invalid axis: ${t10}`); + throw new Error(`Error in norm: invalid axis: ${t6}`); } -var pu = T({ norm_: vG }); -function kG(r, e = null, t10 = false) { - return pu(r, "euclidean", e, t10); +var pu = N({ norm_: HU }); +function qU(r, e = null, t6 = false) { + return pu(r, "euclidean", e, t6); } -var Ak = T({ euclideanNorm_: kG }); -function TG(r) { - let t10 = { x: v(r, "x", "exp") }; - return N.runKernel(no, t10); +var ak = N({ euclideanNorm_: qU }); +function KU(r) { + let t6 = { x: v(r, "x", "exp") }; + return T.runKernel(rn, t6); } -var Bo = T({ exp_: TG }); -function NG(r, e = 0) { - let t10 = v(r, "x", "expandDims", "string_or_numeric"); - $(e <= t10.rank, () => "Axis must be <= rank of the tensor"); - let o = { input: t10 }, n = { dim: e }; - return N.runKernel(xs, o, n); +var Co = N({ exp_: KU }); +function jU(r, e = 0) { + let t6 = v(r, "x", "expandDims", "string_or_numeric"); + E(e <= t6.rank, () => "Axis must be <= rank of the tensor"); + let o = { input: t6 }, n = { dim: e }; + return T.runKernel(bs, o, n); } -var _a = T({ expandDims_: NG }); -function _G(r) { - let t10 = { x: v(r, "x", "expm1") }; - return N.runKernel(wn, t10); +var Fa = N({ expandDims_: jU }); +function XU(r) { + let t6 = { x: v(r, "x", "expm1") }; + return T.runKernel(da, t6); } -var Fk = T({ expm1_: _G }); -function EG(r, e) { - let t10 = v(r, "x", "tile", "string_or_numeric"); - $(t10.rank === e.length, () => `Error in transpose: rank of input ${t10.rank} must match length of reps ${e}.`); - let o = { x: t10 }, n = { reps: e }; - return N.runKernel(wo, o, n); +var ik = N({ expm1_: XU }); +function YU(r, e) { + let t6 = v(r, "x", "tile", "string_or_numeric"); + E(t6.rank === e.length, () => `Error in transpose: rank of input ${t6.rank} must match length of reps ${e}.`); + let o = { x: t6 }, n = { reps: e }; + return T.runKernel(to, o, n); } -var fi = T({ tile_: EG }); -function $G(r, e, t10, o = "float32") { +var ki = N({ tile_: YU }); +function QU(r, e, t6, o = "float32") { e == null && (e = r); - let n = ne([r, e], o), s = r <= e ? r : e; + let n = le([r, e], o), s = r <= e ? r : e; for (let i = 0; i < s; ++i) n.set(1, i, i); let a = z(n.toTensor(), [r, e]); - if (t10 == null) + if (t6 == null) return a; - if (t10.length === 1) - return fi(_a(a, 0), [t10[0], 1, 1]); - if (t10.length === 2) - return fi(_a(_a(a, 0), 0), [t10[0], t10[1], 1, 1]); - if (t10.length === 3) - return fi(_a(_a(_a(a, 0), 0), 0), [t10[0], t10[1], t10[2], 1, 1]); - throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${t10.length}D.`); + if (t6.length === 1) + return ki(Fa(a, 0), [t6[0], 1, 1]); + if (t6.length === 2) + return ki(Fa(Fa(a, 0), 0), [t6[0], t6[1], 1, 1]); + if (t6.length === 3) + return ki(Fa(Fa(Fa(a, 0), 0), 0), [t6[0], t6[1], t6[2], 1, 1]); + throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${t6.length}D.`); } -var yf = T({ eye_: $G }); -function RG(r) { - let t10 = { x: v(r, "x", "floor", "float32") }; - return N.runKernel(so, t10); +var id = N({ eye_: QU }); +function ZU(r) { + let t6 = { x: v(r, "x", "floor", "float32") }; + return T.runKernel(nn, t6); } -var bf = T({ floor_: RG }); -function AG(r, e, t10 = 0, o = 0) { - let n = v(r, "x", "gather"), s = v(e, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: t10, batchDims: o }; - return N.runKernel(bs, a, i); +var ud = N({ floor_: ZU }); +function JU(r, e, t6 = 0, o = 0) { + let n = v(r, "x", "gather"), s = v(e, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: t6, batchDims: o }; + return T.runKernel(Ss, a, i); } -var Cf = T({ gather_: AG }); -function FG(r, e) { - let t10 = v(r, "a", "greater", "string_or_numeric"), o = v(e, "b", "greater", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(ao, n); +var pd = N({ gather_: JU }); +function e4(r, e) { + let t6 = v(r, "a", "greater", "string_or_numeric"), o = v(e, "b", "greater", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(pn, n); } -var cu = T({ greater_: FG }); -function DG(r, e) { - let t10 = v(r, "a", "greaterEqual", "string_or_numeric"), o = v(e, "b", "greaterEqual", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(io, n); +var cu = N({ greater_: e4 }); +function t4(r, e) { + let t6 = v(r, "a", "greaterEqual", "string_or_numeric"), o = v(e, "b", "greaterEqual", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(cn, n); } -var If = T({ greaterEqual_: DG }); -function PG(r) { - let t10 = { x: v(r, "x", "isFinite") }; - return N.runKernel(Hi, t10); +var cd = N({ greaterEqual_: t4 }); +function r4(r) { + let t6 = { x: v(r, "x", "isFinite") }; + return T.runKernel(fa, t6); } -var Dk = T({ isFinite_: PG }); -function OG(r) { - let t10 = { x: v(r, "x", "isInf") }; - return N.runKernel(qi, t10); +var uk = N({ isFinite_: r4 }); +function o4(r) { + let t6 = { x: v(r, "x", "isInf") }; + return T.runKernel(ha, t6); } -var Pk = T({ isInf_: OG }); -function MG(r) { - let t10 = { x: v(r, "x", "isNaN") }; - return N.runKernel(ia, t10); +var pk = N({ isInf_: o4 }); +function n4(r) { + let t6 = { x: v(r, "x", "isNaN") }; + return T.runKernel(ln, t6); } -var Ok = T({ isNaN_: MG }); -function LG(r, e = 0.2) { +var ck = N({ isNaN_: n4 }); +function s4(r, e = 0.2) { let o = { x: v(r, "x", "leakyRelu") }, n = { alpha: e }; - return N.runKernel(Nn, o, n); + return T.runKernel(mn, o, n); } -var wf = T({ leakyRelu_: LG }); -function BG(r, e) { - let t10 = v(r, "a", "less", "string_or_numeric"), o = v(e, "b", "less", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(po, n); +var ld = N({ leakyRelu_: s4 }); +function a4(r, e) { + let t6 = v(r, "a", "less", "string_or_numeric"), o = v(e, "b", "less", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(dn, n); } -var Mk = T({ less_: BG }); -function VG(r, e) { - let t10 = v(r, "a", "lessEqual", "string_or_numeric"), o = v(e, "b", "lessEqual", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(co, n); +var lk = N({ less_: a4 }); +function i4(r, e) { + let t6 = v(r, "a", "lessEqual", "string_or_numeric"), o = v(e, "b", "lessEqual", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(fn, n); } -var Hp = T({ lessEqual_: VG }); -function Lk(r, e, t10) { - if (t10 <= 0) +var Vp = N({ lessEqual_: i4 }); +function mk(r, e, t6) { + if (t6 <= 0) throw new Error("The number of values should be positive."); - let o = { start: r, stop: e, num: t10 }; - return N.runKernel(Ip, {}, o); + let o = { start: r, stop: e, num: t6 }; + return T.runKernel(xp, {}, o); } -function zG(r, e = 5, t10 = 1, o = 1, n = 0.5) { +function u4(r, e = 5, t6 = 1, o = 1, n = 0.5) { let s = v(r, "x", "localResponseNormalization"); - $(s.rank === 4 || s.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`), $(ra(e), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`); + E(s.rank === 4 || s.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`), E(na(e), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`); let a = s, i = false; s.rank === 3 && (i = true, a = z(s, [1, s.shape[0], s.shape[1], s.shape[2]])); - let p = { x: a }, u = { depthRadius: e, bias: t10, alpha: o, beta: n }, c = N.runKernel(wp, p, u); + let p = { x: a }, u = { depthRadius: e, bias: t6, alpha: o, beta: n }, c = T.runKernel(yp, p, u); return i ? z(c, [c.shape[1], c.shape[2], c.shape[3]]) : c; } -var Bk = T({ localResponseNormalization_: zG }); -function WG(r) { - let t10 = { x: v(r, "x", "log", "float32") }; - return N.runKernel(lo, t10); +var dk = N({ localResponseNormalization_: u4 }); +function p4(r) { + let t6 = { x: v(r, "x", "log", "float32") }; + return T.runKernel(hn, t6); } -var Ea = T({ log_: WG }); -function UG(r) { - let t10 = { x: v(r, "x", "log1p") }; - return N.runKernel(Ki, t10); +var Da = N({ log_: p4 }); +function c4(r) { + let t6 = { x: v(r, "x", "log1p") }; + return T.runKernel(ga, t6); } -var Sf = T({ log1p_: UG }); -function GG(r) { - return $(fs(r), () => "The f passed in grad(f) must be a function"), (e, t10) => { - let o = v(e, "x", "tf.grad", "string_or_numeric"), n = t10 != null ? v(t10, "dy", "tf.grad") : null; - return N.tidy(() => { - let { value: s, grads: a } = N.gradients(() => r(o), [o], n); - return n != null && ht(s.shape, n.shape, "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"), vf(a), a[0]; +var md = N({ log1p_: c4 }); +function l4(r) { + return E(fs(r), () => "The f passed in grad(f) must be a function"), (e, t6) => { + let o = v(e, "x", "tf.grad", "string_or_numeric"), n = t6 != null ? v(t6, "dy", "tf.grad") : null; + return T.tidy(() => { + let { value: s, grads: a } = T.gradients(() => r(o), [o], n); + return n != null && ht(s.shape, n.shape, "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"), dd(a), a[0]; }); }; } -function HG(r) { - return $(fs(r), () => "The f passed in grads(f) must be a function"), (e, t10) => { - $(Array.isArray(e), () => "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"); - let o = Ia(e, "args", "tf.grads", "string_or_numeric"), n = t10 != null ? v(t10, "dy", "tf.grads") : null; - return N.tidy(() => { - let { value: s, grads: a } = N.gradients(() => r(...o), o, n); - return n != null && ht(s.shape, n.shape, "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), vf(a), a; +function m4(r) { + return E(fs(r), () => "The f passed in grads(f) must be a function"), (e, t6) => { + E(Array.isArray(e), () => "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"); + let o = Na(e, "args", "tf.grads", "string_or_numeric"), n = t6 != null ? v(t6, "dy", "tf.grads") : null; + return T.tidy(() => { + let { value: s, grads: a } = T.gradients(() => r(...o), o, n); + return n != null && ht(s.shape, n.shape, "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), dd(a), a; }); }; } -function qG(r) { - return $(fs(r), () => "The f passed in valueAndGrad(f) must be a function"), (e, t10) => { - $(e instanceof ut, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), $(t10 == null || t10 instanceof ut, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); - let { grads: o, value: n } = N.gradients(() => r(e), [e], t10); - return vf(o), { grad: o[0], value: n }; +function d4(r) { + return E(fs(r), () => "The f passed in valueAndGrad(f) must be a function"), (e, t6) => { + E(e instanceof it, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), E(t6 == null || t6 instanceof it, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); + let { grads: o, value: n } = T.gradients(() => r(e), [e], t6); + return dd(o), { grad: o[0], value: n }; }; } -function KG(r) { - return $(fs(r), () => "The f passed in valueAndGrads(f) must be a function"), (e, t10) => { - $(Array.isArray(e) && e.every((n) => n instanceof ut), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), $(t10 == null || t10 instanceof ut, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); - let o = N.gradients(() => r(...e), e, t10); - return t10 != null && ht(o.value.shape, t10.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), vf(o.grads), o; +function f4(r) { + return E(fs(r), () => "The f passed in valueAndGrads(f) must be a function"), (e, t6) => { + E(Array.isArray(e) && e.every((n) => n instanceof it), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), E(t6 == null || t6 instanceof it, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); + let o = T.gradients(() => r(...e), e, t6); + return t6 != null && ht(o.value.shape, t6.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), dd(o.grads), o; }; } -function dC(r, e) { - $(fs(r), () => "The f passed in variableGrads(f) must be a function"), $(e == null || Array.isArray(e) && e.every((u) => u instanceof ba), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); - let t10 = e != null; - if (!t10) { +function pC(r, e) { + E(fs(r), () => "The f passed in variableGrads(f) must be a function"), E(e == null || Array.isArray(e) && e.every((u) => u instanceof va), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); + let t6 = e != null; + if (!t6) { e = []; - for (let u in N.registeredVariables) - e.push(N.registeredVariables[u]); + for (let u in T.registeredVariables) + e.push(T.registeredVariables[u]); } - let o = t10 ? e.filter((u) => !u.trainable) : null, n = e.length; - e = e.filter((u) => u.trainable), $(e.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); - let s = true, { value: a, grads: i } = N.gradients(r, e, null, s); - $(i.some((u) => u != null), () => "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."), $(a.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`); + let o = t6 ? e.filter((u) => !u.trainable) : null, n = e.length; + e = e.filter((u) => u.trainable), E(e.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); + let s = true, { value: a, grads: i } = T.gradients(r, e, null, s); + E(i.some((u) => u != null), () => "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."), E(a.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`); let p = {}; return e.forEach((u, c) => { i[c] != null && (p[u.name] = i[c]); }), o != null && o.forEach((u) => p[u.name] = null), { value: a, grads: p }; } function Cr(r) { - return N.customGrad(r); + return T.customGrad(r); } -function vf(r) { - if (r.filter((t10) => t10 == null).length > 0) +function dd(r) { + if (r.filter((t6) => t6 == null).length > 0) throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.`); } -function jG(r) { - let t10 = { x: v(r, "x", "softplus") }; - return N.runKernel(Qi, t10); +function h4(r) { + let t6 = { x: v(r, "x", "softplus") }; + return T.runKernel(Qi, t6); } -var kf = T({ softplus_: jG }); -function XG(r) { +var fd = N({ softplus_: h4 }); +function g4(r) { let e = v(r, "x", "logSigmoid"); - return Cr((o) => ({ value: yr(kf(yr(o))), gradFunc: (a) => oe(a, Ms(yr(o))) }))(e); + return Cr((o) => ({ value: yr(fd(yr(o))), gradFunc: (a) => ae(a, zs(yr(o))) }))(e); } -var Vk = T({ logSigmoid_: XG }); -function YG(r, e) { - let t10 = v(r, "a", "sub"), o = v(e, "b", "sub"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(Io, n); +var fk = N({ logSigmoid_: g4 }); +function x4(r, e) { + let t6 = v(r, "a", "sub"), o = v(e, "b", "sub"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(Xn, n); } -var ke = T({ sub_: YG }); -function QG(r, e = -1) { - let t10 = v(r, "logits", "logSoftmax"); - if (e === -1 && (e = t10.rank - 1), e !== t10.rank - 1) - throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t10.rank} and axis was ${e}`); +var Ne = N({ sub_: x4 }); +function y4(r, e = -1) { + let t6 = v(r, "logits", "logSoftmax"); + if (e === -1 && (e = t6.rank - 1), e !== t6.rank - 1) + throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t6.rank} and axis was ${e}`); return Cr((n, s) => { - let i = Vs(n, e, true), p = ke(n, i), u = ke(qe(p, "float32"), Ea(tt(Bo(p), e, true))); + let i = Us(n, e, true), p = Ne(n, i), u = Ne(Ke(p, "float32"), Da(et(Co(p), e, true))); return s([u]), { value: u, gradFunc: (l, m) => { - let [f] = m, d = true, h = Bo(f); - return ke(l, oe(tt(l, e, d), h)); + let [d] = m, f = true, h = Co(d); + return Ne(l, ae(et(l, e, f), h)); } }; - })(t10); + })(t6); } -var zk = T({ logSoftmax_: QG }); -function ZG(r, e = null, t10 = false) { - let o = v(r, "x", "logSumExp"), n = Ka(e, o.shape), s = Vs(o, n, true), a = ke(o, s), i = Bo(a), p = tt(i, n), u = Ea(p), c = ge(z(s, u.shape), u); - if (t10) { - let l = Ta(c.shape, n); +var hk = N({ logSoftmax_: y4 }); +function b4(r, e = null, t6 = false) { + let o = v(r, "x", "logSumExp"), n = Qa(e, o.shape), s = Us(o, n, true), a = Ne(o, s), i = Co(a), p = et(i, n), u = Da(p), c = xe(z(s, u.shape), u); + if (t6) { + let l = Aa(c.shape, n); return z(c, l); } return c; } -var Tf = T({ logSumExp_: ZG }); -function JG(r, e) { - let t10 = v(r, "a", "logicalAnd", "bool"), o = v(e, "b", "logicalAnd", "bool"); - Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(_n, n); +var hd = N({ logSumExp_: b4 }); +function C4(r, e) { + let t6 = v(r, "a", "logicalAnd", "bool"), o = v(e, "b", "logicalAnd", "bool"); + Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(gn, n); } -var lu = T({ logicalAnd_: JG }); -function e4(r) { - let t10 = { x: v(r, "x", "logicalNot", "bool") }; - return N.runKernel(En, t10); +var lu = N({ logicalAnd_: C4 }); +function S4(r) { + let t6 = { x: v(r, "x", "logicalNot", "bool") }; + return T.runKernel(xn, t6); } -var Nf = T({ logicalNot_: e4 }); -function t4(r, e) { - let t10 = v(r, "a", "logicalOr", "bool"), o = v(e, "b", "logicalOr", "bool"); - Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(ua, n); +var gd = N({ logicalNot_: S4 }); +function w4(r, e) { + let t6 = v(r, "a", "logicalOr", "bool"), o = v(e, "b", "logicalOr", "bool"); + Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(xa, n); } -var _f = T({ logicalOr_: t4 }); -function r4(r, e) { - let t10 = v(r, "a", "logicalXor", "bool"), o = v(e, "b", "logicalXor", "bool"); - return Je(t10.shape, o.shape), lu(_f(r, e), Nf(lu(r, e))); +var xd = N({ logicalOr_: w4 }); +function I4(r, e) { + let t6 = v(r, "a", "logicalXor", "bool"), o = v(e, "b", "logicalXor", "bool"); + return Je(t6.shape, o.shape), lu(xd(r, e), gd(lu(r, e))); } -var Wk = T({ logicalXor_: r4 }); -var Ef = 2147483648; -function o4(r, e, t10 = "left") { +var gk = N({ logicalXor_: I4 }); +var yd = 2147483648; +function v4(r, e, t6 = "left") { let o = v(r, "sortedSequence", "searchSorted"), n = v(e, "values", "searchSorted"), s = o.shape[o.shape.length - 1], a = n.shape[n.shape.length - 1], i = z(o, [-1, s]), p = z(n, [-1, a]); if (i.rank < 2) throw new Error("Sorted input argument must be at least 2-dimensional"); if (i.shape[0] !== p.shape[0]) throw new Error("Leading dimension of 'sortedSequence' and 'values' must match."); - if (Ve(p.shape) >= Ef) - throw new Error(`values tensor size must less than ${Ef}`); - if (i.shape[1] >= Ef) - throw new Error(`trailing dim_size must less than ${Ef} for int32 output type, was ${i.shape[1]}`); - let u = { sortedSequence: i, values: p }, c = { side: t10 }; - return N.runKernel(Ep, u, c); + if (ze(p.shape) >= yd) + throw new Error(`values tensor size must less than ${yd}`); + if (i.shape[1] >= yd) + throw new Error(`trailing dim_size must less than ${yd} for int32 output type, was ${i.shape[1]}`); + let u = { sortedSequence: i, values: p }, c = { side: t6 }; + return T.runKernel(ii, u, c); } -var dl = T({ searchSorted_: o4 }); -function Uk(r, e) { - return dl(r, e, "left"); +var al = N({ searchSorted_: v4 }); +function xk(r, e) { + return al(r, e, "left"); } -function n4(r, e, t10, o, n) { +function k4(r, e, t6, o, n) { let s = v(r, "x", "maxPool"), a = 1, i = s, p = false; - s.rank === 3 && (p = true, i = z(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), $(lr(t10, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`), Ot("maxPool", o, n); - let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, l = N.runKernel(Rn, u, c); + s.rank === 3 && (p = true, i = z(s, [1, s.shape[0], s.shape[1], s.shape[2]])), E(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), E(lr(t6, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${t6} and dilations '${a}'`), Pt("maxPool", o, n); + let u = { x: i }, c = { filterSize: e, strides: t6, pad: o, dimRoundingMode: n }, l = T.runKernel(Cn, u, c); return p ? z(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; } -var $f = T({ maxPool_: n4 }); -function s4(r, e = [1, 1, 1], t10, o, n, s = "NDHWC") { +var bd = N({ maxPool_: k4 }); +function N4(r, e = [1, 1, 1], t6, o, n, s = "NDHWC") { let a = v(r, "x", "maxPool3d"), i = a, p = false; - a.rank === 4 && (p = true, i = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Ot("maxPool3d", o, n); - let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, l = N.runKernel(Sp, u, c); + a.rank === 4 && (p = true, i = z(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), E(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Pt("maxPool3d", o, n); + let u = { x: i }, c = { filterSize: e, strides: t6, pad: o, dimRoundingMode: n, dataFormat: s }, l = T.runKernel(bp, u, c); return p ? z(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; } -var Gk = T({ maxPool3d_: s4 }); -function a4(r, e, t10, o, n = false) { - let a = { x: v(r, "x", "maxPoolWithArgmax") }, i = { filterSize: e, strides: t10, pad: o, includeBatchInIndex: n }, p = N.runKernel(vp, a, i); +var yk = N({ maxPool3d_: N4 }); +function T4(r, e, t6, o, n = false) { + let a = { x: v(r, "x", "maxPoolWithArgmax") }, i = { filterSize: e, strides: t6, pad: o, includeBatchInIndex: n }, p = T.runKernel(Cp, a, i); return { result: p[0], indexes: p[1] }; } -var Hk = T({ maxPoolWithArgmax_: a4 }); -function i4(r, e) { - let t10 = v(r, "a", "maximum"), o = v(e, "b", "maximum"); - [t10, o] = Re(t10, o), t10.dtype === "bool" && (t10 = qe(t10, "int32"), o = qe(o, "int32")), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(mo, n); +var bk = N({ maxPoolWithArgmax_: T4 }); +function _4(r, e) { + let t6 = v(r, "a", "maximum"), o = v(e, "b", "maximum"); + [t6, o] = Re(t6, o), t6.dtype === "bool" && (t6 = Ke(t6, "int32"), o = Ke(o, "int32")), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(bn, n); } -var Rf = T({ maximum_: i4 }); -function u4(r, e = null, t10 = false) { - let n = { x: v(r, "x", "mean") }, s = { axis: e, keepDims: t10 }; - return N.runKernel(An, n, s); +var Cd = N({ maximum_: _4 }); +function E4(r, e = null, t6 = false) { + let n = { x: v(r, "x", "mean") }, s = { axis: e, keepDims: t6 }; + return T.runKernel(Sn, n, s); } -var mu = T({ mean_: u4 }); -function Wr(r, e = "float32") { - if (e === "complex64") { - let o = Wr(r, "float32"), n = Wr(r, "float32"); - return Er(o, n); +var mu = N({ mean_: E4 }); +function Vr(r, e = "float32") { + if (yt(r), e === "complex64") { + let o = Vr(r, "float32"), n = Vr(r, "float32"); + return Tr(o, n); } - let t10 = ap(Ve(r), e); - return N.makeTensor(t10, r, e); + let t6 = ap(ze(r), e); + return T.makeTensor(t6, r, e); } -function zs(r, e = "float32") { - if (e === "complex64") { - let o = zs(r, "float32"), n = Wr(r, "float32"); - return Er(o, n); +function Gs(r, e = "float32") { + if (yt(r), e === "complex64") { + let o = Gs(r, "float32"), n = Vr(r, "float32"); + return Tr(o, n); } - let t10 = jc(Ve(r), e); - return N.makeTensor(t10, r, e); + let t6 = zc(ze(r), e); + return T.makeTensor(t6, r, e); } -function qk(r, e, { indexing: t10 = "xy" } = {}) { - if (t10 !== "xy" && t10 !== "ij") - throw new TypeError(`${t10} is not a valid third argument to meshgrid`); +function Ck(r, e, { indexing: t6 = "xy" } = {}) { + if (t6 !== "xy" && t6 !== "ij") + throw new TypeError(`${t6} is not a valid third argument to meshgrid`); if (r === void 0) return []; - let o = v(r, "x", "meshgrid", r instanceof ut ? r.dtype : "float32"); + let o = v(r, "x", "meshgrid", r instanceof it ? r.dtype : "float32"); if (e === void 0) return [o]; - let n = v(e, "y", "meshgrid", e instanceof ut ? e.dtype : "float32"), s = Ve(o.shape), a = Ve(n.shape); - return t10 === "xy" ? (o = z(o, [1, -1]), n = z(n, [-1, 1]), [Xe(zs([a, 1], o.dtype), o), Xe(n, zs([1, s], n.dtype))]) : (o = z(o, [-1, 1]), n = z(n, [1, -1]), [Xe(o, zs([1, a], o.dtype)), Xe(zs([s, 1], n.dtype), n)]); + let n = v(e, "y", "meshgrid", e instanceof it ? e.dtype : "float32"), s = ze(o.shape), a = ze(n.shape); + return t6 === "xy" ? (o = z(o, [1, -1]), n = z(n, [-1, 1]), [Xe(Gs([a, 1], o.dtype), o), Xe(n, Gs([1, s], n.dtype))]) : (o = z(o, [-1, 1]), n = z(n, [1, -1]), [Xe(o, Gs([1, a], o.dtype)), Xe(Gs([s, 1], n.dtype), n)]); } -function p4(r, e) { - let t10 = v(r, "a", "minimum"), o = v(e, "b", "minimum"); - [t10, o] = Re(t10, o), t10.dtype === "bool" && (t10 = qe(t10, "int32"), o = qe(o, "int32")), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(fo, n); +function $4(r, e) { + let t6 = v(r, "a", "minimum"), o = v(e, "b", "minimum"); + [t6, o] = Re(t6, o), t6.dtype === "bool" && (t6 = Ke(t6, "int32"), o = Ke(o, "int32")), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(In, n); } -var Af = T({ minimum_: p4 }); -function c4(r, e, t10) { - $(t10 === "reflect" || t10 === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${t10}.`); +var Sd = N({ minimum_: $4 }); +function A4(r, e, t6) { + E(t6 === "reflect" || t6 === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${t6}.`); let o = v(r, "x", "mirrorPad"); if (o.rank === 0) throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad"); - $(e.length === o.rank, () => `Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`); - let n = t10 === "reflect" ? 1 : 0; + E(e.length === o.rank, () => `Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`); + let n = t6 === "reflect" ? 1 : 0; for (let i = 0; i < o.rank; i++) - $(e[i].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), $(e[i][0] >= 0 && e[i][0] <= o.shape[i] - n && e[i][1] >= 0 && e[i][1] <= o.shape[i] - n, () => `Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i] - n} or less than 0 for input of shape ${o.shape}`); - let s = { paddings: e, mode: t10 }, a = { x: o }; - return N.runKernel(Dn, a, s); + E(e[i].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), E(e[i][0] >= 0 && e[i][0] <= o.shape[i] - n && e[i][1] >= 0 && e[i][1] <= o.shape[i] - n, () => `Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i] - n} or less than 0 for input of shape ${o.shape}`); + let s = { paddings: e, mode: t6 }, a = { x: o }; + return T.runKernel(vn, a, s); } -var Kk = T({ mirrorPad_: c4 }); -function l4(r, e) { - let t10 = v(r, "a", "mod"), o = v(e, "b", "mod"); - [t10, o] = Re(t10, o); - let n = { a: t10, b: o }; - return N.runKernel(ji, n); +var Sk = N({ mirrorPad_: A4 }); +function R4(r, e) { + let t6 = v(r, "a", "mod"), o = v(e, "b", "mod"); + [t6, o] = Re(t6, o); + let n = { a: t6, b: o }; + return T.runKernel(ya, n); } -var jk = T({ mod_: l4 }); -function m4(r, e = null, t10 = false) { +var wk = N({ mod_: R4 }); +function F4(r, e = null, t6 = false) { r = v(r, "x", "moments"); - let o = Ka(e, r.shape), n = mu(r, o, t10), s = n.shape; - t10 || (s = Ta(n.shape, o)); - let a = Zt(ke(qe(r, "float32"), z(n, s))), i = mu(a, o, t10); + let o = Qa(e, r.shape), n = mu(r, o, t6), s = n.shape; + t6 || (s = Aa(n.shape, o)); + let a = Qt(Ne(Ke(r, "float32"), z(n, s))), i = mu(a, o, t6); return { mean: n, variance: i }; } -var Xk = T({ moments_: m4 }); -function f4(r, e, t10, o) { - let n = v(e, "data", "multiRNNCell"), s = Ia(t10, "c", "multiRNNCell"), a = Ia(o, "h", "multiRNNCell"), i = n, p = []; +var Ik = N({ moments_: F4 }); +function D4(r, e, t6, o) { + let n = v(e, "data", "multiRNNCell"), s = Na(t6, "c", "multiRNNCell"), a = Na(o, "h", "multiRNNCell"), i = n, p = []; for (let l = 0; l < r.length; l++) { let m = r[l](i, s[l], a[l]); p.push(m[0]), p.push(m[1]), i = m[1]; @@ -7290,150 +7296,151 @@ function f4(r, e, t10, o) { u.push(p[l]), c.push(p[l + 1]); return [u, c]; } -var Yk = T({ multiRNNCell_: f4 }); -function d4(r, e, t10, o = false) { +var vk = N({ multiRNNCell_: D4 }); +function O4(r, e, t6, o = false) { let n = v(r, "logits", "multinomial"), s = n.size, a = n.rank; if (s < 2) throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`); if (a > 2) throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`); - t10 = t10 || Math.random(); - let p = { logits: a === 1 ? z(n, [1, -1]) : n }, u = { numSamples: e, seed: t10, normalized: o }, c = N.runKernel(kp, p, u); + t6 = t6 || Math.random(); + let p = { logits: a === 1 ? z(n, [1, -1]) : n }, u = { numSamples: e, seed: t6, normalized: o }, c = T.runKernel(Sp, p, u); return a === 1 ? z(c, [c.size]) : c; } -var Qk = T({ multinomial_: d4 }); -function h4(r, e) { - let t10 = v(r, "a", "notEqual", "string_or_numeric"), o = v(e, "b", "notEqual", "string_or_numeric"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }; - return N.runKernel(go, n); +var kk = N({ multinomial_: O4 }); +function P4(r, e) { + let t6 = v(r, "a", "notEqual", "string_or_numeric"), o = v(e, "b", "notEqual", "string_or_numeric"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }; + return T.runKernel(Nn, n); } -var Ff = T({ notEqual_: h4 }); -function g4(r) { - let t10 = { x: v(r, "x", "onesLike") }; - return N.runKernel(Cs, t10); +var wd = N({ notEqual_: P4 }); +function M4(r) { + let t6 = { x: v(r, "x", "onesLike") }; + return T.runKernel(Is, t6); } -var Zk = T({ onesLike_: g4 }); -function x4(r, e) { - let t10 = v(r, "v1", "outerProduct"), o = v(e, "v2", "outerProduct"); - $(t10.rank === 1 && o.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ${t10.rank} and ${o.rank}.`); - let n = z(t10, [-1, 1]), s = z(o, [1, -1]); +var Nk = N({ onesLike_: M4 }); +function L4(r, e) { + let t6 = v(r, "v1", "outerProduct"), o = v(e, "v2", "outerProduct"); + E(t6.rank === 1 && o.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ${t6.rank} and ${o.rank}.`); + let n = z(t6, [-1, 1]), s = z(o, [1, -1]); return Xe(n, s); } -var Jk = T({ outerProduct_: x4 }); -function y4(r, e, t10 = 0) { +var Tk = N({ outerProduct_: L4 }); +function B4(r, e, t6 = 0) { let o = v(r, "x", "pad"); if (o.rank === 0) throw new Error("pad(scalar) is not defined. Pass non-scalar to pad"); - let n = { paddings: e, constantValue: t10 }, s = { x: o }; - return N.runKernel(Ln, s, n); + let n = { paddings: e, constantValue: t6 }, s = { x: o }; + return T.runKernel($n, s, n); } -var Ws = T({ pad_: y4 }); -function b4(r, e, t10 = 0) { - return $(e.length === 2, () => "Invalid number of paddings. Must be length of 2."), Ws(r, [e], t10); +var Hs = N({ pad_: B4 }); +function V4(r, e, t6 = 0) { + return E(e.length === 2, () => "Invalid number of paddings. Must be length of 2."), Hs(r, [e], t6); } -var e1 = T({ pad1d_: b4 }); -function C4(r, e, t10 = 0) { - return $(e.length === 2 && e[0].length === 2 && e[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Ws(r, e, t10); +var _k = N({ pad1d_: V4 }); +function z4(r, e, t6 = 0) { + return E(e.length === 2 && e[0].length === 2 && e[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Hs(r, e, t6); } -var t1 = T({ pad2d_: C4 }); -function I4(r, e, t10 = 0) { - return $(e.length === 3 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Ws(r, e, t10); +var Ek = N({ pad2d_: z4 }); +function W4(r, e, t6 = 0) { + return E(e.length === 3 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Hs(r, e, t6); } -var r1 = T({ pad3d_: I4 }); -function w4(r, e, t10 = 0) { - return $(e.length === 4 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2 && e[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Ws(r, e, t10); +var $k = N({ pad3d_: W4 }); +function U4(r, e, t6 = 0) { + return E(e.length === 4 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2 && e[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Hs(r, e, t6); } -var o1 = T({ pad4d_: w4 }); -function S4(r, e, t10) { +var Ak = N({ pad4d_: U4 }); +function G4(r, e, t6) { let o = v(r, "x", "spaceToBatchND"); - $(o.rank >= 1 + e.length, () => `input rank ${o.rank} should be > than [blockShape] ${e.length}`), $(t10.length === e.length, () => `paddings.shape[0] ${t10.length} must be equal to [blockShape] ${e.length}`), $(o.shape.reduce((a, i, p) => p > 0 && p <= e.length ? a && (i + t10[p - 1][0] + t10[p - 1][1]) % e[p - 1] === 0 : a, true), () => `input spatial dimensions ${o.shape.slice(1)} with paddings ${t10.toString()} must be divisible by blockShapes ${e.toString()}`); - let n = { x: o }, s = { blockShape: e, paddings: t10 }; - return N.runKernel(ks, n, s); + E(o.rank >= 1 + e.length, () => `input rank ${o.rank} should be > than [blockShape] ${e.length}`), E(t6.length === e.length, () => `paddings.shape[0] ${t6.length} must be equal to [blockShape] ${e.length}`), E(o.shape.reduce((a, i, p) => p > 0 && p <= e.length ? a && (i + t6[p - 1][0] + t6[p - 1][1]) % e[p - 1] === 0 : a, true), () => `input spatial dimensions ${o.shape.slice(1)} with paddings ${t6.toString()} must be divisible by blockShapes ${e.toString()}`); + let n = { x: o }, s = { blockShape: e, paddings: t6 }; + return T.runKernel(Es, n, s); } -var Df = T({ spaceToBatchND_: S4 }); -function v4(r, e, t10, o, n, s, a) { +var Id = N({ spaceToBatchND_: G4 }); +function H4(r, e, t6, o, n, s, a) { n == null && (n = [1, 1]), s == null && (s = 1), o === 0 && (o = "valid"); let i = v(r, "x", "maxPool"), p = i, u = false; - i.rank === 3 && (u = true, p = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(lr(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); - let c = lC(p.shape, e, s, n, o), l = [c.dilationHeight, c.dilationWidth], m; - o === "same" ? m = T4([c.filterHeight, c.filterWidth], l) : m = [[0, 0], [0, 0]]; - let f = l[0] === 1 && l[1] === 1, [d, h] = k4([c.inHeight, c.inWidth], l, m), g = f ? o : "valid", y = f ? p : Df(p, l, d), C = (t10 === "avg" ? () => mf(y, e, s, g, a) : () => $f(y, e, s, g, a))(), w = f ? C : ff(C, l, h); + i.rank === 3 && (u = true, p = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(lr(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); + let c = aC(p.shape, e, s, n, o), l = [c.dilationHeight, c.dilationWidth], m; + o === "same" ? m = K4([c.filterHeight, c.filterWidth], l) : m = [[0, 0], [0, 0]]; + let d = l[0] === 1 && l[1] === 1, [f, h] = q4([c.inHeight, c.inWidth], l, m), g = d ? o : "valid", x = d ? p : Id(p, l, f), C = (t6 === "avg" ? () => td(x, e, s, g, a) : () => bd(x, e, s, g, a))(), w = d ? C : rd(C, l, h); return u ? z(w, [w.shape[1], w.shape[2], w.shape[3]]) : w; } -function k4(r, e, t10) { - let o = t10.map((c) => c[0]), n = t10.map((c) => c[1]), s = r.concat(o, n), a = e.map((c, l) => (c - s[l] % c) % c), i = n.map((c, l) => c + a[l]), p = e.map((c, l) => [o[l], i[l]]), u = e.map((c, l) => [0, a[l]]); +function q4(r, e, t6) { + let o = t6.map((c) => c[0]), n = t6.map((c) => c[1]), s = r.concat(o, n), a = e.map((c, l) => (c - s[l] % c) % c), i = n.map((c, l) => c + a[l]), p = e.map((c, l) => [o[l], i[l]]), u = e.map((c, l) => [0, a[l]]); return [p, u]; } -function T4(r, e) { +function K4(r, e) { let o = r.map((a, i) => a + (a - 1) * (e[i] - 1)).map((a) => a - 1), n = o.map((a) => Math.floor(a / 2)), s = o.map((a, i) => a - n[i]); return o.map((a, i) => [n[i], s[i]]); } -var n1 = T({ pool_: v4 }); -function N4(r, e) { - let t10 = v(r, "x", "prelu"), o = v(e, "alpha", "prelu"), n = { x: t10, alpha: o }; - return N.runKernel(Vn, n); +var Rk = N({ pool_: H4 }); +function j4(r, e) { + let t6 = v(r, "x", "prelu"), o = v(e, "alpha", "prelu"), n = { x: t6, alpha: o }; + return T.runKernel(Rn, n); } -var Pf = T({ prelu_: N4 }); -function _4(r, e = null, t10 = false) { +var vd = N({ prelu_: j4 }); +function X4(r, e = null, t6 = false) { let o = v(r, "x", "prod"); - o.dtype === "bool" && (o = qe(o, "int32")); - let n = { x: o }, s = { axis: e, keepDims: t10 }; - return N.runKernel(Ao, n, s); + o.dtype === "bool" && (o = Ke(o, "int32")); + let n = { x: o }, s = { axis: e, keepDims: t6 }; + return T.runKernel(Fn, n, s); } -var s1 = T({ prod_: _4 }); -function E4(r, e, t10, o) { - let n = r.map((c, l) => v(c, `tensors${l}`, "raggedGather", "int32")), s = v(e, "paramsDenseValues", "raggedGather"), a = v(t10, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = N.runKernel(Tp, i, p); +var Fk = N({ prod_: X4 }); +function Y4(r, e, t6, o) { + let n = r.map((c, l) => v(c, `tensors${l}`, "raggedGather", "int32")), s = v(e, "paramsDenseValues", "raggedGather"), a = v(t6, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = T.runKernel(wp, i, p); return { outputNestedSplits: u.slice(0, u.length - 1), outputDenseValues: u[u.length - 1] }; } -var a1 = T({ raggedGather_: E4 }); -function $4(r, e, t10) { - let o = v(r, "starts", "raggedRange"), n = v(e, "limits", "raggedRange", o.dtype), s = v(t10, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = N.runKernel(Np, a); +var Dk = N({ raggedGather_: Y4 }); +function Q4(r, e, t6) { + let o = v(r, "starts", "raggedRange"), n = v(e, "limits", "raggedRange", o.dtype), s = v(t6, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = T.runKernel(Ip, a); return { rtNestedSplits: i[0], rtDenseValues: i[1] }; } -var i1 = T({ raggedRange_: $4 }); -function R4(r, e, t10, o, n) { - let s = v(r, "shape", "raggedTensorToTensor", "int32"), a = v(e, "values", "raggedTensorToTensor"), i = v(t10, "defaultValue", "raggedTensorToTensor", a.dtype), p = o.map((l, m) => v(l, `tensors${m}`, "raggedTensorToTensor", "int32")), u = { shape: s, values: a, defaultValue: i, rowPartitionTensors: p }, c = { rowPartitionTypes: n }; - return N.runKernel(_p, u, c); +var Ok = N({ raggedRange_: Q4 }); +function Z4(r, e, t6, o, n) { + let s = v(r, "shape", "raggedTensorToTensor", "int32"), a = v(e, "values", "raggedTensorToTensor"), i = v(t6, "defaultValue", "raggedTensorToTensor", a.dtype), p = o.map((l, m) => v(l, `tensors${m}`, "raggedTensorToTensor", "int32")), u = { shape: s, values: a, defaultValue: i, rowPartitionTensors: p }, c = { rowPartitionTypes: n }; + return T.runKernel(vp, u, c); } -var u1 = T({ raggedTensorToTensor_: R4 }); -function A4(r, e, t10) { - let o = Ve(r), n = null; - if (t10 == null || t10 === "float32") +var Pk = N({ raggedTensorToTensor_: Z4 }); +function J4(r, e, t6) { + yt(r); + let o = ze(r), n = null; + if (t6 == null || t6 === "float32") n = new Float32Array(o); - else if (t10 === "int32") + else if (t6 === "int32") n = new Int32Array(o); - else if (t10 === "bool") + else if (t6 === "bool") n = new Uint8Array(o); else - throw new Error(`Unknown data type ${t10}`); + throw new Error(`Unknown data type ${t6}`); for (let s = 0; s < o; s++) n[s] = e(); - return N.makeTensor(n, r, t10); + return T.makeTensor(n, r, t6); } -var p1 = T({ rand_: A4 }); -var Bf = rp(IC()); -var du = class { - constructor(e, t10, o, n, s) { - this.mean = e, this.stdDev = t10, this.dtype = o, this.nextVal = NaN, this.truncated = n, this.truncated && (this.upper = this.mean + this.stdDev * 2, this.lower = this.mean - this.stdDev * 2); +var Mk = N({ rand_: J4 }); +var _d = rp(gC()); +var fu = class { + constructor(e, t6, o, n, s) { + this.mean = e, this.stdDev = t6, this.dtype = o, this.nextVal = NaN, this.truncated = n, this.truncated && (this.upper = this.mean + this.stdDev * 2, this.lower = this.mean - this.stdDev * 2); let a = s || Math.random(); - this.random = Bf.alea(a.toString()); + this.random = _d.alea(a.toString()); } nextValue() { if (!isNaN(this.nextVal)) { let n = this.nextVal; return this.nextVal = NaN, n; } - let e, t10, o = false; + let e, t6, o = false; for (; !o; ) { let n, s, a; do n = 2 * this.random() - 1, s = 2 * this.random() - 1, a = n * n + s * s; while (a >= 1 || a === 0); let i = Math.sqrt(-2 * Math.log(a) / a); - e = this.mean + this.stdDev * n * i, t10 = this.mean + this.stdDev * s * i, (!this.truncated || this.isValidTruncated(e)) && (o = true); + e = this.mean + this.stdDev * n * i, t6 = this.mean + this.stdDev * s * i, (!this.truncated || this.isValidTruncated(e)) && (o = true); } - return (!this.truncated || this.isValidTruncated(t10)) && (this.nextVal = this.convertValue(t10)), this.convertValue(e); + return (!this.truncated || this.isValidTruncated(t6)) && (this.nextVal = this.convertValue(t6)), this.convertValue(e); } convertValue(e) { return this.dtype == null || this.dtype === "float32" ? e : Math.round(e); @@ -7442,19 +7449,19 @@ var du = class { return e <= this.upper && e >= this.lower; } }; -var Mf = class { - constructor(e, t10, o, n) { - this.alpha = e, this.beta = 1 / t10, this.dtype = o; +var Nd = class { + constructor(e, t6, o, n) { + this.alpha = e, this.beta = 1 / t6, this.dtype = o; let s = n || Math.random(); - this.randu = Bf.alea(s.toString()), this.randn = new du(0, 1, o, false, this.randu()), e < 1 ? this.d = e + 2 / 3 : this.d = e - 1 / 3, this.c = 1 / Math.sqrt(9 * this.d); + this.randu = _d.alea(s.toString()), this.randn = new fu(0, 1, o, false, this.randu()), e < 1 ? this.d = e + 2 / 3 : this.d = e - 1 / 3, this.c = 1 / Math.sqrt(9 * this.d); } nextValue() { - let e, t10, o, n, s, a; + let e, t6, o, n, s, a; for (; ; ) { do n = this.randn.nextValue(), a = 1 + this.c * n; while (a <= 0); - if (a *= a * a, e = n * n, t10 = 1 - 0.331 * e * e, o = 0.5 * e + this.d * (1 - a + Math.log(a)), s = this.randu(), s < t10 || Math.log(s) < o) + if (a *= a * a, e = n * n, t6 = 1 - 0.331 * e * e, o = 0.5 * e + this.d * (1 - a + Math.log(a)), s = this.randu(), s < t6 || Math.log(s) < o) break; } return a = 1 / this.beta * this.d * a, this.alpha < 1 && (a *= Math.pow(this.randu(), 1 / this.alpha)), this.convertValue(a); @@ -7463,11 +7470,11 @@ var Mf = class { return this.dtype === "float32" ? e : Math.round(e); } }; -var Lf = class { - constructor(e = 0, t10 = 1, o, n) { - if (this.canReturnFloat = () => this.dtype == null || this.dtype === "float32", this.min = e, this.range = t10 - e, this.dtype = o, n == null && (n = Math.random()), typeof n == "number" && (n = n.toString()), !this.canReturnFloat() && this.range <= 1) - throw new Error(`The difference between ${e} - ${t10} <= 1 and dtype is not float`); - this.random = Bf.alea(n); +var Td = class { + constructor(e = 0, t6 = 1, o, n) { + if (this.canReturnFloat = () => this.dtype == null || this.dtype === "float32", this.min = e, this.range = t6 - e, this.dtype = o, n == null && (n = Math.random()), typeof n == "number" && (n = n.toString()), !this.canReturnFloat() && this.range <= 1) + throw new Error(`The difference between ${e} - ${t6} <= 1 and dtype is not float`); + this.random = _d.alea(n); } convertValue(e) { return this.canReturnFloat() ? e : Math.round(e); @@ -7476,294 +7483,295 @@ var Lf = class { return this.convertValue(this.min + this.range * this.random()); } }; -function B4(r, e, t10 = 1, o = "float32", n) { - if (t10 == null && (t10 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") +function aG(r, e, t6 = 1, o = "float32", n) { + if (yt(r), t6 == null && (t6 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") throw new Error(`Unsupported data type ${o}`); - let s = new Mf(e, t10, o, n), a = ne(r, o); + let s = new Nd(e, t6, o, n), a = le(r, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var T1 = T({ randomGamma_: B4 }); -function V4(r, e = 0, t10 = 1, o, n) { - if (o != null && o === "bool") +var e1 = N({ randomGamma_: aG }); +function iG(r, e = 0, t6 = 1, o, n) { + if (yt(r), o != null && o === "bool") throw new Error(`Unsupported data type ${o}`); - let s = new du(e, t10, o, false, n), a = ne(r, o); + let s = new fu(e, t6, o, false, n), a = le(r, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var Vf = T({ randomNormal_: V4 }); -function z4(r, e, t10) { +var Ed = N({ randomNormal_: iG }); +function uG(r, e, t6) { if (e != null && e === "bool") throw new Error(`Unsupported data type ${e}`); - return Vf(r, 0, 1, e, t10); + return Ed(r, 0, 1, e, t6); } -var N1 = T({ randomStandardNormal_: z4 }); -function W4(r, e = 0, t10 = 1, o = "float32", n) { - let s = ne(r, o), a = new Lf(e, t10, null, n); +var t1 = N({ randomStandardNormal_: uG }); +function pG(r, e = 0, t6 = 1, o = "float32", n) { + yt(r); + let s = le(r, o), a = new Td(e, t6, null, n); for (let i = 0; i < s.values.length; i++) s.values[i] = a.nextValue(); return s.toTensor(); } -var zf = T({ randomUniform_: W4 }); -function di(r, e, t10 = 1, o = "float32") { - if (t10 === 0) +var $d = N({ randomUniform_: pG }); +function Ni(r, e, t6 = 1, o = "float32") { + if (t6 === 0) throw new Error("Cannot have a step of zero"); - let n = { start: r, stop: e, step: t10, dtype: o }; - return N.runKernel(ws, {}, n); + let n = { start: r, stop: e, step: t6, dtype: o }; + return T.runKernel(ks, {}, n); } -function U4(r) { - let t10 = { x: v(r, "x", "reciprocal") }; - return N.runKernel(ma, t10); +function cG(r) { + let t6 = { x: v(r, "x", "reciprocal") }; + return T.runKernel(Dn, t6); } -var _1 = T({ reciprocal_: U4 }); -function G4(r) { - let t10 = { x: v(r, "x", "relu") }; - return N.runKernel(zn, t10); +var r1 = N({ reciprocal_: cG }); +function lG(r) { + let t6 = { x: v(r, "x", "relu") }; + return T.runKernel(On, t6); } -var hi = T({ relu_: G4 }); -function H4(r) { - let t10 = { x: v(r, "x", "relu6") }; - return N.runKernel(Gn, t10); +var Ti = N({ relu_: lG }); +function mG(r) { + let t6 = { x: v(r, "x", "relu6") }; + return T.runKernel(Ln, t6); } -var Wf = T({ relu6_: H4 }); -function q4(r, e) { +var Ad = N({ relu6_: mG }); +function dG(r, e) { let o = { x: v(r, "x", "reverse") }, n = { dims: e }; - return N.runKernel(fa, o, n); + return T.runKernel(Bn, o, n); } -var vo = T({ reverse_: q4 }); -function K4(r) { +var no = N({ reverse_: dG }); +function fG(r) { let e = v(r, "x", "reverse"); - return $(e.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`), vo(e, 0); + return E(e.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`), no(e, 0); } -var E1 = T({ reverse1d_: K4 }); -function j4(r, e) { - let t10 = v(r, "x", "reverse"); - return $(t10.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${t10.rank}.`), vo(t10, e); +var o1 = N({ reverse1d_: fG }); +function hG(r, e) { + let t6 = v(r, "x", "reverse"); + return E(t6.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${t6.rank}.`), no(t6, e); } -var $1 = T({ reverse2d_: j4 }); -function X4(r, e) { - let t10 = v(r, "x", "reverse"); - return $(t10.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${t10.rank}.`), vo(t10, e); +var n1 = N({ reverse2d_: hG }); +function gG(r, e) { + let t6 = v(r, "x", "reverse"); + return E(t6.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${t6.rank}.`), no(t6, e); } -var R1 = T({ reverse3d_: X4 }); -function Y4(r, e) { - let t10 = v(r, "x", "reverse"); - return $(t10.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${t10.rank}.`), vo(t10, e); +var s1 = N({ reverse3d_: gG }); +function xG(r, e) { + let t6 = v(r, "x", "reverse"); + return E(t6.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${t6.rank}.`), no(t6, e); } -var A1 = T({ reverse4d_: Y4 }); -function Q4(r) { - let t10 = { x: v(r, "x", "round") }; - return N.runKernel(da, t10); +var a1 = N({ reverse4d_: xG }); +function yG(r) { + let t6 = { x: v(r, "x", "round") }; + return T.runKernel(Ca, t6); } -var Uf = T({ round_: Q4 }); -function Z4(r) { - let t10 = { x: v(r, "x", "rsqrt", "float32") }; - return N.runKernel(xo, t10); +var Rd = N({ round_: yG }); +function bG(r) { + let t6 = { x: v(r, "x", "rsqrt", "float32") }; + return T.runKernel(Vn, t6); } -var F1 = T({ rsqrt_: Z4 }); -function J4(r) { - let t10 = { x: v(r, "x", "selu") }; - return N.runKernel(Xi, t10); +var i1 = N({ rsqrt_: bG }); +function CG(r) { + let t6 = { x: v(r, "x", "selu") }; + return T.runKernel(Xi, t6); } -var D1 = T({ selu_: J4 }); -function eH(r, e, t10, o, n, s = [1, 1], a = "NHWC") { - let i = v(r, "x", "separableConv2d"), p = v(e, "depthwiseFilter", "separableConv2d"), u = v(t10, "pointwiseFilter", "separableConv2d"), c = i, l = false; +var u1 = N({ selu_: CG }); +function SG(r, e, t6, o, n, s = [1, 1], a = "NHWC") { + let i = v(r, "x", "separableConv2d"), p = v(e, "depthwiseFilter", "separableConv2d"), u = v(t6, "pointwiseFilter", "separableConv2d"), c = i, l = false; if (i.rank === 3 && (l = true, c = z(i, [1, i.shape[0], i.shape[1], i.shape[2]])), a === "NCHW") throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported"); - $(c.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`), $(p.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`), $(u.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`), $(u.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`), $(u.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`); - let m = p.shape[2], f = p.shape[3]; - $(u.shape[2] === m * f, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${m * f}, but got ${u.shape[2]}.`); - let d = Gp(c, p, o, n, a, s), g = mi(d, u, 1, "valid", a); + E(c.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`), E(p.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`), E(u.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`), E(u.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`), E(u.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`); + let m = p.shape[2], d = p.shape[3]; + E(u.shape[2] === m * d, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${m * d}, but got ${u.shape[2]}.`); + let f = Bp(c, p, o, n, a, s), g = vi(f, u, 1, "valid", a); return l ? z(g, [g.shape[1], g.shape[2], g.shape[3]]) : g; } -var P1 = T({ separableConv2d_: eH }); -async function tH(r, e) { - let t10 = v(r, "x", "setdiff1d"), o = v(e, "y", "setdiff1d"); - $(t10.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${t10.dtype}) and y (${o.dtype}).`), $(t10.rank === 1, () => `x should be 1D tensor, but got x (${t10.shape}).`), $(o.rank === 1, () => `y should be 1D tensor, but got y (${o.shape}).`); - let n = await t10.data(), s = await o.data(), a = new Set(s), i = 0; +var p1 = N({ separableConv2d_: SG }); +async function wG(r, e) { + let t6 = v(r, "x", "setdiff1d"), o = v(e, "y", "setdiff1d"); + E(t6.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${t6.dtype}) and y (${o.dtype}).`), E(t6.rank === 1, () => `x should be 1D tensor, but got x (${t6.shape}).`), E(o.rank === 1, () => `y should be 1D tensor, but got y (${o.shape}).`); + let n = await t6.data(), s = await o.data(), a = new Set(s), i = 0; for (let c = 0; c < n.length; c++) a.has(n[c]) || i++; - let p = new je([i], t10.dtype), u = new je([i], "int32"); + let p = new st([i], t6.dtype), u = new st([i], "int32"); for (let c = 0, l = 0; c < n.length; c++) a.has(n[c]) || (p.values[l] = n[c], u.values[l] = c, l++); return [p.toTensor(), u.toTensor()]; } -var O1 = tH; -function rH(r) { - let t10 = { x: v(r, "x", "sign") }; - return N.runKernel(Yi, t10); +var c1 = wG; +function IG(r) { + let t6 = { x: v(r, "x", "sign") }; + return T.runKernel(Yi, t6); } -var M1 = T({ sign_: rH }); -function oH(r) { - let t10 = { x: v(r, "x", "sin", "float32") }; - return N.runKernel(Kn, t10); +var l1 = N({ sign_: IG }); +function vG(r) { + let t6 = { x: v(r, "x", "sin", "float32") }; + return T.runKernel(Wn, t6); } -var L1 = T({ sin_: oH }); -function nH(r) { - let t10 = { x: v(r, "x", "sinh") }; - return N.runKernel(ha, t10); +var m1 = N({ sin_: vG }); +function kG(r) { + let t6 = { x: v(r, "x", "sinh") }; + return T.runKernel(Sa, t6); } -var B1 = T({ sinh_: nH }); -function sH(r, e, t10) { +var d1 = N({ sinh_: kG }); +function NG(r, e, t6) { let o = v(r, "x", "slice1d"); - return $(o.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`), Ue(o, [e], [t10]); + return E(o.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`), He(o, [e], [t6]); } -var V1 = T({ slice1d_: sH }); -function aH(r, e, t10) { +var f1 = N({ slice1d_: NG }); +function TG(r, e, t6) { let o = v(r, "x", "slice2d"); - return $(o.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`), Ue(o, e, t10); + return E(o.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`), He(o, e, t6); } -var z1 = T({ slice2d_: aH }); -function iH(r, e, t10) { +var h1 = N({ slice2d_: TG }); +function _G(r, e, t6) { let o = v(r, "x", "slice3d"); - return $(o.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`), Ue(o, e, t10); + return E(o.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`), He(o, e, t6); } -var W1 = T({ slice3d_: iH }); -function uH(r, e, t10) { +var g1 = N({ slice3d_: _G }); +function EG(r, e, t6) { let o = v(r, "x", "slice4d"); - return $(o.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`), Ue(o, e, t10); + return E(o.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`), He(o, e, t6); } -var U1 = T({ slice4d_: uH }); -function pH(r, e = -1) { - let t10 = v(r, "logits", "softmax", "float32"); - if (e === -1 && (e = t10.rank - 1), e !== t10.rank - 1) - throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t10.rank} and dim was ${e}`); - let o = { logits: t10 }, n = { dim: e }; - return N.runKernel(Xn, o, n); +var x1 = N({ slice4d_: EG }); +function $G(r, e = -1) { + let t6 = v(r, "logits", "softmax", "float32"); + if (e === -1 && (e = t6.rank - 1), e !== t6.rank - 1) + throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t6.rank} and dim was ${e}`); + let o = { logits: t6 }, n = { dim: e }; + return T.runKernel(qn, o, n); } -var G1 = T({ softmax_: pH }); -function cH(r) { - $(r.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`); +var y1 = N({ softmax_: $G }); +function AG(r) { + E(r.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`); let e = { input: r }; - return N.runKernel(bp, e); + return T.runKernel(oi, e); } -var qp = T({ fft_: cH }); -function lH(r) { - $(r.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`); +var zp = N({ fft_: AG }); +function RG(r) { + E(r.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`); let e = { input: r }; - return N.runKernel(Cp, e); + return T.runKernel(ni, e); } -var hu = T({ ifft_: lH }); -function mH(r) { - let e = r.shape[r.shape.length - 1], t10 = r.size / e, o; +var hu = N({ ifft_: RG }); +function FG(r) { + let e = r.shape[r.shape.length - 1], t6 = r.size / e, o; if (e <= 2) { - let n = z(r, [t10, e]); + let n = z(r, [t6, e]); o = hu(n); } else { - let n = [t10, 2 * (e - 1)], s = z(ka(r), [t10, e]), a = z(ci(r), [t10, e]), i = vo(Ue(s, [0, 1], [t10, e - 2]), 1), p = oe(vo(Ue(a, [0, 1], [t10, e - 2]), 1), be(-1)), u = gt([s, i], 1), c = gt([a, p], 1), l = z(Er(u, c), [n[0], n[1]]); + let n = [t6, 2 * (e - 1)], s = z($a(r), [t6, e]), a = z(Si(r), [t6, e]), i = no(He(s, [0, 1], [t6, e - 2]), 1), p = ae(no(He(a, [0, 1], [t6, e - 2]), 1), be(-1)), u = gt([s, i], 1), c = gt([a, p], 1), l = z(Tr(u, c), [n[0], n[1]]); o = hu(l); } - if (o = ka(o), r.rank === 3 && r.shape[0] !== 0) { + if (o = $a(o), r.rank === 3 && r.shape[0] !== 0) { let n = o, s = r.shape[0]; o = z(o, [s, o.shape[0] / s, o.shape[1]]), n.dispose(); } return o; } -var Gf = T({ irfft_: mH }); -function fH(r, e, t10 = 0) { - let n = { x: v(r, "x", "split") }, s = { numOrSizeSplits: e, axis: t10 }; - return N.runKernel(Ts, n, s); +var Fd = N({ irfft_: FG }); +function DG(r, e, t6 = 0) { + let n = { x: v(r, "x", "split") }, s = { numOrSizeSplits: e, axis: t6 }; + return T.runKernel($s, n, s); } -var $a = T({ split_: fH }); -function dH(r, e) { - $(r.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r.dtype}`); - let t10 = r.shape[r.shape.length - 1], o = r.size / t10, n; - if (e != null && e < t10) { - let d = r.shape.map((g) => 0), h = r.shape.map((g) => g); - h[r.shape.length - 1] = e, n = Ue(r, d, h), t10 = e; - } else if (e != null && e > t10) { - let d = r.shape.map((h) => h); - d[r.shape.length - 1] = e - t10, n = gt([r, Wr(d)], r.shape.length - 1), t10 = e; +var Oa = N({ split_: DG }); +function OG(r, e) { + E(r.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r.dtype}`); + let t6 = r.shape[r.shape.length - 1], o = r.size / t6, n; + if (e != null && e < t6) { + let f = r.shape.map((g) => 0), h = r.shape.map((g) => g); + h[r.shape.length - 1] = e, n = He(r, f, h), t6 = e; + } else if (e != null && e > t6) { + let f = r.shape.map((h) => h); + f[r.shape.length - 1] = e - t6, n = gt([r, Vr(f)], r.shape.length - 1), t6 = e; } else n = r; - let s = Gt(n), a = z(Er(n, s), [o, t10]), i = qp(a), p = Math.floor(t10 / 2) + 1, u = ka(i), c = ci(i), l = $a(u, [p, t10 - p], u.shape.length - 1), m = $a(c, [p, t10 - p], c.shape.length - 1), f = n.shape.slice(); - return f[n.shape.length - 1] = p, z(Er(l[0], m[0]), f); + let s = Ut(n), a = z(Tr(n, s), [o, t6]), i = zp(a), p = Math.floor(t6 / 2) + 1, u = $a(i), c = Si(i), l = Oa(u, [p, t6 - p], u.shape.length - 1), m = Oa(c, [p, t6 - p], c.shape.length - 1), d = n.shape.slice(); + return d[n.shape.length - 1] = p, z(Tr(l[0], m[0]), d); } -var Kp = T({ rfft_: dH }); -function hH(r, e) { - let t10 = v(r, "a", "squaredDifference"), o = v(e, "b", "squaredDifference"); - [t10, o] = Re(t10, o), Je(t10.shape, o.shape); - let n = { a: t10, b: o }, s = {}; - return N.runKernel(Co, n, s); +var Wp = N({ rfft_: OG }); +function PG(r, e) { + let t6 = v(r, "a", "squaredDifference"), o = v(e, "b", "squaredDifference"); + [t6, o] = Re(t6, o), Je(t6.shape, o.shape); + let n = { a: t6, b: o }, s = {}; + return T.runKernel(Kn, n, s); } -var Hf = T({ squaredDifference_: hH }); -function gH(r, e) { - let t10 = v(r, "x", "squeeze", "string_or_numeric"); - return z(t10, db(t10.shape, e).newShape); +var Dd = N({ squaredDifference_: PG }); +function MG(r, e) { + let t6 = v(r, "x", "squeeze", "string_or_numeric"); + return z(t6, pb(t6.shape, e).newShape); } -var jp = T({ squeeze_: gH }); -function xH(r, e = 0) { - let t10 = Ia(r, "tensors", "stack", "string_or_numeric"); - $(t10.length >= 1, () => "Pass at least one tensor to tf.stack"), t10.length > 0 && $(e <= t10[0].rank, () => "Axis must be <= rank of the tensor"); - let o = t10, n = { axis: e }; - return N.runKernel(Is, o, n); +var Up = N({ squeeze_: MG }); +function LG(r, e = 0) { + let t6 = Na(r, "tensors", "stack", "string_or_numeric"); + E(t6.length >= 1, () => "Pass at least one tensor to tf.stack"), t6.length > 0 && E(e <= t6[0].rank, () => "Axis must be <= rank of the tensor"); + let o = t6, n = { axis: e }; + return T.runKernel(vs, o, n); } -var Ir = T({ stack_: xH }); -function yH(r, e = 0) { +var Sr = N({ stack_: LG }); +function BG(r, e = 0) { let o = { x: v(r, "x", "step") }, n = { alpha: e }; - return N.runKernel($s, o, n); + return T.runKernel(Ds, o, n); } -var qf = T({ step_: yH }); -function bH(r, e, t10, o, n = 0, s = 0, a = 0, i = 0, p = 0) { - let c = { x: v(r, "x", "stridedSlice", "string_or_numeric") }, l = { begin: e, end: t10, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; - return N.runKernel(Yn, c, l); +var Od = N({ step_: BG }); +function VG(r, e, t6, o, n = 0, s = 0, a = 0, i = 0, p = 0) { + let c = { x: v(r, "x", "stridedSlice", "string_or_numeric") }, l = { begin: e, end: t6, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; + return T.runKernel(jn, c, l); } -var H1 = T({ stridedSlice_: bH }); -function CH(r) { - let t10 = { x: v(r, "x", "tan", "float32") }; - return N.runKernel(xa, t10); +var b1 = N({ stridedSlice_: VG }); +function zG(r) { + let t6 = { x: v(r, "x", "tan", "float32") }; + return T.runKernel(Yn, t6); } -var q1 = T({ tan_: CH }); +var C1 = N({ tan_: zG }); function mr(r, e) { - eo(r); - let t10 = or(r, e); - if (t10.length !== 1) + Jr(r); + let t6 = or(r, e); + if (t6.length !== 1) throw new Error("tensor1d() requires values to be a flat/TypedArray"); - return xr(r, null, t10, e); + return xr(r, null, t6, e); } -function gi(r, e, t10) { - if (eo(r), e != null && e.length !== 2) +function _i(r, e, t6) { + if (Jr(r), e != null && e.length !== 2) throw new Error("tensor2d() requires shape to have two numbers"); - let o = or(r, t10); + let o = or(r, t6); if (o.length !== 2 && o.length !== 1) throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray"); - return xr(r, e, o, t10); + return xr(r, e, o, t6); } -function K1(r, e, t10) { - if (eo(r), e != null && e.length !== 4) +function S1(r, e, t6) { + if (Jr(r), e != null && e.length !== 4) throw new Error("tensor4d() requires shape to have four numbers"); - let o = or(r, t10); + let o = or(r, t6); if (o.length !== 4 && o.length !== 1) throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor4d() requires shape to be provided when `values` are a flat array"); - return xr(r, e, o, t10); + return xr(r, e, o, t6); } -function j1(r, e, t10) { - if (eo(r), e != null && e.length !== 5) +function w1(r, e, t6) { + if (Jr(r), e != null && e.length !== 5) throw new Error("tensor5d() requires shape to have five numbers"); - let o = or(r, t10); + let o = or(r, t6); if (o.length !== 5 && o.length !== 1) throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor5d() requires shape to be provided when `values` are a flat array"); - return xr(r, e, o, t10); + return xr(r, e, o, t6); } -function X1(r, e, t10) { - if (eo(r), e != null && e.length !== 6) +function I1(r, e, t6) { + if (Jr(r), e != null && e.length !== 6) throw new Error("tensor6d() requires shape to have six numbers"); - let o = or(r, t10); + let o = or(r, t6); if (o.length !== 6 && o.length !== 1) throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor6d() requires shape to be provided when `values` are a flat array"); - return e = e || o, xr(r, e, o, t10); + return e = e || o, xr(r, e, o, t6); } -function IH(r, e = 1, t10 = true) { +function WG(r, e = 1, t6 = true) { let o = v(r, "x", "topk"); if (o.rank === 0) throw new Error("topk() expects the input to be of rank 1 or higher"); @@ -7772,751 +7780,753 @@ function IH(r, e = 1, t10 = true) { throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`); if (e > n) throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`); - let s = { x: o }, a = { k: e, sorted: t10 }, [i, p] = N.runKernel(Zn, s, a); + let s = { x: o }, a = { k: e, sorted: t6 }, [i, p] = T.runKernel(Zn, s, a); return { values: i, indices: p }; } -var Y1 = T({ topk_: IH }); -function wH(r, e = 0, t10 = 1, o, n) { - if (o != null && o === "bool") +var v1 = N({ topk_: WG }); +function UG(r, e = 0, t6 = 1, o, n) { + if (yt(r), o != null && o === "bool") throw new Error("Unsupported data type $ { dtype }"); - let s = new du(e, t10, o, true, n), a = ne(r, o); + let s = new fu(e, t6, o, true, n), a = le(r, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var Q1 = T({ truncatedNormal_: wH }); -function SH(r, e = 0) { - let t10 = v(r, "x", "unique", "string_or_numeric"); - $(t10.rank > 0, () => "The input tensor must be at least 1D"); - let o = { x: t10 }, n = { axis: e }, [s, a] = N.runKernel($p, o, n); +var k1 = N({ truncatedNormal_: UG }); +function GG(r, e = 0) { + let t6 = v(r, "x", "unique", "string_or_numeric"); + E(t6.rank > 0, () => "The input tensor must be at least 1D"); + let o = { x: t6 }, n = { axis: e }, [s, a] = T.runKernel(kp, o, n); return { values: s, indices: a }; } -var Z1 = T({ unique_: SH }); -function vH(r, e, t10) { +var N1 = N({ unique_: GG }); +function HG(r, e, t6) { let o = v(r, "x", "unsortedSegmentSum"), n = v(e, "segmentIds", "unsortedSegmentSum", "int32"); - $(ra(t10), () => "numSegments must be of dtype int"); - let s = { x: o, segmentIds: n }, a = { numSegments: t10 }; - return N.runKernel(Rp, s, a); + E(na(t6), () => "numSegments must be of dtype int"); + let s = { x: o, segmentIds: n }, a = { numSegments: t6 }; + return T.runKernel(Np, s, a); } -var J1 = T({ unsortedSegmentSum_: vH }); -function kH(r, e = 0) { - let t10 = v(r, "x", "unstack", "string_or_numeric"); - $(e >= -t10.shape.length && e < t10.shape.length, () => `Axis = ${e} is not in [-${t10.shape.length}, ${t10.shape.length})`); - let o = { value: t10 }, n = { axis: e }; - return N.runKernel(_s, o, n); +var T1 = N({ unsortedSegmentSum_: HG }); +function qG(r, e = 0) { + let t6 = v(r, "x", "unstack", "string_or_numeric"); + E(e >= -t6.shape.length && e < t6.shape.length, () => `Axis = ${e} is not in [-${t6.shape.length}, ${t6.shape.length})`); + let o = { value: t6 }, n = { axis: e }; + return T.runKernel(Rs, o, n); } -var ko = T({ unstack_: kH }); -function eT(r, e) { - return dl(r, e, "right"); +var so = N({ unstack_: qG }); +function _1(r, e) { + return al(r, e, "right"); } -function tT(r, e = true, t10, o) { - return N.makeVariable(r, e, t10, o); +function E1(r, e = true, t6, o) { + return T.makeVariable(r, e, t6, o); } -function Kf(r, e) { - let t10 = []; +function Pd(r, e) { + let t6 = []; for (let s = 0; s < e.length; s++) - e[s] && t10.push(s); - let o = ne(r, "int32"), n = ne([t10.length, r.length], "int32"); - for (let s = 0; s < t10.length; s++) { - let a = o.indexToLoc(t10[s]), i = s * r.length; + e[s] && t6.push(s); + let o = le(r, "int32"), n = le([t6.length, r.length], "int32"); + for (let s = 0; s < t6.length; s++) { + let a = o.indexToLoc(t6[s]), i = s * r.length; n.values.set(a, i); } return n.toTensor(); } -async function TH(r) { - let e = v(r, "condition", "whereAsync", "bool"), t10 = await e.data(), o = Kf(e.shape, t10); +async function KG(r) { + let e = v(r, "condition", "whereAsync", "bool"), t6 = await e.data(), o = Pd(e.shape, t6); return r !== e && e.dispose(), o; } -var jf = TH; -async function NH(r, e, t10) { - let o = v(r, "tensor", "boolMask"), n = v(e, "mask", "boolMask", "bool"), s = t10 == null ? 0 : t10, a = n.rank, i = o.shape; - $(a > 0, () => "mask cannot be scalar"), ht(i.slice(s, s + a), n.shape, "mask's shape must match the first K dimensions of tensor's shape,"); +var Md = KG; +async function jG(r, e, t6) { + let o = v(r, "tensor", "boolMask"), n = v(e, "mask", "boolMask", "bool"), s = t6 == null ? 0 : t6, a = n.rank, i = o.shape; + E(a > 0, () => "mask cannot be scalar"), ht(i.slice(s, s + a), n.shape, "mask's shape must match the first K dimensions of tensor's shape,"); let p = 1; for (let h = s; h < s + a; h++) p *= i[h]; - let u = i.slice(0, s).concat([p], i.slice(s + a)), c = z(o, u), l = z(n, [-1]), m = await jf(l), f = jp(m, [1]), d = Cf(c, f, s); - return r !== o && o.dispose(), e !== n && n.dispose(), f.dispose(), c.dispose(), l.dispose(), m.dispose(), d; + let u = i.slice(0, s).concat([p], i.slice(s + a)), c = z(o, u), l = z(n, [-1]), m = await Md(l), d = Up(m, [1]), f = pd(c, d, s); + return r !== o && o.dispose(), e !== n && n.dispose(), d.dispose(), c.dispose(), l.dispose(), m.dispose(), f; } -var _H = NH; -function EH(r, e, t10, o, n = true) { - let s = v(r, "v", "movingAverage"), a = v(e, "x", "movingAverage"), i = v(t10, "decay", "movingAverage"); - Lb(s, a), $(Or(s.shape, a.shape), () => "Shape mismatch in v and x"); - let p = be(1), u = ke(p, i), c = oe(ke(a, s), u); +var XG = jG; +function YG(r, e, t6, o, n = true) { + let s = v(r, "v", "movingAverage"), a = v(e, "x", "movingAverage"), i = v(t6, "decay", "movingAverage"); + Fb(s, a), E(Pr(s.shape, a.shape), () => "Shape mismatch in v and x"); + let p = be(1), u = Ne(p, i), c = ae(Ne(a, s), u); if (n) { - $(o != null, () => "When using zeroDebias: true, step is required."); + E(o != null, () => "When using zeroDebias: true, step is required."); let l = v(o, "step", "movingAverage"); - c = We(c, ke(p, Na(i, l))); + c = Ge(c, Ne(p, Ra(i, l))); } - return ge(s, c); + return xe(s, c); } -var $H = T({ movingAverage_: EH }); -function RH(r, e, t10) { +var QG = N({ movingAverage_: YG }); +function ZG(r, e, t6) { + yt(t6); let o = v(r, "indices", "scatterND", "int32"), n = v(e, "updates", "scatterND"); - uf(n, o, t10); - let s = { indices: o, updates: n }, a = { shape: t10 }; - return N.runKernel(Hn, s, a); + Qm(n, o, t6); + let s = { indices: o, updates: n }, a = { shape: t6 }; + return T.runKernel(zn, s, a); } -var AH = T({ scatterND_: RH }); -function rT(r, e, t10, o) { +var JG = N({ scatterND_: ZG }); +function $1(r, e, t6, o) { if (r.dtype !== "int32") throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`); if (r.rank > 2) throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`); let n = r.rank > 0 ? r.shape[0] : 1, s = r.rank > 1 ? r.shape[1] : 1; - if (t10.length !== s) - throw new Error(`outputShape has incorrect number of elements:, ${t10.length}, should be: ${s}.`); + if (t6.length !== s) + throw new Error(`outputShape has incorrect number of elements:, ${t6.length}, should be: ${s}.`); let a = e.size; if (!(e.rank === 0 || e.rank === 1 && a === n)) throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`); if (e.dtype !== o.dtype) throw new Error("sparseValues.dtype must match defaultValues.dtype"); } -function DH(r, e, t10, o = 0) { +function tH(r, e, t6, o = 0) { + yt(t6); let n = v(r, "sparseIndices", "sparseToDense", "int32"), s = v(e, "sparseValues", "sparseToDense", "string_or_numeric"), a = v(o, "defaultValue", "sparseToDense", s.dtype); - rT(n, s, t10, a); - let i = { sparseIndices: n, sparseValues: s, defaultValue: a }, p = { outputShape: t10 }; - return N.runKernel(ei, i, p); + $1(n, s, t6, a); + let i = { sparseIndices: n, sparseValues: s, defaultValue: a }, p = { outputShape: t6 }; + return T.runKernel(li, i, p); } -var PH = T({ sparseToDense_: DH }); -function OH(r, e) { - let t10 = v(e, "indices", "gatherND", "int32"), n = { params: v(r, "x", "gatherND", "string_or_numeric"), indices: t10 }; - return N.runKernel(Tn, n); +var rH = N({ sparseToDense_: tH }); +function oH(r, e) { + let t6 = v(e, "indices", "gatherND", "int32"), n = { params: v(r, "x", "gatherND", "string_or_numeric"), indices: t6 }; + return T.runKernel(un, n); } -var MH = T({ gatherND_: OH }); -function oT(r, e) { +var nH = N({ gatherND_: oH }); +function A1(r, e) { if (e == null) return r.shape.slice(); - if (Or(r.shape, e)) + if (Pr(r.shape, e)) return e; if (r.shape.length === e.length) { - let t10 = []; + let t6 = []; for (let o = 0; o < r.shape.length; o++) - e[o] == null && r.shape[o] != null ? t10.push(r.shape[o]) : t10.push(e[o]); - return t10; + e[o] == null && r.shape[o] != null ? t6.push(r.shape[o]) : t6.push(e[o]); + return t6; } return e; } -function LH(r, e, t10, o) { +function sH(r, e, t6, o) { let n = v(r, "x", "dropout"); - if ($(n.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`), $(e >= 0 && e < 1, () => `rate must be a float in the range [0, 1), but got ${e}.`), e === 0) - return r instanceof ut ? n.clone() : n; - let s = oT(n, t10), a = 1 - e, i = We(bf(ge(zf(s, 0, 1, "float32", o), a)), a); - return oe(n, i); + if (E(n.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`), E(e >= 0 && e < 1, () => `rate must be a float in the range [0, 1), but got ${e}.`), e === 0) + return r instanceof it ? n.clone() : n; + let s = A1(n, t6), a = 1 - e, i = Ge(ud(xe($d(s, 0, 1, "float32", o), a)), a); + return ae(n, i); } -var BH = T({ dropout_: LH }); -function wC(r) { +var aH = N({ dropout_: sH }); +function xC(r) { return Math.floor(Math.pow(2, Math.ceil(Math.log(r) / Math.log(2)))); } -function hl(r, e, t10) { +function il(r, e, t6) { let o = 1 - r % 2, n = new Float32Array(r); for (let s = 0; s < r; ++s) { let a = 2 * Math.PI * s / (r + o - 1); - n[s] = e - t10 * Math.cos(a); + n[s] = e - t6 * Math.cos(a); } return mr(n, "float32"); } -async function VH(r, e, t10 = 1) { +async function iH(r, e, t6 = 1) { let o = v(r, "predictions", "inTopK"), n = v(e, "targets", "inTopK"); - $(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), $(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), ht(o.shape.slice(0, o.shape.length - 1), n.shape, "predictions's shape should be align with the targets' shape, except the last dimension."); + E(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), E(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), ht(o.shape.slice(0, o.shape.length - 1), n.shape, "predictions's shape should be align with the targets' shape, except the last dimension."); let s = o.shape[o.shape.length - 1]; - $(t10 > 0 && t10 <= s, () => `'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t10}`); - let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = hb("bool", p); + E(t6 > 0 && t6 <= s, () => `'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t6}`); + let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = cb("bool", p); for (let l = 0; l < p; l++) { - let m = l * u, f = a.subarray(m, m + u), d = []; - for (let h = 0; h < f.length; h++) - d.push({ value: f[h], index: h }); - d.sort((h, g) => g.value - h.value), c[l] = 0; - for (let h = 0; h < t10; h++) - if (d[h].index === i[l]) { + let m = l * u, d = a.subarray(m, m + u), f = []; + for (let h = 0; h < d.length; h++) + f.push({ value: d[h], index: h }); + f.sort((h, g) => g.value - h.value), c[l] = 0; + for (let h = 0; h < t6; h++) + if (f[h].index === i[l]) { c[l] = 1; break; } } return r !== o && o.dispose(), e !== n && n.dispose(), nr(c, n.shape, "bool"); } -var zH = VH; -var SC = {}; -Be(SC, { conv2d: () => sT, depthwiseConv2d: () => uT, matMul: () => pT }); -function WH(r, e, t10, o, n, s = "NHWC", a) { +var uH = iH; +var yC = {}; +Ue(yC, { conv2d: () => F1, depthwiseConv2d: () => P1, matMul: () => M1 }); +function pH(r, e, t6, o, n, s = "NHWC", a) { let i = r; r.rank === 3 && (i = z(r, [1, r.shape[0], r.shape[1], r.shape[2]])); let p = e; - p.rank === 3 && (p = z(e, [1, e.shape[0], e.shape[1], e.shape[2]])), $(i.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`), $(p.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`), $(t10.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${t10}.`); + p.rank === 3 && (p = z(e, [1, e.shape[0], e.shape[1], e.shape[2]])), E(i.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`), E(p.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`), E(t6.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${t6}.`); let u = s === "NHWC" ? i.shape[3] : i.shape[1], c = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(u === t10[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t10[2]}.`), $(c === t10[3], () => `Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t10[3]}).`), Ot("conv2dDerFilter", n, a); - let l = { x: i, dy: p }, m = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, filterShape: t10 }; - return N.runKernel(lp, l, m); + E(u === t6[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t6[2]}.`), E(c === t6[3], () => `Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t6[3]}).`), Pt("conv2dDerFilter", n, a); + let l = { x: i, dy: p }, m = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, filterShape: t6 }; + return T.runKernel(cp, l, m); } -var nT = T({ conv2DBackpropFilter_: WH }); -function gu(r, e, t10) { - if (t10 == null || t10 === "linear") +var R1 = N({ conv2DBackpropFilter_: pH }); +function gu(r, e, t6) { + if (t6 == null || t6 === "linear") return r; - if (t10 === "relu") - return oe(r, qf(e)); - throw new Error(`Cannot compute gradient for fused activation ${t10}.`); + if (t6 === "relu") + return ae(r, Od(e)); + throw new Error(`Cannot compute gradient for fused activation ${t6}.`); } function xu(r, e) { - let t10 = e, o = nf(r.shape, e.shape); - return o.length > 0 && (t10 = tt(t10, o)), z(t10, r.shape); + let t6 = e, o = jm(r.shape, e.shape); + return o.length > 0 && (t6 = et(t6, o)), z(t6, r.shape); } -function yu(r, e, t10, o) { +function yu(r, e, t6, o) { if (e === "linear") return r; if (e === "relu") - return hi(r); + return Ti(r); if (e === "elu") - return xf(r); + return ad(r); if (e === "relu6") - return Wf(r); + return Ad(r); if (e === "prelu") - return Pf(r, t10); + return vd(r, t6); if (e === "leakyrelu") - return wf(r, o); + return ld(r, o); if (e === "sigmoid") - return Ms(r); + return zs(r); throw new Error(`Unknown fused activation ${e}.`); } var bu = (r, e) => !(r > 0) || e === "linear"; -function UH({ x: r, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { - if (p = p || "linear", bu(N.state.gradientDepth, p) === false) { - $(n === "NHWC", () => `Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); - let _ = mi(r, e, t10, o, n, s, a); - return i != null && (_ = ge(_, i)), yu(_, p, u, c); +function cH({ x: r, filter: e, strides: t6, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (p = p || "linear", bu(T.state.gradientDepth, p) === false) { + E(n === "NHWC", () => `Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); + let _ = vi(r, e, t6, o, n, s, a); + return i != null && (_ = xe(_, i)), yu(_, p, u, c); } - let l = v(r, "x", "conv2d", "float32"), m = v(e, "filter", "conv2d", "float32"), f = l, d = false; - l.rank === 3 && (d = true, f = z(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(f.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`), $(m.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`), Ot("fused conv2d", o, a); - let h = n === "NHWC" ? f.shape[3] : f.shape[1]; - $(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), $(lr(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`); - let g = uu(f.shape, m.shape, t10, s, o, a), y; - i != null && (y = v(i, "bias", "fused conv2d"), [y] = Re(y, l), n === "NHWC" ? Je(g.outShape, y.shape) : ($(y.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`), $(y.shape.length === 0 || y.shape[0] === g.outChannels || y.shape[0] === 1, () => `Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`))); + let l = v(r, "x", "conv2d", "float32"), m = v(e, "filter", "conv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = z(l, [1, l.shape[0], l.shape[1], l.shape[2]])), E(d.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`), E(m.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`), Pt("fused conv2d", o, a); + let h = n === "NHWC" ? d.shape[3] : d.shape[1]; + E(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), E(lr(t6, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t6} and dilations '${s}'`); + let g = uu(d.shape, m.shape, t6, s, o, a), x; + i != null && (x = v(i, "bias", "fused conv2d"), [x] = Re(x, l), n === "NHWC" ? Je(g.outShape, x.shape) : (E(x.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`), E(x.shape.length === 0 || x.shape[0] === g.outChannels || x.shape[0] === 1, () => `Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`))); let b; if (u != null) { let _ = u.shape; - if ($(_.length <= 1 || _.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`), _.length === 1) - $(_[0] === 1 || _[0] === g.outChannels, () => `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`); + if (E(_.length <= 1 || _.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`), _.length === 1) + E(_[0] === 1 || _[0] === g.outChannels, () => `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`); else if (_.length === 3) try { Je(_, g.outShape); - } catch (E) { - let R = `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`; - throw Error(R); + } catch ($) { + let A = `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`; + throw Error(A); } b = v(u, "prelu weights", "fused conv2d"); } - let C = (_, E) => { - $(n === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`); - let [R, A, D, O] = E, M = gu(_, D, p); - $(iu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); - let L = hf(A.shape, M, R, t10, o), W = nT(A, M, R.shape, t10, o), V = [L, W]; - if (O != null) { - let G = xu(O, M); - V.push(G); + let C = (_, $) => { + E(n === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`); + let [A, R, D, P] = $, M = gu(_, D, p); + E(iu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); + let L = nd(R.shape, M, A, t6, o), W = R1(R, M, A.shape, t6, o), V = [L, W]; + if (P != null) { + let U = xu(P, M); + V.push(U); } return V; - }, w = { x: f, filter: m, bias: y, preluActivationWeights: b }, k = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; - return i == null ? Cr((E, R, A) => { - let D = N.runKernel(Do, w, k); - return A([R, E, D]), d && (D = z(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: C }; - })(f, m) : Cr((E, R, A, D) => { - let O = N.runKernel(Do, w, k); - return D([R, E, O, A]), d && (O = z(O, [O.shape[1], O.shape[2], O.shape[3]])), { value: O, gradFunc: C }; - })(f, m, y); + }, w = { x: d, filter: m, bias: x, preluActivationWeights: b }, k = { strides: t6, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; + return i == null ? Cr(($, A, R) => { + let D = T.runKernel(ho, w, k); + return R([A, $, D]), f && (D = z(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: C }; + })(d, m) : Cr(($, A, R, D) => { + let P = T.runKernel(ho, w, k); + return D([A, $, P, R]), f && (P = z(P, [P.shape[1], P.shape[2], P.shape[3]])), { value: P, gradFunc: C }; + })(d, m, x); } -var sT = T({ fusedConv2d_: UH }); -function GH(r, e, t10, o, n, s = [1, 1], a) { +var F1 = N({ fusedConv2d_: cH }); +function lH(r, e, t6, o, n, s = [1, 1], a) { let i = r; r.rank === 3 && (i = z(r, [1, r.shape[0], r.shape[1], r.shape[2]])); let p = e; p.rank === 3 && (p = z(e, [1, e.shape[0], e.shape[1], e.shape[2]])); - let u = { x: i, dy: p }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, filterShape: t10 }; - return N.runKernel(hp, u, c); + let u = { x: i, dy: p }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, filterShape: t6 }; + return T.runKernel(dp, u, c); } -var aT = T({ depthwiseConv2dNativeBackpropFilter_: GH }); -function HH(r, e, t10, o, n, s = [1, 1], a) { +var D1 = N({ depthwiseConv2dNativeBackpropFilter_: lH }); +function mH(r, e, t6, o, n, s = [1, 1], a) { let i = e, p = false; e.rank === 3 && (p = true, i = z(e, [1, e.shape[0], e.shape[1], e.shape[2]])); - let u = { dy: i, filter: t10 }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r }, l = N.runKernel(gp, u, c); + let u = { dy: i, filter: t6 }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r }, l = T.runKernel(fp, u, c); return p ? z(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; } -var iT = T({ depthwiseConv2dNativeBackpropInput_: HH }); -function qH({ x: r, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { - if (bu(N.state.gradientDepth, p) === false) { - let k = Gp(r, e, t10, o, n, s, a); - return i != null && (k = ge(k, i)), yu(k, p, u, c); +var O1 = N({ depthwiseConv2dNativeBackpropInput_: mH }); +function dH({ x: r, filter: e, strides: t6, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (bu(T.state.gradientDepth, p) === false) { + let k = Bp(r, e, t6, o, n, s, a); + return i != null && (k = xe(k, i)), yu(k, p, u, c); } - let l = v(r, "x", "depthwiseConv2d", "float32"), m = v(e, "filter", "depthwiseConv2d", "float32"), f = l, d = false; - l.rank === 3 && (d = true, f = z(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(f.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`), $(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), $(f.shape[3] === m.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`), s == null && (s = [1, 1]), $(lr(t10, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), Ot("fused depthwiseConv2d", o, a); - let h = uu(f.shape, m.shape, t10, s, o, a, true), g; + let l = v(r, "x", "depthwiseConv2d", "float32"), m = v(e, "filter", "depthwiseConv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = z(l, [1, l.shape[0], l.shape[1], l.shape[2]])), E(d.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`), E(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), E(d.shape[3] === m.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`), s == null && (s = [1, 1]), E(lr(t6, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t6} and dilations '${s}'`), Pt("fused depthwiseConv2d", o, a); + let h = uu(d.shape, m.shape, t6, s, o, a, true), g; i != null && (g = v(i, "bias", "fused conv2d"), [g] = Re(g, l), Je(h.outShape, g.shape)); - let y; - u != null && (y = v(u, "prelu weights", "fused depthwiseConv2d")); + let x; + u != null && (x = v(u, "prelu weights", "fused depthwiseConv2d")); let b = (k, _) => { - $(iu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); - let [E, R, A, D] = _, O = gu(k, A, p), M = iT(R.shape, O, E, t10, o, s, a), L = aT(R, O, E.shape, t10, o, s, a); + E(iu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); + let [$, A, R, D] = _, P = gu(k, R, p), M = O1(A.shape, P, $, t6, o, s, a), L = D1(A, P, $.shape, t6, o, s, a); if (D != null) { - let W = xu(g, O); + let W = xu(g, P); return [M, L, W]; } return [M, L]; - }, C = { x: f, filter: m, bias: g, preluActivationWeights: y }, w = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; - return i == null ? Cr((_, E, R) => { - let A = N.runKernel(Po, C, w); - return R([E, _, A]), d && (A = z(A, [A.shape[1], A.shape[2], A.shape[3]])), { value: A, gradFunc: b }; - })(f, m) : Cr((_, E, R, A) => { - let D = N.runKernel(Po, C, w); - return A([E, _, D, R]), d && (D = z(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: b }; - })(f, m, g); + }, C = { x: d, filter: m, bias: g, preluActivationWeights: x }, w = { strides: t6, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; + return i == null ? Cr((_, $, A) => { + let R = T.runKernel(go, C, w); + return A([$, _, R]), f && (R = z(R, [R.shape[1], R.shape[2], R.shape[3]])), { value: R, gradFunc: b }; + })(d, m) : Cr((_, $, A, R) => { + let D = T.runKernel(go, C, w); + return R([$, _, D, A]), f && (D = z(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: b }; + })(d, m, g); } -var uT = T({ fusedDepthwiseConv2d_: qH }); -function KH({ a: r, b: e, transposeA: t10 = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { - if (bu(N.state.gradientDepth, s) === false) { - let O = Xe(r, e, t10, o); - return n != null && (O = ge(O, n)), yu(O, s, a, i); +var P1 = N({ fusedDepthwiseConv2d_: dH }); +function fH({ a: r, b: e, transposeA: t6 = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { + if (bu(T.state.gradientDepth, s) === false) { + let P = Xe(r, e, t6, o); + return n != null && (P = xe(P, n)), yu(P, s, a, i); } let p = v(r, "a", "fused matMul"), u = v(e, "b", "fused matMul"); [p, u] = Re(p, u); - let c = t10 ? p.shape[p.rank - 2] : p.shape[p.rank - 1], l = o ? u.shape[u.rank - 1] : u.shape[u.rank - 2], m = t10 ? p.shape[p.rank - 1] : p.shape[p.rank - 2], f = o ? u.shape[u.rank - 2] : u.shape[u.rank - 1], d = p.shape.slice(0, -2), h = u.shape.slice(0, -2), g = Ve(d), y = Ve(h); - $(c === l, () => `Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let C = Je(p.shape.slice(0, -2), u.shape.slice(0, -2)).concat([m, f]), w = t10 ? z(p, [g, c, m]) : z(p, [g, m, c]), k = o ? z(u, [y, f, l]) : z(u, [y, l, f]), _; + let c = t6 ? p.shape[p.rank - 2] : p.shape[p.rank - 1], l = o ? u.shape[u.rank - 1] : u.shape[u.rank - 2], m = t6 ? p.shape[p.rank - 1] : p.shape[p.rank - 2], d = o ? u.shape[u.rank - 2] : u.shape[u.rank - 1], f = p.shape.slice(0, -2), h = u.shape.slice(0, -2), g = ze(f), x = ze(h); + E(c === l, () => `Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t6} and transposeB=${o} must match.`); + let C = Je(p.shape.slice(0, -2), u.shape.slice(0, -2)).concat([m, d]), w = t6 ? z(p, [g, c, m]) : z(p, [g, m, c]), k = o ? z(u, [x, d, l]) : z(u, [x, l, d]), _; n != null && (_ = v(n, "bias", "fused matMul"), [_] = Re(_, p), Je(C, _.shape)); - let E; - a != null && (E = v(a, "prelu weights", "fused matMul")); - let R = (O, M) => { - let [L, W, V, G] = M, q = gu(z(O, V.shape), V, s), H, j; - if (!t10 && !o ? (H = Xe(q, W, false, true), j = Xe(L, q, true, false)) : !t10 && o ? (H = Xe(q, W, false, false), j = Xe(q, L, true, false)) : t10 && !o ? (H = Xe(W, q, false, true), j = Xe(L, q, false, false)) : (H = Xe(W, q, true, true), j = Xe(q, L, true, true)), n != null) { - let Y = xu(G, q); - return [H, j, Y]; + let $; + a != null && ($ = v(a, "prelu weights", "fused matMul")); + let A = (P, M) => { + let [L, W, V, U] = M, q = gu(z(P, V.shape), V, s), H, j; + if (!t6 && !o ? (H = Xe(q, W, false, true), j = Xe(L, q, true, false)) : !t6 && o ? (H = Xe(q, W, false, false), j = Xe(q, L, true, false)) : t6 && !o ? (H = Xe(W, q, false, true), j = Xe(L, q, false, false)) : (H = Xe(W, q, true, true), j = Xe(q, L, true, true)), n != null) { + let X = xu(U, q); + return [H, j, X]; } else return [H, j]; - }, A = { a: w, b: k, bias: _, preluActivationWeights: E }, D = { transposeA: t10, transposeB: o, activation: s, leakyreluAlpha: i }; + }, R = { a: w, b: k, bias: _, preluActivationWeights: $ }, D = { transposeA: t6, transposeB: o, activation: s, leakyreluAlpha: i }; return n == null ? Cr((M, L, W) => { - let V = N.runKernel(Fo, A, D); - return W([M, L, V]), { value: z(V, C), gradFunc: R }; + let V = T.runKernel(fo, R, D); + return W([M, L, V]), { value: z(V, C), gradFunc: A }; })(w, k) : Cr((M, L, W, V) => { - let G = N.runKernel(Fo, A, D); - return V([M, L, G, W]), { value: z(G, C), gradFunc: R }; + let U = T.runKernel(fo, R, D); + return V([M, L, U, W]), { value: z(U, C), gradFunc: A }; })(w, k, _); } -var pT = T({ fusedMatMul_: KH }); -function jH(r) { - return hl(r, 0.54, 0.46); +var M1 = N({ fusedMatMul_: fH }); +function hH(r) { + return il(r, 0.54, 0.46); } -var cT = T({ hammingWindow_: jH }); -function XH(r) { - return hl(r, 0.5, 0.5); +var L1 = N({ hammingWindow_: hH }); +function gH(r) { + return il(r, 0.5, 0.5); } -var Xf = T({ hannWindow_: XH }); -function YH(r, e, t10, o = false, n = 0) { +var Ld = N({ hannWindow_: gH }); +function xH(r, e, t6, o = false, n = 0) { let s = 0, a = []; for (; s + e <= r.size; ) - a.push(Ue(r, s, e)), s += t10; + a.push(He(r, s, e)), s += t6; if (o) for (; s < r.size; ) { - let i = s + e - r.size, p = gt([Ue(r, s, e - i), Bs([i], n)]); - a.push(p), s += t10; + let i = s + e - r.size, p = gt([He(r, s, e - i), Ws([i], n)]); + a.push(p), s += t6; } - return a.length === 0 ? gi([], [0, e]) : z(gt(a), [a.length, e]); + return a.length === 0 ? _i([], [0, e]) : z(gt(a), [a.length, e]); } -var Yf = T({ frame_: YH }); -function QH(r, e, t10, o, n = Xf) { - o == null && (o = wC(e)); - let s = Yf(r, e, t10), a = oe(s, n(e)); - return Kp(a, o); +var Bd = N({ frame_: xH }); +function yH(r, e, t6, o, n = Ld) { + o == null && (o = xC(e)); + let s = Bd(r, e, t6), a = ae(s, n(e)); + return Wp(a, o); } -var lT = T({ stft_: QH }); -function ZH(r, e, t10, o, n = "bilinear", s = 0) { - let a = v(r, "image", "cropAndResize"), i = v(e, "boxes", "cropAndResize", "float32"), p = v(t10, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; - $(a.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && i.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`), $(p.rank === 1 && p.shape[0] === u, () => `Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`), $(o.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`), $(o[0] >= 1 && o[1] >= 1, () => `cropSize must be atleast [1,1], but was ${o}`), $(n === "bilinear" || n === "nearest", () => `method must be bilinear or nearest, but was ${n}`); +var B1 = N({ stft_: yH }); +function bH(r, e, t6, o, n = "bilinear", s = 0) { + let a = v(r, "image", "cropAndResize"), i = v(e, "boxes", "cropAndResize", "float32"), p = v(t6, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; + E(a.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`), E(i.rank === 2 && i.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`), E(p.rank === 1 && p.shape[0] === u, () => `Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`), E(o.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`), E(o[0] >= 1 && o[1] >= 1, () => `cropSize must be atleast [1,1], but was ${o}`), E(n === "bilinear" || n === "nearest", () => `method must be bilinear or nearest, but was ${n}`); let c = { image: a, boxes: i, boxInd: p }, l = { method: n, extrapolationValue: s, cropSize: o }; - return N.runKernel(xn, c, l); + return T.runKernel(Yo, c, l); } -var mT = T({ cropAndResize_: ZH }); -function JH(r) { +var V1 = N({ cropAndResize_: bH }); +function CH(r) { let e = v(r, "image", "flipLeftRight", "float32"); - $(e.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`); - let t10 = { image: e }; - return N.runKernel(Sn, t10, {}); + E(e.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`); + let t6 = { image: e }; + return T.runKernel(on, t6, {}); } -var fT = T({ flipLeftRight_: JH }); -function eq(r) { - let e = v(r, "image", "grayscaleToRGB"), t10 = e.rank - 1, o = e.shape[t10]; - $(e.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`), $(o === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`); +var z1 = N({ flipLeftRight_: CH }); +function SH(r) { + let e = v(r, "image", "grayscaleToRGB"), t6 = e.rank - 1, o = e.shape[t6]; + E(e.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`), E(o === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`); let n = new Array(e.rank); - return n.fill(1, 0, t10), n[t10] = 3, fi(e, n); + return n.fill(1, 0, t6), n[t6] = 3, ki(e, n); } -var dT = T({ grayscaleToRGB_: eq }); -function tq(r, e, t10 = 0, o = 0.5) { +var W1 = N({ grayscaleToRGB_: SH }); +function wH(r, e, t6 = 0, o = 0.5) { let n = v(r, "image", "rotateWithOffset", "float32"); - $(n.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`); - let s = { image: n }, a = { radians: e, fillValue: t10, center: o }; - return N.runKernel(es, s, a); + E(n.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`); + let s = { image: n }, a = { radians: e, fillValue: t6, center: o }; + return T.runKernel(es, s, a); } -var hT = T({ rotateWithOffset_: tq }); -function Vo(r, e, t10, o, n, s) { +var U1 = N({ rotateWithOffset_: wH }); +function So(r, e, t6, o, n, s) { o == null && (o = 0.5), n == null && (n = Number.NEGATIVE_INFINITY), s == null && (s = 0); let a = r.shape[0]; - return t10 = Math.min(t10, a), $(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), $(r.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r.rank}'`), $(r.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`), $(e.rank === 1, () => "scores must be a 1D tensor"), $(e.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`), $(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; + return t6 = Math.min(t6, a), E(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), E(r.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r.rank}'`), E(r.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`), E(e.rank === 1, () => "scores must be a 1D tensor"), E(e.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`), E(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: t6, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; } -function rq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r, "boxes", "nonMaxSuppression", "float32"), a = v(e, "scores", "nonMaxSuppression", "float32"), i = Vo(s, a, t10, o, n); - t10 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; - let p = { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n }; - return N.runKernel(On, { boxes: s, scores: a }, p); +function IH(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r, "boxes", "nonMaxSuppression", "float32"), a = v(e, "scores", "nonMaxSuppression", "float32"), i = So(s, a, t6, o, n); + t6 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; + let p = { maxOutputSize: t6, iouThreshold: o, scoreThreshold: n }; + return T.runKernel(Tn, { boxes: s, scores: a }, p); } -var gT = T({ nonMaxSuppression_: rq }); -function xT(r, e, t10) { - let o = oq(r, e, t10), n = o < 0 ? -(o + 1) : o; +var G1 = N({ nonMaxSuppression_: IH }); +function H1(r, e, t6) { + let o = vH(r, e, t6), n = o < 0 ? -(o + 1) : o; r.splice(n, 0, e); } -function oq(r, e, t10) { - return sq(r, e, t10 || nq); +function vH(r, e, t6) { + return NH(r, e, t6 || kH); } -function nq(r, e) { +function kH(r, e) { return r > e ? 1 : r < e ? -1 : 0; } -function sq(r, e, t10) { +function NH(r, e, t6) { let o = 0, n = r.length, s = 0, a = false; for (; o < n; ) { s = o + (n - o >>> 1); - let i = t10(e, r[s]); + let i = t6(e, r[s]); i > 0 ? o = s + 1 : (n = s, a = !i); } return a ? o : -o - 1; } -function Qf(r, e, t10, o, n) { - return vC(r, e, t10, o, n, 0); +function Vd(r, e, t6, o, n) { + return bC(r, e, t6, o, n, 0); } -function Zf(r, e, t10, o, n, s) { - return vC(r, e, t10, o, n, 0, false, s, true); +function zd(r, e, t6, o, n, s) { + return bC(r, e, t6, o, n, 0, false, s, true); } -function Jf(r, e, t10, o, n, s) { - return vC(r, e, t10, o, n, s, true); +function Wd(r, e, t6, o, n, s) { + return bC(r, e, t6, o, n, s, true); } -function vC(r, e, t10, o, n, s, a = false, i = false, p = false) { +function bC(r, e, t6, o, n, s, a = false, i = false, p = false) { let u = []; for (let g = 0; g < e.length; g++) e[g] > n && u.push({ score: e[g], boxIndex: g, suppressBeginIndex: 0 }); - u.sort(yT); + u.sort(q1); let c = s > 0 ? -0.5 / s : 0, l = [], m = []; - for (; l.length < t10 && u.length > 0; ) { - let g = u.pop(), { score: y, boxIndex: b, suppressBeginIndex: C } = g; - if (y < n) + for (; l.length < t6 && u.length > 0; ) { + let g = u.pop(), { score: x, boxIndex: b, suppressBeginIndex: C } = g; + if (x < n) break; let w = false; for (let k = l.length - 1; k >= C; --k) { - let _ = aq(r, b, l[k]); + let _ = TH(r, b, l[k]); if (_ >= o) { w = true; break; } - if (g.score = g.score * iq(o, c, _), g.score <= n) + if (g.score = g.score * _H(o, c, _), g.score <= n) break; } - g.suppressBeginIndex = l.length, w || (g.score === y ? (l.push(b), m.push(g.score)) : g.score > n && xT(u, g, yT)); + g.suppressBeginIndex = l.length, w || (g.score === x ? (l.push(b), m.push(g.score)) : g.score > n && H1(u, g, q1)); } - let f = l.length, d = t10 - f; - i && d > 0 && (l.push(...new Array(d).fill(0)), m.push(...new Array(d).fill(0))); + let d = l.length, f = t6 - d; + i && f > 0 && (l.push(...new Array(f).fill(0)), m.push(...new Array(f).fill(0))); let h = { selectedIndices: l }; - return a && (h.selectedScores = m), p && (h.validOutputs = f), h; + return a && (h.selectedScores = m), p && (h.validOutputs = d), h; } -function aq(r, e, t10) { - let o = r.subarray(e * 4, e * 4 + 4), n = r.subarray(t10 * 4, t10 * 4 + 4), s = Math.min(o[0], o[2]), a = Math.min(o[1], o[3]), i = Math.max(o[0], o[2]), p = Math.max(o[1], o[3]), u = Math.min(n[0], n[2]), c = Math.min(n[1], n[3]), l = Math.max(n[0], n[2]), m = Math.max(n[1], n[3]), f = (i - s) * (p - a), d = (l - u) * (m - c); - if (f <= 0 || d <= 0) +function TH(r, e, t6) { + let o = r.subarray(e * 4, e * 4 + 4), n = r.subarray(t6 * 4, t6 * 4 + 4), s = Math.min(o[0], o[2]), a = Math.min(o[1], o[3]), i = Math.max(o[0], o[2]), p = Math.max(o[1], o[3]), u = Math.min(n[0], n[2]), c = Math.min(n[1], n[3]), l = Math.max(n[0], n[2]), m = Math.max(n[1], n[3]), d = (i - s) * (p - a), f = (l - u) * (m - c); + if (d <= 0 || f <= 0) return 0; - let h = Math.max(s, u), g = Math.max(a, c), y = Math.min(i, l), b = Math.min(p, m), C = Math.max(y - h, 0) * Math.max(b - g, 0); - return C / (f + d - C); + let h = Math.max(s, u), g = Math.max(a, c), x = Math.min(i, l), b = Math.min(p, m), C = Math.max(x - h, 0) * Math.max(b - g, 0); + return C / (d + f - C); } -function iq(r, e, t10) { - let o = Math.exp(e * t10 * t10); - return t10 <= r ? o : 0; +function _H(r, e, t6) { + let o = Math.exp(e * t6 * t6); + return t6 <= r ? o : 0; } -function yT(r, e) { +function q1(r, e) { return r.score - e.score || r.score === e.score && e.boxIndex - r.boxIndex; } -async function uq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r, "boxes", "nonMaxSuppressionAsync"), a = v(e, "scores", "nonMaxSuppressionAsync"), i = Vo(s, a, t10, o, n); - t10 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; - let p = await Promise.all([s.data(), a.data()]), u = p[0], c = p[1], { selectedIndices: l } = Qf(u, c, t10, o, n); +async function EH(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r, "boxes", "nonMaxSuppressionAsync"), a = v(e, "scores", "nonMaxSuppressionAsync"), i = So(s, a, t6, o, n); + t6 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; + let p = await Promise.all([s.data(), a.data()]), u = p[0], c = p[1], { selectedIndices: l } = Vd(u, c, t6, o, n); return s !== r && s.dispose(), a !== e && a.dispose(), mr(l, "int32"); } -var bT = uq; -function pq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = Vo(a, i, t10, o, n, s); - t10 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; - let u = { boxes: a, scores: i }, c = { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, l = N.runKernel(Mn, u, c); +var K1 = EH; +function $H(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = So(a, i, t6, o, n, s); + t6 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; + let u = { boxes: a, scores: i }, c = { maxOutputSize: t6, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, l = T.runKernel(_n, u, c); return { selectedIndices: l[0], selectedScores: l[1] }; } -var CT = T({ nonMaxSuppressionWithScore_: pq }); -async function cq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = Vo(a, i, t10, o, n, s); - t10 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; - let u = await Promise.all([a.data(), i.data()]), c = u[0], l = u[1], { selectedIndices: m, selectedScores: f } = Jf(c, l, t10, o, n, s); - return a !== r && a.dispose(), i !== e && i.dispose(), { selectedIndices: mr(m, "int32"), selectedScores: mr(f) }; +var j1 = N({ nonMaxSuppressionWithScore_: $H }); +async function AH(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = So(a, i, t6, o, n, s); + t6 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; + let u = await Promise.all([a.data(), i.data()]), c = u[0], l = u[1], { selectedIndices: m, selectedScores: d } = Wd(c, l, t6, o, n, s); + return a !== r && a.dispose(), i !== e && i.dispose(), { selectedIndices: mr(m, "int32"), selectedScores: mr(d) }; } -var IT = cq; -function lq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = Vo(a, i, t10, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, m = { boxes: a, scores: i }, f = { maxOutputSize: u, iouThreshold: c, scoreThreshold: l, padToMaxOutputSize: s }, d = N.runKernel(pa, m, f); - return { selectedIndices: d[0], validOutputs: d[1] }; +var X1 = AH; +function RH(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = So(a, i, t6, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, m = { boxes: a, scores: i }, d = { maxOutputSize: u, iouThreshold: c, scoreThreshold: l, padToMaxOutputSize: s }, f = T.runKernel(ba, m, d); + return { selectedIndices: f[0], validOutputs: f[1] }; } -var wT = T({ nonMaxSuppressionPadded_: lq }); -async function mq(r, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = Vo(a, i, t10, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, [m, f] = await Promise.all([a.data(), i.data()]), { selectedIndices: d, validOutputs: h } = Zf(m, f, u, c, l, s); - return a !== r && a.dispose(), i !== e && i.dispose(), { selectedIndices: mr(d, "int32"), validOutputs: be(h, "int32") }; +var Y1 = N({ nonMaxSuppressionPadded_: RH }); +async function FH(r, e, t6, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = So(a, i, t6, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, [m, d] = await Promise.all([a.data(), i.data()]), { selectedIndices: f, validOutputs: h } = zd(m, d, u, c, l, s); + return a !== r && a.dispose(), i !== e && i.dispose(), { selectedIndices: mr(f, "int32"), validOutputs: be(h, "int32") }; } -var ST = mq; -function fq(r, e, t10 = false, o = false) { +var Q1 = FH; +function DH(r, e, t6 = false, o = false) { let n = v(r, "images", "resizeBilinear"); - $(n.rank === 3 || n.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`), $(e.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${e}.`), $(o === false || t10 === false, () => "Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."); + E(n.rank === 3 || n.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`), E(e.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${e}.`), E(o === false || t6 === false, () => "Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."); let s = n, a = false; n.rank === 3 && (a = true, s = z(n, [1, n.shape[0], n.shape[1], n.shape[2]])); - let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = N.runKernel(Un, i, p); + let [] = e, i = { images: s }, p = { alignCorners: t6, halfPixelCenters: o, size: e }, u = T.runKernel(Mn, i, p); return a ? z(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; } -var vT = T({ resizeBilinear_: fq }); -function dq(r, e, t10 = false, o = false) { +var Z1 = N({ resizeBilinear_: DH }); +function OH(r, e, t6 = false, o = false) { let n = v(r, "images", "resizeNearestNeighbor"); - $(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), $(e.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`), $(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), $(o === false || t10 === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); + E(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), E(e.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`), E(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), E(o === false || t6 === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); let s = n, a = false; n.rank === 3 && (a = true, s = z(n, [1, n.shape[0], n.shape[1], n.shape[2]])); - let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = N.runKernel(Wn, i, p); + let [] = e, i = { images: s }, p = { alignCorners: t6, halfPixelCenters: o, size: e }, u = T.runKernel(Pn, i, p); return a ? z(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; } -var kT = T({ resizeNearestNeighbor_: dq }); -function hq(r, e = "binary", t10 = false, o = 0.5) { - let n = v(r, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = oe(mr([o]), 255), c, l, m, f; - if ($(n.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${n.rank}.`), $(n.shape[2] === 3 || n.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`), $(n.dtype === "int32" || n.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`), $(e === "otsu" || e === "binary", () => `Method must be binary or otsu, but was ${e}`), n.shape[2] === 3) { - [c, l, m] = $a(n, [1, 1, 1], -1); - let g = oe(c, s), y = oe(l, a), b = oe(m, i); - f = ge(ge(g, y), b); +var J1 = N({ resizeNearestNeighbor_: OH }); +function PH(r, e = "binary", t6 = false, o = 0.5) { + let n = v(r, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = ae(mr([o]), 255), c, l, m, d; + if (E(n.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${n.rank}.`), E(n.shape[2] === 3 || n.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`), E(n.dtype === "int32" || n.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`), E(e === "otsu" || e === "binary", () => `Method must be binary or otsu, but was ${e}`), n.shape[2] === 3) { + [c, l, m] = Oa(n, [1, 1, 1], -1); + let g = ae(c, s), x = ae(l, a), b = ae(m, i); + d = xe(xe(g, x), b); } else - f = r; + d = r; if (e === "otsu") { - let g = df(qe(Uf(f), "int32"), nr([]), 256); - u = gq(g, p); + let g = od(Ke(Rd(d), "int32"), nr([]), 256); + u = MH(g, p); } - let d = t10 ? Hp(f, u) : cu(f, u); - return qe(oe(d, 255), "int32"); + let f = t6 ? Vp(d, u) : cu(d, u); + return Ke(ae(f, 255), "int32"); } -function gq(r, e) { - let t10 = mr([-1]), o = mr([0]), n = mr([0]), s, a, i, p, u, c; +function MH(r, e) { + let t6 = mr([-1]), o = mr([0]), n = mr([0]), s, a, i, p, u, c; for (let l = 0; l < r.size - 1; l++) { - s = Ue(r, 0, l + 1), a = Ue(r, l + 1), u = We(tt(s), e), c = We(tt(a), e); - let m = tt(oe(s, di(0, s.size))); - i = We(m, tt(s)); - let f = Bs(a.shape, s.size), d = ge(di(0, a.size), f), h = oe(a, d); - p = We(tt(h), tt(a)); - let g = ke(i, p), y = ke(i, p), b = oe(u, c); - n = oe(oe(b, g), y); + s = He(r, 0, l + 1), a = He(r, l + 1), u = Ge(et(s), e), c = Ge(et(a), e); + let m = et(ae(s, Ni(0, s.size))); + i = Ge(m, et(s)); + let d = Ws(a.shape, s.size), f = xe(Ni(0, a.size), d), h = ae(a, f); + p = Ge(et(h), et(a)); + let g = Ne(i, p), x = Ne(i, p), b = ae(u, c); + n = ae(ae(b, g), x); let C = cu(n, o); - o = os(C, n, o), t10 = os(C, mr([l]), t10); + o = os(C, n, o), t6 = os(C, mr([l]), t6); } - return t10; + return t6; } -var TT = T({ threshold_: hq }); -function xq(r, e, t10 = "nearest", o = "constant", n = 0, s) { +var eN = N({ threshold_: PH }); +function LH(r, e, t6 = "nearest", o = "constant", n = 0, s) { let a = v(r, "image", "transform", "float32"), i = v(e, "transforms", "transform", "float32"); - $(a.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && (i.shape[0] === a.shape[0] || i.shape[0] === 1) && i.shape[1] === 8, () => "Error in transform: Input transform should be batch x 8 or 1 x 8"), $(s == null || s.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${s}.`); - let p = { image: a, transforms: i }, u = { interpolation: t10, fillMode: o, fillValue: n, outputShape: s }; - return N.runKernel(Jn, p, u); + E(a.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${a.rank}.`), E(i.rank === 2 && (i.shape[0] === a.shape[0] || i.shape[0] === 1) && i.shape[1] === 8, () => "Error in transform: Input transform should be batch x 8 or 1 x 8"), E(s == null || s.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${s}.`); + let p = { image: a, transforms: i }, u = { interpolation: t6, fillMode: o, fillValue: n, outputShape: s }; + return T.runKernel(Jn, p, u); } -var NT = T({ transform_: xq }); -function yq(r, e, t10) { - $(e % 1 === 0, () => `bandPart(): numLower must be an integer, got ${e}.`), $(t10 % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${t10}.`); +var tN = N({ transform_: LH }); +function BH(r, e, t6) { + E(e % 1 === 0, () => `bandPart(): numLower must be an integer, got ${e}.`), E(t6 % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${t6}.`); let o = v(r, "a", "bandPart"); - $(o.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${o.rank}.`); + E(o.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${o.rank}.`); let n = o.shape, [s, a] = o.shape.slice(-2); if (!(e <= s)) throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`); - if (!(t10 <= a)) - throw new Error(`bandPart(): numUpper (${t10}) must not be greater than the number of columns (${a}).`); - e < 0 && (e = s), t10 < 0 && (t10 = a); - let i = z(di(0, s, 1, "int32"), [-1, 1]), p = di(0, a, 1, "int32"), u = ke(i, p), c = lu(Hp(u, be(+e, "int32")), If(u, be(-t10, "int32"))), l = Wr([s, a], o.dtype); - return z(Ir(ko(z(o, [-1, s, a])).map((m) => os(c, m, l))), n); + if (!(t6 <= a)) + throw new Error(`bandPart(): numUpper (${t6}) must not be greater than the number of columns (${a}).`); + e < 0 && (e = s), t6 < 0 && (t6 = a); + let i = z(Ni(0, s, 1, "int32"), [-1, 1]), p = Ni(0, a, 1, "int32"), u = Ne(i, p), c = lu(Vp(u, be(+e, "int32")), cd(u, be(-t6, "int32"))), l = Vr([s, a], o.dtype); + return z(Sr(so(z(o, [-1, s, a])).map((m) => os(c, m, l))), n); } -var _T = T({ bandPart_: yq }); -function bq(r) { +var rN = N({ bandPart_: BH }); +function VH(r) { let e; if (Array.isArray(r)) { - e = false, $(r != null && r.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); + e = false, E(r != null && r.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); let n = r[0].shape[0]; for (let s = 1; s < r.length; ++s) - $(r[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`); + E(r[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`); } else - e = true, r = $a(r, r.shape[0], 0).map((n) => jp(n, [0])); - $(r.length <= r[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`); - let t10 = [], o = r; + e = true, r = Oa(r, r.shape[0], 0).map((n) => Up(n, [0])); + E(r.length <= r[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`); + let t6 = [], o = r; for (let n = 0; n < r.length; ++n) - t10.push(N.tidy(() => { + t6.push(T.tidy(() => { let s = o[n]; if (n > 0) for (let a = 0; a < n; ++a) { - let i = oe(tt(oe(t10[a], s)), t10[a]); - s = ke(s, i); + let i = ae(et(ae(t6[a], s)), t6[a]); + s = Ne(s, i); } - return We(s, pu(s, "euclidean")); + return Ge(s, pu(s, "euclidean")); })); - return e ? Ir(t10, 0) : t10; + return e ? Sr(t6, 0) : t6; } -var ET = T({ gramSchmidt_: bq }); -function Cq(r, e = false) { - if ($(r.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`), r.rank === 2) - return $T(r, e); +var oN = N({ gramSchmidt_: VH }); +function zH(r, e = false) { + if (E(r.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`), r.rank === 2) + return nN(r, e); { - let t10 = r.shape.slice(0, r.shape.length - 2).reduce((p, u) => p * u), o = ko(z(r, [t10, r.shape[r.shape.length - 2], r.shape[r.shape.length - 1]]), 0), n = [], s = []; + let t6 = r.shape.slice(0, r.shape.length - 2).reduce((p, u) => p * u), o = so(z(r, [t6, r.shape[r.shape.length - 2], r.shape[r.shape.length - 1]]), 0), n = [], s = []; o.forEach((p) => { - let [u, c] = $T(p, e); + let [u, c] = nN(p, e); n.push(u), s.push(c); }); - let a = z(Ir(n, 0), r.shape), i = z(Ir(s, 0), r.shape); + let a = z(Sr(n, 0), r.shape), i = z(Sr(s, 0), r.shape); return [a, i]; } } -function $T(r, e = false) { - return N.tidy(() => { - $(r.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`); - let t10 = r.shape[0], o = r.shape[1], n = yf(t10), s = zr(r), a = gi([[1]], [1, 1]), i = zr(a), p = t10 >= o ? o : t10; +function nN(r, e = false) { + return T.tidy(() => { + E(r.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`); + let t6 = r.shape[0], o = r.shape[1], n = id(t6), s = Br(r), a = _i([[1]], [1, 1]), i = Br(a), p = t6 >= o ? o : t6; for (let u = 0; u < p; ++u) { let c = s, l = i, m = n; - [i, s, n] = N.tidy(() => { - let f = Ue(s, [u, u], [t10 - u, 1]), d = pu(f), h = Ue(s, [u, u], [1, 1]), g = os(cu(h, 0), gi([[-1]]), gi([[1]])), y = ke(h, oe(g, d)), b = We(f, y); - b.shape[0] === 1 ? i = zr(a) : i = gt([a, Ue(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); - let C = yr(We(Xe(g, y), d)), w = Ue(s, [u, 0], [t10 - u, o]), k = oe(C, i), _ = Wp(i); + [i, s, n] = T.tidy(() => { + let d = He(s, [u, u], [t6 - u, 1]), f = pu(d), h = He(s, [u, u], [1, 1]), g = os(cu(h, 0), _i([[-1]]), _i([[1]])), x = Ne(h, ae(g, f)), b = Ge(d, x); + b.shape[0] === 1 ? i = Br(a) : i = gt([a, He(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); + let C = yr(Ge(Xe(g, x), f)), w = He(s, [u, 0], [t6 - u, o]), k = ae(C, i), _ = Mp(i); if (u === 0) - s = ke(w, Xe(k, Xe(_, w))); + s = Ne(w, Xe(k, Xe(_, w))); else { - let A = ke(w, Xe(k, Xe(_, w))); - s = gt([Ue(s, [0, 0], [u, o]), A], 0); + let R = Ne(w, Xe(k, Xe(_, w))); + s = gt([He(s, [0, 0], [u, o]), R], 0); } - let E = Wp(k), R = Ue(n, [0, u], [t10, n.shape[1] - u]); + let $ = Mp(k), A = He(n, [0, u], [t6, n.shape[1] - u]); if (u === 0) - n = ke(R, Xe(Xe(R, i), E)); + n = Ne(A, Xe(Xe(A, i), $)); else { - let A = ke(R, Xe(Xe(R, i), E)); - n = gt([Ue(n, [0, 0], [t10, u]), A], 1); + let R = Ne(A, Xe(Xe(A, i), $)); + n = gt([He(n, [0, 0], [t6, u]), R], 1); } return [i, s, n]; - }), Ft([c, l, m]); + }), Dt([c, l, m]); } - return !e && t10 > o && (n = Ue(n, [0, 0], [t10, o]), s = Ue(s, [0, 0], [o, o])), [n, s]; + return !e && t6 > o && (n = He(n, [0, 0], [t6, o]), s = He(s, [0, 0], [o, o])), [n, s]; }); } -var RT = T({ qr_: Cq }); +var sN = N({ qr_: zH }); var Et; (function(r) { r[r.NONE = 0] = "NONE", r[r.MEAN = 1] = "MEAN", r[r.SUM = 2] = "SUM", r[r.SUM_BY_NONZERO_WEIGHTS = 3] = "SUM_BY_NONZERO_WEIGHTS"; })(Et || (Et = {})); -function Iq(r, e, t10 = Et.SUM_BY_NONZERO_WEIGHTS) { +function WH(r, e, t6 = Et.SUM_BY_NONZERO_WEIGHTS) { let o = v(r, "losses", "computeWeightedLoss"), n = null; e != null && (n = v(e, "weights", "computeWeightedLoss")); - let s = n == null ? o : oe(o, n); - if (t10 === Et.NONE) + let s = n == null ? o : ae(o, n); + if (t6 === Et.NONE) return s; - if (t10 === Et.SUM) - return tt(s); - if (t10 === Et.MEAN) { + if (t6 === Et.SUM) + return et(s); + if (t6 === Et.MEAN) { if (n == null) return mu(s); { - let a = o.size / n.size, i = We(tt(s), tt(n)); - return a > 1 ? We(i, be(a)) : i; + let a = o.size / n.size, i = Ge(et(s), et(n)); + return a > 1 ? Ge(i, be(a)) : i; } } - if (t10 === Et.SUM_BY_NONZERO_WEIGHTS) { + if (t6 === Et.SUM_BY_NONZERO_WEIGHTS) { if (n == null) - return We(tt(s), be(o.size)); + return Ge(et(s), be(o.size)); { - let a = oe(n, zs(o.shape)), i = qe(tt(Ff(a, be(0))), "float32"); - return We(tt(s), i); + let a = ae(n, Gs(o.shape)), i = Ke(et(wd(a, be(0))), "float32"); + return Ge(et(s), i); } } - throw Error(`Unknown reduction: ${t10}`); + throw Error(`Unknown reduction: ${t6}`); } -var sr = T({ computeWeightedLoss_: Iq }); -function wq(r, e, t10, o = Et.SUM_BY_NONZERO_WEIGHTS) { +var sr = N({ computeWeightedLoss_: WH }); +function UH(r, e, t6, o = Et.SUM_BY_NONZERO_WEIGHTS) { let n = v(r, "labels", "absoluteDifference"), s = v(e, "predictions", "absoluteDifference"), a = null; - t10 != null && (a = v(t10, "weights", "absoluteDifference")), ht(n.shape, s.shape, "Error in absoluteDifference: "); - let i = Qt(ke(n, s)); + t6 != null && (a = v(t6, "weights", "absoluteDifference")), ht(n.shape, s.shape, "Error in absoluteDifference: "); + let i = Yt(Ne(n, s)); return sr(i, a, o); } -var AT = T({ absoluteDifference_: wq }); -function Sq(r, e, t10, o, n = Et.SUM_BY_NONZERO_WEIGHTS) { +var aN = N({ absoluteDifference_: UH }); +function GH(r, e, t6, o, n = Et.SUM_BY_NONZERO_WEIGHTS) { let s = v(r, "labels", "cosineDistance"), a = v(e, "predictions", "cosineDistance"), i = null; o != null && (i = v(o, "weights", "cosineDistance")), ht(s.shape, a.shape, "Error in cosineDistance: "); - let p = be(1), u = ke(p, tt(oe(s, a), t10, true)); + let p = be(1), u = Ne(p, et(ae(s, a), t6, true)); return sr(u, i, n); } -var FT = T({ cosineDistance_: Sq }); -function vq(r, e, t10, o = Et.SUM_BY_NONZERO_WEIGHTS) { +var iN = N({ cosineDistance_: GH }); +function HH(r, e, t6, o = Et.SUM_BY_NONZERO_WEIGHTS) { let n = v(r, "labels", "hingeLoss"), s = v(e, "predictions", "hingeLoss"), a = null; - t10 != null && (a = v(t10, "weights", "hingeLoss")), ht(n.shape, s.shape, "Error in hingeLoss: "); + t6 != null && (a = v(t6, "weights", "hingeLoss")), ht(n.shape, s.shape, "Error in hingeLoss: "); let i = be(1); - n = ke(oe(be(2), n), i); - let p = hi(ke(i, oe(n, s))); + n = Ne(ae(be(2), n), i); + let p = Ti(Ne(i, ae(n, s))); return sr(p, a, o); } -var DT = T({ hingeLoss_: vq }); -function kq(r, e, t10, o = 1, n = Et.SUM_BY_NONZERO_WEIGHTS) { +var uN = N({ hingeLoss_: HH }); +function qH(r, e, t6, o = 1, n = Et.SUM_BY_NONZERO_WEIGHTS) { let s = v(r, "labels", "huberLoss"), a = v(e, "predictions", "huberLoss"), i = null; - t10 != null && (i = v(t10, "weights", "huberLoss")), ht(s.shape, a.shape, "Error in huberLoss: "); - let p = be(o), u = Qt(ke(a, s)), c = Af(u, p), l = ke(u, c), m = ge(oe(be(0.5), Zt(c)), oe(p, l)); + t6 != null && (i = v(t6, "weights", "huberLoss")), ht(s.shape, a.shape, "Error in huberLoss: "); + let p = be(o), u = Yt(Ne(a, s)), c = Sd(u, p), l = Ne(u, c), m = xe(ae(be(0.5), Qt(c)), ae(p, l)); return sr(m, i, n); } -var PT = T({ huberLoss_: kq }); -function Tq(r, e, t10, o = 1e-7, n = Et.SUM_BY_NONZERO_WEIGHTS) { +var pN = N({ huberLoss_: qH }); +function KH(r, e, t6, o = 1e-7, n = Et.SUM_BY_NONZERO_WEIGHTS) { let s = v(r, "labels", "logLoss"), a = v(e, "predictions", "logLoss"), i = null; - t10 != null && (i = v(t10, "weights", "logLoss")), ht(s.shape, a.shape, "Error in logLoss: "); - let p = be(1), u = be(o), c = yr(oe(s, Ea(ge(a, u)))), l = oe(ke(p, s), Ea(ge(ke(p, a), u))), m = ke(c, l); + t6 != null && (i = v(t6, "weights", "logLoss")), ht(s.shape, a.shape, "Error in logLoss: "); + let p = be(1), u = be(o), c = yr(ae(s, Da(xe(a, u)))), l = ae(Ne(p, s), Da(xe(Ne(p, a), u))), m = Ne(c, l); return sr(m, i, n); } -var OT = T({ logLoss_: Tq }); -function Nq(r, e, t10, o = Et.SUM_BY_NONZERO_WEIGHTS) { +var cN = N({ logLoss_: KH }); +function jH(r, e, t6, o = Et.SUM_BY_NONZERO_WEIGHTS) { let n = v(r, "labels", "meanSquaredError"), s = v(e, "predictions", "meanSquaredError"), a = null; - t10 != null && (a = v(t10, "weights", "meanSquaredError")), ht(n.shape, s.shape, "Error in meanSquaredError: "); - let i = Hf(n, s); + t6 != null && (a = v(t6, "weights", "meanSquaredError")), ht(n.shape, s.shape, "Error in meanSquaredError: "); + let i = Dd(n, s); return sr(i, a, o); } -var MT = T({ meanSquaredError_: Nq }); -function _q(r, e) { - let t10 = v(r, "labels", "sigmoidCrossEntropyWithLogits"), o = v(e, "logits", "sigmoidCrossEntropyWithLogits"); - ht(t10.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); - let n = hi(o), s = oe(o, t10), a = Sf(Bo(yr(Qt(o)))); - return ge(ke(n, s), a); +var lN = N({ meanSquaredError_: jH }); +function XH(r, e) { + let t6 = v(r, "labels", "sigmoidCrossEntropyWithLogits"), o = v(e, "logits", "sigmoidCrossEntropyWithLogits"); + ht(t6.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); + let n = Ti(o), s = ae(o, t6), a = md(Co(yr(Yt(o)))); + return xe(Ne(n, s), a); } -function Eq(r, e, t10, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { +function YH(r, e, t6, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { let s = v(r, "multiClassLabels", "sigmoidCrossEntropy"), a = v(e, "logits", "sigmoidCrossEntropy"), i = null; - if (t10 != null && (i = v(t10, "weights", "sigmoidCrossEntropy")), ht(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { + if (t6 != null && (i = v(t6, "weights", "sigmoidCrossEntropy")), ht(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { let u = be(o), c = be(1), l = be(0.5); - s = ge(oe(s, ke(c, u)), oe(l, u)); + s = xe(ae(s, Ne(c, u)), ae(l, u)); } - let p = _q(s, a); + let p = XH(s, a); return sr(p, i, n); } -var LT = T({ sigmoidCrossEntropy_: Eq }); -function $q(r, e, t10 = -1) { - if (t10 === -1 && (t10 = e.rank - 1), t10 !== e.rank - 1) - throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t10}`); +var mN = N({ sigmoidCrossEntropy_: YH }); +function QH(r, e, t6 = -1) { + if (t6 === -1 && (t6 = e.rank - 1), t6 !== e.rank - 1) + throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t6}`); return Cr((n, s, a) => { - let p = Tf(s, [t10], true), u = ke(qe(s, "float32"), p); + let p = hd(s, [t6], true), u = Ne(Ke(s, "float32"), p); a([n, u]); - let c = yr(oe(u, n)); - return { value: tt(c, [t10]), gradFunc: (f, d) => { - let [h, g] = d, y = Ta(f.shape, [t10]); - return [oe(z(f, y), ke(qe(h, "float32"), Bo(g))), oe(z(f, y), ke(Bo(g), qe(h, "float32")))]; + let c = yr(ae(u, n)); + return { value: et(c, [t6]), gradFunc: (d, f) => { + let [h, g] = f, x = Aa(d.shape, [t6]); + return [ae(z(d, x), Ne(Ke(h, "float32"), Co(g))), ae(z(d, x), Ne(Co(g), Ke(h, "float32")))]; } }; })(r, e); } -function Rq(r, e, t10, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { +function ZH(r, e, t6, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { let s = v(r, "onehotLabels", "softmaxCrossEntropy"), a = v(e, "logits", "softmaxCrossEntropy"), i = null; - if (t10 != null && (i = v(t10, "weights", "softmaxCrossEntropy")), ht(s.shape, a.shape, "Error in softmaxCrossEntropy: "), o > 0) { + if (t6 != null && (i = v(t6, "weights", "softmaxCrossEntropy")), ht(s.shape, a.shape, "Error in softmaxCrossEntropy: "), o > 0) { let u = be(o), c = be(1), l = be(s.shape[1]); - s = ge(oe(s, ke(c, u)), We(u, l)); + s = xe(ae(s, Ne(c, u)), Ge(u, l)); } - let p = $q(s, a); + let p = QH(s, a); return sr(p, i, n); } -var BT = T({ softmaxCrossEntropy_: Rq }); -function Aq(r, e, t10, o) { - let n = v(r, "indices", "sparseFillEmptyRows", "int32"), s = v(e, "values", "sparseFillEmptyRows"), a = v(t10, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); +var dN = N({ softmaxCrossEntropy_: ZH }); +function JH(r, e, t6, o) { + let n = v(r, "indices", "sparseFillEmptyRows", "int32"), s = v(e, "values", "sparseFillEmptyRows"), a = v(t6, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); if (n.rank !== 2) throw new Error(`Indices should be Tensor2D but received shape ${n.shape}`); @@ -8526,12 +8536,12 @@ function Aq(r, e, t10, o) { throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`); if (i.rank !== 0) throw new Error(`Default value should be a scalar but received shape ${i.shape}`); - let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = N.runKernel(Qa, p); + let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = T.runKernel(ui, p); return { outputIndices: u[0], outputValues: u[1], emptyRowIndicator: u[2], reverseIndexMap: u[3] }; } -var VT = T({ sparseFillEmptyRows_: Aq }); -function Fq(r, e, t10) { - let o = v(r, "inputIndices", "sparseReshape", "int32"), n = v(e, "inputShape", "sparseReshape", "int32"), s = v(t10, "newShape", "sparseReshape", "int32"); +var fN = N({ sparseFillEmptyRows_: JH }); +function eq(r, e, t6) { + let o = v(r, "inputIndices", "sparseReshape", "int32"), n = v(e, "inputShape", "sparseReshape", "int32"), s = v(t6, "newShape", "sparseReshape", "int32"); if (o.rank !== 2) throw new Error(`Input indices should be Tensor2D but received shape ${o.shape}`); @@ -8539,12 +8549,12 @@ function Fq(r, e, t10) { throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`); if (s.rank !== 1) throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`); - let a = { inputIndices: o, inputShape: n, newShape: s }, i = N.runKernel(ga, a); + let a = { inputIndices: o, inputShape: n, newShape: s }, i = T.runKernel(wa, a); return { outputIndices: i[0], outputShape: i[1] }; } -var zT = T({ sparseReshape_: Fq }); -function Dq(r, e, t10) { - let o = v(r, "data", "sparseSegmentMean"), n = v(e, "indices", "sparseSegmentMean", "int32"), s = v(t10, "segmentIds", "sparseSegmentMean", "int32"); +var hN = N({ sparseReshape_: eq }); +function tq(r, e, t6) { + let o = v(r, "data", "sparseSegmentMean"), n = v(e, "indices", "sparseSegmentMean", "int32"), s = v(t6, "segmentIds", "sparseSegmentMean", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8554,11 +8564,11 @@ function Dq(r, e, t10) { throw new Error(`Segment ids should be Tensor1D but received shape ${s.shape}`); let a = { data: o, indices: n, segmentIds: s }; - return N.runKernel(Za, a); + return T.runKernel(pi, a); } -var WT = T({ sparseSegmentMean_: Dq }); -function Pq(r, e, t10) { - let o = v(r, "data", "sparseSegmentSum"), n = v(e, "indices", "sparseSegmentSum", "int32"), s = v(t10, "segmentIds", "sparseSegmentSum", "int32"); +var gN = N({ sparseSegmentMean_: tq }); +function rq(r, e, t6) { + let o = v(r, "data", "sparseSegmentSum"), n = v(e, "indices", "sparseSegmentSum", "int32"), s = v(t6, "segmentIds", "sparseSegmentSum", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8568,10 +8578,10 @@ function Pq(r, e, t10) { throw new Error(`Segment ids should be Tensor1D but received shape ${s.shape}`); let a = { data: o, indices: n, segmentIds: s }; - return N.runKernel(Ja, a); + return T.runKernel(ci, a); } -var UT = T({ sparseSegmentSum_: Pq }); -function Oq(r, e, t10, o, n, s, a, i) { +var xN = N({ sparseSegmentSum_: rq }); +function oq(r, e, t6, o, n, s, a, i) { let p = v(r, "data", "stringNGrams", "string"); if (p.dtype !== "string") throw new Error("Data must be of datatype string"); @@ -8580,44 +8590,44 @@ function Oq(r, e, t10, o, n, s, a, i) { let u = v(e, "dataSplits", "stringNGrams"); if (u.dtype !== "int32") throw new Error("Data splits must be of datatype int32"); - let c = { separator: t10, nGramWidths: o, leftPad: n, rightPad: s, padWidth: a, preserveShortSequences: i }, l = { data: p, dataSplits: u }, m = N.runKernel(Ns, l, c); + let c = { separator: t6, nGramWidths: o, leftPad: n, rightPad: s, padWidth: a, preserveShortSequences: i }, l = { data: p, dataSplits: u }, m = T.runKernel(As, l, c); return { nGrams: m[0], nGramsSplits: m[1] }; } -var GT = T({ stringNGrams_: Oq }); -function Mq(r, e, t10 = true) { +var yN = N({ stringNGrams_: oq }); +function nq(r, e, t6 = true) { let o = v(r, "input", "stringSplit", "string"), n = v(e, "delimiter", "stringSplit", "string"); if (o.rank !== 1) throw new Error(`Input should be Tensor1D but received shape ${o.shape}`); if (n.rank !== 0) throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`); - let s = { skipEmpty: t10 }, a = { input: o, delimiter: n }, i = N.runKernel(ri, a, s); + let s = { skipEmpty: t6 }, a = { input: o, delimiter: n }, i = T.runKernel(di, a, s); return { indices: i[0], values: i[1], shape: i[2] }; } -var HT = T({ stringSplit_: Mq }); -function Lq(r, e) { - let t10 = v(r, "input", "stringToHashBucketFast", "string"), o = { numBuckets: e }; +var bN = N({ stringSplit_: nq }); +function sq(r, e) { + let t6 = v(r, "input", "stringToHashBucketFast", "string"), o = { numBuckets: e }; if (e <= 0) throw new Error("Number of buckets must be at least 1"); - let n = { input: t10 }; - return N.runKernel(oi, n, o); + let n = { input: t6 }; + return T.runKernel(fi, n, o); } -var qT = T({ stringToHashBucketFast_: Lq }); -var Bq = { fft: qp, ifft: hu, rfft: Kp, irfft: Gf }; -var Vq = { hammingWindow: cT, hannWindow: Xf, frame: Yf, stft: lT }; -var zq = { flipLeftRight: fT, grayscaleToRGB: dT, resizeNearestNeighbor: kT, resizeBilinear: vT, rotateWithOffset: hT, cropAndResize: mT, nonMaxSuppression: gT, nonMaxSuppressionAsync: bT, nonMaxSuppressionWithScore: CT, nonMaxSuppressionWithScoreAsync: IT, nonMaxSuppressionPadded: wT, nonMaxSuppressionPaddedAsync: ST, threshold: TT, transform: NT }; -var Wq = { bandPart: _T, gramSchmidt: ET, qr: RT }; -var Uq = { absoluteDifference: AT, computeWeightedLoss: sr, cosineDistance: FT, hingeLoss: DT, huberLoss: PT, logLoss: OT, meanSquaredError: MT, sigmoidCrossEntropy: LT, softmaxCrossEntropy: BT }; -var Gq = { sparseFillEmptyRows: VT, sparseReshape: zT, sparseSegmentMean: WT, sparseSegmentSum: UT }; -var Hq = { stringNGrams: GT, stringSplit: HT, stringToHashBucketFast: qT }; -var wr = class extends ll { - minimize(e, t10 = false, o) { +var CN = N({ stringToHashBucketFast_: sq }); +var aq = { fft: zp, ifft: hu, rfft: Wp, irfft: Fd }; +var iq = { hammingWindow: L1, hannWindow: Ld, frame: Bd, stft: B1 }; +var uq = { flipLeftRight: z1, grayscaleToRGB: W1, resizeNearestNeighbor: J1, resizeBilinear: Z1, rotateWithOffset: U1, cropAndResize: V1, nonMaxSuppression: G1, nonMaxSuppressionAsync: K1, nonMaxSuppressionWithScore: j1, nonMaxSuppressionWithScoreAsync: X1, nonMaxSuppressionPadded: Y1, nonMaxSuppressionPaddedAsync: Q1, threshold: eN, transform: tN }; +var pq = { bandPart: rN, gramSchmidt: oN, qr: sN }; +var cq = { absoluteDifference: aN, computeWeightedLoss: sr, cosineDistance: iN, hingeLoss: uN, huberLoss: pN, logLoss: cN, meanSquaredError: lN, sigmoidCrossEntropy: mN, softmaxCrossEntropy: dN }; +var lq = { sparseFillEmptyRows: fN, sparseReshape: hN, sparseSegmentMean: gN, sparseSegmentSum: xN }; +var mq = { stringNGrams: yN, stringSplit: bN, stringToHashBucketFast: CN }; +var wr = class extends ol { + minimize(e, t6 = false, o) { let { value: n, grads: s } = this.computeGradients(e, o); if (o != null) { let a = o.map((i) => ({ name: i.name, tensor: s[i.name] })); this.applyGradients(a); } else this.applyGradients(s); - return Ft(s), t10 ? n : (n.dispose(), null); + return Dt(s), t6 ? n : (n.dispose(), null); } get iterations() { return this.iterations_ == null && (this.iterations_ = 0), this.iterations_; @@ -8625,11 +8635,11 @@ var wr = class extends ll { incrementIterations() { this.iterations_ = this.iterations + 1; } - computeGradients(e, t10) { - return dC(e, t10); + computeGradients(e, t6) { + return pC(e, t6); } dispose() { - this.iterations_ != null && Ft(this.iterations_); + this.iterations_ != null && Dt(this.iterations_); } async saveIterations() { return this.iterations_ == null && (this.iterations_ = 0), { name: "iter", tensor: be(this.iterations_, "int32") }; @@ -8645,158 +8655,158 @@ var wr = class extends ll { } }; Object.defineProperty(wr, Symbol.hasInstance, { value: (r) => r.minimize != null && r.computeGradients != null && r.applyGradients != null }); -var xi = class extends wr { - constructor(e, t10, o = null) { - super(), this.learningRate = e, this.rho = t10, this.epsilon = o, this.accumulatedGrads = [], this.accumulatedUpdates = [], o == null && (this.epsilon = N.backend.epsilon()); +var Ei = class extends wr { + constructor(e, t6, o = null) { + super(), this.learningRate = e, this.rho = t6, this.epsilon = o, this.accumulatedGrads = [], this.accumulatedUpdates = [], o == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = N.registeredVariables[o], a = false; - this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: Ne(() => Gt(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: Ne(() => Gt(s).variable(a)) }); + let s = T.registeredVariables[o], a = false; + this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: Ee(() => Ut(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: Ee(() => Ut(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; if (i == null) return; let p = this.accumulatedGrads[n].variable, u = this.accumulatedUpdates[n].variable; - Ne(() => { - let c = ge(oe(p, this.rho), oe(Zt(i), 1 - this.rho)), l = oe(We(Rr(ge(u, this.epsilon)), Rr(ge(p, this.epsilon))), i), m = ge(oe(u, this.rho), oe(Zt(l), 1 - this.rho)); + Ee(() => { + let c = xe(ae(p, this.rho), ae(Qt(i), 1 - this.rho)), l = ae(Ge($r(xe(u, this.epsilon)), $r(xe(p, this.epsilon))), i), m = xe(ae(u, this.rho), ae(Qt(l), 1 - this.rho)); p.assign(c), u.assign(m); - let f = ge(oe(l, -this.learningRate), s); - s.assign(f); + let d = xe(ae(l, -this.learningRate), s); + s.assign(d); }); }), this.incrementIterations(); } dispose() { - this.accumulatedUpdates != null && (Ft(this.accumulatedGrads.map((e) => e.variable)), Ft(this.accumulatedUpdates.map((e) => e.variable))); + this.accumulatedUpdates != null && (Dt(this.accumulatedGrads.map((e) => e.variable)), Dt(this.accumulatedUpdates.map((e) => e.variable))); } async getWeights() { let e = [...this.accumulatedGrads, ...this.accumulatedUpdates]; - return [await this.saveIterations()].concat(e.map((t10) => ({ name: t10.originalName, tensor: t10.variable }))); + return [await this.saveIterations()].concat(e.map((t6) => ({ name: t6.originalName, tensor: t6.variable }))); } async setWeights(e) { e = await this.extractIterations(e); - let t10 = e.length / 2, o = false; - this.accumulatedGrads = e.slice(0, t10).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedUpdates = e.slice(t10, t10 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); + let t6 = e.length / 2, o = false; + this.accumulatedGrads = e.slice(0, t6).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedUpdates = e.slice(t6, t6 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); } getConfig() { return { learningRate: this.learningRate, rho: this.rho, epsilon: this.epsilon }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.rho, t10.epsilon); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.rho, t6.epsilon); } }; -xi.className = "Adadelta"; -$r(xi); -var yi = class extends wr { - constructor(e, t10 = 0.1) { - super(), this.learningRate = e, this.initialAccumulatorValue = t10, this.accumulatedGrads = []; +Ei.className = "Adadelta"; +Er(Ei); +var $i = class extends wr { + constructor(e, t6 = 0.1) { + super(), this.learningRate = e, this.initialAccumulatorValue = t6, this.accumulatedGrads = []; } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = N.registeredVariables[o]; - this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accumulator`, variable: Ne(() => Bs(s.shape, this.initialAccumulatorValue).variable(false)) }); + let s = T.registeredVariables[o]; + this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accumulator`, variable: Ee(() => Ws(s.shape, this.initialAccumulatorValue).variable(false)) }); let a = Array.isArray(e) ? e[n].tensor : e[o]; if (a == null) return; let i = this.accumulatedGrads[n].variable; - Ne(() => { - let p = ge(i, Zt(a)); + Ee(() => { + let p = xe(i, Qt(a)); i.assign(p); - let u = ge(oe(We(a, Rr(ge(p, N.backend.epsilon()))), -this.learningRate), s); + let u = xe(ae(Ge(a, $r(xe(p, T.backend.epsilon()))), -this.learningRate), s); s.assign(u); }); }), this.incrementIterations(); } dispose() { - this.accumulatedGrads != null && Ft(this.accumulatedGrads.map((e) => e.variable)); + this.accumulatedGrads != null && Dt(this.accumulatedGrads.map((e) => e.variable)); } async getWeights() { return [await this.saveIterations()].concat(this.accumulatedGrads.map((e) => ({ name: e.originalName, tensor: e.variable }))); } async setWeights(e) { e = await this.extractIterations(e); - let t10 = false; - this.accumulatedGrads = e.map((o) => ({ originalName: o.name, variable: o.tensor.variable(t10) })); + let t6 = false; + this.accumulatedGrads = e.map((o) => ({ originalName: o.name, variable: o.tensor.variable(t6) })); } getConfig() { return { learningRate: this.learningRate, initialAccumulatorValue: this.initialAccumulatorValue }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.initialAccumulatorValue); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.initialAccumulatorValue); } }; -yi.className = "Adagrad"; -$r(yi); -var bi = class extends wr { - constructor(e, t10, o, n = null) { - super(), this.learningRate = e, this.beta1 = t10, this.beta2 = o, this.epsilon = n, this.accumulatedFirstMoment = [], this.accumulatedSecondMoment = [], Ne(() => { - this.accBeta1 = be(t10).variable(), this.accBeta2 = be(o).variable(); - }), n == null && (this.epsilon = N.backend.epsilon()); +$i.className = "Adagrad"; +Er($i); +var Ai = class extends wr { + constructor(e, t6, o, n = null) { + super(), this.learningRate = e, this.beta1 = t6, this.beta2 = o, this.epsilon = n, this.accumulatedFirstMoment = [], this.accumulatedSecondMoment = [], Ee(() => { + this.accBeta1 = be(t6).variable(), this.accBeta2 = be(o).variable(); + }), n == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { - let t10 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); - Ne(() => { - let o = ke(1, this.accBeta1), n = ke(1, this.accBeta2); - t10.forEach((s, a) => { - let i = N.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Ne(() => Gt(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: Ne(() => Gt(i).variable(p)) }); + let t6 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); + Ee(() => { + let o = Ne(1, this.accBeta1), n = Ne(1, this.accBeta2); + t6.forEach((s, a) => { + let i = T.registeredVariables[s], p = false; + this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Ee(() => Ut(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: Ee(() => Ut(i).variable(p)) }); let u = Array.isArray(e) ? e[a].tensor : e[s]; if (u == null) return; - let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedSecondMoment[a].variable, m = ge(oe(c, this.beta1), oe(u, 1 - this.beta1)), f = ge(oe(l, this.beta2), oe(Zt(u), 1 - this.beta2)), d = We(m, o), h = We(f, n); - c.assign(m), l.assign(f); - let g = ge(oe(We(d, ge(Rr(h), this.epsilon)), -this.learningRate), i); + let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedSecondMoment[a].variable, m = xe(ae(c, this.beta1), ae(u, 1 - this.beta1)), d = xe(ae(l, this.beta2), ae(Qt(u), 1 - this.beta2)), f = Ge(m, o), h = Ge(d, n); + c.assign(m), l.assign(d); + let g = xe(ae(Ge(f, xe($r(h), this.epsilon)), -this.learningRate), i); i.assign(g); - }), this.accBeta1.assign(oe(this.accBeta1, this.beta1)), this.accBeta2.assign(oe(this.accBeta2, this.beta2)); + }), this.accBeta1.assign(ae(this.accBeta1, this.beta1)), this.accBeta2.assign(ae(this.accBeta2, this.beta2)); }), this.incrementIterations(); } dispose() { - this.accBeta1.dispose(), this.accBeta2.dispose(), this.accumulatedFirstMoment != null && Ft(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedSecondMoment != null && Ft(this.accumulatedSecondMoment.map((e) => e.variable)); + this.accBeta1.dispose(), this.accBeta2.dispose(), this.accumulatedFirstMoment != null && Dt(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedSecondMoment != null && Dt(this.accumulatedSecondMoment.map((e) => e.variable)); } async getWeights() { let e = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment]; - return [await this.saveIterations()].concat(e.map((t10) => ({ name: t10.originalName, tensor: t10.variable }))); + return [await this.saveIterations()].concat(e.map((t6) => ({ name: t6.originalName, tensor: t6.variable }))); } async setWeights(e) { - e = await this.extractIterations(e), Ne(() => { - this.accBeta1.assign(Na(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(Na(this.beta2, this.iterations_ + 1)); + e = await this.extractIterations(e), Ee(() => { + this.accBeta1.assign(Ra(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(Ra(this.beta2, this.iterations_ + 1)); }); - let t10 = e.length / 2, o = false; - this.accumulatedFirstMoment = e.slice(0, t10).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedSecondMoment = e.slice(t10, t10 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); + let t6 = e.length / 2, o = false; + this.accumulatedFirstMoment = e.slice(0, t6).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedSecondMoment = e.slice(t6, t6 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); } getConfig() { return { learningRate: this.learningRate, beta1: this.beta1, beta2: this.beta2, epsilon: this.epsilon }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.beta1, t10.beta2, t10.epsilon); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.beta1, t6.beta2, t6.epsilon); } }; -bi.className = "Adam"; -$r(bi); -var Ci = class extends wr { - constructor(e, t10, o, n = null, s = 0) { - super(), this.learningRate = e, this.beta1 = t10, this.beta2 = o, this.epsilon = n, this.decay = s, this.accumulatedFirstMoment = [], this.accumulatedWeightedInfNorm = [], Ne(() => { - this.iteration = be(0).variable(), this.accBeta1 = be(t10).variable(); - }), n == null && (this.epsilon = N.backend.epsilon()); +Ai.className = "Adam"; +Er(Ai); +var Ri = class extends wr { + constructor(e, t6, o, n = null, s = 0) { + super(), this.learningRate = e, this.beta1 = t6, this.beta2 = o, this.epsilon = n, this.decay = s, this.accumulatedFirstMoment = [], this.accumulatedWeightedInfNorm = [], Ee(() => { + this.iteration = be(0).variable(), this.accBeta1 = be(t6).variable(); + }), n == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { - let t10 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); - Ne(() => { - let o = ke(1, this.accBeta1), n = We(-this.learningRate, ge(oe(this.iteration, this.decay), 1)); - t10.forEach((s, a) => { - let i = N.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Gt(i).variable(p) }), this.accumulatedWeightedInfNorm[a] == null && (this.accumulatedWeightedInfNorm[a] = { originalName: `${s}/v`, variable: Gt(i).variable(p) }); + let t6 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); + Ee(() => { + let o = Ne(1, this.accBeta1), n = Ge(-this.learningRate, xe(ae(this.iteration, this.decay), 1)); + t6.forEach((s, a) => { + let i = T.registeredVariables[s], p = false; + this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Ut(i).variable(p) }), this.accumulatedWeightedInfNorm[a] == null && (this.accumulatedWeightedInfNorm[a] = { originalName: `${s}/v`, variable: Ut(i).variable(p) }); let u = Array.isArray(e) ? e[a].tensor : e[s]; if (u == null) return; - let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedWeightedInfNorm[a].variable, m = ge(oe(c, this.beta1), oe(u, 1 - this.beta1)), f = oe(l, this.beta2), d = Qt(u), h = Rf(f, d); + let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedWeightedInfNorm[a].variable, m = xe(ae(c, this.beta1), ae(u, 1 - this.beta1)), d = ae(l, this.beta2), f = Yt(u), h = Cd(d, f); c.assign(m), l.assign(h); - let g = ge(oe(We(n, o), We(m, ge(h, this.epsilon))), i); + let g = xe(ae(Ge(n, o), Ge(m, xe(h, this.epsilon))), i); i.assign(g); - }), this.iteration.assign(ge(this.iteration, 1)), this.accBeta1.assign(oe(this.accBeta1, this.beta1)); + }), this.iteration.assign(xe(this.iteration, 1)), this.accBeta1.assign(ae(this.accBeta1, this.beta1)); }), this.incrementIterations(); } dispose() { - this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Ft(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedWeightedInfNorm != null && Ft(this.accumulatedWeightedInfNorm.map((e) => e.variable)); + this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Dt(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedWeightedInfNorm != null && Dt(this.accumulatedWeightedInfNorm.map((e) => e.variable)); } async getWeights() { throw new Error("getWeights() is not implemented for Adamax yet."); @@ -8807,13 +8817,13 @@ var Ci = class extends wr { getConfig() { return { learningRate: this.learningRate, beta1: this.beta1, beta2: this.beta2, epsilon: this.epsilon, decay: this.decay }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.beta1, t10.beta2, t10.epsilon, t10.decay); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.beta1, t6.beta2, t6.epsilon, t6.decay); } }; -Ci.className = "Adamax"; -$r(Ci); -var Us = class extends wr { +Ri.className = "Adamax"; +Er(Ri); +var qs = class extends wr { constructor(e) { super(), this.learningRate = e, this.setLearningRate(e); } @@ -8822,15 +8832,15 @@ var Us = class extends wr { let s = Array.isArray(e) ? e[n].tensor : e[o]; if (s == null) return; - let a = N.registeredVariables[o]; - Ne(() => { - let i = ge(oe(this.c, s), a); + let a = T.registeredVariables[o]; + Ee(() => { + let i = xe(ae(this.c, s), a); a.assign(i); }); }), this.incrementIterations(); } setLearningRate(e) { - this.learningRate = e, this.c != null && this.c.dispose(), this.c = So(be(-e)); + this.learningRate = e, this.c != null && this.c.dispose(), this.c = _r(be(-e)); } dispose() { this.c.dispose(); @@ -8845,29 +8855,29 @@ var Us = class extends wr { getConfig() { return { learningRate: this.learningRate }; } - static fromConfig(e, t10) { - return new e(t10.learningRate); + static fromConfig(e, t6) { + return new e(t6.learningRate); } }; -Us.className = "SGD"; -$r(Us); -var Ii = class extends Us { - constructor(e, t10, o = false) { - super(e), this.learningRate = e, this.momentum = t10, this.useNesterov = o, this.accumulations = [], this.m = be(this.momentum); +qs.className = "SGD"; +Er(qs); +var Fi = class extends qs { + constructor(e, t6, o = false) { + super(e), this.learningRate = e, this.momentum = t6, this.useNesterov = o, this.accumulations = [], this.m = be(this.momentum); } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = N.registeredVariables[o]; - this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: Ne(() => Gt(s).variable(false)) }); + let s = T.registeredVariables[o]; + this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: Ee(() => Ut(s).variable(false)) }); let a = this.accumulations[n].variable, i = Array.isArray(e) ? e[n].tensor : e[o]; - i != null && Ne(() => { - let p, u = ge(oe(this.m, a), i); - this.useNesterov ? p = ge(oe(this.c, ge(i, oe(u, this.m))), s) : p = ge(oe(this.c, u), s), a.assign(u), s.assign(p); + i != null && Ee(() => { + let p, u = xe(ae(this.m, a), i); + this.useNesterov ? p = xe(ae(this.c, xe(i, ae(u, this.m))), s) : p = xe(ae(this.c, u), s), a.assign(u), s.assign(p); }); }), this.incrementIterations(); } dispose() { - this.m.dispose(), this.accumulations != null && Ft(this.accumulations.map((e) => e.variable)); + this.m.dispose(), this.accumulations != null && Dt(this.accumulations.map((e) => e.variable)); } setMomentum(e) { this.momentum = e; @@ -8877,134 +8887,134 @@ var Ii = class extends Us { } async setWeights(e) { e = await this.extractIterations(e); - let t10 = false; - this.accumulations = e.map((o) => ({ originalName: o.name, variable: o.tensor.variable(t10) })); + let t6 = false; + this.accumulations = e.map((o) => ({ originalName: o.name, variable: o.tensor.variable(t6) })); } getConfig() { return { learningRate: this.learningRate, momentum: this.momentum, useNesterov: this.useNesterov }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.momentum, t10.useNesterov); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.momentum, t6.useNesterov); } }; -Ii.className = "Momentum"; -$r(Ii); -var wi = class extends wr { - constructor(e, t10 = 0.9, o = 0, n = null, s = false) { - if (super(), this.learningRate = e, this.decay = t10, this.momentum = o, this.epsilon = n, this.accumulatedMeanSquares = [], this.accumulatedMoments = [], this.accumulatedMeanGrads = [], this.centered = s, n == null && (this.epsilon = N.backend.epsilon()), e == null) +Fi.className = "Momentum"; +Er(Fi); +var Di = class extends wr { + constructor(e, t6 = 0.9, o = 0, n = null, s = false) { + if (super(), this.learningRate = e, this.decay = t6, this.momentum = o, this.epsilon = n, this.accumulatedMeanSquares = [], this.accumulatedMoments = [], this.accumulatedMeanGrads = [], this.centered = s, n == null && (this.epsilon = T.backend.epsilon()), e == null) throw new Error("learningRate for RMSPropOptimizer must be defined."); } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = N.registeredVariables[o], a = false; - this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: Ne(() => Gt(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: Ne(() => Gt(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: Ne(() => Gt(s).variable(a)) }); + let s = T.registeredVariables[o], a = false; + this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: Ee(() => Ut(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: Ee(() => Ut(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: Ee(() => Ut(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; if (i == null) return; let p = this.accumulatedMeanSquares[n].variable, u = this.accumulatedMoments[n].variable; - Ne(() => { - let c = ge(oe(p, this.decay), oe(Zt(i), 1 - this.decay)); + Ee(() => { + let c = xe(ae(p, this.decay), ae(Qt(i), 1 - this.decay)); if (this.centered) { - let l = this.accumulatedMeanGrads[n].variable, m = ge(oe(l, this.decay), oe(i, 1 - this.decay)), f = We(oe(i, this.learningRate), Rr(ke(c, ge(Zt(m), this.epsilon)))), d = ge(oe(u, this.momentum), f); - p.assign(c), l.assign(m), u.assign(d); - let h = ke(s, d); + let l = this.accumulatedMeanGrads[n].variable, m = xe(ae(l, this.decay), ae(i, 1 - this.decay)), d = Ge(ae(i, this.learningRate), $r(Ne(c, xe(Qt(m), this.epsilon)))), f = xe(ae(u, this.momentum), d); + p.assign(c), l.assign(m), u.assign(f); + let h = Ne(s, f); s.assign(h); } else { - let l = ge(oe(p, this.decay), oe(Zt(i), 1 - this.decay)), m = ge(oe(u, this.momentum), We(oe(i, this.learningRate), Rr(ge(l, this.epsilon)))); + let l = xe(ae(p, this.decay), ae(Qt(i), 1 - this.decay)), m = xe(ae(u, this.momentum), Ge(ae(i, this.learningRate), $r(xe(l, this.epsilon)))); p.assign(l), u.assign(m); - let f = ke(s, m); - s.assign(f); + let d = Ne(s, m); + s.assign(d); } }); }), this.incrementIterations(); } dispose() { - this.accumulatedMeanSquares != null && Ft(this.accumulatedMeanSquares.map((e) => e.variable)), this.accumulatedMeanGrads != null && this.centered && Ft(this.accumulatedMeanGrads.map((e) => e.variable)), this.accumulatedMoments != null && Ft(this.accumulatedMoments.map((e) => e.variable)); + this.accumulatedMeanSquares != null && Dt(this.accumulatedMeanSquares.map((e) => e.variable)), this.accumulatedMeanGrads != null && this.centered && Dt(this.accumulatedMeanGrads.map((e) => e.variable)), this.accumulatedMoments != null && Dt(this.accumulatedMoments.map((e) => e.variable)); } async getWeights() { let e = [...this.accumulatedMeanSquares, ...this.accumulatedMoments]; - return this.centered && e.push(...this.accumulatedMeanGrads), [await this.saveIterations()].concat(e.map((t10) => ({ name: t10.originalName, tensor: t10.variable }))); + return this.centered && e.push(...this.accumulatedMeanGrads), [await this.saveIterations()].concat(e.map((t6) => ({ name: t6.originalName, tensor: t6.variable }))); } async setWeights(e) { e = await this.extractIterations(e); - let t10 = this.centered ? e.length / 3 : e.length / 2, o = false; - this.accumulatedMeanSquares = e.slice(0, t10).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedMoments = e.slice(t10, t10 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.centered && (this.accumulatedMeanGrads = e.slice(t10 * 2, t10 * 3).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) }))); + let t6 = this.centered ? e.length / 3 : e.length / 2, o = false; + this.accumulatedMeanSquares = e.slice(0, t6).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedMoments = e.slice(t6, t6 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.centered && (this.accumulatedMeanGrads = e.slice(t6 * 2, t6 * 3).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) }))); } getConfig() { return { learningRate: this.learningRate, decay: this.decay, momentum: this.momentum, epsilon: this.epsilon, centered: this.centered }; } - static fromConfig(e, t10) { - return new e(t10.learningRate, t10.decay, t10.momentum, t10.epsilon, t10.centered); + static fromConfig(e, t6) { + return new e(t6.learningRate, t6.decay, t6.momentum, t6.epsilon, t6.centered); } }; -wi.className = "RMSProp"; -$r(wi); +Di.className = "RMSProp"; +Er(Di); var ns = class { static sgd(e) { - return new Us(e); + return new qs(e); } - static momentum(e, t10, o = false) { - return new Ii(e, t10, o); + static momentum(e, t6, o = false) { + return new Fi(e, t6, o); } - static rmsprop(e, t10 = 0.9, o = 0, n = null, s = false) { - return new wi(e, t10, o, n, s); + static rmsprop(e, t6 = 0.9, o = 0, n = null, s = false) { + return new Di(e, t6, o, n, s); } - static adam(e = 1e-3, t10 = 0.9, o = 0.999, n = null) { - return new bi(e, t10, o, n); + static adam(e = 1e-3, t6 = 0.9, o = 0.999, n = null) { + return new Ai(e, t6, o, n); } - static adadelta(e = 1e-3, t10 = 0.95, o = null) { - return new xi(e, t10, o); + static adadelta(e = 1e-3, t6 = 0.95, o = null) { + return new Ei(e, t6, o); } - static adamax(e = 2e-3, t10 = 0.9, o = 0.999, n = null, s = 0) { - return new Ci(e, t10, o, n, s); + static adamax(e = 2e-3, t6 = 0.9, o = 0.999, n = null, s = 0) { + return new Ri(e, t6, o, n, s); } - static adagrad(e, t10 = 0.1) { - return new yi(e, t10); + static adagrad(e, t6 = 0.1) { + return new $i(e, t6); } }; -var pMe = { sgd: ns.sgd, momentum: ns.momentum, adadelta: ns.adadelta, adagrad: ns.adagrad, rmsprop: ns.rmsprop, adamax: ns.adamax, adam: ns.adam }; -var qq = (() => typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r) => r())(); -function kC() { - return new Promise((r) => qq(() => r())); +var hMe = { sgd: ns.sgd, momentum: ns.momentum, adadelta: ns.adadelta, adagrad: ns.adagrad, rmsprop: ns.rmsprop, adamax: ns.adamax, adam: ns.adam }; +var dq = (() => typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r) => r())(); +function CC() { + return new Promise((r) => dq(() => r())); } -var I = {}; -Be(I, { ERF_A1: () => pK, ERF_A2: () => cK, ERF_A3: () => lK, ERF_A4: () => mK, ERF_A5: () => fK, ERF_P: () => uK, PARALLELIZE_THRESHOLD: () => ed, RowPartitionType: () => Gs, SELU_SCALE: () => iK, SELU_SCALEALPHA: () => aK, applyActivation: () => yu, assertAndGetBroadcastShape: () => Je, assertAxesAreInnerMostDims: () => fG, assertParamsConsistent: () => Kq, assignToTypedArray: () => bK, axesAreInnerMostDims: () => fC, calculateShapes: () => kv, checkEinsumDimSizes: () => kK, checkPadOnDimRoundingMode: () => Ot, combineLocations: () => $k, combineRaggedTensorToTensorShapes: () => Xq, complexWithEvenIndex: () => gK, complexWithOddIndex: () => xK, computeConv2DInfo: () => uu, computeConv3DInfo: () => Zv, computeDefaultPad: () => mC, computeDilation2DInfo: () => dU, computeOptimalWindowSize: () => Jq, computeOutAndReduceShapes: () => mG, computeOutShape: () => jq, computePool2DInfo: () => lC, computePool3DInfo: () => hU, convertConv2DDataFormat: () => Jv, decodeEinsumEquation: () => SK, eitherStridesOrDilationsAreOne: () => lr, expandShapeToKeepDim: () => Ta, exponent: () => IK, exponents: () => CK, fromStringArrayToUint8: () => qK, fromUint8ToStringArray: () => HK, getAxesPermutation: () => dG, getBroadcastDims: () => Iv, getComplexWithIndex: () => yK, getEinsumComputePath: () => TK, getEinsumPermutation: () => vK, getFusedBiasGradient: () => xu, getFusedDyActivation: () => gu, getImageCenter: () => eK, getInnerMostAxes: () => gG, getPermuted: () => rK, getRaggedRank: () => Qq, getReductionAxes: () => nf, getReshaped: () => tK, getReshapedPermuted: () => oK, getRowPartitionTypesHelper: () => Yq, getSliceBeginCoords: () => nK, getSliceSize: () => sK, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => $K, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => RK, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => AK, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => PK, getSparseReshapeInputOutputMismatchErrorMessage: () => MK, getSparseReshapeInputOutputMultipleErrorMessage: () => OK, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => FK, getSparseReshapeNegativeOutputDimErrorMessage: () => DK, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => zK, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => LK, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => BK, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => VK, getUndoAxesPermutation: () => hG, isIdentityPermutation: () => NK, log: () => Sz, mergeRealAndImagArrays: () => dK, prepareAndValidate: () => vv, prepareSplitSize: () => EK, segment_util: () => NC, shouldFuse: () => bu, slice_util: () => et, splitRealAndImagArrays: () => hK, tupleValuesAreOne: () => iu, upcastType: () => ct, validateDefaultValueShape: () => Zq, validateInput: () => uf, validateUpdateShape: () => aC, warn: () => Rs }); -function Kq(r, e) { - let t10 = r[0].length; +var S = {}; +Ue(S, { ERF_A1: () => $q, ERF_A2: () => Aq, ERF_A3: () => Rq, ERF_A4: () => Fq, ERF_A5: () => Dq, ERF_P: () => Eq, PARALLELIZE_THRESHOLD: () => Ud, RowPartitionType: () => Ks, SELU_SCALE: () => _q, SELU_SCALEALPHA: () => Tq, applyActivation: () => yu, assertAndGetBroadcastShape: () => Je, assertAxesAreInnerMostDims: () => DU, assertParamsConsistent: () => fq, assignToTypedArray: () => Vq, axesAreInnerMostDims: () => uC, calculateShapes: () => Jv, checkEinsumDimSizes: () => qq, checkPadOnDimRoundingMode: () => Pt, combineLocations: () => nk, combineRaggedTensorToTensorShapes: () => gq, complexWithEvenIndex: () => Mq, complexWithOddIndex: () => Lq, computeConv2DInfo: () => uu, computeConv3DInfo: () => N0, computeDefaultPad: () => iC, computeDilation2DInfo: () => OW, computeOptimalWindowSize: () => Cq, computeOutAndReduceShapes: () => FU, computeOutShape: () => hq, computePool2DInfo: () => aC, computePool3DInfo: () => PW, convertConv2DDataFormat: () => T0, decodeEinsumEquation: () => Gq, eitherStridesOrDilationsAreOne: () => lr, expandShapeToKeepDim: () => Aa, exponent: () => Wq, exponents: () => zq, fromStringArrayToUint8: () => dK, fromUint8ToStringArray: () => mK, getAxesPermutation: () => OU, getBroadcastDims: () => Xv, getComplexWithIndex: () => Bq, getEinsumComputePath: () => Kq, getEinsumPermutation: () => Hq, getFusedBiasGradient: () => xu, getFusedDyActivation: () => gu, getImageCenter: () => Sq, getInnerMostAxes: () => MU, getPermuted: () => Iq, getRaggedRank: () => yq, getReductionAxes: () => jm, getReshaped: () => wq, getReshapedPermuted: () => vq, getRowPartitionTypesHelper: () => xq, getSliceBeginCoords: () => kq, getSliceSize: () => Nq, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => Qq, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => Zq, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => Jq, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => rK, getSparseReshapeInputOutputMismatchErrorMessage: () => nK, getSparseReshapeInputOutputMultipleErrorMessage: () => oK, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => eK, getSparseReshapeNegativeOutputDimErrorMessage: () => tK, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => uK, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => sK, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => aK, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => iK, getUndoAxesPermutation: () => PU, isIdentityPermutation: () => jq, log: () => GV, mergeRealAndImagArrays: () => Oq, prepareAndValidate: () => Zv, prepareSplitSize: () => Yq, segment_util: () => wC, shouldFuse: () => bu, slice_util: () => ut, splitRealAndImagArrays: () => Pq, tupleValuesAreOne: () => iu, upcastType: () => dt, validateDefaultValueShape: () => bq, validateInput: () => Qm, validateUpdateShape: () => tC, warn: () => Os }); +function fq(r, e) { + let t6 = r[0].length; r.forEach((n, s) => { - $(n.length === t10, () => `Error in concat${t10}D: rank of tensors[${s}] must be the same as the rank of the rest (${t10})`); - }), $(e >= 0 && e < t10, () => `Error in concat${t10}D: axis must be between 0 and ${t10 - 1}.`); + E(n.length === t6, () => `Error in concat${t6}D: rank of tensors[${s}] must be the same as the rank of the rest (${t6})`); + }), E(e >= 0 && e < t6, () => `Error in concat${t6}D: axis must be between 0 and ${t6 - 1}.`); let o = r[0]; r.forEach((n, s) => { - for (let a = 0; a < t10; a++) - $(a === e || n[a] === o[a], () => `Error in concat${t10}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`); + for (let a = 0; a < t6; a++) + E(a === e || n[a] === o[a], () => `Error in concat${t6}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`); }); } -function jq(r, e) { - let t10 = r[0].slice(); +function hq(r, e) { + let t6 = r[0].slice(); for (let o = 1; o < r.length; o++) - t10[e] += r[o][e]; - return t10; + t6[e] += r[o][e]; + return t6; } -var Gs; +var Ks; (function(r) { r[r.FIRST_DIM_SIZE = 0] = "FIRST_DIM_SIZE", r[r.VALUE_ROWIDS = 1] = "VALUE_ROWIDS", r[r.ROW_LENGTHS = 2] = "ROW_LENGTHS", r[r.ROW_SPLITS = 3] = "ROW_SPLITS", r[r.ROW_LIMITS = 4] = "ROW_LIMITS", r[r.ROW_STARTS = 5] = "ROW_STARTS"; -})(Gs || (Gs = {})); -function Xq(r, e, t10) { +})(Ks || (Ks = {})); +function gq(r, e, t6) { let o = new Array(); - if (t10 == null && e == null) + if (t6 == null && e == null) return o; if (e == null) - for (; o.length < r + t10.length; ) + for (; o.length < r + t6.length; ) o.push(-1); else o = e.slice(); - if (t10 == null) + if (t6 == null) return o; - if (r + t10.length !== o.length) - throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r + t10.length}, but shape.rank = ${o.length}`); - for (let n = 1; n < t10.length; ++n) { - let s = t10[n], a = o[o.length - t10.length + n], i = o[a]; + if (r + t6.length !== o.length) + throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r + t6.length}, but shape.rank = ${o.length}`); + for (let n = 1; n < t6.length; ++n) { + let s = t6[n], a = o[o.length - t6.length + n], i = o[a]; if (s >= 0) if (i >= 0) { if (i !== s) @@ -9014,42 +9024,42 @@ function Xq(r, e, t10) { } return o; } -function Yq(r) { - let e = { FIRST_DIM_SIZE: Gs.FIRST_DIM_SIZE, VALUE_ROWIDS: Gs.VALUE_ROWIDS, ROW_LENGTHS: Gs.ROW_LENGTHS, ROW_SPLITS: Gs.ROW_SPLITS, ROW_LIMITS: Gs.ROW_LIMITS, ROW_STARTS: Gs.ROW_STARTS }, t10 = []; +function xq(r) { + let e = { FIRST_DIM_SIZE: Ks.FIRST_DIM_SIZE, VALUE_ROWIDS: Ks.VALUE_ROWIDS, ROW_LENGTHS: Ks.ROW_LENGTHS, ROW_SPLITS: Ks.ROW_SPLITS, ROW_LIMITS: Ks.ROW_LIMITS, ROW_STARTS: Ks.ROW_STARTS }, t6 = []; for (let o of r) if (o in e) - t10.push(e[o]); + t6.push(e[o]); else break; - return t10; + return t6; } -function Qq(r) { - return r.length === 0 ? 0 : r[0] === Gs.FIRST_DIM_SIZE ? r.length - 1 : r.length; +function yq(r) { + return r.length === 0 ? 0 : r[0] === Ks.FIRST_DIM_SIZE ? r.length - 1 : r.length; } -function Zq(r, e) { +function bq(r, e) { if (r == null || e == null) return; - let t10 = r.length, o = e.length; - if (t10 >= o) - throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t10} must be less than ragged tensor input flatValues.rank = ${o})`); - for (let n = 0; n < Math.min(t10, o - 1); ++n) { + let t6 = r.length, o = e.length; + if (t6 >= o) + throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t6} must be less than ragged tensor input flatValues.rank = ${o})`); + for (let n = 0; n < Math.min(t6, o - 1); ++n) { let s = r[n], a = e[n + 1]; if (s >= 0 && a >= 0 && s !== 1 && s !== a) throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n - r.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r.length}] = ${a}`); } } -var ed = 30; -function Jq(r) { - return r <= ed ? r : sp(r, Math.floor(Math.sqrt(r))); +var Ud = 30; +function Cq(r) { + return r <= Ud ? r : sp(r, Math.floor(Math.sqrt(r))); } -function eK(r, e, t10) { - let o = t10 * (typeof r == "number" ? r : r[0]), n = e * (typeof r == "number" ? r : r[1]); +function Sq(r, e, t6) { + let o = t6 * (typeof r == "number" ? r : r[0]), n = e * (typeof r == "number" ? r : r[1]); return [o, n]; } -function tK(r, e, t10, o = true) { +function wq(r, e, t6, o = true) { let n = []; if (o) - n = n.concat(e.slice(0)), n.push(r[0] / t10), n = n.concat(r.slice(1)); + n = n.concat(e.slice(0)), n.push(r[0] / t6), n = n.concat(r.slice(1)); else { n = n.concat(r[0]); let s = e.length; @@ -9059,9 +9069,9 @@ function tK(r, e, t10, o = true) { } return n; } -function rK(r, e, t10 = true) { +function Iq(r, e, t6 = true) { let o = []; - if (t10) { + if (t6) { o.push(e); for (let n = e + 1; n < r; ++n) n <= 2 * e ? (o.push(n), o.push(n - (e + 1))) : o.push(n); @@ -9073,336 +9083,336 @@ function rK(r, e, t10 = true) { } return o; } -function oK(r, e, t10, o = true) { +function vq(r, e, t6, o = true) { let n = []; - o ? n.push(r[0] / t10) : n.push(r[0] * t10); + o ? n.push(r[0] / t6) : n.push(r[0] * t6); for (let s = 1; s < r.length; ++s) s <= e.length ? o ? n.push(e[s - 1] * r[s]) : n.push(r[s] / e[s - 1]) : n.push(r[s]); return n; } -function nK(r, e) { - let t10 = [0]; +function kq(r, e) { + let t6 = [0]; for (let o = 0; o < e; ++o) - t10.push(r[o][0]); - return t10; + t6.push(r[o][0]); + return t6; } -function sK(r, e, t10) { +function Nq(r, e, t6) { let o = r.slice(0, 1); - for (let n = 0; n < t10; ++n) + for (let n = 0; n < t6; ++n) o.push(r[n + 1] - e[n][0] - e[n][1]); return o; } -var aK = 1.7580993408473768; -var iK = 1.0507009873554805; -var uK = 0.3275911; -var pK = 0.254829592; -var cK = -0.284496736; -var lK = 1.421413741; -var mK = -1.453152027; -var fK = 1.061405429; -function dK(r, e) { +var Tq = 1.7580993408473768; +var _q = 1.0507009873554805; +var Eq = 0.3275911; +var $q = 0.254829592; +var Aq = -0.284496736; +var Rq = 1.421413741; +var Fq = -1.453152027; +var Dq = 1.061405429; +function Oq(r, e) { if (r.length !== e.length) throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r.length}, imag: ${e.length}.`); - let t10 = new Float32Array(r.length * 2); - for (let o = 0; o < t10.length; o += 2) - t10[o] = r[o / 2], t10[o + 1] = e[o / 2]; - return t10; + let t6 = new Float32Array(r.length * 2); + for (let o = 0; o < t6.length; o += 2) + t6[o] = r[o / 2], t6[o + 1] = e[o / 2]; + return t6; } -function hK(r) { - let e = new Float32Array(r.length / 2), t10 = new Float32Array(r.length / 2); +function Pq(r) { + let e = new Float32Array(r.length / 2), t6 = new Float32Array(r.length / 2); for (let o = 0; o < r.length; o += 2) - e[o / 2] = r[o], t10[o / 2] = r[o + 1]; - return { real: e, imag: t10 }; + e[o / 2] = r[o], t6[o / 2] = r[o + 1]; + return { real: e, imag: t6 }; } -function gK(r) { - let e = Math.ceil(r.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); +function Mq(r) { + let e = Math.ceil(r.length / 4), t6 = new Float32Array(e), o = new Float32Array(e); for (let n = 0; n < r.length; n += 4) - t10[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; - return { real: t10, imag: o }; + t6[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; + return { real: t6, imag: o }; } -function xK(r) { - let e = Math.floor(r.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); +function Lq(r) { + let e = Math.floor(r.length / 4), t6 = new Float32Array(e), o = new Float32Array(e); for (let n = 2; n < r.length; n += 4) - t10[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; - return { real: t10, imag: o }; + t6[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; + return { real: t6, imag: o }; } -function yK(r, e) { - let t10 = r[e * 2], o = r[e * 2 + 1]; - return { real: t10, imag: o }; +function Bq(r, e) { + let t6 = r[e * 2], o = r[e * 2 + 1]; + return { real: t6, imag: o }; } -function bK(r, e, t10, o) { - r[o * 2] = e, r[o * 2 + 1] = t10; +function Vq(r, e, t6, o) { + r[o * 2] = e, r[o * 2 + 1] = t6; } -function CK(r, e) { - let t10 = new Float32Array(r / 2), o = new Float32Array(r / 2); +function zq(r, e) { + let t6 = new Float32Array(r / 2), o = new Float32Array(r / 2); for (let n = 0; n < Math.ceil(r / 2); n++) { let s = (e ? 2 : -2) * Math.PI * (n / r); - t10[n] = Math.cos(s), o[n] = Math.sin(s); + t6[n] = Math.cos(s), o[n] = Math.sin(s); } - return { real: t10, imag: o }; + return { real: t6, imag: o }; } -function IK(r, e, t10) { - let o = (t10 ? 2 : -2) * Math.PI * (r / e), n = Math.cos(o), s = Math.sin(o); +function Wq(r, e, t6) { + let o = (t6 ? 2 : -2) * Math.PI * (r / e), n = Math.cos(o), s = Math.sin(o); return { real: n, imag: s }; } -var TC = "->"; -var wK = /->/g; -var KT = ","; -var jT = "..."; -function SK(r, e) { +var SC = "->"; +var Uq = /->/g; +var SN = ","; +var wN = "..."; +function Gq(r, e) { r = r.replace(/\s/g, ""); - let t10 = (r.length - r.replace(wK, "").length) / TC.length; - if (t10 < 1) + let t6 = (r.length - r.replace(Uq, "").length) / SC.length; + if (t6 < 1) throw new Error("Equations without an arrow are not supported."); - if (t10 > 1) - throw new Error(`Equation must contain exactly one arrow ("${TC}").`); - let [o, n] = r.split(TC); - $(o.indexOf(jT) === -1, () => `The ellipsis notation ("${jT}") is not supported yet.`); - let s = o.split(KT), a = s.length; + if (t6 > 1) + throw new Error(`Equation must contain exactly one arrow ("${SC}").`); + let [o, n] = r.split(SC); + E(o.indexOf(wN) === -1, () => `The ellipsis notation ("${wN}") is not supported yet.`); + let s = o.split(SN), a = s.length; if (e !== a) throw new Error(`Expected ${a} input tensors, received ${e}`); if (a > 2) throw new Error("Support for more than 2 input tensors is not implemented yet."); let i = []; for (let m = 0; m < n.length; ++m) { - let f = n[m]; - if (!s.some((d) => d.indexOf(f) !== -1)) - throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`); - i.indexOf(f) === -1 && i.push(f); + let d = n[m]; + if (!s.some((f) => f.indexOf(d) !== -1)) + throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`); + i.indexOf(d) === -1 && i.push(d); } for (let m = 0; m < o.length; ++m) { - let f = o[m]; - i.indexOf(f) === -1 && f !== KT && i.push(f); + let d = o[m]; + i.indexOf(d) === -1 && d !== SN && i.push(d); } let p = new Array(s.length); for (let m = 0; m < a; ++m) { if (new Set(s[m].split("")).size !== s[m].length) throw new Error(`Found duplicate axes in input component ${s[m]}. Support for duplicate axes in input is not implemented yet.`); p[m] = []; - for (let f = 0; f < s[m].length; ++f) - p[m].push(i.indexOf(s[m][f])); + for (let d = 0; d < s[m].length; ++d) + p[m].push(i.indexOf(s[m][d])); } let u = i.length, c = n.length, l = []; for (let m = c; m < u; ++m) l.push(m); return { allDims: i, summedDims: l, idDims: p }; } -function vK(r, e) { - let t10 = new Array(r); - t10.fill(-1); +function Hq(r, e) { + let t6 = new Array(r); + t6.fill(-1); for (let n = 0; n < e.length; ++n) - t10[e[n]] = n; + t6[e[n]] = n; let o = []; for (let n = 0; n < r; ++n) - t10[n] === -1 && o.push(n); - return t10 = t10.filter((n) => n !== -1), { permutationIndices: t10, expandDims: o }; + t6[n] === -1 && o.push(n); + return t6 = t6.filter((n) => n !== -1), { permutationIndices: t6, expandDims: o }; } -function kK(r, e, t10) { +function qq(r, e, t6) { let o = new Array(r); - for (let n = 0; n < t10.length; ++n) { - let s = t10[n].shape; + for (let n = 0; n < t6.length; ++n) { + let s = t6[n].shape; for (let a = 0; a < e[n].length; ++a) - o[e[n][a]] === void 0 ? o[e[n][a]] = s[a] : $(o[e[n][a]] === s[a], () => `Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`); + o[e[n][a]] === void 0 ? o[e[n][a]] = s[a] : E(o[e[n][a]] === s[a], () => `Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`); } } -function TK(r, e) { - let t10 = r, o = [], n = 0; - r.length === 0 && t10.push(-1), n = r.length + 1; +function Kq(r, e) { + let t6 = r, o = [], n = 0; + r.length === 0 && t6.push(-1), n = r.length + 1; for (let a = 0; a < n; ++a) o.push([]); let s = []; - for (let a = 0; a < t10.length; ++a) { - let i = t10[a], p = _K(e, i); + for (let a = 0; a < t6.length; ++a) { + let i = t6[a], p = Xq(e, i); for (let u of p) s.indexOf(u) === -1 && (o[a].push(u), s.push(u)); } - return { path: t10, steps: o }; + return { path: t6, steps: o }; } -function NK(r) { - return r.every((e, t10) => e === t10); +function jq(r) { + return r.every((e, t6) => e === t6); } -function _K(r, e) { - let t10 = []; +function Xq(r, e) { + let t6 = []; for (let o = 0; o < r.length; ++o) - (r[o].length === 0 || r[o].indexOf(e) !== -1 || e === -1) && t10.push(o); - return t10; + (r[o].length === 0 || r[o].indexOf(e) !== -1 || e === -1) && t6.push(o); + return t6; } -function EK(r, e, t10 = 0) { +function Yq(r, e, t6 = 0) { let o = []; if (typeof e == "number") - $(r.shape[t10] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r.shape[t10] / e); + E(r.shape[t6] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r.shape[t6] / e); else { let n = e.reduce((a, i) => (i === -1 && (a += 1), a), 0); - $(n <= 1, () => "There should be only one negative value in split array."); + E(n <= 1, () => "There should be only one negative value in split array."); let s = e.indexOf(-1); if (s !== -1) { let a = e.reduce((i, p) => p > 0 ? i + p : i); - e[s] = r.shape[t10] - a; + e[s] = r.shape[t6] - a; } - $(r.shape[t10] === e.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = e; + E(r.shape[t6] === e.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = e; } return o; } -function $K(r) { +function Qq(r) { return `Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${r}`; } -function RK(r, e) { +function Zq(r, e) { return `indices(${r}, 0) is invalid: ${e} < 0`; } -function AK(r, e, t10) { - return `indices(${r}, 0) is invalid: ${e} >= ${t10}`; +function Jq(r, e, t6) { + return `indices(${r}, 0) is invalid: ${e} >= ${t6}`; } -function FK(r, e) { +function eK(r, e) { return `only one output dimension may be -1, not both ${r} and ${e}`; } -function DK(r, e) { +function tK(r, e) { return `size ${r} must be non-negative, not ${e}`; } -function PK() { +function rK() { return "reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"; } -function OK(r, e) { - let t10 = Ve(r), o = Ve(e); - return `Input to reshape is a SparseTensor with ${t10} +function oK(r, e) { + let t6 = ze(r), o = ze(e); + return `Input to reshape is a SparseTensor with ${t6} dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`; } -function MK(r, e) { - let t10 = Ve(r), o = Ve(e); - return `Input to reshape is a tensor with ${t10} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`; +function nK(r, e) { + let t6 = ze(r), o = ze(e); + return `Input to reshape is a tensor with ${t6} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`; } -function LK() { +function sK() { return "segment ids must be >= 0"; } -function BK() { +function aK() { return "segment ids are not increasing"; } -function VK(r, e) { +function iK(r, e) { return `Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`; } -function zK(r, e, t10) { - return `Bad: indices[${r}] == ${e} out of range [0, ${t10})`; +function uK(r, e, t6) { + return `Bad: indices[${r}] == ${e} out of range [0, ${t6})`; } -var NC = {}; -Be(NC, { collectGatherOpShapeInfo: () => GK, computeOutShape: () => UK, segOpComputeOptimalWindowSize: () => WK }); -function WK(r, e) { - let t10 = false, o; - for (r <= ed ? (o = r, t10 = true) : o = sp(r, Math.floor(Math.sqrt(r))); !t10; ) - o > e || o === r ? t10 = true : o = sp(r, o + 1); +var wC = {}; +Ue(wC, { collectGatherOpShapeInfo: () => lK, computeOutShape: () => cK, segOpComputeOptimalWindowSize: () => pK }); +function pK(r, e) { + let t6 = false, o; + for (r <= Ud ? (o = r, t6 = true) : o = sp(r, Math.floor(Math.sqrt(r))); !t6; ) + o > e || o === r ? t6 = true : o = sp(r, o + 1); return o; } -function UK(r, e, t10) { +function cK(r, e, t6) { let o = [], n = r.length; for (let s = 0; s < n; s++) - s !== e ? o.push(r[s]) : o.push(t10); + s !== e ? o.push(r[s]) : o.push(t6); return o; } -function GK(r, e, t10, o) { +function lK(r, e, t6, o) { let n = e.shape.length, s = r.shape.length; if (o !== 0 && (o < -n || o > n)) throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`); if (o < 0 && (o += n), o > s) throw new Error(`batchDims (${o}) must be less than rank(x) ( ${s}).`); - if (t10 < o) - throw new Error(`batchDims (${o}) must be less than or equal to axis (${t10}).`); + if (t6 < o) + throw new Error(`batchDims (${o}) must be less than or equal to axis (${t6}).`); for (let l = 0; l < o; ++l) if (r.shape[l] !== e.shape[l]) throw new Error(`x.shape[${l}]: ${r.shape[l]} should be equal to indices.shape[${l}]: ${e.shape[l]}.`); - let a = r.shape[t10], i = [], p = 1, u = 1, c = 1; + let a = r.shape[t6], i = [], p = 1, u = 1, c = 1; for (let l = 0; l < o; ++l) i.push(r.shape[l]), p *= r.shape[l]; - for (let l = o; l < t10; l++) + for (let l = o; l < t6; l++) i.push(r.shape[l]), u *= r.shape[l]; for (let l = o; l < n; l++) i.push(e.shape[l]); - for (let l = t10 + 1; l < s; l++) + for (let l = t6 + 1; l < s; l++) i.push(r.shape[l]), c *= r.shape[l]; return { batchSize: p, sliceSize: c, outerSize: u, dimSize: a, outputShape: i }; } -function HK(r) { +function mK(r) { try { - return r.map((e) => Op(e)); + return r.map((e) => Ap(e)); } catch (e) { throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`); } } -function qK(r) { - return r.map((e) => si(e)); +function dK(r) { + return r.map((e) => gi(e)); } -var Bt = {}; -Be(Bt, { nonMaxSuppressionV3Impl: () => Qf, nonMaxSuppressionV4Impl: () => Zf, nonMaxSuppressionV5Impl: () => Jf, whereImpl: () => Kf }); -var KK = P(); -KK.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r) => { +var Lt = {}; +Ue(Lt, { nonMaxSuppressionV3Impl: () => Vd, nonMaxSuppressionV4Impl: () => zd, nonMaxSuppressionV5Impl: () => Wd, whereImpl: () => Pd }); +var fK = O(); +fK.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r) => { r && console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); }); -var To; +var ao; (function(r) { r[r.DT_INVALID = 0] = "DT_INVALID", r[r.DT_FLOAT = 1] = "DT_FLOAT", r[r.DT_DOUBLE = 2] = "DT_DOUBLE", r[r.DT_INT32 = 3] = "DT_INT32", r[r.DT_UINT8 = 4] = "DT_UINT8", r[r.DT_INT16 = 5] = "DT_INT16", r[r.DT_INT8 = 6] = "DT_INT8", r[r.DT_STRING = 7] = "DT_STRING", r[r.DT_COMPLEX64 = 8] = "DT_COMPLEX64", r[r.DT_INT64 = 9] = "DT_INT64", r[r.DT_BOOL = 10] = "DT_BOOL", r[r.DT_QINT8 = 11] = "DT_QINT8", r[r.DT_QUINT8 = 12] = "DT_QUINT8", r[r.DT_QINT32 = 13] = "DT_QINT32", r[r.DT_BFLOAT16 = 14] = "DT_BFLOAT16", r[r.DT_QINT16 = 15] = "DT_QINT16", r[r.DT_QUINT16 = 16] = "DT_QUINT16", r[r.DT_UINT16 = 17] = "DT_UINT16", r[r.DT_COMPLEX128 = 18] = "DT_COMPLEX128", r[r.DT_HALF = 19] = "DT_HALF", r[r.DT_RESOURCE = 20] = "DT_RESOURCE", r[r.DT_VARIANT = 21] = "DT_VARIANT", r[r.DT_UINT32 = 22] = "DT_UINT32", r[r.DT_UINT64 = 23] = "DT_UINT64", r[r.DT_FLOAT_REF = 101] = "DT_FLOAT_REF", r[r.DT_DOUBLE_REF = 102] = "DT_DOUBLE_REF", r[r.DT_INT32_REF = 103] = "DT_INT32_REF", r[r.DT_UINT8_REF = 104] = "DT_UINT8_REF", r[r.DT_INT16_REF = 105] = "DT_INT16_REF", r[r.DT_INT8_REF = 106] = "DT_INT8_REF", r[r.DT_STRING_REF = 107] = "DT_STRING_REF", r[r.DT_COMPLEX64_REF = 108] = "DT_COMPLEX64_REF", r[r.DT_INT64_REF = 109] = "DT_INT64_REF", r[r.DT_BOOL_REF = 110] = "DT_BOOL_REF", r[r.DT_QINT8_REF = 111] = "DT_QINT8_REF", r[r.DT_QUINT8_REF = 112] = "DT_QUINT8_REF", r[r.DT_QINT32_REF = 113] = "DT_QINT32_REF", r[r.DT_BFLOAT16_REF = 114] = "DT_BFLOAT16_REF", r[r.DT_QINT16_REF = 115] = "DT_QINT16_REF", r[r.DT_QUINT16_REF = 116] = "DT_QUINT16_REF", r[r.DT_UINT16_REF = 117] = "DT_UINT16_REF", r[r.DT_COMPLEX128_REF = 118] = "DT_COMPLEX128_REF", r[r.DT_HALF_REF = 119] = "DT_HALF_REF", r[r.DT_RESOURCE_REF = 120] = "DT_RESOURCE_REF", r[r.DT_VARIANT_REF = 121] = "DT_VARIANT_REF", r[r.DT_UINT32_REF = 122] = "DT_UINT32_REF", r[r.DT_UINT64_REF = 123] = "DT_UINT64_REF"; -})(To || (To = {})); -var XT; +})(ao || (ao = {})); +var IN; (function(r) { let e; - (function(t10) { - t10[t10.LEGACY = 0] = "LEGACY", t10[t10.V1 = 1] = "V1", t10[t10.V2 = 2] = "V2"; + (function(t6) { + t6[t6.LEGACY = 0] = "LEGACY", t6[t6.V1 = 1] = "V1", t6[t6.V2 = 2] = "V2"; })(e = r.CheckpointFormatVersion || (r.CheckpointFormatVersion = {})); -})(XT || (XT = {})); -var EC = {}; -function XK(r, e) { - let t10 = { tfOpName: r, category: "custom", inputs: [], attrs: [], customExecutor: e }; - EC[r] = t10; +})(IN || (IN = {})); +var vC = {}; +function gK(r, e) { + let t6 = { tfOpName: r, category: "custom", inputs: [], attrs: [], customExecutor: e }; + vC[r] = t6; } -function td(r) { - return EC[r]; +function Gd(r) { + return vC[r]; } -function YK(r) { - delete EC[r]; +function xK(r) { + delete vC[r]; } -function S(r, e, t10, o, n) { +function I(r, e, t6, o, n) { let s = e.inputParams[r]; if (s && s.inputIndexStart !== void 0) { let i = s.inputIndexStart, p = s.inputIndexEnd === 0 ? void 0 : s.inputIndexEnd === void 0 ? i + 1 : s.inputIndexEnd; if (s.type === "tensor") - return Ht(e.inputNames[s.inputIndexStart], t10, o, n); + return Gt(e.inputNames[s.inputIndexStart], t6, o, n); if (s.type === "tensors") - return e.inputNames.slice(i, p).map((m) => Ht(m, t10, o, n)); - let u = Ht(e.inputNames.slice(i)[0], t10, o, n), c = u.dataSync(); - return s.type === "number" ? c[0] : x.toNestedArray(u.shape, c); + return e.inputNames.slice(i, p).map((m) => Gt(m, t6, o, n)); + let u = Gt(e.inputNames.slice(i)[0], t6, o, n), c = u.dataSync(); + return s.type === "number" ? c[0] : y.toNestedArray(u.shape, c); } let a = e.attrParams[r]; return a && a.value; } -function Ht(r, e, t10, o) { - let [n, s] = Sr(r); +function Gt(r, e, t6, o) { + let [n, s] = Ir(r); if (o != null) { let i = o.getHashTableHandleByName(n); if (i != null) return i; } - let a = t10.currentContextIds.find((i) => !!e[rd(n, i)]); - return a !== void 0 ? e[rd(n, a)][s] : void 0; + let a = t6.currentContextIds.find((i) => !!e[Hd(n, i)]); + return a !== void 0 ? e[Hd(n, a)][s] : void 0; } -function YT(r, e, t10) { - return e[rd(r, t10.currentContextId)]; +function vN(r, e, t6) { + return e[Hd(r, t6.currentContextId)]; } -function zo(r, e) { - let [t10, o, n] = Sr(r); - return [rd(t10, e && e.currentContextId), o, n]; +function ss(r, e) { + let [t6, o, n] = Ir(r); + return [Hd(t6, e && e.currentContextId), o, n]; } -function rd(r, e) { +function Hd(r, e) { return e ? `${r}-${e}` : r; } -function Sr(r) { +function Ir(r) { let e = r.split(":"); if (e.length === 1) return [r, 0, void 0]; - let t10 = e[0], o = e.length === 3 ? e[1] : void 0, n = Number(e[e.length - 1]); - return [t10, n, o]; + let t6 = e[0], o = e.length === 3 ? e[1] : void 0, n = Number(e[e.length - 1]); + return [t6, n, o]; } -function gl(r, e, t10) { - let o = S("pad", r, e, t10); +function ul(r, e, t6) { + let o = I("pad", r, e, t6); if (o === "explicit") { - o = S("explicitPaddings", r, e, t10); + o = I("explicitPaddings", r, e, t6); let n = [[0, 0], [0, 0], [0, 0], [0, 0]]; for (let s = 0; s < 4; s++) n[s][0] = o[s * 2], n[s][1] = o[s * 2 + 1]; @@ -9410,87 +9420,87 @@ function gl(r, e, t10) { } return o; } -function ss(r) { - return r.kept ? r : zr(r); +function as(r) { + return r.kept ? r : Br(r); } +var kC = {}; +Ue(kC, { json: () => yK }); +var yK = [{ tfOpName: "Add", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AddV2", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AddN", category: "arithmetic", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }] }, { tfOpName: "BiasAdd", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "Sub", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "RealDiv", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Div", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "DivNoNan", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "FloorDiv", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Mul", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Maximum", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Minimum", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Pow", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SquaredDifference", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Mod", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "FloorMod", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +var NC = {}; +Ue(NC, { json: () => bK }); +var bK = [{ tfOpName: "Abs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan2", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Ceil", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ClipByValue", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "clipValueMin", type: "number" }, { start: 2, name: "clipValueMax", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Complex", category: "basic_math", inputs: [{ start: 0, name: "real", type: "tensor" }, { start: 1, name: "imag", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ComplexAbs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Elu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Exp", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Floor", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Imag", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Neg", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Real", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Prelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "alpha", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu6", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Selu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sigmoid", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Rsqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Square", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sign", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Round", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Expm1", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log1p", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Reciprocal", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Softplus", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Erf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Prod", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axes", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LeakyRelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "alpha", name: "alpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsNan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +var TC = {}; +Ue(TC, { json: () => CK }); +var CK = [{ tfOpName: "EmptyTensorList", category: "control", inputs: [{ start: 0, name: "elementShape", type: "shape" }, { start: 1, name: "maxNumElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "LoopCond", category: "control", inputs: [{ start: 0, name: "pred", type: "tensor" }] }, { tfOpName: "Switch", category: "control", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "pred", type: "tensor" }] }, { tfOpName: "Merge", category: "control", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }] }, { tfOpName: "Enter", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "frame_name", name: "frameName", type: "string" }, { tfName: "is_constant", name: "isConstant", type: "bool" }] }, { tfOpName: "Exit", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "NextIteration", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayV3", category: "control", inputs: [{ start: 0, name: "size", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "dynamic_size", name: "dynamicSize", type: "bool" }, { tfName: "clear_after_read", name: "clearAfterRead", type: "bool" }, { tfName: "identical_element_shapes", name: "identicalElementShapes", type: "bool" }, { tfName: "tensor_array_name", name: "name", type: "string" }] }, { tfOpName: "TensorArrayWriteV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "tensor", type: "tensor" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayReadV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayGatherV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape", name: "elementShape", type: "shape" }] }, { tfOpName: "TensorArrayScatterV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "tensor", type: "tensor" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "TensorArrayConcatV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape_except0", name: "elementShapeExcept0", type: "shape", notSupported: true }] }, { tfOpName: "TensorArraySplitV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "tensor", type: "tensor" }, { start: 2, name: "lengths", type: "number[]" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "TensorArraySizeV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "flowIn", type: "number" }] }, { tfOpName: "TensorArrayCloseV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }] }, { tfOpName: "StatelessIf", category: "control", inputs: [{ start: 0, name: "cond", type: "tensor" }, { start: 1, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "then_branch", name: "thenBranch", type: "func" }, { tfName: "else_branch", name: "elseBranch", type: "func" }] }, { tfOpName: "If", category: "control", inputs: [{ start: 0, name: "cond", type: "tensor" }, { start: 1, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "then_branch", name: "thenBranch", type: "func" }, { tfName: "else_branch", name: "elseBranch", type: "func" }] }, { tfOpName: "StatelessWhile", category: "control", inputs: [{ start: 0, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "cond", name: "cond", type: "func" }, { tfName: "body", name: "body", type: "func" }] }, { tfOpName: "While", category: "control", inputs: [{ start: 0, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "cond", name: "cond", type: "func" }, { tfName: "body", name: "body", type: "func" }] }, { tfOpName: "TensorListScatter", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListScatterV2", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }, { start: 3, name: "numElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListGather", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListGetItem", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListSetItem", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "tensor", type: "tensor" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListReserve", category: "control", inputs: [{ start: 0, name: "elementShape", type: "shape" }, { start: 1, name: "numElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListFromTensor", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListStack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }, { tfName: "num_elements", name: "numElements", type: "dtype" }] }, { tfOpName: "TensorListSplit", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }, { start: 2, name: "lengths", type: "number[]" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListConcat", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }], attrs: [{ tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListConcatV2", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }], attrs: [{ tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListPopBack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListPushBack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "tensor", type: "tensor" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListLength", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }] }, { tfOpName: "TensorListResize", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "size", type: "number" }] }]; +var _C = {}; +Ue(_C, { json: () => SK }); +var SK = [{ tfOpName: "AvgPool", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPool", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [], notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPoolWithArgmax", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "include_batch_in_index", name: "includeBatchInIndex", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AvgPool3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPool3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Conv1D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "stride", name: "stride", type: "number" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NWC" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "dilation", name: "dilation", type: "number", defaultValue: 1 }] }, { tfOpName: "Conv2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "useCudnnOnGpu", name: "useCudnnOnGpu", type: "bool" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "_FusedConv2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "use_cudnn_on_gpu", name: "useCudnnOnGpu", type: "bool", defaultValue: true }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]", defaultValue: [1, 1, 1, 1] }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-4 }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }] }, { tfOpName: "Conv2DBackpropInput", category: "convolution", inputs: [{ start: 2, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 0, name: "outputShape", type: "number[]" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]", notSupported: true }] }, { tfOpName: "DepthwiseConv2d", category: "convolution", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "DepthwiseConv2dNative", category: "convolution", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "FusedDepthwiseConv2dNative", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]", defaultValue: [1, 1, 1, 1] }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }] }, { tfOpName: "Conv3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "Dilation2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "rates", name: "dilations", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }] }]; +var EC = {}; +Ue(EC, { json: () => wK }); +var wK = [{ tfOpName: "Fill", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }, { start: 1, name: "value", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "LinSpace", category: "creation", inputs: [{ start: 0, name: "start", type: "number" }, { start: 1, name: "stop", type: "number" }, { start: 2, name: "num", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "OneHot", category: "creation", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "depth", type: "number" }, { start: 2, name: "onValue", type: "number", defaultValue: 1 }, { start: 3, name: "offValue", type: "number", defaultValue: 0 }], attrs: [{ tfName: "axis", name: "axis", type: "number", notSupported: true }, { tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "Ones", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "OnesLike", category: "creation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "RandomStandardNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "RandomUniform", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "minval", name: "minval", type: "number", defaultValue: 0 }, { tfName: "maxval", name: "maxval", type: "number", defaultValue: 1 }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "Range", category: "creation", inputs: [{ start: 0, name: "start", type: "number" }, { start: 1, name: "stop", type: "number" }, { start: 2, name: "step", type: "number", defaultValue: 0 }], attrs: [{ tfName: "Tidx", name: "dtype", type: "dtype" }] }, { tfOpName: "TruncatedNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "means", name: "mean", type: "number", defaultValue: 0 }, { tfName: "stddev", name: "stdDev", type: "number", defaultValue: 1 }, { tfName: "seed", name: "seed", type: "number" }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "Zeros", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "ZerosLike", category: "creation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "Multinomial", category: "creation", inputs: [{ start: 0, name: "logits", type: "tensor" }, { start: 1, name: "numSamples", type: "number" }], attrs: [{ tfName: "seed", name: "seed", type: "number" }, { tfName: "seed2", name: "seed2", type: "number" }, { tfName: "T", name: "dtype", type: "dtype" }, { tfName: "output_dtype", name: "output_dtype", type: "dtype" }] }]; var $C = {}; -Be($C, { json: () => QK }); -var QK = [{ tfOpName: "Add", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AddV2", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AddN", category: "arithmetic", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }] }, { tfOpName: "BiasAdd", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "Sub", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "RealDiv", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Div", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "DivNoNan", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "FloorDiv", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Mul", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Maximum", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Minimum", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Pow", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SquaredDifference", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Mod", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "FloorMod", category: "arithmetic", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; -var RC = {}; -Be(RC, { json: () => ZK }); -var ZK = [{ tfOpName: "Abs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan2", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Ceil", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ClipByValue", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "clipValueMin", type: "number" }, { start: 2, name: "clipValueMax", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Complex", category: "basic_math", inputs: [{ start: 0, name: "real", type: "tensor" }, { start: 1, name: "imag", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ComplexAbs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Elu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Exp", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Floor", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Imag", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Neg", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Real", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Prelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "alpha", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu6", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Selu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sigmoid", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Rsqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Square", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sign", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Round", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Expm1", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log1p", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Reciprocal", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Softplus", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Erf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Prod", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axes", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LeakyRelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "alpha", name: "alpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsNan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +Ue($C, { json: () => IK }); +var IK = [{ tfOpName: "NonMaxSuppressionV2", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }] }, { tfOpName: "NonMaxSuppressionV3", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }] }, { tfOpName: "NonMaxSuppressionV4", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "T_threshold", name: "threshold", type: "dtype", notSupported: true }, { tfName: "pad_to_max_output_size", name: "padToMaxOutputSize", type: "bool" }] }, { tfOpName: "NonMaxSuppressionV5", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }, { start: 5, name: "softNmsSigma", type: "number" }] }, { tfOpName: "Where", category: "dynamic", inputs: [{ start: 0, name: "condition", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ListDiff", category: "dynamic", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; var AC = {}; -Be(AC, { json: () => JK }); -var JK = [{ tfOpName: "EmptyTensorList", category: "control", inputs: [{ start: 0, name: "elementShape", type: "shape" }, { start: 1, name: "maxNumElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "LoopCond", category: "control", inputs: [{ start: 0, name: "pred", type: "tensor" }] }, { tfOpName: "Switch", category: "control", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "pred", type: "tensor" }] }, { tfOpName: "Merge", category: "control", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }] }, { tfOpName: "Enter", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "frame_name", name: "frameName", type: "string" }, { tfName: "is_constant", name: "isConstant", type: "bool" }] }, { tfOpName: "Exit", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "NextIteration", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayV3", category: "control", inputs: [{ start: 0, name: "size", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "dynamic_size", name: "dynamicSize", type: "bool" }, { tfName: "clear_after_read", name: "clearAfterRead", type: "bool" }, { tfName: "identical_element_shapes", name: "identicalElementShapes", type: "bool" }, { tfName: "tensor_array_name", name: "name", type: "string" }] }, { tfOpName: "TensorArrayWriteV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "tensor", type: "tensor" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayReadV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "TensorArrayGatherV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape", name: "elementShape", type: "shape" }] }, { tfOpName: "TensorArrayScatterV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "tensor", type: "tensor" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "TensorArrayConcatV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "flowIn", type: "number" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "element_shape_except0", name: "elementShapeExcept0", type: "shape", notSupported: true }] }, { tfOpName: "TensorArraySplitV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "tensor", type: "tensor" }, { start: 2, name: "lengths", type: "number[]" }, { start: 3, name: "flowIn", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "TensorArraySizeV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }, { start: 1, name: "flowIn", type: "number" }] }, { tfOpName: "TensorArrayCloseV3", category: "control", inputs: [{ start: 0, name: "tensorArrayId", type: "tensor" }] }, { tfOpName: "StatelessIf", category: "control", inputs: [{ start: 0, name: "cond", type: "tensor" }, { start: 1, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "then_branch", name: "thenBranch", type: "func" }, { tfName: "else_branch", name: "elseBranch", type: "func" }] }, { tfOpName: "If", category: "control", inputs: [{ start: 0, name: "cond", type: "tensor" }, { start: 1, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "then_branch", name: "thenBranch", type: "func" }, { tfName: "else_branch", name: "elseBranch", type: "func" }] }, { tfOpName: "StatelessWhile", category: "control", inputs: [{ start: 0, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "cond", name: "cond", type: "func" }, { tfName: "body", name: "body", type: "func" }] }, { tfOpName: "While", category: "control", inputs: [{ start: 0, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "cond", name: "cond", type: "func" }, { tfName: "body", name: "body", type: "func" }] }, { tfOpName: "TensorListScatter", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListScatterV2", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }, { start: 3, name: "numElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListGather", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "indices", type: "number[]" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListGetItem", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListSetItem", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "index", type: "number" }, { start: 2, name: "tensor", type: "tensor" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListReserve", category: "control", inputs: [{ start: 0, name: "elementShape", type: "shape" }, { start: 1, name: "numElements", type: "number" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListFromTensor", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListStack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }, { tfName: "num_elements", name: "numElements", type: "dtype" }] }, { tfOpName: "TensorListSplit", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }, { start: 2, name: "lengths", type: "number[]" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListConcat", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }], attrs: [{ tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListConcatV2", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }], attrs: [{ tfName: "element_shape", name: "elementShape", type: "shape" }, { tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListPopBack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "elementShape", type: "shape" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListPushBack", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "tensor", type: "tensor" }], attrs: [{ tfName: "element_dtype", name: "elementDType", type: "dtype" }] }, { tfOpName: "TensorListLength", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }] }, { tfOpName: "TensorListResize", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "size", type: "number" }] }]; +Ue(AC, { json: () => vK }); +var vK = [{ tfOpName: "LowerBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { tfOpName: "TopKV2", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "k", type: "number" }], attrs: [{ tfName: "sorted", name: "sorted", type: "bool" }] }, { tfOpName: "UpperBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { tfOpName: "Unique", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "UniqueV2", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }]; +var RC = {}; +Ue(RC, { json: () => kK }); +var kK = [{ tfOpName: "PlaceholderWithDefault", category: "graph", inputs: [{ start: 0, name: "default", type: "tensor" }], attrs: [{ tfName: "shape", name: "shape", type: "shape" }, { tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "Placeholder", category: "graph", attrs: [{ tfName: "shape", name: "shape", type: "shape" }, { tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "Const", category: "graph" }, { tfOpName: "Identity", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "IdentityN", category: "graph", inputs: [{ start: 0, end: 0, name: "x", type: "tensors" }] }, { tfOpName: "Snapshot", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Rank", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Size", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Shape", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "ShapeN", category: "graph", inputs: [{ start: 0, end: 0, name: "x", type: "tensors" }] }, { tfOpName: "Print", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "data", type: "tensors" }], attrs: [{ tfName: "message", name: "message", type: "string" }, { tfName: "first_n", name: "firstN", type: "number", notSupported: true }, { tfName: "summarize", name: "summarize", type: "number", defaultValue: 3 }] }, { tfOpName: "NoOp", category: "graph", inputs: [] }, { tfOpName: "StopGradient", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "FakeQuantWithMinMaxVars", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "min", name: "min", type: "number" }, { tfName: "max", name: "max", type: "number" }] }]; var FC = {}; -Be(FC, { json: () => e6 }); -var e6 = [{ tfOpName: "AvgPool", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPool", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [], notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPoolWithArgmax", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "include_batch_in_index", name: "includeBatchInIndex", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "AvgPool3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MaxPool3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Conv1D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "stride", name: "stride", type: "number" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NWC" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "dilation", name: "dilation", type: "number", defaultValue: 1 }] }, { tfOpName: "Conv2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "useCudnnOnGpu", name: "useCudnnOnGpu", type: "bool" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "_FusedConv2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "use_cudnn_on_gpu", name: "useCudnnOnGpu", type: "bool", defaultValue: true }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]", defaultValue: [1, 1, 1, 1] }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-4 }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }] }, { tfOpName: "Conv2DBackpropInput", category: "convolution", inputs: [{ start: 2, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 0, name: "outputShape", type: "number[]" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]", notSupported: true }] }, { tfOpName: "DepthwiseConv2d", category: "convolution", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "DepthwiseConv2dNative", category: "convolution", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "FusedDepthwiseConv2dNative", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]", defaultValue: [1, 1, 1, 1] }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }] }, { tfOpName: "Conv3D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }, { tfName: "data_format", name: "dataFormat", type: "string", defaultValue: "NHWC" }, { tfName: "dilations", name: "dilations", type: "number[]" }] }, { tfOpName: "Dilation2D", category: "convolution", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "filter", type: "tensor" }], attrs: [{ tfName: "strides", name: "strides", type: "number[]" }, { tfName: "rates", name: "dilations", type: "number[]" }, { tfName: "padding", name: "pad", type: "string" }] }]; +Ue(FC, { json: () => NK }); +var NK = [{ tfOpName: "HashTable", category: "hash_table", inputs: [], attrs: [{ tfName: "shared_name", name: "sharedName", type: "string" }, { tfName: "use_node_name_sharing", name: "useNodeNameSharing", type: "bool" }, { tfName: "key_dtype", name: "keyDType", type: "dtype" }, { tfName: "value_dtype", name: "valueDType", type: "dtype" }] }, { tfOpName: "HashTableV2", category: "hash_table", inputs: [], attrs: [{ tfName: "shared_name", name: "sharedName", type: "string" }, { tfName: "use_node_name_sharing", name: "useNodeNameSharing", type: "bool" }, { tfName: "key_dtype", name: "keyDType", type: "dtype" }, { tfName: "value_dtype", name: "valueDType", type: "dtype" }] }, { tfOpName: "LookupTableImport", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableImportV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableFind", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableFindV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableSize", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "LookupTableSizeV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "InitializeTable", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }, { tfOpName: "InitializeTableV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }]; var DC = {}; -Be(DC, { json: () => t6 }); -var t6 = [{ tfOpName: "Fill", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }, { start: 1, name: "value", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "LinSpace", category: "creation", inputs: [{ start: 0, name: "start", type: "number" }, { start: 1, name: "stop", type: "number" }, { start: 2, name: "num", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "OneHot", category: "creation", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "depth", type: "number" }, { start: 2, name: "onValue", type: "number", defaultValue: 1 }, { start: 3, name: "offValue", type: "number", defaultValue: 0 }], attrs: [{ tfName: "axis", name: "axis", type: "number", notSupported: true }, { tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "Ones", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "OnesLike", category: "creation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "RandomStandardNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "RandomUniform", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "minval", name: "minval", type: "number", defaultValue: 0 }, { tfName: "maxval", name: "maxval", type: "number", defaultValue: 1 }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "Range", category: "creation", inputs: [{ start: 0, name: "start", type: "number" }, { start: 1, name: "stop", type: "number" }, { start: 2, name: "step", type: "number", defaultValue: 0 }], attrs: [{ tfName: "Tidx", name: "dtype", type: "dtype" }] }, { tfOpName: "TruncatedNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "means", name: "mean", type: "number", defaultValue: 0 }, { tfName: "stddev", name: "stdDev", type: "number", defaultValue: 1 }, { tfName: "seed", name: "seed", type: "number" }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "Zeros", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "ZerosLike", category: "creation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "Multinomial", category: "creation", inputs: [{ start: 0, name: "logits", type: "tensor" }, { start: 1, name: "numSamples", type: "number" }], attrs: [{ tfName: "seed", name: "seed", type: "number" }, { tfName: "seed2", name: "seed2", type: "number" }, { tfName: "T", name: "dtype", type: "dtype" }, { tfName: "output_dtype", name: "output_dtype", type: "dtype" }] }]; -var PC = {}; -Be(PC, { json: () => r6 }); -var r6 = [{ tfOpName: "NonMaxSuppressionV2", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }] }, { tfOpName: "NonMaxSuppressionV3", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }] }, { tfOpName: "NonMaxSuppressionV4", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "T_threshold", name: "threshold", type: "dtype", notSupported: true }, { tfName: "pad_to_max_output_size", name: "padToMaxOutputSize", type: "bool" }] }, { tfOpName: "NonMaxSuppressionV5", category: "dynamic", inputs: [{ start: 0, name: "boxes", type: "tensor" }, { start: 1, name: "scores", type: "tensor" }, { start: 2, name: "maxOutputSize", type: "number" }, { start: 3, name: "iouThreshold", type: "number" }, { start: 4, name: "scoreThreshold", type: "number" }, { start: 5, name: "softNmsSigma", type: "number" }] }, { tfOpName: "Where", category: "dynamic", inputs: [{ start: 0, name: "condition", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ListDiff", category: "dynamic", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +Ue(DC, { json: () => TK }); +var TK = [{ tfOpName: "ResizeBilinear", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "size", type: "number[]" }], attrs: [{ tfName: "align_corners", name: "alignCorners", type: "bool" }, { tfName: "half_pixel_centers", name: "halfPixelCenters", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ResizeNearestNeighbor", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "size", type: "number[]" }], attrs: [{ tfName: "align_corners", name: "alignCorners", type: "bool" }, { tfName: "half_pixel_centers", name: "halfPixelCenters", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "CropAndResize", category: "image", inputs: [{ start: 0, name: "image", type: "tensor" }, { start: 1, name: "boxes", type: "tensor" }, { start: 2, name: "boxInd", type: "tensor" }, { start: 3, name: "cropSize", type: "number[]" }], attrs: [{ tfName: "method", name: "method", type: "string" }, { tfName: "extrapolation_value", name: "extrapolationValue", type: "number" }] }, { tfOpName: "ImageProjectiveTransformV3", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "transforms", type: "tensor" }, { start: 2, name: "outputShape", type: "number[]" }, { start: 3, name: "fillValue", type: "number" }], attrs: [{ tfName: "interpolation", name: "interpolation", type: "string" }, { tfName: "fill_mode", name: "fillMode", type: "string" }] }]; var OC = {}; -Be(OC, { json: () => o6 }); -var o6 = [{ tfOpName: "LowerBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { tfOpName: "TopKV2", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "k", type: "number" }], attrs: [{ tfName: "sorted", name: "sorted", type: "bool" }] }, { tfOpName: "UpperBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { tfOpName: "Unique", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "UniqueV2", category: "evaluation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }]; +Ue(OC, { json: () => _K }); +var _K = [{ tfOpName: "Equal", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "NotEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Greater", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "GreaterEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Less", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LessEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalAnd", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalNot", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalOr", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Select", category: "logical", inputs: [{ start: 0, name: "condition", type: "tensor" }, { start: 1, name: "a", type: "tensor" }, { start: 2, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SelectV2", category: "logical", inputs: [{ start: 0, name: "condition", type: "tensor" }, { start: 1, name: "a", type: "tensor" }, { start: 2, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +var PC = {}; +Ue(PC, { json: () => EK }); +var EK = [{ tfOpName: "_FusedMatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-4 }, { tfName: "transpose_a", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "transpose_a", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "BatchMatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "adj_x", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "BatchMatMulV2", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "adj_x", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Transpose", category: "matrices", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "perm", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Einsum", category: "matrices", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "equation", name: "equation", type: "string" }, { tfName: "N", name: "n", type: "number", defaultValue: 2 }, { tfName: "T", name: "dtype", type: "dtype" }] }]; var MC = {}; -Be(MC, { json: () => n6 }); -var n6 = [{ tfOpName: "PlaceholderWithDefault", category: "graph", inputs: [{ start: 0, name: "default", type: "tensor" }], attrs: [{ tfName: "shape", name: "shape", type: "shape" }, { tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "Placeholder", category: "graph", attrs: [{ tfName: "shape", name: "shape", type: "shape" }, { tfName: "dtype", name: "dtype", type: "dtype" }] }, { tfOpName: "Const", category: "graph" }, { tfOpName: "Identity", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "IdentityN", category: "graph", inputs: [{ start: 0, end: 0, name: "x", type: "tensors" }] }, { tfOpName: "Snapshot", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Rank", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Size", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "Shape", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "ShapeN", category: "graph", inputs: [{ start: 0, end: 0, name: "x", type: "tensors" }] }, { tfOpName: "Print", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "data", type: "tensors" }], attrs: [{ tfName: "message", name: "message", type: "string" }, { tfName: "first_n", name: "firstN", type: "number", notSupported: true }, { tfName: "summarize", name: "summarize", type: "number", defaultValue: 3 }] }, { tfOpName: "NoOp", category: "graph", inputs: [] }, { tfOpName: "StopGradient", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "FakeQuantWithMinMaxVars", category: "graph", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "min", name: "min", type: "number" }, { tfName: "max", name: "max", type: "number" }] }]; +Ue(MC, { json: () => $K }); +var $K = [{ tfOpName: "EuclideanNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", defaultValue: false }] }, { tfOpName: "FusedBatchNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "FusedBatchNormV2", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "FusedBatchNormV3", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "LRN", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "depth_radius", name: "radius", type: "number", defaultValue: 5 }, { tfName: "bias", name: "bias", type: "number", defaultValue: 1 }, { tfName: "alpha", name: "alpha", type: "number", defaultValue: 1 }, { tfName: "beta", name: "beta", type: "number", defaultValue: 0.5 }] }, { tfOpName: "Softmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "LogSoftmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "SparseToDense", category: "normalization", inputs: [{ start: 0, name: "sparseIndices", type: "tensor" }, { start: 1, name: "outputShape", type: "number[]" }, { start: 2, name: "sparseValues", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", defaultValue: true, notSupported: true }] }]; var LC = {}; -Be(LC, { json: () => s6 }); -var s6 = [{ tfOpName: "HashTable", category: "hash_table", inputs: [], attrs: [{ tfName: "shared_name", name: "sharedName", type: "string" }, { tfName: "use_node_name_sharing", name: "useNodeNameSharing", type: "bool" }, { tfName: "key_dtype", name: "keyDType", type: "dtype" }, { tfName: "value_dtype", name: "valueDType", type: "dtype" }] }, { tfOpName: "HashTableV2", category: "hash_table", inputs: [], attrs: [{ tfName: "shared_name", name: "sharedName", type: "string" }, { tfName: "use_node_name_sharing", name: "useNodeNameSharing", type: "bool" }, { tfName: "key_dtype", name: "keyDType", type: "dtype" }, { tfName: "value_dtype", name: "valueDType", type: "dtype" }] }, { tfOpName: "LookupTableImport", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableImportV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableFind", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableFindV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "Tin", name: "tIn", type: "dtype", notSupported: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableSize", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "LookupTableSizeV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }]; +Ue(LC, { json: () => AK }); +var AK = [{ tfOpName: "Bincount", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "size", type: "number" }, { start: 2, name: "weights", type: "tensor" }] }, { tfOpName: "DenseBincount", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "size", type: "number" }, { start: 2, name: "weights", type: "tensor" }], attrs: [{ tfName: "binary_output", name: "binaryOutput", type: "bool" }] }, { tfOpName: "Max", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Mean", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Min", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Sum", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "All", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Any", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "ArgMax", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "ArgMin", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "Prod", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Cumprod", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }], attrs: [{ tfName: "exclusive", name: "exclusive", type: "bool" }, { tfName: "reverse", name: "reverse", type: "bool" }] }, { tfOpName: "Cumsum", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }], attrs: [{ tfName: "exclusive", name: "exclusive", type: "bool" }, { tfName: "reverse", name: "reverse", type: "bool" }] }]; var BC = {}; -Be(BC, { json: () => a6 }); -var a6 = [{ tfOpName: "ResizeBilinear", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "size", type: "number[]" }], attrs: [{ tfName: "align_corners", name: "alignCorners", type: "bool" }, { tfName: "half_pixel_centers", name: "halfPixelCenters", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "ResizeNearestNeighbor", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "size", type: "number[]" }], attrs: [{ tfName: "align_corners", name: "alignCorners", type: "bool" }, { tfName: "half_pixel_centers", name: "halfPixelCenters", type: "bool" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "CropAndResize", category: "image", inputs: [{ start: 0, name: "image", type: "tensor" }, { start: 1, name: "boxes", type: "tensor" }, { start: 2, name: "boxInd", type: "tensor" }, { start: 3, name: "cropSize", type: "number[]" }], attrs: [{ tfName: "method", name: "method", type: "string" }, { tfName: "extrapolation_value", name: "extrapolationValue", type: "number" }] }, { tfOpName: "ImageProjectiveTransformV3", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "transforms", type: "tensor" }, { start: 2, name: "outputShape", type: "number[]" }, { start: 3, name: "fillValue", type: "number" }], attrs: [{ tfName: "interpolation", name: "interpolation", type: "string" }, { tfName: "fill_mode", name: "fillMode", type: "string" }] }]; +Ue(BC, { json: () => RK }); +var RK = [{ tfOpName: "ConcatV2", category: "slice_join", inputs: [{ start: 0, end: -1, name: "tensors", type: "tensors" }, { start: -1, name: "axis", type: "number" }], attrs: [{ tfName: "N", name: "n", type: "number", defaultValue: 2 }] }, { tfOpName: "Concat", category: "slice_join", inputs: [{ start: 1, end: 0, name: "tensors", type: "tensors" }, { start: 0, name: "axis", type: "number" }], attrs: [{ tfName: "N", name: "n", type: "number", defaultValue: 2 }] }, { tfOpName: "GatherV2", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "axis", type: "number", defaultValue: 0 }], attrs: [{ tfName: "batch_dims", name: "batchDims", type: "number", defaultValue: 0 }] }, { tfOpName: "Gather", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", notSupported: true }] }, { tfOpName: "Reverse", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "dims", type: "bool[]" }] }, { tfOpName: "ReverseV2", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }] }, { tfOpName: "Slice", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "begin", type: "number[]" }, { start: 2, name: "size", type: "number[]" }] }, { tfOpName: "StridedSlice", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "begin", type: "number[]" }, { start: 2, name: "end", type: "number[]" }, { start: 3, name: "strides", type: "number[]" }], attrs: [{ tfName: "begin_mask", name: "beginMask", type: "number", defaultValue: 0 }, { tfName: "end_mask", name: "endMask", type: "number", defaultValue: 0 }, { tfName: "new_axis_mask", name: "newAxisMask", type: "number", defaultValue: 0 }, { tfName: "ellipsis_mask", name: "ellipsisMask", type: "number", defaultValue: 0 }, { tfName: "shrink_axis_mask", name: "shrinkAxisMask", type: "number", defaultValue: 0 }] }, { tfOpName: "Pack", category: "slice_join", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "axis", name: "axis", type: "number", defaultValue: 0 }] }, { tfOpName: "Unpack", category: "slice_join", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "axis", name: "axis", type: "number", defaultValue: 0 }, { tfName: "num", name: "num", type: "number", defaultValue: 0, notSupported: true }] }, { tfOpName: "Tile", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "reps", type: "number[]" }] }, { tfOpName: "Split", category: "slice_join", inputs: [{ start: 0, name: "axis", type: "number", defaultValue: 0 }, { start: 1, name: "x", type: "tensor" }], attrs: [{ tfName: "num_split", name: "numOrSizeSplits", type: "number", defaultValue: 1 }] }, { tfOpName: "SplitV", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "numOrSizeSplits", type: "number[]" }, { start: 2, name: "axis", type: "number", defaultValue: 0 }] }, { tfOpName: "ScatterNd", category: "slice_join", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "shape", type: "number[]" }] }, { tfOpName: "GatherNd", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }] }, { tfOpName: "SparseToDense", category: "slice_join", inputs: [{ start: 0, name: "sparseIndices", type: "tensor" }, { start: 1, name: "outputShape", type: "number[]" }, { start: 2, name: "sparseValues", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", defaultValue: false, notSupported: true }] }]; var VC = {}; -Be(VC, { json: () => i6 }); -var i6 = [{ tfOpName: "Equal", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "NotEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Greater", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "GreaterEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Less", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LessEqual", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalAnd", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalNot", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LogicalOr", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Select", category: "logical", inputs: [{ start: 0, name: "condition", type: "tensor" }, { start: 1, name: "a", type: "tensor" }, { start: 2, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SelectV2", category: "logical", inputs: [{ start: 0, name: "condition", type: "tensor" }, { start: 1, name: "a", type: "tensor" }, { start: 2, name: "b", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +Ue(VC, { json: () => FK }); +var FK = [{ tfOpName: "SparseFillEmptyRows", category: "sparse", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "denseShape", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }] }, { tfOpName: "SparseReshape", category: "sparse", inputs: [{ start: 0, name: "inputIndices", type: "tensor" }, { start: 1, name: "inputShape", type: "tensor" }, { start: 2, name: "newShape", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SparseSegmentMean", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }, { tfOpName: "SparseSegmentSum", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }]; var zC = {}; -Be(zC, { json: () => u6 }); -var u6 = [{ tfOpName: "_FusedMatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }, { start: 2, end: 0, name: "args", type: "tensors" }], attrs: [{ tfName: "num_args", name: "numArgs", type: "number" }, { tfName: "fused_ops", name: "fusedOps", type: "string[]", defaultValue: [] }, { tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-4 }, { tfName: "transpose_a", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "MatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "transpose_a", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "BatchMatMul", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "adj_x", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "BatchMatMulV2", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "b", type: "tensor" }], attrs: [{ tfName: "adj_x", name: "transposeA", type: "bool", defaultValue: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Transpose", category: "matrices", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "perm", type: "number[]" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Einsum", category: "matrices", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "equation", name: "equation", type: "string" }, { tfName: "N", name: "n", type: "number", defaultValue: 2 }, { tfName: "T", name: "dtype", type: "dtype" }] }]; +Ue(zC, { json: () => DK }); +var DK = [{ tfOpName: "FFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "IFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "RFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }, { tfOpName: "IRFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }]; var WC = {}; -Be(WC, { json: () => p6 }); -var p6 = [{ tfOpName: "EuclideanNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", defaultValue: false }] }, { tfOpName: "FusedBatchNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "FusedBatchNormV2", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "FusedBatchNormV3", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "scale", type: "tensor" }, { start: 2, name: "offset", type: "tensor" }, { start: 3, name: "mean", type: "tensor" }, { start: 4, name: "variance", type: "tensor" }], attrs: [{ tfName: "epsilon", name: "epsilon", type: "number", defaultValue: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { tfOpName: "LRN", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "depth_radius", name: "radius", type: "number", defaultValue: 5 }, { tfName: "bias", name: "bias", type: "number", defaultValue: 1 }, { tfName: "alpha", name: "alpha", type: "number", defaultValue: 1 }, { tfName: "beta", name: "beta", type: "number", defaultValue: 0.5 }] }, { tfOpName: "Softmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "LogSoftmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "SparseToDense", category: "normalization", inputs: [{ start: 0, name: "sparseIndices", type: "tensor" }, { start: 1, name: "outputShape", type: "number[]" }, { start: 2, name: "sparseValues", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", defaultValue: true, notSupported: true }] }]; +Ue(WC, { json: () => OK }); +var OK = [{ tfOpName: "StringNGrams", category: "string", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "dataSplits", type: "tensor" }], attrs: [{ tfName: "separator", name: "separator", type: "string" }, { tfName: "ngram_widths", name: "nGramWidths", type: "number[]" }, { tfName: "left_pad", name: "leftPad", type: "string" }, { tfName: "right_pad", name: "rightPad", type: "string" }, { tfName: "pad_width", name: "padWidth", type: "number" }, { tfName: "preserve_short_sequences", name: "preserveShortSequences", type: "bool" }], outputs: ["ngrams", "ngrams_splits"] }, { tfOpName: "StringSplit", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "delimiter", type: "tensor" }], attrs: [{ tfName: "skip_empty", name: "skipEmpty", type: "bool" }], outputs: ["indices", "values", "shape"] }, { tfOpName: "StringToHashBucketFast", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "num_buckets", name: "numBuckets", type: "number" }] }]; var UC = {}; -Be(UC, { json: () => c6 }); -var c6 = [{ tfOpName: "Bincount", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "size", type: "number" }, { start: 2, name: "weights", type: "tensor" }] }, { tfOpName: "DenseBincount", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "size", type: "number" }, { start: 2, name: "weights", type: "tensor" }], attrs: [{ tfName: "binary_output", name: "binaryOutput", type: "bool" }] }, { tfOpName: "Max", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Mean", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Min", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Sum", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "All", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Any", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "ArgMax", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "ArgMin", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "Prod", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool" }] }, { tfOpName: "Cumprod", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }], attrs: [{ tfName: "exclusive", name: "exclusive", type: "bool" }, { tfName: "reverse", name: "reverse", type: "bool" }] }, { tfOpName: "Cumsum", category: "reduction", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }], attrs: [{ tfName: "exclusive", name: "exclusive", type: "bool" }, { tfName: "reverse", name: "reverse", type: "bool" }] }]; -var GC = {}; -Be(GC, { json: () => l6 }); -var l6 = [{ tfOpName: "ConcatV2", category: "slice_join", inputs: [{ start: 0, end: -1, name: "tensors", type: "tensors" }, { start: -1, name: "axis", type: "number" }], attrs: [{ tfName: "N", name: "n", type: "number", defaultValue: 2 }] }, { tfOpName: "Concat", category: "slice_join", inputs: [{ start: 1, end: 0, name: "tensors", type: "tensors" }, { start: 0, name: "axis", type: "number" }], attrs: [{ tfName: "N", name: "n", type: "number", defaultValue: 2 }] }, { tfOpName: "GatherV2", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "axis", type: "number", defaultValue: 0 }], attrs: [{ tfName: "batch_dims", name: "batchDims", type: "number", defaultValue: 0 }] }, { tfOpName: "Gather", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", notSupported: true }] }, { tfOpName: "Reverse", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "dims", type: "bool[]" }] }, { tfOpName: "ReverseV2", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }] }, { tfOpName: "Slice", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "begin", type: "number[]" }, { start: 2, name: "size", type: "number[]" }] }, { tfOpName: "StridedSlice", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "begin", type: "number[]" }, { start: 2, name: "end", type: "number[]" }, { start: 3, name: "strides", type: "number[]" }], attrs: [{ tfName: "begin_mask", name: "beginMask", type: "number", defaultValue: 0 }, { tfName: "end_mask", name: "endMask", type: "number", defaultValue: 0 }, { tfName: "new_axis_mask", name: "newAxisMask", type: "number", defaultValue: 0 }, { tfName: "ellipsis_mask", name: "ellipsisMask", type: "number", defaultValue: 0 }, { tfName: "shrink_axis_mask", name: "shrinkAxisMask", type: "number", defaultValue: 0 }] }, { tfOpName: "Pack", category: "slice_join", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "axis", name: "axis", type: "number", defaultValue: 0 }] }, { tfOpName: "Unpack", category: "slice_join", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "axis", name: "axis", type: "number", defaultValue: 0 }, { tfName: "num", name: "num", type: "number", defaultValue: 0, notSupported: true }] }, { tfOpName: "Tile", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "reps", type: "number[]" }] }, { tfOpName: "Split", category: "slice_join", inputs: [{ start: 0, name: "axis", type: "number", defaultValue: 0 }, { start: 1, name: "x", type: "tensor" }], attrs: [{ tfName: "num_split", name: "numOrSizeSplits", type: "number", defaultValue: 1 }] }, { tfOpName: "SplitV", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "numOrSizeSplits", type: "number[]" }, { start: 2, name: "axis", type: "number", defaultValue: 0 }] }, { tfOpName: "ScatterNd", category: "slice_join", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "shape", type: "number[]" }] }, { tfOpName: "GatherNd", category: "slice_join", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }] }, { tfOpName: "SparseToDense", category: "slice_join", inputs: [{ start: 0, name: "sparseIndices", type: "tensor" }, { start: 1, name: "outputShape", type: "number[]" }, { start: 2, name: "sparseValues", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }], attrs: [{ tfName: "validate_indices", name: "validateIndices", type: "bool", defaultValue: false, notSupported: true }] }]; -var HC = {}; -Be(HC, { json: () => m6 }); -var m6 = [{ tfOpName: "SparseFillEmptyRows", category: "sparse", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "denseShape", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }] }, { tfOpName: "SparseReshape", category: "sparse", inputs: [{ start: 0, name: "inputIndices", type: "tensor" }, { start: 1, name: "inputShape", type: "tensor" }, { start: 2, name: "newShape", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SparseSegmentMean", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }, { tfOpName: "SparseSegmentSum", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }]; -var qC = {}; -Be(qC, { json: () => f6 }); -var f6 = [{ tfOpName: "FFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "IFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "RFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }, { tfOpName: "IRFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }]; -var KC = {}; -Be(KC, { json: () => d6 }); -var d6 = [{ tfOpName: "StringNGrams", category: "string", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "dataSplits", type: "tensor" }], attrs: [{ tfName: "separator", name: "separator", type: "string" }, { tfName: "ngram_widths", name: "nGramWidths", type: "number[]" }, { tfName: "left_pad", name: "leftPad", type: "string" }, { tfName: "right_pad", name: "rightPad", type: "string" }, { tfName: "pad_width", name: "padWidth", type: "number" }, { tfName: "preserve_short_sequences", name: "preserveShortSequences", type: "bool" }], outputs: ["ngrams", "ngrams_splits"] }, { tfOpName: "StringSplit", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "delimiter", type: "tensor" }], attrs: [{ tfName: "skip_empty", name: "skipEmpty", type: "bool" }], outputs: ["indices", "values", "shape"] }, { tfOpName: "StringToHashBucketFast", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "num_buckets", name: "numBuckets", type: "number" }] }]; -var jC = {}; -Be(jC, { json: () => h6 }); -var h6 = [{ tfOpName: "Cast", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "SrcT", name: "sdtype", type: "dtype", notSupported: true }, { tfName: "DstT", name: "dtype", type: "dtype" }] }, { tfOpName: "ExpandDims", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "MirrorPad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "mode", name: "mode", type: "string" }] }, { tfOpName: "Pad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "constant_value", name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "PadV2", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }, { start: 2, name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "Reshape", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "shape", type: "number[]" }] }, { tfOpName: "Squeeze", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "axis", tfDeprecatedName: "squeeze_dims", name: "axis", type: "number[]" }] }, { tfOpName: "SpaceToBatchND", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "blockShape", type: "number[]" }, { start: 2, name: "paddings", type: "number[]" }] }, { tfOpName: "BatchToSpaceND", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "blockShape", type: "number[]" }, { start: 2, name: "crops", type: "number[]" }] }, { tfOpName: "DepthToSpace", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "block_size", name: "blockSize", type: "number" }, { tfName: "data_format", name: "dataFormat", type: "string" }] }, { tfOpName: "BroadcastTo", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "shape", type: "number[]" }], attrs: [] }, { tfOpName: "BroadcastArgs", category: "transformation", inputs: [{ start: 0, name: "s0", type: "tensor" }, { start: 1, name: "s1", type: "tensor" }], attrs: [] }]; -var xl = class { +Ue(UC, { json: () => PK }); +var PK = [{ tfOpName: "Cast", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "SrcT", name: "sdtype", type: "dtype", notSupported: true }, { tfName: "DstT", name: "dtype", type: "dtype" }] }, { tfOpName: "ExpandDims", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "MirrorPad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "mode", name: "mode", type: "string" }] }, { tfOpName: "Pad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "constant_value", name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "PadV2", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }, { start: 2, name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "Reshape", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "shape", type: "number[]" }] }, { tfOpName: "Squeeze", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "axis", tfDeprecatedName: "squeeze_dims", name: "axis", type: "number[]" }] }, { tfOpName: "SpaceToBatchND", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "blockShape", type: "number[]" }, { start: 2, name: "paddings", type: "number[]" }] }, { tfOpName: "BatchToSpaceND", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "blockShape", type: "number[]" }, { start: 2, name: "crops", type: "number[]" }] }, { tfOpName: "DepthToSpace", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "block_size", name: "blockSize", type: "number" }, { tfName: "data_format", name: "dataFormat", type: "string" }] }, { tfOpName: "BroadcastTo", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "shape", type: "number[]" }], attrs: [] }, { tfOpName: "BroadcastArgs", category: "transformation", inputs: [{ start: 0, name: "s0", type: "tensor" }, { start: 1, name: "s1", type: "tensor" }], attrs: [] }]; +var pl = class { constructor() { - let e = [$C, RC, AC, FC, DC, PC, OC, MC, LC, BC, VC, zC, WC, UC, GC, HC, qC, KC, jC], t10 = [].concat(...e.map((o) => o.json)); - this.opMappers = t10.reduce((o, n) => (o[n.tfOpName] = n, o), {}); + let e = [kC, NC, TC, _C, EC, $C, AC, RC, FC, DC, OC, PC, MC, LC, BC, VC, zC, WC, UC], t6 = [].concat(...e.map((o) => o.json)); + this.opMappers = t6.reduce((o, n) => (o[n.tfOpName] = n, o), {}); } static get Instance() { return this._instance || (this._instance = new this()); } - transformGraph(e, t10 = {}) { + transformGraph(e, t6 = {}) { let o = e.node, n = [], s = [], a = [], i = o.reduce((h, g) => (h[g.name] = this.mapNode(g), g.op.startsWith("Placeholder") ? n.push(h[g.name]) : g.op === "Const" ? s.push(h[g.name]) : (g.input == null || g.input.length === 0) && a.push(h[g.name]), h), {}), p = [], u = [], c = {}, l = {}; - t10 != null && (c = this.mapSignatureEntries(t10.inputs), l = this.mapSignatureEntries(t10.outputs)); + t6 != null && (c = this.mapSignatureEntries(t6.inputs), l = this.mapSignatureEntries(t6.outputs)); let m = Object.keys(i); m.forEach((h) => { let g = i[h]; - g.inputNames.forEach((y, b) => { - let [C, , w] = zo(y), k = i[C]; + g.inputNames.forEach((x, b) => { + let [C, , w] = ss(x), k = i[C]; if (k.outputs != null) { let _ = k.outputs.indexOf(w); if (_ !== -1) { - let E = `${C}:${_}`; - g.inputNames[b] = E; + let $ = `${C}:${_}`; + g.inputNames[b] = $; } } g.inputs.push(k), k.children.push(g); @@ -9499,59 +9509,59 @@ var xl = class { let g = i[h]; g.children.length === 0 && u.push(g); }) : Object.keys(l).forEach((h) => { - let [g] = zo(h), y = i[g]; - y != null && (y.signatureKey = l[h], u.push(y)); + let [g] = ss(h), x = i[g]; + x != null && (x.signatureKey = l[h], u.push(x)); }), Object.keys(c).length > 0 ? Object.keys(c).forEach((h) => { - let [g] = zo(h), y = i[g]; - y && (y.signatureKey = c[h], p.push(y)); + let [g] = ss(h), x = i[g]; + x && (x.signatureKey = c[h], p.push(x)); }) : p = n; - let f = {}; - e.library != null && e.library.function != null && (f = e.library.function.reduce((h, g) => (h[g.signature.name] = this.mapFunction(g), h), {})); - let d = { nodes: i, inputs: p, outputs: u, weights: s, placeholders: n, signature: t10, functions: f }; - return a.length > 0 && (d.initNodes = a), d; + let d = {}; + e.library != null && e.library.function != null && (d = e.library.function.reduce((h, g) => (h[g.signature.name] = this.mapFunction(g), h), {})); + let f = { nodes: i, inputs: p, outputs: u, weights: s, placeholders: n, signature: t6, functions: d }; + return a.length > 0 && (f.initNodes = a), f; } mapSignatureEntries(e) { - return Object.keys(e || {}).reduce((t10, o) => (t10[e[o].name] = o, t10), {}); + return Object.keys(e || {}).reduce((t6, o) => (t6[e[o].name] = o, t6), {}); } mapNode(e) { - let t10 = td(e.op) || this.opMappers[e.op] || {}; + let t6 = Gd(e.op) || this.opMappers[e.op] || {}; e.attr == null && (e.attr = {}); - let o = { name: e.name, op: e.op, category: t10.category, inputNames: (e.input || []).map((n) => n.startsWith("^") ? n.slice(1) : n), inputs: [], children: [], inputParams: {}, attrParams: {}, rawAttrs: e.attr, outputs: t10.outputs }; - return t10.inputs != null && (o.inputParams = t10.inputs.reduce((n, s) => (n[s.name] = { type: s.type, inputIndexStart: s.start, inputIndexEnd: s.end }, n), {})), t10.attrs != null && (o.attrParams = t10.attrs.reduce((n, s) => { + let o = { name: e.name, op: e.op, category: t6.category, inputNames: (e.input || []).map((n) => n.startsWith("^") ? n.slice(1) : n), inputs: [], children: [], inputParams: {}, attrParams: {}, rawAttrs: e.attr, outputs: t6.outputs }; + return t6.inputs != null && (o.inputParams = t6.inputs.reduce((n, s) => (n[s.name] = { type: s.type, inputIndexStart: s.start, inputIndexEnd: s.end }, n), {})), t6.attrs != null && (o.attrParams = t6.attrs.reduce((n, s) => { let a = s.type, i; switch (s.type) { case "string": - i = od(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = od(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = qd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = qd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "string[]": - i = cd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = cd(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Jd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Jd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "number": - i = sd(e.attr, s.tfName, s.defaultValue || 0), i === void 0 && !!s.tfDeprecatedName && (i = sd(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = jd(e.attr, s.tfName, s.defaultValue || 0), i === void 0 && !!s.tfDeprecatedName && (i = jd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "number[]": - i = pd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = pd(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Zd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Zd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "bool": - i = nd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = nd(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Kd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Kd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "bool[]": - i = md(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = md(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = tf(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = tf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "shape": - i = ud(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = ud(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Qd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Qd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "shape[]": - i = ld(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = ld(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = ef(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = ef(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "dtype": - i = ad(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = ad(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Xd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Xd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "dtype[]": - i = id(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = id(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Yd(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = Yd(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "func": - i = QT(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = QT(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = kN(e.attr, s.tfName, s.defaultValue), i === void 0 && !!s.tfDeprecatedName && (i = kN(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "tensor": case "tensors": @@ -9563,326 +9573,326 @@ var xl = class { }, {})), o; } mapFunction(e) { - let t10 = e.nodeDef, o = [], n = [], s = {}; - t10 != null && (s = t10.reduce((l, m) => (l[m.name] = this.mapNode(m), m.op === "Const" && n.push(l[m.name]), l), {})); + let t6 = e.nodeDef, o = [], n = [], s = {}; + t6 != null && (s = t6.reduce((l, m) => (l[m.name] = this.mapNode(m), m.op === "Const" && n.push(l[m.name]), l), {})); let a = [], i = []; e.signature.inputArg.forEach((l) => { - let [m] = zo(l.name), f = { name: m, op: "Placeholder", inputs: [], inputNames: [], category: "graph", inputParams: {}, attrParams: { dtype: { value: XC(l.type), type: "dtype" } }, children: [] }; - f.signatureKey = l.name, a.push(f), s[m] = f; + let [m] = ss(l.name), d = { name: m, op: "Placeholder", inputs: [], inputNames: [], category: "graph", inputParams: {}, attrParams: { dtype: { value: GC(l.type), type: "dtype" } }, children: [] }; + d.signatureKey = l.name, a.push(d), s[m] = d; }), Object.keys(s).forEach((l) => { let m = s[l]; - m.inputNames.forEach((f, d) => { - let [h, , g] = zo(f), y = s[h]; - if (y.outputs != null) { - let b = y.outputs.indexOf(g); + m.inputNames.forEach((d, f) => { + let [h, , g] = ss(d), x = s[h]; + if (x.outputs != null) { + let b = x.outputs.indexOf(g); if (b !== -1) { let C = `${h}:${b}`; - m.inputNames[d] = C; + m.inputNames[f] = C; } } - m.inputs.push(y), y.children.push(m); + m.inputs.push(x), x.children.push(m); }); }); let u = e.ret; e.signature.outputArg.forEach((l) => { - let [m, f] = zo(u[l.name]), d = s[m]; - d != null && (d.defaultOutput = f, i.push(d)); + let [m, d] = ss(u[l.name]), f = s[m]; + f != null && (f.defaultOutput = d, i.push(f)); }); let c = this.mapArgsToSignature(e); return { nodes: s, inputs: a, outputs: i, weights: n, placeholders: o, signature: c }; } mapArgsToSignature(e) { - return { methodName: e.signature.name, inputs: e.signature.inputArg.reduce((t10, o) => (t10[o.name] = this.mapArgToTensorInfo(o), t10), {}), outputs: e.signature.outputArg.reduce((t10, o) => (t10[o.name] = this.mapArgToTensorInfo(o, e.ret), t10), {}) }; + return { methodName: e.signature.name, inputs: e.signature.inputArg.reduce((t6, o) => (t6[o.name] = this.mapArgToTensorInfo(o), t6), {}), outputs: e.signature.outputArg.reduce((t6, o) => (t6[o.name] = this.mapArgToTensorInfo(o, e.ret), t6), {}) }; } - mapArgToTensorInfo(e, t10) { + mapArgToTensorInfo(e, t6) { let o = e.name; - return t10 != null && (o = t10[o]), { name: o, dtype: e.type }; + return t6 != null && (o = t6[o]), { name: o, dtype: e.type }; } }; -function g6(r) { - let e = P().global; +function MK(r) { + let e = O().global; if (typeof e.atob != "undefined") return e.atob(r); if (typeof Buffer != "undefined") return new Buffer(r, "base64").toString(); throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()"); } -function ZT(r, e) { - let t10 = Array.isArray(r) ? String.fromCharCode.apply(null, r) : g6(r); - return e ? t10 : t10.toLowerCase(); +function NN(r, e) { + let t6 = Array.isArray(r) ? String.fromCharCode.apply(null, r) : MK(r); + return e ? t6 : t6.toLowerCase(); } -function od(r, e, t10, o = false) { +function qd(r, e, t6, o = false) { let n = r[e]; - return n != null ? ZT(n.s, o) : t10; + return n != null ? NN(n.s, o) : t6; } -function nd(r, e, t10) { +function Kd(r, e, t6) { let o = r[e]; - return o ? o.b : t10; + return o ? o.b : t6; } -function sd(r, e, t10) { - let o = r[e] || {}, n = o.i != null ? o.i : o.f != null ? o.f : t10; +function jd(r, e, t6) { + let o = r[e] || {}, n = o.i != null ? o.i : o.f != null ? o.f : t6; return typeof n == "number" ? n : parseInt(n, 10); } -function XC(r) { - switch (typeof r == "string" && (r = To[r]), r) { - case To.DT_FLOAT: - case To.DT_HALF: +function GC(r) { + switch (typeof r == "string" && (r = ao[r]), r) { + case ao.DT_FLOAT: + case ao.DT_HALF: return "float32"; - case To.DT_INT32: - case To.DT_INT64: - case To.DT_INT8: - case To.DT_UINT8: + case ao.DT_INT32: + case ao.DT_INT64: + case ao.DT_INT8: + case ao.DT_UINT8: return "int32"; - case To.DT_BOOL: + case ao.DT_BOOL: return "bool"; - case To.DT_DOUBLE: + case ao.DT_DOUBLE: return "float32"; - case To.DT_STRING: + case ao.DT_STRING: return "string"; default: return null; } } -function QT(r, e, t10) { +function kN(r, e, t6) { let o = r[e]; - return o && o.func ? o.func.name : t10; + return o && o.func ? o.func.name : t6; } -function ad(r, e, t10) { +function Xd(r, e, t6) { let o = r[e]; - return o && o.type ? XC(o.type) : t10; + return o && o.type ? GC(o.type) : t6; } -function id(r, e, t10) { +function Yd(r, e, t6) { let o = r[e]; - return o && o.list && o.list.type ? o.list.type.map((n) => XC(n)) : t10; + return o && o.list && o.list.type ? o.list.type.map((n) => GC(n)) : t6; } -function JT(r) { +function TN(r) { if (!r.unknownRank) return r.dim != null ? r.dim.map((e) => typeof e.size == "number" ? e.size : parseInt(e.size, 10)) : []; } -function ud(r, e, t10) { +function Qd(r, e, t6) { let o = r[e]; - return o && o.shape ? JT(o.shape) : t10; + return o && o.shape ? TN(o.shape) : t6; } -function pd(r, e, t10) { +function Zd(r, e, t6) { let o = r[e]; - return o ? ((o.list.f && o.list.f.length ? o.list.f : o.list.i) || []).map((n) => typeof n == "number" ? n : parseInt(n, 10)) : t10; + return o ? ((o.list.f && o.list.f.length ? o.list.f : o.list.i) || []).map((n) => typeof n == "number" ? n : parseInt(n, 10)) : t6; } -function cd(r, e, t10, o = false) { +function Jd(r, e, t6, o = false) { let n = r[e]; - return n && n.list && n.list.s ? n.list.s.map((s) => ZT(s, o)) : t10; + return n && n.list && n.list.s ? n.list.s.map((s) => NN(s, o)) : t6; } -function ld(r, e, t10) { +function ef(r, e, t6) { let o = r[e]; - return o && o.list && o.list.shape ? o.list.shape.map((n) => JT(n)) : t10; + return o && o.list && o.list.shape ? o.list.shape.map((n) => TN(n)) : t6; } -function md(r, e, t10) { +function tf(r, e, t6) { let o = r[e]; - return o && o.list && o.list.b ? o.list.b : t10; + return o && o.list && o.list.b ? o.list.b : t6; } -var fd = class { - constructor(e, t10, o) { - this.node = e, this.tensorMap = t10, this.context = o, this.inputs = [], this.attrs = {}, this.inputs = e.inputNames.map((n) => this.getInput(n)), e.rawAttrs != null && (this.attrs = Object.keys(e.rawAttrs).reduce((n, s) => (n[s] = this.getAttr(s), n), {})); +var rf = class { + constructor(e, t6, o) { + this.node = e, this.tensorMap = t6, this.context = o, this.inputs = [], this.attrs = {}, this.inputs = e.inputNames.map((n) => this.getInput(n)), e.rawAttrs != null && (this.attrs = Object.keys(e.rawAttrs).reduce((n, s) => (n[s] = this.getAttr(s), n), {})); } getInput(e) { - return Ht(e, this.tensorMap, this.context); + return Gt(e, this.tensorMap, this.context); } - getAttr(e, t10) { + getAttr(e, t6) { let o = this.node.rawAttrs[e]; if (o.tensor != null) - return Ht(e, this.tensorMap, this.context); + return Gt(e, this.tensorMap, this.context); if (o.i != null || o.f != null) - return sd(this.node.rawAttrs, e, t10); + return jd(this.node.rawAttrs, e, t6); if (o.s != null) - return od(this.node.rawAttrs, e, t10); + return qd(this.node.rawAttrs, e, t6); if (o.b != null) - return nd(this.node.rawAttrs, e, t10); + return Kd(this.node.rawAttrs, e, t6); if (o.shape != null) - return ud(this.node.rawAttrs, e, t10); + return Qd(this.node.rawAttrs, e, t6); if (o.type != null) - return ad(this.node.rawAttrs, e, t10); + return Xd(this.node.rawAttrs, e, t6); if (o.list != null) { if (o.list.i != null || o.list.f != null) - return pd(this.node.rawAttrs, e, t10); + return Zd(this.node.rawAttrs, e, t6); if (o.list.s != null) - return cd(this.node.rawAttrs, e, t10); + return Jd(this.node.rawAttrs, e, t6); if (o.list.shape != null) - return ld(this.node.rawAttrs, e, t10); + return ef(this.node.rawAttrs, e, t6); if (o.list.b != null) - return md(this.node.rawAttrs, e, t10); + return tf(this.node.rawAttrs, e, t6); if (o.list.type != null) - return id(this.node.rawAttrs, e, t10); + return Yd(this.node.rawAttrs, e, t6); } - return t10; + return t6; } }; -var rt = {}; -Be(rt, { OP_SCOPE_SUFFIX: () => Ub, abs: () => Qt, acos: () => Vv, acosh: () => zv, add: () => ge, addN: () => Wv, all: () => Uv, any: () => Gv, argMax: () => Hv, argMin: () => qv, asin: () => Kv, asinh: () => jv, atan: () => Xv, atan2: () => Yv, atanh: () => Qv, avgPool: () => mf, avgPool3d: () => ek, basicLSTMCell: () => tk, batchNorm: () => li, batchNorm2d: () => ok, batchNorm3d: () => nk, batchNorm4d: () => sk, batchToSpaceND: () => ff, bincount: () => df, booleanMaskAsync: () => _H, broadcastArgs: () => ak, broadcastTo: () => Ls, buffer: () => ne, cast: () => qe, ceil: () => ik, clipByValue: () => uk, clone: () => zr, complex: () => Er, concat: () => gt, concat1d: () => pk, concat2d: () => ck, concat3d: () => lk, concat4d: () => mk, conv1d: () => fk, conv2d: () => mi, conv2dTranspose: () => dk, conv3d: () => hk, conv3dTranspose: () => xk, cos: () => yk, cosh: () => bk, cosineWindow: () => hl, cumprod: () => Ck, cumsum: () => Ik, denseBincount: () => wk, depthToSpace: () => Sk, depthwiseConv2d: () => Gp, diag: () => vk, dilation2d: () => kk, div: () => We, divNoNan: () => Tk, dot: () => Nk, dropout: () => BH, einsum: () => _k, elu: () => xf, enclosingPowerOfTwo: () => wC, equal: () => gf, erf: () => Ek, euclideanNorm: () => Ak, exp: () => Bo, expandDims: () => _a, expm1: () => Fk, eye: () => yf, fft: () => qp, fill: () => Bs, floor: () => bf, floorDiv: () => cf, fused: () => SC, gather: () => Cf, gatherND: () => MH, greater: () => cu, greaterEqual: () => If, ifft: () => hu, imag: () => ci, image: () => zq, inTopKAsync: () => zH, irfft: () => Gf, isFinite: () => Dk, isInf: () => Pk, isNaN: () => Ok, leakyRelu: () => wf, less: () => Mk, lessEqual: () => Hp, linalg: () => Wq, linspace: () => Lk, localResponseNormalization: () => Bk, log: () => Ea, log1p: () => Sf, logSigmoid: () => Vk, logSoftmax: () => zk, logSumExp: () => Tf, logicalAnd: () => lu, logicalNot: () => Nf, logicalOr: () => _f, logicalXor: () => Wk, losses: () => Uq, lowerBound: () => Uk, matMul: () => Xe, max: () => Vs, maxPool: () => $f, maxPool3d: () => Gk, maxPoolWithArgmax: () => Hk, maximum: () => Rf, mean: () => mu, meshgrid: () => qk, min: () => fl, minimum: () => Af, mirrorPad: () => Kk, mod: () => jk, moments: () => Xk, movingAverage: () => $H, mul: () => oe, multiRNNCell: () => Yk, multinomial: () => Qk, neg: () => yr, norm: () => pu, notEqual: () => Ff, oneHot: () => pl, ones: () => zs, onesLike: () => Zk, op: () => T, outerProduct: () => Jk, pad: () => Ws, pad1d: () => e1, pad2d: () => t1, pad3d: () => r1, pad4d: () => o1, pool: () => n1, pow: () => Na, prelu: () => Pf, print: () => ef, prod: () => s1, raggedGather: () => a1, raggedRange: () => i1, raggedTensorToTensor: () => u1, rand: () => p1, randomGamma: () => T1, randomNormal: () => Vf, randomStandardNormal: () => N1, randomUniform: () => zf, range: () => di, real: () => ka, reciprocal: () => _1, relu: () => hi, relu6: () => Wf, reshape: () => z, reverse: () => vo, reverse1d: () => E1, reverse2d: () => $1, reverse3d: () => R1, reverse4d: () => A1, rfft: () => Kp, round: () => Uf, rsqrt: () => F1, scalar: () => be, scatterND: () => AH, searchSorted: () => dl, selu: () => D1, separableConv2d: () => P1, setdiff1dAsync: () => O1, sigmoid: () => Ms, sign: () => M1, signal: () => Vq, sin: () => L1, sinh: () => B1, slice: () => Ue, slice1d: () => V1, slice2d: () => z1, slice3d: () => W1, slice4d: () => U1, softmax: () => G1, softplus: () => kf, spaceToBatchND: () => Df, sparse: () => Gq, sparseToDense: () => PH, spectral: () => Bq, split: () => $a, sqrt: () => Rr, square: () => Zt, squaredDifference: () => Hf, squeeze: () => jp, stack: () => Ir, step: () => qf, stridedSlice: () => H1, string: () => Hq, sub: () => ke, sum: () => tt, tan: () => q1, tanh: () => ml, tensor: () => nr, tensor1d: () => mr, tensor2d: () => gi, tensor3d: () => sf, tensor4d: () => K1, tensor5d: () => j1, tensor6d: () => X1, tile: () => fi, topk: () => Y1, transpose: () => Wp, truncatedNormal: () => Q1, unique: () => Z1, unsortedSegmentSum: () => J1, unstack: () => ko, upperBound: () => eT, variable: () => tT, where: () => os, whereAsync: () => jf, zeros: () => Wr, zerosLike: () => Gt }); -var eN = (r, e, t10, o = rt) => { +var Ye = {}; +Ue(Ye, { OP_SCOPE_SUFFIX: () => Lb, abs: () => Yt, acos: () => f0, acosh: () => h0, add: () => xe, addN: () => g0, all: () => x0, any: () => y0, argMax: () => b0, argMin: () => C0, asin: () => S0, asinh: () => w0, atan: () => I0, atan2: () => v0, atanh: () => k0, avgPool: () => td, avgPool3d: () => _0, basicLSTMCell: () => E0, batchNorm: () => wi, batchNorm2d: () => A0, batchNorm3d: () => R0, batchNorm4d: () => F0, batchToSpaceND: () => rd, bincount: () => od, booleanMaskAsync: () => XG, broadcastArgs: () => D0, broadcastTo: () => Ii, buffer: () => le, cast: () => Ke, ceil: () => O0, clipByValue: () => P0, clone: () => Br, complex: () => Tr, concat: () => gt, concat1d: () => M0, concat2d: () => L0, concat3d: () => B0, concat4d: () => V0, conv1d: () => z0, conv2d: () => vi, conv2dTranspose: () => W0, conv3d: () => U0, conv3dTranspose: () => H0, cos: () => q0, cosh: () => K0, cosineWindow: () => il, cumprod: () => j0, cumsum: () => X0, denseBincount: () => Y0, depthToSpace: () => Q0, depthwiseConv2d: () => Bp, diag: () => Z0, dilation2d: () => J0, div: () => Ge, divNoNan: () => ek, dot: () => tk, dropout: () => aH, einsum: () => rk, elu: () => ad, enclosingPowerOfTwo: () => xC, equal: () => sd, erf: () => ok, euclideanNorm: () => ak, exp: () => Co, expandDims: () => Fa, expm1: () => ik, eye: () => id, fft: () => zp, fill: () => Ws, floor: () => ud, floorDiv: () => Jm, fused: () => yC, gather: () => pd, gatherND: () => nH, greater: () => cu, greaterEqual: () => cd, ifft: () => hu, imag: () => Si, image: () => uq, inTopKAsync: () => uH, irfft: () => Fd, isFinite: () => uk, isInf: () => pk, isNaN: () => ck, leakyRelu: () => ld, less: () => lk, lessEqual: () => Vp, linalg: () => pq, linspace: () => mk, localResponseNormalization: () => dk, log: () => Da, log1p: () => md, logSigmoid: () => fk, logSoftmax: () => hk, logSumExp: () => hd, logicalAnd: () => lu, logicalNot: () => gd, logicalOr: () => xd, logicalXor: () => gk, losses: () => cq, lowerBound: () => xk, matMul: () => Xe, max: () => Us, maxPool: () => bd, maxPool3d: () => yk, maxPoolWithArgmax: () => bk, maximum: () => Cd, mean: () => mu, meshgrid: () => Ck, min: () => sl, minimum: () => Sd, mirrorPad: () => Sk, mod: () => wk, moments: () => Ik, movingAverage: () => QG, mul: () => ae, multiRNNCell: () => vk, multinomial: () => kk, neg: () => yr, norm: () => pu, notEqual: () => wd, oneHot: () => tl, ones: () => Gs, onesLike: () => Nk, op: () => N, outerProduct: () => Tk, pad: () => Hs, pad1d: () => _k, pad2d: () => Ek, pad3d: () => $k, pad4d: () => Ak, pool: () => Rk, pow: () => Ra, prelu: () => vd, print: () => Gm, prod: () => Fk, raggedGather: () => Dk, raggedRange: () => Ok, raggedTensorToTensor: () => Pk, rand: () => Mk, randomGamma: () => e1, randomNormal: () => Ed, randomStandardNormal: () => t1, randomUniform: () => $d, range: () => Ni, real: () => $a, reciprocal: () => r1, relu: () => Ti, relu6: () => Ad, reshape: () => z, reverse: () => no, reverse1d: () => o1, reverse2d: () => n1, reverse3d: () => s1, reverse4d: () => a1, rfft: () => Wp, round: () => Rd, rsqrt: () => i1, scalar: () => be, scatterND: () => JG, searchSorted: () => al, selu: () => u1, separableConv2d: () => p1, setdiff1dAsync: () => c1, sigmoid: () => zs, sign: () => l1, signal: () => iq, sin: () => m1, sinh: () => d1, slice: () => He, slice1d: () => f1, slice2d: () => h1, slice3d: () => g1, slice4d: () => x1, softmax: () => y1, softplus: () => fd, spaceToBatchND: () => Id, sparse: () => lq, sparseToDense: () => rH, spectral: () => aq, split: () => Oa, sqrt: () => $r, square: () => Qt, squaredDifference: () => Dd, squeeze: () => Up, stack: () => Sr, step: () => Od, stridedSlice: () => b1, string: () => mq, sub: () => Ne, sum: () => et, tan: () => C1, tanh: () => nl, tensor: () => nr, tensor1d: () => mr, tensor2d: () => _i, tensor3d: () => Xm, tensor4d: () => S1, tensor5d: () => w1, tensor6d: () => I1, tile: () => ki, topk: () => v1, transpose: () => Mp, truncatedNormal: () => k1, unique: () => N1, unsortedSegmentSum: () => T1, unstack: () => so, upperBound: () => _1, variable: () => E1, where: () => os, whereAsync: () => Md, zeros: () => Vr, zerosLike: () => Ut }); +var _N = (r, e, t6, o = Ye) => { switch (r.op) { case "BiasAdd": case "AddV2": case "Add": - return [o.add(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.add(I("a", r, e, t6), I("b", r, e, t6))]; case "AddN": - return [o.addN(S("tensors", r, e, t10))]; + return [o.addN(I("tensors", r, e, t6))]; case "FloorMod": case "Mod": - return [o.mod(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.mod(I("a", r, e, t6), I("b", r, e, t6))]; case "Mul": - return [o.mul(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.mul(I("a", r, e, t6), I("b", r, e, t6))]; case "RealDiv": case "Div": - return [o.div(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.div(I("a", r, e, t6), I("b", r, e, t6))]; case "DivNoNan": - return [o.divNoNan(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.divNoNan(I("a", r, e, t6), I("b", r, e, t6))]; case "FloorDiv": - return [o.floorDiv(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.floorDiv(I("a", r, e, t6), I("b", r, e, t6))]; case "Sub": - return [o.sub(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.sub(I("a", r, e, t6), I("b", r, e, t6))]; case "Minimum": - return [o.minimum(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.minimum(I("a", r, e, t6), I("b", r, e, t6))]; case "Maximum": - return [o.maximum(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.maximum(I("a", r, e, t6), I("b", r, e, t6))]; case "Pow": - return [o.pow(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.pow(I("a", r, e, t6), I("b", r, e, t6))]; case "SquaredDifference": - return [o.squaredDifference(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.squaredDifference(I("a", r, e, t6), I("b", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var tN = (r, e, t10, o = rt) => { +var EN = (r, e, t6, o = Ye) => { switch (r.op) { case "Abs": case "ComplexAbs": - return [o.abs(S("x", r, e, t10))]; + return [o.abs(I("x", r, e, t6))]; case "Acos": - return [o.acos(S("x", r, e, t10))]; + return [o.acos(I("x", r, e, t6))]; case "Acosh": - return [o.acosh(S("x", r, e, t10))]; + return [o.acosh(I("x", r, e, t6))]; case "Asin": - return [o.asin(S("x", r, e, t10))]; + return [o.asin(I("x", r, e, t6))]; case "Asinh": - return [o.asinh(S("x", r, e, t10))]; + return [o.asinh(I("x", r, e, t6))]; case "Atan": - return [o.atan(S("x", r, e, t10))]; + return [o.atan(I("x", r, e, t6))]; case "Atan2": - return [o.atan2(S("x", r, e, t10), S("y", r, e, t10))]; + return [o.atan2(I("x", r, e, t6), I("y", r, e, t6))]; case "Atanh": - return [o.atanh(S("x", r, e, t10))]; + return [o.atanh(I("x", r, e, t6))]; case "Ceil": - return [o.ceil(S("x", r, e, t10))]; + return [o.ceil(I("x", r, e, t6))]; case "Complex": - return [o.complex(S("real", r, e, t10), S("imag", r, e, t10))]; + return [o.complex(I("real", r, e, t6), I("imag", r, e, t6))]; case "Cos": - return [o.cos(S("x", r, e, t10))]; + return [o.cos(I("x", r, e, t6))]; case "Cosh": - return [o.cosh(S("x", r, e, t10))]; + return [o.cosh(I("x", r, e, t6))]; case "Elu": - return [o.elu(S("x", r, e, t10))]; + return [o.elu(I("x", r, e, t6))]; case "Erf": - return [o.erf(S("x", r, e, t10))]; + return [o.erf(I("x", r, e, t6))]; case "Exp": - return [o.exp(S("x", r, e, t10))]; + return [o.exp(I("x", r, e, t6))]; case "Expm1": - return [o.expm1(S("x", r, e, t10))]; + return [o.expm1(I("x", r, e, t6))]; case "Floor": - return [o.floor(S("x", r, e, t10))]; + return [o.floor(I("x", r, e, t6))]; case "Log": - return [o.log(S("x", r, e, t10))]; + return [o.log(I("x", r, e, t6))]; case "Log1p": - return [o.log1p(S("x", r, e, t10))]; + return [o.log1p(I("x", r, e, t6))]; case "Imag": - return [o.imag(S("x", r, e, t10))]; + return [o.imag(I("x", r, e, t6))]; case "Neg": - return [o.neg(S("x", r, e, t10))]; + return [o.neg(I("x", r, e, t6))]; case "Reciprocal": - return [o.reciprocal(S("x", r, e, t10))]; + return [o.reciprocal(I("x", r, e, t6))]; case "Real": - return [o.real(S("x", r, e, t10))]; + return [o.real(I("x", r, e, t6))]; case "Relu": - return [o.relu(S("x", r, e, t10))]; + return [o.relu(I("x", r, e, t6))]; case "Round": - return [o.round(S("x", r, e, t10))]; + return [o.round(I("x", r, e, t6))]; case "Selu": - return [o.selu(S("x", r, e, t10))]; + return [o.selu(I("x", r, e, t6))]; case "Sigmoid": - return [o.sigmoid(S("x", r, e, t10))]; + return [o.sigmoid(I("x", r, e, t6))]; case "Sin": - return [o.sin(S("x", r, e, t10))]; + return [o.sin(I("x", r, e, t6))]; case "Sign": - return [o.sign(S("x", r, e, t10))]; + return [o.sign(I("x", r, e, t6))]; case "Sinh": - return [o.sinh(S("x", r, e, t10))]; + return [o.sinh(I("x", r, e, t6))]; case "Softplus": - return [o.softplus(S("x", r, e, t10))]; + return [o.softplus(I("x", r, e, t6))]; case "Sqrt": - return [o.sqrt(S("x", r, e, t10))]; + return [o.sqrt(I("x", r, e, t6))]; case "Square": - return [o.square(S("x", r, e, t10))]; + return [o.square(I("x", r, e, t6))]; case "Tanh": - return [o.tanh(S("x", r, e, t10))]; + return [o.tanh(I("x", r, e, t6))]; case "Tan": - return [o.tan(S("x", r, e, t10))]; + return [o.tan(I("x", r, e, t6))]; case "ClipByValue": - return [o.clipByValue(S("x", r, e, t10), S("clipValueMin", r, e, t10), S("clipValueMax", r, e, t10))]; + return [o.clipByValue(I("x", r, e, t6), I("clipValueMin", r, e, t6), I("clipValueMax", r, e, t6))]; case "Relu6": - return [o.relu6(S("x", r, e, t10))]; + return [o.relu6(I("x", r, e, t6))]; case "Rsqrt": - return [o.rsqrt(Ht(r.inputNames[0], e, t10))]; + return [o.rsqrt(Gt(r.inputNames[0], e, t6))]; case "Prod": - return [o.prod(S("x", r, e, t10), S("axes", r, e, t10))]; + return [o.prod(I("x", r, e, t6), I("axes", r, e, t6))]; case "LeakyRelu": - return [o.leakyRelu(S("x", r, e, t10), S("alpha", r, e, t10))]; + return [o.leakyRelu(I("x", r, e, t6), I("alpha", r, e, t6))]; case "Prelu": - return [o.prelu(S("x", r, e, t10), S("alpha", r, e, t10))]; + return [o.prelu(I("x", r, e, t6), I("alpha", r, e, t6))]; case "IsNan": - return [o.isNaN(Ht(r.inputNames[0], e, t10))]; + return [o.isNaN(Gt(r.inputNames[0], e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -function Ur(r, e, t10 = "") { +function zr(r, e, t6 = "") { if (!(typeof r == "number" || typeof e == "number")) { - x.assert(r.length === e.length, () => t10 + ` Shapes ${r} and ${e} must match`); + y.assert(r.length === e.length, () => t6 + ` Shapes ${r} and ${e} must match`); for (let o = 0; o < r.length; o++) { let n = r[o], s = e[o]; - x.assert(n < 0 || s < 0 || n === s, () => t10 + ` Shapes ${r} and ${e} must match`); + y.assert(n < 0 || s < 0 || n === s, () => t6 + ` Shapes ${r} and ${e} must match`); } } } -function rN(r) { +function $N(r) { return !(typeof r == "number" || r.some((e) => e < 0)); } -function Xp(r, e, t10) { - let o = dd(r, t10), n = !rN(o); +function Gp(r, e, t6) { + let o = of(r, t6), n = !$N(o); if (n && e.length === 0) throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`); if (n && e.forEach((s) => { - o = dd(s.shape, o); - }), !rN(o)) + o = of(s.shape, o); + }), !$N(o)) throw new Error(`Non-fully-defined elementShape: ${o}`); return o; } -function dd(r, e) { +function of(r, e) { if (typeof r == "number") return e; if (typeof e == "number") return r; if (r.length !== e.length) throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`); - let t10 = []; + let t6 = []; for (let o = 0; o < r.length; ++o) { let n = r[o], s = e[o]; if (n >= 0 && s >= 0 && n !== s) throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`); - t10[o] = n >= 0 ? n : s; + t6[o] = n >= 0 ? n : s; } - return t10; + return t6; } -var hd = class { - constructor(e, t10, o, n, s, a, i) { - this.name = e, this.dtype = t10, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = be(0), So(this.idTensor); +var nf = class { + constructor(e, t6, o, n, s, a, i) { + this.name = e, this.dtype = t6, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = be(0), _r(this.idTensor); } get id() { return this.idTensor.id; @@ -9891,8 +9901,8 @@ var hd = class { return this.closed_; } clearAndClose(e) { - this.tensors.forEach((t10) => { - (e == null || !e.has(t10.tensor.id)) && t10.tensor.dispose(); + this.tensors.forEach((t6) => { + (e == null || !e.has(t6.tensor.id)) && t6.tensor.dispose(); }), this.tensors = [], this.closed_ = true, this.idTensor.dispose(); } size() { @@ -9903,37 +9913,37 @@ var hd = class { throw new Error(`TensorArray ${this.name} has already been closed.`); if (e < 0 || e >= this.size()) throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`); - let t10 = this.tensors[e]; - if (t10.cleared) + let t6 = this.tensors[e]; + if (t6.cleared) throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`); - return this.clearAfterRead && (t10.cleared = true), t10.read = true, t10.tensor; + return this.clearAfterRead && (t6.cleared = true), t6.read = true, t6.tensor; } readMany(e) { - return e.map((t10) => this.read(t10)); + return e.map((t6) => this.read(t6)); } - write(e, t10) { + write(e, t6) { if (this.closed_) throw new Error(`TensorArray ${this.name} has already been closed.`); if (e < 0 || !this.dynamicSize && e >= this.maxSize) throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`); let o = this.tensors[e] || {}; - if (t10.dtype !== this.dtype) + if (t6.dtype !== this.dtype) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, - because the value dtype is ${t10.dtype}, but TensorArray dtype is ${this.dtype}.`); - if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = t10.shape), Ur(this.elementShape, t10.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${e}.`), o.read) + because the value dtype is ${t6.dtype}, but TensorArray dtype is ${this.dtype}.`); + if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = t6.shape), zr(this.elementShape, t6.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${e}.`), o.read) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`); if (o.written) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`); - o.tensor = t10, So(t10), o.written = true, this.tensors[e] = o; + o.tensor = t6, _r(t6), o.written = true, this.tensors[e] = o; } - writeMany(e, t10) { - if (e.length !== t10.length) - throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t10.length}.`); - e.forEach((o, n) => this.write(o, t10[n])); + writeMany(e, t6) { + if (e.length !== t6.length) + throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t6.length}.`); + e.forEach((o, n) => this.write(o, t6[n])); } - gather(e, t10) { - if (!!t10 && t10 !== this.dtype) - throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t10}`); + gather(e, t6) { + if (!!t6 && t6 !== this.dtype) + throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t6}`); if (e) e = e.slice(0, this.size()); else { @@ -9944,45 +9954,45 @@ var hd = class { if (e.length === 0) return nr([], [0].concat(this.elementShape)); let o = this.readMany(e); - return Ur(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), Ir(o, 0); + return zr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), Sr(o, 0); } concat(e) { if (!!e && e !== this.dtype) throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`); if (this.size() === 0) return nr([], [0].concat(this.elementShape)); - let t10 = []; + let t6 = []; for (let n = 0; n < this.size(); n++) - t10.push(n); - let o = this.readMany(t10); - return Ur(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), gt(o, 0); + t6.push(n); + let o = this.readMany(t6); + return zr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), gt(o, 0); } - scatter(e, t10) { - if (t10.dtype !== this.dtype) - throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t10.dtype}`); - if (e.length !== t10.shape[0]) - throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t10.shape[0]}`); + scatter(e, t6) { + if (t6.dtype !== this.dtype) + throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t6.dtype}`); + if (e.length !== t6.shape[0]) + throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t6.shape[0]}`); let o = Math.max(...e); if (!this.dynamicSize && o >= this.maxSize) throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`); - this.writeMany(e, ko(t10, 0)); + this.writeMany(e, so(t6, 0)); } - split(e, t10) { - if (t10.dtype !== this.dtype) - throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t10.dtype}`); + split(e, t6) { + if (t6.dtype !== this.dtype) + throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t6.dtype}`); let o = 0, n = e.map((p) => (o += p, o)); - if (o !== t10.shape[0]) + if (o !== t6.shape[0]) throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, and tensor's shape is: ${t10.shape}`); + ${o}, and tensor's shape is: ${t6.shape}`); if (!this.dynamicSize && e.length !== this.maxSize) throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`); - let s = o === 0 ? 0 : t10.size / o, a = []; - Ne(() => { - t10 = z(t10, [1, o, s]); + let s = o === 0 ? 0 : t6.size / o, a = []; + Ee(() => { + t6 = z(t6, [1, o, s]); for (let p = 0; p < e.length; ++p) { let c = [0, p === 0 ? 0 : n[p - 1], 0], l = [1, e[p], s]; - a[p] = z(Ue(t10, c, l), this.elementShape); + a[p] = z(He(t6, c, l), this.elementShape); } return a; }); @@ -9992,304 +10002,304 @@ var hd = class { this.writeMany(i, a); } }; -var Ra = class { - constructor(e, t10, o, n = -1) { - this.tensors = e, this.elementShape = t10, this.elementDtype = o, e != null && e.forEach((s) => { +var Pa = class { + constructor(e, t6, o, n = -1) { + this.tensors = e, this.elementShape = t6, this.elementDtype = o, e != null && e.forEach((s) => { if (o !== s.dtype) throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`); - Ur(t10, s.shape, "TensorList shape mismatch: "), So(s); - }), this.idTensor = be(0), this.maxNumElements = n, So(this.idTensor); + zr(t6, s.shape, "TensorList shape mismatch: "), _r(s); + }), this.idTensor = be(0), this.maxNumElements = n, _r(this.idTensor); } get id() { return this.idTensor.id; } copy() { - return new Ra([...this.tensors], this.elementShape, this.elementDtype); + return new Pa([...this.tensors], this.elementShape, this.elementDtype); } clearAndClose(e) { - this.tensors.forEach((t10) => { - (e == null || !e.has(t10.id)) && t10.dispose(); + this.tensors.forEach((t6) => { + (e == null || !e.has(t6.id)) && t6.dispose(); }), this.tensors.length = 0, this.idTensor.dispose(); } size() { return this.tensors.length; } - stack(e, t10, o = -1) { - if (t10 !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); + stack(e, t6, o = -1) { + if (t6 !== this.elementDtype) + throw new Error(`Invalid data types; op elements ${t6}, but list elements ${this.elementDtype}`); if (o !== -1 && this.tensors.length !== o) throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`); - Ur(e, this.elementShape, "TensorList shape mismatch: "); - let n = Xp(this.elementShape, this.tensors, e); - return Ne(() => { + zr(e, this.elementShape, "TensorList shape mismatch: "); + let n = Gp(this.elementShape, this.tensors, e); + return Ee(() => { let s = this.tensors.map((a) => z(a, n)); - return Ir(s, 0); + return Sr(s, 0); }); } - popBack(e, t10) { - if (t10 !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); + popBack(e, t6) { + if (t6 !== this.elementDtype) + throw new Error(`Invalid data types; op elements ${t6}, but list elements ${this.elementDtype}`); if (this.size() === 0) throw new Error("Trying to pop from an empty list."); - let o = Xp(this.elementShape, this.tensors, e), n = this.tensors.pop(); - return n.kept = false, Ur(n.shape, e, "TensorList shape mismatch: "), z(n, o); + let o = Gp(this.elementShape, this.tensors, e), n = this.tensors.pop(); + return n.kept = false, zr(n.shape, e, "TensorList shape mismatch: "), z(n, o); } pushBack(e) { if (e.dtype !== this.elementDtype) throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`); - if (Ur(e.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) + if (zr(e.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) throw new Error("Trying to push element into a full list."); - So(e), this.tensors.push(e); + _r(e), this.tensors.push(e); } resize(e) { if (e < 0) throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`); if (this.maxNumElements !== -1 && e > this.maxNumElements) throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`); - let t10 = new Ra([], this.elementShape, this.elementDtype, this.maxNumElements); - t10.tensors.length = e; + let t6 = new Pa([], this.elementShape, this.elementDtype, this.maxNumElements); + t6.tensors.length = e; for (let o = 0; o < Math.min(this.tensors.length, e); ++o) - t10.tensors[o] = this.tensors[o]; - return t10; + t6.tensors[o] = this.tensors[o]; + return t6; } - getItem(e, t10, o) { + getItem(e, t6, o) { if (o !== this.elementDtype) throw new Error(`Invalid data types; op elements ${o}, but list elements ${this.elementDtype}`); if (e < 0 || e > this.tensors.length) throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`); if (this.tensors[e] == null) throw new Error(`element at index ${e} is null.`); - Ur(this.tensors[e].shape, t10, "TensorList shape mismatch: "); - let n = Xp(this.elementShape, this.tensors, t10); + zr(this.tensors[e].shape, t6, "TensorList shape mismatch: "); + let n = Gp(this.elementShape, this.tensors, t6); return z(this.tensors[e], n); } - setItem(e, t10) { - if (t10.dtype !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10.dtype}, but list elements ${this.elementDtype}`); + setItem(e, t6) { + if (t6.dtype !== this.elementDtype) + throw new Error(`Invalid data types; op elements ${t6.dtype}, but list elements ${this.elementDtype}`); if (e < 0 || this.maxNumElements !== -1 && e >= this.maxNumElements) throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`); - Ur(this.elementShape, t10.shape, "TensorList shape mismatch: "), So(t10), this.tensors[e] != null && (this.tensors[e].kept = false), this.tensors[e] = t10; + zr(this.elementShape, t6.shape, "TensorList shape mismatch: "), _r(t6), this.tensors[e] != null && (this.tensors[e].kept = false), this.tensors[e] = t6; } - gather(e, t10, o) { - if (t10 !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); - Ur(this.elementShape, o, "TensorList shape mismatch: "), e = e.slice(0, this.size()); - let n = Xp(this.elementShape, this.tensors, o); - return e.length === 0 ? nr([], [0].concat(n)) : Ne(() => { + gather(e, t6, o) { + if (t6 !== this.elementDtype) + throw new Error(`Invalid data types; op elements ${t6}, but list elements ${this.elementDtype}`); + zr(this.elementShape, o, "TensorList shape mismatch: "), e = e.slice(0, this.size()); + let n = Gp(this.elementShape, this.tensors, o); + return e.length === 0 ? nr([], [0].concat(n)) : Ee(() => { let s = e.map((a) => z(this.tensors[a], n)); - return Ir(s, 0); + return Sr(s, 0); }); } - concat(e, t10) { + concat(e, t6) { if (!!e && e !== this.elementDtype) throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`); - Ur(this.elementShape, t10, "TensorList shape mismatch: "); - let o = Xp(this.elementShape, this.tensors, t10); - return this.size() === 0 ? nr([], [0].concat(o)) : Ne(() => { + zr(this.elementShape, t6, "TensorList shape mismatch: "); + let o = Gp(this.elementShape, this.tensors, t6); + return this.size() === 0 ? nr([], [0].concat(o)) : Ee(() => { let n = this.tensors.map((s) => z(s, o)); return gt(n, 0); }); } }; -function oN(r, e, t10) { +function AN(r, e, t6) { let o = r.dtype; if (r.shape.length < 1) throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`); - if (r.dtype !== t10) - throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t10}`); + if (r.dtype !== t6) + throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t6}`); let n = r.shape.slice(1); - Ur(n, e, "TensorList shape mismatch: "); - let s = ko(r); - return new Ra(s, e, o); + zr(n, e, "TensorList shape mismatch: "); + let s = so(r); + return new Pa(s, e, o); } -function nN(r, e, t10, o) { - return new Ra([], r, e, o); +function RN(r, e, t6, o) { + return new Pa([], r, e, o); } -function sN(r, e, t10, o) { +function FN(r, e, t6, o) { if (e.length !== r.shape[0]) throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`); let n = Math.max(...e); if (o != null && o !== -1 && n >= o) throw new Error(`Max index must be < array size (${n} vs. ${o})`); - let s = new Ra([], t10, r.dtype, o), a = ko(r, 0); + let s = new Pa([], t6, r.dtype, o), a = so(r, 0); return e.forEach((i, p) => { s.setItem(i, a[p]); }), s; } -function aN(r, e, t10) { +function DN(r, e, t6) { let o = 0, n = e.map((c) => (o += c, o)); if (o !== r.shape[0]) throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${o}, and tensor's shape is: ${r.shape}`); - let s = r.shape.slice(1), a = dd(s, t10), i = o === 0 ? 0 : r.size / o, p = Ne(() => { + let s = r.shape.slice(1), a = of(s, t6), i = o === 0 ? 0 : r.size / o, p = Ee(() => { let c = []; r = z(r, [1, o, i]); for (let l = 0; l < e.length; ++l) { - let f = [0, l === 0 ? 0 : n[l - 1], 0], d = [1, e[l], i]; - c[l] = z(Ue(r, f, d), a); + let d = [0, l === 0 ? 0 : n[l - 1], 0], f = [1, e[l], i]; + c[l] = z(He(r, d, f), a); } return r.dispose(), c; - }), u = new Ra([], t10, r.dtype, e.length); + }), u = new Pa([], t6, r.dtype, e.length); for (let c = 0; c < p.length; c++) u.setItem(c, p[c]); return u; } -var iN = async (r, e, t10) => { +var ON = async (r, e, t6) => { switch (r.op) { case "If": case "StatelessIf": { - let o = S("thenBranch", r, e, t10), n = S("elseBranch", r, e, t10), s = S("cond", r, e, t10), a = S("args", r, e, t10); - return (await s.data())[0] ? t10.functionMap[o].executeFunctionAsync(a, t10.tensorArrayMap, t10.tensorListMap) : t10.functionMap[n].executeFunctionAsync(a, t10.tensorArrayMap, t10.tensorListMap); + let o = I("thenBranch", r, e, t6), n = I("elseBranch", r, e, t6), s = I("cond", r, e, t6), a = I("args", r, e, t6); + return (await s.data())[0] ? t6.functionMap[o].executeFunctionAsync(a, t6.tensorArrayMap, t6.tensorListMap) : t6.functionMap[n].executeFunctionAsync(a, t6.tensorArrayMap, t6.tensorListMap); } case "While": case "StatelessWhile": { - let o = S("body", r, e, t10), n = S("cond", r, e, t10), s = S("args", r, e, t10), a = await t10.functionMap[n].executeFunctionAsync(s, t10.tensorArrayMap, t10.tensorListMap), i = s.map((c) => c.id), p = await a[0].data(); + let o = I("body", r, e, t6), n = I("cond", r, e, t6), s = I("args", r, e, t6), a = await t6.functionMap[n].executeFunctionAsync(s, t6.tensorArrayMap, t6.tensorListMap), i = s.map((c) => c.id), p = await a[0].data(); a.forEach((c) => { !c.kept && i.indexOf(c.id) === -1 && c.dispose(); }); let u = s; for (; p[0]; ) { let c = u; - u = await t10.functionMap[o].executeFunctionAsync(u, t10.tensorArrayMap, t10.tensorListMap); - let l = u.map((f) => f.id); - c.forEach((f) => { - !f.kept && i.indexOf(f.id) === -1 && l.indexOf(f.id) === -1 && f.dispose(); + u = await t6.functionMap[o].executeFunctionAsync(u, t6.tensorArrayMap, t6.tensorListMap); + let l = u.map((d) => d.id); + c.forEach((d) => { + !d.kept && i.indexOf(d.id) === -1 && l.indexOf(d.id) === -1 && d.dispose(); }); - let m = await t10.functionMap[n].executeFunctionAsync(u, t10.tensorArrayMap, t10.tensorListMap); - p = await m[0].data(), m.forEach((f) => { - !f.kept && i.indexOf(f.id) === -1 && l.indexOf(f.id) === -1 && f.dispose(); + let m = await t6.functionMap[n].executeFunctionAsync(u, t6.tensorArrayMap, t6.tensorListMap); + p = await m[0].data(), m.forEach((d) => { + !d.kept && i.indexOf(d.id) === -1 && l.indexOf(d.id) === -1 && d.dispose(); }); } return u; } case "LoopCond": { - let o = S("pred", r, e, t10); - return [ss(o)]; + let o = I("pred", r, e, t6); + return [as(o)]; } case "Switch": { - let o = S("pred", r, e, t10), n = S("data", r, e, t10); - return n.kept || (n = ss(n)), (await o.data())[0] ? [void 0, n] : [n, void 0]; + let o = I("pred", r, e, t6), n = I("data", r, e, t6); + return n.kept || (n = as(n)), (await o.data())[0] ? [void 0, n] : [n, void 0]; } case "Merge": { - let o = r.inputNames.find((n) => Ht(n, e, t10) !== void 0); + let o = r.inputNames.find((n) => Gt(n, e, t6) !== void 0); if (o) { - let n = Ht(o, e, t10); - return [ss(n)]; + let n = Gt(o, e, t6); + return [as(n)]; } return; } case "Enter": { - let o = S("frameName", r, e, t10), n = S("tensor", r, e, t10); - return t10.enterFrame(o), [ss(n)]; + let o = I("frameName", r, e, t6), n = I("tensor", r, e, t6); + return t6.enterFrame(o), [as(n)]; } case "Exit": { - let o = S("tensor", r, e, t10); - return t10.exitFrame(), [ss(o)]; + let o = I("tensor", r, e, t6); + return t6.exitFrame(), [as(o)]; } case "NextIteration": { - let o = S("tensor", r, e, t10); - return t10.nextIteration(), [ss(o)]; + let o = I("tensor", r, e, t6); + return t6.nextIteration(), [as(o)]; } case "TensorArrayV3": { - let o = S("size", r, e, t10), n = S("dtype", r, e, t10), s = S("elementShape", r, e, t10), a = S("dynamicSize", r, e, t10), i = S("clearAfterRead", r, e, t10), p = S("identicalElementShapes", r, e, t10), u = S("name", r, e, t10), c = new hd(u, n, o, s, p, a, i); - return t10.addTensorArray(c), [c.idTensor, be(1)]; + let o = I("size", r, e, t6), n = I("dtype", r, e, t6), s = I("elementShape", r, e, t6), a = I("dynamicSize", r, e, t6), i = I("clearAfterRead", r, e, t6), p = I("identicalElementShapes", r, e, t6), u = I("name", r, e, t6), c = new nf(u, n, o, s, p, a, i); + return t6.addTensorArray(c), [c.idTensor, be(1)]; } case "TensorArrayWriteV3": { - let o = S("tensorArrayId", r, e, t10), n = S("index", r, e, t10), s = S("tensor", r, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r, e, t6), n = I("index", r, e, t6), s = I("tensor", r, e, t6), a = t6.getTensorArray(o.id); return a.write(n, s), [a.idTensor]; } case "TensorArrayReadV3": { - let o = S("tensorArrayId", r, e, t10), n = S("index", r, e, t10); - return [t10.getTensorArray(o.id).read(n)]; + let o = I("tensorArrayId", r, e, t6), n = I("index", r, e, t6); + return [t6.getTensorArray(o.id).read(n)]; } case "TensorArrayGatherV3": { - let o = S("tensorArrayId", r, e, t10), n = S("indices", r, e, t10), s = S("dtype", r, e, t10); - return [t10.getTensorArray(o.id).gather(n, s)]; + let o = I("tensorArrayId", r, e, t6), n = I("indices", r, e, t6), s = I("dtype", r, e, t6); + return [t6.getTensorArray(o.id).gather(n, s)]; } case "TensorArrayScatterV3": { - let o = S("tensorArrayId", r, e, t10), n = S("indices", r, e, t10), s = S("tensor", r, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r, e, t6), n = I("indices", r, e, t6), s = I("tensor", r, e, t6), a = t6.getTensorArray(o.id); return a.scatter(n, s), [a.idTensor]; } case "TensorArrayConcatV3": { - let o = S("tensorArrayId", r, e, t10), n = t10.getTensorArray(o.id), s = S("dtype", r, e, t10); + let o = I("tensorArrayId", r, e, t6), n = t6.getTensorArray(o.id), s = I("dtype", r, e, t6); return [n.concat(s)]; } case "TensorArraySplitV3": { - let o = S("tensorArrayId", r, e, t10), n = S("tensor", r, e, t10), s = S("lengths", r, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r, e, t6), n = I("tensor", r, e, t6), s = I("lengths", r, e, t6), a = t6.getTensorArray(o.id); return a.split(s, n), [a.idTensor]; } case "TensorArraySizeV3": { - let o = S("tensorArrayId", r, e, t10), n = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r, e, t6), n = t6.getTensorArray(o.id); return [be(n.size(), "int32")]; } case "TensorArrayCloseV3": { - let o = S("tensorArrayId", r, e, t10), n = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r, e, t6), n = t6.getTensorArray(o.id); return n.clearAndClose(), [n.idTensor]; } case "TensorListSetItem": { - let o = S("tensorListId", r, e, t10), n = S("index", r, e, t10), s = S("tensor", r, e, t10), a = t10.getTensorList(o.id); + let o = I("tensorListId", r, e, t6), n = I("index", r, e, t6), s = I("tensor", r, e, t6), a = t6.getTensorList(o.id); return a.setItem(n, s), [a.idTensor]; } case "TensorListGetItem": { - let o = S("tensorListId", r, e, t10), n = S("index", r, e, t10), s = S("elementShape", r, e, t10), a = S("elementDType", r, e, t10); - return [t10.getTensorList(o.id).getItem(n, s, a)]; + let o = I("tensorListId", r, e, t6), n = I("index", r, e, t6), s = I("elementShape", r, e, t6), a = I("elementDType", r, e, t6); + return [t6.getTensorList(o.id).getItem(n, s, a)]; } case "TensorListScatterV2": case "TensorListScatter": { - let o = S("indices", r, e, t10), n = S("tensor", r, e, t10), s = S("elementShape", r, e, t10), a = S("numElements", r, e, t10), i = sN(n, o, s, a); - return t10.addTensorList(i), [i.idTensor]; + let o = I("indices", r, e, t6), n = I("tensor", r, e, t6), s = I("elementShape", r, e, t6), a = I("numElements", r, e, t6), i = FN(n, o, s, a); + return t6.addTensorList(i), [i.idTensor]; } case "TensorListReserve": case "EmptyTensorList": { - let o = S("elementShape", r, e, t10), n = S("elementDType", r, e, t10), s; + let o = I("elementShape", r, e, t6), n = I("elementDType", r, e, t6), s; r.op === "TensorListReserve" ? s = "numElements" : s = "maxNumElements"; - let a = S(s, r, e, t10), i = r.op === "TensorListReserve" ? -1 : a, p = nN(o, n, a, i); - return t10.addTensorList(p), [p.idTensor]; + let a = I(s, r, e, t6), i = r.op === "TensorListReserve" ? -1 : a, p = RN(o, n, a, i); + return t6.addTensorList(p), [p.idTensor]; } case "TensorListGather": { - let o = S("tensorListId", r, e, t10), n = S("indices", r, e, t10), s = S("elementShape", r, e, t10), a = S("elementDType", r, e, t10); - return [t10.getTensorList(o.id).gather(n, a, s)]; + let o = I("tensorListId", r, e, t6), n = I("indices", r, e, t6), s = I("elementShape", r, e, t6), a = I("elementDType", r, e, t6); + return [t6.getTensorList(o.id).gather(n, a, s)]; } case "TensorListStack": { - let o = S("tensorListId", r, e, t10), n = S("elementShape", r, e, t10), s = S("elementDType", r, e, t10), a = S("numElements", r, e, t10); - return [t10.getTensorList(o.id).stack(n, s, a)]; + let o = I("tensorListId", r, e, t6), n = I("elementShape", r, e, t6), s = I("elementDType", r, e, t6), a = I("numElements", r, e, t6); + return [t6.getTensorList(o.id).stack(n, s, a)]; } case "TensorListFromTensor": { - let o = S("tensor", r, e, t10), n = S("elementShape", r, e, t10), s = S("elementDType", r, e, t10), a = oN(o, n, s); - return t10.addTensorList(a), [a.idTensor]; + let o = I("tensor", r, e, t6), n = I("elementShape", r, e, t6), s = I("elementDType", r, e, t6), a = AN(o, n, s); + return t6.addTensorList(a), [a.idTensor]; } case "TensorListConcat": case "TensorListConcatV2": { - let o = S("tensorListId", r, e, t10), n = t10.getTensorList(o.id), s = S("dtype", r, e, t10), a = S("elementShape", r, e, t10); + let o = I("tensorListId", r, e, t6), n = t6.getTensorList(o.id), s = I("dtype", r, e, t6), a = I("elementShape", r, e, t6); return [n.concat(s, a)]; } case "TensorListPushBack": { - let o = S("tensorListId", r, e, t10), n = S("tensor", r, e, t10), s = t10.getTensorList(o.id); + let o = I("tensorListId", r, e, t6), n = I("tensor", r, e, t6), s = t6.getTensorList(o.id); return s.pushBack(n), [s.idTensor]; } case "TensorListPopBack": { - let o = S("tensorListId", r, e, t10), n = S("elementShape", r, e, t10), s = S("elementDType", r, e, t10); - return [t10.getTensorList(o.id).popBack(n, s)]; + let o = I("tensorListId", r, e, t6), n = I("elementShape", r, e, t6), s = I("elementDType", r, e, t6); + return [t6.getTensorList(o.id).popBack(n, s)]; } case "TensorListSplit": { - let o = S("tensor", r, e, t10), n = S("elementShape", r, e, t10), s = S("lengths", r, e, t10), a = aN(o, s, n); - return t10.addTensorList(a), [a.idTensor]; + let o = I("tensor", r, e, t6), n = I("elementShape", r, e, t6), s = I("lengths", r, e, t6), a = DN(o, s, n); + return t6.addTensorList(a), [a.idTensor]; } case "TensorListLength": { - let o = S("tensorListId", r, e, t10), n = t10.getTensorList(o.id); + let o = I("tensorListId", r, e, t6), n = t6.getTensorList(o.id); return [be(n.size(), "int32")]; } case "TensorListResize": { - let o = S("tensorListId", r, e, t10), n = S("size", r, e, t10), a = t10.getTensorList(o.id).resize(n); - return t10.addTensorList(a), [a.idTensor]; + let o = I("tensorListId", r, e, t6), n = I("size", r, e, t6), a = t6.getTensorList(o.id).resize(n); + return t6.addTensorList(a), [a.idTensor]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -function uN(r, e, t10) { - let [o, n] = S("fusedOps", r, e, t10), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = S("numArgs", r, e, t10); +function PN(r, e, t6) { + let [o, n] = I("fusedOps", r, e, t6), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r, e, t6); if (s) { if (i && u !== 2) throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha."); @@ -10298,200 +10308,200 @@ function uN(r, e, t10) { } if (p) throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported"); - let c = S("strides", r, e, t10), l = gl(r, e, t10), m = S("dataFormat", r, e, t10).toUpperCase(), f = S("dilations", r, e, t10), [d, h] = S("args", r, e, t10); - a && (h = d, d = void 0); - let g = S("leakyreluAlpha", r, e, t10); - return { stride: c, pad: l, dataFormat: m, dilations: f, biasArg: d, preluArg: h, activationFunc: n, leakyreluAlpha: g }; + let c = I("strides", r, e, t6), l = ul(r, e, t6), m = I("dataFormat", r, e, t6).toUpperCase(), d = I("dilations", r, e, t6), [f, h] = I("args", r, e, t6); + a && (h = f, f = void 0); + let g = I("leakyreluAlpha", r, e, t6); + return { stride: c, pad: l, dataFormat: m, dilations: d, biasArg: f, preluArg: h, activationFunc: n, leakyreluAlpha: g }; } -var pN = (r, e, t10, o = rt) => { +var MN = (r, e, t6, o = Ye) => { switch (r.op) { case "Conv1D": { - let n = S("stride", r, e, t10), s = S("pad", r, e, t10), a = S("dataFormat", r, e, t10).toUpperCase(), i = S("dilation", r, e, t10); - return [o.conv1d(S("x", r, e, t10), S("filter", r, e, t10), n, s, a, i)]; + let n = I("stride", r, e, t6), s = I("pad", r, e, t6), a = I("dataFormat", r, e, t6).toUpperCase(), i = I("dilation", r, e, t6); + return [o.conv1d(I("x", r, e, t6), I("filter", r, e, t6), n, s, a, i)]; } case "Conv2D": { - let n = S("strides", r, e, t10), s = gl(r, e, t10), a = S("dataFormat", r, e, t10).toUpperCase(), i = S("dilations", r, e, t10); - return [o.conv2d(S("x", r, e, t10), S("filter", r, e, t10), [n[1], n[2]], s, a, [i[1], i[2]])]; + let n = I("strides", r, e, t6), s = ul(r, e, t6), a = I("dataFormat", r, e, t6).toUpperCase(), i = I("dilations", r, e, t6); + return [o.conv2d(I("x", r, e, t6), I("filter", r, e, t6), [n[1], n[2]], s, a, [i[1], i[2]])]; } case "_FusedConv2D": { - let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = uN(r, e, t10); - return [o.fused.conv2d({ x: S("x", r, e, t10), filter: S("filter", r, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = PN(r, e, t6); + return [o.fused.conv2d({ x: I("x", r, e, t6), filter: I("filter", r, e, t6), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; } case "FusedDepthwiseConv2dNative": { - let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = uN(r, e, t10); - return [o.fused.depthwiseConv2d({ x: S("x", r, e, t10), filter: S("filter", r, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = PN(r, e, t6); + return [o.fused.depthwiseConv2d({ x: I("x", r, e, t6), filter: I("filter", r, e, t6), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; } case "Conv2DBackpropInput": case "Conv2dTranspose": { - let n = S("outputShape", r, e, t10), s = S("strides", r, e, t10), a = gl(r, e, t10); - return [o.conv2dTranspose(S("x", r, e, t10), S("filter", r, e, t10), n, [s[1], s[2]], a)]; + let n = I("outputShape", r, e, t6), s = I("strides", r, e, t6), a = ul(r, e, t6); + return [o.conv2dTranspose(I("x", r, e, t6), I("filter", r, e, t6), n, [s[1], s[2]], a)]; } case "DepthwiseConv2dNative": case "DepthwiseConv2d": { - let n = S("strides", r, e, t10), s = gl(r, e, t10), a = S("dilations", r, e, t10), i = S("dataFormat", r, e, t10).toUpperCase(); - return [o.depthwiseConv2d(S("input", r, e, t10), S("filter", r, e, t10), [n[1], n[2]], s, i, [a[1], a[2]])]; + let n = I("strides", r, e, t6), s = ul(r, e, t6), a = I("dilations", r, e, t6), i = I("dataFormat", r, e, t6).toUpperCase(); + return [o.depthwiseConv2d(I("input", r, e, t6), I("filter", r, e, t6), [n[1], n[2]], s, i, [a[1], a[2]])]; } case "Conv3D": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("dataFormat", r, e, t10).toUpperCase(), i = S("dilations", r, e, t10); - return [o.conv3d(S("x", r, e, t10), S("filter", r, e, t10), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("dataFormat", r, e, t6).toUpperCase(), i = I("dilations", r, e, t6); + return [o.conv3d(I("x", r, e, t6), I("filter", r, e, t6), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; } case "AvgPool": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("kernelSize", r, e, t10); - return [o.avgPool(S("x", r, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("kernelSize", r, e, t6); + return [o.avgPool(I("x", r, e, t6), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPool": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("kernelSize", r, e, t10); - return [o.maxPool(S("x", r, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("kernelSize", r, e, t6); + return [o.maxPool(I("x", r, e, t6), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPoolWithArgmax": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("kernelSize", r, e, t10), i = S("includeBatchInIndex", r, e, t10), { result: p, indexes: u } = o.maxPoolWithArgmax(S("x", r, e, t10), [a[1], a[2]], [n[1], n[2]], s, i); + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("kernelSize", r, e, t6), i = I("includeBatchInIndex", r, e, t6), { result: p, indexes: u } = o.maxPoolWithArgmax(I("x", r, e, t6), [a[1], a[2]], [n[1], n[2]], s, i); return [p, u]; } case "AvgPool3D": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("kernelSize", r, e, t10); - return [o.avgPool3d(S("x", r, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("kernelSize", r, e, t6); + return [o.avgPool3d(I("x", r, e, t6), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "MaxPool3D": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("kernelSize", r, e, t10); - return [o.maxPool3d(S("x", r, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("kernelSize", r, e, t6); + return [o.maxPool3d(I("x", r, e, t6), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "Dilation2D": { - let n = S("strides", r, e, t10), s = S("pad", r, e, t10), a = S("dilations", r, e, t10), i = n[1], p = n[2], u = a[1], c = a[2]; - return [o.dilation2d(S("x", r, e, t10), S("filter", r, e, t10), [i, p], s, [u, c], "NHWC")]; + let n = I("strides", r, e, t6), s = I("pad", r, e, t6), a = I("dilations", r, e, t6), i = n[1], p = n[2], u = a[1], c = a[2]; + return [o.dilation2d(I("x", r, e, t6), I("filter", r, e, t6), [i, p], s, [u, c], "NHWC")]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var cN = (r, e, t10, o = rt) => { +var LN = (r, e, t6, o = Ye) => { switch (r.op) { case "Fill": { - let n = S("shape", r, e, t10), s = S("dtype", r, e, t10), a = S("value", r, e, t10); + let n = I("shape", r, e, t6), s = I("dtype", r, e, t6), a = I("value", r, e, t6); return [o.fill(n, a, s)]; } case "LinSpace": { - let n = S("start", r, e, t10), s = S("stop", r, e, t10), a = S("num", r, e, t10); + let n = I("start", r, e, t6), s = I("stop", r, e, t6), a = I("num", r, e, t6); return [o.linspace(n, s, a)]; } case "Multinomial": { - let n = S("logits", r, e, t10), s = S("numSamples", r, e, t10), a = S("seed", r, e, t10); + let n = I("logits", r, e, t6), s = I("numSamples", r, e, t6), a = I("seed", r, e, t6); return [o.multinomial(n, s, a)]; } case "OneHot": { - let n = S("indices", r, e, t10), s = S("depth", r, e, t10), a = S("onValue", r, e, t10), i = S("offValue", r, e, t10), p = S("dtype", r, e, t10); + let n = I("indices", r, e, t6), s = I("depth", r, e, t6), a = I("onValue", r, e, t6), i = I("offValue", r, e, t6), p = I("dtype", r, e, t6); return [o.oneHot(n, s, a, i, p)]; } case "Ones": - return [o.ones(S("shape", r, e, t10), S("dtype", r, e, t10))]; + return [o.ones(I("shape", r, e, t6), I("dtype", r, e, t6))]; case "OnesLike": - return [o.onesLike(S("x", r, e, t10))]; + return [o.onesLike(I("x", r, e, t6))]; case "RandomStandardNormal": - return [o.randomStandardNormal(S("shape", r, e, t10), S("dtype", r, e, t10), S("seed", r, e, t10))]; + return [o.randomStandardNormal(I("shape", r, e, t6), I("dtype", r, e, t6), I("seed", r, e, t6))]; case "RandomUniform": - return [o.randomUniform(S("shape", r, e, t10), S("minval", r, e, t10), S("maxval", r, e, t10), S("dtype", r, e, t10))]; + return [o.randomUniform(I("shape", r, e, t6), I("minval", r, e, t6), I("maxval", r, e, t6), I("dtype", r, e, t6))]; case "Range": { - let n = S("start", r, e, t10), s = S("stop", r, e, t10), a = S("step", r, e, t10); - return [o.range(n, s, a, S("dtype", r, e, t10))]; + let n = I("start", r, e, t6), s = I("stop", r, e, t6), a = I("step", r, e, t6); + return [o.range(n, s, a, I("dtype", r, e, t6))]; } case "TruncatedNormal": { - let n = S("shape", r, e, t10), s = S("mean", r, e, t10), a = S("stdDev", r, e, t10), i = S("seed", r, e, t10); - return [o.truncatedNormal(n, s, a, S("dtype", r, e, t10), i)]; + let n = I("shape", r, e, t6), s = I("mean", r, e, t6), a = I("stdDev", r, e, t6), i = I("seed", r, e, t6); + return [o.truncatedNormal(n, s, a, I("dtype", r, e, t6), i)]; } case "Zeros": - return [o.zeros(S("shape", r, e, t10), S("dtype", r, e, t10))]; + return [o.zeros(I("shape", r, e, t6), I("dtype", r, e, t6))]; case "ZerosLike": - return [o.zerosLike(S("x", r, e, t10))]; + return [o.zerosLike(I("x", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -function YC(r, e, t10) { - let o = S("boxes", r, e, t10), n = S("scores", r, e, t10), s = S("maxOutputSize", r, e, t10), a = S("iouThreshold", r, e, t10), i = S("scoreThreshold", r, e, t10), p = S("softNmsSigma", r, e, t10); +function HC(r, e, t6) { + let o = I("boxes", r, e, t6), n = I("scores", r, e, t6), s = I("maxOutputSize", r, e, t6), a = I("iouThreshold", r, e, t6), i = I("scoreThreshold", r, e, t6), p = I("softNmsSigma", r, e, t6); return { boxes: o, scores: n, maxOutputSize: s, iouThreshold: a, scoreThreshold: i, softNmsSigma: p }; } -var lN = async (r, e, t10, o, n = rt) => { +var BN = async (r, e, t6, o, n = Ye) => { switch (r.op) { case "NonMaxSuppressionV5": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: c } = YC(r, e, t10), l = await n.image.nonMaxSuppressionWithScoreAsync(s, a, i, p, u, c); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: c } = HC(r, e, t6), l = await n.image.nonMaxSuppressionWithScoreAsync(s, a, i, p, u, c); return [l.selectedIndices, l.selectedScores]; } case "NonMaxSuppressionV4": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = YC(r, e, t10), c = S("padToMaxOutputSize", r, e, t10), l = await n.image.nonMaxSuppressionPaddedAsync(s, a, i, p, u, c); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = HC(r, e, t6), c = I("padToMaxOutputSize", r, e, t6), l = await n.image.nonMaxSuppressionPaddedAsync(s, a, i, p, u, c); return [l.selectedIndices, l.validOutputs]; } case "NonMaxSuppressionV3": case "NonMaxSuppressionV2": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = YC(r, e, t10); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = HC(r, e, t6); return [await n.image.nonMaxSuppressionAsync(s, a, i, p, u)]; } case "Where": { - let s = n.cast(S("condition", r, e, t10), "bool"), a = [await n.whereAsync(s)]; + let s = n.cast(I("condition", r, e, t6), "bool"), a = [await n.whereAsync(s)]; return s.dispose(), a; } case "ListDiff": - return n.setdiff1dAsync(S("x", r, e, t10), S("y", r, e, t10)); + return n.setdiff1dAsync(I("x", r, e, t6), I("y", r, e, t6)); default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var mN = (r, e, t10, o = rt) => { +var VN = (r, e, t6, o = Ye) => { switch (r.op) { case "LowerBound": { - let n = S("sortedSequence", r, e, t10), s = S("values", r, e, t10); + let n = I("sortedSequence", r, e, t6), s = I("values", r, e, t6); return [o.lowerBound(n, s)]; } case "TopKV2": { - let n = S("x", r, e, t10), s = S("k", r, e, t10), a = S("sorted", r, e, t10), i = o.topk(n, s, a); + let n = I("x", r, e, t6), s = I("k", r, e, t6), a = I("sorted", r, e, t6), i = o.topk(n, s, a); return [i.values, i.indices]; } case "UpperBound": { - let n = S("sortedSequence", r, e, t10), s = S("values", r, e, t10); + let n = I("sortedSequence", r, e, t6), s = I("values", r, e, t6); return [o.upperBound(n, s)]; } case "Unique": { - let n = S("x", r, e, t10), s = o.unique(n); + let n = I("x", r, e, t6), s = o.unique(n); return [s.values, s.indices]; } case "UniqueV2": { - let n = S("x", r, e, t10), s = S("axis", r, e, t10), a = o.unique(n, s); + let n = I("x", r, e, t6), s = I("axis", r, e, t6), a = o.unique(n, s); return [a.values, a.indices]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var fN = (r, e, t10, o = rt) => { +var zN = (r, e, t6, o = Ye) => { switch (r.op) { case "Const": return e[r.name]; case "PlaceholderWithDefault": - let n = S("default", r, e, t10); - return [Ht(r.name, e, t10) || n]; + let n = I("default", r, e, t6); + return [Gt(r.name, e, t6) || n]; case "Placeholder": - return [Ht(r.name, e, t10)]; + return [Gt(r.name, e, t6)]; case "Identity": case "StopGradient": case "FakeQuantWithMinMaxVars": { - let c = S("x", r, e, t10); - return [ss(c)]; + let c = I("x", r, e, t6); + return [as(c)]; } case "IdentityN": - return S("x", r, e, t10).map((c) => ss(c)); + return I("x", r, e, t6).map((c) => as(c)); case "Snapshot": - let s = S("x", r, e, t10); - return [ss(s)]; + let s = I("x", r, e, t6); + return [as(s)]; case "Shape": - return [o.tensor1d(S("x", r, e, t10).shape, "int32")]; + return [o.tensor1d(I("x", r, e, t6).shape, "int32")]; case "ShapeN": - return S("x", r, e, t10).map((c) => o.tensor1d(c.shape)); + return I("x", r, e, t6).map((c) => o.tensor1d(c.shape)); case "Size": - return [o.scalar(S("x", r, e, t10).size, "int32")]; + return [o.scalar(I("x", r, e, t6).size, "int32")]; case "Rank": - return [o.scalar(S("x", r, e, t10).rank, "int32")]; + return [o.scalar(I("x", r, e, t6).rank, "int32")]; case "NoOp": return [o.scalar(1)]; case "Print": - let a = S("x", r, e, t10), i = S("data", r, e, t10), p = S("message", r, e, t10), u = S("summarize", r, e, t10); + let a = I("x", r, e, t6), i = I("data", r, e, t6), p = I("message", r, e, t6), u = I("summarize", r, e, t6); console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."), console.log(p); for (let c = 0; c < i.length; c++) console.log(Array.prototype.slice.call(i[c].dataSync()).slice(0, u)); @@ -10500,9 +10510,9 @@ var fN = (r, e, t10, o = rt) => { throw TypeError(`Node type ${r.op} is not implemented`); } }; -var gd = class { - constructor(e, t10) { - this.keyDType = e, this.valueDType = t10, this.handle = be(0), this.tensorMap = /* @__PURE__ */ new Map(), So(this.handle); +var sf = class { + constructor(e, t6) { + this.keyDType = e, this.valueDType = t6, this.handle = be(0), this.tensorMap = /* @__PURE__ */ new Map(), _r(this.handle); } get id() { return this.handle.id; @@ -10516,43 +10526,43 @@ var gd = class { tensorSize() { return be(this.size(), "int32"); } - async import(e, t10) { - this.checkKeyAndValueTensor(e, t10); + async import(e, t6) { + this.checkKeyAndValueTensor(e, t6); let o = await e.data(); - return this.tensorMap.forEach((n) => n.dispose()), this.tensorMap.clear(), Ne(() => { - let n = ko(t10), s = o.length, a = n.length; - x.assert(s === a, () => `The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`); + return this.tensorMap.forEach((n) => n.dispose()), this.tensorMap.clear(), Ee(() => { + let n = so(t6), s = o.length, a = n.length; + y.assert(s === a, () => `The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`); for (let i = 0; i < s; i++) { let p = o[i], u = n[i]; - So(u), this.tensorMap.set(p, u); + _r(u), this.tensorMap.set(p, u); } return this.handle; }); } - async find(e, t10) { - this.checkKeyAndValueTensor(e, t10); + async find(e, t6) { + this.checkKeyAndValueTensor(e, t6); let o = await e.data(); - return Ne(() => { + return Ee(() => { let n = []; for (let s = 0; s < o.length; s++) { - let a = o[s], i = this.findWithDefault(a, t10); + let a = o[s], i = this.findWithDefault(a, t6); n.push(i); } - return Ir(n); + return Sr(n); }); } - findWithDefault(e, t10) { + findWithDefault(e, t6) { let o = this.tensorMap.get(e); - return o != null ? o : t10; + return o != null ? o : t6; } - checkKeyAndValueTensor(e, t10) { + checkKeyAndValueTensor(e, t6) { if (e.dtype !== this.keyDType) throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`); - if (t10.dtype !== this.valueDType) - throw new Error(`Expect value dtype ${this.valueDType}, but got ${t10.dtype}`); + if (t6.dtype !== this.valueDType) + throw new Error(`Expect value dtype ${this.valueDType}, but got ${t6.dtype}`); } }; -var dN = async (r, e, t10, o) => { +var WN = async (r, e, t6, o) => { switch (r.op) { case "HashTable": case "HashTableV2": { @@ -10560,398 +10570,418 @@ var dN = async (r, e, t10, o) => { if (n != null) return [n]; { - let s = S("keyDType", r, e, t10), a = S("valueDType", r, e, t10), i = new gd(s, a); + let s = I("keyDType", r, e, t6), a = I("valueDType", r, e, t6), i = new sf(s, a); return o.addHashTable(r.name, i), [i.handle]; } } + case "InitializeTable": + case "InitializeTableV2": case "LookupTableImport": case "LookupTableImportV2": { - let n = S("tableHandle", r, e, t10, o), s = S("keys", r, e, t10), a = S("values", r, e, t10); + let n = I("tableHandle", r, e, t6, o), s = I("keys", r, e, t6), a = I("values", r, e, t6); return [await o.getHashTableById(n.id).import(s, a)]; } case "LookupTableFind": case "LookupTableFindV2": { - let n = S("tableHandle", r, e, t10, o), s = S("keys", r, e, t10), a = S("defaultValue", r, e, t10); + let n = I("tableHandle", r, e, t6, o), s = I("keys", r, e, t6), a = I("defaultValue", r, e, t6); return [await o.getHashTableById(n.id).find(s, a)]; } case "LookupTableSize": case "LookupTableSizeV2": { - let n = S("tableHandle", r, e, t10, o); + let n = I("tableHandle", r, e, t6, o); return [o.getHashTableById(n.id).tensorSize()]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var hN = (r, e, t10, o = rt) => { +var UN = (r, e, t6, o = Ye) => { switch (r.op) { case "ResizeBilinear": { - let n = S("images", r, e, t10), s = S("size", r, e, t10), a = S("alignCorners", r, e, t10), i = S("halfPixelCenters", r, e, t10); + let n = I("images", r, e, t6), s = I("size", r, e, t6), a = I("alignCorners", r, e, t6), i = I("halfPixelCenters", r, e, t6); return [o.image.resizeBilinear(n, [s[0], s[1]], a, i)]; } case "ResizeNearestNeighbor": { - let n = S("images", r, e, t10), s = S("size", r, e, t10), a = S("alignCorners", r, e, t10), i = S("halfPixelCenters", r, e, t10); + let n = I("images", r, e, t6), s = I("size", r, e, t6), a = I("alignCorners", r, e, t6), i = I("halfPixelCenters", r, e, t6); return [o.image.resizeNearestNeighbor(n, [s[0], s[1]], a, i)]; } case "CropAndResize": { - let n = S("image", r, e, t10), s = S("boxes", r, e, t10), a = S("boxInd", r, e, t10), i = S("cropSize", r, e, t10), p = S("method", r, e, t10), u = S("extrapolationValue", r, e, t10); + let n = I("image", r, e, t6), s = I("boxes", r, e, t6), a = I("boxInd", r, e, t6), i = I("cropSize", r, e, t6), p = I("method", r, e, t6), u = I("extrapolationValue", r, e, t6); return [o.image.cropAndResize(n, s, a, i, p, u)]; } case "ImageProjectiveTransformV3": { - let n = S("images", r, e, t10), s = S("transforms", r, e, t10), a = S("outputShape", r, e, t10), i = S("fillValue", r, e, t10), p = S("interpolation", r, e, t10), u = S("fillMode", r, e, t10); + let n = I("images", r, e, t6), s = I("transforms", r, e, t6), a = I("outputShape", r, e, t6), i = I("fillValue", r, e, t6), p = I("interpolation", r, e, t6), u = I("fillMode", r, e, t6); return [o.image.transform(n, s, p.toLowerCase(), u.toLowerCase(), i, a)]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var gN = (r, e, t10, o = rt) => { +var GN = (r, e, t6, o = Ye) => { switch (r.op) { case "Equal": - return [o.equal(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.equal(I("a", r, e, t6), I("b", r, e, t6))]; case "NotEqual": - return [o.notEqual(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.notEqual(I("a", r, e, t6), I("b", r, e, t6))]; case "Greater": - return [o.greater(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.greater(I("a", r, e, t6), I("b", r, e, t6))]; case "GreaterEqual": - return [o.greaterEqual(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.greaterEqual(I("a", r, e, t6), I("b", r, e, t6))]; case "Less": - return [o.less(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.less(I("a", r, e, t6), I("b", r, e, t6))]; case "LessEqual": - return [o.lessEqual(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.lessEqual(I("a", r, e, t6), I("b", r, e, t6))]; case "LogicalAnd": - return [o.logicalAnd(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.logicalAnd(I("a", r, e, t6), I("b", r, e, t6))]; case "LogicalNot": - return [o.logicalNot(S("a", r, e, t10))]; + return [o.logicalNot(I("a", r, e, t6))]; case "LogicalOr": - return [o.logicalOr(S("a", r, e, t10), S("b", r, e, t10))]; + return [o.logicalOr(I("a", r, e, t6), I("b", r, e, t6))]; case "Select": case "SelectV2": - return [o.where(S("condition", r, e, t10), S("a", r, e, t10), S("b", r, e, t10))]; + return [o.where(I("condition", r, e, t6), I("a", r, e, t6), I("b", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var xN = (r, e, t10, o = rt) => { +var HN = (r, e, t6, o = Ye) => { switch (r.op) { case "BatchMatMul": case "BatchMatMulV2": case "MatMul": - return [o.matMul(S("a", r, e, t10), S("b", r, e, t10), S("transposeA", r, e, t10), S("transposeB", r, e, t10))]; + return [o.matMul(I("a", r, e, t6), I("b", r, e, t6), I("transposeA", r, e, t6), I("transposeB", r, e, t6))]; case "Einsum": - return [o.einsum(S("equation", r, e, t10), ...S("tensors", r, e, t10))]; + return [o.einsum(I("equation", r, e, t6), ...I("tensors", r, e, t6))]; case "Transpose": - return [o.transpose(S("x", r, e, t10), S("perm", r, e, t10))]; + return [o.transpose(I("x", r, e, t6), I("perm", r, e, t6))]; case "_FusedMatMul": - let [n, s] = S("fusedOps", r, e, t10), a = n === "biasadd", i = s === "prelu", p = S("numArgs", r, e, t10), u = S("leakyreluAlpha", r, e, t10); + let [n, s] = I("fusedOps", r, e, t6), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r, e, t6), u = I("leakyreluAlpha", r, e, t6); if (a) { if (i && p !== 2) throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha."); if (!i && p !== 1) throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias."); } - let [c, l] = S("args", r, e, t10); - return [o.fused.matMul({ a: S("a", r, e, t10), b: S("b", r, e, t10), transposeA: S("transposeA", r, e, t10), transposeB: S("transposeB", r, e, t10), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; + let [c, l] = I("args", r, e, t6); + return [o.fused.matMul({ a: I("a", r, e, t6), b: I("b", r, e, t6), transposeA: I("transposeA", r, e, t6), transposeB: I("transposeB", r, e, t6), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var yN = (r, e, t10, o = rt) => { +var qN = (r, e, t6, o = Ye) => { switch (r.op) { case "EuclideanNorm": - return [o.euclideanNorm(S("x", r, e, t10), S("axis", r, e, t10), S("keepDims", r, e, t10))]; + return [o.euclideanNorm(I("x", r, e, t6), I("axis", r, e, t6), I("keepDims", r, e, t6))]; case "FusedBatchNorm": case "FusedBatchNormV2": - return [o.batchNorm(S("x", r, e, t10), S("mean", r, e, t10), S("variance", r, e, t10), S("offset", r, e, t10), S("scale", r, e, t10), S("epsilon", r, e, t10))]; + return [o.batchNorm(I("x", r, e, t6), I("mean", r, e, t6), I("variance", r, e, t6), I("offset", r, e, t6), I("scale", r, e, t6), I("epsilon", r, e, t6))]; case "FusedBatchNormV3": - return [o.batchNorm(S("x", r, e, t10), S("mean", r, e, t10), S("variance", r, e, t10), S("offset", r, e, t10), S("scale", r, e, t10), S("epsilon", r, e, t10))]; + return [o.batchNorm(I("x", r, e, t6), I("mean", r, e, t6), I("variance", r, e, t6), I("offset", r, e, t6), I("scale", r, e, t6), I("epsilon", r, e, t6))]; case "LRN": - return [o.localResponseNormalization(S("x", r, e, t10), S("radius", r, e, t10), S("bias", r, e, t10), S("alpha", r, e, t10), S("beta", r, e, t10))]; + return [o.localResponseNormalization(I("x", r, e, t6), I("radius", r, e, t6), I("bias", r, e, t6), I("alpha", r, e, t6), I("beta", r, e, t6))]; case "Softmax": - return [o.softmax(S("x", r, e, t10))]; + return [o.softmax(I("x", r, e, t6))]; case "LogSoftmax": - return [o.logSoftmax(S("x", r, e, t10))]; + return [o.logSoftmax(I("x", r, e, t6))]; case "SparseToDense": - return [o.sparseToDense(S("sparseIndices", r, e, t10), S("outputShape", r, e, t10), S("sparseValues", r, e, t10), S("defaultValue", r, e, t10))]; + return [o.sparseToDense(I("sparseIndices", r, e, t6), I("outputShape", r, e, t6), I("sparseValues", r, e, t6), I("defaultValue", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var bN = (r, e, t10, o = rt) => { +var KN = (r, e, t6, o = Ye) => { + switch (r.op) { + case "RaggedGather": { + let { outputNestedSplits: n, outputDenseValues: s } = o.raggedGather(I("paramsNestedSplits", r, e, t6), I("paramsDenseValues", r, e, t6), I("indices", r, e, t6), I("outputRaggedRank", r, e, t6)); + return n.concat(s); + } + case "RaggedRange": { + let { rtNestedSplits: n, rtDenseValues: s } = o.raggedRange(I("starts", r, e, t6), I("limits", r, e, t6), I("splits", r, e, t6)); + return [n, s]; + } + case "RaggedTensorToTensor": + return [o.raggedTensorToTensor(I("shape", r, e, t6), I("values", r, e, t6), I("defaultValue", r, e, t6), I("rowPartitionTensors", r, e, t6), I("rowPartitionTypes", r, e, t6))]; + default: + throw TypeError(`Node type ${r.op} is not implemented`); + } +}; +var jN = (r, e, t6, o = Ye) => { switch (r.op) { case "Max": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.max(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.max(I("x", r, e, t6), i, p)]; } case "Mean": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.mean(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.mean(I("x", r, e, t6), i, p)]; } case "Min": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.min(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.min(I("x", r, e, t6), i, p)]; } case "Sum": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.sum(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.sum(I("x", r, e, t6), i, p)]; } case "All": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.all(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.all(I("x", r, e, t6), i, p)]; } case "Any": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.any(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.any(I("x", r, e, t6), i, p)]; } case "ArgMax": { - let i = S("axis", r, e, t10); - return [o.argMax(S("x", r, e, t10), i)]; + let i = I("axis", r, e, t6); + return [o.argMax(I("x", r, e, t6), i)]; } case "ArgMin": { - let i = S("axis", r, e, t10); - return [o.argMin(S("x", r, e, t10), i)]; + let i = I("axis", r, e, t6); + return [o.argMin(I("x", r, e, t6), i)]; } case "Prod": { - let i = S("axis", r, e, t10), p = S("keepDims", r, e, t10); - return [o.prod(S("x", r, e, t10), i, p)]; + let i = I("axis", r, e, t6), p = I("keepDims", r, e, t6); + return [o.prod(I("x", r, e, t6), i, p)]; } case "Cumprod": { - let i = S("axis", r, e, t10), p = S("exclusive", r, e, t10), u = S("reverse", r, e, t10); - return [o.cumprod(S("x", r, e, t10), i, p, u)]; + let i = I("axis", r, e, t6), p = I("exclusive", r, e, t6), u = I("reverse", r, e, t6); + return [o.cumprod(I("x", r, e, t6), i, p, u)]; } case "Cumsum": { - let i = S("axis", r, e, t10), p = S("exclusive", r, e, t10), u = S("reverse", r, e, t10); - return [o.cumsum(S("x", r, e, t10), i, p, u)]; + let i = I("axis", r, e, t6), p = I("exclusive", r, e, t6), u = I("reverse", r, e, t6); + return [o.cumsum(I("x", r, e, t6), i, p, u)]; } case "Bincount": - let n = S("x", r, e, t10), s = S("weights", r, e, t10), a = S("size", r, e, t10); + let n = I("x", r, e, t6), s = I("weights", r, e, t6), a = I("size", r, e, t6); return [o.bincount(n, s, a)]; case "DenseBincount": { - let i = S("x", r, e, t10), p = S("weights", r, e, t10), u = S("size", r, e, t10), c = S("binaryOutput", r, e, t10); + let i = I("x", r, e, t6), p = I("weights", r, e, t6), u = I("size", r, e, t6), c = I("binaryOutput", r, e, t6); return [o.denseBincount(i, p, u, c)]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var CN = (r, e, t10, o = rt) => { +var XN = (r, e, t6, o = Ye) => { switch (r.op) { case "ConcatV2": case "Concat": { - let n = S("n", r, e, t10), s = S("axis", r, e, t10), a = S("tensors", r, e, t10); + let n = I("n", r, e, t6), s = I("axis", r, e, t6), a = I("tensors", r, e, t6); return a = a.slice(0, n), [o.concat(a, s)]; } case "Gather": { - let n = S("x", r, e, t10), s = S("indices", r, e, t10); + let n = I("x", r, e, t6), s = I("indices", r, e, t6); return [o.gather(n, o.cast(s, "int32"), 0)]; } case "GatherV2": { - let n = S("axis", r, e, t10), s = S("batchDims", r, e, t10), a = S("x", r, e, t10), i = S("indices", r, e, t10); + let n = I("axis", r, e, t6), s = I("batchDims", r, e, t6), a = I("x", r, e, t6), i = I("indices", r, e, t6); return [o.gather(a, o.cast(i, "int32"), n, s)]; } case "Reverse": { - let n = S("dims", r, e, t10), s = []; + let n = I("dims", r, e, t6), s = []; for (let i = 0; i < n.length; i++) n[i] && s.push(i); - let a = S("x", r, e, t10); + let a = I("x", r, e, t6); return [o.reverse(a, s)]; } case "ReverseV2": { - let n = S("axis", r, e, t10), s = S("x", r, e, t10); + let n = I("axis", r, e, t6), s = I("x", r, e, t6); return [o.reverse(s, n)]; } case "Slice": { - let n = S("begin", r, e, t10), s = S("size", r, e, t10); - return [o.slice(S("x", r, e, t10), n, s)]; + let n = I("begin", r, e, t6), s = I("size", r, e, t6); + return [o.slice(I("x", r, e, t6), n, s)]; } case "StridedSlice": { - let n = S("begin", r, e, t10), s = S("end", r, e, t10), a = S("strides", r, e, t10), i = S("beginMask", r, e, t10), p = S("endMask", r, e, t10), u = S("ellipsisMask", r, e, t10), c = S("newAxisMask", r, e, t10), l = S("shrinkAxisMask", r, e, t10), m = S("x", r, e, t10); + let n = I("begin", r, e, t6), s = I("end", r, e, t6), a = I("strides", r, e, t6), i = I("beginMask", r, e, t6), p = I("endMask", r, e, t6), u = I("ellipsisMask", r, e, t6), c = I("newAxisMask", r, e, t6), l = I("shrinkAxisMask", r, e, t6), m = I("x", r, e, t6); return [o.stridedSlice(m, n, s, a, i, p, u, c, l)]; } case "Pack": - return Ne(() => { - let n = S("axis", r, e, t10), s = S("tensors", r, e, t10), a = s[0].shape, i = o.squeeze(s[0]).shape, p = s.map((u) => { - let c = x.arraysEqual(u.shape, a); - if (!c && !x.arraysEqual(o.squeeze(u).shape, i)) + return Ee(() => { + let n = I("axis", r, e, t6), s = I("tensors", r, e, t6), a = s[0].shape, i = o.squeeze(s[0]).shape, p = s.map((u) => { + let c = y.arraysEqual(u.shape, a); + if (!c && !y.arraysEqual(o.squeeze(u).shape, i)) throw new Error("the input tensors shape does not match"); return c ? u : o.reshape(u, a); }); return [o.stack(p, n)]; }); case "Unpack": { - let n = S("axis", r, e, t10), s = S("tensor", r, e, t10); + let n = I("axis", r, e, t6), s = I("tensor", r, e, t6); return o.unstack(s, n); } case "Tile": { - let n = S("reps", r, e, t10); - return [o.tile(S("x", r, e, t10), n)]; + let n = I("reps", r, e, t6); + return [o.tile(I("x", r, e, t6), n)]; } case "Split": case "SplitV": { - let n = S("axis", r, e, t10), s = S("numOrSizeSplits", r, e, t10), a = S("x", r, e, t10); + let n = I("axis", r, e, t6), s = I("numOrSizeSplits", r, e, t6), a = I("x", r, e, t6); return o.split(a, s, n); } case "ScatterNd": { - let n = S("indices", r, e, t10), s = S("values", r, e, t10), a = S("shape", r, e, t10); + let n = I("indices", r, e, t6), s = I("values", r, e, t6), a = I("shape", r, e, t6); return [o.scatterND(n, s, a)]; } case "GatherNd": { - let n = S("x", r, e, t10), s = S("indices", r, e, t10); + let n = I("x", r, e, t6), s = I("indices", r, e, t6); return [o.gatherND(n, s)]; } case "SparseToDense": { - let n = S("sparseIndices", r, e, t10), s = S("outputShape", r, e, t10), a = S("sparseValues", r, e, t10), i = S("defaultValue", r, e, t10); + let n = I("sparseIndices", r, e, t6), s = I("outputShape", r, e, t6), a = I("sparseValues", r, e, t6), i = I("defaultValue", r, e, t6); return [o.sparseToDense(n, a, s, a.dtype === i.dtype ? i : o.cast(i, a.dtype))]; } default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var IN = (r, e, t10, o = rt) => { +var YN = (r, e, t6, o = Ye) => { switch (r.op) { case "SparseFillEmptyRows": { - let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(S("indices", r, e, t10), S("values", r, e, t10), S("denseShape", r, e, t10), S("defaultValue", r, e, t10)); + let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(I("indices", r, e, t6), I("values", r, e, t6), I("denseShape", r, e, t6), I("defaultValue", r, e, t6)); return [n, s, a, i]; } case "SparseReshape": { - let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(S("inputIndices", r, e, t10), S("inputShape", r, e, t10), S("newShape", r, e, t10)); + let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(I("inputIndices", r, e, t6), I("inputShape", r, e, t6), I("newShape", r, e, t6)); return [n, s]; } case "SparseSegmentMean": - return [o.sparse.sparseSegmentMean(S("data", r, e, t10), S("indices", r, e, t10), S("segmentIds", r, e, t10))]; + return [o.sparse.sparseSegmentMean(I("data", r, e, t6), I("indices", r, e, t6), I("segmentIds", r, e, t6))]; case "SparseSegmentSum": - return [o.sparse.sparseSegmentSum(S("data", r, e, t10), S("indices", r, e, t10), S("segmentIds", r, e, t10))]; + return [o.sparse.sparseSegmentSum(I("data", r, e, t6), I("indices", r, e, t6), I("segmentIds", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var wN = (r, e, t10, o = rt) => { +var QN = (r, e, t6, o = Ye) => { switch (r.op) { case "FFT": - return [o.fft(S("x", r, e, t10))]; + return [o.fft(I("x", r, e, t6))]; case "IFFT": - return [o.ifft(S("x", r, e, t10))]; + return [o.ifft(I("x", r, e, t6))]; case "RFFT": - return [o.rfft(S("x", r, e, t10))]; + return [o.rfft(I("x", r, e, t6))]; case "IRFFT": - return [o.irfft(S("x", r, e, t10))]; + return [o.irfft(I("x", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var SN = (r, e, t10, o = rt) => { +var ZN = (r, e, t6, o = Ye) => { switch (r.op) { case "StringNGrams": { - let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(S("data", r, e, t10), S("dataSplits", r, e, t10), S("separator", r, e, t10), S("nGramWidths", r, e, t10), S("leftPad", r, e, t10), S("rightPad", r, e, t10), S("padWidth", r, e, t10), S("preserveShortSequences", r, e, t10)); + let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(I("data", r, e, t6), I("dataSplits", r, e, t6), I("separator", r, e, t6), I("nGramWidths", r, e, t6), I("leftPad", r, e, t6), I("rightPad", r, e, t6), I("padWidth", r, e, t6), I("preserveShortSequences", r, e, t6)); return [n, s]; } case "StringSplit": { - let { indices: n, values: s, shape: a } = o.string.stringSplit(S("input", r, e, t10), S("delimiter", r, e, t10), S("skipEmpty", r, e, t10)); + let { indices: n, values: s, shape: a } = o.string.stringSplit(I("input", r, e, t6), I("delimiter", r, e, t6), I("skipEmpty", r, e, t6)); return [n, s, a]; } case "StringToHashBucketFast": - return [o.string.stringToHashBucketFast(S("input", r, e, t10), S("numBuckets", r, e, t10))]; + return [o.string.stringToHashBucketFast(I("input", r, e, t6), I("numBuckets", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -var vN = (r, e, t10, o = rt) => { +var JN = (r, e, t6, o = Ye) => { switch (r.op) { case "Cast": - return [o.cast(S("x", r, e, t10), S("dtype", r, e, t10))]; + return [o.cast(I("x", r, e, t6), I("dtype", r, e, t6))]; case "ExpandDims": { - let n = S("axis", r, e, t10); - return [o.expandDims(S("x", r, e, t10), n)]; + let n = I("axis", r, e, t6); + return [o.expandDims(I("x", r, e, t6), n)]; } case "Squeeze": { - let n = S("axis", r, e, t10); - return [o.squeeze(S("x", r, e, t10), n)]; + let n = I("axis", r, e, t6); + return [o.squeeze(I("x", r, e, t6), n)]; } case "Reshape": - return [o.reshape(S("x", r, e, t10), S("shape", r, e, t10))]; + return [o.reshape(I("x", r, e, t6), I("shape", r, e, t6))]; case "MirrorPad": - return [o.mirrorPad(S("x", r, e, t10), S("padding", r, e, t10), S("mode", r, e, t10))]; + return [o.mirrorPad(I("x", r, e, t6), I("padding", r, e, t6), I("mode", r, e, t6))]; case "PadV2": case "Pad": - return [o.pad(S("x", r, e, t10), S("padding", r, e, t10), S("constantValue", r, e, t10))]; + return [o.pad(I("x", r, e, t6), I("padding", r, e, t6), I("constantValue", r, e, t6))]; case "SpaceToBatchND": { - let n = S("blockShape", r, e, t10), s = S("paddings", r, e, t10); - return [o.spaceToBatchND(S("x", r, e, t10), n, s)]; + let n = I("blockShape", r, e, t6), s = I("paddings", r, e, t6); + return [o.spaceToBatchND(I("x", r, e, t6), n, s)]; } case "BatchToSpaceND": { - let n = S("blockShape", r, e, t10), s = S("crops", r, e, t10); - return [o.batchToSpaceND(S("x", r, e, t10), n, s)]; + let n = I("blockShape", r, e, t6), s = I("crops", r, e, t6); + return [o.batchToSpaceND(I("x", r, e, t6), n, s)]; } case "DepthToSpace": { - let n = S("blockSize", r, e, t10), s = S("dataFormat", r, e, t10).toUpperCase(); - return [o.depthToSpace(S("x", r, e, t10), n, s)]; + let n = I("blockSize", r, e, t6), s = I("dataFormat", r, e, t6).toUpperCase(); + return [o.depthToSpace(I("x", r, e, t6), n, s)]; } case "BroadcastTo": - return [o.broadcastTo(S("x", r, e, t10), S("shape", r, e, t10))]; + return [o.broadcastTo(I("x", r, e, t6), I("shape", r, e, t6))]; case "BroadcastArgs": - return [o.broadcastArgs(S("s0", r, e, t10), S("s1", r, e, t10))]; + return [o.broadcastArgs(I("s0", r, e, t6), I("s1", r, e, t6))]; default: throw TypeError(`Node type ${r.op} is not implemented`); } }; -function QC(r, e, t10, o, n = Ne) { +function qC(r, e, t6, o, n = Ee) { let s = ((a, i, p) => { switch (a.category) { case "arithmetic": - return n(() => eN(a, i, p)); + return n(() => _N(a, i, p)); case "basic_math": - return n(() => tN(a, i, p)); + return n(() => EN(a, i, p)); case "control": - return iN(a, i, p); + return ON(a, i, p); case "convolution": - return n(() => pN(a, i, p)); + return n(() => MN(a, i, p)); case "creation": - return n(() => cN(a, i, p)); + return n(() => LN(a, i, p)); case "dynamic": - return lN(a, i, p); + return BN(a, i, p); case "evaluation": - return n(() => mN(a, i, p)); + return n(() => VN(a, i, p)); case "image": - return n(() => hN(a, i, p)); + return n(() => UN(a, i, p)); case "graph": - return n(() => fN(a, i, p)); + return n(() => zN(a, i, p)); case "logical": - return n(() => gN(a, i, p)); + return n(() => GN(a, i, p)); case "matrices": - return n(() => xN(a, i, p)); + return n(() => HN(a, i, p)); case "normalization": - return n(() => yN(a, i, p)); + return n(() => qN(a, i, p)); + case "ragged": + return n(() => KN(a, i, p)); case "reduction": - return n(() => bN(a, i, p)); + return n(() => jN(a, i, p)); case "slice_join": - return n(() => CN(a, i, p)); + return n(() => XN(a, i, p)); case "sparse": - return n(() => IN(a, i, p)); + return n(() => YN(a, i, p)); case "spectral": - return n(() => wN(a, i, p)); + return n(() => QN(a, i, p)); case "string": - return n(() => SN(a, i, p)); + return n(() => ZN(a, i, p)); case "transformation": - return n(() => vN(a, i, p)); + return n(() => JN(a, i, p)); case "hash_table": - return dN(a, i, p, o); + return WN(a, i, p, o); case "custom": - let u = td(a.op); + let u = Gd(a.op); if (u && u.customExecutor) - return u.customExecutor(new fd(a, i, p)); + return u.customExecutor(new rf(a, i, p)); throw TypeError(`Custom op ${a.op} is not registered.`); default: throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`); } - })(r, e, t10); - return x.isPromise(s) ? s.then((a) => [].concat(a)) : [].concat(s); + })(r, e, t6); + return y.isPromise(s) ? s.then((a) => [].concat(a)) : [].concat(s); } -var yl = class { - constructor(e = {}, t10 = {}, o = {}, n = {}) { - this.weightMap = e, this.tensorArrayMap = t10, this.tensorListMap = o, this.functionMap = n, this.rootContext = { id: 0, frameName: "", iterationId: 0 }, this.contexts = [this.rootContext], this.lastId = 0, this.generateCurrentContextIds(); +var cl = class { + constructor(e = {}, t6 = {}, o = {}, n = {}) { + this.weightMap = e, this.tensorArrayMap = t6, this.tensorListMap = o, this.functionMap = n, this.rootContext = { id: 0, frameName: "", iterationId: 0 }, this.contexts = [this.rootContext], this.lastId = 0, this.generateCurrentContextIds(); } - newFrame(e, t10) { - return { id: e, frameName: t10, iterationId: 0 }; + newFrame(e, t6) { + return { id: e, frameName: t6, iterationId: 0 }; } set currentContext(e) { this.contexts !== e && (this.contexts = e, this.generateCurrentContextIds()); @@ -10967,14 +10997,14 @@ var yl = class { } generateCurrentContextIds() { let e = []; - for (let t10 = 0; t10 < this.contexts.length - 1; t10++) { - let o = this.contexts.slice(0, this.contexts.length - t10); + for (let t6 = 0; t6 < this.contexts.length - 1; t6++) { + let o = this.contexts.slice(0, this.contexts.length - t6); e.push(this.contextIdforContexts(o)); } e.push(""), this._currentContextIds = e; } contextIdforContexts(e) { - return e ? e.map((t10) => t10.id === 0 && t10.iterationId === 0 ? "" : `${t10.frameName}-${t10.iterationId}`).join("/") : ""; + return e ? e.map((t6) => t6.id === 0 && t6.iterationId === 0 ? "" : `${t6.frameName}-${t6.iterationId}`).join("/") : ""; } enterFrame(e) { this.contexts && (this.lastId++, this.contexts = this.contexts.slice(), this.contexts.push(this.newFrame(this.lastId, e)), this._currentContextIds.unshift(this.contextIdforContexts(this.contexts))); @@ -11009,32 +11039,32 @@ var yl = class { return this.tensorListMap[e]; } dispose(e) { - for (let t10 in this.tensorArrayMap) - this.tensorArrayMap[t10].clearAndClose(e); - for (let t10 in this.tensorListMap) - this.tensorListMap[t10].clearAndClose(e); + for (let t6 in this.tensorArrayMap) + this.tensorArrayMap[t6].clearAndClose(e); + for (let t6 in this.tensorListMap) + this.tensorListMap[t6].clearAndClose(e); } }; -function ZC(r, e, t10, o) { - let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = Object.keys(r).map((m) => Sr(m)[0]), c = []; - o != null && (c = o.map((m) => Sr(m.name)[0])); +function KC(r, e, t6, o) { + let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = Object.keys(r).map((m) => Ir(m)[0]), c = []; + o != null && (c = o.map((m) => Ir(m.name)[0])); let l = [...e]; for (; l.length > 0; ) { let m = l.pop(); - if ((JC(m) || B6(m) || V6(m)) && a == null && (a = m, i = a.children.map((f) => f.name).filter((f) => n.has(f))), n.add(m.name), t10[m.name] == null && u.indexOf(m.name) === -1 && c.indexOf(m.name) === -1) { + if ((jC(m) || i6(m) || u6(m)) && a == null && (a = m, i = a.children.map((d) => d.name).filter((d) => n.has(d))), n.add(m.name), t6[m.name] == null && u.indexOf(m.name) === -1 && c.indexOf(m.name) === -1) { if (m.inputs.length === 0) { s.push(m.name); continue; } - m.inputs.forEach((f) => { - p.has(f.name) || (p.add(f.name), l.push(f)); + m.inputs.forEach((d) => { + p.has(d.name) || (p.add(d.name), l.push(d)); }); } } return { inputs: r, outputs: e, usedNodes: n, missingInputs: s, dynamicNode: a, syncInputs: i }; } -function kN(r, e, t10) { - let { usedNodes: o, inputs: n } = t10, s = [], a = Object.keys(n).map((c) => Sr(c)[0]).map((c) => r.nodes[c]), i = r.initNodes; +function eT(r, e, t6) { + let { usedNodes: o, inputs: n } = t6, s = [], a = Object.keys(n).map((c) => Ir(c)[0]).map((c) => r.nodes[c]), i = r.initNodes; a.forEach((c) => { o.has(c.name) && s.push(c); }), r.weights.forEach((c) => { @@ -11051,21 +11081,21 @@ function kN(r, e, t10) { } return u; } -var O6 = ["Switch", "Merge", "Enter", "Exit", "NextIteration", "StatelessIf", "StatelessWhile", "if", "While"]; -var M6 = ["NonMaxSuppressionV2", "NonMaxSuppressionV3", "NonMaxSuppressionV5", "Where"]; -var L6 = ["HashTable", "HashTableV2", "LookupTableImport", "LookupTableImportV2", "LookupTableFind", "LookupTableFindV2", "LookupTableSize", "LookupTableSizeV2"]; -function JC(r) { - return O6.indexOf(r.op) >= 0; +var n6 = ["Switch", "Merge", "Enter", "Exit", "NextIteration", "StatelessIf", "StatelessWhile", "if", "While"]; +var s6 = ["NonMaxSuppressionV2", "NonMaxSuppressionV3", "NonMaxSuppressionV5", "Where"]; +var a6 = ["HashTable", "HashTableV2", "LookupTableImport", "LookupTableImportV2", "LookupTableFind", "LookupTableFindV2", "LookupTableSize", "LookupTableSizeV2"]; +function jC(r) { + return n6.indexOf(r.op) >= 0; } -function B6(r) { - return M6.indexOf(r.op) >= 0; +function i6(r) { + return s6.indexOf(r.op) >= 0; } -function V6(r) { - return L6.indexOf(r.op) >= 0; +function u6(r) { + return a6.indexOf(r.op) >= 0; } var Cu = class { - constructor(e, t10) { - this.graph = e, this.parent = t10, this.compiledMap = /* @__PURE__ */ new Map(), this._weightMap = {}, this.SEPERATOR = ",", this._functions = {}, this._functionExecutorMap = {}, this.intermediateTensors = {}, this.keepTensorForDebug = false, this._outputs = e.outputs, this._inputs = e.inputs, this._initNodes = e.initNodes, this._signature = e.signature, this._functions = e.functions, e.functions != null && Object.keys(e.functions).forEach((o) => { + constructor(e, t6) { + this.graph = e, this.parent = t6, this.compiledMap = /* @__PURE__ */ new Map(), this._weightMap = {}, this.SEPERATOR = ",", this._functions = {}, this._functionExecutorMap = {}, this.keepIntermediateTensors = false, this._outputs = e.outputs, this._inputs = e.inputs, this._initNodes = e.initNodes, this._signature = e.signature, this._functions = e.functions, e.functions != null && Object.keys(e.functions).forEach((o) => { this._functionExecutorMap[o] = new Cu(e.functions[o], this); }); } @@ -11079,8 +11109,8 @@ var Cu = class { return this.parent ? this.parent.weightMap : this._weightMap; } set weightMap(e) { - let t10 = Object.keys(e).map((o) => e[o].map((n) => n.id)); - this._weightIds = [].concat(...t10), this._weightMap = e; + let t6 = Object.keys(e).map((o) => e[o].map((n) => n.id)); + this._weightIds = [].concat(...t6), this._weightMap = e; } set resourceManager(e) { this._resourceManager = e; @@ -11096,211 +11126,217 @@ var Cu = class { } get outputNodes() { return this._outputs.map((e) => { - let t10 = e.signatureKey || e.name; - return e.defaultOutput ? `${t10}:${e.defaultOutput}` : t10; + let t6 = e.signatureKey || e.name; + return e.defaultOutput ? `${t6}:${e.defaultOutput}` : t6; }); } get functions() { - return Object.keys(this._functions).reduce((e, t10) => (e[t10] = this._functions[t10].signature, e), {}); + return Object.keys(this._functions).reduce((e, t6) => (e[t6] = this._functions[t6].signature, e), {}); } - getCompilationKey(e, t10) { - let o = e.map((s) => s.name).sort(), n = t10.map((s) => s.name).sort(); + getCompilationKey(e, t6) { + let o = e.map((s) => s.name).sort(), n = t6.map((s) => s.name).sort(); return o.join(this.SEPERATOR) + "--" + n.join(this.SEPERATOR); } - compile(e, t10) { - let o = ZC(e, t10, this.weightMap, this._initNodes), { missingInputs: n, dynamicNode: s, syncInputs: a } = o; + compile(e, t6) { + let o = KC(e, t6, this.weightMap, this._initNodes), { missingInputs: n, dynamicNode: s, syncInputs: a } = o; if (s != null) throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`); if (n.length > 0) { - let i = t10.map((u) => u.name), p = Object.keys(e); + let i = t6.map((u) => u.name), p = Object.keys(e); throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${p}]. Missing the following inputs: [${n}]`); } - return kN(this.graph, this.weightMap, o); + return eT(this.graph, this.weightMap, o); } - execute(e, t10) { - e = this.mapInputs(e); + cloneAndKeepTensor(e) { + if (e == null) + return null; + let t6 = e.clone(); + return _r(t6), t6; + } + cloneTensorList(e) { + return e ? e.map((o) => this.cloneAndKeepTensor(o)) : null; + } + cloneTensorMap(e) { + return Object.fromEntries(Object.entries(e).map(([t6, o]) => [t6, this.cloneTensorList(o)])); + } + execute(e, t6) { + this.disposeIntermediateTensors(), e = this.mapInputs(e); let o = Object.keys(e).sort(); - this.checkInputs(e), this.checkInputShapeAndType(e), t10 = this.mapOutputs(t10), this.checkOutputs(t10); - let n = o.map((l) => this.graph.nodes[Sr(l)[0]]), s = t10.map((l) => Sr(l)[0]), a = s.map((l) => this.graph.nodes[l]); - this.resetIntermediateTensors(), a.length === 0 && (a = this._outputs); + this.checkInputs(e), this.checkInputShapeAndType(e), t6 = this.mapOutputs(t6), this.checkOutputs(t6); + let n = o.map((l) => this.graph.nodes[Ir(l)[0]]), s = t6.map((l) => Ir(l)[0]), a = s.map((l) => this.graph.nodes[l]); + a.length === 0 && (a = this._outputs); let i = this.getCompilationKey(n, a), p = this.compiledMap.get(i); p == null && (p = this.compile(e, a), this.compiledMap.set(i, p)); + try { + this.keepIntermediateTensors = O().getBool("KEEP_INTERMEDIATE_TENSORS"); + } catch (l) { + this.keepIntermediateTensors = false, console.warn(l.message); + } let u = {}, c = {}; - return Ne(() => { - let l = new yl(this.weightMap, u, c, this.functionExecutorMap), m = Object.assign({}, this.weightMap); - Object.keys(e).forEach((h) => { - let [g, y] = Sr(h), b = []; - b[y] = e[h], m[g] = b; + return Ee(() => { + let l = new cl(this.weightMap, u, c, this.functionExecutorMap), m = Object.assign({}, this.weightMap); + this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)), Object.keys(e).forEach((h) => { + let [g, x] = Ir(h), b = []; + b[x] = e[h], m[g] = b, this.keepIntermediateTensors && (this.clonedTensorsMap[g] = this.cloneTensorList(b)); }); - let f = this.getFrozenTensorIds(m), d = {}; + let d = this.getFrozenTensorIds(m), f = {}; for (let h = 0; h < p.length; h++) { let g = p[h]; if (!m[g.name]) { - let y = QC(g, m, l, this._resourceManager); - if (x.isPromise(y)) + let x = qC(g, m, l, this._resourceManager); + if (y.isPromise(x)) throw new Error(`The execution of the op '${g.op}' returned a promise. Please use model.executeAsync() instead.`); - m[g.name] = y, this.checkTensorForDisposal(g.name, g, m, l, f, s, d); + m[g.name] = x, this.keepIntermediateTensors && (this.clonedTensorsMap[g.name] = this.cloneTensorList(x)), this.checkTensorForDisposal(g.name, g, m, l, d, s, f); } } - return this.parent == null && l.dispose(f), t10.map((h) => Ht(h, m, l)); + return this.parent == null && l.dispose(d), t6.map((h) => Gt(h, m, l)); }); } getFrozenTensorIds(e) { - let t10 = [].concat.apply([], Object.keys(e).map((o) => e[o]).map((o) => o.map((n) => n.id))); - return new Set(t10); + let t6 = [].concat.apply([], Object.keys(e).map((o) => e[o]).map((o) => o.map((n) => n.id))); + return new Set(t6); } - checkTensorForDisposal(e, t10, o, n, s, a, i) { - t10.category === "control" || a.indexOf(e) !== -1 || (o[e].forEach((p) => { - p != null && (i[p.id] = (i[p.id] || 0) + t10.children.length); - }), t10.inputs.forEach((p) => { + checkTensorForDisposal(e, t6, o, n, s, a, i) { + t6.category === "control" || a.indexOf(e) !== -1 || (o[e].forEach((p) => { + p != null && (i[p.id] = (i[p.id] || 0) + t6.children.length); + }), t6.inputs.forEach((p) => { if (p.category !== "control") { - let u = YT(p.name, o, n); + let u = vN(p.name, o, n); u != null && u.forEach((c) => { if (c && !c.kept && !s.has(c.id)) { let l = i[c.id]; - if (l === 1) { - if (!this.keepTensorForDebug) - c.dispose(); - else { - let [m, f] = zo(t10.name, n); - this.intermediateTensors[m] ? this.intermediateTensors[m][f] = c : (this.intermediateTensors[m] = [], this.intermediateTensors[m][f] = c); - } - delete i[c.id]; - } else - l != null && i[c.id]--; + l === 1 ? (c.dispose(), delete i[c.id]) : l != null && i[c.id]--; } }); } })); } - async executeAsync(e, t10) { - return this._executeAsync(e, t10); + async executeAsync(e, t6) { + return this._executeAsync(e, t6); } disposeIntermediateTensors() { - !this.intermediateTensors || (Object.keys(this.intermediateTensors).forEach((e) => this.intermediateTensors[e].forEach((t10) => t10.dispose())), this.disposeTensorsMap()); - } - disposeTensorsMap() { - !this.tensorsMap || Object.keys(this.tensorsMap).forEach((e) => { - this.tensorsMap[e].forEach((o) => { - o && !o.kept && !o.isDisposed && !this.keepIds.has(o.id) && o.dispose(); - }); - }); + !this.clonedTensorsMap || (Object.values(this.clonedTensorsMap).forEach((e) => { + for (let t6 of e) + t6 && !t6.isDisposed && t6.dispose(); + }), this.clonedTensorsMap = null); } getIntermediateTensors() { - return this.tensorsMap; + return this.clonedTensorsMap; } - resetIntermediateTensors() { - for (let e in this.intermediateTensors) - this.intermediateTensors[e].forEach((t10) => t10.dispose()), delete this.intermediateTensors[e]; - } - async _executeAsync(e, t10, o = false, n = {}, s = {}) { - o || (e = this.mapInputs(e), this.checkInputs(e), this.checkInputShapeAndType(e), t10 = this.mapOutputs(t10), this.checkOutputs(t10)); + async _executeAsync(e, t6, o = false, n = {}, s = {}) { + this.disposeIntermediateTensors(), o || (e = this.mapInputs(e), this.checkInputs(e), this.checkInputShapeAndType(e), t6 = this.mapOutputs(t6), this.checkOutputs(t6)); try { - this.keepTensorForDebug = P().getBool("KEEP_INTERMEDIATE_TENSORS"); - } catch (c) { - console.warn(c.message); + this.keepIntermediateTensors = O().getBool("KEEP_INTERMEDIATE_TENSORS"); + } catch (m) { + this.keepIntermediateTensors = false, console.warn(m.message); } - this.resetIntermediateTensors(); - let a = new yl(this.weightMap, n, s, this.functionExecutorMap); - this.tensorsMap = await this.executeWithControlFlow(e, a, t10, o); - let i = t10.map((c) => Ht(c, this.tensorsMap, a)), p = i.map((c) => c.id), u = Object.keys(e).map((c) => e[c].id); - return this.keepIds = /* @__PURE__ */ new Set([...p, ...u, ...this.weightIds]), this.keepTensorForDebug || this.disposeTensorsMap(), this.parent == null && a.dispose(this.keepIds), i; + let a = new cl(this.weightMap, n, s, this.functionExecutorMap); + this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)); + let i = await this.executeWithControlFlow(e, a, t6, o), p = t6.map((m) => Gt(m, i, a)), u = p.map((m) => m.id), c = Object.keys(e).map((m) => e[m].id), l = /* @__PURE__ */ new Set([...u, ...c, ...this.weightIds]); + return Object.values(i).forEach((m) => { + m.forEach((d) => { + d && !d.isDisposed && !l.has(d.id) && d.dispose(); + }); + }), this.parent == null && a.dispose(l), p; } - async executeFunctionAsync(e, t10, o) { + async executeFunctionAsync(e, t6, o) { let n = e.reduce((s, a, i) => (s[this.inputs[i].name] = a, s), {}); - return this._executeAsync(n, this.outputNodes, true, t10, o); + return this._executeAsync(n, this.outputNodes, true, t6, o); } - async executeWithControlFlow(e, t10, o, n) { - let s = Object.keys(e), a = s.map((C) => this.graph.nodes[Sr(C)[0]]), i = o.map((C) => Sr(C)[0]), p = i.map((C) => this.graph.nodes[C]); + async executeWithControlFlow(e, t6, o, n) { + let s = Object.keys(e), a = s.map((C) => this.graph.nodes[Ir(C)[0]]), i = o.map((C) => Ir(C)[0]), p = i.map((C) => this.graph.nodes[C]); p.length === 0 && (p = this._outputs); - let { usedNodes: u, missingInputs: c, dynamicNode: l, syncInputs: m } = ZC(e, p, this.weightMap, this._initNodes), f = [...a, ...this.graph.weights, ...this._initNodes || []].map((C) => ({ node: C, contexts: t10.currentContext })), d = Object.assign({}, this.weightMap); + let { usedNodes: u, missingInputs: c, dynamicNode: l, syncInputs: m } = KC(e, p, this.weightMap, this._initNodes), d = [...a, ...this.graph.weights, ...this._initNodes || []].map((C) => ({ node: C, contexts: t6.currentContext })), f = Object.assign({}, this.weightMap); Object.keys(e).forEach((C) => { - let [w, k] = Sr(C), _ = []; - _[k] = e[C], d[w] = _; + let [w, k] = Ir(C), _ = []; + _[k] = e[C], f[w] = _; }); - let h = {}, g = this.getFrozenTensorIds(d), y = {}; - for (; f.length > 0; ) { - let C = this.processStack(a, f, t10, d, y, g, i, h, u); + let h = {}, g = this.getFrozenTensorIds(f), x = {}; + for (; d.length > 0; ) { + let C = this.processStack(a, d, t6, f, x, g, i, h, u); await Promise.all(C); } l == null && !n && console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead."); - let b = p.filter((C) => !JC(C) && !Ht(C.name, d, t10)).map((C) => C.name); + let b = p.filter((C) => !jC(C) && !Gt(C.name, f, t6)).map((C) => C.name); if (b.length > 0) { let C = ""; throw l != null && (C = `Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`), new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${C}`); } - return d; + return f; } - processStack(e, t10, o, n, s, a, i, p, u) { + processStack(e, t6, o, n, s, a, i, p, u) { let c = []; - for (; t10.length > 0; ) { - let l = t10.pop(); + for (; t6.length > 0; ) { + let l = t6.pop(); o.currentContext = l.contexts; let m = ""; - if (l.node.op === "Enter" && S("isConstant", l.node, n, o) && ([m] = zo(l.node.name, o)), n[l.node.name] == null) { - let f = QC(l.node, n, o, this._resourceManager); - m || ([m] = zo(l.node.name, o)); - let d = o.currentContext; - x.isPromise(f) ? c.push(f.then((h) => (n[m] = h, o.currentContext = d, this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t10, o, n, s, u), h))) : (n[m] = f, this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t10, o, n, s, u)); + if (l.node.op === "Enter" && I("isConstant", l.node, n, o) && ([m] = ss(l.node.name, o)), n[l.node.name] == null) { + let d = qC(l.node, n, o, this._resourceManager); + m || ([m] = ss(l.node.name, o)); + let f = o.currentContext; + y.isPromise(d) ? c.push(d.then((h) => (n[m] = h, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(h)), o.currentContext = f, this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t6, o, n, s, u), h))) : (n[m] = d, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(d)), this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t6, o, n, s, u)); } else - this.processChildNodes(l.node, t10, o, n, s, u); + this.processChildNodes(l.node, t6, o, n, s, u); } return c; } - processChildNodes(e, t10, o, n, s, a) { + processChildNodes(e, t6, o, n, s, a) { e.children.forEach((i) => { - let [p] = zo(i.name, o); - s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!Ht(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!Ht(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i }))); + let [p] = ss(i.name, o); + s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!Gt(u, n, o)) && (s[p] = true, t6.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!Gt(u, n, o)) && (s[p] = true, t6.push({ contexts: o.currentContext, node: i }))); }); } dispose() { - Object.keys(this.weightMap).forEach((e) => this.weightMap[e].forEach((t10) => t10.dispose())); + Object.keys(this.weightMap).forEach((e) => this.weightMap[e].forEach((t6) => t6.dispose())); } checkInputShapeAndType(e) { - Object.keys(e).forEach((t10) => { - let o = e[t10], [n] = Sr(t10), s = this.graph.nodes[n]; + Object.keys(e).forEach((t6) => { + let o = e[t6], [n] = Ir(t6), s = this.graph.nodes[n]; if (s.attrParams.shape && s.attrParams.shape.value) { let a = s.attrParams.shape.value, i = a.length === o.shape.length && o.shape.every((p, u) => a[u] === -1 || a[u] === p); - x.assert(i, () => `The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`); + y.assert(i, () => `The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`); } - s.attrParams.dtype && s.attrParams.dtype.value && x.assert(o.dtype === s.attrParams.dtype.value, () => `The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`); + s.attrParams.dtype && s.attrParams.dtype.value && y.assert(o.dtype === s.attrParams.dtype.value, () => `The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`); }); } mapInputs(e) { - let t10 = {}; - for (let o in e) - if (this._signature != null && this._signature.inputs != null && this._signature.inputs[o] != null) { - let n = this._signature.inputs[o]; - t10[n.name] = e[o]; - } else - t10[o] = e[o]; - return t10; + var t6, o; + let n = {}; + for (let s in e) { + let a = (o = (t6 = this._signature) === null || t6 === void 0 ? void 0 : t6.inputs) === null || o === void 0 ? void 0 : o[s]; + a != null ? n[a.name] = e[s] : n[s] = e[s]; + } + return n; } checkInputs(e) { - let t10 = Object.keys(e).filter((o) => { - let [n] = Sr(o); + let t6 = Object.keys(e).filter((o) => { + let [n] = Ir(o); return this.graph.nodes[n] == null; }); - if (t10.length > 0) - throw new Error(`The dict provided in model.execute(dict) has keys: [${t10}] that are not part of graph`); + if (t6.length > 0) + throw new Error(`The dict provided in model.execute(dict) has keys: [${t6}] that are not part of graph`); } mapOutputs(e) { - return e.map((t10) => this._signature != null && this._signature.outputs != null && this._signature.outputs[t10] != null ? this._signature.outputs[t10].name : t10, {}); + return e.map((t6) => { + var o, n; + let s = (n = (o = this._signature) === null || o === void 0 ? void 0 : o.outputs) === null || n === void 0 ? void 0 : n[t6]; + return s != null ? s.name : t6; + }, {}); } checkOutputs(e) { - e.forEach((t10) => { - let [o] = Sr(t10); + e.forEach((t6) => { + let [o] = Ir(t6); if (!this.graph.nodes[o]) - throw new Error(`The output '${t10}' is not found in the graph`); + throw new Error(`The output '${t6}' is not found in the graph`); }); } }; -var xd = class { - constructor(e = {}, t10 = {}) { - this.hashTableNameToHandle = e, this.hashTableMap = t10; +var af = class { + constructor(e = {}, t6 = {}) { + this.hashTableNameToHandle = e, this.hashTableMap = t6; } - addHashTable(e, t10) { - this.hashTableNameToHandle[e] = t10.handle, this.hashTableMap[t10.id] = t10; + addHashTable(e, t6) { + this.hashTableNameToHandle[e] = t6.handle, this.hashTableMap[t6.id] = t6; } getHashTableHandleByName(e) { return this.hashTableNameToHandle[e]; @@ -11315,11 +11351,11 @@ var xd = class { this.hashTableNameToHandle[e].dispose(), delete this.hashTableNameToHandle[e]; } }; -var z6 = "?tfjs-format=file"; -var W6 = "model.json"; -var bl = class { - constructor(e, t10 = {}, o = va) { - this.modelUrl = e, this.loadOptions = t10, this.version = "n/a", this.io = o, t10 == null && (this.loadOptions = {}), this.resourceManager = new xd(); +var p6 = "?tfjs-format=file"; +var c6 = "model.json"; +var ll = class { + constructor(e, t6 = {}, o = Ea) { + this.modelUrl = e, this.loadOptions = t6, this.version = "n/a", this.io = o, t6 == null && (this.loadOptions = {}), this.resourceManager = new af(); } get modelVersion() { return this.version; @@ -11355,36 +11391,36 @@ var bl = class { else if (this.loadOptions.requestInit != null) this.handler = this.io.browserHTTPRequest(e, this.loadOptions); else { - let t10 = this.io.getLoadHandlers(e, this.loadOptions); - if (t10.length === 0) - t10.push(this.io.browserHTTPRequest(e, this.loadOptions)); - else if (t10.length > 1) - throw new Error(`Found more than one (${t10.length}) load handlers for URL '${[e]}'`); - this.handler = t10[0]; + let t6 = this.io.getLoadHandlers(e, this.loadOptions); + if (t6.length === 0) + t6.push(this.io.browserHTTPRequest(e, this.loadOptions)); + else if (t6.length > 1) + throw new Error(`Found more than one (${t6.length}) load handlers for URL '${[e]}'`); + this.handler = t6[0]; } } load() { if (this.findIOHandler(), this.handler.load == null) throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented."); let e = this.handler.load(); - return x.isPromise(e) ? e.then((t10) => this.loadSync(t10)) : this.loadSync(e); + return y.isPromise(e) ? e.then((t6) => this.loadSync(t6)) : this.loadSync(e); } loadSync(e) { this.artifacts = e; - let t10 = this.artifacts.modelTopology, o = this.artifacts.signature; + let t6 = this.artifacts.modelTopology, o = this.artifacts.signature; if (this.artifacts.userDefinedMetadata != null) { let s = this.artifacts.userDefinedMetadata; s.signature != null && (o = s.signature), s.structuredOutputKeys != null && (this.structuredOutputKeys = s.structuredOutputKeys); } - this.signature = o, this.version = `${t10.versions.producer}.${t10.versions.minConsumer}`; + this.signature = o, this.version = `${t6.versions.producer}.${t6.versions.minConsumer}`; let n = this.io.decodeWeights(this.artifacts.weightData, this.artifacts.weightSpecs); - if (this.executor = new Cu(xl.Instance.transformGraph(t10, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(n), this.executor.resourceManager = this.resourceManager, e.modelInitializer != null && e.modelInitializer.node != null) { - let s = xl.Instance.transformGraph(e.modelInitializer); + if (this.executor = new Cu(pl.Instance.transformGraph(t6, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(n), this.executor.resourceManager = this.resourceManager, e.modelInitializer != null && e.modelInitializer.node != null) { + let s = pl.Instance.transformGraph(e.modelInitializer); this.initializer = new Cu(s), this.initializer.weightMap = this.executor.weightMap, this.initializer.resourceManager = this.resourceManager, this.initializerSignature = e.initializerSignature; } return true; } - async save(e, t10) { + async save(e, t6) { if (typeof e == "string") { let o = this.io.getSaveHandlers(e); if (o.length === 0) @@ -11397,31 +11433,41 @@ var bl = class { throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined."); return e.save(this.artifacts); } - predict(e, t10) { - let o = this.execute(e, this.outputNodes); + addStructuredOutputNames(e) { if (this.structuredOutputKeys) { - let n = o instanceof ut ? [o] : o, s = {}; - return n.forEach((a, i) => s[this.structuredOutputKeys[i]] = a), s; + let t6 = e instanceof it ? [e] : e, o = {}; + return t6.forEach((n, s) => o[this.structuredOutputKeys[s]] = n), o; } - return o; + return e; + } + predict(e, t6) { + let o = this.execute(e, this.outputNodes); + return this.addStructuredOutputNames(o); + } + async predictAsync(e, t6) { + let o = await this.executeAsync(e, this.outputNodes); + return this.addStructuredOutputNames(o); } normalizeInputs(e) { - if (!(e instanceof ut) && !Array.isArray(e)) { - if (this.signature != null && this.signature.inputs != null) - for (let n in this.signature.inputs) { - let s = this.signature.inputs[n]; - s.resourceId != null && (e[n] = this.resourceIdToCapturedInput[s.resourceId]); + var t6; + if (!(e instanceof it) && !Array.isArray(e)) { + let s = (t6 = this.signature) === null || t6 === void 0 ? void 0 : t6.inputs; + if (s != null) + for (let a in s) { + let i = s[a]; + i.resourceId != null && (e[a] = this.resourceIdToCapturedInput[i.resourceId]); } return e; } e = Array.isArray(e) ? e : [e]; - let t10 = Object.keys(this.resourceIdToCapturedInput).length; - if (e.length + t10 !== this.inputNodes.length) - throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length - t10} non-resource placeholders, while there are ${e.length} input tensors provided.`); - let o = 0; - return this.inputNodes.reduce((n, s) => { - let a = this.signature ? this.signature.inputs[s] : null; - return a != null && a.resourceId != null ? n[s] = this.resourceIdToCapturedInput[a.resourceId] : n[s] = e[o++], n; + let o = Object.keys(this.resourceIdToCapturedInput).length; + if (e.length + o !== this.inputNodes.length) + throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length - o} non-resource placeholders, while there are ${e.length} input tensors provided.`); + let n = 0; + return this.inputNodes.reduce((s, a) => { + var i, p, u; + let c = (u = (p = (i = this.signature) === null || i === void 0 ? void 0 : i.inputs) === null || p === void 0 ? void 0 : p[a]) === null || u === void 0 ? void 0 : u.resourceId; + return c != null ? s[a] = this.resourceIdToCapturedInput[c] : s[a] = e[n++], s; }, {}); } normalizeOutputs(e) { @@ -11435,21 +11481,21 @@ var bl = class { } setResourceIdToCapturedInput(e) { if (this.resourceIdToCapturedInput = {}, this.initializerSignature) { - let t10 = Object.keys(this.initializerSignature.outputs); - for (let o = 0; o < t10.length; o++) { - let n = t10[o], s = this.initializerSignature.outputs[n]; - this.resourceIdToCapturedInput[s.resourceId] = e[o]; + let t6 = this.initializerSignature.outputs, o = Object.keys(t6); + for (let n = 0; n < o.length; n++) { + let s = o[n], a = t6[s]; + this.resourceIdToCapturedInput[a.resourceId] = e[n]; } } } - execute(e, t10) { - this.resourceIdToCapturedInput == null && this.setResourceIdToCapturedInput(this.executeInitializerGraph()), e = this.normalizeInputs(e), t10 = this.normalizeOutputs(t10); - let o = this.executor.execute(e, t10); + execute(e, t6) { + this.resourceIdToCapturedInput == null && this.setResourceIdToCapturedInput(this.executeInitializerGraph()), e = this.normalizeInputs(e), t6 = this.normalizeOutputs(t6); + let o = this.executor.execute(e, t6); return o.length > 1 ? o : o[0]; } - async executeAsync(e, t10) { - this.resourceIdToCapturedInput == null && this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()), e = this.normalizeInputs(e), t10 = this.normalizeOutputs(t10); - let o = await this.executor.executeAsync(e, t10); + async executeAsync(e, t6) { + this.resourceIdToCapturedInput == null && this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()), e = this.normalizeInputs(e), t6 = this.normalizeOutputs(t6); + let o = await this.executor.executeAsync(e, t6); return o.length > 1 ? o : o[0]; } getIntermediateTensors() { @@ -11459,20 +11505,20 @@ var bl = class { this.executor.disposeIntermediateTensors(); } convertTensorMapToTensorsMap(e) { - return Object.keys(e).reduce((t10, o) => (t10[o] = [e[o]], t10), {}); + return Object.keys(e).reduce((t6, o) => (t6[o] = [e[o]], t6), {}); } dispose() { - this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Ft(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); + this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Dt(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); } }; -async function U6(r, e = {}, t10 = va) { +async function l6(r, e = {}, t6 = Ea) { if (r == null) throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model"); - e == null && (e = {}), e.fromTFHub && typeof r == "string" && (r = H6(r)); - let o = new bl(r, e, t10); + e == null && (e = {}), e.fromTFHub && typeof r == "string" && (r = d6(r)); + let o = new ll(r, e, t6); return await o.load(), o; } -function G6(r) { +function m6(r) { if (r == null) throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model"); let e; @@ -11486,66 +11532,66 @@ function G6(r) { throw new Error("Model JSON is missing 'modelTopology'"); if (!("weightsManifest" in o)) throw new Error("Model JSON is missing 'weightsManifest'"); - let s = va.getWeightSpecs(o.weightsManifest), a = va.getModelArtifactsForJSONSync(o, s, n); - e = va.fromMemorySync(a); + let s = Ea.getWeightSpecs(o.weightsManifest), a = Ea.getModelArtifactsForJSONSync(o, s, n); + e = Ea.fromMemorySync(a); } else if ("load" in r) e = r; else if ("modelTopology" in r && "weightSpecs" in r && "weightData" in r) - e = va.fromMemorySync(r); + e = Ea.fromMemorySync(r); else throw new Error("Unknown model format"); - let t10 = new bl(e); - return t10.load(), t10; + let t6 = new ll(e); + return t6.load(), t6; } -function H6(r) { - return r.endsWith("/") || (r = r + "/"), `${r}${W6}${z6}`; +function d6(r) { + return r.endsWith("/") || (r = r + "/"), `${r}${c6}${p6}`; } -var q6 = "4.0.0"; +var f6 = "4.1.0"; function K(r, e) { - Array.isArray(r) || (r = [r]), r.forEach((t10) => { - t10 != null && x.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); + Array.isArray(r) || (r = [r]), r.forEach((t6) => { + t6 != null && y.assert(t6.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); }); } -var K6 = Bt.whereImpl; -var Si = class extends Jr { +var h6 = Lt.whereImpl; +var Oi = class extends Zr { constructor() { - super(), this.blockSize = 48, this.firstUse = true, this.data = new rn(this, cr()); + super(), this.blockSize = 48, this.firstUse = true, this.data = new Do(this, cr()); } nextDataId() { - return Si.nextDataId++; + return Oi.nextDataId++; } - write(e, t10, o) { - this.firstUse && (this.firstUse = false, P().get("IS_NODE") && I.warn(` + write(e, t6, o) { + this.firstUse && (this.firstUse = false, O().get("IS_NODE") && S.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. ============================`)); let n = { id: this.nextDataId() }; return this.data.set(n, { values: e, dtype: o, refCount: 1 }), n; } - makeTensorInfo(e, t10, o) { + makeTensorInfo(e, t6, o) { let n; - if (t10 === "string" && o != null && o.length > 0 && x.isString(o[0])) { - let s = o.map((a) => x.encodeString(a)); - n = this.write(s, e, t10); + if (t6 === "string" && o != null && o.length > 0 && y.isString(o[0])) { + let s = o.map((a) => y.encodeString(a)); + n = this.write(s, e, t6); } else - n = this.write(o, e, t10); - return { dataId: n, shape: e, dtype: t10 }; + n = this.write(o, e, t6); + return { dataId: n, shape: e, dtype: t6 }; } refCount(e) { return this.data.has(e) ? this.data.get(e).refCount : 0; } incRef(e) { - let t10 = this.data.get(e); - t10.refCount++; + let t6 = this.data.get(e); + t6.refCount++; } decRef(e) { if (this.data.has(e)) { - let t10 = this.data.get(e); - t10.refCount--; + let t6 = this.data.get(e); + t6.refCount--; } } - move(e, t10, o, n, s) { - this.data.set(e, { values: t10, dtype: n, refCount: s }); + move(e, t6, o, n, s) { + this.data.set(e, { values: t6, dtype: n, refCount: s }); } numDataIds() { return this.data.numDataIds(); @@ -11554,30 +11600,30 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return this.readSync(e); } readSync(e) { - let { dtype: t10, complexTensorInfos: o } = this.data.get(e); - if (t10 === "complex64") { + let { dtype: t6, complexTensorInfos: o } = this.data.get(e); + if (t6 === "complex64") { let n = this.readSync(o.real.dataId), s = this.readSync(o.imag.dataId); - return I.mergeRealAndImagArrays(n, s); + return S.mergeRealAndImagArrays(n, s); } return this.data.get(e).values; } bufferSync(e) { - let t10 = this.readSync(e.dataId); + let t6 = this.readSync(e.dataId); if (e.dtype === "string") try { - let o = t10.map((n) => x.decodeString(n)); - return ne(e.shape, e.dtype, o); + let o = t6.map((n) => y.decodeString(n)); + return le(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ne(e.shape, e.dtype, t10); + return le(e.shape, e.dtype, t6); } - makeOutput(e, t10, o) { - return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t10, o, e), this); + makeOutput(e, t6, o) { + return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t6, o, e), this); } - disposeData(e, t10 = false) { + disposeData(e, t6 = false) { if (this.data.has(e)) { - if (this.data.get(e).refCount--, !t10 && this.data.get(e).refCount > 0) + if (this.data.get(e).refCount--, !t6 && this.data.get(e).refCount > 0) return false; let { complexTensorInfos: o } = this.data.get(e); o != null && (this.disposeData(o.real.dataId, true), this.disposeData(o.imag.dataId, true)), this.data.delete(e); @@ -11588,16 +11634,16 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram this.disposeData(e.dataId); } async time(e) { - let t10 = x.now(); - return e(), { kernelMs: x.now() - t10 }; + let t6 = y.now(); + return e(), { kernelMs: y.now() - t6 }; } memory() { return { unreliable: true, reasons: ["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."] }; } where(e) { K([e], "where"); - let t10 = this.readSync(e.dataId); - return K6(e.shape, t10); + let t6 = this.readSync(e.dataId); + return h6(e.shape, t6); } dispose() { } @@ -11608,137 +11654,137 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return super.epsilon(); } }; -Si.nextDataId = 0; -var Ad = {}; -Be(Ad, { addImpl: () => rI, bincountImpl: () => Zp, bincountReduceImpl: () => yd, castImpl: () => tI, ceilImpl: () => oI, concatImpl: () => Iu, equalImpl: () => nI, expImpl: () => aI, expm1Impl: () => uI, floorImpl: () => pI, gatherNdImpl: () => bd, gatherV2Impl: () => Cd, greaterEqualImpl: () => lI, greaterImpl: () => cI, lessEqualImpl: () => fI, lessImpl: () => mI, linSpaceImpl: () => Id, logImpl: () => dI, maxImpl: () => wd, maximumImpl: () => hI, minimumImpl: () => gI, multiplyImpl: () => Cl, negImpl: () => xI, notEqualImpl: () => yI, prodImpl: () => bI, raggedGatherImpl: () => Sd, raggedRangeImpl: () => vd, raggedTensorToTensorImpl: () => kd, rangeImpl: () => Su, rsqrtImpl: () => CI, scatterImpl: () => Aa, sigmoidImpl: () => e2, simpleAbsImpl: () => eI, sliceImpl: () => vu, sparseFillEmptyRowsImpl: () => Td, sparseReshapeImpl: () => Nd, sparseSegmentReductionImpl: () => tc, sqrtImpl: () => o2, squaredDifferenceImpl: () => wI, stridedSliceImpl: () => _d, stringNGramsImpl: () => ku, stringSplitImpl: () => Tu, stringToHashBucketFastImpl: () => Nu, subImpl: () => vI, tileImpl: () => Ed, topKImpl: () => $d, transposeImpl: () => Jp, uniqueImpl: () => Rd }); -function eI(r) { +Oi.nextDataId = 0; +var Qp = {}; +Ue(Qp, { addImpl: () => QC, bincountImpl: () => Kp, bincountReduceImpl: () => uf, castImpl: () => YC, ceilImpl: () => ZC, concatImpl: () => Su, equalImpl: () => JC, expImpl: () => tS, expm1Impl: () => oS, floorImpl: () => nS, gatherNdImpl: () => pf, gatherV2Impl: () => cf, greaterEqualImpl: () => aS, greaterImpl: () => sS, lessEqualImpl: () => uS, lessImpl: () => iS, linSpaceImpl: () => lf, logImpl: () => pS, maxImpl: () => mf, maximumImpl: () => cS, minimumImpl: () => lS, multiplyImpl: () => ml, negImpl: () => mS, notEqualImpl: () => dS, prodImpl: () => fS, raggedGatherImpl: () => df, raggedRangeImpl: () => ff, raggedTensorToTensorImpl: () => hf, rangeImpl: () => Iu, rsqrtImpl: () => hS, scatterImpl: () => Ma, sigmoidImpl: () => ET, simpleAbsImpl: () => XC, sliceImpl: () => vu, sparseFillEmptyRowsImpl: () => gf, sparseReshapeImpl: () => xf, sparseSegmentReductionImpl: () => Yp, sqrtImpl: () => RT, squaredDifferenceImpl: () => xS, stridedSliceImpl: () => yf, stringNGramsImpl: () => ku, stringSplitImpl: () => Nu, stringToHashBucketFastImpl: () => Tu, subImpl: () => bS, tileImpl: () => bf, topKImpl: () => Cf, transposeImpl: () => jp, uniqueImpl: () => Sf }); +function XC(r) { let e = new Float32Array(r.length); - for (let t10 = 0; t10 < r.length; ++t10) - e[t10] = Math.abs(r[t10]); + for (let t6 = 0; t6 < r.length; ++t6) + e[t6] = Math.abs(r[t6]); return e; } -var j6 = (r) => { - let { x: e } = r.inputs, t10 = r.backend; +var g6 = (r) => { + let { x: e } = r.inputs, t6 = r.backend; K(e, "abs"); - let o = new Float32Array(x.sizeFromShape(e.shape)), n = t10.data.get(e.dataId).values; - return o = eI(n), t10.makeOutput(o, e.shape, e.dtype); + let o = new Float32Array(y.sizeFromShape(e.shape)), n = t6.data.get(e.dataId).values; + return o = XC(n), t6.makeOutput(o, e.shape, e.dtype); }; -var TN = { kernelName: sn, backendName: "cpu", kernelFunc: j6 }; -function Le(r) { - return (e, t10, o, n, s) => { - let a = I.assertAndGetBroadcastShape(e, t10), i = a.length, p = x.computeStrides(a), u = x.sizeFromShape(a), c = x.getTypedArrayFromDType(s, u), l = e.length, m = t10.length, f = x.computeStrides(e), d = x.computeStrides(t10), h = I.getBroadcastDims(e, a), g = I.getBroadcastDims(t10, a); +var tT = { kernelName: gs, backendName: "cpu", kernelFunc: g6 }; +function Be(r) { + return (e, t6, o, n, s) => { + let a = S.assertAndGetBroadcastShape(e, t6), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), c = y.getTypedArrayFromDType(s, u), l = e.length, m = t6.length, d = y.computeStrides(e), f = y.computeStrides(t6), h = S.getBroadcastDims(e, a), g = S.getBroadcastDims(t6, a); if (h.length + g.length === 0) - for (let y = 0; y < c.length; ++y) - c[y] = r(o[y % o.length], n[y % n.length]); + for (let x = 0; x < c.length; ++x) + c[x] = r(o[x % o.length], n[x % n.length]); else - for (let y = 0; y < c.length; ++y) { - let b = x.indexToLoc(y, i, p), C = b.slice(-l); - h.forEach((E) => C[E] = 0); - let w = x.locToIndex(C, l, f), k = b.slice(-m); - g.forEach((E) => k[E] = 0); - let _ = x.locToIndex(k, m, d); - c[y] = r(o[w], n[_]); + for (let x = 0; x < c.length; ++x) { + let b = y.indexToLoc(x, i, p), C = b.slice(-l); + h.forEach(($) => C[$] = 0); + let w = y.locToIndex(C, l, d), k = b.slice(-m); + g.forEach(($) => k[$] = 0); + let _ = y.locToIndex(k, m, f); + c[x] = r(o[w], n[_]); } return [c, a]; }; } -function qt(r) { - let { inputs: e, backend: t10 } = r, { real: o, imag: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = t10.makeTensorInfo(o.shape, "complex64"), p = t10.data.get(i.dataId); - return p.complexTensorInfos = { real: t10.makeTensorInfo(o.shape, "float32", s), imag: t10.makeTensorInfo(n.shape, "float32", a) }, i; +function Ht(r) { + let { inputs: e, backend: t6 } = r, { real: o, imag: n } = e, s = t6.data.get(o.dataId).values, a = t6.data.get(n.dataId).values, i = t6.makeTensorInfo(o.shape, "complex64"), p = t6.data.get(i.dataId); + return p.complexTensorInfos = { real: t6.makeTensorInfo(o.shape, "float32", s), imag: t6.makeTensorInfo(n.shape, "float32", a) }, i; } -var NN = { kernelName: aa, backendName: "cpu", kernelFunc: qt }; -function Yp(r, e, t10 = "float32") { - if (t10 === "complex64") { - let n = Yp(r, e, "float32"), s = Yp(r, e, "float32"); - return qt({ inputs: { real: n, imag: s }, backend: r }); +var rT = { kernelName: ei, backendName: "cpu", kernelFunc: Ht }; +function Hp(r, e, t6 = "float32") { + if (t6 === "complex64") { + let n = Hp(r, e, "float32"), s = Hp(r, e, "float32"); + return Ht({ inputs: { real: n, imag: s }, backend: r }); } - let o = x.makeZerosTypedArray(x.sizeFromShape(e), t10); - return r.makeTensorInfo(e, t10, o); + let o = y.makeZerosTypedArray(y.sizeFromShape(e), t6); + return r.makeTensorInfo(e, t6, o); } function ar(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; + let { inputs: e, backend: t6 } = r, { x: o } = e; + return t6.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var _N = { kernelName: uo, backendName: "cpu", kernelFunc: ar }; -function Wo(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.real, s = t10.data.get(n.dataId).values; - return t10.makeTensorInfo(n.shape, n.dtype, s); +var oT = { kernelName: mo, backendName: "cpu", kernelFunc: ar }; +function wo(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.data.get(o.dataId).complexTensorInfos.real, s = t6.data.get(n.dataId).values; + return t6.makeTensorInfo(n.shape, n.dtype, s); } -var EN = { kernelName: la, backendName: "cpu", kernelFunc: Wo }; -function tI(r, e, t10, o) { +var nT = { kernelName: ai, backendName: "cpu", kernelFunc: wo }; +function YC(r, e, t6, o) { if (o === "int32") { let n = Int32Array.from(r); return [e, "int32", n]; } if (o === "bool") { - let n = x.toTypedArray([0], t10), [s, a] = Le((i, p) => i !== p ? 1 : 0)(e, [], r, n, "bool"); + let n = y.toTypedArray([0], t6), [s, a] = Be((i, p) => i !== p ? 1 : 0)(e, [], r, n, "bool"); return [a, "bool", s]; } - throw new Error(`Error in Cast: failed to cast ${t10} to ${o}`); + throw new Error(`Error in Cast: failed to cast ${t6} to ${o}`); } -function Uo(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dtype: s } = o; +function Io(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return ar({ inputs: { x: n }, backend: t10 }); - let c = Yp(t10, n.shape, n.dtype), l = Uo({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = qt({ inputs: { real: l, imag: c }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), m; + return ar({ inputs: { x: n }, backend: t6 }); + let c = Hp(t6, n.shape, n.dtype), l = Io({ inputs: { x: n }, backend: t6, attrs: { dtype: "float32" } }), m = Ht({ inputs: { real: l, imag: c }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(c), t6.disposeIntermediateTensorInfo(l), m; } if (n.dtype === "complex64") { - let c = Wo({ inputs: { input: n }, backend: t10 }), l = Uo({ inputs: { x: c }, backend: t10, attrs: { dtype: s } }); - return t10.disposeIntermediateTensorInfo(c), l; + let c = wo({ inputs: { input: n }, backend: t6 }), l = Io({ inputs: { x: c }, backend: t6, attrs: { dtype: s } }); + return t6.disposeIntermediateTensorInfo(c), l; } - if (!x.hasEncodingLoss(n.dtype, s)) { - let c = ar({ inputs: { x: n }, backend: t10 }); + if (!y.hasEncodingLoss(n.dtype, s)) { + let c = ar({ inputs: { x: n }, backend: t6 }); return { dataId: c.dataId, shape: c.shape, dtype: s }; } - let a = t10.data.get(n.dataId).values, [i, p, u] = tI(a, n.shape, n.dtype, s); - return t10.makeTensorInfo(i, p, u); + let a = t6.data.get(n.dataId).values, [i, p, u] = YC(a, n.shape, n.dtype, s); + return t6.makeTensorInfo(i, p, u); } -var $N = { kernelName: to, backendName: "cpu", kernelFunc: Uo }; -function Ye(r, e, t10, o) { - return t10 == null ? ({ inputs: n, backend: s }) => { +var sT = { kernelName: co, backendName: "cpu", kernelFunc: Io }; +function Qe(r, e, t6, o) { + return t6 == null ? ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; K([a, i], r); - let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = a.dtype === "string" ? I.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? I.fromUint8ToStringArray(c) : c, f = o || a.dtype, [d, h] = e(a.shape, i.shape, l, m, f); - return p.makeTensorInfo(h, f, d); + let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = a.dtype === "string" ? S.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? S.fromUint8ToStringArray(c) : c, d = o || a.dtype, [f, h] = e(a.shape, i.shape, l, m, d); + return p.makeTensorInfo(h, d, f); } : ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; if (a.dtype === "complex64" || i.dtype === "complex64") { - let u = Uo({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), c = p.data.get(u.dataId), l = c.complexTensorInfos.real, m = c.complexTensorInfos.imag, f = p.data.get(l.dataId).values, d = p.data.get(m.dataId).values, h = Uo({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), y = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, C = p.data.get(y.dataId).values, w = p.data.get(b.dataId).values, [k, _, E] = t10(a.shape, i.shape, f, d, C, w), R = p.makeTensorInfo(E, "float32", k), A = p.makeTensorInfo(E, "float32", _), D = qt({ inputs: { real: R, imag: A }, backend: p }); - return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(R), p.disposeIntermediateTensorInfo(A), D; + let u = Io({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), c = p.data.get(u.dataId), l = c.complexTensorInfos.real, m = c.complexTensorInfos.imag, d = p.data.get(l.dataId).values, f = p.data.get(m.dataId).values, h = Io({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), x = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, C = p.data.get(x.dataId).values, w = p.data.get(b.dataId).values, [k, _, $] = t6(a.shape, i.shape, d, f, C, w), A = p.makeTensorInfo($, "float32", k), R = p.makeTensorInfo($, "float32", _), D = Ht({ inputs: { real: A, imag: R }, backend: p }); + return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(A), p.disposeIntermediateTensorInfo(R), D; } else { - let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = o || a.dtype, [m, f] = e(a.shape, i.shape, u, c, l); - return p.makeTensorInfo(f, l, m); + let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = o || a.dtype, [m, d] = e(a.shape, i.shape, u, c, l); + return p.makeTensorInfo(d, l, m); } }; } -function Qp(r) { - return (e, t10, o, n, s, a) => { - let i = I.assertAndGetBroadcastShape(e, t10), p = x.sizeFromShape(i), u = i.length, c = x.computeStrides(i), l = x.getTypedArrayFromDType("float32", p), m = x.getTypedArrayFromDType("float32", p), f = I.getBroadcastDims(e, i), d = I.getBroadcastDims(t10, i), h = I.mergeRealAndImagArrays(o, n), g = I.mergeRealAndImagArrays(s, a), y = e.length, b = x.computeStrides(e), C = t10.length, w = x.computeStrides(t10); - if (f.length + d.length === 0) +function qp(r) { + return (e, t6, o, n, s, a) => { + let i = S.assertAndGetBroadcastShape(e, t6), p = y.sizeFromShape(i), u = i.length, c = y.computeStrides(i), l = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = S.getBroadcastDims(e, i), f = S.getBroadcastDims(t6, i), h = S.mergeRealAndImagArrays(o, n), g = S.mergeRealAndImagArrays(s, a), x = e.length, b = y.computeStrides(e), C = t6.length, w = y.computeStrides(t6); + if (d.length + f.length === 0) for (let k = 0; k < l.length; k++) { - let _ = k % h.length, E = k % g.length, R = r(h[_ * 2], h[_ * 2 + 1], g[E * 2], g[E * 2 + 1]); - l[k] = R.real, m[k] = R.imag; + let _ = k % h.length, $ = k % g.length, A = r(h[_ * 2], h[_ * 2 + 1], g[$ * 2], g[$ * 2 + 1]); + l[k] = A.real, m[k] = A.imag; } else for (let k = 0; k < l.length; k++) { - let _ = x.indexToLoc(k, u, c), E = _.slice(-y); - f.forEach((M) => E[M] = 0); - let R = x.locToIndex(E, y, b), A = _.slice(-C); - d.forEach((M) => A[M] = 0); - let D = x.locToIndex(A, C, w), O = r(h[R * 2], h[R * 2 + 1], g[D * 2], g[D * 2 + 1]); - l[k] = O.real, m[k] = O.imag; + let _ = y.indexToLoc(k, u, c), $ = _.slice(-x); + d.forEach((M) => $[M] = 0); + let A = y.locToIndex($, x, b), R = _.slice(-C); + f.forEach((M) => R[M] = 0); + let D = y.locToIndex(R, C, w), P = r(h[A * 2], h[A * 2 + 1], g[D * 2], g[D * 2 + 1]); + l[k] = P.real, m[k] = P.imag; } return [l, m, i]; }; } -var rI = Le((r, e) => r + e); -var X6 = Qp((r, e, t10, o) => ({ real: r + t10, imag: e + o })); -var Hs = Ye(_r, rI, X6); -var RN = { kernelName: _r, backendName: "cpu", kernelFunc: Hs }; -function Zp(r, e, t10, o, n) { - let s = x.sizeFromShape(o), a = x.makeZerosTypedArray(n, t10); +var QC = Be((r, e) => r + e); +var x6 = qp((r, e, t6, o) => ({ real: r + t6, imag: e + o })); +var js = Qe(eo, QC, x6); +var aT = { kernelName: eo, backendName: "cpu", kernelFunc: js }; +function Kp(r, e, t6, o, n) { + let s = y.sizeFromShape(o), a = y.makeZerosTypedArray(n, t6); for (let i = 0; i < r.length; i++) { let p = r[i]; if (p < 0) @@ -11747,60 +11793,60 @@ function Zp(r, e, t10, o, n) { } return a; } -function yd(r, e, t10, o = false) { - let n = r.shape[0], s = r.shape[1], a = ne([n, t10], e.dtype); +function uf(r, e, t6, o = false) { + let n = r.shape[0], s = r.shape[1], a = le([n, t6], e.dtype); for (let i = 0; i < n; i++) for (let p = 0; p < s; p++) { let u = r.get(i, p); if (u < 0) throw new Error("Input x must be non-negative!"); - u >= t10 || (o ? a.set(1, i, u) : e.size > 0 ? a.set(a.get(i, u) + e.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); + u >= t6 || (o ? a.set(1, i, u) : e.size > 0 ? a.set(a.get(i, u) + e.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); } return a; } function vr(r) { - return (e, t10, o) => { - let n = x.getTypedArrayFromDType(t10, e.length); + return (e, t6, o) => { + let n = y.getTypedArrayFromDType(t6, e.length); for (let s = 0; s < e.length; ++s) n[s] = r(e[s], o); return n; }; } -function we(r, e, t10) { +function Ie(r, e, t6) { return ({ inputs: o, attrs: n, backend: s }) => { let { x: a } = o; - if (K(a, r), a.dtype === "string" || t10 === "string") + if (K(a, r), a.dtype === "string" || t6 === "string") throw new Error("unaryKernelFunc does not support string input/output"); - let i = s, p = i.data.get(a.dataId).values, u = x.sizeFromShape(a.shape), c = t10 || a.dtype, l = x.getArrayFromDType(c, u); + let i = s, p = i.data.get(a.dataId).values, u = y.sizeFromShape(a.shape), c = t6 || a.dtype, l = y.getArrayFromDType(c, u); for (let m = 0; m < u; ++m) l[m] = e(p[m], n); return i.makeTensorInfo(a.shape, c, l); }; } -function Go(r, e, t10) { +function vo(r, e, t6) { return ({ inputs: o, attrs: n, backend: s }) => { let { x: a } = o; - if (K(a, r), a.dtype === "string" || t10 === "string") + if (K(a, r), a.dtype === "string" || t6 === "string") throw new Error("unaryKernelFunc does not support string input/output"); - let i = s, p = i.data.get(a.dataId).values, u = t10 || a.dtype, c = e(p, u, n); + let i = s, p = i.data.get(a.dataId).values, u = t6 || a.dtype, c = e(p, u, n); return i.makeTensorInfo(a.shape, u, c); }; } -var oI = vr((r) => Math.ceil(r)); -var Y6 = Go(ro, oI); -var AN = { kernelName: ro, backendName: "cpu", kernelFunc: Y6 }; -function Iu(r, e, t10, o) { - let n = x.getArrayFromDType(t10, x.sizeFromShape(e)); - if (o && t10 !== "string") { +var ZC = vr((r) => Math.ceil(r)); +var y6 = vo(Uo, ZC); +var iT = { kernelName: Uo, backendName: "cpu", kernelFunc: y6 }; +function Su(r, e, t6, o) { + let n = y.getArrayFromDType(t6, y.sizeFromShape(e)); + if (o && t6 !== "string") { let s = 0; r.forEach((a) => { - let i = x.sizeFromShape(a.shape); + let i = y.sizeFromShape(a.shape); n.set(a.vals, s), s += i; }); } else { let s = 0; r.forEach((a) => { - let i = t10 === "string" ? I.fromUint8ToStringArray(a.vals) : a.vals, p = 0; + let i = t6 === "string" ? S.fromUint8ToStringArray(a.vals) : a.vals, p = 0; for (let u = 0; u < a.shape[0]; ++u) { let c = u * e[1] + s; for (let l = 0; l < a.shape[1]; ++l) @@ -11811,35 +11857,35 @@ function Iu(r, e, t10, o) { } return n; } -var nI = Le((r, e) => r === e ? 1 : 0); -var sI = Ye(oo, nI, null, "bool"); -var FN = { kernelName: oo, backendName: "cpu", kernelFunc: sI }; -var aI = vr((r) => Math.exp(r)); -var iI = Go(no, aI, "float32"); -var DN = { kernelName: no, backendName: "cpu", kernelFunc: iI }; -var uI = vr((r) => Math.expm1(r)); -var Q6 = Go(wn, uI); -var PN = { kernelName: wn, backendName: "cpu", kernelFunc: Q6 }; -var pI = vr((r) => Math.floor(r)); -var Z6 = Go(so, pI); -var ON = { kernelName: so, backendName: "cpu", kernelFunc: Z6 }; -function bd(r, e, t10, o, n, s, a, i, p) { - let u = ne([o, s], t10); +var JC = Be((r, e) => r === e ? 1 : 0); +var eS = Qe(tn, JC, null, "bool"); +var uT = { kernelName: tn, backendName: "cpu", kernelFunc: eS }; +var tS = vr((r) => Math.exp(r)); +var rS = vo(rn, tS, "float32"); +var pT = { kernelName: rn, backendName: "cpu", kernelFunc: rS }; +var oS = vr((r) => Math.expm1(r)); +var b6 = vo(da, oS); +var cT = { kernelName: da, backendName: "cpu", kernelFunc: b6 }; +var nS = vr((r) => Math.floor(r)); +var C6 = vo(nn, nS); +var lT = { kernelName: nn, backendName: "cpu", kernelFunc: C6 }; +function pf(r, e, t6, o, n, s, a, i, p) { + let u = le([o, s], t6); for (let c = 0; c < o; c++) { let l = [], m = 0; - for (let f = 0; f < n; f++) { - let d = r[c * n + f]; - m += d * a[f], l.push(d); + for (let d = 0; d < n; d++) { + let f = r[c * n + d]; + m += f * a[d], l.push(f); } if (m < 0 || m >= p / s) throw new Error(`Invalid indices: ${l} does not index into ${i}`); - for (let f = 0; f < s; f++) - u.values[c * s + f] = e.get(...e.indexToLoc(m * s + f)); + for (let d = 0; d < s; d++) + u.values[c * s + d] = e.get(...e.indexToLoc(m * s + d)); } return u; } -function Cd(r, e, t10) { - let o = ne(t10, r.dtype); +function cf(r, e, t6) { + let o = le(t6, r.dtype); for (let n = 0; n < o.size; ++n) { let a = o.indexToLoc(n).slice(), i = a[0], p = a[2], u = e.locToIndex([i, p]); a[2] = e.values[u]; @@ -11848,30 +11894,30 @@ function Cd(r, e, t10) { } return o; } -var cI = Le((r, e) => r > e ? 1 : 0); -var J6 = Ye(ao, cI, null, "bool"); -var MN = { kernelName: ao, backendName: "cpu", kernelFunc: J6 }; -var lI = Le((r, e) => r >= e ? 1 : 0); -var ej = Ye(io, lI, null, "bool"); -var LN = { kernelName: io, backendName: "cpu", kernelFunc: ej }; -var mI = Le((r, e) => r < e ? 1 : 0); -var tj = Ye(po, mI, null, "bool"); -var BN = { kernelName: po, backendName: "cpu", kernelFunc: tj }; -var fI = Le((r, e) => r <= e ? 1 : 0); -var rj = Ye(co, fI, null, "bool"); -var VN = { kernelName: co, backendName: "cpu", kernelFunc: rj }; -function Id(r, e, t10) { - let o = (e - r) / (t10 - 1), n = x.makeZerosTypedArray(t10, "float32"); +var sS = Be((r, e) => r > e ? 1 : 0); +var S6 = Qe(pn, sS, null, "bool"); +var mT = { kernelName: pn, backendName: "cpu", kernelFunc: S6 }; +var aS = Be((r, e) => r >= e ? 1 : 0); +var w6 = Qe(cn, aS, null, "bool"); +var dT = { kernelName: cn, backendName: "cpu", kernelFunc: w6 }; +var iS = Be((r, e) => r < e ? 1 : 0); +var I6 = Qe(dn, iS, null, "bool"); +var fT = { kernelName: dn, backendName: "cpu", kernelFunc: I6 }; +var uS = Be((r, e) => r <= e ? 1 : 0); +var v6 = Qe(fn, uS, null, "bool"); +var hT = { kernelName: fn, backendName: "cpu", kernelFunc: v6 }; +function lf(r, e, t6) { + let o = (e - r) / (t6 - 1), n = y.makeZerosTypedArray(t6, "float32"); n[0] = r; for (let s = 1; s < n.length; s++) n[s] = n[s - 1] + o; return n; } -var dI = vr((r) => Math.log(r)); -var oj = Go(lo, dI); -var zN = { kernelName: lo, backendName: "cpu", kernelFunc: oj }; -function wd(r, e, t10, o) { - let n = x.getTypedArrayFromDType(o, x.sizeFromShape(t10)); +var pS = vr((r) => Math.log(r)); +var k6 = vo(hn, pS); +var gT = { kernelName: hn, backendName: "cpu", kernelFunc: k6 }; +function mf(r, e, t6, o) { + let n = y.getTypedArrayFromDType(o, y.sizeFromShape(t6)); for (let s = 0; s < n.length; ++s) { let a = s * e, i = r[a]; for (let p = 0; p < e; ++p) { @@ -11882,81 +11928,81 @@ function wd(r, e, t10, o) { } return n; } -var hI = Le((r, e) => Math.max(r, e)); -var nj = Ye(mo, hI); -var WN = { kernelName: mo, backendName: "cpu", kernelFunc: nj }; -var gI = Le((r, e) => Math.min(r, e)); -var sj = Ye(fo, gI); -var UN = { kernelName: fo, backendName: "cpu", kernelFunc: sj }; -var Cl = Le((r, e) => r * e); -var aj = Qp((r, e, t10, o) => ({ real: r * t10 - e * o, imag: r * o + e * t10 })); -var wu = Ye(ho, Cl, aj); -var GN = { kernelName: ho, backendName: "cpu", kernelFunc: wu }; -function xI(r, e, t10) { - let o = x.createScalarValue(-1, t10); - return Cl([], e, o, r, t10); +var cS = Be((r, e) => Math.max(r, e)); +var N6 = Qe(bn, cS); +var xT = { kernelName: bn, backendName: "cpu", kernelFunc: N6 }; +var lS = Be((r, e) => Math.min(r, e)); +var T6 = Qe(In, lS); +var yT = { kernelName: In, backendName: "cpu", kernelFunc: T6 }; +var ml = Be((r, e) => r * e); +var _6 = qp((r, e, t6, o) => ({ real: r * t6 - e * o, imag: r * o + e * t6 })); +var wu = Qe(kn, ml, _6); +var bT = { kernelName: kn, backendName: "cpu", kernelFunc: wu }; +function mS(r, e, t6) { + let o = y.createScalarValue(-1, t6); + return ml([], e, o, r, t6); } -function ij(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +function E6(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; K(o, "neg"); - let n = t10.data.get(o.dataId).values, [s, a] = xI(n, o.shape, o.dtype); - return t10.makeTensorInfo(a, o.dtype, s); + let n = t6.data.get(o.dataId).values, [s, a] = mS(n, o.shape, o.dtype); + return t6.makeTensorInfo(a, o.dtype, s); } -var HN = { kernelName: Pn, backendName: "cpu", kernelFunc: ij }; -var yI = Le((r, e) => r !== e ? 1 : 0); -var uj = Ye(go, yI, null, "bool"); -var qN = { kernelName: go, backendName: "cpu", kernelFunc: uj }; -function Jp(r, e, t10, o, n) { - let s = e.length, a = x.sizeFromShape(e), i = x.computeStrides(e), p = x.computeStrides(n), u = x.getTypedArrayFromDType(t10, x.sizeFromShape(n)); +var CT = { kernelName: ws, backendName: "cpu", kernelFunc: E6 }; +var dS = Be((r, e) => r !== e ? 1 : 0); +var $6 = Qe(Nn, dS, null, "bool"); +var ST = { kernelName: Nn, backendName: "cpu", kernelFunc: $6 }; +function jp(r, e, t6, o, n) { + let s = e.length, a = y.sizeFromShape(e), i = y.computeStrides(e), p = y.computeStrides(n), u = y.getTypedArrayFromDType(t6, y.sizeFromShape(n)); for (let c = 0; c < a; ++c) { - let l = x.indexToLoc(c, s, i), m = new Array(l.length); - for (let d = 0; d < m.length; d++) - m[d] = l[o[d]]; - let f = x.locToIndex(m, s, p); - u[f] = r[c]; + let l = y.indexToLoc(c, s, i), m = new Array(l.length); + for (let f = 0; f < m.length; f++) + m[f] = l[o[f]]; + let d = y.locToIndex(m, s, p); + u[d] = r[c]; } return u; } -function bt(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n } = e, { perm: s } = t10; +function Ct(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n } = e, { perm: s } = t6; K(n, "transpose"); let a = n.shape.length, i = new Array(a); for (let l = 0; l < i.length; l++) i[l] = n.shape[s[l]]; - let p = o.data.get(n.dataId).values, u = Jp(p, n.shape, n.dtype, s, i); + let p = o.data.get(n.dataId).values, u = jp(p, n.shape, n.dtype, s, i); return { dataId: o.write(u, i, n.dtype), shape: i, dtype: n.dtype }; } -var KN = { kernelName: Mr, backendName: "cpu", kernelFunc: bt }; -function bI(r, e, t10, o) { - let [n, s] = I.computeOutAndReduceShapes(r, o), a = ct(e, "int32"), i = x.makeZerosTypedArray(x.sizeFromShape(n), a), p = x.sizeFromShape(s); +var wT = { kernelName: ro, backendName: "cpu", kernelFunc: Ct }; +function fS(r, e, t6, o) { + let [n, s] = S.computeOutAndReduceShapes(r, o), a = dt(e, "int32"), i = y.makeZerosTypedArray(y.sizeFromShape(n), a), p = y.sizeFromShape(s); for (let u = 0; u < i.length; ++u) { let c = u * p, l = 1; for (let m = 0; m < p; ++m) - l *= t10[c + m]; + l *= t6[c + m]; i[u] = l; } return { outVals: i, outShape: n, outDtype: a }; } -function pj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; +function A6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; K(n, "prod"); - let i = n.shape.length, p = x.parseAxisParam(s, n.shape), u = I.getAxesPermutation(p, i), c = p, l = n, m = []; - u != null && (l = bt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), m.push(l), c = I.getInnerMostAxes(c.length, i)); - let f = t10.data.get(l.dataId).values, { outVals: d, outShape: h, outDtype: g } = bI(l.shape, l.dtype, f, c), y = h; - return a && (y = I.expandShapeToKeepDim(h, p)), m.forEach((b) => t10.disposeIntermediateTensorInfo(b)), t10.makeTensorInfo(y, g, d); + let i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = S.getAxesPermutation(p, i), c = p, l = n, m = []; + u != null && (l = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: u } }), m.push(l), c = S.getInnerMostAxes(c.length, i)); + let d = t6.data.get(l.dataId).values, { outVals: f, outShape: h, outDtype: g } = fS(l.shape, l.dtype, d, c), x = h; + return a && (x = S.expandShapeToKeepDim(h, p)), m.forEach((b) => t6.disposeIntermediateTensorInfo(b)), t6.makeTensorInfo(x, g, f); } -var jN = { kernelName: Ao, backendName: "cpu", kernelFunc: pj }; -function cj(r, e, t10) { +var IT = { kernelName: Fn, backendName: "cpu", kernelFunc: A6 }; +function R6(r, e, t6) { r.forEach((o, n) => { - if (o < 0 || o >= t10) { - let s = x.indexToLoc(n, e.length, x.computeStrides(e)).join(","); - throw new Error(`indices[${s}] = ${o} is not in [0, ${t10})`); + if (o < 0 || o >= t6) { + let s = y.indexToLoc(n, e.length, y.computeStrides(e)).join(","); + throw new Error(`indices[${s}] = ${o} is not in [0, ${t6})`); } }); } -function lj(r, e) { - for (let t10 = 0; t10 < r.length; ++t10) { - let o = r[t10], n = t10 === r.length - 1 ? e : r[t10 + 1].length; +function F6(r, e) { + for (let t6 = 0; t6 < r.length; ++t6) { + let o = r[t6], n = t6 === r.length - 1 ? e : r[t6 + 1].length; if (o.length === 0) throw new Error("Ragged splits may not be empty"); if (o[0] < 0) @@ -11968,9 +12014,9 @@ function lj(r, e) { throw new Error("Ragged splits must be sorted in ascending order"); } } -function mj(r, e, t10, o) { - let n = [], s = 0, a = e.length - 1 + t10.length, i = new Array(a).fill(null).map(() => [0]); - lj(t10, o); +function D6(r, e, t6, o) { + let n = [], s = 0, a = e.length - 1 + t6.length, i = new Array(a).fill(null).map(() => [0]); + F6(t6, o); let p = 1; for (let u = 0; u < e.length - 1; ++u) { p *= e[u]; @@ -11980,63 +12026,63 @@ function mj(r, e, t10, o) { } for (let u = 0; u < r.length; ++u) { let c = r[u], l = r[u] + 1; - for (let m = 0; m < t10.length; ++m) { - let f = t10[m], d = m + e.length - 1; - if (d >= 0) { - let h = i[d], g = h[h.length - 1] - f[c]; - for (let y = c; y < l; ++y) - i[d].push(f[y + 1] + g); + for (let m = 0; m < t6.length; ++m) { + let d = t6[m], f = m + e.length - 1; + if (f >= 0) { + let h = i[f], g = h[h.length - 1] - d[c]; + for (let x = c; x < l; ++x) + i[f].push(d[x + 1] + g); } - c = f[c], l = f[l]; + c = d[c], l = d[l]; } l !== c && (n.push([c, l]), s += l - c); } return { outSplits: i, valueSlices: n, numValues: s }; } -function fj(r) { +function O6(r) { let e = []; - for (let t10 = 0; t10 < r.length; ++t10) { - let o = r[t10].length, n = x.getArrayFromDType("int32", o); - e.push(n), r[t10].forEach((s, a) => n[a] = s); + for (let t6 = 0; t6 < r.length; ++t6) { + let o = r[t6].length, n = y.getArrayFromDType("int32", o); + e.push(n), r[t6].forEach((s, a) => n[a] = s); } return e; } -function XN(r, e) { - let t10 = r.slice(0, e); - for (; t10.length < e; ) - t10.push(1); +function vT(r, e) { + let t6 = r.slice(0, e); + for (; t6.length < e; ) + t6.push(1); for (let o = e; o < r.length; o++) - t10[e - 1] *= r[o]; - return t10; + t6[e - 1] *= r[o]; + return t6; } -function dj(r, e, t10, o, n, s) { - let a = XN(e, 2)[1], i = XN(s, 2)[1], p = 0; - for (let u of t10) +function P6(r, e, t6, o, n, s) { + let a = vT(e, 2)[1], i = vT(s, 2)[1], p = 0; + for (let u of t6) for (let c = u[0]; c < u[1]; ++c) { for (let l = 0; l < o; ++l) n[p * i + l] = r[c * a + l]; ++p; } } -function hj(r, e, t10, o, n) { +function M6(r, e, t6, o, n) { let s = e.slice(); s[0] = n; - let a = x.getArrayFromDType(t10, x.sizeFromShape(s)), i = r.length, p = i === 0 ? 0 : i / e[0]; - return dj(r, e, o, p, a, s), [a, s]; + let a = y.getArrayFromDType(t6, y.sizeFromShape(s)), i = r.length, p = i === 0 ? 0 : i / e[0]; + return P6(r, e, o, p, a, s), [a, s]; } -function Sd(r, e, t10, o, n, s, a, i) { +function df(r, e, t6, o, n, s, a, i) { if (r.length === 0) throw new Error("paramsNestedSplits must be non empty"); if (e[0].length === 0) throw new Error("Split tensors must not be scalars"); let p = e[0][0] - 1; - if (cj(s, a, p), o.length === 0) + if (R6(s, a, p), o.length === 0) throw new Error("params.rank must be nonzero"); - let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = mj(s, a, r, u), f = fj(c), d = hj(t10, o, n, l, m); - return [f, d[0], d[1]]; + let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = D6(s, a, r, u), d = O6(c), f = M6(t6, o, n, l, m); + return [d, f[0], f[1]]; } -var YN = 2147483647; -function vd(r, e, t10, o, n, s, a) { +var kT = 2147483647; +function ff(r, e, t6, o, n, s, a) { if (e.length > 1) throw new Error("starts must be a scalar or vector"); if (n.length > 1) @@ -12048,100 +12094,100 @@ function vd(r, e, t10, o, n, s, a) { for (let g = 1; g < c.length; ++g) if (c[g] !== c[g - 1]) throw new Error("starts, limits, and deltas must have the same shape"); - let l = c.length === 0 ? 1 : c[0], m = x.getArrayFromDType("int32", l + 1); + let l = c.length === 0 ? 1 : c[0], m = y.getArrayFromDType("int32", l + 1); m[0] = 0; for (let g = 0; g < l; ++g) { - let y = i ? r[0] : r[g], b = p ? o[0] : o[g], C = u ? s[0] : s[g]; + let x = i ? r[0] : r[g], b = p ? o[0] : o[g], C = u ? s[0] : s[g]; if (C === 0) throw new Error("Requires delta != 0"); let w; - if (C > 0 && b < y || C < 0 && b > y) + if (C > 0 && b < x || C < 0 && b > x) w = 0; - else if (w = Math.ceil(Math.abs((b - y) / C)), w > YN) - throw new Error(`Requires ((limit - start) / delta) <= ${YN}`); + else if (w = Math.ceil(Math.abs((b - x) / C)), w > kT) + throw new Error(`Requires ((limit - start) / delta) <= ${kT}`); m[g + 1] = m[g] + w; } - let f = m[l], d = x.getArrayFromDType(t10, f), h = 0; + let d = m[l], f = y.getArrayFromDType(t6, d), h = 0; for (let g = 0; g < l; ++g) { - let y = m[g + 1] - m[g], b = i ? r[0] : r[g], C = u ? s[0] : s[g]; - for (let w = 0; w < y; ++w) - d[h++] = b, b += C; + let x = m[g + 1] - m[g], b = i ? r[0] : r[g], C = u ? s[0] : s[g]; + for (let w = 0; w < x; ++w) + f[h++] = b, b += C; } - return [m, d]; + return [m, f]; } -var Ho = I.RowPartitionType; -var ec = class { - constructor(e, t10, o, n, s, a, i, p, u, c) { - this.shape = e, this.shapeShape = t10, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = I.getRowPartitionTypesHelper(c), this.raggedRank = I.getRaggedRank(this.rowPartitionTypes); +var ko = S.RowPartitionType; +var Xp = class { + constructor(e, t6, o, n, s, a, i, p, u, c) { + this.shape = e, this.shapeShape = t6, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = S.getRowPartitionTypesHelper(c), this.raggedRank = S.getRaggedRank(this.rowPartitionTypes); } getRowPartitionTypeByDimension(e) { - return this.rowPartitionTypes[0] === Ho.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; + return this.rowPartitionTypes[0] === ko.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; } getRowPartitionTensor(e) { - return this.rowPartitionTypes[0] === Ho.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; + return this.rowPartitionTypes[0] === ko.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; } getMaxWidth(e) { - let t10 = this.getRowPartitionTensor(e - 1); + let t6 = this.getRowPartitionTensor(e - 1); switch (this.getRowPartitionTypeByDimension(e - 1)) { - case Ho.VALUE_ROWIDS: - return ec.getMaxWidthValueRowID(t10); - case Ho.ROW_SPLITS: - return ec.getMaxWidthRowSplit(t10); + case ko.VALUE_ROWIDS: + return Xp.getMaxWidthValueRowID(t6); + case ko.ROW_SPLITS: + return Xp.getMaxWidthRowSplit(t6); default: - throw new Error(`Cannot handle partition type ${Ho[this.getRowPartitionTypeByDimension(e - 1)]}`); + throw new Error(`Cannot handle partition type ${ko[this.getRowPartitionTypeByDimension(e - 1)]}`); } } static getMaxWidthRowSplit(e) { - let t10 = e.length; - if (t10 === 0 || t10 === 1) + let t6 = e.length; + if (t6 === 0 || t6 === 1) return 0; let o = 0; - for (let n = 0; n < t10 - 1; ++n) { + for (let n = 0; n < t6 - 1; ++n) { let s = e[n + 1] - e[n]; s > o && (o = s); } return o; } static getMaxWidthValueRowID(e) { - let t10 = e.length; - if (t10 === 0) + let t6 = e.length; + if (t6 === 0) return 0; let o = 0, n = e[0], s = 0; - for (let a = 1; a < t10; ++a) { + for (let a = 1; a < t6; ++a) { let i = e[a]; i !== n && (n = i, s = Math.max(a - o, s), o = a); } - return Math.max(t10 - o, s); + return Math.max(t6 - o, s); } - tensorShapeFromTensor(e, t10, o = true) { - if (t10.length === 0) { + tensorShapeFromTensor(e, t6, o = true) { + if (t6.length === 0) { if (e[0] === -1) return []; throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); } - return ZN(e, o); + return TT(e, o); } calculateOutputSize(e) { - let t10 = this.valuesShape, o = this.defaultValueShape; - I.validateDefaultValueShape(o, t10); - let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = I.combineRaggedTensorToTensorShapes(this.raggedRank, n, t10); + let t6 = this.valuesShape, o = this.defaultValueShape; + S.validateDefaultValueShape(o, t6); + let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = S.combineRaggedTensorToTensorShapes(this.raggedRank, n, t6); a[0] < 0 && (a[0] = e); for (let i = 1; i <= this.raggedRank; ++i) a[i] < 0 && (a[i] = this.getMaxWidth(i)); return a; } - calculateFirstParentOutputIndex(e, t10, o) { + calculateFirstParentOutputIndex(e, t6, o) { let n = Math.min(e, o), s = [], a = 0; - for (let i = 0; i < n; ++i, a += t10) + for (let i = 0; i < n; ++i, a += t6) s.push(a); for (let i = n; i < e; ++i) s.push(-1); - return x.assert(s.length === e, () => "Final length of result must be equal to firstDimension."), s; + return y.assert(s.length === e, () => "Final length of result must be equal to firstDimension."), s; } - calculateOutputIndexRowSplit(e, t10, o, n) { + calculateOutputIndexRowSplit(e, t6, o, n) { let s = e.length, a = []; for (let i = 0; i < s - 1; ++i) { - let p = e[i + 1] - e[i], u = Math.min(n, p), c = t10[i]; + let p = e[i + 1] - e[i], u = Math.min(n, p), c = t6[i]; c === -1 && (u = 0); for (let l = 0; l < u; ++l) a.push(c), c += o; @@ -12152,23 +12198,23 @@ var ec = class { throw new Error("Invalid row split size."); return a; } - calculateOutputIndexValueRowID(e, t10, o, n) { + calculateOutputIndexValueRowID(e, t6, o, n) { let s = e.length, a = []; if (s === 0) return []; let i = 0, p = e[0]; - if (p >= t10.length) - throw new Error(`Got currentValueRowId=${p}, which is not less than ${t10.length}`); - let u = t10[p]; + if (p >= t6.length) + throw new Error(`Got currentValueRowId=${p}, which is not less than ${t6.length}`); + let u = t6[p]; a.push(u); for (let c = 1; c < s; ++c) { let l = e[c]; if (l === p) u >= 0 && (++i, i < n ? u += o : u = -1); else { - if (i = 0, p = l, l >= t10.length) - throw new Error(`Got nextValueRowId=${l} which is not less than ${t10.length}`); - u = t10[l]; + if (i = 0, p = l, l >= t6.length) + throw new Error(`Got nextValueRowId=${l} which is not less than ${t6.length}`); + u = t6[l]; } a.push(u); } @@ -12176,97 +12222,97 @@ var ec = class { throw new Error("Invalid row ids."); return a; } - calculateOutputIndex(e, t10, o, n) { + calculateOutputIndex(e, t6, o, n) { let s = this.getRowPartitionTensor(e), a = this.getRowPartitionTypeByDimension(e); switch (a) { - case Ho.VALUE_ROWIDS: - return this.calculateOutputIndexValueRowID(s, t10, o, n); - case Ho.ROW_SPLITS: - if (s.length - 1 > t10.length) - throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t10.length}`); - return this.calculateOutputIndexRowSplit(s, t10, o, n); + case ko.VALUE_ROWIDS: + return this.calculateOutputIndexValueRowID(s, t6, o, n); + case ko.ROW_SPLITS: + if (s.length - 1 > t6.length) + throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t6.length}`); + return this.calculateOutputIndexRowSplit(s, t6, o, n); default: - throw new Error(`Unsupported partition type: ${Ho[a]}`); + throw new Error(`Unsupported partition type: ${ko[a]}`); } } getFirstDimensionSize() { let e = this.rowPartitionValues[0]; if (this.rowPartitionTypes.length === 0) throw new Error("No row_partition_types given."); - let t10 = this.rowPartitionTypes[0]; - switch (t10) { - case Ho.FIRST_DIM_SIZE: + let t6 = this.rowPartitionTypes[0]; + switch (t6) { + case ko.FIRST_DIM_SIZE: return e[0]; - case Ho.VALUE_ROWIDS: + case ko.VALUE_ROWIDS: throw new Error("Cannot handle VALUE_ROWIDS in first dimension."); - case Ho.ROW_SPLITS: + case ko.ROW_SPLITS: return this.rowPartitionValuesShapes[0][0] - 1; default: - throw new Error(`Cannot handle type ${Ho[t10]}`); + throw new Error(`Cannot handle type ${ko[t6]}`); } } compute() { if (this.rowPartitionValues[0].length <= 0) throw new Error("Invalid first partition input. Tensor requires at least one element."); - let t10 = this.getFirstDimensionSize(), o = this.calculateOutputSize(t10), n = new Array(this.raggedRank + 1); + let t6 = this.getFirstDimensionSize(), o = this.calculateOutputSize(t6), n = new Array(this.raggedRank + 1); n[n.length - 1] = 1; for (let p = n.length - 2; p >= 0; --p) n[p] = n[p + 1] * o[p + 1]; - let s = ZN(o, false), a = x.getArrayFromDType(this.valuesDType, x.sizeFromShape(s)); + let s = TT(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); if (n[0] * o[0] > 0) { - let p = this.calculateFirstParentOutputIndex(t10, n[0], o[0]); + let p = this.calculateFirstParentOutputIndex(t6, n[0], o[0]); for (let u = 1; u <= this.raggedRank; ++u) p = this.calculateOutputIndex(u - 1, p, n[u], o[u]); this.setOutput(this.raggedRank, p, a, s); } return [s, a]; } - setOutput(e, t10, o, n) { + setOutput(e, t6, o, n) { if (o.length === 0) return; let s = this.values, a = o, i = n.slice(); i = i.slice(e + 1); - let p = x.sizeFromShape(i), u = t10.length, c = this.defaultValue; + let p = y.sizeFromShape(i), u = t6.length, c = this.defaultValue; if (c.length !== p && c.length !== 1) { - let d = this.defaultValueShape; - Ne(() => { - let h = z(c, d); - c = Ls(h, i).dataSync(); + let f = this.defaultValueShape; + Ee(() => { + let h = z(c, f); + c = Ii(h, i).dataSync(); }); } - let l = 0, m = 0, f = 0; - for (let d = 0; d <= u; ++d) { - let h = d < u ? t10[d] : -1; - if (h === f) { - ++f; + let l = 0, m = 0, d = 0; + for (let f = 0; f <= u; ++f) { + let h = f < u ? t6[f] : -1; + if (h === d) { + ++d; continue; } - if (m < f) { - let g = s.subarray(l * p), y = a.subarray(m * p), b = (f - m) * p; - QN(y, g, b); + if (m < d) { + let g = s.subarray(l * p), x = a.subarray(m * p), b = (d - m) * p; + NT(x, g, b); } - if (d >= u) { + if (f >= u) { let g = o.length; h = Math.floor(g / p); } - if (h > f) + if (h > d) if (this.defaultValue.length === 1) - a.subarray(f * p, h * p).fill(this.defaultValue[0]), f = h; + a.subarray(d * p, h * p).fill(this.defaultValue[0]), d = h; else - for (; h > f; ) { - let g = a.slice(f * p); - QN(g, c, p), ++f; + for (; h > d; ) { + let g = a.slice(d * p); + NT(g, c, p), ++d; } - h < 0 ? (l = d + 1, m = f) : (l = d, m = f, f = m + 1); + h < 0 ? (l = f + 1, m = d) : (l = f, m = d, d = m + 1); } } }; -function QN(r, e, t10) { - for (let o = 0; o < t10; o++) +function NT(r, e, t6) { + for (let o = 0; o < t6; o++) r[o] = e[o]; } -function ZN(r, e) { - let t10 = []; +function TT(r, e) { + let t6 = []; for (let o of r) { if (o < 0) { if (!e) @@ -12275,175 +12321,175 @@ function ZN(r, e) { throw new Error(`Dimension ${o} must be >= -1`); o = -1; } - t10.push(o); + t6.push(o); } - return t10; + return t6; } -function kd(r, e, t10, o, n, s, a, i, p, u) { - return new ec(r, e, t10, o, n, s, a, i, p, u).compute(); +function hf(r, e, t6, o, n, s, a, i, p, u) { + return new Xp(r, e, t6, o, n, s, a, i, p, u).compute(); } -function Su(r, e, t10, o) { - let n = r === e, s = r < e && t10 < 0, a = e < r && t10 > 1; +function Iu(r, e, t6, o) { + let n = r === e, s = r < e && t6 < 0, a = e < r && t6 > 1; if (n || s || a) - return x.makeZerosTypedArray(0, o); - let i = Math.abs(Math.ceil((e - r) / t10)), p = x.makeZerosTypedArray(i, o); - e < r && t10 === 1 && (t10 = -1), p[0] = r; + return y.makeZerosTypedArray(0, o); + let i = Math.abs(Math.ceil((e - r) / t6)), p = y.makeZerosTypedArray(i, o); + e < r && t6 === 1 && (t6 = -1), p[0] = r; for (let u = 1; u < p.length; u++) - p[u] = p[u - 1] + t10; + p[u] = p[u - 1] + t6; return p; } -var CI = vr((r) => 1 / Math.sqrt(r)); -var gj = Go(xo, CI); -var JN = { kernelName: xo, backendName: "cpu", kernelFunc: gj }; -function Aa(r, e, t10, o, n, s, a, i, p, u) { +var hS = vr((r) => 1 / Math.sqrt(r)); +var L6 = vo(Vn, hS); +var _T = { kernelName: Vn, backendName: "cpu", kernelFunc: L6 }; +function Ma(r, e, t6, o, n, s, a, i, p, u) { let c = [o / n, n], l = r.values, m = e.values; if (o === 0) - return ne(t10, e.dtype); - let f = ne(c, e.dtype); - typeof p == "string" || typeof p == "number" ? f.values.fill(p) : typeof p == "boolean" && f.values.fill(+p); - for (let d = 0; d < s; d++) { + return le(t6, e.dtype); + let d = le(c, e.dtype); + typeof p == "string" || typeof p == "number" ? d.values.fill(p) : typeof p == "boolean" && d.values.fill(+p); + for (let f = 0; f < s; f++) { let h = [], g = 0; - for (let y = 0; y < a; y++) { - let b = l[d * a + y]; - h.push(b), g += b * i[y]; + for (let x = 0; x < a; x++) { + let b = l[f * a + x]; + h.push(b), g += b * i[x]; } if (g < 0 || g >= o / n) - throw new Error(`Invalid indices: ${h} does not index into ${t10}`); - for (let y = 0; y < n; y++) - u ? f.values[g * n + y] += m[d * n + y] : f.values[g * n + y] = e.rank === 0 ? m[0] : m[d * n + y]; + throw new Error(`Invalid indices: ${h} does not index into ${t6}`); + for (let x = 0; x < n; x++) + u ? d.values[g * n + x] += m[f * n + x] : d.values[g * n + x] = e.rank === 0 ? m[0] : m[f * n + x]; } - return f; + return d; } -var e2 = vr((r) => 1 / (1 + Math.exp(-r))); -var II = we(yo, (r) => 1 / (1 + Math.exp(-r))); -var t2 = { kernelName: yo, backendName: "cpu", kernelFunc: II }; -function vu(r, e, t10, o, n) { - let s = et.isSliceContinous(o, e, t10), a = x.sizeFromShape(t10), i = x.computeStrides(o); +var ET = vr((r) => 1 / (1 + Math.exp(-r))); +var gS = Ie(Un, (r) => 1 / (1 + Math.exp(-r))); +var $T = { kernelName: Un, backendName: "cpu", kernelFunc: gS }; +function vu(r, e, t6, o, n) { + let s = ut.isSliceContinous(o, e, t6), a = y.sizeFromShape(t6), i = y.computeStrides(o); if (s) { - let l = et.computeFlatOffset(e, i); + let l = ut.computeFlatOffset(e, i); return n === "string" ? r.slice(l, l + a) : r.subarray(l, l + a); } - let p = n === "string" ? I.fromUint8ToStringArray(r) : r, u = ne(o, n, p), c = ne(t10, n); + let p = n === "string" ? S.fromUint8ToStringArray(r) : r, u = le(o, n, p), c = le(t6, n); for (let l = 0; l < c.size; ++l) { - let m = c.indexToLoc(l), f = m.map((d, h) => d + e[h]); - c.set(u.get(...f), ...m); + let m = c.indexToLoc(l), d = m.map((f, h) => f + e[h]); + c.set(u.get(...d), ...m); } - return n === "string" ? I.fromStringArrayToUint8(c.values) : c.values; + return n === "string" ? S.fromStringArrayToUint8(c.values) : c.values; } -function qo(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o; +function No(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o; K(n, "slice"); - let [i, p] = et.parseSliceParams(n, s, a); - et.assertParamsValid(n, i, p); - let u = t10.data.get(n.dataId).values, c = vu(u, i, p, n.shape, n.dtype); - return t10.makeTensorInfo(p, n.dtype, c); + let [i, p] = ut.parseSliceParams(n, s, a); + ut.assertParamsValid(n, i, p); + let u = t6.data.get(n.dataId).values, c = vu(u, i, p, n.shape, n.dtype); + return t6.makeTensorInfo(p, n.dtype, c); } -var r2 = { kernelName: qn, backendName: "cpu", kernelFunc: qo }; -function Td(r, e, t10, o, n, s, a) { +var AT = { kernelName: _s, backendName: "cpu", kernelFunc: No }; +function gf(r, e, t6, o, n, s, a) { let i = e[0], p = s[0], u = new Array(p), c = new Array(i), l = e[1]; if (p === 0) { if (i !== 0) - throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); - let g = x.getArrayFromDType(t10, 0), y = x.getArrayFromDType(n, 0); - return [g, [0, l], y, u, c]; + throw new Error(S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); + let g = y.getArrayFromDType(t6, 0), x = y.getArrayFromDType(n, 0); + return [g, [0, l], x, u, c]; } - let m = true, f = 0, d = new Array(p).fill(0); + let m = true, d = 0, f = new Array(p).fill(0); for (let g = 0; g < i; ++g) { - let y = r[g * l]; - if (y < 0) - throw new Error(I.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, y)); - if (y >= p) - throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, y, p)); - ++d[y], m = m && y >= f, f = y; + let x = r[g * l]; + if (x < 0) + throw new Error(S.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); + if (x >= p) + throw new Error(S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); + ++f[x], m = m && x >= d, d = x; } let h = true; for (let g = 0; g < p; ++g) { - let y = d[g] === 0; - u[g] = y, h = h && !y, d[g] = Math.max(d[g], 1), g > 0 && (d[g] += d[g - 1]); + let x = f[g] === 0; + u[g] = x, h = h && !x, f[g] = Math.max(f[g], 1), g > 0 && (f[g] += f[g - 1]); } if (h && m) { - let g = r, y = o; + let g = r, x = o; for (let b = 0; b < i; ++b) c[b] = b; - return [g, [i, l], y, u, c]; + return [g, [i, l], x, u, c]; } else { - let g = d[p - 1], y = x.getArrayFromDType(t10, g * l), b = x.getArrayFromDType(n, g), C = new Array(p).fill(0); + let g = f[p - 1], x = y.getArrayFromDType(t6, g * l), b = y.getArrayFromDType(n, g), C = new Array(p).fill(0); for (let w = 0; w < i; ++w) { - let k = r[w * l], _ = C[k], E = (k === 0 ? 0 : d[k - 1]) + _; + let k = r[w * l], _ = C[k], $ = (k === 0 ? 0 : f[k - 1]) + _; C[k]++; - for (let R = 0; R < l; ++R) - y[E * l + R] = r[w * l + R]; - b[E] = o[w], c[w] = E; + for (let A = 0; A < l; ++A) + x[$ * l + A] = r[w * l + A]; + b[$] = o[w], c[w] = $; } for (let w = 0; w < p; ++w) if (C[w] === 0) { - let _ = w === 0 ? 0 : d[w - 1]; - y[_ * l + 0] = w; - for (let E = 1; E < l; ++E) - y[_ * l + E] = 0; + let _ = w === 0 ? 0 : f[w - 1]; + x[_ * l + 0] = w; + for (let $ = 1; $ < l; ++$) + x[_ * l + $] = 0; b[_] = a; } - return [y, [g, l], b, u, c]; + return [x, [g, l], b, u, c]; } } -function Nd(r, e, t10, o, n) { - let s = x.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, c = -1; +function xf(r, e, t6, o, n) { + let s = y.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, c = -1; for (let g = 0; g < i; ++g) { - let y = n[g]; - if (y === -1) { + let x = n[g]; + if (x === -1) { if (c !== -1) - throw new Error(I.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); + throw new Error(S.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); c = g, p.push(1); } else { - if (y < 0) - throw new Error(I.getSparseReshapeNegativeOutputDimErrorMessage(g, y)); - u *= y, p.push(y); + if (x < 0) + throw new Error(S.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); + u *= x, p.push(x); } } if (c !== -1) { if (u <= 0) - throw new Error(I.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); + throw new Error(S.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); let g = Math.trunc(s / u); if (u * g !== s) - throw new Error(I.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); + throw new Error(S.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); p[c] = g; } - if (x.sizeFromShape(p) !== s) - throw new Error(I.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); - let m = o.length, f = []; + if (y.sizeFromShape(p) !== s) + throw new Error(S.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); + let m = o.length, d = []; if (m > 0) { - f[m - 1] = 1; + d[m - 1] = 1; for (let g = m - 2; g >= 0; --g) - f[g] = f[g + 1] * o[g + 1]; + d[g] = d[g + 1] * o[g + 1]; } - let d = []; + let f = []; if (i > 0) { - d[i - 1] = 1; + f[i - 1] = 1; for (let g = i - 2; g >= 0; --g) - d[g] = d[g + 1] * p[g + 1]; + f[g] = f[g + 1] * p[g + 1]; } - let h = x.getArrayFromDType(t10, a * i); + let h = y.getArrayFromDType(t6, a * i); for (let g = 0; g < a; ++g) { - let y = 0; + let x = 0; for (let b = 0; b < m; ++b) - y += r[g * m + b] * f[b]; + x += r[g * m + b] * d[b]; for (let b = 0; b < i; ++b) - h[g * i + b] = Math.trunc(y / d[b]), y %= d[b]; + h[g * i + b] = Math.trunc(x / f[b]), x %= f[b]; } return [h, [a, i], p]; } -function tc(r, e, t10, o, n, s = false, a = 0) { +function Yp(r, e, t6, o, n, s = false, a = 0) { let i = o.length, p = [e[0], r.length / e[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; if (l < 0) - throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let m = e.slice(); m[0] = l; - let f = m.reduce((C, w) => C * w, 1), d = x.getArrayFromDType(t10, f); + let d = m.reduce((C, w) => C * w, 1), f = y.getArrayFromDType(t6, d); if (i === 0) - return l > 0 && d.fill(a), [d, m]; + return l > 0 && f.fill(a), [f, m]; if (l <= 0) - throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let h = 0, g = 1, y = 0, b = n[h]; + throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + let h = 0, g = 1, x = 0, b = n[h]; for (; ; ) { let C = 0; if (g < i) { @@ -12452,97 +12498,97 @@ function tc(r, e, t10, o, n, s = false, a = 0) { continue; } if (b >= C) - throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); + throw new Error(S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); } if (b < 0 || b >= l) - throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); - b > y && d.fill(a, y * u, b * u); + throw new Error(S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); + b > x && f.fill(a, x * u, b * u); for (let w = h; w < g; ++w) { let k = o[w]; if (k < 0 || k >= p[0]) - throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w, o[w], p[0])); + throw new Error(S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w, o[w], p[0])); for (let _ = 0; _ < u; _++) - d[b * u + _] += r[k * u + _]; + f[b * u + _] += r[k * u + _]; } if (s) for (let w = 0; w < u; w++) - d[b * u + w] /= g - h; - if (h = g, ++g, y = b + 1, b = C, g > i) + f[b * u + w] /= g - h; + if (h = g, ++g, x = b + 1, b = C, g > i) break; } - return y < l && d.fill(a, y * u, l * u), [d, m]; + return x < l && f.fill(a, x * u, l * u), [f, m]; } -var o2 = vr((r) => Math.sqrt(r)); -var xj = we(bo, (r) => Math.sqrt(r)); -var n2 = { kernelName: bo, backendName: "cpu", kernelFunc: xj }; -var wI = Le((r, e) => { - let t10 = r - e; - return t10 * t10; +var RT = vr((r) => Math.sqrt(r)); +var B6 = Ie(Gn, (r) => Math.sqrt(r)); +var FT = { kernelName: Gn, backendName: "cpu", kernelFunc: B6 }; +var xS = Be((r, e) => { + let t6 = r - e; + return t6 * t6; }); -var yj = Ye(Co, wI); -var s2 = { kernelName: Co, backendName: "cpu", kernelFunc: yj }; -function _d(r, e, t10, o) { - let n = ne(r, e.dtype); +var V6 = Qe(Kn, xS); +var DT = { kernelName: Kn, backendName: "cpu", kernelFunc: V6 }; +function yf(r, e, t6, o) { + let n = le(r, e.dtype); for (let s = 0; s < n.size; s++) { let a = n.indexToLoc(s), i = new Array(a.length); for (let p = 0; p < i.length; p++) - i[p] = a[p] * t10[p] + o[p]; + i[p] = a[p] * t6[p] + o[p]; n.set(e.get(...i), ...a); } return n; } -var SI = class { - constructor(e, t10, o, n, s, a) { - this.separator = x.encodeString(e), this.nGramWidths = t10, this.leftPad = x.encodeString(o), this.rightPad = x.encodeString(n), this.padWidth = s, this.preserveShort = a; +var yS = class { + constructor(e, t6, o, n, s, a) { + this.separator = y.encodeString(e), this.nGramWidths = t6, this.leftPad = y.encodeString(o), this.rightPad = y.encodeString(n), this.padWidth = s, this.preserveShort = a; } getPadWidth(e) { return Math.min(this.padWidth < 0 ? e - 1 : this.padWidth, e - 1); } - getNumNGrams(e, t10) { - let o = this.getPadWidth(t10); - return Math.max(0, e + 2 * o - t10 + 1); + getNumNGrams(e, t6) { + let o = this.getPadWidth(t6); + return Math.max(0, e + 2 * o - t6 + 1); } - createNGrams(e, t10, o, n, s, a) { + createNGrams(e, t6, o, n, s, a) { for (let i = 0; i < s; ++i) { - let p = this.getPadWidth(a), u = Math.max(0, p - i), c = Math.max(0, p - (s - (i + 1))), l = a - (u + c), m = t10 + (u > 0 ? 0 : i - p), f = 0; - f += u * this.leftPad.length; + let p = this.getPadWidth(a), u = Math.max(0, p - i), c = Math.max(0, p - (s - (i + 1))), l = a - (u + c), m = t6 + (u > 0 ? 0 : i - p), d = 0; + d += u * this.leftPad.length; for (let b = 0; b < l; ++b) - f += e[m + b].length; - f += c * this.rightPad.length; - let d = u + c + l - 1; - f += d * this.separator.length, o[n + i] = new Uint8Array(f); - let h = o[n + i], g = 0, y = (b) => b.forEach((C) => h[g++] = C); + d += e[m + b].length; + d += c * this.rightPad.length; + let f = u + c + l - 1; + d += f * this.separator.length, o[n + i] = new Uint8Array(d); + let h = o[n + i], g = 0, x = (b) => b.forEach((C) => h[g++] = C); for (let b = 0; b < u; ++b) - y(this.leftPad), y(this.separator); + x(this.leftPad), x(this.separator); for (let b = 0; b < l - 1; ++b) - y(e[m + b]), y(this.separator); + x(e[m + b]), x(this.separator); if (l > 0) { - y(e[m + l - 1]); + x(e[m + l - 1]); for (let b = 0; b < c; ++b) - y(this.separator), y(this.rightPad); + x(this.separator), x(this.rightPad); } else { for (let b = 0; b < c - 1; ++b) - y(this.rightPad), y(this.separator); - y(this.rightPad); + x(this.rightPad), x(this.separator); + x(this.rightPad); } } } - compute(e, t10) { - let o = e.length, n = t10.length; + compute(e, t6) { + let o = e.length, n = t6.length; if (n > 0) { - let p = t10[0]; + let p = t6[0]; if (p !== 0) throw new Error(`First split value must be 0, got ${p}`); for (let u = 1; u < n; ++u) { - let c = t10[u] >= p; - if (c = c && t10[u] <= o, !c) - throw new Error(`Invalid split value ${t10[u]}, must be in [${p}, ${o}]`); - p = t10[u]; + let c = t6[u] >= p; + if (c = c && t6[u] <= o, !c) + throw new Error(`Invalid split value ${t6[u]}, must be in [${p}, ${o}]`); + p = t6[u]; } if (p !== o) throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`); } - let s = n - 1, a = x.getArrayFromDType("int32", n); + let s = n - 1, a = y.getArrayFromDType("int32", n); if (o === 0 || n === 0) { let p = new Array(o); for (let u = 0; u <= s; ++u) @@ -12551,32 +12597,32 @@ var SI = class { } a[0] = 0; for (let p = 1; p <= s; ++p) { - let u = t10[p] - t10[p - 1], c = 0; + let u = t6[p] - t6[p - 1], c = 0; this.nGramWidths.forEach((l) => { c += this.getNumNGrams(u, l); }), this.preserveShort && u > 0 && c === 0 && (c = 1), a[p] = a[p - 1] + c; } let i = new Array(a[s]); for (let p = 0; p < s; ++p) { - let u = t10[p], c = a[p]; + let u = t6[p], c = a[p]; if (this.nGramWidths.forEach((l) => { - let m = t10[p + 1] - t10[p], f = this.getNumNGrams(m, l); - this.createNGrams(e, u, i, c, f, l), c += f; + let m = t6[p + 1] - t6[p], d = this.getNumNGrams(m, l); + this.createNGrams(e, u, i, c, d, l), c += d; }), this.preserveShort && c === a[p]) { - let l = t10[p + 1] - t10[p]; + let l = t6[p + 1] - t6[p]; if (l === 0) continue; - let m = l + 2 * this.padWidth, f = 1; - this.createNGrams(e, u, i, c, f, m); + let m = l + 2 * this.padWidth, d = 1; + this.createNGrams(e, u, i, c, d, m); } } return [i, a]; } }; -function ku(r, e, t10, o, n, s, a, i) { - return new SI(t10, o, n, s, a, i).compute(r, e); +function ku(r, e, t6, o, n, s, a, i) { + return new yS(t6, o, n, s, a, i).compute(r, e); } -function bj(r, e, t10, o) { +function z6(r, e, t6, o) { if (!r.length) return; if (e.length === 0) { @@ -12588,47 +12634,47 @@ function bj(r, e, t10, o) { let s = e[0], a = r.indexOf(s); for (; a !== -1; ) { let i = r.subarray(0, a); - (!t10 || i.length !== 0) && o.push(i), r = r.subarray(a + 1), a = r.indexOf(s); + (!t6 || i.length !== 0) && o.push(i), r = r.subarray(a + 1), a = r.indexOf(s); } - (!t10 || r.length !== 0) && o.push(r); + (!t6 || r.length !== 0) && o.push(r); return; } let n = 0; for (let s = 0; s < r.length + 1; s++) if (s === r.length || e.indexOf(r[s]) !== -1) { let a = r.subarray(n, s); - (!t10 || a.length !== 0) && o.push(a), n = s + 1; + (!t6 || a.length !== 0) && o.push(a), n = s + 1; } } -function Tu(r, e, t10) { +function Nu(r, e, t6) { let o = r.length, n = [], s = 0, a = 0, i = new Array(o); for (let m = 0; m < o; ++m) { - let f = n.length; - bj(r[m], e, t10, n); - let d = n.length - f; - i[m] = d, s += d, a = Math.max(a, d); + let d = n.length; + z6(r[m], e, t6, n); + let f = n.length - d; + i[m] = f, s += f, a = Math.max(a, f); } - let p = x.getArrayFromDType("int32", s * 2), u = new Array(s), c = [o, a], l = 0; + let p = y.getArrayFromDType("int32", s * 2), u = new Array(s), c = [o, a], l = 0; for (let m = 0; m < o; ++m) - for (let f = 0; f < i[m]; ++f) - p[l * 2] = m, p[l * 2 + 1] = f, u[l] = n[l], ++l; + for (let d = 0; d < i[m]; ++d) + p[l * 2] = m, p[l * 2 + 1] = d, u[l] = n[l], ++l; return [p, u, c]; } -function Nu(r, e) { - let t10 = x.getArrayFromDType("int32", r.length); +function Tu(r, e) { + let t6 = y.getArrayFromDType("int32", r.length); for (let o = 0; o < r.length; ++o) - t10[o] = x.fingerPrint64(r[o]).modulo(e).getLowBitsUnsigned(); - return t10; + t6[o] = y.fingerPrint64(r[o]).modulo(e).getLowBitsUnsigned(); + return t6; } -var vI = Le((r, e) => r - e); -var Cj = Qp((r, e, t10, o) => ({ real: r - t10, imag: e - o })); -var Il = Ye(Io, vI, Cj); -var a2 = { kernelName: Io, backendName: "cpu", kernelFunc: Il }; -function Ed(r, e) { - let t10 = new Array(r.rank); - for (let n = 0; n < t10.length; n++) - t10[n] = r.shape[n] * e[n]; - let o = ne(t10, r.dtype); +var bS = Be((r, e) => r - e); +var W6 = qp((r, e, t6, o) => ({ real: r - t6, imag: e - o })); +var dl = Qe(Xn, bS, W6); +var OT = { kernelName: Xn, backendName: "cpu", kernelFunc: dl }; +function bf(r, e) { + let t6 = new Array(r.rank); + for (let n = 0; n < t6.length; n++) + t6[n] = r.shape[n] * e[n]; + let o = le(t6, r.dtype); for (let n = 0; n < o.values.length; ++n) { let s = o.indexToLoc(n), a = new Array(r.rank); for (let p = 0; p < a.length; p++) @@ -12638,663 +12684,663 @@ function Ed(r, e) { } return o; } -var wl = (r, e) => { - let t10 = e.value - r.value; - return t10 === 0 ? r.index - e.index : t10; +var fl = (r, e) => { + let t6 = e.value - r.value; + return t6 === 0 ? r.index - e.index : t6; }; -function i2(r, e, t10 = 0, o = r.length - 1) { - for (; o > t10; ) { - if (o - t10 > 600) { - let i = o - t10 + 1, p = e - t10 + 1, u = Math.log(i), c = 0.5 * Math.exp(2 * u / 3), l = 0.5 * Math.sqrt(u * c * (i - c) / i) * Math.sign(p - i / 2), m = Math.max(t10, Math.floor(e - p * c / i + l)), f = Math.min(o, Math.floor(e + (i - p) * c / i + l)); - i2(r, e, m, f); +function PT(r, e, t6 = 0, o = r.length - 1) { + for (; o > t6; ) { + if (o - t6 > 600) { + let i = o - t6 + 1, p = e - t6 + 1, u = Math.log(i), c = 0.5 * Math.exp(2 * u / 3), l = 0.5 * Math.sqrt(u * c * (i - c) / i) * Math.sign(p - i / 2), m = Math.max(t6, Math.floor(e - p * c / i + l)), d = Math.min(o, Math.floor(e + (i - p) * c / i + l)); + PT(r, e, m, d); } - let n = r[e], s = t10, a = o; - for (x.swap(r, t10, e), wl(r[o], n) > 0 && x.swap(r, t10, o); s < a; ) { - for (x.swap(r, s, a), s++, a--; wl(r[s], n) < 0; ) + let n = r[e], s = t6, a = o; + for (y.swap(r, t6, e), fl(r[o], n) > 0 && y.swap(r, t6, o); s < a; ) { + for (y.swap(r, s, a), s++, a--; fl(r[s], n) < 0; ) s = s + 1; - for (; wl(r[a], n) > 0; ) + for (; fl(r[a], n) > 0; ) a = a - 1; } - wl(r[t10], n) === 0 ? x.swap(r, t10, a) : (a = a + 1, x.swap(r, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); + fl(r[t6], n) === 0 ? y.swap(r, t6, a) : (a = a + 1, y.swap(r, a, o)), a <= e && (t6 = a + 1), e <= a && (o = a - 1); } } -function $d(r, e, t10, o, n) { - let s = e[e.length - 1], [a, i] = [r.length / s, s], p = x.getTypedArrayFromDType(t10, a * o), u = x.getTypedArrayFromDType("int32", a * o); +function Cf(r, e, t6, o, n) { + let s = e[e.length - 1], [a, i] = [r.length / s, s], p = y.getTypedArrayFromDType(t6, a * o), u = y.getTypedArrayFromDType("int32", a * o); for (let l = 0; l < a; l++) { - let m = l * i, f = r.subarray(m, m + i), d = new Array(f.length); - f.forEach((b, C) => d[C] = { value: b, index: C }), o < d.length && (i2(d, o), d = d.slice(0, o)), n && d.sort(wl); - let h = l * o, g = p.subarray(h, h + o), y = u.subarray(h, h + o); + let m = l * i, d = r.subarray(m, m + i), f = new Array(d.length); + d.forEach((b, C) => f[C] = { value: b, index: C }), o < f.length && (PT(f, o), f = f.slice(0, o)), n && f.sort(fl); + let h = l * o, g = p.subarray(h, h + o), x = u.subarray(h, h + o); for (let b = 0; b < o; b++) - g[b] = d[b].value, y[b] = d[b].index; + g[b] = f[b].value, x[b] = f[b].index; } let c = e.slice(); - return c[c.length - 1] = o, [ne(c, t10, p), ne(c, "int32", u)]; + return c[c.length - 1] = o, [le(c, t6, p), le(c, "int32", u)]; } -function Rd(r, e, t10, o) { - let n = x.parseAxisParam(e, t10)[0], s = [1, t10[0], 1]; - for (let d = 0; d < n; d++) - s[0] *= t10[d]; - s[1] = t10[n]; - for (let d = n + 1; d < t10.length; d++) - s[2] *= t10[d]; - let a = {}, i = new Int32Array(t10[n]), p = new je(s, o, r), u = [], c = s[0] === 1 && s[2] === 1; - for (let d = 0; d < t10[n]; d++) { +function Sf(r, e, t6, o) { + let n = y.parseAxisParam(e, t6)[0], s = [1, t6[0], 1]; + for (let f = 0; f < n; f++) + s[0] *= t6[f]; + s[1] = t6[n]; + for (let f = n + 1; f < t6.length; f++) + s[2] *= t6[f]; + let a = {}, i = new Int32Array(t6[n]), p = new st(s, o, r), u = [], c = s[0] === 1 && s[2] === 1; + for (let f = 0; f < t6[n]; f++) { let h; if (c) - h = r[d].toString(); + h = r[f].toString(); else { let g = []; - for (let y = 0; y < s[0]; y++) + for (let x = 0; x < s[0]; x++) for (let b = 0; b < s[2]; b++) - g.push(p.get(y, d, b)); + g.push(p.get(x, f, b)); h = g.join(","); } if (a[h] !== void 0) - i[d] = a[h]; + i[f] = a[h]; else { let g = Object.keys(a).length; - a[h] = g, i[d] = g, u.push(d); + a[h] = g, i[f] = g, u.push(f); } } let l = s.slice(); l[1] = Object.keys(a).length; - let m = new je(l, o); - u.forEach((d, h) => { + let m = new st(l, o); + u.forEach((f, h) => { for (let g = 0; g < s[0]; g++) - for (let y = 0; y < s[2]; y++) - m.set(p.get(g, d, y), g, h, y); + for (let x = 0; x < s[2]; x++) + m.set(p.get(g, f, x), g, h, x); }); - let f = t10.slice(); - return f[n] = l[1], { outputValues: m.values, outputShape: f, indices: i }; + let d = t6.slice(); + return d[n] = l[1], { outputValues: m.values, outputShape: d, indices: i }; } -var Ij = "4.0.0"; -pi("cpu", () => new Si(), 1); -var kI = we(In, (r) => r >= 0 ? r : Math.exp(r) - 1); -var u2 = { kernelName: In, backendName: "cpu", kernelFunc: kI }; -function TI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { alpha: s } = o; +var U6 = "4.1.0"; +Ci("cpu", () => new Oi(), 1); +var CS = Ie(en, (r) => r >= 0 ? r : Math.exp(r) - 1); +var MT = { kernelName: en, backendName: "cpu", kernelFunc: CS }; +function SS(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { alpha: s } = o; K([n], "leakyRelu"); - let a = x.sizeFromShape(n.shape), i = t10.data.get(n.dataId).values, p = x.getTypedArrayFromDType("float32", a); + let a = y.sizeFromShape(n.shape), i = t6.data.get(n.dataId).values, p = y.getTypedArrayFromDType("float32", a); for (let u = 0; u < i.length; u++) p[u] = i[u] < 0 ? s * i[u] : i[u]; - return t10.makeTensorInfo(n.shape, "float32", p); + return t6.makeTensorInfo(n.shape, "float32", p); } -var p2 = { kernelName: Nn, backendName: "cpu", kernelFunc: TI }; -var wj = Le((r, e) => r < 0 ? e * r : r); -function NI(r) { - let { inputs: e, backend: t10 } = r, { x: o, alpha: n } = e; +var LT = { kernelName: mn, backendName: "cpu", kernelFunc: SS }; +var G6 = Be((r, e) => r < 0 ? e * r : r); +function wS(r) { + let { inputs: e, backend: t6 } = r, { x: o, alpha: n } = e; K([o, n], "prelu"); - let s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, [i, p] = wj(o.shape, n.shape, s, a, "float32"); - return t10.makeTensorInfo(p, "float32", i); + let s = t6.data.get(o.dataId).values, a = t6.data.get(n.dataId).values, [i, p] = G6(o.shape, n.shape, s, a, "float32"); + return t6.makeTensorInfo(p, "float32", i); } -var c2 = { kernelName: Vn, backendName: "cpu", kernelFunc: NI }; -var _I = we(zn, (r) => Math.max(0, r)); -var l2 = { kernelName: zn, backendName: "cpu", kernelFunc: _I }; -var EI = we(Gn, (r) => Math.min(Math.max(0, r), 6)); -var m2 = { kernelName: Gn, backendName: "cpu", kernelFunc: EI }; -function _u(r, e, t10, o, n) { - if (t10 === "linear") +var BT = { kernelName: Rn, backendName: "cpu", kernelFunc: wS }; +var IS = Ie(On, (r) => Math.max(0, r)); +var VT = { kernelName: On, backendName: "cpu", kernelFunc: IS }; +var vS = Ie(Ln, (r) => Math.min(Math.max(0, r), 6)); +var zT = { kernelName: Ln, backendName: "cpu", kernelFunc: vS }; +function _u(r, e, t6, o, n) { + if (t6 === "linear") return ar({ inputs: { x: e }, backend: r }); - if (t10 === "relu") - return _I({ inputs: { x: e }, backend: r }); - if (t10 === "elu") - return kI({ inputs: { x: e }, backend: r }); - if (t10 === "relu6") - return EI({ inputs: { x: e }, backend: r }); - if (t10 === "prelu") - return NI({ inputs: { x: e, alpha: o }, backend: r }); - if (t10 === "leakyrelu") - return TI({ inputs: { x: e }, backend: r, attrs: { alpha: n } }); - if (t10 === "sigmoid") - return II({ inputs: { x: e }, backend: r }); - throw new Error(`Activation ${t10} has not been implemented for the CPU backend.`); + if (t6 === "relu") + return IS({ inputs: { x: e }, backend: r }); + if (t6 === "elu") + return CS({ inputs: { x: e }, backend: r }); + if (t6 === "relu6") + return vS({ inputs: { x: e }, backend: r }); + if (t6 === "prelu") + return wS({ inputs: { x: e, alpha: o }, backend: r }); + if (t6 === "leakyrelu") + return SS({ inputs: { x: e }, backend: r, attrs: { alpha: n } }); + if (t6 === "sigmoid") + return gS({ inputs: { x: e }, backend: r }); + throw new Error(`Activation ${t6} has not been implemented for the CPU backend.`); } -function Oe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { shape: s } = o, a = x.sizeFromShape(n.shape), i = x.inferFromImplicitShape(s, a), p = x.sizeFromShape(i); - x.assert(a === p, () => `The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`), t10.incRef(n.dataId); - let u = t10.data.get(n.dataId); +function Me(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { shape: s } = o, a = y.sizeFromShape(n.shape), i = y.inferFromImplicitShape(s, a), p = y.sizeFromShape(i); + y.assert(a === p, () => `The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`), t6.incRef(n.dataId); + let u = t6.data.get(n.dataId); if (u.complexTensorInfos != null) { let c = u.complexTensorInfos.real, l = u.complexTensorInfos.imag; c.shape = i, l.shape = i; } return { dataId: n.dataId, shape: i, dtype: n.dtype }; } -var f2 = { kernelName: Ss, backendName: "cpu", kernelFunc: Oe }; -function $I(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; +var WT = { kernelName: Ns, backendName: "cpu", kernelFunc: Me }; +function kS(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; K([n, s], "matMul"); - let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], f = i ? s.shape[u - 2] : s.shape[u - 1], d = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = x.sizeFromShape(d), y = x.sizeFromShape(h), C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, f]); - x.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); - let w = a ? [g, c, m] : [g, m, c], k = i ? [y, f, l] : [y, l, f], _ = Oe({ inputs: { x: n }, backend: t10, attrs: { shape: w } }), E = Oe({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = a ? _.shape[1] : _.shape[2], A = a ? _.shape[2] : _.shape[1], D = i ? E.shape[1] : E.shape[2], O = Math.max(g, y), M = t10.data.get(_.dataId).values, L = t10.data.get(E.dataId).values, W = x.computeStrides(_.shape), V = x.computeStrides(E.shape), [G, q, H] = a ? [W[0], 1, W[1]] : [W[0], W[1], 1], [j, Y, Z] = i ? [1, V[1], V[0]] : [V[1], 1, V[0]], ee = A * D, X = ne([O, A, D], _.dtype), Q = X.values, se = t10.blockSize; - for (let ie = 0; ie < O; ie++) - for (let de = 0; de < A; de += se) - for (let Ie = 0; Ie < D; Ie += se) - for (let Se = 0; Se < R; Se += se) { - let Ee = Math.min(de + se, A), Me = Math.min(Ie + se, D), st = Math.min(Se + se, R); - for (let pt = de; pt < Ee; pt++) - for (let De = Ie; De < Me; De++) { - let ft = 0; - for (let at = Se; at < st; at++) { - let dt = Math.min(ie, g - 1) * G, It = Math.min(ie, y - 1) * Z, Fr = M[dt + pt * q + at * H], Pt = L[at * j + De * Y + It]; - ft += Fr * Pt; + let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + y.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); + let w = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = Me({ inputs: { x: n }, backend: t6, attrs: { shape: w } }), $ = Me({ inputs: { x: s }, backend: t6, attrs: { shape: k } }), A = a ? _.shape[1] : _.shape[2], R = a ? _.shape[2] : _.shape[1], D = i ? $.shape[1] : $.shape[2], P = Math.max(g, x), M = t6.data.get(_.dataId).values, L = t6.data.get($.dataId).values, W = y.computeStrides(_.shape), V = y.computeStrides($.shape), [U, q, H] = a ? [W[0], 1, W[1]] : [W[0], W[1], 1], [j, X, Z] = i ? [1, V[1], V[0]] : [V[1], 1, V[0]], ee = R * D, Y = le([P, R, D], _.dtype), J = Y.values, ie = t6.blockSize; + for (let pe = 0; pe < P; pe++) + for (let he = 0; he < R; he += ie) + for (let we = 0; we < D; we += ie) + for (let ve = 0; ve < A; ve += ie) { + let $e = Math.min(he + ie, R), Le = Math.min(we + ie, D), nt = Math.min(ve + ie, A); + for (let pt = he; pt < $e; pt++) + for (let Oe = we; Oe < Le; Oe++) { + let mt = 0; + for (let at = ve; at < nt; at++) { + let ft = Math.min(pe, g - 1) * U, wt = Math.min(pe, x - 1) * Z, Fr = M[ft + pt * q + at * H], Ot = L[at * j + Oe * X + wt]; + mt += Fr * Ot; } - Q[ie * ee + (pt * D + De)] += ft; + J[pe * ee + (pt * D + Oe)] += mt; } } - return t10.disposeIntermediateTensorInfo(_), t10.disposeIntermediateTensorInfo(E), t10.makeTensorInfo(C, X.dtype, X.values); + return t6.disposeIntermediateTensorInfo(_), t6.disposeIntermediateTensorInfo($), t6.makeTensorInfo(C, Y.dtype, Y.values); } -var d2 = { kernelName: cn, backendName: "cpu", kernelFunc: $I }; -function Sj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, f, d, h = []; - m = $I({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: t10 }), a && (f = Hs({ inputs: { a: m, b: a }, backend: t10 }), h.push(m), m = f), c && (d = _u(t10, m, c, i, l), h.push(m), m = d); - for (let y of h) - t10.disposeIntermediateTensorInfo(y); +var UT = { kernelName: Wo, backendName: "cpu", kernelFunc: kS }; +function H6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, d, f, h = []; + m = kS({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: t6 }), a && (d = js({ inputs: { a: m, b: a }, backend: t6 }), h.push(m), m = d), c && (f = _u(t6, m, c, i, l), h.push(m), m = f); + for (let x of h) + t6.disposeIntermediateTensorInfo(x); return m; } -var h2 = { kernelName: Fo, backendName: "cpu", kernelFunc: Sj }; -var vj = we(Li, (r) => Math.acos(r)); -var g2 = { kernelName: Li, backendName: "cpu", kernelFunc: vj }; -var kj = we(Bi, (r) => Math.acosh(r)); -var x2 = { kernelName: Bi, backendName: "cpu", kernelFunc: kj }; -function Tj(r) { - let { inputs: e, backend: t10 } = r, o = e; +var GT = { kernelName: fo, backendName: "cpu", kernelFunc: H6 }; +var q6 = Ie(sa, (r) => Math.acos(r)); +var HT = { kernelName: sa, backendName: "cpu", kernelFunc: q6 }; +var K6 = Ie(aa, (r) => Math.acosh(r)); +var qT = { kernelName: aa, backendName: "cpu", kernelFunc: K6 }; +function j6(r) { + let { inputs: e, backend: t6 } = r, o = e; K(e, "addN"); - let n = o.map((i) => t10.data.get(i.dataId).values), s = ne(o[0].shape, o[0].dtype), a = s.values; + let n = o.map((i) => t6.data.get(i.dataId).values), s = le(o[0].shape, o[0].dtype), a = s.values; for (let i = 0; i < o.length; i++) { let p = n[i]; for (let u = 0; u < a.length; u++) a[u] += p[u]; } - return t10.makeTensorInfo(s.shape, s.dtype, s.values); + return t6.makeTensorInfo(s.shape, s.dtype, s.values); } -var y2 = { kernelName: an, backendName: "cpu", kernelFunc: Tj }; -function Nj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; +var KT = { kernelName: Mo, backendName: "cpu", kernelFunc: j6 }; +function X6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; K(n, "all"); - let i = x.parseAxisParam(s, n.shape), p = i, u = I.getAxesPermutation(p, n.shape.length), c = n; - u != null && (c = bt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = I.getInnerMostAxes(p.length, n.shape.length)), I.assertAxesAreInnerMostDims("all", p, c.shape.length); - let [l, m] = I.computeOutAndReduceShapes(c.shape, p), f = x.sizeFromShape(m), d = x.makeZerosTypedArray(x.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; - for (let y = 0; y < d.length; ++y) { - let b = y * f, C = h[b]; - for (let w = 0; w < f; ++w) { + let i = y.parseAxisParam(s, n.shape), p = i, u = S.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: u } }), p = S.getInnerMostAxes(p.length, n.shape.length)), S.assertAxesAreInnerMostDims("all", p, c.shape.length); + let [l, m] = S.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t6.data.get(c.dataId).values; + for (let x = 0; x < f.length; ++x) { + let b = x * d, C = h[b]; + for (let w = 0; w < d; ++w) { let k = h[b + w]; C = C && k; } - d[y] = C; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(c); - let g = t10.makeTensorInfo(l, c.dtype, d); + u != null && t6.disposeIntermediateTensorInfo(c); + let g = t6.makeTensorInfo(l, c.dtype, f); if (a) { - let y = I.expandShapeToKeepDim(l, i), b = Oe({ inputs: { x: g }, backend: t10, attrs: { shape: y } }); - return t10.disposeIntermediateTensorInfo(g), b; + let x = S.expandShapeToKeepDim(l, i), b = Me({ inputs: { x: g }, backend: t6, attrs: { shape: x } }); + return t6.disposeIntermediateTensorInfo(g), b; } return g; } -var b2 = { kernelName: oa, backendName: "cpu", kernelFunc: Nj }; -function _j(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; +var jT = { kernelName: Lo, backendName: "cpu", kernelFunc: X6 }; +function Y6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; K(n, "any"); - let i = x.parseAxisParam(s, n.shape), p = i, u = I.getAxesPermutation(p, n.shape.length), c = n; - u != null && (c = bt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = I.getInnerMostAxes(p.length, n.shape.length)), I.assertAxesAreInnerMostDims("any", p, c.shape.length); - let [l, m] = I.computeOutAndReduceShapes(c.shape, p), f = x.sizeFromShape(m), d = x.makeZerosTypedArray(x.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; - for (let y = 0; y < d.length; ++y) { - let b = y * f, C = h[b]; - for (let w = 0; w < f; ++w) { + let i = y.parseAxisParam(s, n.shape), p = i, u = S.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: u } }), p = S.getInnerMostAxes(p.length, n.shape.length)), S.assertAxesAreInnerMostDims("any", p, c.shape.length); + let [l, m] = S.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t6.data.get(c.dataId).values; + for (let x = 0; x < f.length; ++x) { + let b = x * d, C = h[b]; + for (let w = 0; w < d; ++w) { let k = h[b + w]; C = C || k; } - d[y] = C; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(c); - let g = t10.makeTensorInfo(l, c.dtype, d); + u != null && t6.disposeIntermediateTensorInfo(c); + let g = t6.makeTensorInfo(l, c.dtype, f); if (a) { - let y = I.expandShapeToKeepDim(l, i), b = Oe({ inputs: { x: g }, backend: t10, attrs: { shape: y } }); - return t10.disposeIntermediateTensorInfo(g), b; + let x = S.expandShapeToKeepDim(l, i), b = Me({ inputs: { x: g }, backend: t6, attrs: { shape: x } }); + return t6.disposeIntermediateTensorInfo(g), b; } return g; } -var C2 = { kernelName: na, backendName: "cpu", kernelFunc: _j }; -function Ej(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o; +var XT = { kernelName: Bo, backendName: "cpu", kernelFunc: Y6 }; +function Q6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o; K(n, "argMax"); - let a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = bt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], I.assertAxesAreInnerMostDims("argMax", a, p.shape.length); - let [c, l] = I.computeOutAndReduceShapes(p.shape, a), m = x.sizeFromShape(c), f = x.makeZerosTypedArray(m, "int32"), d = x.sizeFromShape(l), h = t10.data.get(p.dataId).values; - for (let g = 0; g < f.length; ++g) { - let y = g * d, b = h[y], C = 0; - for (let w = 0; w < d; ++w) { - let k = h[y + w]; + let a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], S.assertAxesAreInnerMostDims("argMax", a, p.shape.length); + let [c, l] = S.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(c), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(l), h = t6.data.get(p.dataId).values; + for (let g = 0; g < d.length; ++g) { + let x = g * f, b = h[x], C = 0; + for (let w = 0; w < f; ++w) { + let k = h[x + w]; k > b && (b = k, C = w); } - f[g] = C; + d[g] = C; } - return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(c, "int32", f); + return u.forEach((g) => t6.disposeIntermediateTensorInfo(g)), t6.makeTensorInfo(c, "int32", d); } -var I2 = { kernelName: un, backendName: "cpu", kernelFunc: Ej }; -function $j(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o; +var YT = { kernelName: Vo, backendName: "cpu", kernelFunc: Q6 }; +function Z6(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o; K(n, "argMin"); - let a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = bt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], I.assertAxesAreInnerMostDims("argMin", a, p.shape.length); - let [c, l] = I.computeOutAndReduceShapes(p.shape, a), m = x.sizeFromShape(c), f = x.makeZerosTypedArray(m, "int32"), d = x.sizeFromShape(l), h = t10.data.get(p.dataId).values; - for (let g = 0; g < f.length; ++g) { - let y = g * d, b = h[y], C = 0; - for (let w = 0; w < d; ++w) { - let k = h[y + w]; + let a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], S.assertAxesAreInnerMostDims("argMin", a, p.shape.length); + let [c, l] = S.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(c), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(l), h = t6.data.get(p.dataId).values; + for (let g = 0; g < d.length; ++g) { + let x = g * f, b = h[x], C = 0; + for (let w = 0; w < f; ++w) { + let k = h[x + w]; k < b && (b = k, C = w); } - f[g] = C; + d[g] = C; } - return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(c, "int32", f); + return u.forEach((g) => t6.disposeIntermediateTensorInfo(g)), t6.makeTensorInfo(c, "int32", d); } -var w2 = { kernelName: ja, backendName: "cpu", kernelFunc: $j }; -var Rj = we(Vi, (r) => Math.asin(r)); -var S2 = { kernelName: Vi, backendName: "cpu", kernelFunc: Rj }; -var Aj = we(zi, (r) => Math.asinh(r)); -var v2 = { kernelName: zi, backendName: "cpu", kernelFunc: Aj }; -var Fj = we(Wi, (r) => Math.atan(r)); -var k2 = { kernelName: Wi, backendName: "cpu", kernelFunc: Fj }; -var Dj = Le((r, e) => Math.atan2(r, e)); -var Pj = Ye(sa, Dj); -var T2 = { kernelName: sa, backendName: "cpu", kernelFunc: Pj }; -var Oj = we(Ui, (r) => Math.atanh(r)); -var N2 = { kernelName: Ui, backendName: "cpu", kernelFunc: Oj }; -function rc(r, e, t10, o, n, s) { - let a = n.strideHeight, i = n.strideWidth, p = n.dilationHeight, u = n.dilationWidth, c = n.effectiveFilterHeight, l = n.effectiveFilterWidth, m = n.padInfo.top, f = n.padInfo.left, d = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, h = ne(n.outShape, t10), g = h.values, y = n.outShape[1] * n.outShape[2] * n.outShape[3], b = n.outShape[2] * n.outShape[3], C = n.outShape[3]; +var QT = { kernelName: Za, backendName: "cpu", kernelFunc: Z6 }; +var J6 = Ie(ia, (r) => Math.asin(r)); +var ZT = { kernelName: ia, backendName: "cpu", kernelFunc: J6 }; +var ej = Ie(ua, (r) => Math.asinh(r)); +var JT = { kernelName: ua, backendName: "cpu", kernelFunc: ej }; +var tj = Ie(pa, (r) => Math.atan(r)); +var e2 = { kernelName: pa, backendName: "cpu", kernelFunc: tj }; +var rj = Be((r, e) => Math.atan2(r, e)); +var oj = Qe(la, rj); +var t2 = { kernelName: la, backendName: "cpu", kernelFunc: oj }; +var nj = Ie(ca, (r) => Math.atanh(r)); +var r2 = { kernelName: ca, backendName: "cpu", kernelFunc: nj }; +function Zp(r, e, t6, o, n, s) { + let a = n.strideHeight, i = n.strideWidth, p = n.dilationHeight, u = n.dilationWidth, c = n.effectiveFilterHeight, l = n.effectiveFilterWidth, m = n.padInfo.top, d = n.padInfo.left, f = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, h = le(n.outShape, t6), g = h.values, x = n.outShape[1] * n.outShape[2] * n.outShape[3], b = n.outShape[2] * n.outShape[3], C = n.outShape[3]; for (let w = 0; w < n.batchSize; ++w) { - let k = w * y, _ = w * o[0]; - for (let E = 0; E < n.inChannels; ++E) - for (let R = 0; R < n.outHeight; ++R) { - let A = R * a - m, D = Math.max(0, A), O = Math.min(n.inHeight, c + A), M = k + R * b; + let k = w * x, _ = w * o[0]; + for (let $ = 0; $ < n.inChannels; ++$) + for (let A = 0; A < n.outHeight; ++A) { + let R = A * a - m, D = Math.max(0, R), P = Math.min(n.inHeight, c + R), M = k + A * b; for (let L = 0; L < n.outWidth; ++L) { - let W = L * i - f, V = Math.max(0, W), G = Math.min(n.inWidth, l + W), q = d, H = 0, j = 0; - for (let Z = D; Z < O; Z += p) { + let W = L * i - d, V = Math.max(0, W), U = Math.min(n.inWidth, l + W), q = f, H = 0, j = 0; + for (let Z = D; Z < P; Z += p) { let ee = _ + Z * o[1]; - for (let X = V; X < G; X += u) { - let Q = ee + X * o[2], se = r[Q + E]; - s === "max" && se > q ? q = se : s === "avg" && (H += se, j++); + for (let Y = V; Y < U; Y += u) { + let J = ee + Y * o[2], ie = r[J + $]; + s === "max" && ie > q ? q = ie : s === "avg" && (H += ie, j++); } if (isNaN(q)) break; } - let Y = M + L * C + E; - g[Y] = s === "avg" ? H / j : q; + let X = M + L * C + $; + g[X] = s === "avg" ? H / j : q; } } } return h; } -function Fd(r, e, t10, o, n = false, s = false) { - let a = ne(o.outShape, "int32"), i = o.strideHeight, p = o.strideWidth, u = o.dilationHeight, c = o.dilationWidth, l = o.effectiveFilterHeight, m = o.effectiveFilterWidth, f = o.padInfo.top, d = o.padInfo.left, h = ne(e, t10, r); +function wf(r, e, t6, o, n = false, s = false) { + let a = le(o.outShape, "int32"), i = o.strideHeight, p = o.strideWidth, u = o.dilationHeight, c = o.dilationWidth, l = o.effectiveFilterHeight, m = o.effectiveFilterWidth, d = o.padInfo.top, f = o.padInfo.left, h = le(e, t6, r); for (let g = 0; g < o.batchSize; ++g) - for (let y = 0; y < o.inChannels; ++y) + for (let x = 0; x < o.inChannels; ++x) for (let b = 0; b < o.outHeight; ++b) { - let C = b * i - f, w = C; + let C = b * i - d, w = C; for (; w < 0; ) w += u; let k = Math.min(o.inHeight, l + C); for (let _ = 0; _ < o.outWidth; ++_) { - let E = _ * p - d, R = E; - for (; R < 0; ) - R += c; - let A = Math.min(o.inWidth, m + E), D = Number.NEGATIVE_INFINITY, O = -1; + let $ = _ * p - f, A = $; + for (; A < 0; ) + A += c; + let R = Math.min(o.inWidth, m + $), D = Number.NEGATIVE_INFINITY, P = -1; for (let M = w; M < k; M += u) { let L = M - C; - for (let W = R; W < A; W += c) { - let V = W - E, G = h.get(g, M, W, y); - G > D && (D = G, n ? O = s ? ((g * o.inHeight + M) * o.inWidth + W) * o.inChannels + y : (M * o.inWidth + W) * o.inChannels + y : O = L * m + V); + for (let W = A; W < R; W += c) { + let V = W - $, U = h.get(g, M, W, x); + U > D && (D = U, n ? P = s ? ((g * o.inHeight + M) * o.inWidth + W) * o.inChannels + x : (M * o.inWidth + W) * o.inChannels + x : P = L * m + V); } } - a.set(O, g, b, _, y); + a.set(P, g, b, _, x); } } return a; } -function Dd(r, e, t10, o, n, s) { - let a = n.strideDepth, i = n.strideHeight, p = n.strideWidth, u = n.dilationDepth, c = n.dilationHeight, l = n.dilationWidth, m = n.effectiveFilterDepth, f = n.effectiveFilterHeight, d = n.effectiveFilterWidth, h = n.padInfo.front, g = n.padInfo.top, y = n.padInfo.left, b = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, C = ne(n.outShape, t10), w = C.values, k = n.outShape[1] * n.outShape[2] * n.outShape[3] * n.outShape[4], _ = n.outShape[2] * n.outShape[3] * n.outShape[4], E = n.outShape[3] * n.outShape[4], R = n.outShape[4]; - for (let A = 0; A < n.batchSize; ++A) { - let D = A * k, O = A * o[0]; +function If(r, e, t6, o, n, s) { + let a = n.strideDepth, i = n.strideHeight, p = n.strideWidth, u = n.dilationDepth, c = n.dilationHeight, l = n.dilationWidth, m = n.effectiveFilterDepth, d = n.effectiveFilterHeight, f = n.effectiveFilterWidth, h = n.padInfo.front, g = n.padInfo.top, x = n.padInfo.left, b = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, C = le(n.outShape, t6), w = C.values, k = n.outShape[1] * n.outShape[2] * n.outShape[3] * n.outShape[4], _ = n.outShape[2] * n.outShape[3] * n.outShape[4], $ = n.outShape[3] * n.outShape[4], A = n.outShape[4]; + for (let R = 0; R < n.batchSize; ++R) { + let D = R * k, P = R * o[0]; for (let M = 0; M < n.inChannels; ++M) for (let L = 0; L < n.outDepth; ++L) { let W = L * a - h, V = W; for (; V < 0; ) V += u; - let G = Math.min(n.inDepth, m + W), q = D + L * _; + let U = Math.min(n.inDepth, m + W), q = D + L * _; for (let H = 0; H < n.outHeight; ++H) { - let j = H * i - g, Y = j; - for (; Y < 0; ) - Y += c; - let Z = Math.min(n.inHeight, f + j), ee = q + H * E; - for (let X = 0; X < n.outWidth; ++X) { - let Q = X * p - y, se = Q; - for (; se < 0; ) - se += l; - let ie = Math.min(n.inWidth, d + Q), de = ee + X * R, Ie = b, Se = 0, Ee = 0; - for (let st = V; st < G; st += u) { - let pt = O + st * o[1]; - for (let De = Y; De < Z; De += c) { - let ft = pt + De * o[2]; - for (let at = se; at < ie; at += l) { - let dt = ft + at * o[3], It = r[dt + M]; - if (s === "max" && It > Ie ? Ie = It : s === "avg" && (Se += It, Ee++), isNaN(Ie)) + let j = H * i - g, X = j; + for (; X < 0; ) + X += c; + let Z = Math.min(n.inHeight, d + j), ee = q + H * $; + for (let Y = 0; Y < n.outWidth; ++Y) { + let J = Y * p - x, ie = J; + for (; ie < 0; ) + ie += l; + let pe = Math.min(n.inWidth, f + J), he = ee + Y * A, we = b, ve = 0, $e = 0; + for (let nt = V; nt < U; nt += u) { + let pt = P + nt * o[1]; + for (let Oe = X; Oe < Z; Oe += c) { + let mt = pt + Oe * o[2]; + for (let at = ie; at < pe; at += l) { + let ft = mt + at * o[3], wt = r[ft + M]; + if (s === "max" && wt > we ? we = wt : s === "avg" && (ve += wt, $e++), isNaN(we)) break; } - if (isNaN(Ie)) + if (isNaN(we)) break; } - if (isNaN(Ie)) + if (isNaN(we)) break; } - let Me = de + M; - w[Me] = s === "avg" ? Se / Ee : Ie; + let Le = he + M; + w[Le] = s === "avg" ? ve / $e : we; } } } } return C; } -function _2(r, e) { - let t10 = ne(e.outShape, "int32"), o = e.strideDepth, n = e.strideHeight, s = e.strideWidth, a = e.dilationDepth, i = e.dilationHeight, p = e.dilationWidth, u = e.effectiveFilterDepth, c = e.effectiveFilterHeight, l = e.effectiveFilterWidth, m = e.padInfo.front, f = e.padInfo.top, d = e.padInfo.left; +function o2(r, e) { + let t6 = le(e.outShape, "int32"), o = e.strideDepth, n = e.strideHeight, s = e.strideWidth, a = e.dilationDepth, i = e.dilationHeight, p = e.dilationWidth, u = e.effectiveFilterDepth, c = e.effectiveFilterHeight, l = e.effectiveFilterWidth, m = e.padInfo.front, d = e.padInfo.top, f = e.padInfo.left; for (let h = 0; h < e.batchSize; ++h) for (let g = 0; g < e.inChannels; ++g) - for (let y = 0; y < e.outDepth; ++y) { - let b = y * o - m, C = b; + for (let x = 0; x < e.outDepth; ++x) { + let b = x * o - m, C = b; for (; C < 0; ) C += a; let w = Math.min(e.inDepth, u + b); for (let k = 0; k < e.outHeight; ++k) { - let _ = k * n - f, E = _; - for (; E < 0; ) - E += i; - let R = Math.min(e.inHeight, c + _); - for (let A = 0; A < e.outWidth; ++A) { - let D = A * s - d, O = D; - for (; O < 0; ) - O += p; + let _ = k * n - d, $ = _; + for (; $ < 0; ) + $ += i; + let A = Math.min(e.inHeight, c + _); + for (let R = 0; R < e.outWidth; ++R) { + let D = R * s - f, P = D; + for (; P < 0; ) + P += p; let M = Math.min(e.inWidth, l + D), L = Number.NEGATIVE_INFINITY, W = -1; for (let V = C; V < w; V += a) { - let G = V - b; - for (let q = E; q < R; q += i) { + let U = V - b; + for (let q = $; q < A; q += i) { let H = q - _; - for (let j = O; j < M; j += p) { - let Y = j - D, Z = r.get(h, V, q, j, g); - Z >= L && (L = Z, W = G * c * l + H * c + Y); + for (let j = P; j < M; j += p) { + let X = j - D, Z = r.get(h, V, q, j, g); + Z >= L && (L = Z, W = U * c * l + H * c + X); } } } - t10.set(W, h, y, k, A, g); + t6.set(W, h, x, k, R, g); } } } - return t10; + return t6; } -function Mj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e; +function sj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e; K(n, "avgPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - x.assert(I.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let c = I.computePool2DInfo(n.shape, s, a, u, i, p), l; - if (c.filterWidth === 1 && c.filterHeight === 1 && x.arraysEqual(c.inShape, c.outShape)) - l = ar({ inputs: { x: n }, backend: t10 }); + y.assert(S.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = S.computePool2DInfo(n.shape, s, a, u, i, p), l; + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + l = ar({ inputs: { x: n }, backend: t6 }); else { - let m = t10.data.get(n.dataId).values, f = x.computeStrides(n.shape), d = rc(m, n.shape, n.dtype, f, c, "avg"); - l = t10.makeTensorInfo(c.outShape, n.dtype, d.values); + let m = t6.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = Zp(m, n.shape, n.dtype, d, c, "avg"); + l = t6.makeTensorInfo(c.outShape, n.dtype, f.values); } return l; } -var E2 = { kernelName: pn, backendName: "cpu", kernelFunc: Mj }; -function Lj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var n2 = { kernelName: zo, backendName: "cpu", kernelFunc: sj }; +function aj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; K(n, "avgPool3d"); - let c = I.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.data.get(n.dataId).values, m = Dd(l, n.shape, n.dtype, x.computeStrides(n.shape), c, "avg"); - return t10.makeTensorInfo(m.shape, "float32", m.values); + let c = S.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t6.data.get(n.dataId).values, m = If(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "avg"); + return t6.makeTensorInfo(m.shape, "float32", m.values); } -var $2 = { kernelName: ip, backendName: "cpu", kernelFunc: Lj }; -function Bj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var s2 = { kernelName: ip, backendName: "cpu", kernelFunc: aj }; +function ij(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; K([n, s], "avgPool3DGrad"); - let c = I.computePool3DInfo(s.shape, a, i, 1, p, u), l = c.strideDepth, m = c.strideHeight, f = c.strideWidth, d = c.filterDepth, h = c.filterHeight, g = c.filterWidth, y = c.dilationDepth, b = c.dilationHeight, C = c.dilationWidth, w = c.effectiveFilterDepth, k = c.effectiveFilterHeight, _ = c.effectiveFilterWidth, E = w - 1 - c.padInfo.front, R = _ - 1 - c.padInfo.left, A = k - 1 - c.padInfo.top, D = ne(s.shape, "float32"), O = 1 / (d * h * g), M = t10.bufferSync(n); + let c = S.computePool3DInfo(s.shape, a, i, 1, p, u), l = c.strideDepth, m = c.strideHeight, d = c.strideWidth, f = c.filterDepth, h = c.filterHeight, g = c.filterWidth, x = c.dilationDepth, b = c.dilationHeight, C = c.dilationWidth, w = c.effectiveFilterDepth, k = c.effectiveFilterHeight, _ = c.effectiveFilterWidth, $ = w - 1 - c.padInfo.front, A = _ - 1 - c.padInfo.left, R = k - 1 - c.padInfo.top, D = le(s.shape, "float32"), P = 1 / (f * h * g), M = t6.bufferSync(n); for (let L = 0; L < c.batchSize; ++L) for (let W = 0; W < c.inChannels; ++W) for (let V = 0; V < c.inDepth; ++V) - for (let G = 0; G < c.inHeight; ++G) + for (let U = 0; U < c.inHeight; ++U) for (let q = 0; q < c.inWidth; ++q) { - let H = V - E, j = G - A, Y = q - R, Z = 0; - for (let ee = 0; ee < w; ee += y) { - let X = (H + ee) / l; - if (!(X < 0 || X >= c.outDepth || Math.floor(X) !== X)) - for (let Q = 0; Q < k; Q += b) { - let se = (j + Q) / m; - if (!(se < 0 || se >= c.outHeight || Math.floor(se) !== se)) - for (let ie = 0; ie < _; ie += C) { - let de = (Y + ie) / f; - if (de < 0 || de >= c.outWidth || Math.floor(de) !== de) + let H = V - $, j = U - R, X = q - A, Z = 0; + for (let ee = 0; ee < w; ee += x) { + let Y = (H + ee) / l; + if (!(Y < 0 || Y >= c.outDepth || Math.floor(Y) !== Y)) + for (let J = 0; J < k; J += b) { + let ie = (j + J) / m; + if (!(ie < 0 || ie >= c.outHeight || Math.floor(ie) !== ie)) + for (let pe = 0; pe < _; pe += C) { + let he = (X + pe) / d; + if (he < 0 || he >= c.outWidth || Math.floor(he) !== he) continue; - let Ie = M.get(L, X, se, de, W); - Z += Ie; + let we = M.get(L, Y, ie, he, W); + Z += we; } } } - D.set(Z * O, L, V, G, q, W); + D.set(Z * P, L, V, U, q, W); } - return t10.makeTensorInfo(D.shape, D.dtype, D.values); + return t6.makeTensorInfo(D.shape, D.dtype, D.values); } -var R2 = { kernelName: Fm, backendName: "cpu", kernelFunc: Bj }; -function Vj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, a = s; +var a2 = { kernelName: Im, backendName: "cpu", kernelFunc: ij }; +function uj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, a = s; K([n, s], "avgPoolGrad"); - let { filterSize: i, strides: p, pad: u } = o, c = I.computePool2DInfo(a.shape, i, p, 1, u), l = c.strideHeight, m = c.strideWidth, f = c.filterHeight, d = c.filterWidth, h = c.dilationHeight, g = c.dilationWidth, y = c.effectiveFilterHeight, b = c.effectiveFilterWidth, C = b - 1 - c.padInfo.left, w = y - 1 - c.padInfo.top, k = ne(a.shape, "float32"), _ = 1 / (f * d), E = t10.data.get(n.dataId).values, R = ne(n.shape, "float32", E); - for (let A = 0; A < c.batchSize; ++A) + let { filterSize: i, strides: p, pad: u } = o, c = S.computePool2DInfo(a.shape, i, p, 1, u), l = c.strideHeight, m = c.strideWidth, d = c.filterHeight, f = c.filterWidth, h = c.dilationHeight, g = c.dilationWidth, x = c.effectiveFilterHeight, b = c.effectiveFilterWidth, C = b - 1 - c.padInfo.left, w = x - 1 - c.padInfo.top, k = le(a.shape, "float32"), _ = 1 / (d * f), $ = t6.data.get(n.dataId).values, A = le(n.shape, "float32", $); + for (let R = 0; R < c.batchSize; ++R) for (let D = 0; D < c.inChannels; ++D) - for (let O = 0; O < c.inHeight; ++O) + for (let P = 0; P < c.inHeight; ++P) for (let M = 0; M < c.inWidth; ++M) { - let L = O - w, W = M - C, V = 0; - for (let G = 0; G < y; G += h) { - let q = (L + G) / l; + let L = P - w, W = M - C, V = 0; + for (let U = 0; U < x; U += h) { + let q = (L + U) / l; if (!(q < 0 || q >= c.outHeight || Math.floor(q) !== q)) for (let H = 0; H < b; H += g) { let j = (W + H) / m; if (j < 0 || j >= c.outWidth || Math.floor(j) !== j) continue; - let Y = R.get(A, q, j, D); - V += Y; + let X = A.get(R, q, j, D); + V += X; } } - k.set(V * _, A, O, M, D); + k.set(V * _, R, P, M, D); } - return t10.makeTensorInfo(k.shape, k.dtype, k.values); + return t6.makeTensorInfo(k.shape, k.dtype, k.values); } -var A2 = { kernelName: Am, backendName: "cpu", kernelFunc: Vj }; -function zj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, scale: s, offset: a, mean: i, variance: p } = e; - x.assert(i.shape.length === p.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), x.assert(a == null || i.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), x.assert(s == null || i.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."), K([n, i, p, s, a], "batchNorm"); +var i2 = { kernelName: wm, backendName: "cpu", kernelFunc: uj }; +function pj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, scale: s, offset: a, mean: i, variance: p } = e; + y.assert(i.shape.length === p.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), y.assert(a == null || i.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), y.assert(s == null || i.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."), K([n, i, p, s, a], "batchNorm"); let { varianceEpsilon: u } = o; u == null && (u = 1e-3); - let c = t10.data.get(n.dataId).values, l = t10.data.get(i.dataId).values, m = t10.data.get(p.dataId).values, f = s ? t10.data.get(s.dataId).values : new Float32Array([1]), d = a ? t10.data.get(a.dataId).values : new Float32Array([0]), h = new Float32Array(c.length), g = d.length, y = f.length, b = m.length, C = l.length, w = 0, k = 0, _ = 0, E = 0; - for (let R = 0; R < c.length; ++R) - h[R] = d[w++] + (c[R] - l[k++]) * f[_++] / Math.sqrt(m[E++] + u), w >= g && (w = 0), k >= C && (k = 0), _ >= y && (_ = 0), E >= b && (E = 0); - return t10.makeTensorInfo(n.shape, n.dtype, h); + let c = t6.data.get(n.dataId).values, l = t6.data.get(i.dataId).values, m = t6.data.get(p.dataId).values, d = s ? t6.data.get(s.dataId).values : new Float32Array([1]), f = a ? t6.data.get(a.dataId).values : new Float32Array([0]), h = new Float32Array(c.length), g = f.length, x = d.length, b = m.length, C = l.length, w = 0, k = 0, _ = 0, $ = 0; + for (let A = 0; A < c.length; ++A) + h[A] = f[w++] + (c[A] - l[k++]) * d[_++] / Math.sqrt(m[$++] + u), w >= g && (w = 0), k >= C && (k = 0), _ >= x && (_ = 0), $ >= b && ($ = 0); + return t6.makeTensorInfo(n.shape, n.dtype, h); } -var F2 = { kernelName: kn, backendName: "cpu", kernelFunc: zj }; -function Wj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; +var u2 = { kernelName: an, backendName: "cpu", kernelFunc: pj }; +function cj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; K([n], "batchToSpaceND"); - let i = s.reduce((y, b) => y * b), p = I.getReshaped(n.shape, s, i), u = I.getPermuted(p.length, s.length), c = I.getReshapedPermuted(n.shape, s, i), l = I.getSliceBeginCoords(a, s.length), m = I.getSliceSize(c, a, s.length), f = Oe({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), d = bt({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), h = Oe({ inputs: { x: d }, backend: t10, attrs: { shape: c } }), g = qo({ inputs: { x: h }, backend: t10, attrs: { begin: l, size: m } }); - return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(h), g; + let i = s.reduce((x, b) => x * b), p = S.getReshaped(n.shape, s, i), u = S.getPermuted(p.length, s.length), c = S.getReshapedPermuted(n.shape, s, i), l = S.getSliceBeginCoords(a, s.length), m = S.getSliceSize(c, a, s.length), d = Me({ inputs: { x: n }, backend: t6, attrs: { shape: p } }), f = Ct({ inputs: { x: d }, backend: t6, attrs: { perm: u } }), h = Me({ inputs: { x: f }, backend: t6, attrs: { shape: c } }), g = No({ inputs: { x: h }, backend: t6, attrs: { begin: l, size: m } }); + return t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(f), t6.disposeIntermediateTensorInfo(h), g; } -var D2 = { kernelName: hs, backendName: "cpu", kernelFunc: Wj }; -function Uj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = Zp(i, p, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, u); +var p2 = { kernelName: xs, backendName: "cpu", kernelFunc: cj }; +function lj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = t6.data.get(n.dataId).values, p = t6.data.get(s.dataId).values, u = Kp(i, p, s.dtype, s.shape, a); + return t6.makeTensorInfo([a], s.dtype, u); } -var P2 = { kernelName: up, backendName: "cpu", kernelFunc: Uj }; -function Gj(r) { - let { inputs: e, backend: t10 } = r, { s0: o, s1: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = I.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); - return t10.makeTensorInfo([i.length], "int32", Int32Array.from(i)); +var c2 = { kernelName: Ja, backendName: "cpu", kernelFunc: lj }; +function mj(r) { + let { inputs: e, backend: t6 } = r, { s0: o, s1: n } = e, s = t6.data.get(o.dataId).values, a = t6.data.get(n.dataId).values, i = S.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); + return t6.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var O2 = { kernelName: pp, backendName: "cpu", kernelFunc: Gj }; -var Hj = we(Ro, (r, e) => { - let t10 = e; - return r > t10.clipValueMax ? t10.clipValueMax : r < t10.clipValueMin ? t10.clipValueMin : r; +var l2 = { kernelName: up, backendName: "cpu", kernelFunc: mj }; +var dj = Ie(lo, (r, e) => { + let t6 = e; + return r > t6.clipValueMax ? t6.clipValueMax : r < t6.clipValueMin ? t6.clipValueMin : r; }); -var M2 = { kernelName: Ro, backendName: "cpu", kernelFunc: Hj }; -var qj = (r) => { - let { x: e } = r.inputs, t10 = r.backend, o = new Float32Array(x.sizeFromShape(e.shape)), n = t10.data.get(e.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values; +var m2 = { kernelName: lo, backendName: "cpu", kernelFunc: dj }; +var fj = (r) => { + let { x: e } = r.inputs, t6 = r.backend, o = new Float32Array(y.sizeFromShape(e.shape)), n = t6.data.get(e.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = t6.data.get(s.dataId).values, p = t6.data.get(a.dataId).values; for (let u = 0; u < i.length; u++) { let c = i[u], l = p[u]; o[u] = Math.hypot(c, l); } - return t10.makeOutput(o, e.shape, "float32"); + return t6.makeOutput(o, e.shape, "float32"); }; -var L2 = { kernelName: cp, backendName: "cpu", kernelFunc: qj }; -function qs(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.imag, s = t10.data.get(n.dataId).values; - return t10.makeTensorInfo(n.shape, n.dtype, s); +var d2 = { kernelName: pp, backendName: "cpu", kernelFunc: fj }; +function Xs(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.data.get(o.dataId).complexTensorInfos.imag, s = t6.data.get(n.dataId).values; + return t6.makeTensorInfo(n.shape, n.dtype, s); } -var B2 = { kernelName: Ya, backendName: "cpu", kernelFunc: qs }; -function vi(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o, s = x.parseAxisParam(n, e[0].shape)[0], a = e.map((h) => h.shape); - I.assertParamsConsistent(a, s); - let i = I.computeOutShape(e.map((h) => h.shape), s); - if (x.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); - let p = e.filter((h) => x.sizeFromShape(h.shape) > 0); +var f2 = { kernelName: si, backendName: "cpu", kernelFunc: Xs }; +function Pi(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((h) => h.shape); + S.assertParamsConsistent(a, s); + let i = S.computeOutShape(e.map((h) => h.shape), s); + if (y.sizeFromShape(i) === 0) + return t6.makeTensorInfo(i, e[0].dtype, []); + let p = e.filter((h) => y.sizeFromShape(h.shape) > 0); if (p.length === 1) - return ar({ inputs: { x: p[0] }, backend: t10 }); + return ar({ inputs: { x: p[0] }, backend: t6 }); if (p[0].dtype === "complex64") { - let h = p.map((w) => Wo({ inputs: { input: w }, backend: t10 })), g = p.map((w) => qs({ inputs: { input: w }, backend: t10 })), y = vi({ inputs: h, backend: t10, attrs: { axis: s } }), b = vi({ inputs: g, backend: t10, attrs: { axis: s } }), C = qt({ inputs: { real: y, imag: b }, backend: t10 }); - return h.forEach((w) => t10.disposeIntermediateTensorInfo(w)), g.forEach((w) => t10.disposeIntermediateTensorInfo(w)), t10.disposeIntermediateTensorInfo(y), t10.disposeIntermediateTensorInfo(b), C; + let h = p.map((w) => wo({ inputs: { input: w }, backend: t6 })), g = p.map((w) => Xs({ inputs: { input: w }, backend: t6 })), x = Pi({ inputs: h, backend: t6, attrs: { axis: s } }), b = Pi({ inputs: g, backend: t6, attrs: { axis: s } }), C = Ht({ inputs: { real: x, imag: b }, backend: t6 }); + return h.forEach((w) => t6.disposeIntermediateTensorInfo(w)), g.forEach((w) => t6.disposeIntermediateTensorInfo(w)), t6.disposeIntermediateTensorInfo(x), t6.disposeIntermediateTensorInfo(b), C; } let u = p.map((h) => { - let y = [-1, x.sizeFromShape(h.shape.slice(s))]; - return Oe({ inputs: { x: h }, backend: t10, attrs: { shape: y } }); - }), c = u.map((h) => ({ vals: t10.data.get(h.dataId).values, shape: h.shape })); - i = I.computeOutShape(u.map((h) => h.shape), 1); - let l = u[0].shape[0] === 1, m = Iu(c, i, e[0].dtype, l), f = I.computeOutShape(p.map((h) => h.shape), s), d = t10.makeTensorInfo(f, e[0].dtype, m); - return u.forEach((h) => t10.disposeIntermediateTensorInfo(h)), d; + let x = [-1, y.sizeFromShape(h.shape.slice(s))]; + return Me({ inputs: { x: h }, backend: t6, attrs: { shape: x } }); + }), c = u.map((h) => ({ vals: t6.data.get(h.dataId).values, shape: h.shape })); + i = S.computeOutShape(u.map((h) => h.shape), 1); + let l = u[0].shape[0] === 1, m = Su(c, i, e[0].dtype, l), d = S.computeOutShape(p.map((h) => h.shape), s), f = t6.makeTensorInfo(d, e[0].dtype, m); + return u.forEach((h) => t6.disposeIntermediateTensorInfo(h)), f; } -var V2 = { kernelName: gs, backendName: "cpu", kernelFunc: vi }; -function RI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o; +var h2 = { kernelName: ys, backendName: "cpu", kernelFunc: Pi }; +function NS(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o; K([n, s], "conv2d"); - let l = I.convertConv2DDataFormat(p), m = I.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), f = m.filterHeight, d = m.filterWidth, h = m.dilationHeight, g = m.dilationWidth, y = m.padInfo.left, b = m.padInfo.top, C = m.dataFormat === "channelsLast", w = new je(m.outShape, n.dtype), k = x.computeStrides(n.shape), _ = x.computeStrides(s.shape), E = k[0], R = C ? k[1] : k[2], A = C ? k[2] : 1, D = C ? 1 : k[1], O = w.strides[0], M = C ? w.strides[1] : w.strides[2], L = C ? w.strides[2] : 1, W = C ? 1 : w.strides[1], V = t10.data.get(n.dataId).values, G = t10.data.get(s.dataId).values, q = w.values; + let l = S.convertConv2DDataFormat(p), m = S.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), d = m.filterHeight, f = m.filterWidth, h = m.dilationHeight, g = m.dilationWidth, x = m.padInfo.left, b = m.padInfo.top, C = m.dataFormat === "channelsLast", w = new st(m.outShape, n.dtype), k = y.computeStrides(n.shape), _ = y.computeStrides(s.shape), $ = k[0], A = C ? k[1] : k[2], R = C ? k[2] : 1, D = C ? 1 : k[1], P = w.strides[0], M = C ? w.strides[1] : w.strides[2], L = C ? w.strides[2] : 1, W = C ? 1 : w.strides[1], V = t6.data.get(n.dataId).values, U = t6.data.get(s.dataId).values, q = w.values; for (let H = 0; H < m.batchSize; ++H) { - let j = H * E, Y = H * O; + let j = H * $, X = H * P; for (let Z = 0; Z < m.outHeight; ++Z) { - let ee = Y + Z * M, X = Z * m.strideHeight - b; - for (let Q = 0; Q < f; ++Q) { - let se = X + Q * h; - if (se < 0 || se >= m.inHeight) + let ee = X + Z * M, Y = Z * m.strideHeight - b; + for (let J = 0; J < d; ++J) { + let ie = Y + J * h; + if (ie < 0 || ie >= m.inHeight) continue; - let ie = Q * _[0], de = j + se * R; - for (let Ie = 0; Ie < m.outWidth; ++Ie) { - let Se = ee + Ie * L, Ee = Ie * m.strideWidth - y; - for (let Me = 0; Me < d; ++Me) { - let st = Ee + Me * g; - if (st < 0 || st >= m.inWidth) + let pe = J * _[0], he = j + ie * A; + for (let we = 0; we < m.outWidth; ++we) { + let ve = ee + we * L, $e = we * m.strideWidth - x; + for (let Le = 0; Le < f; ++Le) { + let nt = $e + Le * g; + if (nt < 0 || nt >= m.inWidth) continue; - let pt = ie + Me * _[1], De = de + st * A, ft = pt; + let pt = pe + Le * _[1], Oe = he + nt * R, mt = pt; for (let at = 0; at < m.inChannels; ++at) { - let dt = V[De + at * D]; - for (let It = 0; It < m.outChannels; ++It) - q[Se + It * W] += dt * G[ft + It]; - ft += m.outChannels; + let ft = V[Oe + at * D]; + for (let wt = 0; wt < m.outChannels; ++wt) + q[ve + wt * W] += ft * U[mt + wt]; + mt += m.outChannels; } } } } } } - return t10.makeTensorInfo(w.shape, w.dtype, q); + return t6.makeTensorInfo(w.shape, w.dtype, q); } -var z2 = { kernelName: ln, backendName: "cpu", kernelFunc: RI }; -function Kj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o; +var g2 = { kernelName: Go, backendName: "cpu", kernelFunc: NS }; +function hj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o; K([n, s], "conv2dBackpropFilter"); - let l = I.convertConv2DDataFormat(p), m = I.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), { strideHeight: f, strideWidth: d, filterHeight: h, filterWidth: g } = m, y = m.dataFormat === "channelsLast", b = new je(m.filterShape, "float32"), C = m.padInfo.left, w = m.padInfo.top, k = t10.data.get(n.dataId).values, _ = t10.data.get(s.dataId).values, E = new je(n.shape, n.dtype, k), R = new je(s.shape, s.dtype, _); - for (let A = 0; A < h; ++A) { - let D = Math.max(0, Math.ceil((w - A) / f)), O = Math.min(m.outHeight, (m.inHeight + w - A) / f); + let l = S.convertConv2DDataFormat(p), m = S.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), { strideHeight: d, strideWidth: f, filterHeight: h, filterWidth: g } = m, x = m.dataFormat === "channelsLast", b = new st(m.filterShape, "float32"), C = m.padInfo.left, w = m.padInfo.top, k = t6.data.get(n.dataId).values, _ = t6.data.get(s.dataId).values, $ = new st(n.shape, n.dtype, k), A = new st(s.shape, s.dtype, _); + for (let R = 0; R < h; ++R) { + let D = Math.max(0, Math.ceil((w - R) / d)), P = Math.min(m.outHeight, (m.inHeight + w - R) / d); for (let M = 0; M < g; ++M) { - let L = Math.max(0, Math.ceil((C - M) / d)), W = Math.min(m.outWidth, (m.inWidth + C - M) / d); + let L = Math.max(0, Math.ceil((C - M) / f)), W = Math.min(m.outWidth, (m.inWidth + C - M) / f); for (let V = 0; V < m.inChannels; ++V) - for (let G = 0; G < m.outChannels; ++G) { + for (let U = 0; U < m.outChannels; ++U) { let q = 0; for (let H = 0; H < m.batchSize; ++H) - for (let j = D; j < O; ++j) { - let Y = A + j * f - w; + for (let j = D; j < P; ++j) { + let X = R + j * d - w; for (let Z = L; Z < W; ++Z) { - let ee = M + Z * d - C; - y ? q += E.get(H, Y, ee, V) * R.get(H, j, Z, G) : q += E.get(H, V, Y, ee) * R.get(H, G, j, Z); + let ee = M + Z * f - C; + x ? q += $.get(H, X, ee, V) * A.get(H, j, Z, U) : q += $.get(H, V, X, ee) * A.get(H, U, j, Z); } } - b.set(q, A, M, V, G); + b.set(q, R, M, V, U); } } } - return t10.makeTensorInfo(b.shape, b.dtype, b.values); + return t6.makeTensorInfo(b.shape, b.dtype, b.values); } -var W2 = { kernelName: lp, backendName: "cpu", kernelFunc: Kj }; -function jj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o; +var x2 = { kernelName: cp, backendName: "cpu", kernelFunc: hj }; +function gj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o; K([n, s], "conv2dBackpropInput"); - let l = x.computeStrides(s.shape), m = x.computeStrides(n.shape), f = I.convertConv2DDataFormat(u), d = I.computeConv2DInfo(a, s.shape, i, 1, p, c, false, f), h = new je(d.inShape, "float32"), g = h.values, y = t10.data.get(n.dataId).values, b = t10.data.get(s.dataId).values, [C, w, k] = l, { batchSize: _, filterHeight: E, filterWidth: R, inChannels: A, inHeight: D, inWidth: O, outChannels: M, outHeight: L, outWidth: W, strideHeight: V, strideWidth: G } = d; - f = d.dataFormat; - let q = E - 1 - d.padInfo.top, H = R - 1 - d.padInfo.left, j = f === "channelsLast", Y = h.strides[0], Z = j ? h.strides[1] : h.strides[2], ee = j ? h.strides[2] : 1, X = j ? 1 : h.strides[1], Q = m[0], se = j ? m[1] : m[2], ie = j ? m[2] : 1, de = j ? 1 : m[1]; - for (let Ie = 0; Ie < _; ++Ie) - for (let Se = 0; Se < A; ++Se) - for (let Ee = 0; Ee < D; ++Ee) { - let Me = Ee - q, st = Math.max(0, Math.ceil(Me / V)), pt = Math.min(L, (E + Me) / V); - for (let De = 0; De < O; ++De) { - let ft = De - H, at = Math.max(0, Math.ceil(ft / G)), dt = Math.min(W, (R + ft) / G), It = 0; - for (let Pt = st; Pt < pt; ++Pt) { - let jr = Pt * V - Me; - for (let er = at; er < dt; ++er) { - let Tt = er * G - ft, tr = Q * Ie + se * Pt + ie * er, rr = C * (E - 1 - jr) + w * (R - 1 - Tt) + k * Se; - for (let Xr = 0; Xr < M; ++Xr) { - let Yr = y[tr + de * Xr], pr = b[rr + Xr]; - It += Yr * pr; + let l = y.computeStrides(s.shape), m = y.computeStrides(n.shape), d = S.convertConv2DDataFormat(u), f = S.computeConv2DInfo(a, s.shape, i, 1, p, c, false, d), h = new st(f.inShape, "float32"), g = h.values, x = t6.data.get(n.dataId).values, b = t6.data.get(s.dataId).values, [C, w, k] = l, { batchSize: _, filterHeight: $, filterWidth: A, inChannels: R, inHeight: D, inWidth: P, outChannels: M, outHeight: L, outWidth: W, strideHeight: V, strideWidth: U } = f; + d = f.dataFormat; + let q = $ - 1 - f.padInfo.top, H = A - 1 - f.padInfo.left, j = d === "channelsLast", X = h.strides[0], Z = j ? h.strides[1] : h.strides[2], ee = j ? h.strides[2] : 1, Y = j ? 1 : h.strides[1], J = m[0], ie = j ? m[1] : m[2], pe = j ? m[2] : 1, he = j ? 1 : m[1]; + for (let we = 0; we < _; ++we) + for (let ve = 0; ve < R; ++ve) + for (let $e = 0; $e < D; ++$e) { + let Le = $e - q, nt = Math.max(0, Math.ceil(Le / V)), pt = Math.min(L, ($ + Le) / V); + for (let Oe = 0; Oe < P; ++Oe) { + let mt = Oe - H, at = Math.max(0, Math.ceil(mt / U)), ft = Math.min(W, (A + mt) / U), wt = 0; + for (let Ot = nt; Ot < pt; ++Ot) { + let Kr = Ot * V - Le; + for (let er = at; er < ft; ++er) { + let Nt = er * U - mt, tr = J * we + ie * Ot + pe * er, rr = C * ($ - 1 - Kr) + w * (A - 1 - Nt) + k * ve; + for (let jr = 0; jr < M; ++jr) { + let Xr = x[tr + he * jr], pr = b[rr + jr]; + wt += Xr * pr; } } } - let Fr = Y * Ie + Z * Ee + ee * De + X * Se; - g[Fr] = It; + let Fr = X * we + Z * $e + ee * Oe + Y * ve; + g[Fr] = wt; } } - return t10.makeTensorInfo(h.shape, h.dtype, h.values); + return t6.makeTensorInfo(h.shape, h.dtype, h.values); } -var U2 = { kernelName: mn, backendName: "cpu", kernelFunc: jj }; -function Xj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; +var y2 = { kernelName: Ho, backendName: "cpu", kernelFunc: gj }; +function xj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; K([n, s], "conv3d"); - let u = I.computeConv3DInfo(n.shape, s.shape, a, p, i), { filterDepth: c, filterHeight: l, filterWidth: m, dilationDepth: f, dilationHeight: d, dilationWidth: h, padInfo: g } = u, y = g.front, b = g.left, C = g.top, w = new je(u.outShape, n.dtype), k = t10.data.get(n.dataId).values, _ = t10.data.get(s.dataId).values, E = w.values, R = x.computeStrides(n.shape), A = x.computeStrides(s.shape); + let u = S.computeConv3DInfo(n.shape, s.shape, a, p, i), { filterDepth: c, filterHeight: l, filterWidth: m, dilationDepth: d, dilationHeight: f, dilationWidth: h, padInfo: g } = u, x = g.front, b = g.left, C = g.top, w = new st(u.outShape, n.dtype), k = t6.data.get(n.dataId).values, _ = t6.data.get(s.dataId).values, $ = w.values, A = y.computeStrides(n.shape), R = y.computeStrides(s.shape); for (let D = 0; D < u.batchSize; ++D) { - let O = D * R[0], M = D * w.strides[0]; + let P = D * A[0], M = D * w.strides[0]; for (let L = 0; L < u.outDepth; ++L) { - let W = M + L * w.strides[1], V = L * u.strideDepth - y; - for (let G = 0; G < c; ++G) { - let q = V + G * f; + let W = M + L * w.strides[1], V = L * u.strideDepth - x; + for (let U = 0; U < c; ++U) { + let q = V + U * d; if (q < 0 || q >= u.inDepth) continue; - let H = G * A[0], j = O + q * R[1]; - for (let Y = 0; Y < u.outHeight; ++Y) { - let Z = W + Y * w.strides[2], ee = Y * u.strideHeight - C; - for (let X = 0; X < l; ++X) { - let Q = ee + X * d; - if (Q < 0 || Q >= u.inHeight) + let H = U * R[0], j = P + q * A[1]; + for (let X = 0; X < u.outHeight; ++X) { + let Z = W + X * w.strides[2], ee = X * u.strideHeight - C; + for (let Y = 0; Y < l; ++Y) { + let J = ee + Y * f; + if (J < 0 || J >= u.inHeight) continue; - let se = H + X * A[1], ie = j + Q * R[2]; - for (let de = 0; de < u.outWidth; ++de) { - let Ie = Z + de * u.outChannels, Se = de * u.strideWidth - b; - for (let Ee = 0; Ee < m; ++Ee) { - let Me = Se + Ee * h; - if (Me < 0 || Me >= u.inWidth) + let ie = H + Y * R[1], pe = j + J * A[2]; + for (let he = 0; he < u.outWidth; ++he) { + let we = Z + he * u.outChannels, ve = he * u.strideWidth - b; + for (let $e = 0; $e < m; ++$e) { + let Le = ve + $e * h; + if (Le < 0 || Le >= u.inWidth) continue; - let st = se + Ee * A[2], pt = ie + Me * u.inChannels, De = st; - for (let ft = 0; ft < u.inChannels; ++ft) { - let at = k[pt + ft]; - for (let dt = 0; dt < u.outChannels; ++dt) - E[Ie + dt] += at * _[De + dt]; - De += u.outChannels; + let nt = ie + $e * R[2], pt = pe + Le * u.inChannels, Oe = nt; + for (let mt = 0; mt < u.inChannels; ++mt) { + let at = k[pt + mt]; + for (let ft = 0; ft < u.outChannels; ++ft) + $[we + ft] += at * _[Oe + ft]; + Oe += u.outChannels; } } } @@ -13303,549 +13349,549 @@ function Xj(r) { } } } - return t10.makeTensorInfo(w.shape, w.dtype, w.values); + return t6.makeTensorInfo(w.shape, w.dtype, w.values); } -var G2 = { kernelName: mp, backendName: "cpu", kernelFunc: Xj }; -function Yj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; +var b2 = { kernelName: lp, backendName: "cpu", kernelFunc: xj }; +function yj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; K([n, s], "conv3dBackpropFilterV2"); - let u = x.computeStrides(n.shape), c = x.computeStrides(s.shape), l = I.computeConv3DInfo(n.shape, p, a, 1, i), m = l.strideDepth, f = l.strideHeight, d = l.strideWidth, h = l.filterDepth, g = l.filterHeight, y = l.filterWidth, b = new je(l.filterShape, "float32"), C = b.values, [w, k, _, E] = b.strides, R = t10.data.get(s.dataId).values, [A, D, O, M] = c, L = t10.data.get(n.dataId).values, [W, V, G, q] = u, H = l.padInfo.front, j = l.padInfo.left, Y = l.padInfo.top; + let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = S.computeConv3DInfo(n.shape, p, a, 1, i), m = l.strideDepth, d = l.strideHeight, f = l.strideWidth, h = l.filterDepth, g = l.filterHeight, x = l.filterWidth, b = new st(l.filterShape, "float32"), C = b.values, [w, k, _, $] = b.strides, A = t6.data.get(s.dataId).values, [R, D, P, M] = c, L = t6.data.get(n.dataId).values, [W, V, U, q] = u, H = l.padInfo.front, j = l.padInfo.left, X = l.padInfo.top; for (let Z = 0; Z < h; ++Z) { - let ee = Math.max(0, Math.ceil((H - Z) / m)), X = Math.min(l.outDepth, (l.inDepth + H - Z) / m), Q = Z * w; - for (let se = 0; se < g; ++se) { - let ie = Math.max(0, Math.ceil((Y - se) / f)), de = Math.min(l.outHeight, (l.inHeight + Y - se) / f), Ie = se * k + Q; - for (let Se = 0; Se < y; ++Se) { - let Ee = Math.max(0, Math.ceil((j - Se) / d)), Me = Math.min(l.outWidth, (l.inWidth + j - Se) / d), st = Se * _ + Ie; + let ee = Math.max(0, Math.ceil((H - Z) / m)), Y = Math.min(l.outDepth, (l.inDepth + H - Z) / m), J = Z * w; + for (let ie = 0; ie < g; ++ie) { + let pe = Math.max(0, Math.ceil((X - ie) / d)), he = Math.min(l.outHeight, (l.inHeight + X - ie) / d), we = ie * k + J; + for (let ve = 0; ve < x; ++ve) { + let $e = Math.max(0, Math.ceil((j - ve) / f)), Le = Math.min(l.outWidth, (l.inWidth + j - ve) / f), nt = ve * _ + we; for (let pt = 0; pt < l.inChannels; ++pt) { - let De = pt * E + st; - for (let ft = 0; ft < l.outChannels; ++ft) { + let Oe = pt * $ + nt; + for (let mt = 0; mt < l.outChannels; ++mt) { let at = 0; - for (let dt = 0; dt < l.batchSize; ++dt) { - let It = dt * W, Fr = dt * A; - for (let Pt = ee; Pt < X; ++Pt) { - let er = (Z + Pt * m - H) * V + It, Tt = Pt * D + Fr; - for (let tr = ie; tr < de; ++tr) { - let Xr = (se + tr * f - Y) * G + er, Yr = tr * O + Tt; - for (let pr = Ee; pr < Me; ++pr) { - let tn = (Se + pr * d - j) * q + Xr, Ua = pr * M + Yr; - at += L[tn + pt] * R[Ua + ft]; + for (let ft = 0; ft < l.batchSize; ++ft) { + let wt = ft * W, Fr = ft * R; + for (let Ot = ee; Ot < Y; ++Ot) { + let er = (Z + Ot * m - H) * V + wt, Nt = Ot * D + Fr; + for (let tr = pe; tr < he; ++tr) { + let jr = (ie + tr * d - X) * U + er, Xr = tr * P + Nt; + for (let pr = $e; pr < Le; ++pr) { + let Fo = (ve + pr * f - j) * q + jr, Ka = pr * M + Xr; + at += L[Fo + pt] * A[Ka + mt]; } } } } - C[De + ft] = at; + C[Oe + mt] = at; } } } } } - return t10.makeTensorInfo(b.shape, b.dtype, b.values); + return t6.makeTensorInfo(b.shape, b.dtype, b.values); } -var H2 = { kernelName: Dm, backendName: "cpu", kernelFunc: Yj }; -function Qj(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; +var C2 = { kernelName: vm, backendName: "cpu", kernelFunc: yj }; +function bj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; K([n], "conv3dBackpropInputV2"); - let u = x.computeStrides(n.shape), c = x.computeStrides(s.shape), l = I.computeConv3DInfo(p, s.shape, i, 1, a), m = new je(l.inShape, "float32"), f = m.values, [d, h, g, y] = m.strides, b = t10.data.get(n.dataId).values, [C, w, k, _] = u, E = t10.data.get(s.dataId).values, [R, A, D, O] = c, { batchSize: M, filterDepth: L, filterHeight: W, filterWidth: V, inChannels: G, inDepth: q, inHeight: H, inWidth: j, outChannels: Y, outDepth: Z, outHeight: ee, outWidth: X, strideDepth: Q, strideHeight: se, strideWidth: ie } = l, de = L - 1 - l.padInfo.front, Ie = W - 1 - l.padInfo.top, Se = V - 1 - l.padInfo.left; - for (let Ee = 0; Ee < M; ++Ee) - for (let Me = 0; Me < G; ++Me) - for (let st = 0; st < q; ++st) { - let pt = st - de, De = Math.max(0, Math.ceil(pt / Q)), ft = Math.min(Z, (L + pt) / Q); + let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = S.computeConv3DInfo(p, s.shape, i, 1, a), m = new st(l.inShape, "float32"), d = m.values, [f, h, g, x] = m.strides, b = t6.data.get(n.dataId).values, [C, w, k, _] = u, $ = t6.data.get(s.dataId).values, [A, R, D, P] = c, { batchSize: M, filterDepth: L, filterHeight: W, filterWidth: V, inChannels: U, inDepth: q, inHeight: H, inWidth: j, outChannels: X, outDepth: Z, outHeight: ee, outWidth: Y, strideDepth: J, strideHeight: ie, strideWidth: pe } = l, he = L - 1 - l.padInfo.front, we = W - 1 - l.padInfo.top, ve = V - 1 - l.padInfo.left; + for (let $e = 0; $e < M; ++$e) + for (let Le = 0; Le < U; ++Le) + for (let nt = 0; nt < q; ++nt) { + let pt = nt - he, Oe = Math.max(0, Math.ceil(pt / J)), mt = Math.min(Z, (L + pt) / J); for (let at = 0; at < H; ++at) { - let dt = at - Ie, It = Math.max(0, Math.ceil(dt / se)), Fr = Math.min(ee, (W + dt) / se); - for (let Pt = 0; Pt < j; ++Pt) { - let jr = Pt - Se, er = Math.max(0, Math.ceil(jr / ie)), Tt = Math.min(X, (V + jr) / ie), tr = 0; - for (let rr = De; rr < ft; ++rr) { - let Xr = rr * Q - pt; - for (let Yr = It; Yr < Fr; ++Yr) { - let pr = Yr * se - dt; - for (let Qs = er; Qs < Tt; ++Qs) { - let tn = Qs * ie - jr, Ua = C * Ee + w * rr + k * Yr + _ * Qs, jt = R * (L - 1 - Xr) + A * (W - 1 - pr) + D * (V - 1 - tn) + O * Me; - for (let Zs = 0; Zs < Y; ++Zs) { - let Lc = b[Ua + Zs], Bc = E[jt + Zs]; - tr += Lc * Bc; + let ft = at - we, wt = Math.max(0, Math.ceil(ft / ie)), Fr = Math.min(ee, (W + ft) / ie); + for (let Ot = 0; Ot < j; ++Ot) { + let Kr = Ot - ve, er = Math.max(0, Math.ceil(Kr / pe)), Nt = Math.min(Y, (V + Kr) / pe), tr = 0; + for (let rr = Oe; rr < mt; ++rr) { + let jr = rr * J - pt; + for (let Xr = wt; Xr < Fr; ++Xr) { + let pr = Xr * ie - ft; + for (let Js = er; Js < Nt; ++Js) { + let Fo = Js * pe - Kr, Ka = C * $e + w * rr + k * Xr + _ * Js, Kt = A * (L - 1 - jr) + R * (W - 1 - pr) + D * (V - 1 - Fo) + P * Le; + for (let ea = 0; ea < X; ++ea) { + let Ac = b[Ka + ea], Rc = $[Kt + ea]; + tr += Ac * Rc; } } } } - f[d * Ee + h * st + g * at + y * Pt + Me] = tr; + d[f * $e + h * nt + g * at + x * Ot + Le] = tr; } } } - return t10.makeTensorInfo(m.shape, m.dtype, m.values); + return t6.makeTensorInfo(m.shape, m.dtype, m.values); } -var q2 = { kernelName: fp, backendName: "cpu", kernelFunc: Qj }; -var Zj = we(fn, (r) => Math.cos(r)); -var K2 = { kernelName: fn, backendName: "cpu", kernelFunc: Zj }; -var Jj = we(dn, (r) => Math.cosh(r)); -var j2 = { kernelName: dn, backendName: "cpu", kernelFunc: Jj }; -function eX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, [c, l, m, f] = n.shape, d = s.shape[0], [h, g] = i, y = ne([d, h, g, f], "float32"), b = t10.data.get(s.dataId).values, C = t10.data.get(a.dataId).values, w = t10.data.get(n.dataId).values, k = x.computeStrides(n.shape), _ = x.computeStrides(y.shape); - for (let E = 0; E < d; E++) { - let R = E * 4, A = b[R], D = b[R + 1], O = b[R + 2], M = b[R + 3], L = C[E]; +var S2 = { kernelName: mp, backendName: "cpu", kernelFunc: bj }; +var Cj = Ie(qo, (r) => Math.cos(r)); +var w2 = { kernelName: qo, backendName: "cpu", kernelFunc: Cj }; +var Sj = Ie(Ko, (r) => Math.cosh(r)); +var I2 = { kernelName: Ko, backendName: "cpu", kernelFunc: Sj }; +function wj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, [c, l, m, d] = n.shape, f = s.shape[0], [h, g] = i, x = le([f, h, g, d], "float32"), b = t6.data.get(s.dataId).values, C = t6.data.get(a.dataId).values, w = t6.data.get(n.dataId).values, k = y.computeStrides(n.shape), _ = y.computeStrides(x.shape); + for (let $ = 0; $ < f; $++) { + let A = $ * 4, R = b[A], D = b[A + 1], P = b[A + 2], M = b[A + 3], L = C[$]; if (L >= c) continue; - let W = h > 1 ? (O - A) * (l - 1) / (h - 1) : 0, V = g > 1 ? (M - D) * (m - 1) / (g - 1) : 0; - for (let G = 0; G < h; G++) { - let q = h > 1 ? A * (l - 1) + G * W : 0.5 * (A + O) * (l - 1); + let W = h > 1 ? (P - R) * (l - 1) / (h - 1) : 0, V = g > 1 ? (M - D) * (m - 1) / (g - 1) : 0; + for (let U = 0; U < h; U++) { + let q = h > 1 ? R * (l - 1) + U * W : 0.5 * (R + P) * (l - 1); if (q < 0 || q > l - 1) { for (let H = 0; H < g; H++) - for (let j = 0; j < f; j++) { - let Y = j + H * _[2] + G * _[1] + E * _[0]; - y.values[Y] = u; + for (let j = 0; j < d; j++) { + let X = j + H * _[2] + U * _[1] + $ * _[0]; + x.values[X] = u; } continue; } if (p === "bilinear") { - let H = Math.floor(q), j = Math.ceil(q), Y = q - H; + let H = Math.floor(q), j = Math.ceil(q), X = q - H; for (let Z = 0; Z < g; Z++) { let ee = g > 1 ? D * (m - 1) + Z * V : 0.5 * (D + M) * (m - 1); if (ee < 0 || ee > m - 1) { - for (let ie = 0; ie < f; ie++) { - let de = ie + Z * _[2] + G * _[1] + E * _[0]; - y.values[de] = u; + for (let pe = 0; pe < d; pe++) { + let he = pe + Z * _[2] + U * _[1] + $ * _[0]; + x.values[he] = u; } continue; } - let X = Math.floor(ee), Q = Math.ceil(ee), se = ee - X; - for (let ie = 0; ie < f; ie++) { - let de = ie + X * k[2] + H * k[1] + L * k[0], Ie = w[de]; - de = ie + Q * k[2] + H * k[1] + L * k[0]; - let Se = w[de]; - de = ie + X * k[2] + j * k[1] + L * k[0]; - let Ee = w[de]; - de = ie + Q * k[2] + j * k[1] + L * k[0]; - let Me = w[de], st = Ie + (Se - Ie) * se, pt = Ee + (Me - Ee) * se; - de = ie + Z * _[2] + G * _[1] + E * _[0], y.values[de] = st + (pt - st) * Y; + let Y = Math.floor(ee), J = Math.ceil(ee), ie = ee - Y; + for (let pe = 0; pe < d; pe++) { + let he = pe + Y * k[2] + H * k[1] + L * k[0], we = w[he]; + he = pe + J * k[2] + H * k[1] + L * k[0]; + let ve = w[he]; + he = pe + Y * k[2] + j * k[1] + L * k[0]; + let $e = w[he]; + he = pe + J * k[2] + j * k[1] + L * k[0]; + let Le = w[he], nt = we + (ve - we) * ie, pt = $e + (Le - $e) * ie; + he = pe + Z * _[2] + U * _[1] + $ * _[0], x.values[he] = nt + (pt - nt) * X; } } } else for (let H = 0; H < g; ++H) { let j = g > 1 ? D * (m - 1) + H * V : 0.5 * (D + M) * (m - 1); if (j < 0 || j > m - 1) { - for (let ee = 0; ee < f; ee++) { - let X = ee + H * _[2] + G * _[1] + E * _[0]; - y.values[X] = u; + for (let ee = 0; ee < d; ee++) { + let Y = ee + H * _[2] + U * _[1] + $ * _[0]; + x.values[Y] = u; } continue; } - let Y = Math.round(j), Z = Math.round(q); - for (let ee = 0; ee < f; ee++) { - let X = ee + Y * k[2] + Z * k[1] + L * k[0], Q = ee + H * _[2] + G * _[1] + E * _[0]; - y.values[Q] = w[X]; + let X = Math.round(j), Z = Math.round(q); + for (let ee = 0; ee < d; ee++) { + let Y = ee + X * k[2] + Z * k[1] + L * k[0], J = ee + H * _[2] + U * _[1] + $ * _[0]; + x.values[J] = w[Y]; } } } } - return t10.makeTensorInfo(y.shape, y.dtype, y.values); + return t6.makeTensorInfo(x.shape, x.dtype, x.values); } -var X2 = { kernelName: xn, backendName: "cpu", kernelFunc: eX }; -function tX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; +var v2 = { kernelName: Yo, backendName: "cpu", kernelFunc: wj }; +function Ij(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; K(n, "cumprod"); - let p = I.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = bt({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); - let c = I.getInnerMostAxes(1, n.shape.length)[0]; + let p = S.getAxesPermutation([s], n.shape.length), u = n; + p != null && (u = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: p } })); + let c = S.getInnerMostAxes(1, n.shape.length)[0]; if (c !== u.shape.length - 1) throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${c}`); - let l = ct(u.dtype, "int32"), m = x.makeOnesTypedArray(x.sizeFromShape(u.shape), l), f = t10.data.get(u.dataId).values, d = u.shape[u.shape.length - 1], h = i ? (y, b) => y + d - b - 1 : (y, b) => y + b; - for (let y = 0; y < f.length; y += d) - for (let b = 0; b < d; b++) { - let C = h(y, b); + let l = dt(u.dtype, "int32"), m = y.makeOnesTypedArray(y.sizeFromShape(u.shape), l), d = t6.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; + for (let x = 0; x < d.length; x += f) + for (let b = 0; b < f; b++) { + let C = h(x, b); if (b === 0) - m[C] = a ? 1 : f[C]; + m[C] = a ? 1 : d[C]; else { - let w = h(y, b - 1); - m[C] = a ? f[w] * m[w] : f[C] * m[w]; + let w = h(x, b - 1); + m[C] = a ? d[w] * m[w] : d[C] * m[w]; } } - let g = t10.makeTensorInfo(u.shape, l, m); + let g = t6.makeTensorInfo(u.shape, l, m); if (p != null) { - let y = I.getUndoAxesPermutation(p), b = bt({ inputs: { x: g }, backend: t10, attrs: { perm: y } }); - return t10.disposeIntermediateTensorInfo(g), t10.disposeIntermediateTensorInfo(u), b; + let x = S.getUndoAxesPermutation(p), b = Ct({ inputs: { x: g }, backend: t6, attrs: { perm: x } }); + return t6.disposeIntermediateTensorInfo(g), t6.disposeIntermediateTensorInfo(u), b; } return g; } -var Y2 = { kernelName: hn, backendName: "cpu", kernelFunc: tX }; -function rX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; +var k2 = { kernelName: jo, backendName: "cpu", kernelFunc: Ij }; +function vj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; K(n, "cumsum"); - let p = I.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = bt({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); - let c = I.getInnerMostAxes(1, n.shape.length)[0]; + let p = S.getAxesPermutation([s], n.shape.length), u = n; + p != null && (u = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: p } })); + let c = S.getInnerMostAxes(1, n.shape.length)[0]; if (c !== u.shape.length - 1) throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${c}`); - let l = ct(u.dtype, "int32"), m = x.makeZerosTypedArray(x.sizeFromShape(u.shape), l), f = t10.data.get(u.dataId).values, d = u.shape[u.shape.length - 1], h = i ? (y, b) => y + d - b - 1 : (y, b) => y + b; - for (let y = 0; y < f.length; y += d) - for (let b = 0; b < d; b++) { - let C = h(y, b); + let l = dt(u.dtype, "int32"), m = y.makeZerosTypedArray(y.sizeFromShape(u.shape), l), d = t6.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; + for (let x = 0; x < d.length; x += f) + for (let b = 0; b < f; b++) { + let C = h(x, b); if (b === 0) - m[C] = a ? 0 : f[C]; + m[C] = a ? 0 : d[C]; else { - let w = h(y, b - 1); - m[C] = a ? f[w] + m[w] : f[C] + m[w]; + let w = h(x, b - 1); + m[C] = a ? d[w] + m[w] : d[C] + m[w]; } } - let g = t10.makeTensorInfo(u.shape, l, m); + let g = t6.makeTensorInfo(u.shape, l, m); if (p != null) { - let y = I.getUndoAxesPermutation(p), b = bt({ inputs: { x: g }, backend: t10, attrs: { perm: y } }); - return t10.disposeIntermediateTensorInfo(g), t10.disposeIntermediateTensorInfo(u), b; + let x = S.getUndoAxesPermutation(p), b = Ct({ inputs: { x: g }, backend: t6, attrs: { perm: x } }); + return t6.disposeIntermediateTensorInfo(g), t6.disposeIntermediateTensorInfo(u), b; } return g; } -var Q2 = { kernelName: gn, backendName: "cpu", kernelFunc: rX }; -function oX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; +var N2 = { kernelName: Xo, backendName: "cpu", kernelFunc: vj }; +function kj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = Zp(p, u, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, c); + let p = t6.data.get(n.dataId).values, u = t6.data.get(s.dataId).values, c = Kp(p, u, s.dtype, s.shape, a); + return t6.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = t10.bufferSync(n), u = t10.bufferSync(s), c = yd(p, u, a, i); - return t10.makeTensorInfo(c.shape, s.dtype, c.values); + let p = t6.bufferSync(n), u = t6.bufferSync(s), c = uf(p, u, a, i); + return t6.makeTensorInfo(c.shape, s.dtype, c.values); } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var Z2 = { kernelName: dp, backendName: "cpu", kernelFunc: oX }; -function nX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o; - x.assert(a === "NHWC", () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`); - let i = n.shape[0], p = n.shape[1], u = n.shape[2], c = n.shape[3], l = p * s, m = u * s, f = c / (s * s), d = t10.data.get(n.dataId).values, h = new Float32Array(i * l * m * f), g = 0; - for (let y = 0; y < i; ++y) +var T2 = { kernelName: ti, backendName: "cpu", kernelFunc: kj }; +function Nj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o; + y.assert(a === "NHWC", () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`); + let i = n.shape[0], p = n.shape[1], u = n.shape[2], c = n.shape[3], l = p * s, m = u * s, d = c / (s * s), f = t6.data.get(n.dataId).values, h = new Float32Array(i * l * m * d), g = 0; + for (let x = 0; x < i; ++x) for (let b = 0; b < l; ++b) { let C = Math.floor(b / s), w = b % s; for (let k = 0; k < m; ++k) { - let _ = Math.floor(k / s), E = k % s, R = (w * s + E) * f; - for (let A = 0; A < f; ++A) { - let O = A + R + c * (_ + u * (C + p * y)); - h[g++] = d[O]; + let _ = Math.floor(k / s), $ = k % s, A = (w * s + $) * d; + for (let R = 0; R < d; ++R) { + let P = R + A + c * (_ + u * (C + p * x)); + h[g++] = f[P]; } } } - return t10.makeTensorInfo([i, l, m, f], n.dtype, h); + return t6.makeTensorInfo([i, l, m, d], n.dtype, h); } -var J2 = { kernelName: yn, backendName: "cpu", kernelFunc: nX }; -function AI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; +var _2 = { kernelName: Qo, backendName: "cpu", kernelFunc: Nj }; +function TS(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; K([n, s], "depthwiseConv2DNative"); - let c = x.computeStrides(n.shape), l = x.computeStrides(s.shape), m = p; - m == null && (m = [1, 1]), x.assert(I.eitherStridesOrDilationsAreOne(a, m), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`); - let f = I.computeConv2DInfo(n.shape, s.shape, a, m, i, u, true), { filterHeight: d, filterWidth: h, dilationHeight: g, dilationWidth: y, padInfo: b } = f, C = b.left, w = b.top, k = f.outChannels / f.inChannels, _ = new je(f.outShape, n.dtype), E = t10.data.get(n.dataId).values, R = t10.data.get(s.dataId).values, A = _.values; - for (let D = 0; D < f.batchSize; ++D) { - let O = D * c[0], M = D * _.strides[0]; - for (let L = 0; L < f.outHeight; ++L) { - let W = M + L * _.strides[1], V = L * f.strideHeight - w; - for (let G = 0; G < d; ++G) { - let q = V + G * g; - if (q < 0 || q >= f.inHeight) + let c = y.computeStrides(n.shape), l = y.computeStrides(s.shape), m = p; + m == null && (m = [1, 1]), y.assert(S.eitherStridesOrDilationsAreOne(a, m), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`); + let d = S.computeConv2DInfo(n.shape, s.shape, a, m, i, u, true), { filterHeight: f, filterWidth: h, dilationHeight: g, dilationWidth: x, padInfo: b } = d, C = b.left, w = b.top, k = d.outChannels / d.inChannels, _ = new st(d.outShape, n.dtype), $ = t6.data.get(n.dataId).values, A = t6.data.get(s.dataId).values, R = _.values; + for (let D = 0; D < d.batchSize; ++D) { + let P = D * c[0], M = D * _.strides[0]; + for (let L = 0; L < d.outHeight; ++L) { + let W = M + L * _.strides[1], V = L * d.strideHeight - w; + for (let U = 0; U < f; ++U) { + let q = V + U * g; + if (q < 0 || q >= d.inHeight) continue; - let H = G * l[0], j = O + q * c[1]; - for (let Y = 0; Y < f.outWidth; ++Y) { - let Z = W + Y * _.strides[2], ee = Y * f.strideWidth - C; - for (let X = 0; X < h; ++X) { - let Q = ee + X * y; - if (Q < 0 || Q >= f.inWidth) + let H = U * l[0], j = P + q * c[1]; + for (let X = 0; X < d.outWidth; ++X) { + let Z = W + X * _.strides[2], ee = X * d.strideWidth - C; + for (let Y = 0; Y < h; ++Y) { + let J = ee + Y * x; + if (J < 0 || J >= d.inWidth) continue; - let se = H + X * l[1], ie = j + Q * f.inChannels, de = Z, Ie = se; - for (let Se = 0; Se < f.inChannels; ++Se) { - let Ee = E[ie + Se]; - for (let Me = 0; Me < k; ++Me) - A[de + Me] += Ee * R[Ie + Me]; - de += k, Ie += k; + let ie = H + Y * l[1], pe = j + J * d.inChannels, he = Z, we = ie; + for (let ve = 0; ve < d.inChannels; ++ve) { + let $e = $[pe + ve]; + for (let Le = 0; Le < k; ++Le) + R[he + Le] += $e * A[we + Le]; + he += k, we += k; } } } } } } - return t10.makeTensorInfo(_.shape, _.dtype, _.values); + return t6.makeTensorInfo(_.shape, _.dtype, _.values); } -var e_ = { kernelName: bn, backendName: "cpu", kernelFunc: AI }; -function sX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o; +var E2 = { kernelName: Zo, backendName: "cpu", kernelFunc: TS }; +function Tj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o; K([n, s], "depthwiseConv2dNativeBackpropFilter"); - let l = I.computeConv2DInfo(n.shape, c, a, i, p, u, true), { strideHeight: m, strideWidth: f, filterHeight: d, filterWidth: h } = l, g = new je(l.filterShape, "float32"), y = l.padInfo.left, b = l.padInfo.top, C = l.outChannels / l.inChannels, w = t10.data.get(n.dataId).values, k = new je(n.shape, n.dtype, w), _ = t10.data.get(s.dataId).values, E = new je(s.shape, s.dtype, _); - for (let R = 0; R < d; ++R) { - let A = Math.max(0, Math.ceil((b - R) / m)), D = Math.min(l.outHeight, (l.inHeight + b - R) / m); - for (let O = 0; O < h; ++O) { - let M = Math.max(0, Math.ceil((y - O) / f)), L = Math.min(l.outWidth, (l.inWidth + y - O) / f); + let l = S.computeConv2DInfo(n.shape, c, a, i, p, u, true), { strideHeight: m, strideWidth: d, filterHeight: f, filterWidth: h } = l, g = new st(l.filterShape, "float32"), x = l.padInfo.left, b = l.padInfo.top, C = l.outChannels / l.inChannels, w = t6.data.get(n.dataId).values, k = new st(n.shape, n.dtype, w), _ = t6.data.get(s.dataId).values, $ = new st(s.shape, s.dtype, _); + for (let A = 0; A < f; ++A) { + let R = Math.max(0, Math.ceil((b - A) / m)), D = Math.min(l.outHeight, (l.inHeight + b - A) / m); + for (let P = 0; P < h; ++P) { + let M = Math.max(0, Math.ceil((x - P) / d)), L = Math.min(l.outWidth, (l.inWidth + x - P) / d); for (let W = 0; W < l.outChannels; ++W) { - let V = Math.trunc(W / C), G = W % C, q = 0; + let V = Math.trunc(W / C), U = W % C, q = 0; for (let H = 0; H < l.batchSize; ++H) - for (let j = A; j < D; ++j) { - let Y = R + j * m - b; + for (let j = R; j < D; ++j) { + let X = A + j * m - b; for (let Z = M; Z < L; ++Z) { - let ee = O + Z * f - y; - q += k.get(H, Y, ee, V) * E.get(H, j, Z, W); + let ee = P + Z * d - x; + q += k.get(H, X, ee, V) * $.get(H, j, Z, W); } } - g.set(q, R, O, V, G); + g.set(q, A, P, V, U); } } } - return t10.makeTensorInfo(g.shape, g.dtype, g.values); + return t6.makeTensorInfo(g.shape, g.dtype, g.values); } -var t_ = { kernelName: hp, backendName: "cpu", kernelFunc: sX }; -function aX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o; +var $2 = { kernelName: dp, backendName: "cpu", kernelFunc: Tj }; +function _j(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o; K([n, s], "depthwiseConv2DNativeBackpropInput"); - let l = x.computeStrides(n.shape), m = x.computeStrides(s.shape), f = I.computeConv2DInfo(c, s.shape, a, i, p, u, true), d = new je(f.inShape, "float32"), h = d.values, [g, y, b] = d.strides, C = t10.data.get(n.dataId).values, [w, k, _] = l, E = t10.data.get(s.dataId).values, [R, A, D] = m, { batchSize: O, filterHeight: M, filterWidth: L, inChannels: W, inHeight: V, inWidth: G, outChannels: q, outHeight: H, outWidth: j, strideHeight: Y, strideWidth: Z } = f, ee = M - 1 - f.padInfo.top, X = L - 1 - f.padInfo.left, Q = q / W; - for (let se = 0; se < O; ++se) - for (let ie = 0; ie < W; ++ie) - for (let de = 0; de < V; ++de) { - let Ie = de - ee, Se = Math.max(0, Math.ceil(Ie / Y)), Ee = Math.min(H, (M + Ie) / Y); - for (let Me = 0; Me < G; ++Me) { - let st = Me - X, pt = Math.max(0, Math.ceil(st / Z)), De = Math.min(j, (L + st) / Z), ft = 0; - for (let at = Se; at < Ee; ++at) { - let dt = at * Y - Ie; - for (let It = pt; It < De; ++It) { - let Fr = It * Z - st, Pt = w * se + k * at + _ * It, jr = R * (M - 1 - dt) + A * (L - 1 - Fr) + D * ie; - for (let er = 0; er < Q; ++er) { - let Tt = ie * Q + er, tr = C[Pt + Tt], rr = E[jr + er]; - ft += tr * rr; + let l = y.computeStrides(n.shape), m = y.computeStrides(s.shape), d = S.computeConv2DInfo(c, s.shape, a, i, p, u, true), f = new st(d.inShape, "float32"), h = f.values, [g, x, b] = f.strides, C = t6.data.get(n.dataId).values, [w, k, _] = l, $ = t6.data.get(s.dataId).values, [A, R, D] = m, { batchSize: P, filterHeight: M, filterWidth: L, inChannels: W, inHeight: V, inWidth: U, outChannels: q, outHeight: H, outWidth: j, strideHeight: X, strideWidth: Z } = d, ee = M - 1 - d.padInfo.top, Y = L - 1 - d.padInfo.left, J = q / W; + for (let ie = 0; ie < P; ++ie) + for (let pe = 0; pe < W; ++pe) + for (let he = 0; he < V; ++he) { + let we = he - ee, ve = Math.max(0, Math.ceil(we / X)), $e = Math.min(H, (M + we) / X); + for (let Le = 0; Le < U; ++Le) { + let nt = Le - Y, pt = Math.max(0, Math.ceil(nt / Z)), Oe = Math.min(j, (L + nt) / Z), mt = 0; + for (let at = ve; at < $e; ++at) { + let ft = at * X - we; + for (let wt = pt; wt < Oe; ++wt) { + let Fr = wt * Z - nt, Ot = w * ie + k * at + _ * wt, Kr = A * (M - 1 - ft) + R * (L - 1 - Fr) + D * pe; + for (let er = 0; er < J; ++er) { + let Nt = pe * J + er, tr = C[Ot + Nt], rr = $[Kr + er]; + mt += tr * rr; } } } - h[g * se + y * de + b * Me + ie] = ft; + h[g * ie + x * he + b * Le + pe] = mt; } } - return t10.makeTensorInfo(d.shape, d.dtype, d.values); + return t6.makeTensorInfo(f.shape, f.dtype, f.values); } -var r_ = { kernelName: gp, backendName: "cpu", kernelFunc: aX }; -function iX(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e, n = x.sizeFromShape(o.shape), s = t10.data.get(o.dataId).values, a = ne([n, n], o.dtype), i = a.values; +var A2 = { kernelName: fp, backendName: "cpu", kernelFunc: _j }; +function Ej(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e, n = y.sizeFromShape(o.shape), s = t6.data.get(o.dataId).values, a = le([n, n], o.dtype), i = a.values; for (let u = 0; u < s.length; u++) i[u * n + u] = s[u]; let p = [...o.shape, ...o.shape]; - return t10.makeTensorInfo(p, a.dtype, a.values); + return t6.makeTensorInfo(p, a.dtype, a.values); } -var o_ = { kernelName: xp, backendName: "cpu", kernelFunc: iX }; -var n_ = { kernelName: yp, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t10 }) => { - let { x: o, filter: n } = r, { strides: s, pad: a, dilations: i } = t10, p = e, u = p.data.get(o.dataId).values, c = o.shape.length, l = p.data.get(n.dataId).values, m = n.shape.length, { batchSize: f, inHeight: d, inWidth: h, inChannels: g, outHeight: y, outWidth: b, padInfo: C, strideHeight: w, strideWidth: k, filterHeight: _, filterWidth: E, dilationHeight: R, dilationWidth: A, outShape: D } = I.computeDilation2DInfo(o.shape, n.shape, s, a, "NHWC", i), O = x.sizeFromShape(D), M = D.length, L = x.getArrayFromDType(o.dtype, O); - for (let V = 0; V < f; ++V) - for (let G = 0; G < y; ++G) { - let q = G * w - C.top; +var R2 = { kernelName: hp, backendName: "cpu", kernelFunc: Ej }; +var F2 = { kernelName: gp, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t6 }) => { + let { x: o, filter: n } = r, { strides: s, pad: a, dilations: i } = t6, p = e, u = p.data.get(o.dataId).values, c = o.shape.length, l = p.data.get(n.dataId).values, m = n.shape.length, { batchSize: d, inHeight: f, inWidth: h, inChannels: g, outHeight: x, outWidth: b, padInfo: C, strideHeight: w, strideWidth: k, filterHeight: _, filterWidth: $, dilationHeight: A, dilationWidth: R, outShape: D } = S.computeDilation2DInfo(o.shape, n.shape, s, a, "NHWC", i), P = y.sizeFromShape(D), M = D.length, L = y.getArrayFromDType(o.dtype, P); + for (let V = 0; V < d; ++V) + for (let U = 0; U < x; ++U) { + let q = U * w - C.top; for (let H = 0; H < b; ++H) { let j = H * k - C.left; - for (let Y = 0; Y < g; ++Y) { + for (let X = 0; X < g; ++X) { let Z = Number.MIN_SAFE_INTEGER; - for (let X = 0; X < _; ++X) { - let Q = q + X * R; - if (Q >= 0 && Q < d) - for (let se = 0; se < E; ++se) { - let ie = j + se * A; - if (ie >= 0 && ie < h) { - let de = x.locToIndex([V, Q, ie, Y], c, x.computeStrides(o.shape)), Ie = x.locToIndex([X, se, Y], m, x.computeStrides(n.shape)), Se = u[de] + l[Ie]; - Se > Z && (Z = Se); + for (let Y = 0; Y < _; ++Y) { + let J = q + Y * A; + if (J >= 0 && J < f) + for (let ie = 0; ie < $; ++ie) { + let pe = j + ie * R; + if (pe >= 0 && pe < h) { + let he = y.locToIndex([V, J, pe, X], c, y.computeStrides(o.shape)), we = y.locToIndex([Y, ie, X], m, y.computeStrides(n.shape)), ve = u[he] + l[we]; + ve > Z && (Z = ve); } } } - let ee = x.locToIndex([V, G, H, Y], M, x.computeStrides(D)); + let ee = y.locToIndex([V, U, H, X], M, y.computeStrides(D)); L[ee] = Z; } } } - return { dataId: p.write(x.toTypedArray(L, o.dtype), D, o.dtype), shape: D, dtype: o.dtype }; + return { dataId: p.write(y.toTypedArray(L, o.dtype), D, o.dtype), shape: D, dtype: o.dtype }; } }; -var s_ = { kernelName: vb, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t10 }) => { - let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = t10, u = e, c = x.toNestedArray(o.shape, u.data.get(o.dataId).values), l = x.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: f, inWidth: d, inChannels: h, outHeight: g, outWidth: y, padInfo: b, strideHeight: C, strideWidth: w, filterHeight: k, filterWidth: _, dilationHeight: E, dilationWidth: R, outShape: A } = I.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - x.assert(s.rank === A.length, () => `Error in ${vb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`); - let D = x.toNestedArray(A, u.data.get(s.dataId).values), O = x.makeZerosNestedTypedArray(n.shape, n.dtype); +var D2 = { kernelName: bb, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t6 }) => { + let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = t6, u = e, c = y.toNestedArray(o.shape, u.data.get(o.dataId).values), l = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: C, strideWidth: w, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: A, outShape: R } = S.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); + y.assert(s.rank === R.length, () => `Error in ${bb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`); + let D = y.toNestedArray(R, u.data.get(s.dataId).values), P = y.makeZerosNestedTypedArray(n.shape, n.dtype); for (let L = 0; L < m; ++L) for (let W = 0; W < g; ++W) { let V = W * C - b.top; - for (let G = 0; G < y; ++G) { - let q = G * w - b.left; + for (let U = 0; U < x; ++U) { + let q = U * w - b.left; for (let H = 0; H < h; ++H) { - let j = Number.MIN_SAFE_INTEGER, Y = 0, Z = 0; + let j = Number.MIN_SAFE_INTEGER, X = 0, Z = 0; for (let ee = 0; ee < k; ++ee) { - let X = V + ee * E; - if (X >= 0 && X < f) - for (let Q = 0; Q < _; ++Q) { - let se = q + Q * R; - if (se >= 0 && se < d) { - let ie = c[L][X][se][H] + l[ee][Q][H]; - ie > j && (j = ie, Y = ee, Z = Q); + let Y = V + ee * $; + if (Y >= 0 && Y < d) + for (let J = 0; J < _; ++J) { + let ie = q + J * A; + if (ie >= 0 && ie < f) { + let pe = c[L][Y][ie][H] + l[ee][J][H]; + pe > j && (j = pe, X = ee, Z = J); } } } - O[Y][Z][H] += D[L][W][G][H]; + P[X][Z][H] += D[L][W][U][H]; } } } - return { dataId: u.write(x.toTypedArray(O, o.dtype), n.shape, n.dtype), shape: n.shape, dtype: n.dtype }; + return { dataId: u.write(y.toTypedArray(P, o.dtype), n.shape, n.dtype), shape: n.shape, dtype: n.dtype }; } }; -var a_ = { kernelName: Sb, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t10 }) => { - let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = t10, u = e, c = x.toNestedArray(o.shape, u.data.get(o.dataId).values), l = x.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: f, inWidth: d, inChannels: h, outHeight: g, outWidth: y, padInfo: b, strideHeight: C, strideWidth: w, filterHeight: k, filterWidth: _, dilationHeight: E, dilationWidth: R, outShape: A } = I.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - x.assert(s.rank === A.length, () => `Error in ${Sb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`); - let D = x.toNestedArray(A, u.data.get(s.dataId).values), O = x.makeZerosNestedTypedArray(o.shape, o.dtype); +var O2 = { kernelName: yb, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e, attrs: t6 }) => { + let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = t6, u = e, c = y.toNestedArray(o.shape, u.data.get(o.dataId).values), l = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: C, strideWidth: w, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: A, outShape: R } = S.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); + y.assert(s.rank === R.length, () => `Error in ${yb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`); + let D = y.toNestedArray(R, u.data.get(s.dataId).values), P = y.makeZerosNestedTypedArray(o.shape, o.dtype); for (let L = 0; L < m; ++L) for (let W = 0; W < g; ++W) { let V = W * C - b.top; - for (let G = 0; G < y; ++G) { - let q = G * w - b.left; + for (let U = 0; U < x; ++U) { + let q = U * w - b.left; for (let H = 0; H < h; ++H) { - let j = Number.MIN_SAFE_INTEGER, Y = V < 0 ? 0 : V, Z = q < 0 ? 0 : q; + let j = Number.MIN_SAFE_INTEGER, X = V < 0 ? 0 : V, Z = q < 0 ? 0 : q; for (let ee = 0; ee < k; ++ee) { - let X = V + ee * E; - if (X >= 0 && X < f) - for (let Q = 0; Q < _; ++Q) { - let se = q + Q * R; - if (se >= 0 && se < d) { - let ie = c[L][X][se][H] + l[ee][Q][H]; - ie > j && (j = ie, Y = X, Z = se); + let Y = V + ee * $; + if (Y >= 0 && Y < d) + for (let J = 0; J < _; ++J) { + let ie = q + J * A; + if (ie >= 0 && ie < f) { + let pe = c[L][Y][ie][H] + l[ee][J][H]; + pe > j && (j = pe, X = Y, Z = ie); } } } - O[L][Y][Z][H] += D[L][W][G][H]; + P[L][X][Z][H] += D[L][W][U][H]; } } } - return { dataId: u.write(x.toTypedArray(O, o.dtype), o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; + return { dataId: u.write(y.toTypedArray(P, o.dtype), o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function Fa(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; +function La(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; K(n, "sum"); let i; - n.dtype === "bool" ? i = Uo({ inputs: { x: n }, backend: t10, attrs: { dtype: "int32" } }) : i = ar({ inputs: { x: n }, backend: t10 }); - let p = i.shape.length, u = x.parseAxisParam(s, i.shape), c = I.getAxesPermutation(u, p), l = u, m = i; - c != null && (m = bt({ inputs: { x: i }, backend: t10, attrs: { perm: c } }), l = I.getInnerMostAxes(l.length, p)), I.assertAxesAreInnerMostDims("sum", l, m.shape.length); - let [f, d] = I.computeOutAndReduceShapes(m.shape, l), h = I.upcastType(m.dtype, "int32"), g = Yp(t10, f, h), y = x.sizeFromShape(d), b = t10.data.get(g.dataId).values, C = t10.data.get(m.dataId).values; + n.dtype === "bool" ? i = Io({ inputs: { x: n }, backend: t6, attrs: { dtype: "int32" } }) : i = ar({ inputs: { x: n }, backend: t6 }); + let p = i.shape.length, u = y.parseAxisParam(s, i.shape), c = S.getAxesPermutation(u, p), l = u, m = i; + c != null && (m = Ct({ inputs: { x: i }, backend: t6, attrs: { perm: c } }), l = S.getInnerMostAxes(l.length, p)), S.assertAxesAreInnerMostDims("sum", l, m.shape.length); + let [d, f] = S.computeOutAndReduceShapes(m.shape, l), h = S.upcastType(m.dtype, "int32"), g = Hp(t6, d, h), x = y.sizeFromShape(f), b = t6.data.get(g.dataId).values, C = t6.data.get(m.dataId).values; for (let w = 0; w < b.length; ++w) { - let k = w * y, _ = 0; - for (let E = 0; E < y; ++E) - _ += C[k + E]; + let k = w * x, _ = 0; + for (let $ = 0; $ < x; ++$) + _ += C[k + $]; b[w] = _; } if (a) { - let w = I.expandShapeToKeepDim(g.shape, u), k = g; - g = Oe({ inputs: { x: g }, backend: t10, attrs: { shape: w } }), t10.disposeIntermediateTensorInfo(k); + let w = S.expandShapeToKeepDim(g.shape, u), k = g; + g = Me({ inputs: { x: g }, backend: t6, attrs: { shape: w } }), t6.disposeIntermediateTensorInfo(k); } - return t10.disposeIntermediateTensorInfo(i), c != null && t10.disposeIntermediateTensorInfo(m), g; + return t6.disposeIntermediateTensorInfo(i), c != null && t6.disposeIntermediateTensorInfo(m), g; } -var i_ = { kernelName: jn, backendName: "cpu", kernelFunc: Fa }; -function uX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = I.decodeEinsumEquation(n, s.length); - I.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: c } = I.getEinsumComputePath(i, p), l = c.length, m = null, f = a.length, d = []; +var P2 = { kernelName: Hn, backendName: "cpu", kernelFunc: La }; +function $j(r) { + let { inputs: e, backend: t6, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = S.decodeEinsumEquation(n, s.length); + S.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = S.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; for (let h = 0; h < l; ++h) { for (let g of c[h]) { - let { permutationIndices: y, expandDims: b } = I.getEinsumPermutation(f, p[g]), C; - I.isIdentityPermutation(y) ? C = s[g] : (C = bt({ inputs: { x: s[g] }, backend: t10, attrs: { perm: y } }), d.push(C)); + let { permutationIndices: x, expandDims: b } = S.getEinsumPermutation(d, p[g]), C; + S.isIdentityPermutation(x) ? C = s[g] : (C = Ct({ inputs: { x: s[g] }, backend: t6, attrs: { perm: x } }), f.push(C)); let w = C.shape.slice(); for (let k = 0; k < b.length; ++k) w.splice(b[k], 0, 1); - x.arraysEqual(C.shape, w) || (C = Oe({ inputs: { x: C }, backend: t10, attrs: { shape: w } }), d.push(C)), m === null ? m = C : (m = wu({ inputs: { a: C, b: m }, backend: t10 }), d.push(m)); + y.arraysEqual(C.shape, w) || (C = Me({ inputs: { x: C }, backend: t6, attrs: { shape: w } }), f.push(C)), m === null ? m = C : (m = wu({ inputs: { a: C, b: m }, backend: t6 }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = Fa({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - f), keepDims: false } }), d.push(m)), f--); + h < l - 1 && (u[h] >= 0 && (m = La({ inputs: { x: m }, backend: t6, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of d) - h !== m && t10.disposeIntermediateTensorInfo(h); + for (let h of f) + h !== m && t6.disposeIntermediateTensorInfo(h); return m; } -var u_ = { kernelName: Xa, backendName: "cpu", kernelFunc: uX }; -function pX(r) { - let { inputs: e, backend: t10 } = r, { dy: o, y: n } = e; +var M2 = { kernelName: ri, backendName: "cpu", kernelFunc: $j }; +function Aj(r) { + let { inputs: e, backend: t6 } = r, { dy: o, y: n } = e; K([o, n], "eluGrad"); - let s = new Float32Array(x.sizeFromShape(n.shape)), a = t10.data.get(n.dataId).values, i = t10.data.get(o.dataId).values; + let s = new Float32Array(y.sizeFromShape(n.shape)), a = t6.data.get(n.dataId).values, i = t6.data.get(o.dataId).values; for (let p = 0; p < a.length; ++p) { let u = a[p]; u >= 1 ? s[p] = i[p] : s[p] = i[p] * (u + 1); } - return t10.makeTensorInfo(n.shape, "float32", s); + return t6.makeTensorInfo(n.shape, "float32", s); } -var p_ = { kernelName: Pm, backendName: "cpu", kernelFunc: pX }; -var cX = I.ERF_P; -var lX = I.ERF_A1; -var mX = I.ERF_A2; -var fX = I.ERF_A3; -var dX = I.ERF_A4; -var hX = I.ERF_A5; -var gX = we(Gi, (r) => { - let e = Math.sign(r), t10 = Math.abs(r), o = 1 / (1 + cX * t10); - return e * (1 - ((((hX * o + dX) * o + fX) * o + mX) * o + lX) * o * Math.exp(-t10 * t10)); +var L2 = { kernelName: km, backendName: "cpu", kernelFunc: Aj }; +var Rj = S.ERF_P; +var Fj = S.ERF_A1; +var Dj = S.ERF_A2; +var Oj = S.ERF_A3; +var Pj = S.ERF_A4; +var Mj = S.ERF_A5; +var Lj = Ie(ma, (r) => { + let e = Math.sign(r), t6 = Math.abs(r), o = 1 / (1 + Rj * t6); + return e * (1 - ((((Mj * o + Pj) * o + Oj) * o + Dj) * o + Fj) * o * Math.exp(-t6 * t6)); }); -var c_ = { kernelName: Gi, backendName: "cpu", kernelFunc: gX }; -function oc(r) { - let { inputs: e, backend: t10, attrs: o } = r, { input: n } = e, { dim: s } = o, a = n.shape.length, i = n.shape.slice(), p = s; - return s < 0 && (x.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), Oe({ inputs: { x: n }, backend: t10, attrs: { shape: i } }); +var B2 = { kernelName: ma, backendName: "cpu", kernelFunc: Lj }; +function Jp(r) { + let { inputs: e, backend: t6, attrs: o } = r, { input: n } = e, { dim: s } = o, a = n.shape.length, i = n.shape.slice(), p = s; + return s < 0 && (y.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), Me({ inputs: { x: n }, backend: t6, attrs: { shape: i } }); } -var l_ = { kernelName: xs, backendName: "cpu", kernelFunc: oc }; -var xX = Le((r, e) => r / e); -var Sl = Ye(Cn, xX); -var vl = { kernelName: Cn, backendName: "cpu", kernelFunc: Sl }; -function Pd(r, e, t10) { - let o = r.shape, n = o[0], s = o[1], a = t10.data.get(r.dataId), i = a.complexTensorInfos.real, p = a.complexTensorInfos.imag, u = [n, s], c = x.sizeFromShape(u), l = x.getTypedArrayFromDType("float32", c), m = x.getTypedArrayFromDType("float32", c); +var V2 = { kernelName: bs, backendName: "cpu", kernelFunc: Jp }; +var Bj = Be((r, e) => r / e); +var hl = Qe(Jo, Bj); +var gl = { kernelName: Jo, backendName: "cpu", kernelFunc: hl }; +function vf(r, e, t6) { + let o = r.shape, n = o[0], s = o[1], a = t6.data.get(r.dataId), i = a.complexTensorInfos.real, p = a.complexTensorInfos.imag, u = [n, s], c = y.sizeFromShape(u), l = y.getTypedArrayFromDType("float32", c), m = y.getTypedArrayFromDType("float32", c); for (let g = 0; g < n; g++) { - let y = qo({ inputs: { x: i }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), b = qo({ inputs: { x: p }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), C = qt({ inputs: { real: y, imag: b }, backend: t10 }), { real: w, imag: k } = yX(C, e, t10), _ = I.mergeRealAndImagArrays(w, k); - for (let E = 0; E < s; E++) { - let R = I.getComplexWithIndex(_, E); - l[g * s + E] = R.real, m[g * s + E] = R.imag; + let x = No({ inputs: { x: i }, backend: t6, attrs: { begin: [g, 0], size: [1, s] } }), b = No({ inputs: { x: p }, backend: t6, attrs: { begin: [g, 0], size: [1, s] } }), C = Ht({ inputs: { real: x, imag: b }, backend: t6 }), { real: w, imag: k } = Vj(C, e, t6), _ = S.mergeRealAndImagArrays(w, k); + for (let $ = 0; $ < s; $++) { + let A = S.getComplexWithIndex(_, $); + l[g * s + $] = A.real, m[g * s + $] = A.imag; } - t10.disposeIntermediateTensorInfo(y), t10.disposeIntermediateTensorInfo(b), t10.disposeIntermediateTensorInfo(C); + t6.disposeIntermediateTensorInfo(x), t6.disposeIntermediateTensorInfo(b), t6.disposeIntermediateTensorInfo(C); } - let f = t10.makeTensorInfo(u, "float32", l), d = t10.makeTensorInfo(u, "float32", m), h = qt({ inputs: { real: f, imag: d }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), h; + let d = t6.makeTensorInfo(u, "float32", l), f = t6.makeTensorInfo(u, "float32", m), h = Ht({ inputs: { real: d, imag: f }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(f), h; } -function yX(r, e, t10) { - let o = x.sizeFromShape(r.shape), n = t10.data.get(r.dataId), s = t10.data.get(n.complexTensorInfos.real.dataId).values, a = t10.data.get(n.complexTensorInfos.imag.dataId).values; - if (bX(o)) { - let i = FI(s, a, o, e, t10), p = [r.shape[0], r.shape[1]]; +function Vj(r, e, t6) { + let o = y.sizeFromShape(r.shape), n = t6.data.get(r.dataId), s = t6.data.get(n.complexTensorInfos.real.dataId).values, a = t6.data.get(n.complexTensorInfos.imag.dataId).values; + if (zj(o)) { + let i = _S(s, a, o, e, t6), p = [r.shape[0], r.shape[1]]; if (e) { - let u = t10.makeTensorInfo(p, "float32", i.real), c = t10.makeTensorInfo(p, "float32", i.imag), l = t10.makeTensorInfo([], "float32", x.createScalarValue(o, "float32")), m = ar({ inputs: { x: l }, backend: t10 }), f = vl.kernelFunc({ inputs: { a: u, b: l }, backend: t10 }), d = vl.kernelFunc({ inputs: { a: c, b: m }, backend: t10 }), h = t10.data.get(f.dataId).values, g = t10.data.get(d.dataId).values; - return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), { real: h, imag: g }; + let u = t6.makeTensorInfo(p, "float32", i.real), c = t6.makeTensorInfo(p, "float32", i.imag), l = t6.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = ar({ inputs: { x: l }, backend: t6 }), d = gl.kernelFunc({ inputs: { a: u, b: l }, backend: t6 }), f = gl.kernelFunc({ inputs: { a: c, b: m }, backend: t6 }), h = t6.data.get(d.dataId).values, g = t6.data.get(f.dataId).values; + return t6.disposeIntermediateTensorInfo(u), t6.disposeIntermediateTensorInfo(c), t6.disposeIntermediateTensorInfo(l), t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(f), { real: h, imag: g }; } return i; } else { - let i = I.mergeRealAndImagArrays(s, a), p = CX(i, o, e); - return I.splitRealAndImagArrays(p); + let i = S.mergeRealAndImagArrays(s, a), p = Wj(i, o, e); + return S.splitRealAndImagArrays(p); } } -function bX(r) { +function zj(r) { return (r & r - 1) === 0; } -function FI(r, e, t10, o, n) { - if (t10 === 1) +function _S(r, e, t6, o, n) { + if (t6 === 1) return { real: r, imag: e }; - let s = I.mergeRealAndImagArrays(r, e), a = t10 / 2, i = I.complexWithEvenIndex(s), p = i.real, u = i.imag, c = [p.length], l = n.makeTensorInfo(c, "float32", p), m = n.makeTensorInfo(c, "float32", u), f = qt({ inputs: { real: l, imag: m }, backend: n }), d = I.complexWithOddIndex(s), h = d.real, g = d.imag, y = [h.length], b = n.makeTensorInfo(y, "float32", h), C = n.makeTensorInfo(y, "float32", g), w = qt({ inputs: { real: b, imag: C }, backend: n }), k = FI(p, u, a, o, n), _ = k.real, E = k.imag, R = [_.length], A = n.makeTensorInfo(R, "float32", _), D = n.makeTensorInfo(R, "float32", E), O = qt({ inputs: { real: A, imag: D }, backend: n }), M = FI(h, g, a, o, n), L = M.real, W = M.imag, V = [L.length], G = n.makeTensorInfo(V, "float32", L), q = n.makeTensorInfo(V, "float32", W), H = qt({ inputs: { real: G, imag: q }, backend: n }), j = I.exponents(t10, o), Y = [j.real.length], Z = n.makeTensorInfo(Y, "float32", j.real), ee = n.makeTensorInfo(Y, "float32", j.imag), X = qt({ inputs: { real: Z, imag: ee }, backend: n }), Q = wu({ inputs: { a: X, b: H }, backend: n }), se = Hs({ inputs: { a: O, b: Q }, backend: n }), ie = Il({ inputs: { a: O, b: Q }, backend: n }), de = Wo({ inputs: { input: se }, backend: n }), Ie = Wo({ inputs: { input: ie }, backend: n }), Se = qs({ inputs: { input: se }, backend: n }), Ee = qs({ inputs: { input: ie }, backend: n }), Me = vi({ inputs: [de, Ie], backend: n, attrs: { axis: 0 } }), st = vi({ inputs: [Se, Ee], backend: n, attrs: { axis: 0 } }), pt = n.data.get(Me.dataId).values, De = n.data.get(st.dataId).values; - return n.disposeIntermediateTensorInfo(l), n.disposeIntermediateTensorInfo(m), n.disposeIntermediateTensorInfo(f), n.disposeIntermediateTensorInfo(b), n.disposeIntermediateTensorInfo(C), n.disposeIntermediateTensorInfo(w), n.disposeIntermediateTensorInfo(A), n.disposeIntermediateTensorInfo(D), n.disposeIntermediateTensorInfo(O), n.disposeIntermediateTensorInfo(G), n.disposeIntermediateTensorInfo(q), n.disposeIntermediateTensorInfo(H), n.disposeIntermediateTensorInfo(Z), n.disposeIntermediateTensorInfo(ee), n.disposeIntermediateTensorInfo(X), n.disposeIntermediateTensorInfo(Q), n.disposeIntermediateTensorInfo(se), n.disposeIntermediateTensorInfo(ie), n.disposeIntermediateTensorInfo(de), n.disposeIntermediateTensorInfo(Se), n.disposeIntermediateTensorInfo(Ie), n.disposeIntermediateTensorInfo(Ee), n.disposeIntermediateTensorInfo(Me), n.disposeIntermediateTensorInfo(st), { real: pt, imag: De }; + let s = S.mergeRealAndImagArrays(r, e), a = t6 / 2, i = S.complexWithEvenIndex(s), p = i.real, u = i.imag, c = [p.length], l = n.makeTensorInfo(c, "float32", p), m = n.makeTensorInfo(c, "float32", u), d = Ht({ inputs: { real: l, imag: m }, backend: n }), f = S.complexWithOddIndex(s), h = f.real, g = f.imag, x = [h.length], b = n.makeTensorInfo(x, "float32", h), C = n.makeTensorInfo(x, "float32", g), w = Ht({ inputs: { real: b, imag: C }, backend: n }), k = _S(p, u, a, o, n), _ = k.real, $ = k.imag, A = [_.length], R = n.makeTensorInfo(A, "float32", _), D = n.makeTensorInfo(A, "float32", $), P = Ht({ inputs: { real: R, imag: D }, backend: n }), M = _S(h, g, a, o, n), L = M.real, W = M.imag, V = [L.length], U = n.makeTensorInfo(V, "float32", L), q = n.makeTensorInfo(V, "float32", W), H = Ht({ inputs: { real: U, imag: q }, backend: n }), j = S.exponents(t6, o), X = [j.real.length], Z = n.makeTensorInfo(X, "float32", j.real), ee = n.makeTensorInfo(X, "float32", j.imag), Y = Ht({ inputs: { real: Z, imag: ee }, backend: n }), J = wu({ inputs: { a: Y, b: H }, backend: n }), ie = js({ inputs: { a: P, b: J }, backend: n }), pe = dl({ inputs: { a: P, b: J }, backend: n }), he = wo({ inputs: { input: ie }, backend: n }), we = wo({ inputs: { input: pe }, backend: n }), ve = Xs({ inputs: { input: ie }, backend: n }), $e = Xs({ inputs: { input: pe }, backend: n }), Le = Pi({ inputs: [he, we], backend: n, attrs: { axis: 0 } }), nt = Pi({ inputs: [ve, $e], backend: n, attrs: { axis: 0 } }), pt = n.data.get(Le.dataId).values, Oe = n.data.get(nt.dataId).values; + return n.disposeIntermediateTensorInfo(l), n.disposeIntermediateTensorInfo(m), n.disposeIntermediateTensorInfo(d), n.disposeIntermediateTensorInfo(b), n.disposeIntermediateTensorInfo(C), n.disposeIntermediateTensorInfo(w), n.disposeIntermediateTensorInfo(R), n.disposeIntermediateTensorInfo(D), n.disposeIntermediateTensorInfo(P), n.disposeIntermediateTensorInfo(U), n.disposeIntermediateTensorInfo(q), n.disposeIntermediateTensorInfo(H), n.disposeIntermediateTensorInfo(Z), n.disposeIntermediateTensorInfo(ee), n.disposeIntermediateTensorInfo(Y), n.disposeIntermediateTensorInfo(J), n.disposeIntermediateTensorInfo(ie), n.disposeIntermediateTensorInfo(pe), n.disposeIntermediateTensorInfo(he), n.disposeIntermediateTensorInfo(ve), n.disposeIntermediateTensorInfo(we), n.disposeIntermediateTensorInfo($e), n.disposeIntermediateTensorInfo(Le), n.disposeIntermediateTensorInfo(nt), { real: pt, imag: Oe }; } -function CX(r, e, t10) { +function Wj(r, e, t6) { let o = new Float32Array(e * 2); for (let n = 0; n < e; n++) { let s = 0, a = 0; for (let i = 0; i < e; i++) { - let p = I.exponent(n * i, e, t10), u = I.getComplexWithIndex(r, i); + let p = S.exponent(n * i, e, t6), u = S.getComplexWithIndex(r, i); s += u.real * p.real - u.imag * p.imag, a += u.real * p.imag + u.imag * p.real; } - t10 && (s /= e, a /= e), I.assignToTypedArray(o, s, a, n); + t6 && (s /= e, a /= e), S.assignToTypedArray(o, s, a, n); } return o; } -function IX(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = x.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Oe({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Pd(i, false, t10), u = Oe({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); - return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; +function Uj(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Me({ inputs: { x: o }, backend: t6, attrs: { shape: [a, s] } }), p = vf(i, false, t6), u = Me({ inputs: { x: p }, backend: t6, attrs: { shape: o.shape } }); + return t6.disposeIntermediateTensorInfo(i), t6.disposeIntermediateTensorInfo(p), u; } -var m_ = { kernelName: bp, backendName: "cpu", kernelFunc: IX }; -function kl(r) { - let { backend: e, attrs: t10 } = r, { shape: o, value: n, dtype: s } = t10, a = s || x.inferDtype(n), i = x.getArrayFromDType(a, x.sizeFromShape(o)); - return wX(i, n, a), e.makeTensorInfo(o, a, i); +var z2 = { kernelName: oi, backendName: "cpu", kernelFunc: Uj }; +function xl(r) { + let { backend: e, attrs: t6 } = r, { shape: o, value: n, dtype: s } = t6, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); + return Gj(i, n, a), e.makeTensorInfo(o, a, i); } -var f_ = { kernelName: ys, backendName: "cpu", kernelFunc: kl }; -function wX(r, e, t10) { +var W2 = { kernelName: Cs, backendName: "cpu", kernelFunc: xl }; +function Gj(r, e, t6) { r.fill(e); } -var d_ = { kernelName: Sn, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { image: o } = r, n = t10, s = x.getTypedArrayFromDType(o.dtype, x.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, c = n.data.get(o.dataId).values; +var U2 = { kernelName: on, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { image: o } = r, n = t6, s = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, c = n.data.get(o.dataId).values; for (let m = 0; m < a; m++) { - let f = m * p * i * u; - for (let d = 0; d < i; d++) { - let h = d * (p * u); + let d = m * p * i * u; + for (let f = 0; f < i; f++) { + let h = f * (p * u); for (let g = 0; g < p; g++) { - let y = g * u; + let x = g * u; for (let b = 0; b < u; b++) { - let C = Math.round(p - g - 1), w = f + h + y + b, k = c[w]; + let C = Math.round(p - g - 1), w = d + h + x + b, k = c[w]; if (C >= 0 && C < p) { - let _ = C * u, E = f + h + _ + b; - k = c[E]; + let _ = C * u, $ = d + h + _ + b; + k = c[$]; } s[w] = k; } @@ -13854,645 +13900,645 @@ var d_ = { kernelName: Sn, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: } return { dataId: n.write(s, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -var SX = Le((r, e) => Math.floor(r / e)); -var vX = Ye(vn, SX, null, "int32"); -var h_ = { kernelName: vn, backendName: "cpu", kernelFunc: vX }; -function kX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = o, h = RI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); +var Hj = Be((r, e) => Math.floor(r / e)); +var qj = Qe(sn, Hj, null, "int32"); +var G2 = { kernelName: sn, backendName: "cpu", kernelFunc: qj }; +function Kj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = NS({ inputs: { x: n, filter: s }, backend: t6, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; if (c === "NCHW" && a.shape.length === 1 && a.shape[0] !== 1) { - let y = Oe({ inputs: { x: a }, backend: t10, attrs: { shape: [a.shape[0], 1, 1] } }); - h = Hs({ inputs: { a: h, b: y }, backend: t10 }), t10.disposeIntermediateTensorInfo(y); + let x = Me({ inputs: { x: a }, backend: t6, attrs: { shape: [a.shape[0], 1, 1] } }); + h = js({ inputs: { a: h, b: x }, backend: t6 }), t6.disposeIntermediateTensorInfo(x); } else - h = Hs({ inputs: { a: h, b: a }, backend: t10 }); - t10.disposeIntermediateTensorInfo(g); + h = js({ inputs: { a: h, b: a }, backend: t6 }); + t6.disposeIntermediateTensorInfo(g); } - if (f) { + if (d) { let g = h; - if (c === "NCHW" && f === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { - let y = Oe({ inputs: { x: i }, backend: t10, attrs: { shape: [i.shape[0], 1, 1] } }); - h = _u(t10, h, f, y, d), t10.disposeIntermediateTensorInfo(y); + if (c === "NCHW" && d === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { + let x = Me({ inputs: { x: i }, backend: t6, attrs: { shape: [i.shape[0], 1, 1] } }); + h = _u(t6, h, d, x, f), t6.disposeIntermediateTensorInfo(x); } else - h = _u(t10, h, f, i, d); - t10.disposeIntermediateTensorInfo(g); + h = _u(t6, h, d, i, f); + t6.disposeIntermediateTensorInfo(g); } return h; } -var g_ = { kernelName: Do, backendName: "cpu", kernelFunc: kX }; -function TX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = o, h = AI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); +var H2 = { kernelName: ho, backendName: "cpu", kernelFunc: Kj }; +function jj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = TS({ inputs: { x: n, filter: s }, backend: t6, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; - h = Hs({ inputs: { a: h, b: a }, backend: t10 }), t10.disposeIntermediateTensorInfo(g); + h = js({ inputs: { a: h, b: a }, backend: t6 }), t6.disposeIntermediateTensorInfo(g); } - if (f) { + if (d) { let g = h; - h = _u(t10, h, f, i, d), t10.disposeIntermediateTensorInfo(g); + h = _u(t6, h, d, i, f), t6.disposeIntermediateTensorInfo(g); } return h; } -var x_ = { kernelName: Po, backendName: "cpu", kernelFunc: TX }; -function NX(r) { - let { inputs: e, backend: t10 } = r, { params: o, indices: n } = e, s = x.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, c, l] = I.prepareAndValidate(o, n); +var q2 = { kernelName: go, backendName: "cpu", kernelFunc: jj }; +function Xj(r) { + let { inputs: e, backend: t6 } = r, { params: o, indices: n } = e, s = y.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, c, l] = S.prepareAndValidate(o, n); if (u === 0) - return t10.makeTensorInfo(p, o.dtype, []); - let m = t10.data.get(n.dataId).values, f = t10.bufferSync(o), d = bd(m, f, o.dtype, u, i, c, l, o.shape, s); - return t10.makeTensorInfo(p, o.dtype, d.values); + return t6.makeTensorInfo(p, o.dtype, []); + let m = t6.data.get(n.dataId).values, d = t6.bufferSync(o), f = pf(m, d, o.dtype, u, i, c, l, o.shape, s); + return t6.makeTensorInfo(p, o.dtype, f.values); } -var y_ = { kernelName: Tn, backendName: "cpu", kernelFunc: NX }; -function _X(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o; +var K2 = { kernelName: un, backendName: "cpu", kernelFunc: Xj }; +function Yj(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o; K([n, s], "gatherV2"); - let p = x.parseAxisParam(a, n.shape)[0], u = t10.data.get(s.dataId).values, c = n.shape[p]; + let p = y.parseAxisParam(a, n.shape)[0], u = t6.data.get(s.dataId).values, c = n.shape[p]; for (let w = 0; w < u.length; ++w) { let k = u[w]; - x.assert(k <= c - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${c - 1}]`); + y.assert(k <= c - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${c - 1}]`); } let l = i; i == null && (l = 0); - let m = x.sizeFromShape(s.shape), f = I.segment_util.collectGatherOpShapeInfo(n, s, p, l), d = Oe({ inputs: { x: n }, backend: t10, attrs: { shape: [f.batchSize, f.outerSize, f.dimSize, f.sliceSize] } }), h = Oe({ inputs: { x: s }, backend: t10, attrs: { shape: [f.batchSize, m / f.batchSize] } }), g = [f.batchSize, f.outerSize, m / f.batchSize, f.sliceSize], y = t10.bufferSync(h), b = t10.bufferSync(d), C = Cd(b, y, g); - return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(h), t10.makeTensorInfo(f.outputShape, C.dtype, C.values); + let m = y.sizeFromShape(s.shape), d = S.segment_util.collectGatherOpShapeInfo(n, s, p, l), f = Me({ inputs: { x: n }, backend: t6, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = Me({ inputs: { x: s }, backend: t6, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = t6.bufferSync(h), b = t6.bufferSync(f), C = cf(b, x, g); + return t6.disposeIntermediateTensorInfo(f), t6.disposeIntermediateTensorInfo(h), t6.makeTensorInfo(d.outputShape, C.dtype, C.values); } -var b_ = { kernelName: bs, backendName: "cpu", kernelFunc: _X }; -function EX(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = x.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Oe({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Pd(i, true, t10), u = Oe({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); - return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; +var j2 = { kernelName: Ss, backendName: "cpu", kernelFunc: Yj }; +function Qj(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Me({ inputs: { x: o }, backend: t6, attrs: { shape: [a, s] } }), p = vf(i, true, t6), u = Me({ inputs: { x: p }, backend: t6, attrs: { shape: o.shape } }); + return t6.disposeIntermediateTensorInfo(i), t6.disposeIntermediateTensorInfo(p), u; } -var C_ = { kernelName: Cp, backendName: "cpu", kernelFunc: EX }; -var $X = we(Hi, (r) => Number.isFinite(r) ? 1 : 0, "bool"); -var I_ = { kernelName: Hi, backendName: "cpu", kernelFunc: $X }; -var RX = we(qi, (r) => Math.abs(r) === 1 / 0 ? 1 : 0, "bool"); -var w_ = { kernelName: qi, backendName: "cpu", kernelFunc: RX }; -var AX = we(ia, (r) => Number.isNaN(r) ? 1 : 0, "bool"); -var S_ = { kernelName: ia, backendName: "cpu", kernelFunc: AX }; -function FX(r) { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, num: s } = t10, a = Id(o, n, s); +var X2 = { kernelName: ni, backendName: "cpu", kernelFunc: Qj }; +var Zj = Ie(fa, (r) => Number.isFinite(r) ? 1 : 0, "bool"); +var Y2 = { kernelName: fa, backendName: "cpu", kernelFunc: Zj }; +var Jj = Ie(ha, (r) => Math.abs(r) === 1 / 0 ? 1 : 0, "bool"); +var Q2 = { kernelName: ha, backendName: "cpu", kernelFunc: Jj }; +var eX = Ie(ln, (r) => Number.isNaN(r) ? 1 : 0, "bool"); +var Z2 = { kernelName: ln, backendName: "cpu", kernelFunc: eX }; +function tX(r) { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, num: s } = t6, a = lf(o, n, s); return e.makeTensorInfo([a.length], "float32", a); } -var v_ = { kernelName: Ip, backendName: "cpu", kernelFunc: FX }; -var DX = we(Ki, (r) => Math.log1p(r)); -var k_ = { kernelName: Ki, backendName: "cpu", kernelFunc: DX }; -var PX = Le((r, e) => r && e); -var OX = Ye(_n, PX, null, "bool"); -var T_ = { kernelName: _n, backendName: "cpu", kernelFunc: OX }; -var MX = we(En, (r) => r ? 0 : 1, "bool"); -var N_ = { kernelName: En, backendName: "cpu", kernelFunc: MX }; -var LX = Le((r, e) => r || e); -var BX = Ye(ua, LX, null, "bool"); -var __ = { kernelName: ua, backendName: "cpu", kernelFunc: BX }; -function VX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; +var J2 = { kernelName: xp, backendName: "cpu", kernelFunc: tX }; +var rX = Ie(ga, (r) => Math.log1p(r)); +var e_ = { kernelName: ga, backendName: "cpu", kernelFunc: rX }; +var oX = Be((r, e) => r && e); +var nX = Qe(gn, oX, null, "bool"); +var t_ = { kernelName: gn, backendName: "cpu", kernelFunc: nX }; +var sX = Ie(xn, (r) => r ? 0 : 1, "bool"); +var r_ = { kernelName: xn, backendName: "cpu", kernelFunc: sX }; +var aX = Be((r, e) => r || e); +var iX = Qe(xa, aX, null, "bool"); +var o_ = { kernelName: xa, backendName: "cpu", kernelFunc: iX }; +function uX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; K(n, "LRN"); - let u = n.shape[3], c = u - 1, l = t10.data.get(n.dataId).values, m = x.sizeFromShape(n.shape), f = new Float32Array(m); - function d(h) { - let g = h % u, y = h - g + Math.max(0, g - s), b = h - g + Math.min(g + s, c), C = 0; - for (; y <= b; y++) { - let w = l[y]; + let u = n.shape[3], c = u - 1, l = t6.data.get(n.dataId).values, m = y.sizeFromShape(n.shape), d = new Float32Array(m); + function f(h) { + let g = h % u, x = h - g + Math.max(0, g - s), b = h - g + Math.min(g + s, c), C = 0; + for (; x <= b; x++) { + let w = l[x]; C += w * w; } return C; } for (let h = 0; h < m; h++) { - let g = d(h), y = l[h] * Math.pow(a + i * g, -p); - f[h] = y; + let g = f(h), x = l[h] * Math.pow(a + i * g, -p); + d[h] = x; } - return t10.makeTensorInfo(n.shape, n.dtype, f); + return t6.makeTensorInfo(n.shape, n.dtype, d); } -var E_ = { kernelName: wp, backendName: "cpu", kernelFunc: VX }; -function zX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; +var n_ = { kernelName: yp, backendName: "cpu", kernelFunc: uX }; +function pX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; K(a, "LRNGrad"); - let l = x.sizeFromShape(a.shape), m = a.shape[3], f = t10.data.get(a.dataId).values, d = t10.data.get(n.dataId).values, h = t10.data.get(s.dataId).values, g = new Float32Array(l), y = l; - for (let b = 0; b < y; b++) { + let l = y.sizeFromShape(a.shape), m = a.shape[3], d = t6.data.get(a.dataId).values, f = t6.data.get(n.dataId).values, h = t6.data.get(s.dataId).values, g = new Float32Array(l), x = l; + for (let b = 0; b < x; b++) { let C = b % m, w = b - C + Math.max(0, C - i), k = b - C + Math.min(m, C + i + 1), _ = 0; - for (let E = w; E < k; E++) - _ += Math.pow(d[E], 2); + for (let $ = w; $ < k; $++) + _ += Math.pow(f[$], 2); _ = u * _ + p; - for (let E = w; E < k; E++) { - let R = -2 * u * c * d[E] * h[b] / _; - b === E && (R += Math.pow(_, -c)), R *= f[b], g[E] += R; + for (let $ = w; $ < k; $++) { + let A = -2 * u * c * f[$] * h[b] / _; + b === $ && (A += Math.pow(_, -c)), A *= d[b], g[$] += A; } } - return t10.makeTensorInfo(a.shape, n.dtype, g); + return t6.makeTensorInfo(a.shape, n.dtype, g); } -var $_ = { kernelName: Om, backendName: "cpu", kernelFunc: zX }; -function DI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = t10, p = n.shape, u = p.length, c = x.parseAxisParam(s, p), l = c, m = I.getAxesPermutation(l, u), f = i.data.get(n.dataId).values; +var s_ = { kernelName: Nm, backendName: "cpu", kernelFunc: pX }; +function ES(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = t6, p = n.shape, u = p.length, c = y.parseAxisParam(s, p), l = c, m = S.getAxesPermutation(l, u), d = i.data.get(n.dataId).values; if (m != null) { let w = new Array(u); for (let k = 0; k < w.length; k++) w[k] = p[m[k]]; - f = Jp(f, p, n.dtype, m, w), l = I.getInnerMostAxes(l.length, u), p = w; + d = jp(d, p, n.dtype, m, w), l = S.getInnerMostAxes(l.length, u), p = w; } - K(n, "max"), I.assertAxesAreInnerMostDims("max", l, u); - let [d, h] = I.computeOutAndReduceShapes(p, l), g = x.sizeFromShape(h), y = wd(f, g, d, n.dtype), b = i.write(y, d, n.dtype), C = d; - return a && (C = I.expandShapeToKeepDim(d, c)), { dataId: b, shape: C, dtype: n.dtype }; + K(n, "max"), S.assertAxesAreInnerMostDims("max", l, u); + let [f, h] = S.computeOutAndReduceShapes(p, l), g = y.sizeFromShape(h), x = mf(d, g, f, n.dtype), b = i.write(x, f, n.dtype), C = f; + return a && (C = S.expandShapeToKeepDim(f, c)), { dataId: b, shape: C, dtype: n.dtype }; } -var R_ = { kernelName: $n, backendName: "cpu", kernelFunc: DI }; -function WX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e; +var a_ = { kernelName: yn, backendName: "cpu", kernelFunc: ES }; +function cX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e; K(n, "maxPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - x.assert(I.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let c = I.computePool2DInfo(n.shape, s, a, u, i, p), l; - if (c.filterWidth === 1 && c.filterHeight === 1 && x.arraysEqual(c.inShape, c.outShape)) - l = ar({ inputs: { x: n }, backend: t10 }); + y.assert(S.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = S.computePool2DInfo(n.shape, s, a, u, i, p), l; + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + l = ar({ inputs: { x: n }, backend: t6 }); else { - let m = t10.data.get(n.dataId).values, f = x.computeStrides(n.shape), d = rc(m, n.shape, n.dtype, f, c, "max"); - l = t10.makeTensorInfo(c.outShape, n.dtype, d.values); + let m = t6.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = Zp(m, n.shape, n.dtype, d, c, "max"); + l = t6.makeTensorInfo(c.outShape, n.dtype, f.values); } return l; } -var A_ = { kernelName: Rn, backendName: "cpu", kernelFunc: WX }; -function UX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var i_ = { kernelName: Cn, backendName: "cpu", kernelFunc: cX }; +function lX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; K(n, "maxPool3d"); - let c = I.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.data.get(n.dataId).values, m = Dd(l, n.shape, n.dtype, x.computeStrides(n.shape), c, "max"); - return t10.makeTensorInfo(m.shape, "float32", m.values); + let c = S.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t6.data.get(n.dataId).values, m = If(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "max"); + return t6.makeTensorInfo(m.shape, "float32", m.values); } -var F_ = { kernelName: Sp, backendName: "cpu", kernelFunc: UX }; -function GX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var u_ = { kernelName: bp, backendName: "cpu", kernelFunc: lX }; +function mX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; K([n, s], "maxPool3DGrad"); - let c = I.computePool3DInfo(s.shape, a, i, 1, p, u), l = t10.bufferSync(s), m = _2(l, c), f = c.strideDepth, d = c.strideHeight, h = c.strideWidth, g = c.dilationDepth, y = c.dilationHeight, b = c.dilationWidth, C = c.effectiveFilterDepth, w = c.effectiveFilterHeight, k = c.effectiveFilterWidth, _ = C - 1 - c.padInfo.front, E = k - 1 - c.padInfo.left, R = w - 1 - c.padInfo.top, A = ne(s.shape, "float32"), D = t10.bufferSync(n); - for (let O = 0; O < c.batchSize; ++O) + let c = S.computePool3DInfo(s.shape, a, i, 1, p, u), l = t6.bufferSync(s), m = o2(l, c), d = c.strideDepth, f = c.strideHeight, h = c.strideWidth, g = c.dilationDepth, x = c.dilationHeight, b = c.dilationWidth, C = c.effectiveFilterDepth, w = c.effectiveFilterHeight, k = c.effectiveFilterWidth, _ = C - 1 - c.padInfo.front, $ = k - 1 - c.padInfo.left, A = w - 1 - c.padInfo.top, R = le(s.shape, "float32"), D = t6.bufferSync(n); + for (let P = 0; P < c.batchSize; ++P) for (let M = 0; M < c.inChannels; ++M) for (let L = 0; L < c.inDepth; ++L) for (let W = 0; W < c.inHeight; ++W) for (let V = 0; V < c.inWidth; ++V) { - let G = L - _, q = W - R, H = V - E, j = 0; - for (let Y = 0; Y < C; Y += g) { - let Z = (G + Y) / f; + let U = L - _, q = W - A, H = V - $, j = 0; + for (let X = 0; X < C; X += g) { + let Z = (U + X) / d; if (!(Z < 0 || Z >= c.outDepth || Math.floor(Z) !== Z)) - for (let ee = 0; ee < w; ee += y) { - let X = (q + ee) / d; - if (!(X < 0 || X >= c.outHeight || Math.floor(X) !== X)) - for (let Q = 0; Q < k; Q += b) { - let se = (H + Q) / h; - if (se < 0 || se >= c.outWidth || Math.floor(se) !== se) + for (let ee = 0; ee < w; ee += x) { + let Y = (q + ee) / f; + if (!(Y < 0 || Y >= c.outHeight || Math.floor(Y) !== Y)) + for (let J = 0; J < k; J += b) { + let ie = (H + J) / h; + if (ie < 0 || ie >= c.outWidth || Math.floor(ie) !== ie) continue; - let ie = C * w * k - 1 - m.get(O, Z, X, se, M), de = Y * w * k + ee * k + Q, Ie = ie === de ? 1 : 0; - if (Ie === 0) + let pe = C * w * k - 1 - m.get(P, Z, Y, ie, M), he = X * w * k + ee * k + J, we = pe === he ? 1 : 0; + if (we === 0) continue; - let Se = D.get(O, Z, X, se, M); - j += Se * Ie; + let ve = D.get(P, Z, Y, ie, M); + j += ve * we; } } } - A.set(j, O, L, W, V, M); + R.set(j, P, L, W, V, M); } - return t10.makeTensorInfo(A.shape, A.dtype, A.values); + return t6.makeTensorInfo(R.shape, R.dtype, R.values); } -var D_ = { kernelName: Lm, backendName: "cpu", kernelFunc: GX }; -function HX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s, output: a } = e, i = s; +var p_ = { kernelName: _m, backendName: "cpu", kernelFunc: mX }; +function dX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s, output: a } = e, i = s; K([s, a], "maxPoolGrad"); - let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = I.computePool2DInfo(i.shape, p, u, 1, c, l), f = t10.data.get(i.dataId).values, d = ne(m.outShape, i.dtype, Fd(f, i.shape, i.dtype, m).values), h = m.strideHeight, g = m.strideWidth, y = m.dilationHeight, b = m.dilationWidth, C = m.effectiveFilterHeight, w = m.effectiveFilterWidth, k = w - 1 - m.padInfo.left, _ = C - 1 - m.padInfo.top, E = ne(i.shape, "float32"), R = t10.data.get(n.dataId).values, A = ne(n.shape, "float32", R); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = S.computePool2DInfo(i.shape, p, u, 1, c, l), d = t6.data.get(i.dataId).values, f = le(m.outShape, i.dtype, wf(d, i.shape, i.dtype, m).values), h = m.strideHeight, g = m.strideWidth, x = m.dilationHeight, b = m.dilationWidth, C = m.effectiveFilterHeight, w = m.effectiveFilterWidth, k = w - 1 - m.padInfo.left, _ = C - 1 - m.padInfo.top, $ = le(i.shape, "float32"), A = t6.data.get(n.dataId).values, R = le(n.shape, "float32", A); for (let D = 0; D < m.batchSize; ++D) - for (let O = 0; O < m.inChannels; ++O) + for (let P = 0; P < m.inChannels; ++P) for (let M = 0; M < m.inHeight; ++M) for (let L = 0; L < m.inWidth; ++L) { - let W = M - _, V = L - k, G = 0; - for (let q = 0; q < C; q += y) { + let W = M - _, V = L - k, U = 0; + for (let q = 0; q < C; q += x) { let H = (W + q) / h; if (!(H < 0 || H >= m.outHeight || Math.floor(H) !== H)) for (let j = 0; j < w; j += b) { - let Y = (V + j) / g; - if (Y < 0 || Y >= m.outWidth || Math.floor(Y) !== Y) + let X = (V + j) / g; + if (X < 0 || X >= m.outWidth || Math.floor(X) !== X) continue; - let Z = C * w - 1 - d.get(D, H, Y, O), ee = q * w + j, X = Z === ee ? 1 : 0; - if (X === 0) + let Z = C * w - 1 - f.get(D, H, X, P), ee = q * w + j, Y = Z === ee ? 1 : 0; + if (Y === 0) continue; - let Q = A.get(D, H, Y, O); - G += Q * X; + let J = R.get(D, H, X, P); + U += J * Y; } } - E.set(G, D, M, L, O); + $.set(U, D, M, L, P); } - return t10.makeTensorInfo(E.shape, E.dtype, E.values); + return t6.makeTensorInfo($.shape, $.dtype, $.values); } -var P_ = { kernelName: Mm, backendName: "cpu", kernelFunc: HX }; -function O_(r, e, t10, o, n) { - let s = x.computeStrides(e), a = rc(r, e, t10, s, n, "max"), i = Fd(r, e, t10, n, true, o); +var c_ = { kernelName: Tm, backendName: "cpu", kernelFunc: dX }; +function l_(r, e, t6, o, n) { + let s = y.computeStrides(e), a = Zp(r, e, t6, s, n, "max"), i = wf(r, e, t6, n, true, o); return [a.values, i.values]; } -var M_ = { kernelName: vp, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; +var m_ = { kernelName: Cp, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t6; K(o, "MaxPoolWithArgmax"); - let u = p.data.get(o.dataId).values, c = I.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = O_(u, o.shape, o.dtype, i, c), f = p.write(l, c.outShape, o.dtype), d = p.write(m, c.outShape, o.dtype); - return [{ dataId: f, shape: c.outShape, dtype: o.dtype }, { dataId: d, shape: c.outShape, dtype: "int32" }]; + let u = p.data.get(o.dataId).values, c = S.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = l_(u, o.shape, o.dtype, i, c), d = p.write(l, c.outShape, o.dtype), f = p.write(m, c.outShape, o.dtype); + return [{ dataId: d, shape: c.outShape, dtype: o.dtype }, { dataId: f, shape: c.outShape, dtype: "int32" }]; } }; -function qX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = x.parseAxisParam(s, n.shape), u = I.computeOutAndReduceShapes(n.shape, i)[1], c = x.sizeFromShape(u), l = [], m = t10.makeTensorInfo([], "float32", new Float32Array([c])); +function fX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = S.computeOutAndReduceShapes(n.shape, i)[1], c = y.sizeFromShape(u), l = [], m = t6.makeTensorInfo([], "float32", new Float32Array([c])); l.push(m); - let f = Uo({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }); - l.push(f); - let d = Sl({ inputs: { a: f, b: m }, backend: t10 }); + let d = Io({ inputs: { x: n }, backend: t6, attrs: { dtype: "float32" } }); l.push(d); - let h = Fa({ inputs: { x: d }, backend: t10, attrs: { axis: s, keepDims: a } }); - return l.forEach((g) => t10.disposeIntermediateTensorInfo(g)), h; + let f = hl({ inputs: { a: d, b: m }, backend: t6 }); + l.push(f); + let h = La({ inputs: { x: f }, backend: t6, attrs: { axis: s, keepDims: a } }); + return l.forEach((g) => t6.disposeIntermediateTensorInfo(g)), h; } -var L_ = { kernelName: An, backendName: "cpu", kernelFunc: qX }; -function KX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; +var d_ = { kernelName: Sn, backendName: "cpu", kernelFunc: fX }; +function hX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; K(n, "min"); - let i = x.parseAxisParam(s, n.shape), p = i, u = I.getAxesPermutation(p, n.shape.length), c = n; - u != null && (c = bt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = I.getInnerMostAxes(p.length, n.shape.length)), I.assertAxesAreInnerMostDims("min", p, c.shape.length); - let [l, m] = I.computeOutAndReduceShapes(c.shape, p), f = x.sizeFromShape(m), d = x.makeZerosTypedArray(x.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; - for (let y = 0; y < d.length; ++y) { - let b = y * f, C = h[b]; - for (let w = 0; w < f; ++w) { + let i = y.parseAxisParam(s, n.shape), p = i, u = S.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = Ct({ inputs: { x: n }, backend: t6, attrs: { perm: u } }), p = S.getInnerMostAxes(p.length, n.shape.length)), S.assertAxesAreInnerMostDims("min", p, c.shape.length); + let [l, m] = S.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t6.data.get(c.dataId).values; + for (let x = 0; x < f.length; ++x) { + let b = x * d, C = h[b]; + for (let w = 0; w < d; ++w) { let k = h[b + w]; (Number.isNaN(k) || k < C) && (C = k); } - d[y] = C; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(c); - let g = t10.makeTensorInfo(l, c.dtype, d); + u != null && t6.disposeIntermediateTensorInfo(c); + let g = t6.makeTensorInfo(l, c.dtype, f); if (a) { - let y = I.expandShapeToKeepDim(l, i), b = Oe({ inputs: { x: g }, backend: t10, attrs: { shape: y } }); - return t10.disposeIntermediateTensorInfo(g), b; + let x = S.expandShapeToKeepDim(l, i), b = Me({ inputs: { x: g }, backend: t6, attrs: { shape: x } }); + return t6.disposeIntermediateTensorInfo(g), b; } return g; } -var B_ = { kernelName: Fn, backendName: "cpu", kernelFunc: KX }; -function jX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { paddings: s, mode: a } = o; +var f_ = { kernelName: wn, backendName: "cpu", kernelFunc: hX }; +function gX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { paddings: s, mode: a } = o; K(n, "mirrorPad"); - let i = s.map((C, w) => C[0] + n.shape[w] + C[1]), p = s.map((C) => C[0]), u = s.map((C, w) => C[0] + n.shape[w]), c = a === "reflect" ? 0 : 1, l = t10.data.get(n.dataId).values, m = n.shape.length, f = x.computeStrides(n.shape), d = x.sizeFromShape(i), h = i.length, g = x.computeStrides(i), y = x.getTypedArrayFromDType(n.dtype, d); - for (let C = 0; C < d; C++) { - let w = x.indexToLoc(C, h, g); + let i = s.map((C, w) => C[0] + n.shape[w] + C[1]), p = s.map((C) => C[0]), u = s.map((C, w) => C[0] + n.shape[w]), c = a === "reflect" ? 0 : 1, l = t6.data.get(n.dataId).values, m = n.shape.length, d = y.computeStrides(n.shape), f = y.sizeFromShape(i), h = i.length, g = y.computeStrides(i), x = y.getTypedArrayFromDType(n.dtype, f); + for (let C = 0; C < f; C++) { + let w = y.indexToLoc(C, h, g); for (let _ = 0; _ < h; _++) w[_] < p[_] ? w[_] = p[_] * 2 - w[_] - c : w[_] >= u[_] && (w[_] = (u[_] - 1) * 2 - w[_] + c); - w = w.map((_, E) => _ - p[E]); - let k = x.locToIndex(w, m, f); - y[C] = l[k]; + w = w.map((_, $) => _ - p[$]); + let k = y.locToIndex(w, m, d); + x[C] = l[k]; } - return { dataId: t10.write(y, i, n.dtype), shape: i, dtype: n.dtype }; + return { dataId: t6.write(x, i, n.dtype), shape: i, dtype: n.dtype }; } -var V_ = { kernelName: Dn, backendName: "cpu", kernelFunc: jX }; -var XX = Le((r, e) => { - let t10 = r % e; - return r < 0 && e < 0 || r >= 0 && e >= 0 ? t10 : (t10 + e) % e; +var h_ = { kernelName: vn, backendName: "cpu", kernelFunc: gX }; +var xX = Be((r, e) => { + let t6 = r % e; + return r < 0 && e < 0 || r >= 0 && e >= 0 ? t6 : (t6 + e) % e; }); -var YX = Ye(ji, XX); -var z_ = { kernelName: ji, backendName: "cpu", kernelFunc: YX }; -var U_ = rp(IC()); -function PI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = n.shape.length, i = s; +var yX = Qe(ya, xX); +var g_ = { kernelName: ya, backendName: "cpu", kernelFunc: yX }; +var y_ = rp(gC()); +function $S(r) { + let { inputs: e, backend: t6, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = n.shape.length, i = s; if (i === -1 && (i = a - 1), i !== a - 1) throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`); - let p = x.parseAxisParam([i], n.shape), u = DI({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: p, keepDims: false } }), c = I.expandShapeToKeepDim(u.shape, p), l = Oe({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), m = Il({ inputs: { a: n, b: l }, backend: t10 }), f = iI({ inputs: { x: m }, backend: t10 }), d = Fa({ inputs: { x: f }, backend: t10, attrs: { axis: p, keepDims: false } }), h = Oe({ inputs: { x: d }, backend: t10, attrs: { shape: c } }), g = Sl({ inputs: { a: f, b: h }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(h), g; + let p = y.parseAxisParam([i], n.shape), u = ES({ inputs: { x: n }, backend: t6, attrs: { reductionIndices: p, keepDims: false } }), c = S.expandShapeToKeepDim(u.shape, p), l = Me({ inputs: { x: u }, backend: t6, attrs: { shape: c } }), m = dl({ inputs: { a: n, b: l }, backend: t6 }), d = rS({ inputs: { x: m }, backend: t6 }), f = La({ inputs: { x: d }, backend: t6, attrs: { axis: p, keepDims: false } }), h = Me({ inputs: { x: f }, backend: t6, attrs: { shape: c } }), g = hl({ inputs: { a: d, b: h }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(u), t6.disposeIntermediateTensorInfo(l), t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(f), t6.disposeIntermediateTensorInfo(h), g; } -var W_ = { kernelName: Xn, backendName: "cpu", kernelFunc: PI }; -function QX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; +var x_ = { kernelName: qn, backendName: "cpu", kernelFunc: $S }; +function bX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; K(n, "multinomial"); - let p = i ? n : PI({ inputs: { logits: n }, backend: t10, attrs: { dim: -1 } }), u = p.shape[0], c = p.shape[1], l = t10.data.get(p.dataId).values, m = [u, s], f = x.makeZerosTypedArray(x.sizeFromShape(m), "int32"); - for (let d = 0; d < u; ++d) { - let h = d * c, g = new Float32Array(c - 1); + let p = i ? n : $S({ inputs: { logits: n }, backend: t6, attrs: { dim: -1 } }), u = p.shape[0], c = p.shape[1], l = t6.data.get(p.dataId).values, m = [u, s], d = y.makeZerosTypedArray(y.sizeFromShape(m), "int32"); + for (let f = 0; f < u; ++f) { + let h = f * c, g = new Float32Array(c - 1); g[0] = l[h]; for (let C = 1; C < g.length; ++C) g[C] = g[C - 1] + l[h + C]; - let y = U_.alea(a.toString()), b = d * s; + let x = y_.alea(a.toString()), b = f * s; for (let C = 0; C < s; ++C) { - let w = y(); - f[b + C] = g.length; + let w = x(); + d[b + C] = g.length; for (let k = 0; k < g.length; k++) if (w < g[k]) { - f[b + C] = k; + d[b + C] = k; break; } } } - return i || t10.disposeIntermediateTensorInfo(p), t10.makeTensorInfo(m, "int32", f); + return i || t6.disposeIntermediateTensorInfo(p), t6.makeTensorInfo(m, "int32", d); } -var G_ = { kernelName: kp, backendName: "cpu", kernelFunc: QX }; -var ZX = Bt.nonMaxSuppressionV3Impl; -function JX(r) { - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; +var b_ = { kernelName: Sp, backendName: "cpu", kernelFunc: bX }; +var CX = Lt.nonMaxSuppressionV3Impl; +function SX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; K(n, "NonMaxSuppression"); - let u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, { selectedIndices: l } = ZX(u, c, a, i, p); - return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); + let u = t6.data.get(n.dataId).values, c = t6.data.get(s.dataId).values, { selectedIndices: l } = CX(u, c, a, i, p); + return t6.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var H_ = { kernelName: On, backendName: "cpu", kernelFunc: JX }; -var e5 = Bt.nonMaxSuppressionV4Impl; -function t5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; +var C_ = { kernelName: Tn, backendName: "cpu", kernelFunc: SX }; +var wX = Lt.nonMaxSuppressionV4Impl; +function IX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; K(n, "NonMaxSuppressionPadded"); - let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, { selectedIndices: m, validOutputs: f } = e5(c, l, a, i, p, u); - return [t10.makeTensorInfo([m.length], "int32", new Int32Array(m)), t10.makeTensorInfo([], "int32", new Int32Array([f]))]; + let c = t6.data.get(n.dataId).values, l = t6.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = wX(c, l, a, i, p, u); + return [t6.makeTensorInfo([m.length], "int32", new Int32Array(m)), t6.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var q_ = { kernelName: pa, backendName: "cpu", kernelFunc: t5 }; -var r5 = Bt.nonMaxSuppressionV5Impl; -function o5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; +var S_ = { kernelName: ba, backendName: "cpu", kernelFunc: IX }; +var vX = Lt.nonMaxSuppressionV5Impl; +function kX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; K(n, "NonMaxSuppressionWithScore"); - let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, m = a, f = i, d = p, h = u, { selectedIndices: g, selectedScores: y } = r5(c, l, m, f, d, h); - return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([y.length], "float32", new Float32Array(y))]; + let c = t6.data.get(n.dataId).values, l = t6.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = vX(c, l, m, d, f, h); + return [t6.makeTensorInfo([g.length], "int32", new Int32Array(g)), t6.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var K_ = { kernelName: Mn, backendName: "cpu", kernelFunc: o5 }; -function n5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o; +var w_ = { kernelName: _n, backendName: "cpu", kernelFunc: kX }; +function NX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o; K(n, "oneHot"); - let u = x.sizeFromShape(n.shape), c = new Float32Array(u * a); + let u = y.sizeFromShape(n.shape), c = new Float32Array(u * a); c.fill(p); - let l = t10.data.get(n.dataId).values; + let l = t6.data.get(n.dataId).values; for (let m = 0; m < u; ++m) l[m] >= 0 && l[m] < a && (c[m * a + l[m]] = i); - return t10.makeTensorInfo([...n.shape, a], s, c); + return t6.makeTensorInfo([...n.shape, a], s, c); } -var j_ = { kernelName: ca, backendName: "cpu", kernelFunc: n5 }; -function Tl(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var I_ = { kernelName: En, backendName: "cpu", kernelFunc: NX }; +function yl(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "string") throw new Error("zerosLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = Wo({ inputs: { input: o }, backend: t10 }), s = Tl({ inputs: { x: n }, backend: t10 }), a = qs({ inputs: { input: o }, backend: t10 }), i = Tl({ inputs: { x: a }, backend: t10 }), p = qt({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; + let n = wo({ inputs: { input: o }, backend: t6 }), s = yl({ inputs: { x: n }, backend: t6 }), a = Xs({ inputs: { input: o }, backend: t6 }), i = yl({ inputs: { x: a }, backend: t6 }), p = Ht({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(n), t6.disposeIntermediateTensorInfo(s), t6.disposeIntermediateTensorInfo(a), t6.disposeIntermediateTensorInfo(i), p; } else - return kl({ backend: t10, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); + return xl({ backend: t6, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); } -var X_ = { kernelName: Es, backendName: "cpu", kernelFunc: Tl }; -function Y_(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var v_ = { kernelName: Fs, backendName: "cpu", kernelFunc: yl }; +function k_(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = Wo({ inputs: { input: o }, backend: t10 }), s = Y_({ inputs: { x: n }, backend: t10 }), a = qs({ inputs: { input: o }, backend: t10 }), i = Tl({ inputs: { x: a }, backend: t10 }), p = qt({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; + let n = wo({ inputs: { input: o }, backend: t6 }), s = k_({ inputs: { x: n }, backend: t6 }), a = Xs({ inputs: { input: o }, backend: t6 }), i = yl({ inputs: { x: a }, backend: t6 }), p = Ht({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(n), t6.disposeIntermediateTensorInfo(s), t6.disposeIntermediateTensorInfo(a), t6.disposeIntermediateTensorInfo(i), p; } else - return kl({ backend: t10, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); + return xl({ backend: t6, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); } -var Q_ = { kernelName: Cs, backendName: "cpu", kernelFunc: Y_ }; -function OI(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o; +var N_ = { kernelName: Is, backendName: "cpu", kernelFunc: k_ }; +function AS(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o; if (e.length === 1) - return oc({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return Jp({ inputs: { input: e[0] }, backend: t6, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; e.forEach((c) => { - x.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), x.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); let i = [], p = e.map((c) => { - let l = oc({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + let l = Jp({ inputs: { input: c }, backend: t6, attrs: { dim: n } }); return i.push(l), l; - }), u = vi({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((c) => t10.disposeIntermediateTensorInfo(c)), u; + }), u = Pi({ inputs: p, backend: t6, attrs: { axis: n } }); + return i.forEach((c) => t6.disposeIntermediateTensorInfo(c)), u; } -var Z_ = { kernelName: Is, backendName: "cpu", kernelFunc: OI }; -function s5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; +var T_ = { kernelName: vs, backendName: "cpu", kernelFunc: AS }; +function TX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; K(n, "pad"); - let i = s.map((b, C) => b[0] + n.shape[C] + b[1]), p = s.map((b) => b[0]), u = t10.data.get(n.dataId).values, c = x.sizeFromShape(n.shape), l = n.shape.length, m = x.computeStrides(n.shape), f = x.sizeFromShape(i), d = i.length, h = x.computeStrides(i), g = x.getTypedArrayFromDType(n.dtype, f); + let i = s.map((b, C) => b[0] + n.shape[C] + b[1]), p = s.map((b) => b[0]), u = t6.data.get(n.dataId).values, c = y.sizeFromShape(n.shape), l = n.shape.length, m = y.computeStrides(n.shape), d = y.sizeFromShape(i), f = i.length, h = y.computeStrides(i), g = y.getTypedArrayFromDType(n.dtype, d); a !== 0 && g.fill(a); for (let b = 0; b < c; b++) { - let w = x.indexToLoc(b, l, m).map((_, E) => _ + p[E]), k = x.locToIndex(w, d, h); + let w = y.indexToLoc(b, l, m).map((_, $) => _ + p[$]), k = y.locToIndex(w, f, h); g[k] = u[b]; } - return { dataId: t10.write(g, i, n.dtype), shape: i, dtype: n.dtype }; + return { dataId: t6.write(g, i, n.dtype), shape: i, dtype: n.dtype }; } -var Od = { kernelName: Ln, backendName: "cpu", kernelFunc: s5 }; -var a5 = Le((r, e) => Math.pow(r, e)); -var i5 = Ye(Bn, a5); -var J_ = { kernelName: Bn, backendName: "cpu", kernelFunc: i5 }; -function u5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((y) => t10.data.get(y.dataId).values), u = n.map((y) => y.shape), c = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values, [m, f, d] = Sd(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((y) => t10.makeTensorInfo([y.length], "int32", y)), g = t10.makeTensorInfo(d, s.dtype, f); +var kf = { kernelName: $n, backendName: "cpu", kernelFunc: TX }; +var _X = Be((r, e) => Math.pow(r, e)); +var EX = Qe(An, _X); +var __ = { kernelName: An, backendName: "cpu", kernelFunc: EX }; +function $X(r) { + let { inputs: e, backend: t6, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t6.data.get(x.dataId).values), u = n.map((x) => x.shape), c = t6.data.get(s.dataId).values, l = t6.data.get(a.dataId).values, [m, d, f] = df(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => t6.makeTensorInfo([x.length], "int32", x)), g = t6.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var eE = { kernelName: Tp, backendName: "cpu", kernelFunc: u5 }; -function p5(r) { - let { inputs: e, backend: t10 } = r, { starts: o, limits: n, deltas: s } = e, a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = vd(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([c.length], o.dtype, c); +var E_ = { kernelName: wp, backendName: "cpu", kernelFunc: $X }; +function AX(r) { + let { inputs: e, backend: t6 } = r, { starts: o, limits: n, deltas: s } = e, a = t6.data.get(o.dataId).values, i = t6.data.get(n.dataId).values, p = t6.data.get(s.dataId).values, [u, c] = ff(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t6.makeTensorInfo([u.length], "int32", u), m = t6.makeTensorInfo([c.length], o.dtype, c); return [l, m]; } -var tE = { kernelName: Np, backendName: "cpu", kernelFunc: p5 }; -function c5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values, m = i.map((g) => t10.data.get(g.dataId).values), f = i.map((g) => g.shape), [d, h] = kd(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, f, p); - return t10.makeTensorInfo(d, s.dtype, h); +var $_ = { kernelName: Ip, backendName: "cpu", kernelFunc: AX }; +function RX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t6.data.get(n.dataId).values, c = t6.data.get(s.dataId).values, l = t6.data.get(a.dataId).values, m = i.map((g) => t6.data.get(g.dataId).values), d = i.map((g) => g.shape), [f, h] = hf(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); + return t6.makeTensorInfo(f, s.dtype, h); } -var rE = { kernelName: _p, backendName: "cpu", kernelFunc: c5 }; -function l5(r) { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, dtype: s, step: a } = t10, i = Su(o, n, a, s); +var A_ = { kernelName: vp, backendName: "cpu", kernelFunc: RX }; +function FX(r) { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, dtype: s, step: a } = t6, i = Iu(o, n, a, s); return e.makeTensorInfo([i.length], s, i); } -var oE = { kernelName: ws, backendName: "cpu", kernelFunc: l5 }; -var m5 = we(ma, (r) => 1 / r); -var nE = { kernelName: ma, backendName: "cpu", kernelFunc: m5 }; -function f5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var R_ = { kernelName: ks, backendName: "cpu", kernelFunc: FX }; +var DX = Ie(Dn, (r) => 1 / r); +var F_ = { kernelName: Dn, backendName: "cpu", kernelFunc: DX }; +function OX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; K(n, "resizeBilinear"); - let p = x.computeStrides(n.shape), [u, c] = i, [l, m, f, d] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(x.sizeFromShape([l, u, c, d])), y = [s && u > 1 ? m - 1 : m, s && c > 1 ? f - 1 : f], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = 0, w = y[0] / b[0], k = y[1] / b[1]; + let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t6.data.get(n.dataId).values, g = new Float32Array(y.sizeFromShape([l, u, c, f])), x = [s && u > 1 ? m - 1 : m, s && c > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = 0, w = x[0] / b[0], k = x[1] / b[1]; for (let _ = 0; _ < l; _++) - for (let E = 0; E < u; E++) { - let R; - a ? R = w * (E + 0.5) - 0.5 : R = w * E; - let A = Math.max(0, Math.floor(R)), D = R - A, O = Math.min(m - 1, Math.ceil(R)), M = _ * p[0] + A * p[1], L = _ * p[0] + O * p[1]; + for (let $ = 0; $ < u; $++) { + let A; + a ? A = w * ($ + 0.5) - 0.5 : A = w * $; + let R = Math.max(0, Math.floor(A)), D = A - R, P = Math.min(m - 1, Math.ceil(A)), M = _ * p[0] + R * p[1], L = _ * p[0] + P * p[1]; for (let W = 0; W < c; W++) { let V; a ? V = k * (W + 0.5) - 0.5 : V = k * W; - let G = Math.max(0, Math.floor(V)), q = V - G, H = Math.min(f - 1, Math.ceil(V)), j = M + G * p[2], Y = L + G * p[2], Z = M + H * p[2], ee = L + H * p[2]; - for (let X = 0; X < d; X++) { - let Q = h[j + X], se = h[Y + X], ie = h[Z + X], de = h[ee + X], Ie = Q + (ie - Q) * q, Se = se + (de - se) * q, Ee = Ie + (Se - Ie) * D; - g[C++] = Ee; + let U = Math.max(0, Math.floor(V)), q = V - U, H = Math.min(d - 1, Math.ceil(V)), j = M + U * p[2], X = L + U * p[2], Z = M + H * p[2], ee = L + H * p[2]; + for (let Y = 0; Y < f; Y++) { + let J = h[j + Y], ie = h[X + Y], pe = h[Z + Y], he = h[ee + Y], we = J + (pe - J) * q, ve = ie + (he - ie) * q, $e = we + (ve - we) * D; + g[C++] = $e; } } } - return t10.makeTensorInfo([l, u, c, d], "float32", g); + return t6.makeTensorInfo([l, u, c, f], "float32", g); } -var sE = { kernelName: Un, backendName: "cpu", kernelFunc: f5 }; -function d5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o; +var D_ = { kernelName: Mn, backendName: "cpu", kernelFunc: OX }; +function PX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o; K([s, n], "resizeBilinearGrad"); - let i = x.computeStrides(n.shape), [p, u, c, l] = n.shape, [, m, f] = s.shape, d = new Float32Array(p * u * c * l), h = [a && m > 1 ? u - 1 : u, a && f > 1 ? c - 1 : c], g = [a && m > 1 ? m - 1 : m, a && f > 1 ? f - 1 : f], y = h[0] / g[0], b = h[1] / g[1], C = t10.data.get(s.dataId).values, w = 0; + let i = y.computeStrides(n.shape), [p, u, c, l] = n.shape, [, m, d] = s.shape, f = new Float32Array(p * u * c * l), h = [a && m > 1 ? u - 1 : u, a && d > 1 ? c - 1 : c], g = [a && m > 1 ? m - 1 : m, a && d > 1 ? d - 1 : d], x = h[0] / g[0], b = h[1] / g[1], C = t6.data.get(s.dataId).values, w = 0; for (let k = 0; k < p; k++) { let _ = k * i[0]; - for (let E = 0; E < m; E++) { - let R = E * y, A = Math.floor(R), D = Math.min(Math.ceil(R), u - 1), O = _ + A * i[1], M = _ + D * i[1], L = R - A, W = 1 - L; - for (let V = 0; V < f; V++) { - let G = V * b, q = Math.floor(G), H = Math.min(Math.ceil(G), c - 1), j = G - q, Y = 1 - j, Z = O + q * i[2], ee = O + H * i[2], X = M + q * i[2], Q = M + H * i[2], se = W * Y, ie = W * j, de = L * Y, Ie = L * j; - for (let Se = 0; Se < l; Se++) { - let Ee = C[w++]; - d[Z + Se] += Ee * se, d[ee + Se] += Ee * ie, d[X + Se] += Ee * de, d[Q + Se] += Ee * Ie; + for (let $ = 0; $ < m; $++) { + let A = $ * x, R = Math.floor(A), D = Math.min(Math.ceil(A), u - 1), P = _ + R * i[1], M = _ + D * i[1], L = A - R, W = 1 - L; + for (let V = 0; V < d; V++) { + let U = V * b, q = Math.floor(U), H = Math.min(Math.ceil(U), c - 1), j = U - q, X = 1 - j, Z = P + q * i[2], ee = P + H * i[2], Y = M + q * i[2], J = M + H * i[2], ie = W * X, pe = W * j, he = L * X, we = L * j; + for (let ve = 0; ve < l; ve++) { + let $e = C[w++]; + f[Z + ve] += $e * ie, f[ee + ve] += $e * pe, f[Y + ve] += $e * he, f[J + ve] += $e * we; } } } } - return t10.makeTensorInfo([p, c, u, l], "float32", d); + return t6.makeTensorInfo([p, c, u, l], "float32", f); } -var aE = { kernelName: Vm, backendName: "cpu", kernelFunc: d5 }; -function h5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var O_ = { kernelName: $m, backendName: "cpu", kernelFunc: PX }; +function MX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; K(n, "resizeNearestNeighbor"); - let p = x.computeStrides(n.shape), [u, c] = i, [l, m, f, d] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(l * u * c * d), y = [s && u > 1 ? m - 1 : m, s && c > 1 ? f - 1 : f], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = y[0] / b[0], w = y[1] / b[1], k = 0; + let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t6.data.get(n.dataId).values, g = new Float32Array(l * u * c * f), x = [s && u > 1 ? m - 1 : m, s && c > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = x[0] / b[0], w = x[1] / b[1], k = 0; for (let _ = 0; _ < l; _++) { - let E = _ * p[0]; - for (let R = 0; R < u; R++) { - let A = a ? C * (R + 0.5) : C * R, D = Math.min(m - 1, s ? Math.round(A) : Math.floor(A)); + let $ = _ * p[0]; + for (let A = 0; A < u; A++) { + let R = a ? C * (A + 0.5) : C * A, D = Math.min(m - 1, s ? Math.round(R) : Math.floor(R)); a && (D = Math.max(0, D)); - let O = E + D * p[1]; + let P = $ + D * p[1]; for (let M = 0; M < c; M++) { - let L = a ? w * (M + 0.5) : w * M, W = Math.min(f - 1, s ? Math.round(L) : Math.floor(L)); + let L = a ? w * (M + 0.5) : w * M, W = Math.min(d - 1, s ? Math.round(L) : Math.floor(L)); a && (W = Math.max(0, W)); - let V = O + W * p[2]; - for (let G = 0; G < d; G++) { - let q = h[V + G]; + let V = P + W * p[2]; + for (let U = 0; U < f; U++) { + let q = h[V + U]; g[k++] = q; } } } } - return t10.makeTensorInfo([l, u, c, d], n.dtype, g); + return t6.makeTensorInfo([l, u, c, f], n.dtype, g); } -var iE = { kernelName: Wn, backendName: "cpu", kernelFunc: h5 }; -function g5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o; +var P_ = { kernelName: Pn, backendName: "cpu", kernelFunc: MX }; +function LX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o; K([s, n], "resizeNearestNeighborGrad"); - let i = x.computeStrides(n.shape), p = x.computeStrides(s.shape), [u, c, l, m] = n.shape, [, f, d] = s.shape, h = new Float32Array(u * c * l * m), g = t10.data.get(s.dataId).values, y = [a && f > 1 ? c - 1 : c, a && d > 1 ? l - 1 : l], b = [a && f > 1 ? f - 1 : f, a && d > 1 ? d - 1 : d], C = y[0] / b[0], w = y[1] / b[1], k = 1 / C, _ = 1 / w, E = Math.ceil(k) * 2 + 2, R = Math.ceil(_) * 2 + 2; - for (let A = 0; A < u; A++) { - let D = A * i[0]; - for (let O = 0; O < c; O++) { - let M = D + O * i[1], L = Math.floor(O * k), W = Math.floor(L - E / 2); + let i = y.computeStrides(n.shape), p = y.computeStrides(s.shape), [u, c, l, m] = n.shape, [, d, f] = s.shape, h = new Float32Array(u * c * l * m), g = t6.data.get(s.dataId).values, x = [a && d > 1 ? c - 1 : c, a && f > 1 ? l - 1 : l], b = [a && d > 1 ? d - 1 : d, a && f > 1 ? f - 1 : f], C = x[0] / b[0], w = x[1] / b[1], k = 1 / C, _ = 1 / w, $ = Math.ceil(k) * 2 + 2, A = Math.ceil(_) * 2 + 2; + for (let R = 0; R < u; R++) { + let D = R * i[0]; + for (let P = 0; P < c; P++) { + let M = D + P * i[1], L = Math.floor(P * k), W = Math.floor(L - $ / 2); for (let V = 0; V < l; V++) { - let G = M + V * i[2], q = Math.floor(V * _), H = Math.floor(q - R / 2); + let U = M + V * i[2], q = Math.floor(V * _), H = Math.floor(q - A / 2); for (let j = 0; j < m; j++) { - let Y = 0; - for (let Z = 0; Z < E; Z++) { + let X = 0; + for (let Z = 0; Z < $; Z++) { let ee = Z + W; - if (ee < 0 || ee >= f) + if (ee < 0 || ee >= d) continue; - let X = D + ee * p[1], Q = ee * C, se = Math.min(c - 1, a ? Math.round(Q) : Math.floor(Q)); - if (O === se) - for (let ie = 0; ie < R; ie++) { - let de = ie + H; - if (de < 0 || de >= d) + let Y = D + ee * p[1], J = ee * C, ie = Math.min(c - 1, a ? Math.round(J) : Math.floor(J)); + if (P === ie) + for (let pe = 0; pe < A; pe++) { + let he = pe + H; + if (he < 0 || he >= f) continue; - let Ie = X + de * p[2], Se = de * w, Ee = Math.min(l - 1, a ? Math.round(Se) : Math.floor(Se)); - V === Ee && (Y += g[Ie + j]); + let we = Y + he * p[2], ve = he * w, $e = Math.min(l - 1, a ? Math.round(ve) : Math.floor(ve)); + V === $e && (X += g[we + j]); } } - h[G + j] = Y; + h[U + j] = X; } } } } - return t10.makeTensorInfo(n.shape, n.dtype, h); + return t6.makeTensorInfo(n.shape, n.dtype, h); } -var uE = { kernelName: Bm, backendName: "cpu", kernelFunc: g5 }; -function x5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dims: s } = o; +var M_ = { kernelName: Em, backendName: "cpu", kernelFunc: LX }; +function BX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dims: s } = o; K(n, "reverse"); - let a = n.shape.length, i = x.parseAxisParam(s, n.shape); + let a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return ar({ inputs: { x: n }, backend: t10 }); - let p = new je(n.shape, n.dtype), u = t10.bufferSync(n); + return ar({ inputs: { x: n }, backend: t6 }); + let p = new st(n.shape, n.dtype), u = t6.bufferSync(n); for (let c = 0; c < p.size; c++) { let l = p.indexToLoc(c), m = l.slice(); - i.forEach((f) => m[f] = n.shape[f] - 1 - m[f]), p.set(u.get(...m), ...l); + i.forEach((d) => m[d] = n.shape[d] - 1 - m[d]), p.set(u.get(...m), ...l); } - return t10.makeTensorInfo(p.shape, p.dtype, p.values); + return t6.makeTensorInfo(p.shape, p.dtype, p.values); } -var pE = { kernelName: fa, backendName: "cpu", kernelFunc: x5 }; -var cE = { kernelName: es, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t10, p = x.getTypedArrayFromDType(o.dtype, x.sizeFromShape(o.shape)), [u, c, l, m] = o.shape, [f, d] = I.getImageCenter(a, c, l), h = 255, g = Math.sin(n), y = Math.cos(n), b = i.data.get(o.dataId).values; +var L_ = { kernelName: Bn, backendName: "cpu", kernelFunc: BX }; +var B_ = { kernelName: es, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t6, p = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [u, c, l, m] = o.shape, [d, f] = S.getImageCenter(a, c, l), h = 255, g = Math.sin(n), x = Math.cos(n), b = i.data.get(o.dataId).values; for (let w = 0; w < u; w++) { let k = w * l * c * m; for (let _ = 0; _ < c; _++) { - let E = _ * (l * m); - for (let R = 0; R < l; R++) { - let A = R * m; + let $ = _ * (l * m); + for (let A = 0; A < l; A++) { + let R = A * m; for (let D = 0; D < m; D++) { - let O = [u, _, R, D], M = O[2], L = O[1], W = (M - f) * y - (L - d) * g, V = (M - f) * g + (L - d) * y; - W = Math.round(W + f), V = Math.round(V + d); - let G = s; - if (typeof s != "number" && (D === 3 ? G = h : G = s[D]), W >= 0 && W < l && V >= 0 && V < c) { - let H = V * (l * m), j = W * m, Y = k + H + j + D; - G = b[Y]; + let P = [u, _, A, D], M = P[2], L = P[1], W = (M - d) * x - (L - f) * g, V = (M - d) * g + (L - f) * x; + W = Math.round(W + d), V = Math.round(V + f); + let U = s; + if (typeof s != "number" && (D === 3 ? U = h : U = s[D]), W >= 0 && W < l && V >= 0 && V < c) { + let H = V * (l * m), j = W * m, X = k + H + j + D; + U = b[X]; } - let q = k + E + A + D; - p[q] = G; + let q = k + $ + R + D; + p[q] = U; } } } } return { dataId: i.write(p, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -var y5 = we(da, (r) => { +var VX = Ie(Ca, (r) => { let e = Math.floor(r); return r - e < 0.5 ? Math.floor(r) : r - e > 0.5 ? Math.ceil(r) : e % 2 === 0 ? e : e + 1; }); -var lE = { kernelName: da, backendName: "cpu", kernelFunc: y5 }; -function b5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = I.calculateShapes(s, n, a), m = true, f = t10.bufferSync(n), d = t10.bufferSync(s), h = Aa(f, d, a, l, u, p, i, c, 0, m); - return t10.makeTensorInfo(a, h.dtype, h.values); +var V_ = { kernelName: Ca, backendName: "cpu", kernelFunc: VX }; +function zX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = S.calculateShapes(s, n, a), m = true, d = t6.bufferSync(n), f = t6.bufferSync(s), h = Ma(d, f, a, l, u, p, i, c, 0, m); + return t6.makeTensorInfo(a, h.dtype, h.values); } -var mE = { kernelName: Hn, backendName: "cpu", kernelFunc: b5 }; -function C5(r, e) { - let t10 = 0, o = r.length, n = 0; - for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r[n] < e ? t10 = n + 1 : o = n; +var z_ = { kernelName: zn, backendName: "cpu", kernelFunc: zX }; +function WX(r, e) { + let t6 = 0, o = r.length, n = 0; + for (; t6 < o; ) + n = Math.floor((t6 + o) / 2), r[n] < e ? t6 = n + 1 : o = n; return o; } -function I5(r, e) { - let t10 = 0, o = r.length, n = 0; - for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r[n] <= e ? t10 = n + 1 : o = n; +function UX(r, e) { + let t6 = 0, o = r.length, n = 0; + for (; t6 < o; ) + n = Math.floor((t6 + o) / 2), r[n] <= e ? t6 = n + 1 : o = n; return o; } -function fE(r, e, t10, o, n, s) { - let a = x.getArrayFromDType("int32", t10 * n); - for (let i = 0; i < t10; ++i) { +function W_(r, e, t6, o, n, s) { + let a = y.getArrayFromDType("int32", t6 * n); + for (let i = 0; i < t6; ++i) { let p = r.slice(i * o, (i + 1) * o), u = i * n; for (let c = 0; c < n; ++c) - a[u + c] = s === "left" ? C5(p, e[c + u]) : I5(p, e[c + u]); + a[u + c] = s === "left" ? WX(p, e[c + u]) : UX(p, e[c + u]); } return a; } -function w5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { sortedSequence: n, values: s } = e, { side: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = fE(i, p, n.shape[0], n.shape[1], s.shape[1], a); - return t10.makeTensorInfo(s.shape, "int32", u); +function GX(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sortedSequence: n, values: s } = e, { side: a } = o, i = t6.data.get(n.dataId).values, p = t6.data.get(s.dataId).values, u = W_(i, p, n.shape[0], n.shape[1], s.shape[1], a); + return t6.makeTensorInfo(s.shape, "int32", u); } -var dE = { kernelName: Ep, backendName: "cpu", kernelFunc: w5 }; -function S5(r) { - let { inputs: e, backend: t10 } = r, { condition: o, t: n, e: s } = e; +var U_ = { kernelName: ii, backendName: "cpu", kernelFunc: GX }; +function HX(r) { + let { inputs: e, backend: t6 } = r, { condition: o, t: n, e: s } = e; K([o, n, s], "select"); - let a = o.shape.length, i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = ct(n.dtype, s.dtype), l = x.makeZerosTypedArray(x.sizeFromShape(n.shape), c), m = 0, f = a === 0 || a > 1 || n.shape.length === 1 ? 1 : x.sizeFromShape(n.shape.slice(1)); - for (let d = 0; d < i.length; d++) - for (let h = 0; h < f; h++) - i[d] === 1 ? l[m++] = p[d] : l[m++] = u[d]; - return t10.makeTensorInfo(n.shape, c, l); + let a = o.shape.length, i = t6.data.get(o.dataId).values, p = t6.data.get(n.dataId).values, u = t6.data.get(s.dataId).values, c = dt(n.dtype, s.dtype), l = y.makeZerosTypedArray(y.sizeFromShape(n.shape), c), m = 0, d = a === 0 || a > 1 || n.shape.length === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); + for (let f = 0; f < i.length; f++) + for (let h = 0; h < d; h++) + i[f] === 1 ? l[m++] = p[f] : l[m++] = u[f]; + return t6.makeTensorInfo(n.shape, c, l); } -var hE = { kernelName: vs, backendName: "cpu", kernelFunc: S5 }; -var v5 = I.SELU_SCALEALPHA; -var k5 = I.SELU_SCALE; -var T5 = we(Xi, (r) => r >= 0 ? k5 * r : v5 * (Math.exp(r) - 1)); -var gE = { kernelName: Xi, backendName: "cpu", kernelFunc: T5 }; -var N5 = we(Yi, (r) => r < 0 ? -1 : r > 0 ? 1 : 0); -var xE = { kernelName: Yi, backendName: "cpu", kernelFunc: N5 }; -var _5 = we(Kn, (r) => Math.sin(r)); -var yE = { kernelName: Kn, backendName: "cpu", kernelFunc: _5 }; -var E5 = we(ha, (r) => Math.sinh(r)); -var bE = { kernelName: ha, backendName: "cpu", kernelFunc: E5 }; -var $5 = 11920928955078125e-23; -var CE = Math.log($5) + 2; -var R5 = we(Qi, (r) => { - let e = r > -CE, t10 = r < CE, o = Math.exp(r), n; - return t10 ? n = o : e ? n = r : n = Math.log(1 + o), n; +var G_ = { kernelName: Ts, backendName: "cpu", kernelFunc: HX }; +var qX = S.SELU_SCALEALPHA; +var KX = S.SELU_SCALE; +var jX = Ie(Xi, (r) => r >= 0 ? KX * r : qX * (Math.exp(r) - 1)); +var H_ = { kernelName: Xi, backendName: "cpu", kernelFunc: jX }; +var XX = Ie(Yi, (r) => r < 0 ? -1 : r > 0 ? 1 : 0); +var q_ = { kernelName: Yi, backendName: "cpu", kernelFunc: XX }; +var YX = Ie(Wn, (r) => Math.sin(r)); +var K_ = { kernelName: Wn, backendName: "cpu", kernelFunc: YX }; +var QX = Ie(Sa, (r) => Math.sinh(r)); +var j_ = { kernelName: Sa, backendName: "cpu", kernelFunc: QX }; +var ZX = 11920928955078125e-23; +var X_ = Math.log(ZX) + 2; +var JX = Ie(Qi, (r) => { + let e = r > -X_, t6 = r < X_, o = Math.exp(r), n; + return t6 ? n = o : e ? n = r : n = Math.log(1 + o), n; }); -var IE = { kernelName: Qi, backendName: "cpu", kernelFunc: R5 }; -function A5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; +var Y_ = { kernelName: Qi, backendName: "cpu", kernelFunc: JX }; +function e5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; K([n], "spaceToBatchND"); - let i = x.sizeFromShape(s), p = [[0, 0]]; + let i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); - let u = Od.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = I.getReshaped(u.shape, s, i, false), l = I.getPermuted(c.length, s.length, false), m = I.getReshapedPermuted(u.shape, s, i, false), h = Oe({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = bt({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = Oe({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(b), k; + let u = kf.kernelFunc({ inputs: { x: n }, backend: t6, attrs: { paddings: p, constantValue: 0 } }), c = S.getReshaped(u.shape, s, i, false), l = S.getPermuted(c.length, s.length, false), m = S.getReshapedPermuted(u.shape, s, i, false), h = Me({ inputs: { x: u }, backend: t6, attrs: { shape: c } }), b = Ct({ inputs: { x: h }, backend: t6, attrs: { perm: l } }), k = Me({ inputs: { x: b }, backend: t6, attrs: { shape: m } }); + return t6.disposeIntermediateTensorInfo(u), t6.disposeIntermediateTensorInfo(h), t6.disposeIntermediateTensorInfo(b), k; } -var wE = { kernelName: ks, backendName: "cpu", kernelFunc: A5 }; -function F5(r) { - let { inputs: e, backend: t10 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = e; +var Q_ = { kernelName: Es, backendName: "cpu", kernelFunc: e5 }; +function t5(r) { + let { inputs: e, backend: t6 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = e; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -14505,12 +14551,12 @@ function F5(r) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = t10.data.get(a.dataId).values[0], [l, m, f, d, h] = Td(i, o.shape, o.dtype, p, n.dtype, u, c); - return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, f), t10.makeTensorInfo([d.length], "bool", new Uint8Array(d.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; + let i = t6.data.get(o.dataId).values, p = t6.data.get(n.dataId).values, u = t6.data.get(s.dataId).values, c = t6.data.get(a.dataId).values[0], [l, m, d, f, h] = gf(i, o.shape, o.dtype, p, n.dtype, u, c); + return [t6.makeTensorInfo(m, o.dtype, l), t6.makeTensorInfo([m[0]], n.dtype, d), t6.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t6.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var SE = { kernelName: Qa, backendName: "cpu", kernelFunc: F5 }; -function D5(r) { - let { inputs: e, backend: t10 } = r, { inputIndices: o, inputShape: n, newShape: s } = e; +var Z_ = { kernelName: ui, backendName: "cpu", kernelFunc: t5 }; +function r5(r) { + let { inputs: e, backend: t6 } = r, { inputIndices: o, inputShape: n, newShape: s } = e; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); @@ -14519,12 +14565,12 @@ function D5(r) { ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = Array.from(t10.data.get(n.dataId).values), i = t10.data.get(o.dataId).values, p = Array.from(t10.data.get(s.dataId).values), [u, c, l] = Nd(i, o.shape, o.dtype, a, p); - return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; + let a = Array.from(t6.data.get(n.dataId).values), i = t6.data.get(o.dataId).values, p = Array.from(t6.data.get(s.dataId).values), [u, c, l] = xf(i, o.shape, o.dtype, a, p); + return [t6.makeTensorInfo(c, o.dtype, u), t6.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var vE = { kernelName: ga, backendName: "cpu", kernelFunc: D5 }; -function P5(r) { - let { inputs: e, backend: t10 } = r, { data: o, indices: n, segmentIds: s } = e; +var J_ = { kernelName: wa, backendName: "cpu", kernelFunc: r5 }; +function o5(r) { + let { inputs: e, backend: t6 } = r, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -14535,12 +14581,12 @@ function P5(r) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = tc(a, o.shape, o.dtype, i, p, true); - return t10.makeTensorInfo(c, o.dtype, u); + let a = t6.data.get(o.dataId).values, i = t6.data.get(n.dataId).values, p = t6.data.get(s.dataId).values, [u, c] = Yp(a, o.shape, o.dtype, i, p, true); + return t6.makeTensorInfo(c, o.dtype, u); } -var kE = { kernelName: Za, backendName: "cpu", kernelFunc: P5 }; -function O5(r) { - let { inputs: e, backend: t10 } = r, { data: o, indices: n, segmentIds: s } = e; +var eE = { kernelName: pi, backendName: "cpu", kernelFunc: o5 }; +function n5(r) { + let { inputs: e, backend: t6 } = r, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -14551,348 +14597,348 @@ function O5(r) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = tc(a, o.shape, o.dtype, i, p); - return t10.makeTensorInfo(c, o.dtype, u); + let a = t6.data.get(o.dataId).values, i = t6.data.get(n.dataId).values, p = t6.data.get(s.dataId).values, [u, c] = Yp(a, o.shape, o.dtype, i, p); + return t6.makeTensorInfo(c, o.dtype, u); } -var TE = { kernelName: Ja, backendName: "cpu", kernelFunc: O5 }; -function M5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = I.calculateShapes(s, n, i), f = false, d = t10.bufferSync(n), h; +var tE = { kernelName: ci, backendName: "cpu", kernelFunc: n5 }; +function s5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = S.calculateShapes(s, n, i), d = false, f = t6.bufferSync(n), h; switch (s.dtype) { case "bool": { - let g = t10.bufferSync(s), y = Boolean(t10.data.get(a.dataId).values[0]); - h = Aa(d, g, i, m, c, u, p, l, y, f); + let g = t6.bufferSync(s), x = Boolean(t6.data.get(a.dataId).values[0]); + h = Ma(f, g, i, m, c, u, p, l, x, d); break; } case "float32": { - let g = t10.bufferSync(s), y = t10.data.get(a.dataId).values[0]; - h = Aa(d, g, i, m, c, u, p, l, y, f); + let g = t6.bufferSync(s), x = t6.data.get(a.dataId).values[0]; + h = Ma(f, g, i, m, c, u, p, l, x, d); break; } case "int32": { - let g = t10.bufferSync(s), y = t10.data.get(a.dataId).values[0]; - h = Aa(d, g, i, m, c, u, p, l, y, f); + let g = t6.bufferSync(s), x = t6.data.get(a.dataId).values[0]; + h = Ma(f, g, i, m, c, u, p, l, x, d); break; } case "string": { - let g = t10.bufferSync(s), y = x.decodeString(t10.data.get(a.dataId).values[0]); - h = Aa(d, g, i, m, c, u, p, l, y, f); + let g = t6.bufferSync(s), x = y.decodeString(t6.data.get(a.dataId).values[0]); + h = Ma(f, g, i, m, c, u, p, l, x, d); break; } default: throw new Error(`Unsupported type ${s.dtype}`); } - return t10.makeTensorInfo(i, h.dtype, h.values); + return t6.makeTensorInfo(i, h.dtype, h.values); } -var NE = { kernelName: ei, backendName: "cpu", kernelFunc: M5 }; -function L5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = x.parseAxisParam(a, n.shape)[0], p = I.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); +var rE = { kernelName: li, backendName: "cpu", kernelFunc: s5 }; +function a5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = S.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); return p.map((l) => { let m = [...c]; m[i] = l; - let f = qo({ inputs: { x: n }, backend: t10, attrs: { begin: u, size: m } }); - return u[i] += l, f; + let d = No({ inputs: { x: n }, backend: t6, attrs: { begin: u, size: m } }); + return u[i] += l, d; }); } -var _E = { kernelName: Ts, backendName: "cpu", kernelFunc: L5 }; -var EE = { kernelName: ti, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e }) => { - let { x: t10 } = r, o = e; - K(t10, "square"); - let n = o.data.get(t10.dataId).values, s = new Float32Array(n.length); +var oE = { kernelName: $s, backendName: "cpu", kernelFunc: a5 }; +var nE = { kernelName: mi, backendName: "cpu", kernelFunc: ({ inputs: r, backend: e }) => { + let { x: t6 } = r, o = e; + K(t6, "square"); + let n = o.data.get(t6.dataId).values, s = new Float32Array(n.length); for (let i = 0; i < n.length; ++i) { let p = n[i]; s[i] = p * p; } - return { dataId: o.write(s, t10.shape, t10.dtype), shape: t10.shape, dtype: t10.dtype }; + return { dataId: o.write(s, t6.shape, t6.dtype), shape: t6.shape, dtype: t6.dtype }; } }; -var B5 = we($s, (r, e) => { - let t10 = e; - return isNaN(r) ? NaN : r > 0 ? 1 : t10.alpha; +var i5 = Ie(Ds, (r, e) => { + let t6 = e; + return isNaN(r) ? NaN : r > 0 ? 1 : t6.alpha; }); -var $E = { kernelName: $s, backendName: "cpu", kernelFunc: B5 }; -function V5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o; +var sE = { kernelName: Ds, backendName: "cpu", kernelFunc: i5 }; +function u5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o; K(n, "stridedSlice"); - let { finalShapeSparse: f, finalShape: d, isIdentity: h, sliceDim0: g, isSimpleSlice: y, begin: b, end: C, strides: w } = et.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; + let { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: w } = ut.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = Oe({ inputs: { x: n }, backend: t10, attrs: { shape: d } }); - else if (g || y) { - x.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let _ = et.computeOutShape(b, C, w), E = qo({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); - k = Oe({ inputs: { x: E }, backend: t10, attrs: { shape: d } }), t10.disposeIntermediateTensorInfo(E); + k = Me({ inputs: { x: n }, backend: t6, attrs: { shape: f } }); + else if (g || x) { + y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); + let _ = ut.computeOutShape(b, C, w), $ = No({ inputs: { x: n }, backend: t6, attrs: { begin: b, size: _ } }); + k = Me({ inputs: { x: $ }, backend: t6, attrs: { shape: f } }), t6.disposeIntermediateTensorInfo($); } else { - let _ = t10.bufferSync(n), E = _d(f, _, w, b); - k = t10.makeTensorInfo(d, E.dtype, E.values); + let _ = t6.bufferSync(n), $ = yf(d, _, w, b); + k = t6.makeTensorInfo(f, $.dtype, $.values); } return k; } -var RE = { kernelName: Yn, backendName: "cpu", kernelFunc: V5 }; -function z5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.data.get(c.dataId).values, f = t10.data.get(l.dataId).values, [d, h] = ku(m, f, n, s, a, i, p, u); - return [t10.makeTensorInfo([d.length], "string", d), t10.makeTensorInfo(l.shape, "int32", h)]; +var aE = { kernelName: jn, backendName: "cpu", kernelFunc: u5 }; +function p5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t6.data.get(c.dataId).values, d = t6.data.get(l.dataId).values, [f, h] = ku(m, d, n, s, a, i, p, u); + return [t6.makeTensorInfo([f.length], "string", f), t6.makeTensorInfo(l.shape, "int32", h)]; } -var AE = { kernelName: Ns, backendName: "cpu", kernelFunc: z5 }; -function W5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = e; +var iE = { kernelName: As, backendName: "cpu", kernelFunc: p5 }; +function c5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (s.shape.length !== 1) throw new Error(`Input must be a vector, got shape: ${s.shape}`); if (a.shape.length !== 0) throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`); - let i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values[0], [u, c, l] = Tu(i, p, n), m = c.length; - return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", c), t10.makeTensorInfo([2], "int32", new Int32Array(l))]; + let i = t6.data.get(s.dataId).values, p = t6.data.get(a.dataId).values[0], [u, c, l] = Nu(i, p, n), m = c.length; + return [t6.makeTensorInfo([m, 2], "int32", u), t6.makeTensorInfo([m], "string", c), t6.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var FE = { kernelName: ri, backendName: "cpu", kernelFunc: W5 }; -function U5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { numBuckets: n } = o, { input: s } = e; +var uE = { kernelName: di, backendName: "cpu", kernelFunc: c5 }; +function l5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { numBuckets: n } = o, { input: s } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (n <= 0) throw new Error("Number of buckets must be at least 1"); - let a = t10.data.get(s.dataId).values, i = Nu(a, n); - return t10.makeTensorInfo(s.shape, "int32", i); + let a = t6.data.get(s.dataId).values, i = Tu(a, n); + return t6.makeTensorInfo(s.shape, "int32", i); } -var DE = { kernelName: oi, backendName: "cpu", kernelFunc: U5 }; -var G5 = we(xa, (r) => Math.tan(r)); -var PE = { kernelName: xa, backendName: "cpu", kernelFunc: G5 }; -var H5 = we(Qn, (r) => Math.tanh(r)); -var OE = { kernelName: Qn, backendName: "cpu", kernelFunc: H5 }; -function q5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reps: s } = o; +var pE = { kernelName: fi, backendName: "cpu", kernelFunc: l5 }; +var m5 = Ie(Yn, (r) => Math.tan(r)); +var cE = { kernelName: Yn, backendName: "cpu", kernelFunc: m5 }; +var d5 = Ie(Qn, (r) => Math.tanh(r)); +var lE = { kernelName: Qn, backendName: "cpu", kernelFunc: d5 }; +function f5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reps: s } = o; K(n, "tile"); - let a = Ed(t10.bufferSync(n), s); - return t10.makeTensorInfo(a.shape, a.dtype, a.values); + let a = bf(t6.bufferSync(n), s); + return t6.makeTensorInfo(a.shape, a.dtype, a.values); } -var ME = { kernelName: wo, backendName: "cpu", kernelFunc: q5 }; -function K5(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o; +var mE = { kernelName: to, backendName: "cpu", kernelFunc: f5 }; +function h5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o; K(n, "topk"); - let i = t10.data.get(n.dataId).values, [p, u] = $d(i, n.shape, n.dtype, s, a); - return [t10.makeTensorInfo(p.shape, p.dtype, p.values), t10.makeTensorInfo(u.shape, u.dtype, u.values)]; + let i = t6.data.get(n.dataId).values, [p, u] = Cf(i, n.shape, n.dtype, s, a); + return [t6.makeTensorInfo(p.shape, p.dtype, p.values), t6.makeTensorInfo(u.shape, u.dtype, u.values)]; } -var LE = { kernelName: Zn, backendName: "cpu", kernelFunc: K5 }; -function j5(r) { - let { inputs: e, attrs: t10, backend: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = t10, [c, l, m, f] = n.shape, [d, h] = u != null ? u : [l, m], g = [c, d, h, f], y = x.computeStrides(n.shape), b = y[0], C = y[1], w = y[2], k = x.computeStrides(g), _ = k[0], E = k[1], R = k[2], A = x.getTypedArrayFromDType(n.dtype, x.sizeFromShape(g)); - A.fill(p); - let D = o.data.get(n.dataId).values, O = o.data.get(s.dataId).values; +var dE = { kernelName: Zn, backendName: "cpu", kernelFunc: h5 }; +function g5(r) { + let { inputs: e, attrs: t6, backend: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = t6, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = y.computeStrides(n.shape), b = x[0], C = x[1], w = x[2], k = y.computeStrides(g), _ = k[0], $ = k[1], A = k[2], R = y.getTypedArrayFromDType(n.dtype, y.sizeFromShape(g)); + R.fill(p); + let D = o.data.get(n.dataId).values, P = o.data.get(s.dataId).values; for (let L = 0; L < c; ++L) { - let W = s.shape[0] === 1 ? O : O.subarray(L * 8, L * 8 + 8); - for (let V = 0; V < d; ++V) - for (let G = 0; G < h; ++G) - for (let q = 0; q < f; ++q) { - let H, j = W[6] * G + W[7] * V + 1; + let W = s.shape[0] === 1 ? P : P.subarray(L * 8, L * 8 + 8); + for (let V = 0; V < f; ++V) + for (let U = 0; U < h; ++U) + for (let q = 0; q < d; ++q) { + let H, j = W[6] * U + W[7] * V + 1; if (j === 0) continue; - let Y = (W[0] * G + W[1] * V + W[2]) / j, Z = (W[3] * G + W[4] * V + W[5]) / j, ee = BE(Y, m, i), X = BE(Z, l, i); + let X = (W[0] * U + W[1] * V + W[2]) / j, Z = (W[3] * U + W[4] * V + W[5]) / j, ee = fE(X, m, i), Y = fE(Z, l, i); switch (a) { case "nearest": - H = J5(D, l, m, b, C, w, L, X, ee, q, p); + H = S5(D, l, m, b, C, w, L, Y, ee, q, p); break; case "bilinear": - H = e8(D, l, m, b, C, w, L, X, ee, q, p); + H = w5(D, l, m, b, C, w, L, Y, ee, q, p); break; default: throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${a}`); } - let Q = L * _ + V * E + G * R + q; - A[Q] = H; + let J = L * _ + V * $ + U * A + q; + R[J] = H; } - return o.makeTensorInfo(g, n.dtype, A); + return o.makeTensorInfo(g, n.dtype, R); } - return { dataId: o.write(A, g, n.dtype), shape: n.shape, dtype: n.dtype }; + return { dataId: o.write(R, g, n.dtype), shape: n.shape, dtype: n.dtype }; } -var VE = { kernelName: Jn, backendName: "cpu", kernelFunc: j5 }; -function BE(r, e, t10) { - switch (t10) { +var hE = { kernelName: Jn, backendName: "cpu", kernelFunc: g5 }; +function fE(r, e, t6) { + switch (t6) { case "reflect": - return X5(r, e); + return x5(r, e); case "wrap": - return Y5(r, e); + return y5(r, e); case "nearest": - return Z5(r, e); + return C5(r, e); case "constant": default: - return Q5(r, e); + return b5(r, e); } } -function X5(r, e) { - let t10 = r; - if (t10 < 0) +function x5(r, e) { + let t6 = r; + if (t6 < 0) if (e <= 1) - t10 = 0; + t6 = 0; else { let o = 2 * e; - t10 < o && (t10 = o * Math.trunc(-t10 / o) + t10), t10 = t10 < -e ? t10 + o : -t10 - 1; + t6 < o && (t6 = o * Math.trunc(-t6 / o) + t6), t6 = t6 < -e ? t6 + o : -t6 - 1; } - else if (t10 > e - 1) + else if (t6 > e - 1) if (e <= 1) - t10 = 0; + t6 = 0; else { let o = 2 * e; - t10 -= o * Math.trunc(t10 / o), t10 >= e && (t10 = o - t10 - 1); + t6 -= o * Math.trunc(t6 / o), t6 >= e && (t6 = o - t6 - 1); } - return x.clamp(0, t10, e - 1); + return y.clamp(0, t6, e - 1); } -function Y5(r, e) { - let t10 = r; - if (t10 < 0) +function y5(r, e) { + let t6 = r; + if (t6 < 0) if (e <= 1) - t10 = 0; + t6 = 0; else { let o = e - 1; - t10 += e * (Math.trunc(-t10 / o) + 1); + t6 += e * (Math.trunc(-t6 / o) + 1); } - else if (t10 > e - 1) + else if (t6 > e - 1) if (e <= 1) - t10 = 0; + t6 = 0; else { let o = e - 1; - t10 -= e * Math.trunc(t10 / o); + t6 -= e * Math.trunc(t6 / o); } - return x.clamp(0, t10, e - 1); + return y.clamp(0, t6, e - 1); } -function Q5(r, e) { +function b5(r, e) { return r; } -function Z5(r, e) { - return x.clamp(0, r, e - 1); +function C5(r, e) { + return y.clamp(0, r, e - 1); } -function Nl(r, e, t10, o, n, s, a, i, p, u, c) { +function bl(r, e, t6, o, n, s, a, i, p, u, c) { let l = a * o + i * n + p * s + u; - return 0 <= i && i < e && 0 <= p && p < t10 ? r[l] : c; + return 0 <= i && i < e && 0 <= p && p < t6 ? r[l] : c; } -function J5(r, e, t10, o, n, s, a, i, p, u, c) { +function S5(r, e, t6, o, n, s, a, i, p, u, c) { let l = Math.round(i), m = Math.round(p); - return Nl(r, e, t10, o, n, s, a, l, m, u, c); + return bl(r, e, t6, o, n, s, a, l, m, u, c); } -function e8(r, e, t10, o, n, s, a, i, p, u, c) { - let l = Math.floor(i), m = Math.floor(p), f = l + 1, d = m + 1, h = (d - p) * Nl(r, e, t10, o, n, s, a, l, m, u, c) + (p - m) * Nl(r, e, t10, o, n, s, a, l, d, u, c), g = (d - p) * Nl(r, e, t10, o, n, s, a, f, m, u, c) + (p - m) * Nl(r, e, t10, o, n, s, a, f, d, u, c); - return (f - i) * h + (i - l) * g; +function w5(r, e, t6, o, n, s, a, i, p, u, c) { + let l = Math.floor(i), m = Math.floor(p), d = l + 1, f = m + 1, h = (f - p) * bl(r, e, t6, o, n, s, a, l, m, u, c) + (p - m) * bl(r, e, t6, o, n, s, a, l, f, u, c), g = (f - p) * bl(r, e, t6, o, n, s, a, d, m, u, c) + (p - m) * bl(r, e, t6, o, n, s, a, d, f, u, c); + return (d - i) * h + (i - l) * g; } -function t8(r) { - let { inputs: e, attrs: t10, backend: o } = r, { axis: n } = t10, { x: s } = e; +function I5(r) { + let { inputs: e, attrs: t6, backend: o } = r, { axis: n } = t6, { x: s } = e; K(s, "unique"); - let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = Rd(a, n, s.shape, s.dtype); + let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = Sf(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var zE = { kernelName: $p, backendName: "cpu", kernelFunc: t8 }; -function r8(r) { - let { inputs: e, backend: t10, attrs: o } = r, { value: n } = e, { axis: s } = o; +var gE = { kernelName: kp, backendName: "cpu", kernelFunc: I5 }; +function v5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n.shape.length, i = n.shape[s], p = new Array(a - 1), u = 0; - for (let f = 0; f < a; f++) - f !== s && (p[u++] = n.shape[f]); + for (let d = 0; d < a; d++) + d !== s && (p[u++] = n.shape[d]); let c = new Array(a).fill(0), l = n.shape.slice(); l[s] = 1; let m = new Array(i); - for (let f = 0; f < m.length; f++) { - c[s] = f; - let d = qo({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: l } }); - m[f] = Oe({ inputs: { x: d }, backend: t10, attrs: { shape: p } }), t10.disposeIntermediateTensorInfo(d); + for (let d = 0; d < m.length; d++) { + c[s] = d; + let f = No({ inputs: { x: n }, backend: t6, attrs: { begin: c, size: l } }); + m[d] = Me({ inputs: { x: f }, backend: t6, attrs: { shape: p } }), t6.disposeIntermediateTensorInfo(f); } return m; } -var WE = { kernelName: _s, backendName: "cpu", kernelFunc: r8 }; -function o8(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, segmentIds: s } = e, { numSegments: a } = o; +var xE = { kernelName: Rs, backendName: "cpu", kernelFunc: v5 }; +function k5(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, segmentIds: s } = e, { numSegments: a } = o; K(n, "unsortedSegmentSum"); let i = n.shape.length, p = s.shape.length, u = [], c = [], l = i - p, m = s; - for (let d = 0; d < l; ++d) { - let h = oc({ inputs: { input: m }, backend: t10, attrs: { dim: d + 1 } }); + for (let f = 0; f < l; ++f) { + let h = Jp({ inputs: { input: m }, backend: t6, attrs: { dim: f + 1 } }); m = h, c.push(h); } - for (let d = 0; d < a; ++d) { - let h = x.createScalarValue(d, "int32"), g = t10.makeTensorInfo([], "int32", h), y = sI({ inputs: { a: g, b: m }, backend: t10 }), b = Uo({ inputs: { x: y }, backend: t10, attrs: { dtype: "float32" } }), C = wu({ inputs: { a: b, b: n }, backend: t10 }), w = Fa({ inputs: { x: C }, backend: t10, attrs: { axis: 0, keepDims: false } }); - u.push(w), c.push(g), c.push(y), c.push(b), c.push(C), c.push(w); + for (let f = 0; f < a; ++f) { + let h = y.createScalarValue(f, "int32"), g = t6.makeTensorInfo([], "int32", h), x = eS({ inputs: { a: g, b: m }, backend: t6 }), b = Io({ inputs: { x }, backend: t6, attrs: { dtype: "float32" } }), C = wu({ inputs: { a: b, b: n }, backend: t6 }), w = La({ inputs: { x: C }, backend: t6, attrs: { axis: 0, keepDims: false } }); + u.push(w), c.push(g), c.push(x), c.push(b), c.push(C), c.push(w); } - let f = OI({ inputs: u, backend: t10, attrs: { axis: 0 } }); - return c.forEach((d) => t10.disposeIntermediateTensorInfo(d)), f; + let d = AS({ inputs: u, backend: t6, attrs: { axis: 0 } }); + return c.forEach((f) => t6.disposeIntermediateTensorInfo(f)), d; } -var UE = { kernelName: Rp, backendName: "cpu", kernelFunc: o8 }; -var n8 = [h2, TN, g2, x2, RN, y2, b2, C2, I2, w2, S2, v2, k2, T2, N2, E2, $2, R2, A2, d2, F2, D2, P2, O2, $N, AN, M2, NN, L2, V2, z2, W2, U2, G2, H2, q2, K2, j2, X2, Y2, Q2, Z2, J2, e_, t_, r_, o_, n_, s_, a_, u_, u2, p_, FN, c_, DN, l_, PN, m_, f_, d_, ON, h_, g_, x_, y_, b_, MN, LN, _N, C_, B2, I_, w_, S_, p2, BN, VN, v_, zN, k_, T_, N_, __, E_, $_, R_, WN, A_, F_, D_, P_, M_, L_, B_, UN, V_, z_, G_, GN, HN, H_, q_, K_, qN, j_, Q_, Z_, Od, J_, c2, jN, eE, tE, rE, oE, EN, vl, nE, l2, m2, f2, sE, aE, iE, uE, pE, cE, lE, JN, mE, dE, hE, gE, t2, xE, yE, bE, r2, W_, IE, wE, SE, vE, kE, TE, NE, _E, n2, EE, s2, $E, RE, AE, FE, DE, a2, i_, PE, OE, ME, LE, VE, KN, zE, WE, UE, X_]; -for (let r of n8) - ya(r); -var ic = {}; -Be(ic, { assertNotComplex: () => as, bindCanvasToFramebuffer: () => f8, bindColorTextureToFramebuffer: () => Rl, bindTextureToProgramUniformSampler: () => ZI, bindTextureUnit: () => KE, bindVertexBufferToProgramAttribute: () => Wd, callAndCheck: () => me, canBeRepresented: () => VI, createFragmentShader: () => WI, createFramebuffer: () => XI, createProgram: () => UI, createStaticIndexBuffer: () => qI, createStaticVertexBuffer: () => HI, createTexture: () => KI, createVertexShader: () => zI, getBatchDim: () => Pa, getExtensionOrThrow: () => nc, getFramebufferErrorMessage: () => jE, getMaxTexturesInShader: () => tw, getNumChannels: () => l8, getProgramUniformLocation: () => QI, getProgramUniformLocationOrThrow: () => YI, getRowsCols: () => Oa, getShapeAs3D: () => ac, getTextureShapeFromLogicalShape: () => JI, getWebGLDisjointQueryTimerVersion: () => rw, getWebGLErrorMessage: () => qE, getWebGLMaxTextureSize: () => ew, hasExtension: () => Hr, isCapableOfRenderingToFloatTexture: () => ow, isDownloadFloatTextureEnabled: () => nw, isReshapeFree: () => Ti, isWebGLFenceEnabled: () => sw, isWebGLVersionEnabled: () => Gd, linkProgram: () => GI, logShaderSourceAndInfoLog: () => zd, resetMaxTextureSize: () => d8, resetMaxTexturesInShader: () => h8, unbindColorTextureFromFramebuffer: () => Ud, unbindTextureUnit: () => m8, validateFramebuffer: () => sc, validateProgram: () => $l, validateTextureSize: () => jI }); +var yE = { kernelName: Np, backendName: "cpu", kernelFunc: k5 }; +var N5 = [GT, tT, HT, qT, aT, KT, jT, XT, YT, QT, ZT, JT, e2, t2, r2, n2, s2, a2, i2, UT, u2, p2, c2, l2, sT, iT, m2, rT, d2, h2, g2, x2, y2, b2, C2, S2, w2, I2, v2, k2, N2, T2, _2, E2, $2, A2, R2, F2, D2, O2, M2, MT, L2, uT, B2, pT, V2, cT, z2, W2, U2, lT, G2, H2, q2, K2, j2, mT, dT, oT, X2, f2, Y2, Q2, Z2, LT, fT, hT, J2, gT, e_, t_, r_, o_, n_, s_, a_, xT, i_, u_, p_, c_, m_, d_, f_, yT, h_, g_, b_, bT, CT, C_, S_, w_, ST, I_, N_, T_, kf, __, BT, IT, E_, $_, A_, R_, nT, gl, F_, VT, zT, WT, D_, O_, P_, M_, L_, B_, V_, _T, z_, U_, G_, H_, $T, q_, K_, j_, AT, x_, Y_, Q_, Z_, J_, eE, tE, rE, oE, FT, nE, DT, sE, aE, iE, uE, pE, OT, P2, cE, lE, mE, dE, hE, wT, gE, xE, yE, v_]; +for (let r of N5) + Ia(r); +var oc = {}; +Ue(oc, { assertNotComplex: () => is, bindCanvasToFramebuffer: () => O5, bindColorTextureToFramebuffer: () => Il, bindTextureToProgramUniformSampler: () => KS, bindTextureUnit: () => wE, bindVertexBufferToProgramAttribute: () => Af, callAndCheck: () => ce, canBeRepresented: () => OS, createFragmentShader: () => MS, createFramebuffer: () => GS, createProgram: () => LS, createStaticIndexBuffer: () => zS, createStaticVertexBuffer: () => VS, createTexture: () => WS, createVertexShader: () => PS, getBatchDim: () => Va, getExtensionOrThrow: () => ec, getFramebufferErrorMessage: () => IE, getMaxTexturesInShader: () => YS, getNumChannels: () => F5, getProgramUniformLocation: () => qS, getProgramUniformLocationOrThrow: () => HS, getRowsCols: () => za, getShapeAs3D: () => rc, getTextureShapeFromLogicalShape: () => jS, getWebGLDisjointQueryTimerVersion: () => QS, getWebGLErrorMessage: () => SE, getWebGLMaxTextureSize: () => XS, hasExtension: () => Ur, isCapableOfRenderingToFloatTexture: () => ZS, isDownloadFloatTextureEnabled: () => JS, isReshapeFree: () => Li, isWebGLFenceEnabled: () => ew, isWebGLVersionEnabled: () => Ff, linkProgram: () => BS, logShaderSourceAndInfoLog: () => $f, resetMaxTextureSize: () => P5, resetMaxTexturesInShader: () => M5, unbindColorTextureFromFramebuffer: () => Rf, unbindTextureUnit: () => D5, validateFramebuffer: () => tc, validateProgram: () => wl, validateTextureSize: () => US }); var Eu = {}; -var Md = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; -function MI(r, e) { +var Nf = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; +function RS(r, e) { Eu[r] = e; } -function Gr(r, e) { +function Wr(r, e) { if (!(r in Eu) || e != null) { - let o = a8(r, e); + let o = _5(r, e); if (o !== null) Eu[r] = o; else return console.log("Could not get context for WebGL version", r), null; } - let t10 = Eu[r]; - return t10 == null || t10.isContextLost() ? (delete Eu[r], Gr(r)) : (t10.disable(t10.DEPTH_TEST), t10.disable(t10.STENCIL_TEST), t10.disable(t10.BLEND), t10.disable(t10.DITHER), t10.disable(t10.POLYGON_OFFSET_FILL), t10.disable(t10.SAMPLE_COVERAGE), t10.enable(t10.SCISSOR_TEST), t10.enable(t10.CULL_FACE), t10.cullFace(t10.BACK), Eu[r]); + let t6 = Eu[r]; + return t6 == null || t6.isContextLost() ? (delete Eu[r], Wr(r)) : (t6.disable(t6.DEPTH_TEST), t6.disable(t6.STENCIL_TEST), t6.disable(t6.BLEND), t6.disable(t6.DITHER), t6.disable(t6.POLYGON_OFFSET_FILL), t6.disable(t6.SAMPLE_COVERAGE), t6.enable(t6.SCISSOR_TEST), t6.enable(t6.CULL_FACE), t6.cullFace(t6.BACK), Eu[r]); } -function s8(r) { +function T5(r) { if (typeof OffscreenCanvas != "undefined" && r === 2) return new OffscreenCanvas(300, 150); if (typeof document != "undefined") return document.createElement("canvas"); throw new Error("Cannot create a canvas in this context"); } -function a8(r, e) { +function _5(r, e) { if (r !== 1 && r !== 2) throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); - let t10 = e == null ? s8(r) : e; - return t10.addEventListener("webglcontextlost", (o) => { + let t6 = e == null ? T5(r) : e; + return t6.addEventListener("webglcontextlost", (o) => { o.preventDefault(), delete Eu[r]; - }, false), P().getBool("SOFTWARE_WEBGL_ENABLED") && (Md.failIfMajorPerformanceCaveat = false), r === 1 ? t10.getContext("webgl", Md) || t10.getContext("experimental-webgl", Md) : t10.getContext("webgl2", Md); + }, false), O().getBool("SOFTWARE_WEBGL_ENABLED") && (Nf.failIfMajorPerformanceCaveat = false), r === 1 ? t6.getContext("webgl", Nf) || t6.getContext("experimental-webgl", Nf) : t6.getContext("webgl2", Nf); } -var ki; +var Mi; (function(r) { r[r.DENSE = 0] = "DENSE", r[r.SHARED_BATCH = 1] = "SHARED_BATCH"; -})(ki || (ki = {})); +})(Mi || (Mi = {})); var ir; (function(r) { r[r.RENDER = 0] = "RENDER", r[r.UPLOAD = 1] = "UPLOAD", r[r.PIXELS = 2] = "PIXELS", r[r.DOWNLOAD = 3] = "DOWNLOAD"; })(ir || (ir = {})); -var Jt; +var Zt; (function(r) { r[r.UNPACKED_FLOAT16 = 0] = "UNPACKED_FLOAT16", r[r.UNPACKED_FLOAT32 = 1] = "UNPACKED_FLOAT32", r[r.PACKED_4X1_UNSIGNED_BYTE = 2] = "PACKED_4X1_UNSIGNED_BYTE", r[r.PACKED_2X2_FLOAT32 = 3] = "PACKED_2X2_FLOAT32", r[r.PACKED_2X2_FLOAT16 = 4] = "PACKED_2X2_FLOAT16"; -})(Jt || (Jt = {})); +})(Zt || (Zt = {})); function $u(r, e) { return [e, r]; } -function GE(r, e) { +function bE(r, e) { return r * e; } -function _l(r) { - let e = x.sizeFromShape(r), t10 = Math.ceil(e / 4); - return x.sizeToSquarishShape(t10); +function Cl(r) { + let e = y.sizeFromShape(r), t6 = Math.ceil(e / 4); + return y.sizeToSquarishShape(t6); } -function Ks(r, e) { +function Ys(r, e) { return [Math.max(1, Math.ceil(e / 2)), Math.max(1, Math.ceil(r / 2))]; } -function HE(r, e) { - let [t10, o] = Ks(r, e); - return t10 * o * 4; +function CE(r, e) { + let [t6, o] = Ys(r, e); + return t6 * o * 4; } -function El(r, e) { - let t10 = r, o, n, s, a, i, p, u, c, l, m; - return P().getNumber("WEBGL_VERSION") === 2 ? (o = t10.R32F, n = t10.R16F, s = t10.RGBA16F, a = t10.RGBA32F, i = t10.RED, u = 4, c = 1, l = t10.HALF_FLOAT, m = t10.FLOAT, p = t10.RGBA8) : (o = r.RGBA, n = r.RGBA, s = r.RGBA, a = t10.RGBA, i = r.RGBA, u = 4, c = 4, l = e != null ? e.HALF_FLOAT_OES : null, m = r.FLOAT, p = r.RGBA), { internalFormatFloat: o, internalFormatHalfFloat: n, internalFormatPackedHalfFloat: s, internalFormatPackedFloat: a, textureFormatFloat: i, downloadTextureFormat: p, downloadUnpackNumChannels: u, defaultNumChannels: c, textureTypeHalfFloat: l, textureTypeFloat: m }; +function Sl(r, e) { + let t6 = r, o, n, s, a, i, p, u, c, l, m; + return O().getNumber("WEBGL_VERSION") === 2 ? (o = t6.R32F, n = t6.R16F, s = t6.RGBA16F, a = t6.RGBA32F, i = t6.RED, u = 4, c = 1, l = t6.HALF_FLOAT, m = t6.FLOAT, p = t6.RGBA8) : (o = r.RGBA, n = r.RGBA, s = r.RGBA, a = t6.RGBA, i = r.RGBA, u = 4, c = 4, l = e != null ? e.HALF_FLOAT_OES : null, m = r.FLOAT, p = r.RGBA), { internalFormatFloat: o, internalFormatHalfFloat: n, internalFormatPackedHalfFloat: s, internalFormatPackedFloat: a, textureFormatFloat: i, downloadTextureFormat: p, downloadUnpackNumChannels: u, defaultNumChannels: c, textureTypeHalfFloat: l, textureTypeFloat: m }; } -function me(r, e) { - let t10 = e(); - return P().getBool("DEBUG") && i8(r), t10; +function ce(r, e) { + let t6 = e(); + return O().getBool("DEBUG") && E5(r), t6; } -function i8(r) { +function E5(r) { let e = r.getError(); if (e !== r.NO_ERROR) - throw new Error("WebGL Error: " + qE(r, e)); + throw new Error("WebGL Error: " + SE(r, e)); } -var u8 = 596e-10; -var p8 = 65504; -function VI(r) { - return !!(P().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r === 0 || u8 < Math.abs(r) && Math.abs(r) < p8); +var $5 = 596e-10; +var A5 = 65504; +function OS(r) { + return !!(O().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r === 0 || $5 < Math.abs(r) && Math.abs(r) < A5); } -function qE(r, e) { +function SE(r, e) { switch (e) { case r.NO_ERROR: return "NO_ERROR"; @@ -14912,113 +14958,113 @@ function qE(r, e) { return `Unknown error code ${e}`; } } -function nc(r, e) { - return Da(r, () => r.getExtension(e), 'Extension "' + e + '" not supported on this browser.'); +function ec(r, e) { + return Ba(r, () => r.getExtension(e), 'Extension "' + e + '" not supported on this browser.'); } -function zI(r, e) { - let t10 = Da(r, () => r.createShader(r.VERTEX_SHADER), "Unable to create vertex WebGLShader."); - if (me(r, () => r.shaderSource(t10, e)), me(r, () => r.compileShader(t10)), r.getShaderParameter(t10, r.COMPILE_STATUS) === false) - throw console.log(r.getShaderInfoLog(t10)), new Error("Failed to compile vertex shader."); - return t10; +function PS(r, e) { + let t6 = Ba(r, () => r.createShader(r.VERTEX_SHADER), "Unable to create vertex WebGLShader."); + if (ce(r, () => r.shaderSource(t6, e)), ce(r, () => r.compileShader(t6)), r.getShaderParameter(t6, r.COMPILE_STATUS) === false) + throw console.log(r.getShaderInfoLog(t6)), new Error("Failed to compile vertex shader."); + return t6; } -function WI(r, e) { - let t10 = Da(r, () => r.createShader(r.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); - if (me(r, () => r.shaderSource(t10, e)), me(r, () => r.compileShader(t10)), P().get("ENGINE_COMPILE_ONLY")) - return t10; - if (r.getShaderParameter(t10, r.COMPILE_STATUS) === false) - throw zd(e, r.getShaderInfoLog(t10)), new Error("Failed to compile fragment shader."); - return t10; +function MS(r, e) { + let t6 = Ba(r, () => r.createShader(r.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); + if (ce(r, () => r.shaderSource(t6, e)), ce(r, () => r.compileShader(t6)), O().get("ENGINE_COMPILE_ONLY")) + return t6; + if (r.getShaderParameter(t6, r.COMPILE_STATUS) === false) + throw $f(e, r.getShaderInfoLog(t6)), new Error("Failed to compile fragment shader."); + return t6; } -var c8 = /ERROR: [0-9]+:([0-9]+):/g; -function zd(r, e) { - let t10 = c8.exec(e); - if (t10 == null) { +var R5 = /ERROR: [0-9]+:([0-9]+):/g; +function $f(r, e) { + let t6 = R5.exec(e); + if (t6 == null) { console.log(`Couldn't parse line number in error: ${e}`), console.log(r); return; } - let o = +t10[1], n = r.split(` -`), s = n.length.toString().length + 2, a = n.map((l, m) => x.rightPad((m + 1).toString(), s) + l), i = 0; + let o = +t6[1], n = r.split(` +`), s = n.length.toString().length + 2, a = n.map((l, m) => y.rightPad((m + 1).toString(), s) + l), i = 0; for (let l = 0; l < a.length; l++) i = Math.max(a[l].length, i); let p = a.slice(0, o - 1), u = a.slice(o - 1, o), c = a.slice(o); console.log(p.join(` `)), console.log(e.split(` -`)[0]), console.log(`%c ${x.rightPad(u[0], i)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"), console.log(c.join(` +`)[0]), console.log(`%c ${y.rightPad(u[0], i)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"), console.log(c.join(` `)); } -function UI(r) { - return Da(r, () => r.createProgram(), "Unable to create WebGLProgram."); +function LS(r) { + return Ba(r, () => r.createProgram(), "Unable to create WebGLProgram."); } -function GI(r, e) { - if (me(r, () => r.linkProgram(e)), !P().get("ENGINE_COMPILE_ONLY") && r.getProgramParameter(e, r.LINK_STATUS) === false) +function BS(r, e) { + if (ce(r, () => r.linkProgram(e)), !O().get("ENGINE_COMPILE_ONLY") && r.getProgramParameter(e, r.LINK_STATUS) === false) throw console.log(r.getProgramInfoLog(e)), new Error("Failed to link vertex and fragment shaders."); } -function $l(r, e) { - if (me(r, () => r.validateProgram(e)), r.getProgramParameter(e, r.VALIDATE_STATUS) === false) +function wl(r, e) { + if (ce(r, () => r.validateProgram(e)), r.getProgramParameter(e, r.VALIDATE_STATUS) === false) throw console.log(r.getProgramInfoLog(e)), new Error("Shader program validation failed."); } -function HI(r, e) { - let t10 = Da(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); - return me(r, () => r.bindBuffer(r.ARRAY_BUFFER, t10)), me(r, () => r.bufferData(r.ARRAY_BUFFER, e, r.STATIC_DRAW)), t10; +function VS(r, e) { + let t6 = Ba(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, t6)), ce(r, () => r.bufferData(r.ARRAY_BUFFER, e, r.STATIC_DRAW)), t6; } -function qI(r, e) { - let t10 = Da(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); - return me(r, () => r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, t10)), me(r, () => r.bufferData(r.ELEMENT_ARRAY_BUFFER, e, r.STATIC_DRAW)), t10; +function zS(r, e) { + let t6 = Ba(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r, () => r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, t6)), ce(r, () => r.bufferData(r.ELEMENT_ARRAY_BUFFER, e, r.STATIC_DRAW)), t6; } -function l8() { - return P().getNumber("WEBGL_VERSION") === 2 ? 1 : 4; +function F5() { + return O().getNumber("WEBGL_VERSION") === 2 ? 1 : 4; } -function KI(r) { - return Da(r, () => r.createTexture(), "Unable to create WebGLTexture."); +function WS(r) { + return Ba(r, () => r.createTexture(), "Unable to create WebGLTexture."); } -function jI(r, e) { - let t10 = P().getNumber("WEBGL_MAX_TEXTURE_SIZE"); +function US(r, e) { + let t6 = O().getNumber("WEBGL_MAX_TEXTURE_SIZE"); if (r <= 0 || e <= 0) { let o = `[${r}x${e}]`; throw new Error("Requested texture size " + o + " is invalid."); } - if (r > t10 || e > t10) { - let o = `[${r}x${e}]`, n = `[${t10}x${t10}]`; + if (r > t6 || e > t6) { + let o = `[${r}x${e}]`, n = `[${t6}x${t6}]`; throw new Error("Requested texture size " + o + " greater than WebGL maximum on this browser / GPU " + n + "."); } } -function XI(r) { - return Da(r, () => r.createFramebuffer(), "Unable to create WebGLFramebuffer."); +function GS(r) { + return Ba(r, () => r.createFramebuffer(), "Unable to create WebGLFramebuffer."); } -function Wd(r, e, t10, o, n, s, a) { - let i = r.getAttribLocation(e, t10); - return i === -1 ? false : (me(r, () => r.bindBuffer(r.ARRAY_BUFFER, o)), me(r, () => r.vertexAttribPointer(i, n, r.FLOAT, false, s, a)), me(r, () => r.enableVertexAttribArray(i)), true); +function Af(r, e, t6, o, n, s, a) { + let i = r.getAttribLocation(e, t6); + return i === -1 ? false : (ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, o)), ce(r, () => r.vertexAttribPointer(i, n, r.FLOAT, false, s, a)), ce(r, () => r.enableVertexAttribArray(i)), true); } -function KE(r, e, t10) { - XE(r, t10), me(r, () => r.activeTexture(r.TEXTURE0 + t10)), me(r, () => r.bindTexture(r.TEXTURE_2D, e)); +function wE(r, e, t6) { + vE(r, t6), ce(r, () => r.activeTexture(r.TEXTURE0 + t6)), ce(r, () => r.bindTexture(r.TEXTURE_2D, e)); } -function m8(r, e) { - XE(r, e), me(r, () => r.activeTexture(r.TEXTURE0 + e)), me(r, () => r.bindTexture(r.TEXTURE_2D, null)); +function D5(r, e) { + vE(r, e), ce(r, () => r.activeTexture(r.TEXTURE0 + e)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); } -function YI(r, e, t10) { - return Da(r, () => r.getUniformLocation(e, t10), 'uniform "' + t10 + '" not present in program.'); +function HS(r, e, t6) { + return Ba(r, () => r.getUniformLocation(e, t6), 'uniform "' + t6 + '" not present in program.'); } -function QI(r, e, t10) { - return r.getUniformLocation(e, t10); +function qS(r, e, t6) { + return r.getUniformLocation(e, t6); } -function ZI(r, e, t10, o) { - me(r, () => KE(r, e, o)), me(r, () => r.uniform1i(t10, o)); +function KS(r, e, t6, o) { + ce(r, () => wE(r, e, o)), ce(r, () => r.uniform1i(t6, o)); } -function f8(r) { - me(r, () => r.bindFramebuffer(r.FRAMEBUFFER, null)), me(r, () => r.viewport(0, 0, r.canvas.width, r.canvas.height)), me(r, () => r.scissor(0, 0, r.canvas.width, r.canvas.height)); +function O5(r) { + ce(r, () => r.bindFramebuffer(r.FRAMEBUFFER, null)), ce(r, () => r.viewport(0, 0, r.canvas.width, r.canvas.height)), ce(r, () => r.scissor(0, 0, r.canvas.width, r.canvas.height)); } -function Rl(r, e, t10) { - me(r, () => r.bindFramebuffer(r.FRAMEBUFFER, t10)), me(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, e, 0)); +function Il(r, e, t6) { + ce(r, () => r.bindFramebuffer(r.FRAMEBUFFER, t6)), ce(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, e, 0)); } -function Ud(r, e) { - me(r, () => r.bindFramebuffer(r.FRAMEBUFFER, e)), me(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, null, 0)); +function Rf(r, e) { + ce(r, () => r.bindFramebuffer(r.FRAMEBUFFER, e)), ce(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, null, 0)); } -function sc(r) { +function tc(r) { let e = r.checkFramebufferStatus(r.FRAMEBUFFER); if (e !== r.FRAMEBUFFER_COMPLETE) - throw new Error("Error binding framebuffer: " + jE(r, e)); + throw new Error("Error binding framebuffer: " + IE(r, e)); } -function jE(r, e) { +function IE(r, e) { switch (e) { case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; @@ -15032,159 +15078,159 @@ function jE(r, e) { return `unknown error ${e}`; } } -function Da(r, e, t10) { - let o = me(r, () => e()); +function Ba(r, e, t6) { + let o = ce(r, () => e()); if (o == null) - throw new Error(t10); + throw new Error(t6); return o; } -function XE(r, e) { - let t10 = r.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = e + r.TEXTURE0; - if (o < r.TEXTURE0 || o > t10) { - let n = `[gl.TEXTURE0, gl.TEXTURE${t10}]`; +function vE(r, e) { + let t6 = r.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = e + r.TEXTURE0; + if (o < r.TEXTURE0 || o > t6) { + let n = `[gl.TEXTURE0, gl.TEXTURE${t6}]`; throw new Error(`textureUnit must be in ${n}.`); } } -function Pa(r, e = 2) { - return x.sizeFromShape(r.slice(0, r.length - e)); +function Va(r, e = 2) { + return y.sizeFromShape(r.slice(0, r.length - e)); } -function Oa(r) { +function za(r) { if (r.length === 0) throw Error("Cannot get rows and columns of an empty shape array."); return [r.length > 1 ? r[r.length - 2] : 1, r[r.length - 1]]; } -function ac(r) { +function rc(r) { let e = [1, 1, 1]; - return r.length === 0 || r.length === 1 && r[0] === 1 || (e = [Pa(r), ...Oa(r)]), e; + return r.length === 0 || r.length === 1 && r[0] === 1 || (e = [Va(r), ...za(r)]), e; } -function JI(r, e = false) { - let t10 = P().getNumber("WEBGL_MAX_TEXTURE_SIZE"), o = P().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE"); - o === 1 / 0 && P().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE") && (o = t10 / 2), e && (t10 = t10 * 2, o = o * 2, r = r.map((i, p) => p >= r.length - 2 ? x.nearestLargerEven(r[p]) : r[p]), r.length === 1 && (r = [2, r[0]])), r.length !== 2 && (r = x.squeezeShape(r).newShape); - let n = x.sizeFromShape(r), s = null; - r.length <= 1 && n <= t10 ? s = [1, n] : r.length === 2 && r[0] <= t10 && r[1] <= t10 ? s = r : r.length === 3 && r[0] * r[1] <= t10 && r[2] <= t10 ? s = [r[0] * r[1], r[2]] : r.length === 3 && r[0] <= t10 && r[1] * r[2] <= t10 ? s = [r[0], r[1] * r[2]] : r.length === 4 && r[0] * r[1] * r[2] <= t10 && r[3] <= t10 ? s = [r[0] * r[1] * r[2], r[3]] : r.length === 4 && r[0] <= t10 && r[1] * r[2] * r[3] <= t10 && (s = [r[0], r[1] * r[2] * r[3]]); +function jS(r, e = false) { + let t6 = O().getNumber("WEBGL_MAX_TEXTURE_SIZE"), o = O().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE"); + o === 1 / 0 && O().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE") && (o = t6 / 2), e && (t6 = t6 * 2, o = o * 2, r = r.map((i, p) => p >= r.length - 2 ? y.nearestLargerEven(r[p]) : r[p]), r.length === 1 && (r = [2, r[0]])), r.length !== 2 && (r = y.squeezeShape(r).newShape); + let n = y.sizeFromShape(r), s = null; + r.length <= 1 && n <= t6 ? s = [1, n] : r.length === 2 && r[0] <= t6 && r[1] <= t6 ? s = r : r.length === 3 && r[0] * r[1] <= t6 && r[2] <= t6 ? s = [r[0] * r[1], r[2]] : r.length === 3 && r[0] <= t6 && r[1] * r[2] <= t6 ? s = [r[0], r[1] * r[2]] : r.length === 4 && r[0] * r[1] * r[2] <= t6 && r[3] <= t6 ? s = [r[0] * r[1] * r[2], r[3]] : r.length === 4 && r[0] <= t6 && r[1] * r[2] * r[3] <= t6 && (s = [r[0], r[1] * r[2] * r[3]]); let a = s != null && Math.max(...s) > o && Math.min(...s) <= (e ? 2 : 1) && Math.min(...s) > 0; if (s == null || a) if (e) { - let i = Pa(r), p = 2, u = 2; - r.length && ([p, u] = Oa(r)), n = i * (p / 2) * (u / 2), s = x.sizeToSquarishShape(n).map((c) => c * 2); + let i = Va(r), p = 2, u = 2; + r.length && ([p, u] = za(r)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((c) => c * 2); } else - s = x.sizeToSquarishShape(n); + s = y.sizeToSquarishShape(n); return s; } -function Ld(r) { +function Tf(r) { return r % 2 === 0; } -function Ti(r, e) { - if (r = r.slice(-2), e = e.slice(-2), x.arraysEqual(r, e) || !r.length || !e.length || r[0] === 0 || r[1] === 0 || e[0] === 0 || e[1] === 0) +function Li(r, e) { + if (r = r.slice(-2), e = e.slice(-2), y.arraysEqual(r, e) || !r.length || !e.length || r[0] === 0 || r[1] === 0 || e[0] === 0 || e[1] === 0) return true; if (r.length !== e.length) { - let t10 = r.slice(-1)[0], o = e.slice(-1)[0]; - if (t10 === o || Ld(t10) && Ld(o) && (r[0] === 1 || e[0] === 1)) + let t6 = r.slice(-1)[0], o = e.slice(-1)[0]; + if (t6 === o || Tf(t6) && Tf(o) && (r[0] === 1 || e[0] === 1)) return true; } - return r[1] === e[1] && Ld(r[0]) && Ld(e[0]); + return r[1] === e[1] && Tf(r[0]) && Tf(e[0]); } -var Bd; -var Vd; -function ew(r) { - if (Bd == null) { - let e = Gr(r); - Bd = e.getParameter(e.MAX_TEXTURE_SIZE); +var _f; +var Ef; +function XS(r) { + if (_f == null) { + let e = Wr(r); + _f = e.getParameter(e.MAX_TEXTURE_SIZE); } - return Bd; + return _f; } -function d8() { - Bd = null; +function P5() { + _f = null; } -function h8() { - Vd = null; +function M5() { + Ef = null; } -function tw(r) { - if (Vd == null) { - let e = Gr(r); - Vd = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS); +function YS(r) { + if (Ef == null) { + let e = Wr(r); + Ef = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS); } - return Math.min(16, Vd); + return Math.min(16, Ef); } -function rw(r) { +function QS(r) { if (r === 0) return 0; - let e, t10 = Gr(r); - return Hr(t10, "EXT_disjoint_timer_query_webgl2") && r === 2 ? e = 2 : Hr(t10, "EXT_disjoint_timer_query") ? e = 1 : e = 0, e; + let e, t6 = Wr(r); + return Ur(t6, "EXT_disjoint_timer_query_webgl2") && r === 2 ? e = 2 : Ur(t6, "EXT_disjoint_timer_query") ? e = 1 : e = 0, e; } -function Hr(r, e) { +function Ur(r, e) { return r.getExtension(e) != null; } -function Gd(r) { +function Ff(r) { try { - if (Gr(r) != null) + if (Wr(r) != null) return true; } catch (e) { return console.log("Error when getting WebGL context: ", e), false; } return false; } -function ow(r) { +function ZS(r) { if (r === 0) return false; - let e = Gr(r); + let e = Wr(r); if (r === 1) { - if (!Hr(e, "OES_texture_float")) + if (!Ur(e, "OES_texture_float")) return false; - } else if (!Hr(e, "EXT_color_buffer_float")) + } else if (!Ur(e, "EXT_color_buffer_float")) return false; - return BI(e); + return DS(e); } -function nw(r) { +function JS(r) { if (r === 0) return false; - let e = Gr(r); + let e = Wr(r); if (r === 1) { - if (!Hr(e, "OES_texture_float") || !Hr(e, "WEBGL_color_buffer_float")) + if (!Ur(e, "OES_texture_float") || !Ur(e, "WEBGL_color_buffer_float")) return false; } else { - if (Hr(e, "EXT_color_buffer_float")) - return BI(e); + if (Ur(e, "EXT_color_buffer_float")) + return DS(e); let o = "EXT_color_buffer_half_float"; - if (Hr(e, o)) { + if (Ur(e, o)) { let n = e.getExtension(o); - return g8(e, n); + return L5(e, n); } return false; } - return BI(e); + return DS(e); } -function BI(r) { - let e = El(r), t10 = r.createTexture(); - r.bindTexture(r.TEXTURE_2D, t10); +function DS(r) { + let e = Sl(r), t6 = r.createTexture(); + r.bindTexture(r.TEXTURE_2D, t6); let o = 1, n = 1; r.texImage2D(r.TEXTURE_2D, 0, e.internalFormatFloat, o, n, 0, e.textureFormatFloat, e.textureTypeFloat, null); let s = r.createFramebuffer(); - r.bindFramebuffer(r.FRAMEBUFFER, s), r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, t10, 0); + r.bindFramebuffer(r.FRAMEBUFFER, s), r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, t6, 0); let a = r.checkFramebufferStatus(r.FRAMEBUFFER) === r.FRAMEBUFFER_COMPLETE; - return r.bindTexture(r.TEXTURE_2D, null), r.bindFramebuffer(r.FRAMEBUFFER, null), r.deleteTexture(t10), r.deleteFramebuffer(s), a; + return r.bindTexture(r.TEXTURE_2D, null), r.bindFramebuffer(r.FRAMEBUFFER, null), r.deleteTexture(t6), r.deleteFramebuffer(s), a; } -function g8(r, e) { - let t10 = El(r, e), o = r.createTexture(); +function L5(r, e) { + let t6 = Sl(r, e), o = r.createTexture(); r.bindTexture(r.TEXTURE_2D, o); let n = 1, s = 1; - r.texImage2D(r.TEXTURE_2D, 0, t10.internalFormatHalfFloat, n, s, 0, t10.textureFormatFloat, t10.textureTypeHalfFloat, null); + r.texImage2D(r.TEXTURE_2D, 0, t6.internalFormatHalfFloat, n, s, 0, t6.textureFormatFloat, t6.textureTypeHalfFloat, null); let a = r.createFramebuffer(); r.bindFramebuffer(r.FRAMEBUFFER, a), r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, o, 0); let i = r.checkFramebufferStatus(r.FRAMEBUFFER) === r.FRAMEBUFFER_COMPLETE; return r.bindTexture(r.TEXTURE_2D, null), r.bindFramebuffer(r.FRAMEBUFFER, null), r.deleteTexture(o), r.deleteFramebuffer(a), i; } -function sw(r) { - return r !== 2 ? false : Gr(r).fenceSync != null; +function ew(r) { + return r !== 2 ? false : Wr(r).fenceSync != null; } -function as(r, e) { - Array.isArray(r) || (r = [r]), r.forEach((t10) => { - t10 != null && x.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the WebGL backend.`); +function is(r, e) { + Array.isArray(r) || (r = [r]), r.forEach((t6) => { + t6 != null && y.assert(t6.dtype !== "complex64", () => `${e} does not support complex64 tensors in the WebGL backend.`); }); } -var Ce = P(); +var Ce = O(); Ce.registerFlag("HAS_WEBGL", () => Ce.getNumber("WEBGL_VERSION") > 0); -Ce.registerFlag("WEBGL_VERSION", () => Gd(2) ? 2 : Gd(1) ? 1 : 0); +Ce.registerFlag("WEBGL_VERSION", () => Ff(2) ? 2 : Ff(1) ? 1 : 0); Ce.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS", () => false); Ce.registerFlag("WEBGL_BUFFER_SUPPORTED", () => Ce.get("WEBGL_VERSION") === 2); Ce.registerFlag("WEBGL_CPU_FORWARD", () => true); @@ -15200,23 +15246,23 @@ Ce.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS", () => Ce.getBool("WEBGL_PACK")); Ce.registerFlag("WEBGL_PACK_REDUCE", () => Ce.getBool("WEBGL_PACK")); Ce.registerFlag("WEBGL_LAZILY_UNPACK", () => Ce.getBool("WEBGL_PACK")); Ce.registerFlag("WEBGL_CONV_IM2COL", () => Ce.getBool("WEBGL_PACK")); -Ce.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => ew(Ce.getNumber("WEBGL_VERSION"))); -Ce.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => tw(Ce.getNumber("WEBGL_VERSION"))); +Ce.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => XS(Ce.getNumber("WEBGL_VERSION"))); +Ce.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => YS(Ce.getNumber("WEBGL_VERSION"))); Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", () => { let r = Ce.getNumber("WEBGL_VERSION"); - return r === 0 ? 0 : rw(r); + return r === 0 ? 0 : QS(r); }); -Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Ce.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !ii.isMobile()); -Ce.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => ow(Ce.getNumber("WEBGL_VERSION"))); +Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Ce.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !yi.isMobile()); +Ce.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => ZS(Ce.getNumber("WEBGL_VERSION"))); Ce.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED", () => Ce.getBool("WEBGL_FORCE_F16_TEXTURES") ? false : Ce.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")); -Ce.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => nw(Ce.getNumber("WEBGL_VERSION"))); -Ce.registerFlag("WEBGL_FENCE_API_ENABLED", () => sw(Ce.getNumber("WEBGL_VERSION"))); +Ce.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => JS(Ce.getNumber("WEBGL_VERSION"))); +Ce.registerFlag("WEBGL_FENCE_API_ENABLED", () => ew(Ce.getNumber("WEBGL_VERSION"))); Ce.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM", () => Ce.getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? 4 : 0); Ce.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => -1, (r) => { if (r < 0 && r !== -1) throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`); }); -Ce.registerFlag("WEBGL_FLUSH_THRESHOLD", () => ii.isMobile() ? 1 : -1, (r) => { +Ce.registerFlag("WEBGL_FLUSH_THRESHOLD", () => yi.isMobile() ? 1 : -1, (r) => { if (r < 0 && r !== -1) throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`); }); @@ -15229,9 +15275,10 @@ Ce.registerFlag("SOFTWARE_WEBGL_ENABLED", () => Ce.getBool("IS_TEST")); Ce.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE", () => 1 / 0); Ce.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE", () => false); Ce.registerFlag("WEBGL2_ISNAN_CUSTOM", () => false); -function Ct() { - let r, e, t10, o, n, s, a, i, p, u; - return P().getNumber("WEBGL_VERSION") === 2 ? (r = "#version 300 es", e = "in", t10 = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = P().getBool("WEBGL2_ISNAN_CUSTOM") ? ` +Ce.registerFlag("ENGINE_COMPILE_ONLY", () => false); +function St() { + let r, e, t6, o, n, s, a, i, p, u; + return O().getNumber("WEBGL_VERSION") === 2 ? (r = "#version 300 es", e = "in", t6 = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = O().getBool("WEBGL2_ISNAN_CUSTOM") ? ` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -15252,7 +15299,7 @@ function Ct() { ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `) : (r = "", e = "attribute", t10 = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` + `) : (r = "", e = "attribute", t6 = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; @@ -15277,52 +15324,52 @@ function Ct() { ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `), { version: r, attribute: e, varyingVs: t10, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; + `), { version: r, attribute: e, varyingVs: t6, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; } -function is(r, e, t10 = "index") { - let o = x.computeStrides(e); +function us(r, e, t6 = "index") { + let o = y.computeStrides(e); return o.map((n, s) => { - let a = `int ${r[s]} = ${t10} / ${n}`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${t10} - ${r[s]} * ${n}` : `index -= ${r[s]} * ${n}`; + let a = `int ${r[s]} = ${t6} / ${n}`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${t6} - ${r[s]} * ${n}` : `index -= ${r[s]} * ${n}`; return `${a}; ${i};`; }).join(""); } -function Ru(r, e, t10 = "index") { - let o = x.computeStrides(e); +function Au(r, e, t6 = "index") { + let o = y.computeStrides(e); return o.map((n, s) => { - let a = `int ${r[s]} = ${t10} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${t10} - ${r[s]} * outShapeStrides[${s}]` : `index -= ${r[s]} * outShapeStrides[${s}]`; + let a = `int ${r[s]} = ${t6} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${t6} - ${r[s]} * outShapeStrides[${s}]` : `index -= ${r[s]} * outShapeStrides[${s}]`; return `${a}; ${i};`; }).join(""); } -function x8(r, e) { - let t10 = r.length, o = r.map((s) => `${e}[${s}]`), n = new Array(t10 - 1); - n[t10 - 2] = o[t10 - 1]; - for (let s = t10 - 3; s >= 0; --s) +function B5(r, e) { + let t6 = r.length, o = r.map((s) => `${e}[${s}]`), n = new Array(t6 - 1); + n[t6 - 2] = o[t6 - 1]; + for (let s = t6 - 3; s >= 0; --s) n[s] = `(${n[s + 1]} * ${o[s + 1]})`; return n; } -function YE(r, e, t10 = "index") { - let o = r.map((s, a) => a), n = x8(o, e); +function kE(r, e, t6 = "index") { + let o = r.map((s, a) => a), n = B5(o, e); return n.map((s, a) => { - let i = `int ${r[a]} = ${t10} / ${n[a]}`, p = a === n.length - 1 ? `int ${r[a + 1]} = ${t10} - ${r[a]} * ${n[a]}` : `index -= ${r[a]} * ${n[a]}`; + let i = `int ${r[a]} = ${t6} / ${n[a]}`, p = a === n.length - 1 ? `int ${r[a + 1]} = ${t6} - ${r[a]} * ${n[a]}` : `index -= ${r[a]} * ${n[a]}`; return `${i}; ${p};`; }).join(""); } -function uc(r) { - let e = x.computeStrides(r).map((t10) => t10.toString()); +function nc(r) { + let e = y.computeStrides(r).map((t6) => t6.toString()); return ` int getFlatIndex(ivec3 coords) { return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z; } `; } -function pc() { +function sc() { return ` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `; } -var Hd = ` +var Df = ` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -15362,32 +15409,32 @@ var Hd = ` return c / 255.0; } `; -var { getBroadcastDims: QE } = I; -function ZE(r, e, t10) { +var { getBroadcastDims: NE } = S; +function TE(r, e, t6) { let o = []; - if (r.forEach((f) => { - let d = x.sizeFromShape(f.shapeInfo.logicalShape); - if (f.shapeInfo.isUniform ? o.push(`uniform float ${f.name}${d > 1 ? `[${d}]` : ""};`) : (o.push(`uniform sampler2D ${f.name};`), o.push(`uniform int offset${f.name};`)), t10.enableShapeUniforms) { - let { uniformShape: h } = qd(t10.packedInputs, f.shapeInfo.logicalShape, f.shapeInfo.texShape); + if (r.forEach((d) => { + let f = y.sizeFromShape(d.shapeInfo.logicalShape); + if (d.shapeInfo.isUniform ? o.push(`uniform float ${d.name}${f > 1 ? `[${f}]` : ""};`) : (o.push(`uniform sampler2D ${d.name};`), o.push(`uniform int offset${d.name};`)), t6.enableShapeUniforms) { + let { uniformShape: h } = Of(t6.packedInputs, d.shapeInfo.logicalShape, d.shapeInfo.texShape); switch (h.length) { case 1: - o.push(`uniform int ${f.name}Shape;`); + o.push(`uniform int ${d.name}Shape;`); break; case 2: - o.push(`uniform ivec2 ${f.name}Shape;`); + o.push(`uniform ivec2 ${d.name}Shape;`); break; case 3: - o.push(`uniform ivec3 ${f.name}Shape;`); + o.push(`uniform ivec3 ${d.name}Shape;`); break; case 4: - o.push(`uniform ivec4 ${f.name}Shape;`); + o.push(`uniform ivec4 ${d.name}Shape;`); break; default: break; } - o.push(`uniform ivec2 ${f.name}TexShape;`); + o.push(`uniform ivec2 ${d.name}TexShape;`); } - }), t10.enableShapeUniforms) { + }), t6.enableShapeUniforms) { switch (e.logicalShape.length) { case 1: o.push("uniform int outShape;"); @@ -15406,112 +15453,112 @@ function ZE(r, e, t10) { } o.push("uniform ivec2 outTexShape;"); } - t10.customUniforms && t10.customUniforms.forEach((f) => { - o.push(`uniform ${f.type} ${f.name}${f.arrayIndex ? `[${f.arrayIndex}]` : ""};`); + t6.customUniforms && t6.customUniforms.forEach((d) => { + o.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ""};`); }); let n = o.join(` -`), s = r.map((f) => y8(f, e, t10.packedInputs, t10.enableShapeUniforms)).join(` -`), a = e.texShape, i = Ct(), p = I8(i), u, c, l = v8(i); - return e.isPacked ? (u = b8(e.logicalShape, a, t10.enableShapeUniforms), c = S8(i)) : (u = C8(e.logicalShape, a, t10.enableShapeUniforms), c = w8(i)), t10.packedInputs && (l += _8), [l, p, c, n, u, s, t10.userCode].join(` +`), s = r.map((d) => V5(d, e, t6.packedInputs, t6.enableShapeUniforms)).join(` +`), a = e.texShape, i = St(), p = U5(i), u, c, l = q5(i); + return e.isPacked ? (u = z5(e.logicalShape, a, t6.enableShapeUniforms), c = H5(i)) : (u = W5(e.logicalShape, a, t6.enableShapeUniforms), c = G5(i)), t6.packedInputs && (l += Y5), [l, p, c, n, u, s, t6.userCode].join(` `); } -function lc(r, e = false) { - let t10 = r.shapeInfo.logicalShape; - switch (t10.length) { +function ic(r, e = false) { + let t6 = r.shapeInfo.logicalShape; + switch (t6.length) { case 0: - return V8(r, e); + return u8(r, e); case 1: - return W8(r, e); + return c8(r, e); case 2: - return G8(r, e); + return m8(r, e); case 3: - return q8(r, e); + return f8(r, e); case 4: - return j8(r, e); + return g8(r, e); case 5: - return X8(r); + return x8(r); case 6: - return Y8(r); + return y8(r); default: - throw new Error(`${t10.length}-D input sampling is not yet supported`); + throw new Error(`${t6.length}-D input sampling is not yet supported`); } } -function JE(r, e) { +function _E(r, e) { switch (r.shapeInfo.logicalShape.length) { case 0: - return B8(r); + return i8(r); case 1: - return z8(r, e); + return p8(r, e); case 2: - return U8(r, e); + return l8(r, e); case 3: - return H8(r, e); + return d8(r, e); default: - return K8(r, e); + return h8(r, e); } } -function y8(r, e, t10 = false, o) { +function V5(r, e, t6 = false, o) { let n = ""; - t10 ? n += JE(r, o) : n += lc(r, o); + t6 ? n += _E(r, o) : n += ic(r, o); let s = r.shapeInfo.logicalShape, a = e.logicalShape; - return s.length <= a.length && (t10 ? n += Q8(r, e) : n += Z8(r, e)), n; + return s.length <= a.length && (t6 ? n += b8(r, e) : n += C8(r, e)), n; } -function b8(r, e, t10) { +function z5(r, e, t6) { switch (r.length) { case 0: - return e$(); + return EE(); case 1: - return E8(r, e, t10); + return Q5(r, e, t6); case 2: - return M8(r, e, t10); + return s8(r, e, t6); case 3: - return R8(r, e, t10); + return J5(r, e, t6); default: - return F8(r, e, t10); + return t8(r, e, t6); } } -function C8(r, e, t10) { +function W5(r, e, t6) { switch (r.length) { case 0: - return e$(); + return EE(); case 1: - return $8(r, e, t10); + return Z5(r, e, t6); case 2: - return L8(r, e, t10); + return a8(r, e, t6); case 3: - return A8(r, e, t10); + return e8(r, e, t6); case 4: - return D8(r, e, t10); + return r8(r, e, t6); case 5: - return P8(r, e); + return o8(r, e); case 6: - return O8(r, e); + return n8(r, e); default: throw new Error(`${r.length}-D output sampling is not yet supported`); } } -function I8(r) { +function U5(r) { return ` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${r.texture2D}(textureSampler, uv).r; } `; } -function w8(r) { +function G5(r) { return ` void setOutput(float val) { ${r.output} = vec4(val, 0, 0, 0); } `; } -function S8(r) { +function H5(r) { return ` void setOutput(vec4 val) { ${r.output} = val; } `; } -function v8(r) { +function q5(r) { return `${r.version} precision highp float; precision highp int; @@ -15567,12 +15614,12 @@ function v8(r) { return fract((p3.x + p3.y) * p3.z); } - ${k8} - ${T8} - ${N8} + ${K5} + ${j5} + ${X5} `; } -var k8 = ` +var K5 = ` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -15585,7 +15632,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var T8 = ` +var j5 = ` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -15594,7 +15641,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var N8 = ` +var X5 = ` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -15604,7 +15651,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var _8 = ` +var Y5 = ` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -15616,16 +15663,16 @@ var _8 = ` return modCoord == 0. ? frag.r : frag.g; } `; -function e$() { +function EE() { return ` int getOutputCoords() { return 0; } `; } -function E8(r, e, t10) { +function Q5(r, e, t6) { let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)]; - return o[0] === 1 ? t10 ? ` + return o[0] === 1 ? t6 ? ` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } @@ -15633,7 +15680,7 @@ function E8(r, e, t10) { int getOutputCoords() { return 2 * int(resultUV.x * ${o[1]}.0); } - ` : o[1] === 1 ? t10 ? ` + ` : o[1] === 1 ? t6 ? ` int getOutputCoords() { return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); } @@ -15641,7 +15688,7 @@ function E8(r, e, t10) { int getOutputCoords() { return 2 * int(resultUV.y * ${o[0]}.0); } - ` : t10 ? ` + ` : t6 ? ` int getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -15656,8 +15703,8 @@ function E8(r, e, t10) { } `; } -function $8(r, e, t10) { - return e[0] === 1 ? t10 ? ` +function Z5(r, e, t6) { + return e[0] === 1 ? t6 ? ` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } @@ -15665,7 +15712,7 @@ function $8(r, e, t10) { int getOutputCoords() { return int(resultUV.x * ${e[1]}.0); } - ` : e[1] === 1 ? t10 ? ` + ` : e[1] === 1 ? t6 ? ` int getOutputCoords() { return int(resultUV.y * float(outTexShape[0])); } @@ -15673,7 +15720,7 @@ function $8(r, e, t10) { int getOutputCoords() { return int(resultUV.y * ${e[0]}.0); } - ` : t10 ? ` + ` : t6 ? ` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -15687,8 +15734,8 @@ function $8(r, e, t10) { } `; } -function R8(r, e, t10) { - if (t10) +function J5(r, e, t6) { + if (t6) return ` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -15724,18 +15771,18 @@ function R8(r, e, t10) { } `; } -function A8(r, e, t10) { - if (t10) +function e8(r, e, t6) { + if (t6) return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ru(["r", "c", "d"], r)} + ${Au(["r", "c", "d"], r)} return ivec3(r, c, d); } `; - let o = is(["r", "c", "d"], r); + let o = us(["r", "c", "d"], r); return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -15746,8 +15793,8 @@ function A8(r, e, t10) { } `; } -function F8(r, e, t10) { - if (t10) +function t8(r, e, t6) { + if (t6) return ` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -15795,18 +15842,18 @@ function F8(r, e, t10) { } `; } -function D8(r, e, t10) { - if (t10) +function r8(r, e, t6) { + if (t6) return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ru(["r", "c", "d", "d2"], r)} + ${Au(["r", "c", "d", "d2"], r)} return ivec4(r, c, d, d2); } `; - let o = is(["r", "c", "d", "d2"], r); + let o = us(["r", "c", "d", "d2"], r); return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -15817,8 +15864,8 @@ function D8(r, e, t10) { } `; } -function P8(r, e) { - let t10 = is(["r", "c", "d", "d2", "d3"], r); +function o8(r, e) { + let t6 = us(["r", "c", "d", "d2", "d3"], r); return ` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, @@ -15826,32 +15873,32 @@ function P8(r, e) { int index = resTexRC.x * ${e[1]} + resTexRC.y; - ${t10} + ${t6} ivec5 outShape = ivec5(r, c, d, d2, d3); return outShape; } `; } -function O8(r, e) { - let t10 = is(["r", "c", "d", "d2", "d3", "d4"], r); +function n8(r, e) { + let t6 = us(["r", "c", "d", "d2", "d3", "d4"], r); return ` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); int index = resTexRC.x * ${e[1]} + resTexRC.y; - ${t10} + ${t6} ivec6 result = ivec6(r, c, d, d2, d3, d4); return result; } `; } -function M8(r, e, t10) { +function s8(r, e, t6) { let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)]; - if (x.arraysEqual(r, e)) - return t10 ? ` + if (y.arraysEqual(r, e)) + return t6 ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); @@ -15862,7 +15909,7 @@ function M8(r, e, t10) { } `; let n = Math.ceil(r[1] / 2); - return t10 ? ` + return t6 ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0)); @@ -15888,8 +15935,8 @@ function M8(r, e, t10) { } `; } -function L8(r, e, t10) { - return x.arraysEqual(r, e) ? t10 ? ` +function a8(r, e, t6) { + return y.arraysEqual(r, e) ? t6 ? ` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -15897,7 +15944,7 @@ function L8(r, e, t10) { ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); } - ` : r[1] === 1 ? t10 ? ` + ` : r[1] === 1 ? t6 ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -15911,7 +15958,7 @@ function L8(r, e, t10) { int index = resTexRC.x * ${e[1]} + resTexRC.y; return ivec2(index, 0); } - ` : r[0] === 1 ? t10 ? ` + ` : r[0] === 1 ? t6 ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -15925,7 +15972,7 @@ function L8(r, e, t10) { int index = resTexRC.x * ${e[1]} + resTexRC.y; return ivec2(0, index); } - ` : t10 ? ` + ` : t6 ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -15945,53 +15992,53 @@ function L8(r, e, t10) { } `; } -function Au(r) { +function Ru(r) { return `offset${r}`; } -function B8(r) { - let e = r.name, t10 = "get" + e.charAt(0).toUpperCase() + e.slice(1), o = Ct(); +function i8(r) { + let e = r.name, t6 = "get" + e.charAt(0).toUpperCase() + e.slice(1), o = St(); return ` - vec4 ${t10}() { + vec4 ${t6}() { return ${o.texture2D}(${e}, halfCR); } `; } -function V8(r, e) { - let t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); +function u8(r, e) { + let t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1); if (r.shapeInfo.isUniform) - return `float ${o}() {return ${t10};}`; + return `float ${o}() {return ${t6};}`; let [n, s] = r.shapeInfo.texShape; if (n === 1 && s === 1) return ` float ${o}() { - return sampleTexture(${t10}, halfCR); + return sampleTexture(${t6}, halfCR); } `; - let a = Au(t10); + let a = Ru(t6); if (e) return ` float ${o}() { - vec2 uv = uvFromFlat(${t10}TexShape[0], ${t10}TexShape[1], ${a}); - return sampleTexture(${t10}, uv); + vec2 uv = uvFromFlat(${t6}TexShape[0], ${t6}TexShape[1], ${a}); + return sampleTexture(${t6}, uv); } `; let [i, p] = r.shapeInfo.texShape; return ` float ${o}() { vec2 uv = uvFromFlat(${i}, ${p}, ${a}); - return sampleTexture(${t10}, uv); + return sampleTexture(${t6}, uv); } `; } -function z8(r, e) { - let t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = r.shapeInfo.texShape, s = Ct(); +function p8(r, e) { + let t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1), n = r.shapeInfo.texShape, s = St(); if (e) return ` vec4 ${o}(int index) { - ivec2 packedTexShape = ivec2(ceil(float(${t10}TexShape[0]) / 2.0), ceil(float(${t10}TexShape[1]) / 2.0)); + ivec2 packedTexShape = ivec2(ceil(float(${t6}TexShape[0]) / 2.0), ceil(float(${t6}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( packedTexShape[0], packedTexShape[1], index); - return ${s.texture2D}(${t10}, uv); + return ${s.texture2D}(${t6}, uv); } `; let a = [Math.ceil(n[0] / 2), Math.ceil(n[1] / 2)]; @@ -15999,61 +16046,61 @@ function z8(r, e) { vec4 ${o}(int index) { vec2 uv = packedUVfrom1D( ${a[0]}, ${a[1]}, index); - return ${s.texture2D}(${t10}, uv); + return ${s.texture2D}(${t6}, uv); } `; } -function W8(r, e) { - let t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); +function c8(r, e) { + let t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1); if (r.shapeInfo.isUniform) return ` float ${o}(int index) { - ${mc(r)} + ${uc(r)} } `; let n = r.shapeInfo.texShape, s = n[0], a = n[1]; if (a === 1 && s === 1) return ` float ${o}(int index) { - return sampleTexture(${t10}, halfCR); + return sampleTexture(${t6}, halfCR); } `; - let i = Au(t10); + let i = Ru(t6); return a === 1 ? e ? ` float ${o}(int index) { - vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${t10}TexShape[0])); - return sampleTexture(${t10}, uv); + vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${t6}TexShape[0])); + return sampleTexture(${t6}, uv); } ` : ` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / ${s}.0); - return sampleTexture(${t10}, uv); + return sampleTexture(${t6}, uv); } ` : s === 1 ? e ? ` float ${o}(int index) { - vec2 uv = vec2((float(index + ${i}) + 0.5) / float(${t10}TexShape[1]), 0.5); - return sampleTexture(${t10}, uv); + vec2 uv = vec2((float(index + ${i}) + 0.5) / float(${t6}TexShape[1]), 0.5); + return sampleTexture(${t6}, uv); } ` : ` float ${o}(int index) { vec2 uv = vec2((float(index + ${i}) + 0.5) / ${a}.0, 0.5); - return sampleTexture(${t10}, uv); + return sampleTexture(${t6}, uv); } ` : e ? ` float ${o}(int index) { - vec2 uv = uvFromFlat(${t10}TexShape[0], ${t10}TexShape[1], index + ${i}); - return sampleTexture(${t10}, uv); + vec2 uv = uvFromFlat(${t6}TexShape[0], ${t6}TexShape[1], index + ${i}); + return sampleTexture(${t6}, uv); } ` : ` float ${o}(int index) { vec2 uv = uvFromFlat(${s}, ${a}, index + ${i}); - return sampleTexture(${t10}, uv); + return sampleTexture(${t6}, uv); } `; } -function U8(r, e) { - let t10 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = s[0], i = s[1], p = Ct(); - if (s != null && x.arraysEqual(t10, s)) +function l8(r, e) { + let t6 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = s[0], i = s[1], p = St(); + if (s != null && y.arraysEqual(t6, s)) return e ? ` vec4 ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); @@ -16076,7 +16123,7 @@ function U8(r, e) { return ${p.texture2D}(${o}, uv); } `; - let u = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)], c = Math.ceil(t10[1] / 2); + let u = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)], c = Math.ceil(t6[1] / 2); return ` vec4 ${n}(int row, int col) { vec2 uv = packedUVfrom2D(${c}, ${u[0]}, ${u[1]}, row, col); @@ -16084,9 +16131,9 @@ function U8(r, e) { } `; } -function G8(r, e) { - let t10 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape; - if (s != null && x.arraysEqual(t10, s)) { +function m8(r, e) { + let t6 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape; + if (s != null && y.arraysEqual(t6, s)) { if (e) return ` float ${n}(int row, int col) { @@ -16094,32 +16141,32 @@ function G8(r, e) { return sampleTexture(${o}, uv); } `; - let m = s[0], f = s[1]; + let m = s[0], d = s[1]; return ` float ${n}(int row, int col) { - vec2 uv = (vec2(col, row) + halfCR) / vec2(${f}.0, ${m}.0); + vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } `; } - let { newShape: a, keptDims: i } = x.squeezeShape(t10), p = a; - if (p.length < t10.length) { - let m = fc(r, p), f = ["row", "col"]; + let { newShape: a, keptDims: i } = y.squeezeShape(t6), p = a; + if (p.length < t6.length) { + let m = pc(r, p), d = ["row", "col"]; return ` - ${lc(m, e)} + ${ic(m, e)} float ${n}(int row, int col) { - return ${n}(${dc(f, i)}); + return ${n}(${cc(d, i)}); } `; } if (r.shapeInfo.isUniform) return ` float ${n}(int row, int col) { - int index = round(dot(vec2(row, col), vec2(${t10[1]}, 1))); - ${mc(r)} + int index = round(dot(vec2(row, col), vec2(${t6[1]}, 1))); + ${uc(r)} } `; - let u = s[0], c = s[1], l = Au(o); + let u = s[0], c = s[1], l = Ru(o); return c === 1 ? e ? ` float ${n}(int row, int col) { float index = dot(vec3(row, col, ${l}), vec3(${o}Shape[1], 1, 1)); @@ -16128,7 +16175,7 @@ function G8(r, e) { } ` : ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${l}), vec3(${t10[1]}, 1, 1)); + float index = dot(vec3(row, col, ${l}), vec3(${t6[1]}, 1, 1)); vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0); return sampleTexture(${o}, uv); } @@ -16140,7 +16187,7 @@ function G8(r, e) { } ` : ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${l}), vec3(${t10[1]}, 1, 1)); + float index = dot(vec3(row, col, ${l}), vec3(${t6[1]}, 1, 1)); vec2 uv = vec2((index + 0.5) / ${c}.0, 0.5); return sampleTexture(${o}, uv); } @@ -16154,24 +16201,24 @@ function G8(r, e) { ` : ` float ${n}(int row, int col) { // Explicitly use integer operations as dot() only works on floats. - int index = row * ${t10[1]} + col + ${l}; + int index = row * ${t6[1]} + col + ${l}; vec2 uv = uvFromFlat(${u}, ${c}, index); return sampleTexture(${o}, uv); } `; } -function H8(r, e) { - let t10 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; - if (t10[0] === 1) { - let m = t10.slice(1), f = [1, 2], d = fc(r, m), h = ["b", "row", "col"]; +function d8(r, e) { + let t6 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; + if (t6[0] === 1) { + let m = t6.slice(1), d = [1, 2], f = pc(r, m), h = ["b", "row", "col"]; return ` - ${JE(d, e)} + ${_E(f, e)} vec4 ${n}(int b, int row, int col) { - return ${n}(${dc(h, f)}); + return ${n}(${cc(h, d)}); } `; } - let i = Ct(); + let i = St(); if (e) return ` vec4 ${n}(int b, int row, int col) { @@ -16183,7 +16230,7 @@ function H8(r, e) { return ${i.texture2D}(${o}, uv); } `; - let p = a[0], u = a[1], c = Math.ceil(t10[2] / 2), l = c * Math.ceil(t10[1] / 2); + let p = a[0], u = a[1], c = Math.ceil(t6[2] / 2), l = c * Math.ceil(t6[1] / 2); return ` vec4 ${n}(int b, int row, int col) { vec2 uv = packedUVfrom3D( @@ -16192,14 +16239,14 @@ function H8(r, e) { } `; } -function q8(r, e) { - let t10 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[1] * t10[2], a = t10[2], { newShape: i, keptDims: p } = x.squeezeShape(t10), u = i; - if (u.length < t10.length) { - let h = fc(r, u), g = ["row", "col", "depth"]; +function f8(r, e) { + let t6 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t6[1] * t6[2], a = t6[2], { newShape: i, keptDims: p } = y.squeezeShape(t6), u = i; + if (u.length < t6.length) { + let h = pc(r, u), g = ["row", "col", "depth"]; return ` - ${lc(h, e)} + ${ic(h, e)} float ${n}(int row, int col, int depth) { - return ${n}(${dc(g, p)}); + return ${n}(${cc(g, p)}); } `; } @@ -16208,11 +16255,11 @@ function q8(r, e) { float ${n}(int row, int col, int depth) { int index = round(dot(vec3(row, col, depth), vec3(${s}, ${a}, 1))); - ${mc(r)} + ${uc(r)} } `; - let c = r.shapeInfo.texShape, l = c[0], m = c[1], f = r.shapeInfo.flatOffset; - if (m === s && f == null) + let c = r.shapeInfo.texShape, l = c[0], m = c[1], d = r.shapeInfo.flatOffset; + if (m === s && d == null) return e ? ` float ${n}(int row, int col, int depth) { int stride1 = ${o}Shape[2]; @@ -16231,7 +16278,7 @@ function q8(r, e) { return sampleTexture(${o}, uv); } `; - if (m === a && f == null) + if (m === a && d == null) return e ? ` float ${n}(int row, int col, int depth) { float texR = dot(vec2(row, col), vec2(${o}Shape[1], 1)); @@ -16241,68 +16288,68 @@ function q8(r, e) { } ` : ` float ${n}(int row, int col, int depth) { - float texR = dot(vec2(row, col), vec2(${t10[1]}, 1)); + float texR = dot(vec2(row, col), vec2(${t6[1]}, 1)); float texC = float(depth); vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${m}.0, ${l}.0); return sampleTexture(${o}, uv); } `; - let d = Au(o); + let f = Ru(o); return e ? ` float ${n}(int row, int col, int depth) { // Explicitly use integer operations as dot() only works on floats. int stride0 = ${o}Shape[1] * ${o}Shape[2]; int stride1 = ${o}Shape[2]; - int index = row * stride0 + col * stride1 + depth + ${d}; + int index = row * stride0 + col * stride1 + depth + ${f}; vec2 uv = uvFromFlat(${o}TexShape[0], ${o}TexShape[1], index); return sampleTexture(${o}, uv); } ` : ` float ${n}(int row, int col, int depth) { // Explicitly use integer operations as dot() only works on floats. - int index = row * ${s} + col * ${a} + depth + ${d}; + int index = row * ${s} + col * ${a} + depth + ${f}; vec2 uv = uvFromFlat(${l}, ${m}, index); return sampleTexture(${o}, uv); } `; } -function K8(r, e) { - let t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = Ct(); +function h8(r, e) { + let t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1), n = St(); if (e) return ` vec4 ${o}(int b2, int b, int row, int col) { - int valuesPerRow = int(ceil(float(${t10}Shape[3]) / 2.0)); - int texelsInBatch = valuesPerRow * int(ceil(float(${t10}Shape[2]) / 2.0)); + int valuesPerRow = int(ceil(float(${t6}Shape[3]) / 2.0)); + int texelsInBatch = valuesPerRow * int(ceil(float(${t6}Shape[2]) / 2.0)); int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2); - texelsInBatch *= ${t10}Shape[1]; + texelsInBatch *= ${t6}Shape[1]; index = b2 * texelsInBatch + index; - ivec2 packedTexShape = ivec2(ceil(float(${t10}TexShape[0]) / 2.0), ceil(float(${t10}TexShape[1]) / 2.0)); + ivec2 packedTexShape = ivec2(ceil(float(${t6}TexShape[0]) / 2.0), ceil(float(${t6}TexShape[1]) / 2.0)); int texR = index / packedTexShape[1]; int texC = index - texR * packedTexShape[1]; - vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${n.texture2D}(${t10}, uv); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${n.texture2D}(${t6}, uv); } `; - let s = r.shapeInfo.logicalShape, a = s.length, i = r.shapeInfo.texShape, p = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)], u = p[0], c = p[1], l = Math.ceil(s[a - 1] / 2), m = l * Math.ceil(s[a - 2] / 2), f = "int b, int row, int col", d = `b * ${m} + (row / 2) * ${l} + (col / 2)`; + let s = r.shapeInfo.logicalShape, a = s.length, i = r.shapeInfo.texShape, p = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)], u = p[0], c = p[1], l = Math.ceil(s[a - 1] / 2), m = l * Math.ceil(s[a - 2] / 2), d = "int b, int row, int col", f = `b * ${m} + (row / 2) * ${l} + (col / 2)`; for (let h = 2; h < a - 1; h++) - f = `int b${h}, ` + f, m *= s[a - h - 1], d = `b${h} * ${m} + ` + d; + d = `int b${h}, ` + d, m *= s[a - h - 1], f = `b${h} * ${m} + ` + f; return ` - vec4 ${o}(${f}) { - int index = ${d}; + vec4 ${o}(${d}) { + int index = ${f}; int texR = index / ${c}; int texC = index - texR * ${c}; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${c}, ${u}); - return ${n.texture2D}(${t10}, uv); + return ${n.texture2D}(${t6}, uv); } `; } -function j8(r, e) { - let t10 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[3], a = t10[2] * s, i = t10[1] * a, { newShape: p, keptDims: u } = x.squeezeShape(t10); - if (p.length < t10.length) { - let b = fc(r, p), C = ["row", "col", "depth", "depth2"]; +function g8(r, e) { + let t6 = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t6[3], a = t6[2] * s, i = t6[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(t6); + if (p.length < t6.length) { + let b = pc(r, p), C = ["row", "col", "depth", "depth2"]; return ` - ${lc(b, e)} + ${ic(b, e)} float ${n}(int row, int col, int depth, int depth2) { - return ${n}(${dc(C, u)}); + return ${n}(${cc(C, u)}); } `; } @@ -16311,14 +16358,14 @@ function j8(r, e) { float ${n}(int row, int col, int depth, int depth2) { int index = round(dot(vec4(row, col, depth, depth2), vec4(${i}, ${a}, ${s}, 1))); - ${mc(r)} + ${uc(r)} } `; - let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], f = l[1], d = `int stride2 = ${o}Shape[3];`, h = `int stride1 = ${o}Shape[2] * stride2;`, g = `int stride0 = ${o}Shape[1] * stride1;`; - if (f === i && c == null) + let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], d = l[1], f = `int stride2 = ${o}Shape[3];`, h = `int stride1 = ${o}Shape[2] * stride2;`, g = `int stride0 = ${o}Shape[1] * stride1;`; + if (d === i && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { - ${d} + ${f} ${h} float texR = float(row); float texC = @@ -16335,11 +16382,11 @@ function j8(r, e) { dot(vec3(col, depth, depth2), vec3(${a}, ${s}, 1)); vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${f}.0, ${m}.0); + vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } `; - if (f === s && c == null) + if (d === s && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { float texR = dot(vec3(row, col, depth), @@ -16352,23 +16399,23 @@ function j8(r, e) { ` : ` float ${n}(int row, int col, int depth, int depth2) { float texR = dot(vec3(row, col, depth), - vec3(${t10[1] * t10[2]}, ${t10[2]}, 1)); + vec3(${t6[1] * t6[2]}, ${t6[2]}, 1)); float texC = float(depth2); vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${f}.0, ${m}.0); + vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } `; - let y = Au(o); + let x = Ru(o); return e ? ` float ${n}(int row, int col, int depth, int depth2) { // Explicitly use integer operations as dot() only works on floats. - ${d} + ${f} ${h} ${g} int index = row * stride0 + col * stride1 + depth * stride2 + depth2; - vec2 uv = uvFromFlat(${o}TexShape[0], ${o}TexShape[1], index + ${y}); + vec2 uv = uvFromFlat(${o}TexShape[0], ${o}TexShape[1], index + ${x}); return sampleTexture(${o}, uv); } ` : ` @@ -16376,19 +16423,19 @@ function j8(r, e) { // Explicitly use integer operations as dot() only works on floats. int index = row * ${i} + col * ${a} + depth * ${s} + depth2; - vec2 uv = uvFromFlat(${m}, ${f}, index + ${y}); + vec2 uv = uvFromFlat(${m}, ${d}, index + ${x}); return sampleTexture(${o}, uv); } `; } -function X8(r) { - let e = r.shapeInfo.logicalShape, t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = e[4], s = e[3] * n, a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = x.squeezeShape(e); +function x8(r) { + let e = r.shapeInfo.logicalShape, t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1), n = e[4], s = e[3] * n, a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(e); if (p.length < e.length) { - let h = fc(r, p), g = ["row", "col", "depth", "depth2", "depth3"]; + let h = pc(r, p), g = ["row", "col", "depth", "depth2", "depth3"]; return ` - ${lc(h)} + ${ic(h)} float ${o}(int row, int col, int depth, int depth2, int depth3) { - return ${o}(${dc(g, u)}); + return ${o}(${cc(g, u)}); } `; } @@ -16399,22 +16446,22 @@ function X8(r) { vec4(row, col, depth, depth2), vec4(${i}, ${a}, ${s}, ${n})) + depth3; - ${mc(r)} + ${uc(r)} } `; - let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], f = l[1]; - if (f === i && c == null) + let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], d = l[1]; + if (d === i && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { int texR = row; float texC = dot(vec4(col, depth, depth2, depth3), vec4(${a}, ${s}, ${n}, 1)); vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${f}.0, ${m}.0); - return sampleTexture(${t10}, uv); + vec2(${d}.0, ${m}.0); + return sampleTexture(${t6}, uv); } `; - if (f === n && c == null) + if (d === n && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { float texR = dot( @@ -16423,30 +16470,30 @@ function X8(r) { ${e[2] * e[3]}, ${e[3]}, 1)); int texC = depth3; vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${f}.0, ${m}.0); - return sampleTexture(${t10}, uv); + vec2(${d}.0, ${m}.0); + return sampleTexture(${t6}, uv); } `; - let d = Au(t10); + let f = Ru(t6); return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { // Explicitly use integer operations as dot() only works on floats. int index = row * ${i} + col * ${a} + depth * ${s} + - depth2 * ${n} + depth3 + ${d}; - vec2 uv = uvFromFlat(${m}, ${f}, index); - return sampleTexture(${t10}, uv); + depth2 * ${n} + depth3 + ${f}; + vec2 uv = uvFromFlat(${m}, ${d}, index); + return sampleTexture(${t6}, uv); } `; } -function Y8(r) { - let e = r.shapeInfo.logicalShape, t10 = r.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), { newShape: n, keptDims: s } = x.squeezeShape(e); +function y8(r) { + let e = r.shapeInfo.logicalShape, t6 = r.name, o = "get" + t6.charAt(0).toUpperCase() + t6.slice(1), { newShape: n, keptDims: s } = y.squeezeShape(e); if (n.length < e.length) { - let g = fc(r, n), y = ["row", "col", "depth", "depth2", "depth3", "depth4"]; + let g = pc(r, n), x = ["row", "col", "depth", "depth2", "depth3", "depth4"]; return ` - ${lc(g)} + ${ic(g)} float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { - return ${o}(${dc(y, s)}); + return ${o}(${cc(x, s)}); } `; } @@ -16461,11 +16508,11 @@ function Y8(r) { dot( vec2(depth3, depth4), vec2(${a}, 1))); - ${mc(r)} + ${uc(r)} } `; - let l = r.shapeInfo.flatOffset, m = r.shapeInfo.texShape, f = m[0], d = m[1]; - if (d === c && l == null) + let l = r.shapeInfo.flatOffset, m = r.shapeInfo.texShape, d = m[0], f = m[1]; + if (f === c && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -16474,11 +16521,11 @@ function Y8(r) { vec4(${u}, ${p}, ${i}, ${a})) + float(depth4); vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${d}.0, ${f}.0); - return sampleTexture(${t10}, uv); + vec2(${f}.0, ${d}.0); + return sampleTexture(${t6}, uv); } `; - if (d === a && l == null) + if (f === a && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -16489,79 +16536,79 @@ function Y8(r) { ${e[4]})) + float(depth3); int texC = depth4; vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${d}.0, ${f}.0); - return sampleTexture(${t10}, uv); + vec2(${f}.0, ${d}.0); + return sampleTexture(${t6}, uv); } `; - let h = Au(t10); + let h = Ru(t6); return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { // Explicitly use integer operations as dot() only works on floats. int index = row * ${c} + col * ${u} + depth * ${p} + depth2 * ${i} + depth3 * ${a} + depth4 + ${h}; - vec2 uv = uvFromFlat(${f}, ${d}, index); - return sampleTexture(${t10}, uv); + vec2 uv = uvFromFlat(${d}, ${f}, index); + return sampleTexture(${t6}, uv); } `; } -function mc(r) { - let e = r.name, t10 = x.sizeFromShape(r.shapeInfo.logicalShape); - return t10 < 2 ? `return ${e};` : ` - for (int i = 0; i < ${t10}; i++) { +function uc(r) { + let e = r.name, t6 = y.sizeFromShape(r.shapeInfo.logicalShape); + return t6 < 2 ? `return ${e};` : ` + for (int i = 0; i < ${t6}; i++) { if (i == index) { return ${e}[i]; } } `; } -function Q8(r, e) { - let t10 = r.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = r.shapeInfo.logicalShape.length, a = e.logicalShape.length, i = QE(r.shapeInfo.logicalShape, e.logicalShape), p = _e(a), u = a - s, c, l = ["x", "y", "z", "w", "u", "v"]; +function b8(r, e) { + let t6 = r.name, o = t6.charAt(0).toUpperCase() + t6.slice(1), n = "get" + o + "AtOutCoords", s = r.shapeInfo.logicalShape.length, a = e.logicalShape.length, i = NE(r.shapeInfo.logicalShape, e.logicalShape), p = _e(a), u = a - s, c, l = ["x", "y", "z", "w", "u", "v"]; s === 0 ? c = "" : a < 2 && i.length >= 1 ? c = "coords = 0;" : c = i.map((b) => `coords.${l[b + u]} = 0;`).join(` `); let m = ""; a < 2 && s > 0 ? m = "coords" : m = r.shapeInfo.logicalShape.map((b, C) => `coords.${l[C + u]}`).join(", "); - let f = "return outputValue;", h = x.sizeFromShape(r.shapeInfo.logicalShape) === 1, y = x.sizeFromShape(e.logicalShape) === 1; - if (s === 1 && !h && !y) - f = ` + let d = "return outputValue;", h = y.sizeFromShape(r.shapeInfo.logicalShape) === 1, x = y.sizeFromShape(e.logicalShape) === 1; + if (s === 1 && !h && !x) + d = ` return vec4(outputValue.xy, outputValue.xy); `; - else if (h && !y) - a === 1 ? f = ` + else if (h && !x) + a === 1 ? d = ` return vec4(outputValue.x, outputValue.x, 0., 0.); - ` : f = ` + ` : d = ` return vec4(outputValue.x); `; else if (i.length) { let b = s - 2, C = s - 1; - i.indexOf(b) > -1 && i.indexOf(C) > -1 ? f = "return vec4(outputValue.x);" : i.indexOf(b) > -1 ? f = "return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);" : i.indexOf(C) > -1 && (f = "return vec4(outputValue.xx, outputValue.zz);"); + i.indexOf(b) > -1 && i.indexOf(C) > -1 ? d = "return vec4(outputValue.x);" : i.indexOf(b) > -1 ? d = "return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);" : i.indexOf(C) > -1 && (d = "return vec4(outputValue.xx, outputValue.zz);"); } return ` vec4 ${n}() { ${p} coords = getOutputCoords(); ${c} vec4 outputValue = get${o}(${m}); - ${f} + ${d} } `; } -function Z8(r, e) { - let t10 = r.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = e.texShape, a = r.shapeInfo.texShape, i = r.shapeInfo.logicalShape.length, p = e.logicalShape.length; - if (!r.shapeInfo.isUniform && i === p && r.shapeInfo.flatOffset == null && x.arraysEqual(a, s)) +function C8(r, e) { + let t6 = r.name, o = t6.charAt(0).toUpperCase() + t6.slice(1), n = "get" + o + "AtOutCoords", s = e.texShape, a = r.shapeInfo.texShape, i = r.shapeInfo.logicalShape.length, p = e.logicalShape.length; + if (!r.shapeInfo.isUniform && i === p && r.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) return ` float ${n}() { - return sampleTexture(${t10}, resultUV); + return sampleTexture(${t6}, resultUV); } `; - let u = _e(p), c = QE(r.shapeInfo.logicalShape, e.logicalShape), l = p - i, m, f = ["x", "y", "z", "w", "u", "v"]; - i === 0 ? m = "" : p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((h) => `coords.${f[h + l]} = 0;`).join(` + let u = _e(p), c = NE(r.shapeInfo.logicalShape, e.logicalShape), l = p - i, m, d = ["x", "y", "z", "w", "u", "v"]; + i === 0 ? m = "" : p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((h) => `coords.${d[h + l]} = 0;`).join(` `); - let d = ""; - return p < 2 && i > 0 ? d = "coords" : d = r.shapeInfo.logicalShape.map((h, g) => `coords.${f[g + l]}`).join(", "), ` + let f = ""; + return p < 2 && i > 0 ? f = "coords" : f = r.shapeInfo.logicalShape.map((h, g) => `coords.${d[g + l]}`).join(", "), ` float ${n}() { ${u} coords = getOutputCoords(); ${m} - return get${o}(${d}); + return get${o}(${f}); } `; } @@ -16580,77 +16627,77 @@ function _e(r) { return "ivec6"; throw Error(`GPU for rank ${r} is not yet supported`); } -function qd(r, e, t10) { - let { newShape: o, keptDims: n } = x.squeezeShape(e), s = e.length, a = r && s === 3 && e[0] === 1, i = a ? e.slice(1) : o, p = !r && s > 1 && !x.arraysEqual(e, t10) && o.length < s || a; +function Of(r, e, t6) { + let { newShape: o, keptDims: n } = y.squeezeShape(e), s = e.length, a = r && s === 3 && e[0] === 1, i = a ? e.slice(1) : o, p = !r && s > 1 && !y.arraysEqual(e, t6) && o.length < s || a; return { useSqueezeShape: p, uniformShape: p ? i : e, keptDims: n }; } -function fc(r, e) { - let t10 = JSON.parse(JSON.stringify(r)); - return t10.shapeInfo.logicalShape = e, t10; +function pc(r, e) { + let t6 = JSON.parse(JSON.stringify(r)); + return t6.shapeInfo.logicalShape = e, t6; } -function dc(r, e) { - return e.map((t10) => r[t10]).join(", "); +function cc(r, e) { + return e.map((t6) => r[t6]).join(", "); } -function r$(r, e, t10, o) { - let n = t10.map((c, l) => { +function AE(r, e, t6, o) { + let n = t6.map((c, l) => { let m = { logicalShape: c.shape, texShape: c.isUniform ? null : c.texData.texShape, isUniform: c.isUniform, isPacked: c.isUniform ? false : c.texData.isPacked, flatOffset: null }; return c.texData != null && c.texData.slice != null && c.texData.slice.flatOffset > 0 && (m.flatOffset = c.texData.slice.flatOffset), { name: e.variableNames[l], shapeInfo: m }; - }), s = n.map((c) => c.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = ZE(n, a, e), p = WI(r.gl, i), u = r.createProgram(p); - return P().get("ENGINE_COMPILE_ONLY") ? { program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a, uniformLocations: null, customUniformLocations: null, infLoc: null, nanLoc: null, inShapesLocations: null, inTexShapesLocations: null, outShapeLocation: null, outShapeStridesLocation: null, outTexShapeLocation: null } : Object.assign({ program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, aw(r, e, u)); + }), s = n.map((c) => c.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = TE(n, a, e), p = MS(r.gl, i), u = r.createProgram(p); + return O().get("ENGINE_COMPILE_ONLY") ? { program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a, uniformLocations: null, customUniformLocations: null, infLoc: null, nanLoc: null, inShapesLocations: null, inTexShapesLocations: null, outShapeLocation: null, outShapeStridesLocation: null, outTexShapeLocation: null } : Object.assign({ program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, tw(r, e, u)); } -function aw(r, e, t10) { +function tw(r, e, t6) { let o = {}, n = {}, s = {}, a = [], i, p, u, c = null, l = null; - l = r.getUniformLocation(t10, "NAN", false), P().getNumber("WEBGL_VERSION") === 1 && (c = r.getUniformLocation(t10, "INFINITY", false)); + l = r.getUniformLocation(t6, "NAN", false), O().getNumber("WEBGL_VERSION") === 1 && (c = r.getUniformLocation(t6, "INFINITY", false)); let m = false; - for (let f = 0; f < e.variableNames.length; f++) { - let d = e.variableNames[f]; - o[d] = r.getUniformLocation(t10, d, m), o[`offset${d}`] = r.getUniformLocation(t10, `offset${d}`, m), e.enableShapeUniforms && (n[`${d}Shape`] = r.getUniformLocation(t10, `${d}Shape`, m), s[`${d}TexShape`] = r.getUniformLocation(t10, `${d}TexShape`, m)); + for (let d = 0; d < e.variableNames.length; d++) { + let f = e.variableNames[d]; + o[f] = r.getUniformLocation(t6, f, m), o[`offset${f}`] = r.getUniformLocation(t6, `offset${f}`, m), e.enableShapeUniforms && (n[`${f}Shape`] = r.getUniformLocation(t6, `${f}Shape`, m), s[`${f}TexShape`] = r.getUniformLocation(t6, `${f}TexShape`, m)); } - return e.enableShapeUniforms && (i = r.getUniformLocation(t10, "outShape", m), u = r.getUniformLocation(t10, "outShapeStrides", m), p = r.getUniformLocation(t10, "outTexShape", m)), e.customUniforms && e.customUniforms.forEach((f, d) => { - a[d] = r.getUniformLocation(t10, f.name, m); + return e.enableShapeUniforms && (i = r.getUniformLocation(t6, "outShape", m), u = r.getUniformLocation(t6, "outShapeStrides", m), p = r.getUniformLocation(t6, "outTexShape", m)), e.customUniforms && e.customUniforms.forEach((d, f) => { + a[f] = r.getUniformLocation(t6, d.name, m); }), { uniformLocations: o, customUniformLocations: a, infLoc: c, nanLoc: l, inShapesLocations: n, inTexShapesLocations: s, outShapeLocation: i, outShapeStridesLocation: u, outTexShapeLocation: p }; } -function t$(r, e) { +function $E(r, e) { if (r.length !== e.length) throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`); - r.forEach((t10, o) => { - let n = t10.logicalShape, s = e[o], a = s.shape; - if (!x.arraysEqual(n, a)) + r.forEach((t6, o) => { + let n = t6.logicalShape, s = e[o], a = s.shape; + if (!y.arraysEqual(n, a)) throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`); - if (t10.isUniform && s.isUniform) + if (t6.isUniform && s.isUniform) return; - let i = t10.texShape, p = s.isUniform ? null : s.texData.texShape; - if (!x.arraysEqual(i, p)) + let i = t6.texShape, p = s.isUniform ? null : s.texData.texShape; + if (!y.arraysEqual(i, p)) throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`); }); } -function o$(r, e, t10, o, n) { - e.program.enableShapeUniforms || (t$(e.inShapeInfos, t10), t$([e.outShapeInfo], [o])); +function RE(r, e, t6, o, n) { + e.program.enableShapeUniforms || ($E(e.inShapeInfos, t6), $E([e.outShapeInfo], [o])); let s = o.texData.texture, a = o.texData.texShape; - o.texData.isPacked ? r.setOutputPackedMatrixTexture(s.texture, a[0], a[1]) : r.setOutputMatrixTexture(s.texture, a[0], a[1]), r.setProgram(e.webGLProgram), P().getNumber("WEBGL_VERSION") === 1 && e.infLoc !== null && r.gl.uniform1f(e.infLoc, 1 / 0), e.nanLoc !== null && r.gl.uniform1f(e.nanLoc, NaN), t10.forEach((p, u) => { - let c = e.program.variableNames[u], l = e.uniformLocations[c], m = e.uniformLocations[`offset${c}`], f = e.inShapesLocations[`${c}Shape`], d = e.inTexShapesLocations[`${c}TexShape`]; - if (f) { - let { uniformShape: h } = qd(e.program.packedInputs, p.shape, p.texData.texShape); + o.texData.isPacked ? r.setOutputPackedMatrixTexture(s.texture, a[0], a[1]) : r.setOutputMatrixTexture(s.texture, a[0], a[1]), r.setProgram(e.webGLProgram), O().getNumber("WEBGL_VERSION") === 1 && e.infLoc !== null && r.gl.uniform1f(e.infLoc, 1 / 0), e.nanLoc !== null && r.gl.uniform1f(e.nanLoc, NaN), t6.forEach((p, u) => { + let c = e.program.variableNames[u], l = e.uniformLocations[c], m = e.uniformLocations[`offset${c}`], d = e.inShapesLocations[`${c}Shape`], f = e.inTexShapesLocations[`${c}TexShape`]; + if (d) { + let { uniformShape: h } = Of(e.program.packedInputs, p.shape, p.texData.texShape); switch (h.length) { case 1: - r.gl.uniform1iv(f, new Int32Array(h)); + r.gl.uniform1iv(d, new Int32Array(h)); break; case 2: - r.gl.uniform2iv(f, new Int32Array(h)); + r.gl.uniform2iv(d, new Int32Array(h)); break; case 3: - r.gl.uniform3iv(f, new Int32Array(h)); + r.gl.uniform3iv(d, new Int32Array(h)); break; case 4: - r.gl.uniform4iv(f, new Int32Array(h)); + r.gl.uniform4iv(d, new Int32Array(h)); break; default: break; } } - if (d && r.gl.uniform2i(d, p.texData.texShape[0], p.texData.texShape[1]), l != null) { + if (f && r.gl.uniform2i(f, p.texData.texShape[0], p.texData.texShape[1]), l != null) { if (p.isUniform) { - if (x.sizeFromShape(p.shape) < 2) + if (y.sizeFromShape(p.shape) < 2) r.gl.uniform1f(l, p.uniformValues[0]); else { let h = p.uniformValues; @@ -16680,7 +16727,7 @@ function o$(r, e, t10, o, n) { break; } if (e.outShapeStridesLocation) { - let p = x.computeStrides(o.shape); + let p = y.computeStrides(o.shape); switch (o.shape.length) { case 2: r.gl.uniform1iv(e.outShapeStridesLocation, new Int32Array(p)); @@ -16717,41 +16764,41 @@ function o$(r, e, t10, o, n) { throw Error(`uniform type ${p.type} is not supported yet.`); }), r.executeProgram(); } -function n$(r, e, t10) { +function FE(r, e, t6) { let o = ""; - e.concat(t10).forEach((a) => { + e.concat(t6).forEach((a) => { let i = a.texData != null && a.texData.slice != null && a.texData.slice.flatOffset > 0; if (r.enableShapeUniforms && !a.isUniform) { - let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: c, keptDims: l } = qd(r.packedInputs, a.shape, p), m = "", f = "", d = ""; + let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: c, keptDims: l } = Of(r.packedInputs, a.shape, p), m = "", d = "", f = ""; if (c.length === 1 && r.packedInputs) { let k = [Math.ceil(p[0] / 2), Math.ceil(p[1] / 2)]; m = `${k[0] > 1}_${k[1] > 1}`; } else if (c.length === 2 && !r.packedInputs) - f = `${c[0] > 1}_${c[1] > 1}`; + d = `${c[0] > 1}_${c[1] > 1}`; else if (c.length > 2 && !r.packedInputs) { - let k = x.computeStrides(c); - d = `${k[0] === p[1]}_${k[k.length - 1] === p[1]}`; + let k = y.computeStrides(c); + f = `${k[0] === p[1]}_${k[k.length - 1] === p[1]}`; } - let h = a.shape.length, g = c.length === 2 && x.arraysEqual(a.shape, p), y = x.sizeFromShape(a.shape) === 1, b = I.getBroadcastDims(a.shape, t10.shape), C = !r.packedInputs && h === t10.shape.length && x.arraysEqual(p, t10.texData.texShape), w = r.packedInputs || c.length > 2 ? "" : `${p[0] > 1}_${p[1] > 1}`; - o += `${h}_${C}_${u ? l : ""}_${c.length}_${y}_${b}_${g}_${m}_${f}_${d}_${w}_${i}`; + let h = a.shape.length, g = c.length === 2 && y.arraysEqual(a.shape, p), x = y.sizeFromShape(a.shape) === 1, b = S.getBroadcastDims(a.shape, t6.shape), C = !r.packedInputs && h === t6.shape.length && y.arraysEqual(p, t6.texData.texShape), w = r.packedInputs || c.length > 2 ? "" : `${p[0] > 1}_${p[1] > 1}`; + o += `${h}_${C}_${u ? l : ""}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${w}_${i}`; } else { let p = a.isUniform ? "uniform" : a.texData.texShape; o += `${a.shape}_${p}_${i}`; } }); let n = r.userCode, s = r.constructor.name; - return s += "_" + o + "_" + n + `${P().getNumber("WEBGL_VERSION")}`, s; + return s += "_" + o + "_" + n + `${O().getNumber("WEBGL_VERSION")}`, s; } -function lt(r) { - return P().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r <= 4; +function ct(r) { + return O().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r <= 4; } -var Kd = class { +var Pf = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = ki.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let t10 = Ct(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = Mi.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let t6 = St(); + this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ru(["r", "c", "d"], e) : is(["r", "c", "d"], e)} + ${this.enableShapeUniforms ? Au(["r", "c", "d"], e) : us(["r", "c", "d"], e)} return ivec3(r, c, d); } @@ -16767,18 +16814,18 @@ var Kd = class { result[i] = getA(rc.x, rc.y, rc.z); } - ${t10.output} = result; + ${t6.output} = result; } `; } }; -var jd = class { +var Mf = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = ki.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let t10 = Ct(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = Mi.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let t6 = St(); + this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ru(["r", "c", "d"], e) : is(["r", "c", "d"], e)} + ${this.enableShapeUniforms ? Au(["r", "c", "d"], e) : us(["r", "c", "d"], e)} return ivec3(r, c, d); } @@ -16794,58 +16841,58 @@ var jd = class { result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); } - ${t10.output} = result; + ${t6.output} = result; } `; } }; -var Xd = class { +var Lf = class { constructor(e) { this.variableNames = ["A"], this.outTexUsage = ir.DOWNLOAD; - let t10 = Ct(); + let t6 = St(); this.outputShape = e, this.userCode = ` - ${Hd} + ${Df} void main() { float x = getAAtOutCoords(); - ${t10.output} = encode_float(x); + ${t6.output} = encode_float(x); } `; } }; -var Yd = class { +var Bf = class { constructor(e) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outTexUsage = ir.DOWNLOAD; - let t10 = Ct(); + let t6 = St(); this.outputShape = e, this.userCode = ` - ${Hd} + ${Df} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); - ${t10.output} = encode_float(x); + ${t6.output} = encode_float(x); } `; } }; -var tY = { R: 0, G: 1, B: 2, A: 3 }; -var Al = class { - constructor(e, t10 = false, o = "RGBA") { +var I8 = { R: 0, G: 1, B: 2, A: 3 }; +var vl = class { + constructor(e, t6 = false, o = "RGBA") { this.variableNames = ["A"], this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let n = Ct(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); + let n = St(); + this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length); let s = "result"; - t10 && (s = "floor(result * 255. + 0.5)"); + t6 && (s = "floor(result * 255. + 0.5)"); let a = ""; for (let i = 0; i < o.length; i++) { let p = o[i]; a += ` if(offset == ${i}) { - result = values[${tY[p]}]; + result = values[${I8[p]}]; }`; } this.userCode = ` - ${this.enableShapeUniforms ? pc() : uc(e)} + ${this.enableShapeUniforms ? sc() : nc(e)} void main() { ivec3 coords = getOutputCoords(); @@ -16867,13 +16914,13 @@ var Al = class { `; } }; -var Qd = class { - constructor(e, t10 = false) { +var Vf = class { + constructor(e, t6 = false) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let o = Ct(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); + let o = St(); + this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length); let n = "", s = "result"; - t10 && (s = "floor(result * 255. + 0.5)"); + t6 && (s = "floor(result * 255. + 0.5)"); for (let a = 0; a <= 1; a++) for (let i = 0; i <= 1; i++) { let p = a * 2 + i; @@ -16908,7 +16955,7 @@ var Qd = class { `; } this.userCode = ` - ${this.enableShapeUniforms ? pc() : uc(e)} + ${this.enableShapeUniforms ? sc() : nc(e)} void main() { ivec3 coords = getOutputCoords(); @@ -16926,10 +16973,10 @@ var Qd = class { `; } }; -var Sw = {}; -Be(Sw, { bindVertexProgramAttributeStreams: () => hw, createBufferFromOutputTexture: () => yw, createFloat16MatrixTexture: () => lw, createFloat16PackedMatrixTexture: () => dw, createFloat32MatrixTexture: () => cw, createIndexBuffer: () => pw, createPackedMatrixTexture: () => fw, createUnsignedBytesMatrixTexture: () => mw, createVertexBuffer: () => uw, createVertexShader: () => iw, downloadByteEncodedFloatMatrixFromOutputTexture: () => Cw, downloadFloat32MatrixFromBuffer: () => bw, downloadMatrixFromPackedOutputTexture: () => ww, downloadPackedMatrixFromBuffer: () => Iw, getInternalFormatForFloat16MatrixTexture: () => Jd, getInternalFormatForFloat16PackedMatrixTexture: () => rh, getInternalFormatForFloat32MatrixTexture: () => Zd, getInternalFormatForPackedMatrixTexture: () => th, getInternalFormatForUnsignedBytesMatrixTexture: () => eh, uploadDenseMatrixToTexture: () => gw, uploadPixelDataToTexture: () => xw }); -function iw(r) { - let e = Ct(), t10 = `${e.version} +var yw = {}; +Ue(yw, { bindVertexProgramAttributeStreams: () => cw, createBufferFromOutputTexture: () => dw, createFloat16MatrixTexture: () => aw, createFloat16PackedMatrixTexture: () => pw, createFloat32MatrixTexture: () => sw, createIndexBuffer: () => nw, createPackedMatrixTexture: () => uw, createUnsignedBytesMatrixTexture: () => iw, createVertexBuffer: () => ow, createVertexShader: () => rw, downloadByteEncodedFloatMatrixFromOutputTexture: () => hw, downloadFloat32MatrixFromBuffer: () => fw, downloadMatrixFromPackedOutputTexture: () => xw, downloadPackedMatrixFromBuffer: () => gw, getInternalFormatForFloat16MatrixTexture: () => Wf, getInternalFormatForFloat16PackedMatrixTexture: () => Hf, getInternalFormatForFloat32MatrixTexture: () => zf, getInternalFormatForPackedMatrixTexture: () => Gf, getInternalFormatForUnsignedBytesMatrixTexture: () => Uf, uploadDenseMatrixToTexture: () => lw, uploadPixelDataToTexture: () => mw }); +function rw(r) { + let e = St(), t6 = `${e.version} precision highp float; ${e.attribute} vec3 clipSpacePos; ${e.attribute} vec2 uv; @@ -16939,159 +16986,167 @@ function iw(r) { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`; - return zI(r, t10); + return PS(r, t6); } -function uw(r) { +function ow(r) { let e = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]); - return HI(r, e); + return VS(r, e); } -function pw(r) { +function nw(r) { let e = new Uint16Array([0, 1, 2, 2, 1, 3]); - return qI(r, e); + return zS(r, e); } -function Fl(r, e, t10, o, n, s) { - jI(e, t10); - let a = KI(r), i = r.TEXTURE_2D; - return me(r, () => r.bindTexture(i, a)), me(r, () => r.texParameteri(i, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE)), me(r, () => r.texParameteri(i, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE)), me(r, () => r.texParameteri(i, r.TEXTURE_MIN_FILTER, r.NEAREST)), me(r, () => r.texParameteri(i, r.TEXTURE_MAG_FILTER, r.NEAREST)), P().getNumber("WEBGL_VERSION") === 1 ? me(r, () => r.texImage2D(i, 0, o, e, t10, 0, n, s, null)) : me(r, () => r.texStorage2D(i, 1, o, e, t10)), me(r, () => r.bindTexture(r.TEXTURE_2D, null)), { texture: a, texShape: [t10, e] }; +function kl(r, e, t6, o, n, s) { + US(e, t6); + let a = WS(r), i = r.TEXTURE_2D; + return ce(r, () => r.bindTexture(i, a)), ce(r, () => r.texParameteri(i, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE)), ce(r, () => r.texParameteri(i, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE)), ce(r, () => r.texParameteri(i, r.TEXTURE_MIN_FILTER, r.NEAREST)), ce(r, () => r.texParameteri(i, r.TEXTURE_MAG_FILTER, r.NEAREST)), O().getNumber("WEBGL_VERSION") === 1 ? ce(r, () => r.texImage2D(i, 0, o, e, t6, 0, n, s, null)) : ce(r, () => r.texStorage2D(i, 1, o, e, t6)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)), { texture: a, texShape: [t6, e] }; } -function Zd(r) { +function zf(r) { return r.internalFormatFloat; } -function cw(r, e, t10, o) { - let [n, s] = $u(e, t10); - return Fl(r, n, s, Zd(o), o.textureFormatFloat, r.FLOAT); +function sw(r, e, t6, o) { + let [n, s] = $u(e, t6); + return kl(r, n, s, zf(o), o.textureFormatFloat, r.FLOAT); } -function Jd(r) { +function Wf(r) { return r.internalFormatHalfFloat; } -function lw(r, e, t10, o) { - let [n, s] = $u(e, t10); - return Fl(r, n, s, Jd(o), o.textureFormatFloat, o.textureTypeHalfFloat); +function aw(r, e, t6, o) { + let [n, s] = $u(e, t6); + return kl(r, n, s, Wf(o), o.textureFormatFloat, o.textureTypeHalfFloat); } -function eh(r) { +function Uf(r) { return r.downloadTextureFormat; } -function mw(r, e, t10, o) { - let [n, s] = $u(e, t10); - return Fl(r, n, s, eh(o), r.RGBA, r.UNSIGNED_BYTE); +function iw(r, e, t6, o) { + let [n, s] = $u(e, t6); + return kl(r, n, s, Uf(o), r.RGBA, r.UNSIGNED_BYTE); } -function th(r) { +function Gf(r) { return r.internalFormatPackedFloat; } -function fw(r, e, t10, o) { - let [n, s] = Ks(e, t10); - return Fl(r, n, s, th(o), r.RGBA, r.FLOAT); +function uw(r, e, t6, o) { + let [n, s] = Ys(e, t6); + return kl(r, n, s, Gf(o), r.RGBA, r.FLOAT); } -function rh(r) { +function Hf(r) { return r.internalFormatPackedHalfFloat; } -function dw(r, e, t10, o) { - let [n, s] = Ks(e, t10); - return Fl(r, n, s, rh(o), r.RGBA, o.textureTypeHalfFloat); +function pw(r, e, t6, o) { + let [n, s] = Ys(e, t6); + return kl(r, n, s, Hf(o), r.RGBA, o.textureTypeHalfFloat); } -function hw(r, e, t10) { - return me(r, () => r.bindBuffer(r.ARRAY_BUFFER, t10)), Wd(r, e, "clipSpacePos", t10, 3, 20, 0) && Wd(r, e, "uv", t10, 2, 20, 12); +function cw(r, e, t6) { + return ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, t6)), Af(r, e, "clipSpacePos", t6, 3, 20, 0) && Af(r, e, "uv", t6, 2, 20, 12); } -function gw(r, e, t10, o, n, s) { - me(r, () => r.bindTexture(r.TEXTURE_2D, e)); +function lw(r, e, t6, o, n, s) { + ce(r, () => r.bindTexture(r.TEXTURE_2D, e)); let a, i, p; - n instanceof Uint8Array ? (a = new Uint8Array(t10 * o * 4), i = r.UNSIGNED_BYTE, p = r.RGBA) : (a = new Float32Array(t10 * o * 4), i = r.FLOAT, p = s.internalFormatPackedFloat), a.set(n), P().getNumber("WEBGL_VERSION") === 2 ? me(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, t10, o, r.RGBA, i, a)) : me(r, () => r.texImage2D(r.TEXTURE_2D, 0, p, t10, o, 0, r.RGBA, i, a)), me(r, () => r.bindTexture(r.TEXTURE_2D, null)); + n instanceof Uint8Array ? (a = new Uint8Array(t6 * o * 4), i = r.UNSIGNED_BYTE, p = r.RGBA) : (a = new Float32Array(t6 * o * 4), i = r.FLOAT, p = s.internalFormatPackedFloat), a.set(n), O().getNumber("WEBGL_VERSION") === 2 ? ce(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, t6, o, r.RGBA, i, a)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, p, t6, o, 0, r.RGBA, i, a)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); } -function xw(r, e, t10) { - me(r, () => r.bindTexture(r.TEXTURE_2D, e)), t10.data instanceof Uint8Array ? P().getNumber("WEBGL_VERSION") === 2 ? me(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, t10.width, t10.height, r.RGBA, r.UNSIGNED_BYTE, t10.data)) : me(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, t10.width, t10.height, 0, r.RGBA, r.UNSIGNED_BYTE, t10.data)) : P().getNumber("WEBGL_VERSION") === 2 ? me(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, r.RGBA, r.UNSIGNED_BYTE, t10)) : me(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, t10)), me(r, () => r.bindTexture(r.TEXTURE_2D, null)); +function mw(r, e, t6) { + ce(r, () => r.bindTexture(r.TEXTURE_2D, e)), t6.data instanceof Uint8Array ? O().getNumber("WEBGL_VERSION") === 2 ? ce(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, t6.width, t6.height, r.RGBA, r.UNSIGNED_BYTE, t6.data)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, t6.width, t6.height, 0, r.RGBA, r.UNSIGNED_BYTE, t6.data)) : O().getNumber("WEBGL_VERSION") === 2 ? ce(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, r.RGBA, r.UNSIGNED_BYTE, t6)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, t6)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); } -function yw(r, e, t10, o) { +function dw(r, e, t6, o) { let n = r.createBuffer(); - me(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, n)); - let i = 4 * 4 * e * t10; - return me(r, () => r.bufferData(r.PIXEL_PACK_BUFFER, i, r.STREAM_READ)), me(r, () => r.readPixels(0, 0, t10, e, r.RGBA, r.FLOAT, 0)), me(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, null)), n; + ce(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, n)); + let i = 4 * 4 * e * t6; + return ce(r, () => r.bufferData(r.PIXEL_PACK_BUFFER, i, r.STREAM_READ)), ce(r, () => r.readPixels(0, 0, t6, e, r.RGBA, r.FLOAT, 0)), ce(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, null)), n; } -function bw(r, e, t10) { - let o = r, n = new Float32Array(t10); +function fw(r, e, t6) { + let o = r, n = new Float32Array(t6); return o.bindBuffer(o.PIXEL_PACK_BUFFER, e), o.getBufferSubData(o.PIXEL_PACK_BUFFER, 0, n), o.bindBuffer(o.PIXEL_PACK_BUFFER, null), n; } -function Cw(r, e, t10, o) { - let [n, s] = $u(e, t10), a = 4, i = new Uint8Array(GE(e * t10, a)); - return me(r, () => r.readPixels(0, 0, n, s, o.downloadTextureFormat, r.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); +function hw(r, e, t6, o) { + let [n, s] = $u(e, t6), a = 4, i = new Uint8Array(bE(e * t6, a)); + return ce(r, () => r.readPixels(0, 0, n, s, o.downloadTextureFormat, r.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); } -function Iw(r, e, t10, o, n, s, a, i) { - let p = r, u = new Float32Array(HE(s, a)); +function gw(r, e, t6, o, n, s, a, i) { + let p = r, u = new Float32Array(CE(s, a)); return p.bindBuffer(p.PIXEL_PACK_BUFFER, e), p.getBufferSubData(p.PIXEL_PACK_BUFFER, 0, u), p.bindBuffer(p.PIXEL_PACK_BUFFER, null), u; } -function ww(r, e, t10) { - let o = new Float32Array(e * t10 * 4); - return me(r, () => r.readPixels(0, 0, t10, e, r.RGBA, r.FLOAT, o)), o; +function xw(r, e, t6) { + let o = new Float32Array(e * t6 * 4); + return ce(r, () => r.readPixels(0, 0, t6, e, r.RGBA, r.FLOAT, o)), o; } var Fu = class { constructor(e) { - this.outputTexture = null, this.program = null, this.disposed = false, this.vertexAttrsAreBound = false, this.itemsToPoll = []; - let t10 = P().getNumber("WEBGL_VERSION"); - e != null ? (this.gl = e, MI(t10, e)) : this.gl = Gr(t10); + this.outputTexture = null, this.program = null, this.disposed = false, this.itemsToPoll = []; + let t6 = O().getNumber("WEBGL_VERSION"); + if (e != null ? (this.gl = e, RS(t6, e)) : this.gl = Wr(t6), e = this.gl, O().getNumber("WEBGL_VERSION") === 2) { + let s = e; + this.createVertexArray = () => ce(s, () => s.createVertexArray()), this.bindVertexArray = (a) => ce(s, () => s.bindVertexArray(a)), this.deleteVertexArray = (a) => ce(s, () => s.deleteVertexArray(a)), this.getVertexArray = () => ce(s, () => s.getParameter(s.VERTEX_ARRAY_BINDING)); + } else if (e != null) { + let s = e.getExtension("OES_vertex_array_object"); + if (s == null) + throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object."); + this.createVertexArray = () => ce(e, () => s.createVertexArrayOES()), this.bindVertexArray = (a) => ce(e, () => s.bindVertexArrayOES(a)), this.deleteVertexArray = (a) => ce(e, () => s.deleteVertexArrayOES(a)), this.getVertexArray = () => ce(e, () => e.getParameter(s.VERTEX_ARRAY_BINDING_OES)); + } let o = "WEBGL_color_buffer_float", n = "EXT_color_buffer_half_float"; - if (this.parallelCompilationExtension = this.gl.getExtension("KHR_parallel_shader_compile"), P().getNumber("WEBGL_VERSION") === 1) { + if (this.parallelCompilationExtension = this.gl.getExtension("KHR_parallel_shader_compile"), O().getNumber("WEBGL_VERSION") === 1) { let s = "OES_texture_float", a = "OES_texture_half_float"; - if (this.textureFloatExtension = nc(this.gl, s), Hr(this.gl, a)) - this.textureHalfFloatExtension = nc(this.gl, a); - else if (P().get("WEBGL_FORCE_F16_TEXTURES")) + if (this.textureFloatExtension = ec(this.gl, s), Ur(this.gl, a)) + this.textureHalfFloatExtension = ec(this.gl, a); + else if (O().get("WEBGL_FORCE_F16_TEXTURES")) throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); - if (this.colorBufferFloatExtension = this.gl.getExtension(o), Hr(this.gl, n)) - this.colorBufferHalfFloatExtension = nc(this.gl, n); - else if (P().get("WEBGL_FORCE_F16_TEXTURES")) + if (this.colorBufferFloatExtension = this.gl.getExtension(o), Ur(this.gl, n)) + this.colorBufferHalfFloatExtension = ec(this.gl, n); + else if (O().get("WEBGL_FORCE_F16_TEXTURES")) throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); - } else if (o = "EXT_color_buffer_float", Hr(this.gl, o)) + } else if (o = "EXT_color_buffer_float", Ur(this.gl, o)) this.colorBufferFloatExtension = this.gl.getExtension(o); - else if (Hr(this.gl, n)) + else if (Ur(this.gl, n)) this.colorBufferHalfFloatExtension = this.gl.getExtension(n); else throw new Error("GL context does not support color renderable floats"); - this.vertexBuffer = uw(this.gl), this.indexBuffer = pw(this.gl), this.framebuffer = XI(this.gl), this.textureConfig = El(this.gl, this.textureHalfFloatExtension); + this.vertexBuffer = ow(this.gl), this.indexBuffer = nw(this.gl), this.framebuffer = GS(this.gl), this.textureConfig = Sl(this.gl, this.textureHalfFloatExtension); } get debug() { - return P().getBool("DEBUG"); + return O().getBool("DEBUG"); } dispose() { if (this.disposed) return; this.program != null && console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."), this.outputTexture != null && console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing."); let e = this.gl; - me(e, () => e.finish()), me(e, () => e.bindFramebuffer(e.FRAMEBUFFER, null)), me(e, () => e.deleteFramebuffer(this.framebuffer)), me(e, () => e.bindBuffer(e.ARRAY_BUFFER, null)), me(e, () => e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, null)), me(e, () => e.deleteBuffer(this.indexBuffer)), this.disposed = true; + ce(e, () => e.finish()), ce(e, () => e.bindFramebuffer(e.FRAMEBUFFER, null)), ce(e, () => e.deleteFramebuffer(this.framebuffer)), ce(e, () => e.bindBuffer(e.ARRAY_BUFFER, null)), ce(e, () => e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, null)), ce(e, () => e.deleteBuffer(this.indexBuffer)), this.disposed = true; } - createFloat32MatrixTexture(e, t10) { - return this.throwIfDisposed(), cw(this.gl, e, t10, this.textureConfig); + createFloat32MatrixTexture(e, t6) { + return this.throwIfDisposed(), sw(this.gl, e, t6, this.textureConfig); } - createFloat16MatrixTexture(e, t10) { - return this.throwIfDisposed(), lw(this.gl, e, t10, this.textureConfig); + createFloat16MatrixTexture(e, t6) { + return this.throwIfDisposed(), aw(this.gl, e, t6, this.textureConfig); } - createUnsignedBytesMatrixTexture(e, t10) { - return this.throwIfDisposed(), mw(this.gl, e, t10, this.textureConfig); + createUnsignedBytesMatrixTexture(e, t6) { + return this.throwIfDisposed(), iw(this.gl, e, t6, this.textureConfig); } - uploadPixelDataToTexture(e, t10) { - this.throwIfDisposed(), xw(this.gl, e, t10); + uploadPixelDataToTexture(e, t6) { + this.throwIfDisposed(), mw(this.gl, e, t6); } - uploadDenseMatrixToTexture(e, t10, o, n) { - this.throwIfDisposed(), gw(this.gl, e, t10, o, n, this.textureConfig); + uploadDenseMatrixToTexture(e, t6, o, n) { + this.throwIfDisposed(), lw(this.gl, e, t6, o, n, this.textureConfig); } - createFloat16PackedMatrixTexture(e, t10) { - return this.throwIfDisposed(), dw(this.gl, e, t10, this.textureConfig); + createFloat16PackedMatrixTexture(e, t6) { + return this.throwIfDisposed(), pw(this.gl, e, t6, this.textureConfig); } - createPackedMatrixTexture(e, t10) { - return this.throwIfDisposed(), fw(this.gl, e, t10, this.textureConfig); + createPackedMatrixTexture(e, t6) { + return this.throwIfDisposed(), uw(this.gl, e, t6, this.textureConfig); } deleteMatrixTexture(e) { - this.throwIfDisposed(), this.outputTexture === e && (Ud(this.gl, this.framebuffer), this.outputTexture = null), me(this.gl, () => this.gl.deleteTexture(e)); + this.throwIfDisposed(), this.outputTexture === e && (Rf(this.gl, this.framebuffer), this.outputTexture = null), ce(this.gl, () => this.gl.deleteTexture(e)); } - downloadByteEncodedFloatMatrixFromOutputTexture(e, t10, o) { - return this.downloadMatrixDriver(e, () => Cw(this.gl, t10, o, this.textureConfig)); + downloadByteEncodedFloatMatrixFromOutputTexture(e, t6, o) { + return this.downloadMatrixDriver(e, () => hw(this.gl, t6, o, this.textureConfig)); } - downloadPackedMatrixFromBuffer(e, t10, o, n, s, a) { - return Iw(this.gl, e, t10, o, n, s, a, this.textureConfig); + downloadPackedMatrixFromBuffer(e, t6, o, n, s, a) { + return gw(this.gl, e, t6, o, n, s, a, this.textureConfig); } - downloadFloat32MatrixFromBuffer(e, t10) { - return bw(this.gl, e, t10); + downloadFloat32MatrixFromBuffer(e, t6) { + return fw(this.gl, e, t6); } - createBufferFromTexture(e, t10, o) { + createBufferFromTexture(e, t6, o) { this.bindTextureToFrameBuffer(e); - let n = yw(this.gl, t10, o, this.textureConfig); + let n = dw(this.gl, t6, o, this.textureConfig); return this.unbindTextureToFrameBuffer(), n; } createAndWaitForFence() { @@ -17099,72 +17154,78 @@ var Fu = class { return this.pollFence(e); } createFence(e) { - let t10, o; - if (P().getBool("WEBGL_FENCE_API_ENABLED")) { + let t6, o; + if (O().getBool("WEBGL_FENCE_API_ENABLED")) { let n = e, s = n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE, 0); e.flush(), o = () => { let a = n.clientWaitSync(s, 0, 0); return a === n.ALREADY_SIGNALED || a === n.CONDITION_SATISFIED; - }, t10 = s; + }, t6 = s; } else - P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 ? (t10 = this.beginQuery(), this.endQuery(), o = () => this.isQueryAvailable(t10, P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))) : o = () => true; - return { query: t10, isFencePassed: o }; + O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 ? (t6 = this.beginQuery(), this.endQuery(), o = () => this.isQueryAvailable(t6, O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))) : o = () => true; + return { query: t6, isFencePassed: o }; } - downloadMatrixFromPackedTexture(e, t10, o) { - return this.downloadMatrixDriver(e, () => ww(this.gl, t10, o)); + downloadMatrixFromPackedTexture(e, t6, o) { + return this.downloadMatrixDriver(e, () => xw(this.gl, t6, o)); } createProgram(e) { this.throwIfDisposed(); - let t10 = this.gl; - this.vertexShader == null && (this.vertexShader = iw(t10)); - let o = UI(t10); - return me(t10, () => t10.attachShader(o, this.vertexShader)), me(t10, () => t10.attachShader(o, e)), GI(t10, o), this.debug && $l(t10, o), this.vertexAttrsAreBound || (this.setProgram(o), this.vertexAttrsAreBound = hw(t10, this.program, this.vertexBuffer)), o; + let t6 = this.gl; + this.vertexShader == null && (this.vertexShader = rw(t6)); + let o = LS(t6); + ce(t6, () => t6.attachShader(o, this.vertexShader)), ce(t6, () => t6.attachShader(o, e)), BS(t6, o); + let n; + return n = Object.assign(o, { vao: this.createVertexArray() }), this.bindVertexArray(n.vao), ce(t6, () => t6.bindBuffer(t6.ELEMENT_ARRAY_BUFFER, this.indexBuffer)), console.assert(cw(t6, n, this.vertexBuffer), "gpgpu_util.bindVertexProgramAttributeStreams not fully successful."), this.debug && wl(t6, n), this.setProgram(n), n; } deleteProgram(e) { - this.throwIfDisposed(), e === this.program && (this.program = null), e != null && me(this.gl, () => this.gl.deleteProgram(e)); + this.throwIfDisposed(), e === this.program && (this.program = null), e != null && (ce(this.gl, () => this.gl.deleteProgram(e)), this.deleteVertexArray(e.vao)); } setProgram(e) { - this.throwIfDisposed(), this.program = e, this.program != null && this.debug && $l(this.gl, this.program), me(this.gl, () => this.gl.useProgram(e)); + this.throwIfDisposed(), this.program = e, this.program != null && (this.bindVertexArray(this.program.vao), this.debug && wl(this.gl, this.program)), ce(this.gl, () => this.gl.useProgram(e)); } - getUniformLocation(e, t10, o = true) { - return this.throwIfDisposed(), o ? YI(this.gl, e, t10) : QI(this.gl, e, t10); + getUniformLocation(e, t6, o = true) { + return this.throwIfDisposed(), o ? HS(this.gl, e, t6) : qS(this.gl, e, t6); } - getAttributeLocation(e, t10) { - return this.throwIfDisposed(), me(this.gl, () => this.gl.getAttribLocation(e, t10)); + getAttributeLocation(e, t6) { + return this.throwIfDisposed(), ce(this.gl, () => this.gl.getAttribLocation(e, t6)); } - getUniformLocationNoThrow(e, t10) { - return this.throwIfDisposed(), this.gl.getUniformLocation(e, t10); + getUniformLocationNoThrow(e, t6) { + return this.throwIfDisposed(), this.gl.getUniformLocation(e, t6); } - setInputMatrixTexture(e, t10, o) { - this.throwIfDisposed(), this.throwIfNoProgram(), ZI(this.gl, e, t10, o); + setInputMatrixTexture(e, t6, o) { + this.throwIfDisposed(), this.throwIfNoProgram(), KS(this.gl, e, t6, o); } - setOutputMatrixTexture(e, t10, o) { - this.setOutputMatrixTextureDriver(e, o, t10); + setOutputMatrixTexture(e, t6, o) { + this.setOutputMatrixTextureDriver(e, o, t6); } - setOutputPackedMatrixTexture(e, t10, o) { + setOutputPackedMatrixTexture(e, t6, o) { this.throwIfDisposed(); - let [n, s] = Ks(t10, o); + let [n, s] = Ys(t6, o); this.setOutputMatrixTextureDriver(e, n, s); } - setOutputMatrixWriteRegion(e, t10, o, n) { - this.setOutputMatrixWriteRegionDriver(o, e, n, t10); + setOutputMatrixWriteRegion(e, t6, o, n) { + this.setOutputMatrixWriteRegionDriver(o, e, n, t6); } - setOutputPackedMatrixWriteRegion(e, t10, o, n) { + setOutputPackedMatrixWriteRegion(e, t6, o, n) { throw new Error("setOutputPackedMatrixWriteRegion not implemented."); } debugValidate() { - this.program != null && $l(this.gl, this.program), sc(this.gl); + this.program != null && wl(this.gl, this.program), tc(this.gl); } executeProgram() { this.throwIfDisposed(), this.throwIfNoProgram(); let e = this.gl; - this.debug && this.debugValidate(), me(e, () => e.drawElements(e.TRIANGLES, 6, e.UNSIGNED_SHORT, 0)); + if (this.debug) { + let t6 = this.getVertexArray(); + console.assert(t6 === this.program.vao, "VAO changed between setProgram and executeProgram!"), this.debugValidate(); + } + ce(e, () => e.drawElements(e.TRIANGLES, 6, e.UNSIGNED_SHORT, 0)); } blockUntilAllProgramsCompleted() { - this.throwIfDisposed(), me(this.gl, () => this.gl.finish()); + this.throwIfDisposed(), ce(this.gl, () => this.gl.finish()); } getQueryTimerExtension() { - return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = nc(this.gl, P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query")), this.disjointQueryTimerExtension; + return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = ec(this.gl, O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query")), this.disjointQueryTimerExtension; } getQueryTimerExtensionWebGL2() { return this.getQueryTimerExtension(); @@ -17173,29 +17234,29 @@ var Fu = class { return this.getQueryTimerExtension(); } beginQuery() { - if (P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + if (O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { let o = this.gl, n = this.getQueryTimerExtensionWebGL2(), s = o.createQuery(); return o.beginQuery(n.TIME_ELAPSED_EXT, s), s; } - let e = this.getQueryTimerExtensionWebGL1(), t10 = e.createQueryEXT(); - return e.beginQueryEXT(e.TIME_ELAPSED_EXT, t10), t10; + let e = this.getQueryTimerExtensionWebGL1(), t6 = e.createQueryEXT(); + return e.beginQueryEXT(e.TIME_ELAPSED_EXT, t6), t6; } endQuery() { - if (P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { - let t10 = this.gl, o = this.getQueryTimerExtensionWebGL2(); - t10.endQuery(o.TIME_ELAPSED_EXT); + if (O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + let t6 = this.gl, o = this.getQueryTimerExtensionWebGL2(); + t6.endQuery(o.TIME_ELAPSED_EXT); return; } let e = this.getQueryTimerExtensionWebGL1(); e.endQueryEXT(e.TIME_ELAPSED_EXT); } async waitForQueryAndGetTime(e) { - return await x.repeatedTry(() => this.disposed || this.isQueryAvailable(e, P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))), this.getQueryTime(e, P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); + return await y.repeatedTry(() => this.disposed || this.isQueryAvailable(e, O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))), this.getQueryTime(e, O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); } - getQueryTime(e, t10) { - if (t10 === 0) + getQueryTime(e, t6) { + if (t6 === 0) return null; - if (t10 === 2) { + if (t6 === 2) { let o = this.gl; return o.getQueryParameter(e, o.QUERY_RESULT) / 1e6; } else { @@ -17203,10 +17264,10 @@ var Fu = class { return o.getQueryObjectEXT(e, o.QUERY_RESULT_EXT) / 1e6; } } - isQueryAvailable(e, t10) { - if (t10 === 0) + isQueryAvailable(e, t6) { + if (t6 === 0) return true; - if (t10 === 2) { + if (t6 === 2) { let o = this.gl, n = this.getQueryTimerExtensionWebGL2(), s = o.getQueryParameter(e, o.QUERY_RESULT_AVAILABLE); return this.disjoint == null && (this.disjoint = this.gl.getParameter(n.GPU_DISJOINT_EXT)), s && !this.disjoint; } else { @@ -17215,42 +17276,42 @@ var Fu = class { } } pollFence(e) { - return new Promise((t10) => { - this.addItemToPoll(() => e.isFencePassed(), () => t10()); + return new Promise((t6) => { + this.addItemToPoll(() => e.isFencePassed(), () => t6()); }); } pollItems() { - let e = rY(this.itemsToPoll.map((t10) => t10.isDoneFn)); - for (let t10 = 0; t10 <= e; ++t10) { - let { resolveFn: o } = this.itemsToPoll[t10]; + let e = v8(this.itemsToPoll.map((t6) => t6.isDoneFn)); + for (let t6 = 0; t6 <= e; ++t6) { + let { resolveFn: o } = this.itemsToPoll[t6]; o(); } this.itemsToPoll = this.itemsToPoll.slice(e + 1); } - addItemToPoll(e, t10) { - if (this.itemsToPoll.push({ isDoneFn: e, resolveFn: t10 }), this.itemsToPoll.length > 1) + addItemToPoll(e, t6) { + if (this.itemsToPoll.push({ isDoneFn: e, resolveFn: t6 }), this.itemsToPoll.length > 1) return; let o; - "setTimeoutCustom" in P().platform && (o = P().platform.setTimeoutCustom.bind(P().platform)), x.repeatedTry(() => (this.pollItems(), this.itemsToPoll.length === 0), () => 0, null, o); + "setTimeoutCustom" in O().platform && (o = O().platform.setTimeoutCustom.bind(O().platform)), y.repeatedTry(() => (this.pollItems(), this.itemsToPoll.length === 0), () => 0, null, o); } bindTextureToFrameBuffer(e) { - this.throwIfDisposed(), Rl(this.gl, e, this.framebuffer), this.debug && sc(this.gl); + this.throwIfDisposed(), Il(this.gl, e, this.framebuffer), this.debug && tc(this.gl); } unbindTextureToFrameBuffer() { - this.outputTexture != null ? (Rl(this.gl, this.outputTexture, this.framebuffer), this.debug && sc(this.gl)) : Ud(this.gl, this.framebuffer); + this.outputTexture != null ? (Il(this.gl, this.outputTexture, this.framebuffer), this.debug && tc(this.gl)) : Rf(this.gl, this.framebuffer); } - downloadMatrixDriver(e, t10) { + downloadMatrixDriver(e, t6) { this.bindTextureToFrameBuffer(e); - let o = t10(); + let o = t6(); return this.unbindTextureToFrameBuffer(), o; } - setOutputMatrixTextureDriver(e, t10, o) { + setOutputMatrixTextureDriver(e, t6, o) { this.throwIfDisposed(); let n = this.gl; - Rl(n, e, this.framebuffer), this.debug && sc(n), this.outputTexture = e, me(n, () => n.viewport(0, 0, t10, o)), me(n, () => n.scissor(0, 0, t10, o)); + Il(n, e, this.framebuffer), this.debug && tc(n), this.outputTexture = e, ce(n, () => n.viewport(0, 0, t6, o)), ce(n, () => n.scissor(0, 0, t6, o)); } - setOutputMatrixWriteRegionDriver(e, t10, o, n) { - this.throwIfDisposed(), me(this.gl, () => this.gl.scissor(e, t10, o, n)); + setOutputMatrixWriteRegionDriver(e, t6, o, n) { + this.throwIfDisposed(), ce(this.gl, () => this.gl.scissor(e, t6, o, n)); } throwIfDisposed() { if (this.disposed) @@ -17261,37 +17322,37 @@ var Fu = class { throw new Error("No GPU program is currently set."); } }; -function rY(r) { +function v8(r) { let e = 0; for (; e < r.length && r[e](); ++e) ; return e - 1; } -var { addImpl: s$, bincountImpl: oh, bincountReduceImpl: a$, castImpl: i$, ceilImpl: u$, concatImpl: p$, equalImpl: c$, expImpl: l$, expm1Impl: m$, floorImpl: f$, gatherNdImpl: d$, gatherV2Impl: h$, greaterImpl: g$, greaterEqualImpl: x$, lessImpl: y$, lessEqualImpl: b$, linSpaceImpl: C$, logImpl: I$, maxImpl: w$, maximumImpl: S$, minimumImpl: v$, multiplyImpl: k$, negImpl: T$, notEqualImpl: N$, prodImpl: _$, raggedGatherImpl: E$, raggedRangeImpl: $$, raggedTensorToTensorImpl: R$, rangeImpl: A$, rsqrtImpl: F$, scatterImpl: D$, sigmoidImpl: P$, simpleAbsImpl: nh, sliceImpl: O$, sparseFillEmptyRowsImpl: M$, sparseReshapeImpl: L$, sparseSegmentReductionImpl: sh, sqrtImpl: B$, stridedSliceImpl: V$, stringNGramsImpl: z$, stringSplitImpl: W$, stringToHashBucketFastImpl: U$, subImpl: G$, tileImpl: H$, topKImpl: q$, transposeImpl: Du, uniqueImpl: K$ } = Ad; -function vw(r, e) { - return ["x", "y", "z", "w", "u", "v"].slice(0, e).map((t10) => `${r}.${t10}`); +var { addImpl: DE, bincountImpl: qf, bincountReduceImpl: OE, castImpl: PE, ceilImpl: ME, concatImpl: LE, equalImpl: BE, expImpl: VE, expm1Impl: zE, floorImpl: WE, gatherNdImpl: UE, gatherV2Impl: GE, greaterImpl: HE, greaterEqualImpl: qE, lessImpl: KE, lessEqualImpl: jE, linSpaceImpl: XE, logImpl: YE, maxImpl: QE, maximumImpl: ZE, minimumImpl: JE, multiplyImpl: e$, negImpl: t$, notEqualImpl: r$, prodImpl: o$, raggedGatherImpl: n$, raggedRangeImpl: s$, raggedTensorToTensorImpl: a$, rangeImpl: i$, rsqrtImpl: u$, scatterImpl: p$, sigmoidImpl: c$, simpleAbsImpl: Kf, sliceImpl: l$, sparseFillEmptyRowsImpl: m$, sparseReshapeImpl: d$, sparseSegmentReductionImpl: jf, sqrtImpl: f$, stridedSliceImpl: h$, stringNGramsImpl: g$, stringSplitImpl: x$, stringToHashBucketFastImpl: y$, subImpl: b$, tileImpl: C$, topKImpl: S$, transposeImpl: Du, uniqueImpl: w$ } = Qp; +function bw(r, e) { + return ["x", "y", "z", "w", "u", "v"].slice(0, e).map((t6) => `${r}.${t6}`); } function $t(r, e) { - return e === 1 ? [r] : vw(r, e); + return e === 1 ? [r] : bw(r, e); } -function j$(r, e) { +function I$(r, e) { if (r === 1) return "rc"; - let t10 = ""; + let t6 = ""; for (let o = 0; o < r; o++) - t10 += e[o], o < r - 1 && (t10 += ","); - return t10; + t6 += e[o], o < r - 1 && (t6 += ","); + return t6; } -var ah = class { +var Xf = class { constructor(e) { - if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = lt(this.outputShape.length), this.rank === 0) + if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = ct(this.outputShape.length), this.rank === 0) this.userCode = ` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } `; else { - let t10 = $t("rc", this.rank), o = _e(this.rank), n = this.getOutOfBoundsCondition(t10), s = this.getSetup(t10), a = this.getOutput(t10); + let t6 = $t("rc", this.rank), o = _e(this.rank), n = this.getOutOfBoundsCondition(t6), s = this.getSetup(t6), a = this.getOutput(t6); this.userCode = ` void main() { ${o} rc = getOutputCoords(); @@ -17308,31 +17369,31 @@ var ah = class { } } getSourceCoordsArr(e) { - let t10 = []; + let t6 = []; for (let o = 0; o <= 1; o++) for (let n = 0; n <= 1; n++) { let s = `${o === 0 ? "r" : "rp1"}, ${n === 0 ? "c" : "cp1"}`; for (let a = 2; a < this.rank; a++) s = `${e[e.length - 1 - a]},` + s; - t10.push(s); + t6.push(s); } - return t10; + return t6; } getOutOfBoundsCondition(e) { if (this.rank === 1) return `rc > ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]}`; - let t10 = ""; + let t6 = ""; for (let o = this.rank - 2; o < this.rank; o++) - t10 += `${e[o]} >= ${this.enableShapeUniforms ? `outShape[${o}]` : this.outputShape[o]}`, o < this.rank - 1 && (t10 += "||"); - return t10; + t6 += `${e[o]} >= ${this.enableShapeUniforms ? `outShape[${o}]` : this.outputShape[o]}`, o < this.rank - 1 && (t6 += "||"); + return t6; } getSetup(e) { if (this.rank === 1) return ""; - let t10 = e.slice(-2), o = this.enableShapeUniforms ? `outShape[${this.rank} - 1]` : this.outputShape[this.rank - 1], n = this.enableShapeUniforms ? `outShape[${this.rank} - 2]` : this.outputShape[this.rank - 2]; + let t6 = e.slice(-2), o = this.enableShapeUniforms ? `outShape[${this.rank} - 1]` : this.outputShape[this.rank - 1], n = this.enableShapeUniforms ? `outShape[${this.rank} - 2]` : this.outputShape[this.rank - 2]; return ` - int r = ${t10[0]}; - int c = ${t10[1]}; + int r = ${t6[0]}; + int c = ${t6[1]}; int rp1 = r + 1; int cp1 = c + 1; @@ -17341,16 +17402,16 @@ var ah = class { `; } getOutput(e) { - let t10 = this.getSourceCoordsArr(e); - return this.rank === 1 ? `getA(rc), (rc + 1 >= ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0` : `getA(${t10[0]}), - cEdge ? 0. : getA(${t10[1]}), - rEdge ? 0. : getA(${t10[2]}), - rEdge || cEdge ? 0. : getA(${t10[3]})`; + let t6 = this.getSourceCoordsArr(e); + return this.rank === 1 ? `getA(rc), (rc + 1 >= ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0` : `getA(${t6[0]}), + cEdge ? 0. : getA(${t6[1]}), + rEdge ? 0. : getA(${t6[2]}), + rEdge || cEdge ? 0. : getA(${t6[3]})`; } }; -var hc = class { - constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); +var lc = class { + constructor(e, t6) { + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length); let o = ""; for (let n = 0; n < 4; n++) { let s = "thisRC = rc;"; @@ -17368,8 +17429,8 @@ var hc = class { `; } this.userCode = ` - ${oY(t10, this.enableShapeUniforms)} - ${this.enableShapeUniforms ? pc() : uc(e)} + ${k8(t6, this.enableShapeUniforms)} + ${this.enableShapeUniforms ? sc() : nc(e)} void main() { ivec3 rc = getOutputCoords(); @@ -17387,36 +17448,36 @@ var hc = class { `; } }; -function oY(r, e) { +function k8(r, e) { return ` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${e ? YE(["r", "c", "d"], "inputShape") : is(["r", "c", "d"], r)} + ${e ? kE(["r", "c", "d"], "inputShape") : us(["r", "c", "d"], r)} return ivec3(r, c, d); } `; } -var ih = class { +var Yf = class { constructor(e) { this.gpgpu = e, this.numUsedTextures = 0, this.numFreeTextures = 0, this._numBytesAllocated = 0, this._numBytesFree = 0, this.freeTextures = {}, this.logEnabled = false, this.usedTextures = {}; } - acquireTexture(e, t10, o) { - let n = Y$(t10, o), s = Q$(e, n, o); + acquireTexture(e, t6, o) { + let n = k$(t6, o), s = N$(e, n, o); s in this.freeTextures || (this.freeTextures[s] = []), s in this.usedTextures || (this.usedTextures[s] = []); - let a = X$(e, n, this.gpgpu.gl, this.gpgpu.textureConfig, o); + let a = v$(e, n, this.gpgpu.gl, this.gpgpu.textureConfig, o); if (this.freeTextures[s].length > 0) { this.numFreeTextures--, this.numUsedTextures++, this._numBytesFree -= a, this.log(); let p = this.freeTextures[s].shift(); return this.usedTextures[s].push(p), p; } let i; - return n === Jt.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(e[0], e[1]) : n === Jt.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(e[0], e[1]) : n === Jt.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(e[0], e[1]) : n === Jt.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(e[0], e[1]) : n === Jt.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(e[0], e[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; + return n === Zt.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(e[0], e[1]) : n === Zt.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(e[0], e[1]) : n === Zt.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(e[0], e[1]) : n === Zt.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(e[0], e[1]) : n === Zt.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(e[0], e[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; } - releaseTexture(e, t10, o, n) { + releaseTexture(e, t6, o, n) { if (this.freeTextures == null) return; - let s = Y$(o, n), a = Q$(t10, s, n); + let s = k$(o, n), a = N$(t6, s, n); a in this.freeTextures || (this.freeTextures[a] = []); - let i = X$(t10, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = P().get("WEBGL_DELETE_TEXTURE_THRESHOLD"); + let i = v$(t6, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = O().get("WEBGL_DELETE_TEXTURE_THRESHOLD"); p !== -1 && this._numBytesAllocated > p ? (this.gpgpu.deleteMatrixTexture(e.texture), this._numBytesAllocated -= i) : (this.freeTextures[a].push(e), this.numFreeTextures++, this._numBytesFree += i), this.numUsedTextures--; let u = this.usedTextures[a], c = u.indexOf(e); if (c < 0) @@ -17428,8 +17489,8 @@ var ih = class { return; let e = this.numFreeTextures + this.numUsedTextures; console.log("Free/Used", `${this.numFreeTextures} / ${this.numUsedTextures}`, `(${e})`); - let t10 = this._numBytesFree / this._numBytesAllocated; - console.log(`Bytes allocated: ${this._numBytesAllocated}`), console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100 * t10)}%)`); + let t6 = this._numBytesFree / this._numBytesAllocated; + console.log(`Bytes allocated: ${this._numBytesAllocated}`), console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100 * t6)}%)`); } get numBytesAllocated() { return this._numBytesAllocated; @@ -17446,81 +17507,81 @@ var ih = class { dispose() { if (this.freeTextures != null) { for (let e in this.freeTextures) - this.freeTextures[e].forEach((t10) => { - this.gpgpu.deleteMatrixTexture(t10.texture); + this.freeTextures[e].forEach((t6) => { + this.gpgpu.deleteMatrixTexture(t6.texture); }); for (let e in this.usedTextures) - this.usedTextures[e].forEach((t10) => { - this.gpgpu.deleteMatrixTexture(t10.texture); + this.usedTextures[e].forEach((t6) => { + this.gpgpu.deleteMatrixTexture(t6.texture); }); this.freeTextures = null, this.usedTextures = null, this.numUsedTextures = 0, this.numFreeTextures = 0, this._numBytesAllocated = 0, this._numBytesFree = 0; } } }; -function nY(r, e) { - let t10 = r; - if (e === t10.R32F) +function N8(r, e) { + let t6 = r; + if (e === t6.R32F) return 4; - if (e === t10.R16F) + if (e === t6.R16F) return 2; - if (e === t10.RGBA32F) + if (e === t6.RGBA32F) return 16; if (e === r.RGBA) return 16; - if (e === t10.RGBA16F) + if (e === t6.RGBA16F) return 8; - if (e === t10.RGBA8) + if (e === t6.RGBA8) return 4; throw new Error(`Unknown internal format ${e}`); } -function X$(r, e, t10, o, n) { - let s = sY(e, o), a; +function v$(r, e, t6, o, n) { + let s = T8(e, o), a; if (n) { - let [p, u] = Ks(r[0], r[1]); + let [p, u] = Ys(r[0], r[1]); a = p * u; } else { let [p, u] = $u(r[0], r[1]); a = p * u; } - let i = nY(t10, s); + let i = N8(t6, s); return a * i; } -function sY(r, e) { +function T8(r, e) { switch (r) { - case Jt.PACKED_2X2_FLOAT32: - return th(e); - case Jt.PACKED_2X2_FLOAT16: - return rh(e); - case Jt.UNPACKED_FLOAT32: - return Zd(e); - case Jt.UNPACKED_FLOAT16: - return Jd(e); - case Jt.PACKED_4X1_UNSIGNED_BYTE: - return eh(e); + case Zt.PACKED_2X2_FLOAT32: + return Gf(e); + case Zt.PACKED_2X2_FLOAT16: + return Hf(e); + case Zt.UNPACKED_FLOAT32: + return zf(e); + case Zt.UNPACKED_FLOAT16: + return Wf(e); + case Zt.PACKED_4X1_UNSIGNED_BYTE: + return Uf(e); default: throw new Error(`Unknown physical texture type ${r}`); } } -function aY(r) { - return P().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r ? Jt.PACKED_2X2_FLOAT32 : Jt.UNPACKED_FLOAT32 : r ? Jt.PACKED_2X2_FLOAT16 : Jt.UNPACKED_FLOAT16; +function _8(r) { + return O().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r ? Zt.PACKED_2X2_FLOAT32 : Zt.UNPACKED_FLOAT32 : r ? Zt.PACKED_2X2_FLOAT16 : Zt.UNPACKED_FLOAT16; } -function Y$(r, e) { +function k$(r, e) { if (r === ir.UPLOAD) - return Jt.PACKED_2X2_FLOAT32; + return Zt.PACKED_2X2_FLOAT32; if (r === ir.RENDER || r == null) - return aY(e); + return _8(e); if (r === ir.DOWNLOAD || r === ir.PIXELS) - return Jt.PACKED_4X1_UNSIGNED_BYTE; + return Zt.PACKED_4X1_UNSIGNED_BYTE; throw new Error(`Unknown logical texture type ${r}`); } -function Q$(r, e, t10) { - return `${r[0]}_${r[1]}_${e}_${t10}`; +function N$(r, e, t6) { + return `${r[0]}_${r[1]}_${e}_${t6}`; } -var fr = class { - constructor(e, t10) { - this.variableNames = ["A"], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` +var Jt = class { + constructor(e, t6) { + this.variableNames = ["A"], this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length), this.userCode = ` float unaryOperation(float x) { - ${t10} + ${t6} } void main() { @@ -17532,20 +17593,20 @@ var fr = class { `; } }; -var Vt = "if (isnan(x)) return x;"; -var Z$ = "return x;"; -var kw = "return abs(x);"; -var J$ = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; -var eR = Vt + ` +var Bt = "if (isnan(x)) return x;"; +var T$ = "return x;"; +var Cw = "return abs(x);"; +var _$ = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; +var E$ = Bt + ` return (x < 0.0) ? 0.0 : x; `; -var tR = Vt + ` +var $$ = Bt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; -var Pu = "return x;"; -var rR = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var nR = "return x;"; -var sR = ` +var Qs = "return x;"; +var A$ = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var F$ = "return x;"; +var D$ = ` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -17555,7 +17616,7 @@ var sR = ` return result; `; -var aR = ` +var O$ = ` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -17566,7 +17627,7 @@ var aR = ` return result; `; -var iR = ` +var P$ = ` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -17577,12 +17638,12 @@ var iR = ` return result; `; -var uR = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var No = class { - constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` +var M$ = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var Ar = class { + constructor(e, t6) { + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length), this.userCode = ` vec4 unaryOperation(vec4 x) { - ${t10} + ${t6} } void main() { @@ -17594,10 +17655,10 @@ var No = class { `; } }; -var uh = class { +var Qf = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); - let t10 = e.length, o = $t("rc", t10), n = _e(t10), s = j$(t10, o), a = o.slice(-2), i = t10 <= 1 ? "rc" : `vec2(${a.join(",")})`; + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length); + let t6 = e.length, o = $t("rc", t6), n = _e(t6), s = I$(t6, o), a = o.slice(-2), i = t6 <= 1 ? "rc" : `vec2(${a.join(",")})`; this.userCode = ` void main() { ${n} rc = getOutputCoords(); @@ -17608,194 +17669,194 @@ var uh = class { `; } }; -var uY = Bt.whereImpl; -var pY = 1e-7; -var cY = 1e-4; -var ph = {}; -function lY(r) { - return r in ph || (ph[r] = {}), ph[r]; +var $8 = Lt.whereImpl; +var A8 = 1e-7; +var R8 = 1e-4; +var Zf = {}; +function F8(r) { + return r in Zf || (Zf[r] = {}), Zf[r]; } -var mY = P().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); -var fY = 600; -function dY() { - return P().global.screen == null ? 1024 : P().global.screen.height * P().global.screen.width * window.devicePixelRatio * fY / 1024 / 1024; +var D8 = O().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); +var O8 = 600; +function P8() { + return O().global.screen == null ? 1024 : O().global.screen.height * O().global.screen.width * window.devicePixelRatio * O8 / 1024 / 1024; } -var Ni = class extends Jr { +var Bi = class extends Zr { constructor(e) { - if (super(), this.pendingRead = /* @__PURE__ */ new WeakMap(), this.pendingDisposal = /* @__PURE__ */ new WeakSet(), this.dataRefCount = /* @__PURE__ */ new WeakMap(), this.numBytesInGPU = 0, this.uploadWaitMs = 0, this.downloadWaitMs = 0, this.lastGlFlushTime = 0, this.warnedAboutMemory = false, this.pendingDeletes = 0, this.disposed = false, !P().getBool("HAS_WEBGL")) + if (super(), this.pendingRead = /* @__PURE__ */ new WeakMap(), this.pendingDisposal = /* @__PURE__ */ new WeakSet(), this.dataRefCount = /* @__PURE__ */ new WeakMap(), this.numBytesInGPU = 0, this.uploadWaitMs = 0, this.downloadWaitMs = 0, this.lastGlFlushTime = 0, this.warnedAboutMemory = false, this.pendingDeletes = 0, this.disposed = false, !O().getBool("HAS_WEBGL")) throw new Error("WebGL is not supported on this device"); - let t10; + let t6; if (e != null) { if (e instanceof Fu) - t10 = e; + t6 = e; else { - let o = Gr(P().getNumber("WEBGL_VERSION"), e); - t10 = new Fu(o); + let o = Wr(O().getNumber("WEBGL_VERSION"), e); + t6 = new Fu(o); } this.binaryCache = {}, this.gpgpuCreatedLocally = false; } else { - let o = Gr(P().getNumber("WEBGL_VERSION")); - t10 = new Fu(o), this.binaryCache = lY(P().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; + let o = Wr(O().getNumber("WEBGL_VERSION")); + t6 = new Fu(o), this.binaryCache = F8(O().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; } - this.gpgpu = t10, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new ih(this.gpgpu), this.numMBBeforeWarning = dY(), this.texData = new rn(this, cr()); + this.gpgpu = t6, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new Yf(this.gpgpu), this.numMBBeforeWarning = P8(), this.texData = new Do(this, cr()); } nextDataId() { - return Ni.nextDataId++; + return Bi.nextDataId++; } numDataIds() { return this.texData.numDataIds() - this.pendingDeletes; } - writeTexture(e, t10, o, n, s, a) { - let i = this.makeTensorInfo(t10, o), p = this.texData.get(i.dataId); + writeTexture(e, t6, o, n, s, a) { + let i = this.makeTensorInfo(t6, o), p = this.texData.get(i.dataId); p.isPacked = false, p.texture = { texture: e, texShape: [n, s] }, p.texShape = [n, s]; - let u = ac(t10), c = new Al(u, false, a), l = this.runWebGLProgram(c, [i], o, [[n, s]]); - return l.shape = t10, p.texture = null, this.disposeIntermediateTensorInfo(i), l.dataId; + let u = rc(t6), c = new vl(u, false, a), l = this.runWebGLProgram(c, [i], o, [[n, s]]); + return l.shape = t6, p.texture = null, this.disposeIntermediateTensorInfo(i), l.dataId; } - write(e, t10, o) { - if ((P().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || P().getBool("DEBUG")) && this.checkNumericalProblems(e), o === "complex64" && e != null) + write(e, t6, o) { + if ((O().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || O().getBool("DEBUG")) && this.checkNumericalProblems(e), o === "complex64" && e != null) throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); let n = { id: this.nextDataId() }; - return this.texData.set(n, { shape: t10, dtype: o, values: e, usage: ir.UPLOAD, refCount: 1 }), n; + return this.texData.set(n, { shape: t6, dtype: o, values: e, usage: ir.UPLOAD, refCount: 1 }), n; } refCount(e) { return this.texData.has(e) ? this.texData.get(e).refCount : 0; } incRef(e) { - let t10 = this.texData.get(e); - t10.refCount++; + let t6 = this.texData.get(e); + t6.refCount++; } decRef(e) { if (this.texData.has(e)) { - let t10 = this.texData.get(e); - t10.refCount--; + let t6 = this.texData.get(e); + t6.refCount--; } } - move(e, t10, o, n, s) { - if (P().getBool("DEBUG") && this.checkNumericalProblems(t10), n === "complex64") + move(e, t6, o, n, s) { + if (O().getBool("DEBUG") && this.checkNumericalProblems(t6), n === "complex64") throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); - this.texData.set(e, { shape: o, dtype: n, values: t10, usage: ir.UPLOAD, refCount: s }); + this.texData.set(e, { shape: o, dtype: n, values: t6, usage: ir.UPLOAD, refCount: s }); } disposeIntermediateTensorInfo(e) { this.disposeData(e.dataId); } readSync(e) { - let t10 = this.texData.get(e), { values: o, dtype: n, complexTensorInfos: s, slice: a, shape: i, isPacked: p } = t10; + let t6 = this.texData.get(e), { values: o, dtype: n, complexTensorInfos: s, slice: a, shape: i, isPacked: p } = t6; if (a != null) { let m; - p ? m = new No(i, Pu) : m = new fr(i, Pu); - let f = this.runWebGLProgram(m, [{ dataId: e, shape: i, dtype: n }], n), d = this.readSync(f.dataId); - return this.disposeIntermediateTensorInfo(f), d; + p ? m = new Ar(i, Qs) : m = new Jt(i, Qs); + let d = this.runWebGLProgram(m, [{ dataId: e, shape: i, dtype: n }], n), f = this.readSync(d.dataId); + return this.disposeIntermediateTensorInfo(d), f; } if (o != null) return this.convertAndCacheOnCPU(e); if (n === "string") return o; let u = this.activeTimers != null, c; - u && (c = x.now()); + u && (c = y.now()); let l; if (n === "complex64") { - let m = this.readSync(s.real.dataId), f = this.readSync(s.imag.dataId); - l = I.mergeRealAndImagArrays(m, f); + let m = this.readSync(s.real.dataId), d = this.readSync(s.imag.dataId); + l = S.mergeRealAndImagArrays(m, d); } else l = this.getValuesFromTexture(e); - return u && (this.downloadWaitMs += x.now() - c), this.convertAndCacheOnCPU(e, l); + return u && (this.downloadWaitMs += y.now() - c), this.convertAndCacheOnCPU(e, l); } async read(e) { if (this.pendingRead.has(e)) { - let d = this.pendingRead.get(e); - return new Promise((h) => d.push(h)); + let f = this.pendingRead.get(e); + return new Promise((h) => f.push(h)); } - let t10 = this.texData.get(e), { values: o, shape: n, slice: s, dtype: a, complexTensorInfos: i, isPacked: p } = t10; + let t6 = this.texData.get(e), { values: o, shape: n, slice: s, dtype: a, complexTensorInfos: i, isPacked: p } = t6; if (s != null) { - let d; - p ? d = new No(n, Pu) : d = new fr(n, Pu); - let h = this.runWebGLProgram(d, [{ dataId: e, shape: n, dtype: a }], a), g = this.read(h.dataId); + let f; + p ? f = new Ar(n, Qs) : f = new Jt(n, Qs); + let h = this.runWebGLProgram(f, [{ dataId: e, shape: n, dtype: a }], a), g = this.read(h.dataId); return this.disposeIntermediateTensorInfo(h), g; } if (o != null) return this.convertAndCacheOnCPU(e); - if (P().getBool("DEBUG") && !P().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && P().getNumber("WEBGL_VERSION") === 2) + if (O().getBool("DEBUG") && !O().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && O().getNumber("WEBGL_VERSION") === 2) throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported."); let u = null, c; - if (a !== "complex64" && P().get("WEBGL_BUFFER_SUPPORTED")) { + if (a !== "complex64" && O().get("WEBGL_BUFFER_SUPPORTED")) { c = this.decode(e); - let d = this.texData.get(c.dataId); - u = this.gpgpu.createBufferFromTexture(d.texture.texture, ..._l(n)); + let f = this.texData.get(c.dataId); + u = this.gpgpu.createBufferFromTexture(f.texture.texture, ...Cl(n)); } this.pendingRead.set(e, []), a !== "complex64" && await this.gpgpu.createAndWaitForFence(); let l; if (a === "complex64") { - let d = await Promise.all([this.read(i.real.dataId), this.read(i.imag.dataId)]), h = d[0], g = d[1]; - l = I.mergeRealAndImagArrays(h, g); + let f = await Promise.all([this.read(i.real.dataId), this.read(i.imag.dataId)]), h = f[0], g = f[1]; + l = S.mergeRealAndImagArrays(h, g); } else if (u == null) l = this.getValuesFromTexture(e); else { - let d = x.sizeFromShape(n); - l = this.gpgpu.downloadFloat32MatrixFromBuffer(u, d); + let f = y.sizeFromShape(n); + l = this.gpgpu.downloadFloat32MatrixFromBuffer(u, f); } if (c != null && this.disposeIntermediateTensorInfo(c), u != null) { - let d = this.gpgpu.gl; - me(d, () => d.deleteBuffer(u)); + let f = this.gpgpu.gl; + ce(f, () => f.deleteBuffer(u)); } - let m = this.convertAndCacheOnCPU(e, l), f = this.pendingRead.get(e); - return this.pendingRead.delete(e), f.forEach((d) => d(m)), this.pendingDisposal.has(e) && (this.pendingDisposal.delete(e), this.disposeData(e) && cr().removeDataId(e, this), this.pendingDeletes--), m; + let m = this.convertAndCacheOnCPU(e, l), d = this.pendingRead.get(e); + return this.pendingRead.delete(e), d.forEach((f) => f(m)), this.pendingDisposal.has(e) && (this.pendingDisposal.delete(e), this.disposeData(e) && cr().removeDataId(e, this), this.pendingDeletes--), m; } - readToGPU(e, t10 = {}) { + readToGPU(e, t6 = {}) { let o = this.texData.get(e), { values: n, shape: s, slice: a, dtype: i, isPacked: p, texture: u } = o; if (i === "complex64") throw new Error("Does not support reading texture for complex64 dtype."); if (a != null) { - let f; - p ? f = new No(s, Pu) : f = new fr(s, Pu); - let d = this.runWebGLProgram(f, [{ dataId: e, shape: s, dtype: i }], i), h = this.readToGPU(d, t10); - return this.disposeIntermediateTensorInfo(d), h; + let d; + p ? d = new Ar(s, Qs) : d = new Jt(s, Qs); + let f = this.runWebGLProgram(d, [{ dataId: e, shape: s, dtype: i }], i), h = this.readToGPU(f, t6); + return this.disposeIntermediateTensorInfo(f), h; } if (u == null) throw n != null ? new Error("Data is not on GPU but on CPU.") : new Error("There is no data on GPU or CPU."); - let c = this.decode(e, t10.customTexShape), l = cr().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); + let c = this.decode(e, t6.customTexShape), l = cr().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); return Object.assign({ tensorRef: l }, m.texture); } bufferSync(e) { - let t10 = this.readSync(e.dataId); + let t6 = this.readSync(e.dataId); if (e.dtype === "string") try { - let o = t10.map((n) => x.decodeString(n)); - return ne(e.shape, e.dtype, o); + let o = t6.map((n) => y.decodeString(n)); + return le(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ne(e.shape, e.dtype, t10); + return le(e.shape, e.dtype, t6); } checkNumericalProblems(e) { if (e != null) - for (let t10 = 0; t10 < e.length; t10++) { - let o = e[t10]; - if (!VI(o)) - throw P().getBool("WEBGL_RENDER_FLOAT32_CAPABLE") ? Error(`The value ${o} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`) : Error(`The value ${o} cannot be represented on this device.`); + for (let t6 = 0; t6 < e.length; t6++) { + let o = e[t6]; + if (!OS(o)) + throw O().getBool("WEBGL_RENDER_FLOAT32_CAPABLE") ? Error(`The value ${o} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`) : Error(`The value ${o} cannot be represented on this device.`); } } getValuesFromTexture(e) { - let { shape: t10, dtype: o, isPacked: n } = this.texData.get(e), s = x.sizeFromShape(t10); - if (P().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { - let m = this.decode(e), f = this.texData.get(m.dataId), d = this.gpgpu.downloadMatrixFromPackedTexture(f.texture.texture, ..._l(t10)).subarray(0, s); - return this.disposeIntermediateTensorInfo(m), d; + let { shape: t6, dtype: o, isPacked: n } = this.texData.get(e), s = y.sizeFromShape(t6); + if (O().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { + let m = this.decode(e), d = this.texData.get(m.dataId), f = this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture, ...Cl(t6)).subarray(0, s); + return this.disposeIntermediateTensorInfo(m), f; } - let a = P().getBool("WEBGL_PACK") && n === true, i = a ? ac(t10) : t10, p = a ? new Yd(i) : new Xd(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: e }], "float32"), c = this.texData.get(u.dataId), l = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture, c.texShape[0], c.texShape[1]).subarray(0, s); + let a = O().getBool("WEBGL_PACK") && n === true, i = a ? rc(t6) : t6, p = a ? new Bf(i) : new Lf(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: e }], "float32"), c = this.texData.get(u.dataId), l = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture, c.texShape[0], c.texShape[1]).subarray(0, s); return this.disposeIntermediateTensorInfo(u), l; } timerAvailable() { - return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0; + return O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0; } time(e) { - let t10 = this.activeTimers, o = [], n = false; + let t6 = this.activeTimers, o = [], n = false; this.programTimersStack == null ? (this.programTimersStack = o, n = true) : this.activeTimers.push(o), this.activeTimers = o, e(); - let s = x.flatten(this.activeTimers.map((p) => p.query)).filter((p) => p != null), a = x.flatten(this.activeTimers.map((p) => p.name)).filter((p) => p != null); - this.activeTimers = t10, n && (this.programTimersStack = null); + let s = y.flatten(this.activeTimers.map((p) => p.query)).filter((p) => p != null), a = y.flatten(this.activeTimers.map((p) => p.name)).filter((p) => p != null); + this.activeTimers = t6, n && (this.programTimersStack = null); let i = { uploadWaitMs: this.uploadWaitMs, downloadWaitMs: this.downloadWaitMs, kernelMs: null, wallMs: null }; return (async () => { - if (P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + if (O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { let p = await Promise.all(s); - i.kernelMs = x.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "); + i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "); } else i.kernelMs = { error: "WebGL query timers are not supported in this environment." }; return this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; @@ -17805,33 +17866,33 @@ var Ni = class extends Jr { return { unreliable: false, numBytesInGPU: this.numBytesInGPU, numBytesInGPUAllocated: this.textureManager.numBytesAllocated, numBytesInGPUFree: this.textureManager.numBytesFree }; } startTimer() { - return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0 ? this.gpgpu.beginQuery() : { startMs: x.now(), endMs: null }; + return O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0 ? this.gpgpu.beginQuery() : { startMs: y.now(), endMs: null }; } endTimer(e) { - return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0 ? (this.gpgpu.endQuery(), e) : (e.endMs = x.now(), e); + return O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0 ? (this.gpgpu.endQuery(), e) : (e.endMs = y.now(), e); } async getQueryTime(e) { - if (P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) + if (O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) return this.gpgpu.waitForQueryAndGetTime(e); - let t10 = e; - return t10.endMs - t10.startMs; + let t6 = e; + return t6.endMs - t6.startMs; } - disposeData(e, t10 = false) { + disposeData(e, t6 = false) { if (this.pendingDisposal.has(e)) return false; if (!this.texData.has(e)) return true; - if (t10 ? this.texData.get(e).refCount = 0 : this.texData.get(e).refCount--, !t10 && this.texData.get(e).refCount > 0) + if (t6 ? this.texData.get(e).refCount = 0 : this.texData.get(e).refCount--, !t6 && this.texData.get(e).refCount > 0) return false; if (this.pendingRead.has(e)) return this.pendingDisposal.add(e), this.pendingDeletes++, false; this.releaseGPUData(e); let { complexTensorInfos: o } = this.texData.get(e); - return o != null && (this.disposeData(o.real.dataId, t10), this.disposeData(o.imag.dataId, t10)), this.texData.delete(e), true; + return o != null && (this.disposeData(o.real.dataId, t6), this.disposeData(o.imag.dataId, t6)), this.texData.delete(e), true; } releaseGPUData(e) { - let { texture: t10, dtype: o, texShape: n, usage: s, isPacked: a, slice: i } = this.texData.get(e), p = i && i.origDataId || e, u = this.dataRefCount.get(p); - u > 1 ? this.dataRefCount.set(p, u - 1) : (this.dataRefCount.delete(p), t10 != null && (this.numBytesInGPU -= this.computeBytes(n, o), this.textureManager.releaseTexture(t10, n, s, a))); + let { texture: t6, dtype: o, texShape: n, usage: s, isPacked: a, slice: i } = this.texData.get(e), p = i && i.origDataId || e, u = this.dataRefCount.get(p); + u > 1 ? this.dataRefCount.set(p, u - 1) : (this.dataRefCount.delete(p), t6 != null && (this.numBytesInGPU -= this.computeBytes(n, o), this.textureManager.releaseTexture(t6, n, s, a))); let c = this.texData.get(e); c.texture = null, c.texShape = null, c.isPacked = false, c.slice = null; } @@ -17841,166 +17902,166 @@ var Ni = class extends Jr { getDataInfo(e) { return this.texData.get(e); } - shouldExecuteOnCPU(e, t10 = mY) { - return P().getBool("WEBGL_CPU_FORWARD") && e.every((o) => this.texData.get(o.dataId).texture == null && x.sizeFromShape(o.shape) < t10); + shouldExecuteOnCPU(e, t6 = D8) { + return O().getBool("WEBGL_CPU_FORWARD") && e.every((o) => this.texData.get(o.dataId).texture == null && y.sizeFromShape(o.shape) < t6); } getGPGPUContext() { return this.gpgpu; } where(e) { - I.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); - let t10 = e.dataSync(); - return uY(e.shape, t10); + S.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); + let t6 = e.dataSync(); + return $8(e.shape, t6); } - packedUnaryOp(e, t10, o) { - let n = new No(e.shape, t10), s = this.compileAndRun(n, [e], o); + packedUnaryOp(e, t6, o) { + let n = new Ar(e.shape, t6), s = this.compileAndRun(n, [e], o); return cr().makeTensorFromTensorInfo(s); } abs(e) { if (this.shouldExecuteOnCPU([e]) && e.dtype !== "complex64") { - let n = nh(this.texData.get(e.dataId).values); + let n = Kf(this.texData.get(e.dataId).values); return this.makeOutput(e.shape, e.dtype, n); } - if (P().getBool("WEBGL_PACK_UNARY_OPERATIONS")) - return this.packedUnaryOp(e, kw, e.dtype); - let t10 = new fr(e.shape, kw), o = this.compileAndRun(t10, [e]); + if (O().getBool("WEBGL_PACK_UNARY_OPERATIONS")) + return this.packedUnaryOp(e, Cw, e.dtype); + let t6 = new Jt(e.shape, Cw), o = this.compileAndRun(t6, [e]); return cr().makeTensorFromTensorInfo(o); } - makeTensorInfo(e, t10, o) { + makeTensorInfo(e, t6, o) { let n; - if (t10 === "string" && o != null && o.length > 0 && x.isString(o[0])) { - let s = o.map((a) => x.encodeString(a)); - n = this.write(s, e, t10); + if (t6 === "string" && o != null && o.length > 0 && y.isString(o[0])) { + let s = o.map((a) => y.encodeString(a)); + n = this.write(s, e, t6); } else - n = this.write(o, e, t10); - return this.texData.get(n).usage = null, { dataId: n, shape: e, dtype: t10 }; + n = this.write(o, e, t6); + return this.texData.get(n).usage = null, { dataId: n, shape: e, dtype: t6 }; } - makeOutput(e, t10, o) { - return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e, t10, o), this); + makeOutput(e, t6, o) { + return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e, t6, o), this); } unpackTensor(e) { - let t10 = new uh(e.shape); - return this.runWebGLProgram(t10, [e], e.dtype); + let t6 = new Qf(e.shape); + return this.runWebGLProgram(t6, [e], e.dtype); } packTensor(e) { - let t10 = new ah(e.shape), o = true; - return this.runWebGLProgram(t10, [e], e.dtype, null, o); + let t6 = new Xf(e.shape), o = true; + return this.runWebGLProgram(t6, [e], e.dtype, null, o); } - packedReshape(e, t10) { - let o = [Pa(e.shape), ...Oa(e.shape)], n = { dtype: e.dtype, shape: o, dataId: e.dataId }, s = [Pa(t10), ...Oa(t10)], a = new hc(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], e.dtype, p, i); - return { dataId: u.dataId, shape: t10, dtype: u.dtype }; + packedReshape(e, t6) { + let o = [Va(e.shape), ...za(e.shape)], n = { dtype: e.dtype, shape: o, dataId: e.dataId }, s = [Va(t6), ...za(t6)], a = new lc(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], e.dtype, p, i); + return { dataId: u.dataId, shape: t6, dtype: u.dtype }; } - decode(e, t10) { + decode(e, t6) { let o = this.texData.get(e), { isPacked: n, shape: s, dtype: a } = o; - if (t10 != null) { - let m = x.sizeFromShape(s), f = t10[0] * t10[1] * 4; - x.assert(m <= f, () => "customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."); + if (t6 != null) { + let m = y.sizeFromShape(s), d = t6[0] * t6[1] * 4; + y.assert(m <= d, () => "customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."); } - let i = ac(s), p; - n ? p = new jd(i) : p = new Kd(i); - let u = true, c = [t10 != null ? t10 : _l(i)], l = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: e }], a, c, u, t10); + let i = rc(s), p; + n ? p = new Mf(i) : p = new Pf(i); + let u = true, c = [t6 != null ? t6 : Cl(i)], l = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: e }], a, c, u, t6); return { dtype: a, shape: s, dataId: l.dataId }; } - runWebGLProgram(e, t10, o, n, s = false, a) { + runWebGLProgram(e, t6, o, n, s = false, a) { let i = this.makeTensorInfo(e.outputShape, o), p = this.texData.get(i.dataId); - if (e.packedOutput && (p.isPacked = true), e.outPackingScheme === ki.DENSE) { - let y = a != null ? a : _l(e.outputShape); - p.texShape = y.map((b) => b * 2); + if (e.packedOutput && (p.isPacked = true), e.outPackingScheme === Mi.DENSE) { + let x = a != null ? a : Cl(e.outputShape); + p.texShape = x.map((b) => b * 2); } - if (e.outTexUsage != null && (p.usage = e.outTexUsage), x.sizeFromShape(i.shape) === 0) - return p.values = x.getTypedArrayFromDType(i.dtype, 0), i; - let u = [], c = t10.map((y) => { - if (y.dtype === "complex64") + if (e.outTexUsage != null && (p.usage = e.outTexUsage), y.sizeFromShape(i.shape) === 0) + return p.values = y.getTypedArrayFromDType(i.dtype, 0), i; + let u = [], c = t6.map((x) => { + if (x.dtype === "complex64") throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."); - let b = this.texData.get(y.dataId); + let b = this.texData.get(x.dataId); if (b.texture == null) { - if (!e.packedInputs && x.sizeFromShape(y.shape) <= P().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")) - return { shape: y.shape, texData: null, isUniform: true, uniformValues: b.values }; - e.packedInputs && (b.isPacked = true, b.shape = y.shape); + if (!e.packedInputs && y.sizeFromShape(x.shape) <= O().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")) + return { shape: x.shape, texData: null, isUniform: true, uniformValues: b.values }; + e.packedInputs && (b.isPacked = true, b.shape = x.shape); } - if (this.uploadToGPU(y.dataId), !!b.isPacked != !!e.packedInputs) - y = b.isPacked ? this.unpackTensor(y) : this.packTensor(y), u.push(y), b = this.texData.get(y.dataId); - else if (b.isPacked && !Ti(b.shape, y.shape)) { - let C = y, w = y.shape; - y.shape = b.shape, y = this.packedReshape(y, w), u.push(y), b = this.texData.get(y.dataId), C.shape = w; + if (this.uploadToGPU(x.dataId), !!b.isPacked != !!e.packedInputs) + x = b.isPacked ? this.unpackTensor(x) : this.packTensor(x), u.push(x), b = this.texData.get(x.dataId); + else if (b.isPacked && !Li(b.shape, x.shape)) { + let C = x, w = x.shape; + x.shape = b.shape, x = this.packedReshape(x, w), u.push(x), b = this.texData.get(x.dataId), C.shape = w; } - return { shape: y.shape, texData: b, isUniform: false }; + return { shape: x.shape, texData: b, isUniform: false }; }); this.uploadToGPU(i.dataId); - let l = { shape: i.shape, texData: p, isUniform: false }, m = n$(e, c, l), f = this.getAndSaveBinary(m, () => r$(this.gpgpu, e, c, l)), d = this.activeTimers != null, h; - d && (h = this.startTimer()), P().get("ENGINE_COMPILE_ONLY") || o$(this.gpgpu, f, c, l, n), u.forEach((y) => this.disposeIntermediateTensorInfo(y)), d && (h = this.endTimer(h), this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(h) })); - let g = P().get("WEBGL_FLUSH_THRESHOLD"); + let l = { shape: i.shape, texData: p, isUniform: false }, m = FE(e, c, l), d = this.getAndSaveBinary(m, () => AE(this.gpgpu, e, c, l)), f = this.activeTimers != null, h; + f && (h = this.startTimer()), O().get("ENGINE_COMPILE_ONLY") || RE(this.gpgpu, d, c, l, n), u.forEach((x) => this.disposeIntermediateTensorInfo(x)), f && (h = this.endTimer(h), this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(h) })); + let g = O().get("WEBGL_FLUSH_THRESHOLD"); if (g > 0) { - let y = x.now(); - y - this.lastGlFlushTime > g && (this.gpgpu.gl.flush(), this.lastGlFlushTime = y); + let x = y.now(); + x - this.lastGlFlushTime > g && (this.gpgpu.gl.flush(), this.lastGlFlushTime = x); } - if (!P().getBool("WEBGL_LAZILY_UNPACK") && p.isPacked && s === false) { - let y = this.unpackTensor(i); - return this.disposeIntermediateTensorInfo(i), y; + if (!O().getBool("WEBGL_LAZILY_UNPACK") && p.isPacked && s === false) { + let x = this.unpackTensor(i); + return this.disposeIntermediateTensorInfo(i), x; } return i; } - compileAndRun(e, t10, o, n, s = false) { - return o = o || t10[0].dtype, this.runWebGLProgram(e, t10, o, n, s); + compileAndRun(e, t6, o, n, s = false) { + return o = o || t6[0].dtype, this.runWebGLProgram(e, t6, o, n, s); } - getAndSaveBinary(e, t10) { - return e in this.binaryCache || (this.binaryCache[e] = t10()), this.binaryCache[e]; + getAndSaveBinary(e, t6) { + return e in this.binaryCache || (this.binaryCache[e] = t6()), this.binaryCache[e]; } getTextureManager() { return this.textureManager; } dispose() { - this.disposed || (P().getBool("IS_TEST") || Object.keys(this.binaryCache).forEach((t10) => { - this.gpgpu.deleteProgram(this.binaryCache[t10].webGLProgram), delete this.binaryCache[t10]; + this.disposed || (O().getBool("IS_TEST") || Object.keys(this.binaryCache).forEach((t6) => { + this.gpgpu.deleteProgram(this.binaryCache[t6].webGLProgram), delete this.binaryCache[t6]; }), this.textureManager.dispose(), this.canvas != null && typeof HTMLCanvasElement != "undefined" && this.canvas instanceof HTMLCanvasElement ? this.canvas.remove() : this.canvas = null, this.gpgpuCreatedLocally && (this.gpgpu.program = null, this.gpgpu.dispose()), this.disposed = true); } floatPrecision() { - return this.floatPrecisionValue == null && (this.floatPrecisionValue = Ne(() => { - if (!P().get("WEBGL_RENDER_FLOAT32_ENABLED")) { - let e = P().getBool("DEBUG"); - P().set("DEBUG", false); - let t10 = this.abs(be(1e-8)).dataSync()[0]; - if (P().set("DEBUG", e), t10 > 0) + return this.floatPrecisionValue == null && (this.floatPrecisionValue = Ee(() => { + if (!O().get("WEBGL_RENDER_FLOAT32_ENABLED")) { + let e = O().getBool("DEBUG"); + O().set("DEBUG", false); + let t6 = this.abs(be(1e-8)).dataSync()[0]; + if (O().set("DEBUG", e), t6 > 0) return 32; } return 16; })), this.floatPrecisionValue; } epsilon() { - return this.floatPrecision() === 32 ? pY : cY; + return this.floatPrecision() === 32 ? A8 : R8; } uploadToGPU(e) { - let t10 = this.texData.get(e), { shape: o, dtype: n, values: s, texture: a, usage: i, isPacked: p } = t10; + let t6 = this.texData.get(e), { shape: o, dtype: n, values: s, texture: a, usage: i, isPacked: p } = t6; if (a != null) return; let u = this.activeTimers != null, c; - u && (c = x.now()); - let l = t10.texShape; - if (l == null && (l = JI(o, p), t10.texShape = l), s != null) { - let m = ac(o), f, d = l[1], h = l[0], g = s instanceof Uint8Array || s instanceof Uint8ClampedArray; - (p || !g) && ([d, h] = Ks(l[0], l[1])), p ? f = new Qd(m, g) : f = new Al(m, g); - let y = g ? [h, d] : l, b = this.makeTensorInfo(y, n), C = this.texData.get(b.dataId); - g ? C.usage = ir.PIXELS : C.usage = ir.UPLOAD, C.texShape = y, this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId), d, h, s); - let w = [[h, d]], k = true, _ = this.runWebGLProgram(f, [b], n, w, k), E = this.texData.get(_.dataId); - t10.texShape = E.texShape, t10.isPacked = E.isPacked, t10.usage = E.usage, P().get("ENGINE_COMPILE_ONLY") ? this.disposeData(_.dataId) : (t10.texture = E.texture, t10.values = null, this.texData.delete(_.dataId)), this.disposeIntermediateTensorInfo(b), u && (this.uploadWaitMs += x.now() - c); + u && (c = y.now()); + let l = t6.texShape; + if (l == null && (l = jS(o, p), t6.texShape = l), s != null) { + let m = rc(o), d, f = l[1], h = l[0], g = s instanceof Uint8Array || s instanceof Uint8ClampedArray; + (p || !g) && ([f, h] = Ys(l[0], l[1])), p ? d = new Vf(m, g) : d = new vl(m, g); + let x = g ? [h, f] : l, b = this.makeTensorInfo(x, n), C = this.texData.get(b.dataId); + g ? C.usage = ir.PIXELS : C.usage = ir.UPLOAD, C.texShape = x, this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId), f, h, s); + let w = [[h, f]], k = true, _ = this.runWebGLProgram(d, [b], n, w, k), $ = this.texData.get(_.dataId); + t6.texShape = $.texShape, t6.isPacked = $.isPacked, t6.usage = $.usage, O().get("ENGINE_COMPILE_ONLY") ? this.disposeData(_.dataId) : (t6.texture = $.texture, t6.values = null, this.texData.delete(_.dataId)), this.disposeIntermediateTensorInfo(b), u && (this.uploadWaitMs += y.now() - c); } else { let m = this.acquireTexture(l, i, n, p); - t10.texture = m; + t6.texture = m; } } - convertAndCacheOnCPU(e, t10) { + convertAndCacheOnCPU(e, t6) { let o = this.texData.get(e), { dtype: n } = o; - return this.releaseGPUData(e), t10 != null && (o.values = hY(t10, n)), o.values; + return t6 != null && (o.values = M8(t6, n)), o.values; } - acquireTexture(e, t10, o, n) { + acquireTexture(e, t6, o, n) { if (this.numBytesInGPU += this.computeBytes(e, o), !this.warnedAboutMemory && this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) { let s = (this.numBytesInGPU / 1024 / 1024).toFixed(2); this.warnedAboutMemory = true, console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`); } - return this.textureManager.acquireTexture(e, t10, n); + return this.textureManager.acquireTexture(e, t6, n); } - computeBytes(e, t10) { - return e[0] * e[1] * x.bytesPerElement(t10); + computeBytes(e, t6) { + return e[0] * e[1] * y.bytesPerElement(t6); } checkCompileCompletion() { for (let [, e] of Object.entries(this.binaryCache)) @@ -18009,14 +18070,14 @@ var Ni = class extends Jr { async checkCompileCompletionAsync() { let e = []; if (this.gpgpu.parallelCompilationExtension) { - for (let [, t10] of Object.entries(this.binaryCache)) - e.push(this.checkCompletionAsync_(t10)); + for (let [, t6] of Object.entries(this.binaryCache)) + e.push(this.checkCompletionAsync_(t6)); return Promise.all(e); } else { - for (let [, t10] of Object.entries(this.binaryCache)) { + for (let [, t6] of Object.entries(this.binaryCache)) { let o = new Promise((n) => { try { - this.checkCompletion_(t10), n(true); + this.checkCompletion_(t6), n(true); } catch (s) { throw s; } @@ -18027,52 +18088,52 @@ var Ni = class extends Jr { } } async checkCompletionAsync_(e) { - return this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR) ? this.checkCompletion_(e) : (await kC(), this.checkCompletionAsync_(e)); + return this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR) ? this.checkCompletion_(e) : (await CC(), this.checkCompletionAsync_(e)); } checkCompletion_(e) { if (this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) - throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)), this.gpgpu.gl.getShaderParameter(e.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? (zd(e.source, this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); + throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)), this.gpgpu.gl.getShaderParameter(e.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? ($f(e.source, this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); return true; } getUniformLocations() { for (let [, e] of Object.entries(this.binaryCache)) { - let { uniformLocations: t10, customUniformLocations: o, infLoc: n, nanLoc: s, inShapesLocations: a, inTexShapesLocations: i, outShapeLocation: p, outShapeStridesLocation: u, outTexShapeLocation: c } = aw(this.gpgpu, e.program, e.webGLProgram); - e.uniformLocations = t10, e.customUniformLocations = o, e.infLoc = n, e.nanLoc = s, e.inShapesLocations = a, e.inTexShapesLocations = i, e.outShapeLocation = p, e.outShapeStridesLocation = u, e.outTexShapeLocation = c; + let { uniformLocations: t6, customUniformLocations: o, infLoc: n, nanLoc: s, inShapesLocations: a, inTexShapesLocations: i, outShapeLocation: p, outShapeStridesLocation: u, outTexShapeLocation: c } = tw(this.gpgpu, e.program, e.webGLProgram); + e.uniformLocations = t6, e.customUniformLocations = o, e.infLoc = n, e.nanLoc = s, e.inShapesLocations = a, e.inTexShapesLocations = i, e.outShapeLocation = p, e.outShapeStridesLocation = u, e.outTexShapeLocation = c; } } - createTensorFromTexture(e, t10, o) { + createTensorFromTexture(e, t6, o) { let { texture: n, height: s, width: a, channels: i } = e, p = cr().backend; if (!p.gpgpu.gl.isTexture(n)) throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'."); - let u = p.writeTexture(n, t10, o, s, a, i); - return cr().makeTensorFromDataId(u, t10, o, p); + let u = p.writeTexture(n, t6, o, s, a, i); + return cr().makeTensorFromDataId(u, t6, o, p); } }; -Ni.nextDataId = 0; -function hY(r, e) { +Bi.nextDataId = 0; +function M8(r, e) { if (e === "float32" || e === "complex64") return r; if (e === "int32" || e === "bool") { - let t10 = e === "int32" ? new Int32Array(r.length) : new Uint8Array(r.length); - for (let o = 0; o < t10.length; ++o) - t10[o] = Math.round(r[o]); - return t10; + let t6 = e === "int32" ? new Int32Array(r.length) : new Uint8Array(r.length); + for (let o = 0; o < t6.length; ++o) + t6[o] = Math.round(r[o]); + return t6; } else throw new Error(`Unknown dtype ${e}`); } -var gY = "4.0.0"; -function pR() { - P().set("WEBGL_FORCE_F16_TEXTURES", true); +var L8 = "4.1.0"; +function L$() { + O().set("WEBGL_FORCE_F16_TEXTURES", true); } -ii.isBrowser() && pi("webgl", () => new Ni(), 2); -var R9e = { forceHalfFloat: pR }; -var gc = ` +yi.isBrowser() && Ci("webgl", () => new Bi(), 2); +var L9e = { forceHalfFloat: L$ }; +var mc = ` if (isnan(a)) return a; if (isnan(b)) return b; `; -var _o = class { - constructor(e, t10, o) { - this.variableNames = ["A", "B"], this.outputShape = I.assertAndGetBroadcastShape(t10, o), this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` +var io = class { + constructor(e, t6, o) { + this.variableNames = ["A", "B"], this.outputShape = S.assertAndGetBroadcastShape(t6, o), this.enableShapeUniforms = ct(this.outputShape.length), this.userCode = ` float binaryOperation(float a, float b) { ${e} } @@ -18085,20 +18146,20 @@ var _o = class { `; } }; -var js = ` +var Zs = ` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; `; -var Ko = class { - constructor(e, t10, o, n = false) { - this.variableNames = ["A", "B"], this.supportsBroadcasting = true, this.packedInputs = true, this.packedOutput = true, this.outputShape = I.assertAndGetBroadcastShape(t10, o); +var To = class { + constructor(e, t6, o, n = false) { + this.variableNames = ["A", "B"], this.supportsBroadcasting = true, this.packedInputs = true, this.packedOutput = true, this.outputShape = S.assertAndGetBroadcastShape(t6, o); let s = this.outputShape.length; - this.enableShapeUniforms = lt(s); + this.enableShapeUniforms = ct(s); let a = ""; if (n) - if (s === 0 || x.sizeFromShape(this.outputShape) === 1) + if (s === 0 || y.sizeFromShape(this.outputShape) === 1) a = ` result.y = 0.; result.z = 0.; @@ -18153,88 +18214,88 @@ var Ko = class { `; } }; -function Rt(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; +function At(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; + return t6.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var cR = { kernelName: uo, backendName: "webgl", kernelFunc: Rt }; -function Ar(r) { - let { inputs: e, backend: t10 } = r, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.texData.get(s.dataId), i = Rt({ inputs: { x: o }, backend: t10 }), p = Rt({ inputs: { x: n }, backend: t10 }); +var B$ = { kernelName: mo, backendName: "webgl", kernelFunc: At }; +function Rr(r) { + let { inputs: e, backend: t6 } = r, { real: o, imag: n } = e, s = t6.makeTensorInfo(o.shape, "complex64"), a = t6.texData.get(s.dataId), i = At({ inputs: { x: o }, backend: t6 }), p = At({ inputs: { x: n }, backend: t6 }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var lR = { kernelName: aa, backendName: "webgl", kernelFunc: Ar }; -var Tw = "return (a < 0.) ? b * a : a;"; -var Nw = ` +var V$ = { kernelName: ei, backendName: "webgl", kernelFunc: Rr }; +var Sw = "return (a < 0.) ? b * a : a;"; +var ww = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function xY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { alpha: s } = o, a = t10.makeTensorInfo([], "float32", x.createScalarValue(s, "float32")), i = P().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new Ko(Nw, n.shape, a.shape) : new _o(Tw, n.shape, a.shape), p = t10.runWebGLProgram(i, [n, a], "float32"); - return t10.disposeIntermediateTensorInfo(a), p; +function B8(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { alpha: s } = o, a = t6.makeTensorInfo([], "float32", y.createScalarValue(s, "float32")), i = O().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new To(ww, n.shape, a.shape) : new io(Sw, n.shape, a.shape), p = t6.runWebGLProgram(i, [n, a], "float32"); + return t6.disposeIntermediateTensorInfo(a), p; } -var mR = { kernelName: Nn, backendName: "webgl", kernelFunc: xY }; -var _w = "return (a < 0.) ? b * a : a;"; -var Ew = ` +var z$ = { kernelName: mn, backendName: "webgl", kernelFunc: B8 }; +var Iw = "return (a < 0.) ? b * a : a;"; +var vw = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function yY(r) { - let { inputs: e, backend: t10 } = r, { x: o, alpha: n } = e, s = P().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new Ko(Ew, o.shape, n.shape) : new _o(_w, o.shape, n.shape); - return t10.runWebGLProgram(s, [o, n], "float32"); +function V8(r) { + let { inputs: e, backend: t6 } = r, { x: o, alpha: n } = e, s = O().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new To(vw, o.shape, n.shape) : new io(Iw, o.shape, n.shape); + return t6.runWebGLProgram(s, [o, n], "float32"); } -var fR = { kernelName: Vn, backendName: "webgl", kernelFunc: yY }; -var jo = "if (isnan(x)) return x;"; -function he({ opSnippet: r, packedOpSnippet: e, cpuKernelImpl: t10, dtype: o }) { +var W$ = { kernelName: Rn, backendName: "webgl", kernelFunc: V8 }; +var _o = "if (isnan(x)) return x;"; +function ge({ opSnippet: r, packedOpSnippet: e, cpuKernelImpl: t6, dtype: o }) { return ({ inputs: n, backend: s }) => { let { x: a } = n, i = s, p = o || a.dtype; - if (i.shouldExecuteOnCPU([a]) && t10 != null) { - let l = i.texData.get(a.dataId), m = t10(l.values, p); + if (i.shouldExecuteOnCPU([a]) && t6 != null) { + let l = i.texData.get(a.dataId), m = t6(l.values, p); return i.makeTensorInfo(a.shape, p, m); } - let u = P().getBool("WEBGL_PACK_UNARY_OPERATIONS") && e != null, c; - return u ? c = new No(a.shape, e) : c = new fr(a.shape, r), i.runWebGLProgram(c, [a], p); + let u = O().getBool("WEBGL_PACK_UNARY_OPERATIONS") && e != null, c; + return u ? c = new Ar(a.shape, e) : c = new Jt(a.shape, r), i.runWebGLProgram(c, [a], p); }; } -function ot({ opSnippet: r, packedOpSnippet: e, checkOutOfBounds: t10 = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { +function tt({ opSnippet: r, packedOpSnippet: e, checkOutOfBounds: t6 = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { return ({ inputs: a, backend: i }) => { let { a: p, b: u } = a, c = i; if (o && p.dtype === "complex64") { - let d = c.texData.get(p.dataId), h = c.texData.get(u.dataId), [g, y] = [[d.complexTensorInfos.real, h.complexTensorInfos.real], [d.complexTensorInfos.imag, h.complexTensorInfos.imag]].map((C) => { - let [w, k] = C, _ = { dataId: w.dataId, dtype: w.dtype, shape: p.shape }, E = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, R = new _o(r, p.shape, u.shape); - return c.runWebGLProgram(R, [_, E], ct(w.dtype, k.dtype)); - }), b = Ar({ inputs: { real: g, imag: y }, backend: c }); - return c.disposeIntermediateTensorInfo(g), c.disposeIntermediateTensorInfo(y), b; + let f = c.texData.get(p.dataId), h = c.texData.get(u.dataId), [g, x] = [[f.complexTensorInfos.real, h.complexTensorInfos.real], [f.complexTensorInfos.imag, h.complexTensorInfos.imag]].map((C) => { + let [w, k] = C, _ = { dataId: w.dataId, dtype: w.dtype, shape: p.shape }, $ = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, A = new io(r, p.shape, u.shape); + return c.runWebGLProgram(A, [_, $], dt(w.dtype, k.dtype)); + }), b = Rr({ inputs: { real: g, imag: x }, backend: c }); + return c.disposeIntermediateTensorInfo(g), c.disposeIntermediateTensorInfo(x), b; } - let l = s || ct(p.dtype, u.dtype); + let l = s || dt(p.dtype, u.dtype); if ((p.dtype === "string" || u.dtype === "string" || c.shouldExecuteOnCPU([p, u])) && n != null) { - let d = c.texData.get(p.dataId).values, h = c.texData.get(u.dataId).values, g = p.dtype === "string" ? I.fromUint8ToStringArray(d) : d, y = p.dtype === "string" ? I.fromUint8ToStringArray(h) : h, [b, C] = n(p.shape, u.shape, g, y, l), w = c.makeTensorInfo(C, l), k = c.texData.get(w.dataId); + let f = c.texData.get(p.dataId).values, h = c.texData.get(u.dataId).values, g = p.dtype === "string" ? S.fromUint8ToStringArray(f) : f, x = p.dtype === "string" ? S.fromUint8ToStringArray(h) : h, [b, C] = n(p.shape, u.shape, g, x, l), w = c.makeTensorInfo(C, l), k = c.texData.get(w.dataId); return k.values = b, w; } - let m = P().getBool("WEBGL_PACK_BINARY_OPERATIONS") && e != null, f; - return m ? f = new Ko(e, p.shape, u.shape, t10) : f = new _o(r, p.shape, u.shape), c.runWebGLProgram(f, [p, u], l); + let m = O().getBool("WEBGL_PACK_BINARY_OPERATIONS") && e != null, d; + return m ? d = new To(e, p.shape, u.shape, t6) : d = new io(r, p.shape, u.shape), c.runWebGLProgram(d, [p, u], l); }; } -function Ma(r, e = false) { +function Wa(r, e = false) { if (r === "linear") - return e ? nR : Z$; + return e ? F$ : T$; if (r === "relu") - return e ? aR : eR; + return e ? O$ : E$; if (r === "elu") - return e ? sR : J$; + return e ? D$ : _$; if (r === "relu6") - return e ? iR : tR; + return e ? P$ : $$; if (r === "prelu") - return e ? Ew : _w; + return e ? vw : Iw; if (r === "leakyrelu") - return e ? Nw : Tw; + return e ? ww : Sw; if (r === "sigmoid") - return e ? uR : rR; + return e ? M$ : A$; throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`); } -var xc = class { - constructor(e, t10, o, n = false, s = false, a = false, i = null, p = false, u = false) { - this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = lt(this.outputShape.length); - let c = n ? e[1] : e[2], l = Math.ceil(c / 2), m = n ? "i * 2, rc.y" : "rc.y, i * 2", f = s ? "rc.z, i * 2" : "i * 2, rc.z", d = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"], h = s ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"], g = "", y = ""; +var dc = class { + constructor(e, t6, o, n = false, s = false, a = false, i = null, p = false, u = false) { + this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = ct(this.outputShape.length); + let c = n ? e[1] : e[2], l = Math.ceil(c / 2), m = n ? "i * 2, rc.y" : "rc.y, i * 2", d = s ? "rc.z, i * 2" : "i * 2, rc.z", f = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"], h = s ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"], g = "", x = ""; i && (p ? g = `vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} @@ -18243,11 +18304,11 @@ var xc = class { ${i} }` : g = `vec4 activation(vec4 x) { ${i} - }`, y = "result = activation(result);"); + }`, x = "result = activation(result);"); let b = a ? "result += getBiasAtOutCoords();" : ""; a && this.variableNames.push("bias"), p && this.variableNames.push("preluActivationWeights"), u && this.variableNames.push("leakyreluAlpha"); let C = "rc.x", w = "rc.x"; - e[0] < t10[0] ? C = `int(min(float(rc.x), ${e[0] - 1}.))` : t10[0] < e[0] && (w = `int(min(float(rc.x), ${t10[0] - 1}.))`), this.userCode = ` + e[0] < t6[0] ? C = `int(min(float(rc.x), ${e[0] - 1}.))` : t6[0] < e[0] && (w = `int(min(float(rc.x), ${t6[0] - 1}.))`), this.userCode = ` ${g} // Don't use uniform for sharedDimensionPacked for performance. const float sharedDimension = ${l}.0; @@ -18258,12 +18319,12 @@ var xc = class { int batchA = ${C}; int batchB = ${w}; vec4 a = getMatrixA(batchA, ${m}); - vec4 b = getMatrixB(batchB, ${f}); + vec4 b = getMatrixB(batchB, ${d}); // These swizzled products need to be separately added. // See: https://github.com/tensorflow/tfjs/issues/1735 - result += (${d[0]} * ${h[0]}); - result += (${d[1]} * ${h[1]}); + result += (${f[0]} * ${h[0]}); + result += (${f[1]} * ${h[1]}); } return result; } @@ -18274,17 +18335,17 @@ var xc = class { ${b} - ${y} + ${x} setOutput(result); } `; } }; -var $w = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; -var Dl = class { - constructor(e, t10, o) { - this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.outputShape = I.assertAndGetBroadcastShape(t10, o), this.userCode = ` +var kw = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; +var Nl = class { + constructor(e, t6, o) { + this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.outputShape = S.assertAndGetBroadcastShape(t6, o), this.userCode = ` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { ${e} @@ -18300,41 +18361,41 @@ var Dl = class { `; } }; -var dR = "return a * b;"; -function Pl(r) { - let { inputs: e, backend: t10 } = r, { a: o, b: n } = e, s = I.upcastType(o.dtype, n.dtype); +var U$ = "return a * b;"; +function Tl(r) { + let { inputs: e, backend: t6 } = r, { a: o, b: n } = e, s = S.upcastType(o.dtype, n.dtype); if (o.dtype === "complex64") { - let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), u = new Dl($w.REAL, o.shape, n.shape), c = new Dl($w.IMAG, o.shape, n.shape), l = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = t10.runWebGLProgram(u, l, "float32"), f = t10.runWebGLProgram(c, l, "float32"), d = Ar({ inputs: { real: m, imag: f }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f), d; + let i = t6.texData.get(o.dataId), p = t6.texData.get(n.dataId), u = new Nl(kw.REAL, o.shape, n.shape), c = new Nl(kw.IMAG, o.shape, n.shape), l = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = t6.runWebGLProgram(u, l, "float32"), d = t6.runWebGLProgram(c, l, "float32"), f = Rr({ inputs: { real: m, imag: d }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d), f; } - if (t10.shouldExecuteOnCPU([o, n])) { - let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), [u, c] = k$(o.shape, n.shape, i.values, p.values, s), l = t10.makeTensorInfo(c, s), m = t10.texData.get(l.dataId); + if (t6.shouldExecuteOnCPU([o, n])) { + let i = t6.texData.get(o.dataId), p = t6.texData.get(n.dataId), [u, c] = e$(o.shape, n.shape, i.values, p.values, s), l = t6.makeTensorInfo(c, s), m = t6.texData.get(l.dataId); return m.values = u, l; } let a; - return P().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new Ko(dR, o.shape, n.shape) : a = new _o(dR, o.shape, n.shape), t10.runWebGLProgram(a, [o, n], s); + return O().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new To(U$, o.shape, n.shape) : a = new io(U$, o.shape, n.shape), t6.runWebGLProgram(a, [o, n], s); } -var hR = { kernelName: ho, backendName: "webgl", kernelFunc: Pl }; -function gR(r, e, t10) { - let o = [Pa(r.shape), ...Oa(r.shape)], n = { dtype: r.dtype, shape: o, dataId: r.dataId }, s = [Pa(e), ...Oa(e)], a = new hc(s, o), i = true, p = [o], u = t10.runWebGLProgram(a, [n], r.dtype, p, i); +var G$ = { kernelName: kn, backendName: "webgl", kernelFunc: Tl }; +function H$(r, e, t6) { + let o = [Va(r.shape), ...za(r.shape)], n = { dtype: r.dtype, shape: o, dataId: r.dataId }, s = [Va(e), ...za(e)], a = new lc(s, o), i = true, p = [o], u = t6.runWebGLProgram(a, [n], r.dtype, p, i); return { dataId: u.dataId, shape: e, dtype: u.dtype }; } -function J(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { shape: s } = o, a = t10, i = x.sizeFromShape(n.shape), p = x.inferFromImplicitShape(s, i), u = x.sizeFromShape(p); - x.assert(i === u, () => `The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`); +function te(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { shape: s } = o, a = t6, i = y.sizeFromShape(n.shape), p = y.inferFromImplicitShape(s, i), u = y.sizeFromShape(p); + y.assert(i === u, () => `The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`); let c = a.texData.get(n.dataId); - return c.isPacked && !Ti(n.shape, p) && !(c.texture !== null && Ti(c.shape, p)) ? gR(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); + return c.isPacked && !Li(n.shape, p) && !(c.texture !== null && Li(c.shape, p)) ? H$(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); } -var xR = { kernelName: Ss, backendName: "webgl", kernelFunc: J }; -var Ol = class { - constructor(e, t10) { +var q$ = { kernelName: Ns, backendName: "webgl", kernelFunc: te }; +var _l = class { + constructor(e, t6) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = e; this.outputShape = [n, a]; let i = Math.floor(o / 4) * 4, p = o % 4, u = "sumValue += dot(values, ones);"; - if (t10 != null) { - let l = 1 / t10; - u = `sumValue += dot(values * ${x.isInt(l) ? l.toPrecision(2) : l}, ones);`; + if (t6 != null) { + let l = 1 / t6; + u = `sumValue += dot(values * ${y.isInt(l) ? l.toPrecision(2) : l}, ones);`; } let c = ""; s % o > 0 && (c = ` @@ -18393,24 +18454,24 @@ var Ol = class { `; } }; -var ch = class { - constructor(e, t10) { +var Jf = class { + constructor(e, t6) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = e; this.outputShape = [n, a]; let i = "0.0", p = ""; - t10 === "prod" ? i = "1.0" : t10 === "min" ? (i = "1.0 / 1e-20", p = "min") : t10 === "max" && (i = "-1.0 / 1e-20", p = "max"); - let u = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; - t10 === "sum" ? u = "sumValue" : t10 === "prod" ? u = "prodValue" : t10 === "all" ? u = "allValue" : t10 === "any" && (u = "anyValue"); + t6 === "prod" ? i = "1.0" : t6 === "min" ? (i = "1.0 / 1e-20", p = "min") : t6 === "max" && (i = "-1.0 / 1e-20", p = "max"); + let u = `${t6}(${t6}(${t6}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + t6 === "sum" ? u = "sumValue" : t6 === "prod" ? u = "prodValue" : t6 === "all" ? u = "allValue" : t6 === "any" && (u = "anyValue"); let c = Math.floor(o / 4) * 4, l = o % 4, m = ` - if (${t10 === "sum"}) { + if (${t6 === "sum"}) { sumValue += dot(values, ones); - } else if (${t10 === "prod"}) { + } else if (${t6 === "prod"}) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = ${p}(values, minMaxValue); - if (${t10 === "min"} || ${t10 === "max"}) { + if (${t6 === "min"} || ${t6 === "max"}) { minMaxValue = ${p}(values, minMaxValue); bvec4 isNaN = isnan(values); if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { @@ -18418,18 +18479,18 @@ var ch = class { } } } - `, f = "vec4"; - t10 === "all" ? (i = "1.0", m = ` + `, d = "vec4"; + t6 === "all" ? (i = "1.0", m = ` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); - `, f = "bvec4") : t10 === "any" && (i = "0.0", m = ` + `, d = "bvec4") : t6 === "any" && (i = "0.0", m = ` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); - `, f = "bvec4"); - let d = ""; - s % o > 0 && (d = ` + `, d = "bvec4"); + let f = ""; + s % o > 0 && (f = ` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } @@ -18438,7 +18499,7 @@ var ch = class { const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { - ${d} + ${f} return getX(batch, inIdx); } @@ -18456,7 +18517,7 @@ var ch = class { for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -18468,7 +18529,7 @@ var ch = class { int inIdx = inOffset + ${c}; if (${l === 1}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, @@ -18477,7 +18538,7 @@ var ch = class { ${m} } else if (${l === 2}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, @@ -18486,7 +18547,7 @@ var ch = class { ${m} } else if (${l === 3}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -18500,30 +18561,30 @@ var ch = class { `; } }; -function CY(r) { +function W8(r) { let e = []; for (; e.length === 0 || e[e.length - 1].outSize !== 1; ) { - let t10 = e.length ? e[e.length - 1].outSize : r[1], o = I.computeOptimalWindowSize(t10); - e.push({ inSize: t10, windowSize: o, outSize: Math.ceil(t10 / o) }); + let t6 = e.length ? e[e.length - 1].outSize : r[1], o = S.computeOptimalWindowSize(t6); + e.push({ inSize: t6, windowSize: o, outSize: Math.ceil(t6 / o) }); } return e; } -function qr(r, e, t10, o) { - let n = CY(r.shape), s = r; +function Gr(r, e, t6, o) { + let n = W8(r.shape), s = r; for (let a = 0; a < n.length; a++) { let { inSize: i, windowSize: p, outSize: u } = n[a], c, l; - t10 === "mean" ? c = a === 0 ? new Ol({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, i) : new Ol({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }) : c = new ch({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, t10), l = s, s = o.runWebGLProgram(c, [s], e), l.dataId !== r.dataId && o.disposeIntermediateTensorInfo(l); + t6 === "mean" ? c = a === 0 ? new _l({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, i) : new _l({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }) : c = new Jf({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, t6), l = s, s = o.runWebGLProgram(c, [s], e), l.dataId !== r.dataId && o.disposeIntermediateTensorInfo(l); } return s; } -var lh = class { - constructor(e, t10) { +var eh = class { + constructor(e, t6) { this.variableNames = ["A"]; let o = new Array(e.length); for (let a = 0; a < o.length; a++) - o[a] = e[t10[a]]; + o[a] = e[t6[a]]; this.outputShape = o, this.rank = o.length; - let n = _e(this.rank), s = IY(t10); + let n = _e(this.rank), s = U8(t6); this.userCode = ` void main() { ${n} resRC = getOutputCoords(); @@ -18532,26 +18593,26 @@ var lh = class { `; } }; -function IY(r) { +function U8(r) { let e = r.length; if (e > 6) throw Error(`Transpose for rank ${e} is not yet supported`); - let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"], o = new Array(e); + let t6 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"], o = new Array(e); for (let n = 0; n < r.length; n++) - o[r[n]] = t10[n]; + o[r[n]] = t6[n]; return o.join(); } -var mh = class { - constructor(e, t10) { +var th = class { + constructor(e, t6) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true; let o = new Array(e.length); for (let c = 0; c < o.length; c++) - o[c] = e[t10[c]]; + o[c] = e[t6[c]]; if (this.outputShape = o, this.rank = o.length, this.rank > 6) throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`); - let n = _e(this.rank), s = vw("rc", this.rank), a = new Array(this.rank); - for (let c = 0; c < t10.length; c++) - a[t10[c]] = s[c]; + let n = _e(this.rank), s = bw("rc", this.rank), a = new Array(this.rank); + for (let c = 0; c < t6.length; c++) + a[t6[c]] = s[c]; let i = `vec2(${a.slice(-2).join()})`, p = `++${s[this.rank - 1]} < ${o[this.rank - 1]}`, u = `getChannel(getA(${a.join()}), ${i})`; this.userCode = ` void main() { @@ -18573,101 +18634,101 @@ var mh = class { `; } }; -function _i(r, e, t10) { - let o = P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new mh(r.shape, e) : new lh(r.shape, e); - return t10.runWebGLProgram(o, [r], r.dtype); +function Vi(r, e, t6) { + let o = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new th(r.shape, e) : new eh(r.shape, e); + return t6.runWebGLProgram(o, [r], r.dtype); } -function yR(r, e, t10, o) { - let n = e, s = r.shape.length, a = x.parseAxisParam(n, r.shape), i = a, p = I.getAxesPermutation(i, s), u = p != null, c = r; - u && (c = _i(r, p, o), i = I.getInnerMostAxes(i.length, s)), I.assertAxesAreInnerMostDims("sum", i, s); - let [l, m] = I.computeOutAndReduceShapes(c.shape, i), f = l; - t10 && (f = I.expandShapeToKeepDim(l, a)); - let d = x.sizeFromShape(m), g = x.sizeFromShape(r.shape) / d, y = J({ inputs: { x: c }, attrs: { shape: [g, d] }, backend: o }), b = Ca(r.dtype), C = qr(y, b, "sum", o), w = J({ inputs: { x: C }, attrs: { shape: f }, backend: o }); - return o.disposeIntermediateTensorInfo(y), o.disposeIntermediateTensorInfo(C), u && o.disposeIntermediateTensorInfo(c), w; +function K$(r, e, t6, o) { + let n = e, s = r.shape.length, a = y.parseAxisParam(n, r.shape), i = a, p = S.getAxesPermutation(i, s), u = p != null, c = r; + u && (c = Vi(r, p, o), i = S.getInnerMostAxes(i.length, s)), S.assertAxesAreInnerMostDims("sum", i, s); + let [l, m] = S.computeOutAndReduceShapes(c.shape, i), d = l; + t6 && (d = S.expandShapeToKeepDim(l, a)); + let f = y.sizeFromShape(m), g = y.sizeFromShape(r.shape) / f, x = te({ inputs: { x: c }, attrs: { shape: [g, f] }, backend: o }), b = ka(r.dtype), C = Gr(x, b, "sum", o), w = te({ inputs: { x: C }, attrs: { shape: d }, backend: o }); + return o.disposeIntermediateTensorInfo(x), o.disposeIntermediateTensorInfo(C), u && o.disposeIntermediateTensorInfo(c), w; } function Ou(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; - return yR(n, s, a, t10); + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; + return K$(n, s, a, t6); } -var bR = { kernelName: jn, backendName: "webgl", kernelFunc: Ou }; +var j$ = { kernelName: Hn, backendName: "webgl", kernelFunc: Ou }; function xt(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { perm: s } = o, a = t6, i = n.shape.length, p = new Array(i); for (let c = 0; c < p.length; c++) p[c] = n.shape[s[c]]; let u; if (a.shouldExecuteOnCPU([n])) { let l = a.texData.get(n.dataId).values, m = Du(l, n.shape, n.dtype, s, p); u = a.makeTensorInfo(p, n.dtype); - let f = a.texData.get(u.dataId); - f.values = m; + let d = a.texData.get(u.dataId); + d.values = m; } else - u = _i(n, s, a); + u = Vi(n, s, a); return u; } -var CR = { kernelName: Mr, backendName: "webgl", kernelFunc: xt }; -var Rw = 1e3; -function Mu({ a: r, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r.shape.length, c = e.shape.length, l = t10 ? r.shape[u - 2] : r.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], f = t10 ? r.shape[u - 1] : r.shape[u - 2], d = o ? e.shape[c - 2] : e.shape[c - 1], h = r.shape.slice(0, -2), g = e.shape.slice(0, -2), y = x.sizeFromShape(h), b = x.sizeFromShape(g), w = br.assertAndGetBroadcastShape(r.shape.slice(0, -2), e.shape.slice(0, -2)).concat([f, d]); - x.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let k = t10 ? [y, l, f] : [y, f, l], _ = o ? [b, d, m] : [b, m, d], E = J({ inputs: { x: r }, backend: n, attrs: { shape: k } }), R = J({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), A = [E, R], D = Math.max(y, b), O = t10 ? E.shape[1] : E.shape[2], M = s != null, L = a != null, W = p === "leakyrelu", V = p != null ? Ma(p, true) : null, G = M || L || W || V != null, q; - if ((f === 1 || d === 1) && O > Rw && G === false) { - let j = E, Y = R; - t10 && (j = xt({ inputs: { x: E }, backend: n, attrs: { perm: [0, 2, 1] } }), A.push(j)), o && (Y = xt({ inputs: { x: R }, backend: n, attrs: { perm: [0, 2, 1] } }), A.push(Y)); - let Z = d !== 1, ee = d === 1, X = j; - Z && (X = J({ inputs: { x: j }, backend: n, attrs: { shape: [D, O, 1] } }), A.push(X)); - let Q = d === 1 ? 2 : 1, se = Y; - ee && (se = J({ inputs: { x: Y }, backend: n, attrs: { shape: [D, 1, O] } }), A.push(se)); - let ie = Pl({ inputs: { a: X, b: se }, backend: n }); - q = Ou({ inputs: { x: ie }, backend: n, attrs: { axis: Q, keepDims: true } }), A.push(ie); +var X$ = { kernelName: ro, backendName: "webgl", kernelFunc: xt }; +var Nw = 1e3; +function Pu({ a: r, b: e, transposeA: t6, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r.shape.length, c = e.shape.length, l = t6 ? r.shape[u - 2] : r.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], d = t6 ? r.shape[u - 1] : r.shape[u - 2], f = o ? e.shape[c - 2] : e.shape[c - 1], h = r.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), w = br.assertAndGetBroadcastShape(r.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t6} and transposeB=${o} must match.`); + let k = t6 ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], $ = te({ inputs: { x: r }, backend: n, attrs: { shape: k } }), A = te({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), R = [$, A], D = Math.max(x, b), P = t6 ? $.shape[1] : $.shape[2], M = s != null, L = a != null, W = p === "leakyrelu", V = p != null ? Wa(p, true) : null, U = M || L || W || V != null, q; + if ((d === 1 || f === 1) && P > Nw && U === false) { + let j = $, X = A; + t6 && (j = xt({ inputs: { x: $ }, backend: n, attrs: { perm: [0, 2, 1] } }), R.push(j)), o && (X = xt({ inputs: { x: A }, backend: n, attrs: { perm: [0, 2, 1] } }), R.push(X)); + let Z = f !== 1, ee = f === 1, Y = j; + Z && (Y = te({ inputs: { x: j }, backend: n, attrs: { shape: [D, P, 1] } }), R.push(Y)); + let J = f === 1 ? 2 : 1, ie = X; + ee && (ie = te({ inputs: { x: X }, backend: n, attrs: { shape: [D, 1, P] } }), R.push(ie)); + let pe = Tl({ inputs: { a: Y, b: ie }, backend: n }); + q = Ou({ inputs: { x: pe }, backend: n, attrs: { axis: J, keepDims: true } }), R.push(pe); } else { - let j = ct(r.dtype, e.dtype), Y = new xc(k, _, [D, f, d], t10, o, M, V, L, W), Z = [E, R]; + let j = dt(r.dtype, e.dtype), X = new dc(k, _, [D, d, f], t6, o, M, V, L, W), Z = [$, A]; if (s != null && Z.push(s), L && Z.push(a), W) { - let ee = n.makeTensorInfo([], "float32", x.createScalarValue(i, "float32")); - Z.push(ee), A.push(ee); + let ee = n.makeTensorInfo([], "float32", y.createScalarValue(i, "float32")); + Z.push(ee), R.push(ee); } - q = n.runWebGLProgram(Y, Z, j); + q = n.runWebGLProgram(X, Z, j); } - let H = J({ inputs: { x: q }, backend: n, attrs: { shape: w } }); - A.push(q); - for (let j of A) + let H = te({ inputs: { x: q }, backend: n, attrs: { shape: w } }); + R.push(q); + for (let j of R) n.disposeIntermediateTensorInfo(j); return H; } -function wY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; - return Mu({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); +function G8(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return Pu({ a: n, b: s, transposeA: p, transposeB: u, backend: t6, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var IR = { kernelName: Fo, backendName: "webgl", kernelFunc: wY }; -var wR = "return abs(x);"; -function SY(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - if (t10.shouldExecuteOnCPU([o]) && o.dtype !== "complex64") { - let s = t10.texData.get(o.dataId), a = nh(s.values); - return t10.makeTensorInfo(o.shape, o.dtype, a); +var Y$ = { kernelName: fo, backendName: "webgl", kernelFunc: G8 }; +var Q$ = "return abs(x);"; +function H8(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; + if (t6.shouldExecuteOnCPU([o]) && o.dtype !== "complex64") { + let s = t6.texData.get(o.dataId), a = Kf(s.values); + return t6.makeTensorInfo(o.shape, o.dtype, a); } let n; - return P().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new No(o.shape, wR) : n = new fr(o.shape, wR), t10.runWebGLProgram(n, [o], o.dtype); + return O().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Ar(o.shape, Q$) : n = new Jt(o.shape, Q$), t6.runWebGLProgram(n, [o], o.dtype); } -var SR = { kernelName: sn, backendName: "webgl", kernelFunc: SY }; -var vY = Vt + ` +var Z$ = { kernelName: gs, backendName: "webgl", kernelFunc: H8 }; +var q8 = Bt + ` if (abs(x) > 1.) { return NAN; } return acos(x); `; -var kY = he({ opSnippet: vY }); -var vR = { kernelName: Li, backendName: "webgl", kernelFunc: kY }; -var TY = Vt + ` +var K8 = ge({ opSnippet: q8 }); +var J$ = { kernelName: sa, backendName: "webgl", kernelFunc: K8 }; +var j8 = Bt + ` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`; -var NY = he({ opSnippet: TY }); -var kR = { kernelName: Bi, backendName: "webgl", kernelFunc: NY }; -var TR = "return a + b;"; -var _Y = ot({ opSnippet: TR, packedOpSnippet: TR, supportsComplex: true, cpuKernelImpl: s$ }); -var NR = { kernelName: _r, backendName: "webgl", kernelFunc: _Y }; -var fh = class { - constructor(e, t10) { - this.outputShape = [], this.outputShape = e, this.variableNames = t10.map((s, a) => `T${a}`); +var X8 = ge({ opSnippet: j8 }); +var eA = { kernelName: aa, backendName: "webgl", kernelFunc: X8 }; +var tA = "return a + b;"; +var Y8 = tt({ opSnippet: tA, packedOpSnippet: tA, supportsComplex: true, cpuKernelImpl: DE }); +var rA = { kernelName: eo, backendName: "webgl", kernelFunc: Y8 }; +var rh = class { + constructor(e, t6) { + this.outputShape = [], this.outputShape = e, this.variableNames = t6.map((s, a) => `T${a}`); let o = []; this.variableNames.forEach((s) => { o.push(`float v${s} = get${s}AtOutCoords();`); @@ -18684,9 +18745,9 @@ var fh = class { `; } }; -var dh = class { - constructor(e, t10) { - this.outputShape = [], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.variableNames = t10.map((s, a) => `T${a}`); +var oh = class { + constructor(e, t6) { + this.outputShape = [], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.variableNames = t6.map((s, a) => `T${a}`); let o = []; this.variableNames.forEach((s) => { o.push(`vec4 v${s} = get${s}AtOutCoords();`); @@ -18703,48 +18764,48 @@ var dh = class { `; } }; -function hh(r) { - let { inputs: e, backend: t10 } = r, o = e; +function nh(r) { + let { inputs: e, backend: t6 } = r, o = e; if (o.length === 1) - return Rt({ inputs: { x: o[0] }, backend: t10 }); - if (o.length > P().get("WEBGL_MAX_TEXTURES_IN_SHADER")) { - let p = Math.floor(o.length / 2), u = hh({ inputs: o.slice(0, p), backend: t10 }), c = hh({ inputs: o.slice(p), backend: t10 }); - return hh({ inputs: [u, c], backend: t10 }); + return At({ inputs: { x: o[0] }, backend: t6 }); + if (o.length > O().get("WEBGL_MAX_TEXTURES_IN_SHADER")) { + let p = Math.floor(o.length / 2), u = nh({ inputs: o.slice(0, p), backend: t6 }), c = nh({ inputs: o.slice(p), backend: t6 }); + return nh({ inputs: [u, c], backend: t6 }); } - let n = o.map((p) => p.dtype).reduce((p, u) => ct(p, u)), s = o.map((p) => p.shape), i = P().getBool("WEBGL_PACK") ? new dh(o[0].shape, s) : new fh(o[0].shape, s); - return t10.runWebGLProgram(i, o, n); + let n = o.map((p) => p.dtype).reduce((p, u) => dt(p, u)), s = o.map((p) => p.shape), i = O().getBool("WEBGL_PACK") ? new oh(o[0].shape, s) : new rh(o[0].shape, s); + return t6.runWebGLProgram(i, o, n); } -var _R = { kernelName: an, backendName: "webgl", kernelFunc: hh }; -function EY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = x.parseAxisParam(s, n.shape), u = p, c = I.getAxesPermutation(u, i), l = n; - c != null && (l = xt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = I.getInnerMostAxes(u.length, i)), I.assertAxesAreInnerMostDims("all", u, i); - let [m, f] = I.computeOutAndReduceShapes(l.shape, u), d = x.sizeFromShape(f), h = J({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, d] } }), g = qr(h, h.dtype, "all", t10), y; +var oA = { kernelName: Mo, backendName: "webgl", kernelFunc: nh }; +function Q8(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = S.getAxesPermutation(u, i), l = n; + c != null && (l = xt({ inputs: { x: n }, backend: t6, attrs: { perm: c } }), u = S.getInnerMostAxes(u.length, i)), S.assertAxesAreInnerMostDims("all", u, i); + let [m, d] = S.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t6, attrs: { shape: [-1, f] } }), g = Gr(h, h.dtype, "all", t6), x; if (a) { - let b = I.expandShapeToKeepDim(m, p); - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); + let b = S.expandShapeToKeepDim(m, p); + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: b } }); } else - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), y; + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: m } }); + return t6.disposeIntermediateTensorInfo(h), t6.disposeIntermediateTensorInfo(g), c != null && t6.disposeIntermediateTensorInfo(l), x; } -var ER = { kernelName: oa, backendName: "webgl", kernelFunc: EY }; -function $Y(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = x.parseAxisParam(s, n.shape), u = p, c = I.getAxesPermutation(u, i), l = n; - c != null && (l = xt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = I.getInnerMostAxes(u.length, i)), I.assertAxesAreInnerMostDims("any", u, i); - let [m, f] = I.computeOutAndReduceShapes(l.shape, u), d = x.sizeFromShape(f), h = J({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, d] } }), g = qr(h, h.dtype, "any", t10), y; +var nA = { kernelName: Lo, backendName: "webgl", kernelFunc: Q8 }; +function Z8(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = S.getAxesPermutation(u, i), l = n; + c != null && (l = xt({ inputs: { x: n }, backend: t6, attrs: { perm: c } }), u = S.getInnerMostAxes(u.length, i)), S.assertAxesAreInnerMostDims("any", u, i); + let [m, d] = S.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t6, attrs: { shape: [-1, f] } }), g = Gr(h, h.dtype, "any", t6), x; if (a) { - let b = I.expandShapeToKeepDim(m, p); - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); + let b = S.expandShapeToKeepDim(m, p); + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: b } }); } else - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), y; + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: m } }); + return t6.disposeIntermediateTensorInfo(h), t6.disposeIntermediateTensorInfo(g), c != null && t6.disposeIntermediateTensorInfo(l), x; } -var $R = { kernelName: na, backendName: "webgl", kernelFunc: $Y }; -var gh = class { - constructor(e, t10, o) { +var sA = { kernelName: Bo, backendName: "webgl", kernelFunc: Z8 }; +var sh = class { + constructor(e, t6, o) { this.variableNames = ["A"]; let { windowSize: n, batchSize: s, outSize: a } = e; o || this.variableNames.push("bestIndicesA"), this.outputShape = [s, a]; - let i = t10 === "max" ? ">" : "<", p = o ? "inOffset + i;" : "round(getBestIndicesA(batch, inOffset + i));"; + let i = t6 === "max" ? ">" : "<", p = o ? "inOffset + i;" : "round(getBestIndicesA(batch, inOffset + i));"; this.userCode = ` void main() { ivec2 coords = getOutputCoords(); @@ -18768,23 +18829,23 @@ var gh = class { `; } }; -var xh = class { - constructor(e, t10, o, n) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, x.assert(e.length > 2, () => `Packed arg${o.charAt(0).toUpperCase() + o.slice(1)} supports only inputs with rank above 2.`); - let s = e[e.length - 1], a = Math.ceil(s / t10); +var ah = class { + constructor(e, t6, o, n) { + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, y.assert(e.length > 2, () => `Packed arg${o.charAt(0).toUpperCase() + o.slice(1)} supports only inputs with rank above 2.`); + let s = e[e.length - 1], a = Math.ceil(s / t6); this.outputShape = e.slice(0, -1), a > 1 && this.outputShape.push(a), n || this.variableNames.push("bestIndicesA"); let i = this.outputShape, p = i.length, u = _e(p), c = $t("coords", p), l, m; if (a === 1) { m = p + 1; - let R = _e(m); + let A = _e(m); l = ` - ${R} sourceLocR = ${R}(${c.join()}, 0); + ${A} sourceLocR = ${A}(${c.join()}, 0); ++${c[p - 1]}; - ${R} sourceLocG = ${R}(${c.join()}, 0); + ${A} sourceLocG = ${A}(${c.join()}, 0); ++${c[p - 2]}; - ${R} sourceLocA = ${R}(${c.join()}, 0); + ${A} sourceLocA = ${A}(${c.join()}, 0); --${c[p - 1]}; - ${R} sourceLocB = ${R}(${c.join()}, 0); + ${A} sourceLocB = ${A}(${c.join()}, 0); --${c[p - 2]};`; } else m = p, l = ` @@ -18796,37 +18857,37 @@ var xh = class { --${c[p - 1]}; ${u} sourceLocB = coords; --${c[p - 2]};`; - let f = ["x", "y", "z", "w", "u", "v"].slice(0, m), d = "." + f[m - 1], h = f.map((R) => "int " + R), g = $t("sourceLocR", m - 1).concat("inIdx.r"), y = $t("sourceLocG", m - 1).concat("inIdx.g"), b = $t("sourceLocB", m - 1).concat("inIdx.b"), C = $t("sourceLocA", m - 1).concat("inIdx.a"), w = o === "max" ? "greaterThan" : "lessThan", k = n ? "" : ` + let d = ["x", "y", "z", "w", "u", "v"].slice(0, m), f = "." + d[m - 1], h = d.map((A) => "int " + A), g = $t("sourceLocR", m - 1).concat("inIdx.r"), x = $t("sourceLocG", m - 1).concat("inIdx.g"), b = $t("sourceLocB", m - 1).concat("inIdx.b"), C = $t("sourceLocA", m - 1).concat("inIdx.a"), w = o === "max" ? "greaterThan" : "lessThan", k = n ? "" : ` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), - getBestIndicesAChannel(${y.join()}), + getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), getBestIndicesAChannel(${C.join()})));`, _ = `vec4( getAChannel(${g.join()}), - hasNextCol ? getAChannel(${y.join()}) : 0., + hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., - hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`, E = n ? "" : ` + hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`, $ = n ? "" : ` float getBestIndicesAChannel(${h.join()}) { - return getChannel(getBestIndicesA(${f.join()}), - vec2(${f.slice(-2).join()})); + return getChannel(getBestIndicesA(${d.join()}), + vec2(${d.slice(-2).join()})); }`; this.userCode = ` float getAChannel(${h.join()}) { - return getChannel(getA(${f.join()}), - vec2(${f.slice(-2).join()})); + return getChannel(getA(${d.join()}), + vec2(${d.slice(-2).join()})); } - ${E} + ${$} void main() { ${u} coords = getOutputCoords(); bool hasNextCol = ${c[p - 1]} < ${i[p - 1] - 1}; bool hasNextRow = ${c[p - 2]} < ${i[p - 2] - 1}; ${l} - ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d}, - sourceLocB${d}, sourceLocA${d}) * ${t10}; + ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f}, + sourceLocB${f}, sourceLocA${f}) * ${t6}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${_}; - for (int i = 0; i < ${t10}; i++) { + for (int i = 0; i < ${t6}; i++) { inIdx = srcIdx; ${k} vec4 candidate = ${_}; @@ -18846,99 +18907,99 @@ var xh = class { `; } }; -function RR(r, e, t10, o = null) { +function aA(r, e, t6, o = null) { let n = e.shape[0], s = e.shape[1]; o != null && (n = o.shape[0], s = o.shape[1]); - let a = I.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new gh(i, t10, o == null), u = [e]; + let a = S.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new sh(i, t6, o == null), u = [e]; o != null && u.push(o); let c = r.runWebGLProgram(p, u, "int32"); if (c.shape[1] === 1) return c; - let l = RR(r, e, t10, c); + let l = aA(r, e, t6, c); return r.disposeIntermediateTensorInfo(c), l; } -function AR(r, e, t10, o = null) { - let n = o != null ? o.shape : e.shape, s = n[n.length - 1], a = I.computeOptimalWindowSize(s), i = new xh(n, a, t10, o == null), p = o == null ? [e] : [e, o], u = r.runWebGLProgram(i, p, "int32"); +function iA(r, e, t6, o = null) { + let n = o != null ? o.shape : e.shape, s = n[n.length - 1], a = S.computeOptimalWindowSize(s), i = new ah(n, a, t6, o == null), p = o == null ? [e] : [e, o], u = r.runWebGLProgram(i, p, "int32"); if (u.shape.length === e.shape.length) { - let c = AR(r, e, t10, u); + let c = iA(r, e, t6, u); return r.disposeIntermediateTensorInfo(u), c; } return u; } -function yh(r, e, t10, o) { - let n = [t10]; - if (I.assertAxesAreInnerMostDims("arg" + o.charAt(0).toUpperCase() + o.slice(1), n, e.shape.length), !P().getBool("WEBGL_PACK_REDUCE") || e.shape.length <= 2) { +function ih(r, e, t6, o) { + let n = [t6]; + if (S.assertAxesAreInnerMostDims("arg" + o.charAt(0).toUpperCase() + o.slice(1), n, e.shape.length), !O().getBool("WEBGL_PACK_REDUCE") || e.shape.length <= 2) { let s = [], a = r.texData.get(e.dataId), i = a !== null && a.isPacked, p = e; i && (p = r.unpackTensor(e), s.push(p)); - let [u, c] = I.computeOutAndReduceShapes(p.shape, n), l = x.sizeFromShape(c), m = J({ inputs: { x: p }, backend: r, attrs: { shape: [-1, l] } }); + let [u, c] = S.computeOutAndReduceShapes(p.shape, n), l = y.sizeFromShape(c), m = te({ inputs: { x: p }, backend: r, attrs: { shape: [-1, l] } }); s.push(m); - let f = RR(r, m, o); - s.push(f); - let d = J({ inputs: { x: f }, backend: r, attrs: { shape: u } }); - return s.forEach((h) => r.disposeIntermediateTensorInfo(h)), d; + let d = aA(r, m, o); + s.push(d); + let f = te({ inputs: { x: d }, backend: r, attrs: { shape: u } }); + return s.forEach((h) => r.disposeIntermediateTensorInfo(h)), f; } - return AR(r, e, o); + return iA(r, e, o); } -function RY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o, a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = xt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), I.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); - let c = yh(t10, p, a[0], "max"); - return u.forEach((l) => t10.disposeIntermediateTensorInfo(l)), c; +function J8(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = xt({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), S.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); + let c = ih(t6, p, a[0], "max"); + return u.forEach((l) => t6.disposeIntermediateTensorInfo(l)), c; } -var FR = { kernelName: un, backendName: "webgl", kernelFunc: RY }; -function AY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o, a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = xt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), I.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); - let c = yh(t10, p, a[0], "min"); - return u.forEach((l) => t10.disposeIntermediateTensorInfo(l)), c; +var uA = { kernelName: Vo, backendName: "webgl", kernelFunc: J8 }; +function eY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = xt({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), S.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); + let c = ih(t6, p, a[0], "min"); + return u.forEach((l) => t6.disposeIntermediateTensorInfo(l)), c; } -var DR = { kernelName: ja, backendName: "webgl", kernelFunc: AY }; -var FY = Vt + ` +var pA = { kernelName: Za, backendName: "webgl", kernelFunc: eY }; +var tY = Bt + ` if (abs(x) > 1.) { return NAN; } return asin(x); `; -var DY = he({ opSnippet: FY }); -var PR = { kernelName: Vi, backendName: "webgl", kernelFunc: DY }; -var PY = Vt + "return log(x + sqrt(x * x + 1.0));"; -var OY = he({ opSnippet: PY }); -var OR = { kernelName: zi, backendName: "webgl", kernelFunc: OY }; -var MY = Vt + ` +var rY = ge({ opSnippet: tY }); +var cA = { kernelName: ia, backendName: "webgl", kernelFunc: rY }; +var oY = Bt + "return log(x + sqrt(x * x + 1.0));"; +var nY = ge({ opSnippet: oY }); +var lA = { kernelName: ua, backendName: "webgl", kernelFunc: nY }; +var sY = Bt + ` return atan(x); `; -var LY = he({ opSnippet: MY }); -var MR = { kernelName: Wi, backendName: "webgl", kernelFunc: LY }; -var BY = gc + ` +var aY = ge({ opSnippet: sY }); +var mA = { kernelName: pa, backendName: "webgl", kernelFunc: aY }; +var iY = mc + ` return atan(a, b); `; -var VY = ` +var uY = ` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + js + ` + ` + Zs + ` return result; `; -var zY = ot({ opSnippet: BY, packedOpSnippet: VY }); -var LR = { kernelName: sa, backendName: "webgl", kernelFunc: zY }; -var WY = Vt + ` +var pY = tt({ opSnippet: iY, packedOpSnippet: uY }); +var dA = { kernelName: la, backendName: "webgl", kernelFunc: pY }; +var cY = Bt + ` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`; -var UY = he({ opSnippet: WY }); -var BR = { kernelName: Ui, backendName: "webgl", kernelFunc: UY }; -var us = class { - constructor(e, t10, o, n = false, s = false) { - if (this.variableNames = ["x"], t10 === "avg" && o) +var lY = ge({ opSnippet: cY }); +var fA = { kernelName: ca, backendName: "webgl", kernelFunc: lY }; +var ps = class { + constructor(e, t6, o, n = false, s = false) { + if (this.variableNames = ["x"], t6 === "avg" && o) throw new Error("Cannot compute positions for average pool."); - let a = e.filterWidth, i = e.strideHeight, p = e.strideWidth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterHeight, m = e.effectiveFilterWidth, f = e.padInfo.top, d = e.padInfo.left; + let a = e.filterWidth, i = e.strideHeight, p = e.strideWidth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterHeight, m = e.effectiveFilterWidth, d = e.padInfo.top, f = e.padInfo.left; this.outputShape = e.outShape; - let h = t10 === "avg", g = `((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`, y = `(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`, b = "0.0"; + let h = t6 === "avg", g = `((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`, x = `(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`, b = "0.0"; if (h || (b = "-1.0 / 1e-20"), o) { - let R = ">="; + let A = ">="; this.userCode = ` const ivec2 strides = ivec2(${i}, ${p}); - const ivec2 pads = ivec2(${f}, ${d}); + const ivec2 pads = ivec2(${d}, ${f}); void main() { ivec4 coords = getOutputCoords(); @@ -18978,10 +19039,10 @@ var us = class { // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); - if (value ${R} currMinMaxValue) { + if (value ${A} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; - minMaxPosition = ${n ? s ? g : y : `wR * ${m} + wC`}; + minMaxPosition = ${n ? s ? g : x : `wR * ${m} + wC`}; } } } @@ -18990,9 +19051,9 @@ var us = class { `; return; } - let C = "max", w = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; - t10 === "avg" && (w = "avgValue / count"); - let k = Math.floor(a / 4) * 4, _ = a % 4, E = ` + let C = "max", w = `${t6}(${t6}(${t6}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + t6 === "avg" && (w = "avgValue / count"); + let k = Math.floor(a / 4) * 4, _ = a % 4, $ = ` if (${h}) { avgValue += dot(values, ones); } else { @@ -19001,7 +19062,7 @@ var us = class { `; this.userCode = ` const ivec2 strides = ivec2(${i}, ${p}); - const ivec2 pads = ivec2(${f}, ${d}); + const ivec2 pads = ivec2(${d}, ${f}); const float initializationValue = ${b}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); @@ -19048,7 +19109,7 @@ var us = class { getValue(batch, xR, xC + 3 * ${c}, d) ); - ${E} + ${$} } int xC = xCCorner + ${k}; @@ -19060,7 +19121,7 @@ var us = class { initializationValue ); - ${E} + ${$} } else if (${_ === 2}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -19069,7 +19130,7 @@ var us = class { initializationValue ); - ${E} + ${$} } else if (${_ === 3}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -19078,7 +19139,7 @@ var us = class { initializationValue ); - ${E} + ${$} } } setOutput(${w}); @@ -19086,19 +19147,19 @@ var us = class { `; } }; -var Ei = class { - constructor(e, t10, o, n = false, s = false) { - if (this.variableNames = ["x"], t10 === "avg" && o) +var zi = class { + constructor(e, t6, o, n = false, s = false) { + if (this.variableNames = ["x"], t6 === "avg" && o) throw new Error("Cannot compute positions for average pool."); - let a = e.filterWidth, i = e.strideDepth, p = e.strideHeight, u = e.strideWidth, c = e.dilationDepth, l = e.dilationHeight, m = e.dilationWidth, f = e.effectiveFilterDepth, d = e.effectiveFilterHeight, h = e.effectiveFilterWidth, g = e.padInfo.front, y = e.padInfo.top, b = e.padInfo.left; + let a = e.filterWidth, i = e.strideDepth, p = e.strideHeight, u = e.strideWidth, c = e.dilationDepth, l = e.dilationHeight, m = e.dilationWidth, d = e.effectiveFilterDepth, f = e.effectiveFilterHeight, h = e.effectiveFilterWidth, g = e.padInfo.front, x = e.padInfo.top, b = e.padInfo.left; this.outputShape = e.outShape; - let C = t10 === "avg", w = "0.0"; + let C = t6 === "avg", w = "0.0"; if (C || (w = "-1.0 / 1e-20"), o) { let D = ">="; this.userCode = ` const ivec3 strides = ivec3(${i}, ${p}, ${u}); - const ivec3 pads = ivec3(${g}, ${y}, ${b}); + const ivec3 pads = ivec3(${g}, ${x}, ${b}); void main() { ivec5 coords = getOutputCoords(); @@ -19116,7 +19177,7 @@ var Ei = class { float minMaxValueFound = 0.0; int minMaxPosition = 0; - for (int wD = 0; wD < ${f}; + for (int wD = 0; wD < ${d}; wD += ${c}) { int xD = xDCorner + wD; @@ -19124,7 +19185,7 @@ var Ei = class { continue; } - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${f}; wR += ${l}) { int xR = xRCorner + wR; @@ -19149,7 +19210,7 @@ var Ei = class { if (value ${D} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; - minMaxPosition = ${n ? s ? `(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `wD * ${d} * ${h} + + minMaxPosition = ${n ? s ? `(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `wD * ${f} * ${h} + wR * ${h} + wC`}; } } @@ -19160,9 +19221,9 @@ var Ei = class { `; return; } - let k = "max", _ = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; - t10 === "avg" && (_ = "avgValue / count"); - let E = Math.floor(a / 4) * 4, R = a % 4, A = ` + let k = "max", _ = `${t6}(${t6}(${t6}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + t6 === "avg" && (_ = "avgValue / count"); + let $ = Math.floor(a / 4) * 4, A = a % 4, R = ` if (${C}) { avgValue += dot(values, ones); } else { @@ -19172,7 +19233,7 @@ var Ei = class { this.userCode = ` const ivec3 strides = ivec3(${i}, ${p}, ${u}); - const ivec3 pads = ivec3(${g}, ${y}, ${b}); + const ivec3 pads = ivec3(${g}, ${x}, ${b}); const float initializationValue = ${w}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); @@ -19202,7 +19263,7 @@ var Ei = class { float avgValue = 0.0; count = 0.0; - for (int wD = 0; wD < ${f}; + for (int wD = 0; wD < ${d}; wD += ${c}) { int xD = xDCorner + wD; @@ -19210,7 +19271,7 @@ var Ei = class { continue; } - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${f}; wR += ${l}) { int xR = xRCorner + wR; @@ -19218,7 +19279,7 @@ var Ei = class { continue; } - for (int wC = 0; wC < ${E}; wC += 4) { + for (int wC = 0; wC < ${$}; wC += 4) { int xC = xCCorner + wC * ${m}; vec4 values = vec4( @@ -19228,11 +19289,11 @@ var Ei = class { getValue(batch, xD, xR, xC + 3 * ${m}, ch) ); - ${A} + ${R} } - int xC = xCCorner + ${E}; - if (${R === 1}) { + int xC = xCCorner + ${$}; + if (${A === 1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, @@ -19240,8 +19301,8 @@ var Ei = class { initializationValue ); - ${A} - } else if (${R === 2}) { + ${R} + } else if (${A === 2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${m}, ch), @@ -19249,8 +19310,8 @@ var Ei = class { initializationValue ); - ${A} - } else if (${R === 3}) { + ${R} + } else if (${A === 3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${m}, ch), @@ -19258,7 +19319,7 @@ var Ei = class { initializationValue ); - ${A} + ${R} } } setOutput(${_}); @@ -19267,27 +19328,27 @@ var Ei = class { `; } }; -function GY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e; - as(n, "avgPool"); +function mY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e; + is(n, "avgPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - x.assert(I.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let c = I.computePool2DInfo(n.shape, s, a, u, i, p); - if (c.filterWidth === 1 && c.filterHeight === 1 && x.arraysEqual(c.inShape, c.outShape)) - return Rt({ inputs: { x: n }, backend: t10 }); - let l = new us(c, "avg", false); - return t10.runWebGLProgram(l, [n], "float32"); + y.assert(S.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = S.computePool2DInfo(n.shape, s, a, u, i, p); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + return At({ inputs: { x: n }, backend: t6 }); + let l = new ps(c, "avg", false); + return t6.runWebGLProgram(l, [n], "float32"); } -var VR = { kernelName: pn, backendName: "webgl", kernelFunc: GY }; -function HY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = [1, 1, 1], l = I.computePool3DInfo(n.shape, s, a, c, i, p, u), m = new Ei(l, "avg", false); - return t10.runWebGLProgram(m, [n], "float32"); +var hA = { kernelName: zo, backendName: "webgl", kernelFunc: mY }; +function dY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = [1, 1, 1], l = S.computePool3DInfo(n.shape, s, a, c, i, p, u), m = new zi(l, "avg", false); + return t6.runWebGLProgram(m, [n], "float32"); } -var zR = { kernelName: ip, backendName: "webgl", kernelFunc: HY }; -var bh = class { +var gA = { kernelName: ip, backendName: "webgl", kernelFunc: dY }; +var uh = class { constructor(e) { this.variableNames = ["dy"], this.outputShape = e.inShape; - let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterHeight, u = e.effectiveFilterWidth, c = p - 1 - e.padInfo.top, l = u - 1 - e.padInfo.left, m = 1 / (t10 * o); + let t6 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterHeight, u = e.effectiveFilterWidth, c = p - 1 - e.padInfo.top, l = u - 1 - e.padInfo.left, m = 1 / (t6 * o); this.userCode = ` const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${m}); @@ -19333,13 +19394,13 @@ var bh = class { `; } }; -var Ch = class { +var ph = class { constructor(e) { this.variableNames = ["dy"], this.outputShape = e.inShape; - let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterDepth, m = e.effectiveFilterHeight, f = e.effectiveFilterWidth, d = l - 1 - e.padInfo.front, h = m - 1 - e.padInfo.top, g = f - 1 - e.padInfo.left, y = 1 / (t10 * o * n); + let t6 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterDepth, m = e.effectiveFilterHeight, d = e.effectiveFilterWidth, f = l - 1 - e.padInfo.front, h = m - 1 - e.padInfo.top, g = d - 1 - e.padInfo.left, x = 1 / (t6 * o * n); this.userCode = ` - const ivec3 pads = ivec3(${d}, ${h}, ${g}); - const float avgMultiplier = float(${y}); + const ivec3 pads = ivec3(${f}, ${h}, ${g}); + const float avgMultiplier = float(${x}); void main() { ivec5 coords = getOutputCoords(); @@ -19375,7 +19436,7 @@ var Ch = class { } int idyR = int(dyR); - for (int wC = 0; wC < ${f}; + for (int wC = 0; wC < ${d}; wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; @@ -19396,30 +19457,30 @@ var Ch = class { `; } }; -function qY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = I.computePool3DInfo(a.shape, i, p, l, u, c), f = new Ch(m); - return t10.runWebGLProgram(f, [n], a.dtype); +function fY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = S.computePool3DInfo(a.shape, i, p, l, u, c), d = new ph(m); + return t6.runWebGLProgram(d, [n], a.dtype); } -var WR = { kernelName: Fm, backendName: "webgl", kernelFunc: qY }; -function KY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, a = s; - as([n, s], "avgPoolGrad"); - let { filterSize: i, strides: p, pad: u } = o, c = I.computePool2DInfo(a.shape, i, p, 1, u), l = new bh(c); - return t10.runWebGLProgram(l, [n], a.dtype); +var xA = { kernelName: Im, backendName: "webgl", kernelFunc: fY }; +function hY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, a = s; + is([n, s], "avgPoolGrad"); + let { filterSize: i, strides: p, pad: u } = o, c = S.computePool2DInfo(a.shape, i, p, 1, u), l = new uh(c); + return t6.runWebGLProgram(l, [n], a.dtype); } -var UR = { kernelName: Am, backendName: "webgl", kernelFunc: KY }; -function jY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; - return Mu({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); +var yA = { kernelName: wm, backendName: "webgl", kernelFunc: hY }; +function gY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; + return Pu({ a: n, b: s, transposeA: a, transposeB: i, backend: t6 }); } -var GR = { kernelName: cn, backendName: "webgl", kernelFunc: jY }; -var Ih = class { - constructor(e, t10, o, n, s, a) { - this.outputShape = [], this.variableNames = ["x", "mean", "variance"], I.assertAndGetBroadcastShape(e, t10), I.assertAndGetBroadcastShape(e, o); +var bA = { kernelName: Wo, backendName: "webgl", kernelFunc: gY }; +var ch = class { + constructor(e, t6, o, n, s, a) { + this.outputShape = [], this.variableNames = ["x", "mean", "variance"], S.assertAndGetBroadcastShape(e, t6), S.assertAndGetBroadcastShape(e, o); let i = "0.0"; - n != null && (I.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); + n != null && (S.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); let p = "1.0"; - s != null && (I.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` + s != null && (S.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -19432,13 +19493,13 @@ var Ih = class { `; } }; -var wh = class { - constructor(e, t10, o, n, s, a) { - this.packedInputs = true, this.packedOutput = true, this.variableNames = ["x", "mean", "variance"], I.assertAndGetBroadcastShape(e, t10), I.assertAndGetBroadcastShape(e, o); +var lh = class { + constructor(e, t6, o, n, s, a) { + this.packedInputs = true, this.packedOutput = true, this.variableNames = ["x", "mean", "variance"], S.assertAndGetBroadcastShape(e, t6), S.assertAndGetBroadcastShape(e, o); let i = "vec4(0.0)"; - n != null && (I.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); + n != null && (S.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); let p = "vec4(1.0)"; - s != null && (I.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` + s != null && (S.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` void main() { vec4 offset = ${i}; vec4 scale = ${p}; @@ -19454,28 +19515,28 @@ var wh = class { `; } }; -var XY = ({ inputs: r, backend: e, attrs: t10 }) => { +var xY = ({ inputs: r, backend: e, attrs: t6 }) => { let { x: o, mean: n, variance: s, offset: a, scale: i } = r; - x.assert(n.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), x.assert(a == null || n.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), x.assert(i == null || n.shape.length === i.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); - let { varianceEpsilon: p } = t10; + y.assert(n.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), y.assert(a == null || n.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), y.assert(i == null || n.shape.length === i.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + let { varianceEpsilon: p } = t6; p == null && (p = 1e-3); let u = [o, n, s], c = null; a != null && (c = a.shape, u.push(a)); let l = null; i != null && (l = i.shape, u.push(i)); - let m = P().getBool("WEBGL_PACK_NORMALIZATION") ? new wh(o.shape, n.shape, s.shape, c, l, p) : new Ih(o.shape, n.shape, s.shape, c, l, p); + let m = O().getBool("WEBGL_PACK_NORMALIZATION") ? new lh(o.shape, n.shape, s.shape, c, l, p) : new ch(o.shape, n.shape, s.shape, c, l, p); return e.runWebGLProgram(m, u, u[0].dtype); }; -var HR = { kernelName: kn, backendName: "webgl", kernelFunc: XY }; -var Sh = class { +var CA = { kernelName: an, backendName: "webgl", kernelFunc: xY }; +var mh = class { constructor(e) { this.variableNames = ["source"], this.outputShape = e, this.rank = e.length; - let t10 = _e(this.rank); + let t6 = _e(this.rank); this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let o = YY(this.rank), n, s = e.map((a, i) => `sourceLoc.${Aw[i]} = start[${i}] + coords.${Aw[i]};`); + let o = yY(this.rank), n, s = e.map((a, i) => `sourceLoc.${Tw[i]} = start[${i}] + coords.${Tw[i]};`); n = ` - ${t10} sourceLoc; - ${t10} coords = getOutputCoords(); + ${t6} sourceLoc; + ${t6} coords = getOutputCoords(); ${s.join(` `)} `, this.userCode = ` @@ -19486,18 +19547,18 @@ var Sh = class { `; } }; -var Aw = ["x", "y", "z", "w", "u", "v"]; -function YY(r) { +var Tw = ["x", "y", "z", "w", "u", "v"]; +function yY(r) { if (r === 1) return "sourceLoc"; if (r <= 6) - return Aw.slice(0, r).map((e) => "sourceLoc." + e).join(","); + return Tw.slice(0, r).map((e) => "sourceLoc." + e).join(","); throw Error(`Slicing for rank ${r} is not yet supported`); } -var vh = class { +var dh = class { constructor(e) { this.variableNames = ["source"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let t10 = _e(this.rank), o = $t("coords", this.rank), n = $t("sourceLoc", this.rank), s = this.rank === 1 ? "sourceLoc" : `vec2(${n.slice(-2).join()})`, a = `getChannel(getSource(${n.join()}), ${s})`, i = ` + let t6 = _e(this.rank), o = $t("coords", this.rank), n = $t("sourceLoc", this.rank), s = this.rank === 1 ? "sourceLoc" : `vec2(${n.slice(-2).join()})`, a = `getChannel(getSource(${n.join()}), ${s})`, i = ` result.x = ${a}; if (++${o[this.rank - 1]} < ${e[this.rank - 1]}) { ++${n[this.rank - 1]}; @@ -19515,12 +19576,12 @@ var vh = class { } } `, u = this.rank <= 4 ? `sourceLoc = coords + - ${t10}(${e.map((c, l) => `start[${l}]`).join()});` : e.map((c, l) => `${n[l]} = ${o[l]} + start[${l}];`).join(` + ${t6}(${e.map((c, l) => `start[${l}]`).join()});` : e.map((c, l) => `${n[l]} = ${o[l]} + start[${l}];`).join(` `); this.userCode = ` void main() { - ${t10} coords = getOutputCoords(); - ${t10} sourceLoc; + ${t6} coords = getOutputCoords(); + ${t6} sourceLoc; ${u} vec4 result = vec4(0.); ${i} @@ -19530,93 +19591,93 @@ var vh = class { `; } }; -function QY(r, e, t10, o) { - let n = o.texData.get(r.dataId), s = o.makeTensorInfo(t10, r.dtype), a = o.texData.get(s.dataId); - Object.assign(a, n), a.refCount = 1, a.shape = t10, a.dtype = r.dtype; - let i = et.computeFlatOffset(e, x.computeStrides(r.shape)); +function bY(r, e, t6, o) { + let n = o.texData.get(r.dataId), s = o.makeTensorInfo(t6, r.dtype), a = o.texData.get(s.dataId); + Object.assign(a, n), a.refCount = 1, a.shape = t6, a.dtype = r.dtype; + let i = ut.computeFlatOffset(e, y.computeStrides(r.shape)); n.slice && (i += n.slice.flatOffset), a.slice = { flatOffset: i, origDataId: n.slice && n.slice.origDataId || r.dataId }; let p = o.dataRefCount.get(a.slice.origDataId) || 1; return o.dataRefCount.set(a.slice.origDataId, p + 1), s; } -function ps(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o, [i, p] = et.parseSliceParams(n, s, a); - if (et.assertParamsValid(n, i, p), x.sizeFromShape(p) === 0) - return t10.makeTensorInfo(p, n.dtype, []); - if (t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let l = t10.texData.get(n.dataId), m = O$(l.values, i, p, n.shape, n.dtype); - return t10.makeTensorInfo(p, n.dtype, m); +function cs(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o, [i, p] = ut.parseSliceParams(n, s, a); + if (ut.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) + return t6.makeTensorInfo(p, n.dtype, []); + if (t6.shouldExecuteOnCPU([n]) || n.dtype === "string") { + let l = t6.texData.get(n.dataId), m = l$(l.values, i, p, n.shape, n.dtype); + return t6.makeTensorInfo(p, n.dtype, m); } - let { isPacked: u } = t10.texData.get(n.dataId), c = et.isSliceContinous(n.shape, i, p); + let { isPacked: u } = t6.texData.get(n.dataId), c = ut.isSliceContinous(n.shape, i, p); if (u || !c) { - let l = P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new vh(p) : new Sh(p), m = [i]; - return t10.runWebGLProgram(l, [n], n.dtype, m); + let l = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new dh(p) : new mh(p), m = [i]; + return t6.runWebGLProgram(l, [n], n.dtype, m); } - return t10.uploadToGPU(n.dataId), QY(n, i, p, t10); + return t6.uploadToGPU(n.dataId), bY(n, i, p, t6); } -var qR = { kernelName: qn, backendName: "webgl", kernelFunc: ps }; -var ZY = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; - x.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"); - let i = s.reduce((b, C) => b * C), p = I.getReshaped(n.shape, s, i), u = I.getPermuted(p.length, s.length), c = I.getReshapedPermuted(n.shape, s, i), l = I.getSliceBeginCoords(a, s.length), m = I.getSliceSize(c, a, s.length), f = [], d = J({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = xt({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), g = J({ inputs: { x: h }, backend: t10, attrs: { shape: c } }), y = ps({ inputs: { x: g }, backend: t10, attrs: { begin: l, size: m } }); - return f.push(d), f.push(h), f.push(g), f.forEach((b) => t10.disposeIntermediateTensorInfo(b)), y; +var SA = { kernelName: _s, backendName: "webgl", kernelFunc: cs }; +var CY = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; + y.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"); + let i = s.reduce((b, C) => b * C), p = S.getReshaped(n.shape, s, i), u = S.getPermuted(p.length, s.length), c = S.getReshapedPermuted(n.shape, s, i), l = S.getSliceBeginCoords(a, s.length), m = S.getSliceSize(c, a, s.length), d = [], f = te({ inputs: { x: n }, backend: t6, attrs: { shape: p } }), h = xt({ inputs: { x: f }, backend: t6, attrs: { perm: u } }), g = te({ inputs: { x: h }, backend: t6, attrs: { shape: c } }), x = cs({ inputs: { x: g }, backend: t6, attrs: { begin: l, size: m } }); + return d.push(f), d.push(h), d.push(g), d.forEach((b) => t6.disposeIntermediateTensorInfo(b)), x; }; -var KR = { kernelName: hs, backendName: "webgl", kernelFunc: ZY }; -function JY(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), u = oh(i, p, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, u); +var wA = { kernelName: xs, backendName: "webgl", kernelFunc: CY }; +function SY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = t6.readSync(n.dataId), p = t6.readSync(s.dataId), u = qf(i, p, s.dtype, s.shape, a); + return t6.makeTensorInfo([a], s.dtype, u); } -var jR = { kernelName: up, backendName: "webgl", kernelFunc: JY }; -function eQ(r) { - let { inputs: e, backend: t10 } = r, { s0: o, s1: n } = e, s = t10.readSync(o.dataId), a = t10.readSync(n.dataId), i = I.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); - return t10.makeTensorInfo([i.length], "int32", Int32Array.from(i)); +var IA = { kernelName: Ja, backendName: "webgl", kernelFunc: SY }; +function wY(r) { + let { inputs: e, backend: t6 } = r, { s0: o, s1: n } = e, s = t6.readSync(o.dataId), a = t6.readSync(n.dataId), i = S.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); + return t6.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var XR = { kernelName: pp, backendName: "webgl", kernelFunc: eQ }; -var tQ = "return float(a != b);"; -var Fw = ot({ opSnippet: tQ, cpuKernelImpl: N$, dtype: "bool" }); -var YR = { kernelName: go, backendName: "webgl", kernelFunc: Fw }; -function La(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.texData.get(o.dataId); - return Rt({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); +var vA = { kernelName: up, backendName: "webgl", kernelFunc: wY }; +var IY = "return float(a != b);"; +var _w = tt({ opSnippet: IY, cpuKernelImpl: r$, dtype: "bool" }); +var kA = { kernelName: Nn, backendName: "webgl", kernelFunc: _w }; +function Ua(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.texData.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.real }, backend: t6 }); } -var QR = { kernelName: la, backendName: "webgl", kernelFunc: La }; -var rQ = "return float(int(x));"; -function ZR(r, e) { - let t10 = new fr(r.shape, rQ), o = e.runWebGLProgram(t10, [r], "int32"); +var NA = { kernelName: ai, backendName: "webgl", kernelFunc: Ua }; +var vY = "return float(int(x));"; +function TA(r, e) { + let t6 = new Jt(r.shape, vY), o = e.runWebGLProgram(t6, [r], "int32"); return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -function Dw(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dtype: s } = o; +function Ew(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return Rt({ inputs: { x: n }, backend: t10 }); - let a = Wr(n.shape), i = Dw({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = Ar({ inputs: { real: i, imag: a }, backend: t10 }); - return a.dispose(), t10.disposeIntermediateTensorInfo(i), p; + return At({ inputs: { x: n }, backend: t6 }); + let a = Vr(n.shape), i = Ew({ inputs: { x: n }, backend: t6, attrs: { dtype: "float32" } }), p = Rr({ inputs: { real: i, imag: a }, backend: t6 }); + return a.dispose(), t6.disposeIntermediateTensorInfo(i), p; } if (n.dtype === "complex64") { - let a = La({ inputs: { input: n }, backend: t10 }), i = Dw({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); - return t10.disposeIntermediateTensorInfo(a), i; + let a = Ua({ inputs: { input: n }, backend: t6 }), i = Ew({ inputs: { x: a }, backend: t6, attrs: { dtype: s } }); + return t6.disposeIntermediateTensorInfo(a), i; } - if (!x.hasEncodingLoss(n.dtype, s)) { - let a = Rt({ inputs: { x: n }, backend: t10 }); + if (!y.hasEncodingLoss(n.dtype, s)) { + let a = At({ inputs: { x: n }, backend: t6 }); return { dataId: a.dataId, shape: a.shape, dtype: s }; } - if (t10.shouldExecuteOnCPU([n])) { - let a = t10.texData.get(n.dataId).values, [i, p, u] = i$(a, n.shape, n.dtype, s); - return t10.makeTensorInfo(i, p, u); + if (t6.shouldExecuteOnCPU([n])) { + let a = t6.texData.get(n.dataId).values, [i, p, u] = PE(a, n.shape, n.dtype, s); + return t6.makeTensorInfo(i, p, u); } if (s === "int32") - return ZR(n, t10); + return TA(n, t6); if (s === "bool") { - let a = t10.makeTensorInfo([], "bool", x.getTypedArrayFromDType("bool", 1)), p = Fw({ inputs: { a: n, b: a }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(a), p; + let a = t6.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = _w({ inputs: { a: n, b: a }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(a), p; } throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); } -var JR = { kernelName: to, backendName: "webgl", kernelFunc: Dw }; -var eA = "return ceil(x);"; -var oQ = he({ opSnippet: eA, packedOpSnippet: eA, cpuKernelImpl: u$ }); -var tA = { kernelName: ro, backendName: "webgl", kernelFunc: oQ }; -var kh = class { +var _A = { kernelName: co, backendName: "webgl", kernelFunc: Ew }; +var EA = "return ceil(x);"; +var kY = ge({ opSnippet: EA, packedOpSnippet: EA, cpuKernelImpl: ME }); +var $A = { kernelName: Uo, backendName: "webgl", kernelFunc: kY }; +var fh = class { constructor(e) { this.variableNames = ["A"], this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = e, this.userCode = ` @@ -19632,7 +19693,7 @@ var kh = class { `; } }; -var Th = class { +var hh = class { constructor(e) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = e, this.userCode = ` void main() { @@ -19648,14 +19709,14 @@ var Th = class { `; } }; -function nQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i; - P().getBool("WEBGL_PACK_CLIP") ? i = new Th(n.shape) : i = new kh(n.shape); +function NY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i; + O().getBool("WEBGL_PACK_CLIP") ? i = new hh(n.shape) : i = new fh(n.shape); let p = [[s], [a]]; - return t10.runWebGLProgram(i, [n], n.dtype, p); + return t6.runWebGLProgram(i, [n], n.dtype, p); } -var rA = { kernelName: Ro, backendName: "webgl", kernelFunc: nQ }; -var Nh = class { +var AA = { kernelName: lo, backendName: "webgl", kernelFunc: NY }; +var gh = class { constructor(e) { this.variableNames = ["real", "imag"], this.outputShape = e, this.userCode = ` void main() { @@ -19673,27 +19734,27 @@ var Nh = class { `; } }; -function oA(r, e) { +function RA(r, e) { return { dataId: e.dataId, dtype: e.dtype, shape: r.shape }; } -function sQ(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e, n = t10.texData.get(o.dataId), s = new Nh(o.shape), a = [oA(o, n.complexTensorInfos.real), oA(o, n.complexTensorInfos.imag)]; - return t10.runWebGLProgram(s, a, a[0].dtype); +function TY(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e, n = t6.texData.get(o.dataId), s = new gh(o.shape), a = [RA(o, n.complexTensorInfos.real), RA(o, n.complexTensorInfos.imag)]; + return t6.runWebGLProgram(s, a, a[0].dtype); } -var nA = { kernelName: cp, backendName: "webgl", kernelFunc: sQ }; -var _h = class { +var FA = { kernelName: pp, backendName: "webgl", kernelFunc: TY }; +var xh = class { constructor(e) { - this.outputShape = [], this.outputShape = I.computeOutShape(e, 1), this.variableNames = e.map((a, i) => `T${i}`); - let t10 = new Array(e.length - 1); - t10[0] = e[0][1]; - for (let a = 1; a < t10.length; a++) - t10[a] = t10[a - 1] + e[a][1]; - let o = [`if (yC < ${t10[0]}) setOutput(getT0(yR, yC));`]; - for (let a = 1; a < t10.length; a++) { - let i = t10[a - 1]; - o.push(`else if (yC < ${t10[a]}) setOutput(getT${a}(yR, yC-${i}));`); + this.outputShape = [], this.outputShape = S.computeOutShape(e, 1), this.variableNames = e.map((a, i) => `T${i}`); + let t6 = new Array(e.length - 1); + t6[0] = e[0][1]; + for (let a = 1; a < t6.length; a++) + t6[a] = t6[a - 1] + e[a][1]; + let o = [`if (yC < ${t6[0]}) setOutput(getT0(yR, yC));`]; + for (let a = 1; a < t6.length; a++) { + let i = t6[a - 1]; + o.push(`else if (yC < ${t6[a]}) setOutput(getT${a}(yR, yC-${i}));`); } - let n = t10.length, s = t10[t10.length - 1]; + let n = t6.length, s = t6[t6.length - 1]; o.push(`else setOutput(getT${n}(yR, yC-${s}));`), this.userCode = ` void main() { ivec2 coords = getOutputCoords(); @@ -19706,16 +19767,16 @@ var _h = class { `; } }; -var $h = class { - constructor(e, t10) { - this.packedInputs = true, this.packedOutput = true, this.outputShape = [], this.outputShape = I.computeOutShape(e, t10); +var bh = class { + constructor(e, t6) { + this.packedInputs = true, this.packedOutput = true, this.outputShape = [], this.outputShape = S.computeOutShape(e, t6); let o = this.outputShape, n = o.length, s = _e(n), a = $t("coords", n), i = ["x", "y", "z", "w", "u", "v"].slice(0, n); this.variableNames = e.map((h, g) => `T${g}`); let p = new Array(e.length - 1); - p[0] = e[0][t10]; + p[0] = e[0][t6]; for (let h = 1; h < p.length; h++) - p[h] = p[h - 1] + e[h][t10]; - let u = i[t10], c = i.slice(-2), l = i.join(), m = `if (${u} < ${p[0]}) { + p[h] = p[h - 1] + e[h][t6]; + let u = i[t6], c = i.slice(-2), l = i.join(), m = `if (${u} < ${p[0]}) { return getChannel( getT0(${l}), vec2(${c.join()})); }`; @@ -19724,15 +19785,15 @@ var $h = class { m += ` if (${u} < ${p[h]} && ${u} >= ${p[h - 1]}) { return getChannel( - getT${h}(${Eh(i, u, g)}), - vec2(${Eh(c, u, g)})); + getT${h}(${yh(i, u, g)}), + vec2(${yh(c, u, g)})); }`; } - let f = p.length, d = p[p.length - 1]; + let d = p.length, f = p[p.length - 1]; m += ` return getChannel( - getT${f}(${Eh(i, u, d)}), - vec2(${Eh(c, u, d)}));`, this.userCode = ` + getT${d}(${yh(i, u, f)}), + vec2(${yh(c, u, f)}));`, this.userCode = ` float getValue(${i.map((h) => "int " + h)}) { ${m} } @@ -19761,68 +19822,73 @@ var $h = class { `; } }; -function Eh(r, e, t10) { +function yh(r, e, t6) { let o = r.indexOf(e); - return r.map((s, a) => a === o ? `${s} - ${t10}` : s).join(); + return r.map((s, a) => a === o ? `${s} - ${t6}` : s).join(); } -function Lu(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.texData.get(o.dataId); - return Rt({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); +function Mu(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.texData.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.imag }, backend: t6 }); } -var sA = { kernelName: Ya, backendName: "webgl", kernelFunc: Lu }; -function yc(r, e, t10) { +var DA = { kernelName: si, backendName: "webgl", kernelFunc: Mu }; +function fc(r, e, t6) { let o = r[0].dtype; if (o === "complex64") { - let l = r.map((g) => La({ inputs: { input: g }, backend: t10 })), m = r.map((g) => Lu({ inputs: { input: g }, backend: t10 })), f = yc(l, e, t10), d = yc(m, e, t10), h = Ar({ inputs: { real: f, imag: d }, backend: t10 }); - return l.forEach((g) => t10.disposeIntermediateTensorInfo(g)), m.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), h; + let d = r.map((b) => Ua({ inputs: { input: b }, backend: t6 })), f = r.map((b) => Mu({ inputs: { input: b }, backend: t6 })), h = fc(d, e, t6), g = fc(f, e, t6), x = Rr({ inputs: { real: h, imag: g }, backend: t6 }); + return d.forEach((b) => t6.disposeIntermediateTensorInfo(b)), f.forEach((b) => t6.disposeIntermediateTensorInfo(b)), t6.disposeIntermediateTensorInfo(h), t6.disposeIntermediateTensorInfo(g), x; } - let n = t10.shouldExecuteOnCPU(r); + let n = t6.shouldExecuteOnCPU(r); if (o === "string" && (n = true), n) { - let l = r.map((b) => { - let w = [-1, x.sizeFromShape(b.shape.slice(e))]; - return J({ inputs: { x: b }, backend: t10, attrs: { shape: w } }); - }), m = l.map((b) => ({ vals: t10.readSync(b.dataId), shape: b.shape })), f = I.computeOutShape(l.map((b) => b.shape), 1), d = l[0].shape[0] === 1, h = p$(m, f, o, d), g = I.computeOutShape(r.map((b) => b.shape), e), y = t10.makeTensorInfo(g, o, h); - return l.forEach((b) => t10.disposeIntermediateTensorInfo(b)), y; + let d = r.map((w) => { + let _ = [-1, y.sizeFromShape(w.shape.slice(e))]; + return te({ inputs: { x: w }, backend: t6, attrs: { shape: _ } }); + }), f = d.map((w) => ({ vals: t6.readSync(w.dataId), shape: w.shape })), h = S.computeOutShape(d.map((w) => w.shape), 1), g = d[0].shape[0] === 1, x = LE(f, h, o, g), b = S.computeOutShape(r.map((w) => w.shape), e), C = t6.makeTensorInfo(b, o, x); + return d.forEach((w) => t6.disposeIntermediateTensorInfo(w)), C; } - let s = P().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); - if (r.length > s) { - let l = []; - for (let f = 0; f < r.length; f += s) { - let d = r.slice(f, f + s); - l.push(yc(d, e, t10)); + let s = r.filter((d) => y.sizeFromShape(d.shape) > 0), a = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && s[0].shape.length > 1; + if (s.length === 1) { + let d = a ? new Jt(r[0].shape, Qs) : new Ar(r[0].shape, Qs); + return t6.runWebGLProgram(d, r, o); + } + let i = O().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); + if (s.length > i) { + let d = []; + for (let h = 0; h < s.length; h += i) { + let g = s.slice(h, h + i); + d.push(fc(g, e, t6)); } - let m = yc(l, e, t10); - for (let f of l) - t10.disposeIntermediateTensorInfo(f); - return m; + let f = fc(d, e, t6); + for (let h of d) + t6.disposeIntermediateTensorInfo(h); + return f; } - if (P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && r[0].shape.length > 1) { - let l = new $h(r.map((m) => m.shape), e); - return t10.runWebGLProgram(l, r, o); + if (a) { + let d = new bh(s.map((f) => f.shape), e); + return t6.runWebGLProgram(d, s, o); } - let { tensors2D: a, outShape: i } = aQ(r, e, t10), p = new _h(a.map((l) => l.shape)), u = t10.runWebGLProgram(p, a, o); - a.forEach((l) => t10.disposeIntermediateTensorInfo(l)); - let c = J({ inputs: { x: u }, attrs: { shape: i }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(u), c; + let { tensors2D: p, outShape: u } = _Y(s, e, t6), c = new xh(p.map((d) => d.shape)), l = t6.runWebGLProgram(c, p, o); + p.forEach((d) => t6.disposeIntermediateTensorInfo(d)); + let m = te({ inputs: { x: l }, attrs: { shape: u }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(l), m; } -function aQ(r, e, t10) { - let o = I.computeOutShape(r.map((s) => s.shape), e); - return { tensors2D: r.map((s) => J({ inputs: { x: s }, attrs: { shape: [-1, x.sizeFromShape(s.shape.slice(e))] }, backend: t10 })), outShape: o }; +function _Y(r, e, t6) { + let o = S.computeOutShape(r.map((s) => s.shape), e); + return { tensors2D: r.map((s) => te({ inputs: { x: s }, attrs: { shape: [-1, y.sizeFromShape(s.shape.slice(e))] }, backend: t6 })), outShape: o }; } -function Pw(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o, s = x.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); - I.assertParamsConsistent(a, s); - let i = I.computeOutShape(e.map((u) => u.shape), s); - if (x.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); - let p = e.filter((u) => x.sizeFromShape(u.shape) > 0); - return p.length === 1 ? Rt({ inputs: { x: p[0] }, backend: t10 }) : yc(p, s, t10); +function $w(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); + S.assertParamsConsistent(a, s); + let i = S.computeOutShape(e.map((u) => u.shape), s); + if (y.sizeFromShape(i) === 0) + return t6.makeTensorInfo(i, e[0].dtype, []); + let p = e.filter((u) => y.sizeFromShape(u.shape) > 0); + return p.length === 1 ? At({ inputs: { x: p[0] }, backend: t6 }) : fc(p, s, t6); } -var aA = { kernelName: gs, backendName: "webgl", kernelFunc: Pw }; -var bc = class { - constructor(e, t10 = false, o = null, n = false, s = false) { +var OA = { kernelName: ys, backendName: "webgl", kernelFunc: $w }; +var hc = class { + constructor(e, t6 = false, o = null, n = false, s = false) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let a = e.padInfo.top, i = e.padInfo.left, p = e.strideHeight, u = e.strideWidth, c = e.dilationHeight, l = e.dilationWidth, m = e.filterHeight, f = e.filterWidth, d = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4, g = e.dataFormat === "channelsLast", y = g ? 1 : 2, b = g ? 2 : 3, C = g ? 3 : 1, w = "", k = ""; + let a = e.padInfo.top, i = e.padInfo.left, p = e.strideHeight, u = e.strideWidth, c = e.dilationHeight, l = e.dilationWidth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4, g = e.dataFormat === "channelsLast", x = g ? 1 : 2, b = g ? 2 : 3, C = g ? 3 : 1, w = "", k = ""; o && (n ? w = `float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} @@ -19834,8 +19900,8 @@ var bc = class { ${o} } `, k = "result = activation(result);"); - let _ = t10 ? "result += getBiasAtOutCoords();" : ""; - t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` + let _ = t6 ? "result += getBiasAtOutCoords();" : ""; + t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` ${w} const ivec2 strides = ivec2(${p}, ${u}); @@ -19847,7 +19913,7 @@ var bc = class { int d2 = coords[${C}]; ivec2 xRCCorner = - ivec2(coords[${y}], coords[${b}]) * strides - pads; + ivec2(coords[${x}], coords[${b}]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; @@ -19861,14 +19927,14 @@ var bc = class { continue; } - for (int wC = 0; wC < ${f}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${l}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } - for (int d1 = 0; d1 < ${d}; d1 += 4) { + for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), @@ -19899,53 +19965,53 @@ var bc = class { if (${g}) { dotProd += - getX(batch, xR, xC, ${d}) * - getW(wR, wC, ${d}, d2); + getX(batch, xR, xC, ${f}) * + getW(wR, wC, ${f}, d2); } else { dotProd += - getX(batch, ${d}, xR, xC) * - getW(wR, wC, ${d}, d2); + getX(batch, ${f}, xR, xC) * + getW(wR, wC, ${f}, d2); } } else if (${h === 2}) { vec2 wValues = vec2( - getW(wR, wC, ${d}, d2), - getW(wR, wC, ${d} + 1, d2) + getW(wR, wC, ${f}, d2), + getW(wR, wC, ${f} + 1, d2) ); if (${g}) { vec2 xValues = vec2( - getX(batch, xR, xC, ${d}), - getX(batch, xR, xC, ${d} + 1) + getX(batch, xR, xC, ${f}), + getX(batch, xR, xC, ${f} + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( - getX(batch, ${d}, xR, xC), - getX(batch, ${d} + 1, xR, xC) + getX(batch, ${f}, xR, xC), + getX(batch, ${f} + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (${h === 3}) { vec3 wValues = vec3( - getW(wR, wC, ${d}, d2), - getW(wR, wC, ${d} + 1, d2), - getW(wR, wC, ${d} + 2, d2) + getW(wR, wC, ${f}, d2), + getW(wR, wC, ${f} + 1, d2), + getW(wR, wC, ${f} + 2, d2) ); if (${g}) { vec3 xValues = vec3( - getX(batch, xR, xC, ${d}), - getX(batch, xR, xC, ${d} + 1), - getX(batch, xR, xC, ${d} + 2) + getX(batch, xR, xC, ${f}), + getX(batch, xR, xC, ${f} + 1), + getX(batch, xR, xC, ${f} + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( - getX(batch, ${d}, xR, xC), - getX(batch, ${d} + 1, xR, xC), - getX(batch, ${d} + 2, xR, xC) + getX(batch, ${f}, xR, xC), + getX(batch, ${f} + 1, xR, xC), + getX(batch, ${f} + 2, xR, xC) ); dotProd += dot(xValues, wValues); } @@ -19962,13 +20028,13 @@ var bc = class { `; } }; -var Rh = class { +var Ch = class { constructor(e) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let t10 = e.padInfo.front, o = e.padInfo.top, n = e.padInfo.left, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.filterDepth, m = e.filterHeight, f = e.filterWidth, d = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4; + let t6 = e.padInfo.front, o = e.padInfo.top, n = e.padInfo.left, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.filterDepth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4; this.userCode = ` const ivec3 strides = ivec3(${s}, ${a}, ${i}); - const ivec3 pads = ivec3(${t10}, ${o}, ${n}); + const ivec3 pads = ivec3(${t6}, ${o}, ${n}); void main() { ivec5 coords = getOutputCoords(); @@ -19998,14 +20064,14 @@ var Rh = class { continue; } - for (int wC = 0; wC < ${f}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } - for (int d1 = 0; d1 < ${d}; d1 += 4) { + for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), @@ -20024,28 +20090,28 @@ var Rh = class { if (${h === 1}) { dotProd += - getX(batch, xF, xR, xC, ${d}) * - getW(wF, wR, wC, ${d}, d2); + getX(batch, xF, xR, xC, ${f}) * + getW(wF, wR, wC, ${f}, d2); } else if (${h === 2}) { vec2 xValues = vec2( - getX(batch, xF, xR, xC, ${d}), - getX(batch, xF, xR, xC, ${d} + 1) + getX(batch, xF, xR, xC, ${f}), + getX(batch, xF, xR, xC, ${f} + 1) ); vec2 wValues = vec2( - getW(wF, wR, wC, ${d}, d2), - getW(wF, wR, wC, ${d} + 1, d2) + getW(wF, wR, wC, ${f}, d2), + getW(wF, wR, wC, ${f} + 1, d2) ); dotProd += dot(xValues, wValues); } else if (${h === 3}) { vec3 xValues = vec3( - getX(batch, xF, xR, xC, ${d}), - getX(batch, xF, xR, xC, ${d} + 1), - getX(batch, xF, xR, xC, ${d} + 2) + getX(batch, xF, xR, xC, ${f}), + getX(batch, xF, xR, xC, ${f} + 1), + getX(batch, xF, xR, xC, ${f} + 2) ); vec3 wValues = vec3( - getW(wF, wR, wC, ${d}, d2), - getW(wF, wR, wC, ${d} + 1, d2), - getW(wF, wR, wC, ${d} + 2, d2) + getW(wF, wR, wC, ${f}, d2), + getW(wF, wR, wC, ${f} + 1, d2), + getW(wF, wR, wC, ${f} + 2, d2) ); dotProd += dot(xValues, wValues); } @@ -20057,9 +20123,9 @@ var Rh = class { `; } }; -var Cc = class { - constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); +var gc = class { + constructor(e, t6 = false, o = null, n = false, s = false) { + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ct(this.outputShape.length); let a = e.padInfo.left, i = e.strideWidth, p = e.dilationWidth, u = e.filterHeight, c = e.filterWidth, l = c, m = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; @@ -20086,24 +20152,24 @@ var Cc = class { if (xR >=0 && xR < inDims[0]) { `; for (let g = 0; g < (l + 1) / 2; g++) { - let y = g * 2; + let x = g * 2; if (m += ` - xC = xCCorner + ${y * p}; + xC = xCCorner + ${x * p}; `, i === 1) { - if (y < c && (a % 2 === 1 ? (m += ` + if (x < c && (a % 2 === 1 ? (m += ` xCOffset = xC + 1; - if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - `, p === 1 && y > 0 ? m += ` - xC${y} = vec4(xTexelC${y - 2}.zw, xTexelC${y}.xy); + `, p === 1 && x > 0 ? m += ` + xC${x} = vec4(xTexelC${x - 2}.zw, xTexelC${x}.xy); ` : m += ` xCOffset = xC + 1 - 2; @@ -20116,126 +20182,126 @@ var Cc = class { previous.zw = vec2(0.0); } - xC${y} = vec4(previous.zw, xTexelC${y}.xy); + xC${x} = vec4(previous.zw, xTexelC${x}.xy); } else { - xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy); + xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy); } `) : m += ` - if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - xC${y} = xTexelC${y}; - `, y + 1 < c)) { - let b = a % 2 === 0 ? x.nearestLargerEven(p) : p; + xC${x} = xTexelC${x}; + `, x + 1 < c)) { + let b = a % 2 === 0 ? y.nearestLargerEven(p) : p; p % 2 === 0 && a % 2 === 1 || p % 2 !== 0 && a % 2 !== 1 ? (m += ` xCOffset = xC + imod(pads[1], 2) + ${b}; - if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y + 1}Ready == 0) { - xTexelC${y + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x + 1}Ready == 0) { + xTexelC${x + 1} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y + 1}.zw = vec2(0.0); + xTexelC${x + 1}.zw = vec2(0.0); } - xTexelC${y + 1}Ready = 1; + xTexelC${x + 1}Ready = 1; } `, p > 1 ? m += ` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); - xC${y + 1} = vec4(previous.zw, xTexelC${y + 1}.xy); + xC${x + 1} = vec4(previous.zw, xTexelC${x + 1}.xy); } else { - xC${y + 1} = vec4(0.0, 0.0, xTexelC${y + 1}.xy); + xC${x + 1} = vec4(0.0, 0.0, xTexelC${x + 1}.xy); } ` : m += ` - xC${y + 1} = vec4(xTexelC${y}.zw, xTexelC${y + 1}.xy); + xC${x + 1} = vec4(xTexelC${x}.zw, xTexelC${x + 1}.xy); `) : b === 1 ? m += ` - xC${y + 1} = xTexelC${y}; + xC${x + 1} = xTexelC${x}; ` : m += ` xCOffset = xC + ${b}; - if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y + 1}Ready == 0) { - xTexelC${y + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x + 1}Ready == 0) { + xTexelC${x + 1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y + 1}.zw = vec2(0.0); + xTexelC${x + 1}.zw = vec2(0.0); } - xTexelC${y + 1}Ready = 1; + xTexelC${x + 1}Ready = 1; } - xC${y + 1} = xTexelC${y + 1}; + xC${x + 1} = xTexelC${x + 1}; `; } } else - y < c && (a % 2 === 1 ? (m += ` + x < c && (a % 2 === 1 ? (m += ` xCOffset = xC + 1 - strides[1]; - if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y + 1}Ready == 0) { - xTexelC${y + 1} = getX(batch, xR, xC + 1, d1); + if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x + 1}Ready == 0) { + xTexelC${x + 1} = getX(batch, xR, xC + 1, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xC + 2 >= inDims[1]) { - xTexelC${y + 1}.zw = vec2(0.0); + xTexelC${x + 1}.zw = vec2(0.0); } - xTexelC${y + 1}Ready = 1; + xTexelC${x + 1}Ready = 1; } - xC${y} = vec4(xTexelC${y}.zw, xTexelC${y + 1}.zw); - `, y + 1 < c && (m += ` + xC${x} = vec4(xTexelC${x}.zw, xTexelC${x + 1}.zw); + `, x + 1 < c && (m += ` final = vec4(0.0); xCOffset = xC + 1 + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } - xC${y + 1} = vec4(xTexelC${y + 1}.xy, final.xy); + xC${x + 1} = vec4(xTexelC${x + 1}.xy, final.xy); `)) : (m += ` - if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } xCOffset = xC + strides[1]; - if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y + 1}Ready == 0) { - xTexelC${y + 1} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x + 1}Ready == 0) { + xTexelC${x + 1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y + 1}.zw = vec2(0.); + xTexelC${x + 1}.zw = vec2(0.); } - xTexelC${y + 1}Ready = 1; + xTexelC${x + 1}Ready = 1; } - xC${y} = vec4( - xTexelC${y}.xy, xTexelC${y + 1}.xy); - `, y + 1 < c && (m += ` - xC${y + 1} = vec4(xTexelC${y}.zw, xTexelC${y + 1}.zw); + xC${x} = vec4( + xTexelC${x}.xy, xTexelC${x + 1}.xy); + `, x + 1 < c && (m += ` + xC${x + 1} = vec4(xTexelC${x}.zw, xTexelC${x + 1}.zw); `))); - y < c && (m += ` - wTexel = getW(r, ${y}, d1, d2); - dotProd += xC${y}.xxzz * vec4(wTexel.xy, wTexel.xy); + x < c && (m += ` + wTexel = getW(r, ${x}, d1, d2); + dotProd += xC${x}.xxzz * vec4(wTexel.xy, wTexel.xy); if(d1 + 1 < ${e.inChannels}) { - dotProd += xC${y}.yyww * vec4(wTexel.zw, wTexel.zw); + dotProd += xC${x}.yyww * vec4(wTexel.zw, wTexel.zw); } - `, y + 1 < c && (m += ` - wTexel = getW(r, ${y + 1}, d1, d2); - dotProd += xC${y + 1}.xxzz * vec4(wTexel.xy, wTexel.xy); + `, x + 1 < c && (m += ` + wTexel = getW(r, ${x + 1}, d1, d2); + dotProd += xC${x + 1}.xxzz * vec4(wTexel.xy, wTexel.xy); if(d1 + 1 < ${e.inChannels}) { - dotProd += xC${y + 1}.yyww * vec4(wTexel.zw, wTexel.zw); + dotProd += xC${x + 1}.yyww * vec4(wTexel.zw, wTexel.zw); } `)); } @@ -20246,19 +20312,19 @@ var Cc = class { `, m += ` } `; - let f = "", d = ""; - o && (n ? f = `vec4 activation(vec4 a) { + let d = "", f = ""; + o && (n ? d = `vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${o} - }` : s ? f = `vec4 activation(vec4 a) { + }` : s ? d = `vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${o} - }` : f = `vec4 activation(vec4 x) { + }` : d = `vec4 activation(vec4 x) { ${o} - }`, d = "result = activation(result);"); - let h = t10 ? "result += getBiasAtOutCoords();" : ""; - t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` - ${f} + }`, f = "result = activation(result);"); + let h = t6 ? "result += getBiasAtOutCoords();" : ""; + t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` + ${d} void main() { ivec4 coords = getOutputCoords(); @@ -20275,16 +20341,16 @@ var Cc = class { vec4 result = dotProd - vec4(0.000000000000001); ${h} - ${d} + ${f} setOutput(result); } `; } }; -var Ah = class { - constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec4" }, { name: "pad", type: "ivec2" }, { name: "stride", type: "ivec2" }, { name: "dilation", type: "ivec2" }, { name: "inChannels", type: "int" }, { name: "itemsPerBlockRow", type: "int" }, { name: "outWidth", type: "int" }], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); - let { dataFormat: o } = t10, n = Ct(), s = o === "channelsLast", a = s ? 1 : 2, i = s ? 2 : 3, p = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${e[2]} && pos < ${e[1]}) {`, u = ""; +var Sh = class { + constructor(e, t6) { + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec4" }, { name: "pad", type: "ivec2" }, { name: "stride", type: "ivec2" }, { name: "dilation", type: "ivec2" }, { name: "inChannels", type: "int" }, { name: "itemsPerBlockRow", type: "int" }, { name: "outWidth", type: "int" }], this.outputShape = e, this.enableShapeUniforms = ct(this.outputShape.length); + let { dataFormat: o } = t6, n = St(), s = o === "channelsLast", a = s ? 1 : 2, i = s ? 2 : 3, p = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${e[2]} && pos < ${e[1]}) {`, u = ""; for (let c = 0; c <= 1; c++) for (let l = 0; l <= 1; l++) u += ` @@ -20338,81 +20404,81 @@ var Ah = class { `; } }; -function Fh(r, e) { - let t10 = r.length; - return t10 >= 3 ? e ? [...r.slice(0, -3), r[t10 - 3] * r[t10 - 2], r[t10 - 1]] : [...r.slice(0, -3), r[t10 - 3], r[t10 - 2] * r[t10 - 1]] : !e && t10 === 1 && r[0] > 1 ? [r[0], 1] : null; +function wh(r, e) { + let t6 = r.length; + return t6 >= 3 ? e ? [...r.slice(0, -3), r[t6 - 3] * r[t6 - 2], r[t6 - 1]] : [...r.slice(0, -3), r[t6 - 3], r[t6 - 2] * r[t6 - 1]] : !e && t6 === 1 && r[0] > 1 ? [r[0], 1] : null; } -function Dh({ x: r, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = r.shape, u = o.texData.get(r.dataId), c = t10.inChannels, l = p[0] * p[1] * p[2], m = t10.outChannels, f = t10.dataFormat === "channelsLast", d = false, h = false, g, y = []; +function Ih({ x: r, filter: e, convInfo: t6, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = r.shape, u = o.texData.get(r.dataId), c = t6.inChannels, l = p[0] * p[1] * p[2], m = t6.outChannels, d = t6.dataFormat === "channelsLast", f = false, h = false, g, x = []; if (s != null) { - let w = Fh(s.shape, f); - w != null && (s = J({ inputs: { x: s }, backend: o, attrs: { shape: w } }), y.push(s)); + let w = wh(s.shape, d); + w != null && (s = te({ inputs: { x: s }, backend: o, attrs: { shape: w } }), x.push(s)); } if (n != null) { - let w = Fh(n.shape, f); - w != null && (n = J({ inputs: { x: n }, backend: o, attrs: { shape: w } }), y.push(n)); + let w = wh(n.shape, d); + w != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: w } }), x.push(n)); } - if (!((l === 1 || m === 1) && c > Rw) && u.isPacked && f && u.texture != null && p[2] % 2 !== 0 && x.arraysEqual(u.shape.slice(-3), p.slice(-3))) { - let w = p[0] * p[1] * (p[2] + 1), k = { dataId: r.dataId, shape: [1, w, t10.inChannels], dtype: r.dtype }, _ = u.shape; - u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, x.assert(Ti(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); - let E = J({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); - y.push(E); - let R = Mu({ a: k, b: E, backend: o, transposeA: d, transposeB: h, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), A = o.texData.get(R.dataId); - x.assert(A.isPacked, () => "batchMatMul result is expected to be packed"), u.shape = _, A.shape = t10.outShape, g = Rt({ inputs: { x: R }, backend: o }), g.shape = t10.outShape, y.push(R); + if (!((l === 1 || m === 1) && c > Nw) && u.isPacked && d && u.texture != null && p[2] % 2 !== 0 && y.arraysEqual(u.shape.slice(-3), p.slice(-3))) { + let w = p[0] * p[1] * (p[2] + 1), k = { dataId: r.dataId, shape: [1, w, t6.inChannels], dtype: r.dtype }, _ = u.shape; + u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, y.assert(Li(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); + let $ = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t6.inChannels, t6.outChannels] } }); + x.push($); + let A = Pu({ a: k, b: $, backend: o, transposeA: f, transposeB: h, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), R = o.texData.get(A.dataId); + y.assert(R.isPacked, () => "batchMatMul result is expected to be packed"), u.shape = _, R.shape = t6.outShape, g = At({ inputs: { x: A }, backend: o }), g.shape = t6.outShape, x.push(A); } else { - let w = t10.outHeight * t10.outWidth, k = J({ inputs: { x: r }, backend: o, attrs: { shape: f ? [t10.batchSize, w, t10.inChannels] : [t10.batchSize, t10.inChannels, w] } }), _ = J({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }), E = Mu({ a: f ? k : _, b: f ? _ : k, transposeA: !f, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); - g = J({ inputs: { x: E }, backend: o, attrs: { shape: t10.outShape } }), y.push(k), y.push(_), y.push(E); + let w = t6.outHeight * t6.outWidth, k = te({ inputs: { x: r }, backend: o, attrs: { shape: d ? [t6.batchSize, w, t6.inChannels] : [t6.batchSize, t6.inChannels, w] } }), _ = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t6.inChannels, t6.outChannels] } }), $ = Pu({ a: d ? k : _, b: d ? _ : k, transposeA: !d, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + g = te({ inputs: { x: $ }, backend: o, attrs: { shape: t6.outShape } }), x.push(k), x.push(_), x.push($); } - for (let w of y) + for (let w of x) o.disposeIntermediateTensorInfo(w); return g; } -function Ph({ x: r, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let { filterWidth: p, filterHeight: u, inChannels: c, outWidth: l, outHeight: m, dataFormat: f } = t10, d = f === "channelsLast", h = p * u * c, g = m * l, y = [t10.batchSize, h, g], b = true, C = false, w = []; +function vh({ x: r, filter: e, convInfo: t6, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let { filterWidth: p, filterHeight: u, inChannels: c, outWidth: l, outHeight: m, dataFormat: d } = t6, f = d === "channelsLast", h = p * u * c, g = m * l, x = [t6.batchSize, h, g], b = true, C = false, w = []; if (s != null) { - let H = Fh(s.shape, d); - H != null && (s = J({ inputs: { x: s }, backend: o, attrs: { shape: H } }), w.push(s)); + let H = wh(s.shape, f); + H != null && (s = te({ inputs: { x: s }, backend: o, attrs: { shape: H } }), w.push(s)); } if (n != null) { - let H = Fh(n.shape, d); - H != null && (n = J({ inputs: { x: n }, backend: o, attrs: { shape: H } }), w.push(n)); + let H = wh(n.shape, f); + H != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: H } }), w.push(n)); } - let k = J({ inputs: { x: e }, backend: o, attrs: { shape: [1, h, x.sizeFromShape(e.shape) / h] } }); + let k = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, h, y.sizeFromShape(e.shape) / h] } }); w.push(k); - let _ = new Ah(y, t10), E = [r.shape, [t10.padInfo.top, t10.padInfo.left], [t10.strideHeight, t10.strideWidth], [t10.dilationHeight, t10.dilationWidth], [t10.inChannels], [t10.filterWidth * t10.inChannels], [t10.outWidth]], R = o.runWebGLProgram(_, [r], "float32", E), A = J({ inputs: { x: R }, backend: o, attrs: { shape: y } }); - w.push(R), w.push(A); - let D = n != null, O = s != null, M = i === "leakyrelu", L = i ? Ma(i, true) : null, W = new xc(d ? A.shape : k.shape, d ? k.shape : A.shape, d ? [t10.batchSize, g, t10.outChannels] : [t10.batchSize, t10.outChannels, g], b, C, D, L, O, M), V = d ? [A, k] : [k, A]; - if (n && V.push(n), O && V.push(s), M) { - let H = o.makeTensorInfo([], "float32", x.createScalarValue(a, "float32")); + let _ = new Sh(x, t6), $ = [r.shape, [t6.padInfo.top, t6.padInfo.left], [t6.strideHeight, t6.strideWidth], [t6.dilationHeight, t6.dilationWidth], [t6.inChannels], [t6.filterWidth * t6.inChannels], [t6.outWidth]], A = o.runWebGLProgram(_, [r], "float32", $), R = te({ inputs: { x: A }, backend: o, attrs: { shape: x } }); + w.push(A), w.push(R); + let D = n != null, P = s != null, M = i === "leakyrelu", L = i ? Wa(i, true) : null, W = new dc(f ? R.shape : k.shape, f ? k.shape : R.shape, f ? [t6.batchSize, g, t6.outChannels] : [t6.batchSize, t6.outChannels, g], b, C, D, L, P, M), V = f ? [R, k] : [k, R]; + if (n && V.push(n), P && V.push(s), M) { + let H = o.makeTensorInfo([], "float32", y.createScalarValue(a, "float32")); V.push(H), w.push(H); } - let G = o.runWebGLProgram(W, V, "float32"), q = J({ inputs: { x: G }, backend: o, attrs: { shape: t10.outShape } }); - w.push(G); + let U = o.runWebGLProgram(W, V, "float32"), q = te({ inputs: { x: U }, backend: o, attrs: { shape: t6.outShape } }); + w.push(U); for (let H of w) o.disposeIntermediateTensorInfo(H); return q; } -function iQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = I.convertConv2DDataFormat(p), m = I.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), f; +function EY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = S.convertConv2DDataFormat(p), m = S.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), d; if (m.filterHeight === 1 && m.filterWidth === 1 && m.dilationHeight === 1 && m.dilationWidth === 1 && m.strideHeight === 1 && m.strideWidth === 1 && (m.padInfo.type === "SAME" || m.padInfo.type === "VALID")) - f = Dh({ x: n, filter: s, convInfo: m, backend: t10 }); - else if (m.strideWidth <= 2 && l === "channelsLast" && P().getBool("WEBGL_EXP_CONV")) { - let h = new Cc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; - f = t10.runWebGLProgram(h, [n, s], "float32", g); - } else if (P().getBool("WEBGL_CONV_IM2COL")) - f = Ph({ x: n, filter: s, convInfo: m, backend: t10 }); + d = Ih({ x: n, filter: s, convInfo: m, backend: t6 }); + else if (m.strideWidth <= 2 && l === "channelsLast" && O().getBool("WEBGL_EXP_CONV")) { + let h = new gc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; + d = t6.runWebGLProgram(h, [n, s], "float32", g); + } else if (O().getBool("WEBGL_CONV_IM2COL")) + d = vh({ x: n, filter: s, convInfo: m, backend: t6 }); else { - let h = new bc(m); - f = t10.runWebGLProgram(h, [n, s], "float32"); + let h = new hc(m); + d = t6.runWebGLProgram(h, [n, s], "float32"); } - let d = J({ inputs: { x: f }, backend: t10, attrs: { shape: m.outShape } }); - return t10.disposeIntermediateTensorInfo(f), d; + let f = te({ inputs: { x: d }, backend: t6, attrs: { shape: m.outShape } }); + return t6.disposeIntermediateTensorInfo(d), f; } -var iA = { kernelName: ln, backendName: "webgl", kernelFunc: iQ }; -var Oh = class { +var PA = { kernelName: Go, backendName: "webgl", kernelFunc: EY }; +var kh = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; - let t10 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.dataFormat === "channelsLast"; + let t6 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.dataFormat === "channelsLast"; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -20427,7 +20493,7 @@ var Oh = class { for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { - int xR = wR + yR * ${t10} - ${n}; + int xR = wR + yR * ${t6} - ${n}; if (xR < 0 || xR >= ${e.inHeight}) { continue; @@ -20458,10 +20524,10 @@ var Oh = class { `; } }; -var Mh = class { +var Nh = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; - let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dataFormat === "channelsLast", i = t10 - 1 - e.padInfo.top, p = o - 1 - e.padInfo.left, u = a ? 1 : 2, c = a ? 2 : 3, l = a ? 3 : 1; + let t6 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dataFormat === "channelsLast", i = t6 - 1 - e.padInfo.top, p = o - 1 - e.padInfo.left, u = a ? 1 : 2, c = a ? 2 : 3, l = a ? 3 : 1; this.userCode = ` const ivec2 pads = ivec2(${i}, ${p}); @@ -20477,7 +20543,7 @@ var Mh = class { // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; - for (int wR = 0; wR < ${t10}; wR++) { + for (int wR = 0; wR < ${t6}; wR++) { float dyR = float(dyRCorner + wR) / ${n}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { @@ -20485,7 +20551,7 @@ var Mh = class { } int idyR = int(dyR); - int wRPerm = ${t10} - 1 - wR; + int wRPerm = ${t6} - 1 - wR; for (int wC = 0; wC < ${o}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; @@ -20518,10 +20584,10 @@ var Mh = class { `; } }; -var Lh = class { +var Th = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; - let t10 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.padInfo.front, a = e.padInfo.top, i = e.padInfo.left; + let t6 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.padInfo.front, a = e.padInfo.top, i = e.padInfo.left; this.userCode = ` void main() { ivec5 coords = getOutputCoords(); @@ -20535,7 +20601,7 @@ var Lh = class { for (int b = 0; b < ${e.batchSize}; b++) { for (int yF = 0; yF < ${e.outDepth}; yF++) { - int xF = wF + yF * ${t10} - ${s}; + int xF = wF + yF * ${t6} - ${s}; if (xF < 0 || xF >= ${e.inDepth}) { continue; @@ -20567,10 +20633,10 @@ var Lh = class { `; } }; -var Bh = class { +var _h = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; - let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = t10 - 1 - e.padInfo.front, u = o - 1 - e.padInfo.top, c = n - 1 - e.padInfo.left; + let t6 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = t6 - 1 - e.padInfo.front, u = o - 1 - e.padInfo.top, c = n - 1 - e.padInfo.left; this.userCode = ` const ivec3 pads = ivec3(${p}, ${u}, ${c}); @@ -20586,7 +20652,7 @@ var Bh = class { int dyCCorner = dyCorner.z; float dotProd = 0.0; - for (int wF = 0; wF < ${t10}; wF++) { + for (int wF = 0; wF < ${t6}; wF++) { float dyF = float(dyFCorner + wF) / ${s}.0; if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) { @@ -20594,7 +20660,7 @@ var Bh = class { } int idyF = int(dyF); - int wFPerm = ${t10} - 1 - wF; + int wFPerm = ${t6} - 1 - wF; for (int wR = 0; wR < ${o}; wR++) { float dyR = float(dyRCorner + wR) / ${a}.0; @@ -20631,48 +20697,48 @@ var Bh = class { `; } }; -function uQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o, l = I.convertConv2DDataFormat(p), m = I.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), f = new Oh(m); - return t10.runWebGLProgram(f, [n, s], "float32"); +function $Y(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o, l = S.convertConv2DDataFormat(p), m = S.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), d = new kh(m); + return t6.runWebGLProgram(d, [n, s], "float32"); } -var uA = { kernelName: lp, backendName: "webgl", kernelFunc: uQ }; -function pQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = I.convertConv2DDataFormat(u), m = I.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l), f = new Mh(m); - return t10.runWebGLProgram(f, [n, s], "float32"); +var MA = { kernelName: cp, backendName: "webgl", kernelFunc: $Y }; +function AY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = S.convertConv2DDataFormat(u), m = S.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l), d = new Nh(m); + return t6.runWebGLProgram(d, [n, s], "float32"); } -var pA = { kernelName: mn, backendName: "webgl", kernelFunc: pQ }; -function cQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = I.computeConv3DInfo(n.shape, s.shape, a, p, i), c = new Rh(u); - return t10.runWebGLProgram(c, [n, s], "float32"); +var LA = { kernelName: Ho, backendName: "webgl", kernelFunc: AY }; +function RY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = S.computeConv3DInfo(n.shape, s.shape, a, p, i), c = new Ch(u); + return t6.runWebGLProgram(c, [n, s], "float32"); } -var cA = { kernelName: mp, backendName: "webgl", kernelFunc: cQ }; -function lQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = I.computeConv3DInfo(n.shape, p, a, 1, i), c = new Lh(u); - return t10.runWebGLProgram(c, [n, s], "float32"); +var BA = { kernelName: lp, backendName: "webgl", kernelFunc: RY }; +function FY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = S.computeConv3DInfo(n.shape, p, a, 1, i), c = new Th(u); + return t6.runWebGLProgram(c, [n, s], "float32"); } -var lA = { kernelName: Dm, backendName: "webgl", kernelFunc: lQ }; -function mQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o, u = I.computeConv3DInfo(p, s.shape, i, 1, a), c = new Bh(u); - return t10.runWebGLProgram(c, [n, s], "float32"); +var VA = { kernelName: vm, backendName: "webgl", kernelFunc: FY }; +function DY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o, u = S.computeConv3DInfo(p, s.shape, i, 1, a), c = new _h(u); + return t6.runWebGLProgram(c, [n, s], "float32"); } -var mA = { kernelName: fp, backendName: "webgl", kernelFunc: mQ }; -var fQ = jo + ` +var zA = { kernelName: mp, backendName: "webgl", kernelFunc: DY }; +var OY = _o + ` return cos(x); `; -var dQ = he({ opSnippet: fQ }); -var fA = { kernelName: fn, backendName: "webgl", kernelFunc: dQ }; -var hQ = ` +var PY = ge({ opSnippet: OY }); +var WA = { kernelName: qo, backendName: "webgl", kernelFunc: PY }; +var MY = ` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `; -var gQ = he({ opSnippet: hQ }); -var dA = { kernelName: dn, backendName: "webgl", kernelFunc: gQ }; -var Vh = class { - constructor(e, t10, o, n, s) { +var LY = ge({ opSnippet: MY }); +var UA = { kernelName: Ko, backendName: "webgl", kernelFunc: LY }; +var Eh = class { + constructor(e, t6, o, n, s) { this.variableNames = ["Image", "Boxes", "BoxInd"], this.outputShape = []; - let [a, i, p, u] = e, [c] = t10, [l, m] = o; + let [a, i, p, u] = e, [c] = t6, [l, m] = o; this.outputShape = [c, l, m, u]; - let f = n === "bilinear" ? 1 : 0, [d, h] = [`${i - 1}.0`, `${p - 1}.0`], [g, y, b] = l > 1 ? [`${(i - 1) / (l - 1)}`, "(y2-y1) * height_ratio", `y1*${d} + float(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${d}`], [C, w, k] = m > 1 ? [`${(p - 1) / (m - 1)}`, "(x2-x1) * width_ratio", `x1*${h} + float(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${h}`]; + let d = n === "bilinear" ? 1 : 0, [f, h] = [`${i - 1}.0`, `${p - 1}.0`], [g, x, b] = l > 1 ? [`${(i - 1) / (l - 1)}`, "(y2-y1) * height_ratio", `y1*${f} + float(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${f}`], [C, w, k] = m > 1 ? [`${(p - 1) / (m - 1)}`, "(x2-x1) * width_ratio", `x1*${h} + float(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${h}`]; this.userCode = ` const float height_ratio = float(${g}); const float width_ratio = float(${C}); @@ -20695,11 +20761,11 @@ var Vh = class { return; } - float height_scale = ${y}; + float height_scale = ${x}; float width_scale = ${w}; float in_y = ${b}; - if( in_y < 0.0 || in_y > ${d} ) { + if( in_y < 0.0 || in_y > ${f} ) { setOutput(float(${s})); return; } @@ -20710,7 +20776,7 @@ var Vh = class { } vec2 sourceFracIndexCR = vec2(in_x,in_y); - if(${f} == 1) { + if(${d} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); @@ -20737,36 +20803,36 @@ var Vh = class { `; } }; -var xQ = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Vh(n.shape, s.shape, i, p, u); - return t10.runWebGLProgram(c, [n, s, a], "float32"); +var BY = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Eh(n.shape, s.shape, i, p, u); + return t6.runWebGLProgram(c, [n, s, a], "float32"); }; -var hA = { kernelName: xn, backendName: "webgl", kernelFunc: xQ }; -var Bu; +var GA = { kernelName: Yo, backendName: "webgl", kernelFunc: BY }; +var Lu; (function(r) { r.Prod = "*", r.Sum = "+"; -})(Bu || (Bu = {})); -var Ml = class { - constructor(e, t10, o, n) { - this.op = e, this.outputShape = t10, this.variableNames = ["x"], this.customUniforms = [{ name: "index", type: "float" }]; - let s = this.outputShape.length, a = this.op === Bu.Prod ? "1.0" : "0.0", i = o ? a : `getX(${gA(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", c = ""; +})(Lu || (Lu = {})); +var El = class { + constructor(e, t6, o, n) { + this.op = e, this.outputShape = t6, this.variableNames = ["x"], this.customUniforms = [{ name: "index", type: "float" }]; + let s = this.outputShape.length, a = this.op === Lu.Prod ? "1.0" : "0.0", i = o ? a : `getX(${HA(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", c = ""; o ? (u = n ? `end != ${p - 1}` : "end != 0", c = n ? "end + 1" : "end - 1") : (u = n ? `end + pow2 < ${p}` : "end >= pow2", c = n ? "end + pow2" : "end - pow2"), this.userCode = ` void main() { ${_e(s)} coords = getOutputCoords(); - int end = ${xA(s, "coords", this.op)}; + int end = ${qA(s, "coords", this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { int idx = ${c}; - ${xA(s, "coords", this.op)} = idx; - val ${this.op}= getX(${gA(s, "coords", this.op)}); + ${qA(s, "coords", this.op)} = idx; + val ${this.op}= getX(${HA(s, "coords", this.op)}); } setOutput(val); } `; } }; -function gA(r, e, t10) { +function HA(r, e, t6) { if (r === 1) return `${e}`; if (r === 2) @@ -20775,9 +20841,9 @@ function gA(r, e, t10) { return `${e}.x, ${e}.y, ${e}.z`; if (r === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; - throw new Error(`Cumulative ${t10} for rank ${r} is not yet supported`); + throw new Error(`Cumulative ${t6} for rank ${r} is not yet supported`); } -function xA(r, e, t10) { +function qA(r, e, t6) { if (r === 1) return `${e}`; if (r === 2) @@ -20786,54 +20852,54 @@ function xA(r, e, t10) { return `${e}.z`; if (r === 4) return `${e}.w`; - throw new Error(`Cumulative ${t10} for rank ${r} is not yet supported`); + throw new Error(`Cumulative ${t6} for rank ${r} is not yet supported`); } -function zh(r, e, t10, o, n, s) { - let a = e.shape.length, i = I.getAxesPermutation([o], a), p = e; - i != null && (p = xt({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); - let u = I.getInnerMostAxes(1, a)[0]; +function $h(r, e, t6, o, n, s) { + let a = e.shape.length, i = S.getAxesPermutation([o], a), p = e; + i != null && (p = xt({ inputs: { x: e }, backend: t6, attrs: { perm: i } })); + let u = S.getInnerMostAxes(1, a)[0]; if (u !== a - 1) throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length - 1} but got axis=${o}`); - let c = p.shape[u], l = Rt({ inputs: { x: p }, backend: t10 }); + let c = p.shape[u], l = At({ inputs: { x: p }, backend: t6 }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { - let f = new Ml(r, p.shape, false, s), d = [[m]], h = l; - l = t10.runWebGLProgram(f, [l], l.dtype, d), t10.disposeIntermediateTensorInfo(h); + let d = new El(r, p.shape, false, s), f = [[m]], h = l; + l = t6.runWebGLProgram(d, [l], l.dtype, f), t6.disposeIntermediateTensorInfo(h); } if (n) { - let m = new Ml(r, p.shape, n, s), f = l; - l = t10.runWebGLProgram(m, [l], l.dtype), t10.disposeIntermediateTensorInfo(f); + let m = new El(r, p.shape, n, s), d = l; + l = t6.runWebGLProgram(m, [l], l.dtype), t6.disposeIntermediateTensorInfo(d); } if (i != null) { - let m = I.getUndoAxesPermutation(i), f = xt({ inputs: { x: l }, backend: t10, attrs: { perm: m } }); - return t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(p), f; + let m = S.getUndoAxesPermutation(i), d = xt({ inputs: { x: l }, backend: t6, attrs: { perm: m } }); + return t6.disposeIntermediateTensorInfo(l), t6.disposeIntermediateTensorInfo(p), d; } return l; } -function yQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return zh(Bu.Prod, n, t10, s, a, i); +function VY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return $h(Lu.Prod, n, t6, s, a, i); } -var yA = { kernelName: hn, backendName: "webgl", kernelFunc: yQ }; -function bQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return zh(Bu.Sum, n, t10, s, a, i); +var KA = { kernelName: jo, backendName: "webgl", kernelFunc: VY }; +function zY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return $h(Lu.Sum, n, t6, s, a, i); } -var bA = { kernelName: gn, backendName: "webgl", kernelFunc: bQ }; -function CQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; +var jA = { kernelName: Xo, backendName: "webgl", kernelFunc: zY }; +function WY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), c = oh(p, u, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, c); + let p = t6.readSync(n.dataId), u = t6.readSync(s.dataId), c = qf(p, u, s.dtype, s.shape, a); + return t6.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = t10.bufferSync(n), u = t10.bufferSync(s), c = a$(p, u, a, i); - return t10.makeTensorInfo(c.shape, s.dtype, c.values); + let p = t6.bufferSync(n), u = t6.bufferSync(s), c = OE(p, u, a, i); + return t6.makeTensorInfo(c.shape, s.dtype, c.values); } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var CA = { kernelName: dp, backendName: "webgl", kernelFunc: CQ }; -var Wh = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.outputShape = [], this.outputShape = e, this.blockSize = t10, this.dataFormat = o, this.userCode = ` +var XA = { kernelName: ti, backendName: "webgl", kernelFunc: WY }; +var Ah = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.outputShape = [], this.outputShape = e, this.blockSize = t6, this.dataFormat = o, this.userCode = ` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -20841,11 +20907,11 @@ var Wh = class { int w = ${this.getWidthCoordString()}; int d = ${this.getDepthCoordString()}; - int in_h = h / ${t10}; - int offset_h = imod(h, ${t10}); - int in_w = w / ${t10}; - int offset_w = imod(w, ${t10}); - int offset_d = (offset_h * ${t10} + offset_w) * + int in_h = h / ${t6}; + int offset_h = imod(h, ${t6}); + int in_w = w / ${t6}; + int offset_w = imod(w, ${t6}); + int offset_d = (offset_h * ${t6} + offset_w) * ${this.getOutputDepthSize()}; int in_d = d + offset_d; @@ -20870,14 +20936,14 @@ var Wh = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function IQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, f = c / (s * s), d = a === "NHWC" ? [i, l, m, f] : [i, f, l, m], h = new Wh(d, s, a); - return t10.runWebGLProgram(h, [n], n.dtype); +function UY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = new Ah(f, s, a); + return t6.runWebGLProgram(h, [n], n.dtype); } -var IA = { kernelName: yn, backendName: "webgl", kernelFunc: IQ }; -var Ic = class { - constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); +var YA = { kernelName: Qo, backendName: "webgl", kernelFunc: UY }; +var xc = class { + constructor(e, t6 = false, o = null, n = false, s = false) { + this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ct(this.outputShape.length); let a = e.filterHeight, i = e.filterWidth, p = e.outChannels / e.inChannels, u = "", c = ""; o && (n ? u = `float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); @@ -20890,8 +20956,8 @@ var Ic = class { ${o} } `, c = "result = activation(result);"); - let l = t10 ? "result += getBiasAtOutCoords();" : ""; - t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` + let l = t6 ? "result += getBiasAtOutCoords();" : ""; + t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` ${u} void main() { @@ -20937,39 +21003,39 @@ var Ic = class { `; } }; -var wc = class { - constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); - let a = e.outChannels / e.inChannels, i = e.padInfo.left, p = e.strideWidth, u = e.dilationWidth, c = e.filterHeight, l = e.filterWidth, m = l, f = ` +var yc = class { + constructor(e, t6 = false, o = null, n = false, s = false) { + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ct(this.outputShape.length); + let a = e.outChannels / e.inChannels, i = e.padInfo.left, p = e.strideWidth, u = e.dilationWidth, c = e.filterHeight, l = e.filterWidth, m = l, d = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; - for (let y = 0; y < l; y++) - f += ` - vec4 xTexelC${y * 2}; - int xTexelC${y * 2}Ready; - vec4 xTexelC${y * 2 + 1}; - int xTexelC${y * 2 + 1}Ready; - vec4 xC${y};`; - f += ` + for (let x = 0; x < l; x++) + d += ` + vec4 xTexelC${x * 2}; + int xTexelC${x * 2}Ready; + vec4 xTexelC${x * 2 + 1}; + int xTexelC${x * 2 + 1}Ready; + vec4 xC${x};`; + d += ` for (int r = 0; r < ${c}; r++) { `; - for (let y = 0; y < l; y++) - f += ` - xTexelC${y * 2} = vec4(0.0); - xTexelC${y * 2}Ready = 0; - xTexelC${y * 2 + 1} = vec4(0.0); - xTexelC${y * 2 + 1}Ready = 0; - xC${y} = vec4(0.0);`; - f += ` + for (let x = 0; x < l; x++) + d += ` + xTexelC${x * 2} = vec4(0.0); + xTexelC${x * 2}Ready = 0; + xTexelC${x * 2 + 1} = vec4(0.0); + xTexelC${x * 2 + 1}Ready = 0; + xC${x} = vec4(0.0);`; + d += ` xR = xRCorner + r * dilations[0]; if (xR >=0 && xR < inDims[0]) { `; - for (let y = 0; y < (m + 1) / 2; y++) { - let b = y * 2; - if (f += ` + for (let x = 0; x < (m + 1) / 2; x++) { + let b = x * 2; + if (d += ` xC = xCCorner + ${b * u}; `, p === 1) { - if (b < l && (i % 2 === 1 ? (f += ` + if (b < l && (i % 2 === 1 ? (d += ` xCOffset = xC + 1; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -20981,9 +21047,9 @@ var wc = class { } xTexelC${b}Ready = 1; } - `, u === 1 && b > 0 ? f += ` + `, u === 1 && b > 0 ? d += ` xC${b} = vec4(xTexelC${b - 2}.zw, xTexelC${b}.xy); - ` : f += ` + ` : d += ` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { @@ -20999,7 +21065,7 @@ var wc = class { } else { xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy); } - `) : f += ` + `) : d += ` if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -21010,8 +21076,8 @@ var wc = class { xC${b} = xTexelC${b}; `, b + 1 < l)) { - let C = i % 2 === 0 ? x.nearestLargerEven(u) : u; - u % 2 === 0 && i % 2 === 1 || u % 2 !== 0 && i % 2 !== 1 ? (f += ` + let C = i % 2 === 0 ? y.nearestLargerEven(u) : u; + u % 2 === 0 && i % 2 === 1 || u % 2 !== 0 && i % 2 !== 1 ? (d += ` xCOffset = xC + imod(pads[1], 2) + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b + 1}Ready == 0) { @@ -21024,7 +21090,7 @@ var wc = class { } xTexelC${b + 1}Ready = 1; } - `, u > 1 ? f += ` + `, u > 1 ? d += ` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); @@ -21032,11 +21098,11 @@ var wc = class { } else { xC${b + 1} = vec4(0.0, 0.0, xTexelC${b + 1}.xy); } - ` : f += ` + ` : d += ` xC${b + 1} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.xy); - `) : C === 1 ? f += ` + `) : C === 1 ? d += ` xC${b + 1} = xTexelC${b}; - ` : f += ` + ` : d += ` xCOffset = xC + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b + 1}Ready == 0) { @@ -21051,7 +21117,7 @@ var wc = class { `; } } else - b < l && (i % 2 === 1 ? (f += ` + b < l && (i % 2 === 1 ? (d += ` xCOffset = xC + 1 - strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -21074,14 +21140,14 @@ var wc = class { } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.zw); - `, b + 1 < l && (f += ` + `, b + 1 < l && (d += ` final = vec4(0.0); xCOffset = xC + 1 + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${b + 1} = vec4(xTexelC${b + 1}.xy, final.xy); - `)) : (f += ` + `)) : (d += ` if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -21101,35 +21167,35 @@ var wc = class { xC${b} = vec4( xTexelC${b}.xy, xTexelC${b + 1}.xy); - `, b + 1 < l && (f += ` + `, b + 1 < l && (d += ` xC${b + 1} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.zw); `))); - b < l && (f += ` + b < l && (d += ` wTexel = getW(r, ${b}, d1, q); dotProd += xC${b} * vec4(wTexel.xz, wTexel.xz); - `, b + 1 < l && (f += ` + `, b + 1 < l && (d += ` wTexel = getW(r, ${b + 1}, d1, q); dotProd += xC${b + 1} * vec4(wTexel.xz, wTexel.xz); `)); } - f += ` + d += ` } - `, f += ` + `, d += ` } `; - let d = "", h = ""; - o && (n ? d = `vec4 activation(vec4 a) { + let f = "", h = ""; + o && (n ? f = `vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${o} - }` : s ? d = `vec4 activation(vec4 a) { + }` : s ? f = `vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${o} - }` : d = `vec4 activation(vec4 x) { + }` : f = `vec4 activation(vec4 x) { ${o} }`, h = "result = activation(result);"); - let g = t10 ? "result += getBiasAtOutCoords();" : ""; - t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` - ${d} + let g = t6 ? "result += getBiasAtOutCoords();" : ""; + t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` + ${f} void main() { ivec4 coords = getOutputCoords(); @@ -21144,7 +21210,7 @@ var wc = class { //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss. vec4 dotProd = vec4(0.000000000000001); - ${f} + ${d} vec4 result = dotProd - vec4(0.000000000000001); ${g} @@ -21154,19 +21220,19 @@ var wc = class { `; } }; -function wQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, c = p; - c == null && (c = [1, 1]), x.assert(I.eitherStridesOrDilationsAreOne(a, c), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`); - let l = I.computeConv2DInfo(n.shape, s.shape, a, c, i, u, true), m; - P().getBool("WEBGL_PACK_DEPTHWISECONV") && l.strideWidth <= 2 && l.outChannels / l.inChannels === 1 ? m = new wc(l) : m = new Ic(l); - let f = [[l.padInfo.top, l.padInfo.left], [l.strideHeight, l.strideWidth], [l.dilationHeight, l.dilationWidth], [l.inHeight, l.inWidth]]; - return t10.runWebGLProgram(m, [n, s], "float32", f); +function GY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, c = p; + c == null && (c = [1, 1]), y.assert(S.eitherStridesOrDilationsAreOne(a, c), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`); + let l = S.computeConv2DInfo(n.shape, s.shape, a, c, i, u, true), m; + O().getBool("WEBGL_PACK_DEPTHWISECONV") && l.strideWidth <= 2 && l.outChannels / l.inChannels === 1 ? m = new yc(l) : m = new xc(l); + let d = [[l.padInfo.top, l.padInfo.left], [l.strideHeight, l.strideWidth], [l.dilationHeight, l.dilationWidth], [l.inHeight, l.inWidth]]; + return t6.runWebGLProgram(m, [n, s], "float32", d); } -var wA = { kernelName: bn, backendName: "webgl", kernelFunc: wQ }; -var Uh = class { +var QA = { kernelName: Zo, backendName: "webgl", kernelFunc: GY }; +var Rh = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; - let t10 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.outChannels / e.inChannels; + let t6 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.outChannels / e.inChannels; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -21181,7 +21247,7 @@ var Uh = class { // TO DO: Vec4 over the batch size for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { - int xR = wR + yR * ${t10} - ${n}; + int xR = wR + yR * ${t6} - ${n}; if (xR < 0 || xR >= ${e.inHeight}) { continue; @@ -21205,10 +21271,10 @@ var Uh = class { `; } }; -var Gh = class { +var Fh = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; - let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = t10 - 1 - e.padInfo.top, i = o - 1 - e.padInfo.left, p = e.outChannels / e.inChannels; + let t6 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = t6 - 1 - e.padInfo.top, i = o - 1 - e.padInfo.left, p = e.outChannels / e.inChannels; this.userCode = ` const ivec2 pads = ivec2(${a}, ${i}); @@ -21222,7 +21288,7 @@ var Gh = class { float dotProd = 0.0; - for (int wR = 0; wR < ${t10}; wR++) { + for (int wR = 0; wR < ${t6}; wR++) { float dyR = float(dyRCorner + wR) / ${n}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { @@ -21230,7 +21296,7 @@ var Gh = class { } int idyR = int(dyR); - int wRPerm = ${t10} - 1 - wR; + int wRPerm = ${t6} - 1 - wR; for (int wC = 0; wC < ${o}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; @@ -21257,17 +21323,17 @@ var Gh = class { `; } }; -function SQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = I.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Uh(l); - return t10.runWebGLProgram(m, [n, s], "float32"); +function HY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = S.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Rh(l); + return t6.runWebGLProgram(m, [n, s], "float32"); } -var SA = { kernelName: hp, backendName: "webgl", kernelFunc: SQ }; -function vQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = I.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Gh(l); - return t10.runWebGLProgram(m, [n, s], "float32"); +var ZA = { kernelName: dp, backendName: "webgl", kernelFunc: HY }; +function qY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = S.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Fh(l); + return t6.runWebGLProgram(m, [n, s], "float32"); } -var vA = { kernelName: gp, backendName: "webgl", kernelFunc: vQ }; -var Hh = class { +var JA = { kernelName: fp, backendName: "webgl", kernelFunc: qY }; +var Dh = class { constructor(e) { this.variableNames = ["X"], this.outputShape = [e, e], this.userCode = ` void main() { @@ -21278,15 +21344,15 @@ var Hh = class { `; } }; -function kQ(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e, n = [...o.shape, ...o.shape], s = x.sizeFromShape(o.shape), a = J({ inputs: { x: o }, backend: t10, attrs: { shape: [s] } }), i = new Hh(s), p = t10.runWebGLProgram(i, [a], a.dtype), u = J({ inputs: { x: p }, backend: t10, attrs: { shape: n } }); - return t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(p), u; +function KY(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = te({ inputs: { x: o }, backend: t6, attrs: { shape: [s] } }), i = new Dh(s), p = t6.runWebGLProgram(i, [a], a.dtype), u = te({ inputs: { x: p }, backend: t6, attrs: { shape: n } }); + return t6.disposeIntermediateTensorInfo(a), t6.disposeIntermediateTensorInfo(p), u; } -var kA = { kernelName: xp, backendName: "webgl", kernelFunc: kQ }; -var qh = class { +var eR = { kernelName: hp, backendName: "webgl", kernelFunc: KY }; +var Oh = class { constructor(e) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let { inHeight: t10, inWidth: o, padInfo: n, strideHeight: s, strideWidth: a, filterHeight: i, filterWidth: p, dilationHeight: u, dilationWidth: c } = e, { top: l, left: m } = n; + let { inHeight: t6, inWidth: o, padInfo: n, strideHeight: s, strideWidth: a, filterHeight: i, filterWidth: p, dilationHeight: u, dilationWidth: c } = e, { top: l, left: m } = n; this.userCode = ` const ivec2 strides = ivec2(${s}, ${a}); const ivec2 pads = ivec2(${l}, ${m}); @@ -21305,7 +21371,7 @@ var qh = class { for (int h = 0; h < ${i}; h++) { int hIn = hBeg + h * ${u}; - if (hIn >= 0 && hIn < ${t10}) { + if (hIn >= 0 && hIn < ${t6}) { for (int w = 0; w < ${p}; w++) { int wIn = wBeg + w * ${c}; @@ -21328,35 +21394,35 @@ var qh = class { `; } }; -function TQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = I.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c, l = new qh(u); - c = t10.runWebGLProgram(l, [n, s], "float32"); - let m = J({ inputs: { x: c }, backend: t10, attrs: { shape: u.outShape } }); - return t10.disposeIntermediateTensorInfo(c), m; +function jY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = S.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c, l = new Oh(u); + c = t6.runWebGLProgram(l, [n, s], "float32"); + let m = te({ inputs: { x: c }, backend: t6, attrs: { shape: u.outShape } }); + return t6.disposeIntermediateTensorInfo(c), m; } -var TA = { kernelName: yp, backendName: "webgl", kernelFunc: TQ }; -function NQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = I.decodeEinsumEquation(n, s.length); - I.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: c } = I.getEinsumComputePath(i, p), l = c.length, m = null, f = a.length, d = []; +var tR = { kernelName: gp, backendName: "webgl", kernelFunc: jY }; +function XY(r) { + let { inputs: e, backend: t6, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = S.decodeEinsumEquation(n, s.length); + S.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = S.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; for (let h = 0; h < l; ++h) { for (let g of c[h]) { - let { permutationIndices: y, expandDims: b } = I.getEinsumPermutation(f, p[g]), C; - I.isIdentityPermutation(y) ? C = s[g] : (C = xt({ inputs: { x: s[g] }, backend: t10, attrs: { perm: y } }), d.push(C)); + let { permutationIndices: x, expandDims: b } = S.getEinsumPermutation(d, p[g]), C; + S.isIdentityPermutation(x) ? C = s[g] : (C = xt({ inputs: { x: s[g] }, backend: t6, attrs: { perm: x } }), f.push(C)); let w = C.shape.slice(); for (let k = 0; k < b.length; ++k) w.splice(b[k], 0, 1); - x.arraysEqual(C.shape, w) || (C = J({ inputs: { x: C }, backend: t10, attrs: { shape: w } }), d.push(C)), m === null ? m = C : (m = Pl({ inputs: { a: C, b: m }, backend: t10 }), d.push(m)); + y.arraysEqual(C.shape, w) || (C = te({ inputs: { x: C }, backend: t6, attrs: { shape: w } }), f.push(C)), m === null ? m = C : (m = Tl({ inputs: { a: C, b: m }, backend: t6 }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = Ou({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - f), keepDims: false } }), d.push(m)), f--); + h < l - 1 && (u[h] >= 0 && (m = Ou({ inputs: { x: m }, backend: t6, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of d) - h !== m && t10.disposeIntermediateTensorInfo(h); + for (let h of f) + h !== m && t6.disposeIntermediateTensorInfo(h); return m; } -var NA = { kernelName: Xa, backendName: "webgl", kernelFunc: NQ }; -var _Q = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; -var EQ = ` +var rR = { kernelName: ri, backendName: "webgl", kernelFunc: XY }; +var YY = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; +var QY = ` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -21366,46 +21432,46 @@ var EQ = ` return result; `; -var $Q = he({ opSnippet: _Q, packedOpSnippet: EQ }); -var _A = { kernelName: In, backendName: "webgl", kernelFunc: $Q }; -var RQ = "return (b >= 1.0) ? a : a * (b + 1.0);"; -var AQ = ` +var ZY = ge({ opSnippet: YY, packedOpSnippet: QY }); +var oR = { kernelName: en, backendName: "webgl", kernelFunc: ZY }; +var JY = "return (b >= 1.0) ? a : a * (b + 1.0);"; +var eQ = ` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `; -var FQ = (r) => { - let { inputs: e, backend: t10 } = r, { dy: o, y: n } = e, s = P().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new Ko(AQ, o.shape, n.shape) : new _o(RQ, o.shape, n.shape); - return t10.runWebGLProgram(s, [o, n], o.dtype); +var tQ = (r) => { + let { inputs: e, backend: t6 } = r, { dy: o, y: n } = e, s = O().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new To(eQ, o.shape, n.shape) : new io(JY, o.shape, n.shape); + return t6.runWebGLProgram(s, [o, n], o.dtype); }; -var EA = { kernelName: Pm, backendName: "webgl", kernelFunc: FQ }; -var DQ = ` +var nR = { kernelName: km, backendName: "webgl", kernelFunc: tQ }; +var rQ = ` return vec4(equal(a, b)); `; -var PQ = "return float(a == b);"; -var OQ = ot({ opSnippet: PQ, packedOpSnippet: DQ, dtype: "bool", cpuKernelImpl: c$ }); -var $A = { kernelName: oo, backendName: "webgl", kernelFunc: OQ }; -var MQ = ` +var oQ = "return float(a == b);"; +var nQ = tt({ opSnippet: oQ, packedOpSnippet: rQ, dtype: "bool", cpuKernelImpl: BE }); +var sR = { kernelName: tn, backendName: "webgl", kernelFunc: nQ }; +var sQ = ` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - float p = ${I.ERF_P}; - float a1 = ${I.ERF_A1}; - float a2 = ${I.ERF_A2}; - float a3 = ${I.ERF_A3}; - float a4 = ${I.ERF_A4}; - float a5 = ${I.ERF_A5}; + float p = ${S.ERF_P}; + float a1 = ${S.ERF_A1}; + float a2 = ${S.ERF_A2}; + float a3 = ${S.ERF_A3}; + float a4 = ${S.ERF_A4}; + float a5 = ${S.ERF_A5}; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `; -var LQ = he({ opSnippet: MQ }); -var RA = { kernelName: Gi, backendName: "webgl", kernelFunc: LQ }; -var BQ = jo + ` +var aQ = ge({ opSnippet: sQ }); +var aR = { kernelName: ma, backendName: "webgl", kernelFunc: aQ }; +var iQ = _o + ` return exp(x); `; -var VQ = ` +var uQ = ` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -21415,21 +21481,21 @@ var VQ = ` return result; `; -var Ow = he({ opSnippet: BQ, packedOpSnippet: VQ, cpuKernelImpl: l$, dtype: "float32" }); -var AA = { kernelName: no, backendName: "webgl", kernelFunc: Ow }; -function Kh(r) { - let { inputs: e, attrs: t10, backend: o } = r, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; - return n < 0 && (x.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), J({ inputs: { x: s }, backend: o, attrs: { shape: i } }); +var Aw = ge({ opSnippet: iQ, packedOpSnippet: uQ, cpuKernelImpl: VE, dtype: "float32" }); +var iR = { kernelName: rn, backendName: "webgl", kernelFunc: Aw }; +function Ph(r) { + let { inputs: e, attrs: t6, backend: o } = r, { dim: n } = t6, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; + return n < 0 && (y.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), te({ inputs: { x: s }, backend: o, attrs: { shape: i } }); } -var FA = { kernelName: xs, backendName: "webgl", kernelFunc: Kh }; -var DA = "return exp(x) - 1.0;"; -var zQ = he({ opSnippet: DA, packedOpSnippet: DA, cpuKernelImpl: m$ }); -var PA = { kernelName: wn, backendName: "webgl", kernelFunc: zQ }; -var Ll = class { - constructor(e, t10, o) { +var uR = { kernelName: bs, backendName: "webgl", kernelFunc: Ph }; +var pR = "return exp(x) - 1.0;"; +var pQ = ge({ opSnippet: pR, packedOpSnippet: pR, cpuKernelImpl: zE }); +var cR = { kernelName: da, backendName: "webgl", kernelFunc: pQ }; +var $l = class { + constructor(e, t6, o) { this.variableNames = ["real", "imag"]; - let n = t10[1]; - this.outputShape = t10; + let n = t6[1]; + this.outputShape = t6; let s = o ? `2.0 * ${Math.PI}` : `-2.0 * ${Math.PI}`, a = o ? `${n}.0` : "1.0", i; if (e === "real") i = "return real * expR - imag * expI;"; @@ -21473,19 +21539,19 @@ var Ll = class { `; } }; -function jh(r, e, t10) { - let o = t10.texData.get(r.dataId), n = x.sizeFromShape(r.shape), s = r.shape[r.shape.length - 1], a = n / s, i = J({ inputs: { x: r }, backend: t10, attrs: { shape: [a, s] } }), p = i.shape, u = new Ll("real", p, e), c = new Ll("imag", p, e), l = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: p }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: p }], m = t10.runWebGLProgram(u, l, "float32"), f = t10.runWebGLProgram(c, l, "float32"), d = Ar({ inputs: { real: m, imag: f }, backend: t10 }); - t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f); - let h = J({ inputs: { x: d }, backend: t10, attrs: { shape: r.shape } }); - return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(d), h; +function Mh(r, e, t6) { + let o = t6.texData.get(r.dataId), n = y.sizeFromShape(r.shape), s = r.shape[r.shape.length - 1], a = n / s, i = te({ inputs: { x: r }, backend: t6, attrs: { shape: [a, s] } }), p = i.shape, u = new $l("real", p, e), c = new $l("imag", p, e), l = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: p }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: p }], m = t6.runWebGLProgram(u, l, "float32"), d = t6.runWebGLProgram(c, l, "float32"), f = Rr({ inputs: { real: m, imag: d }, backend: t6 }); + t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d); + let h = te({ inputs: { x: f }, backend: t6, attrs: { shape: r.shape } }); + return t6.disposeIntermediateTensorInfo(i), t6.disposeIntermediateTensorInfo(f), h; } -function WQ(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e; - return jh(o, false, t10); +function cQ(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e; + return Mh(o, false, t6); } -var OA = { kernelName: bp, backendName: "webgl", kernelFunc: WQ }; -var Xh = class { - constructor(e, t10) { +var lR = { kernelName: oi, backendName: "webgl", kernelFunc: cQ }; +var Lh = class { + constructor(e, t6) { this.outputShape = [], this.customUniforms = [{ name: "value", type: "float" }], this.variableNames = ["x"], this.outputShape = e, this.userCode = ` void main() { // Input can be obtained from uniform value. @@ -21494,29 +21560,29 @@ var Xh = class { `; } }; -function Ba(r) { - let { backend: e, attrs: t10 } = r, { shape: o, value: n } = t10, { dtype: s } = t10; - if (s = s || x.inferDtype(n), s === "string") { - let a = x.getArrayFromDType(s, x.sizeFromShape(o)); +function Ga(r) { + let { backend: e, attrs: t6 } = r, { shape: o, value: n } = t6, { dtype: s } = t6; + if (s = s || y.inferDtype(n), s === "string") { + let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), e.makeTensorInfo(o, s, a); } else { - let a = new Xh(o, n), i = [[n]]; + let a = new Lh(o, n), i = [[n]]; return e.runWebGLProgram(a, [], s, i); } } -var MA = { kernelName: ys, backendName: "webgl", kernelFunc: Ba }; -var Yh = class { +var mR = { kernelName: Cs, backendName: "webgl", kernelFunc: Ga }; +var Bh = class { constructor(e) { this.variableNames = ["Image"], this.outputShape = []; - let t10 = e[2]; + let t6 = e[2]; this.outputShape = e, this.userCode = ` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; - int coordX = ${t10} - x - 1; + int coordX = ${t6} - x - 1; float outputValue; - if(coordX >= 0 && coordX < ${t10}) { + if(coordX >= 0 && coordX < ${t6}) { outputValue = getImage(coords[0], coords[1], coordX, coords[3]); } else { outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); @@ -21526,14 +21592,14 @@ var Yh = class { `; } }; -var LA = { kernelName: Sn, backendName: "webgl", kernelFunc: ({ inputs: r, backend: e }) => { - let { image: t10 } = r, o = e, n = new Yh(t10.shape); - return o.runWebGLProgram(n, [t10], t10.dtype); +var dR = { kernelName: on, backendName: "webgl", kernelFunc: ({ inputs: r, backend: e }) => { + let { image: t6 } = r, o = e, n = new Bh(t6.shape); + return o.runWebGLProgram(n, [t6], t6.dtype); } }; -var BA = "return floor(x);"; -var UQ = he({ opSnippet: BA, packedOpSnippet: BA, cpuKernelImpl: f$ }); -var VA = { kernelName: so, backendName: "webgl", kernelFunc: UQ }; -var GQ = ` +var fR = "return floor(x);"; +var lQ = ge({ opSnippet: fR, packedOpSnippet: fR, cpuKernelImpl: WE }); +var hR = { kernelName: nn, backendName: "webgl", kernelFunc: lQ }; +var mQ = ` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -21544,7 +21610,7 @@ var GQ = ` return NAN; } `; -var HQ = ` +var dQ = ` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -21566,12 +21632,12 @@ var HQ = ` } return vec4(result); `; -var qQ = ot({ opSnippet: GQ, packedOpSnippet: HQ, dtype: "int32" }); -var zA = { kernelName: vn, backendName: "webgl", kernelFunc: qQ }; -var Qh = class { +var fQ = tt({ opSnippet: mQ, packedOpSnippet: dQ, dtype: "int32" }); +var gR = { kernelName: sn, backendName: "webgl", kernelFunc: fQ }; +var Vh = class { constructor(e) { this.variableNames = ["A"]; - let t10 = Ct(), [o, n] = e; + let t6 = St(), [o, n] = e; this.outputShape = e, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -21580,7 +21646,7 @@ var Qh = class { int depth = coords[2]; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0); - vec4 values = ${t10.texture2D}(A, uv); + vec4 values = ${t6.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; @@ -21597,10 +21663,10 @@ var Qh = class { `; } }; -var Zh = class { +var zh = class { constructor(e) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true; - let t10 = Ct(), [o, n] = e; + let t6 = St(), [o, n] = e; this.outputShape = e, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -21617,7 +21683,7 @@ var Zh = class { vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0); - vec4 values = ${t10.texture2D}(A, uv); + vec4 values = ${t6.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; @@ -21633,72 +21699,72 @@ var Zh = class { } } - ${t10.output} = result; + ${t6.output} = result; } `; } }; -var WA = { kernelName: Zi, backendName: "webgl", kernelFunc: KQ }; -var Sc; -var Mw = P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -function KQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { pixels: n } = e, { numChannels: s } = o, a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, [p, u] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], c = [u, p], l = [u, p, s]; +var xR = { kernelName: Zi, backendName: "webgl", kernelFunc: hQ }; +var bc; +var Rw = O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +function hQ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { pixels: n } = e, { numChannels: s } = o, a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, [p, u] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], c = [u, p], l = [u, p, s]; if (i || a) { - let h = P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); - (Sc == null || h !== Mw) && (Mw = h, Sc = document.createElement("canvas").getContext("2d", { willReadFrequently: Mw })), Sc.canvas.width = p, Sc.canvas.height = u, Sc.drawImage(n, 0, 0, p, u), n = Sc.canvas; + let h = O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); + (bc == null || h !== Rw) && (Rw = h, bc = document.createElement("canvas").getContext("2d", { willReadFrequently: Rw })), bc.canvas.width = p, bc.canvas.height = u, bc.drawImage(n, 0, 0, p, u), n = bc.canvas; } - let m = t10.makeTensorInfo(c, "int32"); - t10.texData.get(m.dataId).usage = ir.PIXELS, t10.gpgpu.uploadPixelDataToTexture(t10.getTexture(m.dataId), n); - let f = P().getBool("WEBGL_PACK") ? new Zh(l) : new Qh(l), d = t10.runWebGLProgram(f, [m], "int32"); - return t10.disposeData(m.dataId), d; + let m = t6.makeTensorInfo(c, "int32"); + t6.texData.get(m.dataId).usage = ir.PIXELS, t6.gpgpu.uploadPixelDataToTexture(t6.getTexture(m.dataId), n); + let d = O().getBool("WEBGL_PACK") ? new zh(l) : new Vh(l), f = t6.runWebGLProgram(d, [m], "int32"); + return t6.disposeData(m.dataId), f; } -function jQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = o, h = I.convertConv2DDataFormat(c), g = I.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h), y, b = [], C = a != null, w = i != null, k = f === "leakyrelu", _ = () => { - let R = [n, s], A = (D, O) => { - if (O === "NCHW" && D.shape.length === 1 && D.shape[0] !== 1) { - let M = J({ inputs: { x: D }, backend: t10, attrs: { shape: [D.shape[0], 1, 1] } }); +function gQ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = S.convertConv2DDataFormat(c), g = S.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h), x, b = [], C = a != null, w = i != null, k = d === "leakyrelu", _ = () => { + let A = [n, s], R = (D, P) => { + if (P === "NCHW" && D.shape.length === 1 && D.shape[0] !== 1) { + let M = te({ inputs: { x: D }, backend: t6, attrs: { shape: [D.shape[0], 1, 1] } }); return b.push(M), M; } return D; }; - if (C && R.push(A(a, c)), w && R.push(A(i, c)), k) { - let D = t10.makeTensorInfo([], "float32", x.createScalarValue(d, "float32")); - R.push(D), b.push(D); + if (C && A.push(R(a, c)), w && A.push(R(i, c)), k) { + let D = t6.makeTensorInfo([], "float32", y.createScalarValue(f, "float32")); + A.push(D), b.push(D); } - return R; + return A; }; if (g.filterHeight === 1 && g.filterWidth === 1 && g.dilationHeight === 1 && g.dilationWidth === 1 && g.strideHeight === 1 && g.strideWidth === 1 && (g.padInfo.type === "SAME" || g.padInfo.type === "VALID")) - y = Dh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: f, preluActivationWeights: i, leakyreluAlpha: d }); - else if (g.strideWidth <= 2 && h === "channelsLast" && P().getBool("WEBGL_EXP_CONV")) { - let R = f ? Ma(f, true) : null, A = new Cc(g, C, R, w, k), D = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], O = _(); - y = t10.runWebGLProgram(A, O, "float32", D); - } else if (P().getBool("WEBGL_CONV_IM2COL")) - y = Ph({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: f, preluActivationWeights: i, leakyreluAlpha: d }); + x = Ih({ x: n, filter: s, convInfo: g, backend: t6, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + else if (g.strideWidth <= 2 && h === "channelsLast" && O().getBool("WEBGL_EXP_CONV")) { + let A = d ? Wa(d, true) : null, R = new gc(g, C, A, w, k), D = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], P = _(); + x = t6.runWebGLProgram(R, P, "float32", D); + } else if (O().getBool("WEBGL_CONV_IM2COL")) + x = vh({ x: n, filter: s, convInfo: g, backend: t6, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else { - let R = f ? Ma(f, false) : null, A = new bc(g, C, R, w, k), D = _(); - y = t10.runWebGLProgram(A, D, "float32"); + let A = d ? Wa(d, false) : null, R = new hc(g, C, A, w, k), D = _(); + x = t6.runWebGLProgram(R, D, "float32"); } - let E = J({ inputs: { x: y }, backend: t10, attrs: { shape: g.outShape } }); - return b.push(y), b.forEach((R) => t10.disposeIntermediateTensorInfo(R)), E; + let $ = te({ inputs: { x }, backend: t6, attrs: { shape: g.outShape } }); + return b.push(x), b.forEach((A) => t6.disposeIntermediateTensorInfo(A)), $; } -var UA = { kernelName: Do, backendName: "webgl", kernelFunc: jQ }; -function XQ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: f } = o, d = [], h = c; - h == null && (h = [1, 1]), x.assert(I.eitherStridesOrDilationsAreOne(p, h), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`); - let g = I.computeConv2DInfo(n.shape, s.shape, p, h, u, l, true), y = P().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? Ma(m, y) : null, C = [n, s], w = a != null, k = i != null, _ = m === "leakyrelu"; +var yR = { kernelName: ho, backendName: "webgl", kernelFunc: gQ }; +function xQ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = [], h = c; + h == null && (h = [1, 1]), y.assert(S.eitherStridesOrDilationsAreOne(p, h), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`); + let g = S.computeConv2DInfo(n.shape, s.shape, p, h, u, l, true), x = O().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? Wa(m, x) : null, C = [n, s], w = a != null, k = i != null, _ = m === "leakyrelu"; if (w && C.push(a), k && C.push(i), _) { - let D = t10.makeTensorInfo([], "float32", x.createScalarValue(f, "float32")); - C.push(D), d.push(D); + let D = t6.makeTensorInfo([], "float32", y.createScalarValue(d, "float32")); + C.push(D), f.push(D); } - let E; - y ? E = new wc(g, w, b, k, _) : E = new Ic(g, w, b, k, _); - let R = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], A = t10.runWebGLProgram(E, C, "float32", R); - return d.forEach((D) => t10.disposeIntermediateTensorInfo(D)), A; + let $; + x ? $ = new yc(g, w, b, k, _) : $ = new xc(g, w, b, k, _); + let A = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], R = t6.runWebGLProgram($, C, "float32", A); + return f.forEach((D) => t6.disposeIntermediateTensorInfo(D)), R; } -var GA = { kernelName: Po, backendName: "webgl", kernelFunc: XQ }; -var Jh = class { - constructor(e, t10, o, n) { - this.sliceDim = e, this.strides = t10, this.paramsShape = n, this.variableNames = ["x", "indices"], this.outputShape = o; +var bR = { kernelName: go, backendName: "webgl", kernelFunc: xQ }; +var Wh = class { + constructor(e, t6, o, n) { + this.sliceDim = e, this.strides = t6, this.paramsShape = n, this.variableNames = ["x", "indices"], this.outputShape = o; let s = _e(o.length), a = ` int index;`; for (let i = 0; i < this.sliceDim; i++) @@ -21720,20 +21786,20 @@ var Jh = class { `; } }; -function YQ(r) { - let { inputs: e, backend: t10 } = r, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = x.sizeFromShape(o.shape), [p, u, c, l] = I.prepareAndValidate(o, n), m = J({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), f = J({ inputs: { x: o }, backend: t10, attrs: { shape: [x.sizeFromShape(o.shape) / c, c] } }); - if (t10.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let y = t10.readSync(n.dataId), b = t10.bufferSync(o), C = d$(y, b, o.dtype, u, a, c, l, o.shape, i); - return t10.makeTensorInfo(p, o.dtype, C.values); +function yQ(r) { + let { inputs: e, backend: t6 } = r, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, c, l] = S.prepareAndValidate(o, n), m = te({ inputs: { x: n }, backend: t6, attrs: { shape: [u, a] } }), d = te({ inputs: { x: o }, backend: t6, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); + if (t6.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { + let x = t6.readSync(n.dataId), b = t6.bufferSync(o), C = UE(x, b, o.dtype, u, a, c, l, o.shape, i); + return t6.makeTensorInfo(p, o.dtype, C.values); } - let d = new Jh(a, l, [u, c], o.shape), h = t10.runWebGLProgram(d, [f, m], f.dtype), g = J({ inputs: { x: h }, backend: t10, attrs: { shape: p } }); - return t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), g; + let f = new Wh(a, l, [u, c], o.shape), h = t6.runWebGLProgram(f, [d, m], d.dtype), g = te({ inputs: { x: h }, backend: t6, attrs: { shape: p } }); + return t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(h), g; } -var HA = { kernelName: Tn, backendName: "webgl", kernelFunc: YQ }; -var eg = class { - constructor(e, t10) { - this.variableNames = ["A", "indices"], this.outputShape = t10, this.rank = t10.length; - let o = _e(this.rank), n = QQ(e, 2); +var CR = { kernelName: un, backendName: "webgl", kernelFunc: yQ }; +var Uh = class { + constructor(e, t6) { + this.variableNames = ["A", "indices"], this.outputShape = t6, this.rank = t6.length; + let o = _e(this.rank), n = bQ(e, 2); this.userCode = ` void main() { ${o} resRC = getOutputCoords(); @@ -21744,81 +21810,81 @@ var eg = class { `; } }; -function QQ(r, e) { - let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; +function bQ(r, e) { + let t6 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; for (let n = 0; n < r.length; n++) - n === 2 ? o.push("index") : o.push(`${t10[n]}`); + n === 2 ? o.push("index") : o.push(`${t6[n]}`); return o.join(); } -function Lw(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = x.parseAxisParam(a, n.shape)[0]; - if (P().get("DEBUG")) { - let b = t10.readSync(s.dataId), C = n.shape[p]; +function Fw(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0]; + if (O().get("DEBUG")) { + let b = t6.readSync(s.dataId), C = n.shape[p]; for (let w = 0; w < b.length; ++w) { let k = b[w]; - x.assert(k <= C - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${C - 1}]`); + y.assert(k <= C - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${C - 1}]`); } } - let u = I.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = x.sizeFromShape(s.shape), l = [], m = J({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), f = J({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, c / u.batchSize] } }); - l.push(m), l.push(f); - let d = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; - if (t10.shouldExecuteOnCPU([n, s]) || n.dtype === "string") { - let b = t10.bufferSync(f), C = t10.bufferSync(m), w = h$(C, b, d); - return l.forEach((k) => t10.disposeIntermediateTensorInfo(k)), t10.makeTensorInfo(u.outputShape, w.dtype, w.values); + let u = S.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = te({ inputs: { x: n }, backend: t6, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = te({ inputs: { x: s }, backend: t6, attrs: { shape: [u.batchSize, c / u.batchSize] } }); + l.push(m), l.push(d); + let f = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; + if (t6.shouldExecuteOnCPU([n, s]) || n.dtype === "string") { + let b = t6.bufferSync(d), C = t6.bufferSync(m), w = GE(C, b, f); + return l.forEach((k) => t6.disposeIntermediateTensorInfo(k)), t6.makeTensorInfo(u.outputShape, w.dtype, w.values); } - let h = new eg(m.shape, d), g = t10.runWebGLProgram(h, [m, f], m.dtype); + let h = new Uh(m.shape, f), g = t6.runWebGLProgram(h, [m, d], m.dtype); l.push(g); - let y = J({ inputs: { x: g }, backend: t10, attrs: { shape: u.outputShape } }); - return l.forEach((b) => t10.disposeIntermediateTensorInfo(b)), y; + let x = te({ inputs: { x: g }, backend: t6, attrs: { shape: u.outputShape } }); + return l.forEach((b) => t6.disposeIntermediateTensorInfo(b)), x; } -var qA = { kernelName: bs, backendName: "webgl", kernelFunc: Lw }; -var ZQ = "return float(a > b);"; -var JQ = ` +var SR = { kernelName: Ss, backendName: "webgl", kernelFunc: Fw }; +var CQ = "return float(a > b);"; +var SQ = ` return vec4(greaterThan(a, b)); `; -var e7 = ot({ opSnippet: ZQ, packedOpSnippet: JQ, cpuKernelImpl: g$, dtype: "bool" }); -var KA = { kernelName: ao, backendName: "webgl", kernelFunc: e7 }; -var t7 = "return float(a >= b);"; -var r7 = ` +var wQ = tt({ opSnippet: CQ, packedOpSnippet: SQ, cpuKernelImpl: HE, dtype: "bool" }); +var wR = { kernelName: pn, backendName: "webgl", kernelFunc: wQ }; +var IQ = "return float(a >= b);"; +var vQ = ` return vec4(greaterThanEqual(a, b)); `; -var o7 = ot({ opSnippet: t7, packedOpSnippet: r7, dtype: "bool", cpuKernelImpl: x$ }); -var jA = { kernelName: io, backendName: "webgl", kernelFunc: o7 }; -function n7(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e; - return jh(o, true, t10); +var kQ = tt({ opSnippet: IQ, packedOpSnippet: vQ, dtype: "bool", cpuKernelImpl: qE }); +var IR = { kernelName: cn, backendName: "webgl", kernelFunc: kQ }; +function NQ(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e; + return Mh(o, true, t6); } -var XA = { kernelName: Cp, backendName: "webgl", kernelFunc: n7 }; -var s7 = "return float(!isnan(x) && !isinf(x));"; -var a7 = he({ opSnippet: s7, dtype: "bool" }); -var YA = { kernelName: Hi, backendName: "webgl", kernelFunc: a7 }; -var i7 = "return float(isinf(x));"; -var u7 = he({ opSnippet: i7, dtype: "bool" }); -var QA = { kernelName: qi, backendName: "webgl", kernelFunc: u7 }; -var p7 = "return float(isnan(x));"; -var c7 = he({ opSnippet: p7, dtype: "bool" }); -var ZA = { kernelName: ia, backendName: "webgl", kernelFunc: c7 }; -var l7 = "return float(a < b);"; -var m7 = ` +var vR = { kernelName: ni, backendName: "webgl", kernelFunc: NQ }; +var TQ = "return float(!isnan(x) && !isinf(x));"; +var _Q = ge({ opSnippet: TQ, dtype: "bool" }); +var kR = { kernelName: fa, backendName: "webgl", kernelFunc: _Q }; +var EQ = "return float(isinf(x));"; +var $Q = ge({ opSnippet: EQ, dtype: "bool" }); +var NR = { kernelName: ha, backendName: "webgl", kernelFunc: $Q }; +var AQ = "return float(isnan(x));"; +var RQ = ge({ opSnippet: AQ, dtype: "bool" }); +var TR = { kernelName: ln, backendName: "webgl", kernelFunc: RQ }; +var FQ = "return float(a < b);"; +var DQ = ` return vec4(lessThan(a, b)); `; -var f7 = ot({ opSnippet: l7, packedOpSnippet: m7, cpuKernelImpl: y$, dtype: "bool" }); -var JA = { kernelName: po, backendName: "webgl", kernelFunc: f7 }; -var d7 = "return float(a <= b);"; -var h7 = ` +var OQ = tt({ opSnippet: FQ, packedOpSnippet: DQ, cpuKernelImpl: KE, dtype: "bool" }); +var _R = { kernelName: dn, backendName: "webgl", kernelFunc: OQ }; +var PQ = "return float(a <= b);"; +var MQ = ` return vec4(lessThanEqual(a, b)); `; -var g7 = ot({ opSnippet: d7, packedOpSnippet: h7, cpuKernelImpl: b$, dtype: "bool" }); -var eF = { kernelName: co, backendName: "webgl", kernelFunc: g7 }; -function x7(r) { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, num: s } = t10, a = C$(o, n, s); +var LQ = tt({ opSnippet: PQ, packedOpSnippet: MQ, cpuKernelImpl: jE, dtype: "bool" }); +var ER = { kernelName: fn, backendName: "webgl", kernelFunc: LQ }; +function BQ(r) { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, num: s } = t6, a = XE(o, n, s); return e.makeTensorInfo([a.length], "float32", a); } -var tF = { kernelName: Ip, backendName: "webgl", kernelFunc: x7 }; -var y7 = jo + ` +var $R = { kernelName: xp, backendName: "webgl", kernelFunc: BQ }; +var VQ = _o + ` return x < 0.0 ? 0./0. : log(x); `; -var b7 = ` +var zQ = ` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -21827,37 +21893,37 @@ var b7 = ` result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; `; -var C7 = he({ opSnippet: y7, packedOpSnippet: b7, cpuKernelImpl: I$ }); -var rF = { kernelName: lo, backendName: "webgl", kernelFunc: C7 }; -var I7 = jo + ` +var WQ = ge({ opSnippet: VQ, packedOpSnippet: zQ, cpuKernelImpl: YE }); +var AR = { kernelName: hn, backendName: "webgl", kernelFunc: WQ }; +var UQ = _o + ` return log(1.0 + x); `; -var w7 = he({ opSnippet: I7 }); -var oF = { kernelName: Ki, backendName: "webgl", kernelFunc: w7 }; -var S7 = "return float(a >= 1.0 && b >= 1.0);"; -var v7 = ` +var GQ = ge({ opSnippet: UQ }); +var RR = { kernelName: ga, backendName: "webgl", kernelFunc: GQ }; +var HQ = "return float(a >= 1.0 && b >= 1.0);"; +var qQ = ` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `; -var k7 = ot({ opSnippet: S7, packedOpSnippet: v7, dtype: "bool" }); -var nF = { kernelName: _n, backendName: "webgl", kernelFunc: k7 }; -var T7 = "return float(!(x >= 1.0));"; -var N7 = he({ opSnippet: T7 }); -var sF = { kernelName: En, backendName: "webgl", kernelFunc: N7 }; -var _7 = "return float(a >= 1.0 || b >= 1.0);"; -var E7 = ` +var KQ = tt({ opSnippet: HQ, packedOpSnippet: qQ, dtype: "bool" }); +var FR = { kernelName: gn, backendName: "webgl", kernelFunc: KQ }; +var jQ = "return float(!(x >= 1.0));"; +var XQ = ge({ opSnippet: jQ }); +var DR = { kernelName: xn, backendName: "webgl", kernelFunc: XQ }; +var YQ = "return float(a >= 1.0 || b >= 1.0);"; +var QQ = ` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `; -var $7 = ot({ opSnippet: _7, packedOpSnippet: E7, dtype: "bool" }); -var aF = { kernelName: ua, backendName: "webgl", kernelFunc: $7 }; -var tg = class { - constructor(e, t10, o, n, s) { +var ZQ = tt({ opSnippet: YQ, packedOpSnippet: QQ, dtype: "bool" }); +var OR = { kernelName: xa, backendName: "webgl", kernelFunc: ZQ }; +var Gh = class { + constructor(e, t6, o, n, s) { this.variableNames = ["x"], this.outputShape = []; - let a = t10, i = e[3] - 1; + let a = t6, i = e[3] - 1; this.outputShape = e; let p, u = `float(${o}) + float(${n}) * sum`; s === 0.5 ? p = `inversesqrt(${u})` : s === 1 ? p = `1.0/(${u})` : p = `exp(log(${u}) * float(-${s}));`, this.userCode = ` @@ -21882,10 +21948,10 @@ var tg = class { `; } }; -var rg = class { - constructor(e, t10, o, n, s) { +var Hh = class { + constructor(e, t6, o, n, s) { this.variableNames = ["x"], this.outputShape = [], this.packedInputs = true, this.packedOutput = true; - let a = t10, i = e[3] - 1; + let a = t6, i = e[3] - 1; this.outputShape = e; let p, u = `float(${o}) + float(${n}) * sum`; s === 0.5 ? p = `inversesqrt(${u})` : s === 1 ? p = `1.0/(${u})` : p = `exp(log(${u}) * float(-${s}));`, this.userCode = ` @@ -21953,14 +22019,14 @@ var rg = class { `; } }; -var R7 = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u = P().getBool("WEBGL_PACK_NORMALIZATION") ? new rg(n.shape, s, a, i, p) : new tg(n.shape, s, a, i, p); - return t10.runWebGLProgram(u, [n], n.dtype); +var JQ = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u = O().getBool("WEBGL_PACK_NORMALIZATION") ? new Hh(n.shape, s, a, i, p) : new Gh(n.shape, s, a, i, p); + return t6.runWebGLProgram(u, [n], n.dtype); }; -var iF = { kernelName: wp, backendName: "webgl", kernelFunc: R7 }; -var og = class { - constructor(e, t10, o, n, s) { - this.variableNames = ["inputImage", "outputImage", "dy"], this.outputShape = [], this.outputShape = e, this.depth = e[3], this.depthRadius = t10, this.bias = o, this.alpha = n, this.beta = s, this.userCode = ` +var PR = { kernelName: yp, backendName: "webgl", kernelFunc: JQ }; +var qh = class { + constructor(e, t6, o, n, s) { + this.variableNames = ["inputImage", "outputImage", "dy"], this.outputShape = [], this.outputShape = e, this.depth = e[3], this.depthRadius = t6, this.bias = o, this.alpha = n, this.beta = s, this.userCode = ` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -21969,9 +22035,9 @@ var og = class { float result = 0.0; for (int d = 0; d < ${this.depth}; ++d) { - int depthBegin = int(max(0.0, float(d - ${t10}))); + int depthBegin = int(max(0.0, float(d - ${t6}))); int depthEnd = int(min(float(${this.depth}), - float(d + ${t10} + 1))); + float(d + ${t6} + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = ${this.depth}; @@ -22018,78 +22084,78 @@ var og = class { `; } }; -var A7 = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new og(n.shape, i, p, u, c); - return t10.runWebGLProgram(l, [n, s, a], n.dtype); +var e7 = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new qh(n.shape, i, p, u, c); + return t6.runWebGLProgram(l, [n, s, a], n.dtype); }; -var uF = { kernelName: Om, backendName: "webgl", kernelFunc: A7 }; -function pF(r, e, t10, o) { - let n = x.sizeFromShape(e), a = x.sizeFromShape(r.shape) / n, i = J({ inputs: { x: r }, attrs: { shape: [a, n] }, backend: o }), p = qr(i, r.dtype, "max", o), u = J({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); +var MR = { kernelName: Nm, backendName: "webgl", kernelFunc: e7 }; +function LR(r, e, t6, o) { + let n = y.sizeFromShape(e), a = y.sizeFromShape(r.shape) / n, i = te({ inputs: { x: r }, attrs: { shape: [a, n] }, backend: o }), p = Gr(i, r.dtype, "max", o), u = te({ inputs: { x: p }, attrs: { shape: t6 }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -function Bw(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = n.shape.length, p = x.parseAxisParam(s, n.shape), u = p, c = I.getAxesPermutation(u, i), l = c != null, m = t10.shouldExecuteOnCPU([n]), f = n; +function Dw(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = S.getAxesPermutation(u, i), l = c != null, m = t6.shouldExecuteOnCPU([n]), d = n; if (l) { if (m) { - let C = t10.texData.get(f.dataId).values, w = new Array(i); - for (let E = 0; E < w.length; E++) - w[E] = n.shape[c[E]]; + let C = t6.texData.get(d.dataId).values, w = new Array(i); + for (let $ = 0; $ < w.length; $++) + w[$] = n.shape[c[$]]; let k = Du(C, n.shape, n.dtype, c, w); - f = t10.makeTensorInfo(w, n.dtype); - let _ = t10.texData.get(f.dataId); + d = t6.makeTensorInfo(w, n.dtype); + let _ = t6.texData.get(d.dataId); _.values = k; } else - f = _i(n, c, t10); - u = I.getInnerMostAxes(u.length, i); + d = Vi(n, c, t6); + u = S.getInnerMostAxes(u.length, i); } - I.assertAxesAreInnerMostDims("max", u, i); - let [d, h] = I.computeOutAndReduceShapes(f.shape, u), g = d; - a && (g = I.expandShapeToKeepDim(d, p)); - let y; + S.assertAxesAreInnerMostDims("max", u, i); + let [f, h] = S.computeOutAndReduceShapes(d.shape, u), g = f; + a && (g = S.expandShapeToKeepDim(f, p)); + let x; if (m) { - let C = t10.texData.get(f.dataId).values, w = w$(C, x.sizeFromShape(h), g, n.dtype); - y = t10.makeTensorInfo(g, n.dtype); - let k = t10.texData.get(y.dataId); + let C = t6.texData.get(d.dataId).values, w = QE(C, y.sizeFromShape(h), g, n.dtype); + x = t6.makeTensorInfo(g, n.dtype); + let k = t6.texData.get(x.dataId); k.values = w; } else - y = pF(f, h, g, t10); - return l && t10.disposeIntermediateTensorInfo(f), y; + x = LR(d, h, g, t6); + return l && t6.disposeIntermediateTensorInfo(d), x; } -var cF = { kernelName: $n, backendName: "webgl", kernelFunc: Bw }; -var F7 = gc + ` +var BR = { kernelName: yn, backendName: "webgl", kernelFunc: Dw }; +var t7 = mc + ` return max(a, b); `; -var D7 = ` +var r7 = ` vec4 result = vec4(max(a, b)); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + js + ` + ` + Zs + ` return result; `; -var P7 = ot({ opSnippet: F7, packedOpSnippet: D7, cpuKernelImpl: S$ }); -var lF = { kernelName: mo, backendName: "webgl", kernelFunc: P7 }; -function O7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e; - as(n, "maxPool"); +var o7 = tt({ opSnippet: t7, packedOpSnippet: r7, cpuKernelImpl: ZE }); +var VR = { kernelName: bn, backendName: "webgl", kernelFunc: o7 }; +function n7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e; + is(n, "maxPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - x.assert(I.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let c = I.computePool2DInfo(n.shape, s, a, u, i, p); - if (c.filterWidth === 1 && c.filterHeight === 1 && x.arraysEqual(c.inShape, c.outShape)) - return Rt({ inputs: { x: n }, backend: t10 }); - let l = new us(c, "max", false); - return t10.runWebGLProgram(l, [n], n.dtype); + y.assert(S.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = S.computePool2DInfo(n.shape, s, a, u, i, p); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + return At({ inputs: { x: n }, backend: t6 }); + let l = new ps(c, "max", false); + return t6.runWebGLProgram(l, [n], n.dtype); } -var mF = { kernelName: Rn, backendName: "webgl", kernelFunc: O7 }; -function M7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, c = [1, 1, 1], l = I.computePool3DInfo(n.shape, s, a, c, i, u, p), m = new Ei(l, "max", false); - return t10.runWebGLProgram(m, [n], n.dtype); +var zR = { kernelName: Cn, backendName: "webgl", kernelFunc: n7 }; +function s7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, c = [1, 1, 1], l = S.computePool3DInfo(n.shape, s, a, c, i, u, p), m = new zi(l, "max", false); + return t6.runWebGLProgram(m, [n], n.dtype); } -var fF = { kernelName: Sp, backendName: "webgl", kernelFunc: M7 }; -var ng = class { +var WR = { kernelName: bp, backendName: "webgl", kernelFunc: s7 }; +var Kh = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.outputShape = e.inShape; - let t10 = e.strideHeight, o = e.strideWidth, n = e.dilationHeight, s = e.effectiveFilterHeight, a = e.effectiveFilterWidth, i = s - 1 - e.padInfo.top, p = a - 1 - e.padInfo.left, u = s * a - 1; + let t6 = e.strideHeight, o = e.strideWidth, n = e.dilationHeight, s = e.effectiveFilterHeight, a = e.effectiveFilterWidth, i = s - 1 - e.padInfo.top, p = a - 1 - e.padInfo.left, u = s * a - 1; this.userCode = ` const ivec2 pads = ivec2(${i}, ${p}); @@ -22107,7 +22173,7 @@ var ng = class { float dotProd = 0.0; for (int wR = 0; wR < ${s}; wR += ${n}) { - float dyR = float(dyRCorner + wR) / ${t10}.0; + float dyR = float(dyRCorner + wR) / ${t6}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; @@ -22139,12 +22205,12 @@ var ng = class { `; } }; -var sg = class { +var jh = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.outputShape = e.inShape; - let t10 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.dilationDepth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterDepth, u = e.effectiveFilterHeight, c = e.effectiveFilterWidth, l = p - 1 - e.padInfo.front, m = u - 1 - e.padInfo.top, f = c - 1 - e.padInfo.left, d = p * u * c - 1; + let t6 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.dilationDepth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterDepth, u = e.effectiveFilterHeight, c = e.effectiveFilterWidth, l = p - 1 - e.padInfo.front, m = u - 1 - e.padInfo.top, d = c - 1 - e.padInfo.left, f = p * u * c - 1; this.userCode = ` - const ivec3 pads = ivec3(${l}, ${m}, ${f}); + const ivec3 pads = ivec3(${l}, ${m}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -22163,7 +22229,7 @@ var sg = class { for (int wD = 0; wD < ${p}; wD += ${s}) { - float dyD = float(dyDCorner + wD) / ${t10}.0; + float dyD = float(dyDCorner + wD) / ${t6}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; @@ -22191,7 +22257,7 @@ var sg = class { int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); - int maxPosValue = ${d} - + int maxPosValue = ${f} - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the @@ -22210,88 +22276,88 @@ var sg = class { `; } }; -function L7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = I.computePool3DInfo(a.shape, i, p, l, u, c), f = new Ei(m, "max", true), d = t10.runWebGLProgram(f, [a], a.dtype), h = new sg(m), g = t10.runWebGLProgram(h, [n, d], a.dtype); - return t10.disposeIntermediateTensorInfo(d), g; +function a7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = S.computePool3DInfo(a.shape, i, p, l, u, c), d = new zi(m, "max", true), f = t6.runWebGLProgram(d, [a], a.dtype), h = new jh(m), g = t6.runWebGLProgram(h, [n, f], a.dtype); + return t6.disposeIntermediateTensorInfo(f), g; } -var dF = { kernelName: Lm, backendName: "webgl", kernelFunc: L7 }; -function B7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, input: s, output: a } = e, i = s; - as([s, a], "maxPoolGrad"); - let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = I.computePool2DInfo(i.shape, p, u, 1, c, l), f = true, d = new us(m, "max", f), h = t10.runWebGLProgram(d, [i], i.dtype), g = new ng(m), y = t10.runWebGLProgram(g, [n, h], i.dtype); - return t10.disposeIntermediateTensorInfo(h), y; +var UR = { kernelName: _m, backendName: "webgl", kernelFunc: a7 }; +function i7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, input: s, output: a } = e, i = s; + is([s, a], "maxPoolGrad"); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = S.computePool2DInfo(i.shape, p, u, 1, c, l), d = true, f = new ps(m, "max", d), h = t6.runWebGLProgram(f, [i], i.dtype), g = new Kh(m), x = t6.runWebGLProgram(g, [n, h], i.dtype); + return t6.disposeIntermediateTensorInfo(h), x; } -var hF = { kernelName: Mm, backendName: "webgl", kernelFunc: B7 }; -function gF(r, e, t10, o) { - let n = new us(t10, "max", false), s = o.runWebGLProgram(n, [r], "float32"); - n = new us(t10, "max", true, true, e); +var GR = { kernelName: Tm, backendName: "webgl", kernelFunc: i7 }; +function HR(r, e, t6, o) { + let n = new ps(t6, "max", false), s = o.runWebGLProgram(n, [r], "float32"); + n = new ps(t6, "max", true, true, e); let a = o.runWebGLProgram(n, [r], "float32"); return [s, a]; } -var xF = { kernelName: vp, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; - x.assert(o.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`); +var qR = { kernelName: Cp, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t6; + y.assert(o.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`); let u = [1, 1]; - x.assert(I.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); - let c = I.computePool2DInfo(o.shape, n, s, u, a), [l, m] = gF(o, i, c, p); + y.assert(S.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); + let c = S.computePool2DInfo(o.shape, n, s, u, a), [l, m] = HR(o, i, c, p); return [l, m]; } }; -function yF(r, e, t10, o) { - let n = x.sizeFromShape(e), a = x.sizeFromShape(r.shape) / n, i = J({ inputs: { x: r }, attrs: { shape: [a, n] }, backend: o }), p = qr(i, "float32", "mean", o), u = J({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); +function KR(r, e, t6, o) { + let n = y.sizeFromShape(e), a = y.sizeFromShape(r.shape) / n, i = te({ inputs: { x: r }, attrs: { shape: [a, n] }, backend: o }), p = Gr(i, "float32", "mean", o), u = te({ inputs: { x: p }, attrs: { shape: t6 }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -var bF = { kernelName: An, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { x: o } = r, { keepDims: n, axis: s } = e, a = t10, i = o.shape.length, p = x.parseAxisParam(s, o.shape), u = p, c = I.getAxesPermutation(u, i), l = c != null, m = a.shouldExecuteOnCPU([o]), f = [], d = o; +var jR = { kernelName: Sn, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { x: o } = r, { keepDims: n, axis: s } = e, a = t6, i = o.shape.length, p = y.parseAxisParam(s, o.shape), u = p, c = S.getAxesPermutation(u, i), l = c != null, m = a.shouldExecuteOnCPU([o]), d = [], f = o; if (l) { if (m) { - let w = a.texData.get(d.dataId).values, k = new Array(i); - for (let R = 0; R < k.length; R++) - k[R] = o.shape[c[R]]; + let w = a.texData.get(f.dataId).values, k = new Array(i); + for (let A = 0; A < k.length; A++) + k[A] = o.shape[c[A]]; let _ = Du(w, o.shape, o.dtype, c, k); - d = a.makeTensorInfo(k, o.dtype); - let E = a.texData.get(d.dataId); - E.values = _; + f = a.makeTensorInfo(k, o.dtype); + let $ = a.texData.get(f.dataId); + $.values = _; } else - d = _i(o, c, a); - f.push(d), u = I.getInnerMostAxes(u.length, i); + f = Vi(o, c, a); + d.push(f), u = S.getInnerMostAxes(u.length, i); } - I.assertAxesAreInnerMostDims("sum", u, i); - let [h, g] = I.computeOutAndReduceShapes(d.shape, u), y = h; - n && (y = I.expandShapeToKeepDim(h, p)); - let b = yF(d, g, y, a); - for (let C of f) + S.assertAxesAreInnerMostDims("sum", u, i); + let [h, g] = S.computeOutAndReduceShapes(f.shape, u), x = h; + n && (x = S.expandShapeToKeepDim(h, p)); + let b = KR(f, g, x, a); + for (let C of d) a.disposeIntermediateTensorInfo(C); return b; } }; -function V7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = x.parseAxisParam(s, n.shape), u = p, c = I.getAxesPermutation(u, i), l = n; - c != null && (l = xt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = I.getInnerMostAxes(u.length, n.shape.length)), I.assertAxesAreInnerMostDims("min", u, i); - let [m, f] = I.computeOutAndReduceShapes(l.shape, u), d = x.sizeFromShape(f), h = J({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, d] } }), g = qr(h, h.dtype, "min", t10), y; +function u7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = S.getAxesPermutation(u, i), l = n; + c != null && (l = xt({ inputs: { x: n }, backend: t6, attrs: { perm: c } }), u = S.getInnerMostAxes(u.length, n.shape.length)), S.assertAxesAreInnerMostDims("min", u, i); + let [m, d] = S.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t6, attrs: { shape: [-1, f] } }), g = Gr(h, h.dtype, "min", t6), x; if (a) { - let b = I.expandShapeToKeepDim(m, p); - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); + let b = S.expandShapeToKeepDim(m, p); + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: b } }); } else - y = J({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), y; + x = te({ inputs: { x: g }, backend: t6, attrs: { shape: m } }); + return t6.disposeIntermediateTensorInfo(h), t6.disposeIntermediateTensorInfo(g), c != null && t6.disposeIntermediateTensorInfo(l), x; } -var CF = { kernelName: Fn, backendName: "webgl", kernelFunc: V7 }; -var z7 = gc + ` +var XR = { kernelName: wn, backendName: "webgl", kernelFunc: u7 }; +var p7 = mc + ` return min(a, b); `; -var W7 = ` +var c7 = ` vec4 result = vec4(min(a, b)); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + js + ` + ` + Zs + ` return result; `; -var U7 = ot({ opSnippet: z7, packedOpSnippet: W7, cpuKernelImpl: v$ }); -var IF = { kernelName: fo, backendName: "webgl", kernelFunc: U7 }; -var ag = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.outputShape = t10.map((c, l) => c[0] + e[l] + c[1]); - let n = e.length, s = _e(n), a = t10.map((c) => c[0]).join(","), i = t10.map((c, l) => c[0] + e[l]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n), u = o === "reflect" ? 0 : 1; +var l7 = tt({ opSnippet: p7, packedOpSnippet: c7, cpuKernelImpl: JE }); +var YR = { kernelName: In, backendName: "webgl", kernelFunc: l7 }; +var Xh = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.outputShape = t6.map((c, l) => c[0] + e[l] + c[1]); + let n = e.length, s = _e(n), a = t6.map((c) => c[0]).join(","), i = t6.map((c, l) => c[0] + e[l]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n), u = o === "reflect" ? 0 : 1; if (n === 1) { this.userCode = ` int start = ${a}; @@ -22328,12 +22394,12 @@ var ag = class { `; } }; -var ig = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t10.map((d, h) => d[0] + e[h] + d[1]); - let n = e.length, s = _e(n), a = t10.map((d) => d[0]).join(","), i = t10.map((d, h) => d[0] + e[h]).join(","), p = $t("rc", n), u = $t("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = o === "reflect" ? 0 : 1, f = ""; +var Yh = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t6.map((f, h) => f[0] + e[h] + f[1]); + let n = e.length, s = _e(n), a = t6.map((f) => f[0]).join(","), i = t6.map((f, h) => f[0] + e[h]).join(","), p = $t("rc", n), u = $t("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = o === "reflect" ? 0 : 1, d = ""; if (n === 1) { - let d = ` + let f = ` ${s} source = rc; if (source < start) { source = start * 2 - source - ${m}; @@ -22342,18 +22408,18 @@ var ig = class { } source -= start; `; - f = ` + d = ` ${s} rc = outputLoc; - ${d} + ${f} result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; if(${c}) { - ${d} + ${f} result[1] = getChannel(getX(${u.join()}), ${l}); } `; } else { - let d = ` + let f = ` ${s} source = rc; ${s} lt = ${s}(lessThan(source, start)); ${s} gte = ${s}(greaterThanEqual(source, end)); @@ -22363,23 +22429,23 @@ var ig = class { gte * ((end - 1) * 2 - source + ${m}); source -= start; `; - f = ` + d = ` ${s} rc = outputLoc; - ${d} + ${f} result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; if(${c}) { - ${d} + ${f} result[1] = getChannel(getX(${u.join()}), ${l}); } rc = outputLoc; ${p[n - 2]} += 1; if(${p[n - 2]} < ${this.outputShape[n - 2]}) { - ${d} + ${f} result[2] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; if(${c}) { - ${d} + ${f} result[3] = getChannel(getX(${u.join()}), ${l}); } } @@ -22392,29 +22458,29 @@ var ig = class { void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); - ${f} + ${d} setOutput(result); } `; } }; -var G7 = ({ inputs: r, backend: e, attrs: t10 }) => { - let { x: o } = r, { paddings: n, mode: s } = t10, a = P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new ig(o.shape, n, s) : new ag(o.shape, n, s); +var m7 = ({ inputs: r, backend: e, attrs: t6 }) => { + let { x: o } = r, { paddings: n, mode: s } = t6, a = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Yh(o.shape, n, s) : new Xh(o.shape, n, s); return e.runWebGLProgram(a, [o], o.dtype); }; -var wF = { kernelName: Dn, backendName: "webgl", kernelFunc: G7 }; -var H7 = `if (b == 0.0) return NAN; +var QR = { kernelName: vn, backendName: "webgl", kernelFunc: m7 }; +var d7 = `if (b == 0.0) return NAN; return mod(a, b);`; -var q7 = ` +var f7 = ` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - ` + js + ` + ` + Zs + ` return result; `; -var K7 = ot({ opSnippet: H7, packedOpSnippet: q7 }); -var SF = { kernelName: ji, backendName: "webgl", kernelFunc: K7 }; -var ug = class { - constructor(e, t10, o) { +var h7 = tt({ opSnippet: d7, packedOpSnippet: f7 }); +var ZR = { kernelName: ya, backendName: "webgl", kernelFunc: h7 }; +var Qh = class { + constructor(e, t6, o) { this.variableNames = ["probs"], this.customUniforms = [{ name: "seed", type: "float" }], this.outputShape = [e, o], this.userCode = ` void main() { ivec2 coords = getOutputCoords(); @@ -22423,7 +22489,7 @@ var ug = class { float r = random(seed); float cdf = 0.0; - for (int i = 0; i < ${t10 - 1}; i++) { + for (int i = 0; i < ${t6 - 1}; i++) { cdf += getProbs(batch, i); if (r < cdf) { @@ -22433,17 +22499,17 @@ var ug = class { } // If no other event happened, last event happened. - setOutput(float(${t10 - 1})); + setOutput(float(${t6 - 1})); } `; } }; -var j7 = ` +var g7 = ` if (a == b) { return 1.0; }; return a / b;`; -var X7 = ` +var x7 = ` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -22462,25 +22528,25 @@ var X7 = ` return result; `; -var Vw = ot({ opSnippet: j7, packedOpSnippet: X7, checkOutOfBounds: true }); -var vF = { kernelName: Cn, backendName: "webgl", kernelFunc: Vw }; -var kF = "return a - b;"; -var zw = ot({ opSnippet: kF, packedOpSnippet: kF, supportsComplex: true, cpuKernelImpl: G$ }); -var TF = { kernelName: Io, backendName: "webgl", kernelFunc: zw }; -function Ww(r) { - let { inputs: e, backend: t10, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = x.parseAxisParam([s], n.shape), i = Bw({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: a, keepDims: false } }), p = I.expandShapeToKeepDim(i.shape, a), u = J({ inputs: { x: i }, backend: t10, attrs: { shape: p } }), c = zw({ inputs: { a: n, b: u }, backend: t10 }), l = Ow({ inputs: { x: c }, backend: t10 }), m = Ou({ inputs: { x: l }, backend: t10, attrs: { axis: a, keepDims: false } }), f = J({ inputs: { x: m }, backend: t10, attrs: { shape: p } }), d = Vw({ inputs: { a: l, b: f }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(f), d; +var Ow = tt({ opSnippet: g7, packedOpSnippet: x7, checkOutOfBounds: true }); +var JR = { kernelName: Jo, backendName: "webgl", kernelFunc: Ow }; +var eF = "return a - b;"; +var Pw = tt({ opSnippet: eF, packedOpSnippet: eF, supportsComplex: true, cpuKernelImpl: b$ }); +var tF = { kernelName: Xn, backendName: "webgl", kernelFunc: Pw }; +function Mw(r) { + let { inputs: e, backend: t6, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = Dw({ inputs: { x: n }, backend: t6, attrs: { reductionIndices: a, keepDims: false } }), p = S.expandShapeToKeepDim(i.shape, a), u = te({ inputs: { x: i }, backend: t6, attrs: { shape: p } }), c = Pw({ inputs: { a: n, b: u }, backend: t6 }), l = Aw({ inputs: { x: c }, backend: t6 }), m = Ou({ inputs: { x: l }, backend: t6, attrs: { axis: a, keepDims: false } }), d = te({ inputs: { x: m }, backend: t6, attrs: { shape: p } }), f = Ow({ inputs: { a: l, b: d }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(i), t6.disposeIntermediateTensorInfo(u), t6.disposeIntermediateTensorInfo(c), t6.disposeIntermediateTensorInfo(l), t6.disposeIntermediateTensorInfo(m), t6.disposeIntermediateTensorInfo(d), f; } -var NF = { kernelName: Xn, backendName: "webgl", kernelFunc: Ww }; -function Y7(r) { - let { inputs: e, backend: t10, attrs: o } = r, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : Ww({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new ug(u, c, s), m = [[a]], f = t10.runWebGLProgram(l, [p], "int32", m); - return i || t10.disposeIntermediateTensorInfo(p), f; +var rF = { kernelName: qn, backendName: "webgl", kernelFunc: Mw }; +function y7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : Mw({ inputs: { logits: n }, backend: t6, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new Qh(u, c, s), m = [[a]], d = t6.runWebGLProgram(l, [p], "int32", m); + return i || t6.disposeIntermediateTensorInfo(p), d; } -var _F = { kernelName: kp, backendName: "webgl", kernelFunc: Y7 }; -var Q7 = Vt + ` +var oF = { kernelName: Sp, backendName: "webgl", kernelFunc: y7 }; +var b7 = Bt + ` return -x; `; -var Z7 = ` +var C7 = ` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -22491,40 +22557,40 @@ var Z7 = ` return result; `; -function J7(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - if (t10.shouldExecuteOnCPU([o])) { - let s = t10.texData.get(o.dataId), [a, i] = T$(s.values, o.shape, o.dtype); - return t10.makeTensorInfo(i, o.dtype, a); +function S7(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; + if (t6.shouldExecuteOnCPU([o])) { + let s = t6.texData.get(o.dataId), [a, i] = t$(s.values, o.shape, o.dtype); + return t6.makeTensorInfo(i, o.dtype, a); } let n; - return P().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new No(o.shape, Z7) : n = new fr(o.shape, Q7), t10.runWebGLProgram(n, [o], o.dtype); + return O().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Ar(o.shape, C7) : n = new Jt(o.shape, b7), t6.runWebGLProgram(n, [o], o.dtype); } -var EF = { kernelName: Pn, backendName: "webgl", kernelFunc: J7 }; -var eZ = Bt.nonMaxSuppressionV3Impl; -function tZ(r) { - I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), { selectedIndices: l } = eZ(u, c, a, i, p); - return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); +var nF = { kernelName: ws, backendName: "webgl", kernelFunc: S7 }; +var w7 = Lt.nonMaxSuppressionV3Impl; +function I7(r) { + S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t6.readSync(n.dataId), c = t6.readSync(s.dataId), { selectedIndices: l } = w7(u, c, a, i, p); + return t6.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var $F = { kernelName: On, backendName: "webgl", kernelFunc: tZ }; -var rZ = Bt.nonMaxSuppressionV4Impl; -function oZ(r) { - I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), { selectedIndices: m, validOutputs: f } = rZ(c, l, a, i, p, u); - return [t10.makeTensorInfo([m.length], "int32", new Int32Array(m)), t10.makeTensorInfo([], "int32", new Int32Array([f]))]; +var sF = { kernelName: Tn, backendName: "webgl", kernelFunc: I7 }; +var v7 = Lt.nonMaxSuppressionV4Impl; +function k7(r) { + S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, c = t6.readSync(n.dataId), l = t6.readSync(s.dataId), { selectedIndices: m, validOutputs: d } = v7(c, l, a, i, p, u); + return [t6.makeTensorInfo([m.length], "int32", new Int32Array(m)), t6.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var RF = { kernelName: pa, backendName: "webgl", kernelFunc: oZ }; -var nZ = Bt.nonMaxSuppressionV5Impl; -function sZ(r) { - I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), m = a, f = i, d = p, h = u, { selectedIndices: g, selectedScores: y } = nZ(c, l, m, f, d, h); - return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([y.length], "float32", new Float32Array(y))]; +var aF = { kernelName: ba, backendName: "webgl", kernelFunc: k7 }; +var N7 = Lt.nonMaxSuppressionV5Impl; +function T7(r) { + S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t6.readSync(n.dataId), l = t6.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = N7(c, l, m, d, f, h); + return [t6.makeTensorInfo([g.length], "int32", new Int32Array(g)), t6.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var AF = { kernelName: Mn, backendName: "webgl", kernelFunc: sZ }; -var pg = class { - constructor(e, t10, o, n) { - this.variableNames = ["indices"], this.outputShape = [e, t10], this.userCode = ` +var iF = { kernelName: _n, backendName: "webgl", kernelFunc: T7 }; +var Zh = class { + constructor(e, t6, o, n) { + this.variableNames = ["indices"], this.outputShape = [e, t6], this.userCode = ` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); @@ -22534,52 +22600,52 @@ var pg = class { `; } }; -var aZ = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = x.sizeFromShape(n.shape), c = new pg(u, a, i, p), l = J({ inputs: { x: n }, backend: t10, attrs: { shape: [u] } }), m = t10.runWebGLProgram(c, [l], s); - t10.disposeIntermediateTensorInfo(l); - let f = [...n.shape, a], d = J({ inputs: { x: m }, backend: t10, attrs: { shape: f } }); - return t10.disposeIntermediateTensorInfo(m), d; +var _7 = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new Zh(u, a, i, p), l = te({ inputs: { x: n }, backend: t6, attrs: { shape: [u] } }), m = t6.runWebGLProgram(c, [l], s); + t6.disposeIntermediateTensorInfo(l); + let d = [...n.shape, a], f = te({ inputs: { x: m }, backend: t6, attrs: { shape: d } }); + return t6.disposeIntermediateTensorInfo(m), f; }; -var FF = { kernelName: ca, backendName: "webgl", kernelFunc: aZ }; -function Bl(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var uF = { kernelName: En, backendName: "webgl", kernelFunc: _7 }; +function Al(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "complex64") { - let n = La({ inputs: { input: o }, backend: t10 }), s = Bl({ inputs: { x: n }, backend: t10 }), a = Lu({ inputs: { input: o }, backend: t10 }), i = Bl({ inputs: { x: a }, backend: t10 }), p = Ar({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; + let n = Ua({ inputs: { input: o }, backend: t6 }), s = Al({ inputs: { x: n }, backend: t6 }), a = Mu({ inputs: { input: o }, backend: t6 }), i = Al({ inputs: { x: a }, backend: t6 }), p = Rr({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(n), t6.disposeIntermediateTensorInfo(s), t6.disposeIntermediateTensorInfo(a), t6.disposeIntermediateTensorInfo(i), p; } else - return Ba({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + return Ga({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t6 }); } -var DF = { kernelName: Es, backendName: "webgl", kernelFunc: Bl }; -function PF(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var pF = { kernelName: Fs, backendName: "webgl", kernelFunc: Al }; +function cF(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = La({ inputs: { input: o }, backend: t10 }), s = PF({ inputs: { x: n }, backend: t10 }), a = Lu({ inputs: { input: o }, backend: t10 }), i = Bl({ inputs: { x: a }, backend: t10 }), p = Ar({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; + let n = Ua({ inputs: { input: o }, backend: t6 }), s = cF({ inputs: { x: n }, backend: t6 }), a = Mu({ inputs: { input: o }, backend: t6 }), i = Al({ inputs: { x: a }, backend: t6 }), p = Rr({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeIntermediateTensorInfo(n), t6.disposeIntermediateTensorInfo(s), t6.disposeIntermediateTensorInfo(a), t6.disposeIntermediateTensorInfo(i), p; } else - return Ba({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + return Ga({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t6 }); } -var OF = { kernelName: Cs, backendName: "webgl", kernelFunc: PF }; -function iZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o; +var lF = { kernelName: Is, backendName: "webgl", kernelFunc: cF }; +function E7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o; if (e.length === 1) - return Kh({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return Ph({ inputs: { input: e[0] }, backend: t6, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; e.forEach((c) => { - x.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), x.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); let i = [], p = e.map((c) => { - let l = Kh({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + let l = Ph({ inputs: { input: c }, backend: t6, attrs: { dim: n } }); return i.push(l), l; - }), u = Pw({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((c) => t10.disposeIntermediateTensorInfo(c)), u; + }), u = $w({ inputs: p, backend: t6, attrs: { axis: n } }); + return i.forEach((c) => t6.disposeIntermediateTensorInfo(c)), u; } -var MF = { kernelName: Is, backendName: "webgl", kernelFunc: iZ }; -var cg = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t10.map((u, c) => u[0] + e[c] + u[1]); - let n = e.length, s = _e(n), a = t10.map((u) => u[0]).join(","), i = t10.map((u, c) => u[0] + e[c]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n); +var mF = { kernelName: vs, backendName: "webgl", kernelFunc: E7 }; +var Jh = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t6.map((u, c) => u[0] + e[c] + u[1]); + let n = e.length, s = _e(n), a = t6.map((u) => u[0]).join(","), i = t6.map((u, c) => u[0] + e[c]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n); if (n === 1) { this.userCode = ` int start = ${a}; @@ -22612,50 +22678,50 @@ var cg = class { `; } }; -var lg = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t10.map((h, g) => h[0] + e[g] + h[1]); - let n = e.length, s = _e(n), a = t10.map((h) => h[0]).join(","), i = t10.map((h, g) => h[0] + e[g]).join(","), p = $t("rc", n), u = $t("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = [`${s} rc = outputLoc;`, `${p[n - 1]} += 1; +var eg = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t6.map((h, g) => h[0] + e[g] + h[1]); + let n = e.length, s = _e(n), a = t6.map((h) => h[0]).join(","), i = t6.map((h, g) => h[0] + e[g]).join(","), p = $t("rc", n), u = $t("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = [`${s} rc = outputLoc;`, `${p[n - 1]} += 1; if(${c}) { `, n === 1 ? "" : `} rc = outputLoc; ${p[n - 2]} += 1; if(${p[n - 2]} < ${this.outputShape[n - 2]}) {`, n === 1 ? "" : ` ${p[n - 1]} += 1; - if(${c}) {`], f = n === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))", d = ""; + if(${c}) {`], d = n === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))", f = ""; for (let h = 0, g = n === 1 ? 2 : 4; h < g; h++) - d += ` + f += ` ${m[h]} - if (${f}) { + if (${d}) { result[${h}] = float(value); } else { ${s} source = rc - start; result[${h}] = getChannel(getX(${u.join()}), ${l}); } `; - d += n === 1 ? "} " : "}}", this.userCode = ` + f += n === 1 ? "} " : "}}", this.userCode = ` const ${s} start = ${s}(${a}); const ${s} end = ${s}(${i}); void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); - ${d} + ${f} setOutput(result); } `; } }; -var Uw = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; - if (x.sizeFromShape(n.shape) === 0) { +var Lw = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; + if (y.sizeFromShape(n.shape) === 0) { let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); - return Ba({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); + return Ga({ backend: t6, attrs: { shape: u, value: a, dtype: n.dtype } }); } - let i = P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new lg(n.shape, s, a) : new cg(n.shape, s, a), p = [[a]]; - return t10.runWebGLProgram(i, [n], n.dtype, p); + let i = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new eg(n.shape, s, a) : new Jh(n.shape, s, a), p = [[a]]; + return t6.runWebGLProgram(i, [n], n.dtype, p); }; -var LF = { kernelName: Ln, backendName: "webgl", kernelFunc: Uw }; -var uZ = ` +var dF = { kernelName: $n, backendName: "webgl", kernelFunc: Lw }; +var $7 = ` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -22665,7 +22731,7 @@ var uZ = ` return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `; -var pZ = ` +var A7 = ` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -22681,57 +22747,57 @@ var pZ = ` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - ` + js + ` + ` + Zs + ` return result; `; -var cZ = ot({ opSnippet: uZ, packedOpSnippet: pZ }); -var BF = { kernelName: Bn, backendName: "webgl", kernelFunc: cZ }; -function lZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = [], u = x.parseAxisParam(s, n.shape), c = u, l = I.getAxesPermutation(c, i), m = n; - l != null && (m = xt({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), c = I.getInnerMostAxes(c.length, i), p.push(m)), I.assertAxesAreInnerMostDims("prod", c, i); - let f; - if (t10.shouldExecuteOnCPU([m])) { - let d = t10.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: y } = _$(m.shape, m.dtype, d, c); - f = t10.makeTensorInfo(g, y, h); +var R7 = tt({ opSnippet: $7, packedOpSnippet: A7 }); +var fF = { kernelName: An, backendName: "webgl", kernelFunc: R7 }; +function F7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = [], u = y.parseAxisParam(s, n.shape), c = u, l = S.getAxesPermutation(c, i), m = n; + l != null && (m = xt({ inputs: { x: n }, backend: t6, attrs: { perm: l } }), c = S.getInnerMostAxes(c.length, i), p.push(m)), S.assertAxesAreInnerMostDims("prod", c, i); + let d; + if (t6.shouldExecuteOnCPU([m])) { + let f = t6.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: x } = o$(m.shape, m.dtype, f, c); + d = t6.makeTensorInfo(g, x, h); } else { - let [d, h] = I.computeOutAndReduceShapes(m.shape, c), g = x.sizeFromShape(h), y = J({ inputs: { x: m }, backend: t10, attrs: { shape: [-1, g] } }), b = Ca(n.dtype), C = qr(y, b, "prod", t10); - f = J({ inputs: { x: C }, backend: t10, attrs: { shape: d } }), p.push(y), p.push(C); + let [f, h] = S.computeOutAndReduceShapes(m.shape, c), g = y.sizeFromShape(h), x = te({ inputs: { x: m }, backend: t6, attrs: { shape: [-1, g] } }), b = ka(n.dtype), C = Gr(x, b, "prod", t6); + d = te({ inputs: { x: C }, backend: t6, attrs: { shape: f } }), p.push(x), p.push(C); } if (a) { - p.push(f); - let d = I.expandShapeToKeepDim(f.shape, u); - f = J({ inputs: { x: f }, backend: t10, attrs: { shape: d } }); + p.push(d); + let f = S.expandShapeToKeepDim(d.shape, u); + d = te({ inputs: { x: d }, backend: t6, attrs: { shape: f } }); } - return p.forEach((d) => t10.disposeIntermediateTensorInfo(d)), f; + return p.forEach((f) => t6.disposeIntermediateTensorInfo(f)), d; } -var VF = { kernelName: Ao, backendName: "webgl", kernelFunc: lZ }; -function mZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((y) => t10.readSync(y.dataId)), u = n.map((y) => y.shape), c = t10.readSync(s.dataId), l = t10.readSync(a.dataId), [m, f, d] = E$(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((y) => t10.makeTensorInfo([y.length], "int32", y)), g = t10.makeTensorInfo(d, s.dtype, f); +var hF = { kernelName: Fn, backendName: "webgl", kernelFunc: F7 }; +function D7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t6.readSync(x.dataId)), u = n.map((x) => x.shape), c = t6.readSync(s.dataId), l = t6.readSync(a.dataId), [m, d, f] = n$(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => t6.makeTensorInfo([x.length], "int32", x)), g = t6.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var zF = { kernelName: Tp, backendName: "webgl", kernelFunc: mZ }; -function fZ(r) { - let { inputs: e, backend: t10 } = r, { starts: o, limits: n, deltas: s } = e, a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = $$(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([c.length], o.dtype, c); +var gF = { kernelName: wp, backendName: "webgl", kernelFunc: D7 }; +function O7(r) { + let { inputs: e, backend: t6 } = r, { starts: o, limits: n, deltas: s } = e, a = t6.readSync(o.dataId), i = t6.readSync(n.dataId), p = t6.readSync(s.dataId), [u, c] = s$(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t6.makeTensorInfo([u.length], "int32", u), m = t6.makeTensorInfo([c.length], o.dtype, c); return [l, m]; } -var WF = { kernelName: Np, backendName: "webgl", kernelFunc: fZ }; -function dZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), l = t10.readSync(a.dataId), m = i.map((g) => t10.readSync(g.dataId)), f = i.map((g) => g.shape), [d, h] = R$(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, f, p); - return t10.makeTensorInfo(d, s.dtype, h); +var xF = { kernelName: Ip, backendName: "webgl", kernelFunc: O7 }; +function P7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t6.readSync(n.dataId), c = t6.readSync(s.dataId), l = t6.readSync(a.dataId), m = i.map((g) => t6.readSync(g.dataId)), d = i.map((g) => g.shape), [f, h] = a$(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); + return t6.makeTensorInfo(f, s.dtype, h); } -var UF = { kernelName: _p, backendName: "webgl", kernelFunc: dZ }; -var Gw = (r) => { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, step: s, dtype: a } = t10, i = A$(o, n, s, a); +var yF = { kernelName: vp, backendName: "webgl", kernelFunc: P7 }; +var Bw = (r) => { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, step: s, dtype: a } = t6, i = i$(o, n, s, a); return e.makeTensorInfo([i.length], a, i); }; -var GF = { kernelName: ws, backendName: "webgl", kernelFunc: Gw }; -var hZ = "return 1.0 / x;"; -var gZ = he({ opSnippet: hZ }); -var HF = { kernelName: ma, backendName: "webgl", kernelFunc: gZ }; -var xZ = Vt + ` +var bF = { kernelName: ks, backendName: "webgl", kernelFunc: Bw }; +var M7 = "return 1.0 / x;"; +var L7 = ge({ opSnippet: M7 }); +var CF = { kernelName: Dn, backendName: "webgl", kernelFunc: L7 }; +var B7 = Bt + ` return (x < 0.0) ? 0.0 : x; `; -var yZ = ` +var V7 = ` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -22742,12 +22808,12 @@ var yZ = ` return result; `; -var bZ = he({ opSnippet: xZ, packedOpSnippet: yZ }); -var qF = { kernelName: zn, backendName: "webgl", kernelFunc: bZ }; -var CZ = Vt + ` +var z7 = ge({ opSnippet: B7, packedOpSnippet: V7 }); +var SF = { kernelName: On, backendName: "webgl", kernelFunc: z7 }; +var W7 = Bt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; -var IZ = ` +var U7 = ` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -22758,14 +22824,14 @@ var IZ = ` return result; `; -var wZ = he({ opSnippet: CZ, packedOpSnippet: IZ }); -var KF = { kernelName: Gn, backendName: "webgl", kernelFunc: wZ }; -var mg = class { - constructor(e, t10, o, n, s) { +var G7 = ge({ opSnippet: W7, packedOpSnippet: U7 }); +var wF = { kernelName: Ln, backendName: "webgl", kernelFunc: G7 }; +var tg = class { + constructor(e, t6, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = e; - this.outputShape = [a, t10, o, u]; - let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; + this.outputShape = [a, t6, o, u]; + let c = [n && t6 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t6 > 1 ? t6 - 1 : t6, n && o > 1 ? o - 1 : o], m; s ? m = "(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)" : m = "vec2(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0] / l[0]}, @@ -22802,12 +22868,12 @@ var mg = class { `; } }; -var fg = class { - constructor(e, t10, o, n, s) { +var rg = class { + constructor(e, t6, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = e; - this.outputShape = [a, t10, o, u]; - let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; + this.outputShape = [a, t6, o, u]; + let c = [n && t6 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t6 > 1 ? t6 - 1 : t6, n && o > 1 ? o - 1 : o], m; s ? m = "(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)" : m = "vec3(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0] / l[0]}, @@ -22888,15 +22954,15 @@ var fg = class { `; } }; -function SZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = P().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new fg(n.shape, p, u, s, a) : new mg(n.shape, p, u, s, a); - return t10.runWebGLProgram(c, [n], "float32"); +function H7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = O().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new rg(n.shape, p, u, s, a) : new tg(n.shape, p, u, s, a); + return t6.runWebGLProgram(c, [n], "float32"); } -var jF = { kernelName: Un, backendName: "webgl", kernelFunc: SZ }; -var dg = class { - constructor(e, t10, o) { - this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t10; - let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, f = 1 / l, d = Math.ceil(m) * 2 + 2, h = Math.ceil(f) * 2 + 2; +var IF = { kernelName: Mn, backendName: "webgl", kernelFunc: H7 }; +var og = class { + constructor(e, t6, o) { + this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t6; + let [, n, s] = t6, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, d = 1 / l, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -22911,9 +22977,9 @@ var dg = class { const float widthScale = float(${l}); const float invHeightScale = float(${m}); - const float invWidthScale = float(${f}); + const float invWidthScale = float(${d}); - const int winHeight = int(${d}); + const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look @@ -22981,18 +23047,18 @@ var dg = class { `; } }; -function vZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o, i = new dg(s.shape, n.shape, a); - return t10.runWebGLProgram(i, [s], s.dtype); +function q7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o, i = new og(s.shape, n.shape, a); + return t6.runWebGLProgram(i, [s], s.dtype); } -var XF = { kernelName: Vm, backendName: "webgl", kernelFunc: vZ }; -var hg = class { - constructor(e, t10, o, n, s) { +var vF = { kernelName: $m, backendName: "webgl", kernelFunc: q7 }; +var ng = class { + constructor(e, t6, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = e; - this.outputShape = [a, t10, o, u]; - let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", f; - s ? f = "max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))" : f = "vec2(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` + this.outputShape = [a, t6, o, u]; + let c = [n && t6 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t6 > 1 ? t6 - 1 : t6, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; + s ? d = "max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))" : d = "vec2(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0] / l[0]}, ${c[1] / l[1]}); @@ -23005,7 +23071,7 @@ var hg = class { ivec2 yRC = coords.yz; // Fractional source index. - vec2 sourceFracIndexRC = ${f}; + vec2 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( @@ -23017,13 +23083,13 @@ var hg = class { `; } }; -var gg = class { - constructor(e, t10, o, n, s) { +var sg = class { + constructor(e, t6, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = e; - this.outputShape = [a, t10, o, u]; - let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", f; - s ? f = "max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))" : f = "vec3(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` + this.outputShape = [a, t6, o, u]; + let c = [n && t6 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t6 > 1 ? t6 - 1 : t6, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; + s ? d = "max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))" : d = "vec3(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0] / l[0]}, ${c[1] / l[1]}, @@ -23043,7 +23109,7 @@ var gg = class { ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. - vec3 sourceFracIndexRC = ${f}; + vec3 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( @@ -23067,15 +23133,15 @@ var gg = class { `; } }; -function kZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = P().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new gg(n.shape, p, u, s, a) : new hg(n.shape, p, u, s, a); - return t10.runWebGLProgram(c, [n], n.dtype); +function K7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = O().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new sg(n.shape, p, u, s, a) : new ng(n.shape, p, u, s, a); + return t6.runWebGLProgram(c, [n], n.dtype); } -var YF = { kernelName: Wn, backendName: "webgl", kernelFunc: kZ }; -var xg = class { - constructor(e, t10, o) { - this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t10; - let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, f = 1 / l, d = Math.ceil(m) * 2 + 2, h = Math.ceil(f) * 2 + 2; +var kF = { kernelName: Pn, backendName: "webgl", kernelFunc: K7 }; +var ag = class { + constructor(e, t6, o) { + this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t6; + let [, n, s] = t6, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, d = 1 / l, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -23090,9 +23156,9 @@ var xg = class { const float widthScale = float(${l}); const float invHeightScale = float(${m}); - const float invWidthScale = float(${f}); + const float invWidthScale = float(${d}); - const int winHeight = int(${d}); + const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look @@ -23149,13 +23215,13 @@ var xg = class { `; } }; -function TZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o, i = new xg(s.shape, n.shape, a); - return t10.runWebGLProgram(i, [s], s.dtype); +function j7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n, dy: s } = e, { alignCorners: a } = o, i = new ag(s.shape, n.shape, a); + return t6.runWebGLProgram(i, [s], s.dtype); } -var QF = { kernelName: Bm, backendName: "webgl", kernelFunc: TZ }; -var yg = class { - constructor(e, t10) { +var NF = { kernelName: Em, backendName: "webgl", kernelFunc: j7 }; +var ig = class { + constructor(e, t6) { this.variableNames = ["x"]; let o = e.length; if (o > 4) @@ -23169,7 +23235,7 @@ var yg = class { `; return; } - let n = (i) => t10.indexOf(i) !== -1 && e[i] !== 1 ? `${e[i]} - coords[${i}] - 1` : `coords[${i}]`, s = e.map((i, p) => n(p)).join(","), a = _e(o); + let n = (i) => t6.indexOf(i) !== -1 && e[i] !== 1 ? `${e[i]} - coords[${i}] - 1` : `coords[${i}]`, s = e.map((i, p) => n(p)).join(","), a = _e(o); this.userCode = ` void main() { ${a} coords = getOutputCoords(); @@ -23178,8 +23244,8 @@ var yg = class { `; } }; -var bg = class { - constructor(e, t10) { +var ug = class { + constructor(e, t6) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true; let o = e.length; if (o > 4) @@ -23215,43 +23281,43 @@ var bg = class { setOutput(result); } `; - function p(d) { - return m(d); + function p(f) { + return m(f); } - function u(d) { - return d[o - 1] = "(" + d[o - 1] + " + 1)", m(d); + function u(f) { + return f[o - 1] = "(" + f[o - 1] + " + 1)", m(f); } - function c(d) { - return d[o - 2] = "(" + d[o - 2] + " + 1)", m(d); + function c(f) { + return f[o - 2] = "(" + f[o - 2] + " + 1)", m(f); } - function l(d) { - return d[o - 1] = "(" + d[o - 1] + " + 1)", d[o - 2] = "(" + d[o - 2] + " + 1)", m(d); + function l(f) { + return f[o - 1] = "(" + f[o - 1] + " + 1)", f[o - 2] = "(" + f[o - 2] + " + 1)", m(f); } - function m(d) { - let h = e.map((b, C) => f(C, d)), g = h.join(","), y = h.slice(-2).join(","); - return `getChannel(getX(${g}), vec2(${y}))`; + function m(f) { + let h = e.map((b, C) => d(C, f)), g = h.join(","), x = h.slice(-2).join(","); + return `getChannel(getX(${g}), vec2(${x}))`; } - function f(d, h) { - return t10.indexOf(d) !== -1 && e[d] !== 1 ? `${e[d]} - ${h[d]} - 1` : `${h[d]}`; + function d(f, h) { + return t6.indexOf(f) !== -1 && e[f] !== 1 ? `${e[f]} - ${h[f]} - 1` : `${h[f]}`; } } }; -function NZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dims: s } = o, a = n.shape.length, i = x.parseAxisParam(s, n.shape); +function X7(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return Rt({ inputs: { x: n }, backend: t10 }); - let p = P().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new bg(n.shape, i) : new yg(n.shape, i); - return t10.runWebGLProgram(p, [n], n.dtype); + return At({ inputs: { x: n }, backend: t6 }); + let p = O().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new ug(n.shape, i) : new ig(n.shape, i); + return t6.runWebGLProgram(p, [n], n.dtype); } -var ZF = { kernelName: fa, backendName: "webgl", kernelFunc: NZ }; -var Cg = class { - constructor(e, t10) { +var TF = { kernelName: Bn, backendName: "webgl", kernelFunc: X7 }; +var pg = class { + constructor(e, t6) { this.variableNames = ["Image"], this.outputShape = [], this.customUniforms = [{ name: "params", type: "vec4" }]; let o = e[1], n = e[2]; this.outputShape = e; let s = ""; - typeof t10 == "number" ? s = `float outputValue = ${t10.toFixed(2)};` : s = ` - vec3 fill = vec3(${t10.join(",")}); + typeof t6 == "number" ? s = `float outputValue = ${t6.toFixed(2)};` : s = ` + vec3 fill = vec3(${t6.join(",")}); float outputValue = fill[coords[3]];`, this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -23272,11 +23338,11 @@ var Cg = class { `; } }; -var JF = { kernelName: es, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t10, p = new Cg(o.shape, s), [u, c] = I.getImageCenter(a, o.shape[1], o.shape[2]), l = [[u, c, Math.sin(n), Math.cos(n)]]; +var _F = { kernelName: es, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t6, p = new pg(o.shape, s), [u, c] = S.getImageCenter(a, o.shape[1], o.shape[2]), l = [[u, c, Math.sin(n), Math.cos(n)]]; return i.runWebGLProgram(p, [o], o.dtype, l); } }; -var _Z = ` +var Y7 = ` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -23292,19 +23358,19 @@ var _Z = ` } } `; -var EZ = he({ opSnippet: _Z }); -var eD = { kernelName: da, backendName: "webgl", kernelFunc: EZ }; -var $Z = "return inversesqrt(x);"; -var RZ = he({ opSnippet: $Z, cpuKernelImpl: F$ }); -var tD = { kernelName: xo, backendName: "webgl", kernelFunc: RZ }; -var vc = class { - constructor(e, t10, o, n, s, a, i = true) { +var Q7 = ge({ opSnippet: Y7 }); +var EF = { kernelName: Ca, backendName: "webgl", kernelFunc: Q7 }; +var Z7 = "return inversesqrt(x);"; +var J7 = ge({ opSnippet: Z7, cpuKernelImpl: u$ }); +var $F = { kernelName: Vn, backendName: "webgl", kernelFunc: J7 }; +var Cc = class { + constructor(e, t6, o, n, s, a, i = true) { this.variableNames = ["updates", "indices", "defaultValue"], this.outputShape = a; let p = _e(s.length), u = _e(a.length), c = ""; o === 1 ? c = "i" : o === 2 && (c = "i, j"); let l = `getIndices(${c})`, m = ""; n === 1 ? m = "i" : n === 2 && (m = "i, coords[1]"); - let f = `getUpdates(${m})`, d = t10 > 1 ? "strides[j]" : "strides"; + let d = `getUpdates(${m})`, f = t6 > 1 ? "strides[j]" : "strides"; this.userCode = ` ${p} strides = ${p}(${s}); @@ -23314,12 +23380,12 @@ var vc = class { bool found = false; for (int i = 0; i < ${e}; i++) { int flattenedIndex = 0; - for (int j = 0; j < ${t10}; j++) { + for (int j = 0; j < ${t6}; j++) { int index = round(${l}); - flattenedIndex += index * ${d}; + flattenedIndex += index * ${f}; } if (flattenedIndex == coords[0]) { - sum += ${f}; + sum += ${d}; found = true; } } @@ -23328,18 +23394,18 @@ var vc = class { `; } }; -function AZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = I.calculateShapes(s, n, a), m = [l / u, u]; +function eZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = S.calculateShapes(s, n, a), m = [l / u, u]; if (l === 0) - return t10.makeTensorInfo(a, n.dtype); - let f = J({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), d = J({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = t10.makeTensorInfo([], "float32", new Float32Array([0])), g = new vc(p, i, f.shape.length, d.shape.length, c, m), y = t10.runWebGLProgram(g, [d, f, h], d.dtype), b = J({ inputs: { x: y }, backend: t10, attrs: { shape: a } }); - return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(y), t10.disposeIntermediateTensorInfo(h), b; + return t6.makeTensorInfo(a, n.dtype); + let d = te({ inputs: { x: n }, backend: t6, attrs: { shape: [p, i] } }), f = te({ inputs: { x: s }, backend: t6, attrs: { shape: [p, u] } }), h = t6.makeTensorInfo([], "float32", new Float32Array([0])), g = new Cc(p, i, d.shape.length, f.shape.length, c, m), x = t6.runWebGLProgram(g, [f, d, h], f.dtype), b = te({ inputs: { x }, backend: t6, attrs: { shape: a } }); + return t6.disposeIntermediateTensorInfo(d), t6.disposeIntermediateTensorInfo(f), t6.disposeIntermediateTensorInfo(x), t6.disposeIntermediateTensorInfo(h), b; } -var rD = { kernelName: Hn, backendName: "webgl", kernelFunc: AZ }; -var Ig = class { - constructor(e, t10, o, n) { +var AF = { kernelName: zn, backendName: "webgl", kernelFunc: eZ }; +var cg = class { + constructor(e, t6, o, n) { this.variableNames = ["sortedSequence", "values"], this.customUniforms = [{ name: "numInputs", type: "int" }], this.outputShape = [e, o]; - let s = "while (left < right) {", a = `for (int i = 0; i < ${Math.ceil(Math.log2(t10 + 1))}; ++i) { if (left >= right) break;`, i = P().getNumber("WEBGL_VERSION") === 2 ? s : a, p = n === "left" ? "<" : "<="; + let s = "while (left < right) {", a = `for (int i = 0; i < ${Math.ceil(Math.log2(t6 + 1))}; ++i) { if (left >= right) break;`, i = O().getNumber("WEBGL_VERSION") === 2 ? s : a, p = n === "left" ? "<" : "<="; this.userCode = ` int findBound(int batch, float value) { int left = 0; @@ -23368,14 +23434,14 @@ var Ig = class { `; } }; -function FZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { sortedSequence: n, values: s } = e, { side: a } = o, i = new Ig(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; - return t10.runWebGLProgram(i, [n, s], "int32", p); +function tZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sortedSequence: n, values: s } = e, { side: a } = o, i = new cg(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; + return t6.runWebGLProgram(i, [n, s], "int32", p); } -var oD = { kernelName: Ep, backendName: "webgl", kernelFunc: FZ }; -var wg = class { - constructor(e, t10, o) { - this.variableNames = ["c", "a", "b"], this.outputShape = t10; +var RF = { kernelName: ii, backendName: "webgl", kernelFunc: tZ }; +var lg = class { + constructor(e, t6, o) { + this.variableNames = ["c", "a", "b"], this.outputShape = t6; let n, s; if (o > 4) throw Error(`Where for rank ${o} is not yet supported`); @@ -23383,7 +23449,7 @@ var wg = class { s = "resRC", n = "resRC"; else { let i = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], p = [], u = []; - for (let c = 0; c < t10.length; c++) + for (let c = 0; c < t6.length; c++) u.push(`${i[c]}`), c < e && p.push(`${i[c]}`); n = p.join(), s = u.join(); } @@ -23401,24 +23467,24 @@ var wg = class { `; } }; -function DZ(r) { - let { inputs: e, backend: t10 } = r, { condition: o, t: n, e: s } = e, a = new wg(o.shape.length, n.shape, n.shape.length); - return t10.runWebGLProgram(a, [o, n, s], ct(n.dtype, s.dtype)); +function rZ(r) { + let { inputs: e, backend: t6 } = r, { condition: o, t: n, e: s } = e, a = new lg(o.shape.length, n.shape, n.shape.length); + return t6.runWebGLProgram(a, [o, n, s], dt(n.dtype, s.dtype)); } -var nD = { kernelName: vs, backendName: "webgl", kernelFunc: DZ }; -var PZ = ` +var FF = { kernelName: Ts, backendName: "webgl", kernelFunc: rZ }; +var oZ = ` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 - float scaleAlpha = ${I.SELU_SCALEALPHA}; - float scale = ${I.SELU_SCALE}; + float scaleAlpha = ${S.SELU_SCALEALPHA}; + float scale = ${S.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `; -var OZ = he({ opSnippet: PZ }); -var sD = { kernelName: Xi, backendName: "webgl", kernelFunc: OZ }; -var MZ = jo + ` +var nZ = ge({ opSnippet: oZ }); +var DF = { kernelName: Xi, backendName: "webgl", kernelFunc: nZ }; +var sZ = _o + ` return 1.0 / (1.0 + exp(-1.0 * x)); `; -var LZ = ` +var aZ = ` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -23429,26 +23495,26 @@ var LZ = ` return result; `; -var BZ = he({ opSnippet: MZ, packedOpSnippet: LZ, cpuKernelImpl: P$ }); -var aD = { kernelName: yo, backendName: "webgl", kernelFunc: BZ }; -var VZ = ` +var iZ = ge({ opSnippet: sZ, packedOpSnippet: aZ, cpuKernelImpl: c$ }); +var OF = { kernelName: Un, backendName: "webgl", kernelFunc: iZ }; +var uZ = ` if (isnan(x)) { return 0.0; } return sign(x); `; -var zZ = he({ opSnippet: VZ }); -var iD = { kernelName: Yi, backendName: "webgl", kernelFunc: zZ }; -var WZ = jo + ` +var pZ = ge({ opSnippet: uZ }); +var PF = { kernelName: Yi, backendName: "webgl", kernelFunc: pZ }; +var cZ = _o + ` return sin(x); `; -var UZ = he({ opSnippet: WZ }); -var uD = { kernelName: Kn, backendName: "webgl", kernelFunc: UZ }; -var GZ = ` +var lZ = ge({ opSnippet: cZ }); +var MF = { kernelName: Wn, backendName: "webgl", kernelFunc: lZ }; +var mZ = ` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `; -var HZ = he({ opSnippet: GZ }); -var pD = { kernelName: ha, backendName: "webgl", kernelFunc: HZ }; -var qZ = ` +var dZ = ge({ opSnippet: mZ }); +var LF = { kernelName: Sa, backendName: "webgl", kernelFunc: dZ }; +var fZ = ` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -23469,21 +23535,21 @@ var qZ = ` } return result; `; -var KZ = he({ opSnippet: qZ }); -var cD = { kernelName: Qi, backendName: "webgl", kernelFunc: KZ }; -var jZ = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; - x.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"); - let i = s.reduce((y, b) => y * b), p = [[0, 0]]; +var hZ = ge({ opSnippet: fZ }); +var BF = { kernelName: Qi, backendName: "webgl", kernelFunc: hZ }; +var gZ = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; + y.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"); + let i = s.reduce((x, b) => x * b), p = [[0, 0]]; p.push(...a); - for (let y = 1 + s.length; y < n.shape.length; ++y) + for (let x = 1 + s.length; x < n.shape.length; ++x) p.push([0, 0]); - let u = [], c = Uw({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = I.getReshaped(c.shape, s, i, false), m = I.getPermuted(l.length, s.length, false), f = I.getReshapedPermuted(c.shape, s, i, false), d = J({ inputs: { x: c }, backend: t10, attrs: { shape: l } }), h = xt({ inputs: { x: d }, backend: t10, attrs: { perm: m } }), g = J({ inputs: { x: h }, backend: t10, attrs: { shape: f } }); - return u.push(c), u.push(d), u.push(h), u.forEach((y) => t10.disposeIntermediateTensorInfo(y)), g; + let u = [], c = Lw({ inputs: { x: n }, backend: t6, attrs: { paddings: p, constantValue: 0 } }), l = S.getReshaped(c.shape, s, i, false), m = S.getPermuted(l.length, s.length, false), d = S.getReshapedPermuted(c.shape, s, i, false), f = te({ inputs: { x: c }, backend: t6, attrs: { shape: l } }), h = xt({ inputs: { x: f }, backend: t6, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: t6, attrs: { shape: d } }); + return u.push(c), u.push(f), u.push(h), u.forEach((x) => t6.disposeIntermediateTensorInfo(x)), g; }; -var lD = { kernelName: ks, backendName: "webgl", kernelFunc: jZ }; -function XZ(r) { - let { inputs: e, backend: t10 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = e; +var VF = { kernelName: Es, backendName: "webgl", kernelFunc: gZ }; +function xZ(r) { + let { inputs: e, backend: t6 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = e; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -23496,24 +23562,24 @@ function XZ(r) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = t10.readSync(o.dataId), p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), c = t10.readSync(a.dataId)[0], [l, m, f, d, h] = M$(i, o.shape, o.dtype, p, n.dtype, u, c); - return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, f), t10.makeTensorInfo([d.length], "bool", new Uint8Array(d.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; + let i = t6.readSync(o.dataId), p = t6.readSync(n.dataId), u = t6.readSync(s.dataId), c = t6.readSync(a.dataId)[0], [l, m, d, f, h] = m$(i, o.shape, o.dtype, p, n.dtype, u, c); + return [t6.makeTensorInfo(m, o.dtype, l), t6.makeTensorInfo([m[0]], n.dtype, d), t6.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t6.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var mD = { kernelName: Qa, backendName: "webgl", kernelFunc: XZ }; -function YZ(r) { - let { inputs: e, backend: t10 } = r, { inputIndices: o, inputShape: n, newShape: s } = e; +var zF = { kernelName: ui, backendName: "webgl", kernelFunc: xZ }; +function yZ(r) { + let { inputs: e, backend: t6 } = r, { inputIndices: o, inputShape: n, newShape: s } = e; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); if (n.shape.length !== 1) throw new Error(`Input shape should be a vector but received shape ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = Array.from(t10.readSync(n.dataId)), i = t10.readSync(o.dataId), p = Array.from(t10.readSync(s.dataId)), [u, c, l] = L$(i, o.shape, o.dtype, a, p); - return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; + let a = Array.from(t6.readSync(n.dataId)), i = t6.readSync(o.dataId), p = Array.from(t6.readSync(s.dataId)), [u, c, l] = d$(i, o.shape, o.dtype, a, p); + return [t6.makeTensorInfo(c, o.dtype, u), t6.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var fD = { kernelName: ga, backendName: "webgl", kernelFunc: YZ }; -function QZ(r) { - let { inputs: e, backend: t10 } = r, { data: o, indices: n, segmentIds: s } = e; +var WF = { kernelName: wa, backendName: "webgl", kernelFunc: yZ }; +function bZ(r) { + let { inputs: e, backend: t6 } = r, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -23522,12 +23588,12 @@ function QZ(r) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = sh(a, o.shape, o.dtype, i, p, true); - return t10.makeTensorInfo(c, o.dtype, u); + let a = t6.readSync(o.dataId), i = t6.readSync(n.dataId), p = t6.readSync(s.dataId), [u, c] = jf(a, o.shape, o.dtype, i, p, true); + return t6.makeTensorInfo(c, o.dtype, u); } -var dD = { kernelName: Za, backendName: "webgl", kernelFunc: QZ }; -function ZZ(r) { - let { inputs: e, backend: t10 } = r, { data: o, indices: n, segmentIds: s } = e; +var UF = { kernelName: pi, backendName: "webgl", kernelFunc: bZ }; +function CZ(r) { + let { inputs: e, backend: t6 } = r, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -23536,48 +23602,48 @@ function ZZ(r) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = sh(a, o.shape, o.dtype, i, p); - return t10.makeTensorInfo(c, o.dtype, u); + let a = t6.readSync(o.dataId), i = t6.readSync(n.dataId), p = t6.readSync(s.dataId), [u, c] = jf(a, o.shape, o.dtype, i, p); + return t6.makeTensorInfo(c, o.dtype, u); } -var hD = { kernelName: Ja, backendName: "webgl", kernelFunc: ZZ }; -function JZ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = I.calculateShapes(s, n, i), f = false; +var GF = { kernelName: ci, backendName: "webgl", kernelFunc: CZ }; +function SZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = S.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let y = t10.bufferSync(n), b = t10.bufferSync(s), C = x.decodeString(t10.readSync(a.dataId)[0]), w = D$(y, b, i, m, c, u, p, l, C, f); - return t10.makeTensorInfo(i, w.dtype, w.values); + let x = t6.bufferSync(n), b = t6.bufferSync(s), C = y.decodeString(t6.readSync(a.dataId)[0]), w = p$(x, b, i, m, c, u, p, l, C, d); + return t6.makeTensorInfo(i, w.dtype, w.values); } - let d = new vc(u, p, n.shape.length, s.shape.length, l, [m, 1], f), h = t10.runWebGLProgram(d, [s, n, a], s.dtype), g = J({ inputs: { x: h }, backend: t10, attrs: { shape: i } }); - return t10.disposeIntermediateTensorInfo(h), g; + let f = new Cc(u, p, n.shape.length, s.shape.length, l, [m, 1], d), h = t6.runWebGLProgram(f, [s, n, a], s.dtype), g = te({ inputs: { x: h }, backend: t6, attrs: { shape: i } }); + return t6.disposeIntermediateTensorInfo(h), g; } -var gD = { kernelName: ei, backendName: "webgl", kernelFunc: JZ }; -function e9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = x.parseAxisParam(a, n.shape)[0], p = I.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); +var HF = { kernelName: li, backendName: "webgl", kernelFunc: SZ }; +function wZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = S.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); return p.map((m) => { - let f = [...l]; - f[i] = m; - let d = ps({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: f } }); - return c[i] += m, d; + let d = [...l]; + d[i] = m; + let f = cs({ inputs: { x: n }, backend: t6, attrs: { begin: c, size: d } }); + return c[i] += m, f; }); } -var xD = { kernelName: Ts, backendName: "webgl", kernelFunc: e9 }; -var yD = "return sqrt(x);"; -var t9 = he({ opSnippet: yD, packedOpSnippet: yD, cpuKernelImpl: B$ }); -var bD = { kernelName: bo, backendName: "webgl", kernelFunc: t9 }; -var r9 = "return x * x;"; -var o9 = he({ opSnippet: r9 }); -var CD = { kernelName: ti, backendName: "webgl", kernelFunc: o9 }; -var ID = "return (a - b) * (a - b);"; -var n9 = ot({ opSnippet: ID, packedOpSnippet: ID }); -var wD = { kernelName: Co, backendName: "webgl", kernelFunc: n9 }; -function s9({ inputs: r, attrs: e, backend: t10 }) { - let { x: o } = r, n = Vt + ` +var qF = { kernelName: $s, backendName: "webgl", kernelFunc: wZ }; +var KF = "return sqrt(x);"; +var IZ = ge({ opSnippet: KF, packedOpSnippet: KF, cpuKernelImpl: f$ }); +var jF = { kernelName: Gn, backendName: "webgl", kernelFunc: IZ }; +var vZ = "return x * x;"; +var kZ = ge({ opSnippet: vZ }); +var XF = { kernelName: mi, backendName: "webgl", kernelFunc: kZ }; +var YF = "return (a - b) * (a - b);"; +var NZ = tt({ opSnippet: YF, packedOpSnippet: YF }); +var QF = { kernelName: Kn, backendName: "webgl", kernelFunc: NZ }; +function TZ({ inputs: r, attrs: e, backend: t6 }) { + let { x: o } = r, n = Bt + ` return x > 0.0 ? 1.0 : float(${e.alpha}); - `, s = new fr(o.shape, n); - return t10.runWebGLProgram(s, [o], o.dtype); + `, s = new Jt(o.shape, n); + return t6.runWebGLProgram(s, [o], o.dtype); } -var SD = { kernelName: $s, backendName: "webgl", kernelFunc: s9 }; -var Sg = class { - constructor(e, t10, o) { +var ZF = { kernelName: Ds, backendName: "webgl", kernelFunc: TZ }; +var mg = class { + constructor(e, t6, o) { this.variableNames = ["x"], this.outputShape = o; let n = o.length, s = _e(o.length), a = _e(o.length), i = ""; if (n === 1) @@ -23588,7 +23654,7 @@ var Sg = class { } this.userCode = ` ${s} begin = ${s}(${e}); - ${s} strides = ${s}(${t10}); + ${s} strides = ${s}(${t6}); void main() { ${a} coords = getOutputCoords(); @@ -23597,69 +23663,69 @@ var Sg = class { `; } }; -function a9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: f, finalShape: d, isIdentity: h, sliceDim0: g, isSimpleSlice: y, begin: b, end: C, strides: w } = et.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function _Z(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: w } = ut.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = J({ inputs: { x: n }, backend: t10, attrs: { shape: d } }); - else if (g || y) { - x.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let E = et.computeOutShape(b, C, w), R = ps({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: E } }); - k = J({ inputs: { x: R }, backend: t10, attrs: { shape: d } }), t10.disposeIntermediateTensorInfo(R); - } else if (t10.shouldExecuteOnCPU([n])) { - let R = t10.readSync(n.dataId), A = ne(n.shape, n.dtype, R), D = V$(f, A, w, b); - k = t10.makeTensorInfo(d, n.dtype, D.values); + k = te({ inputs: { x: n }, backend: t6, attrs: { shape: f } }); + else if (g || x) { + y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); + let $ = ut.computeOutShape(b, C, w), A = cs({ inputs: { x: n }, backend: t6, attrs: { begin: b, size: $ } }); + k = te({ inputs: { x: A }, backend: t6, attrs: { shape: f } }), t6.disposeIntermediateTensorInfo(A); + } else if (t6.shouldExecuteOnCPU([n])) { + let A = t6.readSync(n.dataId), R = le(n.shape, n.dtype, A), D = h$(d, R, w, b); + k = t6.makeTensorInfo(f, n.dtype, D.values); } else { - let R = new Sg(b, w, f); - k = t10.runWebGLProgram(R, [n], n.dtype); + let A = new mg(b, w, d); + k = t6.runWebGLProgram(A, [n], n.dtype); } - let _ = J({ inputs: { x: k }, backend: t10, attrs: { shape: d } }); - return t10.disposeIntermediateTensorInfo(k), _; + let _ = te({ inputs: { x: k }, backend: t6, attrs: { shape: f } }); + return t6.disposeIntermediateTensorInfo(k), _; } -var vD = { kernelName: Yn, backendName: "webgl", kernelFunc: a9 }; -function i9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.readSync(c.dataId), f = t10.readSync(l.dataId), [d, h] = z$(m, f, n, s, a, i, p, u); - return [t10.makeTensorInfo([d.length], "string", d), t10.makeTensorInfo(l.shape, "int32", h)]; +var JF = { kernelName: jn, backendName: "webgl", kernelFunc: _Z }; +function EZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t6.readSync(c.dataId), d = t6.readSync(l.dataId), [f, h] = g$(m, d, n, s, a, i, p, u); + return [t6.makeTensorInfo([f.length], "string", f), t6.makeTensorInfo(l.shape, "int32", h)]; } -var kD = { kernelName: Ns, backendName: "webgl", kernelFunc: i9 }; -function u9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = e; +var eD = { kernelName: As, backendName: "webgl", kernelFunc: EZ }; +function $Z(r) { + let { inputs: e, backend: t6, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (s.shape.length !== 1) throw new Error(`Input must be a vector, got shape: ${s.shape}`); if (a.shape.length !== 0) throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`); - let i = t10.readSync(s.dataId), p = t10.readSync(a.dataId)[0], [u, c, l] = W$(i, p, n), m = c.length; - return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", c), t10.makeTensorInfo([2], "int32", new Int32Array(l))]; + let i = t6.readSync(s.dataId), p = t6.readSync(a.dataId)[0], [u, c, l] = x$(i, p, n), m = c.length; + return [t6.makeTensorInfo([m, 2], "int32", u), t6.makeTensorInfo([m], "string", c), t6.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var TD = { kernelName: ri, backendName: "webgl", kernelFunc: u9 }; -function p9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { numBuckets: n } = o, { input: s } = e; +var tD = { kernelName: di, backendName: "webgl", kernelFunc: $Z }; +function AZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { numBuckets: n } = o, { input: s } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (n <= 0) throw new Error("Number of buckets must be at least 1"); - let a = t10.readSync(s.dataId), i = U$(a, n); - return t10.makeTensorInfo(s.shape, "int32", i); + let a = t6.readSync(s.dataId), i = y$(a, n); + return t6.makeTensorInfo(s.shape, "int32", i); } -var ND = { kernelName: oi, backendName: "webgl", kernelFunc: p9 }; -var c9 = "return tan(x);"; -var l9 = he({ opSnippet: c9 }); -var _D = { kernelName: xa, backendName: "webgl", kernelFunc: l9 }; -var m9 = ` +var rD = { kernelName: fi, backendName: "webgl", kernelFunc: AZ }; +var RZ = "return tan(x);"; +var FZ = ge({ opSnippet: RZ }); +var oD = { kernelName: Yn, backendName: "webgl", kernelFunc: FZ }; +var DZ = ` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `; -var f9 = he({ opSnippet: m9 }); -var ED = { kernelName: Qn, backendName: "webgl", kernelFunc: f9 }; -var vg = class { - constructor(e, t10) { +var OZ = ge({ opSnippet: DZ }); +var nD = { kernelName: Qn, backendName: "webgl", kernelFunc: OZ }; +var dg = class { + constructor(e, t6) { this.variableNames = ["A"]; let o = new Array(e.length); for (let a = 0; a < o.length; a++) - o[a] = e[a] * t10[a]; + o[a] = e[a] * t6[a]; this.outputShape = o, this.rank = o.length; - let n = _e(this.rank), s = d9(e); + let n = _e(this.rank), s = PZ(e); this.userCode = ` void main() { ${n} resRC = getOutputCoords(); @@ -23668,28 +23734,28 @@ var vg = class { `; } }; -function d9(r) { +function PZ(r) { let e = r.length; if (e > 5) throw Error(`Tile for rank ${e} is not yet supported`); if (e === 1) return `imod(resRC, ${r[0]})`; - let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"], o = []; + let t6 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"], o = []; for (let n = 0; n < r.length; n++) - o.push(`imod(${t10[n]}, ${r[n]})`); + o.push(`imod(${t6[n]}, ${r[n]})`); return o.join(); } -function Hw(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reps: s } = o; +function Vw(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reps: s } = o; if (n.dtype === "string" || n.shape.length > 5) { - let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => x.decodeString(m)) : p, c = ne(n.shape, n.dtype, u), l = H$(c, s); - return t10.makeTensorInfo(l.shape, l.dtype, l.values); + let p = t6.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = le(n.shape, n.dtype, u), l = C$(c, s); + return t6.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new vg(n.shape, s); - return t10.runWebGLProgram(a, [n], n.dtype); + let a = new dg(n.shape, s); + return t6.runWebGLProgram(a, [n], n.dtype); } -var $D = { kernelName: wo, backendName: "webgl", kernelFunc: Hw }; -var kg = class { +var sD = { kernelName: to, backendName: "webgl", kernelFunc: Vw }; +var fg = class { constructor(e) { this.variableNames = ["x", "indices"], this.customUniforms = [{ name: "n", type: "int" }, { name: "firstPass", type: "int" }, { name: "negativeInf", type: "float" }, { name: "dir", type: "int" }, { name: "inc", type: "int" }], this.outputShape = e, this.userCode = ` void main() { @@ -23734,7 +23800,7 @@ var kg = class { `; } }; -var Tg = class { +var hg = class { constructor(e) { this.variableNames = ["x", "indices"], this.customUniforms = [{ name: "n", type: "int" }, { name: "firstPass", type: "int" }, { name: "k", type: "int" }], this.outputShape = e, this.userCode = ` void main() { @@ -23773,55 +23839,55 @@ var Tg = class { `; } }; -function Vu(r, e) { +function Bu(r, e) { e !== null && r.disposeIntermediateTensorInfo(e); } -function RD(r) { +function aD(r) { let e = 1; for (; e < r; ) e *= 2; return e; } -function h9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o, i = P().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = P().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, c = u[u.length - 1]; - if (t10.shouldExecuteOnCPU([n]) || c < i || s > p) { - let D = t10.readSync(n.dataId), [O, M] = q$(D, u, n.dtype, s, a); - return [t10.makeTensorInfo(O.shape, O.dtype, O.values), t10.makeTensorInfo(M.shape, M.dtype, M.values)]; +function MZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o, i = O().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = O().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, c = u[u.length - 1]; + if (t6.shouldExecuteOnCPU([n]) || c < i || s > p) { + let D = t6.readSync(n.dataId), [P, M] = S$(D, u, n.dtype, s, a); + return [t6.makeTensorInfo(P.shape, P.dtype, P.values), t6.makeTensorInfo(M.shape, M.dtype, M.values)]; } if (s === 0) - return u[u.length - 1] = 0, [t10.makeTensorInfo(u, n.dtype, []), t10.makeTensorInfo(u, "int32", [])]; + return u[u.length - 1] = 0, [t6.makeTensorInfo(u, n.dtype, []), t6.makeTensorInfo(u, "int32", [])]; if (c === 1) - return [n, Ba({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t10 })]; - let l = t10.texData.get(n.dataId), m = l !== null && l.isPacked, f = m ? t10.unpackTensor(n) : n, h = x.sizeFromShape(u) / c, g = J({ inputs: { x: f }, attrs: { shape: [h, c] }, backend: t10 }); - m && Vu(t10, f); - let y = RD(s), b = RD(c), C = null, w = () => C === null ? [g, g] : [g, C], k = (D, O, M) => { - let L = w(), W = new kg(M), G = [[c], [C === null ? 1 : 0], [Number.NEGATIVE_INFINITY], [D], [O]], q = C; - C = t10.runWebGLProgram(W, L, "int32", G), Vu(t10, q); + return [n, Ga({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t6 })]; + let l = t6.texData.get(n.dataId), m = l !== null && l.isPacked, d = m ? t6.unpackTensor(n) : n, h = y.sizeFromShape(u) / c, g = te({ inputs: { x: d }, attrs: { shape: [h, c] }, backend: t6 }); + m && Bu(t6, d); + let x = aD(s), b = aD(c), C = null, w = () => C === null ? [g, g] : [g, C], k = (D, P, M) => { + let L = w(), W = new fg(M), U = [[c], [C === null ? 1 : 0], [Number.NEGATIVE_INFINITY], [D], [P]], q = C; + C = t6.runWebGLProgram(W, L, "int32", U), Bu(t6, q); }; - for (let D = 1; D < y; D *= 2) { - let O = D * 2; + for (let D = 1; D < x; D *= 2) { + let P = D * 2; for (let M = D; M >= 1; M /= 2) - k(O, M, [h, b]); + k(P, M, [h, b]); } - for (let D = b; D > y; D /= 2) { - let O = w(), M = new Tg([h, D / 2]), W = [[c], [C === null ? 1 : 0], [y]], V = C; - C = t10.runWebGLProgram(M, O, "int32", W), Vu(t10, V); - let G = y / 2, q = G * 2; - for (let H = G; H >= 1; H /= 2) + for (let D = b; D > x; D /= 2) { + let P = w(), M = new hg([h, D / 2]), W = [[c], [C === null ? 1 : 0], [x]], V = C; + C = t6.runWebGLProgram(M, P, "int32", W), Bu(t6, V); + let U = x / 2, q = U * 2; + for (let H = U; H >= 1; H /= 2) k(q, H, C.shape); } let _ = C; - C = ps({ inputs: { x: C }, backend: t10, attrs: { begin: 0, size: [h, s] } }), Vu(t10, _); - let E = Lw({ inputs: { x: g, indices: C }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); - Vu(t10, g); - let R = u.slice(0, -1); - R.push(s), _ = C, C = J({ inputs: { x: C }, attrs: { shape: R }, backend: t10 }), Vu(t10, _); - let A = E; - return E = J({ inputs: { x: E }, attrs: { shape: R }, backend: t10 }), Vu(t10, A), [E, C]; + C = cs({ inputs: { x: C }, backend: t6, attrs: { begin: 0, size: [h, s] } }), Bu(t6, _); + let $ = Fw({ inputs: { x: g, indices: C }, backend: t6, attrs: { axis: 1, batchDims: 1 } }); + Bu(t6, g); + let A = u.slice(0, -1); + A.push(s), _ = C, C = te({ inputs: { x: C }, attrs: { shape: A }, backend: t6 }), Bu(t6, _); + let R = $; + return $ = te({ inputs: { x: $ }, attrs: { shape: A }, backend: t6 }), Bu(t6, R), [$, C]; } -var AD = { kernelName: Zn, backendName: "webgl", kernelFunc: h9 }; -var Ng = class { - constructor(e, t10, o, n, s, a) { +var iD = { kernelName: Zn, backendName: "webgl", kernelFunc: MZ }; +var gg = class { + constructor(e, t6, o, n, s, a) { this.variableNames = ["Image", "Transforms"], this.outputShape = a; let i = o === "nearest" ? 1 : 2, p; switch (n) { @@ -23895,7 +23961,7 @@ var Ng = class { float readWithFillValue(int batch, int coordY, int coordX, int channel) { float outputValue; - if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t10}) { + if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t6}) { outputValue = getImage(batch, coordY, coordX, channel); } else { outputValue = float(${s}); @@ -23926,7 +23992,7 @@ var Ng = class { } else { float inX = (a1 * xf + a2 * yf + a3) / projection; float inY = (b1 * xf + b2 * yf + b3) / projection; - float mapX = mapCoord(inX, float(${t10})); + float mapX = mapCoord(inX, float(${t6})); float mapY = mapCoord(inY, float(${e})); if (${i} == 1) { @@ -23956,50 +24022,50 @@ var Ng = class { `; } }; -function g9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, f] = n.shape, [d, h] = u != null ? u : [l, m], g = [c, d, h, f], y = new Ng(l, m, a, i, p, g); - return t10.runWebGLProgram(y, [n, s], "float32"); +function LZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new gg(l, m, a, i, p, g); + return t6.runWebGLProgram(x, [n, s], "float32"); } -var FD = { kernelName: Jn, backendName: "webgl", kernelFunc: g9 }; -function x9(r) { - let { inputs: e, attrs: t10, backend: o } = r, { axis: n } = t10, { x: s } = e; - as(s, "unique"), console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); - let a = o.readSync(s.dataId), { outputValues: i, outputShape: p, indices: u } = K$(a, n, s.shape, s.dtype); +var uD = { kernelName: Jn, backendName: "webgl", kernelFunc: LZ }; +function BZ(r) { + let { inputs: e, attrs: t6, backend: o } = r, { axis: n } = t6, { x: s } = e; + is(s, "unique"), console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); + let a = o.readSync(s.dataId), { outputValues: i, outputShape: p, indices: u } = w$(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var DD = { kernelName: $p, backendName: "webgl", kernelFunc: x9 }; -function y9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { value: n } = e, { axis: s } = o; +var pD = { kernelName: kp, backendName: "webgl", kernelFunc: BZ }; +function VZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), c = 0; for (let h = 0; h < i; h++) h !== s && (u[c++] = a.shape[h]); - let l = [], m = new Array(i).fill(0), f = a.shape.slice(); - f[s] = 1; - let d = new Array(p); - for (let h = 0; h < d.length; h++) { + let l = [], m = new Array(i).fill(0), d = a.shape.slice(); + d[s] = 1; + let f = new Array(p); + for (let h = 0; h < f.length; h++) { m[s] = h; - let g = ps({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: f } }), y = J({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); - d[h] = y, l.push(g); + let g = cs({ inputs: { x: a }, backend: t6, attrs: { begin: m, size: d } }), x = te({ inputs: { x: g }, backend: t6, attrs: { shape: u } }); + f[h] = x, l.push(g); } - return l.forEach((h) => t10.disposeIntermediateTensorInfo(h)), d; + return l.forEach((h) => t6.disposeIntermediateTensorInfo(h)), f; } -var PD = { kernelName: _s, backendName: "webgl", kernelFunc: y9 }; -var _g = class { - constructor(e, t10) { +var cD = { kernelName: Rs, backendName: "webgl", kernelFunc: VZ }; +var xg = class { + constructor(e, t6) { this.variableNames = ["x", "segmentIds"]; let o = e.windowSize, n = e.batchSize, s = e.inSize, a = e.numSegments, i = a * Math.ceil(s / o); this.outputShape = [n, i]; let p = "0.0", u = "sumValue", c = Math.floor(o / 4) * 4, l = o % 4, m = ` sumValue += dot(values, segFilter); - `, f = ""; - s % o > 0 && (f = ` + `, d = ""; + s % o > 0 && (d = ` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } `); - let d = ""; - s % o > 0 && (d = ` + let f = ""; + s % o > 0 && (f = ` if (inIdx < 0 || inIdx >= ${s}) { return -1.0; } @@ -24007,12 +24073,12 @@ var _g = class { const float initializationValue = ${p}; float getValue(int batch, int inIdx) { - ${f} + ${d} return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { - ${d} + ${f} return getSegmentIds(inIdx); } @@ -24102,961 +24168,963 @@ var _g = class { `; } }; -function b9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = I.getAxesPermutation([u], i), l = n; - c != null && (l = xt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), p.push(l), u = I.getInnerMostAxes(1, i)[0]); - let m = I.segment_util.computeOutShape(l.shape, u, a), f = x.sizeFromShape([l.shape[u]]), d = J({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, f] } }); - p.push(d); - let h = Ca(n.dtype), g = (w, k, _, E, R) => { - let A = w.shape[0], D = w.shape[1], O = I.segment_util.segOpComputeOptimalWindowSize(D, R), M = { windowSize: O, inSize: D, batchSize: A, numSegments: R }, L = new _g(M, k), W = t10.compileAndRun(L, [w, _], E); - if (p.push(W), W.shape[1] === R) +function zZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = S.getAxesPermutation([u], i), l = n; + c != null && (l = xt({ inputs: { x: n }, backend: t6, attrs: { perm: c } }), p.push(l), u = S.getInnerMostAxes(1, i)[0]); + let m = S.segment_util.computeOutShape(l.shape, u, a), d = y.sizeFromShape([l.shape[u]]), f = te({ inputs: { x: l }, backend: t6, attrs: { shape: [-1, d] } }); + p.push(f); + let h = ka(n.dtype), g = (w, k, _, $, A) => { + let R = w.shape[0], D = w.shape[1], P = S.segment_util.segOpComputeOptimalWindowSize(D, A), M = { windowSize: P, inSize: D, batchSize: R, numSegments: A }, L = new xg(M, k), W = t6.compileAndRun(L, [w, _], $); + if (p.push(W), W.shape[1] === A) return W; - let V = Gw({ backend: t10, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), G = Hw({ inputs: { x: V }, backend: t10, attrs: { reps: [D / O] } }); - return p.push(V), p.push(G), g(W, k, G, E, R); - }, y = g(d, "unsortedSegmentSum", s, h, a), b = J({ inputs: { x: y }, backend: t10, attrs: { shape: m } }), C = b; + let V = Bw({ backend: t6, attrs: { start: 0, stop: A, step: 1, dtype: "float32" } }), U = Vw({ inputs: { x: V }, backend: t6, attrs: { reps: [D / P] } }); + return p.push(V), p.push(U), g(W, k, U, $, A); + }, x = g(f, "unsortedSegmentSum", s, h, a), b = te({ inputs: { x }, backend: t6, attrs: { shape: m } }), C = b; if (c != null) { p.push(b); - let w = I.getUndoAxesPermutation(c); - C = xt({ inputs: { x: C }, backend: t10, attrs: { perm: w } }); + let w = S.getUndoAxesPermutation(c); + C = xt({ inputs: { x: C }, backend: t6, attrs: { perm: w } }); } - return p.forEach((w) => t10.disposeIntermediateTensorInfo(w)), C; + return p.forEach((w) => t6.disposeIntermediateTensorInfo(w)), C; } -var OD = { kernelName: Rp, backendName: "webgl", kernelFunc: b9 }; -var C9 = [IR, SR, vR, kR, NR, _R, ER, $R, FR, DR, PR, OR, MR, LR, BR, VR, zR, WR, UR, GR, HR, KR, jR, XR, JR, tA, rA, lR, nA, aA, iA, uA, pA, cA, lA, mA, fA, dA, hA, yA, bA, CA, IA, wA, SA, vA, kA, TA, NA, _A, EA, $A, RA, AA, FA, PA, OA, MA, LA, VA, zA, WA, UA, GA, HA, qA, KA, jA, cR, XA, sA, YA, QA, ZA, mR, JA, eF, tF, rF, oF, nF, sF, aF, iF, uF, cF, lF, mF, fF, dF, hF, xF, bF, CF, IF, wF, SF, _F, hR, EF, $F, RF, AF, YR, FF, OF, MF, LF, BF, fR, VF, zF, WF, UF, GF, QR, vF, HF, qF, KF, xR, jF, XF, YF, QF, ZF, JF, eD, tD, rD, oD, nD, sD, aD, iD, uD, pD, qR, NF, cD, lD, mD, fD, dD, hD, gD, xD, bD, CD, wD, SD, vD, kD, TD, ND, TF, bR, _D, ED, $D, AD, FD, CR, DD, PD, OD, DF]; -for (let r of C9) - ya(r); -var Ae; +var lD = { kernelName: Np, backendName: "webgl", kernelFunc: zZ }; +var WZ = [Y$, Z$, J$, eA, rA, oA, nA, sA, uA, pA, cA, lA, mA, dA, fA, hA, gA, xA, yA, bA, CA, wA, IA, vA, _A, $A, AA, V$, FA, OA, PA, MA, LA, BA, VA, zA, WA, UA, GA, KA, jA, XA, YA, QA, ZA, JA, eR, tR, rR, oR, nR, sR, aR, iR, uR, cR, lR, mR, dR, hR, gR, xR, yR, bR, CR, SR, wR, IR, B$, vR, DA, kR, NR, TR, z$, _R, ER, $R, AR, RR, FR, DR, OR, PR, MR, BR, VR, zR, WR, UR, GR, qR, jR, XR, YR, QR, ZR, oF, G$, nF, sF, aF, iF, kA, uF, lF, mF, dF, fF, W$, hF, gF, xF, yF, bF, NA, JR, CF, SF, wF, q$, IF, vF, kF, NF, TF, _F, EF, $F, AF, RF, FF, DF, OF, PF, MF, LF, SA, rF, BF, VF, zF, WF, UF, GF, HF, qF, jF, XF, QF, ZF, JF, eD, tD, rD, tF, j$, oD, nD, sD, iD, uD, X$, pD, cD, lD, pF]; +for (let r of WZ) + Ia(r); +var Fe; (function(r) { r[r.float32 = 0] = "float32", r[r.int32 = 1] = "int32", r[r.bool = 2] = "bool", r[r.string = 3] = "string", r[r.complex64 = 4] = "complex64"; -})(Ae || (Ae = {})); -var $i; +})(Fe || (Fe = {})); +var Wi; (function(r) { r[r.linear = 0] = "linear", r[r.relu = 1] = "relu", r[r.relu6 = 2] = "relu6", r[r.prelu = 3] = "prelu", r[r.leakyrelu = 4] = "leakyrelu", r[r.sigmoid = 5] = "sigmoid", r[r.elu = 6] = "elu"; -})($i || ($i = {})); -var MD; -function I9(r) { - MD = r.wasm.cwrap(Fo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); +})(Wi || (Wi = {})); +var mD; +function UZ(r) { + mD = r.wasm.cwrap(fo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function w9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e; +function GZ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e; if (n.dtype !== "float32" || s.dtype !== "float32") throw new Error("_FusedMatMul for non non-float32 tensors not yet supported."); - let { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m = t10.dataIdMap.get(n.dataId).id, f = t10.dataIdMap.get(s.dataId).id, d = 0; + let { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m = t6.dataIdMap.get(n.dataId).id, d = t6.dataIdMap.get(s.dataId).id, f = 0; if (a != null) { - let R = t10.dataIdMap.get(a.dataId); - if (R.shape.length !== 1) - throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`); - d = R.id; + let A = t6.dataIdMap.get(a.dataId); + if (A.shape.length !== 1) + throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${A.shape.length}.`); + f = A.id; } - let h = i == null ? 0 : t10.dataIdMap.get(i.dataId).id, g = $i[c]; + let h = i == null ? 0 : t6.dataIdMap.get(i.dataId).id, g = Wi[c]; if (g == null) throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`); - let y = p ? n.shape[2] : n.shape[1], b = u ? s.shape[1] : s.shape[2], C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), w = t10.makeOutput([...C, y, b], n.dtype), k = t10.dataIdMap.get(w.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), E = new Uint8Array(new Int32Array(s.shape).buffer); - return MD(m, _, n.shape.length, f, E, s.shape.length, p, u, g, d, h, l || 0, k), w; + let x = p ? n.shape[2] : n.shape[1], b = u ? s.shape[1] : s.shape[2], C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), w = t6.makeOutput([...C, x, b], n.dtype), k = t6.dataIdMap.get(w.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), $ = new Uint8Array(new Int32Array(s.shape).buffer); + return mD(m, _, n.shape.length, d, $, s.shape.length, p, u, g, f, h, l || 0, k), w; } -var LD = { kernelName: Fo, backendName: "wasm", setupFunc: I9, kernelFunc: w9 }; -function Qe(r, e) { - let t10; +var dD = { kernelName: fo, backendName: "wasm", setupFunc: UZ, kernelFunc: GZ }; +function Ve(r, e) { + let t6; function o(s) { - t10 = s.wasm.cwrap(r, null, ["number", "number", "number"]); + t6 = s.wasm.cwrap(r, null, ["number", "number", "number"]); } function n(s) { let { backend: a, inputs: { x: i } } = s, p = a.dataIdMap.get(i.dataId).id, u = a.makeOutput(i.shape, e || i.dtype), c = a.dataIdMap.get(u.dataId).id; - return x.sizeFromShape(u.shape) === 0 || t10(p, Ae[i.dtype], c), u; + return y.sizeFromShape(u.shape) === 0 || t6(p, Fe[i.dtype], c), u; } return { kernelName: r, backendName: "wasm", setupFunc: o, kernelFunc: n }; } -var BD = Qe(sn); -function nt(r, e, t10) { +var fD = Ve(gs); +function rt(r, e, t6) { let o; function n(a) { o = a.wasm.cwrap(r, null, ["number", "array", "number", "number", "array", "number", "number", "number"]); } function s(a) { - let { backend: i, inputs: p } = a, { a: u, b: c } = p, l = i.dataIdMap.get(u.dataId).id, m = i.dataIdMap.get(c.dataId).id, f = t10 != null ? t10 : u.dtype, d = I.assertAndGetBroadcastShape(u.shape, c.shape), h = i.makeOutput(d, f); - if (x.sizeFromShape(d) === 0) + let { backend: i, inputs: p } = a, { a: u, b: c } = p, l = i.dataIdMap.get(u.dataId).id, m = i.dataIdMap.get(c.dataId).id, d = t6 != null ? t6 : u.dtype, f = S.assertAndGetBroadcastShape(u.shape, c.shape), h = i.makeOutput(f, d); + if (y.sizeFromShape(f) === 0) return h; - let g = new Uint8Array(new Int32Array(u.shape).buffer), y = new Uint8Array(new Int32Array(c.shape).buffer), b = i.dataIdMap.get(h.dataId).id; - return (() => o(l, g, u.shape.length, m, y, c.shape.length, Ae[u.dtype], b))(), h; + let g = new Uint8Array(new Int32Array(u.shape).buffer), x = new Uint8Array(new Int32Array(c.shape).buffer), b = i.dataIdMap.get(h.dataId).id; + return (() => o(l, g, u.shape.length, m, x, c.shape.length, Fe[u.dtype], b))(), h; } return { kernelName: r, backendName: "wasm", setupFunc: n, kernelFunc: s }; } -var S9 = true; -var VD = nt(_r, S9); -var zD; -function v9(r) { - zD = r.wasm.cwrap(an, null, ["array", "number", "number", "number"]); +var HZ = true; +var hD = rt(eo, HZ); +var gD; +function qZ(r) { + gD = r.wasm.cwrap(Mo, null, ["array", "number", "number", "number"]); } -function k9(r) { - let { inputs: e, backend: t10 } = r, o = t10.makeOutput(e[0].shape, e[0].dtype); - if (x.sizeFromShape(o.shape) === 0) +function KZ(r) { + let { inputs: e, backend: t6 } = r, o = t6.makeOutput(e[0].shape, e[0].dtype); + if (y.sizeFromShape(o.shape) === 0) return o; - let n = e.map((i) => t10.dataIdMap.get(i.dataId).id), s = new Uint8Array(new Int32Array(n).buffer), a = t10.dataIdMap.get(o.dataId).id; - return zD(s, n.length, Ae[o.dtype], a), o; + let n = e.map((i) => t6.dataIdMap.get(i.dataId).id), s = new Uint8Array(new Int32Array(n).buffer), a = t6.dataIdMap.get(o.dataId).id; + return gD(s, n.length, Fe[o.dtype], a), o; } -var WD = { kernelName: an, backendName: "wasm", setupFunc: v9, kernelFunc: k9 }; -function zu(r) { - let { inputs: { x: e }, backend: t10 } = r; +var xD = { kernelName: Mo, backendName: "wasm", setupFunc: qZ, kernelFunc: KZ }; +function Vu(r) { + let { inputs: { x: e }, backend: t6 } = r; if (e.dtype === "string") - return nr(t10.readSync(e.dataId), e.shape, e.dtype); - let o = t10.makeOutput(e.shape, e.dtype), n = t10.typedArrayFromHeap(e); - return t10.typedArrayFromHeap(o).set(n), o; + return nr(t6.readSync(e.dataId), e.shape, e.dtype); + let o = t6.makeOutput(e.shape, e.dtype), n = t6.typedArrayFromHeap(e); + return t6.typedArrayFromHeap(o).set(n), o; } -var UD = { kernelName: uo, backendName: "wasm", kernelFunc: zu }; -var GD; -function T9(r) { - GD = r.wasm.cwrap(Mr, null, ["number", "array", "number", "number", "number", "array", "number"]); +var yD = { kernelName: mo, backendName: "wasm", kernelFunc: Vu }; +var bD; +function jZ(r) { + bD = r.wasm.cwrap(ro, null, ["number", "array", "number", "number", "number", "array", "number"]); } -function Eo(r) { - let { inputs: e, backend: t10, attrs: o } = r, [n, s] = _9(e.x.shape, o.perm), a = true; - for (let d = 0; d < s.length; d++) - s[d] !== d && (a = false); - let i = N9(e.x.shape, o.perm), p = { dataId: e.x.dataId, shape: n, dtype: e.x.dtype }; +function uo(r) { + let { inputs: e, backend: t6, attrs: o } = r, [n, s] = YZ(e.x.shape, o.perm), a = true; + for (let f = 0; f < s.length; f++) + s[f] !== f && (a = false); + let i = XZ(e.x.shape, o.perm), p = { dataId: e.x.dataId, shape: n, dtype: e.x.dtype }; if (a) { - let d = zu({ inputs: e, backend: t10 }); - return d.shape = i, d; + let f = Vu({ inputs: e, backend: t6 }); + return f.shape = i, f; } - let u = t10.makeOutput(i, p.dtype), c = t10.dataIdMap.get(p.dataId).id, l = t10.dataIdMap.get(u.dataId).id, m = new Uint8Array(new Int32Array(s).buffer), f = new Uint8Array(new Int32Array(p.shape).buffer); - return GD(c, f, p.shape.length, Ae[p.dtype], l, m, s.length), u; + let u = t6.makeOutput(i, p.dtype), c = t6.dataIdMap.get(p.dataId).id, l = t6.dataIdMap.get(u.dataId).id, m = new Uint8Array(new Int32Array(s).buffer), d = new Uint8Array(new Int32Array(p.shape).buffer); + return bD(c, d, p.shape.length, Fe[p.dtype], l, m, s.length), u; } -function N9(r, e) { - let t10 = new Array(r.length); - for (let o = 0; o < t10.length; o++) - t10[o] = r[e[o]]; - return t10; +function XZ(r, e) { + let t6 = new Array(r.length); + for (let o = 0; o < t6.length; o++) + t6[o] = r[e[o]]; + return t6; } -function _9(r, e) { - let t10 = [], o = []; +function YZ(r, e) { + let t6 = [], o = []; for (let n = 0; n < r.length; ++n) - r[n] !== 1 && t10.push(r[n]), r[e[n]] !== 1 && o.push(e[n]); + r[n] !== 1 && t6.push(r[n]), r[e[n]] !== 1 && o.push(e[n]); for (let n = 0; n < o.length; ++n) { let s = -1; for (let a = 0; a < o.length; ++a) o[a] >= n && (s === -1 || o[s] > o[a]) && (s = a); o[s] = n; } - return [t10, o]; + return [t6, o]; } -var HD = { kernelName: Mr, backendName: "wasm", kernelFunc: Eo, setupFunc: T9 }; -function kr(r, e, t10) { - let o = r.shape, n = r.shape.length, s = x.parseAxisParam(e, o), a = s, i = I.getAxesPermutation(a, n), p = null, u = false; +var CD = { kernelName: ro, backendName: "wasm", kernelFunc: uo, setupFunc: jZ }; +function kr(r, e, t6) { + let o = r.shape, n = r.shape.length, s = y.parseAxisParam(e, o), a = s, i = S.getAxesPermutation(a, n), p = null, u = false; if (i != null) { let c = new Array(n); - for (let f = 0; f < c.length; f++) - c[f] = o[i[f]]; - a = I.getInnerMostAxes(a.length, n), p = Eo({ inputs: { x: r }, attrs: { perm: i }, backend: t10 }); - let l = t10.dataIdMap.get(r.dataId).id; - t10.dataIdMap.get(p.dataId).id !== l && (u = true); + for (let d = 0; d < c.length; d++) + c[d] = o[i[d]]; + a = S.getInnerMostAxes(a.length, n), p = uo({ inputs: { x: r }, attrs: { perm: i }, backend: t6 }); + let l = t6.dataIdMap.get(r.dataId).id; + t6.dataIdMap.get(p.dataId).id !== l && (u = true); } return { transposed: p, originalAxes: s, axes: a, inputWasTransposed: u }; } -var qD; -function E9(r) { - qD = r.wasm.cwrap(oa, null, ["number, number, number"]); +var SD; +function QZ(r) { + SD = r.wasm.cwrap(Lo, null, ["number, number, number"]); } -function $9(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e); - if (f) { +function ZZ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e); + if (d) { let C = e.dataIdMap.get(c.dataId).id; u = c, p = C; } - let d = u.shape.length; - I.assertAxesAreInnerMostDims("all", l, d); - let [h, g] = I.computeOutAndReduceShapes(u.shape, l), y = x.sizeFromShape(g), b = e.makeOutput(h, a.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + let f = u.shape.length; + S.assertAxesAreInnerMostDims("all", l, f); + let [h, g] = S.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - qD(p, y, C); + SD(p, x, C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var KD = { kernelName: oa, backendName: "wasm", setupFunc: E9, kernelFunc: $9 }; -var jD; -function R9(r) { - jD = r.wasm.cwrap(na, null, ["number, number, number"]); +var wD = { kernelName: Lo, backendName: "wasm", setupFunc: QZ, kernelFunc: ZZ }; +var ID; +function JZ(r) { + ID = r.wasm.cwrap(Bo, null, ["number, number, number"]); } -function A9(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e); - if (f) { +function e9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e); + if (d) { let C = e.dataIdMap.get(c.dataId).id; u = c, p = C; } - let d = u.shape.length; - I.assertAxesAreInnerMostDims("any", l, d); - let [h, g] = I.computeOutAndReduceShapes(u.shape, l), y = x.sizeFromShape(g), b = e.makeOutput(h, a.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + let f = u.shape.length; + S.assertAxesAreInnerMostDims("any", l, f); + let [h, g] = S.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - jD(p, y, C); + ID(p, x, C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var XD = { kernelName: na, backendName: "wasm", setupFunc: R9, kernelFunc: A9 }; -var YD; -function F9(r) { - YD = r.wasm.cwrap(un, null, ["number", "number", "number", "number", "number"]); +var vD = { kernelName: Bo, backendName: "wasm", setupFunc: JZ, kernelFunc: e9 }; +var kD; +function t9(r) { + kD = r.wasm.cwrap(Vo, null, ["number", "number", "number", "number", "number"]); } -function D9(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n } = o, { x: s } = t10, a = e.dataIdMap.get(s.dataId).id, i = a, p = s, { transposed: u, axes: c, inputWasTransposed: l } = kr(s, n, e); +function r9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n } = o, { x: s } = t6, a = e.dataIdMap.get(s.dataId).id, i = a, p = s, { transposed: u, axes: c, inputWasTransposed: l } = kr(s, n, e); if (l) { - let y = e.dataIdMap.get(u.dataId).id; - y !== a && (p = u, i = y); + let x = e.dataIdMap.get(u.dataId).id; + x !== a && (p = u, i = x); } - let m = p.shape.slice(0, -1), f = e.makeOutput(m, "int32"), d = e.dataIdMap.get(f.dataId).id, h = x.sizeFromShape(f.shape), g = p.shape[c[0]]; - return YD(i, Ae[p.dtype], h, g, d), l && e.disposeData(u.dataId), f; + let m = p.shape.slice(0, -1), d = e.makeOutput(m, "int32"), f = e.dataIdMap.get(d.dataId).id, h = y.sizeFromShape(d.shape), g = p.shape[c[0]]; + return kD(i, Fe[p.dtype], h, g, f), l && e.disposeData(u.dataId), d; } -var QD = { kernelName: un, backendName: "wasm", kernelFunc: D9, setupFunc: F9 }; -var ZD; -function P9(r) { - ZD = r.wasm.cwrap(pn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var ND = { kernelName: Vo, backendName: "wasm", kernelFunc: r9, setupFunc: t9 }; +var TD; +function o9(r) { + TD = r.wasm.cwrap(zo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function O9(r) { - let { inputs: e, attrs: t10, backend: o } = r, n = e.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, c = I.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, f = c.padInfo.top, d = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, y = c.strideHeight, b = c.strideWidth, C = c.inChannels; +function n9(r) { + let { inputs: e, attrs: t6, backend: o } = r, n = e.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t6, c = S.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, d = c.padInfo.top, f = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, x = c.strideHeight, b = c.strideWidth, C = c.inChannels; if (c.dataFormat !== "channelsLast") throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`); if (c.dilationWidth !== 1 || c.dilationHeight !== 1) throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${c.dilationHeight}, ${c.dilationWidth}].`); let w = o.makeOutput(c.outShape, "float32"), k = o.dataIdMap.get(w.dataId).id; - return ZD(s, n.shape[0], n.shape[1], n.shape[2], l, m, f, d, h, g, y, b, C, k), w; + return TD(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, k), w; } -var JD = { kernelName: pn, backendName: "wasm", setupFunc: P9, kernelFunc: O9 }; +var _D = { kernelName: zo, backendName: "wasm", setupFunc: o9, kernelFunc: n9 }; function Mt(r) { - let { inputs: e, attrs: t10 } = r, { x: o } = e, { shape: n } = t10, s = x.sizeFromShape(o.shape), a = x.inferFromImplicitShape(n, s); - return x.assert(s === x.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; + let { inputs: e, attrs: t6 } = r, { x: o } = e, { shape: n } = t6, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s); + return y.assert(s === y.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; } -var eP = { kernelName: Ss, backendName: "wasm", kernelFunc: Mt }; -var tP; -function M9(r) { - tP = r.wasm.cwrap(cn, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); +var ED = { kernelName: Ns, backendName: "wasm", kernelFunc: Mt }; +var $D; +function s9(r) { + $D = r.wasm.cwrap(Wo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); } -function L9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; +function a9(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; if (n.dtype !== "float32" || s.dtype !== "float32") throw new Error("BatchMatMul for non non-float32 tensors not yet supported."); - let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], f = i ? s.shape[u - 2] : s.shape[u - 1], d = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = x.sizeFromShape(d), y = x.sizeFromShape(h), C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, f]); - x.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); - let w = a ? [g, c, m] : [g, m, c], k = i ? [y, f, l] : [y, l, f], _ = Mt({ inputs: { x: n }, backend: t10, attrs: { shape: w } }), E = Mt({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = t10.dataIdMap.get(_.dataId).id, A = t10.dataIdMap.get(E.dataId).id, D = a ? _.shape[2] : _.shape[1], O = i ? E.shape[1] : E.shape[2], M = Math.max(g, y), L = t10.makeOutput([M, D, O], _.dtype), W = t10.dataIdMap.get(L.dataId).id, V = new Uint8Array(new Int32Array(_.shape).buffer), G = new Uint8Array(new Int32Array(E.shape).buffer); - return tP(R, V, _.shape.length, A, G, E.shape.length, a, i, W), t10.disposeData(_.dataId), t10.disposeData(E.dataId), L.shape = C, L; + let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), C = br.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + y.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); + let w = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = Mt({ inputs: { x: n }, backend: t6, attrs: { shape: w } }), $ = Mt({ inputs: { x: s }, backend: t6, attrs: { shape: k } }), A = t6.dataIdMap.get(_.dataId).id, R = t6.dataIdMap.get($.dataId).id, D = a ? _.shape[2] : _.shape[1], P = i ? $.shape[1] : $.shape[2], M = Math.max(g, x), L = t6.makeOutput([M, D, P], _.dtype), W = t6.dataIdMap.get(L.dataId).id, V = new Uint8Array(new Int32Array(_.shape).buffer), U = new Uint8Array(new Int32Array($.shape).buffer); + return $D(A, V, _.shape.length, R, U, $.shape.length, a, i, W), t6.disposeData(_.dataId), t6.disposeData($.dataId), L.shape = C, L; } -var rP = { kernelName: cn, backendName: "wasm", setupFunc: M9, kernelFunc: L9 }; -function Xo(r) { - let { inputs: { x: e }, attrs: { begin: t10, size: o }, backend: n } = r, [s, a] = et.parseSliceParams(e, t10, o), i = et.isSliceContinous(e.shape, s, a), p = n.readSync(e.dataId), u = n.makeOutput(a, e.dtype), c = x.computeStrides(e.shape), l = n.dataIdMap.get(u.dataId); +var AD = { kernelName: Wo, backendName: "wasm", setupFunc: s9, kernelFunc: a9 }; +function Eo(r) { + let { inputs: { x: e }, attrs: { begin: t6, size: o }, backend: n } = r, [s, a] = ut.parseSliceParams(e, t6, o), i = ut.isSliceContinous(e.shape, s, a), p = n.readSync(e.dataId), u = n.makeOutput(a, e.dtype), c = y.computeStrides(e.shape), l = n.dataIdMap.get(u.dataId); if (i) { - let d = et.computeFlatOffset(s, c); - return e.dtype === "string" ? l.stringBytes = p.slice(d, d + x.sizeFromShape(a)) : n.typedArrayFromHeap(u).set(p.subarray(d, d + x.sizeFromShape(a))), u; + let f = ut.computeFlatOffset(s, c); + return e.dtype === "string" ? l.stringBytes = p.slice(f, f + y.sizeFromShape(a)) : n.typedArrayFromHeap(u).set(p.subarray(f, f + y.sizeFromShape(a))), u; } if (e.dtype === "string") { - let d = vu(p, s, a, e.shape, e.dtype); - return l.stringBytes = d, u; + let f = vu(p, s, a, e.shape, e.dtype); + return l.stringBytes = f, u; } - let m = n.typedArrayFromHeap(u), f = e.shape.length; - if (f === 2) - B9(p, c[0], m, s, a); - else if (f === 3) - V9(p, c[0], c[1], m, s, a); - else if (f === 4) - z9(p, c[0], c[1], c[2], m, s, a); + let m = n.typedArrayFromHeap(u), d = e.shape.length; + if (d === 2) + i9(p, c[0], m, s, a); + else if (d === 3) + u9(p, c[0], c[1], m, s, a); + else if (d === 4) + p9(p, c[0], c[1], c[2], m, s, a); else { - let d = vu(p, s, a, e.shape, e.dtype); - m.set(d); + let f = vu(p, s, a, e.shape, e.dtype); + m.set(f); } return u; } -function B9(r, e, t10, o, n) { +function i9(r, e, t6, o, n) { let s = 0, a = o[0], i = o[1], p = a + n[0]; for (let u = a; u < p; u++) { let c = u * e + i; - t10.set(r.subarray(c, c + n[1]), s), s += n[1]; + t6.set(r.subarray(c, c + n[1]), s), s += n[1]; } } -function V9(r, e, t10, o, n, s) { +function u9(r, e, t6, o, n, s) { let a = 0, i = n[0], p = n[1], u = n[2], c = i + s[0], l = p + s[1]; for (let m = i; m < c; m++) - for (let f = p; f < l; f++) { - let d = m * e + f * t10 + u; - o.set(r.subarray(d, d + s[2]), a), a += s[2]; + for (let d = p; d < l; d++) { + let f = m * e + d * t6 + u; + o.set(r.subarray(f, f + s[2]), a), a += s[2]; } } -function z9(r, e, t10, o, n, s, a) { - let i = 0, p = s[0], u = s[1], c = s[2], l = p + a[0], m = u + a[1], f = c + a[2], d = s[3]; +function p9(r, e, t6, o, n, s, a) { + let i = 0, p = s[0], u = s[1], c = s[2], l = p + a[0], m = u + a[1], d = c + a[2], f = s[3]; for (let h = p; h < l; h++) for (let g = u; g < m; g++) - for (let y = c; y < f; y++) { - let b = h * e + g * t10 + y * o + d; + for (let x = c; x < d; x++) { + let b = h * e + g * t6 + x * o + f; n.set(r.subarray(b, b + a[3]), i), i += a[3]; } } -var oP = { kernelName: qn, backendName: "wasm", kernelFunc: Xo }; -function W9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o, i = s.reduce((y, b) => y * b), p = I.getReshaped(n.shape, s, i), u = I.getPermuted(p.length, s.length), c = I.getReshapedPermuted(n.shape, s, i), l = I.getSliceBeginCoords(a, s.length), m = I.getSliceSize(c, a, s.length), f = Mt({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), d = Eo({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), h = Mt({ inputs: { x: d }, backend: t10, attrs: { shape: c } }), g = Xo({ inputs: { x: h }, backend: t10, attrs: { begin: l, size: m } }); - return t10.disposeData(f.dataId), t10.disposeData(d.dataId), t10.disposeData(f.dataId), g; +var RD = { kernelName: _s, backendName: "wasm", kernelFunc: Eo }; +function c9(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o, i = s.reduce((x, b) => x * b), p = S.getReshaped(n.shape, s, i), u = S.getPermuted(p.length, s.length), c = S.getReshapedPermuted(n.shape, s, i), l = S.getSliceBeginCoords(a, s.length), m = S.getSliceSize(c, a, s.length), d = Mt({ inputs: { x: n }, backend: t6, attrs: { shape: p } }), f = uo({ inputs: { x: d }, backend: t6, attrs: { perm: u } }), h = Mt({ inputs: { x: f }, backend: t6, attrs: { shape: c } }), g = Eo({ inputs: { x: h }, backend: t6, attrs: { begin: l, size: m } }); + return t6.disposeData(d.dataId), t6.disposeData(f.dataId), t6.disposeData(d.dataId), g; } -var nP = { kernelName: hs, backendName: "wasm", kernelFunc: W9 }; -function cs(r) { - let { inputs: { x: e }, attrs: { dtype: t10 }, backend: o } = r, n = o.makeOutput(e.shape, t10), s = o.typedArrayFromHeap(e); +var FD = { kernelName: xs, backendName: "wasm", kernelFunc: c9 }; +function ls(r) { + let { inputs: { x: e }, attrs: { dtype: t6 }, backend: o } = r, n = o.makeOutput(e.shape, t6), s = o.typedArrayFromHeap(e); return o.typedArrayFromHeap(n).set(s), n; } -var sP = { kernelName: to, backendName: "wasm", kernelFunc: cs }; -var aP = Qe(ro); -var iP; -function U9(r) { - iP = r.wasm.cwrap(Ro, null, ["number", "number", "number", "number"]); +var DD = { kernelName: co, backendName: "wasm", kernelFunc: ls }; +var OD = Ve(Uo); +var PD; +function l9(r) { + PD = r.wasm.cwrap(lo, null, ["number", "number", "number", "number"]); } -function G9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i = t10.dataIdMap.get(n.dataId).id, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(p.dataId).id; - return iP(i, s, a, u), p; +function m9(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i = t6.dataIdMap.get(n.dataId).id, p = t6.makeOutput(n.shape, n.dtype), u = t6.dataIdMap.get(p.dataId).id; + return PD(i, s, a, u), p; } -var uP = { kernelName: Ro, backendName: "wasm", setupFunc: U9, kernelFunc: G9 }; -function qw(r) { - let { inputs: e, backend: t10 } = r, o = x.parseAxisParam(r.attrs.axis, e[0].shape)[0], n = e.map((f) => f.shape); - I.assertParamsConsistent(n, o); - let s = I.computeOutShape(e.map((f) => f.shape), o), a = e.filter((f) => x.sizeFromShape(f.shape) > 0); +var MD = { kernelName: lo, backendName: "wasm", setupFunc: l9, kernelFunc: m9 }; +function zw(r) { + let { inputs: e, backend: t6 } = r, o = y.parseAxisParam(r.attrs.axis, e[0].shape)[0], n = e.map((d) => d.shape); + S.assertParamsConsistent(n, o); + let s = S.computeOutShape(e.map((d) => d.shape), o), a = e.filter((d) => y.sizeFromShape(d.shape) > 0); if (a.length === 1) - return zu({ inputs: { x: a[0] }, backend: t10 }); - let i = t10.makeOutput(s, e[0].dtype); - if (x.sizeFromShape(s) === 0) + return Vu({ inputs: { x: a[0] }, backend: t6 }); + let i = t6.makeOutput(s, e[0].dtype); + if (y.sizeFromShape(s) === 0) return i; if (a[0].dtype === "string") { - let f = a.map((C) => { - let k = [-1, x.sizeFromShape(C.shape.slice(o))]; - return Mt({ inputs: { x: C }, backend: t10, attrs: { shape: k } }); - }), d = f.map((C) => ({ vals: t10.readSync(C.dataId), shape: C.shape })); - s = I.computeOutShape(f.map((C) => C.shape), 1); - let h = f[0].shape[0] === 1, g = Iu(d, s, e[0].dtype, h), y = I.computeOutShape(a.map((C) => C.shape), o); - i.shape = y; - let b = t10.dataIdMap.get(i.dataId); - return b.stringBytes = I.fromStringArrayToUint8(g), f.forEach((C) => t10.disposeData(C.dataId)), i; + let d = a.map((C) => { + let k = [-1, y.sizeFromShape(C.shape.slice(o))]; + return Mt({ inputs: { x: C }, backend: t6, attrs: { shape: k } }); + }), f = d.map((C) => ({ vals: t6.readSync(C.dataId), shape: C.shape })); + s = S.computeOutShape(d.map((C) => C.shape), 1); + let h = d[0].shape[0] === 1, g = Su(f, s, e[0].dtype, h), x = S.computeOutShape(a.map((C) => C.shape), o); + i.shape = x; + let b = t6.dataIdMap.get(i.dataId); + return b.stringBytes = S.fromStringArrayToUint8(g), d.forEach((C) => t6.disposeData(C.dataId)), i; } - let p = x.sizeFromShape(a[0].shape.slice(0, o)), u = 0, c = a.map((f) => { - let d = x.sizeFromShape(f.shape.slice(o)); - return u += d, d; - }), l = a.map((f) => t10.typedArrayFromHeap(f)), m = t10.typedArrayFromHeap(i); - for (let f = 0; f < p; f++) { - let d = f * u; + let p = y.sizeFromShape(a[0].shape.slice(0, o)), u = 0, c = a.map((d) => { + let f = y.sizeFromShape(d.shape.slice(o)); + return u += f, f; + }), l = a.map((d) => t6.typedArrayFromHeap(d)), m = t6.typedArrayFromHeap(i); + for (let d = 0; d < p; d++) { + let f = d * u; for (let h = 0; h < l.length; h++) { - let g = c[h], y = f * g, b = l[h].subarray(y, y + g); - m.set(b, d), d += g; + let g = c[h], x = d * g, b = l[h].subarray(x, x + g); + m.set(b, f), f += g; } } return i; } -var pP = { kernelName: gs, backendName: "wasm", kernelFunc: qw }; -var cP; -function H9(r) { - cP = r.wasm.cwrap(ln, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var LD = { kernelName: ys, backendName: "wasm", kernelFunc: zw }; +var BD; +function d9(r) { + BD = r.wasm.cwrap(Go, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function q9(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l, dataFormat: m } = t10, f = I.convertConv2DDataFormat(m), d = I.computeConv2DInfo(n.shape, s.shape, p, u, c, l, false, f), h = d.filterHeight, g = d.filterWidth, y = d.padInfo.top, b = d.padInfo.right, C = d.padInfo.bottom, w = d.padInfo.left, k = d.dilationHeight, _ = d.dilationWidth, E = d.strideHeight, R = d.strideWidth, A = d.inChannels, D = d.outChannels, O = d.padInfo.type === "SAME" ? 1 : 0; - if (d.dataFormat !== "channelsLast") - throw new Error(`wasm backend Conv2D does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`); - let M = o.makeOutput(d.outShape, "float32"), L = o.dataIdMap.get(M.dataId).id; - return cP(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, y, b, C, w, O, k, _, E, R, A, D, L), M; +function f9(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l, dataFormat: m } = t6, d = S.convertConv2DDataFormat(m), f = S.computeConv2DInfo(n.shape, s.shape, p, u, c, l, false, d), h = f.filterHeight, g = f.filterWidth, x = f.padInfo.top, b = f.padInfo.right, C = f.padInfo.bottom, w = f.padInfo.left, k = f.dilationHeight, _ = f.dilationWidth, $ = f.strideHeight, A = f.strideWidth, R = f.inChannels, D = f.outChannels, P = f.padInfo.type === "SAME" ? 1 : 0; + if (f.dataFormat !== "channelsLast") + throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`); + let M = o.makeOutput(f.outShape, "float32"), L = o.dataIdMap.get(M.dataId).id; + return BD(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, C, w, P, k, _, $, A, R, D, L), M; } -var lP = { kernelName: ln, backendName: "wasm", setupFunc: H9, kernelFunc: q9 }; -var mP; -function K9(r) { - mP = r.wasm.cwrap(mn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var VD = { kernelName: Go, backendName: "wasm", setupFunc: d9, kernelFunc: f9 }; +var zD; +function h9(r) { + zD = r.wasm.cwrap(Ho, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function j9(r) { - let { backend: e, inputs: t10, attrs: o } = r, { dy: n, filter: s } = t10, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: c } = o, l = 1, m = I.convertConv2DDataFormat(p), f = I.computeConv2DInfo(c, s.shape, a, l, i, u, false, m), { batchSize: d, filterHeight: h, filterWidth: g, inChannels: y, inHeight: b, inWidth: C, outChannels: w, outHeight: k, outWidth: _, strideHeight: E, strideWidth: R } = f, A = h - 1 - f.padInfo.top, D = g - 1 - f.padInfo.left, O = f.dataFormat === "channelsLast", M = x.computeStrides(f.inShape), L = x.computeStrides(n.shape), [W, V, G] = x.computeStrides(s.shape), q = M[0], H = O ? M[1] : M[2], j = O ? M[2] : 1, Y = O ? 1 : M[1], Z = L[0], ee = O ? L[1] : L[2], X = O ? L[2] : 1, Q = O ? 1 : L[1], se = e.makeOutput(f.inShape, "float32"), ie = e.dataIdMap.get(se.dataId).id, de = e.dataIdMap.get(n.dataId).id, Ie = e.dataIdMap.get(s.dataId).id; - return mP(de, Ie, d, h, g, b, C, y, k, _, w, E, R, A, D, W, V, G, q, H, j, Y, Z, ee, X, Q, ie), se; +function g9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { dy: n, filter: s } = t6, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: c } = o, l = 1, m = S.convertConv2DDataFormat(p), d = S.computeConv2DInfo(c, s.shape, a, l, i, u, false, m), { batchSize: f, filterHeight: h, filterWidth: g, inChannels: x, inHeight: b, inWidth: C, outChannels: w, outHeight: k, outWidth: _, strideHeight: $, strideWidth: A } = d, R = h - 1 - d.padInfo.top, D = g - 1 - d.padInfo.left, P = d.dataFormat === "channelsLast", M = y.computeStrides(d.inShape), L = y.computeStrides(n.shape), [W, V, U] = y.computeStrides(s.shape), q = M[0], H = P ? M[1] : M[2], j = P ? M[2] : 1, X = P ? 1 : M[1], Z = L[0], ee = P ? L[1] : L[2], Y = P ? L[2] : 1, J = P ? 1 : L[1], ie = e.makeOutput(d.inShape, "float32"), pe = e.dataIdMap.get(ie.dataId).id, he = e.dataIdMap.get(n.dataId).id, we = e.dataIdMap.get(s.dataId).id; + return zD(he, we, f, h, g, b, C, x, k, _, w, $, A, R, D, W, V, U, q, H, j, X, Z, ee, Y, J, pe), ie; } -var fP = { kernelName: mn, backendName: "wasm", setupFunc: K9, kernelFunc: j9 }; -var dP = Qe(fn); -var hP = Qe(dn); -var Kw; +var WD = { kernelName: Ho, backendName: "wasm", setupFunc: h9, kernelFunc: g9 }; +var UD = Ve(qo); +var GD = Ve(Ko); +var Ww; (function(r) { r[r.bilinear = 0] = "bilinear", r[r.nearest = 1] = "nearest"; -})(Kw || (Kw = {})); -var gP; -function X9(r) { - gP = r.wasm.cwrap(xn, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); +})(Ww || (Ww = {})); +var HD; +function x9(r) { + HD = r.wasm.cwrap(Yo, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); } -function Y9(r) { - let { backend: e, inputs: t10, attrs: o } = r, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = t10, c = p.shape[0], [l, m] = a, f = [c, l, m, i.shape[3]], d = e.dataIdMap.get(i.dataId), h; - i.dtype !== "float32" && (h = cs({ backend: e, inputs: { x: i }, attrs: { dtype: "float32" } }), d = e.dataIdMap.get(h.dataId)); - let g = d.id, y = e.dataIdMap.get(p.dataId).id, b = e.dataIdMap.get(u.dataId).id, C = e.makeOutput(f, "float32"), w = e.dataIdMap.get(C.dataId).id, k = new Uint8Array(new Int32Array(i.shape).buffer); - return gP(g, y, b, c, k, l, m, Kw[n], s, w), h != null && e.disposeData(h.dataId), C; +function y9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = t6, c = p.shape[0], [l, m] = a, d = [c, l, m, i.shape[3]], f = e.dataIdMap.get(i.dataId), h; + i.dtype !== "float32" && (h = ls({ backend: e, inputs: { x: i }, attrs: { dtype: "float32" } }), f = e.dataIdMap.get(h.dataId)); + let g = f.id, x = e.dataIdMap.get(p.dataId).id, b = e.dataIdMap.get(u.dataId).id, C = e.makeOutput(d, "float32"), w = e.dataIdMap.get(C.dataId).id, k = new Uint8Array(new Int32Array(i.shape).buffer); + return HD(g, x, b, c, k, l, m, Ww[n], s, w), h != null && e.disposeData(h.dataId), C; } -var xP = { kernelName: xn, backendName: "wasm", setupFunc: X9, kernelFunc: Y9 }; -var yP; -function Q9(r) { - yP = r.wasm.cwrap(hn, null, ["number", "number", "number", "number", "number", "number"]); +var qD = { kernelName: Yo, backendName: "wasm", setupFunc: x9, kernelFunc: y9 }; +var KD; +function b9(r) { + KD = r.wasm.cwrap(jo, null, ["number", "number", "number", "number", "number", "number"]); } -function Z9(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; - x.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumprod does not support ${n.dtype} tensors in the WASM backend`); - let u = I.getAxesPermutation([s], p), c = n; - u !== null && (c = Eo({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); - let l = I.getInnerMostAxes(1, p)[0]; - I.assertAxesAreInnerMostDims("cumprod", [l], p); - let m = t10.makeOutput(c.shape, c.dtype), f = c.shape[l], d = t10.dataIdMap.get(c.dataId).id, h = t10.dataIdMap.get(m.dataId).id; - yP(d, a ? 1 : 0, i ? 1 : 0, f, h, Ae[n.dtype]); +function C9(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; + y.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumprod does not support ${n.dtype} tensors in the WASM backend`); + let u = S.getAxesPermutation([s], p), c = n; + u !== null && (c = uo({ inputs: { x: n }, attrs: { perm: u }, backend: t6 })); + let l = S.getInnerMostAxes(1, p)[0]; + S.assertAxesAreInnerMostDims("cumprod", [l], p); + let m = t6.makeOutput(c.shape, c.dtype), d = c.shape[l], f = t6.dataIdMap.get(c.dataId).id, h = t6.dataIdMap.get(m.dataId).id; + KD(f, a ? 1 : 0, i ? 1 : 0, d, h, Fe[n.dtype]); let g = m; if (u !== null) { - let y = I.getUndoAxesPermutation(u); - g = Eo({ inputs: { x: m }, attrs: { perm: y }, backend: t10 }), t10.disposeData(c.dataId), t10.disposeData(m.dataId); + let x = S.getUndoAxesPermutation(u); + g = uo({ inputs: { x: m }, attrs: { perm: x }, backend: t6 }), t6.disposeData(c.dataId), t6.disposeData(m.dataId); } return g; } -var bP = { kernelName: hn, backendName: "wasm", setupFunc: Q9, kernelFunc: Z9 }; -var CP; -function J9(r) { - CP = r.wasm.cwrap(gn, null, ["number", "number", "number", "number", "number", "number"]); +var jD = { kernelName: jo, backendName: "wasm", setupFunc: b9, kernelFunc: C9 }; +var XD; +function S9(r) { + XD = r.wasm.cwrap(Xo, null, ["number", "number", "number", "number", "number", "number"]); } -function eJ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; - x.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumsum does not support ${n.dtype} tensors in the WASM backend`); - let u = I.getAxesPermutation([s], p), c = n; - u !== null && (c = Eo({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); - let l = I.getInnerMostAxes(1, p)[0]; - I.assertAxesAreInnerMostDims("cumsum", [l], p); - let m = t10.makeOutput(c.shape, c.dtype), f = c.shape[l], d = t10.dataIdMap.get(c.dataId).id, h = t10.dataIdMap.get(m.dataId).id; - CP(d, a ? 1 : 0, i ? 1 : 0, f, h, Ae[n.dtype]); +function w9(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; + y.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumsum does not support ${n.dtype} tensors in the WASM backend`); + let u = S.getAxesPermutation([s], p), c = n; + u !== null && (c = uo({ inputs: { x: n }, attrs: { perm: u }, backend: t6 })); + let l = S.getInnerMostAxes(1, p)[0]; + S.assertAxesAreInnerMostDims("cumsum", [l], p); + let m = t6.makeOutput(c.shape, c.dtype), d = c.shape[l], f = t6.dataIdMap.get(c.dataId).id, h = t6.dataIdMap.get(m.dataId).id; + XD(f, a ? 1 : 0, i ? 1 : 0, d, h, Fe[n.dtype]); let g = m; if (u !== null) { - let y = I.getUndoAxesPermutation(u); - g = Eo({ inputs: { x: m }, attrs: { perm: y }, backend: t10 }), t10.disposeData(c.dataId), t10.disposeData(m.dataId); + let x = S.getUndoAxesPermutation(u); + g = uo({ inputs: { x: m }, attrs: { perm: x }, backend: t6 }), t6.disposeData(c.dataId), t6.disposeData(m.dataId); } return g; } -var IP = { kernelName: gn, backendName: "wasm", setupFunc: J9, kernelFunc: eJ }; -var wP; -function tJ(r) { - wP = r.wasm.cwrap(yn, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); +var YD = { kernelName: Xo, backendName: "wasm", setupFunc: S9, kernelFunc: w9 }; +var QD; +function I9(r) { + QD = r.wasm.cwrap(Qo, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); } -function rJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { x: n } = t10, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, f = c / (s * s), d = a === "NHWC" ? [i, l, m, f] : [i, f, l, m], h = e.makeOutput(d, "float32"), y = e.dataIdMap.get(n.dataId).id, b = new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer), C = new Uint8Array(new Int32Array(d).buffer), w = new Uint8Array(new Int32Array(x.computeStrides(d)).buffer), k = e.dataIdMap.get(h.dataId).id; - return wP(y, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, C, w, d.length, k), h; +function v9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { x: n } = t6, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = e.makeOutput(f, "float32"), x = e.dataIdMap.get(n.dataId).id, b = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), C = new Uint8Array(new Int32Array(f).buffer), w = new Uint8Array(new Int32Array(y.computeStrides(f)).buffer), k = e.dataIdMap.get(h.dataId).id; + return QD(x, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, C, w, f.length, k), h; } -var SP = { kernelName: yn, backendName: "wasm", setupFunc: tJ, kernelFunc: rJ }; -var vP; -function oJ(r) { - vP = r.wasm.cwrap(bn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var ZD = { kernelName: Qo, backendName: "wasm", setupFunc: I9, kernelFunc: v9 }; +var JD; +function k9(r) { + JD = r.wasm.cwrap(Zo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function nJ(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l } = t10, m = u == null ? [1, 1] : u, f = I.computeConv2DInfo(n.shape, s.shape, p, m, c, l, true), d = f.filterHeight, h = f.filterWidth, g = f.padInfo.top, y = f.padInfo.right, b = f.padInfo.bottom, C = f.padInfo.left, w = f.dilationHeight, k = f.dilationWidth, _ = f.strideHeight, E = f.strideWidth, R = f.inChannels, A = f.outChannels, D = f.padInfo.type === "SAME" ? 1 : 0; - if (f.dataFormat !== "channelsLast") - throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`); - let O = o.makeOutput(f.outShape, "float32"), M = o.dataIdMap.get(O.dataId).id; - return vP(a, n.shape[0], n.shape[1], n.shape[2], i, d, h, g, y, b, C, D, w, k, _, E, R, A, M), O; +function N9(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l } = t6, m = u == null ? [1, 1] : u, d = S.computeConv2DInfo(n.shape, s.shape, p, m, c, l, true), f = d.filterHeight, h = d.filterWidth, g = d.padInfo.top, x = d.padInfo.right, b = d.padInfo.bottom, C = d.padInfo.left, w = d.dilationHeight, k = d.dilationWidth, _ = d.strideHeight, $ = d.strideWidth, A = d.inChannels, R = d.outChannels, D = d.padInfo.type === "SAME" ? 1 : 0; + if (d.dataFormat !== "channelsLast") + throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`); + let P = o.makeOutput(d.outShape, "float32"), M = o.dataIdMap.get(P.dataId).id; + return JD(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, C, D, w, k, _, $, A, R, M), P; } -var kP = { kernelName: bn, backendName: "wasm", setupFunc: oJ, kernelFunc: nJ }; -var TP = Qe(In); -var sJ = false; -var NP = nt(oo, sJ, "bool"); -var _P = Qe(no, "float32"); -function Eg(r) { - let { inputs: e, attrs: t10, backend: o } = r, { input: n } = e, { dim: s } = t10, a = n.shape.length, i = n.shape.slice(), p = s; - return s < 0 && (x.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), Mt({ inputs: { x: n }, backend: o, attrs: { shape: i } }); +var eO = { kernelName: Zo, backendName: "wasm", setupFunc: k9, kernelFunc: N9 }; +var tO = Ve(en); +var T9 = false; +var rO = rt(tn, T9, "bool"); +var oO = Ve(rn, "float32"); +function yg(r) { + let { inputs: e, attrs: t6, backend: o } = r, { input: n } = e, { dim: s } = t6, a = n.shape.length, i = n.shape.slice(), p = s; + return s < 0 && (y.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), Mt({ inputs: { x: n }, backend: o, attrs: { shape: i } }); } -var EP = { kernelName: xs, backendName: "wasm", kernelFunc: Eg }; -function jw(r) { - let { attrs: { shape: e, value: t10, dtype: o }, backend: n } = r, s = n.makeOutput(e, o); - return n.typedArrayFromHeap(s).fill(t10), s; +var nO = { kernelName: bs, backendName: "wasm", kernelFunc: yg }; +function Uw(r) { + let { attrs: { shape: e, value: t6, dtype: o }, backend: n } = r, s = n.makeOutput(e, o); + return n.typedArrayFromHeap(s).fill(t6), s; } -var $P = { kernelName: ys, backendName: "wasm", kernelFunc: jw }; -var RP; -function aJ(r) { - RP = r.wasm.cwrap(Sn, null, ["number", "number", "number", "number", "number", "number"]); +var sO = { kernelName: Cs, backendName: "wasm", kernelFunc: Uw }; +var aO; +function _9(r) { + aO = r.wasm.cwrap(on, null, ["number", "number", "number", "number", "number", "number"]); } -function iJ(r) { - let { inputs: e, backend: t10 } = r, { image: o } = e, n = t10.makeOutput(o.shape, o.dtype), s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, [i, p, u, c] = o.shape; - return RP(s, i, p, u, c, a), n; +function E9(r) { + let { inputs: e, backend: t6 } = r, { image: o } = e, n = t6.makeOutput(o.shape, o.dtype), s = t6.dataIdMap.get(o.dataId).id, a = t6.dataIdMap.get(n.dataId).id, [i, p, u, c] = o.shape; + return aO(s, i, p, u, c, a), n; } -var AP = { kernelName: Sn, backendName: "wasm", kernelFunc: iJ, setupFunc: aJ }; -var FP = Qe(so); -var uJ = false; -var DP = nt(vn, uJ); -var PP; -function pJ(r) { - PP = r.wasm.cwrap(kn, null, ["number", "number", "number", "number", "number", "number", "number"]); +var iO = { kernelName: on, backendName: "wasm", kernelFunc: E9, setupFunc: _9 }; +var uO = Ve(nn); +var $9 = false; +var pO = rt(sn, $9); +var cO; +function A9(r) { + cO = r.wasm.cwrap(an, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function cJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = t10, c = e.dataIdMap.get(s.dataId).id, l = e.dataIdMap.get(a.dataId).id, m = e.dataIdMap.get(i.dataId).id, f = p != null ? e.dataIdMap.get(p.dataId).id : 0, d = u != null ? e.dataIdMap.get(u.dataId).id : 0, h = e.makeOutput(s.shape, s.dtype); - if (x.sizeFromShape(s.shape) === 0) +function R9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = t6, c = e.dataIdMap.get(s.dataId).id, l = e.dataIdMap.get(a.dataId).id, m = e.dataIdMap.get(i.dataId).id, d = p != null ? e.dataIdMap.get(p.dataId).id : 0, f = u != null ? e.dataIdMap.get(u.dataId).id : 0, h = e.makeOutput(s.shape, s.dtype); + if (y.sizeFromShape(s.shape) === 0) return h; let g = e.dataIdMap.get(h.dataId).id; - return PP(c, l, m, f, d, n, g), h; + return cO(c, l, m, d, f, n, g), h; } -var OP = { kernelName: kn, backendName: "wasm", setupFunc: pJ, kernelFunc: cJ }; -var MP; -function lJ(r) { - MP = r.wasm.cwrap(Do, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var lO = { kernelName: an, backendName: "wasm", setupFunc: A9, kernelFunc: R9 }; +var mO; +function F9(r) { + mO = r.wasm.cwrap(ho, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function mJ(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = t10, h = I.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = $i[f]; +function D9(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t6, h = S.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = Wi[d]; if (g == null) - throw new Error(`${f} activation not yet supported for FusedConv2D in the wasm backend.`); - let y = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, w = 0; + throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`); + let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, w = 0; if (a != null) { - let X = o.dataIdMap.get(a.dataId); - if (X.shape.length !== 1) - throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${X.shape.length}.`); - if (X.shape[0] !== C) - throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`); - w = X.id; + let Y = o.dataIdMap.get(a.dataId); + if (Y.shape.length !== 1) + throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`); + if (Y.shape[0] !== C) + throw new Error(`FusedConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`); + w = Y.id; } - let k = h.filterHeight, _ = h.filterWidth, E = h.padInfo.top, R = h.padInfo.right, A = h.padInfo.bottom, D = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, W = h.strideWidth, V = h.inChannels, G = h.padInfo.type === "SAME" ? 1 : 0, q = h.batchSize, H = h.inHeight, j = h.inWidth; + let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, A = h.padInfo.right, R = h.padInfo.bottom, D = h.padInfo.left, P = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, W = h.strideWidth, V = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, q = h.batchSize, H = h.inHeight, j = h.inWidth; if (l !== "NHWC") throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); - let Y = o.makeOutput(h.outShape, "float32"), Z = o.dataIdMap.get(Y.dataId).id, ee = i == null ? 0 : o.dataIdMap.get(i.dataId).id; - return MP(y, q, H, j, b, k, _, w, E, R, A, D, G, O, M, L, W, V, C, g, ee, d || 0, Z), Y; + let X = o.makeOutput(h.outShape, "float32"), Z = o.dataIdMap.get(X.dataId).id, ee = i == null ? 0 : o.dataIdMap.get(i.dataId).id; + return mO(x, q, H, j, b, k, _, w, $, A, R, D, U, P, M, L, W, V, C, g, ee, f || 0, Z), X; } -var LP = { kernelName: Do, backendName: "wasm", setupFunc: lJ, kernelFunc: mJ }; -var BP; -function fJ(r) { - BP = r.wasm.cwrap(Po, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var dO = { kernelName: ho, backendName: "wasm", setupFunc: F9, kernelFunc: D9 }; +var fO; +function O9(r) { + fO = r.wasm.cwrap(go, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function dJ(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = t10, h = I.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = $i[f]; +function P9(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t6, h = S.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = Wi[d]; if (g == null) - throw new Error(`${f} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); - let y = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, w = 0; + throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); + let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, w = 0; if (a != null) { - let X = o.dataIdMap.get(a.dataId); - if (X.shape.length !== 1) - throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${X.shape.length}.`); - if (X.shape[0] !== C) - throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`); - w = X.id; + let Y = o.dataIdMap.get(a.dataId); + if (Y.shape.length !== 1) + throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`); + if (Y.shape[0] !== C) + throw new Error(`FusedDepthwiseConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`); + w = Y.id; } - let k = h.filterHeight, _ = h.filterWidth, E = h.padInfo.top, R = h.padInfo.right, A = h.padInfo.bottom, D = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, W = h.strideWidth, V = h.inChannels, G = h.padInfo.type === "SAME" ? 1 : 0, q = h.batchSize, H = h.inHeight, j = h.inWidth; + let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, A = h.padInfo.right, R = h.padInfo.bottom, D = h.padInfo.left, P = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, W = h.strideWidth, V = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, q = h.batchSize, H = h.inHeight, j = h.inWidth; if (l !== "NHWC") throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); - let Y = o.makeOutput(h.outShape, "float32"), Z = o.dataIdMap.get(Y.dataId).id, ee = i == null ? 0 : o.dataIdMap.get(i.dataId).id; - return BP(y, q, H, j, b, k, _, w, E, R, A, D, G, O, M, L, W, V, C, g, ee, d || 0, Z), Y; + let X = o.makeOutput(h.outShape, "float32"), Z = o.dataIdMap.get(X.dataId).id, ee = i == null ? 0 : o.dataIdMap.get(i.dataId).id; + return fO(x, q, H, j, b, k, _, w, $, A, R, D, U, P, M, L, W, V, C, g, ee, f || 0, Z), X; } -var VP = { kernelName: Po, backendName: "wasm", setupFunc: fJ, kernelFunc: dJ }; -var zP; -function hJ(r) { - zP = r.wasm.cwrap(Tn, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); +var hO = { kernelName: go, backendName: "wasm", setupFunc: O9, kernelFunc: P9 }; +var gO; +function M9(r) { + gO = r.wasm.cwrap(un, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); } -function gJ(r) { - let { backend: e, inputs: t10 } = r, { params: o, indices: n } = t10, [s, a, i, p] = af.prepareAndValidate(o, n), u = e.makeOutput(s, o.dtype); +function L9(r) { + let { backend: e, inputs: t6 } = r, { params: o, indices: n } = t6, [s, a, i, p] = Ym.prepareAndValidate(o, n), u = e.makeOutput(s, o.dtype); if (a === 0) return u; - let c = n.shape, l = c[c.length - 1], f = e.dataIdMap.get(o.dataId).id, h = e.dataIdMap.get(n.dataId).id, g = new Uint8Array(new Int32Array(p).buffer), y = e.dataIdMap.get(u.dataId).id; - return zP(f, Ae[o.dtype], h, a, l, i, g, y), u; + let c = n.shape, l = c[c.length - 1], d = e.dataIdMap.get(o.dataId).id, h = e.dataIdMap.get(n.dataId).id, g = new Uint8Array(new Int32Array(p).buffer), x = e.dataIdMap.get(u.dataId).id; + return gO(d, Fe[o.dtype], h, a, l, i, g, x), u; } -var WP = { kernelName: Tn, backendName: "wasm", setupFunc: hJ, kernelFunc: gJ }; -var UP; -function xJ(r) { - UP = r.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); +var xO = { kernelName: un, backendName: "wasm", setupFunc: M9, kernelFunc: L9 }; +var yO; +function B9(r) { + yO = r.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); } -function yJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { x: n, indices: s } = t10, { axis: a, batchDims: i } = o, p = x.parseAxisParam(a, n.shape)[0], u = e.readSync(s.dataId), c = n.shape[p]; - for (let A = 0; A < u.length; ++A) { - let D = u[A]; - x.assert(D <= c - 1 && D >= 0, () => `GatherV2: the index value ${D} is not in [0, ${c - 1}]`); +function V9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { x: n, indices: s } = t6, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = e.readSync(s.dataId), c = n.shape[p]; + for (let R = 0; R < u.length; ++R) { + let D = u[R]; + y.assert(D <= c - 1 && D >= 0, () => `GatherV2: the index value ${D} is not in [0, ${c - 1}]`); } - let l = I.segment_util.collectGatherOpShapeInfo(n, s, p, i), m = Mt({ inputs: { x: n }, attrs: { shape: [l.batchSize, l.outerSize, l.dimSize, l.sliceSize] }, backend: e }), f = x.sizeFromShape(s.shape), d = Mt({ inputs: { x: s }, attrs: { shape: [l.batchSize, f / l.batchSize] }, backend: e }), h = [l.batchSize, l.outerSize, f / l.batchSize, l.sliceSize], g = e.makeOutput(h, n.dtype); - if (x.sizeFromShape(n.shape) === 0) + let l = S.segment_util.collectGatherOpShapeInfo(n, s, p, i), m = Mt({ inputs: { x: n }, attrs: { shape: [l.batchSize, l.outerSize, l.dimSize, l.sliceSize] }, backend: e }), d = y.sizeFromShape(s.shape), f = Mt({ inputs: { x: s }, attrs: { shape: [l.batchSize, d / l.batchSize] }, backend: e }), h = [l.batchSize, l.outerSize, d / l.batchSize, l.sliceSize], g = e.makeOutput(h, n.dtype); + if (y.sizeFromShape(n.shape) === 0) return g; - let y = m.shape.length - 1, C = e.dataIdMap.get(m.dataId).id, k = e.dataIdMap.get(d.dataId).id, _ = e.dataIdMap.get(g.dataId).id, E = new Uint8Array(new Int32Array(x.computeStrides(m.shape)).buffer), R = new Uint8Array(new Int32Array(x.computeStrides(h)).buffer); - return UP(C, Ae[n.dtype], E, y, k, l.batchSize, R, _), e.disposeData(m.dataId), e.disposeData(d.dataId), g.shape = l.outputShape, g; + let x = m.shape.length - 1, C = e.dataIdMap.get(m.dataId).id, k = e.dataIdMap.get(f.dataId).id, _ = e.dataIdMap.get(g.dataId).id, $ = new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer), A = new Uint8Array(new Int32Array(y.computeStrides(h)).buffer); + return yO(C, Fe[n.dtype], $, x, k, l.batchSize, A, _), e.disposeData(m.dataId), e.disposeData(f.dataId), g.shape = l.outputShape, g; } -var GP = { kernelName: bs, backendName: "wasm", setupFunc: xJ, kernelFunc: yJ }; -var bJ = false; -var HP = nt(ao, bJ, "bool"); -var CJ = false; -var qP = nt(io, CJ, "bool"); -var KP; -function IJ(r) { - KP = r.wasm.cwrap(Nn, null, ["number", "number", "number", "number"]); +var bO = { kernelName: Ss, backendName: "wasm", setupFunc: B9, kernelFunc: V9 }; +var z9 = false; +var CO = rt(pn, z9, "bool"); +var W9 = false; +var SO = rt(cn, W9, "bool"); +var wO = Ve(ln, "bool"); +var IO; +function U9(r) { + IO = r.wasm.cwrap(mn, null, ["number", "number", "number", "number"]); } -function wJ(r) { - let { inputs: { x: e }, attrs: { alpha: t10 }, backend: o } = r, n = o.dataIdMap.get(e.dataId).id, s = o.makeOutput(e.shape, "float32"); - if (x.sizeFromShape(e.shape) !== 0) { +function G9(r) { + let { inputs: { x: e }, attrs: { alpha: t6 }, backend: o } = r, n = o.dataIdMap.get(e.dataId).id, s = o.makeOutput(e.shape, "float32"); + if (y.sizeFromShape(e.shape) !== 0) { let a = o.dataIdMap.get(s.dataId).id; - KP(n, Ae[e.dtype], t10, a); + IO(n, Fe[e.dtype], t6, a); } return s; } -var jP = { kernelName: Nn, backendName: "wasm", setupFunc: IJ, kernelFunc: wJ }; -var SJ = false; -var XP = nt(po, SJ, "bool"); -var vJ = false; -var YP = nt(co, vJ, "bool"); -var QP = Qe(lo); -var kJ = false; -var ZP = nt(_n, kJ, "bool"); -var JP = Qe(En); -var TJ = false; -var eO = nt(ua, TJ, "bool"); -var NJ = false; -var tO = nt(g0, NJ, "bool"); -var rO; -function _J(r) { - rO = r.wasm.cwrap($n, null, ["number", "number", "number", "number"]); +var vO = { kernelName: mn, backendName: "wasm", setupFunc: U9, kernelFunc: G9 }; +var H9 = false; +var kO = rt(dn, H9, "bool"); +var q9 = false; +var NO = rt(fn, q9, "bool"); +var TO = Ve(hn); +var K9 = false; +var _O = rt(gn, K9, "bool"); +var EO = Ve(xn); +var j9 = false; +var $O = rt(xa, j9, "bool"); +var X9 = false; +var AO = rt(GI, X9, "bool"); +var RO; +function Y9(r) { + RO = r.wasm.cwrap(yn, null, ["number", "number", "number", "number"]); } -function EJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { reductionIndices: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e); - if (f) { +function Q9(r) { + let { backend: e, inputs: t6, attrs: o } = r, { reductionIndices: n, keepDims: s } = o, { x: a } = t6, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e); + if (d) { let C = e.dataIdMap.get(c.dataId).id; u = c, p = C; } - let d = u.shape.length; - I.assertAxesAreInnerMostDims("max", l, d); - let [h, g] = I.computeOutAndReduceShapes(u.shape, l), y = x.sizeFromShape(g), b = e.makeOutput(h, a.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + let f = u.shape.length; + S.assertAxesAreInnerMostDims("max", l, f); + let [h, g] = S.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - rO(p, Ae[a.dtype], y, C); + RO(p, Fe[a.dtype], x, C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var oO = { kernelName: $n, backendName: "wasm", setupFunc: _J, kernelFunc: EJ }; -var $J = false; -var nO = nt(mo, $J); -var sO; -function RJ(r) { - sO = r.wasm.cwrap(Rn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var FO = { kernelName: yn, backendName: "wasm", setupFunc: Y9, kernelFunc: Q9 }; +var Z9 = false; +var DO = rt(bn, Z9); +var OO; +function J9(r) { + OO = r.wasm.cwrap(Cn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function AJ(r) { - let { inputs: e, attrs: t10, backend: o } = r, n = e.x, s = o.dataIdMap.get(n.dataId).id; - x.assert(n.dtype === "float32", () => `Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`); - let { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, c = I.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, f = c.padInfo.top, d = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, y = c.dilationHeight, b = c.dilationWidth, C = c.strideHeight, w = c.strideWidth, k = c.inChannels, _ = c.outChannels; +function eJ(r) { + let { inputs: e, attrs: t6, backend: o } = r, n = e.x, s = o.dataIdMap.get(n.dataId).id; + y.assert(n.dtype === "float32", () => `Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`); + let { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t6, c = S.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, d = c.padInfo.top, f = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, x = c.dilationHeight, b = c.dilationWidth, C = c.strideHeight, w = c.strideWidth, k = c.inChannels, _ = c.outChannels; if (c.dataFormat !== "channelsLast") throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`); - let E = o.makeOutput(c.outShape, "float32"), R = o.dataIdMap.get(E.dataId).id; - return sO(s, n.shape[0], n.shape[1], n.shape[2], l, m, f, d, h, g, y, b, C, w, k, _, R), E; + let $ = o.makeOutput(c.outShape, "float32"), A = o.dataIdMap.get($.dataId).id; + return OO(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, w, k, _, A), $; } -var aO = { kernelName: Rn, backendName: "wasm", setupFunc: RJ, kernelFunc: AJ }; -var iO; -function FJ(r) { - iO = r.wasm.cwrap(An, null, ["number, number, number"]); +var PO = { kernelName: Cn, backendName: "wasm", setupFunc: J9, kernelFunc: eJ }; +var MO; +function tJ(r) { + MO = r.wasm.cwrap(Sn, null, ["number, number, number"]); } -function DJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e), d = l; - if (f) { +function rJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e), f = l; + if (d) { let w = e.dataIdMap.get(c.dataId).id; - w !== i && (u = c, p = w, d = I.getInnerMostAxes(d.length, u.shape.length)); + w !== i && (u = c, p = w, f = S.getInnerMostAxes(f.length, u.shape.length)); } - I.assertAxesAreInnerMostDims("mean", d, u.shape.length); - let [h, g] = I.computeOutAndReduceShapes(u.shape, d), y = x.sizeFromShape(g), b = u; - u.dtype !== "float32" && (b = cs({ backend: e, inputs: { x: u }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(b.dataId).id); + S.assertAxesAreInnerMostDims("mean", f, u.shape.length); + let [h, g] = S.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = u; + u.dtype !== "float32" && (b = ls({ backend: e, inputs: { x: u }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(b.dataId).id); let C = e.makeOutput(h, "float32"); - if (x.sizeFromShape(u.shape) !== 0) { + if (y.sizeFromShape(u.shape) !== 0) { let w = e.dataIdMap.get(C.dataId).id; - iO(p, y, w); + MO(p, x, w); } - if (f && e.disposeData(c.dataId), s) { - let w = I.expandShapeToKeepDim(C.shape, m); + if (d && e.disposeData(c.dataId), s) { + let w = S.expandShapeToKeepDim(C.shape, m); C.shape = w; } return u.dtype !== "float32" && e.disposeData(b.dataId), C; } -var uO = { kernelName: An, backendName: "wasm", setupFunc: FJ, kernelFunc: DJ }; -var pO; -function PJ(r) { - pO = r.wasm.cwrap(Fn, null, ["number", "number", "number", "number"]); +var LO = { kernelName: Sn, backendName: "wasm", setupFunc: tJ, kernelFunc: rJ }; +var BO; +function oJ(r) { + BO = r.wasm.cwrap(wn, null, ["number", "number", "number", "number"]); } -function OJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e); - if (f) { +function nJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e); + if (d) { let C = e.dataIdMap.get(c.dataId).id; C !== i && (u = c, p = C); } - let d = u.shape.length; - I.assertAxesAreInnerMostDims("min", l, d); - let [h, g] = I.computeOutAndReduceShapes(u.shape, l), y = x.sizeFromShape(g), b = e.makeOutput(h, u.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + let f = u.shape.length; + S.assertAxesAreInnerMostDims("min", l, f); + let [h, g] = S.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - pO(p, Ae[a.dtype], y, C); + BO(p, Fe[a.dtype], x, C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var cO = { kernelName: Fn, backendName: "wasm", setupFunc: PJ, kernelFunc: OJ }; -var MJ = false; -var lO = nt(fo, MJ); -var Xw; +var VO = { kernelName: wn, backendName: "wasm", setupFunc: oJ, kernelFunc: nJ }; +var sJ = false; +var zO = rt(In, sJ); +var Gw; (function(r) { r[r.reflect = 0] = "reflect", r[r.symmetric = 1] = "symmetric"; -})(Xw || (Xw = {})); -var mO; -function LJ(r) { - mO = r.wasm.cwrap(Dn, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +})(Gw || (Gw = {})); +var WO; +function aJ(r) { + WO = r.wasm.cwrap(vn, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); } -function BJ(r) { - let { inputs: { x: e }, backend: t10, attrs: { paddings: o, mode: n } } = r, s = o.map((d, h) => d[0] + e.shape[h] + d[1]), a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), p = t10.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(e.shape).buffer), c = o.map((d) => d[0]), l = o.map((d) => d[1]), m = new Uint8Array(new Int32Array(c).buffer), f = new Uint8Array(new Int32Array(l).buffer); - return mO(a, u, e.shape.length, Ae[e.dtype], m, f, Xw[n], p), i; +function iJ(r) { + let { inputs: { x: e }, backend: t6, attrs: { paddings: o, mode: n } } = r, s = o.map((f, h) => f[0] + e.shape[h] + f[1]), a = t6.dataIdMap.get(e.dataId).id, i = t6.makeOutput(s, e.dtype), p = t6.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(e.shape).buffer), c = o.map((f) => f[0]), l = o.map((f) => f[1]), m = new Uint8Array(new Int32Array(c).buffer), d = new Uint8Array(new Int32Array(l).buffer); + return WO(a, u, e.shape.length, Fe[e.dtype], m, d, Gw[n], p), i; } -var fO = { kernelName: Dn, backendName: "wasm", kernelFunc: BJ, setupFunc: LJ }; -var VJ = true; -var dO = nt(ho, VJ); -var hO = Qe(Pn); -function kc(r, e) { - let t10 = new Int32Array(r.wasm.HEAPU8.buffer, e, 4), o = t10[0], n = t10[1], s = t10[2], a = t10[3]; +var UO = { kernelName: vn, backendName: "wasm", kernelFunc: iJ, setupFunc: aJ }; +var uJ = true; +var GO = rt(kn, uJ); +var HO = Ve(ws); +function Sc(r, e) { + let t6 = new Int32Array(r.wasm.HEAPU8.buffer, e, 4), o = t6[0], n = t6[1], s = t6[2], a = t6[3]; return r.wasm._free(e), { pSelectedIndices: o, selectedSize: n, pSelectedScores: s, pValidOutputs: a }; } -var gO; -function zJ(r) { - gO = r.wasm.cwrap(On, "number", ["number", "number", "number", "number", "number"]); +var qO; +function pJ(r) { + qO = r.wasm.cwrap(Tn, "number", ["number", "number", "number", "number", "number"]); } -function WJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = t10, u = e.dataIdMap.get(i.dataId).id, c = e.dataIdMap.get(p.dataId).id, l = gO(u, c, s, n, a), { pSelectedIndices: m, selectedSize: f, pSelectedScores: d, pValidOutputs: h } = kc(e, l); - return e.wasm._free(d), e.wasm._free(h), e.makeOutput([f], "int32", m); +function cJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = t6, u = e.dataIdMap.get(i.dataId).id, c = e.dataIdMap.get(p.dataId).id, l = qO(u, c, s, n, a), { pSelectedIndices: m, selectedSize: d, pSelectedScores: f, pValidOutputs: h } = Sc(e, l); + return e.wasm._free(f), e.wasm._free(h), e.makeOutput([d], "int32", m); } -var xO = { kernelName: On, backendName: "wasm", setupFunc: zJ, kernelFunc: WJ }; -var yO; -function UJ(r) { - yO = r.wasm.cwrap(pa, "number", ["number", "number", "number", "number", "number", "bool"]); +var KO = { kernelName: Tn, backendName: "wasm", setupFunc: pJ, kernelFunc: cJ }; +var jO; +function lJ(r) { + jO = r.wasm.cwrap(ba, "number", ["number", "number", "number", "number", "number", "bool"]); } -function GJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = t10, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = yO(c, l, s, n, a, i), { pSelectedIndices: f, selectedSize: d, pSelectedScores: h, pValidOutputs: g } = kc(e, m); +function mJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = t6, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = jO(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Sc(e, m); e.wasm._free(h); - let y = e.makeOutput([d], "int32", f), b = e.makeOutput([], "int32", g); - return [y, b]; + let x = e.makeOutput([f], "int32", d), b = e.makeOutput([], "int32", g); + return [x, b]; } -var bO = { kernelName: pa, backendName: "wasm", setupFunc: UJ, kernelFunc: GJ }; -var CO; -function HJ(r) { - CO = r.wasm.cwrap(Mn, "number", ["number", "number", "number", "number", "number", "number"]); +var XO = { kernelName: ba, backendName: "wasm", setupFunc: lJ, kernelFunc: mJ }; +var YO; +function dJ(r) { + YO = r.wasm.cwrap(_n, "number", ["number", "number", "number", "number", "number", "number"]); } -function qJ(r) { - let { backend: e, inputs: t10, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = t10, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = CO(c, l, s, n, a, i), { pSelectedIndices: f, selectedSize: d, pSelectedScores: h, pValidOutputs: g } = kc(e, m); +function fJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = t6, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = YO(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Sc(e, m); e.wasm._free(g); - let y = e.makeOutput([d], "int32", f), b = e.makeOutput([d], "float32", h); - return [y, b]; + let x = e.makeOutput([f], "int32", d), b = e.makeOutput([f], "float32", h); + return [x, b]; } -var IO = { kernelName: Mn, backendName: "wasm", setupFunc: HJ, kernelFunc: qJ }; -var KJ = false; -var wO = nt(go, KJ, "bool"); -var SO; -function jJ(r) { - SO = r.wasm.cwrap(ca, null, ["number", "number", "number", "number", "number"]); +var QO = { kernelName: _n, backendName: "wasm", setupFunc: dJ, kernelFunc: fJ }; +var hJ = false; +var ZO = rt(Nn, hJ, "bool"); +var JO; +function gJ(r) { + JO = r.wasm.cwrap(En, null, ["number", "number", "number", "number", "number"]); } -function XJ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = t10.makeOutput([...n.shape, a], s), c = t10.dataIdMap.get(u.dataId).id, m = t10.dataIdMap.get(n.dataId).id; - return SO(m, a, i, p, c), u; +function xJ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = t6.makeOutput([...n.shape, a], s), c = t6.dataIdMap.get(u.dataId).id, m = t6.dataIdMap.get(n.dataId).id; + return JO(m, a, i, p, c), u; } -var vO = { kernelName: ca, backendName: "wasm", setupFunc: jJ, kernelFunc: XJ }; -function YJ(r) { - let { inputs: { x: e }, backend: t10 } = r, o = t10.makeOutput(e.shape, e.dtype); - return t10.typedArrayFromHeap(o).fill(1), o; +var eP = { kernelName: En, backendName: "wasm", setupFunc: gJ, kernelFunc: xJ }; +function yJ(r) { + let { inputs: { x: e }, backend: t6 } = r, o = t6.makeOutput(e.shape, e.dtype); + return t6.typedArrayFromHeap(o).fill(1), o; } -var kO = { kernelName: Cs, backendName: "wasm", kernelFunc: YJ }; -function QJ(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o; +var tP = { kernelName: Is, backendName: "wasm", kernelFunc: yJ }; +function bJ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o; if (e.length === 1) - return Eg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return yg({ inputs: { input: e[0] }, backend: t6, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; e.forEach((c) => { - x.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), x.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); let i = [], p = e.map((c) => { - let l = Eg({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + let l = yg({ inputs: { input: c }, backend: t6, attrs: { dim: n } }); return i.push(l), l; - }), u = qw({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((c) => t10.disposeData(c.dataId)), u; + }), u = zw({ inputs: p, backend: t6, attrs: { axis: n } }); + return i.forEach((c) => t6.disposeData(c.dataId)), u; } -var TO = { kernelName: Is, backendName: "wasm", kernelFunc: QJ }; -var NO; -function ZJ(r) { - NO = r.wasm.cwrap(Ln, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +var rP = { kernelName: vs, backendName: "wasm", kernelFunc: bJ }; +var oP; +function CJ(r) { + oP = r.wasm.cwrap($n, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); } -function JJ(r) { - let { inputs: { x: e }, backend: t10, attrs: { paddings: o, constantValue: n } } = r, s = o.map((h, g) => h[0] + e.shape[g] + h[1]); - if (x.sizeFromShape(e.shape) === 0) - return jw({ backend: t10, attrs: { shape: s, value: n, dtype: e.dtype } }); - let a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), u = t10.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(e.shape).buffer), l = o.map((h) => h[0]), m = o.map((h) => h[1]), f = new Uint8Array(new Int32Array(l).buffer), d = new Uint8Array(new Int32Array(m).buffer); - return NO(a, c, e.shape.length, Ae[e.dtype], f, d, n, u), i; +function SJ(r) { + let { inputs: { x: e }, backend: t6, attrs: { paddings: o, constantValue: n } } = r, s = o.map((h, g) => h[0] + e.shape[g] + h[1]); + if (y.sizeFromShape(e.shape) === 0) + return Uw({ backend: t6, attrs: { shape: s, value: n, dtype: e.dtype } }); + let a = t6.dataIdMap.get(e.dataId).id, i = t6.makeOutput(s, e.dtype), u = t6.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(e.shape).buffer), l = o.map((h) => h[0]), m = o.map((h) => h[1]), d = new Uint8Array(new Int32Array(l).buffer), f = new Uint8Array(new Int32Array(m).buffer); + return oP(a, c, e.shape.length, Fe[e.dtype], d, f, n, u), i; } -var $g = { kernelName: Ln, backendName: "wasm", kernelFunc: JJ, setupFunc: ZJ }; -var eee = false; -var _O = nt(Bn, eee); -var EO; -function tee(r) { - EO = r.wasm.cwrap(Vn, null, ["number", "number", "number"]); +var bg = { kernelName: $n, backendName: "wasm", kernelFunc: SJ, setupFunc: CJ }; +var wJ = false; +var nP = rt(An, wJ); +var sP; +function IJ(r) { + sP = r.wasm.cwrap(Rn, null, ["number", "number", "number"]); } -function ree(r) { - let { inputs: e, backend: t10 } = r, { x: o, alpha: n } = e, s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; - p.dtype !== "float32" && (u = cs({ backend: t10, inputs: { x: o }, attrs: { dtype: "float32" } }), i = t10.dataIdMap.get(u.dataId).id); - let c = t10.makeOutput(o.shape, "float32"), l = t10.dataIdMap.get(c.dataId).id; - return EO(i, a, l), p.dtype !== "float32" && t10.disposeData(u.dataId), c; +function vJ(r) { + let { inputs: e, backend: t6 } = r, { x: o, alpha: n } = e, s = t6.dataIdMap.get(o.dataId).id, a = t6.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; + p.dtype !== "float32" && (u = ls({ backend: t6, inputs: { x: o }, attrs: { dtype: "float32" } }), i = t6.dataIdMap.get(u.dataId).id); + let c = t6.makeOutput(o.shape, "float32"), l = t6.dataIdMap.get(c.dataId).id; + return sP(i, a, l), p.dtype !== "float32" && t6.disposeData(u.dataId), c; } -var $O = { kernelName: Vn, backendName: "wasm", setupFunc: tee, kernelFunc: ree }; -var RO; -function oee(r) { - RO = r.wasm.cwrap(Ao, null, ["number", "number", "number", "number"]); +var aP = { kernelName: Rn, backendName: "wasm", setupFunc: IJ, kernelFunc: vJ }; +var iP; +function kJ(r) { + iP = r.wasm.cwrap(Fn, null, ["number", "number", "number", "number"]); } -function nee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e), d = l; - if (f) { +function NJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e), f = l; + if (d) { let C = e.dataIdMap.get(c.dataId).id; - C !== i && (u = c, p = C, d = I.getInnerMostAxes(d.length, u.shape.length)); + C !== i && (u = c, p = C, f = S.getInnerMostAxes(f.length, u.shape.length)); } - I.assertAxesAreInnerMostDims("prod", d, u.shape.length); - let [h, g] = I.computeOutAndReduceShapes(u.shape, d), y = x.sizeFromShape(g), b = e.makeOutput(h, u.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + S.assertAxesAreInnerMostDims("prod", f, u.shape.length); + let [h, g] = S.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - RO(p, y, Ae[b.dtype], C); + iP(p, x, Fe[b.dtype], C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var AO = { kernelName: Ao, backendName: "wasm", setupFunc: oee, kernelFunc: nee }; -var see = (r) => { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, step: s, dtype: a } = t10, i = Su(o, n, s, a), p = e.makeOutput([i.length], a); +var uP = { kernelName: Fn, backendName: "wasm", setupFunc: kJ, kernelFunc: NJ }; +var TJ = (r) => { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, step: s, dtype: a } = t6, i = Iu(o, n, s, a), p = e.makeOutput([i.length], a); return e.typedArrayFromHeap(p).set(i), p; }; -var FO = { kernelName: ws, backendName: "wasm", kernelFunc: see }; -var aee = true; -var DO = nt(Cn, aee); -var PO = Qe(zn); -var OO = Qe(Gn); -var MO; -function iee(r) { - MO = r.wasm.cwrap(Un, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var pP = { kernelName: ks, backendName: "wasm", kernelFunc: TJ }; +var _J = true; +var cP = rt(Jo, _J); +var lP = Ve(Dn); +var mP = Ve(On); +var dP = Ve(Ln); +var fP; +function EJ(r) { + fP = r.wasm.cwrap(Mn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function uee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, f] = n.shape, d = [c, p, u, f], h = e.dataIdMap.get(n.dataId), g; - h.dtype !== "float32" && (g = cs({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), h = e.dataIdMap.get(g.dataId)); - let y = h.id, b = e.makeOutput(d, "float32"); - if (x.sizeFromShape(n.shape) === 0) +function $J(r) { + let { backend: e, inputs: t6, attrs: o } = r, { images: n } = t6, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = e.dataIdMap.get(n.dataId), g; + h.dtype !== "float32" && (g = ls({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), h = e.dataIdMap.get(g.dataId)); + let x = h.id, b = e.makeOutput(f, "float32"); + if (y.sizeFromShape(n.shape) === 0) return b; let C = e.dataIdMap.get(b.dataId).id; - return MO(y, c, l, m, f, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && e.disposeData(g.dataId), b; + return fP(x, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && e.disposeData(g.dataId), b; } -var LO = { kernelName: Un, backendName: "wasm", setupFunc: iee, kernelFunc: uee }; -var BO; -function pee(r) { - BO = r.wasm.cwrap(Wn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var hP = { kernelName: Mn, backendName: "wasm", setupFunc: EJ, kernelFunc: $J }; +var gP; +function AJ(r) { + gP = r.wasm.cwrap(Pn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function cee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, f] = n.shape, d = [c, p, u, f], h = e.makeOutput(d, "float32"); - if (x.sizeFromShape(n.shape) === 0) +function RJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { images: n } = t6, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = e.makeOutput(f, "float32"); + if (y.sizeFromShape(n.shape) === 0) return h; - let g = e.dataIdMap.get(n.dataId), y; - g.dtype !== "float32" && (y = cs({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), g = e.dataIdMap.get(y.dataId)); + let g = e.dataIdMap.get(n.dataId), x; + g.dtype !== "float32" && (x = ls({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), g = e.dataIdMap.get(x.dataId)); let b = g.id, C = e.dataIdMap.get(h.dataId).id; - return BO(b, c, l, m, f, p, u, s ? 1 : 0, a ? 1 : 0, C), y != null && e.disposeData(y.dataId), h; + return gP(b, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), x != null && e.disposeData(x.dataId), h; } -var VO = { kernelName: Wn, backendName: "wasm", setupFunc: pee, kernelFunc: cee }; -var zO; -function lee(r) { - zO = r.wasm.cwrap(fa, null, ["number", "array", "number", "array", "number", "number"]); +var xP = { kernelName: Pn, backendName: "wasm", setupFunc: AJ, kernelFunc: RJ }; +var yP; +function FJ(r) { + yP = r.wasm.cwrap(Bn, null, ["number", "array", "number", "array", "number", "number"]); } -function mee(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dims: s } = o, a = x.parseAxisParam(s, n.shape); +function DJ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dims: s } = o, a = y.parseAxisParam(s, n.shape); if (n.shape.length === 0) - return zu({ inputs: { x: n }, backend: t10 }); - let i = t10.makeOutput(n.shape, n.dtype), p = t10.dataIdMap.get(n.dataId).id, u = t10.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(a).buffer), l = new Uint8Array(new Int32Array(n.shape).buffer); - zO(p, c, a.length, l, n.shape.length, u); - let m = Mt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: t10 }); - return t10.disposeData(i.dataId), m; + return Vu({ inputs: { x: n }, backend: t6 }); + let i = t6.makeOutput(n.shape, n.dtype), p = t6.dataIdMap.get(n.dataId).id, u = t6.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(a).buffer), l = new Uint8Array(new Int32Array(n.shape).buffer); + yP(p, c, a.length, l, n.shape.length, u); + let m = Mt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: t6 }); + return t6.disposeData(i.dataId), m; } -var WO = { kernelName: fa, backendName: "wasm", kernelFunc: mee, setupFunc: lee }; -var UO; -function fee(r) { - UO = r.wasm.cwrap(es, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var bP = { kernelName: Bn, backendName: "wasm", kernelFunc: DJ, setupFunc: FJ }; +var CP; +function OJ(r) { + CP = r.wasm.cwrap(es, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function dee(r) { - let { inputs: e, backend: t10, attrs: o } = r, { image: n } = e, { radians: s, fillValue: a, center: i } = o, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(n.dataId).id, c = t10.dataIdMap.get(p.dataId).id, [l, m, f, d] = n.shape, [h, g] = I.getImageCenter(i, m, f), y = a === 0, b = 255, C = typeof a == "number" ? [a, a, a, y ? 0 : b] : [...a, b], w = new Uint8Array(new Int32Array(C).buffer); - return UO(u, l, m, f, d, s, h, g, w, C.length, c), p; +function PJ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { image: n } = e, { radians: s, fillValue: a, center: i } = o, p = t6.makeOutput(n.shape, n.dtype), u = t6.dataIdMap.get(n.dataId).id, c = t6.dataIdMap.get(p.dataId).id, [l, m, d, f] = n.shape, [h, g] = S.getImageCenter(i, m, d), x = a === 0, b = 255, C = typeof a == "number" ? [a, a, a, x ? 0 : b] : [...a, b], w = new Uint8Array(new Int32Array(C).buffer); + return CP(u, l, m, d, f, s, h, g, w, C.length, c), p; } -var GO = { kernelName: es, backendName: "wasm", kernelFunc: dee, setupFunc: fee }; -var HO = Qe(da); -var qO = Qe(xo); -var KO; -function hee(r) { - KO = r.wasm.cwrap(Hn, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var SP = { kernelName: es, backendName: "wasm", kernelFunc: PJ, setupFunc: OJ }; +var wP = Ve(Ca); +var IP = Ve(Vn); +var vP; +function MJ(r) { + vP = r.wasm.cwrap(zn, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function gee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { indices: n, updates: s } = t10, { shape: a } = o, i = e.makeOutput(a, s.dtype); - if (x.sizeFromShape(a) === 0) +function LJ(r) { + let { backend: e, inputs: t6, attrs: o } = r, { indices: n, updates: s } = t6, { shape: a } = o, i = e.makeOutput(a, s.dtype); + if (y.sizeFromShape(a) === 0) return i; - let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = cl.calculateShapes(s, n, a), d = e.dataIdMap.get(n.dataId).id, g = e.dataIdMap.get(s.dataId).id, y = new Uint8Array(new Int32Array(l).buffer), b = e.dataIdMap.get(i.dataId).id; - return KO(d, g, Ae[s.dtype], p, u, c, y, m, b), i; + let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = rl.calculateShapes(s, n, a), f = e.dataIdMap.get(n.dataId).id, g = e.dataIdMap.get(s.dataId).id, x = new Uint8Array(new Int32Array(l).buffer), b = e.dataIdMap.get(i.dataId).id; + return vP(f, g, Fe[s.dtype], p, u, c, x, m, b), i; } -var jO = { kernelName: Hn, backendName: "wasm", setupFunc: hee, kernelFunc: gee }; -var XO; -function xee(r) { - XO = r.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); +var kP = { kernelName: zn, backendName: "wasm", setupFunc: MJ, kernelFunc: LJ }; +var NP; +function BJ(r) { + NP = r.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); } -function yee(r) { - let { inputs: e, backend: t10 } = r, { condition: o, t: n, e: s } = e, a = t10.dataIdMap.get(o.dataId).id, i = t10.dataIdMap.get(n.dataId).id, p = t10.dataIdMap.get(s.dataId).id, u = t10.makeOutput(n.shape, n.dtype), c = t10.dataIdMap.get(u.dataId).id, l = o.shape.length, m = n.shape.length, f = l === 0 || l > 1 || m === 1 ? 1 : x.sizeFromShape(n.shape.slice(1)); - return XO(a, i, p, f, c), u; +function VJ(r) { + let { inputs: e, backend: t6 } = r, { condition: o, t: n, e: s } = e, a = t6.dataIdMap.get(o.dataId).id, i = t6.dataIdMap.get(n.dataId).id, p = t6.dataIdMap.get(s.dataId).id, u = t6.makeOutput(n.shape, n.dtype), c = t6.dataIdMap.get(u.dataId).id, l = o.shape.length, m = n.shape.length, d = l === 0 || l > 1 || m === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); + return NP(a, i, p, d, c), u; } -var YO = { kernelName: vs, backendName: "wasm", kernelFunc: yee, setupFunc: xee }; -var QO; -function bee(r) { - QO = r.wasm.cwrap(yo, null, ["number", "number"]); +var TP = { kernelName: Ts, backendName: "wasm", kernelFunc: VJ, setupFunc: BJ }; +var _P; +function zJ(r) { + _P = r.wasm.cwrap(Un, null, ["number", "number"]); } -function Cee(r) { - let { backend: e, inputs: { x: t10 } } = r, o = e.dataIdMap.get(t10.dataId).id, n = e.makeOutput(t10.shape, t10.dtype), s = e.dataIdMap.get(n.dataId).id; - return x.sizeFromShape(n.shape) === 0 || QO(o, s), n; +function WJ(r) { + let { backend: e, inputs: { x: t6 } } = r, o = e.dataIdMap.get(t6.dataId).id, n = e.makeOutput(t6.shape, t6.dtype), s = e.dataIdMap.get(n.dataId).id; + return y.sizeFromShape(n.shape) === 0 || _P(o, s), n; } -var ZO = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: bee, kernelFunc: Cee }; -var JO = Qe(Kn); -var e3; -function Iee(r) { - e3 = r.wasm.cwrap(Xn, null, ["number", "number", "number", "number"]); +var EP = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: zJ, kernelFunc: WJ }; +var $P = Ve(Wn); +var AP; +function UJ(r) { + AP = r.wasm.cwrap(qn, null, ["number", "number", "number", "number"]); } -function wee(r) { - let { backend: e, inputs: { logits: t10 }, attrs: { dim: o } } = r, n = e.dataIdMap.get(t10.dataId).id, s = e.makeOutput(t10.shape, t10.dtype), a = e.dataIdMap.get(s.dataId).id, i = t10.shape[o], p = x.sizeFromShape(t10.shape) / i; - return x.sizeFromShape(s.shape) === 0 || e3(n, a, i, p), s; +function GJ(r) { + let { backend: e, inputs: { logits: t6 }, attrs: { dim: o } } = r, n = e.dataIdMap.get(t6.dataId).id, s = e.makeOutput(t6.shape, t6.dtype), a = e.dataIdMap.get(s.dataId).id, i = t6.shape[o], p = y.sizeFromShape(t6.shape) / i; + return y.sizeFromShape(s.shape) === 0 || AP(n, a, i, p), s; } -var t3 = { kernelName: Xn, backendName: "wasm", setupFunc: Iee, kernelFunc: wee }; -function See(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o, i = x.sizeFromShape(s), p = [[0, 0]]; +var RP = { kernelName: qn, backendName: "wasm", setupFunc: UJ, kernelFunc: GJ }; +function HJ(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o, i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); - let u = $g.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = I.getReshaped(u.shape, s, i, false), l = I.getPermuted(c.length, s.length, false), m = I.getReshapedPermuted(u.shape, s, i, false), h = Mt({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = Eo({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = Mt({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); - return t10.disposeData(u.dataId), t10.disposeData(h.dataId), t10.disposeData(b.dataId), k; + let u = bg.kernelFunc({ inputs: { x: n }, backend: t6, attrs: { paddings: p, constantValue: 0 } }), c = S.getReshaped(u.shape, s, i, false), l = S.getPermuted(c.length, s.length, false), m = S.getReshapedPermuted(u.shape, s, i, false), h = Mt({ inputs: { x: u }, backend: t6, attrs: { shape: c } }), b = uo({ inputs: { x: h }, backend: t6, attrs: { perm: l } }), k = Mt({ inputs: { x: b }, backend: t6, attrs: { shape: m } }); + return t6.disposeData(u.dataId), t6.disposeData(h.dataId), t6.disposeData(b.dataId), k; } -var r3 = { kernelName: ks, backendName: "wasm", kernelFunc: See }; -var o3; -function vee(r) { - o3 = r.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var FP = { kernelName: Es, backendName: "wasm", kernelFunc: HJ }; +var DP; +function qJ(r) { + DP = r.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function kee(r) { - let { backend: e, inputs: t10 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = t10, i = o.shape[0], p = o.shape[1], u = e.readSync(s.dataId)[0], c = [i + u, p], l = e.dataIdMap.get(o.dataId).id, m = e.dataIdMap.get(n.dataId).id, f = e.dataIdMap.get(a.dataId).id, d = e.makeOutput(c, o.dtype), h = e.dataIdMap.get(d.dataId).id, g = e.makeOutput(c.slice(0, 1), n.dtype), y = e.dataIdMap.get(g.dataId).id, b = e.makeOutput([u], "bool"), C = e.dataIdMap.get(b.dataId).id, w = e.makeOutput([i], o.dtype), k = e.dataIdMap.get(w.dataId).id, _ = e.makeOutput([4], "int32"), E = e.dataIdMap.get(_.dataId).id, R = o3(l, m, Ae[n.dtype], i, u, p, f, h, y, C, k, E), A = e.readSync(_.dataId), D; - switch (A[0]) { +function KJ(r) { + let { backend: e, inputs: t6 } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = t6, i = o.shape[0], p = o.shape[1], u = e.readSync(s.dataId)[0], c = [i + u, p], l = e.dataIdMap.get(o.dataId).id, m = e.dataIdMap.get(n.dataId).id, d = e.dataIdMap.get(a.dataId).id, f = e.makeOutput(c, o.dtype), h = e.dataIdMap.get(f.dataId).id, g = e.makeOutput(c.slice(0, 1), n.dtype), x = e.dataIdMap.get(g.dataId).id, b = e.makeOutput([u], "bool"), C = e.dataIdMap.get(b.dataId).id, w = e.makeOutput([i], o.dtype), k = e.dataIdMap.get(w.dataId).id, _ = e.makeOutput([4], "int32"), $ = e.dataIdMap.get(_.dataId).id, A = DP(l, m, Fe[n.dtype], i, u, p, d, h, x, C, k, $), R = e.readSync(_.dataId), D; + switch (R[0]) { case 1: { - D = I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(A[1]); + D = S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(R[1]); break; } case 2: { - D = I.getSparseFillEmptyRowsNegativeIndexErrorMessage(A[1], A[2]); + D = S.getSparseFillEmptyRowsNegativeIndexErrorMessage(R[1], R[2]); break; } case 3: - D = I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(A[1], A[2], A[3]); + D = S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(R[1], R[2], R[3]); break; default: D = ""; } if (e.disposeData(_.dataId), D) - throw e.disposeData(d.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(w.dataId), new Error(D); - let O = d, M = g; - return R !== c[0] && (O = Xo({ inputs: { x: d }, attrs: { begin: 0, size: [R, p] }, backend: e }), M = Xo({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: e }), e.disposeData(d.dataId), e.disposeData(g.dataId)), [O, M, b, w]; + throw e.disposeData(f.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(w.dataId), new Error(D); + let P = f, M = g; + return A !== c[0] && (P = Eo({ inputs: { x: f }, attrs: { begin: 0, size: [A, p] }, backend: e }), M = Eo({ inputs: { x: g }, attrs: { begin: 0, size: A }, backend: e }), e.disposeData(f.dataId), e.disposeData(g.dataId)), [P, M, b, w]; } -var n3 = { kernelName: Qa, backendName: "wasm", setupFunc: vee, kernelFunc: kee }; -var s3; -function Tee(r) { - s3 = r.wasm.cwrap(ga, null, ["number", "number", "number", "number", "number", "number", "number"]); +var OP = { kernelName: ui, backendName: "wasm", setupFunc: qJ, kernelFunc: KJ }; +var PP; +function jJ(r) { + PP = r.wasm.cwrap(wa, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function Nee(r) { - let { backend: e, inputs: t10 } = r, { inputIndices: o, inputShape: n, newShape: s } = t10; +function XJ(r) { + let { backend: e, inputs: t6 } = r, { inputIndices: o, inputShape: n, newShape: s } = t6; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); @@ -25065,201 +25133,201 @@ function Nee(r) { ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = o.shape[0], c = x.sizeFromShape(s.shape), l = e.makeOutput([u, c], o.dtype), m = e.dataIdMap.get(l.dataId).id, f = e.makeOutput([c], s.dtype), d = e.dataIdMap.get(f.dataId).id, h = e.makeOutput([3], "int32"), g = e.dataIdMap.get(h.dataId).id; - s3(a, i, p, u, m, d, g); - let y = e.readSync(h.dataId), b; - switch (y[0]) { + let a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = o.shape[0], c = y.sizeFromShape(s.shape), l = e.makeOutput([u, c], o.dtype), m = e.dataIdMap.get(l.dataId).id, d = e.makeOutput([c], s.dtype), f = e.dataIdMap.get(d.dataId).id, h = e.makeOutput([3], "int32"), g = e.dataIdMap.get(h.dataId).id; + PP(a, i, p, u, m, f, g); + let x = e.readSync(h.dataId), b; + switch (x[0]) { case 0: { - b = I.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(y[1], y[2]); + b = S.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1], x[2]); break; } case 1: { - b = I.getSparseReshapeNegativeOutputDimErrorMessage(y[1], y[2]); + b = S.getSparseReshapeNegativeOutputDimErrorMessage(x[1], x[2]); break; } case 2: - b = I.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); + b = S.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); break; case 3: { - let C = Array.from(e.readSync(n.dataId)), w = Array.from(e.readSync(f.dataId)); - b = I.getSparseReshapeInputOutputMultipleErrorMessage(C, w); + let C = Array.from(e.readSync(n.dataId)), w = Array.from(e.readSync(d.dataId)); + b = S.getSparseReshapeInputOutputMultipleErrorMessage(C, w); break; } case 4: { - let C = Array.from(e.readSync(n.dataId)), w = Array.from(e.readSync(f.dataId)); - b = I.getSparseReshapeInputOutputMismatchErrorMessage(C, w); + let C = Array.from(e.readSync(n.dataId)), w = Array.from(e.readSync(d.dataId)); + b = S.getSparseReshapeInputOutputMismatchErrorMessage(C, w); break; } default: b = ""; } if (e.disposeData(h.dataId), b) - throw e.disposeData(l.dataId), e.disposeData(f.dataId), new Error(b); - return [l, f]; + throw e.disposeData(l.dataId), e.disposeData(d.dataId), new Error(b); + return [l, d]; } -var a3 = { kernelName: ga, backendName: "wasm", setupFunc: Tee, kernelFunc: Nee }; -var i3; -function Rg(r) { - i3 = r.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var MP = { kernelName: wa, backendName: "wasm", setupFunc: jJ, kernelFunc: XJ }; +var LP; +function Cg(r) { + LP = r.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Ag(r, e) { - let { backend: t10, inputs: o } = r, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = t10.readSync(a.dataId, i - 1, i)[0], c = i > 0 ? p + 1 : 0; +function Sg(r, e) { + let { backend: t6, inputs: o } = r, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = t6.readSync(a.dataId, i - 1, i)[0], c = i > 0 ? p + 1 : 0; if (c < 0) - throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let l = n.shape.slice(); l[0] = c; - let m = t10.dataIdMap.get(n.dataId).id, f = t10.dataIdMap.get(s.dataId).id, d = t10.dataIdMap.get(a.dataId).id, h = t10.makeOutput(l, n.dtype), g = t10.dataIdMap.get(h.dataId).id, y = t10.makeOutput([4], "int32"), b = t10.dataIdMap.get(y.dataId).id; - i3(m, Ae[n.dtype], n.shape[0], f, d, g, b, e, 0); - let C = t10.readSync(y.dataId), w; + let m = t6.dataIdMap.get(n.dataId).id, d = t6.dataIdMap.get(s.dataId).id, f = t6.dataIdMap.get(a.dataId).id, h = t6.makeOutput(l, n.dtype), g = t6.dataIdMap.get(h.dataId).id, x = t6.makeOutput([4], "int32"), b = t6.dataIdMap.get(x.dataId).id; + LP(m, Fe[n.dtype], n.shape[0], d, f, g, b, e, 0); + let C = t6.readSync(x.dataId), w; switch (C[0]) { case 0: { - w = I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); + w = S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); break; } case 1: { - w = I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); + w = S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); break; } case 2: - w = I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1], C[2]); + w = S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1], C[2]); break; case 3: - w = I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1], C[2], C[3]); + w = S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1], C[2], C[3]); break; default: w = ""; } - if (t10.disposeData(y.dataId), w) - throw t10.disposeData(h.dataId), new Error(w); + if (t6.disposeData(x.dataId), w) + throw t6.disposeData(h.dataId), new Error(w); return h; } -function _ee(r) { - return Ag(r, true); +function YJ(r) { + return Sg(r, true); } -var u3 = { kernelName: Za, backendName: "wasm", setupFunc: Rg, kernelFunc: _ee }; -function Eee(r) { - return Ag(r, false); +var BP = { kernelName: pi, backendName: "wasm", setupFunc: Cg, kernelFunc: YJ }; +function QJ(r) { + return Sg(r, false); } -var p3 = { kernelName: Ja, backendName: "wasm", setupFunc: Rg, kernelFunc: Eee }; -function $ee(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = t10, i = x.parseAxisParam(a, n.shape)[0], p = I.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); +var VP = { kernelName: ci, backendName: "wasm", setupFunc: Cg, kernelFunc: QJ }; +function ZJ(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = t6, i = y.parseAxisParam(a, n.shape)[0], p = S.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); return p.map((l) => { let m = [...c]; m[i] = l; - let f = Xo({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); - return u[i] += l, f; + let d = Eo({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); + return u[i] += l, d; }); } -var c3 = { kernelName: Ts, backendName: "wasm", kernelFunc: $ee }; -var l3 = Qe(bo); -var m3 = Qe(ti); -var Ree = true; -var f3 = nt(Co, Ree); -var d3; -function Aee(r) { - d3 = r.wasm.cwrap($s, null, ["number", "number", "number", "number"]); +var zP = { kernelName: $s, backendName: "wasm", kernelFunc: ZJ }; +var WP = Ve(Gn); +var UP = Ve(mi); +var JJ = true; +var GP = rt(Kn, JJ); +var HP; +function eee(r) { + HP = r.wasm.cwrap(Ds, null, ["number", "number", "number", "number"]); } -function Fee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { alpha: n } = o, { x: s } = t10, a = e.dataIdMap.get(s.dataId).id, i = e.makeOutput(s.shape, s.dtype), p = e.dataIdMap.get(i.dataId).id; - return d3(a, n, Ae[s.dtype], p), i; +function tee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { alpha: n } = o, { x: s } = t6, a = e.dataIdMap.get(s.dataId).id, i = e.makeOutput(s.shape, s.dtype), p = e.dataIdMap.get(i.dataId).id; + return HP(a, n, Fe[s.dtype], p), i; } -var h3 = { kernelName: $s, backendName: "wasm", setupFunc: Aee, kernelFunc: Fee }; -var g3; -function Dee(r) { - g3 = r.wasm.cwrap(Yn, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); +var qP = { kernelName: Ds, backendName: "wasm", setupFunc: eee, kernelFunc: tee }; +var KP; +function ree(r) { + KP = r.wasm.cwrap(jn, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); } -function Pee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { x: n } = t10, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: f, finalShape: d, isIdentity: h, sliceDim0: g, isSimpleSlice: y, begin: b, end: C, strides: w } = et.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function oee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { x: n } = t6, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: w } = ut.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = Mt({ inputs: { x: n }, backend: e, attrs: { shape: d } }); - else if (g || y) { - x.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let _ = et.computeOutShape(b, C, w), E = Xo({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); - k = Mt({ inputs: { x: E }, backend: e, attrs: { shape: d } }), e.disposeData(E.dataId); + k = Mt({ inputs: { x: n }, backend: e, attrs: { shape: f } }); + else if (g || x) { + y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); + let _ = ut.computeOutShape(b, C, w), $ = Eo({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); + k = Mt({ inputs: { x: $ }, backend: e, attrs: { shape: f } }), e.disposeData($.dataId); } else { - let _ = e.makeOutput(f, "float32"), E = e.dataIdMap.get(n.dataId).id, R = new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer), A = new Uint8Array(new Int32Array(b).buffer), D = new Uint8Array(new Int32Array(C).buffer), O = new Uint8Array(new Int32Array(w).buffer), M = new Uint8Array(new Int32Array(f).buffer), L = new Uint8Array(new Int32Array(x.computeStrides(f)).buffer), W = e.dataIdMap.get(_.dataId).id; - g3(E, R, n.shape.length, A, D, O, M, L, f.length, W), k = Mt({ inputs: { x: _ }, backend: e, attrs: { shape: d } }), e.disposeData(_.dataId); + let _ = e.makeOutput(d, "float32"), $ = e.dataIdMap.get(n.dataId).id, A = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), R = new Uint8Array(new Int32Array(b).buffer), D = new Uint8Array(new Int32Array(C).buffer), P = new Uint8Array(new Int32Array(w).buffer), M = new Uint8Array(new Int32Array(d).buffer), L = new Uint8Array(new Int32Array(y.computeStrides(d)).buffer), W = e.dataIdMap.get(_.dataId).id; + KP($, A, n.shape.length, R, D, P, M, L, d.length, W), k = Mt({ inputs: { x: _ }, backend: e, attrs: { shape: f } }), e.disposeData(_.dataId); } return k; } -var x3 = { kernelName: Yn, backendName: "wasm", setupFunc: Dee, kernelFunc: Pee }; -function Oee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { data: n, dataSplits: s } = t10, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: c, preserveShortSequences: l } = o, m = e.readSync(n.dataId), f = e.readSync(s.dataId), [d, h] = ku(m, f, a, i, p, u, c, l), g = e.makeOutput([d.length], "string"), y = e.dataIdMap.get(g.dataId); - y.stringBytes = d; +var jP = { kernelName: jn, backendName: "wasm", setupFunc: ree, kernelFunc: oee }; +function nee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { data: n, dataSplits: s } = t6, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: c, preserveShortSequences: l } = o, m = e.readSync(n.dataId), d = e.readSync(s.dataId), [f, h] = ku(m, d, a, i, p, u, c, l), g = e.makeOutput([f.length], "string"), x = e.dataIdMap.get(g.dataId); + x.stringBytes = f; let b = e.makeOutput(s.shape, "int32"); return e.typedArrayFromHeap(b).set(h), [g, b]; } -var y3 = { kernelName: Ns, backendName: "wasm", kernelFunc: Oee }; -function Mee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { input: n, delimiter: s } = t10, { skipEmpty: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c, l] = Tu(i, p[0], a), m = c.length, f = e.makeOutput([m, 2], "int32"); - e.typedArrayFromHeap(f).set(u); +var XP = { kernelName: As, backendName: "wasm", kernelFunc: nee }; +function see(r) { + let { backend: e, inputs: t6, attrs: o } = r, { input: n, delimiter: s } = t6, { skipEmpty: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c, l] = Nu(i, p[0], a), m = c.length, d = e.makeOutput([m, 2], "int32"); + e.typedArrayFromHeap(d).set(u); let h = e.makeOutput([m], "string"), g = e.dataIdMap.get(h.dataId); g.stringBytes = c; - let y = e.makeOutput([2], "int32"); - return e.typedArrayFromHeap(y).set(l), [f, h, y]; + let x = e.makeOutput([2], "int32"); + return e.typedArrayFromHeap(x).set(l), [d, h, x]; } -var b3 = { kernelName: ri, backendName: "wasm", kernelFunc: Mee }; -function Lee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { input: n } = t10, { numBuckets: s } = o, a = e.readSync(n.dataId), i = Nu(a, s), p = e.makeOutput(n.shape, "int32"); +var YP = { kernelName: di, backendName: "wasm", kernelFunc: see }; +function aee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { input: n } = t6, { numBuckets: s } = o, a = e.readSync(n.dataId), i = Tu(a, s), p = e.makeOutput(n.shape, "int32"); return e.typedArrayFromHeap(p).set(i), p; } -var C3 = { kernelName: oi, backendName: "wasm", kernelFunc: Lee }; -var Bee = true; -var I3 = nt(Io, Bee); -var w3; -function Vee(r) { - w3 = r.wasm.cwrap(jn, null, ["number", "number", "number", "number"]); +var QP = { kernelName: fi, backendName: "wasm", kernelFunc: aee }; +var iee = true; +var ZP = rt(Xn, iee); +var JP; +function uee(r) { + JP = r.wasm.cwrap(Hn, null, ["number", "number", "number", "number"]); } -function zee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: f } = kr(a, n, e), d = l; - if (f) { +function pee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = t6, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = kr(a, n, e), f = l; + if (d) { let C = e.dataIdMap.get(c.dataId).id; - C !== i && (u = c, p = C, d = I.getInnerMostAxes(d.length, u.shape.length)); + C !== i && (u = c, p = C, f = S.getInnerMostAxes(f.length, u.shape.length)); } - I.assertAxesAreInnerMostDims("sum", d, u.shape.length); - let [h, g] = I.computeOutAndReduceShapes(u.shape, d), y = x.sizeFromShape(g), b = e.makeOutput(h, u.dtype); - if (x.sizeFromShape(u.shape) !== 0) { + S.assertAxesAreInnerMostDims("sum", f, u.shape.length); + let [h, g] = S.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + if (y.sizeFromShape(u.shape) !== 0) { let C = e.dataIdMap.get(b.dataId).id; - w3(p, y, Ae[b.dtype], C); + JP(p, x, Fe[b.dtype], C); } - if (f && e.disposeData(c.dataId), s) { - let C = I.expandShapeToKeepDim(b.shape, m); + if (d && e.disposeData(c.dataId), s) { + let C = S.expandShapeToKeepDim(b.shape, m); b.shape = C; } return b; } -var S3 = { kernelName: jn, backendName: "wasm", setupFunc: Vee, kernelFunc: zee }; -var v3 = Qe(xa); -var k3 = Qe(Qn); -var T3; -function Wee(r) { - T3 = r.wasm.cwrap(wo, null, ["number", "array", "number", "array", "number", "number"]); +var e3 = { kernelName: Hn, backendName: "wasm", setupFunc: uee, kernelFunc: pee }; +var t3 = Ve(Yn); +var r3 = Ve(Qn); +var o3; +function cee(r) { + o3 = r.wasm.cwrap(to, null, ["number", "array", "number", "array", "number", "number"]); } -function Uee(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, s = t10.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); +function lee(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, s = t6.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); for (let m = 0; m < i.length; m++) i[m] = n.shape[m] * a[m]; - let p = new Uint8Array(new Int32Array(n.shape).buffer), u = new Uint8Array(new Int32Array(i).buffer), c = t10.makeOutput(i, n.dtype), l = t10.dataIdMap.get(c.dataId).id; - return T3(s, p, n.shape.length, u, i.length, Ae[c.dtype], l), c; + let p = new Uint8Array(new Int32Array(n.shape).buffer), u = new Uint8Array(new Int32Array(i).buffer), c = t6.makeOutput(i, n.dtype), l = t6.dataIdMap.get(c.dataId).id; + return o3(s, p, n.shape.length, u, i.length, Fe[c.dtype], l), c; } -var N3 = { kernelName: wo, backendName: "wasm", setupFunc: Wee, kernelFunc: Uee }; -var _3; -function Gee(r) { - _3 = r.wasm.cwrap(Zn, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); +var n3 = { kernelName: to, backendName: "wasm", setupFunc: cee, kernelFunc: lee }; +var s3; +function mee(r) { + s3 = r.wasm.cwrap(Zn, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); } -var Hee = ({ inputs: r, backend: e, attrs: t10 }) => { - let { x: o } = r, { k: n, sorted: s } = t10, a = e.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); +var dee = ({ inputs: r, backend: e, attrs: t6 }) => { + let { x: o } = r, { k: n, sorted: s } = t6, a = e.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); p[p.length - 1] = n; let u = e.makeOutput(p, o.dtype), c = e.dataIdMap.get(u.dataId).id, l = e.makeOutput(p, "int32"), m = e.dataIdMap.get(l.dataId).id; - return _3(a, i, o.shape.length, Ae[o.dtype], n, s, c, m), [u, l]; + return s3(a, i, o.shape.length, Fe[o.dtype], n, s, c, m), [u, l]; }; -var E3 = { kernelName: Zn, backendName: "wasm", setupFunc: Gee, kernelFunc: Hee }; -var $3; -function qee(r) { - $3 = r.wasm.cwrap(Jn, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); +var a3 = { kernelName: Zn, backendName: "wasm", setupFunc: mee, kernelFunc: dee }; +var i3; +function fee(r) { + i3 = r.wasm.cwrap(Jn, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); } -function Kee(r) { - let { backend: e, inputs: t10, attrs: o } = r, { image: n, transforms: s } = t10, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, f] = n.shape, [d, h] = u != null ? u : [l, m], g = [c, d, h, f], y = new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(x.computeStrides(g)).buffer), C = e.makeOutput(g, n.dtype), w = e.dataIdMap.get(C.dataId).id, _ = e.dataIdMap.get(n.dataId).id, R = e.dataIdMap.get(s.dataId).id, A = a === "nearest" ? 1 : 2, D; +function hee(r) { + let { backend: e, inputs: t6, attrs: o } = r, { image: n, transforms: s } = t6, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(y.computeStrides(g)).buffer), C = e.makeOutput(g, n.dtype), w = e.dataIdMap.get(C.dataId).id, _ = e.dataIdMap.get(n.dataId).id, A = e.dataIdMap.get(s.dataId).id, R = a === "nearest" ? 1 : 2, D; switch (i) { case "constant": D = 1; @@ -25277,40 +25345,40 @@ function Kee(r) { D = 1; break; } - return $3(_, R, s.shape[0] > 1, c, d, h, f, m, l, y, n.shape.length - 1, b, g.length - 1, A, D, p, w), C; + return i3(_, A, s.shape[0] > 1, c, f, h, d, m, l, x, n.shape.length - 1, b, g.length - 1, R, D, p, w), C; } -var R3 = { kernelName: Jn, backendName: "wasm", setupFunc: qee, kernelFunc: Kee }; -function jee(r) { - let { inputs: e, backend: t10, attrs: o } = r, { value: n } = e, { axis: s } = o; +var u3 = { kernelName: Jn, backendName: "wasm", setupFunc: fee, kernelFunc: hee }; +function gee(r) { + let { inputs: e, backend: t6, attrs: o } = r, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n.shape[s], i = n.shape.length, p = new Array(i - 1), u = 0; - for (let f = 0; f < i; f++) - f !== s && (p[u++] = n.shape[f]); + for (let d = 0; d < i; d++) + d !== s && (p[u++] = n.shape[d]); let c = new Array(a), l = new Array(i).fill(0), m = n.shape.slice(); m[s] = 1; - for (let f = 0; f < c.length; f++) - l[s] = f, c[f] = Xo({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: t10 }); - return c.map(({ dataId: f, dtype: d }) => ({ dataId: f, dtype: d, shape: p })); + for (let d = 0; d < c.length; d++) + l[s] = d, c[d] = Eo({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: t6 }); + return c.map(({ dataId: d, dtype: f }) => ({ dataId: d, dtype: f, shape: p })); } -var A3 = { kernelName: _s, backendName: "wasm", kernelFunc: jee }; -function Xee(r) { - let { inputs: { x: e }, backend: t10 } = r, o = t10.makeOutput(e.shape, e.dtype); - return t10.typedArrayFromHeap(o).fill(0), o; +var p3 = { kernelName: Rs, backendName: "wasm", kernelFunc: gee }; +function xee(r) { + let { inputs: { x: e }, backend: t6 } = r, o = t6.makeOutput(e.shape, e.dtype); + return t6.typedArrayFromHeap(o).fill(0), o; } -var F3 = { kernelName: Es, backendName: "wasm", kernelFunc: Xee }; -var Yee = [LD, BD, VD, WD, KD, XD, QD, JD, rP, nP, sP, aP, uP, pP, lP, fP, dP, hP, xP, bP, IP, SP, kP, TP, NP, _P, EP, $P, AP, FP, DP, OP, LP, VP, WP, GP, HP, qP, UD, jP, XP, YP, QP, ZP, JP, eO, tO, oO, nO, aO, uO, cO, lO, fO, dO, hO, xO, bO, IO, wO, vO, kO, TO, $g, _O, $O, AO, FO, DO, PO, OO, eP, LO, VO, WO, GO, HO, qO, jO, YO, ZO, JO, oP, t3, r3, n3, a3, u3, p3, c3, l3, m3, f3, h3, x3, y3, b3, C3, I3, S3, v3, k3, N3, E3, R3, HD, A3, F3]; -for (let r of Yee) - ya(r); -var Yw = P(); -Yw.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { +var c3 = { kernelName: Fs, backendName: "wasm", kernelFunc: xee }; +var yee = [dD, fD, hD, xD, wD, vD, ND, _D, AD, FD, DD, OD, MD, LD, VD, WD, UD, GD, qD, jD, YD, ZD, eO, tO, rO, oO, nO, sO, iO, uO, pO, lO, dO, hO, xO, bO, CO, SO, yD, wO, vO, kO, NO, TO, _O, EO, $O, AO, FO, DO, PO, LO, VO, zO, UO, GO, HO, KO, XO, QO, ZO, eP, tP, rP, bg, nP, aP, uP, pP, cP, lP, mP, dP, ED, hP, xP, bP, SP, wP, IP, kP, TP, EP, $P, RD, RP, FP, OP, MP, BP, VP, zP, WP, UP, GP, qP, jP, XP, YP, QP, ZP, e3, t3, r3, n3, a3, u3, CD, p3, c3]; +for (let r of yee) + Ia(r); +var Hw = O(); +Hw.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { 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, 9, 1, 7, 0, 65, 0, 253, 15, 26, 11])); } catch (r) { return false; } }); -Yw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { - if (Yw.get("IS_NODE")) +Hw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { + if (Hw.get("IS_NODE")) return false; try { return 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])); @@ -25318,51 +25386,51 @@ Yw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { return false; } }); -var oS = rp(M3()); -var U3 = rp(B3()); -var nS = rp(V3()); -var z3 = oS.default || oS; -var Qee = nS.default || nS; -var Gl = class extends Jr { +var Zw = rp(f3()); +var C3 = rp(g3()); +var Jw = rp(x3()); +var y3 = Zw.default || Zw; +var bee = Jw.default || Jw; +var Pl = class extends Zr { constructor(e) { - super(), this.wasm = e, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(H3), rS = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new rn(this, cr()); + super(), this.wasm = e, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(w3), Qw = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new Do(this, cr()); } - write(e, t10, o) { + write(e, t6, o) { let n = { id: this.dataIdNextNumber++ }; - return this.move(n, e, t10, o, 1), n; + return this.move(n, e, t6, o, 1), n; } numDataIds() { return this.dataIdMap.numDataIds(); } async time(e) { - let t10 = x.now(); - return e(), { kernelMs: x.now() - t10 }; + let t6 = y.now(); + return e(), { kernelMs: y.now() - t6 }; } - move(e, t10, o, n, s) { + move(e, t6, o, n, s) { let a = this.dataIdNextNumber++; if (n === "string") { - let c = t10; + let c = t6; this.dataIdMap.set(e, { id: a, stringBytes: c, shape: o, dtype: n, memoryOffset: null, refCount: s }); return; } - let i = x.sizeFromShape(o), p = i * x.bytesPerElement(n), u = this.wasm._malloc(p); - this.dataIdMap.set(e, { id: a, memoryOffset: u, shape: o, dtype: n, refCount: s }), this.wasm.tfjs.registerTensor(a, i, u), t10 != null && this.wasm.HEAPU8.set(new Uint8Array(t10.buffer, t10.byteOffset, p), u); + let i = y.sizeFromShape(o), p = i * y.bytesPerElement(n), u = this.wasm._malloc(p); + this.dataIdMap.set(e, { id: a, memoryOffset: u, shape: o, dtype: n, refCount: s }), this.wasm.tfjs.registerTensor(a, i, u), t6 != null && this.wasm.HEAPU8.set(new Uint8Array(t6.buffer, t6.byteOffset, p), u); } async read(e) { return this.readSync(e); } - readSync(e, t10, o) { + readSync(e, t6, o) { let { memoryOffset: n, dtype: s, shape: a, stringBytes: i } = this.dataIdMap.get(e); if (s === "string") - return (t10 == null || t10 === 0) && (o == null || o >= i.length) ? i : i.slice(t10, o); - t10 = t10 || 0, o = o || x.sizeFromShape(a); - let p = x.bytesPerElement(s), u = this.wasm.HEAPU8.slice(n + t10 * p, n + o * p); - return Jee(u.buffer, s); + return (t6 == null || t6 === 0) && (o == null || o >= i.length) ? i : i.slice(t6, o); + t6 = t6 || 0, o = o || y.sizeFromShape(a); + let p = y.bytesPerElement(s), u = this.wasm.HEAPU8.slice(n + t6 * p, n + o * p); + return See(u.buffer, s); } - disposeData(e, t10 = false) { + disposeData(e, t6 = false) { if (this.dataIdMap.has(e)) { let o = this.dataIdMap.get(e); - if (o.refCount--, !t10 && o.refCount > 0) + if (o.refCount--, !t6 && o.refCount > 0) return false; this.wasm._free(o.memoryOffset), this.wasm.tfjs.disposeData(o.id), this.dataIdMap.delete(e); } @@ -25372,8 +25440,8 @@ var Gl = class extends Jr { return this.dataIdMap.has(e) ? this.dataIdMap.get(e).refCount : 0; } incRef(e) { - let t10 = this.dataIdMap.get(e); - t10 != null && t10.refCount++; + let t6 = this.dataIdMap.get(e); + t6 != null && t6.refCount++; } floatPrecision() { return 32; @@ -25387,21 +25455,21 @@ var Gl = class extends Jr { memory() { return { unreliable: false }; } - makeOutput(e, t10, o) { + makeOutput(e, t6, o) { let n; if (o == null) - n = this.write(null, e, t10); + n = this.write(null, e, t6); else { let s = this.dataIdNextNumber++; - n = { id: s }, this.dataIdMap.set(n, { id: s, memoryOffset: o, shape: e, dtype: t10, refCount: 1 }); - let a = x.sizeFromShape(e); + n = { id: s }, this.dataIdMap.set(n, { id: s, memoryOffset: o, shape: e, dtype: t6, refCount: 1 }); + let a = y.sizeFromShape(e); this.wasm.tfjs.registerTensor(s, a, o); } - return { dataId: n, shape: e, dtype: t10 }; + return { dataId: n, shape: e, dtype: t6 }; } - typedArrayFromHeap({ shape: e, dtype: t10, dataId: o }) { - let n = this.wasm.HEAPU8.buffer, { memoryOffset: s } = this.dataIdMap.get(o), a = x.sizeFromShape(e); - switch (t10) { + typedArrayFromHeap({ shape: e, dtype: t6, dataId: o }) { + let n = this.wasm.HEAPU8.buffer, { memoryOffset: s } = this.dataIdMap.get(o), a = y.sizeFromShape(e); + switch (t6) { case "float32": return new Float32Array(n, s, a); case "int32": @@ -25409,51 +25477,51 @@ var Gl = class extends Jr { case "bool": return new Uint8Array(n, s, a); default: - throw new Error(`Unknown dtype ${t10}`); + throw new Error(`Unknown dtype ${t6}`); } } }; -function Zee(r) { - return (e, t10) => (x.fetch(r, { credentials: "same-origin" }).then((o) => { +function Cee(r) { + return (e, t6) => (y.fetch(r, { credentials: "same-origin" }).then((o) => { o.ok || e.env.a(`failed to load wasm binary file at '${r}'`), o.arrayBuffer().then((n) => { WebAssembly.instantiate(n, e).then((s) => { - t10(s.instance, s.module); + t6(s.instance, s.module); }); }); }), {}); } -function W3(r, e, t10) { - if (Pg != null) - return Pg; +function b3(r, e, t6) { + if (vg != null) + return vg; let o = "tfjs-backend-wasm.wasm"; - return r && e ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r && (o = "tfjs-backend-wasm-simd.wasm"), Wl != null && Wl[o] != null ? Wl[o] : t10 + o; + return r && e ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r && (o = "tfjs-backend-wasm-simd.wasm"), Dl != null && Dl[o] != null ? Dl[o] : t6 + o; } -async function G3() { - let [r, e] = await Promise.all([P().getAsync("WASM_HAS_SIMD_SUPPORT"), P().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); - return new Promise((t10, o) => { +async function S3() { + let [r, e] = await Promise.all([O().getAsync("WASM_HAS_SIMD_SUPPORT"), O().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); + return new Promise((t6, o) => { let n = {}; n.locateFile = (i, p) => { if (i.endsWith(".worker.js")) { - let u = U3.wasmWorkerContents.replace(/\n/g, "\\n"), c = new Blob([u], { type: "application/javascript" }); + let u = C3.wasmWorkerContents.replace(/\n/g, "\\n"), c = new Blob([u], { type: "application/javascript" }); return URL.createObjectURL(c); } - return i.endsWith(".wasm") ? W3(r, e, zl != null ? zl : p) : p + i; - }, sS && (n.instantiateWasm = Zee(W3(r, e, zl != null ? zl : ""))); + return i.endsWith(".wasm") ? b3(r, e, Fl != null ? Fl : p) : p + i; + }, eI && (n.instantiateWasm = Cee(b3(r, e, Fl != null ? Fl : ""))); let s = false; n.onAbort = () => { - if (s || Ul) + if (s || Ol) return; - Ul = true, o({ message: "Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers" }); + Ol = true, o({ message: "Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers" }); }; let a; - e && r && Pg == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + z3.toString()], { type: "text/javascript" }), a = z3(n)) : a = Qee(n), a.then((i) => { - s = true, Ul = false; + e && r && vg == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + y3.toString()], { type: "text/javascript" }), a = y3(n)) : a = bee(n), a.then((i) => { + s = true, Ol = false; let p = null; - i.tfjs = { init: i.cwrap("init", null, []), initWithThreadsCount: i.cwrap("init_with_threads_count", null, ["number"]), getThreadsCount: i.cwrap("get_threads_count", "number", []), registerTensor: i.cwrap("register_tensor", null, ["number", "number", "number"]), disposeData: i.cwrap("dispose_data", p, ["number"]), dispose: i.cwrap("dispose", p, []) }, t10({ wasm: i }); + i.tfjs = { init: i.cwrap("init", null, []), initWithThreadsCount: i.cwrap("init_with_threads_count", null, ["number"]), getThreadsCount: i.cwrap("get_threads_count", "number", []), registerTensor: i.cwrap("register_tensor", null, ["number", "number", "number"]), disposeData: i.cwrap("dispose_data", p, ["number"]), dispose: i.cwrap("dispose", p, []) }, t6({ wasm: i }); }).catch(o); }); } -function Jee(r, e) { +function See(r, e) { switch (e) { case "float32": return new Float32Array(r); @@ -25465,95 +25533,106 @@ function Jee(r, e) { throw new Error(`Unknown dtype ${e}`); } } -var ete = ["tfjs-backend-wasm.wasm", "tfjs-backend-wasm-simd.wasm", "tfjs-backend-wasm-threaded-simd.wasm"]; -var Pg = null; -var zl = null; -var Wl = {}; -var Ul = false; -var sS = false; -function tte(r, e = false) { - if (sC("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), Ul) +var wee = ["tfjs-backend-wasm.wasm", "tfjs-backend-wasm-simd.wasm", "tfjs-backend-wasm-threaded-simd.wasm"]; +var vg = null; +var Fl = null; +var Dl = {}; +var Ol = false; +var eI = false; +function Iee(r, e = false) { + if (eC("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), Ol) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`"); - Pg = r, sS = e; + vg = r, eI = e; } -function rte(r, e = false) { - if (Ul) +function vee(r, e = false) { + if (Ol) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); if (typeof r == "string") - zl = r; + Fl = r; else { - Wl = r; - let t10 = ete.filter((o) => Wl[o] == null); - if (t10.length > 0) - throw new Error(`There were no entries found for the following binaries: ${t10.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`); + Dl = r; + let t6 = wee.filter((o) => Dl[o] == null); + if (t6.length > 0) + throw new Error(`There were no entries found for the following binaries: ${t6.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`); } - sS = e; + eI = e; } -var H3 = -1; -var rS = -1; -function ote(r) { - H3 = r; +var w3 = -1; +var Qw = -1; +function kee(r) { + w3 = r; } -function nte() { - if (rS === -1) +function Nee() { + if (Qw === -1) throw new Error("WASM backend not initialized."); - return rS; + return Qw; } -var ste = "4.0.0"; -var ate = 2; -pi("wasm", async () => { - let { wasm: r } = await G3(); - return new Gl(r); -}, ate); -var Va = P(); -Va.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); -Va.registerFlag("WEBGPU_CPU_FORWARD", () => true); -Va.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); -Va.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => false); -Va.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); -Va.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); -Va.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); -Va.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); -Va.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); -var Og = class { +var Tee = "4.1.0"; +var _ee = 2; +Ci("wasm", async () => { + let { wasm: r } = await S3(); + return new Pl(r); +}, _ee); +var ms = O(); +ms.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); +ms.registerFlag("WEBGPU_CPU_FORWARD", () => true); +ms.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); +ms.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => false); +ms.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); +ms.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); +ms.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); +ms.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); +ms.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); +ms.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL", () => 0); +ms.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER", () => false); +var kg = class { constructor(e) { - e && (this.vendor = e.vendor); + e && (this.vendor = e.vendor, this.architecture = e.architecture, this.intelGPUGeneration = this.getIntelGPUGeneration()); + } + getIntelGPUGeneration() { + if (this.isIntel()) { + if (this.architecture.startsWith("gen")) + return Number(this.architecture.match(/\d+/)); + if (this.architecture.startsWith("xe")) + return 12; + } + return 0; } isIntel() { return this.vendor === "intel"; } }; -var Mg = class { +var Ng = class { constructor(e) { this.device = e, this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } - acquireUploadBuffer(e, t10) { - return this.acquireBuffer(e, t10, true); + acquireUploadBuffer(e, t6) { + return this.acquireBuffer(e, t6, true); } - acquireBuffer(e, t10, o = false) { - let n = q3(e, t10); + acquireBuffer(e, t6, o = false) { + let n = I3(e, t6); if (this.freeBuffers.has(n) || this.freeBuffers.set(n, []), this.usedBuffers.has(n) || this.usedBuffers.set(n, []), this.numBytesUsed += e, this.numUsedBuffers++, this.freeBuffers.get(n).length > 0) { this.numFreeBuffers--; let a = this.freeBuffers.get(n).shift(); return this.usedBuffers.get(n).push(a), a; } this.numBytesAllocated += e; - let s = this.device.createBuffer({ size: e, usage: t10, mappedAtCreation: o }); + let s = this.device.createBuffer({ size: e, usage: t6, mappedAtCreation: o }); return this.usedBuffers.get(n).push(s), s; } - releaseBuffer(e, t10, o) { + releaseBuffer(e, t6, o) { if (this.freeBuffers.size === 0) return; - let n = q3(t10, o); + let n = I3(t6, o); this.freeBuffers.has(n) || this.freeBuffers.set(n, []), this.freeBuffers.get(n).push(e), this.numFreeBuffers++, this.numUsedBuffers--; let s = this.usedBuffers.get(n), a = s.indexOf(e); if (a < 0) throw new Error("Cannot release a buffer that was never provided by this buffer manager"); - s.splice(a, 1), this.numBytesUsed -= t10; + s.splice(a, 1), this.numBytesUsed -= t6; } - releaseUploadBuffer(e, t10, o) { + releaseUploadBuffer(e, t6, o) { e.mapAsync(GPUMapMode.WRITE).then(() => { - this.releaseBuffer(e, t10, o); + this.releaseBuffer(e, t6, o); }, (n) => { }); } @@ -25564,45 +25643,45 @@ var Mg = class { return this.numFreeBuffers; } dispose() { - this.freeBuffers.forEach((e, t10) => { + this.freeBuffers.forEach((e, t6) => { e.forEach((o) => { o.destroy(); }); - }), this.usedBuffers.forEach((e, t10) => { + }), this.usedBuffers.forEach((e, t6) => { e.forEach((o) => { o.destroy(); }); }), this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function q3(r, e) { +function I3(r, e) { return `${r}_${e}`; } -var Lg = class { +var Tg = class { constructor(e) { this.device = e, this.numUsedTextures = 0, this.numFreeTextures = 0, this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } - acquireTexture(e, t10, o, n) { - let s = j3(o), a = e * t10 * s, i = K3(e, t10, o, n); + acquireTexture(e, t6, o, n) { + let s = k3(o), a = e * t6 * s, i = v3(e, t6, o, n); if (this.freeTextures.has(i) || this.freeTextures.set(i, []), this.usedTextures.has(i) || this.usedTextures.set(i, []), this.numBytesUsed += a, this.numUsedTextures++, this.freeTextures.get(i).length > 0) { this.numFreeTextures--; let u = this.freeTextures.get(i).shift(); return this.usedTextures.get(i).push(u), u; } this.numBytesAllocated += a; - let p = this.device.createTexture({ size: [e, t10], format: o, usage: n }); + let p = this.device.createTexture({ size: [e, t6], format: o, usage: n }); return this.usedTextures.get(i).push(p), p; } - releaseTexture(e, t10, o, n, s) { + releaseTexture(e, t6, o, n, s) { if (this.freeTextures.size === 0) return; - let a = K3(t10, o, n, s); + let a = v3(t6, o, n, s); this.freeTextures.has(a) || this.freeTextures.set(a, []), this.freeTextures.get(a).push(e), this.numFreeTextures++, this.numUsedTextures--; let i = this.usedTextures.get(a), p = i.indexOf(e); if (p < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); i.splice(p, 1); - let u = j3(n), c = t10 * o * u; + let u = k3(n), c = t6 * o * u; this.numBytesUsed -= c; } getNumUsedTextures() { @@ -25612,39 +25691,39 @@ var Lg = class { return this.numFreeTextures; } dispose() { - this.freeTextures.forEach((e, t10) => { + this.freeTextures.forEach((e, t6) => { e.forEach((o) => { o.destroy(); }); - }), this.usedTextures.forEach((e, t10) => { + }), this.usedTextures.forEach((e, t6) => { e.forEach((o) => { o.destroy(); }); }), this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numUsedTextures = 0, this.numFreeTextures = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function K3(r, e, t10, o) { - return `${r}_${e}_${t10}_${o}`; +function v3(r, e, t6, o) { + return `${r}_${e}_${t6}_${o}`; } -function j3(r) { +function k3(r) { if (r === "rgba8unorm") return 16; throw new Error(`${r} is not supported!`); } -function X3(r, e) { +function N3(r, e) { if (Math.max(...r) > 3) throw new Error("Cannot symbolically compute strides for rank > 4 tensor."); - let t10 = r.length, o = r.map((s) => `${e}[${s}]`), n = new Array(t10 - 1); - n[t10 - 2] = o[t10 - 1]; - for (let s = t10 - 3; s >= 0; --s) + let t6 = r.length, o = r.map((s) => `${e}[${s}]`), n = new Array(t6 - 1); + n[t6 - 2] = o[t6 - 1]; + for (let s = t6 - 3; s >= 0; --s) n[s] = `(${n[s + 1]} * ${o[s + 1]})`; return n; } -var Z3 = (r, e, t10, o) => { - let n = { dtype: o.dtype, shape: o.shape }, s = ite(t10, n, e), a = r.createShaderModule({ code: s, label: e.constructor.name }); +var A3 = (r, e, t6, o) => { + let n = { dtype: o.dtype, shape: o.shape }, s = $ee(t6, n, e), a = r.createShaderModule({ code: s, label: e.constructor.name }); return r.createComputePipeline({ compute: { module: a, entryPoint: "_start" }, label: e.constructor.name, layout: "auto" }); }; -function At(r) { +function Rt(r) { if (r <= 1) return "i32"; if (r === 2) @@ -25659,7 +25738,7 @@ function At(r) { return "vec6"; throw Error(`GPU for rank ${r} is not yet supported`); } -function Yo(r) { +function $o(r) { if (r === 0) return "x"; if (r === 1) @@ -25674,36 +25753,16 @@ function Yo(r) { return "v"; throw Error(`Index ${r} is not yet supported`); } -function ue(...r) { +function se(...r) { let e; switch (r.length) { case 0: e = ` - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(); - } - fn main() `; break; case 1: e = ` - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(getGlobalIndex()); - } - fn main(${r[0]} : i32) `; break; @@ -25712,84 +25771,103 @@ function ue(...r) { } return e; } -function Ri() { +function T3(r) { + let e; + return e = ` + ${Eee()} + fn _start(@builtin(local_invocation_id) LocalId : vec3, + @builtin(global_invocation_id) GlobalId : vec3, + @builtin(local_invocation_index) LocalIndex: u32, + @builtin(workgroup_id) WorkgroupId : vec3, + @builtin(num_workgroups) NumWorkgroups : vec3) { + localId = LocalId; + localIndex = LocalIndex; + globalId = GlobalId; + numWorkgroups = NumWorkgroups; + workgroupId = WorkgroupId; + ${r ? "main(getGlobalIndex());" : "main();"}; + } + `, e; +} +function Eee() { return ` - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) + @compute @workgroup_size(workgroupSizeX, workgroupSizeY, workgroupSizeZ) `; } -function ite(r, e, t10) { - let o = []; +function $ee(r, e, t6) { + let o = [], n = t6.workgroupSize[0] * t6.workgroupSize[1] * t6.workgroupSize[2]; if (o.push(` - const workGroupSizeX = ${t10.workGroupSize[0]}u; - const workGroupSizeY = ${t10.workGroupSize[1]}u; - const workGroupSizeZ = ${t10.workGroupSize[2]}u; + const workgroupSizeX = ${t6.workgroupSize[0]}u; + const workgroupSizeY = ${t6.workgroupSize[1]}u; + const workgroupSizeZ = ${t6.workgroupSize[2]}u; var localId: vec3; + var localIndex: u32; var globalId: vec3; var numWorkgroups: vec3; + var workgroupId: vec3; // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${eM(t10) ? " return i32(globalId.x);" : ` let localInvocationIndex = localId.z * workGroupSizeX * workGroupSizeY + - localId.y * workGroupSizeX + localId.x; - let workGroupID = (globalId - localId)/vec3( - workGroupSizeX, workGroupSizeY, workGroupSizeZ); - - return i32((workGroupID.z * numWorkgroups.x * numWorkgroups.y + - workGroupID.y * numWorkgroups.x + workGroupID.x) * - (workGroupSizeX * workGroupSizeY * workGroupSizeZ) + - localInvocationIndex); + ${F3(t6) ? " return i32(globalId.x);" : ` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n} + + localIndex); `} } - `), t10.isFromPixels) - return o.push(` + `), t6.isFromPixels) { + o.push(` struct Uniform { size : i32, numChannels : i32, outShapeStrides : vec2, }; - @group(0) @binding(0) var result: array<${Tc(e.dtype, t10.isVec4)}>; + @group(0) @binding(0) var result: array<${wc(e.dtype, t6.isVec4)}>; @group(0) @binding(2) var uniforms: Uniform; - `), [Y3, o.join(` -`), Q3(e.shape), t10.getUserCode()].join(` + `); + let f = $3(t6); + return [_3, o.join(` +`), E3(e.shape), t6.getUserCode(), T3(f)].join(` `); - let n = "struct Uniforms { NAN : f32, "; - t10.variableNames.forEach((m, f) => { - let d = At(r[f].shape.length); - n += `${m.charAt(0).toLowerCase() + m.slice(1)}Shape : ${d}, `; + } + let s = "struct Uniforms { NAN : f32, INFINITY : f32, "; + t6.variableNames.forEach((f, h) => { + let g = Rt(r[h].shape.length); + s += `${f.charAt(0).toLowerCase() + f.slice(1)}Shape : ${g}, `; }); - let s = At(e.shape.length); - n += `outShape : ${s}, `; - let a = e.shape.length - 1, i = At(a); - n += ` - outShapeStrides: ${i}, `, t10.size && (n += "size : i32, "), t10.uniforms && (n += t10.uniforms), n += "};", n = dte(n), o.push(n), t10.atomic ? o.push(` + let a = Rt(e.shape.length); + s += `outShape : ${a}, `; + let i = e.shape.length - 1, p = Rt(i); + s += ` + outShapeStrides: ${p}, `, t6.size && (s += "size : i32, "), t6.uniforms && (s += t6.uniforms), s += "};", s = Lee(s), o.push(s), t6.atomic ? o.push(` @group(0) @binding(0) var result: array>; `) : o.push(` - @group(0) @binding(0) var result: array<${Tc(e.dtype, t10.isVec4)}>; - `), t10.variableNames.forEach((m, f) => { + @group(0) @binding(0) var result: array<${wc(e.dtype, t6.isVec4)}>; + `), t6.variableNames.forEach((f, h) => { o.push(` - @group(0) @binding(${1 + f}) var ${m}: array<${t10.variableTypes ? t10.variableTypes[f] : Tc(r[f].dtype, t10.isVec4)}>; + @group(0) @binding(${1 + h}) var ${f}: array<${t6.variableTypes ? t6.variableTypes[h] : wc(r[h].dtype, t6.isVec4)}>; `); - }), n !== "" && o.push(` - @group(0) @binding(${1 + t10.variableNames.length}) var uniforms: Uniforms; + }), s !== "" && o.push(` + @group(0) @binding(${1 + t6.variableNames.length}) var uniforms: Uniforms; `); - let p = lte(e.shape, t10.dispatchLayout), u = [Y3, o.join(` -`), Q3(e.shape), p, mte(e.shape.length)]; - t10.atomic || u.push(fte(e.shape, e.dtype, t10.isVec4)); - let c = r.map((m, f) => cte(m, e.shape, t10.variableTypes ? t10.variableTypes[f] === "vec4" : t10.isVec4, t10.dispatchLayout.x.length === e.shape.length)).join(` + let u = Oee(e.shape, t6.dispatchLayout), c = [_3 + Aee, o.join(` +`), E3(e.shape), u, Pee(e.shape.length)]; + t6.atomic || c.push(Mee(e.shape, e.dtype, t6.isVec4)); + let l = r.map((f, h) => Dee(f, e.shape, t6.variableTypes ? t6.variableTypes[h] === "vec4" : t6.isVec4, t6.dispatchLayout.x.length === e.shape.length)).join(` `); - return u.push(c), u.push(t10.getUserCode()), u.join(` + c.push(l), c.push(t6.getUserCode()); + let m = $3(t6); + return c.push(T3(m)), c.join(` `); } -function J3(r, e, t10, o) { +function R3(r, e, t6, o) { let n = r.shaderKey; if (r.isFromPixels) return n; - let s = t10.map((c) => c.dtype).concat(o.dtype), a = t10.map((c) => I.getBroadcastDims(c.shape, o.shape)), i = t10.map((c) => x.arraysEqual(c.shape, o.shape)).join("_"), p = a.map((c) => c.join("_")).join(";"), u = eM(r) ? "flatDispatch" : ""; - return n += "_" + (r.workGroupSize ? r.workGroupSize.join(",") : "") + e.map((c) => c.length).join(",") + s.join(",") + r.variableNames.join(",") + p + i + u, n; + let s = t6.map((c) => c.dtype).concat(o.dtype), a = t6.map((c) => S.getBroadcastDims(c.shape, o.shape)), i = t6.map((c) => y.arraysEqual(c.shape, o.shape)).join("_"), p = a.map((c) => c.join("_")).join(";"), u = F3(r) ? "flatDispatch" : ""; + return n += "_" + (r.workgroupSize ? r.workgroupSize.join(",") : "") + e.map((c) => c.length).join(",") + s.join(",") + r.variableNames.join(",") + p + i + u, n; } -var Y3 = ` +var _3 = ` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -25848,21 +25926,26 @@ var Y3 = ` return vec4(isnan(val[0]), isnan(val[1]), isnan(val[2]), isnan(val[3])); } `; -function Q3(r) { +var Aee = ` + fn isinf(val: f32) -> bool { + return abs(val) == uniforms.INFINITY; + } +`; +function E3(r) { let e = r.length; if (e <= 1) return "fn getCoordsFromIndex(index : i32) -> i32 { return index; }"; - let t10 = x.computeStrides(r), o = At(e), n = []; + let t6 = y.computeStrides(r), o = Rt(e), n = []; for (let a = 0; a < e; a++) n.push(`d${a}`); - if (t10.length === 1) + if (t6.length === 1) return ` fn getCoordsFromIndex(index : i32) -> vec2 { let d0 = index / uniforms.outShapeStrides; let d1 = index - d0 * uniforms.outShapeStrides; return vec2(d0, d1); }`; let s; - return s = "var index2 = index;" + t10.map((a, i) => { - let p = `let ${n[i]} = index2 / uniforms.outShapeStrides.${Yo(i)}`, u = i === t10.length - 1 ? `let ${n[i + 1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}` : `index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}`; + return s = "var index2 = index;" + t6.map((a, i) => { + let p = `let ${n[i]} = index2 / uniforms.outShapeStrides.${$o(i)}`, u = i === t6.length - 1 ? `let ${n[i + 1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}` : `index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}`; return `${p}; ${u};`; }).join(""), ` fn getCoordsFromIndex(index : i32) -> ${o} { @@ -25871,35 +25954,35 @@ function Q3(r) { } `; } -function ute(r, e) { - let t10 = r.name, o = r.shape.length, n = At(o), s = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((c) => `${c} : i32`).join(", "); +function Ree(r, e) { + let t6 = r.name, o = r.shape.length, n = Rt(o), s = "get" + t6.charAt(0).toUpperCase() + t6.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((c) => `${c} : i32`).join(", "); if (o < 1) return e ? ` fn ${s}() -> vec4 { - return vec4(${t10}[0]); + return vec4(${t6}[0]); } ` : ` fn ${s}() ->f32 { - return f32(${t10}[0]); + return f32(${t6}[0]); } `; - let p = `uniforms.${t10.charAt(0).toLowerCase() + t10.slice(1)}Shape`, u = `${o}D`; + let p = `uniforms.${t6.charAt(0).toLowerCase() + t6.slice(1)}Shape`, u = `${o}D`; return o === 0 && (u = "1D"), e ? ` fn ${s}(${i}) -> vec4 { - return vec4(${t10}[getIndexFromCoords${u}(${n}(${a.join(",")}), + return vec4(${t6}[getIndexFromCoords${u}(${n}(${a.join(",")}), ${p}) / 4]); } ` : ` fn ${s}(${i}) -> f32 { - return f32(${t10}[getIndexFromCoords${u}(${n}(${a.join(",")}), + return f32(${t6}[getIndexFromCoords${u}(${n}(${a.join(",")}), ${p})]); } `; } -function pte(r, e, t10, o) { - let n = r.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r.shape.length, p = e.length, u = At(p); - if (x.arraysEqual(r.shape, e) && o) - return t10 ? ` +function Fee(r, e, t6, o) { + let n = r.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r.shape.length, p = e.length, u = Rt(p); + if (y.arraysEqual(r.shape, e) && o) + return t6 ? ` fn ${a}Index(globalIndex : i32) -> vec4 { return vec4(${n}[globalIndex]); } @@ -25916,9 +25999,9 @@ function pte(r, e, t10, o) { return f32(${n}[${p > 1 ? "getOutputIndexFromCoords(coords)" : "coords"}]); } `; - let c = I.getBroadcastDims(r.shape, e), l = p - i, m = ""; + let c = S.getBroadcastDims(r.shape, e), l = p - i, m = ""; if (i === 0) - return t10 ? ` + return t6 ? ` fn ${a}Index(globalIndex : i32) -> vec4 { return get${s}(); } @@ -25935,79 +26018,79 @@ function pte(r, e, t10, o) { return get${s}(); } `; - p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((g) => `coords.${Yo(g + l)} = 0;`).join(` + p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((g) => `coords.${$o(g + l)} = 0;`).join(` `); - let f = ""; + let d = ""; if (p < 2 && i > 0) - f = "coords"; + d = "coords"; else if (p > 1) { - let g = At(i), y = r.shape.map((b, C) => `coords.${Yo(C + l)}`).join(", "); - f = `${g}(${y})`; + let g = Rt(i), x = r.shape.map((b, C) => `coords.${$o(C + l)}`).join(", "); + d = `${g}(${x})`; } else - f = "coords"; - let d = `uniforms.${n.charAt(0).toLowerCase() + n.slice(1)}Shape`, h = `${i}D`; - return t10 ? ` + d = "coords"; + let f = `uniforms.${n.charAt(0).toLowerCase() + n.slice(1)}Shape`, h = `${i}D`; + return t6 ? ` fn ${a}Index(globalIndex : i32) -> vec4 { var coords = getCoordsFromIndex(globalIndex); ${m} - return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4]; + return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4]; } fn ${a}Coords(coordsIn : ${u}) -> vec4 { var coords = coordsIn; ${m} - return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4]; + return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4]; } ` : ` fn ${a}Index(globalIndex : i32) -> f32 { var coords = getCoordsFromIndex(globalIndex); ${m} - return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]); + return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]); } fn ${a}Coords(coordsIn : ${u}) -> f32 { var coords = coordsIn; ${m} - return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]); + return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]); } `; } -function cte(r, e, t10, o) { - let n = ute(r, t10); - return r.shape.length <= e.length && (n += pte(r, e, t10, o)), n; +function Dee(r, e, t6, o) { + let n = Ree(r, t6); + return r.shape.length <= e.length && (n += Fee(r, e, t6, o)), n; } -function lte(r, e) { - let { x: t10, y: o = [], z: n = [] } = e, s = r.length, a = t10.length + o.length + n.length; +function Oee(r, e) { + let { x: t6, y: o = [], z: n = [] } = e, s = r.length, a = t6.length + o.length + n.length; if (a !== s) return ""; - if (t10.length === s) - return `fn getOutputCoords() -> ${At(s)}{ + if (t6.length === s) + return `fn getOutputCoords() -> ${Rt(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } `; - let i = "", p = [t10, o, n]; + let i = "", p = [t6, o, n]; for (let m = 0; m < p.length; m++) { - let f = p[m]; - if (f.length !== 0) - if (f.length === 1) - i += `let d${f[0]} = i32(globalId[${m}]);`; + let d = p[m]; + if (d.length !== 0) + if (d.length === 1) + i += `let d${d[0]} = i32(globalId[${m}]);`; else { - let d = X3(f, "uniforms.outShape"); + let f = N3(d, "uniforms.outShape"); i += `var index${m} = i32(globalId[${m}]);`; - for (let h = 0; h < d.length; h++) - i += `let d${f[h]} = index${m} / ${d[h]};`, h === d.length - 1 ? i += `let d${f[h + 1]} = index${m} - d${f[h]} * ${d[h]};` : i += `index${m} = index${m} - d${f[h]} * ${d[h]};`; + for (let h = 0; h < f.length; h++) + i += `let d${d[h]} = index${m} / ${f[h]};`, h === f.length - 1 ? i += `let d${d[h + 1]} = index${m} - d${d[h]} * ${f[h]};` : i += `index${m} = index${m} - d${d[h]} * ${f[h]};`; } } let u = []; for (let m = 0; m < a; m++) u.push(`d${m}`); - let c = At(a), l = `fn getOutputCoords() -> ${c} { + let c = Rt(a), l = `fn getOutputCoords() -> ${c} { ${i} `; return u.length === 0 ? l += `return ${c}(0); }` : l += `return ${c}(${u.join(",")}); }`, l; } -function mte(r) { +function Pee(r) { let e = ""; switch (r) { case 0: @@ -26064,20 +26147,20 @@ function mte(r) { `; break; default: - x.assert(false, () => `Unsupported ${r}D shape`); + y.assert(false, () => `Unsupported ${r}D shape`); break; } return e; } -function eM(r) { +function F3(r) { return r.dispatch[1] === 1 && r.dispatch[2] === 1; } -function Tc(r, e) { +function wc(r, e) { return r === "float32" ? e ? "vec4" : "f32" : r === "int32" || r === "bool" ? e ? "vec4" : "i32" : r; } -function fte(r, e, t10) { - let o = r.length, n = Tc(e, t10), s; - if (t10 ? s = `fn setOutputAtIndex(flatIndex : i32, value : vec4) { +function Mee(r, e, t6) { + let o = r.length, n = wc(e, t6), s; + if (t6 ? s = `fn setOutputAtIndex(flatIndex : i32, value : vec4) { result[flatIndex] = ${n}(value); } fn setOutputAtIndexI32(flatIndex : i32, value : vec4) { @@ -26088,8 +26171,8 @@ function fte(r, e, t10) { fn setOutputAtIndexI32(flatIndex : i32, value : i32) { result[flatIndex] = ${n}(value); }`, o >= 2) { - let a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = At(o); - t10 ? s += ` + let a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = Rt(o); + t6 ? s += ` fn setOutputAtCoords(${a.map((p) => `${p} : i32`).join(", ")}, value : vec4) { let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndex(flatIndex / 4, value); @@ -26111,56 +26194,59 @@ function fte(r, e, t10) { } return s; } -function dte(r) { +function Lee(r) { let e = /(\w+)\s*:\s*vec(5|6)/g; r = r.replace(e, (o) => "@align(16) " + o); - let t10 = /vec(5|6)\s*,\s*(\w+)/g; - return r = r.replace(t10, (o, n, s) => `vec${n}, @align(16) ${s}`), r; + let t6 = /vec(5|6)\s*,\s*(\w+)/g; + return r = r.replace(t6, (o, n, s) => `vec${n}, @align(16) ${s}`), r; } -var pS = {}; -Be(pS, { ArrayBufferToTypedArray: () => uS, GPUBytesPerElement: () => iS, MatMulProgramType: () => Qo, computeDispatch: () => ae, computeWorkGroupInfoForMatMul: () => aS, computeWorkGroupSizeForConv2d: () => Hl, computeWorkPerThreadForConv2d: () => ql, flatDispatchLayout: () => fe, isWebGPUSupported: () => Kl, tilesFitEvenlyIntoShape: () => gte }); -var Wu = (r) => { +function $3(r) { + return !(r.dispatchLayout.hasOwnProperty("y") && r.dispatchLayout.y.length !== 0 || r.dispatchLayout.hasOwnProperty("z") && r.dispatchLayout.z.length !== 0); +} +var nI = {}; +Ue(nI, { ArrayBufferToTypedArray: () => oI, GPUBytesPerElement: () => rI, MatMulProgramType: () => Ao, computeDispatch: () => re, computeWorkPerThreadForConv2d: () => Ll, computeWorkgroupInfoForMatMul: () => tI, computeWorkgroupSizeForConv2d: () => Ml, flatDispatchLayout: () => ue, isWebGPUSupported: () => Bl, tilesFitEvenlyIntoShape: () => Vee }); +var zu = (r) => { let e = 1; - for (let t10 = 0; t10 < r.length; t10++) - e *= r[t10]; + for (let t6 = 0; t6 < r.length; t6++) + e *= r[t6]; return e; }; -function gte(r, e) { +function Vee(r, e) { if (r.length !== e.length) throw new Error(`Cannot compute whether rank ${r.length} tiles fit evenly into rank ${e.length} shape - ranks must match.`); - return e.every((t10, o) => t10 % r[o] === 0); + return e.every((t6, o) => t6 % r[o] === 0); } -function ae(r, e, t10 = [1, 1, 1], o = [1, 1, 1]) { - let [n, s, a] = [Math.ceil(Wu(r.x.map((i) => e[i])) / (t10[0] * o[0])), r.y ? Math.ceil(Wu(r.y.map((i) => e[i])) / (t10[1] * o[1])) : 1, r.z ? Math.ceil(Wu(r.z.map((i) => e[i])) / (t10[2] * o[2])) : 1]; +function re(r, e, t6 = [1, 1, 1], o = [1, 1, 1]) { + let [n, s, a] = [Math.ceil(zu(r.x.map((i) => e[i])) / (t6[0] * o[0])), r.y ? Math.ceil(zu(r.y.map((i) => e[i])) / (t6[1] * o[1])) : 1, r.z ? Math.ceil(zu(r.z.map((i) => e[i])) / (t6[2] * o[2])) : 1]; return [n, s, a]; } -function aS(r, e, t10, o = false) { +function tI(r, e, t6, o = false) { let n = [8, 8, 1], s = [4, 4, 1]; - return o || (r <= 8 && (s[1] = 1), e <= 16 && t10 <= 16 && (n[0] = 4)), { workGroupSize: n, elementsPerThread: s }; + return o || (r <= 8 && (s[1] = 1), e <= 16 && t6 <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; } -function Hl(r, e, t10 = false) { - if (t10) +function Ml(r, e, t6 = false) { + if (t6) return [8, 8, 1]; - let o = Wu(r.x.map((s) => e[s])), n = Wu(r.y.map((s) => e[s])); + let o = zu(r.x.map((s) => e[s])), n = zu(r.y.map((s) => e[s])); return o <= 4 ? [4, 16, 1] : n <= 4 ? [16, 4, 1] : [16, 16, 1]; } -function ql(r, e, t10 = false) { - if (t10) +function Ll(r, e, t6 = false) { + if (t6) return [4, 4, 1]; - let o = Wu(r.x.map((s) => e[s])), n = Wu(r.y.map((s) => e[s])); + let o = zu(r.x.map((s) => e[s])), n = zu(r.y.map((s) => e[s])); return o <= 4 ? [1, 2, 1] : n <= 4 ? [2, 1, 1] : [2, 2, 1]; } -function fe(r) { - return { x: r.map((e, t10) => t10) }; +function ue(r) { + return { x: r.map((e, t6) => t6) }; } -function iS(r) { +function rI(r) { if (r === "float32" || r === "int32" || r === "bool" || r === "string") return 4; if (r === "complex64") return 8; throw new Error(`Unknown dtype ${r}`); } -function uS(r, e) { +function oI(r, e) { if (e === "float32") return new Float32Array(r); if (e === "int32") @@ -26169,30 +26255,30 @@ function uS(r, e) { return Uint8Array.from(new Int32Array(r)); throw new Error(`Unknown dtype ${e}`); } -function Kl() { +function Bl() { return (typeof window != "undefined" || typeof WorkerGlobalScope != "undefined") && !!navigator.gpu; } -var Qo; +var Ao; (function(r) { r[r.MatMulReduceProgram = 0] = "MatMulReduceProgram", r[r.MatMulSplitKProgram = 1] = "MatMulSplitKProgram", r[r.MatMulSmallOutputSizeProgram = 2] = "MatMulSmallOutputSizeProgram", r[r.MatMulPackedProgram = 3] = "MatMulPackedProgram", r[r.MatMulMax = 4] = "MatMulMax"; -})(Qo || (Qo = {})); -var xte = P().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); -var yte = (r, e) => { - let t10 = r.limits.maxComputeWorkgroupsPerDimension, o = e.dispatchLayout, n = e.dispatch; - if (n.every((a) => a <= t10)) +})(Ao || (Ao = {})); +var zee = O().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); +var Wee = (r, e) => { + let t6 = r.limits.maxComputeWorkgroupsPerDimension, o = e.dispatchLayout, n = e.dispatch; + if (n.every((a) => a <= t6)) return n; - x.assert(n[0] > t10 && o.y === void 0 && o.z === void 0, () => "Dispatch size exceeds WebGPU limits in Y or Z dimension."); + y.assert(n[0] > t6 && o.y === void 0 && o.z === void 0, () => "Dispatch size exceeds WebGPU limits in Y or Z dimension."); let s = Math.ceil(Math.sqrt(n[0])); - return s > t10 ? (s = Math.ceil(Math.cbrt(n[0])), x.assert(s <= t10, () => "Total dispatch size exceeds WebGPU maximum."), [s, s, s]) : [s, s, 1]; + return s > t6 ? (s = Math.ceil(Math.cbrt(n[0])), y.assert(s <= t6, () => "Total dispatch size exceeds WebGPU maximum."), [s, s, s]) : [s, s, 1]; }; -var Ai = class extends Jr { - constructor(e, t10) { - if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchNumberInEncoder = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, !Kl()) +var Ui = class extends Zr { + constructor(e, t6) { + if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchNumberInEncoder = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, !Bl()) throw new Error("WebGPU is not supported on this device"); - this.pipelineCache = {}, this.device = e, this.queue = e.queue, this.currentCommandEncoder = null, this.currentComputePass = null, this.supportTimeQuery = e.features.has("timestamp-query"), this.adapterInfo = new Og(t10), this.bufferManager = new Mg(this.device), this.textureManager = new Lg(this.device), this.tensorMap = new rn(this, cr()), this.supportTimeQuery && (this.querySet = this.device.createQuerySet({ type: "timestamp", count: 2 })), P().getBool("WEBGPU_USE_PROFILE_TOOL") && (this.dummyCanvas = document.createElement("canvas"), this.dummyCanvas.width = 1, this.dummyCanvas.height = 1, this.dummyContext = this.dummyCanvas.getContext("webgpu"), this.dummyContext.configure({ device: e, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); + this.pipelineCache = {}, this.device = e, this.queue = e.queue, this.currentCommandEncoder = null, this.currentComputePass = null, this.supportTimeQuery = e.features.has("timestamp-query-inside-passes"), this.adapterInfo = new kg(t6), this.thresholdToIncreaseWorkgroups = this.adapterInfo.intelGPUGeneration >= 12 ? 16 : 8, this.bufferManager = new Ng(this.device), this.textureManager = new Tg(this.device), this.tensorMap = new Do(this, cr()), this.supportTimeQuery && (this.querySet = this.device.createQuerySet({ type: "timestamp", count: 2 })), O().getBool("WEBGPU_USE_PROFILE_TOOL") && (this.dummyCanvas = document.createElement("canvas"), this.dummyCanvas.width = 1, this.dummyCanvas.height = 1, this.dummyContext = this.dummyCanvas.getContext("webgpu"), this.dummyContext.configure({ device: e, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); } nextDataId() { - return Ai.nextDataId++; + return Ui.nextDataId++; } floatPrecision() { return 32; @@ -26200,58 +26286,58 @@ var Ai = class extends Jr { defaultGpuBufferUsage() { return GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; } - disposeData(e, t10 = false) { + disposeData(e, t6 = false) { if (this.tensorDataPendingDisposal.indexOf(e) >= 0) return false; if (!this.tensorMap.has(e)) return true; let o = this.tensorMap.get(e); - if (this.decRef(e), !t10 && o.refCount > 0) + if (this.decRef(e), !t6 && o.refCount > 0) return false; if (this.commandQueueOwnedIds.has(e)) return this.tensorDataPendingDisposal.push(e), false; let { complexTensorInfos: n } = this.tensorMap.get(e); - return n != null && (this.disposeData(n.real.dataId, t10), this.disposeData(n.imag.dataId, t10)), this.releaseResource(e), this.tensorMap.delete(e), true; + return n != null && (this.disposeData(n.real.dataId, t6), this.disposeData(n.imag.dataId, t6)), this.releaseResource(e), this.tensorMap.delete(e), true; } memory() { return { numBytesInGPU: this.bufferManager.numBytesUsed, numBytesAllocatedInGPU: this.bufferManager.numBytesAllocated, unreliable: false }; } releaseResource(e) { - let t10 = this.tensorMap.get(e); - if (!(!t10 || !t10.resourceInfo)) { - if ("texture" in t10.resourceInfo) { - let o = t10.resourceInfo; + let t6 = this.tensorMap.get(e); + if (!(!t6 || !t6.resourceInfo)) { + if ("texture" in t6.resourceInfo) { + let o = t6.resourceInfo; o.texture instanceof GPUTexture && this.textureManager.releaseTexture(o.texture, o.width, o.height, o.format, o.usage), o.texture = null; } else { - let o = t10.resourceInfo; + let o = t6.resourceInfo; this.bufferManager.releaseBuffer(o.buffer, o.size, o.usage), o.buffer = null; } - t10.resourceInfo = null; + t6.resourceInfo = null; } } refCount(e) { return this.tensorMap.has(e) ? this.tensorMap.get(e).refCount : 0; } incRef(e) { - let t10 = this.tensorMap.get(e); - t10.refCount++; + let t6 = this.tensorMap.get(e); + t6.refCount++; } decRef(e) { if (this.tensorMap.has(e)) { - let t10 = this.tensorMap.get(e); - t10.refCount--; + let t6 = this.tensorMap.get(e); + t6.refCount--; } } - write(e, t10, o) { + write(e, t6, o) { if (o === "complex64" && e != null) throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); let n = { id: this.nextDataId() }; - return this.tensorMap.set(n, { dtype: o, shape: t10, values: e, refCount: 1 }), n; + return this.tensorMap.set(n, { dtype: o, shape: t6, values: e, refCount: 1 }), n; } - move(e, t10, o, n, s) { + move(e, t6, o, n, s) { if (n === "complex64") throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); - this.tensorMap.set(e, { dtype: n, shape: o, values: t10, refCount: s }); + this.tensorMap.set(e, { dtype: n, shape: o, values: t6, refCount: s }); } submitQueue() { this.ensureComputePassEnded(), this.queue.submit([this.currentCommandEncoder.finish()]), this.currentCommandEncoder = null, this.dispatchNumberInEncoder = 0, this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.tensorDataPendingDisposal.forEach((e) => { @@ -26267,18 +26353,18 @@ var Ai = class extends Jr { getComputePass() { return this.currentComputePass || (this.currentComputePass = this.currentCommandEncoder.beginComputePass()), this.currentComputePass; } - async getBufferData(e, t10) { - let o = this.bufferManager.acquireBuffer(t10, GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ); - this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.copyBufferToBuffer(e, 0, o, 0, t10), this.submitQueue(), await o.mapAsync(GPUMapMode.READ); + async getBufferData(e, t6) { + let o = this.bufferManager.acquireBuffer(t6, GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ); + this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.copyBufferToBuffer(e, 0, o, 0, t6), this.submitQueue(), await o.mapAsync(GPUMapMode.READ); let n = o.getMappedRange().slice(0); - return o.unmap(), o != null && this.bufferManager.releaseBuffer(o, t10, GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ), P().getBool("WEBGPU_USE_PROFILE_TOOL") && (x.assert(this.dummyContext !== void 0, () => "Fail to get context for profiling tool"), this.dummyContext.getCurrentTexture()), n; + return o.unmap(), o != null && this.bufferManager.releaseBuffer(o, t6, GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ), O().getBool("WEBGPU_USE_PROFILE_TOOL") && (y.assert(this.dummyContext !== void 0, () => "Fail to get context for profiling tool"), this.dummyContext.getCurrentTexture()), n; } - convertAndCacheOnCPU(e, t10) { + convertAndCacheOnCPU(e, t6) { let o = this.tensorMap.get(e); - return this.releaseResource(e), o.values = t10, o.values; + return this.releaseResource(e), o.values = t6, o.values; } readSync(e) { - let t10 = this.tensorMap.get(e), { values: o } = t10; + let t6 = this.tensorMap.get(e), { values: o } = t6; if (o == null) throw new Error("WebGPU readSync is only available for CPU-resident tensors."); return o; @@ -26286,21 +26372,21 @@ var Ai = class extends Jr { async read(e) { if (!this.tensorMap.has(e)) throw new Error(`Tensor ${e} was not registered!`); - let t10 = this.tensorMap.get(e), { values: o } = t10; + let t6 = this.tensorMap.get(e), { values: o } = t6; if (o != null) return this.convertAndCacheOnCPU(e, o); let n; - if (t10.dtype === "complex64") { - let s = await Promise.all([this.read(t10.complexTensorInfos.real.dataId), this.read(t10.complexTensorInfos.imag.dataId)]), a = s[0], i = s[1]; - n = I.mergeRealAndImagArrays(a, i); + if (t6.dtype === "complex64") { + let s = await Promise.all([this.read(t6.complexTensorInfos.real.dataId), this.read(t6.complexTensorInfos.imag.dataId)]), a = s[0], i = s[1]; + n = S.mergeRealAndImagArrays(a, i); } else { - let s = t10.resourceInfo, a = await this.getBufferData(s.buffer, s.size); - n = uS(a, t10.dtype); + let s = t6.resourceInfo, a = await this.getBufferData(s.buffer, s.size); + n = oI(a, t6.dtype); } return this.convertAndCacheOnCPU(e, n), n; } readToGPU(e) { - let t10 = this.tensorMap.get(e), { values: o, dtype: n, shape: s, resourceInfo: a } = t10; + let t6 = this.tensorMap.get(e), { values: o, dtype: n, shape: s, resourceInfo: a } = t6; if (n === "complex64") throw new Error("Does not support reading buffer for complex64 dtype."); if (a == null) @@ -26311,56 +26397,56 @@ var Ai = class extends Jr { return l.resourceInfo = { size: i, usage: this.defaultGpuBufferUsage(), buffer: p }, { tensorRef: c, buffer: p, bufSize: i }; } bufferSync(e) { - let t10 = this.readSync(e.dataId); + let t6 = this.readSync(e.dataId); if (e.dtype === "string") try { - let o = t10.map((n) => x.decodeString(n)); - return ne(e.shape, e.dtype, o); + let o = t6.map((n) => y.decodeString(n)); + return le(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ne(e.shape, e.dtype, t10); + return le(e.shape, e.dtype, t6); } async time(e) { - this.supportTimeQuery || console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU."); - let t10 = this.activeTimers, o = [], n = false; + this.supportTimeQuery || console.warn("This device doesn't support timestamp-query-inside-passes extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU."); + let t6 = this.activeTimers, o = [], n = false; this.programTimersStack == null ? (this.programTimersStack = o, n = true) : this.activeTimers.push(o), this.activeTimers = o, e(); - let s = x.flatten(this.activeTimers.map((u) => u.query)).filter((u) => u != null), a = x.flatten(this.activeTimers.map((u) => u.name)).filter((u) => u != null); - this.activeTimers = t10, n && (this.programTimersStack = null); + let s = y.flatten(this.activeTimers.map((u) => u.query)).filter((u) => u != null), a = y.flatten(this.activeTimers.map((u) => u.name)).filter((u) => u != null); + this.activeTimers = t6, n && (this.programTimersStack = null); let i = { uploadWaitMs: this.uploadWaitMs, downloadWaitMs: this.downloadWaitMs, kernelMs: null, wallMs: null }, p = await Promise.all(s); - return i.kernelMs = x.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "), this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; + return i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "), this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; } - makeTensorInfo(e, t10, o) { - return t10 === "string" && o != null && o.length > 0 && x.isString(o[0]) && (o = o.map((s) => x.encodeString(s))), { dataId: this.write(o, e, t10), shape: e, dtype: t10 }; + makeTensorInfo(e, t6, o) { + return t6 === "string" && o != null && o.length > 0 && y.isString(o[0]) && (o = o.map((s) => y.encodeString(s))), { dataId: this.write(o, e, t6), shape: e, dtype: t6 }; } tensorToBinding(e) { if (!e) return null; - let t10 = this.tensorMap.get(e.dataId); - if ("texture" in t10.resourceInfo) { - let n = t10.resourceInfo; + let t6 = this.tensorMap.get(e.dataId); + if ("texture" in t6.resourceInfo) { + let n = t6.resourceInfo; return n.texture instanceof GPUExternalTexture ? n.texture : n.texture.createView(); } - let o = t10.resourceInfo; + let o = t6.resourceInfo; return { offset: 0, size: o.size, buffer: o.buffer }; } async getQueryTime(e) { return this.supportTimeQuery ? this.getTimeFromQuerySet(e) : 0; } uploadToGPU(e) { - let t10 = this.tensorMap.get(e); - if (t10.resourceInfo) + let t6 = this.tensorMap.get(e); + if (t6.resourceInfo) return; - let o = iS(t10.dtype) * x.sizeFromShape(t10.shape), n = this.bufferManager.acquireBuffer(o, this.defaultGpuBufferUsage()); - if (t10.resourceInfo = { size: o, usage: this.defaultGpuBufferUsage(), buffer: n }, t10.values) { + let o = rI(t6.dtype) * y.sizeFromShape(t6.shape), n = this.bufferManager.acquireBuffer(o, this.defaultGpuBufferUsage()); + if (t6.resourceInfo = { size: o, usage: this.defaultGpuBufferUsage(), buffer: n }, t6.values) { let s = this.bufferManager.acquireUploadBuffer(o, GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC), a = s.getMappedRange(); - t10.dtype === "int32" || t10.dtype === "bool" ? new Int32Array(a).set(t10.values) : new Float32Array(a).set(t10.values), s.unmap(), this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.copyBufferToBuffer(s, 0, n, 0, o); + t6.dtype === "int32" || t6.dtype === "bool" ? new Int32Array(a).set(t6.values) : new Float32Array(a).set(t6.values), s.unmap(), this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.copyBufferToBuffer(s, 0, n, 0, o); let i = { size: o, usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, buffer: s }; this.stagingPendingDisposal.push(i); } } makeUniforms(e) { - let t10 = 0, o = 0, n = []; + let t6 = 0, o = 0, n = []; e.forEach((p) => { p.data.length === 0 && (p.data = [1]); let u; @@ -26384,58 +26470,58 @@ var Ai = class extends Jr { u = 16; break; default: - x.assert(false, () => `Unsupported ${p.data.length}D shape`); + y.assert(false, () => `Unsupported ${p.data.length}D shape`); } - (o === 5 || o === 6) && (u = 16), t10 = Math.ceil(t10 / u) * u, o = p.data.length, n.push(t10), t10 += p.data.length * 4; + (o === 5 || o === 6) && (u = 16), t6 = Math.ceil(t6 / u) * u, o = p.data.length, n.push(t6), t6 += p.data.length * 4; }); - let s = new ArrayBuffer(t10); + let s = new ArrayBuffer(t6); e.forEach((p, u) => { let c = n[u]; p.type === "int32" ? new Int32Array(s, c, p.data.length).set(p.data) : p.type === "uint32" ? new Uint32Array(s, c, p.data.length).set(p.data) : new Float32Array(s, c, p.data.length).set(p.data); }); - let a = this.bufferManager.acquireBuffer(t10, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM); - this.queue.writeBuffer(a, 0, s, 0, t10); - let i = { size: t10, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM, buffer: a }; - return this.uniformPendingDisposal.push(i), { offset: 0, size: t10, buffer: a }; + let a = this.bufferManager.acquireBuffer(t6, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM); + this.queue.writeBuffer(a, 0, s, 0, t6); + let i = { size: t6, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM, buffer: a }; + return this.uniformPendingDisposal.push(i), { offset: 0, size: t6, buffer: a }; } - runWebGPUProgram(e, t10, o, n, s) { - if (s || (s = this.makeTensorInfo(e.outputShape, o)), x.sizeFromShape(s.shape) === 0) - return this.tensorMap.get(s.dataId).values = x.getTypedArrayFromDType(s.dtype, 0), s; - this.uploadToGPU(s.dataId), e.dispatch = yte(this.device, e); + runWebGPUProgram(e, t6, o, n, s) { + if (s || (s = this.makeTensorInfo(e.outputShape, o)), y.sizeFromShape(s.shape) === 0) + return this.tensorMap.get(s.dataId).values = y.getTypedArrayFromDType(s.dtype, 0), s; + this.uploadToGPU(s.dataId), e.dispatch = Wee(this.device, e); let a = [], i = []; if (!e.isFromPixels) { - a.push({ type: "float32", data: [NaN] }), i = t10.concat(s).map((y) => y.shape); + a.push({ type: "float32", data: [NaN] }, { type: "float32", data: [1 / 0] }), i = t6.concat(s).map((x) => x.shape); let h = "int32"; - i.map((y) => { - a.push({ type: h, data: y }); + i.map((x) => { + a.push({ type: h, data: x }); }); - let g = x.computeStrides(s.shape); + let g = y.computeStrides(s.shape); if (a.push({ type: h, data: g }), e.size) { - let y = x.sizeFromShape(e.outputShape); - a.push({ type: h, data: [e.isVec4 ? y / 4 : y] }); + let x = y.sizeFromShape(e.outputShape); + a.push({ type: h, data: [e.isVec4 ? x / 4 : x] }); } } - let p = t10.map((h, g) => { + let p = t6.map((h, g) => { if (h.dtype === "complex64") throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."); return this.uploadToGPU(h.dataId), { dtype: this.tensorMap.get(h.dataId).dtype, shape: h.shape, name: e.variableNames[g] }; - }), u = J3(e, i, p, s), c; - u in this.pipelineCache ? c = this.pipelineCache[u] : (c = Z3(this.device, e, p, s), this.pipelineCache[u] = c), n && (a = [...a, ...n]); - let l = [this.tensorToBinding(s), ...t10.map((h) => this.tensorToBinding(h)), this.makeUniforms(a)], m = this.device.createBindGroup({ layout: c.getBindGroupLayout(0), entries: l.map((h, g) => ({ binding: g, resource: h })) }); + }), u = R3(e, i, p, s), c; + u in this.pipelineCache ? c = this.pipelineCache[u] : (c = A3(this.device, e, p, s), this.pipelineCache[u] = c), n && (a = [...a, ...n]); + let l = [this.tensorToBinding(s), ...t6.map((h) => this.tensorToBinding(h)), this.makeUniforms(a)], m = this.device.createBindGroup({ layout: c.getBindGroupLayout(0), entries: l.map((h, g) => ({ binding: g, resource: h })) }); this.ensureCommandEncoderReady(); - let f = this.getComputePass(), d = this.activeTimers != null; - return d && this.supportTimeQuery && f.writeTimestamp(this.querySet, 0), f.setPipeline(c), f.setBindGroup(0, m), f.dispatchWorkgroups(e.dispatch[0], e.dispatch[1], e.dispatch[2]), d && this.supportTimeQuery && f.writeTimestamp(this.querySet, 1), this.dispatchNumberInEncoder++, t10.forEach((h) => { + let d = this.getComputePass(), f = this.activeTimers != null; + return f && this.supportTimeQuery && d.writeTimestamp(this.querySet, 0), d.setPipeline(c), d.setBindGroup(0, m), d.dispatchWorkgroups(e.dispatch[0], e.dispatch[1], e.dispatch[2]), f && this.supportTimeQuery && d.writeTimestamp(this.querySet, 1), this.dispatchNumberInEncoder++, t6.forEach((h) => { this.commandQueueOwnedIds.add(h.dataId); - }), this.commandQueueOwnedIds.add(s.dataId), P().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchNumberInEncoder && this.submitQueue(), d && this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(this.querySet) }), s; + }), this.commandQueueOwnedIds.add(s.dataId), O().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchNumberInEncoder && this.submitQueue(), f && this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(this.querySet) }), s; } async getTimeFromQuerySet(e) { - let t10 = this.bufferManager.acquireBuffer(16, GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE), o = this.bufferManager.acquireBuffer(16, GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST); - this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.resolveQuerySet(e, 0, 2, t10, 0), this.currentCommandEncoder.copyBufferToBuffer(t10, 0, o, 0, 16), this.submitQueue(), await o.mapAsync(GPUMapMode.READ); + let t6 = this.bufferManager.acquireBuffer(16, GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE), o = this.bufferManager.acquireBuffer(16, GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST); + this.ensureCommandEncoderReady(), this.ensureComputePassEnded(), this.currentCommandEncoder.resolveQuerySet(e, 0, 2, t6, 0), this.currentCommandEncoder.copyBufferToBuffer(t6, 0, o, 0, 16), this.submitQueue(), await o.mapAsync(GPUMapMode.READ); let n = new BigUint64Array(o.getMappedRange()), s = Number(n[1] - n[0]); - return o.unmap(), this.bufferManager.releaseBuffer(o, 16, GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST), this.bufferManager.releaseBuffer(t10, 16, GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE), s / 1e6; + return o.unmap(), this.bufferManager.releaseBuffer(o, 16, GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST), this.bufferManager.releaseBuffer(t6, 16, GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE), s / 1e6; } - shouldExecuteOnCPU(e, t10 = xte) { - return P().getBool("WEBGPU_CPU_FORWARD") && e.every((o) => this.tensorMap.get(o.dataId).resourceInfo == null && x.sizeFromShape(o.shape) < t10); + shouldExecuteOnCPU(e, t6 = zee) { + return O().getBool("WEBGPU_CPU_FORWARD") && e.every((o) => this.tensorMap.get(o.dataId).resourceInfo == null && y.sizeFromShape(o.shape) < t6); } numDataIds() { return this.tensorMap.numDataIds() - this.tensorDataPendingDisposal.length; @@ -26444,23 +26530,25 @@ var Ai = class extends Jr { this.disposed || (this.bufferManager.dispose(), this.textureManager.dispose(), this.disposed = true); } }; -Ai.nextDataId = 0; -Kl() && pi("webgpu", async () => { - P().set("CHECK_COMPUTATION_FOR_ERRORS", false); - let r = { powerPreference: P().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, e = await navigator.gpu.requestAdapter(r), t10 = e.limits, o = {}, n = e.features.has("timestamp-query"); - o.requiredLimits = { maxComputeWorkgroupStorageSize: t10.maxComputeWorkgroupStorageSize, maxComputeWorkgroupsPerDimension: t10.maxComputeWorkgroupsPerDimension, maxStorageBufferBindingSize: t10.maxStorageBufferBindingSize }, n && (o.requiredFeatures = ["timestamp-query"]); - let s = await e.requestDevice(o), a = await e.requestAdapterInfo(); - return new Ai(s, a); +Ui.nextDataId = 0; +Bl() && Ci("webgpu", async () => { + O().set("CHECK_COMPUTATION_FOR_ERRORS", false); + let r = { powerPreference: O().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, e = await navigator.gpu.requestAdapter(r), t6 = {}; + e.features.has("timestamp-query-inside-passes") && (t6.requiredFeatures = ["timestamp-query-inside-passes"]); + let o = e.limits; + t6.requiredLimits = { maxComputeWorkgroupStorageSize: o.maxComputeWorkgroupStorageSize, maxComputeWorkgroupsPerDimension: o.maxComputeWorkgroupsPerDimension, maxStorageBufferBindingSize: o.maxStorageBufferBindingSize }; + let n = await e.requestDevice(t6), s = await e.requestAdapterInfo(); + return new Ui(n, s); }, 3); var ye; (function(r) { - r[r.MUL = 0] = "MUL", r[r.ADD = 1] = "ADD", r[r.ATAN2 = 2] = "ATAN2", r[r.SUB = 3] = "SUB", r[r.DIV = 4] = "DIV", r[r.EQUAL = 5] = "EQUAL", r[r.GREATER = 6] = "GREATER", r[r.GREATER_EQUAL = 7] = "GREATER_EQUAL", r[r.LESS = 8] = "LESS", r[r.LESS_EQUAL = 9] = "LESS_EQUAL", r[r.LOGICAL_AND = 10] = "LOGICAL_AND", r[r.NOT_EQUAL = 11] = "NOT_EQUAL", r[r.SQUARED_DIFFERENCE = 12] = "SQUARED_DIFFERENCE", r[r.INT_DIV = 13] = "INT_DIV", r[r.POW = 14] = "POW", r[r.PRELU = 15] = "PRELU", r[r.MAX = 16] = "MAX", r[r.MIN = 17] = "MIN", r[r.COMPLEX_MULTIPLY_REAL = 18] = "COMPLEX_MULTIPLY_REAL", r[r.COMPLEX_MULTIPLY_IMAG = 19] = "COMPLEX_MULTIPLY_IMAG"; + r[r.ADD = 0] = "ADD", r[r.ATAN2 = 1] = "ATAN2", r[r.COMPLEX_MULTIPLY_IMAG = 2] = "COMPLEX_MULTIPLY_IMAG", r[r.COMPLEX_MULTIPLY_REAL = 3] = "COMPLEX_MULTIPLY_REAL", r[r.DIV = 4] = "DIV", r[r.EQUAL = 5] = "EQUAL", r[r.GREATER = 6] = "GREATER", r[r.GREATER_EQUAL = 7] = "GREATER_EQUAL", r[r.INT_DIV = 8] = "INT_DIV", r[r.LESS = 9] = "LESS", r[r.LESS_EQUAL = 10] = "LESS_EQUAL", r[r.LOGICAL_AND = 11] = "LOGICAL_AND", r[r.MAX = 12] = "MAX", r[r.MIN = 13] = "MIN", r[r.MOD = 14] = "MOD", r[r.MUL = 15] = "MUL", r[r.NOT_EQUAL = 16] = "NOT_EQUAL", r[r.POW = 17] = "POW", r[r.PRELU = 18] = "PRELU", r[r.SQUARED_DIFFERENCE = 19] = "SQUARED_DIFFERENCE", r[r.SUB = 20] = "SUB"; })(ye || (ye = {})); -var bte = ` +var D3 = ` if (isnan(a)) { return a; } if (isnan(b)) { return b; } `; -var tM = ` +var O3 = ` if (isNaN.r) { resultTemp.r = valueForNaN; } @@ -26474,37 +26562,27 @@ var tM = ` resultTemp.a = valueForNaN; } `; -var rM = ` +var aI = ` let isNaN = isnanVec4(a) | isnanVec4(b); - ${tM} + ${O3} `; -var Cte = "return a + b;"; -var Ite = "return areal * breal - aimag * bimag;"; -var wte = "return areal * bimag + aimag * breal;"; -var Ste = "return a / b;"; -var vte = "return a * b;"; -var kte = "return (a - b) * (a - b);"; -var Tte = "return a - b;"; -var Nte = "return f32(a == b);"; -var _te = "return vec4(a == b);"; -var Ete = "return f32(a > b);"; -var $te = "return vec4(a > b);"; -var Rte = "return f32(a >= b);"; -var Ate = "return vec4(a >= b);"; -var Fte = "return f32(a < b);"; -var Dte = "return vec4(a < b);"; -var Pte = "return f32(a <= b);"; -var Ote = "return vec4(a <= b);"; -var Mte = "return f32(f32(a) >= 1.0 && f32(b) >= 1.0);"; -var Lte = `return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`; -var Bte = ` +var Uee = "return a + b;"; +var Gee = "return areal * breal - aimag * bimag;"; +var Hee = "return areal * bimag + aimag * breal;"; +var qee = "return a / b;"; +var Kee = "return f32(a == b);"; +var jee = "return vec4(a == b);"; +var Xee = "return f32(a > b);"; +var Yee = "return vec4(a > b);"; +var Qee = "return f32(a >= b);"; +var Zee = "return vec4(a >= b);"; +var Jee = ` let s = sign(a) * sign(b); let ia = i32(round(a)); let ib = i32(round(b)); return f32(idiv(ia, ib, s)); - `; -var Vte = ` +`; +var ete = ` let ia = vec4(round(a)); let ib = vec4(round(b)); let cond = ib != vec4(0); @@ -26525,21 +26603,74 @@ var Vte = ` resultTemp[3] = idiv(ia[3], ib[3], s[3]); } return vec4(resultTemp); - `; -var zte = ` +`; +var tte = "return f32(a < b);"; +var rte = "return vec4(a < b);"; +var ote = "return f32(a <= b);"; +var nte = "return vec4(a <= b);"; +var ste = "return f32(f32(a) >= 1.0 && f32(b) >= 1.0);"; +var ate = `return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`; +var ite = ` + ${D3} + if (b == 0.) { + return uniforms.NAN; + } + var resultTemp = a % b; + if ((a < 0. && b < 0.) || (a >= 0. && b > 0.)) { + return resultTemp; + } else { + return (resultTemp + b) % b; + } +`; +var ute = ` + let valueForNaN = uniforms.NAN; + var resultTemp = vec4(a % b); + ${aI} + + if (b[0] == 0.) { + resultTemp[0] = uniforms.NAN; + } + if (b[1] == 0.) { + resultTemp[1] = uniforms.NAN; + } + if (b[2] == 0.) { + resultTemp[2] = uniforms.NAN; + } + if (b[3] == 0.) { + resultTemp[3] = uniforms.NAN; + } + + if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { + resultTemp[0] = (resultTemp[0] + b[0]) % b[0]; + } + if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) { + resultTemp[1] = (resultTemp[1] + b[1]) % b[1]; + } + if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) { + resultTemp[2] = (resultTemp[2] + b[2]) % b[2]; + } + if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { + resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; + } + + return resultTemp; +`; +var pte = "return a * b;"; +var cte = ` if (isnan(a) || isnan(b)) { return 1.0; } return f32(a != b); `; -var Wte = ` +var lte = ` var resultTemp = vec4(a != b); let valueForNaN = 1.0; - ${rM} + ${aI} return resultTemp; `; -var Ute = ` +var mte = ` if(a < 0.0 && floor(b) < b) { return uniforms.NAN; } @@ -26550,8 +26681,8 @@ var Ute = ` return pow(abs(a), b); } return sign(a) * pow(abs(a), b); - `; -var Gte = ` +`; +var dte = ` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -26573,18 +26704,20 @@ var Gte = ` } let isNaN = (a < vec4(0.0)) & (floor(b) < b); let valueForNaN = uniforms.NAN; - ${tM} + ${O3} return resultTemp; - `; -var Hte = "if (a < 0.0) { return b * a; } return a;"; -var qte = ` +`; +var fte = "if (a < 0.0) { return b * a; } return a;"; +var hte = ` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); - `; -function cS(r, e, t10 = "uniforms.NAN") { - let o = e ? rM : bte; +`; +var gte = "return (a - b) * (a - b);"; +var xte = "return a - b;"; +function sI(r, e, t6 = "uniforms.NAN") { + let o = e ? aI : D3; return e ? ` - let valueForNaN = ${t10}; + let valueForNaN = ${t6}; var resultTemp = vec4(${r}(a, b)); ` + o + ` return resultTemp; @@ -26592,66 +26725,105 @@ function cS(r, e, t10 = "uniforms.NAN") { return ${r}(a, b); `; } -function Nc(r, e) { +function Ic(r, e) { switch (r) { - case ye.MUL: - return vte; case ye.ADD: - return Cte; + return Uee; case ye.ATAN2: - return cS("atan2", e); - case ye.SUB: - return Tte; - case ye.DIV: - return Ste; - case ye.EQUAL: - return e ? _te : Nte; - case ye.GREATER: - return e ? $te : Ete; - case ye.GREATER_EQUAL: - return e ? Ate : Rte; - case ye.LESS: - return e ? Dte : Fte; - case ye.LESS_EQUAL: - return e ? Ote : Pte; - case ye.LOGICAL_AND: - return e ? Lte : Mte; - case ye.NOT_EQUAL: - return e ? Wte : zte; - case ye.SQUARED_DIFFERENCE: - return kte; - case ye.INT_DIV: - return e ? Vte : Bte; - case ye.PRELU: - return e ? qte : Hte; - case ye.MAX: - return cS("max", e); - case ye.MIN: - return cS("min", e); - case ye.POW: - return e ? Gte : Ute; - case ye.COMPLEX_MULTIPLY_REAL: - return Ite; + return sI("atan2", e); case ye.COMPLEX_MULTIPLY_IMAG: - return wte; + return Hee; + case ye.COMPLEX_MULTIPLY_REAL: + return Gee; + case ye.DIV: + return qee; + case ye.EQUAL: + return e ? jee : Kee; + case ye.GREATER: + return e ? Yee : Xee; + case ye.GREATER_EQUAL: + return e ? Zee : Qee; + case ye.INT_DIV: + return e ? ete : Jee; + case ye.LESS: + return e ? rte : tte; + case ye.LESS_EQUAL: + return e ? nte : ote; + case ye.LOGICAL_AND: + return e ? ate : ste; + case ye.MAX: + return sI("max", e); + case ye.MIN: + return sI("min", e); + case ye.MOD: + return e ? ute : ite; + case ye.MUL: + return pte; + case ye.NOT_EQUAL: + return e ? lte : cte; + case ye.POW: + return e ? dte : mte; + case ye.PRELU: + return e ? hte : fte; + case ye.SQUARED_DIFFERENCE: + return gte; + case ye.SUB: + return xte; default: throw new Error(`BinaryType ${r} is not implemented!`); } } -var pe; +var Q; (function(r) { - r[r.ABS = 0] = "ABS", r[r.CEIL = 1] = "CEIL", r[r.COS = 2] = "COS", r[r.COSH = 3] = "COSH", r[r.ELU = 4] = "ELU", r[r.EXP = 5] = "EXP", r[r.EXPM1 = 6] = "EXPM1", r[r.FLOOR = 7] = "FLOOR", r[r.IS_NAN = 8] = "IS_NAN", r[r.LINEAR = 9] = "LINEAR", r[r.LOG = 10] = "LOG", r[r.LOGICAL_NOT = 11] = "LOGICAL_NOT", r[r.NEG = 12] = "NEG", r[r.RELU = 13] = "RELU", r[r.RELU6 = 14] = "RELU6", r[r.LEAKYRELU = 15] = "LEAKYRELU", r[r.RECIPROCAL = 16] = "RECIPROCAL", r[r.RSQRT = 17] = "RSQRT", r[r.SIN = 18] = "SIN", r[r.SINH = 19] = "SINH", r[r.SIGMOID = 20] = "SIGMOID", r[r.SQRT = 21] = "SQRT", r[r.SQUARE = 22] = "SQUARE", r[r.TANH = 23] = "TANH", r[r.TO_INT = 24] = "TO_INT"; -})(pe || (pe = {})); -var Kte = "return abs(a);"; -var jte = "return ceil(a);"; -var Xte = "return cos(a);"; -var Yte = ` + r[r.ABS = 0] = "ABS", r[r.ACOS = 1] = "ACOS", r[r.ACOSH = 2] = "ACOSH", r[r.ASIN = 3] = "ASIN", r[r.ASINH = 4] = "ASINH", r[r.ATAN = 5] = "ATAN", r[r.ATANH = 6] = "ATANH", r[r.CEIL = 7] = "CEIL", r[r.COS = 8] = "COS", r[r.COSH = 9] = "COSH", r[r.ELU = 10] = "ELU", r[r.ERF = 11] = "ERF", r[r.EXP = 12] = "EXP", r[r.EXPM1 = 13] = "EXPM1", r[r.FLOOR = 14] = "FLOOR", r[r.IS_FINITE = 15] = "IS_FINITE", r[r.IS_INF = 16] = "IS_INF", r[r.IS_NAN = 17] = "IS_NAN", r[r.LINEAR = 18] = "LINEAR", r[r.LOG = 19] = "LOG", r[r.LOG1P = 20] = "LOG1P", r[r.LOGICAL_NOT = 21] = "LOGICAL_NOT", r[r.NEG = 22] = "NEG", r[r.RELU = 23] = "RELU", r[r.RELU6 = 24] = "RELU6", r[r.LEAKYRELU = 25] = "LEAKYRELU", r[r.RECIPROCAL = 26] = "RECIPROCAL", r[r.RSQRT = 27] = "RSQRT", r[r.SIN = 28] = "SIN", r[r.SINH = 29] = "SINH", r[r.SIGMOID = 30] = "SIGMOID", r[r.SQRT = 31] = "SQRT", r[r.SQUARE = 32] = "SQUARE", r[r.TAN = 33] = "TAN", r[r.TANH = 34] = "TANH", r[r.TO_INT = 35] = "TO_INT"; +})(Q || (Q = {})); +var yte = "return abs(a);"; +var bte = ` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return acos(a); +`; +var Cte = ` + if (a < 1.) { + return uniforms.NAN; + } + return acosh(a); +`; +var Ste = ` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return asin(a); +`; +var wte = "return asinh(a);"; +var Ite = ` + if (isnan(a)) { + return uniforms.NAN; + } + return atan(a); +`; +var vte = ` + if (abs(a) > 1.) { + return uniforms.NAN; + } + if (a == 1.) { + return uniforms.INFINITY; + } + if (a == -1.) { + return -uniforms.INFINITY; + } + return atanh(a); +`; +var kte = "return ceil(a);"; +var Nte = "return cos(a);"; +var Tte = ` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; `; -var Qte = "return exp(a) - 1.0;"; -var Zte = "if (a >= 0.0) { return a; } return (exp(a) - 1.0);"; -var Jte = ` +var _te = "return exp(a) - 1.0;"; +var Ete = "if (a >= 0.0) { return a; } return (exp(a) - 1.0);"; +var $te = ` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -26667,97 +26839,142 @@ var Jte = ` } return resFloat; `; -var ere = "return exp(a);"; -var tre = "return floor(a);"; -var rre = "return f32(isnan(a));"; -var ore = "return a;"; -var nre = `if (a < 0.0) { return uniforms.NAN; } +var Ate = ` + // Error function is calculated approximately with elementary function. + // See "Handbook of Mathematical Functions with Formulas, + // Graphs, and Mathematical Tables", Abramowitz and Stegun. + let p = ${S.ERF_P}; + let a1 = ${S.ERF_A1}; + let a2 = ${S.ERF_A2}; + let a3 = ${S.ERF_A3}; + let a4 = ${S.ERF_A4}; + let a5 = ${S.ERF_A5}; + + let sign = sign(a); + let absA = abs(a); + let t = 1.0 / (1.0 + p * absA); + return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); +`; +var Rte = "return exp(a);"; +var Fte = "return floor(a);"; +var Dte = "return f32(!isnan(a) && !isinf(a));"; +var Ote = "return f32(isinf(a));"; +var Pte = "return f32(isnan(a));"; +var Mte = "return a;"; +var Lte = `if (a < 0.0) { return uniforms.NAN; } return log(a);`; -var sre = "return f32(!(a >= 1.0));"; -var are = "return -a;"; -var ire = "if (a < 0.0) { return uniforms.alpha * a; } return a;"; -var ure = ` +var Bte = ` + if (isnan(a)) { return a; } + return log(1.0 + a); +`; +var Vte = "return f32(!(a >= 1.0));"; +var zte = "return -a;"; +var Wte = "if (a < 0.0) { return uniforms.alpha * a; } return a;"; +var Ute = ` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -var pre = "return 1.0 / a;"; -var cre = "return select(a, 0.0, a < 0.0);"; -var lre = "return clamp(a, 0.0, 6.0);"; -var mre = "return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));"; -var fre = ` +var Gte = "return 1.0 / a;"; +var Hte = "return select(a, 0.0, a < 0.0);"; +var qte = "return clamp(a, 0.0, 6.0);"; +var Kte = "return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));"; +var jte = ` return select(a, vec4(0.0), a < vec4(0.0)); `; -var dre = "return 1.0/sqrt(a);"; -var hre = "return 1.0 / (1.0 + exp(-1.0 * a));"; -var gre = "return sin(a);"; -var xre = ` +var Xte = "return inverseSqrt(a);"; +var Yte = "return 1.0 / (1.0 + exp(-1.0 * a));"; +var Qte = "return sin(a);"; +var Zte = ` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; `; -var yre = "return sqrt(a);"; -var bre = "return a * a;"; -var Cre = ` +var Jte = "return sqrt(a);"; +var ere = "return a * a;"; +var tre = "return tan(a);"; +var rre = ` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); `; -var Ire = "return f32(i32((a)));"; -function za(r, e) { +var ore = "return f32(i32((a)));"; +function Ha(r, e) { switch (r) { - case pe.ABS: - return Kte; - case pe.COS: + case Q.ABS: + return yte; + case Q.ACOS: + return bte; + case Q.ACOSH: + return Cte; + case Q.ASIN: + return Ste; + case Q.ASINH: + return wte; + case Q.ATAN: + return Ite; + case Q.ATANH: + return vte; + case Q.COS: + return Nte; + case Q.COSH: + return Tte; + case Q.CEIL: + return kte; + case Q.ELU: + return e ? $te : Ete; + case Q.ERF: + return Ate; + case Q.EXP: + return Rte; + case Q.EXPM1: + return _te; + case Q.FLOOR: + return Fte; + case Q.IS_FINITE: + return Dte; + case Q.IS_INF: + return Ote; + case Q.IS_NAN: + return Pte; + case Q.LINEAR: + return Mte; + case Q.LOG: + return Lte; + case Q.LOG1P: + return Bte; + case Q.LOGICAL_NOT: + return Vte; + case Q.NEG: + return zte; + case Q.LEAKYRELU: + return e ? Ute : Wte; + case Q.RECIPROCAL: + return Gte; + case Q.RELU: + return e ? jte : Hte; + case Q.RELU6: + return e ? Kte : qte; + case Q.RSQRT: return Xte; - case pe.COSH: + case Q.SIGMOID: return Yte; - case pe.CEIL: - return jte; - case pe.ELU: - return e ? Jte : Zte; - case pe.EXP: - return ere; - case pe.EXPM1: + case Q.SIN: return Qte; - case pe.FLOOR: + case Q.SINH: + return Zte; + case Q.SQRT: + return Jte; + case Q.SQUARE: + return ere; + case Q.TAN: return tre; - case pe.IS_NAN: + case Q.TANH: return rre; - case pe.LINEAR: + case Q.TO_INT: return ore; - case pe.LOG: - return nre; - case pe.LOGICAL_NOT: - return sre; - case pe.NEG: - return are; - case pe.LEAKYRELU: - return e ? ure : ire; - case pe.RECIPROCAL: - return pre; - case pe.RELU: - return e ? fre : cre; - case pe.RELU6: - return e ? mre : lre; - case pe.RSQRT: - return dre; - case pe.SIGMOID: - return hre; - case pe.SIN: - return gre; - case pe.SINH: - return xre; - case pe.SQRT: - return yre; - case pe.SQUARE: - return bre; - case pe.TANH: - return Cre; - case pe.TO_INT: - return Ire; default: throw new Error(`BinaryType ${r} is not implemented!`); } } -var vt = (r) => { +var kt = (r) => { switch (r) { case 1: return "f32"; @@ -26771,27 +26988,27 @@ var vt = (r) => { throw new Error(`${r}-component is not supported.`); } }; -function ur(r, e = false, t10 = false, o = 3) { +function ur(r, e = false, t6 = false, o = 3) { if (r === null) return ""; let n = ""; if (r === "linear") - n = za(pe.LINEAR); + n = Ha(Q.LINEAR); else if (r === "relu") - n = za(pe.RELU, t10); + n = Ha(Q.RELU, t6); else if (r === "elu") - n = za(pe.ELU, t10); + n = Ha(Q.ELU, t6); else if (r === "relu6") - n = za(pe.RELU6, t10); + n = Ha(Q.RELU6, t6); else if (r === "prelu") - n = Nc(ye.PRELU, t10); + n = Ic(ye.PRELU, t6); else if (r === "sigmoid") - n = za(pe.SIGMOID, t10); + n = Ha(Q.SIGMOID, t6); else if (r === "leakyrelu") - n = za(pe.LEAKYRELU, t10); + n = Ha(Q.LEAKYRELU, t6); else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`); - let a = vt(t10 ? 4 : 1), i = ""; + let a = kt(t6 ? 4 : 1), i = ""; return e ? i = ` fn activation(a : ${a}, coords : vec${o}) -> ${a} { let b = getPreluActivationWeightsByOutputCoords(coords); @@ -26801,25 +27018,25 @@ function ur(r, e = false, t10 = false, o = 3) { ${n} }`, i; } -function Kr(r, e) { +function Hr(r, e) { return ` ${r ? "value = value + getBiasByOutputCoords(coords);" : ""} ${e ? "value = activation(value, coords);" : ""} `; } -function lS(r, e, t10, o, n = false, s = false, a = false, i = 1) { - x.assert(t10 && i === 1 || !t10, () => `transposeA ${t10} is not compatible with component size ${i}`); +function iI(r, e, t6, o, n = false, s = false, a = false, i = 1) { + y.assert(t6 && i === 1 || !t6, () => `transposeA ${t6} is not compatible with component size ${i}`); let p = ` let batch = ${r ? "0" : "batchIn"}; - ${t10 ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} + ${t6 ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} `, u = o ? "value = getB(batch, col, row);" : "value = getB(batch, row, col);"; return ` - fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} { - var value = ${vt(i)}(0.0); + fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} { + var value = ${kt(i)}(0.0); let col = colIn * ${i}; ${n && a ? p : ` - ${t10 ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} + ${t6 ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} { ${p} } @@ -26827,101 +27044,93 @@ function lS(r, e, t10, o, n = false, s = false, a = false, i = 1) { return value; } - fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} { + fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} { let col = colIn * ${i}; let batch = ${e ? "0" : "batchIn"}; - var value = ${vt(i)}(0.0); + var value = ${kt(i)}(0.0); ${u} return value; } `; } -function jl(r, e, t10, o, n, s, a = false, i = false, p = false, u = 1) { +function Vl(r, e, t6, o, n, s, a = false, i = false, p = false, u = 1) { return ` - ${lS(t10, o, n, s, a, i, p, u)} - fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${vt(u)}) { + ${iI(t6, o, n, s, a, i, p, u)} + fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${kt(u)}) { let col = colIn * ${u}; ${a && i ? "" : "if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${Kr(r, e)} + ${Hr(r, e)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } `; } -var wre = (r) => r ? ` +var nre = (r) => r ? ` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, - globalRowStart / InnerElementSize + inputCol); + globalRowStart / innerElementSize + inputCol); ` : ` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRow + innerRow, - kStart / InnerElementSize + inputCol); + kStart / innerElementSize + inputCol); `; -var Sre = (r, e) => r ? ` - let ACached0 = mm_Asub[k * InnerElementSize][localRow]; - let ACached1 = mm_Asub[k * InnerElementSize + 1][localRow]; - let ACached2 = mm_Asub[k * InnerElementSize + 2][localRow]; - ${e === 3 ? "" : "let ACached3 = mm_Asub[k * InnerElementSize + 3][localRow];"} - for (var i = 0; i < RowPerThread; i = i + 1) { +var sre = (r, e) => r ? ` + let ACached0 = mm_Asub[k * innerElementSize][localRow]; + let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; + let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; + ${e === 3 ? "" : "let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} + for (var i = 0; i < rowPerThread; i = i + 1) { acc[i] = BCached0 * ACached0[i] + acc[i]; acc[i] = BCached1 * ACached1[i] + acc[i]; acc[i] = BCached2 * ACached2[i] + acc[i]; ${e === 3 ? "" : "acc[i] = BCached3 * ACached3[i] + acc[i];"} }` : ` - for (var i = 0; i < RowPerThread; i = i + 1) { + for (var i = 0; i < rowPerThread; i = i + 1) { let ACached = mm_Asub[tileRow + i][k]; acc[i] = BCached0 * ACached.x + acc[i]; acc[i] = BCached1 * ACached.y + acc[i]; acc[i] = BCached2 * ACached.z + acc[i]; ${e === 3 ? "" : "acc[i] = BCached3 * ACached.w + acc[i];"} }`; -function Uu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { - let i = e[1] * r[1], p = e[0] * r[0], u = t10 ? i : o, c = t10 ? o : i, l = u / e[0], m = o / e[1]; - return x.assert((t10 && l === 4 && r[1] === 4 || !t10 && (l === 3 || l === 4)) && u % e[0] === 0 && o % e[1] === 0 && r[0] === 4, () => `If transposeA ${t10} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. +function Wu(r, e, t6 = false, o = 32, n = false, s = 32, a = false) { + let i = e[1] * r[1], p = e[0] * r[0], u = t6 ? i : o, c = t6 ? o : i, l = u / e[0], m = o / e[1]; + return y.assert((t6 && l === 4 && r[1] === 4 || !t6 && (l === 3 || l === 4)) && u % e[0] === 0 && o % e[1] === 0 && r[0] === 4, () => `If transposeA ${t6} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. Otherwise, innerElementSize ${l} must be 3 or 4. - tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}. tileInner ${o} must be divisible by workGroupSize[1] ${e[1]}. ColPerThread ${r[0]} must be 4.`), ` + tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`), ` var mm_Asub : array, ${u / l}>, ${c}>; var mm_Bsub : array, ${p / r[0]}>, ${o}>; - const RowPerThread = ${r[1]}; - const ColPerThread = ${r[0]}; - const InnerElementSize = ${l}; - const TileInner = ${o}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${r[1]}; + const colPerThread = ${r[0]}; + const innerElementSize = ${l}; + const tileInner = ${o}; + ${se()} { let localRow = i32(localId.y); - let tileRow = ${a ? "0" : "localRow * RowPerThread"}; + let tileRow = ${a ? "0" : "localRow * rowPerThread"}; let tileCol = i32(localId.x); - let globalRow = ${a ? "0" : "i32(globalId.y) * RowPerThread"}; + let globalRow = ${a ? "0" : "i32(globalId.y) * rowPerThread"}; let globalCol = i32(globalId.x); let batch = ${n ? "0" : "i32(globalId.z)"}; let globalRowStart = i32(workgroupId.y) * ${i}; - let numTiles = ${n ? `${Math.ceil(s / o)}` : "(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${n ? `${Math.ceil(s / o)}` : "(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${n ? `i32(globalId.z) * ${s}` : "0"}; - var acc: array, RowPerThread>; + var acc: array, rowPerThread>; // Loop over shared dimension. let tileRowB = localRow * ${m}; for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${wre(t10)} + ${nre(t6)} } // Load one tile of B into local memory. @@ -26930,28 +27139,28 @@ function Uu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { let inputCol = tileCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol); } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileInner / InnerElementSize; k = k + 1) { - let BCached0 = mm_Bsub[k * InnerElementSize][tileCol]; - let BCached1 = mm_Bsub[k * InnerElementSize + 1][tileCol]; - let BCached2 = mm_Bsub[k * InnerElementSize + 2][tileCol]; - ${l === 3 ? "" : "let BCached3 = mm_Bsub[k * InnerElementSize + 3][tileCol];"} + for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { + let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; + let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; + let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; + ${l === 3 ? "" : "let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} - ${Sre(t10, l)} + ${sre(t6, l)} } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } }`; } -var oM = (r) => r ? ` +var P3 = (r) => r ? ` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, globalRowStart + inputCol); @@ -26960,11 +27169,11 @@ var oM = (r) => r ? ` globalRowStart + inputRow, kStart + inputCol); `; -var vre = (r) => r ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; -function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { - let i = r[1] * e[1], p = r[0] * e[0], u = t10 ? i : o, c = t10 ? o : i; - x.assert(c % e[1] === 0 && u % e[0] === 0 && o % e[1] === 0, () => `tileAHight ${c} must be divisible by workGroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}, tileInner ${o} must be divisible by workGroupSize[1]${e[1]}`); - let l = c / e[1], m = u / e[0], f = o / e[1], d = a ? ` +var are = (r) => r ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; +function Uu(r, e, t6 = false, o = 32, n = false, s = 32, a = false) { + let i = r[1] * e[1], p = r[0] * e[0], u = t6 ? i : o, c = t6 ? o : i; + y.assert(c % e[1] === 0 && u % e[0] === 0 && o % e[1] === 0, () => `tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`); + let l = c / e[1], m = u / e[0], d = o / e[1], f = a ? ` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${i}; @@ -26975,7 +27184,7 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) { for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) { - ${oM(t10)} + ${P3(t6)} } } // Load one tile of B into local memory. @@ -26986,18 +27195,18 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { globalColStart + inputCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - let ACached = ${t10 ? `mm_Asub[k][localRow + innerRow * ${e[1]}];` : `mm_Asub[localRow + innerRow * ${e[1]}][k];`} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let ACached = ${t6 ? `mm_Asub[k][localRow + innerRow * ${e[1]}];` : `mm_Asub[localRow + innerRow * ${e[1]}][k];`} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } @@ -27005,24 +27214,24 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let gRow = globalRowStart + localRow + innerRow * ${e[1]}; - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let gCol = globalColStart + localCol + innerCol * ${e[0]}; mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); } } ` : ` - let tileRow = i32(localId.y) * RowPerThread; - let tileCol = i32(localId.x) * ColPerThread; + let tileRow = i32(localId.y) * rowPerThread; + let tileCol = i32(localId.x) * colPerThread; - let globalRow = i32(globalId.y) * RowPerThread; - let globalCol = i32(globalId.x) * ColPerThread; + let globalRow = i32(globalId.y) * rowPerThread; + let globalCol = i32(globalId.x) * colPerThread; let globalRowStart = i32(workgroupId.y) * ${i}; let tileRowA = i32(localId.y) * ${l}; let tileColA = i32(localId.x) * ${m}; - let tileRowB = i32(localId.y) * ${f}; + let tileRowB = i32(localId.y) * ${d}; // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. @@ -27030,13 +27239,13 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { for (var innerCol = 0; innerCol < ${m}; innerCol = innerCol + 1) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${oM(t10)} + ${P3(t6)} } } // Load one tile of B into local memory. - for (var innerRow = 0; innerRow < ${f}; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol + innerCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, @@ -27044,19 +27253,19 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { globalCol + innerCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][tileCol + inner]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - ${vre(t10)} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + ${are(t6)} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } } @@ -27065,8 +27274,8 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { mm_write(batch, globalRow + innerRow, globalCol + innerCol, acc[innerRow][innerCol]); } @@ -27075,36 +27284,28 @@ function Gu(r, e, t10 = false, o = 32, n = false, s = 32, a = false) { return ` var mm_Asub : array, ${c}>; var mm_Bsub : array, ${o}>; - const RowPerThread = ${r[1]}; - const ColPerThread = ${r[0]}; - const TileInner = ${o}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${r[1]}; + const colPerThread = ${r[0]}; + const tileInner = ${o}; + ${se()} { let batch = ${n ? "0" : "i32(globalId.z)"}; - let numTiles = ${n ? `${Math.ceil(s / o)}` : "(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${n ? `${Math.ceil(s / o)}` : "(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${n ? `i32(globalId.z) * ${s}` : "0"}; - var acc : array, RowPerThread>; + var acc : array, rowPerThread>; // Without this initialization strange values show up in acc. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = 0.0; } } - ${d} + ${f} } `; } -var kre = (r) => r ? ` +var ire = (r) => r ? ` mm_readA(batch, colA, globalRow), mm_readA(batch, colA + 1, globalRow), mm_readA(batch, colA + 2, globalRow), @@ -27115,17 +27316,17 @@ var kre = (r) => r ? ` mm_readA(batch, globalRow, colA + 2), mm_readA(batch, globalRow, colA + 3) `; -function Tre(r, e = false) { - return x.assert(r[1] === 1 && r[2] === 1, () => `A linear work group size is required. But got ${r}.`), ` - const TileSize = ${r[0] * 4}; +function ure(r, e = false) { + return y.assert(r[1] === 1 && r[2] === 1, () => `A linear work group size is required. But got ${r}.`), ` + const tileSize = ${r[0] * 4}; var mm_Asub : array, ${r[0]}>; - ${ue()} { + ${se()} { let tileCol = i32(localId.x); let globalCol = i32(globalId.x); let globalRow = i32(globalId.y); - let numTiles = (uniforms.dimInner - 1) / TileSize + 1; + let numTiles = (uniforms.dimInner - 1) / tileSize + 1; let batch = i32(globalId.z); // Without this initialization strange values show up in acc. var acc = 0.0; @@ -27133,13 +27334,13 @@ function Tre(r, e = false) { // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - let colA = t * TileSize + tileCol * 4; - mm_Asub[tileCol] = vec4(${kre(e)}); + let colA = t * tileSize + tileCol * 4; + mm_Asub[tileCol] = vec4(${ire(e)}); workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileSize / 4; k = k + 1) { - let rowB = t * TileSize + k * 4; + for (var k = 0; k < tileSize / 4; k = k + 1) { + let rowB = t * tileSize + k * 4; let BCached = vec4(mm_readB(batch, rowB, globalCol), mm_readB(batch, rowB + 1, globalCol), mm_readB(batch, rowB + 2, globalCol), @@ -27156,45 +27357,45 @@ function Tre(r, e = false) { } `; } -var Bg = class { - constructor(e, t10, o, n, s = false, a = false, i = null, p = null, u = null, c = false) { - this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t10, this.dispatchLayout = { x: [2], y: [1], z: [0] }; +var _g = class { + constructor(e, t6, o, n, s = false, a = false, i = null, p = null, u = null, c = false) { + this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t6, this.dispatchLayout = { x: [2], y: [1], z: [0] }; let l = s ? e[1] : e[2]; - if (this.isVec4 = (l % 4 === 0 && !s || t10[1] % 4 === 0 && s) && t10[2] % 4 === 0 && !a, this.isVectorA = t10[1] === 1 && !s, !this.isVec4 && this.isVectorA) - this.elementsPerThread = [1, 1, 1], this.workGroupSize = [32, 1, 1]; + if (this.isVec4 = (l % 4 === 0 && !s || t6[1] % 4 === 0 && s) && t6[2] % 4 === 0 && !a, this.isVectorA = t6[1] === 1 && !s, !this.isVec4 && this.isVectorA) + this.elementsPerThread = [1, 1, 1], this.workgroupSize = [32, 1, 1]; else { - let d = aS(t10[1], l, t10[2], s); - this.workGroupSize = d.workGroupSize, this.elementsPerThread = d.elementsPerThread; + let f = tI(t6[1], l, t6[2], s); + this.workgroupSize = f.workgroupSize, this.elementsPerThread = f.elementsPerThread; } - this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, this.elementsPerThread); - let m = i != null, f = u != null; - m && this.variableNames.push("bias"), f && this.variableNames.push("preluActivationWeights"), this.sequentialAccessByThreads = c, this.transposeA = s, this.transposeB = a, this.addBias = m, this.activation = p, this.hasPreluActivationWeights = f, this.batchAEqualOne = o, this.batchBEqualOne = n, [this.fitAOuter, this.fitBOuter, this.fitInner] = this.getShapeFit(t10[1], t10[2], l), this.shaderKey = `matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`; + this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread); + let m = i != null, d = u != null; + m && this.variableNames.push("bias"), d && this.variableNames.push("preluActivationWeights"), this.sequentialAccessByThreads = c, this.transposeA = s, this.transposeB = a, this.addBias = m, this.activation = p, this.hasPreluActivationWeights = d, this.batchAEqualOne = o, this.batchBEqualOne = n, [this.fitAOuter, this.fitBOuter, this.fitInner] = this.getShapeFit(t6[1], t6[2], l), this.shaderKey = `matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`; } - getShapeFit(e, t10, o) { - let n = this.workGroupSize[1] * this.elementsPerThread[1], s = this.workGroupSize[0] * this.elementsPerThread[0]; - !this.isVec4 && this.isVectorA ? this.tileInner = this.workGroupSize[0] * 4 : this.tileInner = s; - let a = e % n === 0, i = t10 % s === 0, p = o % this.tileInner === 0; + getShapeFit(e, t6, o) { + let n = this.workgroupSize[1] * this.elementsPerThread[1], s = this.workgroupSize[0] * this.elementsPerThread[0]; + !this.isVec4 && this.isVectorA ? this.tileInner = this.workgroupSize[0] * 4 : this.tileInner = s; + let a = e % n === 0, i = t6 % s === 0, p = o % this.tileInner === 0; return [a, i, p]; } getUserCode() { return ` ${ur(this.activation, this.hasPreluActivationWeights, this.isVec4)} - ${jl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} - ${this.isVec4 ? Uu(this.elementsPerThread, this.workGroupSize, this.transposeA, this.tileInner, false, null, this.isVectorA) : this.isVectorA ? Tre(this.workGroupSize, this.transposeA) : Gu(this.elementsPerThread, this.workGroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads)} + ${Vl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} + ${this.isVec4 ? Wu(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.isVectorA) : this.isVectorA ? ure(this.workgroupSize, this.transposeA) : Uu(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads)} `; } }; -function Nre() { +function pre() { return ` - var sumValues : array; - ${ue()} { + var sumValues : array; + ${se()} { let coords = getOutputCoords(); let batch = coords[0]; let row = coords[1]; let col = coords[2]; var sum = 0.0; let Length = uniforms.dimInner; - for (var k = i32(localId.x); k < Length; k = k + i32(workGroupSizeX)) { + for (var k = i32(localId.x); k < Length; k = k + i32(workgroupSizeX)) { let dataA = mm_readA(batch, row, k); let dataB = mm_readB(batch, k, col); sum = sum + dataA * dataB; @@ -27202,7 +27403,7 @@ function Nre() { sumValues[localId.x] = sum; workgroupBarrier(); - for(var currentSize = workGroupSizeX / 2u; currentSize > 1u; + for(var currentSize = workgroupSizeX / 2u; currentSize > 1u; currentSize = currentSize / 2u) { if (localId.x < currentSize) { @@ -27218,25 +27419,25 @@ function Nre() { } `; } -var Vg = class { - constructor(e, t10, o, n = false, s = false, a = null, i = null, p = null) { - this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workGroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = { x: [], y: [1, 2], z: [0] }, this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize); +var Eg = class { + constructor(e, t6, o, n = false, s = false, a = null, i = null, p = null) { + this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = { x: [], y: [1, 2], z: [0] }, this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize); let u = a != null, c = p != null; - u && this.variableNames.push("bias"), c && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = c, this.batchAEqualOne = t10, this.batchBEqualOne = o, this.shaderKey = `matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`; + u && this.variableNames.push("bias"), c && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = c, this.batchAEqualOne = t6, this.batchBEqualOne = o, this.shaderKey = `matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`; } getUserCode() { return ` ${ur(this.activation, this.hasPreluActivationWeights)} - ${jl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, this.transposeA, this.transposeB)} - ${Nre()} + ${Vl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, this.transposeA, this.transposeB)} + ${pre()} `; } }; -function _re(r) { - let e = r[1], t10 = r[0], o = e > t10 ? e : t10; +function cre(r) { + let e = r[1], t6 = r[0], o = e > t6 ? e : t6; return ` var mm_Asub : array, ${e}>; - var mm_Bsub : array, ${o}>; + var mm_Bsub : array, ${o}>; // If the output size is small for matrix multiplication, avoid to use vec4 // and handle some elements per thread to optimally utilize the ALU. @@ -27244,7 +27445,7 @@ function _re(r) { // shared memory, so it is instruction-Level parallelism for arithmetic // operations and others handle IO operations between barrier api, makes ALU // and load/store units work simultaneously, could improves the performance. - ${ue()} { + ${se()} { let tileRow = i32(localId.y); let tileCol = i32(localId.x); let globalRow = i32(globalId.y); @@ -27286,25 +27487,25 @@ function _re(r) { } `; } -var zg = class { - constructor(e, t10, o, n = false, s = false, a = null, i = null, p = null) { - this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workGroupSize = [16, 8, 1], this.outputShape = o, this.dispatchLayout = { x: [2], y: [1], z: [0] }, this.dispatch = [Math.ceil(o[2] / this.workGroupSize[0]), Math.ceil(o[1] / this.workGroupSize[1]), o[0]]; +var $g = class { + constructor(e, t6, o, n = false, s = false, a = null, i = null, p = null) { + this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [16, 8, 1], this.outputShape = o, this.dispatchLayout = { x: [2], y: [1], z: [0] }, this.dispatch = [Math.ceil(o[2] / this.workgroupSize[0]), Math.ceil(o[1] / this.workgroupSize[1]), o[0]]; let u = a != null; u && this.variableNames.push("bias"); let c = p != null; - c && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = c, this.batchAEqualOne = e[0] === 1, this.batchBEqualOne = t10[0] === 1, this.shaderKey = `matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`; + c && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = c, this.batchAEqualOne = e[0] === 1, this.batchBEqualOne = t6[0] === 1, this.shaderKey = `matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`; } getUserCode() { return ` ${ur(this.activation, this.hasPreluActivationWeights)} - ${jl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, this.transposeA, this.transposeB)} - ${_re(this.workGroupSize)} + ${Vl(this.addBias, this.activation, this.batchAEqualOne, this.batchBEqualOne, this.transposeA, this.transposeB)} + ${cre(this.workgroupSize)} `; } }; -var Wg = class { - constructor(e, t10, o, n, s = false, a = false) { - this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workGroupSize = [8, 8, 1], this.atomic = true, this.isVec4 = false, this.splitedDimInner = 128, x.assert(e[0] === 1, () => "MatMulSplitKProgram only supports batch = 1."), this.outputShape = e, this.dispatchLayout = { x: [2], y: [1], z: [0, 3] }, this.isVec4 = (s && this.outputShape[1] % 4 === 0 || !s && t10 % 4 === 0) && this.outputShape[2] % 4 === 0, this.elementsPerThread = [4, 4, this.splitedDimInner], this.isVec4 || (this.outputShape[1] < 16 && (this.elementsPerThread[1] = 1), this.outputShape[2] < 16 && (this.elementsPerThread[0] = 1)), this.dispatch = ae(this.dispatchLayout, [this.outputShape[0], this.outputShape[1], this.outputShape[2], t10], this.workGroupSize, this.elementsPerThread), this.transposeA = s, this.transposeB = a, this.batchAEqualOne = o, this.batchBEqualOne = n, this.shaderKey = `matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`; +var Ag = class { + constructor(e, t6, o, n, s = false, a = false) { + this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [8, 8, 1], this.atomic = true, this.isVec4 = false, this.splitedDimInner = 128, y.assert(e[0] === 1, () => "MatMulSplitKProgram only supports batch = 1."), this.outputShape = e, this.dispatchLayout = { x: [2], y: [1], z: [0, 3] }, this.isVec4 = (s && this.outputShape[1] % 4 === 0 || !s && t6 % 4 === 0) && this.outputShape[2] % 4 === 0, this.elementsPerThread = [4, 4, this.splitedDimInner], this.isVec4 || (this.outputShape[1] < 16 && (this.elementsPerThread[1] = 1), this.outputShape[2] < 16 && (this.elementsPerThread[0] = 1)), this.dispatch = re(this.dispatchLayout, [this.outputShape[0], this.outputShape[1], this.outputShape[2], t6], this.workgroupSize, this.elementsPerThread), this.transposeA = s, this.transposeB = a, this.batchAEqualOne = o, this.batchBEqualOne = n, this.shaderKey = `matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`; } getUserCode() { let e = (n) => ` @@ -27320,48 +27521,48 @@ var Wg = class { exchanged = res.exchanged; } } - `, t10 = this.isVec4 ? 4 : 1; + `, t6 = this.isVec4 ? 4 : 1; return ` - ${lS(this.batchAEqualOne, this.batchBEqualOne, false, this.transposeB, false, false, false, t10)} - fn mm_write(batch: i32, row : i32, colIn : i32, value : ${vt(t10)}) { - let col = colIn * ${t10}; + ${iI(this.batchAEqualOne, this.batchBEqualOne, false, this.transposeB, false, false, false, t6)} + fn mm_write(batch: i32, row : i32, colIn : i32, value : ${kt(t6)}) { + let col = colIn * ${t6}; if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); let flatIndex = getOutputIndexFromCoords(coords); // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. - ${e(t10)} + ${e(t6)} } } - ${this.isVec4 ? Uu(this.elementsPerThread, this.workGroupSize, this.transposeA, 32, true, this.splitedDimInner) : Gu(this.elementsPerThread, this.workGroupSize, this.transposeA, 32, true, this.splitedDimInner)} + ${this.isVec4 ? Wu(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner) : Uu(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner)} `; } }; -var Ug = class { - constructor(e, t10 = null, o = null, n = null) { - this.uniforms = "", this.variableNames = ["x"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.addBias = t10 != null, this.hasPreluActivationWeights = n != null, this.activation = o, this.addBias && this.variableNames.push("bias"), this.hasPreluActivationWeights && this.variableNames.push("preluActivationWeights"), this.shaderKey = `biasActivation_${o}`; +var Rg = class { + constructor(e, t6 = null, o = null, n = null) { + this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.addBias = t6 != null, this.hasPreluActivationWeights = n != null, this.activation = o, this.addBias && this.variableNames.push("bias"), this.hasPreluActivationWeights && this.variableNames.push("preluActivationWeights"), this.shaderKey = `biasActivation_${o}`; } getUserCode() { return ` ${ur(this.activation, this.hasPreluActivationWeights)} - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${Kr(this.addBias, this.activation)} + ${Hr(this.addBias, this.activation)} setOutputAtIndex(index, value); } } `; } }; -var Gg = class { +var Fg = class { constructor(e) { - this.variableNames = [], this.outputShape = [], this.uniforms = "value : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "fill"; + this.variableNames = [], this.outputShape = [], this.uniforms = "value : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "fill"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } @@ -27369,79 +27570,83 @@ var Gg = class { `; } }; -function $o(r) { - let { backend: e, attrs: t10 } = r, { shape: o, value: n } = t10, { dtype: s } = t10; - if (s = s || x.inferDtype(n), s === "string") { - let a = x.getArrayFromDType(s, x.sizeFromShape(o)); +function dr(r) { + let { backend: e, attrs: t6 } = r, { shape: o, value: n } = t6, { dtype: s } = t6; + if (s = s || y.inferDtype(n), s === "string") { + let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), e.makeTensorInfo(o, s, a); } else { - let a = new Gg(o), i = [{ type: "float32", data: [n] }]; + let a = new Fg(o), i = [{ type: "float32", data: [n] }]; return e.runWebGPUProgram(a, [], s, i); } } -var nM = { kernelName: ys, backendName: "webgpu", kernelFunc: $o }; -function xe(r) { - let { inputs: e, attrs: t10 } = r, { x: o } = e, { shape: n } = t10, s = x.sizeFromShape(o.shape), a = x.inferFromImplicitShape(n, s), i = x.sizeFromShape(a); - return x.assert(s === i, () => `The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`), r.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; +var M3 = { kernelName: Cs, backendName: "webgpu", kernelFunc: dr }; +function de(r) { + let { inputs: e, attrs: t6 } = r, { x: o } = e, { shape: n } = t6, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s), i = y.sizeFromShape(a); + return y.assert(s === i, () => `The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`), r.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; } -var sM = { kernelName: Ss, backendName: "webgpu", kernelFunc: xe }; -function _c({ a: r, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r.shape.length, c = e.shape.length, l = t10 ? r.shape[u - 2] : r.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], f = t10 ? r.shape[u - 1] : r.shape[u - 2], d = o ? e.shape[c - 2] : e.shape[c - 1], h = r.shape.slice(0, -2), g = e.shape.slice(0, -2), y = x.sizeFromShape(h), b = x.sizeFromShape(g), w = br.assertAndGetBroadcastShape(r.shape.slice(0, -2), e.shape.slice(0, -2)).concat([f, d]); - x.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let k = t10 ? [y, l, f] : [y, f, l], _ = o ? [b, d, m] : [b, m, d], E = xe({ inputs: { x: r }, backend: n, attrs: { shape: k } }), R = xe({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), A = [E, R], D = Math.max(y, b), O = y === 1, M = b === 1, L = [E, R], W = [{ type: "int32", data: [f] }, { type: "int32", data: [d] }, { type: "int32", data: [l] }], V, G, q = [D, f, d], H = P().get("WEBGPU_MATMUL_PROGRAM_TYPE"); - switch (H < 0 && (f * d <= 128 ? H = Qo.MatMulReduceProgram : D === 1 && f <= 128 && d <= 48 && m >= 2e3 ? H = Qo.MatMulSplitKProgram : f <= 16 && (d <= 512 || m >= 2 * d) || d <= 16 && (f <= 512 || l >= 2 * f) ? H = Qo.MatMulSmallOutputSizeProgram : H = Qo.MatMulPackedProgram), H) { - case Qo.MatMulReduceProgram: - V = new Vg(q, O, M, t10, o, s, p, a); +var L3 = { kernelName: Ns, backendName: "webgpu", kernelFunc: de }; +function Gu({ a: r, b: e, transposeA: t6, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r.shape.length, c = e.shape.length, l = t6 ? r.shape[u - 2] : r.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], d = t6 ? r.shape[u - 1] : r.shape[u - 2], f = o ? e.shape[c - 2] : e.shape[c - 1], h = r.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), w = br.assertAndGetBroadcastShape(r.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t6} and transposeB=${o} must match.`); + let k = t6 ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], $ = de({ inputs: { x: r }, backend: n, attrs: { shape: k } }), A = de({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), R = [$, A], D = Math.max(x, b), P = x === 1, M = b === 1, L = [$, A], W = [{ type: "int32", data: [d] }, { type: "int32", data: [f] }, { type: "int32", data: [l] }], V, U, q = [D, d, f], H = O().get("WEBGPU_MATMUL_PROGRAM_TYPE"); + if (H < 0) { + let X = O().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), Z = X > 0 ? X : n.thresholdToIncreaseWorkgroups, ee = D * Math.ceil(d / 32) * Math.ceil(f / 32); + ee <= Z || d <= 8 && ee <= Z * 2 ? D * d * f <= 128 ? H = Ao.MatMulReduceProgram : D === 1 && m >= 2e3 ? H = Ao.MatMulSplitKProgram : H = Ao.MatMulSmallOutputSizeProgram : H = Ao.MatMulPackedProgram; + } + switch (H) { + case Ao.MatMulReduceProgram: + V = new Eg(q, P, M, t6, o, s, p, a); break; - case Qo.MatMulSplitKProgram: { - if (G = $o({ backend: n, attrs: { shape: q, value: 0, dtype: r.dtype } }), V = new Wg(q, m, O, M, t10, o), s || p) { - G = n.runWebGPUProgram(V, L, r.dtype, W, G); - let Z = new Ug(G.shape, s, p, a), ee = null, X = [G]; - s && X.push(s), a && X.push(a), p === "leakyrelu" && (ee = [{ type: "float32", data: [i] }], Z.uniforms += " alpha : f32,"); - let Q = n.runWebGPUProgram(Z, X, G.dtype, ee); - A.push(G); - let se = xe({ inputs: { x: Q }, backend: n, attrs: { shape: w } }); - A.push(Q); - for (let ie of A) - n.disposeData(ie.dataId); - return se; + case Ao.MatMulSplitKProgram: { + if (U = dr({ backend: n, attrs: { shape: q, value: 0, dtype: r.dtype } }), V = new Ag(q, m, P, M, t6, o), s || p) { + U = n.runWebGPUProgram(V, L, r.dtype, W, U); + let Z = new Rg(U.shape, s, p, a), ee = null, Y = [U]; + s && Y.push(s), a && Y.push(a), p === "leakyrelu" && (ee = [{ type: "float32", data: [i] }], Z.uniforms += " alpha : f32,"); + let J = n.runWebGPUProgram(Z, Y, U.dtype, ee); + R.push(U); + let ie = de({ inputs: { x: J }, backend: n, attrs: { shape: w } }); + R.push(J); + for (let pe of R) + n.disposeData(pe.dataId); + return ie; } break; } - case Qo.MatMulSmallOutputSizeProgram: - V = new zg(k, _, q, t10, o, s, p, a); + case Ao.MatMulSmallOutputSizeProgram: + V = new $g(k, _, q, t6, o, s, p, a); break; - case Qo.MatMulPackedProgram: - let Y = n.adapterInfo.isIntel(); - V = new Bg(k, q, O, M, t10, o, s, p, a, Y); + case Ao.MatMulPackedProgram: + let X = n.adapterInfo.isIntel(); + V = new _g(k, q, P, M, t6, o, s, p, a, X); break; default: throw new Error(`Unsupported MatMulProgramType ${H}.`); } - s && L.push(s), a && L.push(a), p === "leakyrelu" && (W.push({ type: "float32", data: [i] }), V.uniforms += " alpha : f32,"), G = n.runWebGPUProgram(V, L, r.dtype, W, G); - let j = xe({ inputs: { x: G }, backend: n, attrs: { shape: w } }); - A.push(G); - for (let Y of A) - n.disposeData(Y.dataId); + s && L.push(s), a && L.push(a), p === "leakyrelu" && (W.push({ type: "float32", data: [i] }), V.uniforms += " alpha : f32,"), U = n.runWebGPUProgram(V, L, r.dtype, W, U); + let j = de({ inputs: { x: U }, backend: n, attrs: { shape: w } }); + R.push(U); + for (let X of R) + n.disposeData(X.dataId); return j; } -function Ere(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; - return _c({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); +function lre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return Gu({ a: n, b: s, transposeA: p, transposeB: u, backend: t6, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var aM = { kernelName: Fo, backendName: "webgpu", kernelFunc: Ere }; -var Xl = class { - constructor(e, t10, o) { - this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.workGroupSize = [128, 1, 1], this.size = true, this.outputShape = I.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = `binaryOpComplex_${e}`, this.op = e; +var B3 = { kernelName: fo, backendName: "webgpu", kernelFunc: lre }; +var zl = class { + constructor(e, t6, o) { + this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.workgroupSize = [128, 1, 1], this.size = true, this.outputShape = S.assertAndGetBroadcastShape(t6, o), this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `binaryOpComplex_${e}`, this.op = e; } getUserCode() { return ` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${Nc(this.op, false)} + ${Ic(this.op, false)} } - ${ue("index")} { + ${se("index")} { if(index < uniforms.size) { let areal = getARealByOutputIndex(index); let aimag = getAImagByOutputIndex(index); @@ -27454,13 +27659,13 @@ var Xl = class { } }; var Hu = class { - constructor(e, t10, o) { - this.size = true, this.variableNames = ["A", "B"], this.outputShape = I.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = fe(this.outputShape), this.op = e, this.useSharedMemoryWithA = t10.length <= 1 && o.length > 1 && t10[0] < 128, this.useSharedMemoryWithB = o.length <= 1 && t10.length > 1 && o[0] < 128, this.useSharedMemoryWithA || this.useSharedMemoryWithB ? (this.isVec4 = false, this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : t10[0], this.shaderKey = `binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`, this.type = "shared", this.workGroupSize = [256, 1, 1], this.workPerThread = 1) : (x.arraysEqual(t10, o) && x.sizeFromShape(t10) % 4 === 0 ? (this.isVec4 = true, this.type = "vec4", this.workPerThread = 4) : (this.isVec4 = false, this.type = "plain", this.workPerThread = 1), this.shaderKey = `binary_${this.type}_${e}`, this.workGroupSize = [128, 1, 1]), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]); + constructor(e, t6, o) { + this.size = true, this.variableNames = ["A", "B"], this.outputShape = S.assertAndGetBroadcastShape(t6, o), this.dispatchLayout = ue(this.outputShape), this.op = e, this.useSharedMemoryWithA = t6.length <= 1 && o.length > 1 && t6[0] < 128, this.useSharedMemoryWithB = o.length <= 1 && t6.length > 1 && o[0] < 128, this.useSharedMemoryWithA || this.useSharedMemoryWithB ? (this.isVec4 = false, this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : t6[0], this.shaderKey = `binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`, this.type = "shared", this.workgroupSize = [256, 1, 1], this.workPerThread = 1) : (y.arraysEqual(t6, o) && y.sizeFromShape(t6) % 4 === 0 ? (this.isVec4 = true, this.type = "vec4", this.workPerThread = 4) : (this.isVec4 = false, this.type = "plain", this.workPerThread = 1), this.shaderKey = `binary_${this.type}_${e}`, this.workgroupSize = [128, 1, 1]), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]); } getUserCode() { - let e, t10 = this.isVec4 ? "vec4" : "f32", o = ` - fn binaryOperation(a : ${t10}, b : ${t10}) -> ${t10} { - ${Nc(this.op, this.isVec4)} + let e, t6 = this.isVec4 ? "vec4" : "f32", o = ` + fn binaryOperation(a : ${t6}, b : ${t6}) -> ${t6} { + ${Ic(this.op, this.isVec4)} }; `; if (this.type === "shared") { @@ -27470,7 +27675,7 @@ var Hu = class { e = ` ${o} var sharedBuf : array; - ${ue("index")} { + ${se("index")} { // Fill in the shared memory buffer. let localIndex = i32(localId.x); if(localIndex < ${this.lastDimensionSize}) { @@ -27488,7 +27693,7 @@ var Hu = class { } else e = ` ${o} - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); let b = getBByOutputIndex(index); @@ -27499,28 +27704,28 @@ var Hu = class { return e; } }; -function Lt(r) { - let { inputs: e } = r, { x: t10 } = e; - return r.backend.incRef(t10.dataId), { dataId: t10.dataId, shape: t10.shape, dtype: t10.dtype }; +function Ft(r) { + let { inputs: e } = r, { x: t6 } = e; + return r.backend.incRef(t6.dataId), { dataId: t6.dataId, shape: t6.shape, dtype: t6.dtype }; } -var iM = { kernelName: uo, backendName: "webgpu", kernelFunc: Lt }; -function ls(r) { - let { inputs: e, backend: t10 } = r, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.tensorMap.get(s.dataId), i = Lt({ inputs: { x: o }, backend: t10 }), p = Lt({ inputs: { x: n }, backend: t10 }); +var V3 = { kernelName: mo, backendName: "webgpu", kernelFunc: Ft }; +function po(r) { + let { inputs: e, backend: t6 } = r, { real: o, imag: n } = e, s = t6.makeTensorInfo(o.shape, "complex64"), a = t6.tensorMap.get(s.dataId), i = Ft({ inputs: { x: o }, backend: t6 }), p = Ft({ inputs: { x: n }, backend: t6 }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var uM = { kernelName: aa, backendName: "webgpu", kernelFunc: ls }; -var Zo = class { - constructor(e, t10) { +var z3 = { kernelName: ei, backendName: "webgpu", kernelFunc: po }; +var Ro = class { + constructor(e, t6) { this.variableNames = ["A"], this.size = true; let o = 128; - this.workGroupSize = [o, 1, 1], this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.op = t10, this.shaderKey = `unary_${t10}`; + this.workgroupSize = [o, 1, 1], this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.op = t6, this.shaderKey = `unary_${t6}`; } getUserCode() { return ` fn unaryOperation(a : f32) -> f32 { - ${za(this.op, false)} + ${Ha(this.op, false)} } - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); setOutputAtIndex(index, unaryOperation(a)); @@ -27529,1100 +27734,279 @@ var Zo = class { `; } }; -function Ge({ opType: r, cpuKernelImpl: e, dtype: t10 }) { +function Se({ opType: r, cpuKernelImpl: e, dtype: t6 }) { return ({ inputs: o, backend: n }) => { - let { x: s } = o, a = n, i = t10 || s.dtype; + let { x: s } = o, a = n, i = t6 || s.dtype; if (a.shouldExecuteOnCPU([s]) && e != null) { let u = a.tensorMap.get(s.dataId), c = e(u.values, i); return a.makeTensorInfo(s.shape, i, c); } - let p = new Zo(s.shape, r); + let p = new Ro(s.shape, r); return a.runWebGPUProgram(p, [s], i); }; } -function it({ opType: r, cpuKernelImpl: e, supportsComplex: t10 = false, dtype: o }) { +function ot({ opType: r, cpuKernelImpl: e, supportsComplex: t6 = false, dtype: o }) { return ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; - if (t10 && a.dtype === "complex64") { - let l = p.tensorMap.get(a.dataId), m = p.tensorMap.get(i.dataId), f, d; + if (t6 && a.dtype === "complex64") { + let l = p.tensorMap.get(a.dataId), m = p.tensorMap.get(i.dataId), d, f; if (r !== ye.MUL) - [f, d] = [[l.complexTensorInfos.real, m.complexTensorInfos.real], [l.complexTensorInfos.imag, m.complexTensorInfos.imag]].map((g) => { - let [y, b] = g, C = { dataId: y.dataId, dtype: y.dtype, shape: a.shape }, w = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Hu(r, a.shape, i.shape); - return p.runWebGPUProgram(k, [C, w], ct(y.dtype, b.dtype)); + [d, f] = [[l.complexTensorInfos.real, m.complexTensorInfos.real], [l.complexTensorInfos.imag, m.complexTensorInfos.imag]].map((g) => { + let [x, b] = g, C = { dataId: x.dataId, dtype: x.dtype, shape: a.shape }, w = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Hu(r, a.shape, i.shape); + return p.runWebGPUProgram(k, [C, w], dt(x.dtype, b.dtype)); }); else { - let g = new Xl(ye.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), y = new Xl(ye.COMPLEX_MULTIPLY_IMAG, a.shape, i.shape), b = [{ dataId: l.complexTensorInfos.real.dataId, dtype: l.complexTensorInfos.real.dtype, shape: a.shape }, { dataId: l.complexTensorInfos.imag.dataId, dtype: l.complexTensorInfos.imag.dtype, shape: a.shape }, { dataId: m.complexTensorInfos.real.dataId, dtype: m.complexTensorInfos.real.dtype, shape: i.shape }, { dataId: m.complexTensorInfos.imag.dataId, dtype: m.complexTensorInfos.imag.dtype, shape: i.shape }]; - f = p.runWebGPUProgram(g, b, "float32"), d = p.runWebGPUProgram(y, b, "float32"); + let g = new zl(ye.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), x = new zl(ye.COMPLEX_MULTIPLY_IMAG, a.shape, i.shape), b = [{ dataId: l.complexTensorInfos.real.dataId, dtype: l.complexTensorInfos.real.dtype, shape: a.shape }, { dataId: l.complexTensorInfos.imag.dataId, dtype: l.complexTensorInfos.imag.dtype, shape: a.shape }, { dataId: m.complexTensorInfos.real.dataId, dtype: m.complexTensorInfos.real.dtype, shape: i.shape }, { dataId: m.complexTensorInfos.imag.dataId, dtype: m.complexTensorInfos.imag.dtype, shape: i.shape }]; + d = p.runWebGPUProgram(g, b, "float32"), f = p.runWebGPUProgram(x, b, "float32"); } - let h = ls({ inputs: { real: f, imag: d }, backend: p }); - return p.disposeData(f.dataId), p.disposeData(d.dataId), h; + let h = po({ inputs: { real: d, imag: f }, backend: p }); + return p.disposeData(d.dataId), p.disposeData(f.dataId), h; } - let u = o || ct(a.dtype, i.dtype); + let u = o || dt(a.dtype, i.dtype); if ((a.dtype === "string" || i.dtype === "string" || p.shouldExecuteOnCPU([a, i])) && e != null) { - let l = p.tensorMap.get(a.dataId).values, m = p.tensorMap.get(i.dataId).values, f = a.dtype === "string" ? I.fromUint8ToStringArray(l) : l, d = a.dtype === "string" ? I.fromUint8ToStringArray(m) : m, [h, g] = e(a.shape, i.shape, f, d, u); + let l = p.tensorMap.get(a.dataId).values, m = p.tensorMap.get(i.dataId).values, d = a.dtype === "string" ? S.fromUint8ToStringArray(l) : l, f = a.dtype === "string" ? S.fromUint8ToStringArray(m) : m, [h, g] = e(a.shape, i.shape, d, f, u); return p.makeTensorInfo(g, u, h); } let c = new Hu(r, a.shape, i.shape); return p.runWebGPUProgram(c, [a, i], u); }; } -var FS = {}; -Be(FS, { addImpl: () => dS, bincountImpl: () => lM, bincountReduceImpl: () => mM, castImpl: () => fS, ceilImpl: () => hS, concatImpl: () => fM, equalImpl: () => gS, expImpl: () => xS, expm1Impl: () => yS, floorImpl: () => bS, gatherNdImpl: () => dM, gatherV2Impl: () => hM, greaterEqualImpl: () => IS, greaterImpl: () => CS, lessEqualImpl: () => SS, lessImpl: () => wS, linSpaceImpl: () => gM, logImpl: () => vS, maxImpl: () => xM, maximumImpl: () => kS, minimumImpl: () => TS, multiplyImpl: () => Ql, negImpl: () => yM, notEqualImpl: () => NS, prodImpl: () => bM, raggedGatherImpl: () => IM, raggedTensorToTensorImpl: () => vM, rangeImpl: () => kM, rsqrtImpl: () => ES, scatterImpl: () => TM, sigmoidImpl: () => NM, simpleAbsImpl: () => pM, sliceImpl: () => _M, sparseFillEmptyRowsImpl: () => EM, sparseReshapeImpl: () => $M, sparseSegmentReductionImpl: () => RM, sqrtImpl: () => AM, squaredDifferenceImpl: () => $S, stridedSliceImpl: () => FM, stringNGramsImpl: () => DM, stringSplitImpl: () => PM, stringToHashBucketFastImpl: () => OM, subImpl: () => AS, tileImpl: () => MM, topKImpl: () => BM, transposeImpl: () => _S, uniqueImpl: () => VM }); -function Xs(r, e) { - Array.isArray(r) || (r = [r]), r.forEach((t10) => { - t10 != null && x.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); - }); -} -function pM(r) { - let e = new Float32Array(r.length); - for (let t10 = 0; t10 < r.length; ++t10) - e[t10] = Math.abs(r[t10]); - return e; -} -function kt(r) { - return (e, t10, o, n, s) => { - let a = I.assertAndGetBroadcastShape(e, t10), i = a.length, p = x.computeStrides(a), u = x.sizeFromShape(a), c = x.getTypedArrayFromDType(s, u), l = e.length, m = t10.length, f = x.computeStrides(e), d = x.computeStrides(t10), h = I.getBroadcastDims(e, a), g = I.getBroadcastDims(t10, a); - if (h.length + g.length === 0) - for (let y = 0; y < c.length; ++y) - c[y] = r(o[y % o.length], n[y % n.length]); - else - for (let y = 0; y < c.length; ++y) { - let b = x.indexToLoc(y, i, p), C = b.slice(-l); - h.forEach((E) => C[E] = 0); - let w = x.locToIndex(C, l, f), k = b.slice(-m); - g.forEach((E) => k[E] = 0); - let _ = x.locToIndex(k, m, d); - c[y] = r(o[w], n[_]); - } - return [c, a]; - }; -} -function Ec(r) { - let { inputs: e, backend: t10 } = r, { real: o, imag: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = t10.makeTensorInfo(o.shape, "complex64"), p = t10.data.get(i.dataId); - return p.complexTensorInfos = { real: t10.makeTensorInfo(o.shape, "float32", s), imag: t10.makeTensorInfo(n.shape, "float32", a) }, i; -} -function Hg(r, e, t10 = "float32") { - if (t10 === "complex64") { - let n = Hg(r, e, "float32"), s = Hg(r, e, "float32"); - return Ec({ inputs: { real: n, imag: s }, backend: r }); - } - let o = x.makeZerosTypedArray(x.sizeFromShape(e), t10); - return r.makeTensorInfo(e, t10, o); -} -function mS(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; -} -function cM(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.real, s = t10.data.get(n.dataId).values; - return t10.makeTensorInfo(n.shape, n.dtype, s); -} -function fS(r, e, t10, o) { - if (o === "int32") { - let n = Int32Array.from(r); - return [e, "int32", n]; - } - if (o === "bool") { - let n = x.toTypedArray([0], t10), [s, a] = kt((i, p) => i !== p ? 1 : 0)(e, [], r, n, "bool"); - return [a, "bool", s]; - } - throw new Error(`Error in Cast: failed to cast ${t10} to ${o}`); -} -function Yl(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dtype: s } = o; - if (s === "complex64") { - if (n.dtype === "complex64") - return mS({ inputs: { x: n }, backend: t10 }); - let c = Hg(t10, n.shape, n.dtype), l = Yl({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = Ec({ inputs: { real: l, imag: c }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), m; - } - if (n.dtype === "complex64") { - let c = cM({ inputs: { input: n }, backend: t10 }), l = Yl({ inputs: { x: c }, backend: t10, attrs: { dtype: s } }); - return t10.disposeIntermediateTensorInfo(c), l; - } - if (!x.hasEncodingLoss(n.dtype, s)) { - let c = mS({ inputs: { x: n }, backend: t10 }); - return { dataId: c.dataId, shape: c.shape, dtype: s }; - } - let a = t10.data.get(n.dataId).values, [i, p, u] = fS(a, n.shape, n.dtype, s); - return t10.makeTensorInfo(i, p, u); -} -function Dt(r, e, t10, o) { - return t10 == null ? ({ inputs: n, backend: s }) => { - let { a, b: i } = n, p = s; - Xs([a, i], r); - let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = a.dtype === "string" ? I.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? I.fromUint8ToStringArray(c) : c, f = o || a.dtype, [d, h] = e(a.shape, i.shape, l, m, f); - return p.makeTensorInfo(h, f, d); - } : ({ inputs: n, backend: s }) => { - let { a, b: i } = n, p = s; - if (a.dtype === "complex64" || i.dtype === "complex64") { - let u = Yl({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), c = p.data.get(u.dataId), l = c.complexTensorInfos.real, m = c.complexTensorInfos.imag, f = p.data.get(l.dataId).values, d = p.data.get(m.dataId).values, h = Yl({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), y = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, C = p.data.get(y.dataId).values, w = p.data.get(b.dataId).values, [k, _, E] = t10(a.shape, i.shape, f, d, C, w), R = p.makeTensorInfo(E, "float32", k), A = p.makeTensorInfo(E, "float32", _), D = Ec({ inputs: { real: R, imag: A }, backend: p }); - return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(R), p.disposeIntermediateTensorInfo(A), D; - } else { - let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = o || a.dtype, [m, f] = e(a.shape, i.shape, u, c, l); - return p.makeTensorInfo(f, l, m); - } - }; -} -function $c(r) { - return (e, t10, o, n, s, a) => { - let i = I.assertAndGetBroadcastShape(e, t10), p = x.sizeFromShape(i), u = i.length, c = x.computeStrides(i), l = x.getTypedArrayFromDType("float32", p), m = x.getTypedArrayFromDType("float32", p), f = I.getBroadcastDims(e, i), d = I.getBroadcastDims(t10, i), h = I.mergeRealAndImagArrays(o, n), g = I.mergeRealAndImagArrays(s, a), y = e.length, b = x.computeStrides(e), C = t10.length, w = x.computeStrides(t10); - if (f.length + d.length === 0) - for (let k = 0; k < l.length; k++) { - let _ = k % h.length, E = k % g.length, R = r(h[_ * 2], h[_ * 2 + 1], g[E * 2], g[E * 2 + 1]); - l[k] = R.real, m[k] = R.imag; - } - else - for (let k = 0; k < l.length; k++) { - let _ = x.indexToLoc(k, u, c), E = _.slice(-y); - f.forEach((M) => E[M] = 0); - let R = x.locToIndex(E, y, b), A = _.slice(-C); - d.forEach((M) => A[M] = 0); - let D = x.locToIndex(A, C, w), O = r(h[R * 2], h[R * 2 + 1], g[D * 2], g[D * 2 + 1]); - l[k] = O.real, m[k] = O.imag; - } - return [l, m, i]; - }; -} -var dS = kt((r, e) => r + e); -var $re = $c((r, e, t10, o) => ({ real: r + t10, imag: e + o })); -var LTt = Dt(_r, dS, $re); -function lM(r, e, t10, o, n) { - let s = x.sizeFromShape(o), a = x.makeZerosTypedArray(n, t10); - for (let i = 0; i < r.length; i++) { - let p = r[i]; - if (p < 0) - throw new Error("Input x must be non-negative!"); - p >= n || (s > 0 ? a[p] += e[i] : a[p] += 1); - } - return a; -} -function mM(r, e, t10, o = false) { - let n = r.shape[0], s = r.shape[1], a = ne([n, t10], e.dtype); - for (let i = 0; i < n; i++) - for (let p = 0; p < s; p++) { - let u = r.get(i, p); - if (u < 0) - throw new Error("Input x must be non-negative!"); - u >= t10 || (o ? a.set(1, i, u) : e.size > 0 ? a.set(a.get(i, u) + e.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); - } - return a; -} -function Tr(r) { - return (e, t10, o) => { - let n = x.getTypedArrayFromDType(t10, e.length); - for (let s = 0; s < e.length; ++s) - n[s] = r(e[s], o); - return n; - }; -} -function qg(r, e, t10) { - return ({ inputs: o, attrs: n, backend: s }) => { - let { x: a } = o; - if (Xs(a, r), a.dtype === "string" || t10 === "string") - throw new Error("unaryKernelFunc does not support string input/output"); - let i = s, p = i.data.get(a.dataId).values, u = x.sizeFromShape(a.shape), c = t10 || a.dtype, l = x.getArrayFromDType(c, u); - for (let m = 0; m < u; ++m) - l[m] = e(p[m], n); - return i.makeTensorInfo(a.shape, c, l); - }; -} -function Jo(r, e, t10) { - return ({ inputs: o, attrs: n, backend: s }) => { - let { x: a } = o; - if (Xs(a, r), a.dtype === "string" || t10 === "string") - throw new Error("unaryKernelFunc does not support string input/output"); - let i = s, p = i.data.get(a.dataId).values, u = t10 || a.dtype, c = e(p, u, n); - return i.makeTensorInfo(a.shape, u, c); - }; -} -var hS = Tr((r) => Math.ceil(r)); -var YTt = Jo(ro, hS); -function fM(r, e, t10, o) { - let n = x.getArrayFromDType(t10, x.sizeFromShape(e)); - if (o && t10 !== "string") { - let s = 0; - r.forEach((a) => { - let i = x.sizeFromShape(a.shape); - n.set(a.vals, s), s += i; - }); - } else { - let s = 0; - r.forEach((a) => { - let i = t10 === "string" ? I.fromUint8ToStringArray(a.vals) : a.vals, p = 0; - for (let u = 0; u < a.shape[0]; ++u) { - let c = u * e[1] + s; - for (let l = 0; l < a.shape[1]; ++l) - n[c + l] = i[p++]; - } - s += a.shape[1]; - }); - } - return n; -} -var gS = kt((r, e) => r === e ? 1 : 0); -var oNt = Dt(oo, gS, null, "bool"); -var xS = Tr((r) => Math.exp(r)); -var uNt = Jo(no, xS, "float32"); -var yS = Tr((r) => Math.expm1(r)); -var fNt = Jo(wn, yS); -var bS = Tr((r) => Math.floor(r)); -var yNt = Jo(so, bS); -function dM(r, e, t10, o, n, s, a, i, p) { - let u = ne([o, s], t10); - for (let c = 0; c < o; c++) { - let l = [], m = 0; - for (let f = 0; f < n; f++) { - let d = r[c * n + f]; - m += d * a[f], l.push(d); - } - if (m < 0 || m >= p / s) - throw new Error(`Invalid indices: ${l} does not index into ${i}`); - for (let f = 0; f < s; f++) - u.values[c * s + f] = e.get(...e.indexToLoc(m * s + f)); - } - return u; -} -function hM(r, e, t10) { - let o = ne(t10, r.dtype); - for (let n = 0; n < o.size; ++n) { - let a = o.indexToLoc(n).slice(), i = a[0], p = a[2], u = e.locToIndex([i, p]); - a[2] = e.values[u]; - let c = r.locToIndex(a); - 0 <= c && c < r.values.length && (o.values[n] = r.values[c]); - } - return o; -} -var CS = kt((r, e) => r > e ? 1 : 0); -var NNt = Dt(ao, CS, null, "bool"); -var IS = kt((r, e) => r >= e ? 1 : 0); -var ANt = Dt(io, IS, null, "bool"); -var wS = kt((r, e) => r < e ? 1 : 0); -var MNt = Dt(po, wS, null, "bool"); -var SS = kt((r, e) => r <= e ? 1 : 0); -var WNt = Dt(co, SS, null, "bool"); -function gM(r, e, t10) { - let o = (e - r) / (t10 - 1), n = x.makeZerosTypedArray(t10, "float32"); - n[0] = r; - for (let s = 1; s < n.length; s++) - n[s] = n[s - 1] + o; - return n; -} -var vS = Tr((r) => Math.log(r)); -var XNt = Jo(lo, vS); -function xM(r, e, t10, o) { - let n = x.getTypedArrayFromDType(o, x.sizeFromShape(t10)); - for (let s = 0; s < n.length; ++s) { - let a = s * e, i = r[a]; - for (let p = 0; p < e; ++p) { - let u = r[a + p]; - (Number.isNaN(u) || u > i) && (i = u); - } - n[s] = i; - } - return n; -} -var kS = kt((r, e) => Math.max(r, e)); -var r2t = Dt(mo, kS); -var TS = kt((r, e) => Math.min(r, e)); -var i2t = Dt(fo, TS); -var Ql = kt((r, e) => r * e); -var Rre = $c((r, e, t10, o) => ({ real: r * t10 - e * o, imag: r * o + e * t10 })); -var m2t = Dt(ho, Ql, Rre); -function yM(r, e, t10) { - let o = x.createScalarValue(-1, t10); - return Ql([], e, o, r, t10); -} -var NS = kt((r, e) => r !== e ? 1 : 0); -var I2t = Dt(go, NS, null, "bool"); -function _S(r, e, t10, o, n) { - let s = e.length, a = x.sizeFromShape(e), i = x.computeStrides(e), p = x.computeStrides(n), u = x.getTypedArrayFromDType(t10, x.sizeFromShape(n)); - for (let c = 0; c < a; ++c) { - let l = x.indexToLoc(c, s, i), m = new Array(l.length); - for (let d = 0; d < m.length; d++) - m[d] = l[o[d]]; - let f = x.locToIndex(m, s, p); - u[f] = r[c]; - } - return u; -} -function bM(r, e, t10, o) { - let [n, s] = I.computeOutAndReduceShapes(r, o), a = ct(e, "int32"), i = x.makeZerosTypedArray(x.sizeFromShape(n), a), p = x.sizeFromShape(s); - for (let u = 0; u < i.length; ++u) { - let c = u * p, l = 1; - for (let m = 0; m < p; ++m) - l *= t10[c + m]; - i[u] = l; - } - return { outVals: i, outShape: n, outDtype: a }; -} -function Are(r, e, t10) { - r.forEach((o, n) => { - if (o < 0 || o >= t10) { - let s = x.indexToLoc(n, e.length, x.computeStrides(e)).join(","); - throw new Error(`indices[${s}] = ${o} is not in [0, ${t10})`); - } - }); -} -function Fre(r, e) { - for (let t10 = 0; t10 < r.length; ++t10) { - let o = r[t10], n = t10 === r.length - 1 ? e : r[t10 + 1].length; - if (o.length === 0) - throw new Error("Ragged splits may not be empty"); - if (o[0] < 0) - throw new Error("Ragged splits must be non-negative"); - if (o[o.length - 1] > n) - throw new Error("Ragged splits must not point past values"); - for (let s = 1; s < o.length; ++s) - if (o[s - 1] > o[s]) - throw new Error("Ragged splits must be sorted in ascending order"); - } -} -function Dre(r, e, t10, o) { - let n = [], s = 0, a = e.length - 1 + t10.length, i = new Array(a).fill(null).map(() => [0]); - Fre(t10, o); - let p = 1; - for (let u = 0; u < e.length - 1; ++u) { - p *= e[u]; - let c = e[u + 1]; - for (let l = 1; l < p + 1; ++l) - i[u].push(l * c); - } - for (let u = 0; u < r.length; ++u) { - let c = r[u], l = r[u] + 1; - for (let m = 0; m < t10.length; ++m) { - let f = t10[m], d = m + e.length - 1; - if (d >= 0) { - let h = i[d], g = h[h.length - 1] - f[c]; - for (let y = c; y < l; ++y) - i[d].push(f[y + 1] + g); - } - c = f[c], l = f[l]; - } - l !== c && (n.push([c, l]), s += l - c); - } - return { outSplits: i, valueSlices: n, numValues: s }; -} -function Pre(r) { - let e = []; - for (let t10 = 0; t10 < r.length; ++t10) { - let o = r[t10].length, n = x.getArrayFromDType("int32", o); - e.push(n), r[t10].forEach((s, a) => n[a] = s); - } - return e; -} -function CM(r, e) { - let t10 = r.slice(0, e); - for (; t10.length < e; ) - t10.push(1); - for (let o = e; o < r.length; o++) - t10[e - 1] *= r[o]; - return t10; -} -function Ore(r, e, t10, o, n, s) { - let a = CM(e, 2)[1], i = CM(s, 2)[1], p = 0; - for (let u of t10) - for (let c = u[0]; c < u[1]; ++c) { - for (let l = 0; l < o; ++l) - n[p * i + l] = r[c * a + l]; - ++p; - } -} -function Mre(r, e, t10, o, n) { - let s = e.slice(); - s[0] = n; - let a = x.getArrayFromDType(t10, x.sizeFromShape(s)), i = r.length, p = i === 0 ? 0 : i / e[0]; - return Ore(r, e, o, p, a, s), [a, s]; -} -function IM(r, e, t10, o, n, s, a, i) { - if (r.length === 0) - throw new Error("paramsNestedSplits must be non empty"); - if (e[0].length === 0) - throw new Error("Split tensors must not be scalars"); - let p = e[0][0] - 1; - if (Are(s, a, p), o.length === 0) - throw new Error("params.rank must be nonzero"); - let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = Dre(s, a, r, u), f = Pre(c), d = Mre(t10, o, n, l, m); - return [f, d[0], d[1]]; -} -var en = I.RowPartitionType; -var Rc = class { - constructor(e, t10, o, n, s, a, i, p, u, c) { - this.shape = e, this.shapeShape = t10, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = I.getRowPartitionTypesHelper(c), this.raggedRank = I.getRaggedRank(this.rowPartitionTypes); - } - getRowPartitionTypeByDimension(e) { - return this.rowPartitionTypes[0] === en.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; - } - getRowPartitionTensor(e) { - return this.rowPartitionTypes[0] === en.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; - } - getMaxWidth(e) { - let t10 = this.getRowPartitionTensor(e - 1); - switch (this.getRowPartitionTypeByDimension(e - 1)) { - case en.VALUE_ROWIDS: - return Rc.getMaxWidthValueRowID(t10); - case en.ROW_SPLITS: - return Rc.getMaxWidthRowSplit(t10); - default: - throw new Error(`Cannot handle partition type ${en[this.getRowPartitionTypeByDimension(e - 1)]}`); - } - } - static getMaxWidthRowSplit(e) { - let t10 = e.length; - if (t10 === 0 || t10 === 1) - return 0; - let o = 0; - for (let n = 0; n < t10 - 1; ++n) { - let s = e[n + 1] - e[n]; - s > o && (o = s); - } - return o; - } - static getMaxWidthValueRowID(e) { - let t10 = e.length; - if (t10 === 0) - return 0; - let o = 0, n = e[0], s = 0; - for (let a = 1; a < t10; ++a) { - let i = e[a]; - i !== n && (n = i, s = Math.max(a - o, s), o = a); - } - return Math.max(t10 - o, s); - } - tensorShapeFromTensor(e, t10, o = true) { - if (t10.length === 0) { - if (e[0] === -1) - return []; - throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); - } - return SM(e, o); - } - calculateOutputSize(e) { - let t10 = this.valuesShape, o = this.defaultValueShape; - I.validateDefaultValueShape(o, t10); - let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = I.combineRaggedTensorToTensorShapes(this.raggedRank, n, t10); - a[0] < 0 && (a[0] = e); - for (let i = 1; i <= this.raggedRank; ++i) - a[i] < 0 && (a[i] = this.getMaxWidth(i)); - return a; - } - calculateFirstParentOutputIndex(e, t10, o) { - let n = Math.min(e, o), s = [], a = 0; - for (let i = 0; i < n; ++i, a += t10) - s.push(a); - for (let i = n; i < e; ++i) - s.push(-1); - return x.assert(s.length === e, () => "Final length of result must be equal to firstDimension."), s; - } - calculateOutputIndexRowSplit(e, t10, o, n) { - let s = e.length, a = []; - for (let i = 0; i < s - 1; ++i) { - let p = e[i + 1] - e[i], u = Math.min(n, p), c = t10[i]; - c === -1 && (u = 0); - for (let l = 0; l < u; ++l) - a.push(c), c += o; - for (let l = 0; l < p - u; ++l) - a.push(-1); - } - if (s > 0 && a.length !== e[s - 1]) - throw new Error("Invalid row split size."); - return a; - } - calculateOutputIndexValueRowID(e, t10, o, n) { - let s = e.length, a = []; - if (s === 0) - return []; - let i = 0, p = e[0]; - if (p >= t10.length) - throw new Error(`Got currentValueRowId=${p}, which is not less than ${t10.length}`); - let u = t10[p]; - a.push(u); - for (let c = 1; c < s; ++c) { - let l = e[c]; - if (l === p) - u >= 0 && (++i, i < n ? u += o : u = -1); - else { - if (i = 0, p = l, l >= t10.length) - throw new Error(`Got nextValueRowId=${l} which is not less than ${t10.length}`); - u = t10[l]; - } - a.push(u); - } - if (a.length !== e.length) - throw new Error("Invalid row ids."); - return a; - } - calculateOutputIndex(e, t10, o, n) { - let s = this.getRowPartitionTensor(e), a = this.getRowPartitionTypeByDimension(e); - switch (a) { - case en.VALUE_ROWIDS: - return this.calculateOutputIndexValueRowID(s, t10, o, n); - case en.ROW_SPLITS: - if (s.length - 1 > t10.length) - throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t10.length}`); - return this.calculateOutputIndexRowSplit(s, t10, o, n); - default: - throw new Error(`Unsupported partition type: ${en[a]}`); - } - } - getFirstDimensionSize() { - let e = this.rowPartitionValues[0]; - if (this.rowPartitionTypes.length === 0) - throw new Error("No row_partition_types given."); - let t10 = this.rowPartitionTypes[0]; - switch (t10) { - case en.FIRST_DIM_SIZE: - return e[0]; - case en.VALUE_ROWIDS: - throw new Error("Cannot handle VALUE_ROWIDS in first dimension."); - case en.ROW_SPLITS: - return this.rowPartitionValuesShapes[0][0] - 1; - default: - throw new Error(`Cannot handle type ${en[t10]}`); - } - } - compute() { - if (this.rowPartitionValues[0].length <= 0) - throw new Error("Invalid first partition input. Tensor requires at least one element."); - let t10 = this.getFirstDimensionSize(), o = this.calculateOutputSize(t10), n = new Array(this.raggedRank + 1); - n[n.length - 1] = 1; - for (let p = n.length - 2; p >= 0; --p) - n[p] = n[p + 1] * o[p + 1]; - let s = SM(o, false), a = x.getArrayFromDType(this.valuesDType, x.sizeFromShape(s)); - if (n[0] * o[0] > 0) { - let p = this.calculateFirstParentOutputIndex(t10, n[0], o[0]); - for (let u = 1; u <= this.raggedRank; ++u) - p = this.calculateOutputIndex(u - 1, p, n[u], o[u]); - this.setOutput(this.raggedRank, p, a, s); - } - return [s, a]; - } - setOutput(e, t10, o, n) { - if (o.length === 0) - return; - let s = this.values, a = o, i = n.slice(); - i = i.slice(e + 1); - let p = x.sizeFromShape(i), u = t10.length, c = this.defaultValue; - if (c.length !== p && c.length !== 1) { - let d = this.defaultValueShape; - Ne(() => { - let h = z(c, d); - c = Ls(h, i).dataSync(); - }); - } - let l = 0, m = 0, f = 0; - for (let d = 0; d <= u; ++d) { - let h = d < u ? t10[d] : -1; - if (h === f) { - ++f; - continue; - } - if (m < f) { - let g = s.subarray(l * p), y = a.subarray(m * p), b = (f - m) * p; - wM(y, g, b); - } - if (d >= u) { - let g = o.length; - h = Math.floor(g / p); - } - if (h > f) - if (this.defaultValue.length === 1) - a.subarray(f * p, h * p).fill(this.defaultValue[0]), f = h; - else - for (; h > f; ) { - let g = a.slice(f * p); - wM(g, c, p), ++f; - } - h < 0 ? (l = d + 1, m = f) : (l = d, m = f, f = m + 1); - } - } -}; -function wM(r, e, t10) { - for (let o = 0; o < t10; o++) - r[o] = e[o]; -} -function SM(r, e) { - let t10 = []; - for (let o of r) { - if (o < 0) { - if (!e) - throw new Error(`Dimension ${o} must be >= 0`); - if (o < -1) - throw new Error(`Dimension ${o} must be >= -1`); - o = -1; - } - t10.push(o); - } - return t10; -} -function vM(r, e, t10, o, n, s, a, i, p, u) { - return new Rc(r, e, t10, o, n, s, a, i, p, u).compute(); -} -function kM(r, e, t10, o) { - let n = r === e, s = r < e && t10 < 0, a = e < r && t10 > 1; - if (n || s || a) - return x.makeZerosTypedArray(0, o); - let i = Math.abs(Math.ceil((e - r) / t10)), p = x.makeZerosTypedArray(i, o); - e < r && t10 === 1 && (t10 = -1), p[0] = r; - for (let u = 1; u < p.length; u++) - p[u] = p[u - 1] + t10; - return p; -} -var ES = Tr((r) => 1 / Math.sqrt(r)); -var U2t = Jo(xo, ES); -function TM(r, e, t10, o, n, s, a, i, p, u) { - let c = [o / n, n], l = r.values, m = e.values; - if (o === 0) - return ne(t10, e.dtype); - let f = ne(c, e.dtype); - typeof p == "string" || typeof p == "number" ? f.values.fill(p) : typeof p == "boolean" && f.values.fill(+p); - for (let d = 0; d < s; d++) { - let h = [], g = 0; - for (let y = 0; y < a; y++) { - let b = l[d * a + y]; - h.push(b), g += b * i[y]; - } - if (g < 0 || g >= o / n) - throw new Error(`Invalid indices: ${h} does not index into ${t10}`); - for (let y = 0; y < n; y++) - u ? f.values[g * n + y] += m[d * n + y] : f.values[g * n + y] = e.rank === 0 ? m[0] : m[d * n + y]; - } - return f; -} -var NM = Tr((r) => 1 / (1 + Math.exp(-r))); -var Y2t = qg(yo, (r) => 1 / (1 + Math.exp(-r))); -function _M(r, e, t10, o, n) { - let s = et.isSliceContinous(o, e, t10), a = x.sizeFromShape(t10), i = x.computeStrides(o); - if (s) { - let l = et.computeFlatOffset(e, i); - return n === "string" ? r.slice(l, l + a) : r.subarray(l, l + a); - } - let p = n === "string" ? I.fromUint8ToStringArray(r) : r, u = ne(o, n, p), c = ne(t10, n); - for (let l = 0; l < c.size; ++l) { - let m = c.indexToLoc(l), f = m.map((d, h) => d + e[h]); - c.set(u.get(...f), ...m); - } - return n === "string" ? I.fromStringArrayToUint8(c.values) : c.values; -} -function EM(r, e, t10, o, n, s, a) { - let i = e[0], p = s[0], u = new Array(p), c = new Array(i), l = e[1]; - if (p === 0) { - if (i !== 0) - throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); - let g = x.getArrayFromDType(t10, 0), y = x.getArrayFromDType(n, 0); - return [g, [0, l], y, u, c]; - } - let m = true, f = 0, d = new Array(p).fill(0); - for (let g = 0; g < i; ++g) { - let y = r[g * l]; - if (y < 0) - throw new Error(I.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, y)); - if (y >= p) - throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, y, p)); - ++d[y], m = m && y >= f, f = y; - } - let h = true; - for (let g = 0; g < p; ++g) { - let y = d[g] === 0; - u[g] = y, h = h && !y, d[g] = Math.max(d[g], 1), g > 0 && (d[g] += d[g - 1]); - } - if (h && m) { - let g = r, y = o; - for (let b = 0; b < i; ++b) - c[b] = b; - return [g, [i, l], y, u, c]; - } else { - let g = d[p - 1], y = x.getArrayFromDType(t10, g * l), b = x.getArrayFromDType(n, g), C = new Array(p).fill(0); - for (let w = 0; w < i; ++w) { - let k = r[w * l], _ = C[k], E = (k === 0 ? 0 : d[k - 1]) + _; - C[k]++; - for (let R = 0; R < l; ++R) - y[E * l + R] = r[w * l + R]; - b[E] = o[w], c[w] = E; - } - for (let w = 0; w < p; ++w) - if (C[w] === 0) { - let _ = w === 0 ? 0 : d[w - 1]; - y[_ * l + 0] = w; - for (let E = 1; E < l; ++E) - y[_ * l + E] = 0; - b[_] = a; - } - return [y, [g, l], b, u, c]; - } -} -function $M(r, e, t10, o, n) { - let s = x.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, c = -1; - for (let g = 0; g < i; ++g) { - let y = n[g]; - if (y === -1) { - if (c !== -1) - throw new Error(I.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); - c = g, p.push(1); - } else { - if (y < 0) - throw new Error(I.getSparseReshapeNegativeOutputDimErrorMessage(g, y)); - u *= y, p.push(y); - } - } - if (c !== -1) { - if (u <= 0) - throw new Error(I.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); - let g = Math.trunc(s / u); - if (u * g !== s) - throw new Error(I.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); - p[c] = g; - } - if (x.sizeFromShape(p) !== s) - throw new Error(I.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); - let m = o.length, f = []; - if (m > 0) { - f[m - 1] = 1; - for (let g = m - 2; g >= 0; --g) - f[g] = f[g + 1] * o[g + 1]; - } - let d = []; - if (i > 0) { - d[i - 1] = 1; - for (let g = i - 2; g >= 0; --g) - d[g] = d[g + 1] * p[g + 1]; - } - let h = x.getArrayFromDType(t10, a * i); - for (let g = 0; g < a; ++g) { - let y = 0; - for (let b = 0; b < m; ++b) - y += r[g * m + b] * f[b]; - for (let b = 0; b < i; ++b) - h[g * i + b] = Math.trunc(y / d[b]), y %= d[b]; - } - return [h, [a, i], p]; -} -function RM(r, e, t10, o, n, s = false, a = 0) { - let i = o.length, p = [e[0], r.length / e[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; - if (l < 0) - throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let m = e.slice(); - m[0] = l; - let f = m.reduce((C, w) => C * w, 1), d = x.getArrayFromDType(t10, f); - if (i === 0) - return l > 0 && d.fill(a), [d, m]; - if (l <= 0) - throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let h = 0, g = 1, y = 0, b = n[h]; - for (; ; ) { - let C = 0; - if (g < i) { - if (C = n[g], b === C) { - ++g; - continue; - } - if (b >= C) - throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); - } - if (b < 0 || b >= l) - throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); - b > y && d.fill(a, y * u, b * u); - for (let w = h; w < g; ++w) { - let k = o[w]; - if (k < 0 || k >= p[0]) - throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w, o[w], p[0])); - for (let _ = 0; _ < u; _++) - d[b * u + _] += r[k * u + _]; - } - if (s) - for (let w = 0; w < u; w++) - d[b * u + w] /= g - h; - if (h = g, ++g, y = b + 1, b = C, g > i) - break; - } - return y < l && d.fill(a, y * u, l * u), [d, m]; -} -var AM = Tr((r) => Math.sqrt(r)); -var c_t = qg(bo, (r) => Math.sqrt(r)); -var $S = kt((r, e) => { - let t10 = r - e; - return t10 * t10; -}); -var h_t = Dt(Co, $S); -function FM(r, e, t10, o) { - let n = ne(r, e.dtype); - for (let s = 0; s < n.size; s++) { - let a = n.indexToLoc(s), i = new Array(a.length); - for (let p = 0; p < i.length; p++) - i[p] = a[p] * t10[p] + o[p]; - n.set(e.get(...i), ...a); - } - return n; -} -var RS = class { - constructor(e, t10, o, n, s, a) { - this.separator = x.encodeString(e), this.nGramWidths = t10, this.leftPad = x.encodeString(o), this.rightPad = x.encodeString(n), this.padWidth = s, this.preserveShort = a; - } - getPadWidth(e) { - return Math.min(this.padWidth < 0 ? e - 1 : this.padWidth, e - 1); - } - getNumNGrams(e, t10) { - let o = this.getPadWidth(t10); - return Math.max(0, e + 2 * o - t10 + 1); - } - createNGrams(e, t10, o, n, s, a) { - for (let i = 0; i < s; ++i) { - let p = this.getPadWidth(a), u = Math.max(0, p - i), c = Math.max(0, p - (s - (i + 1))), l = a - (u + c), m = t10 + (u > 0 ? 0 : i - p), f = 0; - f += u * this.leftPad.length; - for (let b = 0; b < l; ++b) - f += e[m + b].length; - f += c * this.rightPad.length; - let d = u + c + l - 1; - f += d * this.separator.length, o[n + i] = new Uint8Array(f); - let h = o[n + i], g = 0, y = (b) => b.forEach((C) => h[g++] = C); - for (let b = 0; b < u; ++b) - y(this.leftPad), y(this.separator); - for (let b = 0; b < l - 1; ++b) - y(e[m + b]), y(this.separator); - if (l > 0) { - y(e[m + l - 1]); - for (let b = 0; b < c; ++b) - y(this.separator), y(this.rightPad); - } else { - for (let b = 0; b < c - 1; ++b) - y(this.rightPad), y(this.separator); - y(this.rightPad); - } - } - } - compute(e, t10) { - let o = e.length, n = t10.length; - if (n > 0) { - let p = t10[0]; - if (p !== 0) - throw new Error(`First split value must be 0, got ${p}`); - for (let u = 1; u < n; ++u) { - let c = t10[u] >= p; - if (c = c && t10[u] <= o, !c) - throw new Error(`Invalid split value ${t10[u]}, must be in [${p}, ${o}]`); - p = t10[u]; - } - if (p !== o) - throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`); - } - let s = n - 1, a = x.getArrayFromDType("int32", n); - if (o === 0 || n === 0) { - let p = new Array(o); - for (let u = 0; u <= s; ++u) - a[u] = 0; - return [p, a]; - } - a[0] = 0; - for (let p = 1; p <= s; ++p) { - let u = t10[p] - t10[p - 1], c = 0; - this.nGramWidths.forEach((l) => { - c += this.getNumNGrams(u, l); - }), this.preserveShort && u > 0 && c === 0 && (c = 1), a[p] = a[p - 1] + c; - } - let i = new Array(a[s]); - for (let p = 0; p < s; ++p) { - let u = t10[p], c = a[p]; - if (this.nGramWidths.forEach((l) => { - let m = t10[p + 1] - t10[p], f = this.getNumNGrams(m, l); - this.createNGrams(e, u, i, c, f, l), c += f; - }), this.preserveShort && c === a[p]) { - let l = t10[p + 1] - t10[p]; - if (l === 0) - continue; - let m = l + 2 * this.padWidth, f = 1; - this.createNGrams(e, u, i, c, f, m); - } - } - return [i, a]; - } -}; -function DM(r, e, t10, o, n, s, a, i) { - return new RS(t10, o, n, s, a, i).compute(r, e); -} -function Lre(r, e, t10, o) { - if (!r.length) - return; - if (e.length === 0) { - for (let s = 0; s < r.length; ++s) - o.push(r.subarray(s, s + 1)); - return; - } - if (e.length === 1) { - let s = e[0], a = r.indexOf(s); - for (; a !== -1; ) { - let i = r.subarray(0, a); - (!t10 || i.length !== 0) && o.push(i), r = r.subarray(a + 1), a = r.indexOf(s); - } - (!t10 || r.length !== 0) && o.push(r); - return; - } - let n = 0; - for (let s = 0; s < r.length + 1; s++) - if (s === r.length || e.indexOf(r[s]) !== -1) { - let a = r.subarray(n, s); - (!t10 || a.length !== 0) && o.push(a), n = s + 1; - } -} -function PM(r, e, t10) { - let o = r.length, n = [], s = 0, a = 0, i = new Array(o); - for (let m = 0; m < o; ++m) { - let f = n.length; - Lre(r[m], e, t10, n); - let d = n.length - f; - i[m] = d, s += d, a = Math.max(a, d); - } - let p = x.getArrayFromDType("int32", s * 2), u = new Array(s), c = [o, a], l = 0; - for (let m = 0; m < o; ++m) - for (let f = 0; f < i[m]; ++f) - p[l * 2] = m, p[l * 2 + 1] = f, u[l] = n[l], ++l; - return [p, u, c]; -} -function OM(r, e) { - let t10 = x.getArrayFromDType("int32", r.length); - for (let o = 0; o < r.length; ++o) - t10[o] = x.fingerPrint64(r[o]).modulo(e).getLowBitsUnsigned(); - return t10; -} -var AS = kt((r, e) => r - e); -var Bre = $c((r, e, t10, o) => ({ real: r - t10, imag: e - o })); -var __t = Dt(Io, AS, Bre); -function MM(r, e) { - let t10 = new Array(r.rank); - for (let n = 0; n < t10.length; n++) - t10[n] = r.shape[n] * e[n]; - let o = ne(t10, r.dtype); - for (let n = 0; n < o.values.length; ++n) { - let s = o.indexToLoc(n), a = new Array(r.rank); - for (let p = 0; p < a.length; p++) - a[p] = s[p] % r.shape[p]; - let i = r.locToIndex(a); - o.values[n] = r.values[i]; - } - return o; -} -var Zl = (r, e) => { - let t10 = e.value - r.value; - return t10 === 0 ? r.index - e.index : t10; -}; -function LM(r, e, t10 = 0, o = r.length - 1) { - for (; o > t10; ) { - if (o - t10 > 600) { - let i = o - t10 + 1, p = e - t10 + 1, u = Math.log(i), c = 0.5 * Math.exp(2 * u / 3), l = 0.5 * Math.sqrt(u * c * (i - c) / i) * Math.sign(p - i / 2), m = Math.max(t10, Math.floor(e - p * c / i + l)), f = Math.min(o, Math.floor(e + (i - p) * c / i + l)); - LM(r, e, m, f); - } - let n = r[e], s = t10, a = o; - for (x.swap(r, t10, e), Zl(r[o], n) > 0 && x.swap(r, t10, o); s < a; ) { - for (x.swap(r, s, a), s++, a--; Zl(r[s], n) < 0; ) - s = s + 1; - for (; Zl(r[a], n) > 0; ) - a = a - 1; - } - Zl(r[t10], n) === 0 ? x.swap(r, t10, a) : (a = a + 1, x.swap(r, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); - } -} -function BM(r, e, t10, o, n) { - let s = e[e.length - 1], [a, i] = [r.length / s, s], p = x.getTypedArrayFromDType(t10, a * o), u = x.getTypedArrayFromDType("int32", a * o); - for (let l = 0; l < a; l++) { - let m = l * i, f = r.subarray(m, m + i), d = new Array(f.length); - f.forEach((b, C) => d[C] = { value: b, index: C }), o < d.length && (LM(d, o), d = d.slice(0, o)), n && d.sort(Zl); - let h = l * o, g = p.subarray(h, h + o), y = u.subarray(h, h + o); - for (let b = 0; b < o; b++) - g[b] = d[b].value, y[b] = d[b].index; - } - let c = e.slice(); - return c[c.length - 1] = o, [ne(c, t10, p), ne(c, "int32", u)]; -} -function VM(r, e, t10, o) { - let n = x.parseAxisParam(e, t10)[0], s = [1, t10[0], 1]; - for (let d = 0; d < n; d++) - s[0] *= t10[d]; - s[1] = t10[n]; - for (let d = n + 1; d < t10.length; d++) - s[2] *= t10[d]; - let a = {}, i = new Int32Array(t10[n]), p = new je(s, o, r), u = [], c = s[0] === 1 && s[2] === 1; - for (let d = 0; d < t10[n]; d++) { - let h; - if (c) - h = r[d].toString(); - else { - let g = []; - for (let y = 0; y < s[0]; y++) - for (let b = 0; b < s[2]; b++) - g.push(p.get(y, d, b)); - h = g.join(","); - } - if (a[h] !== void 0) - i[d] = a[h]; - else { - let g = Object.keys(a).length; - a[h] = g, i[d] = g, u.push(d); - } - } - let l = s.slice(); - l[1] = Object.keys(a).length; - let m = new je(l, o); - u.forEach((d, h) => { - for (let g = 0; g < s[0]; g++) - for (let y = 0; y < s[2]; y++) - m.set(p.get(g, d, y), g, h, y); - }); - let f = t10.slice(); - return f[n] = l[1], { outputValues: m.values, outputShape: f, indices: i }; -} -var { addImpl: zM, castImpl: WM, ceilImpl: UM, concatImpl: GM, equalImpl: HM, expImpl: qM, expm1Impl: KM, floorImpl: jM, gatherNdImpl: XM, gatherV2Impl: YM, greaterEqualImpl: QM, greaterImpl: ZM, lessEqualImpl: JM, lessImpl: eL, logImpl: tL, maxImpl: rL, maximumImpl: oL, minimumImpl: nL, multiplyImpl: sL, negImpl: aL, notEqualImpl: iL, prodImpl: uL, rangeImpl: pL, rsqrtImpl: cL, scatterImpl: lL, simpleAbsImpl: mL, sliceImpl: fL, stridedSliceImpl: dL, stringNGramsImpl: hL, subImpl: gL, tileImpl: xL, topKImpl: yL, transposeImpl: bL, uniqueImpl: _Et } = FS; -var Vre = Ge({ opType: pe.ABS, cpuKernelImpl: mL }); -var CL = { kernelName: sn, backendName: "webgpu", kernelFunc: Vre }; -var zre = it({ opType: ye.ADD, cpuKernelImpl: zM, supportsComplex: true }); -var IL = { kernelName: _r, backendName: "webgpu", kernelFunc: zre }; -var Kg = class { +var { addImpl: W3, castImpl: U3, ceilImpl: G3, concatImpl: H3, equalImpl: q3, expImpl: K3, expm1Impl: j3, floorImpl: X3, gatherNdImpl: Y3, gatherV2Impl: Q3, greaterEqualImpl: Z3, greaterImpl: J3, lessEqualImpl: eM, lessImpl: tM, logImpl: rM, maxImpl: oM, maximumImpl: nM, minimumImpl: sM, multiplyImpl: aM, negImpl: iM, notEqualImpl: uM, prodImpl: pM, rangeImpl: cM, rsqrtImpl: lM, scatterImpl: mM, simpleAbsImpl: dM, sliceImpl: fM, stridedSliceImpl: hM, stringNGramsImpl: gM, subImpl: xM, tileImpl: yM, topKImpl: bM, transposeImpl: CM, uniqueImpl: kNt } = Qp; +var mre = Se({ opType: Q.ABS, cpuKernelImpl: dM }); +var SM = { kernelName: gs, backendName: "webgpu", kernelFunc: mre }; +var dre = Se({ opType: Q.ACOS }); +var wM = { kernelName: sa, backendName: "webgpu", kernelFunc: dre }; +var fre = Se({ opType: Q.ACOSH }); +var IM = { kernelName: aa, backendName: "webgpu", kernelFunc: fre }; +var hre = ot({ opType: ye.ADD, cpuKernelImpl: W3, supportsComplex: true }); +var vM = { kernelName: eo, backendName: "webgpu", kernelFunc: hre }; +var Dg = class { constructor(e) { - this.workPerThread = 1, this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e[0], this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "addN"; + this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e[0], this.variableNames = e.map((t6, o) => `T${o}`), this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "addN"; } getUserCode() { let e = []; this.variableNames.forEach((n) => { e.push(`let v${n} = get${n}ByOutputCoords(coords);`); }); - let t10 = this.variableNames.map((n) => `v${n}`).join(" + "); + let t6 = this.variableNames.map((n) => `v${n}`).join(" + "); return ` - ${ue("index")} { + ${se("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; if (flatIndex < uniforms.size) { let coords = getCoordsFromIndex(flatIndex); ${e.join(` `)} - setOutputAtIndex(flatIndex, ${t10}); + setOutputAtIndex(flatIndex, ${t6}); } } } `; } }; -function Wre(r) { - let { inputs: e, backend: t10 } = r, o = e; +function gre(r) { + let { inputs: e, backend: t6 } = r, o = e; if (o.length === 1) - return Lt({ inputs: { x: o[0] }, backend: t10 }); - let n = o.map((i) => i.dtype).reduce((i, p) => ct(i, p)), s = o.map((i) => i.shape), a = new Kg(s); - return t10.runWebGPUProgram(a, o, n); + return Ft({ inputs: { x: o[0] }, backend: t6 }); + let n = o.map((i) => i.dtype).reduce((i, p) => dt(i, p)), s = o.map((i) => i.shape), a = new Dg(s); + return t6.runWebGPUProgram(a, o, n); } -var wL = { kernelName: an, backendName: "webgpu", kernelFunc: Wre }; -var Ac = class { - constructor(e, t10, o) { - this.workGroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "infinityValue : f32,", this.size = true; - let n = [t10]; - this.op = o === "min" ? "<" : ">"; - let [s, a] = I.computeOutAndReduceShapes(e, n); - this.outputShape = s.length === 0 ? [1] : s, this.dispatchLayout = fe(this.outputShape), x.sizeFromShape(a) < 32 || x.sizeFromShape(s) > 1e3 ? (this.type = "plain", this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize)) : (this.type = "shared", this.dispatch = ae(this.dispatchLayout, this.outputShape, [1, 1, 1])), this.inputShape = e, this.shaderKey = `argMinMax_${this.op}_${this.type}`; +var kM = { kernelName: Mo, backendName: "webgpu", kernelFunc: gre }; +var Og = class { + constructor(e, t6) { + this.variableNames = ["A"], this.workgroupSize = [16, 16, 1]; + let o = new Array(e.length); + for (let n = 0; n < o.length; n++) + o[n] = e[t6[n]]; + this.outputShape = o, this.dispatchLayout = { x: [0], y: [1] }, this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [1, 1, 1]), this.shaderKey = "transposeShared"; } getUserCode() { - let e = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${Yo(this.inputShape.length - 1)}`, t10 = () => { + return y.assert(this.workgroupSize[0] === this.workgroupSize[1], () => `Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`), ` + const tileSize = ${this.workgroupSize[0]}; + var tile : array, ${this.workgroupSize[0]}>; + ${se()} { + var x = i32(workgroupId.x) * tileSize + i32(localId.x); + var y = i32(workgroupId.y) * tileSize + i32(localId.y); + let width = uniforms.outShape[0]; + let height = uniforms.outShape[1]; + if (x < width && y < height) { + tile[localId.y][localId.x] = f32(A[y * width + x]); + } + workgroupBarrier(); + + x = i32(workgroupId.y) * tileSize + i32(localId.x); + y = i32(workgroupId.x) * tileSize + i32(localId.y); + if (x < height && y < width) { + setOutputAtIndex((y * height + x), tile[localId.x] + [localId.y]); + } + } + `; + } +}; +var Pg = class { + constructor(e, t6) { + this.variableNames = ["A"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true; + let o = new Array(e.length); + for (let n = 0; n < o.length; n++) + o[n] = e[t6[n]]; + this.outputShape = o, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.newDim = t6, this.shaderKey = `transpose_${t6}`; + } + getUserCode() { + let e = Rt(this.outputShape.length), t6 = xre(this.newDim); + return ` + ${se("index")} { + for(var i = 0; i < ${this.workPerThread}; i = i + 1) { + let flatIndex = index * ${this.workPerThread} + i; + if(flatIndex < uniforms.size) { + let resRC = getCoordsFromIndex(flatIndex); + setOutputAtIndex(flatIndex, A[getIndexFromCoords${this.outputShape.length}D( + ${e}(${t6}), uniforms.aShape)]); + } + } + } + `; + } +}; +function xre(r) { + let e = r.length; + if (e > 6) + throw Error(`Transpose for rank ${e} is not yet supported`); + let t6 = new Array(e); + for (let o = 0; o < r.length; o++) + t6[r[o]] = `resRC.${$o(o)}`; + return t6.join(); +} +function Nr(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { perm: s } = o, a = t6, i = n.shape.length, p = new Array(i); + for (let c = 0; c < p.length; c++) + p[c] = n.shape[s[c]]; + if (t6.shouldExecuteOnCPU([n])) { + let l = a.tensorMap.get(n.dataId).values, m = CM(l, n.shape, n.dtype, s, p); + return t6.makeTensorInfo(p, n.dtype, m); + } + if (n.shape.length === 2 && y.arraysEqual(s, [1, 0])) { + let c = new Og(n.shape, s); + return a.runWebGPUProgram(c, [n], n.dtype); + } + let u = new Pg(n.shape, s); + return a.runWebGPUProgram(u, [n], n.dtype); +} +var NM = { kernelName: ro, backendName: "webgpu", kernelFunc: Nr }; +var Mg = class { + constructor(e, t6) { + this.workgroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "reduceSize : i32,", this.size = true, this.inputShape = [e.batchSize, e.inSize]; + let [o] = S.computeOutAndReduceShapes(this.inputShape, [1]); + this.outputShape = o.length === 0 ? [1] : o, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, [1, 1, 1]), this.reduceType = t6, this.shaderKey = `reduce_${t6}`; + } + getUserCode() { + let e = "", t6 = "0.0"; + this.reduceType === "min" || this.reduceType === "max" ? (e = ` + if (isnan(candidate)) { + bestValue = uniforms.NAN; + } else if (!isnan(bestValue) && candidate ${this.reduceType === "min" ? "<" : ">"} bestValue) + { bestValue = candidate; }`, t6 = "f32(x[offset])") : this.reduceType === "sum" || this.reduceType === "mean" ? e = " bestValue = bestValue + candidate; " : this.reduceType === "prod" ? (e = " bestValue = bestValue * candidate; ", t6 = "1.0") : this.reduceType === "all" ? (e = " bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); ", t6 = "1.0") : this.reduceType === "any" && (e = " bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); ", t6 = "0.0"); + let o = this.reduceType === "mean" ? "setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));" : "setOutputAtIndex(outputIndex, bestValue);"; + return ` + fn DIV_CEIL(a : u32, b : u32) -> u32 { + return ((a - 1u) / b + 1u); + } + + ${` + var xBestValues : array; + `} + fn getOffset(outputIndex : i32) -> i32 { + let outputCoords = getCoordsFromIndex(outputIndex); + let offset = ${this.outputShape.length === 1 ? "outputCoords" : "outputCoords[0]"} * uniforms.reduceSize; + return offset; + } + ${se("index")} { + let outputIndex = index / i32(workgroupSizeX); + let offset = getOffset(outputIndex); + var bestValue = ${t6}; + let Length = uniforms.reduceSize; + let WorkPerThread = DIV_CEIL(u32(Length), workgroupSizeX); + for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; + k = k + i32(workgroupSizeX)) { + let candidate = f32(x[offset + k]); + ${e} + } + xBestValues[localId.x] = bestValue; + workgroupBarrier(); + + var reduceSize = min(u32(Length), workgroupSizeX); + for (var currentSize = reduceSize / 2u; reduceSize > 1u; + currentSize = reduceSize / 2u) { + let interval = DIV_CEIL(reduceSize, 2u); + if (localId.x < currentSize) { + let candidate = xBestValues[localId.x + interval]; + ${e} + xBestValues[localId.x] = bestValue; + } + reduceSize = interval; + workgroupBarrier(); + } + + if (localId.x == 0u && outputIndex < uniforms.size) { + ${o} + } + } + `; + } +}; +function qr(r, e, t6, o, n) { + let s = r.shape.length, a = [], i = y.parseAxisParam(e, r.shape), p = i, u = S.getAxesPermutation(p, s), c = r; + u != null && (c = Nr({ inputs: { x: r }, attrs: { perm: u }, backend: n }), p = S.getInnerMostAxes(p.length, s), a.push(c)), S.assertAxesAreInnerMostDims(o, p, s); + let [l, m] = S.computeOutAndReduceShapes(c.shape, p), d = l; + t6 && (d = S.expandShapeToKeepDim(l, i)); + let f; + if ((o === "max" || o === "prod") && n.shouldExecuteOnCPU([c])) { + let h = n.tensorMap.get(c.dataId).values; + switch (o) { + case "max": + let g = oM(h, y.sizeFromShape(m), d, r.dtype); + f = n.makeTensorInfo(d, r.dtype, g); + break; + case "prod": + let { outVals: x, outShape: b, outDtype: C } = pM(c.shape, c.dtype, h, p); + f = n.makeTensorInfo(b, C, x); + break; + default: + throw new Error(`${o} CPU implementation is not yet supported.`); + } + } else { + let h = y.sizeFromShape(m), x = y.sizeFromShape(c.shape) / h, b = { windowSize: h, inSize: h, batchSize: x, outSize: 1 }, C = o === "mean" ? "float32" : ka(r.dtype), w = [{ type: "int32", data: [h] }], k = new Mg(b, o), _ = n.runWebGPUProgram(k, [c], C, w); + a.push(_), f = de({ inputs: { x: _ }, attrs: { shape: d }, backend: n }); + } + return a.forEach((h) => n.disposeData(h.dataId)), f; +} +function yre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { keepDims: s, axis: a } = o; + return qr(n, a, s, "all", t6); +} +var TM = { kernelName: Lo, backendName: "webgpu", kernelFunc: yre }; +function bre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { keepDims: s, axis: a } = o; + return qr(n, a, s, "any", t6); +} +var _M = { kernelName: Bo, backendName: "webgpu", kernelFunc: bre }; +var vc = class { + constructor(e, t6, o) { + this.workgroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "infinityValue : f32,", this.size = true; + let n = [t6]; + this.op = o === "min" ? "<" : ">"; + let [s, a] = S.computeOutAndReduceShapes(e, n); + this.outputShape = s.length === 0 ? [1] : s, this.dispatchLayout = ue(this.outputShape), y.sizeFromShape(a) < 32 || y.sizeFromShape(s) > 1e3 ? (this.type = "plain", this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize)) : (this.type = "shared", this.dispatch = re(this.dispatchLayout, this.outputShape, [1, 1, 1])), this.inputShape = e, this.shaderKey = `argMinMax_${this.op}_${this.type}`; + } + getUserCode() { + let e = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${$o(this.inputShape.length - 1)}`, t6 = () => { let o = ""; if (this.outputShape.length === 1) this.inputShape.length !== 1 && (o += "outputCoords,"); else for (let n = 0; n < this.outputShape.length; n++) - o += `outputCoords.${Yo(n)},`; + o += `outputCoords.${$o(n)},`; return o; }; return this.type === "shared" ? ` @@ -28631,20 +28015,20 @@ var Ac = class { } ${` - var xBestIndices : array; - var xBestValues : array; + var xBestIndices : array; + var xBestValues : array; `} - ${ue("index")} { - let outputIndex = index / i32(workGroupSizeX); + ${se("index")} { + let outputIndex = index / i32(workgroupSizeX); let reduceLength = ${e()}; var bestIndex = i32(localId.x); var bestValue = uniforms.infinityValue; let outputCoords = getCoordsFromIndex(outputIndex); for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { - let candidate = getX(${t10()} k); + k = k + i32(workgroupSizeX)) { + let candidate = getX(${t6()} k); if (!isnan(candidate) && candidate ${this.op} bestValue) { bestValue = candidate; bestIndex = k; @@ -28654,7 +28038,7 @@ var Ac = class { xBestIndices[localId.x] = bestIndex; workgroupBarrier(); - var reduceSize = min(u32(reduceLength), workGroupSizeX); + var reduceSize = min(u32(reduceLength), workgroupSizeX); for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) { let interval = DIV_CEIL(reduceSize, 2u); @@ -28675,14 +28059,14 @@ var Ac = class { } } ` : ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let outputCoords = getCoordsFromIndex(index); var bestIndex = 0; - var bestValue = getX(${t10()} 0); + var bestValue = getX(${t6()} 0); let reduceLength = ${e()}; for (var i = 1; i < reduceLength; i++) { - let candidate = getX(${t10()} i); + let candidate = getX(${t6()} i); if (candidate ${this.op} bestValue) { bestValue = candidate; bestIndex = i; @@ -28694,115 +28078,40 @@ var Ac = class { `; } }; -var jg = class { - constructor(e, t10) { - this.variableNames = ["A"], this.workGroupSize = [16, 16, 1]; - let o = new Array(e.length); - for (let n = 0; n < o.length; n++) - o[n] = e[t10[n]]; - this.outputShape = o, this.dispatchLayout = { x: [0], y: [1] }, this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [1, 1, 1]), this.shaderKey = "transposeShared"; - } - getUserCode() { - return ` - const TILE_DIM = ${this.workGroupSize[0]}; - var tile : array, ${this.workGroupSize[0]}>; - ${Ri()} - fn _start(@builtin(local_invocation_id) localId : vec3, - @builtin(workgroup_id) workgroupId : vec3) { - var x = i32(workgroupId.x) * TILE_DIM + i32(localId.x); - var y = i32(workgroupId.y) * TILE_DIM + i32(localId.y); - let width = uniforms.outShape[0]; - let height = uniforms.outShape[1]; - if (x < width && y < height) { - tile[localId.y][localId.x] = A[y * width + x]; - } - workgroupBarrier(); - - x = i32(workgroupId.y) * TILE_DIM + i32(localId.x); - y = i32(workgroupId.x) * TILE_DIM + i32(localId.y); - if (x < height && y < width) { - setOutputAtIndex((y * height + x), tile[localId.x] - [localId.y]); - } - } - `; - } -}; -var Xg = class { - constructor(e, t10) { - this.variableNames = ["A"], this.workPerThread = 1, this.workGroupSize = [64, 1, 1], this.size = true; - let o = new Array(e.length); - for (let n = 0; n < o.length; n++) - o[n] = e[t10[n]]; - this.outputShape = o, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]), this.newDim = t10, this.shaderKey = `transpose_${t10}`; - } - getUserCode() { - let e = At(this.outputShape.length), t10 = Ure(this.newDim); - return ` - ${ue("index")} { - for(var i = 0; i < ${this.workPerThread}; i = i + 1) { - let flatIndex = index * ${this.workPerThread} + i; - if(flatIndex < uniforms.size) { - let resRC = getCoordsFromIndex(flatIndex); - setOutputAtIndex(flatIndex, A[getIndexFromCoords${this.outputShape.length}D( - ${e}(${t10}), uniforms.aShape)]); - } - } - } - `; - } -}; -function Ure(r) { - let e = r.length; - if (e > 6) - throw Error(`Transpose for rank ${e} is not yet supported`); - let t10 = new Array(e); - for (let o = 0; o < r.length; o++) - t10[r[o]] = `resRC.${Yo(o)}`; - return t10.join(); +function Cre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = Nr({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), S.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); + let c = new vc(p.shape, a[0], "max"), l = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = t6.runWebGPUProgram(c, [p], "int32", l); + return u.forEach((d) => t6.disposeData(d.dataId)), m; } -function Nr(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); - for (let c = 0; c < p.length; c++) - p[c] = n.shape[s[c]]; - if (t10.shouldExecuteOnCPU([n])) { - let l = a.tensorMap.get(n.dataId).values, m = bL(l, n.shape, n.dtype, s, p); - return t10.makeTensorInfo(p, n.dtype, m); - } - if (n.shape.length === 2 && x.arraysEqual(s, [1, 0])) { - let c = new jg(n.shape, s); - return a.runWebGPUProgram(c, [n], n.dtype); - } - let u = new Xg(n.shape, s); - return a.runWebGPUProgram(u, [n], n.dtype); +var EM = { kernelName: Vo, backendName: "webgpu", kernelFunc: Cre }; +function Sre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = S.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = Nr({ inputs: { x: n }, backend: t6, attrs: { perm: i } }), u.push(p), a = S.getInnerMostAxes(a.length, p.shape.length)), S.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); + let c = new vc(p.shape, a[0], "min"), l = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = t6.runWebGPUProgram(c, [p], "int32", l); + return u.forEach((d) => t6.disposeData(d.dataId)), m; } -var SL = { kernelName: Mr, backendName: "webgpu", kernelFunc: Nr }; -function Gre(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o, a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Nr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), I.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); - let c = new Ac(p.shape, a[0], "max"), l = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = t10.runWebGPUProgram(c, [p], "int32", l); - return u.forEach((f) => t10.disposeData(f.dataId)), m; -} -var vL = { kernelName: un, backendName: "webgpu", kernelFunc: Gre }; -function Hre(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s } = o, a = x.parseAxisParam(s, n.shape), i = I.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Nr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = I.getInnerMostAxes(a.length, p.shape.length)), I.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); - let c = new Ac(p.shape, a[0], "min"), l = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = t10.runWebGPUProgram(c, [p], "int32", l); - return u.forEach((f) => t10.disposeData(f.dataId)), m; -} -var kL = { kernelName: ja, backendName: "webgpu", kernelFunc: Hre }; -var qre = it({ opType: ye.ATAN2 }); -var TL = { kernelName: sa, backendName: "webgpu", kernelFunc: qre }; -var Jl = class { - constructor(e, t10) { - this.variableNames = ["x"], this.uniforms = "stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,", this.workGroupSize = [128, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = `pool2D_${t10}`, this.poolType = t10; +var $M = { kernelName: Za, backendName: "webgpu", kernelFunc: Sre }; +var wre = Se({ opType: Q.ASIN }); +var AM = { kernelName: ia, backendName: "webgpu", kernelFunc: wre }; +var Ire = Se({ opType: Q.ASINH }); +var RM = { kernelName: ua, backendName: "webgpu", kernelFunc: Ire }; +var vre = Se({ opType: Q.ATAN }); +var FM = { kernelName: pa, backendName: "webgpu", kernelFunc: vre }; +var kre = ot({ opType: ye.ATAN2 }); +var DM = { kernelName: la, backendName: "webgpu", kernelFunc: kre }; +var Nre = Se({ opType: Q.ATANH }); +var OM = { kernelName: ca, backendName: "webgpu", kernelFunc: Nre }; +var Wl = class { + constructor(e, t6) { + this.variableNames = ["x"], this.uniforms = "stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,", this.workgroupSize = [128, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `pool2D_${t6}`, this.poolType = t6; } getUserCode() { let e = "resultValue = max(value, resultValue);"; this.poolType === "avg" && (e = "resultValue = resultValue + value; count = count + 1.0;"); - let t10 = "resultValue"; - return this.poolType === "avg" && (t10 = "resultValue / count"), ` - ${ue("index")} { + let t6 = "resultValue"; + return this.poolType === "avg" && (t6 = "resultValue / count"), ` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -28831,19 +28140,19 @@ var Jl = class { } } - setOutputAtIndex(index, ${t10}); + setOutputAtIndex(index, ${t6}); } } `; } }; -var Yg = class { +var Lg = class { constructor(e) { - this.variableNames = ["x"], this.uniforms = "stride : vec2,", this.workGroupSize = [256, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "poolWithFilterSizeEqualsOne"; + this.variableNames = ["x"], this.uniforms = "stride : vec2,", this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "poolWithFilterSizeEqualsOne"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -28860,220 +28169,183 @@ var Yg = class { `; } }; -var Qg = class { - constructor(e, t10) { - this.workGroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "reduceSize : i32,", this.size = true, this.inputShape = [e.batchSize, e.inSize]; - let [o] = I.computeOutAndReduceShapes(this.inputShape, [1]); - this.outputShape = o.length === 0 ? [1] : o, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, [1, 1, 1]), this.reduceType = t10, this.shaderKey = `reduce_${t10}`; - } - getUserCode() { - let e = "", t10 = "0.0"; - this.reduceType === "min" || this.reduceType === "max" ? (e = ` - if (isnan(candidate)) { - bestValue = uniforms.NAN; - } else if (!isnan(bestValue) && candidate ${this.reduceType === "min" ? "<" : ">"} bestValue) - { bestValue = candidate; }`, t10 = "f32(x[offset])") : this.reduceType === "sum" || this.reduceType === "mean" ? e = " bestValue = bestValue + candidate; " : this.reduceType === "prod" && (e = " bestValue = bestValue * candidate; ", t10 = "1.0"); - let o = this.reduceType === "mean" ? "setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));" : "setOutputAtIndex(outputIndex, bestValue);"; - return ` - fn DIV_CEIL(a : u32, b : u32) -> u32 { - return ((a - 1u) / b + 1u); - } - - ${` - var xBestValues : array; - `} - fn getOffset(outputIndex : i32) -> i32 { - let outputCoords = getCoordsFromIndex(outputIndex); - let offset = ${this.outputShape.length === 1 ? "outputCoords" : "outputCoords[0]"} * uniforms.reduceSize; - return offset; - } - ${ue("index")} { - let outputIndex = index / i32(workGroupSizeX); - let offset = getOffset(outputIndex); - var bestValue = ${t10}; - let Length = uniforms.reduceSize; - let WorkPerThread = DIV_CEIL(u32(Length), workGroupSizeX); - for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { - let candidate = f32(x[offset + k]); - ${e} - } - xBestValues[localId.x] = bestValue; - workgroupBarrier(); - - var reduceSize = min(u32(Length), workGroupSizeX); - for (var currentSize = reduceSize / 2u; reduceSize > 1u; - currentSize = reduceSize / 2u) { - let interval = DIV_CEIL(reduceSize, 2u); - if (localId.x < currentSize) { - let candidate = xBestValues[localId.x + interval]; - ${e} - xBestValues[localId.x] = bestValue; - } - reduceSize = interval; - workgroupBarrier(); - } - - if (localId.x == 0u && outputIndex < uniforms.size) { - ${o} - } - } - `; - } -}; -function Ys(r, e, t10, o, n) { - let s = r.shape.length, a = [], i = x.parseAxisParam(e, r.shape), p = i, u = I.getAxesPermutation(p, s), c = r; - u != null && (c = Nr({ inputs: { x: r }, attrs: { perm: u }, backend: n }), p = I.getInnerMostAxes(p.length, s), a.push(c)), I.assertAxesAreInnerMostDims(o, p, s); - let [l, m] = I.computeOutAndReduceShapes(c.shape, p), f = l; - t10 && (f = I.expandShapeToKeepDim(l, i)); - let d; - if ((o === "max" || o === "prod") && n.shouldExecuteOnCPU([c])) { - let h = n.tensorMap.get(c.dataId).values; - switch (o) { - case "max": - let g = rL(h, x.sizeFromShape(m), f, r.dtype); - d = n.makeTensorInfo(f, r.dtype, g); - break; - case "prod": - let { outVals: y, outShape: b, outDtype: C } = uL(c.shape, c.dtype, h, p); - d = n.makeTensorInfo(b, C, y); - break; - default: - throw new Error(`${o} CPU implementation is not yet supported.`); - } - } else { - let h = x.sizeFromShape(m), y = x.sizeFromShape(c.shape) / h, b = { windowSize: h, inSize: h, batchSize: y, outSize: 1 }, C = o === "mean" ? "float32" : Ca(r.dtype), w = [{ type: "int32", data: [h] }], k = new Qg(b, o), _ = n.runWebGPUProgram(k, [c], C, w); - a.push(_), d = xe({ inputs: { x: _ }, attrs: { shape: f }, backend: n }); - } - return a.forEach((h) => n.disposeData(h.dataId)), d; +function Ul(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o; + return qr(n, s, a, "max", t6); } -function em(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reductionIndices: s, keepDims: a } = o; - return Ys(n, s, a, "max", t10); +var PM = { kernelName: yn, backendName: "webgpu", kernelFunc: Ul }; +function uI(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { keepDims: s, axis: a } = o; + return qr(n, a, s, "mean", t6); } -var NL = { kernelName: $n, backendName: "webgpu", kernelFunc: em }; -function DS(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { keepDims: s, axis: a } = o; - return Ys(n, a, s, "mean", t10); -} -var _L = { kernelName: An, backendName: "webgpu", kernelFunc: DS }; -function Zg(r, e, t10, o) { - if (e.filterWidth === 1 && e.filterHeight === 1 && x.arraysEqual(e.inShape, e.outShape)) - return Lt({ inputs: { x: r }, backend: o }); +var MM = { kernelName: Sn, backendName: "webgpu", kernelFunc: uI }; +function Bg(r, e, t6, o) { + if (e.filterWidth === 1 && e.filterHeight === 1 && y.arraysEqual(e.inShape, e.outShape)) + return Ft({ inputs: { x: r }, backend: o }); if (e.filterWidth === e.inWidth && e.filterHeight === e.inHeight && e.batchSize === 1 && e.padInfo.type === "VALID") { - let a = r.shape.length, i = xe({ inputs: { x: r }, backend: o, attrs: { shape: [r.shape[a - 3] * r.shape[a - 2], r.shape[a - 1]] } }), p; - t10 === "avg" ? p = DS({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (x.assert(t10 === "max", () => `Invalid pool type ${t10}`), p = em({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); - let u = xe({ inputs: { x: p }, backend: o, attrs: { shape: e.outShape } }); + let a = r.shape.length, i = de({ inputs: { x: r }, backend: o, attrs: { shape: [r.shape[a - 3] * r.shape[a - 2], r.shape[a - 1]] } }), p; + t6 === "avg" ? p = uI({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(t6 === "max", () => `Invalid pool type ${t6}`), p = Ul({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); + let u = de({ inputs: { x: p }, backend: o, attrs: { shape: e.outShape } }); return o.disposeData(i.dataId), o.disposeData(p.dataId), u; } let n, s = [{ type: "int32", data: [e.strideHeight, e.strideWidth] }]; - return e.filterHeight === 1 && e.filterWidth === 1 ? n = new Yg(e) : (t10 === "avg" ? n = new Jl(e, "avg") : (x.assert(t10 === "max", () => `Invalid pool type ${t10}`), n = new Jl(e, "max")), s.push({ type: "int32", data: [e.padInfo.top, e.padInfo.left] }, { type: "int32", data: [e.dilationHeight, e.dilationWidth] }, { type: "int32", data: [e.inHeight, e.inWidth] }, { type: "int32", data: [e.effectiveFilterHeight, e.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r], r.dtype, s); + return e.filterHeight === 1 && e.filterWidth === 1 ? n = new Lg(e) : (t6 === "avg" ? n = new Wl(e, "avg") : (y.assert(t6 === "max", () => `Invalid pool type ${t6}`), n = new Wl(e, "max")), s.push({ type: "int32", data: [e.padInfo.top, e.padInfo.left] }, { type: "int32", data: [e.dilationHeight, e.dilationWidth] }, { type: "int32", data: [e.inHeight, e.inWidth] }, { type: "int32", data: [e.effectiveFilterHeight, e.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r], r.dtype, s); } -function Kre(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = I.computePool2DInfo(n.shape, s, a, u, i, p); - return Zg(n, c, "avg", t10); +function Tre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = S.computePool2DInfo(n.shape, s, a, u, i, p); + return Bg(n, c, "avg", t6); } -var EL = { kernelName: pn, backendName: "webgpu", kernelFunc: Kre }; -function jre(r) { - let { inputs: e, backend: t10, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; - return _c({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); +var LM = { kernelName: zo, backendName: "webgpu", kernelFunc: Tre }; +function _re(r) { + let { inputs: e, backend: t6, attrs: o } = r, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; + return Gu({ a: n, b: s, transposeA: a, transposeB: i, backend: t6 }); } -var $L = { kernelName: cn, backendName: "webgpu", kernelFunc: jre }; -var Jg = class { - constructor(e, t10) { - this.variableNames = ["source"], this.workPerThread = 1, this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.rank = t10.length, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]), this.start = e, this.uniforms = `start : ${At(e.length)}, `, this.shaderKey = "slice"; +var BM = { kernelName: Wo, backendName: "webgpu", kernelFunc: _re }; +var Vg = class { + constructor(e, t6) { + this.variableNames = ["source"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6, this.rank = t6.length, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.start = e, this.uniforms = `start : ${Rt(e.length)}, `, this.shaderKey = "slice"; } getUserCode() { - let e = At(this.rank), t10 = Xre(this.rank), o; - return this.start.length === 1 ? o = this.outputShape.map((s, a) => "sourceLoc = uniforms.start + coords;") : o = this.outputShape.map((s, a) => `sourceLoc.${PS[a]} = uniforms.start.${Yo(a)} + coords.${PS[a]};`), ` - ${ue("index")} { + let e = Rt(this.rank), t6 = Ere(this.rank), o; + return this.start.length === 1 ? o = this.outputShape.map((s, a) => "sourceLoc = uniforms.start + coords;") : o = this.outputShape.map((s, a) => `sourceLoc.${pI[a]} = uniforms.start.${$o(a)} + coords.${pI[a]};`), ` + ${se("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; let coords = getCoordsFromIndex(index); ${o.join(` `)} - setOutputAtIndex(index, getSource(${t10})); + setOutputAtIndex(index, getSource(${t6})); } } `; } }; -var PS = ["x", "y", "z", "w", "u", "v"]; -function Xre(r) { +var pI = ["x", "y", "z", "w", "u", "v"]; +function Ere(r) { if (r === 1) return "sourceLoc"; if (r <= 6) - return PS.slice(0, r).map((e) => `sourceLoc.${e}`).join(","); + return pI.slice(0, r).map((e) => `sourceLoc.${e}`).join(","); throw Error(`Slicing for rank ${r} is not yet supported`); } -function ms(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o, [i, p] = et.parseSliceParams(n, s, a); - if (et.assertParamsValid(n, i, p), t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let l = t10.tensorMap.get(n.dataId), m = fL(l.values, i, p, n.shape, n.dtype); - return t10.makeTensorInfo(p, n.dtype, m); +function ds(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, size: a } = o, [i, p] = ut.parseSliceParams(n, s, a); + if (ut.assertParamsValid(n, i, p), t6.shouldExecuteOnCPU([n]) || n.dtype === "string") { + let l = t6.tensorMap.get(n.dataId), m = fM(l.values, i, p, n.shape, n.dtype); + return t6.makeTensorInfo(p, n.dtype, m); } - if (x.sizeFromShape(p) === 0) - return t10.makeTensorInfo(p, n.dtype, []); - let u = new Jg(i, p), c = [{ type: "int32", data: i }]; - return t10.runWebGPUProgram(u, [n], n.dtype, c); + if (y.sizeFromShape(p) === 0) + return t6.makeTensorInfo(p, n.dtype, []); + let u = new Vg(i, p), c = [{ type: "int32", data: i }]; + return t6.runWebGPUProgram(u, [n], n.dtype, c); } -var RL = { kernelName: qn, backendName: "webgpu", kernelFunc: ms }; -var Yre = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; - x.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet"); - let i = s.reduce((b, C) => b * C), p = I.getReshaped(n.shape, s, i), u = I.getPermuted(p.length, s.length), c = I.getReshapedPermuted(n.shape, s, i), l = I.getSliceBeginCoords(a, s.length), m = I.getSliceSize(c, a, s.length), f = [], d = xe({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = Nr({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), g = xe({ inputs: { x: h }, backend: t10, attrs: { shape: c } }), y = ms({ inputs: { x: g }, backend: t10, attrs: { begin: l, size: m } }); - return f.push(d), f.push(h), f.push(g), f.forEach((b) => t10.disposeData(b.dataId)), y; +var VM = { kernelName: _s, backendName: "webgpu", kernelFunc: ds }; +var $re = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, crops: a } = o; + y.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet"); + let i = s.reduce((b, C) => b * C), p = S.getReshaped(n.shape, s, i), u = S.getPermuted(p.length, s.length), c = S.getReshapedPermuted(n.shape, s, i), l = S.getSliceBeginCoords(a, s.length), m = S.getSliceSize(c, a, s.length), d = [], f = de({ inputs: { x: n }, backend: t6, attrs: { shape: p } }), h = Nr({ inputs: { x: f }, backend: t6, attrs: { perm: u } }), g = de({ inputs: { x: h }, backend: t6, attrs: { shape: c } }), x = ds({ inputs: { x: g }, backend: t6, attrs: { begin: l, size: m } }); + return d.push(f), d.push(h), d.push(g), d.forEach((b) => t6.disposeData(b.dataId)), x; }; -var AL = { kernelName: hs, backendName: "webgpu", kernelFunc: Yre }; -var OS = it({ opType: ye.NOT_EQUAL, dtype: "bool", cpuKernelImpl: iL }); -var FL = { kernelName: go, backendName: "webgpu", kernelFunc: OS }; -function Wa(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.tensorMap.get(o.dataId); - return Lt({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); -} -var DL = { kernelName: la, backendName: "webgpu", kernelFunc: Wa }; -function PL(r, e) { - let t10 = new Zo(r.shape, pe.TO_INT), o = e.runWebGPUProgram(t10, [r], "int32"); - return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; -} -function MS(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { dtype: s } = o; - if (s === "complex64") { - if (n.dtype === "complex64") - return Lt({ inputs: { x: n }, backend: t10 }); - let a = Wr(n.shape), i = MS({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = ls({ inputs: { real: i, imag: a }, backend: t10 }); - return a.dispose(), t10.disposeData(i.dataId), p; +var zM = { kernelName: xs, backendName: "webgpu", kernelFunc: $re }; +var Are = ` + fn bincount_write(index: i32, value: f32) { + var oldValue = atomicLoad(& (result[index])); + var exchanged = false; + for (; !exchanged;) { + let newValueF32 = bitcast(oldValue) + value; + let newValue = bitcast(newValueF32); + let res = atomicCompareExchangeWeak( + &(result[index]), oldValue, newValue); + oldValue = res.old_value; + exchanged = res.exchanged; + } } - if (n.dtype === "complex64") { - let a = Wa({ inputs: { input: n }, backend: t10 }), i = MS({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); - return t10.disposeData(a.dataId), i; +`; +var Rre = ` + fn bincount_write(index: i32, value: f32) { + result[index] = value; } - if (!x.hasEncodingLoss(n.dtype, s)) { - let a = Lt({ inputs: { x: n }, backend: t10 }); - return { dataId: a.dataId, shape: a.shape, dtype: s }; - } - if (t10.shouldExecuteOnCPU([n])) { - let a = t10.tensorMap.get(n.dataId).values, [i, p, u] = WM(a, n.shape, n.dtype, s); - return t10.makeTensorInfo(i, p, u); - } - if (s === "int32") - return PL(n, t10); - if (s === "bool") { - let a = t10.makeTensorInfo([], "bool", x.getTypedArrayFromDType("bool", 1)), p = OS({ inputs: { a: n, b: a }, backend: t10 }); - return t10.disposeData(a.dataId), p; - } - throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); -} -var OL = { kernelName: to, backendName: "webgpu", kernelFunc: MS }; -var Qre = Ge({ opType: pe.CEIL, cpuKernelImpl: UM }); -var ML = { kernelName: ro, backendName: "webgpu", kernelFunc: Qre }; -var ex = class { - constructor(e) { - this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workPerThread = 4, this.workGroupSize = [64, 1, 1], this.isVec4 = true, this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "clipVec4"; +`; +var kc = class { + constructor(e, t6, o = false) { + this.outputShape = [], this.variableNames = ["x"], this.uniforms = "binCountSize : i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.hasWeights = true, this.binaryOutput = false, this.outputShape = e, this.rank = e.length, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.binaryOutput = o, o && (this.atomic = false), this.hasWeights = t6, this.hasWeights && this.variableNames.push("w"), this.shaderKey = `bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`; } getUserCode() { return ` - ${ue("index")} { + ${this.binaryOutput ? Rre : Are} + ${se("index")} { + ${this.rank === 1 ? `if (index < uniforms.xShape) { + let indexVal = i32(getX(index)); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput ? 1 : this.hasWeights ? "f32(getW(index))" : "1."}; + bincount_write(indexVal, value); + } + }` : `let coord = getCoordsFromIndex(index); + if (coordsInBounds2D(coord, uniforms.xShape)) { + let indexVal = i32(getX(coord[0], coord[1])); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput ? 1 : this.hasWeights ? "f32(getW(coord[0], coord[1]))" : "1."}; + bincount_write(coord.x * uniforms.binCountSize + indexVal, value); + } + }`} + } + `; + } +}; +function Fre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = y.sizeFromShape(n.shape), u = y.sizeFromShape(s.shape) > 0, c = [a], l = s.dtype, m = dr({ backend: t6, attrs: { shape: c, value: 0, dtype: l } }), d = new kc([i], u), f = [{ type: "int32", data: [a] }], h = u ? [n, s] : [n]; + return t6.runWebGPUProgram(d, h, l, f, m); +} +var WM = { kernelName: Ja, backendName: "webgpu", kernelFunc: Fre }; +var cI = ot({ opType: ye.NOT_EQUAL, dtype: "bool", cpuKernelImpl: uM }); +var UM = { kernelName: Nn, backendName: "webgpu", kernelFunc: cI }; +function qa(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.tensorMap.get(o.dataId); + return Ft({ inputs: { x: n.complexTensorInfos.real }, backend: t6 }); +} +var GM = { kernelName: ai, backendName: "webgpu", kernelFunc: qa }; +function HM(r, e) { + let t6 = new Ro(r.shape, Q.TO_INT), o = e.runWebGPUProgram(t6, [r], "int32"); + return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; +} +function lI(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dtype: s } = o; + if (s === "complex64") { + if (n.dtype === "complex64") + return Ft({ inputs: { x: n }, backend: t6 }); + let a = Vr(n.shape), i = lI({ inputs: { x: n }, backend: t6, attrs: { dtype: "float32" } }), p = po({ inputs: { real: i, imag: a }, backend: t6 }); + return a.dispose(), t6.disposeData(i.dataId), p; + } + if (n.dtype === "complex64") { + let a = qa({ inputs: { input: n }, backend: t6 }), i = lI({ inputs: { x: a }, backend: t6, attrs: { dtype: s } }); + return t6.disposeData(a.dataId), i; + } + if (!y.hasEncodingLoss(n.dtype, s)) { + let a = Ft({ inputs: { x: n }, backend: t6 }); + return { dataId: a.dataId, shape: a.shape, dtype: s }; + } + if (t6.shouldExecuteOnCPU([n])) { + let a = t6.tensorMap.get(n.dataId).values, [i, p, u] = U3(a, n.shape, n.dtype, s); + return t6.makeTensorInfo(i, p, u); + } + if (s === "int32") + return HM(n, t6); + if (s === "bool") { + let a = t6.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = cI({ inputs: { a: n, b: a }, backend: t6 }); + return t6.disposeData(a.dataId), p; + } + throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); +} +var qM = { kernelName: co, backendName: "webgpu", kernelFunc: lI }; +var Dre = Se({ opType: Q.CEIL, cpuKernelImpl: G3 }); +var KM = { kernelName: Uo, backendName: "webgpu", kernelFunc: Dre }; +var zg = class { + constructor(e) { + this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workPerThread = 4, this.workgroupSize = [64, 1, 1], this.isVec4 = true, this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "clipVec4"; + } + getUserCode() { + return ` + ${se("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); var clampedValue : vec4; @@ -29091,13 +28363,13 @@ var ex = class { `; } }; -var tx = class { +var Wg = class { constructor(e) { - this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "clip"; + this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "clip"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); if (isnan(value)) { @@ -29110,16 +28382,16 @@ var tx = class { `; } }; -function Zre(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i, p = [{ type: "float32", data: [s] }, { type: "float32", data: [a] }]; - return x.sizeFromShape(n.shape) % 4 === 0 ? i = new ex(n.shape) : i = new tx(n.shape), t10.runWebGPUProgram(i, [n], n.dtype, p); +function Ore(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i, p = [{ type: "float32", data: [s] }, { type: "float32", data: [a] }]; + return y.sizeFromShape(n.shape) % 4 === 0 ? i = new zg(n.shape) : i = new Wg(n.shape), t6.runWebGPUProgram(i, [n], n.dtype, p); } -var LL = { kernelName: Ro, backendName: "webgpu", kernelFunc: Zre }; -var rx = class { +var jM = { kernelName: lo, backendName: "webgpu", kernelFunc: Ore }; +var Ug = class { constructor(e) { - this.uniforms = "", this.workPerThread = 1, this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = I.computeOutShape(e, 1), this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]), this.offsetLength = e.length - 1; - for (let t10 = 0; t10 < this.offsetLength; t10++) - this.uniforms += `offset${t10} : i32,`; + this.uniforms = "", this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = S.computeOutShape(e, 1), this.variableNames = e.map((t6, o) => `T${o}`), this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.offsetLength = e.length - 1; + for (let t6 = 0; t6 < this.offsetLength; t6++) + this.uniforms += `offset${t6} : i32,`; this.shaderKey = "concat"; } getUserCode() { @@ -29133,7 +28405,7 @@ var rx = class { } else e.push("setOutputAtCoords(coords.x, coords.y, getT0(yR, yC));"); return ` - ${ue("index")} { + ${se("index")} { for(var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; if(flatIndex < uniforms.size) { @@ -29150,64 +28422,64 @@ var rx = class { } }; function qu(r) { - let { inputs: e, backend: t10 } = r, { input: o } = e, n = t10.tensorMap.get(o.dataId); - return Lt({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); + let { inputs: e, backend: t6 } = r, { input: o } = e, n = t6.tensorMap.get(o.dataId); + return Ft({ inputs: { x: n.complexTensorInfos.imag }, backend: t6 }); } -var BL = { kernelName: Ya, backendName: "webgpu", kernelFunc: qu }; -function Fc(r, e, t10) { +var XM = { kernelName: si, backendName: "webgpu", kernelFunc: qu }; +function Nc(r, e, t6) { let o = r[0].dtype; if (o === "complex64") { - let d = r.map((C) => Wa({ inputs: { input: C }, backend: t10 })), h = r.map((C) => qu({ inputs: { input: C }, backend: t10 })), g = Fc(d, e, t10), y = Fc(h, e, t10), b = ls({ inputs: { real: g, imag: y }, backend: t10 }); - return d.forEach((C) => t10.disposeData(C.dataId)), h.forEach((C) => t10.disposeData(C.dataId)), t10.disposeData(g.dataId), t10.disposeData(y.dataId), b; + let f = r.map((C) => qa({ inputs: { input: C }, backend: t6 })), h = r.map((C) => qu({ inputs: { input: C }, backend: t6 })), g = Nc(f, e, t6), x = Nc(h, e, t6), b = po({ inputs: { real: g, imag: x }, backend: t6 }); + return f.forEach((C) => t6.disposeData(C.dataId)), h.forEach((C) => t6.disposeData(C.dataId)), t6.disposeData(g.dataId), t6.disposeData(x.dataId), b; } - let n = t10.shouldExecuteOnCPU(r); + let n = t6.shouldExecuteOnCPU(r); if (o === "string" && (n = true), n) { - let d = r.map((k) => { - let E = [-1, x.sizeFromShape(k.shape.slice(e))]; - return xe({ inputs: { x: k }, backend: t10, attrs: { shape: E } }); - }), h = d.map((k) => ({ vals: t10.readSync(k.dataId), shape: k.shape })), g = I.computeOutShape(d.map((k) => k.shape), 1), y = d[0].shape[0] === 1, b = GM(h, g, o, y), C = I.computeOutShape(r.map((k) => k.shape), e), w = t10.makeTensorInfo(C, o, b); - return d.forEach((k) => t10.disposeData(k.dataId)), w; + let f = r.map((k) => { + let $ = [-1, y.sizeFromShape(k.shape.slice(e))]; + return de({ inputs: { x: k }, backend: t6, attrs: { shape: $ } }); + }), h = f.map((k) => ({ vals: t6.readSync(k.dataId), shape: k.shape })), g = S.computeOutShape(f.map((k) => k.shape), 1), x = f[0].shape[0] === 1, b = H3(h, g, o, x), C = S.computeOutShape(r.map((k) => k.shape), e), w = t6.makeTensorInfo(C, o, b); + return f.forEach((k) => t6.disposeData(k.dataId)), w; } - let s = t10.device.limits.maxStorageBuffersPerShaderStage - 1; + let s = t6.device.limits.maxStorageBuffersPerShaderStage - 1; if (r.length > s) { - let d = []; + let f = []; for (let g = 0; g < r.length; g += s) { - let y = r.slice(g, g + s); - d.push(Fc(y, e, t10)); + let x = r.slice(g, g + s); + f.push(Nc(x, e, t6)); } - let h = Fc(d, e, t10); - for (let g of d) - t10.disposeData(g.dataId); + let h = Nc(f, e, t6); + for (let g of f) + t6.disposeData(g.dataId); return h; } - let { tensors2D: a, outShape: i } = Jre(r, e, t10), p = a.map((d) => d.shape), u = new rx(p), c = [], l = new Array(p.length - 1); + let { tensors2D: a, outShape: i } = Pre(r, e, t6), p = a.map((f) => f.shape), u = new Ug(p), c = [], l = new Array(p.length - 1); if (l.length > 0) { l[0] = p[0][1], c.push({ type: "int32", data: [l[0]] }); - for (let d = 1; d < l.length; d++) - l[d] = l[d - 1] + p[d][1], c.push({ type: "int32", data: [l[d]] }); + for (let f = 1; f < l.length; f++) + l[f] = l[f - 1] + p[f][1], c.push({ type: "int32", data: [l[f]] }); } - let m = t10.runWebGPUProgram(u, a, a[0].dtype, c); - a.forEach((d) => t10.disposeData(d.dataId)); - let f = xe({ inputs: { x: m }, backend: t10, attrs: { shape: i } }); - return t10.disposeData(m.dataId), f; + let m = t6.runWebGPUProgram(u, a, a[0].dtype, c); + a.forEach((f) => t6.disposeData(f.dataId)); + let d = de({ inputs: { x: m }, backend: t6, attrs: { shape: i } }); + return t6.disposeData(m.dataId), d; } -function Jre(r, e, t10) { - let o = I.computeOutShape(r.map((s) => s.shape), e); - return { tensors2D: r.map((s) => xe({ inputs: { x: s }, backend: t10, attrs: { shape: [x.sizeFromShape(s.shape.slice(0, e)), x.sizeFromShape(s.shape.slice(e))] } })), outShape: o }; +function Pre(r, e, t6) { + let o = S.computeOutShape(r.map((s) => s.shape), e); + return { tensors2D: r.map((s) => de({ inputs: { x: s }, backend: t6, attrs: { shape: [y.sizeFromShape(s.shape.slice(0, e)), y.sizeFromShape(s.shape.slice(e))] } })), outShape: o }; } -function LS(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o, s = x.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); - I.assertParamsConsistent(a, s); - let i = I.computeOutShape(e.map((u) => u.shape), s); - if (x.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); - let p = e.filter((u) => x.sizeFromShape(u.shape) > 0); - return p.length === 1 ? Lt({ inputs: { x: p[0] }, backend: t10 }) : Fc(p, s, t10); +function mI(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); + S.assertParamsConsistent(a, s); + let i = S.computeOutShape(e.map((u) => u.shape), s); + if (y.sizeFromShape(i) === 0) + return t6.makeTensorInfo(i, e[0].dtype, []); + let p = e.filter((u) => y.sizeFromShape(u.shape) > 0); + return p.length === 1 ? Ft({ inputs: { x: p[0] }, backend: t6 }) : Nc(p, s, t6); } -var VL = { kernelName: gs, backendName: "webgpu", kernelFunc: LS }; -function eoe(r, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { - let c = (A) => { - switch (A) { +var YM = { kernelName: ys, backendName: "webgpu", kernelFunc: mI }; +function Mre(r, e, t6, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { + let c = (R) => { + switch (R) { case 1: return "resData = x[xIndex];"; case 3: @@ -29215,22 +28487,22 @@ function eoe(r, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) case 4: return "resData = x[xIndex / 4];"; default: - throw new Error(`innerElementSize ${A} is not supported.`); + throw new Error(`innerElementSize ${R} is not supported.`); } - }, l = (A) => { - switch (A) { + }, l = (R) => { + switch (R) { case 1: return "return W[row * uniforms.wShape[3] + colIn];"; case 4: return "return W[row * uniforms.wShape[3] / 4 + colIn];"; default: - throw new Error(`innerElementSize ${A} is not supported.`); + throw new Error(`innerElementSize ${R} is not supported.`); } }, m = r ? ` let coord = vec4(batch, xRow, xCol, xCh); ` : ` let coord = vec4(batch, xCh, xRow, xCol); - `, f = r ? ` + `, d = r ? ` let coords = vec4( batch, row / outWidth, @@ -29242,21 +28514,21 @@ function eoe(r, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) row, col / outWidth, col % outWidth); - `, d = r ? "uniforms.xShape[1]" : "uniforms.xShape[2]", h = r ? "uniforms.xShape[2]" : "uniforms.xShape[3]", g = r ? "row" : "col", y = r ? "col" : "row", b = ` + `, f = r ? "uniforms.xShape[1]" : "uniforms.xShape[2]", h = r ? "uniforms.xShape[2]" : "uniforms.xShape[3]", g = r ? "row" : "col", x = r ? "col" : "row", b = ` let inChannels = uniforms.wShape[2]; let outWidth = ${r ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; let outRow = ${g} / outWidth; let outCol = ${g} % outWidth; - let WRow = ${y} / (uniforms.filterDims[1] * inChannels); - let WCol = ${y} / inChannels % uniforms.filterDims[1]; + let WRow = ${x} / (uniforms.filterDims[1] * inChannels); + let WCol = ${x} / inChannels % uniforms.filterDims[1]; let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; - let xCh = ${y} % inChannels; - var resData = ${vt(i)}(0.0); + let xCh = ${x} % inChannels; + var resData = ${kt(i)}(0.0); // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. - if (xRow >= 0 && xRow < ${d} && xCol >= 0 && xCol < ${h}) { + if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) { ${m} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); ${c(i)} @@ -29268,21 +28540,21 @@ function eoe(r, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${b} } - return ${vt(i)}(0.0);` : o && t10 ? ` + return ${kt(i)}(0.0);` : o && t6 ? ` let col = colIn * ${i}; ${b}` : ` let col = colIn * ${i}; if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${b} } - return ${vt(i)}(0.0);`, w = `${l(p)}`, k = vt(u), _ = r ? vt(i) : vt(p), E = r ? vt(p) : vt(i); + return ${kt(i)}(0.0);`, w = `${l(p)}`, k = kt(u), _ = r ? kt(i) : kt(p), $ = r ? kt(p) : kt(i); return ` ${ur(s, a, u === 4, 4)} fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${_} { ${r ? C : w} } - fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${E} { + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${$} { ${r ? w : C} } @@ -29292,27 +28564,27 @@ function eoe(r, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { var value = valueIn; let outWidth = ${r ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; - ${f} - ${Kr(n, s)} + ${d} + ${Hr(n, s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } }`; } -var ox = class { - constructor(e, t10, o, n, s = false, a = null, i = false, p = false) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.isVec4 = ((e.inChannels % 4 === 0 || e.inChannels % 3 === 0) && this.isChannelsLast || e.outWidth % 4 === 0 && !this.isChannelsLast) && e.outChannels % 4 === 0, this.dispatchLayout = this.isChannelsLast ? { x: [3], y: [1, 2], z: [0] } : { x: [2, 3], y: [1], z: [0] }, this.workGroupSize = Hl(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = ql(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, this.elementsPerThread), this.isVec4 ? (this.isChannelsLast && e.inChannels % 4 !== 0 ? (this.innerElementSize = 3, this.variableTypes = ["f32", "vec4"]) : (this.innerElementSize = 4, this.variableTypes = ["vec4", "vec4"]), s && (this.variableNames.push("bias"), this.variableTypes.push("vec4")), i && (this.variableNames.push("preluActivationWeights"), this.variableTypes.push("vec4"))) : (this.innerElementSize = this.elementsPerThread[0], s && this.variableNames.push("bias"), i && this.variableNames.push("preluActivationWeights")), this.sequentialAccessByThreads = p, this.addBias = s, this.activation = a, this.hasPreluActivationWeights = i, this.tileAOuter = this.workGroupSize[1] * this.elementsPerThread[1], this.tileBOuter = this.workGroupSize[0] * this.elementsPerThread[0], this.tileInner = Math.max(this.workGroupSize[0] * this.innerElementSize, this.workGroupSize[1]), this.fitAOuter = t10 % this.tileAOuter === 0, this.fitBOuter = o % this.tileBOuter === 0, this.fitInner = n % this.tileInner === 0, this.shaderKey = `conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`; +var Gg = class { + constructor(e, t6, o, n, s = false, a = null, i = false, p = false) { + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.isVec4 = ((e.inChannels % 4 === 0 || e.inChannels % 3 === 0) && this.isChannelsLast || e.outWidth % 4 === 0 && !this.isChannelsLast) && e.outChannels % 4 === 0, this.dispatchLayout = this.isChannelsLast ? { x: [3], y: [1, 2], z: [0] } : { x: [2, 3], y: [1], z: [0] }, this.workgroupSize = Ml(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = Ll(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 ? (this.isChannelsLast && e.inChannels % 4 !== 0 ? (this.innerElementSize = 3, this.variableTypes = ["f32", "vec4"]) : (this.innerElementSize = 4, this.variableTypes = ["vec4", "vec4"]), s && (this.variableNames.push("bias"), this.variableTypes.push("vec4")), i && (this.variableNames.push("preluActivationWeights"), this.variableTypes.push("vec4"))) : (this.innerElementSize = this.elementsPerThread[0], s && this.variableNames.push("bias"), i && this.variableNames.push("preluActivationWeights")), this.sequentialAccessByThreads = p, this.addBias = s, this.activation = a, this.hasPreluActivationWeights = i, this.tileAOuter = this.workgroupSize[1] * this.elementsPerThread[1], this.tileBOuter = this.workgroupSize[0] * this.elementsPerThread[0], this.tileInner = Math.max(this.workgroupSize[0] * this.innerElementSize, this.workgroupSize[1]), this.fitAOuter = t6 % this.tileAOuter === 0, this.fitBOuter = o % this.tileBOuter === 0, this.fitInner = n % this.tileInner === 0, this.shaderKey = `conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`; } getUserCode() { - let e = this.isVec4 ? Uu(this.elementsPerThread, this.workGroupSize, !this.isChannelsLast, this.tileInner) : Gu(this.elementsPerThread, this.workGroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), t10 = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; + let e = this.isVec4 ? Wu(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner) : Uu(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), t6 = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; return ` - ${eoe(this.isChannelsLast, this.fitAOuter, this.fitBOuter, this.fitInner, this.addBias, this.activation, this.hasPreluActivationWeights, t10[0], t10[1], t10[2])} + ${Mre(this.isChannelsLast, this.fitAOuter, this.fitBOuter, this.fitInner, this.addBias, this.activation, this.hasPreluActivationWeights, t6[0], t6[1], t6[2])} ${e} `; } }; -var nx = class { - constructor(e, t10 = false, o = null, n = false) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,", this.workGroupSize = [4, 4, 8], this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.dispatchLayout = this.isChannelsLast ? { x: [2], y: [1], z: [0, 3] } : { x: [3], y: [2], z: [0, 1] }, this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.addBias = t10, this.activation = o, this.hasPreluActivationWeights = n, t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.shaderKey = `conv2dnaive_${this.activation}_${this.isChannelsLast}`; +var Hg = class { + constructor(e, t6 = false, o = null, n = false) { + this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,", this.workgroupSize = [4, 4, 8], this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.dispatchLayout = this.isChannelsLast ? { x: [2], y: [1], z: [0, 3] } : { x: [3], y: [2], z: [0, 1] }, this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.addBias = t6, this.activation = o, this.hasPreluActivationWeights = n, t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.shaderKey = `conv2dnaive_${this.activation}_${this.isChannelsLast}`; } getUserCode() { return ` @@ -29337,11 +28609,11 @@ var nx = class { let coords = ${this.isChannelsLast ? "vec4(batch, row, col, chan);" : "vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${Kr(this.addBias, this.activation)} + ${Hr(this.addBias, this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } - ${ue("index")} { + ${se("index")} { let coords = getOutputCoords(); let batch = coords[0]; let outChannel = ${this.isChannelsLast ? "coords[3];" : "coords[1];"} @@ -29364,57 +28636,111 @@ var nx = class { `; } }; -function zL(r, e) { - let t10 = r.length; - return t10 >= 3 ? e ? [...r.slice(0, -3), r[t10 - 3] * r[t10 - 2], r[t10 - 1]] : [...r.slice(0, -3), r[t10 - 3], r[t10 - 2] * r[t10 - 1]] : !e && t10 === 1 && r[0] > 1 ? [r[0], 1] : null; +var qg = class { + constructor(e, t6) { + this.variableNames = ["x"], this.uniforms = `pad : vec2, stride : vec2, dilation : vec2, outWidth : i32, itemsPerBlockRow : i32, + inChannels : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = t6, this.shaderKey = `im2col_${this.isChannelsLast}`; + } + getUserCode() { + let e = this.isChannelsLast ? 1 : 2, t6 = this.isChannelsLast ? 2 : 3, o = this.isChannelsLast ? "coords[1]" : "coords[2]", n = this.isChannelsLast ? "coords[2]" : "coords[1]", s = this.isChannelsLast ? "getX(batch, xRow, xCol, ch)" : "getX(batch, ch, xRow, xCol)"; + return ` + ${se("index")} { + let coords = getCoordsFromIndex(index); + if(index < uniforms.size) { + let batch = coords[0]; + let row = ${o}; + let col = ${n}; + let offsetY = (row / uniforms.outWidth) * uniforms.stride[0] - uniforms.pad[0]; + let xRow = offsetY + uniforms.dilation[0] * (col / uniforms.itemsPerBlockRow); + var value = 0.0; + if(xRow < uniforms.xShape[${e}] && xRow >= 0) { + let offsetX = (row % uniforms.outWidth) * uniforms.stride[1] - + uniforms.pad[1]; + let xCol = offsetX + uniforms.dilation[1] * ((col % + uniforms.itemsPerBlockRow) / uniforms.inChannels); + let ch = col % uniforms.inChannels; + if(xCol < uniforms.xShape[${t6}] && xCol >= 0) { + value = ${s}; + } + } + setOutputAtIndex(index, value); + } + } + `; + } +}; +function Kg(r, e) { + let t6 = r.length; + return t6 >= 3 ? e ? [...r.slice(0, -3), r[t6 - 3] * r[t6 - 2], r[t6 - 1]] : [...r.slice(0, -3), r[t6 - 3], r[t6 - 2] * r[t6 - 1]] : !e && t6 === 1 && r[0] > 1 ? [r[0], 1] : null; } -function toe({ x: r, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = t10.dataFormat === "channelsLast", u = !p, c = false, l = p && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = [], f, d; +function Lre({ x: r, filter: e, convInfo: t6, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = t6.dataFormat === "channelsLast", u = !p, c = false, l = p && t6.filterHeight === t6.inHeight && t6.filterWidth === t6.inWidth && t6.padInfo.type === "VALID", m = [], d, f; if (l) { - let y = t10.inHeight * t10.inWidth * t10.inChannels; - f = xe({ inputs: { x: r }, backend: o, attrs: { shape: [1, t10.batchSize, y] } }), d = xe({ inputs: { x: e }, backend: o, attrs: { shape: [1, y, t10.outChannels] } }); + let x = t6.inHeight * t6.inWidth * t6.inChannels; + d = de({ inputs: { x: r }, backend: o, attrs: { shape: [1, t6.batchSize, x] } }), f = de({ inputs: { x: e }, backend: o, attrs: { shape: [1, x, t6.outChannels] } }); } else - f = xe({ inputs: { x: r }, backend: o, attrs: { shape: p ? [t10.batchSize, t10.inHeight * t10.inWidth, t10.inChannels] : [t10.batchSize, t10.inChannels, t10.inHeight * t10.inWidth] } }), d = xe({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); - if (m.push(f), m.push(d), s != null) { - let y = zL(s.shape, p); - y != null && (s = xe({ inputs: { x: s }, backend: o, attrs: { shape: y } }), m.push(s)); + d = de({ inputs: { x: r }, backend: o, attrs: { shape: p ? [t6.batchSize, t6.inHeight * t6.inWidth, t6.inChannels] : [t6.batchSize, t6.inChannels, t6.inHeight * t6.inWidth] } }), f = de({ inputs: { x: e }, backend: o, attrs: { shape: [1, t6.inChannels, t6.outChannels] } }); + if (m.push(d), m.push(f), s != null) { + let x = Kg(s.shape, p); + x != null && (s = de({ inputs: { x: s }, backend: o, attrs: { shape: x } }), m.push(s)); } if (n != null) { - let y = zL(n.shape, p); - y != null && (n = xe({ inputs: { x: n }, backend: o, attrs: { shape: y } }), m.push(n)); + let x = Kg(n.shape, p); + x != null && (n = de({ inputs: { x: n }, backend: o, attrs: { shape: x } }), m.push(n)); } - let h = _c({ a: p ? f : d, b: p ? d : f, transposeA: u, transposeB: c, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), g = xe({ inputs: { x: h }, backend: o, attrs: { shape: t10.outShape } }); + let h = Gu({ a: p ? d : f, b: p ? f : d, transposeA: u, transposeB: c, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), g = de({ inputs: { x: h }, backend: o, attrs: { shape: t6.outShape } }); m.push(h); - for (let y of m) - o.disposeData(y.dataId); + for (let x of m) + o.disposeData(x.dataId); return g; } -function sx({ x: r, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = n != null, u = s != null, c = t10.dataFormat === "channelsLast", l = c && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = P().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG"); - if (!m && (l || t10.filterHeight === 1 && t10.filterWidth === 1 && t10.dilationHeight === 1 && t10.dilationWidth === 1 && t10.strideHeight === 1 && t10.strideWidth === 1 && (t10.padInfo.type === "SAME" || t10.padInfo.type === "VALID"))) - return toe({ x: r, filter: e, convInfo: t10, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); - let f, d = [t10.padInfo.top, t10.padInfo.left], h = [{ type: "int32", data: [t10.filterHeight, t10.filterWidth] }, { type: "int32", data: [...d] }, { type: "int32", data: [t10.strideHeight, t10.strideWidth] }, { type: "int32", data: [t10.dilationHeight, t10.dilationWidth] }]; - if (m) - f = new nx(t10, p, i, u); - else { - let C = c ? t10.outHeight * t10.outWidth : t10.outChannels, w = c ? t10.outChannels : t10.outHeight * t10.outWidth, k = t10.filterHeight * t10.filterWidth * t10.inChannels; - h.push({ type: "int32", data: [C] }, { type: "int32", data: [w] }, { type: "int32", data: [k] }); - let _ = o.adapterInfo.isIntel(); - f = new ox(t10, C, w, k, p, i, u, _); +function Bre({ x: r, filter: e, convInfo: t6, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let { filterWidth: p, filterHeight: u, inChannels: c, strideWidth: l, strideHeight: m, padInfo: d, outWidth: f, outHeight: h, dilationWidth: g, dilationHeight: x, dataFormat: b } = t6, C = b === "channelsLast", w = p * u * c, k = h * f, _ = C ? [t6.batchSize, k, w] : [t6.batchSize, w, k], $ = new qg(_, C), A = [{ type: "int32", data: [d.top, d.left] }, { type: "int32", data: [m, l] }, { type: "int32", data: [x, g] }, { type: "int32", data: [f] }, { type: "int32", data: [c * p] }, { type: "int32", data: [c] }], R = o.runWebGPUProgram($, [r], r.dtype, A), D = []; + D.push(R); + let P = de({ inputs: { x: e }, backend: o, attrs: { shape: [1, w, -1] } }); + if (D.push(P), s != null) { + let U = Kg(s.shape, C); + U != null && (s = de({ inputs: { x: s }, backend: o, attrs: { shape: U } }), D.push(s)); } - let g = [], y = [r, e]; - p && (!c && n.shape.length === 1 && (n = xe({ inputs: { x: n }, backend: o, attrs: { shape: [n.shape[0], 1, 1] } }), g.push(n)), y.push(n)), u && (!c && s.shape.length === 1 && (s = xe({ inputs: { x: s }, backend: o, attrs: { shape: [s.shape[0], 1, 1] } }), g.push(s)), y.push(s)), i === "leakyrelu" && (h.push({ type: "float32", data: [a] }), f.uniforms += " alpha : f32,"); - let b = o.runWebGPUProgram(f, y, r.dtype, h); - for (let C of g) - o.disposeData(C.dataId); - return b; + if (n != null) { + let U = Kg(n.shape, C); + U != null && (n = de({ inputs: { x: n }, backend: o, attrs: { shape: U } }), D.push(n)); + } + let W = Gu({ a: C ? R : P, b: C ? P : R, transposeA: !C, transposeB: false, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), V = de({ inputs: { x: W }, backend: o, attrs: { shape: t6.outShape } }); + D.push(W); + for (let U of D) + o.disposeData(U.dataId); + return V; } -function roe(r) { - let { inputs: e, attrs: t10, backend: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = t10, l = I.convertConv2DDataFormat(p), m = I.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l); - return sx({ x: n, filter: s, convInfo: m, backend: o }); +function jg({ x: r, filter: e, convInfo: t6, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = n != null, u = s != null, c = t6.dataFormat === "channelsLast", l = c && t6.filterHeight === t6.inHeight && t6.filterWidth === t6.inWidth && t6.padInfo.type === "VALID", m = O().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG"); + if (!m && (l || t6.filterHeight === 1 && t6.filterWidth === 1 && t6.dilationHeight === 1 && t6.dilationWidth === 1 && t6.strideHeight === 1 && t6.strideWidth === 1 && (t6.padInfo.type === "SAME" || t6.padInfo.type === "VALID"))) + return Lre({ x: r, filter: e, convInfo: t6, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + let d = O().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), f = d > 0 ? d : o.thresholdToIncreaseWorkgroups, h = t6.batchSize * Math.ceil(t6.outHeight * t6.outWidth / 32) * Math.ceil(t6.outChannels / 32); + if (O().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER") || h <= f) + return Bre({ x: r, filter: e, convInfo: t6, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); + let g, x = [t6.padInfo.top, t6.padInfo.left], b = [{ type: "int32", data: [t6.filterHeight, t6.filterWidth] }, { type: "int32", data: [...x] }, { type: "int32", data: [t6.strideHeight, t6.strideWidth] }, { type: "int32", data: [t6.dilationHeight, t6.dilationWidth] }]; + if (m) + g = new Hg(t6, p, i, u); + else { + let _ = c ? t6.outHeight * t6.outWidth : t6.outChannels, $ = c ? t6.outChannels : t6.outHeight * t6.outWidth, A = t6.filterHeight * t6.filterWidth * t6.inChannels; + b.push({ type: "int32", data: [_] }, { type: "int32", data: [$] }, { type: "int32", data: [A] }); + let R = o.adapterInfo.isIntel(); + g = new Gg(t6, _, $, A, p, i, u, R); + } + let C = [], w = [r, e]; + p && (!c && n.shape.length === 1 && (n = de({ inputs: { x: n }, backend: o, attrs: { shape: [n.shape[0], 1, 1] } }), C.push(n)), w.push(n)), u && (!c && s.shape.length === 1 && (s = de({ inputs: { x: s }, backend: o, attrs: { shape: [s.shape[0], 1, 1] } }), C.push(s)), w.push(s)), i === "leakyrelu" && (b.push({ type: "float32", data: [a] }), g.uniforms += " alpha : f32,"); + let k = o.runWebGPUProgram(g, w, r.dtype, b); + for (let _ of C) + o.disposeData(_.dataId); + return k; } -var WL = { kernelName: ln, backendName: "webgpu", kernelFunc: roe }; -function ooe(r = 4) { +function Vre(r) { + let { inputs: e, attrs: t6, backend: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = t6, l = S.convertConv2DDataFormat(p), m = S.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l); + return jg({ x: n, filter: s, convInfo: m, backend: o }); +} +var QM = { kernelName: Go, backendName: "webgpu", kernelFunc: Vre }; +function zre(r = 4) { let e = (s) => { switch (s) { case 1: @@ -29443,10 +28769,10 @@ function ooe(r = 4) { let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.stride[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.stride[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } let coord = vec4( batch, @@ -29455,14 +28781,14 @@ function ooe(r = 4) { col % uniforms.outBackprop[3]); return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`} } - return ${vt(r)}(0.0);`; + return ${kt(r)}(0.0);`; return ` - fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${vt(r)} { + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${kt(r)} { let col = colIn * ${r}; ${o} } - fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${vt(r)} { + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${kt(r)} { let col = colIn * ${r}; let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); @@ -29474,10 +28800,10 @@ function ooe(r = 4) { let coord = vec4(coordX, coordY, col, rowInner); ${e(r)} } - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } - fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${vt(r)}) { + fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${kt(r)}) { let col = colIn * ${r}; if (row < uniforms.dimAOuter && (col + ${r - 1}) < uniforms.dimBOuter) { var value = valueInput; @@ -29490,32 +28816,32 @@ function ooe(r = 4) { } }`; } -var ax = class { +var Xg = class { constructor(e) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.inShape, x.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = e.inChannels % 4 === 0 && e.outChannels % 4 === 0, this.dispatchLayout = { x: [3], y: [1, 2], z: [0] }, this.workGroupSize = Hl(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = ql(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, this.elementsPerThread), this.isVec4 && (this.variableTypes = ["vec4", "f32"]), this.shaderKey = `conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`; + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.inShape, y.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = e.inChannels % 4 === 0 && e.outChannels % 4 === 0, this.dispatchLayout = { x: [3], y: [1, 2], z: [0] }, this.workgroupSize = Ml(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = Ll(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 && (this.variableTypes = ["vec4", "f32"]), this.shaderKey = `conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`; } getUserCode() { - let e = this.isVec4 ? Uu(this.elementsPerThread, this.workGroupSize) : Gu(this.elementsPerThread, this.workGroupSize); + let e = this.isVec4 ? Wu(this.elementsPerThread, this.workgroupSize) : Uu(this.elementsPerThread, this.workgroupSize); return ` - ${ooe(this.isVec4 ? 4 : 1)} + ${zre(this.isVec4 ? 4 : 1)} ${e} `; } }; -var ix = class { +var Yg = class { constructor(e) { - this.variableNames = ["dy", "W"], this.uniforms = "filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", this.shaderKey = `conv2DDerInput_${this.isChannelsLast}`; + this.variableNames = ["dy", "W"], this.uniforms = "filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", this.shaderKey = `conv2DDerInput_${this.isChannelsLast}`; } getUserCode() { - let e = this.isChannelsLast ? 1 : 2, t10 = this.isChannelsLast ? 2 : 3, o = this.isChannelsLast ? 3 : 1; + let e = this.isChannelsLast ? 1 : 2, t6 = this.isChannelsLast ? 2 : 3, o = this.isChannelsLast ? 3 : 1; return ` - ${ue("index")} { + ${se("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; let d1 = coords[${o}]; - let dyCorner = vec2(coords[${e}], coords[${t10}]) - uniforms.pads; + let dyCorner = vec2(coords[${e}], coords[${t6}]) - uniforms.pads; let dyRCorner = dyCorner.x; let dyCCorner = dyCorner.y; @@ -29560,32 +28886,32 @@ var ix = class { `; } }; -function noe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = I.convertConv2DDataFormat(u), m = I.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l), f = [{ type: "int32", data: [m.filterHeight, m.filterWidth] }, { type: "int32", data: [m.filterHeight - 1 - m.padInfo.top, m.filterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize, m.outHeight, m.outWidth, m.outChannels] }], d; - if (P().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE") || m.filterHeight <= 2 && m.filterWidth <= 2 && m.outChannels <= 16 && m.inChannels === 1) - d = new ix(m); +function Wre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = S.convertConv2DDataFormat(u), m = S.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l), d = [{ type: "int32", data: [m.filterHeight, m.filterWidth] }, { type: "int32", data: [m.filterHeight - 1 - m.padInfo.top, m.filterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize, m.outHeight, m.outWidth, m.outChannels] }], f; + if (O().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE") || m.filterHeight <= 2 && m.filterWidth <= 2 && m.outChannels <= 16 && m.inChannels === 1) + f = new Yg(m); else { - d = new ax(m); - let h = m.inHeight * m.inWidth, g = m.inChannels, y = m.filterHeight * m.filterWidth * m.outChannels; - f.push({ type: "uint32", data: [h] }, { type: "uint32", data: [g] }, { type: "uint32", data: [y] }); + f = new Xg(m); + let h = m.inHeight * m.inWidth, g = m.inChannels, x = m.filterHeight * m.filterWidth * m.outChannels; + d.push({ type: "uint32", data: [h] }, { type: "uint32", data: [g] }, { type: "uint32", data: [x] }); } - return t10.runWebGPUProgram(d, [n, s], "float32", f); + return t6.runWebGPUProgram(f, [n, s], "float32", d); } -var UL = { kernelName: mn, backendName: "webgpu", kernelFunc: noe }; -var soe = Ge({ opType: pe.COS }); -var GL = { kernelName: fn, backendName: "webgpu", kernelFunc: soe }; -var aoe = Ge({ opType: pe.COSH }); -var HL = { kernelName: dn, backendName: "webgpu", kernelFunc: aoe }; -var ux = class { - constructor(e, t10, o, n) { - this.variableNames = ["Image", "Boxes", "BoxInd"], this.uniforms = "extrapolationValue : f32,", this.workGroupSize = [64, 1, 1], this.size = true; - let [s] = t10; - this.outputShape = [s, o[0], o[1], e], this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.methodId = n === "bilinear" ? 1 : 0, this.cropHeightBiggerThan1 = this.outputShape[1] > 1, this.cropWidthBiggerThan1 = this.outputShape[2] > 1, this.shaderKey = `cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`; +var ZM = { kernelName: Ho, backendName: "webgpu", kernelFunc: Wre }; +var Ure = Se({ opType: Q.COS }); +var JM = { kernelName: qo, backendName: "webgpu", kernelFunc: Ure }; +var Gre = Se({ opType: Q.COSH }); +var eL = { kernelName: Ko, backendName: "webgpu", kernelFunc: Gre }; +var Qg = class { + constructor(e, t6, o, n) { + this.variableNames = ["Image", "Boxes", "BoxInd"], this.uniforms = "extrapolationValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true; + let [s] = t6; + this.outputShape = [s, o[0], o[1], e], this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.methodId = n === "bilinear" ? 1 : 0, this.cropHeightBiggerThan1 = this.outputShape[1] > 1, this.cropWidthBiggerThan1 = this.outputShape[2] > 1, this.shaderKey = `cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`; } getUserCode() { - let [e, t10] = ["f32(uniforms.imageShape[1] - 1)", "f32(uniforms.imageShape[2] - 1)"], [o, n, s] = this.cropHeightBiggerThan1 ? [`(${e} / f32(uniforms.outShape[1] - 1))`, "(y2-y1) * height_ratio", `y1*${e} + f32(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${e}`], [a, i, p] = this.cropWidthBiggerThan1 ? [`(${t10} / f32(uniforms.outShape[2] - 1))`, "(x2-x1) * width_ratio", `x1*${t10} + f32(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${t10}`]; + let [e, t6] = ["f32(uniforms.imageShape[1] - 1)", "f32(uniforms.imageShape[2] - 1)"], [o, n, s] = this.cropHeightBiggerThan1 ? [`(${e} / f32(uniforms.outShape[1] - 1))`, "(y2-y1) * height_ratio", `y1*${e} + f32(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${e}`], [a, i, p] = this.cropWidthBiggerThan1 ? [`(${t6} / f32(uniforms.outShape[2] - 1))`, "(x2-x1) * width_ratio", `x1*${t6} + f32(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${t6}`]; return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let height_ratio = f32(${o}); @@ -29612,7 +28938,7 @@ var ux = class { return; } let in_x = ${p}; - if( in_x < 0.0 || in_x > ${t10} ) { + if( in_x < 0.0 || in_x > ${t6} ) { setOutputAtIndex(index, uniforms.extrapolationValue); return; } @@ -29643,35 +28969,33 @@ var ux = class { `; } }; -var ioe = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new ux(n.shape[3], s.shape, i, p), l = [{ type: "float32", data: [u] }]; - return t10.runWebGPUProgram(c, [n, s, a], "float32", l); +var Hre = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Qg(n.shape[3], s.shape, i, p), l = [{ type: "float32", data: [u] }]; + return t6.runWebGPUProgram(c, [n, s, a], "float32", l); }; -var qL = { kernelName: xn, backendName: "webgpu", kernelFunc: ioe }; +var tL = { kernelName: Yo, backendName: "webgpu", kernelFunc: Hre }; var Ku; (function(r) { r.Prod = "*", r.Sum = "+"; })(Ku || (Ku = {})); -var tm = class { - constructor(e, t10, o, n) { - this.variableNames = ["x"], this.uniforms = "index : f32,", this.size = true; - let s = 128; - this.workGroupSize = [s, 1, 1], this.outputShape = t10, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.exclusive = o, this.reverse = n, this.op = e, this.shaderKey = `cum_${this.op}_${this.exclusive}_${this.reverse}`; +var Gl = class { + constructor(e, t6, o, n) { + this.variableNames = ["x"], this.uniforms = "index : f32,", this.size = true, this.workgroupSize = [128, 1, 1], this.outputShape = t6, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.exclusive = o, this.reverse = n, this.op = e, this.shaderKey = `cum_${this.op}_${this.exclusive}_${this.reverse}`; } getUserCode() { - let e = this.outputShape.length, t10 = this.op === Ku.Prod ? "1.0" : "0.0", o = this.exclusive ? t10 : `getX(${KL(e, "coords", this.op)})`, n = this.outputShape[this.outputShape.length - 1], s = "", a = ""; + let e = this.outputShape.length, t6 = this.op === Ku.Prod ? "1.0" : "0.0", o = this.exclusive ? t6 : `getX(${rL(e, "coords", this.op)})`, n = this.outputShape[this.outputShape.length - 1], s = "", a = ""; return this.exclusive ? (s = this.reverse ? `end != ${n - 1}` : "end != 0", a = this.reverse ? "end + 1" : "end - 1") : (s = this.reverse ? `end + pow2 < ${n}` : "end >= pow2", a = this.reverse ? "end + pow2" : "end - pow2"), ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${jL(e, "coords", this.op)}; + let end = ${oL(e, "coords", this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${jL(e, "coords", this.op)} = idx; - val ${this.op}= getX(${KL(e, "coords", this.op)}); + ${oL(e, "coords", this.op)} = idx; + val ${this.op}= getX(${rL(e, "coords", this.op)}); } setOutputAtIndex(index, val); } @@ -29679,7 +29003,7 @@ var tm = class { `; } }; -function KL(r, e, t10) { +function rL(r, e, t6) { if (r === 1) return `${e}`; if (r === 2) @@ -29688,9 +29012,9 @@ function KL(r, e, t10) { return `${e}.x, ${e}.y, ${e}.z`; if (r === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; - throw Error(`Cumulative ${t10} for rank ${r} is not yet supported`); + throw Error(`Cumulative ${t6} for rank ${r} is not yet supported`); } -function jL(r, e, t10) { +function oL(r, e, t6) { if (r === 1) return `${e}`; if (r === 2) @@ -29699,46 +29023,51 @@ function jL(r, e, t10) { return `${e}.z`; if (r === 4) return `${e}.w`; - throw Error(`Cumulative ${t10} for rank ${r} is not yet supported`); + throw Error(`Cumulative ${t6} for rank ${r} is not yet supported`); } -function px(r, e, t10, o, n, s) { - let a = e.shape.length, i = I.getAxesPermutation([o], a), p = e; - i != null && (p = Nr({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); - let u = I.getInnerMostAxes(1, a)[0]; +function Zg(r, e, t6, o, n, s) { + let a = e.shape.length, i = S.getAxesPermutation([o], a), p = e; + i != null && (p = Nr({ inputs: { x: e }, backend: t6, attrs: { perm: i } })); + let u = S.getInnerMostAxes(1, a)[0]; if (u !== a - 1) throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length - 1} but got axis=${o}`); - let c = p.shape[u], l = Lt({ inputs: { x: p }, backend: t10 }); + let c = p.shape[u], l = Ft({ inputs: { x: p }, backend: t6 }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { - let f = new tm(r, p.shape, false, s), d = l, h = [{ type: "float32", data: [m] }]; - l = t10.runWebGPUProgram(f, [l], l.dtype, h), t10.disposeData(d.dataId); + let d = new Gl(r, p.shape, false, s), f = l, h = [{ type: "float32", data: [m] }]; + l = t6.runWebGPUProgram(d, [l], l.dtype, h), t6.disposeData(f.dataId); } if (n) { - let m = new tm(r, p.shape, n, s), f = l, d = [{ type: "float32", data: [0] }]; - l = t10.runWebGPUProgram(m, [l], l.dtype, d), t10.disposeData(f.dataId); + let m = new Gl(r, p.shape, n, s), d = l, f = [{ type: "float32", data: [0] }]; + l = t6.runWebGPUProgram(m, [l], l.dtype, f), t6.disposeData(d.dataId); } if (i != null) { - let m = I.getUndoAxesPermutation(i), f = Nr({ inputs: { x: l }, backend: t10, attrs: { perm: m } }); - return t10.disposeData(l.dataId), t10.disposeData(p.dataId), f; + let m = S.getUndoAxesPermutation(i), d = Nr({ inputs: { x: l }, backend: t6, attrs: { perm: m } }); + return t6.disposeData(l.dataId), t6.disposeData(p.dataId), d; } return l; } -function uoe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return px(Ku.Prod, n, t10, s, a, i); +function qre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return Zg(Ku.Prod, n, t6, s, a, i); } -var XL = { kernelName: hn, backendName: "webgpu", kernelFunc: uoe }; -function poe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return px(Ku.Sum, n, t10, s, a, i); +var nL = { kernelName: jo, backendName: "webgpu", kernelFunc: qre }; +function Kre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return Zg(Ku.Sum, n, t6, s, a, i); } -var YL = { kernelName: gn, backendName: "webgpu", kernelFunc: poe }; -var cx = class { - constructor(e, t10) { - this.variableNames = ["x"], this.workGroupSize = [64, 1, 1], this.size = true, this.uniforms = "blockSize : i32,", this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = `depthToSpace_${t10}`, this.dataFormat = t10; +var sL = { kernelName: Xo, backendName: "webgpu", kernelFunc: Kre }; +function jre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o, p = n.shape.length === 1, c = y.sizeFromShape(s.shape) > 0, l = s.dtype, m = p ? [n.shape[0]] : [n.shape[0], n.shape[1]], d = p ? [a] : [n.shape[0], a], f = dr({ backend: t6, attrs: { shape: d, value: 0, dtype: l } }), h = new kc(m, c, i), g = [{ type: "int32", data: [a] }], x = c ? [n, s] : [n]; + return t6.runWebGPUProgram(h, x, l, g, f); +} +var aL = { kernelName: ti, backendName: "webgpu", kernelFunc: jre }; +var Jg = class { + constructor(e, t6) { + this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.uniforms = "blockSize : i32,", this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `depthToSpace_${t6}`, this.dataFormat = t6; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -29775,17 +29104,17 @@ var cx = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function coe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, f = c / (s * s), d = a === "NHWC" ? [i, l, m, f] : [i, f, l, m], h = [{ type: "int32", data: [s] }], g = new cx(d, a); - return t10.runWebGPUProgram(g, [n], n.dtype, h); +function Xre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = [{ type: "int32", data: [s] }], g = new Jg(f, a); + return t6.runWebGPUProgram(g, [n], n.dtype, h); } -var QL = { kernelName: yn, backendName: "webgpu", kernelFunc: coe }; -var lx = class { - constructor(e, t10, o, n = false, s = null, a = false) { - this.variableNames = ["x", "W"], this.uniforms = "pad : vec2, inDims : vec2,", this.workGroupSize = [16, 16, 1], this.outputShape = e, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), n && this.variableNames.push("bias"), a && this.variableNames.push("preluActivationWeights"), this.addBias = n, this.activation = s, this.hasPreluActivation = a, this.filterHeight = t10, this.filterWidth = o, this.shaderKey = `depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`; +var iL = { kernelName: Qo, backendName: "webgpu", kernelFunc: Xre }; +var ex = class { + constructor(e, t6, o, n = false, s = null, a = false) { + this.variableNames = ["x", "W"], this.uniforms = "pad : vec2, inDims : vec2,", this.workgroupSize = [16, 16, 1], this.outputShape = e, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), n && this.variableNames.push("bias"), a && this.variableNames.push("preluActivationWeights"), this.addBias = n, this.activation = s, this.hasPreluActivation = a, this.filterHeight = t6, this.filterWidth = o, this.shaderKey = `depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`; } getUserCode() { - let e = this.filterWidth * this.filterHeight, t10 = this.workGroupSize[0] * this.workGroupSize[1] * this.workGroupSize[2], o = this.workGroupSize[1] + this.filterHeight - 1, n = this.workGroupSize[0] + this.filterWidth - 1; + let e = this.filterWidth * this.filterHeight, t6 = this.workgroupSize[0] * this.workgroupSize[1] * this.workgroupSize[2], o = this.workgroupSize[1] + this.filterHeight - 1, n = this.workgroupSize[0] + this.filterWidth - 1; return ` ${ur(this.activation, this.hasPreluActivation, false, 4)} @@ -29800,15 +29129,7 @@ var lx = class { return value; } - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(local_invocation_index) LocalIndex: u32, - @builtin(num_workgroups) NumWorkgroups: vec3) { - localId = LocalId; - globalId = GlobalId; - let localIndex = i32(LocalIndex); - numWorkgroups = NumWorkgroups; + ${se()} { let coords = getOutputCoords(); let batch = coords[0]; let xRCCorner = vec2(coords.zw) - uniforms.pad; @@ -29823,8 +29144,8 @@ var lx = class { let localCol = i32(localId.x); // Load one tile of X into local memory. - for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workGroupSize[1]}) { - for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workGroupSize[0]}) { + for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workgroupSize[1]}) { + for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) { let rowOffset = inputRow - localRow; let colOffset = inputCol - localCol; mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset); @@ -29832,8 +29153,8 @@ var lx = class { } // Load one tile of W into local memory. - var wIndex = localIndex; - ${e < t10 ? `if (wIndex < ${e})` : `for(; wIndex < ${e}; wIndex = wIndex + ${t10})`} + var wIndex = i32(localIndex); + ${e < t6 ? `if (wIndex < ${e})` : `for(; wIndex < ${e}; wIndex = wIndex + ${t6})`} { let wRow = wIndex / ${this.filterWidth}; @@ -29851,7 +29172,7 @@ var lx = class { value = fma(xVal, wVal, value); } } - ${Kr(this.addBias, this.activation)} + ${Hr(this.addBias, this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } @@ -29859,9 +29180,9 @@ var lx = class { `; } }; -var Dc = class { - constructor(e, t10 = false, o = null, n = false) { - this.variableNames = ["x", "W"], this.uniforms = "pad : vec2, inDims : vec2,", this.workGroupSize = [4, 4, 4], this.workPerThread = 4, this.isVec4 = true, this.outputShape = e.outShape, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [4, this.workPerThread, 1]), x.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = e, this.addBias = t10, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`; +var Tc = class { + constructor(e, t6 = false, o = null, n = false) { + this.variableNames = ["x", "W"], this.uniforms = "pad : vec2, inDims : vec2,", this.workgroupSize = [4, 4, 4], this.workPerThread = 4, this.isVec4 = true, this.outputShape = e.outShape, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [4, this.workPerThread, 1]), y.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = e, this.addBias = t6, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`; } getUserCode() { let e = (this.workPerThread - 1) * this.convInfo.strideWidth + this.convInfo.filterWidth; @@ -29877,8 +29198,7 @@ var Dc = class { const strideHeight = ${this.convInfo.strideHeight}; const strideWidth = ${this.convInfo.strideWidth}; - ${Ri()} - fn _start(@builtin(global_invocation_id) globalId: vec3) { + ${se()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; let c = i32(globalId.y) * ${this.workPerThread}; @@ -29913,7 +29233,7 @@ var Dc = class { let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${Kr(this.addBias, this.activation)} + ${Hr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } @@ -29921,136 +29241,196 @@ var Dc = class { `; } }; -var Pc = class { - constructor(e, t10 = false, o = null, n = false) { +var _c = class { + constructor(e, t6 = false, o = null, n = false) { this.variableNames = ["x", "W"], this.uniforms = `pad : vec2, inDims : vec2, filterHeight : i32, - filterWidth : i32, stride : vec2, dilation : vec2,`, this.workGroupSize = [256, 1, 1], this.outputShape = e.outShape, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = e, this.addBias = t10, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwise_${this.activation}_${this.isChannelsLast}`; + filterWidth : i32, stride : vec2, dilation : vec2,`, this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", t6 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = e, this.addBias = t6, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwise_${this.activation}_${this.isChannelsLast}`; } getUserCode() { let e = this.isChannelsLast ? "getX(batch, xR, xC, d1);" : "getX(batch, d1, xR, xC);"; return ` ${ur(this.activation, this.hasPreluActivation, false, 4)} - ${ue()} { - let coords = getOutputCoords(); - let batch = coords[0]; - let xRCCorner = vec2(coords.${this.isChannelsLast ? "yz" : "zw"}) * uniforms.stride - uniforms.pad; - let d2 = coords[${this.isChannelsLast ? 3 : 1}]; - let channelMul = uniforms.wShape[3]; - let d1 = d2 / channelMul; - let q = d2 % channelMul; + ${se("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + let batch = coords[0]; + let xRCCorner = vec2(coords.${this.isChannelsLast ? "yz" : "zw"}) * uniforms.stride - uniforms.pad; + let d2 = coords[${this.isChannelsLast ? 3 : 1}]; + let channelMul = uniforms.wShape[3]; + let d1 = d2 / channelMul; + let q = d2 % channelMul; - let inputRowStart = xRCCorner.x; - let inputColStart = xRCCorner.y; - let inputRowEnd = inputRowStart + uniforms.filterHeight * - uniforms.dilation[0]; - let inputColEnd = inputColStart + uniforms.filterWidth * - uniforms.dilation[1]; + let inputRowStart = xRCCorner.x; + let inputColStart = xRCCorner.y; + let inputRowEnd = inputRowStart + uniforms.filterHeight * + uniforms.dilation[0]; + let inputColEnd = inputColStart + uniforms.filterWidth * + uniforms.dilation[1]; - // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get - // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all - // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. - // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. - var value = 0.0; + // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get + // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all + // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. + // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. + var value = 0.0; - // Extract if checking out of for loop for performance. - if (inputRowStart >= 0 && inputColStart >= 0 && - inputRowEnd < uniforms.inDims[0] && - inputColEnd < uniforms.inDims[1]) { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + // Extract if checking out of for loop for performance. + if (inputRowStart >= 0 && inputColStart >= 0 && + inputRowEnd < uniforms.inDims[0] && + inputColEnd < uniforms.inDims[1]) { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } - } - } else { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + } else { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - if (xR < 0 || xR >= uniforms.inDims[0]) { - continue; - } - - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; - - if (xC < 0 || xC >= uniforms.inDims[1]) { + if (xR < 0 || xR >= uniforms.inDims[0]) { continue; } - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; + + if (xC < 0 || xC >= uniforms.inDims[1]) { + continue; + } + + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } } - } - ${Kr(this.addBias, this.activation)} - if (coordsInBounds4D(coords, uniforms.outShape)) { + ${Hr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } `; } }; -function loe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = I.convertConv2DDataFormat(p), m = u; +function Yre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = S.convertConv2DDataFormat(p), m = u; m == null && (m = [1, 1]); - let f = I.computeConv2DInfo(n.shape, s.shape, a, m, i, c, true, l), d = [{ type: "int32", data: [f.padInfo.top, f.padInfo.left] }, { type: "int32", data: [f.inHeight, f.inWidth] }], h = f.dataFormat === "channelsLast", g; - return !h && f.inHeight > 16 && f.inWidth > 16 && f.strideHeight === 1 && f.strideWidth === 1 && f.dilationWidth === 1 && f.dilationHeight === 1 && f.inChannels === f.outChannels ? g = new lx(f.outShape, f.filterHeight, f.filterWidth) : h && f.inHeight > 4 && f.inWidth > 4 && f.strideWidth <= 2 && f.inChannels === f.outChannels && f.dilationHeight === 1 && f.dilationWidth === 1 && f.inChannels % 4 === 0 ? g = new Dc(f) : (g = new Pc(f), d.push({ type: "int32", data: [f.filterHeight] }, { type: "int32", data: [f.filterWidth] }, { type: "int32", data: [f.strideHeight, f.strideWidth] }, { type: "int32", data: [f.dilationHeight, f.dilationWidth] })), t10.runWebGPUProgram(g, [n, s], n.dtype, d); + let d = S.computeConv2DInfo(n.shape, s.shape, a, m, i, c, true, l), f = [{ type: "int32", data: [d.padInfo.top, d.padInfo.left] }, { type: "int32", data: [d.inHeight, d.inWidth] }], h = d.dataFormat === "channelsLast", g; + return !h && d.inHeight > 16 && d.inWidth > 16 && d.strideHeight === 1 && d.strideWidth === 1 && d.dilationWidth === 1 && d.dilationHeight === 1 && d.inChannels === d.outChannels ? g = new ex(d.outShape, d.filterHeight, d.filterWidth) : h && d.outHeight > 4 && d.outWidth > 4 && d.strideWidth <= 2 && d.inChannels === d.outChannels && d.dilationHeight === 1 && d.dilationWidth === 1 && d.inChannels % 4 === 0 ? g = new Tc(d) : (g = new _c(d), f.push({ type: "int32", data: [d.filterHeight] }, { type: "int32", data: [d.filterWidth] }, { type: "int32", data: [d.strideHeight, d.strideWidth] }, { type: "int32", data: [d.dilationHeight, d.dilationWidth] })), t6.runWebGPUProgram(g, [n, s], n.dtype, f); } -var ZL = { kernelName: bn, backendName: "webgpu", kernelFunc: loe }; -var BS = it({ opType: ye.MUL, cpuKernelImpl: sL, supportsComplex: true }); -var JL = { kernelName: ho, backendName: "webgpu", kernelFunc: BS }; -function rm(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; - return Ys(n, s, a, "sum", t10); +var uL = { kernelName: Zo, backendName: "webgpu", kernelFunc: Yre }; +var dI = ot({ opType: ye.MUL, cpuKernelImpl: aM, supportsComplex: true }); +var pL = { kernelName: kn, backendName: "webgpu", kernelFunc: dI }; +function Hl(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; + return qr(n, s, a, "sum", t6); } -var eB = { kernelName: jn, backendName: "webgpu", kernelFunc: rm }; -function moe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = I.decodeEinsumEquation(n, s.length); - I.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: c } = I.getEinsumComputePath(i, p), l = c.length, m = null, f = a.length, d = []; +var cL = { kernelName: Hn, backendName: "webgpu", kernelFunc: Hl }; +function Qre(r) { + let { inputs: e, backend: t6, attrs: o } = r, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = S.decodeEinsumEquation(n, s.length); + S.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = S.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; for (let h = 0; h < l; ++h) { for (let g of c[h]) { - let { permutationIndices: y, expandDims: b } = I.getEinsumPermutation(f, p[g]), C; - I.isIdentityPermutation(y) ? C = s[g] : (C = Nr({ inputs: { x: s[g] }, backend: t10, attrs: { perm: y } }), d.push(C)); + let { permutationIndices: x, expandDims: b } = S.getEinsumPermutation(d, p[g]), C; + S.isIdentityPermutation(x) ? C = s[g] : (C = Nr({ inputs: { x: s[g] }, backend: t6, attrs: { perm: x } }), f.push(C)); let w = C.shape.slice(); for (let k = 0; k < b.length; ++k) w.splice(b[k], 0, 1); - x.arraysEqual(C.shape, w) || (C = xe({ inputs: { x: C }, backend: t10, attrs: { shape: w } }), d.push(C)), m === null ? m = C : (m = BS({ inputs: { a: C, b: m }, backend: t10 }), d.push(m)); + y.arraysEqual(C.shape, w) || (C = de({ inputs: { x: C }, backend: t6, attrs: { shape: w } }), f.push(C)), m === null ? m = C : (m = dI({ inputs: { a: C, b: m }, backend: t6 }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = rm({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - f), keepDims: false } }), d.push(m)), f--); + h < l - 1 && (u[h] >= 0 && (m = Hl({ inputs: { x: m }, backend: t6, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of d) - h !== m && t10.disposeData(h.dataId); + for (let h of f) + h !== m && t6.disposeData(h.dataId); return m; } -var tB = { kernelName: Xa, backendName: "webgpu", kernelFunc: moe }; -var foe = Ge({ opType: pe.ELU }); -var rB = { kernelName: In, backendName: "webgpu", kernelFunc: foe }; -var doe = it({ opType: ye.EQUAL, dtype: "bool", cpuKernelImpl: HM }); -var oB = { kernelName: oo, backendName: "webgpu", kernelFunc: doe }; -var VS = Ge({ opType: pe.EXP, cpuKernelImpl: qM, dtype: "float32" }); -var nB = { kernelName: no, backendName: "webgpu", kernelFunc: VS }; -function mx(r) { - let { inputs: e, attrs: t10, backend: o } = r, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; - return n < 0 && (x.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), xe({ inputs: { x: s }, backend: o, attrs: { shape: i } }); +var lL = { kernelName: ri, backendName: "webgpu", kernelFunc: Qre }; +var Zre = Se({ opType: Q.ELU }); +var mL = { kernelName: en, backendName: "webgpu", kernelFunc: Zre }; +var Jre = ot({ opType: ye.EQUAL, dtype: "bool", cpuKernelImpl: q3 }); +var dL = { kernelName: tn, backendName: "webgpu", kernelFunc: Jre }; +var eoe = Se({ opType: Q.ERF }); +var fL = { kernelName: ma, backendName: "webgpu", kernelFunc: eoe }; +var fI = Se({ opType: Q.EXP, cpuKernelImpl: K3, dtype: "float32" }); +var hL = { kernelName: rn, backendName: "webgpu", kernelFunc: fI }; +function tx(r) { + let { inputs: e, attrs: t6, backend: o } = r, { dim: n } = t6, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; + return n < 0 && (y.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), de({ inputs: { x: s }, backend: o, attrs: { shape: i } }); } -var sB = { kernelName: xs, backendName: "webgpu", kernelFunc: mx }; -var hoe = Ge({ opType: pe.EXPM1, cpuKernelImpl: KM }); -var aB = { kernelName: wn, backendName: "webgpu", kernelFunc: hoe }; -var fx = class { - constructor(e) { - this.outputShape = [], this.variableNames = ["x"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "flipLeftRight"; +var gL = { kernelName: bs, backendName: "webgpu", kernelFunc: tx }; +var toe = Se({ opType: Q.EXPM1, cpuKernelImpl: j3 }); +var xL = { kernelName: da, backendName: "webgpu", kernelFunc: toe }; +var ql = class { + constructor(e, t6) { + this.variableNames = ["real", "imag"], this.outputShape = [], this.uniforms = "exponentMultiplier : f32, denominator: f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.component = e, this.shaderKey = `fft_${e}`; } getUserCode() { return ` - ${ue("index")} { + fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 { + ${this.component === "real" ? "return real * expR - imag * expI;" : "return real * expI + imag * expR;"} + } + + fn mulMatDFT(batch: i32, index: i32) -> f32 { + let indexRatio = f32(index) / f32(uniforms.realShape[1]); + let exponentMultiplierTimesIndexRatio = + uniforms.exponentMultiplier * indexRatio; + + var result = 0.0; + + for (var i = 0; i < uniforms.realShape[1]; i = i + 1) { + // x = (-2|2 * PI / N) * index * i; + let x = exponentMultiplierTimesIndexRatio * f32(i); + let expR = cos(x); + let expI = sin(x); + let real = getReal(batch, i); + let imag = getImag(batch, i); + + result = result + + unaryOpComplex(real, expR, imag, expI) / uniforms.denominator; + } + + return result; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); + } + } + `; + } +}; +function rx(r, e, t6) { + let o = t6.tensorMap.get(r.dataId), n = y.sizeFromShape(r.shape), s = r.shape[r.shape.length - 1], a = n / s, i = [], p = de({ inputs: { x: r }, backend: t6, attrs: { shape: [a, s] } }); + i.push(p); + let u = p.shape, c = new ql("real", u), l = new ql("imag", u), m = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: u }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: u }], d = e ? 2 * Math.PI : -2 * Math.PI, f = e ? u[1] : 1, h = [{ type: "float32", data: [d] }, { type: "float32", data: [f] }], g = t6.runWebGPUProgram(c, m, "float32", h); + i.push(g); + let x = t6.runWebGPUProgram(l, m, "float32", h); + i.push(x); + let b = po({ inputs: { real: g, imag: x }, backend: t6 }); + i.push(b); + let C = de({ inputs: { x: b }, backend: t6, attrs: { shape: r.shape } }); + return i.forEach((w) => t6.disposeData(w.dataId)), C; +} +function roe(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e; + return rx(o, false, t6); +} +var yL = { kernelName: oi, backendName: "webgpu", kernelFunc: roe }; +var ox = class { + constructor(e) { + this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "flipLeftRight"; + } + getUserCode() { + return ` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordX = uniforms.xShape[2] - coords[2] - 1; @@ -30061,23 +29441,23 @@ var fx = class { `; } }; -var iB = { kernelName: Sn, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: e }) => { - let { image: t10 } = r, o = e, n = new fx(t10.shape); - return o.runWebGPUProgram(n, [t10], t10.dtype); +var bL = { kernelName: on, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: e }) => { + let { image: t6 } = r, o = e, n = new ox(t6.shape); + return o.runWebGPUProgram(n, [t6], t6.dtype); } }; -var goe = Ge({ opType: pe.FLOOR, cpuKernelImpl: jM }); -var uB = { kernelName: so, backendName: "webgpu", kernelFunc: goe }; -var xoe = it({ opType: ye.INT_DIV, dtype: "int32" }); -var pB = { kernelName: vn, backendName: "webgpu", kernelFunc: xoe }; -var dx = class { - constructor(e, t10, o = false) { - this.isFromPixels = true, this.outputShape = [0], this.variableNames = [], this.workGroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [t10, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; +var ooe = Se({ opType: Q.FLOOR, cpuKernelImpl: X3 }); +var CL = { kernelName: nn, backendName: "webgpu", kernelFunc: ooe }; +var noe = ot({ opType: ye.INT_DIV, dtype: "int32" }); +var SL = { kernelName: sn, backendName: "webgpu", kernelFunc: noe }; +var nx = class { + constructor(e, t6, o = false) { + this.isFromPixels = true, this.outputShape = [0], this.variableNames = [], this.workgroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [t6, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; } getUserCode() { let e = this.importVideo ? "textureLoad(src, vec2(coords.yx));" : "textureLoad(src, vec2(coords.yx), 0)"; return ` @binding(1) @group(0) var src: ${this.importVideo ? "texture_external" : "texture_2d"}; - ${ue("index")} { + ${se("index")} { let flatIndex = index * uniforms.numChannels; if (flatIndex < uniforms.size) { let coords = getCoordsFromIndex(flatIndex); @@ -30090,36 +29470,36 @@ var dx = class { `; } }; -var cB = { kernelName: Zi, backendName: "webgpu", kernelFunc: yoe }; -var Oc; -var zS = P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -var hx = /* @__PURE__ */ new Map(); -function yoe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { pixels: n } = e, { numChannels: s } = o; +var wL = { kernelName: Zi, backendName: "webgpu", kernelFunc: soe }; +var Ec; +var hI = O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +var sx = /* @__PURE__ */ new Map(); +function soe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { pixels: n } = e, { numChannels: s } = o; if (n == null) throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); - let a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, p = typeof HTMLCanvasElement != "undefined" && n instanceof HTMLCanvasElement || typeof OffscreenCanvas != "undefined" && n instanceof OffscreenCanvas, u = typeof ImageBitmap != "undefined" && n instanceof ImageBitmap, [c, l] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], m = [l, c, s], f = false, d = a || i; - if (u || p || d) { + let a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, p = typeof HTMLCanvasElement != "undefined" && n instanceof HTMLCanvasElement || typeof OffscreenCanvas != "undefined" && n instanceof OffscreenCanvas, u = typeof ImageBitmap != "undefined" && n instanceof ImageBitmap, [c, l] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], m = [l, c, s], d = false, f = a || i; + if (u || p || f) { let b; - if (f) { + if (d) { let D = n; - if (!hx.has(D) || hx.get(D).expired) { - let O = { source: D }; - hx.set(D, t10.device.importExternalTexture(O)); + if (!sx.has(D) || sx.get(D).expired) { + let P = { source: D }; + sx.set(D, t6.device.importExternalTexture(P)); } - b = { width: c, height: l, format: null, usage: null, texture: hx.get(D) }; + b = { width: c, height: l, format: null, usage: null, texture: sx.get(D) }; } else { - if (d) { - let L = P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); - (Oc == null || L !== zS) && (zS = L, Oc = document.createElement("canvas").getContext("2d", { willReadFrequently: zS })), Oc.canvas.width = c, Oc.canvas.height = l, Oc.drawImage(n, 0, 0, c, l), n = Oc.canvas; + if (f) { + let L = O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); + (Ec == null || L !== hI) && (hI = L, Ec = document.createElement("canvas").getContext("2d", { willReadFrequently: hI })), Ec.canvas.width = c, Ec.canvas.height = l, Ec.drawImage(n, 0, 0, c, l), n = Ec.canvas; } - let D = GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, O = "rgba8unorm", M = t10.textureManager.acquireTexture(m[1], m[0], O, D); - t10.queue.copyExternalImageToTexture({ source: n }, { texture: M }, [m[1], m[0]]), b = { width: c, height: l, format: O, usage: D, texture: M }; + let D = GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, P = "rgba8unorm", M = t6.textureManager.acquireTexture(m[1], m[0], P, D); + t6.queue.copyExternalImageToTexture({ source: n }, { texture: M }, [m[1], m[0]]), b = { width: c, height: l, format: P, usage: D, texture: M }; } - let C = x.sizeFromShape(m), w = x.computeStrides(m), k = new dx(m, s, f), _ = [{ type: "uint32", data: [C] }, { type: "uint32", data: [s] }, { type: "uint32", data: [...w] }], E = t10.makeTensorInfo([l, c], "int32"), R = t10.tensorMap.get(E.dataId); - R.resourceInfo = b; - let A = t10.runWebGPUProgram(k, [E], "int32", _); - return t10.disposeData(E.dataId), A; + let C = y.sizeFromShape(m), w = y.computeStrides(m), k = new nx(m, s, d), _ = [{ type: "uint32", data: [C] }, { type: "uint32", data: [s] }, { type: "uint32", data: [...w] }], $ = t6.makeTensorInfo([l, c], "int32"), A = t6.tensorMap.get($.dataId); + A.resourceInfo = b; + let R = t6.runWebGPUProgram(k, [$], "int32", _); + return t6.disposeData($.dataId), R; } let h = n.data, g = h; if (s != null && s !== 4) { @@ -30128,26 +29508,26 @@ function yoe(r) { for (let w = 0; w < b; w++) w % 4 < s && (g[C++] = h[w]); } - let y = t10.makeTensorInfo(m, "int32", new Int32Array(g)); - return t10.uploadToGPU(y.dataId), y; + let x = t6.makeTensorInfo(m, "int32", new Int32Array(g)); + return t6.uploadToGPU(x.dataId), x; } -var gx = class { - constructor(e, t10, o, n, s) { - this.uniforms = "varianceEpsilon : f32,", this.workGroupSize = [128, 1, 1], this.size = true, this.variableNames = ["x", "mean", "variance"], I.assertAndGetBroadcastShape(e, t10), I.assertAndGetBroadcastShape(e, o), this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), n != null && (I.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset")), s != null && (I.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale")), this.offsetShape = n, this.scaleShape = s, this.shaderKey = "batchNorm"; +var ax = class { + constructor(e, t6, o, n, s) { + this.uniforms = "varianceEpsilon : f32,", this.workgroupSize = [128, 1, 1], this.size = true, this.variableNames = ["x", "mean", "variance"], S.assertAndGetBroadcastShape(e, t6), S.assertAndGetBroadcastShape(e, o), this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), n != null && (S.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset")), s != null && (S.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale")), this.offsetShape = n, this.scaleShape = s, this.shaderKey = "batchNorm"; } getUserCode() { let e = "0.0"; this.offsetShape != null && (e = "getOffsetByOutputIndex(index)"); - let t10 = "1.0"; - return this.scaleShape != null && (t10 = "getScaleByOutputIndex(index)"), ` - ${ue("index")} { + let t6 = "1.0"; + return this.scaleShape != null && (t6 = "getScaleByOutputIndex(index)"), ` + ${se("index")} { if (index < uniforms.size) { let xValue = getXByOutputIndex(index); let meanValue = getMeanByOutputIndex(index); let varianValue = getVarianceByOutputIndex(index); let offsetValue = ${e}; - let scaleValue = ${t10}; + let scaleValue = ${t6}; let inv = scaleValue * inverseSqrt(varianValue + f32(uniforms.varianceEpsilon)); setOutputAtIndex(index,dot(vec3(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } @@ -30155,36 +29535,36 @@ var gx = class { `; } }; -var lB = { kernelName: kn, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { x: o, scale: n, offset: s, mean: a, variance: i } = r, { varianceEpsilon: p } = e, u = t10, c = [o, a, i], l = null; +var IL = { kernelName: an, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { x: o, scale: n, offset: s, mean: a, variance: i } = r, { varianceEpsilon: p } = e, u = t6, c = [o, a, i], l = null; s != null && (l = s.shape, c.push(s)); let m = null; n != null && (m = n.shape, c.push(n)); - let f = new gx(o.shape, a.shape, i.shape, l, m), d = [{ type: "float32", data: [p] }]; - return u.runWebGPUProgram(f, c, o.dtype, d); + let d = new ax(o.shape, a.shape, i.shape, l, m), f = [{ type: "float32", data: [p] }]; + return u.runWebGPUProgram(d, c, o.dtype, f); } }; -function boe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: f, leakyreluAlpha: d } = o, h = I.convertConv2DDataFormat(c), g = I.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h); - return sx({ x: n, filter: s, convInfo: g, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: d, activation: f }); +function aoe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = S.convertConv2DDataFormat(c), g = S.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h); + return jg({ x: n, filter: s, convInfo: g, backend: t6, bias: a, preluActivationWeights: i, leakyreluAlpha: f, activation: d }); } -var mB = { kernelName: Do, backendName: "webgpu", kernelFunc: boe }; -function Coe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: f } = o, d = c; - d == null && (d = [1, 1]), x.assert(I.eitherStridesOrDilationsAreOne(p, d), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${d}'`); - let h = I.computeConv2DInfo(n.shape, s.shape, p, d, u, l, true), g = [n, s], y = a != null, b = i != null; - y && g.push(a), b && g.push(i); +var vL = { kernelName: ho, backendName: "webgpu", kernelFunc: aoe }; +function ioe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = c; + f == null && (f = [1, 1]), y.assert(S.eitherStridesOrDilationsAreOne(p, f), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`); + let h = S.computeConv2DInfo(n.shape, s.shape, p, f, u, l, true), g = [n, s], x = a != null, b = i != null; + x && g.push(a), b && g.push(i); let C = [{ type: "int32", data: [h.padInfo.top, h.padInfo.left] }, { type: "int32", data: [h.inHeight, h.inWidth] }], w; - return h.inHeight > 4 && h.inWidth > 4 && h.strideWidth <= 2 && h.inChannels === h.outChannels && h.dilationHeight === 1 && h.dilationWidth === 1 && h.inChannels % 4 === 0 ? w = new Dc(h, y, m, b) : (w = new Pc(h, y, m, b), C.push({ type: "int32", data: [h.filterHeight] }, { type: "int32", data: [h.filterWidth] }, { type: "int32", data: [h.strideHeight, h.strideWidth] }, { type: "int32", data: [h.dilationHeight, h.dilationWidth] })), m === "leakyrelu" && (C.push({ type: "float32", data: [f] }), w.uniforms += " alpha : f32,"), t10.runWebGPUProgram(w, g, "float32", C); + return h.outHeight > 4 && h.outWidth > 4 && h.strideWidth <= 2 && h.inChannels === h.outChannels && h.dilationHeight === 1 && h.dilationWidth === 1 && h.inChannels % 4 === 0 ? w = new Tc(h, x, m, b) : (w = new _c(h, x, m, b), C.push({ type: "int32", data: [h.filterHeight] }, { type: "int32", data: [h.filterWidth] }, { type: "int32", data: [h.strideHeight, h.strideWidth] }, { type: "int32", data: [h.dilationHeight, h.dilationWidth] })), m === "leakyrelu" && (C.push({ type: "float32", data: [d] }), w.uniforms += " alpha : f32,"), t6.runWebGPUProgram(w, g, "float32", C); } -var fB = { kernelName: Po, backendName: "webgpu", kernelFunc: Coe }; -var xx = class { - constructor(e, t10) { - this.variableNames = ["A", "indices"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = `gathernd_${e}`, this.sliceDim = e, this.uniforms = `sliceDim : i32, strides : ${At(e)},`; +var kL = { kernelName: go, backendName: "webgpu", kernelFunc: ioe }; +var ix = class { + constructor(e, t6) { + this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `gathernd_${e}`, this.sliceDim = e, this.uniforms = `sliceDim : i32, strides : ${Rt(e)},`; } getUserCode() { let e; return this.sliceDim > 1 ? e = "uniforms.strides[j]" : e = "uniforms.strides", ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var flattenIndex = 0; @@ -30200,24 +29580,24 @@ var xx = class { `; } }; -function Ioe(r) { - let { inputs: e, backend: t10 } = r, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = x.sizeFromShape(o.shape), [p, u, c, l] = I.prepareAndValidate(o, n), m = xe({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), f = xe({ inputs: { x: o }, backend: t10, attrs: { shape: [x.sizeFromShape(o.shape) / c, c] } }); - if (t10.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let b = t10.readSync(n.dataId), C = t10.bufferSync(o), w = XM(b, C, o.dtype, u, a, c, l, o.shape, i); - return t10.makeTensorInfo(p, o.dtype, w.values); +function uoe(r) { + let { inputs: e, backend: t6 } = r, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, c, l] = S.prepareAndValidate(o, n), m = de({ inputs: { x: n }, backend: t6, attrs: { shape: [u, a] } }), d = de({ inputs: { x: o }, backend: t6, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); + if (t6.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { + let b = t6.readSync(n.dataId), C = t6.bufferSync(o), w = Y3(b, C, o.dtype, u, a, c, l, o.shape, i); + return t6.makeTensorInfo(p, o.dtype, w.values); } - let d = new xx(a, [u, c]), h = [{ type: "int32", data: [a] }, { type: "int32", data: l }], g = t10.runWebGPUProgram(d, [f, m], f.dtype, h), y = xe({ inputs: { x: g }, backend: t10, attrs: { shape: p } }); - return t10.disposeData(m.dataId), t10.disposeData(f.dataId), t10.disposeData(g.dataId), y; + let f = new ix(a, [u, c]), h = [{ type: "int32", data: [a] }, { type: "int32", data: l }], g = t6.runWebGPUProgram(f, [d, m], d.dtype, h), x = de({ inputs: { x: g }, backend: t6, attrs: { shape: p } }); + return t6.disposeData(m.dataId), t6.disposeData(d.dataId), t6.disposeData(g.dataId), x; } -var dB = { kernelName: Tn, backendName: "webgpu", kernelFunc: Ioe }; -var yx = class { - constructor(e, t10) { - this.variableNames = ["A", "indices"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e.slice(), this.aShape = e, this.outputShape = t10, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "gather"; +var NL = { kernelName: un, backendName: "webgpu", kernelFunc: uoe }; +var ux = class { + constructor(e, t6) { + this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.slice(), this.aShape = e, this.outputShape = t6, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "gather"; } getUserCode() { - let e = woe(this.aShape); + let e = poe(this.aShape); return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); let indexZ = i32(getIndices(resRC.x, resRC.z)); @@ -30228,73 +29608,84 @@ var yx = class { `; } }; -function woe(r) { - let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], t10 = []; +function poe(r) { + let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], t6 = []; for (let o = 0; o < r.length; o++) - o === 2 ? t10.push("indexZ") : t10.push(`${e[o]}`); - return t10.join(); + o === 2 ? t6.push("indexZ") : t6.push(`${e[o]}`); + return t6.join(); } -function WS(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = x.parseAxisParam(a, n.shape)[0], u = I.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = x.sizeFromShape(s.shape), l = [], m = xe({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), f = xe({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, c / u.batchSize] } }); - l.push(m), l.push(f); - let d = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; - if (t10.shouldExecuteOnCPU([n, s])) { - let C = t10.tensorMap.get(f.dataId).values, w = ne(f.shape, f.dtype, C), _ = t10.tensorMap.get(m.dataId).values, E = ne(m.shape, m.dtype, _), R = YM(E, w, d); - return l.forEach((A) => t10.disposeData(A.dataId)), t10.makeTensorInfo(u.outputShape, R.dtype, R.values); +function gI(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = S.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = de({ inputs: { x: n }, backend: t6, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = de({ inputs: { x: s }, backend: t6, attrs: { shape: [u.batchSize, c / u.batchSize] } }); + l.push(m), l.push(d); + let f = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; + if (t6.shouldExecuteOnCPU([n, s])) { + let C = t6.tensorMap.get(d.dataId).values, w = le(d.shape, d.dtype, C), _ = t6.tensorMap.get(m.dataId).values, $ = le(m.shape, m.dtype, _), A = Q3($, w, f); + return l.forEach((R) => t6.disposeData(R.dataId)), t6.makeTensorInfo(u.outputShape, A.dtype, A.values); } - let h = new yx(m.shape, d), g = t10.runWebGPUProgram(h, [m, f], m.dtype); + let h = new ux(m.shape, f), g = t6.runWebGPUProgram(h, [m, d], m.dtype); l.push(g); - let y = xe({ inputs: { x: g }, backend: t10, attrs: { shape: u.outputShape } }); - return l.forEach((b) => t10.disposeData(b.dataId)), y; + let x = de({ inputs: { x: g }, backend: t6, attrs: { shape: u.outputShape } }); + return l.forEach((b) => t6.disposeData(b.dataId)), x; } -var hB = { kernelName: bs, backendName: "webgpu", kernelFunc: WS }; -var Soe = it({ opType: ye.GREATER, cpuKernelImpl: ZM, dtype: "bool" }); -var gB = { kernelName: ao, backendName: "webgpu", kernelFunc: Soe }; -var voe = it({ opType: ye.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: QM }); -var xB = { kernelName: io, backendName: "webgpu", kernelFunc: voe }; -var koe = Ge({ opType: pe.IS_NAN, dtype: "bool" }); -var yB = { kernelName: ia, backendName: "webgpu", kernelFunc: koe }; -function Toe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new Zo(n.shape, pe.LEAKYRELU); - return i.uniforms = "alpha : f32,", t10.runWebGPUProgram(i, [n], "float32", a); +var TL = { kernelName: Ss, backendName: "webgpu", kernelFunc: gI }; +var coe = ot({ opType: ye.GREATER, cpuKernelImpl: J3, dtype: "bool" }); +var _L = { kernelName: pn, backendName: "webgpu", kernelFunc: coe }; +var loe = ot({ opType: ye.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: Z3 }); +var EL = { kernelName: cn, backendName: "webgpu", kernelFunc: loe }; +function moe(r) { + let { inputs: e, backend: t6 } = r, { input: o } = e; + return rx(o, true, t6); } -var bB = { kernelName: Nn, backendName: "webgpu", kernelFunc: Toe }; -var Noe = it({ opType: ye.LESS, dtype: "bool", cpuKernelImpl: eL }); -var CB = { kernelName: po, backendName: "webgpu", kernelFunc: Noe }; -var _oe = it({ opType: ye.LESS_EQUAL, dtype: "bool", cpuKernelImpl: JM }); -var IB = { kernelName: co, backendName: "webgpu", kernelFunc: _oe }; -var Eoe = Ge({ opType: pe.LOG, cpuKernelImpl: tL }); -var wB = { kernelName: lo, backendName: "webgpu", kernelFunc: Eoe }; -var $oe = it({ opType: ye.LOGICAL_AND, dtype: "bool" }); -var SB = { kernelName: _n, backendName: "webgpu", kernelFunc: $oe }; -var Roe = Ge({ opType: pe.LOGICAL_NOT }); -var vB = { kernelName: En, backendName: "webgpu", kernelFunc: Roe }; -var Aoe = it({ opType: ye.MAX, cpuKernelImpl: oL }); -var kB = { kernelName: mo, backendName: "webgpu", kernelFunc: Aoe }; -function Foe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = I.computePool2DInfo(n.shape, s, a, u, i, p); - return Zg(n, c, "max", t10); +var $L = { kernelName: ni, backendName: "webgpu", kernelFunc: moe }; +var doe = Se({ opType: Q.IS_FINITE, dtype: "bool" }); +var AL = { kernelName: fa, backendName: "webgpu", kernelFunc: doe }; +var foe = Se({ opType: Q.IS_INF, dtype: "bool" }); +var RL = { kernelName: ha, backendName: "webgpu", kernelFunc: foe }; +var hoe = Se({ opType: Q.IS_NAN, dtype: "bool" }); +var FL = { kernelName: ln, backendName: "webgpu", kernelFunc: hoe }; +function goe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new Ro(n.shape, Q.LEAKYRELU); + return i.uniforms = "alpha : f32,", t6.runWebGPUProgram(i, [n], "float32", a); } -var TB = { kernelName: Rn, backendName: "webgpu", kernelFunc: Foe }; -function Doe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; - return Ys(n, s, a, "min", t10); +var DL = { kernelName: mn, backendName: "webgpu", kernelFunc: goe }; +var xoe = ot({ opType: ye.LESS, dtype: "bool", cpuKernelImpl: tM }); +var OL = { kernelName: dn, backendName: "webgpu", kernelFunc: xoe }; +var yoe = ot({ opType: ye.LESS_EQUAL, dtype: "bool", cpuKernelImpl: eM }); +var PL = { kernelName: fn, backendName: "webgpu", kernelFunc: yoe }; +var boe = Se({ opType: Q.LOG, cpuKernelImpl: rM }); +var ML = { kernelName: hn, backendName: "webgpu", kernelFunc: boe }; +var Coe = Se({ opType: Q.LOG1P }); +var LL = { kernelName: ga, backendName: "webgpu", kernelFunc: Coe }; +var Soe = ot({ opType: ye.LOGICAL_AND, dtype: "bool" }); +var BL = { kernelName: gn, backendName: "webgpu", kernelFunc: Soe }; +var woe = Se({ opType: Q.LOGICAL_NOT }); +var VL = { kernelName: xn, backendName: "webgpu", kernelFunc: woe }; +var Ioe = ot({ opType: ye.MAX, cpuKernelImpl: nM }); +var zL = { kernelName: bn, backendName: "webgpu", kernelFunc: Ioe }; +function voe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = S.computePool2DInfo(n.shape, s, a, u, i, p); + return Bg(n, c, "max", t6); } -var NB = { kernelName: Fn, backendName: "webgpu", kernelFunc: Doe }; -var Poe = it({ opType: ye.MIN, cpuKernelImpl: nL }); -var _B = { kernelName: fo, backendName: "webgpu", kernelFunc: Poe }; -var bx = class { - constructor(e, t10, o) { - this.uniforms = "", this.variableNames = ["x"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = t10.map((n, s) => n[0] + e[s] + n[1]), this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.xShape = e, t10.map((n, s) => { +var WL = { kernelName: Cn, backendName: "webgpu", kernelFunc: voe }; +function koe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; + return qr(n, s, a, "min", t6); +} +var UL = { kernelName: wn, backendName: "webgpu", kernelFunc: koe }; +var Noe = ot({ opType: ye.MIN, cpuKernelImpl: sM }); +var GL = { kernelName: In, backendName: "webgpu", kernelFunc: Noe }; +var px = class { + constructor(e, t6, o) { + this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6.map((n, s) => n[0] + e[s] + n[1]), this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = e, t6.map((n, s) => { this.uniforms += ` pad${s} : vec2,`; }), this.offset = o === "reflect" ? 0 : 1, this.shaderKey = `mirrorPad_${o}`; } getUserCode() { - let e = this.xShape.length, t10 = this.xShape.map((u, c) => `uniforms.pad${c}[0]`).join(","), o = this.xShape.map((u, c) => `uniforms.pad${c}[0] + uniforms.xShape${e > 1 ? `[${c}]` : ""}`).join(","), n = e === 1 ? "start" : "start[i]", s = e === 1 ? "end" : "end[i]", a = e === 1 ? "outC" : "outC[i]", i = At(e), p = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; + let e = this.xShape.length, t6 = this.xShape.map((u, c) => `uniforms.pad${c}[0]`).join(","), o = this.xShape.map((u, c) => `uniforms.pad${c}[0] + uniforms.xShape${e > 1 ? `[${c}]` : ""}`).join(","), n = e === 1 ? "start" : "start[i]", s = e === 1 ? "end" : "end[i]", a = e === 1 ? "outC" : "outC[i]", i = Rt(e), p = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { - let start = ${i}(${t10}); + let start = ${i}(${t6}); let end = ${i}(${o}); var outC = getCoordsFromIndex(index); for (var i = 0; i < ${e}; i = i + 1) { @@ -30311,77 +29702,102 @@ var bx = class { `; } }; -var EB = { kernelName: Dn, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { x: o } = r, { paddings: n, mode: s } = e, a = t10, i = n.map((c) => ({ type: "int32", data: [c[0], c[1]] })), p = new bx(o.shape, n, s); +var HL = { kernelName: vn, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { x: o } = r, { paddings: n, mode: s } = e, a = t6, i = n.map((c) => ({ type: "int32", data: [c[0], c[1]] })), p = new px(o.shape, n, s); return a.runWebGPUProgram(p, [o], o.dtype, i); } }; -function Ooe(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; - if (t10.shouldExecuteOnCPU([o])) { - let s = t10.tensorMap.get(o.dataId), [a, i] = aL(s.values, o.shape, o.dtype); - return t10.makeTensorInfo(i, o.dtype, a); +var Toe = ot({ opType: ye.MOD }); +var qL = { kernelName: ya, backendName: "webgpu", kernelFunc: Toe }; +function _oe(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; + if (t6.shouldExecuteOnCPU([o])) { + let s = t6.tensorMap.get(o.dataId), [a, i] = iM(s.values, o.shape, o.dtype); + return t6.makeTensorInfo(i, o.dtype, a); } - let n = new Zo(o.shape, pe.NEG); - return t10.runWebGPUProgram(n, [o], o.dtype); + let n = new Ro(o.shape, Q.NEG); + return t6.runWebGPUProgram(n, [o], o.dtype); } -var $B = { kernelName: Pn, backendName: "webgpu", kernelFunc: Ooe }; -function Moe(r) { +var KL = { kernelName: ws, backendName: "webgpu", kernelFunc: _oe }; +function Eoe(r) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), { selectedIndices: l } = Bt.nonMaxSuppressionV3Impl(u, c, a, i, p); - return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t6.readSync(n.dataId), c = t6.readSync(s.dataId), { selectedIndices: l } = Lt.nonMaxSuppressionV3Impl(u, c, a, i, p); + return t6.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var RB = { kernelName: On, backendName: "webgpu", kernelFunc: Moe }; -function Loe(r) { +var jL = { kernelName: Tn, backendName: "webgpu", kernelFunc: Eoe }; +function $oe(r) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), m = a, f = i, d = p, h = u, { selectedIndices: g, selectedScores: y } = Bt.nonMaxSuppressionV5Impl(c, l, m, f, d, h); - return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([y.length], "float32", new Float32Array(y))]; + let { inputs: e, backend: t6, attrs: o } = r, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t6.readSync(n.dataId), l = t6.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Lt.nonMaxSuppressionV5Impl(c, l, m, d, f, h); + return [t6.makeTensorInfo([g.length], "int32", new Int32Array(g)), t6.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var AB = { kernelName: Mn, backendName: "webgpu", kernelFunc: Loe }; -function om(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var XL = { kernelName: _n, backendName: "webgpu", kernelFunc: $oe }; +var cx = class { + constructor(e, t6) { + this.variableNames = ["x"], this.uniforms = "onValue : f32, offValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e, t6], this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "onehot"; + } + getUserCode() { + return ` + ${se("index")} { + if(index < uniforms.size) { + let coords = getCoordsFromIndex(index); + setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue, + f32(i32(round(getX(coords.x))) == coords.y))); + } + } + `; + } +}; +function Aoe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new cx(u, a), l = de({ inputs: { x: n }, backend: t6, attrs: { shape: [u] } }), m = [{ type: "float32", data: [i] }, { type: "float32", data: [p] }], d = t6.runWebGPUProgram(c, [l], s, m); + t6.disposeData(l.dataId); + let f = [...n.shape, a], h = de({ inputs: { x: d }, backend: t6, attrs: { shape: f } }); + return t6.disposeData(d.dataId), h; +} +var YL = { kernelName: En, backendName: "webgpu", kernelFunc: Aoe }; +function Kl(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "complex64") { - let n = Wa({ inputs: { input: o }, backend: t10 }), s = om({ inputs: { x: n }, backend: t10 }), a = qu({ inputs: { input: o }, backend: t10 }), i = om({ inputs: { x: a }, backend: t10 }), p = ls({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeData(n.dataId), t10.disposeData(s.dataId), t10.disposeData(a.dataId), t10.disposeData(i.dataId), p; + let n = qa({ inputs: { input: o }, backend: t6 }), s = Kl({ inputs: { x: n }, backend: t6 }), a = qu({ inputs: { input: o }, backend: t6 }), i = Kl({ inputs: { x: a }, backend: t6 }), p = po({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeData(n.dataId), t6.disposeData(s.dataId), t6.disposeData(a.dataId), t6.disposeData(i.dataId), p; } else - return $o({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + return dr({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t6 }); } -var FB = { kernelName: Es, backendName: "webgpu", kernelFunc: om }; -function DB(r) { - let { inputs: e, backend: t10 } = r, { x: o } = e; +var QL = { kernelName: Fs, backendName: "webgpu", kernelFunc: Kl }; +function ZL(r) { + let { inputs: e, backend: t6 } = r, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = Wa({ inputs: { input: o }, backend: t10 }), s = DB({ inputs: { x: n }, backend: t10 }), a = qu({ inputs: { input: o }, backend: t10 }), i = om({ inputs: { x: a }, backend: t10 }), p = ls({ inputs: { real: s, imag: i }, backend: t10 }); - return t10.disposeData(n.dataId), t10.disposeData(s.dataId), t10.disposeData(a.dataId), t10.disposeData(i.dataId), p; + let n = qa({ inputs: { input: o }, backend: t6 }), s = ZL({ inputs: { x: n }, backend: t6 }), a = qu({ inputs: { input: o }, backend: t6 }), i = Kl({ inputs: { x: a }, backend: t6 }), p = po({ inputs: { real: s, imag: i }, backend: t6 }); + return t6.disposeData(n.dataId), t6.disposeData(s.dataId), t6.disposeData(a.dataId), t6.disposeData(i.dataId), p; } else - return $o({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + return dr({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t6 }); } -var PB = { kernelName: Cs, backendName: "webgpu", kernelFunc: DB }; -function Boe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { axis: n } = o; +var JL = { kernelName: Is, backendName: "webgpu", kernelFunc: ZL }; +function Roe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { axis: n } = o; if (e.length === 1) - return mx({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return tx({ inputs: { input: e[0] }, backend: t6, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; e.forEach((c) => { - x.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), x.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); let i = [], p = e.map((c) => { - let l = mx({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + let l = tx({ inputs: { input: c }, backend: t6, attrs: { dim: n } }); return i.push(l), l; - }), u = LS({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((c) => t10.disposeData(c.dataId)), u; + }), u = mI({ inputs: p, backend: t6, attrs: { axis: n } }); + return i.forEach((c) => t6.disposeData(c.dataId)), u; } -var OB = { kernelName: Is, backendName: "webgpu", kernelFunc: Boe }; -var Cx = class { - constructor(e, t10) { - this.variableNames = ["x"], this.uniforms = "constantValue : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = t10.map((o, n) => o[0] + e[n] + o[1]), this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), t10.map((o, n) => { +var eB = { kernelName: vs, backendName: "webgpu", kernelFunc: Roe }; +var lx = class { + constructor(e, t6) { + this.variableNames = ["x"], this.uniforms = "constantValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6.map((o, n) => o[0] + e[n] + o[1]), this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), t6.map((o, n) => { this.uniforms += ` pad${n} : vec2,`; }), this.xShape = e, this.shaderKey = "pad"; } getUserCode() { - let e = this.xShape.length, t10 = At(e), o = this.xShape.map((l, m) => `uniforms.pad${m}[0]`).join(","), n = this.xShape.map((l, m) => `uniforms.pad${m}[0] + uniforms.xShape${e > 1 ? `[${m}]` : ""}`).join(","), s = e > 1 ? `${t10}(${o})` : `${o}`, a = e > 1 ? `${t10}(${n})` : `${n}`, i = e > 1 ? "any(outC < start)" : "outC < start", p = e > 1 ? "any(outC >= end)" : "outC >= end", u = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; + let e = this.xShape.length, t6 = Rt(e), o = this.xShape.map((l, m) => `uniforms.pad${m}[0]`).join(","), n = this.xShape.map((l, m) => `uniforms.pad${m}[0] + uniforms.xShape${e > 1 ? `[${m}]` : ""}`).join(","), s = e > 1 ? `${t6}(${o})` : `${o}`, a = e > 1 ? `${t6}(${n})` : `${n}`, i = e > 1 ? "any(outC < start)" : "outC < start", p = e > 1 ? "any(outC >= end)" : "outC >= end", u = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let start = ${s}; let end = ${a}; @@ -30398,52 +29814,52 @@ var Cx = class { `; } }; -var US = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; - if (s.every((u) => x.arraysEqual(u, [0, 0]))) - return Lt({ inputs: { x: n }, backend: t10 }); - if (x.sizeFromShape(n.shape) === 0) { +var xI = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { paddings: s, constantValue: a } = o; + if (s.every((u) => y.arraysEqual(u, [0, 0]))) + return Ft({ inputs: { x: n }, backend: t6 }); + if (y.sizeFromShape(n.shape) === 0) { let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); - return $o({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); + return dr({ backend: t6, attrs: { shape: u, value: a, dtype: n.dtype } }); } let i = [{ type: "float32", data: [a] }]; s.map((u) => i.push({ type: "int32", data: [u[0], u[1]] })); - let p = new Cx(n.shape, s); - return t10.runWebGPUProgram(p, [n], n.dtype, i); + let p = new lx(n.shape, s); + return t6.runWebGPUProgram(p, [n], n.dtype, i); }; -var MB = { kernelName: Ln, backendName: "webgpu", kernelFunc: US }; -var Voe = it({ opType: ye.POW }); -var LB = { kernelName: Bn, backendName: "webgpu", kernelFunc: Voe }; -function zoe(r) { - let { inputs: e, backend: t10 } = r, { x: o, alpha: n } = e, s = new Hu(ye.PRELU, o.shape, n.shape); - return t10.runWebGPUProgram(s, [o, n], "float32"); +var tB = { kernelName: $n, backendName: "webgpu", kernelFunc: xI }; +var Foe = ot({ opType: ye.POW }); +var rB = { kernelName: An, backendName: "webgpu", kernelFunc: Foe }; +function Doe(r) { + let { inputs: e, backend: t6 } = r, { x: o, alpha: n } = e, s = new Hu(ye.PRELU, o.shape, n.shape); + return t6.runWebGPUProgram(s, [o, n], "float32"); } -var BB = { kernelName: Vn, backendName: "webgpu", kernelFunc: zoe }; -function Woe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; - return Ys(n, s, a, "prod", t10); +var oB = { kernelName: Rn, backendName: "webgpu", kernelFunc: Doe }; +function Ooe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { axis: s, keepDims: a } = o; + return qr(n, s, a, "prod", t6); } -var VB = { kernelName: Ao, backendName: "webgpu", kernelFunc: Woe }; -var Uoe = (r) => { - let { backend: e, attrs: t10 } = r, { start: o, stop: n, step: s, dtype: a } = t10, i = pL(o, n, s, a); +var nB = { kernelName: Fn, backendName: "webgpu", kernelFunc: Ooe }; +var Poe = (r) => { + let { backend: e, attrs: t6 } = r, { start: o, stop: n, step: s, dtype: a } = t6, i = cM(o, n, s, a); return e.makeTensorInfo([i.length], a, i); }; -var zB = { kernelName: ws, backendName: "webgpu", kernelFunc: Uoe }; -var GS = it({ opType: ye.DIV }); -var WB = { kernelName: Cn, backendName: "webgpu", kernelFunc: GS }; -var Goe = Ge({ opType: pe.RECIPROCAL }); -var UB = { kernelName: ma, backendName: "webgpu", kernelFunc: Goe }; -var Hoe = Ge({ opType: pe.RELU }); -var GB = { kernelName: zn, backendName: "webgpu", kernelFunc: Hoe }; -var qoe = Ge({ opType: pe.RELU6 }); -var HB = { kernelName: Gn, backendName: "webgpu", kernelFunc: qoe }; -var Ix = class { - constructor(e, t10, o) { - this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, halfPixelCenters : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t10, o, e[3]], this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "resizeBilinear"; +var sB = { kernelName: ks, backendName: "webgpu", kernelFunc: Poe }; +var yI = ot({ opType: ye.DIV }); +var aB = { kernelName: Jo, backendName: "webgpu", kernelFunc: yI }; +var Moe = Se({ opType: Q.RECIPROCAL }); +var iB = { kernelName: Dn, backendName: "webgpu", kernelFunc: Moe }; +var Loe = Se({ opType: Q.RELU }); +var uB = { kernelName: On, backendName: "webgpu", kernelFunc: Loe }; +var Boe = Se({ opType: Q.RELU6 }); +var pB = { kernelName: Ln, backendName: "webgpu", kernelFunc: Boe }; +var mx = class { + constructor(e, t6, o) { + this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, halfPixelCenters : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t6, o, e[3]], this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "resizeBilinear"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -30488,19 +29904,19 @@ var Ix = class { `; } }; -function Koe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, f = [{ type: "float32", data: [c, l] }, { type: "float32", data: [i ? 0.5 : 0] }], d = new Ix(n.shape, p, u); - return t10.runWebGPUProgram(d, [n], "float32", f); +function Voe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [i ? 0.5 : 0] }], f = new mx(n.shape, p, u); + return t6.runWebGPUProgram(f, [n], "float32", d); } -var qB = { kernelName: Un, backendName: "webgpu", kernelFunc: Koe }; -var wx = class { - constructor(e, t10, o, n) { - this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, roundBase : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t10, o, e[3]], this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.halfPixelCenters = n, this.shaderKey = `resizeNearest_${n}`; +var cB = { kernelName: Mn, backendName: "webgpu", kernelFunc: Voe }; +var dx = class { + constructor(e, t6, o, n) { + this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, roundBase : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t6, o, e[3]], this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.halfPixelCenters = n, this.shaderKey = `resizeNearest_${n}`; } getUserCode() { let e; return this.halfPixelCenters ? e = "max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))" : e = "vec2(rc) * effectiveInputOverOutputRatioRC", ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -30533,19 +29949,77 @@ var wx = class { `; } }; -function joe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, f = [{ type: "float32", data: [c, l] }, { type: "float32", data: [s ? 0.5 : 0] }], d = new wx(n.shape, p, u, a); - return t10.runWebGPUProgram(d, [n], n.dtype, f); +function zoe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [s ? 0.5 : 0] }], f = new dx(n.shape, p, u, a); + return t6.runWebGPUProgram(f, [n], n.dtype, d); } -var KB = { kernelName: Wn, backendName: "webgpu", kernelFunc: joe }; -var Sx = class { - constructor(e, t10) { - this.outputShape = [], this.variableNames = ["x"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.uniforms = `centerX : f32, centerY : f32, sinRadians : f32, - cosRadians : f32,`, this.shaderKey = "rotate", this.outputShape = e, typeof t10 == "number" ? (this.uniforms += " fillValue : f32,", this.fillSnippet = "var outputValue = uniforms.fillValue;", this.shaderKey += "_float") : (this.uniforms += " fillValue : vec3,", this.fillSnippet = "var outputValue = uniforms.fillValue[coords[3]];", this.shaderKey += "_vec3"); +var lB = { kernelName: Pn, backendName: "webgpu", kernelFunc: zoe }; +var fx = class { + constructor(e) { + this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = " axis : vec4,", this.shaderKey = "reverse"; } getUserCode() { return ` - ${ue("index")} { + + // Using uniform variables as judging conditions, so the function has + // coherent execution within all threads. + fn getReverseCoords(coords : vec4) -> vec4 { + var reverseCoords = coords; + if (uniforms.axis[0] == 1) { + reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1; + } + if (uniforms.axis[1] == 1) { + reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1; + } + if (uniforms.axis[2] == 1) { + reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1; + } + if (uniforms.axis[3] == 1) { + reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1; + } + + return reverseCoords; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let reverseCoords = getReverseCoords(coords); + setOutputAtIndex(index, getX(reverseCoords[0], + reverseCoords[1], reverseCoords[2], reverseCoords[3])); + } + } + `; + } +}; +function Woe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { dims: s } = o, a = n.shape.length; + if (a === 0) + return Ft({ inputs: { x: n }, backend: t6 }); + let i = n.shape, p = [1, 1, 1, 1]; + i.forEach((g, x) => { + let b = x + 4 - a; + p[b] = g; + }); + let u = y.parseAxisParam(s, n.shape), c = [0, 0, 0, 0]; + u.forEach((g) => { + let x = g + 4 - a; + c[x] = 1; + }); + let l = [{ type: "int32", data: c }], m = de({ inputs: { x: n }, backend: t6, attrs: { shape: p } }), d = new fx(p), f = t6.runWebGPUProgram(d, [m], m.dtype, l); + t6.disposeData(m.dataId); + let h = de({ inputs: { x: f }, backend: t6, attrs: { shape: i } }); + return t6.disposeData(f.dataId), h; +} +var mB = { kernelName: Bn, backendName: "webgpu", kernelFunc: Woe }; +var hx = class { + constructor(e, t6) { + this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `centerX : f32, centerY : f32, sinRadians : f32, + cosRadians : f32,`, this.shaderKey = "rotate", this.outputShape = e, typeof t6 == "number" ? (this.uniforms += " fillValue : f32,", this.fillSnippet = "var outputValue = uniforms.fillValue;", this.shaderKey += "_float") : (this.uniforms += " fillValue : vec3,", this.fillSnippet = "var outputValue = uniforms.fillValue[coords[3]];", this.shaderKey += "_vec3"); + } + getUserCode() { + return ` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordXFloat = (f32(coords[2]) - uniforms.centerX) * @@ -30567,22 +30041,22 @@ var Sx = class { `; } }; -var jB = { kernelName: es, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t10 }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t10, p = new Sx(o.shape, s), [u, c] = I.getImageCenter(a, o.shape[1], o.shape[2]), l = [{ type: "float32", data: [u] }, { type: "float32", data: [c] }, { type: "float32", data: [Math.sin(n)] }, { type: "float32", data: [Math.cos(n)] }]; +var dB = { kernelName: es, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: e, backend: t6 }) => { + let { image: o } = r, { radians: n, fillValue: s, center: a } = e, i = t6, p = new hx(o.shape, s), [u, c] = S.getImageCenter(a, o.shape[1], o.shape[2]), l = [{ type: "float32", data: [u] }, { type: "float32", data: [c] }, { type: "float32", data: [Math.sin(n)] }, { type: "float32", data: [Math.cos(n)] }]; return typeof s == "number" ? l.push({ type: "float32", data: [Number.parseFloat(s.toFixed(2))] }) : l.push({ type: "float32", data: s }), i.runWebGPUProgram(p, [o], o.dtype, l); } }; -var Xoe = Ge({ opType: pe.RSQRT, cpuKernelImpl: cL }); -var XB = { kernelName: xo, backendName: "webgpu", kernelFunc: Xoe }; -var Fi = class { - constructor(e, t10, o, n, s, a, i, p = true) { - this.variableNames = ["updates", "indices"], this.workGroupSize = [64, 1, 1], this.atomic = true, this.outputShape = a, this.type = i, this.sumDupeIndices = p, this.dispatchLayout = fe(e), this.dispatch = ae(this.dispatchLayout, e, this.workGroupSize), this.sliceDimGreaterThanOne = t10 > 1, this.shaderKey = `scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`; - let u = At(s.length); - this.uniforms = `sliceDim : i32, strides: ${u}, size: i32,`, this.updatesRank = n, this.indicesRank = o; +var Uoe = Se({ opType: Q.RSQRT, cpuKernelImpl: lM }); +var fB = { kernelName: Vn, backendName: "webgpu", kernelFunc: Uoe }; +var Gi = class { + constructor(e, t6, o, n, s, a, i, p = true) { + this.variableNames = ["updates", "indices"], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = a, this.type = i, this.sumDupeIndices = p, this.dispatchLayout = ue(e), this.dispatch = re(this.dispatchLayout, e, this.workgroupSize), this.sliceDimGreaterThanOne = t6 > 1, this.shaderKey = `scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`; + let u = Rt(s.length); + this.uniforms = `sliceDim : i32, strides: ${u}, updatesSize: i32,`, this.updatesRank = n, this.indicesRank = o; } getUserCode() { let e = ""; this.indicesRank === 1 ? e = "coords[0]" : this.indicesRank === 2 && (e = "coords[0], j"); - let t10 = `getIndices(${e})`, o = this.sliceDimGreaterThanOne ? "uniforms.strides[j]" : "uniforms.strides", n = "", s = ""; + let t6 = `getIndices(${e})`, o = this.sliceDimGreaterThanOne ? "uniforms.strides[j]" : "uniforms.strides", n = "", s = ""; this.dispatchLayout.x.length === 1 ? (n = "flattenedIndex", s = ` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; @@ -30617,22 +30091,22 @@ var Fi = class { } } `); - let f = `atomicStore(${c}, bitcast(${l}));`; - return this.sumDupeIndices ? m : f; + let d = `atomicStore(${c}, bitcast(${l}));`; + return this.sumDupeIndices ? m : d; }; return ` ${s} - ${ue("index")} { - if (index < uniforms.size) { + ${se("index")} { + if (index < uniforms.updatesSize) { let coords = getUpdatesCoordsFromFlatIndex(index); var flattenedIndex = 0; for (var j = 0; j < uniforms.sliceDim; j = j + 1) { - let indexInside = i32(round(${t10})); + let indexInside = i32(round(${t6})); flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Tc(this.type, false)}(${i}); + ${wc(this.type, false)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); ${p("&result[flatIndex]", "updateValue")}; @@ -30640,86 +30114,121 @@ var Fi = class { }`; } }; -function Yoe(r) { - let { inputs: e, backend: t10, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = I.calculateShapes(s, n, a), m = [l / u, u]; +function Goe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = S.calculateShapes(s, n, a), m = [l / u, u]; if (l === 0) - return t10.makeTensorInfo(a, n.dtype); - let f = xe({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), d = xe({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = d.dtype, g = $o({ backend: t10, attrs: { shape: m, value: 0, dtype: h } }), y = x.sizeFromShape(d.shape), b = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [y] }], C = new Fi(d.shape, i, f.shape.length, d.shape.length, c, m, h), w = t10.runWebGPUProgram(C, [d, f], h, b, g), k = xe({ inputs: { x: w }, backend: t10, attrs: { shape: a } }); - return t10.disposeData(f.dataId), t10.disposeData(d.dataId), t10.disposeData(w.dataId), k; + return t6.makeTensorInfo(a, n.dtype); + let d = de({ inputs: { x: n }, backend: t6, attrs: { shape: [p, i] } }), f = de({ inputs: { x: s }, backend: t6, attrs: { shape: [p, u] } }), h = f.dtype, g = dr({ backend: t6, attrs: { shape: m, value: 0, dtype: h } }), x = y.sizeFromShape(f.shape), b = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [x] }], C = new Gi(f.shape, i, d.shape.length, f.shape.length, c, m, h), w = t6.runWebGPUProgram(C, [f, d], h, b, g), k = de({ inputs: { x: w }, backend: t6, attrs: { shape: a } }); + return t6.disposeData(d.dataId), t6.disposeData(f.dataId), t6.disposeData(w.dataId), k; } -var YB = { kernelName: Hn, backendName: "webgpu", kernelFunc: Yoe }; -var vx = class { - constructor(e, t10, o) { - this.variableNames = ["c", "a", "b"], this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.cRank = e, this.rank = o, this.shaderKey = "select"; +var hB = { kernelName: zn, backendName: "webgpu", kernelFunc: Goe }; +var gx = class { + constructor(e, t6) { + this.outputShape = [], this.variableNames = ["sortedSequence", "values"], this.uniforms = "numInputs : i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.side = t6, this.shaderKey = `search_sorted_${t6}`; } getUserCode() { - let e, t10; + return ` + fn findBound(batch: i32, value: f32) -> i32 { + var left = i32(0); + var right = uniforms.numInputs; + while (left < right) { + var mid = (left + right) / 2; + if (getSortedSequence(batch, mid) ${this.side === "left" ? "<" : "<="} value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let value = getValuesByOutputIndex(index); + setOutputAtIndexI32(index, findBound(coords[0], value)); + } + } + `; + } +}; +function Hoe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sortedSequence: n, values: s } = e, { side: a } = o, i = new gx([s.shape[0], s.shape[1]], a), p = [{ type: "int32", data: [n.shape[1]] }]; + return t6.runWebGPUProgram(i, [n, s], "int32", p); +} +var gB = { kernelName: ii, backendName: "webgpu", kernelFunc: Hoe }; +var xx = class { + constructor(e, t6, o) { + this.variableNames = ["c", "a", "b"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t6, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.cRank = e, this.rank = o, this.shaderKey = "select"; + } + getUserCode() { + let e, t6; if (this.rank > 4) throw Error(`Where for rank ${this.rank} is not yet supported`); if (this.rank === 1) - t10 = "resRC", e = "resRC"; + t6 = "resRC", e = "resRC"; else { let n = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], s = [], a = []; for (let i = 0; i < this.outputShape.length; i++) a.push(`${n[i]}`), i < this.cRank && s.push(`${n[i]}`); - e = s.join(), t10 = a.join(); + e = s.join(), t6 = a.join(); } return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); let cVal = getC(${e}); if (cVal >= 1.0) { - setOutputAtIndex(index, getA(${t10})); + setOutputAtIndex(index, getA(${t6})); } else { - setOutputAtIndex(index, getB(${t10})); + setOutputAtIndex(index, getB(${t6})); } } } `; } }; -function Qoe(r) { - let { inputs: e, backend: t10 } = r, { condition: o, t: n, e: s } = e, a = new vx(o.shape.length, n.shape, n.shape.length); - return t10.runWebGPUProgram(a, [o, n, s], ct(n.dtype, s.dtype)); +function qoe(r) { + let { inputs: e, backend: t6 } = r, { condition: o, t: n, e: s } = e, a = new xx(o.shape.length, n.shape, n.shape.length); + return t6.runWebGPUProgram(a, [o, n, s], dt(n.dtype, s.dtype)); } -var QB = { kernelName: vs, backendName: "webgpu", kernelFunc: Qoe }; -var Zoe = Ge({ opType: pe.SIGMOID }); -var ZB = { kernelName: yo, backendName: "webgpu", kernelFunc: Zoe }; -var Joe = Ge({ opType: pe.SIN }); -var JB = { kernelName: Kn, backendName: "webgpu", kernelFunc: Joe }; -var ene = Ge({ opType: pe.SINH }); -var eV = { kernelName: ha, backendName: "webgpu", kernelFunc: ene }; -var HS = it({ opType: ye.SUB, cpuKernelImpl: gL, supportsComplex: true }); -var tV = { kernelName: Io, backendName: "webgpu", kernelFunc: HS }; -function tne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = x.parseAxisParam([s], n.shape), i = em({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: a, keepDims: false } }), p = I.expandShapeToKeepDim(i.shape, a), u = xe({ inputs: { x: i }, backend: t10, attrs: { shape: p } }), c = HS({ inputs: { a: n, b: u }, backend: t10 }), l = VS({ inputs: { x: c }, backend: t10 }), m = rm({ inputs: { x: l }, backend: t10, attrs: { axis: a, keepDims: false } }), f = xe({ inputs: { x: m }, backend: t10, attrs: { shape: p } }), d = GS({ inputs: { a: l, b: f }, backend: t10 }); - return t10.disposeData(i.dataId), t10.disposeData(u.dataId), t10.disposeData(c.dataId), t10.disposeData(l.dataId), t10.disposeData(m.dataId), t10.disposeData(f.dataId), d; +var xB = { kernelName: Ts, backendName: "webgpu", kernelFunc: qoe }; +var Koe = Se({ opType: Q.SIGMOID }); +var yB = { kernelName: Un, backendName: "webgpu", kernelFunc: Koe }; +var joe = Se({ opType: Q.SIN }); +var bB = { kernelName: Wn, backendName: "webgpu", kernelFunc: joe }; +var Xoe = Se({ opType: Q.SINH }); +var CB = { kernelName: Sa, backendName: "webgpu", kernelFunc: Xoe }; +var bI = ot({ opType: ye.SUB, cpuKernelImpl: xM, supportsComplex: true }); +var SB = { kernelName: Xn, backendName: "webgpu", kernelFunc: bI }; +function Yoe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { logits: n } = e, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = Ul({ inputs: { x: n }, backend: t6, attrs: { reductionIndices: a, keepDims: false } }), p = S.expandShapeToKeepDim(i.shape, a), u = de({ inputs: { x: i }, backend: t6, attrs: { shape: p } }), c = bI({ inputs: { a: n, b: u }, backend: t6 }), l = fI({ inputs: { x: c }, backend: t6 }), m = Hl({ inputs: { x: l }, backend: t6, attrs: { axis: a, keepDims: false } }), d = de({ inputs: { x: m }, backend: t6, attrs: { shape: p } }), f = yI({ inputs: { a: l, b: d }, backend: t6 }); + return t6.disposeData(i.dataId), t6.disposeData(u.dataId), t6.disposeData(c.dataId), t6.disposeData(l.dataId), t6.disposeData(m.dataId), t6.disposeData(d.dataId), f; } -var rV = { kernelName: Xn, backendName: "webgpu", kernelFunc: tne }; -var rne = (r) => { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; - x.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet"); - let i = s.reduce((y, b) => y * b), p = [[0, 0]]; +var wB = { kernelName: qn, backendName: "webgpu", kernelFunc: Yoe }; +var Qoe = (r) => { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { blockShape: s, paddings: a } = o; + y.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet"); + let i = s.reduce((x, b) => x * b), p = [[0, 0]]; p.push(...a); - for (let y = 1 + s.length; y < n.shape.length; ++y) + for (let x = 1 + s.length; x < n.shape.length; ++x) p.push([0, 0]); - let u = [], c = US({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = I.getReshaped(c.shape, s, i, false), m = I.getPermuted(l.length, s.length, false), f = I.getReshapedPermuted(c.shape, s, i, false), d = xe({ inputs: { x: c }, backend: t10, attrs: { shape: l } }), h = Nr({ inputs: { x: d }, backend: t10, attrs: { perm: m } }), g = xe({ inputs: { x: h }, backend: t10, attrs: { shape: f } }); - return u.push(c), u.push(d), u.push(h), u.forEach((y) => t10.disposeData(y.dataId)), g; + let u = [], c = xI({ inputs: { x: n }, backend: t6, attrs: { paddings: p, constantValue: 0 } }), l = S.getReshaped(c.shape, s, i, false), m = S.getPermuted(l.length, s.length, false), d = S.getReshapedPermuted(c.shape, s, i, false), f = de({ inputs: { x: c }, backend: t6, attrs: { shape: l } }), h = Nr({ inputs: { x: f }, backend: t6, attrs: { perm: m } }), g = de({ inputs: { x: h }, backend: t6, attrs: { shape: d } }); + return u.push(c), u.push(f), u.push(h), u.forEach((x) => t6.disposeData(x.dataId)), g; }; -var oV = { kernelName: ks, backendName: "webgpu", kernelFunc: rne }; -var kx = class { - constructor(e, t10) { - this.variableNames = ["A"], this.workGroupSize = [64, 1, 1], this.size = true; +var IB = { kernelName: Es, backendName: "webgpu", kernelFunc: Qoe }; +var yx = class { + constructor(e, t6) { + this.variableNames = ["A"], this.workgroupSize = [64, 1, 1], this.size = true; let o = new Array(e.length); for (let n = 0; n < o.length; n++) - o[n] = e[n] * t10[n]; - this.outputShape = o, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.rank = this.outputShape.length, this.shaderKey = "tile"; + o[n] = e[n] * t6[n]; + this.outputShape = o, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.rank = this.outputShape.length, this.shaderKey = "tile"; } getUserCode() { - let e = one(this.rank, "uniforms."); + let e = Zoe(this.rank, "uniforms."); return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); setOutputAtIndex(index, getA(${e})); @@ -30728,131 +30237,133 @@ var kx = class { `; } }; -function one(r, e = "") { +function Zoe(r, e = "") { if (r >= 5) throw Error(`Tile for rank ${r} is not yet supported`); if (r === 1) return `(resRC % ${e}aShape)`; - let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; + let t6 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; for (let n = 0; n < r; n++) - o.push(`(${t10[n]} % ${e}aShape[${n}])`); + o.push(`(${t6[n]} % ${e}aShape[${n}])`); return o.join(); } -function qS(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { reps: s } = o; - if (t10.shouldExecuteOnCPU([n]) || n.dtype === "string" || n.shape.length >= 5) { - let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => x.decodeString(m)) : p, c = ne(n.shape, n.dtype, u), l = xL(c, s); - return t10.makeTensorInfo(l.shape, l.dtype, l.values); +function CI(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { reps: s } = o; + if (t6.shouldExecuteOnCPU([n]) || n.dtype === "string" || n.shape.length >= 5) { + let p = t6.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = le(n.shape, n.dtype, u), l = yM(c, s); + return t6.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new kx(n.shape, s); - return t10.runWebGPUProgram(a, [n], n.dtype); + let a = new yx(n.shape, s); + return t6.runWebGPUProgram(a, [n], n.dtype); } -var nV = { kernelName: wo, backendName: "webgpu", kernelFunc: qS }; -function nne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = I.calculateShapes(s, n, i), f = false; +var vB = { kernelName: to, backendName: "webgpu", kernelFunc: CI }; +function Joe(r) { + let { inputs: e, backend: t6, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = S.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let R = t10.bufferSync(n), A = t10.bufferSync(s), D = x.decodeString(t10.readSync(a.dataId)[0]), O = lL(R, A, i, m, c, u, p, l, D, f); - return t10.makeTensorInfo(i, O.dtype, O.values); + let A = t6.bufferSync(n), R = t6.bufferSync(s), D = y.decodeString(t6.readSync(a.dataId)[0]), P = mM(A, R, i, m, c, u, p, l, D, d); + return t6.makeTensorInfo(i, P.dtype, P.values); } - let d = [m / c, c], h = xe({ inputs: { x: n }, backend: t10, attrs: { shape: [u, p] } }), g = s.shape.length ? xe({ inputs: { x: s }, backend: t10, attrs: { shape: [u, c] } }) : Lt({ inputs: { x: s }, backend: t10 }), y = g.dtype, b = t10.makeTensorInfo([], y, x.makeZerosTypedArray(1, y)), C = xe({ inputs: { x: a }, backend: t10, attrs: { shape: Array(d.length).fill(1) } }), w = qS({ inputs: { x: C }, backend: t10, attrs: { reps: d } }), k = x.sizeFromShape([u, c]), _ = [{ type: "int32", data: [p] }, { type: "int32", data: l }, { type: "int32", data: [k] }]; + let f = [m / c, c], h = de({ inputs: { x: n }, backend: t6, attrs: { shape: [u, p] } }), g = s.shape.length ? de({ inputs: { x: s }, backend: t6, attrs: { shape: [u, c] } }) : Ft({ inputs: { x: s }, backend: t6 }), x = g.dtype, b = t6.makeTensorInfo([], x, y.makeZerosTypedArray(1, x)), C = de({ inputs: { x: a }, backend: t6, attrs: { shape: Array(f.length).fill(1) } }), w = CI({ inputs: { x: C }, backend: t6, attrs: { reps: f } }), k = y.sizeFromShape([u, c]), _ = [{ type: "int32", data: [p] }, { type: "int32", data: l }, { type: "int32", data: [k] }]; switch (u) { case 0: break; case 1: { - let R = new Fi([u, c], p, h.shape.length, g.shape.length, l, d, y, f); - t10.runWebGPUProgram(R, [g, h], y, _, w); + let A = new Gi([u, c], p, h.shape.length, g.shape.length, l, f, x, d); + t6.runWebGPUProgram(A, [g, h], x, _, w); } break; default: { - let R = new Fi([u, c], p, h.shape.length, b.shape.length, l, d, y, f); - t10.runWebGPUProgram(R, [b, h], y, _, w); + let A = new Gi([u, c], p, h.shape.length, b.shape.length, l, f, x, d); + t6.runWebGPUProgram(A, [b, h], x, _, w); } { - let R = new Fi([u, c], p, h.shape.length, g.shape.length, l, d, y); - t10.runWebGPUProgram(R, [g, h], y, _, w); + let A = new Gi([u, c], p, h.shape.length, g.shape.length, l, f, x); + t6.runWebGPUProgram(A, [g, h], x, _, w); } } - let E = xe({ inputs: { x: w }, backend: t10, attrs: { shape: i } }); - return t10.disposeData(h.dataId), t10.disposeData(g.dataId), t10.disposeData(C.dataId), t10.disposeData(b.dataId), t10.disposeData(w.dataId), E; + let $ = de({ inputs: { x: w }, backend: t6, attrs: { shape: i } }); + return t6.disposeData(h.dataId), t6.disposeData(g.dataId), t6.disposeData(C.dataId), t6.disposeData(b.dataId), t6.disposeData(w.dataId), $; } -var sV = { kernelName: ei, backendName: "webgpu", kernelFunc: nne }; -function sne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = x.parseAxisParam(a, n.shape)[0], p = I.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); +var kB = { kernelName: li, backendName: "webgpu", kernelFunc: Joe }; +function ene(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = S.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); return p.map((m) => { - let f = [...l]; - f[i] = m; - let d = ms({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: f } }); - return c[i] += m, d; + let d = [...l]; + d[i] = m; + let f = ds({ inputs: { x: n }, backend: t6, attrs: { begin: c, size: d } }); + return c[i] += m, f; }); } -var aV = { kernelName: Ts, backendName: "webgpu", kernelFunc: sne }; -var ane = Ge({ opType: pe.SQRT }); -var iV = { kernelName: bo, backendName: "webgpu", kernelFunc: ane }; -var uV = { kernelName: ti, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: e }) => { - let { x: t10 } = r, o = e, n = new Zo(t10.shape, pe.SQUARE); - return o.runWebGPUProgram(n, [t10], t10.dtype); +var NB = { kernelName: $s, backendName: "webgpu", kernelFunc: ene }; +var tne = Se({ opType: Q.SQRT }); +var TB = { kernelName: Gn, backendName: "webgpu", kernelFunc: tne }; +var _B = { kernelName: mi, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: e }) => { + let { x: t6 } = r, o = e, n = new Ro(t6.shape, Q.SQUARE); + return o.runWebGPUProgram(n, [t6], t6.dtype); } }; -var ine = it({ opType: ye.SQUARED_DIFFERENCE }); -var pV = { kernelName: Co, backendName: "webgpu", kernelFunc: ine }; -var Tx = class { +var rne = ot({ opType: ye.SQUARED_DIFFERENCE }); +var EB = { kernelName: Kn, backendName: "webgpu", kernelFunc: rne }; +var bx = class { constructor(e) { - this.variableNames = ["x"], this.workPerThread = 1, this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize, [this.workPerThread, 1, 1]); - let t10 = At(this.outputShape.length); - this.uniforms = `begin : ${t10}, strides : ${t10}, `, this.shaderKey = "stridedSlice"; + this.variableNames = ["x"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]); + let t6 = Rt(this.outputShape.length); + this.uniforms = `begin : ${t6}, strides : ${t6}, `, this.shaderKey = "stridedSlice"; } getUserCode() { - let e = this.outputShape.length, t10 = ""; + let e = this.outputShape.length, t6 = ""; if (e === 1) - t10 = "coords * uniforms.strides + uniforms.begin"; + t6 = "coords * uniforms.strides + uniforms.begin"; else { let n = 0; - t10 = this.outputShape.map((s, a) => (n++, this.outputShape.length === 1 ? `coords * uniforms.strides[${a}] + uniforms.begin[${a}]` : `coords[${n - 1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(","); + t6 = this.outputShape.map((s, a) => (n++, this.outputShape.length === 1 ? `coords * uniforms.strides[${a}] + uniforms.begin[${a}]` : `coords[${n - 1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(","); } return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); - setOutputAtIndex(index, getX(${t10})); + setOutputAtIndex(index, getX(${t6})); } } `; } }; -function une(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: f, finalShape: d, isIdentity: h, sliceDim0: g, isSimpleSlice: y, begin: b, end: C, strides: w } = et.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function one(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: w } = ut.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = xe({ inputs: { x: n }, backend: t10, attrs: { shape: d } }); - else if (g || y) { - x.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let _ = et.computeOutShape(b, C, w), E = ms({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); - k = xe({ inputs: { x: E }, backend: t10, attrs: { shape: d } }), t10.disposeData(E.dataId); - } else if (t10.shouldExecuteOnCPU([n])) { - let E = t10.readSync(n.dataId), R = ne(n.shape, n.dtype, E), A = dL(f, R, w, b); - k = t10.makeTensorInfo(d, n.dtype, A.values); + k = de({ inputs: { x: n }, backend: t6, attrs: { shape: f } }); + else if (g || x) { + y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); + let _ = ut.computeOutShape(b, C, w), $ = ds({ inputs: { x: n }, backend: t6, attrs: { begin: b, size: _ } }); + k = de({ inputs: { x: $ }, backend: t6, attrs: { shape: f } }), t6.disposeData($.dataId); + } else if (t6.shouldExecuteOnCPU([n])) { + let $ = t6.readSync(n.dataId), A = le(n.shape, n.dtype, $), R = hM(d, A, w, b); + k = t6.makeTensorInfo(f, n.dtype, R.values); } else { - let E = new Tx(f), R = [{ type: "int32", data: b }, { type: "int32", data: w }], A = t10.runWebGPUProgram(E, [n], n.dtype, R); - k = xe({ inputs: { x: A }, backend: t10, attrs: { shape: d } }), t10.disposeData(A.dataId); + let $ = new bx(d), A = [{ type: "int32", data: b }, { type: "int32", data: w }], R = t6.runWebGPUProgram($, [n], n.dtype, A); + k = de({ inputs: { x: R }, backend: t6, attrs: { shape: f } }), t6.disposeData(R.dataId); } return k; } -var cV = { kernelName: Yn, backendName: "webgpu", kernelFunc: une }; -function pne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.readSync(c.dataId), f = t10.readSync(l.dataId), [d, h] = hL(m, f, n, s, a, i, p, u); - return [t10.makeTensorInfo([d.length], "string", d), t10.makeTensorInfo(l.shape, "int32", h)]; +var $B = { kernelName: jn, backendName: "webgpu", kernelFunc: one }; +function nne(r) { + let { inputs: e, backend: t6, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t6.readSync(c.dataId), d = t6.readSync(l.dataId), [f, h] = gM(m, d, n, s, a, i, p, u); + return [t6.makeTensorInfo([f.length], "string", f), t6.makeTensorInfo(l.shape, "int32", h)]; } -var lV = { kernelName: Ns, backendName: "webgpu", kernelFunc: pne }; -var cne = Ge({ opType: pe.TANH }); -var mV = { kernelName: Qn, backendName: "webgpu", kernelFunc: cne }; -var Nx = class { +var AB = { kernelName: As, backendName: "webgpu", kernelFunc: nne }; +var sne = Se({ opType: Q.TAN }); +var RB = { kernelName: Yn, backendName: "webgpu", kernelFunc: sne }; +var ane = Se({ opType: Q.TANH }); +var FB = { kernelName: Qn, backendName: "webgpu", kernelFunc: ane }; +var Cx = class { constructor(e) { - this.variableNames = ["x", "indices"], this.workGroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.uniforms = `inputSize : i32, firstPass : i32, negativeInf : f32, + this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`, this.shaderKey = "swap"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -30921,13 +30432,13 @@ var Nx = class { `; } }; -var _x = class { +var Sx = class { constructor(e) { - this.variableNames = ["x", "indices"], this.workGroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.uniforms = "inputSize : i32, firstPass : i32, k : i32,", this.shaderKey = "merge"; + this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = "inputSize : i32, firstPass : i32, k : i32,", this.shaderKey = "merge"; } getUserCode() { return ` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -30988,54 +30499,54 @@ var _x = class { `; } }; -function Mc(r, e) { +function $c(r, e) { e !== null && r.disposeData(e.dataId); } -function fV(r) { +function DB(r) { let e = 1; for (; e < r; ) e *= 2; return e; } -function lne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; - if (t10.shouldExecuteOnCPU([n])) { - let k = t10.readSync(n.dataId), [_, E] = yL(k, i, n.dtype, s, a); - return [t10.makeTensorInfo(_.shape, _.dtype, _.values), t10.makeTensorInfo(E.shape, E.dtype, E.values)]; +function ine(r) { + let { inputs: e, backend: t6, attrs: o } = r, { x: n } = e, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; + if (t6.shouldExecuteOnCPU([n])) { + let k = t6.readSync(n.dataId), [_, $] = bM(k, i, n.dtype, s, a); + return [t6.makeTensorInfo(_.shape, _.dtype, _.values), t6.makeTensorInfo($.shape, $.dtype, $.values)]; } if (s === 0) - return i[i.length - 1] = 0, [t10.makeTensorInfo(i, n.dtype, []), t10.makeTensorInfo(i, "int32", [])]; + return i[i.length - 1] = 0, [t6.makeTensorInfo(i, n.dtype, []), t6.makeTensorInfo(i, "int32", [])]; if (p === 1) - return [n, $o({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t10 })]; - let c = x.sizeFromShape(i) / p, l = xe({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: t10 }), m = fV(s), f = fV(p), d = null, h = () => d === null ? [l, l] : [l, d], g = (k, _, E) => { - let R = h(), A = new Nx(E), O = [{ type: "int32", data: [p] }, { type: "int32", data: [d === null ? 1 : 0] }, { type: "float32", data: [Number.NEGATIVE_INFINITY] }, { type: "int32", data: [k] }, { type: "int32", data: [_] }], M = d; - d = t10.runWebGPUProgram(A, R, "int32", O), Mc(t10, M); + return [n, dr({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t6 })]; + let c = y.sizeFromShape(i) / p, l = de({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: t6 }), m = DB(s), d = DB(p), f = null, h = () => f === null ? [l, l] : [l, f], g = (k, _, $) => { + let A = h(), R = new Cx($), P = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "float32", data: [Number.NEGATIVE_INFINITY] }, { type: "int32", data: [k] }, { type: "int32", data: [_] }], M = f; + f = t6.runWebGPUProgram(R, A, "int32", P), $c(t6, M); }; for (let k = 1; k < m; k *= 2) { let _ = k * 2; - for (let E = k; E >= 1; E /= 2) - g(_, E, [c, f]); + for (let $ = k; $ >= 1; $ /= 2) + g(_, $, [c, d]); } - for (let k = f; k > m; k /= 2) { - let _ = h(), E = new _x([c, k / 2]), A = [{ type: "int32", data: [p] }, { type: "int32", data: [d === null ? 1 : 0] }, { type: "int32", data: [m] }], D = d; - d = t10.runWebGPUProgram(E, _, "int32", A), Mc(t10, D); - let O = m / 2, M = O * 2; - for (let L = O; L >= 1; L /= 2) - g(M, L, d.shape); + for (let k = d; k > m; k /= 2) { + let _ = h(), $ = new Sx([c, k / 2]), R = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], D = f; + f = t6.runWebGPUProgram($, _, "int32", R), $c(t6, D); + let P = m / 2, M = P * 2; + for (let L = P; L >= 1; L /= 2) + g(M, L, f.shape); } - let y = d; - d = ms({ inputs: { x: d }, backend: t10, attrs: { begin: 0, size: [c, s] } }), Mc(t10, y); - let b = WS({ inputs: { x: l, indices: d }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); - Mc(t10, l); + let x = f; + f = ds({ inputs: { x: f }, backend: t6, attrs: { begin: 0, size: [c, s] } }), $c(t6, x); + let b = gI({ inputs: { x: l, indices: f }, backend: t6, attrs: { axis: 1, batchDims: 1 } }); + $c(t6, l); let C = i.slice(0, -1); - C.push(s), y = d, d = xe({ inputs: { x: d }, attrs: { shape: C }, backend: t10 }), Mc(t10, y); + C.push(s), x = f, f = de({ inputs: { x: f }, attrs: { shape: C }, backend: t6 }), $c(t6, x); let w = b; - return b = xe({ inputs: { x: b }, attrs: { shape: C }, backend: t10 }), Mc(t10, w), [b, d]; + return b = de({ inputs: { x: b }, attrs: { shape: C }, backend: t6 }), $c(t6, w), [b, f]; } -var dV = { kernelName: Zn, backendName: "webgpu", kernelFunc: lne }; -var Ex = class { +var OB = { kernelName: Zn, backendName: "webgpu", kernelFunc: ine }; +var wx = class { constructor(e) { - this.variableNames = ["Image", "Transforms"], this.uniforms = "interpolationModeId : i32, fillModeId : i32, fillValue : f32,", this.workGroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = fe(this.outputShape), this.dispatch = ae(this.dispatchLayout, this.outputShape, this.workGroupSize), this.shaderKey = "transform"; + this.variableNames = ["Image", "Transforms"], this.uniforms = "interpolationModeId : i32, fillModeId : i32, fillValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = ue(this.outputShape), this.dispatch = re(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "transform"; } getUserCode() { return ` @@ -31102,7 +30613,7 @@ var Ex = class { return outputValue; } - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var outputValue : f32; @@ -31157,8 +30668,8 @@ var Ex = class { `; } }; -function mne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, f] = n.shape, [d, h] = u != null ? u : [l, m], g = [c, d, h, f], y = new Ex(g), b = a === "nearest" ? 1 : 2, C; +function une(r) { + let { inputs: e, backend: t6, attrs: o } = r, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new wx(g), b = a === "nearest" ? 1 : 2, C; switch (i) { case "constant": C = 1; @@ -31177,41 +30688,41 @@ function mne(r) { break; } let w = [{ type: "int32", data: [b] }, { type: "int32", data: [C] }, { type: "float32", data: [p] }]; - return t10.runWebGPUProgram(y, [n, s], "float32", w); + return t6.runWebGPUProgram(x, [n, s], "float32", w); } -var hV = { kernelName: Jn, backendName: "webgpu", kernelFunc: mne }; -function fne(r) { - let { inputs: e, backend: t10, attrs: o } = r, { value: n } = e, { axis: s } = o; +var PB = { kernelName: Jn, backendName: "webgpu", kernelFunc: une }; +function pne(r) { + let { inputs: e, backend: t6, attrs: o } = r, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), c = 0; for (let h = 0; h < i; h++) h !== s && (u[c++] = a.shape[h]); - let l = [], m = new Array(i).fill(0), f = a.shape.slice(); - f[s] = 1; - let d = new Array(p); - for (let h = 0; h < d.length; h++) { + let l = [], m = new Array(i).fill(0), d = a.shape.slice(); + d[s] = 1; + let f = new Array(p); + for (let h = 0; h < f.length; h++) { m[s] = h; - let g = ms({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: f } }), y = xe({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); - d[h] = y, l.push(g); + let g = ds({ inputs: { x: a }, backend: t6, attrs: { begin: m, size: d } }), x = de({ inputs: { x: g }, backend: t6, attrs: { shape: u } }); + f[h] = x, l.push(g); } - return l.forEach((h) => t10.disposeData(h.dataId)), d; + return l.forEach((h) => t6.disposeData(h.dataId)), f; } -var gV = { kernelName: _s, backendName: "webgpu", kernelFunc: fne }; -var dne = [aM, CL, IL, wL, vL, kL, TL, EL, $L, AL, OL, ML, LL, uM, VL, WL, UL, GL, HL, qL, XL, YL, QL, ZL, tB, rB, oB, nB, sB, aB, nM, iB, cB, uB, pB, lB, mB, fB, dB, hB, gB, xB, iM, BL, yB, bB, CB, IB, wB, SB, vB, NL, kB, TB, _L, NB, _B, EB, JL, $B, RB, AB, FL, PB, OB, MB, LB, BB, VB, zB, DL, WB, UB, GB, HB, sM, qB, KB, jB, XB, YB, QB, ZB, JB, eV, RL, cV, lV, rV, oV, sV, aV, iV, uV, pV, tV, eB, mV, nV, dV, hV, SL, gV, FB]; -for (let r of dne) - ya(r); -var xV = "4.0.0"; -var hne = "4.0.0"; -var gne = "4.0.0"; -var xne = "4.0.0"; -var yne = "4.0.0"; -var bne = "0.0.1-alpha.14"; -var Cne = { tfjs: xV, "tfjs-core": xV, "tfjs-converter": hne, "tfjs-backend-cpu": gne, "tfjs-backend-webgl": xne, "tfjs-backend-wasm": yne, "tfjs-backend-webgpu": bne }; +var MB = { kernelName: Rs, backendName: "webgpu", kernelFunc: pne }; +var cne = [B3, SM, wM, IM, vM, kM, TM, _M, EM, $M, AM, RM, FM, DM, OM, LM, BM, zM, WM, qM, KM, jM, z3, YM, QM, ZM, JM, eL, tL, nL, sL, aL, iL, uL, lL, mL, dL, fL, hL, gL, xL, yL, M3, bL, wL, CL, SL, IL, vL, kL, NL, TL, _L, EL, V3, $L, XM, AL, RL, FL, DL, OL, PL, LL, ML, BL, VL, PM, zL, WL, MM, UL, GL, HL, qL, pL, KL, jL, XL, UM, YL, JL, eB, tB, rB, oB, nB, sB, GM, aB, iB, uB, pB, L3, cB, lB, mB, dB, fB, hB, gB, xB, yB, bB, CB, VM, $B, AB, wB, IB, kB, NB, TB, _B, EB, SB, cL, RB, FB, vB, OB, PB, NM, MB, QL]; +for (let r of cne) + Ia(r); +var LB = "4.1.0"; +var lne = "4.1.0"; +var mne = "4.1.0"; +var dne = "4.1.0"; +var fne = "4.1.0"; +var hne = "0.0.1-alpha.16"; +var gne = { tfjs: LB, "tfjs-core": LB, "tfjs-converter": lne, "tfjs-backend-cpu": mne, "tfjs-backend-webgl": dne, "tfjs-backend-wasm": fne, "tfjs-backend-webgpu": hne }; // src/util/util.ts function log(...msg) { - const dt = new Date(); - const ts = `${dt.getHours().toString().padStart(2, "0")}:${dt.getMinutes().toString().padStart(2, "0")}:${dt.getSeconds().toString().padStart(2, "0")}.${dt.getMilliseconds().toString().padStart(3, "0")}`; + const dt2 = new Date(); + const ts = `${dt2.getHours().toString().padStart(2, "0")}:${dt2.getMinutes().toString().padStart(2, "0")}:${dt2.getSeconds().toString().padStart(2, "0")}.${dt2.getMilliseconds().toString().padStart(3, "0")}`; if (msg) console.log(ts, "Human:", ...msg); } @@ -31689,22 +31200,22 @@ function GLImageFilter() { ]); }, saturation: (amount) => { - const x6 = (amount || 0) * 2 / 3 + 1; - const y = (x6 - 1) * -0.5; + const x = (amount || 0) * 2 / 3 + 1; + const y10 = (x - 1) * -0.5; filter.colorMatrix([ - x6, - y, - y, + x, + y10, + y10, 0, 0, - y, - x6, - y, + y10, + x, + y10, 0, 0, - y, - y, - x6, + y10, + y10, + x, 0, 0, 0, @@ -31718,22 +31229,22 @@ function GLImageFilter() { filter.saturation(-1); }, contrast: (amount) => { - const v6 = (amount || 0) + 1; - const o = -128 * (v6 - 1); + const v10 = (amount || 0) + 1; + const o = -128 * (v10 - 1); filter.colorMatrix([ - v6, + v10, 0, 0, 0, o, 0, - v6, + v10, 0, 0, o, 0, 0, - v6, + v10, 0, o, 0, @@ -32104,26 +31615,26 @@ function GLImageFilter() { // src/image/enhance.ts async function histogramEqualization(inputImage) { - const squeeze = inputImage.shape.length === 4 ? jp(inputImage) : inputImage; - const rgb2 = $a(squeeze, 3, 2); - const min = [fl(rgb2[0]), fl(rgb2[1]), fl(rgb2[2])]; - const max = [Vs(rgb2[0]), Vs(rgb2[1]), Vs(rgb2[2])]; + const squeeze = inputImage.shape.length === 4 ? Up(inputImage) : inputImage; + const rgb2 = Oa(squeeze, 3, 2); + const min = [sl(rgb2[0]), sl(rgb2[1]), sl(rgb2[2])]; + const max = [Us(rgb2[0]), Us(rgb2[1]), Us(rgb2[2])]; const absMax = await Promise.all(max.map((channel) => channel.data())); const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); const maxRange = maxValue > 1 ? 255 : 1; const factor = maxRange / maxValue; let final; if (factor > 1) { - const sub = [ke(rgb2[0], min[0]), ke(rgb2[1], min[1]), ke(rgb2[2], min[2])]; - const range = [ke(max[0], min[0]), ke(max[1], min[1]), ke(max[2], min[2])]; - const enh = [oe(sub[0], factor), oe(sub[1], factor), oe(sub[2], factor)]; - const stack = Ir([enh[0], enh[1], enh[2]], 2); + const sub = [Ne(rgb2[0], min[0]), Ne(rgb2[1], min[1]), Ne(rgb2[2], min[2])]; + const range = [Ne(max[0], min[0]), Ne(max[1], min[1]), Ne(max[2], min[2])]; + const enh = [ae(sub[0], factor), ae(sub[1], factor), ae(sub[2], factor)]; + const stack = Sr([enh[0], enh[1], enh[2]], 2); final = z(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]); - Ft([...sub, ...range, ...enh]); + Dt([...sub, ...range, ...enh]); } else { - final = _a(squeeze, 0); + final = Fa(squeeze, 0); } - Ft([...rgb2, ...min, ...max, rgb2, squeeze, inputImage]); + Dt([...rgb2, ...min, ...max, rgb2, squeeze, inputImage]); return final; } @@ -32174,16 +31685,16 @@ function copy(input, output) { return outputCanvas; } async function process2(input, config3, getTensor = true) { - var _a2, _b, _c2; + var _a2, _b2, _c2; if (!input) { if (config3.debug) log("input error: input is missing"); return { tensor: null, canvas: null }; } - if (!(input instanceof ut) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + if (!(input instanceof it) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { throw new Error("input error: type is not recognized"); } - if (input instanceof ut) { + if (input instanceof it) { let tensor2 = null; if (input["isDisposedInternal"]) throw new Error("input error: attempted to use tensor but it is disposed"); @@ -32191,24 +31702,24 @@ async function process2(input, config3, getTensor = true) { throw new Error("input error: attempted to use tensor without a shape"); if (input.shape.length === 3) { if (input.shape[2] === 3) { - tensor2 = _a(input, 0); + tensor2 = Fa(input, 0); } else if (input.shape[2] === 4) { - const rgb2 = W1(input, [0, 0, 0], [-1, -1, 3]); - tensor2 = _a(rgb2, 0); - Ft(rgb2); + const rgb2 = g1(input, [0, 0, 0], [-1, -1, 3]); + tensor2 = Fa(rgb2, 0); + Dt(rgb2); } } else if (input.shape.length === 4) { if (input.shape[3] === 3) { - tensor2 = zr(input); + tensor2 = Br(input); } else if (input.shape[3] === 4) { - tensor2 = U1(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + tensor2 = x1(input, [0, 0, 0, 0], [-1, -1, -1, 3]); } } if (tensor2 == null || tensor2.shape.length !== 4 || tensor2.shape[0] !== 1 || tensor2.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); if (tensor2.dtype === "int32") { - const cast = qe(tensor2, "float32"); - Ft(tensor2); + const cast = Ke(tensor2, "float32"); + Dt(tensor2); tensor2 = cast; } return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null }; @@ -32237,7 +31748,7 @@ async function process2(input, config3, getTensor = true) { } if ((((_a2 = config3.filter) == null ? void 0 : _a2.width) || 0) > 0) targetWidth = config3.filter.width; - else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) + else if ((((_b2 = config3.filter) == null ? void 0 : _b2.height) || 0) > 0) targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); if ((config3.filter.height || 0) > 0) targetHeight = config3.filter.height; @@ -32320,8 +31831,8 @@ async function process2(input, config3, getTensor = true) { let pixels; let depth = 3; if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { - if (env.browser && Sv) { - pixels = Sv ? Sv.fromPixels(input) : null; + if (env.browser && Qv) { + pixels = Qv ? Qv.fromPixels(input) : null; } else { depth = input.data.length / input.height / input.width; const arr = new Uint8Array(input.data.buffer); @@ -32330,12 +31841,12 @@ async function process2(input, config3, getTensor = true) { } else { if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) tmpCanvas = canvas(outCanvas.width, outCanvas.height); - if (Sv && env.browser) { + if (Qv && env.browser) { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { - pixels = Sv.fromPixels(outCanvas); + pixels = Qv.fromPixels(outCanvas); } else { tmpCanvas = copy(outCanvas); - pixels = Sv.fromPixels(tmpCanvas); + pixels = Qv.fromPixels(tmpCanvas); } } else { const tempCanvas = copy(outCanvas); @@ -32347,20 +31858,20 @@ async function process2(input, config3, getTensor = true) { } } if (depth === 4) { - const rgb2 = W1(pixels, [0, 0, 0], [-1, -1, 3]); - Ft(pixels); + const rgb2 = g1(pixels, [0, 0, 0], [-1, -1, 3]); + Dt(pixels); pixels = rgb2; } if (!pixels) throw new Error("input error: cannot create tensor"); - const casted = qe(pixels, "float32"); - const tensor = config3.filter.equalization ? await histogramEqualization(casted) : _a(casted, 0); - Ft([pixels, casted]); + const casted = Ke(pixels, "float32"); + const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Fa(casted, 0); + Dt([pixels, casted]); if (config3.filter.autoBrightness) { - const max = Vs(tensor); + const max = Us(tensor); const maxVal = await max.data(); config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; - Ft(max); + Dt(max); } return { tensor, canvas: config3.filter.return ? outCanvas : null }; } @@ -32369,25 +31880,25 @@ async function skip(config3, input) { if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; if (!last.inputTensor) { - last.inputTensor = zr(input); + last.inputTensor = Br(input); } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { - Ft(last.inputTensor); - last.inputTensor = zr(input); + Dt(last.inputTensor); + last.inputTensor = Br(input); } else { - const t10 = {}; - t10.diff = ke(input, last.inputTensor); - t10.squared = oe(t10.diff, t10.diff); - t10.sum = tt(t10.squared); - const diffSum = await t10.sum.data(); + const t6 = {}; + t6.diff = Ne(input, last.inputTensor); + t6.squared = ae(t6.diff, t6.diff); + t6.sum = et(t6.squared); + const diffSum = await t6.sum.data(); const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; - Ft([last.inputTensor, t10.diff, t10.squared, t10.sum]); - last.inputTensor = zr(input); + Dt([last.inputTensor, t6.diff, t6.squared, t6.sum]); + last.inputTensor = Br(input); skipFrame = diffRelative <= (config3.cacheSensitivity || 0); } return skipFrame; } async function compare(config3, input1, input2) { - const t10 = {}; + const t6 = {}; if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) { if (!config3.debug) log("invalid input tensor or tensor shapes do not match:", input1.shape, input2.shape); @@ -32398,14 +31909,14 @@ async function compare(config3, input1, input2) { log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); return 0; } - t10.input1 = zr(input1); - t10.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? zq.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : zr(input2); - t10.diff = ke(t10.input1, t10.input2); - t10.squared = oe(t10.diff, t10.diff); - t10.sum = tt(t10.squared); - const diffSum = await t10.sum.data(); + t6.input1 = Br(input1); + t6.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? uq.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : Br(input2); + t6.diff = Ne(t6.input1, t6.input2); + t6.squared = ae(t6.diff, t6.diff); + t6.sum = et(t6.squared); + const diffSum = await t6.sum.data(); const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; - Ft([t10.input1, t10.input2, t10.diff, t10.squared, t10.sum]); + Dt([t6.input1, t6.input2, t6.diff, t6.squared, t6.sum]); return diffRelative; } @@ -32456,7 +31967,7 @@ var Env = class { __publicField(this, "ImageData"); this.browser = typeof navigator !== "undefined"; this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; - this.tfjs = { version: Cne["tfjs-core"] }; + this.tfjs = { version: gne["tfjs-core"] }; this.offscreen = typeof OffscreenCanvas !== "undefined"; this.initial = true; this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; @@ -32479,16 +31990,16 @@ var Env = class { this.backends = Object.keys(cr().registryFactory); try { this.tensorflow = { - version: Bie()["binding"] ? Bie()["binding"].TF_Version : void 0, - gpu: Bie()["binding"] ? Bie()["binding"].isUsingGpuDevice() : void 0 + version: Oie()["binding"] ? Oie()["binding"].TF_Version : void 0, + gpu: Oie()["binding"] ? Oie()["binding"].isUsingGpuDevice() : void 0 }; } catch (e) { } this.wasm.supported = typeof WebAssembly !== "undefined"; this.wasm.backend = this.backends.includes("wasm"); if (this.wasm.supported && this.wasm.backend) { - this.wasm.simd = await P().getAsync("WASM_HAS_SIMD_SUPPORT"); - this.wasm.multithread = await P().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + this.wasm.simd = await O().getAsync("WASM_HAS_SIMD_SUPPORT"); + this.wasm.multithread = await O().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); } const c = canvas(100, 100); const gl2 = c ? c.getContext("webgl2") : void 0; @@ -32511,7 +32022,7 @@ var Env = class { this.webgpu.supported = false; } try { - this.kernels = zm(Pie()).map((kernel) => kernel.kernelName.toLowerCase()); + this.kernels = Am(Aie()).map((kernel) => kernel.kernelName.toLowerCase()); } catch (e) { } } @@ -32713,7 +32224,7 @@ __export(models_exports, { blazeface: () => blazeface, "blazeface-back": () => blazeface_back, "blazeface-front": () => blazeface_front, - "blazepose-detect": () => blazepose_detect, + "blazepose-detector": () => blazepose_detector, "blazepose-detector2d": () => blazepose_detector2d, "blazepose-detector3d": () => blazepose_detector3d, "blazepose-full": () => blazepose_full, @@ -32811,7 +32322,7 @@ var nanodet = 7574558; var posenet = 5032780; var rvm = 3739355; var selfie = 212886; -var blazepose_detect = 5928804; +var blazepose_detector = 5928856; var anti_spoofing = 853098; var efficientpose_i_lite = 2269064; var efficientpose_ii_lite = 5651240; @@ -32870,7 +32381,7 @@ var models_default = { posenet, rvm, selfie, - "blazepose-detect": blazepose_detect, + "blazepose-detector": blazepose_detector, "anti-spoofing": anti_spoofing, "efficientpose-i-lite": efficientpose_i_lite, "efficientpose-ii-lite": efficientpose_ii_lite, @@ -32906,7 +32417,7 @@ function setModelLoadOptions(config3) { options.modelBasePath = config3.modelBasePath; } async function loadModel(modelPath) { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; let modelUrl = join(options.modelBasePath, modelPath || ""); if (!modelUrl.toLowerCase().endsWith(".json")) modelUrl += ".json"; @@ -32924,14 +32435,14 @@ async function loadModel(modelPath) { options.cacheSupported = typeof indexedDB !== "undefined"; let cachedModels = {}; try { - cachedModels = options.cacheSupported && options.cacheModels ? await va.listModels() : {}; + cachedModels = options.cacheSupported && options.cacheModels ? await Ea.listModels() : {}; } catch (e) { options.cacheSupported = false; } modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; - let model23 = new bl(modelStats[shortModelName].url, tfLoadOptions); + let model23 = new ll(modelStats[shortModelName].url, tfLoadOptions); let loaded = false; try { model23.findIOHandler(); @@ -32942,11 +32453,11 @@ async function loadModel(modelPath) { } try { const artifacts = await ((_a2 = model23.handler) == null ? void 0 : _a2.load()) || null; - modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; + modelStats[shortModelName].sizeFromManifest = ((_b2 = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b2.byteLength) || 0; if (artifacts) model23.loadSync(artifacts); else - model23 = await U6(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + model23 = await l6(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); modelStats[shortModelName].sizeLoadedWeights = ((_d2 = (_c2 = model23.artifacts) == null ? void 0 : _c2.weightData) == null ? void 0 : _d2.byteLength) || 0; if (options.verbose) log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); @@ -33001,7 +32512,7 @@ function register(instance) { log("humangl error: backend invalid context"); instance.models.reset(); } - if (!Mie(config2.name)) { + if (!Fie(config2.name)) { try { config2.canvas = canvas(100, 100); } catch (err) { @@ -33039,37 +32550,37 @@ function register(instance) { return; } try { - MI(2, config2.gl); + RS(2, config2.gl); } catch (err) { log("humangl error: cannot set webgl context:", err); return; } try { const ctx = new Fu(config2.gl); - pi(config2.name, () => new Ni(ctx), config2.priority); + Ci(config2.name, () => new Bi(ctx), config2.priority); } catch (err) { log("humangl error: cannot register webgl backend:", err); return; } try { - const kernels = zm("webgl"); + const kernels = Am("webgl"); kernels.forEach((kernelConfig) => { const newKernelConfig = { ...kernelConfig, backendName: config2.name }; - ya(newKernelConfig); + Ia(newKernelConfig); }); } catch (err) { log("humangl error: cannot update webgl backend registration:", err); return; } try { - if (P().flagRegistry.WEBGL_VERSION) - P().set("WEBGL_VERSION", 2); + if (O().flagRegistry.WEBGL_VERSION) + O().set("WEBGL_VERSION", 2); } catch (err) { log("humangl error: cannot set WebGL backend flags:", err); return; } extensions(); - const backend = Bie(); + const backend = Oie(); const current = typeof backend["gpgpu"] !== "undefined" ? backend["getGPGPUContext"]().gl : null; if (current) { if (instance.config.debug) @@ -33116,36 +32627,36 @@ function registerCustomOps(config3) { if (!env.kernels.includes("mod")) { const kernelMod = { kernelName: "Mod", - backendName: Pie(), - kernelFunc: (op2) => Ne(() => ke(op2.inputs.a, oe(We(op2.inputs.a, op2.inputs.b), op2.inputs.b))) + backendName: Aie(), + kernelFunc: (op2) => Ee(() => Ne(op2.inputs.a, ae(Ge(op2.inputs.a, op2.inputs.b), op2.inputs.b))) }; - ya(kernelMod); + Ia(kernelMod); env.kernels.push("mod"); newKernels.push("mod"); } if (!env.kernels.includes("floormod")) { const kernelFloorMod = { kernelName: "FloorMod", - backendName: Pie(), - kernelFunc: (op2) => Ne(() => ge(oe(cf(op2.inputs.a, op2.inputs.b), op2.inputs.b), jk(op2.inputs.a, op2.inputs.b))) + backendName: Aie(), + kernelFunc: (op2) => Ee(() => xe(ae(Jm(op2.inputs.a, op2.inputs.b), op2.inputs.b), wk(op2.inputs.a, op2.inputs.b))) }; - ya(kernelFloorMod); + Ia(kernelFloorMod); env.kernels.push("floormod"); newKernels.push("floormod"); } if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { const kernelRotateWithOffset = { kernelName: "RotateWithOffset", - backendName: Pie(), - kernelFunc: (op2) => Ne(() => { - const backend = Pie(); - Fie("cpu"); - const t10 = zq.rotateWithOffset(op2.inputs.image, op2.attrs.radians, op2.attrs.fillValue, op2.attrs.center); - Fie(backend); - return t10; + backendName: Aie(), + kernelFunc: (op2) => Ee(() => { + const backend = Aie(); + Eie("cpu"); + const t6 = uq.rotateWithOffset(op2.inputs.image, op2.attrs.radians, op2.attrs.fillValue, op2.attrs.center); + Eie(backend); + return t6; }) }; - ya(kernelRotateWithOffset); + Ia(kernelRotateWithOffset); env.kernels.push("rotatewithoffset"); newKernels.push("rotatewithoffset"); } @@ -33158,7 +32669,7 @@ async function check(instance, force = false) { instance.state = "backend"; if (((_a2 = instance.config.backend) == null ? void 0 : _a2.length) === 0) instance.config.backend = await getBestBackend(); - if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && Pie() !== instance.config.backend) { + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && Aie() !== instance.config.backend) { const timeStamp = now(); if (instance.config.backend && instance.config.backend.length > 0) { if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { @@ -33208,21 +32719,21 @@ async function check(instance, force = false) { if (instance.config.debug) log("setting backend:", [instance.config.backend]); if (instance.config.backend === "wasm") { - if (P().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) - P().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (O().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) + O().set("CANVAS2D_WILL_READ_FREQUENTLY", true); if (instance.config.debug) log("wasm path:", instance.config.wasmPath); - if (typeof rte !== "undefined") - rte(instance.config.wasmPath, instance.config.wasmPlatformFetch); + if (typeof vee !== "undefined") + vee(instance.config.wasmPath, instance.config.wasmPlatformFetch); else throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); - let mt2 = false; + let mt = false; let simd = false; try { - mt2 = await P().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); - simd = await P().getAsync("WASM_HAS_SIMD_SUPPORT"); + mt = await O().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + simd = await O().getAsync("WASM_HAS_SIMD_SUPPORT"); if (instance.config.debug) - log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt2 ? "multithreaded" : "singlethreaded"}`); + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); if (instance.config.debug && !simd) log("warning: wasm simd support is not enabled"); } catch (e) { @@ -33230,29 +32741,29 @@ async function check(instance, force = false) { } } try { - await Fie(instance.config.backend); - await Die(); + await Eie(instance.config.backend); + await $ie(); } catch (err) { log("error: cannot set backend:", instance.config.backend, err); return false; } if (instance.config.debug) - defaultFlags = JSON.parse(JSON.stringify(P().flags)); + defaultFlags = JSON.parse(JSON.stringify(O().flags)); } - if (Pie() === "humangl" || Pie() === "webgl") { - if (P().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) - P().set("WEBGL_USE_SHAPES_UNIFORMS", true); - if (P().flagRegistry.WEBGL_EXP_CONV) - P().set("WEBGL_EXP_CONV", true); + if (Aie() === "humangl" || Aie() === "webgl") { + if (O().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) + O().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (O().flagRegistry.WEBGL_EXP_CONV) + O().set("WEBGL_EXP_CONV", true); if (instance.config.debug && typeof instance.config.deallocate !== "undefined" && instance.config.deallocate) { log("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:", true); - P().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); + O().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); } } - if (Pie() === "webgpu") { + if (Aie() === "webgpu") { } if (instance.config.debug) { - const newFlags = P().flags; + const newFlags = O().flags; const updatedFlags = {}; for (const key of Object.keys(newFlags)) { if (defaultFlags[key] === newFlags[key]) @@ -33260,19 +32771,19 @@ async function check(instance, force = false) { updatedFlags[key] = newFlags[key]; } if (instance.config.debug && Object.keys(updatedFlags).length > 0) - log("backend:", Pie(), "flags:", updatedFlags); + log("backend:", Aie(), "flags:", updatedFlags); } if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { if (instance.config.debug) log("flags:", instance.config["flags"]); for (const [key, val] of Object.entries(instance.config.flags)) { - P().set(key, val); + O().set(key, val); } } - Tie(); + wie(); init(); instance.performance.initBackend = Math.trunc(now() - timeStamp); - instance.config.backend = Pie(); + instance.config.backend = Aie(); await env.updateBackend(); registerCustomOps(instance.config); env.initial = false; @@ -33291,9 +32802,9 @@ function fakeOps(kernelNames, config3) { return (_a2 = param == null ? void 0 : param.inputs) == null ? void 0 : _a2.info; } }; - ya(kernelConfig); + Ia(kernelConfig); } - env.kernels = zm(Pie()).map((kernel) => kernel.kernelName.toLowerCase()); + env.kernels = Am(Aie()).map((kernel) => kernel.kernelName.toLowerCase()); } // src/draw/draw.ts @@ -33328,48 +32839,48 @@ var getCanvasContext = (input) => { }; var rad2deg = (theta) => Math.round(theta * 180 / Math.PI); var replace = (str, source, target) => str.replace(source, typeof target === "number" ? target.toFixed(1) : target); -var colorDepth = (z10, opt) => { - if (!opt.useDepth || typeof z10 === "undefined") +var colorDepth = (z8, opt) => { + if (!opt.useDepth || typeof z8 === "undefined") return opt.color; - const rgb2 = Uint8ClampedArray.from([127 + 2 * z10, 127 - 2 * z10, 255]); + const rgb2 = Uint8ClampedArray.from([127 + 2 * z8, 127 - 2 * z8, 255]); return `rgba(${rgb2[0]}, ${rgb2[1]}, ${rgb2[2]}, ${opt.alpha})`; }; function labels(ctx, str, startX, startY, localOptions2) { const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); - const x6 = Math.max(0, startX); + const x = Math.max(0, startX); for (let i = line.length - 1; i >= 0; i--) { - const y = i * localOptions2.lineHeight + startY; + const y10 = i * localOptions2.lineHeight + startY; if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { ctx.fillStyle = localOptions2.shadowColor; - ctx.fillText(line[i], x6 + 5, y + 16); + ctx.fillText(line[i], x + 5, y10 + 16); } ctx.fillStyle = localOptions2.labelColor; - ctx.fillText(line[i], x6 + 4, y + 15); + ctx.fillText(line[i], x + 4, y10 + 15); } } -function point(ctx, x6, y, z10, localOptions2) { - ctx.fillStyle = colorDepth(z10, localOptions2); +function point(ctx, x, y10, z8, localOptions2) { + ctx.fillStyle = colorDepth(z8, localOptions2); ctx.beginPath(); - ctx.arc(x6, y, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.arc(x, y10, localOptions2.pointSize, 0, 2 * Math.PI); ctx.fill(); } -function rect(ctx, x6, y, width, height, localOptions2) { +function rect(ctx, x, y10, width, height, localOptions2) { ctx.beginPath(); ctx.lineWidth = localOptions2.lineWidth; if (localOptions2.useCurves) { - const cx2 = (x6 + x6 + width) / 2; - const cy = (y + y + height) / 2; + const cx2 = (x + x + width) / 2; + const cy = (y10 + y10 + height) / 2; ctx.ellipse(cx2, cy, width / 2, height / 2, 0, 0, 2 * Math.PI); } else { - ctx.moveTo(x6 + localOptions2.roundRect, y); - ctx.lineTo(x6 + width - localOptions2.roundRect, y); - ctx.quadraticCurveTo(x6 + width, y, x6 + width, y + localOptions2.roundRect); - ctx.lineTo(x6 + width, y + height - localOptions2.roundRect); - ctx.quadraticCurveTo(x6 + width, y + height, x6 + width - localOptions2.roundRect, y + height); - ctx.lineTo(x6 + localOptions2.roundRect, y + height); - ctx.quadraticCurveTo(x6, y + height, x6, y + height - localOptions2.roundRect); - ctx.lineTo(x6, y + localOptions2.roundRect); - ctx.quadraticCurveTo(x6, y, x6 + localOptions2.roundRect, y); + ctx.moveTo(x + localOptions2.roundRect, y10); + ctx.lineTo(x + width - localOptions2.roundRect, y10); + ctx.quadraticCurveTo(x + width, y10, x + width, y10 + localOptions2.roundRect); + ctx.lineTo(x + width, y10 + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y10 + height, x + width - localOptions2.roundRect, y10 + height); + ctx.lineTo(x + localOptions2.roundRect, y10 + height); + ctx.quadraticCurveTo(x, y10 + height, x, y10 + height - localOptions2.roundRect); + ctx.lineTo(x, y10 + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y10, x + localOptions2.roundRect, y10); ctx.closePath(); } ctx.stroke(); @@ -33412,23 +32923,23 @@ function curves(ctx, points, localOptions2) { } function arrow(ctx, from, to2, radius = 5) { let angle; - let x6; - let y; + let x; + let y10; ctx.beginPath(); ctx.moveTo(from[0], from[1]); ctx.lineTo(to2[0], to2[1]); angle = Math.atan2(to2[1] - from[1], to2[0] - from[0]); - x6 = radius * Math.cos(angle) + to2[0]; - y = radius * Math.sin(angle) + to2[1]; - ctx.moveTo(x6, y); + x = radius * Math.cos(angle) + to2[0]; + y10 = radius * Math.sin(angle) + to2[1]; + ctx.moveTo(x, y10); angle += 1 / 3 * (2 * Math.PI); - x6 = radius * Math.cos(angle) + to2[0]; - y = radius * Math.sin(angle) + to2[1]; - ctx.lineTo(x6, y); + x = radius * Math.cos(angle) + to2[0]; + y10 = radius * Math.sin(angle) + to2[1]; + ctx.lineTo(x, y10); angle += 1 / 3 * (2 * Math.PI); - x6 = radius * Math.cos(angle) + to2[0]; - y = radius * Math.sin(angle) + to2[1]; - ctx.lineTo(x6, y); + x = radius * Math.cos(angle) + to2[0]; + y10 = radius * Math.sin(angle) + to2[1]; + ctx.lineTo(x, y10); ctx.closePath(); ctx.stroke(); ctx.fill(); @@ -36749,9 +36260,9 @@ var VTX68 = [ ]; var VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; var VTX7 = [33, 133, 362, 263, 1, 78, 308]; -var UV68 = VTX68.map((x6) => UV468[x6]); -var UV33 = VTX33.map((x6) => UV468[x6]); -var UV7 = VTX7.map((x6) => UV468[x6]); +var UV68 = VTX68.map((x) => UV468[x]); +var UV33 = VTX33.map((x) => UV468[x]); +var UV7 = VTX7.map((x) => UV468[x]); function connectionsToIndices(connections) { const indices = connections.map((connection) => connection[0]); indices.push(connections[connections.length - 1][1]); @@ -37190,7 +36701,7 @@ var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ // src/draw/face.ts var localOptions; function drawLabels(f, ctx) { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2; + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2; if (!localOptions.drawLabels || ((_a2 = localOptions.faceLabels) == null ? void 0 : _a2.length) === 0) return; let l = localOptions.faceLabels.slice(); @@ -37214,7 +36725,7 @@ function drawLabels(f, ctx) { emotion2.length = 3; l = replace(l, "[emotions]", emotion2.join(" ")); } - if ((_c2 = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c2.roll) + if ((_c2 = (_b2 = f.rotation) == null ? void 0 : _b2.angle) == null ? void 0 : _c2.roll) l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); if ((_e2 = (_d2 = f.rotation) == null ? void 0 : _d2.angle) == null ? void 0 : _e2.yaw) l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); @@ -37225,8 +36736,8 @@ function drawLabels(f, ctx) { labels(ctx, l, f.box[0], f.box[1], localOptions); } function drawIrisElipse(f, ctx) { - var _a2, _b, _c2, _d2; - if (((_a2 = f.annotations) == null ? void 0 : _a2.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + var _a2, _b2, _c2, _d2; + if (((_a2 = f.annotations) == null ? void 0 : _a2.leftEyeIris) && ((_b2 = f.annotations) == null ? void 0 : _b2.leftEyeIris[0])) { ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; ctx.beginPath(); const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; @@ -37346,7 +36857,7 @@ function face(inCanvas2, result, drawOptions) { // src/draw/body.ts function body(inCanvas2, result, drawOptions) { - var _a2, _b; + var _a2, _b2; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; @@ -37375,7 +36886,7 @@ function body(inCanvas2, result, drawOptions) { point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions2); } } - if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { + if (localOptions2.drawLabels && ((_b2 = localOptions2.bodyPartLabels) == null ? void 0 : _b2.length) > 0 && result[i].keypoints) { ctx.font = localOptions2.font; for (const pt of result[i].keypoints) { if (!pt.score || pt.score === 0) @@ -37397,7 +36908,7 @@ function body(inCanvas2, result, drawOptions) { // src/draw/hand.ts function hand(inCanvas2, result, drawOptions) { - var _a2, _b; + var _a2, _b2; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; @@ -37427,7 +36938,7 @@ function hand(inCanvas2, result, drawOptions) { } } } - if (localOptions2.drawLabels && h.annotations && ((_b = localOptions2.fingerLabels) == null ? void 0 : _b.length) > 0) { + if (localOptions2.drawLabels && h.annotations && ((_b2 = localOptions2.fingerLabels) == null ? void 0 : _b2.length) > 0) { for (const [part, pt] of Object.entries(h.annotations)) { let l = localOptions2.fingerLabels.slice(); l = replace(l, "[label]", part); @@ -37440,8 +36951,8 @@ function hand(inCanvas2, result, drawOptions) { return; for (let i = 0; i < part.length; i++) { ctx.beginPath(); - const z10 = part[i][2] || 0; - ctx.strokeStyle = colorDepth(i * z10, localOptions2); + const z8 = part[i][2] || 0; + ctx.strokeStyle = colorDepth(i * z8, localOptions2); ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]); ctx.lineTo(part[i][0], part[i][1]); ctx.stroke(); @@ -37689,10 +37200,10 @@ function createAnchors() { const stride = strides[layerId]; const featureMapHeight = Math.ceil(inputSize / stride); const featureMapWidth = Math.ceil(inputSize / stride); - for (let y = 0; y < featureMapHeight; ++y) { - for (let x6 = 0; x6 < featureMapWidth; ++x6) { + for (let y10 = 0; y10 < featureMapHeight; ++y10) { + for (let x = 0; x < featureMapWidth; ++x) { for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { - anchors3.push({ x: (x6 + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight }); + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y10 + 0.5) / featureMapHeight }); } } } @@ -37714,34 +37225,34 @@ async function loadDetector(config3) { } var cropFactor = [5, 5]; function decodeBoxes(boxesTensor, anchor) { - return Ne(() => { - const split = $a(boxesTensor, 12, 1); - let xCenter = jp(split[0]); - let yCenter = jp(split[1]); - let width = jp(split[2]); - let height = jp(split[3]); - xCenter = ge(We(xCenter, inputSize), anchor.x); - yCenter = ge(We(yCenter, inputSize), anchor.y); - width = oe(We(width, inputSize), cropFactor[0]); - height = oe(We(height, inputSize), cropFactor[1]); - const xMin = ke(xCenter, We(width, 2)); - const yMin = ke(yCenter, We(height, 2)); - const xMax = ge(xMin, width); - const yMax = ge(yMin, height); - const boxes = Ir([xMin, yMin, xMax, yMax], 1); + return Ee(() => { + const split = Oa(boxesTensor, 12, 1); + let xCenter = Up(split[0]); + let yCenter = Up(split[1]); + let width = Up(split[2]); + let height = Up(split[3]); + xCenter = xe(Ge(xCenter, inputSize), anchor.x); + yCenter = xe(Ge(yCenter, inputSize), anchor.y); + width = ae(Ge(width, inputSize), cropFactor[0]); + height = ae(Ge(height, inputSize), cropFactor[1]); + const xMin = Ne(xCenter, Ge(width, 2)); + const yMin = Ne(yCenter, Ge(height, 2)); + const xMax = xe(xMin, width); + const yMax = xe(yMin, height); + const boxes = Sr([xMin, yMin, xMax, yMax], 1); return boxes; }); } async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { - var _a2, _b; + var _a2, _b2; const detectedBoxes = []; - const t10 = {}; - t10.boxes = decodeBoxes(boxesTensor, anchorTensor); - t10.scores = Ms(logitsTensor); - t10.nms = await zq.nonMaxSuppressionAsync(t10.boxes, t10.scores, 1, ((_a2 = config3.body["detector"]) == null ? void 0 : _a2.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); - const nms = await t10.nms.data(); - const scores = await t10.scores.data(); - const boxes = await t10.boxes.array(); + const t6 = {}; + t6.boxes = decodeBoxes(boxesTensor, anchorTensor); + t6.scores = zs(logitsTensor); + t6.nms = await uq.nonMaxSuppressionAsync(t6.boxes, t6.scores, 1, ((_a2 = config3.body["detector"]) == null ? void 0 : _a2.minConfidence) || 0.1, ((_b2 = config3.body["detector"]) == null ? void 0 : _b2.iouThreshold) || 0.1); + const nms = await t6.nms.data(); + const scores = await t6.scores.data(); + const boxes = await t6.boxes.array(); for (const i of Array.from(nms)) { const score = scores[i]; const boxRaw = boxes[i]; @@ -37749,18 +37260,18 @@ async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { const detectedBox = { score, boxRaw, box }; detectedBoxes.push(detectedBox); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return detectedBoxes; } async function detectBoxes(input, config3, outputSize2) { - const t10 = {}; - t10.res = model == null ? void 0 : model.execute(input, ["Identity"]); - t10.logitsRaw = Ue(t10.res, [0, 0, 0], [1, -1, 1]); - t10.boxesRaw = Ue(t10.res, [0, 0, 1], [1, -1, -1]); - t10.logits = jp(t10.logitsRaw); - t10.boxes = jp(t10.boxesRaw); - const boxes = await decodeResults(t10.boxes, t10.logits, config3, outputSize2); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + const t6 = {}; + t6.res = model == null ? void 0 : model.execute(input, ["Identity"]); + t6.logitsRaw = He(t6.res, [0, 0, 0], [1, -1, 1]); + t6.boxesRaw = He(t6.res, [0, 0, 1], [1, -1, -1]); + t6.logits = Up(t6.logitsRaw); + t6.boxes = Up(t6.boxesRaw); + const boxes = await decodeResults(t6.boxes, t6.logits, config3, outputSize2); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return boxes; } @@ -37805,7 +37316,7 @@ var outputNodes = { var cache = []; var padding = [[0, 0], [0, 0], [0, 0], [0, 0]]; var lastTime = 0; -var sigmoid = (x6) => 1 - 1 / (1 + Math.exp(x6)); +var sigmoid = (x) => 1 - 1 / (1 + Math.exp(x)); var loadDetect = (config3) => loadDetector(config3); async function loadPose(config3) { if (env.initial) @@ -37819,13 +37330,13 @@ async function loadPose(config3) { return model2; } function prepareImage(input, size2, cropBox) { - var _a2, _b; - const t10 = {}; - if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + var _a2, _b2; + const t6 = {}; + if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b2 = input == null ? void 0 : input.shape) == null ? void 0 : _b2[2])) return input; let final; if (cropBox) { - t10.cropped = zq.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + t6.cropped = uq.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); } if (input.shape[1] !== input.shape[2]) { const height = [ @@ -37842,16 +37353,16 @@ function prepareImage(input, size2, cropBox) { width, [0, 0] ]; - t10.pad = Ws(t10.cropped || input, padding); - t10.resize = zq.resizeBilinear(t10.pad, [size2, size2]); - final = We(t10.resize, constants.tf255); + t6.pad = Hs(t6.cropped || input, padding); + t6.resize = uq.resizeBilinear(t6.pad, [size2, size2]); + final = Ge(t6.resize, constants.tf255); } else if (input.shape[1] !== size2) { - t10.resize = zq.resizeBilinear(t10.cropped || input, [size2, size2]); - final = We(t10.resize, constants.tf255); + t6.resize = uq.resizeBilinear(t6.cropped || input, [size2, size2]); + final = Ge(t6.resize, constants.tf255); } else { - final = We(t10.cropped || input, constants.tf255); + final = Ge(t6.cropped || input, constants.tf255); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return final; } function rescaleKeypoints(keypoints, outputSize2, cropBox) { @@ -37894,12 +37405,12 @@ function fixKeypoints(keypoints) { async function detectLandmarks(input, config3, outputSize2) { if (!(model2 == null ? void 0 : model2["executor"])) return null; - const t10 = {}; - [t10.ld, t10.segmentation, t10.heatmap, t10.world, t10.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); - const poseScore = (await t10.poseflag.data())[0]; - const points = await t10.ld.data(); - const distances = await t10.world.data(); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + const t6 = {}; + [t6.ld, t6.segmentation, t6.heatmap, t6.world, t6.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); + const poseScore = (await t6.poseflag.data())[0]; + const points = await t6.ld.data(); + const distances = await t6.world.data(); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); const keypointsRelative = []; const depth = 5; for (let i = 0; i < points.length / depth; i++) { @@ -37932,7 +37443,7 @@ async function detectLandmarks(input, config3, outputSize2) { return body4; } async function predict(input, config3) { - var _a2, _b, _c2; + var _a2, _b2, _c2; const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; const skipTime = (config3.body.skipTime || 0) > now() - lastTime; const skipFrame = skipped < (config3.body.skipFrames || 0); @@ -37940,10 +37451,10 @@ async function predict(input, config3) { skipped++; } else { let boxes = []; - if ((_b = (_a2 = config3.body) == null ? void 0 : _a2["detector"]) == null ? void 0 : _b["enabled"]) { + if ((_b2 = (_a2 = config3.body) == null ? void 0 : _a2["detector"]) == null ? void 0 : _b2["enabled"]) { const preparedImage = prepareImage(input, 224); boxes = await detectBoxes(preparedImage, config3, outputSize2); - Ft(preparedImage); + Dt(preparedImage); } else { boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; } @@ -37951,7 +37462,7 @@ async function predict(input, config3) { const preparedBox = prepareImage(input, 256, (_c2 = boxes[i]) == null ? void 0 : _c2.boxRaw); cache.length = 0; const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); - Ft(preparedBox); + Dt(preparedBox); if (!bodyResult) continue; bodyResult.id = i; @@ -38067,18 +37578,18 @@ async function load(config3) { async function process3(res, outputShape, config3) { if (!res) return []; - const t10 = {}; + const t6 = {}; const results = []; const detections = await res.array(); - t10.squeeze = jp(res); - const arr = $a(t10.squeeze, 6, 1); - t10.stack = Ir([arr[1], arr[0], arr[3], arr[2]], 1); - t10.boxes = jp(t10.stack); - t10.scores = jp(arr[4]); - t10.classes = jp(arr[5]); - Ft([res, ...arr]); - t10.nms = await zq.nonMaxSuppressionAsync(t10.boxes, t10.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); - const nms = await t10.nms.data(); + t6.squeeze = Up(res); + const arr = Oa(t6.squeeze, 6, 1); + t6.stack = Sr([arr[1], arr[0], arr[3], arr[2]], 1); + t6.boxes = Up(t6.stack); + t6.scores = Up(arr[4]); + t6.classes = Up(arr[5]); + Dt([res, ...arr]); + t6.nms = await uq.nonMaxSuppressionAsync(t6.boxes, t6.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + const nms = await t6.nms.data(); let i = 0; for (const id2 of Array.from(nms)) { const score = Math.trunc(100 * detections[0][id2][4]) / 100; @@ -38086,15 +37597,15 @@ async function process3(res, outputShape, config3) { if (Number.isNaN(classVal)) continue; const label = labels2[classVal].label; - const [x6, y] = [ + const [x, y10] = [ detections[0][id2][0] / inputSize3, detections[0][id2][1] / inputSize3 ]; const boxRaw = [ - x6, - y, - detections[0][id2][2] / inputSize3 - x6, - detections[0][id2][3] / inputSize3 - y + x, + y10, + detections[0][id2][2] / inputSize3 - x, + detections[0][id2][3] / inputSize3 - y10 ]; const box = [ Math.trunc(boxRaw[0] * outputShape[0]), @@ -38104,7 +37615,7 @@ async function process3(res, outputShape, config3) { ]; results.push({ id: i++, score, class: classVal, label, box, boxRaw }); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return results; } async function predict2(input, config3) { @@ -38119,10 +37630,10 @@ async function predict2(input, config3) { skipped2 = 0; return new Promise(async (resolve) => { const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; - const resize = zq.resizeBilinear(input, [inputSize3, inputSize3]); + const resize = uq.resizeBilinear(input, [inputSize3, inputSize3]); const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; lastTime2 = now(); - Ft(resize); + Dt(resize); const obj = await process3(objectT, outputSize2, config3); last2 = obj; resolve(obj); @@ -38179,18 +37690,18 @@ async function load2(config3) { async function max2d(inputs, minScore) { const [width, height] = inputs.shape; const reshaped = z(inputs, [height * width]); - const max = Vs(reshaped, 0); + const max = Us(reshaped, 0); const newScore = (await max.data())[0]; if (newScore > minScore) { - const coordinates = Hv(reshaped, 0); - const mod = jk(coordinates, width); - const x6 = (await mod.data())[0]; - const div = We(coordinates, width); - const y = (await div.data())[0]; - Ft([reshaped, max, coordinates, mod, div]); - return [x6, y, newScore]; + const coordinates = b0(reshaped, 0); + const mod = wk(coordinates, width); + const x = (await mod.data())[0]; + const div = Ge(coordinates, width); + const y10 = (await div.data())[0]; + Dt([reshaped, max, coordinates, mod, div]); + return [x, y10, newScore]; } - Ft([reshaped, max]); + Dt([reshaped, max]); return [0, 0, newScore]; } async function predict3(image, config3) { @@ -38204,51 +37715,51 @@ async function predict3(image, config3) { } skipped3 = 0; return new Promise(async (resolve) => { - const tensor = Ne(() => { - var _a2, _b; - const resize = zq.resizeBilinear(image, [((_a2 = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a2[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); - const enhance2 = oe(resize, constants.tf2); - const norm = ke(enhance2, constants.tf1); + const tensor = Ee(() => { + var _a2, _b2; + const resize = uq.resizeBilinear(image, [((_a2 = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a2[2]) || 0, ((_b2 = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b2[1]) || 0], false); + const enhance2 = ae(resize, constants.tf2); + const norm = Ne(enhance2, constants.tf1); return norm; }); let resT; if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor); lastTime3 = now(); - Ft(tensor); + Dt(tensor); if (resT) { cache2.keypoints.length = 0; - const squeeze = jp(resT); - Ft(resT); - const stack = ko(squeeze, 2); - Ft(squeeze); + const squeeze = Up(resT); + Dt(resT); + const stack = so(squeeze, 2); + Dt(squeeze); for (let id2 = 0; id2 < stack.length; id2++) { - const [x10, y6, partScore] = await max2d(stack[id2], config3.body.minConfidence); + const [x10, y11, partScore] = await max2d(stack[id2], config3.body.minConfidence); if (partScore > (config3.body.minConfidence || 0)) { cache2.keypoints.push({ score: Math.round(100 * partScore) / 100, part: kpt2[id2], positionRaw: [ x10 / model4.inputs[0].shape[2], - y6 / model4.inputs[0].shape[1] + y11 / model4.inputs[0].shape[1] ], position: [ Math.round(image.shape[2] * x10 / model4.inputs[0].shape[2]), - Math.round(image.shape[1] * y6 / model4.inputs[0].shape[1]) + Math.round(image.shape[1] * y11 / model4.inputs[0].shape[1]) ] }); } } - stack.forEach((s) => Ft(s)); + stack.forEach((s) => Dt(s)); } cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); - const x6 = cache2.keypoints.map((a) => a.position[0]); - const y = cache2.keypoints.map((a) => a.position[1]); + const x = cache2.keypoints.map((a) => a.position[0]); + const y10 = cache2.keypoints.map((a) => a.position[1]); cache2.box = [ - Math.min(...x6), - Math.min(...y), - Math.max(...x6) - Math.min(...x6), - Math.max(...y) - Math.min(...y) + Math.min(...x), + Math.min(...y10), + Math.max(...x) - Math.min(...x), + Math.max(...y10) - Math.min(...y10) ]; const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); @@ -38296,9 +37807,9 @@ var cutAndResize = (box, image, cropSize) => { const h = image.shape[1]; const w = image.shape[2]; const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; - const crop = zq.cropAndResize(image, [cutBox], [0], cropSize); - const norm = We(crop, constants.tf255); - Ft(crop); + const crop = uq.cropAndResize(image, [cutBox], [0], cropSize); + const norm = Ge(crop, constants.tf255); + Dt(crop); return norm; }; var enlargeBox = (box, factor) => { @@ -38314,14 +37825,14 @@ var squarifyBox = (box) => { return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)], endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)], landmarks: box.landmarks, confidence: box.confidence }; }; var calculateLandmarksBoundingBox = (landmarks) => { - const x6 = landmarks.map((d) => d[0]); - const y = landmarks.map((d) => d[1]); - return { startPoint: [Math.min(...x6), Math.min(...y)], endPoint: [Math.max(...x6), Math.max(...y)], landmarks }; + const x = landmarks.map((d) => d[0]); + const y10 = landmarks.map((d) => d[1]); + return { startPoint: [Math.min(...x), Math.min(...y10)], endPoint: [Math.max(...x), Math.max(...y10)], landmarks }; }; var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); -var buildTranslationMatrix = (x6, y) => [[1, 0, x6], [0, 1, y], [0, 0, 1]]; +var buildTranslationMatrix = (x, y10) => [[1, 0, x], [0, 1, y10], [0, 0, 1]]; var dot = (v12, v22) => { let product = 0; for (let i = 0; i < v12.length; i++) @@ -38409,10 +37920,10 @@ function correctFaceRotation(rotate, box, input, inputSize10) { if (largeAngle) { const center = getBoxCenter(box); const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; - const rotated = zq.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + const rotated = uq.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); rotationMatrix = buildRotationMatrix(-angle, center); face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); - Ft(rotated); + Dt(rotated); } else { face4 = cutAndResize(box, input, [inputSize10, inputSize10]); } @@ -38422,9 +37933,9 @@ function correctFaceRotation(rotate, box, input, inputSize10) { return [angle, rotationMatrix, face4]; } var findFaceCenter = (mesh) => { - const x6 = mesh.map((m) => m[0]); - const y = mesh.map((m) => m[1]); - return [Math.min(...x6) + (Math.max(...x6) - Math.min(...x6)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2]; + const x = mesh.map((m) => m[0]); + const y10 = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y10) + (Math.max(...y10) - Math.min(...y10)) / 2]; }; var calculateFaceBox = (mesh, previousBox) => { const center = findFaceCenter(mesh); @@ -38454,63 +37965,63 @@ async function load3(config3) { log("cached model:", model5["modelUrl"]); inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; inputSizeT = be(inputSize4, "int32"); - anchors = gi(generateAnchors(inputSize4)); + anchors = _i(generateAnchors(inputSize4)); return model5; } function decodeBoxes2(boxOutputs) { if (!anchors || !inputSizeT) - return Wr([0, 0]); - const t10 = {}; - t10.boxStarts = Ue(boxOutputs, [0, 1], [-1, 2]); - t10.centers = ge(t10.boxStarts, anchors); - t10.boxSizes = Ue(boxOutputs, [0, 3], [-1, 2]); - t10.boxSizesNormalized = We(t10.boxSizes, inputSizeT); - t10.centersNormalized = We(t10.centers, inputSizeT); - t10.halfBoxSize = We(t10.boxSizesNormalized, constants.tf2); - t10.starts = ke(t10.centersNormalized, t10.halfBoxSize); - t10.ends = ge(t10.centersNormalized, t10.halfBoxSize); - t10.startNormalized = oe(t10.starts, inputSizeT); - t10.endNormalized = oe(t10.ends, inputSizeT); - const boxes = ck([t10.startNormalized, t10.endNormalized], 1); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + return Vr([0, 0]); + const t6 = {}; + t6.boxStarts = He(boxOutputs, [0, 1], [-1, 2]); + t6.centers = xe(t6.boxStarts, anchors); + t6.boxSizes = He(boxOutputs, [0, 3], [-1, 2]); + t6.boxSizesNormalized = Ge(t6.boxSizes, inputSizeT); + t6.centersNormalized = Ge(t6.centers, inputSizeT); + t6.halfBoxSize = Ge(t6.boxSizesNormalized, constants.tf2); + t6.starts = Ne(t6.centersNormalized, t6.halfBoxSize); + t6.ends = xe(t6.centersNormalized, t6.halfBoxSize); + t6.startNormalized = ae(t6.starts, inputSizeT); + t6.endNormalized = ae(t6.ends, inputSizeT); + const boxes = L0([t6.startNormalized, t6.endNormalized], 1); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return boxes; } async function getBoxes(inputImage, config3) { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) return []; - const t10 = {}; - t10.resized = zq.resizeBilinear(inputImage, [inputSize4, inputSize4]); - t10.div = We(t10.resized, constants.tf127); - t10.normalized = ke(t10.div, constants.tf05); - const res = model5 == null ? void 0 : model5.execute(t10.normalized); + const t6 = {}; + t6.resized = uq.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t6.div = Ge(t6.resized, constants.tf127); + t6.normalized = Ne(t6.div, constants.tf05); + const res = model5 == null ? void 0 : model5.execute(t6.normalized); if (Array.isArray(res) && res.length > 2) { const sorted = res.sort((a, b) => a.size - b.size); - t10.concat384 = gt([sorted[0], sorted[2]], 2); - t10.concat512 = gt([sorted[1], sorted[3]], 2); - t10.concat = gt([t10.concat512, t10.concat384], 1); - t10.batch = jp(t10.concat, [0]); + t6.concat384 = gt([sorted[0], sorted[2]], 2); + t6.concat512 = gt([sorted[1], sorted[3]], 2); + t6.concat = gt([t6.concat512, t6.concat384], 1); + t6.batch = Up(t6.concat, [0]); } else if (Array.isArray(res)) { - t10.batch = jp(res[0]); + t6.batch = Up(res[0]); } else { - t10.batch = jp(res); + t6.batch = Up(res); } - Ft(res); - t10.boxes = decodeBoxes2(t10.batch); - t10.logits = Ue(t10.batch, [0, 0], [-1, 1]); - t10.sigmoid = Ms(t10.logits); - t10.scores = jp(t10.sigmoid); - t10.nms = await zq.nonMaxSuppressionAsync(t10.boxes, t10.scores, ((_a2 = config3.face.detector) == null ? void 0 : _a2.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c2 = config3.face.detector) == null ? void 0 : _c2.minConfidence) || 0); - const nms = await t10.nms.array(); + Dt(res); + t6.boxes = decodeBoxes2(t6.batch); + t6.logits = He(t6.batch, [0, 0], [-1, 1]); + t6.sigmoid = zs(t6.logits); + t6.scores = Up(t6.sigmoid); + t6.nms = await uq.nonMaxSuppressionAsync(t6.boxes, t6.scores, ((_a2 = config3.face.detector) == null ? void 0 : _a2.maxDetected) || 0, ((_b2 = config3.face.detector) == null ? void 0 : _b2.iouThreshold) || 0, ((_c2 = config3.face.detector) == null ? void 0 : _c2.minConfidence) || 0); + const nms = await t6.nms.array(); const boxes = []; - const scores = await t10.scores.data(); + const scores = await t6.scores.data(); for (let i = 0; i < nms.length; i++) { const confidence = scores[nms[i]]; if (confidence > (((_d2 = config3.face.detector) == null ? void 0 : _d2.minConfidence) || 0)) { const b = {}; - b.bbox = Ue(t10.boxes, [nms[i], 0], [1, -1]); - b.slice = Ue(t10.batch, [nms[i], keypointsCount - 1], [1, -1]); - b.squeeze = jp(b.slice); + b.bbox = He(t6.boxes, [nms[i], 0], [1, -1]); + b.slice = He(t6.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = Up(b.slice); b.landmarks = z(b.squeeze, [keypointsCount, -1]); const points = await b.bbox.data(); const rawBox = { @@ -38523,10 +38034,10 @@ async function getBoxes(inputImage, config3) { const enlargedBox = enlargeBox(scaledBox, config3.face["scale"] || faceBoxScaleFactor); const squaredBox = squarifyBox(enlargedBox); boxes.push(squaredBox); - Object.keys(b).forEach((tensor) => Ft(b[tensor])); + Object.keys(b).forEach((tensor) => Dt(b[tensor])); } } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return boxes; } @@ -38547,14 +38058,14 @@ var irisLandmarks = { numCoordinates: 76 }; async function load4(config3) { - var _a2, _b; + var _a2, _b2; if (env.initial) model6 = null; if (!model6) model6 = await loadModel((_a2 = config3.face.iris) == null ? void 0 : _a2.modelPath); else if (config3.debug) log("cached model:", model6["modelUrl"]); - inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; + inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b2 = model6.inputs) == null ? void 0 : _b2[0].shape) ? model6.inputs[0].shape[2] : 0; if (inputSize5 === -1) inputSize5 = 64; return model6; @@ -38583,15 +38094,15 @@ var getLeftToRightEyeDepthDifference = (rawCoords) => { var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); const boxSize = getBoxSize(box); - let crop = zq.cropAndResize(face4, [[ + let crop = uq.cropAndResize(face4, [[ box.startPoint[1] / meshSize, box.startPoint[0] / meshSize, box.endPoint[1] / meshSize, box.endPoint[0] / meshSize ]], [0], [inputSize5, inputSize5]); if (flip && env.kernels.includes("flipleftright")) { - const flipped = zq.flipLeftRight(crop); - Ft(crop); + const flipped = uq.flipLeftRight(crop); + Dt(crop); crop = flipped; } return { box, boxSize, crop }; @@ -38599,13 +38110,13 @@ var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, mes var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { const eyeRawCoords = []; for (let i = 0; i < irisLandmarks.numCoordinates; i++) { - const x6 = eyeData[i * 3]; - const y = eyeData[i * 3 + 1]; - const z10 = eyeData[i * 3 + 2]; + const x = eyeData[i * 3]; + const y10 = eyeData[i * 3 + 1]; + const z8 = eyeData[i * 3 + 2]; eyeRawCoords.push([ - (flip ? 1 - x6 / inputSize5 : x6 / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], - y / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], - z10 + (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], + y10 / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + z8 ]); } return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) }; @@ -38615,13 +38126,13 @@ var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { const lowerCenterZ = rawCoords[meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2]; const averageZ = (upperCenterZ + lowerCenterZ) / 2; return irisCoords.map((coord, i) => { - let z10 = averageZ; + let z8 = averageZ; if (i === 2) { - z10 = upperCenterZ; + z8 = upperCenterZ; } else if (i === 4) { - z10 = lowerCenterZ; + z8 = lowerCenterZ; } - return [coord[0], coord[1], z10]; + return [coord[0], coord[1], z8]; }); }; async function augmentIris(rawCoords, face4, meshSize) { @@ -38630,12 +38141,12 @@ async function augmentIris(rawCoords, face4, meshSize) { const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); const combined = gt([leftEyeCrop, rightEyeCrop]); - Ft(leftEyeCrop); - Ft(rightEyeCrop); + Dt(leftEyeCrop); + Dt(rightEyeCrop); const eyePredictions = model6.execute(combined); - Ft(combined); + Dt(combined); const eyePredictionsData = await eyePredictions.data(); - Ft(eyePredictions); + Dt(eyePredictions); const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); @@ -38657,30 +38168,30 @@ async function augmentIris(rawCoords, face4, meshSize) { // src/face/attention.ts async function augment(rawCoords, results) { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2; - const t10 = { - lips: await ((_b = (_a2 = results.filter((r) => r.size === 160)) == null ? void 0 : _a2[0]) == null ? void 0 : _b.data()), + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2; + const t6 = { + lips: await ((_b2 = (_a2 = results.filter((r) => r.size === 160)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.data()), irisL: await ((_d2 = (_c2 = results.filter((r) => r.size === 10)) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.data()), eyeL: await ((_f2 = (_e2 = results.filter((r) => r.size === 142)) == null ? void 0 : _e2[0]) == null ? void 0 : _f2.data()), irisR: await ((_h2 = (_g2 = results.filter((r) => r.size === 10)) == null ? void 0 : _g2[1]) == null ? void 0 : _h2.data()), eyeR: await ((_j2 = (_i2 = results.filter((r) => r.size === 142)) == null ? void 0 : _i2[1]) == null ? void 0 : _j2.data()) }; - for (const val of Object.values(t10)) { + for (const val of Object.values(t6)) { if (!val) return rawCoords; } const irisLDepth = LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; - for (let i = 0; i < t10.irisL.length / 2; i++) - rawCoords.push([t10.irisL[2 * i + 0], t10.irisL[2 * i + 1], irisLDepth]); + for (let i = 0; i < t6.irisL.length / 2; i++) + rawCoords.push([t6.irisL[2 * i + 0], t6.irisL[2 * i + 1], irisLDepth]); const irisRDepth = LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; - for (let i = 0; i < t10.irisR.length / 2; i++) - rawCoords.push([t10.irisR[2 * i + 0], t10.irisR[2 * i + 1], irisRDepth]); - for (let i = 0; i < t10.eyeL.length / 2; i++) - rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t10.eyeL[2 * i + 0], t10.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; - for (let i = 0; i < t10.eyeR.length / 2; i++) - rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t10.eyeR[2 * i + 0], t10.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; - for (let i = 0; i < t10.lips.length / 2; i++) - rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t10.lips[2 * i + 0], t10.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; + for (let i = 0; i < t6.irisR.length / 2; i++) + rawCoords.push([t6.irisR[2 * i + 0], t6.irisR[2 * i + 1], irisRDepth]); + for (let i = 0; i < t6.eyeL.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t6.eyeL[2 * i + 0], t6.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t6.eyeR.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t6.eyeR[2 * i + 0], t6.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t6.lips.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t6.lips[2 * i + 0], t6.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; return rawCoords; } @@ -38693,11 +38204,11 @@ var cache3 = { var model7 = null; var inputSize6 = 0; async function predict4(input, config3) { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2; + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2; if (!(model7 == null ? void 0 : model7["executor"])) return []; const skipTime = (((_a2 = config3.face.detector) == null ? void 0 : _a2.skipTime) || 0) > now() - cache3.timestamp; - const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); + const skipFrame = cache3.skipped < (((_b2 = config3.face.detector) == null ? void 0 : _b2.skipFrames) || 0); if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { cache3.boxes = await getBoxes(input, config3); cache3.timestamp = now(); @@ -38727,7 +38238,7 @@ async function predict4(input, config3) { [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c2 = config3.face.detector) == null ? void 0 : _c2.rotation, box, input, ((_d2 = config3.face.mesh) == null ? void 0 : _d2.enabled) ? inputSize6 : size()); if (config3.filter.equalization) { const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; - Ft(face4.tensor); + Dt(face4.tensor); if (equilized) face4.tensor = equilized; } @@ -38750,11 +38261,11 @@ async function predict4(input, config3) { } else { if (((_f2 = config3.face.attention) == null ? void 0 : _f2.enabled) && !env.kernels.includes("atan2")) { config3.face.attention.enabled = false; - Ft(face4.tensor); + Dt(face4.tensor); return faces; } const results = model7.execute(face4.tensor); - const confidenceT = results.find((t10) => t10.shape[t10.shape.length - 1] === 1); + const confidenceT = results.find((t6) => t6.shape[t6.shape.length - 1] === 1); const faceConfidence = await confidenceT.data(); face4.faceScore = Math.round(100 * faceConfidence[0]) / 100; if (face4.faceScore < (((_g2 = config3.face.detector) == null ? void 0 : _g2.minConfidence) || 1)) { @@ -38773,10 +38284,10 @@ async function predict4(input, config3) { } } } else { - const meshT = results.find((t10) => t10.shape[t10.shape.length - 1] === 1404); + const meshT = results.find((t6) => t6.shape[t6.shape.length - 1] === 1404); const coordsReshaped = z(meshT, [-1, 3]); let rawCoords = await coordsReshaped.array(); - Ft(coordsReshaped); + Dt(coordsReshaped); if ((_h2 = config3.face.attention) == null ? void 0 : _h2.enabled) { rawCoords = await augment(rawCoords, results); } else if ((_i2 = config3.face.iris) == null ? void 0 : _i2.enabled) { @@ -38792,22 +38303,22 @@ async function predict4(input, config3) { face4.boxRaw = getRawBox(calculatedBox, input); newCache.push(calculatedBox); } - Ft(results); + Dt(results); } if (face4.score > (((_j2 = config3.face.detector) == null ? void 0 : _j2.minConfidence) || 1)) faces.push(face4); else - Ft(face4.tensor); + Dt(face4.tensor); } cache3.boxes = newCache; return faces; } async function load5(config3) { - var _a2, _b, _c2, _d2, _e2, _f2; + var _a2, _b2, _c2, _d2, _e2, _f2; if (env.initial) model7 = null; if (((_a2 = config3.face.attention) == null ? void 0 : _a2.enabled) && (model7 == null ? void 0 : model7["signature"])) { - if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) + if (Object.keys(((_b2 = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b2.outputs) || {}).length < 6) model7 = null; } if (!model7) { @@ -38842,11 +38353,11 @@ async function load6(config3) { return model8; } async function predict5(image, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!model8) return []; const skipFrame = skipped4 < (((_a2 = config3.face.emotion) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; + const skipTime = (((_b2 = config3.face.emotion) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime4; if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { skipped4++; return last3[idx]; @@ -38856,22 +38367,22 @@ async function predict5(image, config3, idx, count2) { var _a3; const obj = []; if ((_a3 = config3.face.emotion) == null ? void 0 : _a3.enabled) { - const t10 = {}; + const t6 = {}; const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; - t10.resize = zq.resizeBilinear(image, [inputSize10, inputSize10], false); - t10.channels = oe(t10.resize, constants.rgb); - t10.grayscale = tt(t10.channels, 3, true); - t10.grayscaleSub = ke(t10.grayscale, constants.tf05); - t10.grayscaleMul = oe(t10.grayscaleSub, constants.tf2); - t10.emotion = model8 == null ? void 0 : model8.execute(t10.grayscaleMul); + t6.resize = uq.resizeBilinear(image, [inputSize10, inputSize10], false); + t6.channels = ae(t6.resize, constants.rgb); + t6.grayscale = et(t6.channels, 3, true); + t6.grayscaleSub = Ne(t6.grayscale, constants.tf05); + t6.grayscaleMul = ae(t6.grayscaleSub, constants.tf2); + t6.emotion = model8 == null ? void 0 : model8.execute(t6.grayscaleMul); lastTime4 = now(); - const data = await t10.emotion.data(); + const data = await t6.emotion.data(); for (let i = 0; i < data.length; i++) { if (data[i] > (config3.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); } obj.sort((a, b) => b.score - a.score); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); } last3[idx] = obj; lastCount = count2; @@ -38899,13 +38410,13 @@ function enhance(input) { const tensor = input.image || input.tensor || input; if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor; - const crop = zq.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); - const norm = oe(crop, constants.tf255); - Ft(crop); + const crop = uq.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + const norm = ae(crop, constants.tf255); + Dt(crop); return norm; } async function predict6(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; const obj = { age: 0, gender: "unknown", @@ -38915,7 +38426,7 @@ async function predict6(image, config3, idx, count2) { if (!(model9 == null ? void 0 : model9["executor"])) return obj; const skipFrame = skipped5 < (((_a2 = config3.face.description) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; + const skipTime = (((_b2 = config3.face.description) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime5; if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c2 = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c2.age) > 0 && ((_d2 = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d2.genderScore) > 0) { skipped5++; return last4[idx]; @@ -38927,26 +38438,26 @@ async function predict6(image, config3, idx, count2) { const enhanced = enhance(image); const resT = model9 == null ? void 0 : model9.execute(enhanced); lastTime5 = now(); - Ft(enhanced); - const genderT = resT.find((t10) => t10.shape[1] === 1); + Dt(enhanced); + const genderT = resT.find((t6) => t6.shape[1] === 1); const gender2 = await genderT.data(); const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; if (confidence > (config3.face.description.minConfidence || 0)) { obj.gender = gender2[0] <= 0.5 ? "female" : "male"; obj.genderScore = Math.min(0.99, confidence); } - const argmax = Hv(resT.find((t10) => t10.shape[1] === 100), 1); + const argmax = b0(resT.find((t6) => t6.shape[1] === 100), 1); const ageIdx = (await argmax.data())[0]; - Ft(argmax); - const ageT = resT.find((t10) => t10.shape[1] === 100); + Dt(argmax); + const ageT = resT.find((t6) => t6.shape[1] === 100); const all2 = await ageT.data(); obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; if (Number.isNaN(gender2[0]) || Number.isNaN(all2[0])) log("faceres error:", { model: model9, result: resT }); - const desc = resT.find((t10) => t10.shape[1] === 1024); + const desc = resT.find((t6) => t6.shape[1] === 1024); const descriptor = desc ? await desc.data() : []; obj.descriptor = Array.from(descriptor); - resT.forEach((t10) => Ft(t10)); + resT.forEach((t6) => Dt(t6)); } last4[idx] = obj; lastCount2 = count2; @@ -38957,11 +38468,11 @@ async function predict6(image, config3, idx, count2) { // src/face/mask.ts var expandFact = 0.1; var alpha = 0.5; -function insidePoly(x6, y, polygon) { +function insidePoly(x, y10, polygon) { let inside = false; let j = polygon.length - 1; for (let i = 0; i < polygon.length; j = i++) { - if (polygon[i].y > y !== polygon[j].y > y && x6 < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + if (polygon[i].y > y10 !== polygon[j].y > y10 && x < (polygon[j].x - polygon[i].x) * (y10 - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) inside = !inside; } return inside; @@ -38979,13 +38490,13 @@ async function mask(face4) { silhouette.push({ x: (face4.mesh[pt][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt][1] - face4.box[1]) / face4.box[3] }); if (expandFact && expandFact > 0) silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); - for (let x6 = 0; x6 < width; x6++) { - for (let y = 0; y < height; y++) { - const inside = insidePoly(x6 / width, y / width, silhouette); + for (let x = 0; x < width; x++) { + for (let y10 = 0; y10 < height; y10++) { + const inside = insidePoly(x / width, y10 / width, silhouette); if (!inside) { - buffer.set(alpha * buffer.get(0, y, x6, 0), 0, y, x6, 0); - buffer.set(alpha * buffer.get(0, y, x6, 1), 0, y, x6, 1); - buffer.set(alpha * buffer.get(0, y, x6, 2), 0, y, x6, 2); + buffer.set(alpha * buffer.get(0, y10, x, 0), 0, y10, x, 0); + buffer.set(alpha * buffer.get(0, y10, x, 1), 0, y10, x, 1); + buffer.set(alpha * buffer.get(0, y10, x, 2), 0, y10, x, 2); } } } @@ -39010,24 +38521,24 @@ async function load8(config3) { return model10; } async function predict7(image, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!(model10 == null ? void 0 : model10["executor"])) return 0; const skipTime = (((_a2 = config3.face.antispoof) == null ? void 0 : _a2.skipTime) || 0) > now() - lastTime6; - const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); + const skipFrame = skipped6 < (((_b2 = config3.face.antispoof) == null ? void 0 : _b2.skipFrames) || 0); if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { skipped6++; return cached[idx]; } skipped6 = 0; return new Promise(async (resolve) => { - const resize = zq.resizeBilinear(image, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const resize = uq.resizeBilinear(image, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); const res = model10 == null ? void 0 : model10.execute(resize); const num = (await res.data())[0]; cached[idx] = Math.round(100 * num) / 100; lastCount3 = count2; lastTime6 = now(); - Ft([resize, res]); + Dt([resize, res]); resolve(cached[idx]); }); } @@ -39049,24 +38560,24 @@ async function load9(config3) { return model11; } async function predict8(image, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!(model11 == null ? void 0 : model11["executor"])) return 0; const skipTime = (((_a2 = config3.face.liveness) == null ? void 0 : _a2.skipTime) || 0) > now() - lastTime7; - const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); + const skipFrame = skipped7 < (((_b2 = config3.face.liveness) == null ? void 0 : _b2.skipFrames) || 0); if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { skipped7++; return cached2[idx]; } skipped7 = 0; return new Promise(async (resolve) => { - const resize = zq.resizeBilinear(image, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const resize = uq.resizeBilinear(image, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); const res = model11 == null ? void 0 : model11.execute(resize); const num = (await res.data())[0]; cached2[idx] = Math.round(100 * num) / 100; lastCount4 = count2; lastTime7 = now(); - Ft([resize, res]); + Dt([resize, res]); resolve(cached2[idx]); }); } @@ -39090,42 +38601,42 @@ async function load10(config3) { return model12; } async function predict9(image, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!model12) return { age: 0, gender: "unknown", genderScore: 0, race: [] }; const skipFrame = skipped8 < (((_a2 = config3.face.gear) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; + const skipTime = (((_b2 = config3.face.gear) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime8; if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { skipped8++; return last5[idx]; } skipped8 = 0; return new Promise(async (resolve) => { - var _a3, _b2; + var _a3, _b3; if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; - const t10 = {}; + const t6 = {}; const box = [[0, 0.1, 0.9, 0.9]]; - t10.resize = zq.cropAndResize(image, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + t6.resize = uq.cropAndResize(image, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; if ((_a3 = config3.face.gear) == null ? void 0 : _a3.enabled) - [t10.age, t10.gender, t10.race] = model12.execute(t10.resize, ["age_output", "gender_output", "race_output"]); - const gender2 = await t10.gender.data(); + [t6.age, t6.gender, t6.race] = model12.execute(t6.resize, ["age_output", "gender_output", "race_output"]); + const gender2 = await t6.gender.data(); obj.gender = gender2[0] > gender2[1] ? "male" : "female"; obj.genderScore = Math.round(100 * (gender2[0] > gender2[1] ? gender2[0] : gender2[1])) / 100; - const race = await t10.race.data(); + const race = await t6.race.data(); for (let i = 0; i < race.length; i++) { - if (race[i] > (((_b2 = config3.face.gear) == null ? void 0 : _b2.minConfidence) || 0.2)) + if (race[i] > (((_b3 = config3.face.gear) == null ? void 0 : _b3.minConfidence) || 0.2)) obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); } obj.race.sort((a, b) => b.score - a.score); - const ageDistribution = Array.from(await t10.age.data()); + const ageDistribution = Array.from(await t6.age.data()); const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]); let age2 = ageSorted[0][0]; for (let i = 1; i < ageSorted.length; i++) age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); obj.age = Math.round(10 * age2) / 10; - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); last5[idx] = obj; lastCount5 = count2; lastTime8 = now(); @@ -39149,11 +38660,11 @@ async function load11(config3) { return model13; } async function predict10(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; if (!model13) return { age: 0 }; const skipFrame = skipped9 < (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; + const skipTime = (((_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime9; if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c2 = last6[idx]) == null ? void 0 : _c2.age) && ((_d2 = last6[idx]) == null ? void 0 : _d2.age) > 0) { skipped9++; return last6[idx]; @@ -39163,17 +38674,17 @@ async function predict10(image, config3, idx, count2) { var _a3; if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; - const t10 = {}; - t10.resize = zq.resizeBilinear(image, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); - t10.enhance = oe(t10.resize, constants.tf255); + const t6 = {}; + t6.resize = uq.resizeBilinear(image, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t6.enhance = ae(t6.resize, constants.tf255); const obj = { age: 0 }; if ((_a3 = config3.face["ssrnet"]) == null ? void 0 : _a3.enabled) - t10.age = model13.execute(t10.enhance); - if (t10.age) { - const data = await t10.age.data(); + t6.age = model13.execute(t6.enhance); + if (t6.age) { + const data = await t6.age.data(); obj.age = Math.trunc(10 * data[0]) / 10; } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); last6[idx] = obj; lastCount6 = count2; lastTime9 = now(); @@ -39199,11 +38710,11 @@ async function load12(config3) { return model14; } async function predict11(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; if (!model14) return { gender: "unknown", genderScore: 0 }; const skipFrame = skipped10 < (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; + const skipTime = (((_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime10; if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c2 = last7[idx]) == null ? void 0 : _c2.gender) && ((_d2 = last7[idx]) == null ? void 0 : _d2.genderScore) > 0) { skipped10++; return last7[idx]; @@ -39213,24 +38724,24 @@ async function predict11(image, config3, idx, count2) { var _a3; if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; - const t10 = {}; - t10.resize = zq.resizeBilinear(image, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); - t10.enhance = Ne(() => { - const [red, green, blue] = $a(t10.resize, 3, 3); - const redNorm = oe(red, rgb[0]); - const greenNorm = oe(green, rgb[1]); - const blueNorm = oe(blue, rgb[2]); - const grayscale = Wv([redNorm, greenNorm, blueNorm]); - const normalize2 = oe(ke(grayscale, constants.tf05), 2); + const t6 = {}; + t6.resize = uq.resizeBilinear(image, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t6.enhance = Ee(() => { + const [red, green, blue] = Oa(t6.resize, 3, 3); + const redNorm = ae(red, rgb[0]); + const greenNorm = ae(green, rgb[1]); + const blueNorm = ae(blue, rgb[2]); + const grayscale = g0([redNorm, greenNorm, blueNorm]); + const normalize2 = ae(Ne(grayscale, constants.tf05), 2); return normalize2; }); const obj = { gender: "unknown", genderScore: 0 }; if ((_a3 = config3.face["ssrnet"]) == null ? void 0 : _a3.enabled) - t10.gender = model14.execute(t10.enhance); - const data = await t10.gender.data(); + t6.gender = model14.execute(t6.enhance); + const data = await t6.gender.data(); obj.gender = data[0] > data[1] ? "female" : "male"; obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); last7[idx] = obj; lastCount7 = count2; lastTime10 = now(); @@ -39255,11 +38766,11 @@ async function load13(config3) { return model15; } async function predict12(input, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!(model15 == null ? void 0 : model15["executor"])) return []; const skipFrame = skipped11 < (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; + const skipTime = (((_b2 = config3.face["mobilefacenet"]) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime11; if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { skipped11++; return last8[idx]; @@ -39268,12 +38779,12 @@ async function predict12(input, config3, idx, count2) { var _a3; let data = []; if (((_a3 = config3.face["mobilefacenet"]) == null ? void 0 : _a3.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { - const t10 = {}; - t10.crop = zq.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); - t10.data = model15.execute(t10.crop); - const output = await t10.data.data(); + const t6 = {}; + t6.crop = uq.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t6.data = model15.execute(t6.crop); + const output = await t6.data.data(); data = Array.from(output); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); } last8[idx] = data; lastCount8 = count2; @@ -39298,11 +38809,11 @@ async function load14(config3) { return model16; } async function predict13(input, config3, idx, count2) { - var _a2, _b; + var _a2, _b2; if (!(model16 == null ? void 0 : model16["executor"])) return []; const skipFrame = skipped12 < (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.skipFrames) || 0); - const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; + const skipTime = (((_b2 = config3.face["insightface"]) == null ? void 0 : _b2.skipTime) || 0) > now() - lastTime12; if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { skipped12++; return last9[idx]; @@ -39311,12 +38822,12 @@ async function predict13(input, config3, idx, count2) { var _a3; let data = []; if (((_a3 = config3.face["insightface"]) == null ? void 0 : _a3.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { - const t10 = {}; - t10.crop = zq.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); - t10.data = model16.execute(t10.crop); - const output = await t10.data.data(); + const t6 = {}; + t6.crop = uq.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t6.data = model16.execute(t6.crop); + const output = await t6.data.data(); data = Array.from(output); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); } last9[idx] = data; lastCount9 = count2; @@ -39346,24 +38857,24 @@ var calculateGaze = (face4) => { return { bearing, strength }; }; var calculateFaceAngle = (face4, imageSize) => { - const normalize2 = (v6) => { - const length = Math.sqrt(v6[0] * v6[0] + v6[1] * v6[1] + v6[2] * v6[2]); - v6[0] /= length; - v6[1] /= length; - v6[2] /= length; - return v6; + const normalize2 = (v10) => { + const length = Math.sqrt(v10[0] * v10[0] + v10[1] * v10[1] + v10[2] * v10[2]); + v10[0] /= length; + v10[1] /= length; + v10[2] /= length; + return v10; }; const subVectors = (a, b) => { - const x6 = a[0] - b[0]; - const y = a[1] - b[1]; - const z10 = a[2] - b[2]; - return [x6, y, z10]; + const x = a[0] - b[0]; + const y10 = a[1] - b[1]; + const z8 = a[2] - b[2]; + return [x, y10, z8]; }; const crossVectors = (a, b) => { - const x6 = a[1] * b[2] - a[2] * b[1]; - const y = a[2] * b[0] - a[0] * b[2]; - const z10 = a[0] * b[1] - a[1] * b[0]; - return [x6, y, z10]; + const x = a[1] * b[2] - a[2] * b[1]; + const y10 = a[2] * b[0] - a[0] * b[2]; + const z8 = a[0] * b[1] - a[1] * b[0]; + return [x, y10, z8]; }; const rotationMatrixToEulerAngle = (r) => { const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; @@ -39430,7 +38941,7 @@ function calculateCameraDistance(face4, width) { // src/face/face.ts var detectFace = async (instance, input) => { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2; + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p, _q2, _r2, _s2, _t, _u2, _v2, _w2; let timeStamp = now(); let ageRes; let gearRes; @@ -39457,14 +38968,14 @@ var detectFace = async (instance, input) => { } if ((_a2 = instance.config.face.detector) == null ? void 0 : _a2.mask) { const masked = await mask(faces[i]); - Ft(faces[i].tensor); + Dt(faces[i].tensor); if (masked) faces[i].tensor = masked; } const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; instance.analyze("Start Emotion:"); if (instance.config.async) { - emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || nr([]), instance.config, i, faces.length) : []; + emotionRes = ((_b2 = instance.config.face.emotion) == null ? void 0 : _b2.enabled) ? predict5(faces[i].tensor || nr([]), instance.config, i, faces.length) : []; } else { instance.state = "run:emotion"; timeStamp = now(); @@ -39510,7 +39021,7 @@ var detectFace = async (instance, input) => { instance.state = "run:ssrnet"; timeStamp = now(); ageRes = ((_l2 = instance.config.face["ssrnet"]) == null ? void 0 : _l2.enabled) ? await predict10(faces[i].tensor || nr([]), instance.config, i, faces.length) : null; - genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || nr([]), instance.config, i, faces.length) : null; + genderRes = ((_m2 = instance.config.face["ssrnet"]) == null ? void 0 : _m2.enabled) ? await predict11(faces[i].tensor || nr([]), instance.config, i, faces.length) : null; instance.performance.ssrnet = Math.trunc(now() - timeStamp); } instance.analyze("End SSRNet:"); @@ -39526,7 +39037,7 @@ var detectFace = async (instance, input) => { instance.analyze("End MobileFaceNet:"); instance.analyze("Start InsightFace:"); if (instance.config.async) { - insightfaceRes = ((_p2 = instance.config.face["insightface"]) == null ? void 0 : _p2.enabled) ? predict13(faces[i].tensor || nr([]), instance.config, i, faces.length) : null; + insightfaceRes = ((_p = instance.config.face["insightface"]) == null ? void 0 : _p.enabled) ? predict13(faces[i].tensor || nr([]), instance.config, i, faces.length) : null; } else { instance.state = "run:mobilefacenet"; timeStamp = now(); @@ -39572,8 +39083,8 @@ var detectFace = async (instance, input) => { descRes.descriptor = insightfaceRes; } const irisSize = ((_v2 = instance.config.face.iris) == null ? void 0 : _v2.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; - const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? jp(faces[i].tensor) : null; - Ft(faces[i].tensor); + const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? Up(faces[i].tensor) : null; + Dt(faces[i].tensor); if (faces[i].tensor) delete faces[i].tensor; const res = { @@ -40074,12 +39585,12 @@ var face2 = (res) => { return gestures; }; var iris2 = (res) => { - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; if (!res) return []; const gestures = []; for (let i = 0; i < res.length; i++) { - if (!((_b = (_a2 = res[i].annotations) == null ? void 0 : _a2.leftEyeIris) == null ? void 0 : _b[0]) || !((_d2 = (_c2 = res[i].annotations) == null ? void 0 : _c2.rightEyeIris) == null ? void 0 : _d2[0])) + if (!((_b2 = (_a2 = res[i].annotations) == null ? void 0 : _a2.leftEyeIris) == null ? void 0 : _b2[0]) || !((_d2 = (_c2 = res[i].annotations) == null ? void 0 : _c2.rightEyeIris) == null ? void 0 : _d2[0])) continue; const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; @@ -40166,7 +39677,7 @@ function cutBoxFromImageAndResize(box, image, cropSize) { box.endPoint[1] / h, box.endPoint[0] / w ]]; - return zq.cropAndResize(image, boxes, [0], cropSize); + return uq.cropAndResize(image, boxes, [0], cropSize); } function scaleBoxCoordinates2(box, factor) { const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; @@ -40201,7 +39712,7 @@ function computeRotation2(point1, point2) { const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); return normalizeRadians2(radians); } -var buildTranslationMatrix2 = (x6, y) => [[1, 0, x6], [0, 1, y], [0, 0, 1]]; +var buildTranslationMatrix2 = (x, y10) => [[1, 0, x], [0, 1, y10], [0, 0, 1]]; function dot2(v12, v22) { let product = 0; for (let i = 0; i < v12.length; i++) { @@ -43213,59 +42724,59 @@ var HandDetector = class { __publicField(this, "inputSize"); __publicField(this, "inputSizeTensor"); __publicField(this, "doubleInputSizeTensor"); - var _a2, _b, _c2, _d2; + var _a2, _b2, _c2, _d2; this.model = model23; this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); - this.anchorsTensor = gi(this.anchors); - this.inputSize = ((_d2 = (_c2 = (_b = (_a2 = this == null ? void 0 : this.model) == null ? void 0 : _a2.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c2.shape) == null ? void 0 : _d2[2]) || 0; + this.anchorsTensor = _i(this.anchors); + this.inputSize = ((_d2 = (_c2 = (_b2 = (_a2 = this == null ? void 0 : this.model) == null ? void 0 : _a2.inputs) == null ? void 0 : _b2[0]) == null ? void 0 : _c2.shape) == null ? void 0 : _d2[2]) || 0; this.inputSizeTensor = mr([this.inputSize, this.inputSize]); this.doubleInputSizeTensor = mr([this.inputSize * 2, this.inputSize * 2]); } normalizeBoxes(boxes) { - const t10 = {}; - t10.boxOffsets = Ue(boxes, [0, 0], [-1, 2]); - t10.boxSizes = Ue(boxes, [0, 2], [-1, 2]); - t10.div = We(t10.boxOffsets, this.inputSizeTensor); - t10.boxCenterPoints = ge(t10.div, this.anchorsTensor); - t10.halfBoxSizes = We(t10.boxSizes, this.doubleInputSizeTensor); - t10.sub = ke(t10.boxCenterPoints, t10.halfBoxSizes); - t10.startPoints = oe(t10.sub, this.inputSizeTensor); - t10.add = ge(t10.boxCenterPoints, t10.halfBoxSizes); - t10.endPoints = oe(t10.add, this.inputSizeTensor); - const res = ck([t10.startPoints, t10.endPoints], 1); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + const t6 = {}; + t6.boxOffsets = He(boxes, [0, 0], [-1, 2]); + t6.boxSizes = He(boxes, [0, 2], [-1, 2]); + t6.div = Ge(t6.boxOffsets, this.inputSizeTensor); + t6.boxCenterPoints = xe(t6.div, this.anchorsTensor); + t6.halfBoxSizes = Ge(t6.boxSizes, this.doubleInputSizeTensor); + t6.sub = Ne(t6.boxCenterPoints, t6.halfBoxSizes); + t6.startPoints = ae(t6.sub, this.inputSizeTensor); + t6.add = xe(t6.boxCenterPoints, t6.halfBoxSizes); + t6.endPoints = ae(t6.add, this.inputSizeTensor); + const res = L0([t6.startPoints, t6.endPoints], 1); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return res; } normalizeLandmarks(rawPalmLandmarks, index2) { - const t10 = {}; - t10.reshape = z(rawPalmLandmarks, [-1, 7, 2]); - t10.div = We(t10.reshape, this.inputSizeTensor); - t10.landmarks = ge(t10.div, this.anchors[index2] ? this.anchors[index2] : 0); - const res = oe(t10.landmarks, this.inputSizeTensor); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + const t6 = {}; + t6.reshape = z(rawPalmLandmarks, [-1, 7, 2]); + t6.div = Ge(t6.reshape, this.inputSizeTensor); + t6.landmarks = xe(t6.div, this.anchors[index2] ? this.anchors[index2] : 0); + const res = ae(t6.landmarks, this.inputSizeTensor); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return res; } async predict(input, config3) { var _a2; - const t10 = {}; - t10.resize = zq.resizeBilinear(input, [this.inputSize, this.inputSize]); - t10.div = We(t10.resize, constants.tf127); - t10.image = ke(t10.div, constants.tf1); - t10.batched = this.model.execute(t10.image); - t10.predictions = jp(t10.batched); - t10.slice = Ue(t10.predictions, [0, 0], [-1, 1]); - t10.sigmoid = Ms(t10.slice); - t10.scores = jp(t10.sigmoid); - const scores = await t10.scores.data(); - t10.boxes = Ue(t10.predictions, [0, 1], [-1, 4]); - t10.norm = this.normalizeBoxes(t10.boxes); - t10.nms = await zq.nonMaxSuppressionAsync(t10.norm, t10.scores, 3 * (((_a2 = config3.hand) == null ? void 0 : _a2.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); - const nms = await t10.nms.array(); + const t6 = {}; + t6.resize = uq.resizeBilinear(input, [this.inputSize, this.inputSize]); + t6.div = Ge(t6.resize, constants.tf127); + t6.image = Ne(t6.div, constants.tf1); + t6.batched = this.model.execute(t6.image); + t6.predictions = Up(t6.batched); + t6.slice = He(t6.predictions, [0, 0], [-1, 1]); + t6.sigmoid = zs(t6.slice); + t6.scores = Up(t6.sigmoid); + const scores = await t6.scores.data(); + t6.boxes = He(t6.predictions, [0, 1], [-1, 4]); + t6.norm = this.normalizeBoxes(t6.boxes); + t6.nms = await uq.nonMaxSuppressionAsync(t6.norm, t6.scores, 3 * (((_a2 = config3.hand) == null ? void 0 : _a2.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + const nms = await t6.nms.array(); const hands = []; for (const index2 of nms) { const p = {}; - p.box = Ue(t10.norm, [index2, 0], [1, -1]); - p.slice = Ue(t10.predictions, [index2, 5], [1, 14]); + p.box = He(t6.norm, [index2, 0], [1, -1]); + p.slice = He(t6.predictions, [index2, 5], [1, 14]); p.norm = this.normalizeLandmarks(p.slice, index2); p.palmLandmarks = z(p.norm, [-1, 2]); const box = await p.box.data(); @@ -43275,9 +42786,9 @@ var HandDetector = class { const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); hands.push(scaled); - Object.keys(p).forEach((tensor) => Ft(p[tensor])); + Object.keys(p).forEach((tensor) => Dt(p[tensor])); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return hands; } }; @@ -43297,10 +42808,10 @@ var HandPipeline = class { __publicField(this, "storedBoxes"); __publicField(this, "skipped"); __publicField(this, "detectedHands"); - var _a2, _b, _c2; + var _a2, _b2, _c2; this.handDetector = handDetector; this.handPoseModel = handPoseModel2; - this.inputSize = ((_c2 = (_b = (_a2 = this.handPoseModel) == null ? void 0 : _a2.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c2[2]) || 0; + this.inputSize = ((_c2 = (_b2 = (_a2 = this.handPoseModel) == null ? void 0 : _a2.inputs) == null ? void 0 : _b2[0].shape) == null ? void 0 : _c2[2]) || 0; this.storedBoxes = []; this.skipped = Number.MAX_SAFE_INTEGER; this.detectedHands = 0; @@ -43377,23 +42888,23 @@ var HandPipeline = class { const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; const palmCenter = getBoxCenter2(currentBox); const palmCenterNormalized = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]]; - const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? zq.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone(); + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? uq.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone(); const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); - const handImage = We(croppedInput, constants.tf255); - Ft(croppedInput); - Ft(rotatedImage); + const handImage = Ge(croppedInput, constants.tf255); + Dt(croppedInput); + Dt(rotatedImage); const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); lastTime13 = now(); - Ft(handImage); + Dt(handImage); const confidence = (await confidenceT.data())[0]; - Ft(confidenceT); + Dt(confidenceT); if (confidence >= config3.hand.minConfidence / 4) { const keypointsReshaped = z(keypoints, [-1, 3]); const rawCoords = await keypointsReshaped.array(); - Ft(keypoints); - Ft(keypointsReshaped); + Dt(keypoints); + Dt(keypointsReshaped); const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); const nextBoundingBox = this.getBoxForHandLandmarks(coords); this.storedBoxes[i] = { ...nextBoundingBox, confidence }; @@ -43408,7 +42919,7 @@ var HandPipeline = class { } else { this.storedBoxes[i] = null; } - Ft(keypoints); + Dt(keypoints); } else { const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); const result = { @@ -43501,7 +43012,7 @@ async function predict14(input, config3) { return hands; } async function load15(config3) { - var _a2, _b; + var _a2, _b2; if (env.initial) { handDetectorModel = null; handPoseModel = null; @@ -43509,7 +43020,7 @@ async function load15(config3) { if (!handDetectorModel || !handPoseModel) { [handDetectorModel, handPoseModel] = await Promise.all([ config3.hand.enabled ? loadModel((_a2 = config3.hand.detector) == null ? void 0 : _a2.modelPath) : null, - config3.hand.landmarks ? loadModel((_b = config3.hand.skeleton) == null ? void 0 : _b.modelPath) : null + config3.hand.landmarks ? loadModel((_b2 = config3.hand.skeleton) == null ? void 0 : _b2.modelPath) : null ]); } else { if (config3.debug) @@ -43579,31 +43090,31 @@ async function detectHands(input, config3) { const hands = []; if (!input || !models2[0]) return hands; - const t10 = {}; + const t6 = {}; const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); const width = Math.round(height * ratio2 / 8) * 8; - t10.resize = zq.resizeBilinear(input, [height, width]); - t10.cast = qe(t10.resize, "int32"); - [t10.rawScores, t10.rawBoxes] = await models2[0].executeAsync(t10.cast, modelOutputNodes); - t10.boxes = jp(t10.rawBoxes, [0, 2]); - t10.scores = jp(t10.rawScores, [0]); - const classScores = ko(t10.scores, 1); - Ft(classScores[faceIndex]); + t6.resize = uq.resizeBilinear(input, [height, width]); + t6.cast = Ke(t6.resize, "int32"); + [t6.rawScores, t6.rawBoxes] = await models2[0].executeAsync(t6.cast, modelOutputNodes); + t6.boxes = Up(t6.rawBoxes, [0, 2]); + t6.scores = Up(t6.rawScores, [0]); + const classScores = so(t6.scores, 1); + Dt(classScores[faceIndex]); classScores.splice(faceIndex, 1); - t10.filtered = Ir(classScores, 1); - Ft(classScores); - t10.max = Vs(t10.filtered, 1); - t10.argmax = Hv(t10.filtered, 1); + t6.filtered = Sr(classScores, 1); + Dt(classScores); + t6.max = Us(t6.filtered, 1); + t6.argmax = b0(t6.filtered, 1); let id2 = 0; - t10.nms = await zq.nonMaxSuppressionAsync(t10.boxes, t10.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); - const nms = await t10.nms.data(); - const scores = await t10.max.data(); - const classNum = await t10.argmax.data(); + t6.nms = await uq.nonMaxSuppressionAsync(t6.boxes, t6.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + const nms = await t6.nms.data(); + const scores = await t6.max.data(); + const classNum = await t6.argmax.data(); for (const nmsIndex of Array.from(nms)) { - const boxSlice = Ue(t10.boxes, nmsIndex, 1); + const boxSlice = He(t6.boxes, nmsIndex, 1); const boxYX = await boxSlice.data(); - Ft(boxSlice); + Dt(boxSlice); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; const boxRaw = scale(boxData, detectorExpandFact); const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; @@ -43612,7 +43123,7 @@ async function detectHands(input, config3) { const hand3 = { id: id2++, score, box: boxFull, boxRaw, label }; hands.push(hand3); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); hands.sort((a, b) => b.score - a.score); if (hands.length > (config3.hand.maxDetected || 1)) hands.length = config3.hand.maxDetected || 1; @@ -43632,17 +43143,17 @@ async function detectFingers(input, h, config3) { annotations: {} }; if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { - const t10 = {}; + const t6 = {}; const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; - t10.crop = zq.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); - t10.div = We(t10.crop, constants.tf255); - [t10.score, t10.keypoints] = models2[1].execute(t10.div, ["Identity_1", "Identity"]); - const rawScore = (await t10.score.data())[0]; + t6.crop = uq.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t6.div = Ge(t6.crop, constants.tf255); + [t6.score, t6.keypoints] = models2[1].execute(t6.div, ["Identity_1", "Identity"]); + const rawScore = (await t6.score.data())[0]; const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; if (score >= (config3.hand.minConfidence || 0)) { hand3.fingerScore = score; - t10.reshaped = z(t10.keypoints, [-1, 3]); - const coordsData = await t10.reshaped.array(); + t6.reshaped = z(t6.keypoints, [-1, 3]); + const coordsData = await t6.reshaped.array(); const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize7[1][1], kpt4[1] / inputSize7[1][0], kpt4[2] || 0]); const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); hand3.keypoints = coordsNorm.map((kpt4) => [outputSize[0] * (kpt4[0] + h.boxRaw[0]), outputSize[1] * (kpt4[1] + h.boxRaw[1]), kpt4[2] || 0]); @@ -43651,13 +43162,13 @@ async function detectFingers(input, h, config3) { hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); } } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); } return hand3; } async function predict15(input, config3) { - var _a2, _b; - if (!((_a2 = models2[0]) == null ? void 0 : _a2["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + var _a2, _b2; + if (!((_a2 = models2[0]) == null ? void 0 : _a2["executor"]) || !((_b2 = models2[1]) == null ? void 0 : _b2["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) return []; outputSize = [input.shape[2] || 0, input.shape[1] || 0]; skipped13++; @@ -43764,8 +43275,8 @@ var connected3 = { var bufferedResult = empty(); var interpolateTime = 0; function calc2(newResult, config3) { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2; - const t0 = now(); + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p, _q2, _r2, _s2, _t, _u2, _v2, _w2; + const t02 = now(); if (!newResult) return empty(); const elapsed = Date.now() - newResult.timestamp; @@ -43781,7 +43292,7 @@ function calc2(newResult, config3) { const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { - var _a3, _b2, _c3, _d3, _e3, _f3, _g3, _h3, _i3; + var _a3, _b3, _c3, _d3, _e3, _f3, _g3, _h3, _i3; return { score: newKpt.score, part: newKpt.part, @@ -43796,7 +43307,7 @@ function calc2(newResult, config3) { bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] ], distance: [ - bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a3[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c3 = newKpt.distance) == null ? void 0 : _c3[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a3[0]) || 0) + (((_b3 = newKpt.distance) == null ? void 0 : _b3[0]) || 0)) / bufferedFactor : (_c3 = newKpt.distance) == null ? void 0 : _c3[0], bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d3[1]) || 0) + (((_e3 = newKpt.distance) == null ? void 0 : _e3[1]) || 0)) / bufferedFactor : (_f3 = newKpt.distance) == null ? void 0 : _f3[1], bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g3[2]) || 0) + (((_h3 = newKpt.distance) == null ? void 0 : _h3[2]) || 0)) / bufferedFactor : (_i3 = newKpt.distance) == null ? void 0 : _i3[2] ] @@ -43806,7 +43317,7 @@ function calc2(newResult, config3) { let coords = { connected: {} }; if ((_a2 = config3.body.modelPath) == null ? void 0 : _a2.includes("efficientpose")) coords = efficientposecoords_exports; - else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + else if ((_b2 = config3.body.modelPath) == null ? void 0 : _b2.includes("blazepose")) coords = blazeposecoords_exports; else if ((_c2 = config3.body.modelPath) == null ? void 0 : _c2.includes("movenet")) coords = movenetcoords_exports; @@ -43855,8 +43366,8 @@ function calc2(newResult, config3) { rotation.matrix = (_g2 = newResult.face[i].rotation) == null ? void 0 : _g2.matrix; rotation.angle = { roll: ((bufferedFactor - 1) * (((_i2 = (_h2 = bufferedResult.face[i].rotation) == null ? void 0 : _h2.angle) == null ? void 0 : _i2.roll) || 0) + (((_k2 = (_j2 = newResult.face[i].rotation) == null ? void 0 : _j2.angle) == null ? void 0 : _k2.roll) || 0)) / bufferedFactor, - yaw: ((bufferedFactor - 1) * (((_m = (_l2 = bufferedResult.face[i].rotation) == null ? void 0 : _l2.angle) == null ? void 0 : _m.yaw) || 0) + (((_o2 = (_n2 = newResult.face[i].rotation) == null ? void 0 : _n2.angle) == null ? void 0 : _o2.yaw) || 0)) / bufferedFactor, - pitch: ((bufferedFactor - 1) * (((_q2 = (_p2 = bufferedResult.face[i].rotation) == null ? void 0 : _p2.angle) == null ? void 0 : _q2.pitch) || 0) + (((_s2 = (_r2 = newResult.face[i].rotation) == null ? void 0 : _r2.angle) == null ? void 0 : _s2.pitch) || 0)) / bufferedFactor + yaw: ((bufferedFactor - 1) * (((_m2 = (_l2 = bufferedResult.face[i].rotation) == null ? void 0 : _l2.angle) == null ? void 0 : _m2.yaw) || 0) + (((_o2 = (_n2 = newResult.face[i].rotation) == null ? void 0 : _n2.angle) == null ? void 0 : _o2.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_q2 = (_p = bufferedResult.face[i].rotation) == null ? void 0 : _p.angle) == null ? void 0 : _q2.pitch) || 0) + (((_s2 = (_r2 = newResult.face[i].rotation) == null ? void 0 : _r2.angle) == null ? void 0 : _s2.pitch) || 0)) / bufferedFactor }; rotation.gaze = { bearing: ((bufferedFactor - 1) * (((_t = bufferedResult.face[i].rotation) == null ? void 0 : _t.gaze.bearing) || 0) + (((_u2 = newResult.face[i].rotation) == null ? void 0 : _u2.gaze.bearing) || 0)) / bufferedFactor, @@ -43892,7 +43403,7 @@ function calc2(newResult, config3) { bufferedResult.width = newResult.width; bufferedResult.height = newResult.height; const t12 = now(); - interpolateTime = env.perfadd ? interpolateTime + Math.round(t12 - t0) : Math.round(t12 - t0); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t12 - t02) : Math.round(t12 - t02); if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; return bufferedResult; @@ -43913,30 +43424,30 @@ async function predict16(input, config3) { model17 = await load16(config3); if (!(model17 == null ? void 0 : model17["executor"]) || !((_a2 = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a2[0].shape)) return null; - const t10 = {}; - t10.resize = zq.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); - t10.norm = We(t10.resize, constants.tf255); - t10.res = model17.execute(t10.norm); - t10.squeeze = jp(t10.res, [0]); - [t10.bgRaw, t10.fgRaw] = ko(t10.squeeze, 2); - t10.fg = G1(t10.fgRaw); - t10.mul = oe(t10.fg, constants.tf255); - t10.expand = _a(t10.mul, 2); - t10.output = zq.resizeBilinear(t10.expand, [input.shape[1] || 0, input.shape[2] || 0]); + const t6 = {}; + t6.resize = uq.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t6.norm = Ge(t6.resize, constants.tf255); + t6.res = model17.execute(t6.norm); + t6.squeeze = Up(t6.res, [0]); + [t6.bgRaw, t6.fgRaw] = so(t6.squeeze, 2); + t6.fg = y1(t6.fgRaw); + t6.mul = ae(t6.fg, constants.tf255); + t6.expand = Fa(t6.mul, 2); + t6.output = uq.resizeBilinear(t6.expand, [input.shape[1] || 0, input.shape[2] || 0]); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t10.input = jp(input); - t10.concat = gt([t10.input, t10.output], -1); - rgba = qe(t10.concat, "int32"); + t6.input = Up(input); + t6.concat = gt([t6.input, t6.output], -1); + rgba = Ke(t6.concat, "int32"); break; case "alpha": - rgba = qe(t10.output, "int32"); + rgba = Ke(t6.output, "int32"); break; default: rgba = nr(0); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return rgba; } @@ -44060,9 +43571,9 @@ function jitter(keypoints) { return keypoints; } function padInput(input, inputSize10) { - var _a2, _b; - const t10 = {}; - if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + var _a2, _b2; + const t6 = {}; + if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b2 = input == null ? void 0 : input.shape) == null ? void 0 : _b2[2])) return input; cache5.padding = [ [0, 0], @@ -44070,10 +43581,10 @@ function padInput(input, inputSize10) { [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], [0, 0] ]; - t10.pad = Ws(input, cache5.padding); - t10.resize = zq.resizeBilinear(t10.pad, [inputSize10, inputSize10]); - const final = qe(t10.resize, "int32"); - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + t6.pad = Hs(input, cache5.padding); + t6.resize = uq.resizeBilinear(t6.pad, [inputSize10, inputSize10]); + const final = Ke(t6.resize, "int32"); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return final; } function rescaleBody(body4, outputSize2) { @@ -44209,18 +43720,18 @@ async function predict17(input, config3) { return cache6.bodies; } return new Promise(async (resolve) => { - const t10 = {}; + const t6 = {}; skipped14 = 0; - t10.input = padInput(input, inputSize8); - t10.res = model18 == null ? void 0 : model18.execute(t10.input); + t6.input = padInput(input, inputSize8); + t6.res = model18 == null ? void 0 : model18.execute(t6.input); cache6.last = now(); - const res = await t10.res.array(); - cache6.bodies = t10.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); + const res = await t6.res.array(); + cache6.bodies = t6.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); for (const body4 of cache6.bodies) { rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); jitter(body4.keypoints); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); resolve(cache6.bodies); }); } @@ -44242,34 +43753,34 @@ async function load18(config3) { return model19; } async function process4(res, outputShape, config3) { - var _a2, _b; + var _a2, _b2; let id2 = 0; let results = []; const size2 = inputSize9; for (const strideSize of [1, 2, 4]) { const baseSize = strideSize * 13; - const scoresT = jp(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scoresT = Up(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); const scores = await scoresT.array(); - const featuresT = jp(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const featuresT = Up(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); const boxesMaxT = z(featuresT, [-1, 4, (((_a2 = featuresT.shape) == null ? void 0 : _a2[1]) || 0) / 4]); - const boxIdxT = Hv(boxesMaxT, 2); + const boxIdxT = b0(boxesMaxT, 2); const boxIdx = await boxIdxT.array(); for (let i = 0; i < scoresT.shape[0]; i++) { - for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { + for (let j = 0; j < (((_b2 = scoresT.shape) == null ? void 0 : _b2[1]) || 0); j++) { const score = scores[i][j]; if (score > (config3.object.minConfidence || 0) && j !== 61) { const cx2 = (0.5 + Math.trunc(i % baseSize)) / baseSize; const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); - const [x6, y] = [ + const [x, y10] = [ cx2 - scaleBox / strideSize * boxOffset[0], cy - scaleBox / strideSize * boxOffset[1] ]; const [w, h] = [ - cx2 + scaleBox / strideSize * boxOffset[2] - x6, - cy + scaleBox / strideSize * boxOffset[3] - y + cx2 + scaleBox / strideSize * boxOffset[2] - x, + cy + scaleBox / strideSize * boxOffset[3] - y10 ]; - let boxRaw = [x6, y, w, h]; + let boxRaw = [x, y10, w, h]; boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); const box = [ boxRaw[0] * outputShape[0], @@ -44289,15 +43800,15 @@ async function process4(res, outputShape, config3) { } } } - Ft([scoresT, featuresT, boxesMaxT, boxIdxT]); + Dt([scoresT, featuresT, boxesMaxT, boxIdxT]); } const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); const nmsScores = results.map((a) => a.score); let nmsIdx = []; if (nmsBoxes && nmsBoxes.length > 0) { - const nms = await zq.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + const nms = await uq.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); nmsIdx = Array.from(await nms.data()); - Ft(nms); + Dt(nms); } results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); return results; @@ -44316,16 +43827,16 @@ async function predict18(image, config3) { return last10; return new Promise(async (resolve) => { const outputSize2 = [image.shape[2] || 0, image.shape[1] || 0]; - const resizeT = zq.resizeBilinear(image, [inputSize9, inputSize9], false); - const normT = We(resizeT, constants.tf255); - const transposeT = Wp(normT, [0, 3, 1, 2]); + const resizeT = uq.resizeBilinear(image, [inputSize9, inputSize9], false); + const normT = Ge(resizeT, constants.tf255); + const transposeT = Mp(normT, [0, 3, 1, 2]); let objectT; if (config3.object.enabled) objectT = model19.execute(transposeT); lastTime15 = now(); const obj = await process4(objectT, outputSize2, config3); last10 = obj; - Ft([resizeT, normT, transposeT, ...objectT]); + Dt([resizeT, normT, transposeT, ...objectT]); resolve(obj); }); } @@ -44389,11 +43900,11 @@ var poseChain = [ ["rightKnee", "rightAnkle"] ]; function getBoundingBox(keypoints) { - const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x: x6, y } }) => ({ - maxX: Math.max(maxX, x6), - maxY: Math.max(maxY, y), - minX: Math.min(minX, x6), - minY: Math.min(minY, y) + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y: y10 } }) => ({ + maxX: Math.max(maxX, x), + maxY: Math.max(maxY, y10), + minX: Math.min(minX, x), + minY: Math.min(minY, y10) }), { maxX: Number.NEGATIVE_INFINITY, maxY: Number.NEGATIVE_INFINITY, @@ -44430,8 +43941,8 @@ var MaxHeap = class { this.numberOfElements = -1; this.getElementValue = getElementValue; } - enqueue(x6) { - this.priorityQueue[++this.numberOfElements] = x6; + enqueue(x) { + this.priorityQueue[++this.numberOfElements] = x; this.swim(this.numberOfElements); } dequeue() { @@ -44477,23 +43988,23 @@ var MaxHeap = class { return this.getValueAt(i) < this.getValueAt(j); } exchange(i, j) { - const t10 = this.priorityQueue[i]; + const t6 = this.priorityQueue[i]; this.priorityQueue[i] = this.priorityQueue[j]; - this.priorityQueue[j] = t10; + this.priorityQueue[j] = t6; } }; -function getOffsetPoint(y, x6, keypoint, offsets) { +function getOffsetPoint(y10, x, keypoint, offsets) { return { - y: offsets.get(y, x6, keypoint), - x: offsets.get(y, x6, keypoint + count) + y: offsets.get(y10, x, keypoint), + x: offsets.get(y10, x, keypoint + count) }; } function getImageCoords(part, outputStride2, offsets) { const { heatmapY, heatmapX, id: keypoint } = part; - const { y, x: x6 } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + const { y: y10, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); return { - x: part.heatmapX * outputStride2 + x6, - y: part.heatmapY * outputStride2 + y + x: part.heatmapX * outputStride2 + x, + y: part.heatmapY * outputStride2 + y10 }; } function clamp(a, min, max) { @@ -44503,8 +44014,8 @@ function clamp(a, min, max) { return max; return a; } -function squaredDistance(y1, x12, y22, x22) { - const dy = y22 - y1; +function squaredDistance(y12, x12, y22, x22) { + const dy = y22 - y12; const dx2 = x22 - x12; return dy * dy + dx2 * dx2; } @@ -44608,13 +44119,13 @@ function buildPartWithScoreQueue(minConfidence2, scores) { } return queue; } -function withinRadius(poses, { x: x6, y }, keypointId) { +function withinRadius(poses, { x, y: y10 }, keypointId) { return poses.some(({ keypoints }) => { var _a2; const correspondingKeypoint = (_a2 = keypoints[keypointId]) == null ? void 0 : _a2.position; if (!correspondingKeypoint) return false; - return squaredDistance(y, x6, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + return squaredDistance(y10, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; }); } function getInstanceScore(existingPoses, keypoints) { @@ -44645,19 +44156,19 @@ function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected async function predict19(input, config3) { if (!(model20 == null ? void 0 : model20["executor"])) return []; - const res = Ne(() => { + const res = Ee(() => { if (!model20.inputs[0].shape) return []; - const resized = zq.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); - const normalized = ke(We(qe(resized, "float32"), 127.5), 1); + const resized = uq.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = Ne(Ge(Ke(resized, "float32"), 127.5), 1); const results = model20.execute(normalized, poseNetOutputs); - const results3d = results.map((y) => jp(y, [0])); - results3d[1] = Ms(results3d[1]); + const results3d = results.map((y10) => Up(y10, [0])); + results3d[1] = zs(results3d[1]); return results3d; }); const buffers = await Promise.all(res.map((tensor) => tensor.buffer())); - for (const t10 of res) - Ft(t10); + for (const t6 of res) + Dt(t6); const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); if (!model20.inputs[0].shape) return []; @@ -44678,7 +44189,7 @@ var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; var t = {}; var ratio = 0; function init3(config3) { - Ft([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + Dt([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); t.r1i = nr(0); t.r2i = nr(0); t.r3i = nr(0); @@ -44694,33 +44205,33 @@ async function load20(config3) { init3(config3); return model21; } -var normalize = (r) => Ne(() => { - const squeeze = jp(r, [0]); - const mul = oe(squeeze, constants.tf255); - const cast = qe(mul, "int32"); +var normalize = (r) => Ee(() => { + const squeeze = Up(r, [0]); + const mul = ae(squeeze, constants.tf255); + const cast = Ke(mul, "int32"); return cast; }); function getRGBA(fgr, pha) { - const rgb2 = fgr ? normalize(fgr) : Bs([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); - const a = pha ? normalize(pha) : Bs([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgb2 = fgr ? normalize(fgr) : Ws([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : Ws([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); const rgba = gt([rgb2, a], -1); - Ft([rgb2, a]); + Dt([rgb2, a]); return rgba; } function getState(state) { - return Ne(() => { + return Ee(() => { const r = {}; - r.unstack = ko(state, -1); + r.unstack = so(state, -1); r.concat = gt(r.unstack, 1); - r.split = $a(r.concat, 4, 1); + r.split = Oa(r.concat, 4, 1); r.stack = gt(r.split, 2); - r.squeeze = jp(r.stack, [0]); - r.expand = _a(r.squeeze, -1); - r.add = ge(r.expand, 1); - r.mul = oe(r.add, 127.5); - r.cast = qe(r.mul, "int32"); - r.tile = fi(r.cast, [1, 1, 3]); - r.alpha = Bs([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); + r.squeeze = Up(r.stack, [0]); + r.expand = Fa(r.squeeze, -1); + r.add = xe(r.expand, 1); + r.mul = ae(r.add, 127.5); + r.cast = Ke(r.mul, "int32"); + r.tile = ki(r.cast, [1, 1, 3]); + r.alpha = Ws([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); return gt([r.tile, r.alpha], -1); }); } @@ -44729,7 +44240,7 @@ async function predict20(input, config3) { model21 = await load20(config3); if (!(model21 == null ? void 0 : model21["executor"])) return null; - t.src = We(input, 255); + t.src = Ge(input, 255); if (ratio !== config3.segmentation.ratio) init3(config3); const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); @@ -44750,7 +44261,7 @@ async function predict20(input, config3) { default: rgba = nr(0); } - Ft([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + Dt([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; return rgba; } @@ -44770,33 +44281,33 @@ async function predict21(input, config3) { model22 = await load21(config3); if (!(model22 == null ? void 0 : model22["executor"]) || !((_a2 = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a2[0].shape)) return null; - const t10 = {}; - t10.resize = zq.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); - t10.norm = We(t10.resize, constants.tf255); - t10.res = model22.execute(t10.norm); - t10.squeeze = jp(t10.res, [0]); - t10.alpha = zq.resizeBilinear(t10.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); - t10.mul = oe(t10.alpha, constants.tf255); + const t6 = {}; + t6.resize = uq.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t6.norm = Ge(t6.resize, constants.tf255); + t6.res = model22.execute(t6.norm); + t6.squeeze = Up(t6.res, [0]); + t6.alpha = uq.resizeBilinear(t6.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t6.mul = ae(t6.alpha, constants.tf255); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t10.input = jp(input); - t10.concat = gt([t10.input, t10.mul], -1); - rgba = qe(t10.concat, "int32"); + t6.input = Up(input); + t6.concat = gt([t6.input, t6.mul], -1); + rgba = Ke(t6.concat, "int32"); break; case "alpha": - rgba = qe(t10.mul, "int32"); + rgba = Ke(t6.mul, "int32"); break; default: rgba = nr(0); } - Object.keys(t10).forEach((tensor) => Ft(t10[tensor])); + Object.keys(t6).forEach((tensor) => Dt(t6[tensor])); return rgba; } // src/models.ts function validateModel(instance, model23, name) { - var _a2, _b; + var _a2, _b2; if (!model23) return null; if (!((_a2 = instance == null ? void 0 : instance.config) == null ? void 0 : _a2.validateModels)) @@ -44807,7 +44318,7 @@ function validateModel(instance, model23, name) { const missing = []; const url = model23["modelUrl"]; const executor = model23["executor"]; - if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { + if ((_b2 = executor == null ? void 0 : executor.graph) == null ? void 0 : _b2.nodes) { for (const kernel of Object.values(executor.graph.nodes)) { const op2 = kernel.op.toLowerCase(); if (!ops.includes(op2)) @@ -44830,7 +44341,7 @@ function validateModel(instance, model23, name) { var Models = class { constructor(currentInstance) { __publicField(this, "instance"); - __publicField(this, "models"); + __publicField(this, "models", {}); this.models = {}; this.instance = currentInstance; } @@ -44858,14 +44369,16 @@ var Models = class { for (const model23 of Object.keys(this.models)) this.models[model23] = null; } - async load() { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2, _A2; + async load(instance) { + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x, _y, _z2, _A2; if (env.initial) this.reset(); + if (instance) + this.instance = instance; const m = {}; m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; m.antispoof = this.instance.config.face.enabled && ((_a2 = this.instance.config.face.antispoof) == null ? void 0 : _a2.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; - m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; + m.liveness = this.instance.config.face.enabled && ((_b2 = this.instance.config.face.liveness) == null ? void 0 : _b2.enabled) && !this.models.liveness ? load9(this.instance.config) : null; m.faceres = this.instance.config.face.enabled && ((_c2 = this.instance.config.face.description) == null ? void 0 : _c2.enabled) && !this.models.faceres ? load7(this.instance.config) : null; m.emotion = this.instance.config.face.enabled && ((_d2 = this.instance.config.face.emotion) == null ? void 0 : _d2.enabled) && !this.models.emotion ? load6(this.instance.config) : null; m.iris = this.instance.config.face.enabled && ((_e2 = this.instance.config.face.iris) == null ? void 0 : _e2.enabled) && !((_f2 = this.instance.config.face.attention) == null ? void 0 : _f2.enabled) && !this.models.iris ? load4(this.instance.config) : null; @@ -44875,17 +44388,17 @@ var Models = class { m.ssrnetgender = this.instance.config.face.enabled && ((_j2 = this.instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; m.mobilefacenet = this.instance.config.face.enabled && ((_k2 = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k2.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; m.insightface = this.instance.config.face.enabled && ((_l2 = this.instance.config.face["insightface"]) == null ? void 0 : _l2.enabled) && !this.models.insightface ? load14(this.instance.config) : null; - m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m2 = this.instance.config.body.modelPath) == null ? void 0 : _m2.includes("blazepose")) ? loadPose(this.instance.config) : null; m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n2 = this.instance.config.body.modelPath) == null ? void 0 : _n2.includes("efficientpose")) ? load2(this.instance.config) : null; m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o2 = this.instance.config.body.modelPath) == null ? void 0 : _o2.includes("movenet")) ? load17(this.instance.config) : null; - m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p2 = this.instance.config.body.modelPath) == null ? void 0 : _p2.includes("posenet")) ? load19(this.instance.config) : null; + m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p = this.instance.config.body.modelPath) == null ? void 0 : _p.includes("posenet")) ? load19(this.instance.config) : null; m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r2 = (_q2 = this.instance.config.hand.detector) == null ? void 0 : _q2.modelPath) == null ? void 0 : _r2.includes("handtrack")) ? loadDetect2(this.instance.config) : null; m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s2 = this.instance.config.hand.detector) == null ? void 0 : _s2.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton(this.instance.config) : null; if ((_v2 = (_u2 = this.instance.config.hand.detector) == null ? void 0 : _u2.modelPath) == null ? void 0 : _v2.includes("handdetect")) [m.handpose, m.handskeleton] = !this.models.handpose ? await load15(this.instance.config) : [null, null]; m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w2 = this.instance.config.object.modelPath) == null ? void 0 : _w2.includes("centernet")) ? load(this.instance.config) : null; - m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x2 = this.instance.config.object.modelPath) == null ? void 0 : _x2.includes("nanodet")) ? load18(this.instance.config) : null; + m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x = this.instance.config.object.modelPath) == null ? void 0 : _x.includes("nanodet")) ? load18(this.instance.config) : null; m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load21(this.instance.config) : null; m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _z2.includes("meet")) ? load16(this.instance.config) : null; m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _A2.includes("rvm")) ? load20(this.instance.config) : null; @@ -44928,7 +44441,7 @@ var Models = class { // src/util/persons.ts function join2(faces, bodies, hands, gestures, shape) { - var _a2, _b, _c2, _d2, _e2, _f2; + var _a2, _b2, _c2, _d2, _e2, _f2; let id2 = 0; const persons = []; for (const face4 of faces) { @@ -44957,26 +44470,26 @@ function join2(faces, bodies, hands, gestures, shape) { person2.gestures.push(gesture2); else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a2 = person2.body) == null ? void 0 : _a2.id)) person2.gestures.push(gesture2); - else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b2 = person2.hands.left) == null ? void 0 : _b2.id)) person2.gestures.push(gesture2); else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_c2 = person2.hands.right) == null ? void 0 : _c2.id)) person2.gestures.push(gesture2); } - const x6 = []; - const y = []; + const x = []; + const y10 = []; const extractXY = (box) => { if (box && box.length === 4) { - x6.push(box[0], box[0] + box[2]); - y.push(box[1], box[1] + box[3]); + x.push(box[0], box[0] + box[2]); + y10.push(box[1], box[1] + box[3]); } }; extractXY(person2.face.box); extractXY((_d2 = person2.body) == null ? void 0 : _d2.box); extractXY((_e2 = person2.hands.left) == null ? void 0 : _e2.box); extractXY((_f2 = person2.hands.right) == null ? void 0 : _f2.box); - const minX = Math.min(...x6); - const minY = Math.min(...y); - person2.box = [minX, minY, Math.max(...x6) - minX, Math.max(...y) - minY]; + const minX = Math.min(...x); + const minY = Math.min(...y10); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y10) - minY]; if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; persons.push(person2); @@ -45779,9 +45292,9 @@ async function warmupNode(instance) { else img = atob2(body3); let res; - if ("node" in tfjs_esm_exports && Pie() === "tensorflow") { + if ("node" in tfjs_esm_exports && Aie() === "tensorflow") { const data = (void 0).decodeJpeg(img); - const expanded = _a(data, 0); + const expanded = Fa(data, 0); instance.tf.dispose(data); res = await instance.detect(expanded, instance.config); instance.tf.dispose(expanded); @@ -45802,50 +45315,50 @@ async function runInference(instance) { return res; } async function runCompile(instance) { - var _a2, _b, _c2, _d2; - if (!P().flagRegistry.ENGINE_COMPILE_ONLY) + var _a2, _b2, _c2, _d2; + if (!O().flagRegistry.ENGINE_COMPILE_ONLY) return; - const backendType = Pie(); - const webGLBackend = Bie(); + const backendType = Aie(); + const webGLBackend = Oie(); if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { return; } - P().set("ENGINE_COMPILE_ONLY", true); + O().set("ENGINE_COMPILE_ONLY", true); const numTensorsStart = cr().state.numTensors; const compiledModels = []; for (const [modelName, model23] of Object.entries(instance.models).filter(([key, val]) => key !== null && val !== null)) { - const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a2 = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a2[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b2 = (_a2 = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d2 = (_c2 = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.dtype) ? model23.inputs[0].dtype : "float32"; for (let dim = 0; dim < shape.length; dim++) { if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; } - const tensor = Wr(shape, dtype); + const tensor = Vr(shape, dtype); try { const res = model23.execute(tensor); compiledModels.push(modelName); if (Array.isArray(res)) - res.forEach((t10) => Ft(t10)); + res.forEach((t6) => Dt(t6)); else - Ft(res); + Dt(res); } catch (e) { if (instance.config.debug) log("compile fail model:", modelName); } - Ft(tensor); + Dt(tensor); } const kernels = await webGLBackend["checkCompileCompletionAsync"](); webGLBackend["getUniformLocations"](); if (instance.config.debug) log("compile pass:", { models: compiledModels, kernels: kernels.length }); - P().set("ENGINE_COMPILE_ONLY", false); + O().set("ENGINE_COMPILE_ONLY", false); const numTensorsEnd = cr().state.numTensors; if (numTensorsEnd - numTensorsStart > 0) log("tensor leak:", numTensorsEnd - numTensorsStart); } async function warmup(instance, userConfig) { await check(instance, false); - const t0 = now(); + const t02 = now(); instance.state = "warmup"; if (userConfig) instance.config = mergeDeep(instance.config, userConfig); @@ -45858,7 +45371,7 @@ async function warmup(instance, userConfig) { const res = await runInference(instance); const t12 = now(); if (instance.config.debug) - log("warmup", instance.config.warmup, Math.round(t12 - t0), "ms"); + log("warmup", instance.config.warmup, Math.round(t12 - t02), "ms"); instance.emit("warmup"); resolve(res); }); @@ -45900,7 +45413,7 @@ var Human = class { return null; if (!input) return "input is not defined"; - if (this.env.node && !(input instanceof ut)) + if (this.env.node && !(input instanceof it)) return "input must be a tensor"; try { this.tf.getBackend(); @@ -45916,7 +45429,7 @@ var Human = class { this.events.dispatchEvent(new Event(event)); }); __privateAdd(this, _loops, {}); - const tfVersion = (Cne.tfjs || YW).replace(/-(.*)/, ""); + const tfVersion = (gne.tfjs || xW).replace(/-(.*)/, ""); config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; config.modelBasePath = env.browser ? "../models/" : "file://models/"; this.version = version; @@ -45973,7 +45486,7 @@ var Human = class { return process2(input, this.config, getTensor); } async segmentation(input, userConfig) { - var _a2, _b, _c2; + var _a2, _b2, _c2; if (userConfig) this.config = mergeDeep(this.config, userConfig); if (!this.config.segmentation.enabled) @@ -45984,11 +45497,11 @@ var Human = class { let tensor = null; if ((_a2 = this.config.segmentation.modelPath) == null ? void 0 : _a2.includes("rvm")) tensor = await predict20(processed.tensor, this.config); - if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) + if ((_b2 = this.config.segmentation.modelPath) == null ? void 0 : _b2.includes("meet")) tensor = await predict16(processed.tensor, this.config); if ((_c2 = this.config.segmentation.modelPath) == null ? void 0 : _c2.includes("selfie")) tensor = await predict21(processed.tensor, this.config); - Ft(processed.tensor); + Dt(processed.tensor); return tensor; } compare(firstImageTensor, secondImageTensor) { @@ -46002,13 +45515,13 @@ var Human = class { async load(userConfig) { this.state = "load"; const timeStamp = now(); - const count2 = Object.values(this.models).filter((model23) => model23).length; + const count2 = Object.values(this.models.models).filter((model23) => model23).length; if (userConfig) this.config = mergeDeep(this.config, userConfig); if (this.env.initial) { if (!await check(this, false)) log("error: backend check failed"); - await Die(); + await $ie(); if (this.env.browser) { if (this.config.debug) log("configuration:", this.config); @@ -46016,11 +45529,11 @@ var Human = class { log("tf flags:", this.tf.ENV.flags); } } - await this.models.load(); + await this.models.load(this); if (this.env.initial && this.config.debug) log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); this.env.initial = false; - const loaded = Object.values(this.models).filter((model23) => model23).length; + const loaded = Object.values(this.models.models).filter((model23) => model23).length; if (loaded !== count2) { this.models.validate(); this.emit("load"); @@ -46033,10 +45546,10 @@ var Human = class { return calc2(result, this.config); } async warmup(userConfig) { - const t0 = now(); + const t02 = now(); const res = await warmup(this, userConfig); const t12 = now(); - this.performance.warmup = Math.trunc(t12 - t0); + this.performance.warmup = Math.trunc(t12 - t02); return res; } async profile(input, userConfig) { @@ -46064,7 +45577,7 @@ var Human = class { async detect(input, userConfig) { this.state = "detect"; return new Promise(async (resolve) => { - var _a2, _b, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2; + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p, _q2, _r2, _s2, _t, _u2; this.state = "config"; let timeStamp; this.config = mergeDeep(this.config, userConfig); @@ -46125,7 +45638,7 @@ var Human = class { if (this.config.async) { if ((_a2 = this.config.body.modelPath) == null ? void 0 : _a2.includes("posenet")) bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; - else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + else if ((_b2 = this.config.body.modelPath) == null ? void 0 : _b2.includes("blazepose")) bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; else if ((_c2 = this.config.body.modelPath) == null ? void 0 : _c2.includes("efficientpose")) bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; @@ -46158,9 +45671,9 @@ var Human = class { delete this.performance.hand; } else { timeStamp = now(); - if ((_n2 = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n2.includes("handdetect")) + if ((_n2 = (_m2 = this.config.hand.detector) == null ? void 0 : _m2.modelPath) == null ? void 0 : _n2.includes("handdetect")) handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; - else if ((_p2 = (_o2 = this.config.hand.detector) == null ? void 0 : _o2.modelPath) == null ? void 0 : _p2.includes("handtrack")) + else if ((_p = (_o2 = this.config.hand.detector) == null ? void 0 : _o2.modelPath) == null ? void 0 : _p.includes("handtrack")) handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); } @@ -46214,7 +45727,7 @@ var Human = class { return join2(faceRes, bodyRes, handRes, gestureRes, shape); } }; - Ft(img.tensor); + Dt(img.tensor); this.emit("detect"); this.state = "idle"; resolve(this.result); diff --git a/dist/human.esm.js.map b/dist/human.esm.js.map index a2f516e2..2f4ec547 100644 --- a/dist/human.esm.js.map +++ b/dist/human.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["tfjs.esm.js", "../src/util/util.ts", "../src/config.ts", "../src/image/imagefxshaders.ts", "../src/image/imagefx.ts", "../src/image/enhance.ts", "../src/image/image.ts", "../src/util/env.ts", "../src/util/webcam.ts", "../src/tfjs/load.ts", "../src/tfjs/humangl.ts", "../src/tfjs/constants.ts", "../src/tfjs/backend.ts", "../src/draw/draw.ts", "../src/draw/primitives.ts", "../src/draw/options.ts", "../src/face/facemeshcoords.ts", "../src/face/constants.ts", "../src/draw/face.ts", "../src/draw/body.ts", "../src/draw/hand.ts", "../src/draw/object.ts", "../src/draw/gesture.ts", "../src/draw/labels.ts", "../src/body/blazeposecoords.ts", "../src/body/blazeposedetector.ts", "../src/util/box.ts", "../src/body/blazepose.ts", "../src/object/labels.ts", "../src/object/centernet.ts", "../src/body/efficientposecoords.ts", "../src/body/efficientpose.ts", "../src/face/facemeshutil.ts", "../src/face/blazeface.ts", "../src/face/iris.ts", "../src/face/attention.ts", "../src/face/facemesh.ts", "../src/gear/emotion.ts", "../src/face/faceres.ts", "../src/face/mask.ts", "../src/face/antispoof.ts", "../src/face/liveness.ts", "../src/gear/gear.ts", "../src/gear/ssrnet-age.ts", "../src/gear/ssrnet-gender.ts", "../src/face/mobilefacenet.ts", "../src/face/insightface.ts", "../src/face/angles.ts", "../src/face/anthropometry.ts", "../src/face/face.ts", "../src/hand/fingerdef.ts", "../src/hand/fingergesture.ts", "../src/hand/fingerpose.ts", "../src/gesture/gesture.ts", "../src/hand/handposeutil.ts", "../src/hand/handposeanchors.ts", "../src/hand/handposedetector.ts", "../src/hand/handposepipeline.ts", "../src/hand/handpose.ts", "../src/hand/handtrack.ts", "../src/result.ts", "../src/body/movenetcoords.ts", "../src/util/interpolate.ts", "../src/segmentation/meet.ts", "../src/face/match.ts", "../src/models.ts", "../src/body/movenetfix.ts", "../src/body/movenet.ts", "../src/object/nanodet.ts", "../src/body/posenetutils.ts", "../src/body/posenet.ts", "../src/segmentation/rvm.ts", "../src/segmentation/selfie.ts", "../src/util/persons.ts", "../src/sample.ts", "../src/warmup.ts", "../src/human.ts"], - "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar QV=Object.create;var fb=Object.defineProperty;var ZV=Object.getOwnPropertyDescriptor;var JV=Object.getOwnPropertyNames;var ez=Object.getPrototypeOf,tz=Object.prototype.hasOwnProperty;var Em=(r=>typeof require!=\"undefined\"?require:typeof Proxy!=\"undefined\"?new Proxy(r,{get:(e,t)=>(typeof require!=\"undefined\"?require:e)[t]}):r)(function(r){if(typeof require!=\"undefined\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Be=(r,e)=>{for(var t in e)fb(r,t,{get:e[t],enumerable:!0})},rz=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of JV(e))!tz.call(r,n)&&n!==t&&fb(r,n,{get:()=>e[n],enumerable:!(o=ZV(e,n))||o.enumerable});return r};var rp=(r,e,t)=>(t=r!=null?QV(ez(r)):{},rz(e||!r||!r.__esModule?fb(t,\"default\",{value:r,enumerable:!0}):t,r));var _0=Kt((Vne,N0)=>{N0.exports=wt;var Oo=null;try{Oo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function wt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}wt.prototype.__isLong__;Object.defineProperty(wt.prototype,\"__isLong__\",{value:!0});function Br(r){return(r&&r.__isLong__)===!0}wt.isLong=Br;var y0={},b0={};function eu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=b0[r],o)?o:(t=St(r,(r|0)<0?-1:0,!0),n&&(b0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=y0[r],o)?o:(t=St(r,r<0?-1:0,!1),n&&(y0[r]=t),t))}wt.fromInt=eu;function Mo(r,e){if(isNaN(r))return e?Ji:Lo;if(e){if(r<0)return Ji;if(r>=S0)return T0}else{if(r<=-I0)return Lr;if(r+1>=I0)return k0}return r<0?Mo(-r,e).neg():St(r%Dp|0,r/Dp|0,e)}wt.fromNumber=Mo;function St(r,e,t){return new wt(r,e,t)}wt.fromBits=St;var Wm=Math.pow;function _b(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return Lo;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return _b(r.substring(1),e,t).neg();for(var n=Mo(Wm(t,8)),s=Lo,a=0;a>>0:this.low};ce.toNumber=function(){return this.unsigned?(this.high>>>0)*Dp+(this.low>>>0):this.high*Dp+(this.low>>>0)};ce.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c=\"0\"+c;i=\"\"+c+i}};ce.getHighBits=function(){return this.high};ce.getHighBitsUnsigned=function(){return this.high>>>0};ce.getLowBits=function(){return this.low};ce.getLowBitsUnsigned=function(){return this.low>>>0};ce.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Lr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&(e&1<=0};ce.isOdd=function(){return(this.low&1)===1};ce.isEven=function(){return(this.low&1)===0};ce.equals=function(e){return Br(e)||(e=ts(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};ce.eq=ce.equals;ce.notEquals=function(e){return!this.eq(e)};ce.neq=ce.notEquals;ce.ne=ce.notEquals;ce.lessThan=function(e){return this.comp(e)<0};ce.lt=ce.lessThan;ce.lessThanOrEqual=function(e){return this.comp(e)<=0};ce.lte=ce.lessThanOrEqual;ce.le=ce.lessThanOrEqual;ce.greaterThan=function(e){return this.comp(e)>0};ce.gt=ce.greaterThan;ce.greaterThanOrEqual=function(e){return this.comp(e)>=0};ce.gte=ce.greaterThanOrEqual;ce.ge=ce.greaterThanOrEqual;ce.compare=function(e){if(Br(e)||(e=ts(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};ce.comp=ce.compare;ce.negate=function(){return!this.unsigned&&this.eq(Lr)?Lr:this.not().add(Fp)};ce.neg=ce.negate;ce.add=function(e){Br(e)||(e=ts(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,f=0;return f+=s+u,m+=f>>>16,f&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,St(m<<16|f,c<<16|l,this.unsigned)};ce.subtract=function(e){return Br(e)||(e=ts(e)),this.add(e.neg())};ce.sub=ce.subtract;ce.multiply=function(e){if(this.isZero())return Lo;if(Br(e)||(e=ts(e)),Oo){var t=Oo.mul(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}if(e.isZero())return Lo;if(this.eq(Lr))return e.isOdd()?Lr:Lo;if(e.eq(Lr))return this.isOdd()?Lr:Lo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(w0)&&e.lt(w0))return Mo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,f=0,d=0;return d+=a*c,f+=d>>>16,d&=65535,f+=s*c,m+=f>>>16,f&=65535,f+=a*u,m+=f>>>16,f&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,St(f<<16|d,l<<16|m,this.unsigned)};ce.mul=ce.multiply;ce.divide=function(e){if(Br(e)||(e=ts(e)),e.isZero())throw Error(\"division by zero\");if(Oo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?Oo.div_u:Oo.div_s)(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ji:Lo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Ji;if(e.gt(this.shru(1)))return v0;s=Ji}else{if(this.eq(Lr)){if(e.eq(Fp)||e.eq(Nb))return Lr;if(e.eq(Lr))return Fp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(Lo)?e.isNegative()?Fp:Nb:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Lr))return this.unsigned?Ji:Lo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=Lo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Wm(2,i-48),u=Mo(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=Mo(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Fp),s=s.add(u),n=n.sub(c)}return s};ce.div=ce.divide;ce.modulo=function(e){if(Br(e)||(e=ts(e)),Oo){var t=(this.unsigned?Oo.rem_u:Oo.rem_s)(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};ce.mod=ce.modulo;ce.rem=ce.modulo;ce.not=function(){return St(~this.low,~this.high,this.unsigned)};ce.and=function(e){return Br(e)||(e=ts(e)),St(this.low&e.low,this.high&e.high,this.unsigned)};ce.or=function(e){return Br(e)||(e=ts(e)),St(this.low|e.low,this.high|e.high,this.unsigned)};ce.xor=function(e){return Br(e)||(e=ts(e)),St(this.low^e.low,this.high^e.high,this.unsigned)};ce.shiftLeft=function(e){return Br(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?St(this.low<>>32-e,this.unsigned):St(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):St(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};ce.shr=ce.shiftRight;ce.shiftRightUnsigned=function(e){if(Br(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return St(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?St(t,0,this.unsigned):St(t>>>e-32,0,this.unsigned)};ce.shru=ce.shiftRightUnsigned;ce.shr_u=ce.shiftRightUnsigned;ce.toSigned=function(){return this.unsigned?St(this.low,this.high,!1):this};ce.toUnsigned=function(){return this.unsigned?this:St(this.low,this.high,!0)};ce.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};ce.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};ce.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};wt.fromBytes=function(e,t,o){return o?wt.fromBytesLE(e,t):wt.fromBytesBE(e,t)};wt.fromBytesLE=function(e,t){return new wt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};wt.fromBytesBE=function(e,t){return new wt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var pv=Kt(()=>{});var cv=Kt(()=>{});var l1=Kt((c1,hC)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(\" \"),p.s1=u(\" \"),p.s2=u(\" \"),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c==\"object\"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(c1,typeof hC==\"object\"&&hC,typeof define==\"function\"&&define)});var f1=Kt((m1,gC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(m1,typeof gC==\"object\"&&gC,typeof define==\"function\"&&define)});var h1=Kt((d1,xC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(d1,typeof xC==\"object\"&&xC,typeof define==\"function\"&&define)});var x1=Kt((g1,yC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,f;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=\"\"+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(g1,typeof yC==\"object\"&&yC,typeof define==\"function\"&&define)});var b1=Kt((y1,bC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,f;return i.w=u=u+1640531527|0,f=c[l+34&127],m=c[l=l+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[l]=f^m,i.i=l,f+(u^u>>>16)|0};function p(u,c){var l,m,f,d,h,g=[],y=128;for(c===(c|0)?(m=c,c=null):(c=c+\"\\0\",m=0,y=Math.max(y,c.length)),f=0,d=-32;d>>15,m^=m<<4,m^=m>>>13,d>=0&&(h=h+1640531527|0,l=g[d&127]^=m+h,f=l==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,d=4*128;d>0;--d)m=g[f+34&127],l=g[f=f+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[f]=m^l;u.w=h,u.X=g,u.i=f}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(y1,typeof bC==\"object\"&&bC,typeof define==\"function\"&&define)});var I1=Kt((C1,CC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.b,l=i.c,m=i.d,f=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(C1,typeof CC==\"object\"&&CC,typeof define==\"function\"&&define)});var w1=Kt(()=>{});var v1=Kt((S1,Of)=>{(function(r,e,t){var o=256,n=6,s=52,a=\"random\",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,w,k){var _=[];w=w==!0?{entropy:!0}:w||{};var E=g(h(w.entropy?[C,b(e)]:C==null?y():C,3),_),R=new f(_),A=function(){for(var D=R.g(n),O=i,M=0;D=u;)D/=2,O/=2,M>>>=1;return(D+M)/O};return A.int32=function(){return R.g(4)|0},A.quick=function(){return R.g(4)/4294967296},A.double=A,g(b(R.S),e),(w.pass||k||function(D,O,M,L){return L&&(L.S&&d(L,R),D.state=function(){return d(R,{})}),M?(t[a]=D,O):D})(A,E,\"global\"in w?w.global:this==t,w.state)}function f(C){var w,k=C.length,_=this,E=0,R=_.i=_.j=0,A=_.S=[];for(k||(C=[k++]);E{var F4=l1(),D4=f1(),P4=h1(),O4=x1(),M4=b1(),L4=I1(),fu=v1();fu.alea=F4;fu.xor128=D4;fu.xorwow=P4;fu.xorshift7=O4;fu.xor4096=M4;fu.tychei=L4;k1.exports=fu});var Vl=Kt(()=>{});var Qw=Kt(()=>{});var D3=Kt(()=>{});var P3=Kt(()=>{});var O3=Kt(()=>{});var M3=Kt((Fg,Jw)=>{var Zw=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};function t(){return Q.buffer!=De&&Tt(Q.buffer),ft}function o(){return Q.buffer!=De&&Tt(Q.buffer),at}function n(){return Q.buffer!=De&&Tt(Q.buffer),dt}function s(){return Q.buffer!=De&&Tt(Q.buffer),Fr}function a(){return Q.buffer!=De&&Tt(Q.buffer),Pt}function i(){return Q.buffer!=De&&Tt(Q.buffer),jr}function p(){return Q.buffer!=De&&Tt(Q.buffer),er}var u=typeof e!=\"undefined\"?e:{},c,l;u.ready=new Promise(function(F,B){c=F,l=B});var m;typeof process!=\"undefined\"&&process.listeners&&(m={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var f=Object.assign({},u),d=[],h=\"./this.program\",g=(F,B)=>{throw B},y=typeof window==\"object\",b=typeof importScripts==\"function\",C=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",w=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var E,R,A,D;function O(F){if(F instanceof Di)return;q(\"exiting due to exception: \"+F)}if(C){b?k=Vl().dirname(k)+\"/\":k=__dirname+\"/\";var M,L;typeof Em==\"function\"&&(M=Qw(),L=Vl()),E=(B,re)=>(B=L.normalize(B),M.readFileSync(B,re?void 0:\"utf8\")),A=B=>{var re=E(B,!0);return re.buffer||(re=new Uint8Array(re)),re},R=(B,re,le)=>{B=L.normalize(B),M.readFile(B,function(Te,Ze){Te?le(Te):re(Ze.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),d=process.argv.slice(2),process.on(\"uncaughtException\",function(B){if(!(B instanceof Di))throw B}),process.on(\"unhandledRejection\",function(B){throw B}),g=(B,re)=>{if(tn())throw process.exitCode=B,re;O(re),process.exit(B)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=D3()}catch(B){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),B}global.Worker=F.Worker}else(y||b)&&(b?k=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(k=document.currentScript.src),typeof r!=\"undefined\"&&r&&(k=r),k.indexOf(\"blob:\")!==0?k=k.substr(0,k.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):k=\"\",C||(E=F=>{var B=new XMLHttpRequest;return B.open(\"GET\",F,!1),B.send(null),B.responseText},b&&(A=F=>{var B=new XMLHttpRequest;return B.open(\"GET\",F,!1),B.responseType=\"arraybuffer\",B.send(null),new Uint8Array(B.response)}),R=(F,B,re)=>{var le=new XMLHttpRequest;le.open(\"GET\",F,!0),le.responseType=\"arraybuffer\",le.onload=()=>{if(le.status==200||le.status==0&&le.response){B(le.response);return}re()},le.onerror=re,le.send(null)}),D=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=P3().performance);var W=console.log.bind(console),V=console.warn.bind(console);C&&(W=F=>M.writeSync(1,F+`\n`),V=F=>M.writeSync(2,F+`\n`));var G=u.print||W,q=u.printErr||V;Object.assign(u,f),f=null,u.arguments&&(d=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var H=4,j=Atomics.load,Y=Atomics.store,Z=Atomics.compareExchange,ee;u.wasmBinary&&(ee=u.wasmBinary);var X=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&Xu(\"no native wasm support detected\");var Q,se,ie=!1,de;function Ie(F,B){F||Xu(B)}var Se=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Ee(F,B,re){for(var le=B+re,Te=B;F[Te]&&!(Te>=le);)++Te;if(Te-B>16&&F.buffer&&Se)return Se.decode(F.buffer instanceof SharedArrayBuffer?F.slice(B,Te):F.subarray(B,Te));for(var Ze=\"\";B>10,56320|Zr&1023)}}return Ze}function Me(F,B){return F?Ee(o(),F,B):\"\"}function st(F,B,re,le){if(!(le>0))return 0;for(var Te=re,Ze=re+le-1,$e=0;$e=55296&&Pe<=57343){var Wt=F.charCodeAt(++$e);Pe=65536+((Pe&1023)<<10)|Wt&1023}if(Pe<=127){if(re>=Ze)break;B[re++]=Pe}else if(Pe<=2047){if(re+1>=Ze)break;B[re++]=192|Pe>>6,B[re++]=128|Pe&63}else if(Pe<=65535){if(re+2>=Ze)break;B[re++]=224|Pe>>12,B[re++]=128|Pe>>6&63,B[re++]=128|Pe&63}else{if(re+3>=Ze)break;B[re++]=240|Pe>>18,B[re++]=128|Pe>>12&63,B[re++]=128|Pe>>6&63,B[re++]=128|Pe&63}}return B[re]=0,re-Te}function pt(F,B,re){return st(F,o(),B,re)}var De,ft,at,dt,It,Fr,Pt,jr,er;w&&(De=u.buffer);function Tt(F){De=F,u.HEAP8=ft=new Int8Array(F),u.HEAP16=dt=new Int16Array(F),u.HEAP32=Fr=new Int32Array(F),u.HEAPU8=at=new Uint8Array(F),u.HEAPU16=It=new Uint16Array(F),u.HEAPU32=Pt=new Uint32Array(F),u.HEAPF32=jr=new Float32Array(F),u.HEAPF64=er=new Float64Array(F)}var tr=u.INITIAL_MEMORY||16777216;if(w)Q=u.wasmMemory,De=u.buffer;else if(u.wasmMemory)Q=u.wasmMemory;else if(Q=new WebAssembly.Memory({initial:tr/65536,maximum:32768,shared:!0}),!(Q.buffer instanceof SharedArrayBuffer))throw q(\"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\"),C&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");Q&&(De=Q.buffer),tr=De.byteLength,Tt(De);var rr,Xr=[],Yr=[],pr=[],Qs=!1;function tn(){return X}function Ua(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)Lc(u.preRun.shift());Uc(Xr)}function jt(){Qs=!0,!w&&Uc(Yr)}function Zs(){if(!w){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)KS(u.postRun.shift());Uc(pr)}}function Lc(F){Xr.unshift(F)}function Bc(F){Yr.unshift(F)}function KS(F){pr.unshift(F)}var Ga=0,ju=null,Js=null;function jS(F){Ga++,u.monitorRunDependencies&&u.monitorRunDependencies(Ga)}function XS(F){if(Ga--,u.monitorRunDependencies&&u.monitorRunDependencies(Ga),Ga==0&&(ju!==null&&(clearInterval(ju),ju=null),Js)){var B=Js;Js=null,B()}}function Xu(F){w?postMessage({cmd:\"onAbort\",arg:F}):u.onAbort&&u.onAbort(F),F=\"Aborted(\"+F+\")\",q(F),ie=!0,de=1,F+=\". Build with -sASSERTIONS for more info.\";var B=new WebAssembly.RuntimeError(F);throw l(B),B}var $x=\"data:application/octet-stream;base64,\";function nm(F){return F.startsWith($x)}function Vc(F){return F.startsWith(\"file://\")}var dr;dr=\"tfjs-backend-wasm-threaded-simd.wasm\",nm(dr)||(dr=_(dr));function sm(F){try{if(F==dr&&ee)return new Uint8Array(ee);if(A)return A(F);throw\"both async and sync fetching of the wasm failed\"}catch(B){Xu(B)}}function Rx(){if(!ee&&(y||b)){if(typeof fetch==\"function\"&&!Vc(dr))return fetch(dr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+dr+\"'\";return F.arrayBuffer()}).catch(function(){return sm(dr)});if(R)return new Promise(function(F,B){R(dr,function(re){F(new Uint8Array(re))},B)})}return Promise.resolve().then(function(){return sm(dr)})}function Ax(){var F={env:xm,wasi_snapshot_preview1:xm};function B($e,Pe){var Wt=$e.exports;if(u.asm=Wt,Wx(u.asm._emscripten_tls_init),rr=u.asm.__indirect_function_table,Bc(u.asm.__wasm_call_ctors),se=Pe,!w){var Zr=Fe.unusedWorkers.length;Fe.unusedWorkers.forEach(function(ta){Fe.loadWasmModuleToWorker(ta,function(){--Zr||XS(\"wasm-instantiate\")})})}}w||jS(\"wasm-instantiate\");function re($e){B($e.instance,$e.module)}function le($e){return Rx().then(function(Pe){return WebAssembly.instantiate(Pe,F)}).then(function(Pe){return Pe}).then($e,function(Pe){q(\"failed to asynchronously prepare wasm: \"+Pe),Xu(Pe)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming==\"function\"&&!nm(dr)&&!Vc(dr)&&!C&&typeof fetch==\"function\"?fetch(dr,{credentials:\"same-origin\"}).then(function($e){var Pe=WebAssembly.instantiateStreaming($e,F);return Pe.then(re,function(Wt){return q(\"wasm streaming compile failed: \"+Wt),q(\"falling back to ArrayBuffer instantiation\"),le(re)})}):le(re)}if(u.instantiateWasm)try{var Ze=u.instantiateWasm(F,B);return Ze}catch($e){q(\"Module.instantiateWasm callback failed with error: \"+$e),l($e)}return Te().catch(l),{}}var Fx,YS,Dx={};function Di(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function Px(F){var B=Fe.pthreads[F];delete Fe.pthreads[F],B.terminate(),cb(F),Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(B),1),B.pthread_ptr=0}function Ox(F){var B=Fe.pthreads[F];B.postMessage({cmd:\"cancel\"})}function zc(F){var B=Fe.pthreads[F];Ie(B),Fe.returnWorkerToPool(B)}function am(F){var B=Fe.getNewWorker();if(!B)return 6;Fe.runningWorkers.push(B),Fe.pthreads[F.pthread_ptr]=B,B.pthread_ptr=F.pthread_ptr;var re={cmd:\"run\",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return B.runPthread=()=>{re.time=performance.now(),B.postMessage(re,F.transferList)},B.loaded&&(B.runPthread(),delete B.runPthread),0}var im={varargs:void 0,get:function(){im.varargs+=4;var F=s()[im.varargs-4>>2];return F},getStr:function(F){var B=Me(F);return B}};function Wc(F){if(w)return Ha(1,1,F);de=F,tn()||(Fe.terminateAllThreads(),u.onExit&&u.onExit(F),ie=!0),g(F,new Di(F))}function QS(F,B){if(de=F,!B&&w)throw pm(F),\"unwind\";Wc(F)}var um=QS;function Mx(F){if(F instanceof Di||F==\"unwind\")return de;g(1,F)}var Fe={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){w?Fe.initWorker():Fe.initMainThread()},initMainThread:function(){for(var F=8;F--;)Fe.allocateUnusedWorker()},initWorker:function(){X=!1},setExitStatus:function(F){de=F},terminateAllThreads:function(){for(var F of Object.values(Fe.pthreads))Fe.returnWorkerToPool(F);for(var F of Fe.unusedWorkers)F.terminate();Fe.unusedWorkers=[]},returnWorkerToPool:function(F){var B=F.pthread_ptr;delete Fe.pthreads[B],Fe.unusedWorkers.push(F),Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(F),1),F.pthread_ptr=0,cb(B)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Fe.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,B){F.onmessage=re=>{var le=re.data,Te=le.cmd;if(F.pthread_ptr&&(Fe.currentProxiedOperationCallerThread=F.pthread_ptr),le.targetThread&&le.targetThread!=Sm()){var Ze=Fe.pthreads[le.targetThread];Ze?Ze.postMessage(le,le.transferList):q('Internal error! Worker sent a message \"'+Te+'\" to target pthread '+le.targetThread+\", but that thread no longer exists!\"),Fe.currentProxiedOperationCallerThread=void 0;return}Te===\"processProxyingQueue\"?Gc(le.queue):Te===\"spawnThread\"?am(le):Te===\"cleanupThread\"?zc(le.thread):Te===\"killThread\"?Px(le.thread):Te===\"cancelThread\"?Ox(le.thread):Te===\"loaded\"?(F.loaded=!0,B&&B(F),F.runPthread&&(F.runPthread(),delete F.runPthread)):Te===\"print\"?G(\"Thread \"+le.threadId+\": \"+le.text):Te===\"printErr\"?q(\"Thread \"+le.threadId+\": \"+le.text):Te===\"alert\"?alert(\"Thread \"+le.threadId+\": \"+le.text):le.target===\"setimmediate\"?F.postMessage(le):Te===\"onAbort\"?u.onAbort&&u.onAbort(le.arg):Te&&q(\"worker sent an unknown command \"+Te),Fe.currentProxiedOperationCallerThread=void 0},F.onerror=re=>{var le=\"worker sent an error!\";throw q(le+\" \"+re.filename+\":\"+re.lineno+\": \"+re.message),re},C&&(F.on(\"message\",function(re){F.onmessage({data:re})}),F.on(\"error\",function(re){F.onerror(re)}),F.on(\"detachedExit\",function(){})),F.postMessage({cmd:\"load\",urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:Q,wasmModule:se})},allocateUnusedWorker:function(){var F=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");Fe.unusedWorkers.push(new Worker(F))},getNewWorker:function(){return Fe.unusedWorkers.length==0&&(Fe.allocateUnusedWorker(),Fe.loadWasmModuleToWorker(Fe.unusedWorkers[0])),Fe.unusedWorkers.pop()}};u.PThread=Fe;function Uc(F){for(;F.length>0;)F.shift()(u)}function Lx(F){var B=lb(),re=F();return vm(B),re}function ZS(F){return F}function JS(F){var B=/\\b_Z[\\w\\d_]+/g;return F.replace(B,function(re){var le=re;return re===le?re:le+\" [\"+re+\"]\"})}function Bx(){var F=Sm(),B=s()[F+44>>2],re=s()[F+48>>2],le=B-re;a0(B,le),vm(B)}u.establishStackSpace=Bx;function pm(F){if(w)return Ha(2,0,F);try{um(F)}catch(B){Mx(B)}}var Yu=[];function Vx(F){var B=Yu[F];return B||(F>=Yu.length&&(Yu.length=F+1),Yu[F]=B=rr.get(F)),B}function zx(F,B){var re=Vx(F)(B);tn()?Fe.setExitStatus(re):s0(re)}u.invokeEntryPoint=zx;function e0(){var F=new Error;if(!F.stack){try{throw new Error}catch(B){F=B}if(!F.stack)return\"(no stack trace available)\"}return F.stack.toString()}function Wx(F){Fe.tlsInitFunctions.push(F)}function Ux(F,B){t().set(F,B)}function Gx(F){r0(F,!b,1,!y),Fe.threadInitTLS()}function Hx(F){w?postMessage({cmd:\"cleanupThread\",thread:F}):zc(F)}function cm(F,B,re,le){return w?Ha(3,1,F,B,re,le):lm(F,B,re,le)}function lm(F,B,re,le){if(typeof SharedArrayBuffer==\"undefined\")return q(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Te=[],Ze=0;if(w&&(Te.length===0||Ze))return cm(F,B,re,le);if(Ze)return Ze;var $e={startRoutine:re,pthread_ptr:F,arg:le,transferList:Te};return w?($e.cmd=\"spawnThread\",postMessage($e,Te),0):am($e)}function qx(){return 2097152}var Kx=!0;function jx(){return Kx}function Gc(F){Atomics.store(s(),F>>2,1),Sm()&&n0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=Gc;function Xx(F,B,re,le){if(F==B)setTimeout(()=>Gc(le));else if(w)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:le});else{var Te=Fe.pthreads[F];if(!Te)return;Te.postMessage({cmd:\"processProxyingQueue\",queue:le})}return 1}function Yx(F,B,re){return-1}function Qx(){Xu(\"\")}function Pi(F){Pi.shown||(Pi.shown={}),Pi.shown[F]||(Pi.shown[F]=1,C&&(F=\"warning: \"+F),q(F))}function Zx(){C||b||Pi(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function Jx(){return Date.now()}function mm(){return 2147483648}function ey(){return mm()}var Qu;C?Qu=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:w?Qu=()=>performance.now()-u.__performance_now_clock_drift:Qu=()=>performance.now();function ty(F,B,re){o().copyWithin(F,B,B+re)}function ry(){return C?O3().cpus().length:navigator.hardwareConcurrency}function Ha(F,B){var re=arguments.length-2,le=arguments;return Lx(()=>{for(var Te=re,Ze=km(Te*8),$e=Ze>>3,Pe=0;Pe>3,Te=0;Te>>16),Tt(Q.buffer),1}catch(B){}}function sy(F){var B=o().length;if(F=F>>>0,F<=B)return!1;var re=mm();if(F>re)return!1;let le=(Wt,Zr)=>Wt+(Zr-Wt%Zr)%Zr;for(var Te=1;Te<=4;Te*=2){var Ze=B*(1+.2/Te);Ze=Math.min(Ze,F+100663296);var $e=Math.min(re,le(Math.max(F,Ze),65536)),Pe=ny($e);if(Pe)return!0}return!1}function ay(){throw\"unwind\"}function fm(F){return w?Ha(4,1,F):52}function dm(F,B,re,le,Te){return w?Ha(5,1,F,B,re,le,Te):70}var iy=[null,[],[]];function uy(F,B){var re=iy[F];B===0||B===10?((F===1?G:q)(Ee(re,0)),re.length=0):re.push(B)}function hm(F,B,re,le){if(w)return Ha(6,1,F,B,re,le);for(var Te=0,Ze=0;Ze>2],Pe=a()[B+4>>2];B+=8;for(var Wt=0;Wt>2]=Te,0}function gm(F){var B=u[\"_\"+F];return B}function py(F,B,re,le,Te){var Ze={string:Dr=>{var tp=0;if(Dr!=null&&Dr!==0){var p0=(Dr.length<<2)+1;tp=km(p0),pt(Dr,tp,p0)}return tp},array:Dr=>{var tp=km(Dr.length);return Ux(Dr,tp),tp}};function $e(Dr){return B===\"string\"?Me(Dr):B===\"boolean\"?Boolean(Dr):Dr}var Pe=gm(F),Wt=[],Zr=0;if(le)for(var ta=0;ta$e===\"number\"||$e===\"boolean\"),Ze=B!==\"string\";return Ze&&Te&&!le?gm(F):function(){return py(F,B,re,arguments,le)}}Fe.init();var ly=[null,Wc,pm,cm,fm,dm,hm],xm={__emscripten_init_main_thread_js:Gx,__emscripten_thread_cleanup:Hx,__pthread_create_js:lm,_emscripten_default_pthread_stack_size:qx,_emscripten_get_now_is_monotonic:jx,_emscripten_notify_task_queue:Xx,_emscripten_set_offscreencanvas_size:Yx,abort:Qx,emscripten_check_blocking_allowed:Zx,emscripten_date_now:Jx,emscripten_get_heap_max:ey,emscripten_get_now:Qu,emscripten_memcpy_big:ty,emscripten_num_logical_cores:ry,emscripten_receive_on_main_thread_js:oy,emscripten_resize_heap:sy,emscripten_unwind_to_js_event_loop:ay,exit:um,fd_close:fm,fd_seek:dm,fd_write:hm,memory:Q||u.wasmMemory},t0=Ax(),my=u.___wasm_call_ctors=function(){return(my=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},fy=u._init=function(){return(fy=u._init=u.asm.init).apply(null,arguments)},dy=u._init_with_threads_count=function(){return(dy=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},hy=u._get_threads_count=function(){return(hy=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},gy=u._register_tensor=function(){return(gy=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},xy=u._dispose_data=function(){return(xy=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},yy=u._dispose=function(){return(yy=u._dispose=u.asm.dispose).apply(null,arguments)},by=u._Abs=function(){return(by=u._Abs=u.asm.Abs).apply(null,arguments)},Cy=u._Add=function(){return(Cy=u._Add=u.asm.Add).apply(null,arguments)},Iy=u._AddN=function(){return(Iy=u._AddN=u.asm.AddN).apply(null,arguments)},wy=u._All=function(){return(wy=u._All=u.asm.All).apply(null,arguments)},Sy=u._Any=function(){return(Sy=u._Any=u.asm.Any).apply(null,arguments)},vy=u._ArgMax=function(){return(vy=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},ky=u._AvgPool=function(){return(ky=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},Ty=u._BatchMatMul=function(){return(Ty=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Ny=u._Ceil=function(){return(Ny=u._Ceil=u.asm.Ceil).apply(null,arguments)},_y=u._ClipByValue=function(){return(_y=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ey=u._Conv2D=function(){return(Ey=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},$y=u._Conv2DBackpropInput=function(){return($y=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Ry=u._Cos=function(){return(Ry=u._Cos=u.asm.Cos).apply(null,arguments)},Ay=u._Cosh=function(){return(Ay=u._Cosh=u.asm.Cosh).apply(null,arguments)},Fy=u._CropAndResize=function(){return(Fy=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Dy=u._Cumprod=function(){return(Dy=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Py=u._Cumsum=function(){return(Py=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Oy=u._DepthToSpace=function(){return(Oy=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},My=u._DepthwiseConv2dNative=function(){return(My=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Ly=u._Elu=function(){return(Ly=u._Elu=u.asm.Elu).apply(null,arguments)},By=u._Equal=function(){return(By=u._Equal=u.asm.Equal).apply(null,arguments)},Vy=u._Exp=function(){return(Vy=u._Exp=u.asm.Exp).apply(null,arguments)},zy=u._FlipLeftRight=function(){return(zy=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},Wy=u._Floor=function(){return(Wy=u._Floor=u.asm.Floor).apply(null,arguments)},Uy=u._FloorDiv=function(){return(Uy=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},Gy=u._FusedBatchNorm=function(){return(Gy=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},Hy=u._FusedConv2D=function(){return(Hy=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},qy=u._FusedDepthwiseConv2D=function(){return(qy=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},Ky=u._Gather=function(){return(Ky=u._Gather=u.asm.Gather).apply(null,arguments)},jy=u._GatherNd=function(){return(jy=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},Xy=u._Greater=function(){return(Xy=u._Greater=u.asm.Greater).apply(null,arguments)},Yy=u._GreaterEqual=function(){return(Yy=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},Qy=u._LeakyRelu=function(){return(Qy=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},Zy=u._Less=function(){return(Zy=u._Less=u.asm.Less).apply(null,arguments)},Jy=u._LessEqual=function(){return(Jy=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},eb=u._Log=function(){return(eb=u._Log=u.asm.Log).apply(null,arguments)},tb=u._LogicalAnd=function(){return(tb=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},rb=u._LogicalNot=function(){return(rb=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},ob=u._LogicalOr=function(){return(ob=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},nb=u._LogicalXor=function(){return(nb=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},sb=u._Max=function(){return(sb=u._Max=u.asm.Max).apply(null,arguments)},ym=u._MaxPool=function(){return(ym=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},bm=u._Maximum=function(){return(bm=u._Maximum=u.asm.Maximum).apply(null,arguments)},qc=u._Mean=function(){return(qc=u._Mean=u.asm.Mean).apply(null,arguments)},ab=u._Min=function(){return(ab=u._Min=u.asm.Min).apply(null,arguments)},ib=u._Minimum=function(){return(ib=u._Minimum=u.asm.Minimum).apply(null,arguments)},Zu=u._MirrorPad=function(){return(Zu=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},Cm=u._Multiply=function(){return(Cm=u._Multiply=u.asm.Multiply).apply(null,arguments)},Ju=u._Neg=function(){return(Ju=u._Neg=u.asm.Neg).apply(null,arguments)},ep=u._NonMaxSuppressionV3=function(){return(ep=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},ub=u._NonMaxSuppressionV4=function(){return(ub=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},U=u._NonMaxSuppressionV5=function(){return(U=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},te=u._NotEqual=function(){return(te=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},ve=u._OneHot=function(){return(ve=u._OneHot=u.asm.OneHot).apply(null,arguments)},Ke=u._PadV2=function(){return(Ke=u._PadV2=u.asm.PadV2).apply(null,arguments)},Nt=u._Pow=function(){return(Nt=u._Pow=u.asm.Pow).apply(null,arguments)},_t=u._Prelu=function(){return(_t=u._Prelu=u.asm.Prelu).apply(null,arguments)},He=u._Prod=function(){return(He=u._Prod=u.asm.Prod).apply(null,arguments)},ze=u._RealDiv=function(){return(ze=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},zt=u._Relu=function(){return(zt=u._Relu=u.asm.Relu).apply(null,arguments)},Qr=u._Relu6=function(){return(Qr=u._Relu6=u.asm.Relu6).apply(null,arguments)},ea=u._ResizeBilinear=function(){return(ea=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Im=u._ResizeNearestNeighbor=function(){return(Im=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},Kc=u._Reverse=function(){return(Kc=u._Reverse=u.asm.Reverse).apply(null,arguments)},pb=u._RotateWithOffset=function(){return(pb=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},hr=u._Round=function(){return(hr=u._Round=u.asm.Round).apply(null,arguments)},qa=u._Rsqrt=function(){return(qa=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},wm=u._ScatterNd=function(){return(wm=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},yV=u._SelectV2=function(){return(yV=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},bV=u._Sigmoid=function(){return(bV=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},CV=u._Sin=function(){return(CV=u._Sin=u.asm.Sin).apply(null,arguments)},IV=u._Softmax=function(){return(IV=u._Softmax=u.asm.Softmax).apply(null,arguments)},wV=u._SparseFillEmptyRows=function(){return(wV=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},SV=u._SparseReshape=function(){return(SV=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},vV=u._SparseSegmentReduction=function(){return(vV=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},kV=u._Sqrt=function(){return(kV=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},TV=u._Square=function(){return(TV=u._Square=u.asm.Square).apply(null,arguments)},NV=u._SquaredDifference=function(){return(NV=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},_V=u._Step=function(){return(_V=u._Step=u.asm.Step).apply(null,arguments)},EV=u._StridedSlice=function(){return(EV=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},$V=u._Sub=function(){return($V=u._Sub=u.asm.Sub).apply(null,arguments)},RV=u._Sum=function(){return(RV=u._Sum=u.asm.Sum).apply(null,arguments)},AV=u._Tan=function(){return(AV=u._Tan=u.asm.Tan).apply(null,arguments)},FV=u._Tanh=function(){return(FV=u._Tanh=u.asm.Tanh).apply(null,arguments)},DV=u._Tile=function(){return(DV=u._Tile=u.asm.Tile).apply(null,arguments)},PV=u._TopK=function(){return(PV=u._TopK=u.asm.TopK).apply(null,arguments)},OV=u._Transform=function(){return(OV=u._Transform=u.asm.Transform).apply(null,arguments)},MV=u._Transpose=function(){return(MV=u._Transpose=u.asm.Transpose).apply(null,arguments)},LV=u.__FusedMatMul=function(){return(LV=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},BV=u._malloc=function(){return(BV=u._malloc=u.asm.malloc).apply(null,arguments)},VV=u._free=function(){return(VV=u._free=u.asm.free).apply(null,arguments)},zV=u.__emscripten_tls_init=function(){return(zV=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Sm=u._pthread_self=function(){return(Sm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},WV=u.___errno_location=function(){return(WV=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},r0=u.__emscripten_thread_init=function(){return(r0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},UV=u.__emscripten_thread_crashed=function(){return(UV=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},GV=u._emscripten_main_thread_process_queued_calls=function(){return(GV=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},HV=u._emscripten_main_browser_thread_id=function(){return(HV=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},o0=u._emscripten_run_in_main_runtime_thread_js=function(){return(o0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},qV=u._emscripten_dispatch_to_thread_=function(){return(qV=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},n0=u.__emscripten_proxy_execute_task_queue=function(){return(n0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},cb=u.__emscripten_thread_free_data=function(){return(cb=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},s0=u.__emscripten_thread_exit=function(){return(s0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},a0=u._emscripten_stack_set_limits=function(){return(a0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},lb=u.stackSave=function(){return(lb=u.stackSave=u.asm.stackSave).apply(null,arguments)},vm=u.stackRestore=function(){return(vm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},km=u.stackAlloc=function(){return(km=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},KV=u.dynCall_iijjiiii=function(){return(KV=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},jV=u.dynCall_jiji=function(){return(jV=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=tn,u.wasmMemory=Q,u.cwrap=cy,u.ExitStatus=Di,u.PThread=Fe;var Tm;Js=function F(){Tm||i0(),Tm||(Js=F)};function i0(F){if(F=F||d,Ga>0)return;if(w){c(u),jt(),postMessage({cmd:\"loaded\"});return}if(Ua(),Ga>0)return;function B(){Tm||(Tm=!0,u.calledRun=!0,!ie&&(jt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Zs()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),B()},1)):B()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();i0();var Nm;m&&(Nm={uncaughtException:process.listeners(\"uncaughtException\").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var _m;if(typeof WasmBackendModule!=\"undefined\")_m=WasmBackendModule;else if(typeof e!=\"undefined\")_m=e;else throw new Error(\"Could not find wasm module in post.js\");if(Nm){var XV=_m._dispose;_m._dispose=function(){XV(),Nm.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Nm.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return e.ready}})();typeof Fg==\"object\"&&typeof Jw==\"object\"?Jw.exports=Zw:typeof define==\"function\"&&define.amd?define([],function(){return Zw}):typeof Fg==\"object\"&&(Fg.WasmBackendModuleThreadedSimd=Zw)});var B3=Kt((ukt,L3)=>{L3.exports.wasmWorkerContents=`\"use strict\";var Module={};var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require(\"worker_threads\");var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",data=>onmessage({data:data}));var fs=require(\"fs\");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,\"utf8\"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+\"\n\");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:Module[\"_pthread_self\"]()})}var err=threadPrintErr;self.alert=threadAlert;Module[\"instantiateWasm\"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);receiveInstance(instance);Module[\"wasmModule\"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob==\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;Module[\"__emscripten_thread_init\"](e.data.pthread_ptr,0,0,1);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module[\"executeNotifiedProxyingQueue\"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module[\"invokeEntryPoint\"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!=\"unwind\"){if(ex instanceof Module[\"ExitStatus\"]){if(Module[\"keepRuntimeAlive\"]()){}else{Module[\"__emscripten_thread_exit\"](ex.status)}}else{throw ex}}}}else if(e.data.cmd===\"cancel\"){if(Module[\"_pthread_self\"]()){Module[\"__emscripten_thread_exit\"](-1)}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processProxyingQueue\"){if(initializedJS){Module[\"executeNotifiedProxyingQueue\"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){if(Module[\"__emscripten_thread_crashed\"]){Module[\"__emscripten_thread_crashed\"]()}throw ex}};`});var V3=Kt((Dg,tS)=>{var eS=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!=\"undefined\"?e:{},o,n;t.ready=new Promise(function(U,te){o=U,n=te});var s;typeof process!=\"undefined\"&&process.listeners&&(s={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var a=Object.assign({},t),i=[],p=\"./this.program\",u=(U,te)=>{throw te},c=typeof window==\"object\",l=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",f=\"\";function d(U){return t.locateFile?t.locateFile(U,f):f+U}var h,g,y,b;function C(U){if(U instanceof ju)return;E(\"exiting due to exception: \"+U)}if(m){l?f=Vl().dirname(f)+\"/\":f=__dirname+\"/\";var w,k;typeof Em==\"function\"&&(w=Qw(),k=Vl()),h=(U,te)=>(U=k.normalize(U),w.readFileSync(U,te?void 0:\"utf8\")),y=U=>{var te=h(U,!0);return te.buffer||(te=new Uint8Array(te)),te},g=(U,te,ve)=>{U=k.normalize(U),w.readFile(U,function(Ke,Nt){Ke?ve(Ke):te(Nt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(U){if(!(U instanceof ju))throw U}),process.on(\"unhandledRejection\",function(U){throw U}),u=(U,te)=>{if(at())throw process.exitCode=U,te;C(te),process.exit(U)},t.inspect=function(){return\"[Emscripten Module object]\"}}else(c||l)&&(l?f=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f.indexOf(\"blob:\")!==0?f=f.substr(0,f.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):f=\"\",h=U=>{var te=new XMLHttpRequest;return te.open(\"GET\",U,!1),te.send(null),te.responseText},l&&(y=U=>{var te=new XMLHttpRequest;return te.open(\"GET\",U,!1),te.responseType=\"arraybuffer\",te.send(null),new Uint8Array(te.response)}),g=(U,te,ve)=>{var Ke=new XMLHttpRequest;Ke.open(\"GET\",U,!0),Ke.responseType=\"arraybuffer\",Ke.onload=()=>{if(Ke.status==200||Ke.status==0&&Ke.response){te(Ke.response);return}ve()},Ke.onerror=ve,Ke.send(null)},b=U=>document.title=U);var _=t.print||console.log.bind(console),E=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,A;t.wasmBinary&&(A=t.wasmBinary);var D=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&pr(\"no native wasm support detected\");var O,M=!1,L;function W(U,te){U||pr(te)}var V=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function G(U,te,ve){for(var Ke=te+ve,Nt=te;U[Nt]&&!(Nt>=Ke);)++Nt;if(Nt-te>16&&U.buffer&&V)return V.decode(U.subarray(te,Nt));for(var _t=\"\";te>10,56320|Qr&1023)}}return _t}function q(U,te){return U?G(ee,U,te):\"\"}function H(U,te,ve,Ke){if(!(Ke>0))return 0;for(var Nt=ve,_t=ve+Ke-1,He=0;He=55296&&ze<=57343){var zt=U.charCodeAt(++He);ze=65536+((ze&1023)<<10)|zt&1023}if(ze<=127){if(ve>=_t)break;te[ve++]=ze}else if(ze<=2047){if(ve+1>=_t)break;te[ve++]=192|ze>>6,te[ve++]=128|ze&63}else if(ze<=65535){if(ve+2>=_t)break;te[ve++]=224|ze>>12,te[ve++]=128|ze>>6&63,te[ve++]=128|ze&63}else{if(ve+3>=_t)break;te[ve++]=240|ze>>18,te[ve++]=128|ze>>12&63,te[ve++]=128|ze>>6&63,te[ve++]=128|ze&63}}return te[ve]=0,ve-Nt}function j(U,te,ve){return H(U,ee,te,ve)}var Y,Z,ee,X,Q,se,ie,de,Ie;function Se(U){Y=U,t.HEAP8=Z=new Int8Array(U),t.HEAP16=X=new Int16Array(U),t.HEAP32=se=new Int32Array(U),t.HEAPU8=ee=new Uint8Array(U),t.HEAPU16=Q=new Uint16Array(U),t.HEAPU32=ie=new Uint32Array(U),t.HEAPF32=de=new Float32Array(U),t.HEAPF64=Ie=new Float64Array(U)}var Ee=t.INITIAL_MEMORY||16777216,Me,st=[],pt=[],De=[],ft=!1;function at(){return D}function dt(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Pt(t.preRun.shift());Js(st)}function It(){ft=!0,Js(pt)}function Fr(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)er(t.postRun.shift());Js(De)}function Pt(U){st.unshift(U)}function jr(U){pt.unshift(U)}function er(U){De.unshift(U)}var Tt=0,tr=null,rr=null;function Xr(U){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function Yr(U){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(tr!==null&&(clearInterval(tr),tr=null),rr)){var te=rr;rr=null,te()}}function pr(U){t.onAbort&&t.onAbort(U),U=\"Aborted(\"+U+\")\",E(U),M=!0,L=1,U+=\". Build with -sASSERTIONS for more info.\";var te=new WebAssembly.RuntimeError(U);throw n(te),te}var Qs=\"data:application/octet-stream;base64,\";function tn(U){return U.startsWith(Qs)}function Ua(U){return U.startsWith(\"file://\")}var jt;jt=\"tfjs-backend-wasm.wasm\",tn(jt)||(jt=d(jt));function Zs(U){try{if(U==jt&&A)return new Uint8Array(A);if(y)return y(U);throw\"both async and sync fetching of the wasm failed\"}catch(te){pr(te)}}function Lc(){if(!A&&(c||l)){if(typeof fetch==\"function\"&&!Ua(jt))return fetch(jt,{credentials:\"same-origin\"}).then(function(U){if(!U.ok)throw\"failed to load wasm binary file at '\"+jt+\"'\";return U.arrayBuffer()}).catch(function(){return Zs(jt)});if(g)return new Promise(function(U,te){g(jt,function(ve){U(new Uint8Array(ve))},te)})}return Promise.resolve().then(function(){return Zs(jt)})}function Bc(){var U={env:Wc,wasi_snapshot_preview1:Wc};function te(He,ze){var zt=He.exports;t.asm=zt,O=t.asm.memory,Se(O.buffer),Me=t.asm.__indirect_function_table,jr(t.asm.__wasm_call_ctors),Yr(\"wasm-instantiate\")}Xr(\"wasm-instantiate\");function ve(He){te(He.instance)}function Ke(He){return Lc().then(function(ze){return WebAssembly.instantiate(ze,U)}).then(function(ze){return ze}).then(He,function(ze){E(\"failed to asynchronously prepare wasm: \"+ze),pr(ze)})}function Nt(){return!A&&typeof WebAssembly.instantiateStreaming==\"function\"&&!tn(jt)&&!Ua(jt)&&!m&&typeof fetch==\"function\"?fetch(jt,{credentials:\"same-origin\"}).then(function(He){var ze=WebAssembly.instantiateStreaming(He,U);return ze.then(ve,function(zt){return E(\"wasm streaming compile failed: \"+zt),E(\"falling back to ArrayBuffer instantiation\"),Ke(ve)})}):Ke(ve)}if(t.instantiateWasm)try{var _t=t.instantiateWasm(U,te);return _t}catch(He){E(\"Module.instantiateWasm callback failed with error: \"+He),n(He)}return Nt().catch(n),{}}var KS,Ga;function ju(U){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+U+\")\",this.status=U}function Js(U){for(;U.length>0;)U.shift()(t)}function jS(U){return U}function XS(U){var te=/\\b_Z[\\w\\d_]+/g;return U.replace(te,function(ve){var Ke=ve;return ve===Ke?ve:Ke+\" [\"+ve+\"]\"})}function Xu(){var U=new Error;if(!U.stack){try{throw new Error}catch(te){U=te}if(!U.stack)return\"(no stack trace available)\"}return U.stack.toString()}function $x(U,te){Z.set(U,te)}function nm(){pr(\"\")}function Vc(){return 2147483648}function dr(){return Vc()}function sm(U,te,ve){ee.copyWithin(U,te,te+ve)}function Rx(U){try{return O.grow(U-Y.byteLength+65535>>>16),Se(O.buffer),1}catch(te){}}function Ax(U){var te=ee.length;U=U>>>0;var ve=Vc();if(U>ve)return!1;let Ke=(zt,Qr)=>zt+(Qr-zt%Qr)%Qr;for(var Nt=1;Nt<=4;Nt*=2){var _t=te*(1+.2/Nt);_t=Math.min(_t,U+100663296);var He=Math.min(ve,Ke(Math.max(U,_t),65536)),ze=Rx(He);if(ze)return!0}return!1}var Fx={varargs:void 0,get:function(){Fx.varargs+=4;var U=se[Fx.varargs-4>>2];return U},getStr:function(U){var te=q(U);return te}};function YS(U){return 52}function Dx(U,te,ve,Ke,Nt){return 70}var Di=[null,[],[]];function Px(U,te){var ve=Di[U];te===0||te===10?((U===1?_:E)(G(ve,0)),ve.length=0):ve.push(te)}function Ox(U,te,ve,Ke){for(var Nt=0,_t=0;_t>2],ze=ie[te+4>>2];te+=8;for(var zt=0;zt>2]=Nt,0}function zc(U){var te=t[\"_\"+U];return te}function am(U,te,ve,Ke,Nt){var _t={string:hr=>{var qa=0;if(hr!=null&&hr!==0){var wm=(hr.length<<2)+1;qa=qc(wm),j(hr,qa,wm)}return qa},array:hr=>{var qa=qc(hr.length);return $x(hr,qa),qa}};function He(hr){return te===\"string\"?q(hr):te===\"boolean\"?Boolean(hr):hr}var ze=zc(U),zt=[],Qr=0;if(Ke)for(var ea=0;eaHe===\"number\"||He===\"boolean\"),_t=te!==\"string\";return _t&&Nt&&!Ke?zc(U):function(){return am(U,te,ve,arguments,Ke)}}var Wc={abort:nm,emscripten_get_heap_max:dr,emscripten_memcpy_big:sm,emscripten_resize_heap:Ax,fd_close:YS,fd_seek:Dx,fd_write:Ox},QS=Bc(),um=t.___wasm_call_ctors=function(){return(um=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Mx=t._init=function(){return(Mx=t._init=t.asm.init).apply(null,arguments)},Fe=t._init_with_threads_count=function(){return(Fe=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Uc=t._get_threads_count=function(){return(Uc=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Lx=t._register_tensor=function(){return(Lx=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},ZS=t._dispose_data=function(){return(ZS=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},JS=t._dispose=function(){return(JS=t._dispose=t.asm.dispose).apply(null,arguments)},Bx=t._Abs=function(){return(Bx=t._Abs=t.asm.Abs).apply(null,arguments)},pm=t._Add=function(){return(pm=t._Add=t.asm.Add).apply(null,arguments)},Yu=t._AddN=function(){return(Yu=t._AddN=t.asm.AddN).apply(null,arguments)},Vx=t._All=function(){return(Vx=t._All=t.asm.All).apply(null,arguments)},zx=t._Any=function(){return(zx=t._Any=t.asm.Any).apply(null,arguments)},e0=t._ArgMax=function(){return(e0=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Wx=t._AvgPool=function(){return(Wx=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Ux=t._BatchMatMul=function(){return(Ux=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Gx=t._Ceil=function(){return(Gx=t._Ceil=t.asm.Ceil).apply(null,arguments)},Hx=t._ClipByValue=function(){return(Hx=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},cm=t._Conv2D=function(){return(cm=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},lm=t._Conv2DBackpropInput=function(){return(lm=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},qx=t._Cos=function(){return(qx=t._Cos=t.asm.Cos).apply(null,arguments)},Kx=t._Cosh=function(){return(Kx=t._Cosh=t.asm.Cosh).apply(null,arguments)},jx=t._CropAndResize=function(){return(jx=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Gc=t._Cumprod=function(){return(Gc=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Xx=t._Cumsum=function(){return(Xx=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Yx=t._DepthToSpace=function(){return(Yx=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Qx=t._DepthwiseConv2dNative=function(){return(Qx=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Pi=t._Elu=function(){return(Pi=t._Elu=t.asm.Elu).apply(null,arguments)},Zx=t._Equal=function(){return(Zx=t._Equal=t.asm.Equal).apply(null,arguments)},Jx=t._Exp=function(){return(Jx=t._Exp=t.asm.Exp).apply(null,arguments)},mm=t._FlipLeftRight=function(){return(mm=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ey=t._Floor=function(){return(ey=t._Floor=t.asm.Floor).apply(null,arguments)},Qu=t._FloorDiv=function(){return(Qu=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ty=t._FusedBatchNorm=function(){return(ty=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},ry=t._FusedConv2D=function(){return(ry=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Ha=t._FusedDepthwiseConv2D=function(){return(Ha=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},Hc=t._Gather=function(){return(Hc=t._Gather=t.asm.Gather).apply(null,arguments)},oy=t._GatherNd=function(){return(oy=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},ny=t._Greater=function(){return(ny=t._Greater=t.asm.Greater).apply(null,arguments)},sy=t._GreaterEqual=function(){return(sy=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},ay=t._LeakyRelu=function(){return(ay=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},fm=t._Less=function(){return(fm=t._Less=t.asm.Less).apply(null,arguments)},dm=t._LessEqual=function(){return(dm=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},iy=t._Log=function(){return(iy=t._Log=t.asm.Log).apply(null,arguments)},uy=t._LogicalAnd=function(){return(uy=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},hm=t._LogicalNot=function(){return(hm=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},gm=t._LogicalOr=function(){return(gm=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},py=t._LogicalXor=function(){return(py=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},cy=t._Max=function(){return(cy=t._Max=t.asm.Max).apply(null,arguments)},ly=t._MaxPool=function(){return(ly=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},xm=t._Maximum=function(){return(xm=t._Maximum=t.asm.Maximum).apply(null,arguments)},t0=t._Mean=function(){return(t0=t._Mean=t.asm.Mean).apply(null,arguments)},my=t._Min=function(){return(my=t._Min=t.asm.Min).apply(null,arguments)},fy=t._Minimum=function(){return(fy=t._Minimum=t.asm.Minimum).apply(null,arguments)},dy=t._MirrorPad=function(){return(dy=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},hy=t._Multiply=function(){return(hy=t._Multiply=t.asm.Multiply).apply(null,arguments)},gy=t._Neg=function(){return(gy=t._Neg=t.asm.Neg).apply(null,arguments)},xy=t._NonMaxSuppressionV3=function(){return(xy=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},yy=t._NonMaxSuppressionV4=function(){return(yy=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},by=t._NonMaxSuppressionV5=function(){return(by=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},Cy=t._NotEqual=function(){return(Cy=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Iy=t._OneHot=function(){return(Iy=t._OneHot=t.asm.OneHot).apply(null,arguments)},wy=t._PadV2=function(){return(wy=t._PadV2=t.asm.PadV2).apply(null,arguments)},Sy=t._Pow=function(){return(Sy=t._Pow=t.asm.Pow).apply(null,arguments)},vy=t._Prelu=function(){return(vy=t._Prelu=t.asm.Prelu).apply(null,arguments)},ky=t._Prod=function(){return(ky=t._Prod=t.asm.Prod).apply(null,arguments)},Ty=t._RealDiv=function(){return(Ty=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},Ny=t._Relu=function(){return(Ny=t._Relu=t.asm.Relu).apply(null,arguments)},_y=t._Relu6=function(){return(_y=t._Relu6=t.asm.Relu6).apply(null,arguments)},Ey=t._ResizeBilinear=function(){return(Ey=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},$y=t._ResizeNearestNeighbor=function(){return($y=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},Ry=t._Reverse=function(){return(Ry=t._Reverse=t.asm.Reverse).apply(null,arguments)},Ay=t._RotateWithOffset=function(){return(Ay=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},Fy=t._Round=function(){return(Fy=t._Round=t.asm.Round).apply(null,arguments)},Dy=t._Rsqrt=function(){return(Dy=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},Py=t._ScatterNd=function(){return(Py=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},Oy=t._SelectV2=function(){return(Oy=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},My=t._Sigmoid=function(){return(My=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},Ly=t._Sin=function(){return(Ly=t._Sin=t.asm.Sin).apply(null,arguments)},By=t._Softmax=function(){return(By=t._Softmax=t.asm.Softmax).apply(null,arguments)},Vy=t._SparseFillEmptyRows=function(){return(Vy=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},zy=t._SparseReshape=function(){return(zy=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},Wy=t._SparseSegmentReduction=function(){return(Wy=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},Uy=t._Sqrt=function(){return(Uy=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},Gy=t._Square=function(){return(Gy=t._Square=t.asm.Square).apply(null,arguments)},Hy=t._SquaredDifference=function(){return(Hy=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},qy=t._Step=function(){return(qy=t._Step=t.asm.Step).apply(null,arguments)},Ky=t._StridedSlice=function(){return(Ky=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},jy=t._Sub=function(){return(jy=t._Sub=t.asm.Sub).apply(null,arguments)},Xy=t._Sum=function(){return(Xy=t._Sum=t.asm.Sum).apply(null,arguments)},Yy=t._Tan=function(){return(Yy=t._Tan=t.asm.Tan).apply(null,arguments)},Qy=t._Tanh=function(){return(Qy=t._Tanh=t.asm.Tanh).apply(null,arguments)},Zy=t._Tile=function(){return(Zy=t._Tile=t.asm.Tile).apply(null,arguments)},Jy=t._TopK=function(){return(Jy=t._TopK=t.asm.TopK).apply(null,arguments)},eb=t._Transform=function(){return(eb=t._Transform=t.asm.Transform).apply(null,arguments)},tb=t._Transpose=function(){return(tb=t._Transpose=t.asm.Transpose).apply(null,arguments)},rb=t.__FusedMatMul=function(){return(rb=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},ob=t._malloc=function(){return(ob=t._malloc=t.asm.malloc).apply(null,arguments)},nb=t._free=function(){return(nb=t._free=t.asm.free).apply(null,arguments)},sb=t.___errno_location=function(){return(sb=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},ym=t.stackSave=function(){return(ym=t.stackSave=t.asm.stackSave).apply(null,arguments)},bm=t.stackRestore=function(){return(bm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},qc=t.stackAlloc=function(){return(qc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},ab=t.dynCall_iijjiiii=function(){return(ab=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},ib=t.dynCall_jiji=function(){return(ib=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=im;var Zu;rr=function U(){Zu||Cm(),Zu||(rr=U)};function Cm(U){if(U=U||i,Tt>0||(dt(),Tt>0))return;function te(){Zu||(Zu=!0,t.calledRun=!0,!M&&(It(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Fr()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),te()},1)):te()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Cm();var Ju;s&&(Ju={uncaughtException:process.listeners(\"uncaughtException\").filter(function(U){return!s.uncaughtException.indexOf(U)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(U){return!s.unhandledRejection.indexOf(U)>-1})});var ep;if(typeof e!=\"undefined\")ep=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")ep=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Ju){var ub=ep._dispose;ep._dispose=function(){ub(),Ju.uncaughtException.forEach(function(U){process.removeListener(\"uncaughtException\",U)}),Ju.unhandledRejection.forEach(function(U){process.removeListener(\"unhandledRejection\",U)})}}return e.ready}})();typeof Dg==\"object\"&&typeof tS==\"object\"?tS.exports=eS:typeof define==\"function\"&&define.amd?define([],function(){return eS}):typeof Dg==\"object\"&&(Dg.WasmBackendModule=eS)});var rn=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},Jr=class{refCount(e){return Pr(\"refCount\")}incRef(e){return Pr(\"incRef\")}timerAvailable(){return!0}time(e){return Pr(\"time\")}read(e){return Pr(\"read\")}readSync(e){return Pr(\"readSync\")}readToGPU(e,t){return Pr(\"readToGPU\")}numDataIds(){return Pr(\"numDataIds\")}disposeData(e,t){return Pr(\"disposeData\")}write(e,t,o){return Pr(\"write\")}move(e,t,o,n,s){return Pr(\"move\")}createTensorFromTexture(e,t,o){return Pr(\"createTensorFromTexture\")}memory(){return Pr(\"memory\")}floatPrecision(){return Pr(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Pr(\"dispose\")}};function Pr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function c0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,$m(r,e,t)}function oz(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,$m(r,t,o),$m(e,t,o)}function op(r,e,t){return Math.max(r,Math.min(e,t))}function nz(r){return r%2===0?r:r+1}function $m(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function sz(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function eo(r){$(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function on(r,e=[],t=!1){if(e==null&&(e=[]),Array.isArray(r)||Ut(r)&&!t)for(let o=0;o0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function fz(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Ka(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),$(r.every(o=>ra(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function db(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Ka(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function hb(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else throw new Error(`Unknown data type ${r}`);return t}function gb(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else if(r===\"string\")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function xb(r,e){for(let t=0;te+=t.length),e}function nn(r){return typeof r==\"string\"||r instanceof String}function l0(r){return typeof r==\"boolean\"}function m0(r){return typeof r==\"number\"}function np(r){return Array.isArray(r)?np(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":m0(r)?\"float32\":nn(r)?\"string\":l0(r)?\"bool\":\"float32\"}function fs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function sp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function f0(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?\" for a complex tensor\":\"\"}.`);return f0(0,r,e,t)}function jc(r,e){let t=ap(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Oi(r,new Float32Array(t));if(e===\"int32\")return Oi(r,new Int32Array(t));if(e===\"bool\")return Oi(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Xc(r){r.forEach(e=>{$(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function gz(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=Iz(n,s)})}};function bz(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(Cz(e,o[0],o[1]),o.join(\"=\"))),e}function Cz(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function Iz(r,e){if(e=e.toLowerCase(),e===\"true\"||e===\"false\")return e===\"true\";if(`${+e}`===e)return+e;throw new Error(`Could not parse value flag value ${e} for flag ${r}.`)}function P(){return Cb}var Cb=null;function h0(r){Cb=r}var Ib;function wb(){if(Ib==null){let r;if(typeof window!=\"undefined\")r=window;else if(typeof global!=\"undefined\")r=global;else if(typeof process!=\"undefined\")r=process;else if(typeof self!=\"undefined\")r=self;else throw new Error(\"Could not find a global object\");Ib=r}return Ib}function wz(){let r=wb();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function Zc(r,e){let t=wz();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var sn=\"Abs\",Li=\"Acos\",Bi=\"Acosh\",_r=\"Add\",an=\"AddN\",oa=\"All\",na=\"Any\",un=\"ArgMax\",ja=\"ArgMin\",Vi=\"Asin\",zi=\"Asinh\",Wi=\"Atan\",Ui=\"Atanh\",sa=\"Atan2\",pn=\"AvgPool\",Am=\"AvgPoolGrad\",ip=\"AvgPool3D\",Fm=\"AvgPool3DGrad\",cn=\"BatchMatMul\",hs=\"BatchToSpaceND\",up=\"Bincount\",Tne=\"BroadcastTo\",pp=\"BroadcastArgs\",to=\"Cast\",ro=\"Ceil\",Ro=\"ClipByValue\",aa=\"Complex\",cp=\"ComplexAbs\",gs=\"Concat\",ln=\"Conv2D\",lp=\"Conv2DBackpropFilter\",mn=\"Conv2DBackpropInput\",mp=\"Conv3D\",Dm=\"Conv3DBackpropFilterV2\",fp=\"Conv3DBackpropInputV2\",fn=\"Cos\",dn=\"Cosh\",hn=\"Cumprod\",gn=\"Cumsum\",xn=\"CropAndResize\",dp=\"DenseBincount\",yn=\"DepthToSpace\",bn=\"DepthwiseConv2dNative\",hp=\"DepthwiseConv2dNativeBackpropFilter\",gp=\"DepthwiseConv2dNativeBackpropInput\",xp=\"Diag\",yp=\"Dilation2D\",Sb=\"Dilation2DBackpropInput\",vb=\"Dilation2DBackpropFilter\",Cn=\"RealDiv\",Xa=\"Einsum\",In=\"Elu\",Pm=\"EluGrad\",Gi=\"Erf\",oo=\"Equal\",no=\"Exp\",xs=\"ExpandDims\",wn=\"Expm1\",bp=\"FFT\",ys=\"Fill\",Sn=\"FlipLeftRight\",so=\"Floor\",vn=\"FloorDiv\",kn=\"FusedBatchNorm\",bs=\"GatherV2\",Tn=\"GatherNd\",ao=\"Greater\",io=\"GreaterEqual\",uo=\"Identity\",Cp=\"IFFT\",Ya=\"Imag\",Hi=\"IsFinite\",qi=\"IsInf\",ia=\"IsNan\",Nn=\"LeakyRelu\",po=\"Less\",co=\"LessEqual\",Ip=\"LinSpace\",lo=\"Log\",Ki=\"Log1p\",_n=\"LogicalAnd\",En=\"LogicalNot\",ua=\"LogicalOr\",g0=\"LogicalXor\",Nne=\"LogSoftmax\",_ne=\"LowerBound\",wp=\"LRN\",Om=\"LRNGrad\",$n=\"Max\",mo=\"Maximum\",Rn=\"MaxPool\",Mm=\"MaxPoolGrad\",Sp=\"MaxPool3D\",Lm=\"MaxPool3DGrad\",vp=\"MaxPoolWithArgmax\",An=\"Mean\",Fn=\"Min\",fo=\"Minimum\",Dn=\"MirrorPad\",ji=\"Mod\",kp=\"Multinomial\",ho=\"Multiply\",Pn=\"Neg\",go=\"NotEqual\",On=\"NonMaxSuppressionV3\",pa=\"NonMaxSuppressionV4\",Mn=\"NonMaxSuppressionV5\",Cs=\"OnesLike\",ca=\"OneHot\",Is=\"Pack\",Ln=\"PadV2\",Ene=\"Pool\",Bn=\"Pow\",Vn=\"Prelu\",Ao=\"Prod\",Tp=\"RaggedGather\",Np=\"RaggedRange\",_p=\"RaggedTensorToTensor\",ws=\"Range\",la=\"Real\",ma=\"Reciprocal\",zn=\"Relu\",Ss=\"Reshape\",Wn=\"ResizeNearestNeighbor\",Bm=\"ResizeNearestNeighborGrad\",Un=\"ResizeBilinear\",Vm=\"ResizeBilinearGrad\",Gn=\"Relu6\",fa=\"Reverse\",da=\"Round\",xo=\"Rsqrt\",Hn=\"ScatterNd\",Ep=\"SearchSorted\",vs=\"Select\",Xi=\"Selu\",qn=\"Slice\",Kn=\"Sin\",ha=\"Sinh\",Yi=\"Sign\",yo=\"Sigmoid\",Qi=\"Softplus\",bo=\"Sqrt\",jn=\"Sum\",ks=\"SpaceToBatchND\",Ts=\"SplitV\",Xn=\"Softmax\",Qa=\"SparseFillEmptyRows\",ga=\"SparseReshape\",Za=\"SparseSegmentMean\",Ja=\"SparseSegmentSum\",ei=\"SparseToDense\",Co=\"SquaredDifference\",ti=\"Square\",Yn=\"StridedSlice\",Ns=\"StringNGrams\",ri=\"StringSplit\",oi=\"StringToHashBucketFast\",Io=\"Sub\",xa=\"Tan\",Qn=\"Tanh\",wo=\"Tile\",Zn=\"TopK\",Jn=\"Transform\",Mr=\"Transpose\",$p=\"Unique\",_s=\"Unpack\",Rp=\"UnsortedSegmentSum\",$ne=\"UpperBound\",Es=\"ZerosLike\",$s=\"Step\",Zi=\"FromPixels\",es=\"RotateWithOffset\",Fo=\"_FusedMatMul\",Do=\"FusedConv2D\",Po=\"FusedDepthwiseConv2D\";function Rs(...r){P().getBool(\"IS_TEST\")||P().getBool(\"PROD\")||console.warn(...r)}function Sz(...r){P().getBool(\"IS_TEST\")||P().getBool(\"PROD\")||console.log(...r)}var Ap=Zc(\"kernelRegistry\",()=>new Map),Jc=Zc(\"gradRegistry\",()=>new Map);function el(r,e){let t=Tb(r,e);return Ap.get(t)}function kb(r){return Jc.get(r)}function zm(r){let e=Ap.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&t.push(a)}return t}function ya(r){let{kernelName:e,backendName:t}=r,o=Tb(e,t);Ap.has(o)&&Rs(`The kernel '${e}' for backend '${t}' is already registered`),Ap.set(o,r)}function Pne(r){let{kernelName:e}=r;Jc.has(e)&&P().getBool(\"DEBUG\")&&Rs(`Overriding the gradient for '${e}'`),Jc.set(e,r)}function One(r,e){let t=Tb(r,e);if(!Ap.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);Ap.delete(t)}function Mne(r){if(!Jc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Jc.delete(r)}function Lne(r,e){zm(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ya(n)})}function Tb(r,e){return`${e}_${r}`}var x={};Be(x,{arraysEqual:()=>Or,assert:()=>$,assertNonNegativeIntegerDimensions:()=>Xc,assertNonNull:()=>eo,assertShapesMatch:()=>ht,bytesFromStringArray:()=>bb,bytesPerElement:()=>Rm,checkConversionForErrors:()=>xb,clamp:()=>op,computeStrides:()=>ds,createScalarValue:()=>$z,createShuffledIndices:()=>lz,decodeString:()=>Op,distSquared:()=>iz,encodeString:()=>si,fetch:()=>Az,fingerPrint64:()=>Ez,flatten:()=>on,getArrayFromDType:()=>gb,getTypedArrayFromDType:()=>hb,hasEncodingLoss:()=>dz,hexToLong:()=>tl,indexToLoc:()=>xz,inferDtype:()=>np,inferFromImplicitShape:()=>fz,isBoolean:()=>l0,isFunction:()=>fs,isInt:()=>ra,isNumber:()=>m0,isPromise:()=>Yc,isScalarShape:()=>uz,isString:()=>nn,isTypedArray:()=>Ut,isValidDtype:()=>yb,locToIndex:()=>gz,makeOnesTypedArray:()=>jc,makeZerosNestedTypedArray:()=>hz,makeZerosTypedArray:()=>ap,nearestDivisor:()=>sp,nearestLargerEven:()=>nz,now:()=>ou,parseAxisParam:()=>Ka,randUniform:()=>az,repeatedTry:()=>mz,rightPad:()=>Mi,shuffle:()=>c0,shuffleCombo:()=>oz,sizeFromShape:()=>Ve,sizeToSquarishShape:()=>cz,squeezeShape:()=>db,sum:()=>sz,swap:()=>$m,tanh:()=>pz,toNestedArray:()=>Oi,toTypedArray:()=>Pp});var $b=rp(_0());var ru=$b.default||$b;function tl(r){return ru.fromString(r,!0,16)}var $0=tl(\"c3a5c85c97cb3127\"),tu=tl(\"b492b66fbe98f273\"),gr=tl(\"9ae16a3b2f90404f\");function Eb(r){return r.xor(r.shru(47))}function R0(r,e,t){let o=r.slice(e,e+t);return ru.fromBytes(Array.from(o),!0,!0)}function yt(r,e){return R0(r,e,8)}function E0(r,e){return R0(r,e,4)}function Xt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function ni(r,e,t=tl(\"9ddfea08eb382d69\")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function kz(r,e,t,o,n,s){n=n.add(r),s=Xt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Xt(n,44)),[n.add(o),s.add(a)]}function Um(r,e,t,o){return kz(yt(r,e),yt(r,e+8),yt(r,e+16),yt(r,e+24),t,o)}function Tz(r,e=r.length){if(e>=8){let t=gr.add(e*2),o=yt(r,0).add(gr),n=yt(r,e-8),s=Xt(n,37).mul(t).add(o),a=Xt(o,25).add(n).mul(t);return ni(s,a,t)}if(e>=4){let t=gr.add(e*2),o=E0(r,0);return ni(o.shl(3).add(e),E0(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return Eb(gr.mul(s).xor($0.mul(a))).mul(gr)}return gr}function Nz(r,e=r.length){let t=gr.add(e*2),o=yt(r,0).mul(tu),n=yt(r,8),s=yt(r,e-8).mul(t),a=yt(r,e-16).mul(gr);return ni(Xt(o.add(n),43).add(Xt(s,30)).add(a),o.add(Xt(n.add(gr),18)).add(s),t)}function _z(r,e=r.length){let t=gr.add(e*2),o=yt(r,0).mul(gr),n=yt(r,8),s=yt(r,e-8).mul(t),a=yt(r,e-16).mul(gr),i=Xt(o.add(n),43).add(Xt(s,30)).add(a),p=ni(i,o.add(Xt(n.add(gr),18)).add(s),t),u=yt(r,16).mul(t),c=yt(r,24),l=i.add(yt(r,e-32)).mul(t),m=p.add(yt(r,e-24)).mul(t);return ni(Xt(u.add(c),43).add(Xt(l,30)).add(m),u.add(Xt(c.add(o),18)).add(l),t)}function Ez(r,e=r.length){let t=ru.fromNumber(81,!0);if(e<=32)return e<=16?Tz(r,e):Nz(r,e);if(e<=64)return _z(r,e);let o=t,n=t.mul(tu).add(113),s=Eb(n.mul(gr).add(113)).mul(gr),a=[ru.UZERO,ru.UZERO],i=[ru.UZERO,ru.UZERO];o=o.mul(gr).add(yt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Xt(o.add(n).add(a[0]).add(yt(r,p+8)),37).mul(tu),n=Xt(n.add(a[1]).add(yt(r,p+48)),42).mul(tu),o=o.xor(i[1]),n=n.add(a[0]).add(yt(r,p+40)),s=Xt(s.add(i[0]),33).mul(tu),a=Um(r,p,a[1].mul(tu),o.add(i[0])),i=Um(r,p+32,s.add(i[1]),n.add(yt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=tu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Xt(o.add(n).add(a[0]).add(yt(r,p+8)),37).mul(l),n=Xt(n.add(a[1]).add(yt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(yt(r,p+40))),s=Xt(s.add(i[0]),33).mul(l),a=Um(r,p,a[1].mul(l),o.add(i[0])),i=Um(r,p+32,s.add(i[1]),n.add(yt(r,p+16))),[s,o]=[o,s],ni(ni(a[0],i[0],l).add(Eb(n).mul($0)).add(s),ni(a[1],i[1],l).add(o),l)}function $z(r,e){return e===\"string\"?si(r):Pp([r],e)}function Rz(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function Pp(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=on(r)),P().getBool(\"DEBUG\")&&xb(r,e),Rz(r,e))return r;if(e==null||e===\"float32\"||e===\"complex64\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=ou();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:ou()-i})}if(P().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{Fz(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function Fz(r,e,t){if(e!==\"float32\")return!1;for(let o=0;o0?h:\"\"} `}}console.log(`%c${p}\t%c${i}\t%c${u}D ${l}\t%c${c}\t%c${m}\t%c${a}`,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")}};function A0(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),f=!0,n[u.id]=!0;break}if(f)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!==\"float32\")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!Or(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var D0=20,rl=3,Ab=7;function P0(r,e,t,o){let n=ds(e),s=Dz(r,e,t,n),a=e.length,i=Hm(r,e,t,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function Dz(r,e,t,o){let n=Ve(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t===\"complex64\"?nl(r):r;if(i>1)for(let u=0;uD0){let g=rl*a,y=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-rl)*a,i*a));return t===\"complex64\"&&(y=nl(y),b=nl(b)),[\"[\"+y.map((C,w)=>ol(C,n[w],t)).join(\", \")+\", ..., \"+b.map((C,w)=>ol(C,n[i-rl+w],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?nl(r):Array.from(r)).map((g,y)=>ol(g,n[y],t)).join(\", \")+\"]\"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>D0){for(let h=0;h`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t===\"complex64\")throw new Error(\"complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).\");this.values=o||gb(t,this.size),this.strides=ds(e)}set(e,...t){t.length===0&&(t=[0]),$(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nOp(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return e}dataToGPU(e){return this.throwIfDisposed(),rs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=rs().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>Op(t))}catch(t){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}return e}async bytes(){this.throwIfDisposed();let e=await rs().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(rs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return Mp.print(this,e)}clone(){return this.throwIfDisposed(),Mp.clone(this)}toString(e=!1){let t=this.dataSync();return P0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Mp.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),rs().makeVariable(this,e,t,o)}};Object.defineProperty(ut,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function Oz(){return Zc(\"Tensor\",()=>ut)}Oz();var ba=class extends ut{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Or(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);rs().disposeTensor(this),this.dataId=e.dataId,rs().incRef(this,null)}dispose(){rs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ba,Symbol.hasInstance,{value:r=>r instanceof ut&&r.assign!=null&&r.assign instanceof Function});var z0={};Be(z0,{assertTypesMatch:()=>Lb,getTensorsInContainer:()=>sl,isTensorInList:()=>Lz,makeTypesMatch:()=>Re});var Fb;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(Fb||(Fb={}));var Db;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(Db||(Db={}));var Pb;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(Pb||(Pb={}));var Ob;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(Ob||(Ob={}));var Mb;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Mb||(Mb={}));var Mz={float32:Ob,int32:Db,bool:Pb,complex64:Mb};function ct(r,e){if(r===\"string\"||e===\"string\"){if(r===\"string\"&&e===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${e}`)}return Mz[r][e]}function Ca(r){return ct(r,\"int32\")}function Re(r,e){if(r.dtype===e.dtype)return[r,e];let t=ct(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Lb(r,e){$(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function Lz(r,e){return e.some(t=>t.id===r.id)}function sl(r){let e=[];return V0(r,e,new Set),e}function V0(r,e,t){if(r==null)return;if(r instanceof ut){e.push(r);return}if(!Bz(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),V0(s,e,t))}}function Bz(r){return Array.isArray(r)||typeof r==\"object\"}function Bb(r){return r.kernelName!=null}var qm=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},ai=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new qm}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){zm(e).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let o=t.factory();if(o&&!(o instanceof Jr)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return ai.nextTensorId++}nextVariableId(){return ai.nextVariableId++}clone(e){let t=N.runKernel(uo,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return N.runKernel(to,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(el(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype===\"complex64\"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Bb(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Bb(e)){let{kernelName:d,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let y=el(d,this.backendName);$(y!=null,()=>`Cannot find registered kernel '${d}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=y.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,b,C);let w=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(d,h,w);o=this.saveTensorsForBackwardMode(k)}return w}}else{let{forwardFunc:d}=e,h=g=>{!n||(o=g.map(y=>this.keep(this.clone(y))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>d(this.backend,h));let y=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:c,attrs:l}=e,m=Bb(e)?null:e.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool(\"DEBUG\")&&!this.state.profiling?t=i():(f=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(f),t=f.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(d=>c[d]!=null?c[d].shape:null),outputShapes:t.map(d=>d.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=kb(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(t),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=e;o===\"string\"&&nn(e[0])&&(s=e.map(p=>si(p)));let a=n.write(s,t,o),i=new ut(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=bb(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||\"float32\";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new ut(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ba(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype===\"string\"&&this.state.numStringTensors++;let o=0;e.dtype!==\"complex64\"&&e.dtype!==\"string\"&&(o=e.size*Rm(e.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:o})),e instanceof ba||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype===\"string\"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!==\"complex64\"&&e.dtype!==\"string\"){let o=e.size*Rm(e.dtype);this.state.numBytes-=o}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push(\"Memory usage by string tensors is approximate (2 bytes per character)\")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,o=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=kb(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],f=ap(m.size,m.dtype);return this.makeTensor(f,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=sl(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if($(t.length>0,()=>\"gradients() received an empty list of xs.\"),o!=null&&o.dtype!==\"float32\")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy(\"forward\",e));$(s instanceof ut,()=>\"The result y returned by f() must be a tensor.\");let a=A0(this.state.activeTape,t,s);if(!n&&a.length===0&&t.length>0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.\");return this.tidy(\"backward\",()=>{let i={};i[s.id]=o==null?Vz(s.shape):o,F0(i,a,u=>this.tidy(u),zz);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return $(fs(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{$(t.every(i=>i instanceof ut),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),$(o.value instanceof ut,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),$(fs(o.gradFunc),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.\"),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];$(c.length===t.length,()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).\"),$(c.every(m=>m instanceof ut),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.\");let l={};return c.forEach((m,f)=>{l[f]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=ou(),o=await this.backend.time(e);return o.wallMs=ou()-t,o}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new qm;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};ai.nextTensorId=0;ai.nextVariableId=0;function Vz(r){let e=jc(Ve(r),\"float32\");return N.makeTensor(e,r,\"float32\")}function Vb(){let r=wb();if(r._tfengine==null){let e=new Qc(r);r._tfengine=new ai(e)}return h0(r._tfengine.ENV),M0(()=>r._tfengine),r._tfengine}var N=Vb();function zz(r,e){let t={a:r,b:e};return N.runKernel(_r,t)}var ii={};Be(ii,{isBrowser:()=>Wb,isMobile:()=>Gz,mockIsMobile:()=>Uz});function Wz(){return typeof navigator!=\"undefined\"&&navigator!=null}var zb;function Uz(r){zb=r}function Gz(r){if(zb!==void 0)return zb;if(r||Wz()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let e=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}return/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(e.substr(0,4))}return!1}function Wb(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var Vr=P();Vr.registerFlag(\"DEBUG\",()=>!1,r=>{r&&console.warn(\"Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.\")});Vr.registerFlag(\"IS_BROWSER\",()=>Wb());Vr.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");Vr.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Vr.registerFlag(\"PROD\",()=>!1);Vr.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>Vr.getBool(\"DEBUG\"));Vr.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);Vr.registerFlag(\"IS_TEST\",()=>!1);Vr.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>!0);Vr.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);Vr.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);Vr.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);Vr.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function or(r,e){let t=r;if(Ut(r))return e===\"string\"?[]:[r.length];if(typeof r==\"object\"&&\"texture\"in r){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Ut(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&P().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&U0(r,o,[]),o}function U0(r,e,t){if(t=t||[],!Array.isArray(r)&&!Ut(r)){$(e.length===0,()=>`Element arr[${t.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}$(e.length>0,()=>`Element arr[${t.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===e[0],()=>`Element arr[${t.join(\"][\")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),W0(o,n,e,t),r==null||!Ut(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\"){let p=r==null?\"null\":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=or(r,n);!Ut(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?Pp(r,n):on(r,[],!0);return N.makeTensor(i,s,n)}function Ia(r,e,t,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Ub=\"__op\";function T(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith(\"_\")&&(t=t.substring(0,t.length-1)),t=t+Ub;let n=(...s)=>{N.startScope(t);try{let a=o(...s);return Yc(a)&&console.error(\"Cannot return a Promise inside of tidy.\"),N.endScope(a),a}catch(a){throw N.endScope(null),a}};return Object.defineProperty(n,\"name\",{value:t,configurable:!0}),n}function Hz(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");ht(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return N.runKernel(aa,n)}var Er=T({complex_:Hz});function xr(r,e,t,o){if(o==null&&(o=np(r)),o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(typeof r==\"object\"&&\"texture\"in r){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return r.channels=r.channels||\"RGBA\",N.backend.createTensorFromTexture(r,e||t,o)}if(!Ut(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\")throw new Error(\"values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray\");if(e!=null){Xc(e);let n=Ve(e),s=Ve(t);$(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Ut(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?Pp(r,o):on(r,[],!0),N.makeTensor(r,e,o)}function nr(r,e,t){let o=or(r,t);return xr(r,e,o,t)}var al={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Km=4;async function H0(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),f=m.reduce((g,y)=>g+y.length,0)+Km*m.length,d=new Uint8Array(f),h=0;for(let g=0;g{if(e+=s.byteLength,t.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Gb=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function G0(r){return Gb?Buffer.byteLength(r):new Blob([r]).size}function q0(r){if(Gb)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{e+=n.byteLength});let t=new Uint8Array(e),o=0;return r.forEach(n=>{t.set(new Uint8Array(n),o),o+=n.byteLength}),t.buffer}function Hb(r){let e=\"/\";for(r=r.trim();r.endsWith(e);)r=r.slice(0,r.length-1);let t=r.split(e);return t[t.length-1]}function Xm(r,e){let t={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:e};return r.signature!=null&&(t.signature=r.signature),r.userDefinedMetadata!=null&&(t.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(t.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(t.initializerSignature=r.initializerSignature),r.trainingConfig!=null&&(t.trainingConfig=r.trainingConfig),t}function qb(r,e,t){let o={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(o.trainingConfig=r.trainingConfig),r.weightsManifest!=null){if(!e)throw new Error(\"modelJSON has weightsManifest but weightSpecs is null\");if(!t)throw new Error(\"modelJSON has weightsManifest but weightData is null\");o.weightSpecs=e,o.weightData=t}return r.signature!=null&&(o.signature=r.signature),r.userDefinedMetadata!=null&&(o.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(o.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(o.initializerSignature=r.initializerSignature),o}async function Bp(r,e){let t,o;return r.weightsManifest!=null&&([t,o]=await e(r.weightsManifest)),qb(r,t,o)}function As(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error(\"Expected JSON model topology, received ArrayBuffer.\");return{dateSaved:new Date,modelTopologyType:\"JSON\",modelTopologyBytes:r.modelTopology==null?0:G0(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:G0(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function Ym(r){let e=[];for(let t of r)e.push(...t.weights);return e}function Kz(){let r=t=>{let o=t<<13,n=0;for(;(o&8388608)===0;)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function jz(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function Xz(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function Yz(){let r=Kz(),e=jz(),t=Xz();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var mt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return mt.instance==null&&(mt.instance=new mt),mt.instance}static registerSaveRouter(e){mt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){mt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return mt.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return mt.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?mt.getInstance().loadRouters:mt.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},j0=r=>mt.registerSaveRouter(r),X0=r=>mt.registerLoadRouter(r),Y0=r=>mt.getSaveHandlers(r),Q0=(r,e)=>mt.getLoadHandlers(r,e);var Kb=\"tensorflowjs\",jb=1,nu=\"models_store\",ui=\"model_info_store\";function Z0(){if(!P().getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");let r=typeof window==\"undefined\"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function Xb(r){let e=r.result;e.createObjectStore(nu,{keyPath:\"modelPath\"}),e.createObjectStore(ui,{keyPath:\"modelPath\"})}var Fs=class{constructor(e){if(this.indexedDB=Z0(),e==null||!e)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((o,n)=>{let s=this.indexedDB.open(Kb,jb);s.onupgradeneeded=()=>Xb(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(nu,\"readonly\"),u=i.objectStore(nu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{let i=As(t),p=a.transaction(ui,\"readwrite\"),u=p.objectStore(ui),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),l;c.onsuccess=()=>{l=a.transaction(nu,\"readwrite\");let f=l.objectStore(nu).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});f.onsuccess=()=>o({modelArtifactsInfo:i}),f.onerror=d=>{u=p.objectStore(ui);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(f.error)),h.onerror=g=>(a.close(),n(f.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Fs.URL_SCHEME=\"indexeddb://\";var J0=r=>P().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Fs.URL_SCHEME)?Qz(r.slice(Fs.URL_SCHEME.length)):null;mt.registerSaveRouter(J0);mt.registerLoadRouter(J0);function Qz(r){return new Fs(r)}function Zz(r){return r.startsWith(Fs.URL_SCHEME)?r.slice(Fs.URL_SCHEME.length):r}var Qm=class{constructor(){this.indexedDB=Z0()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Kb,jb);o.onupgradeneeded=()=>Xb(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ui,\"readonly\"),i=s.objectStore(ui).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=Zz(e),new Promise((t,o)=>{let n=this.indexedDB.open(Kb,jb);n.onupgradeneeded=()=>Xb(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ui,\"readwrite\"),i=a.objectStore(ui),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(nu,\"readwrite\");let f=u.objectStore(nu).delete(e);f.onsuccess=()=>t(p.result.modelArtifactsInfo),f.onerror=d=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var wa=\"/\",Vp=\"tensorflowjs_models\",ev=\"info\",Jz=\"model_topology\",eW=\"weight_specs\",tW=\"weight_data\",rW=\"model_metadata\";function tv(r){return{info:[Vp,r,ev].join(wa),topology:[Vp,r,Jz].join(wa),weightSpecs:[Vp,r,eW].join(wa),weightData:[Vp,r,tW].join(wa),modelMetadata:[Vp,r,rW].join(wa)}}function rv(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function oW(r){let e=r.split(wa);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(wa)}function nW(r){return r.startsWith(Ds.URL_SCHEME)?r.slice(Ds.URL_SCHEME.length):r}var Ds=class{constructor(e){if(!P().getBool(\"IS_BROWSER\")||typeof window==\"undefined\"||typeof window.localStorage==\"undefined\")throw new Error(\"The current environment does not support local storage.\");if(this.LS=window.localStorage,e==null||!e)throw new Error(\"For local storage, modelPath must not be null, undefined or empty.\");this.modelPath=e,this.keys=tv(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");{let t=JSON.stringify(e.modelTopology),o=JSON.stringify(e.weightSpecs),n=As(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,q0(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw rv(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!==\"JSON\")throw new Error(\"BrowserLocalStorage does not support loading non-JSON model topology yet.\");let t={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=K0(a),t}};Ds.URL_SCHEME=\"localstorage://\";var ov=r=>P().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Ds.URL_SCHEME)?sW(r.slice(Ds.URL_SCHEME.length)):null;mt.registerSaveRouter(ov);mt.registerLoadRouter(ov);function sW(r){return new Ds(r)}var Zm=class{constructor(){$(P().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),$(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let e={},t=Vp+wa,o=wa+ev;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(zp)&&(e=e.slice(0,e.indexOf(zp))),$(e.length>0,()=>\"scheme must not be an empty string.\");let o=Yt.getInstance();$(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=Yt.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Yt.getInstance().managers)}};function Jm(r){if(r.indexOf(zp)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Yt.getSchemes().join(\",\")}`);return{scheme:r.split(zp)[0],path:r.split(zp)[1]}}async function nv(r,e,t=!1){$(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=mt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=mt.getSaveHandlers(e);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Jm(r).scheme,p=Jm(r).path,u=i===Jm(r).scheme,c=await n.load();t&&u&&await Yt.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Yt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function sv(){let r=Yt.getSchemes(),e={};for(let t of r){let o=await Yt.getManager(t).listModels();for(let n in o){let s=t+zp+n;e[s]=o[n]}}return e}async function av(r){let e=Jm(r);return Yt.getManager(e.scheme).removeModel(e.path)}async function iv(r,e){return nv(r,e,!1)}async function uv(r,e){return nv(r,e,!0)}var Yb=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!==\"utf-8\"&&t!==\"utf8\")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window==\"undefined\"||!P().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener(\"message\",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(P().get(\"IS_BROWSER\")){P().setPlatform(\"browser\",new Yb);try{Yt.registerManager(Ds.URL_SCHEME,new Zm)}catch(r){}try{Yt.registerManager(Fs.URL_SCHEME,new Qm)}catch(r){}}var aW={importFetch:()=>pv()},Qb;var Zb=class{constructor(){this.util=cv(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return P().global.fetch!=null?P().global.fetch(e,t):(Qb==null&&(Qb=aW.importFetch()),Qb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!==\"utf-8\"&&t!==\"utf8\")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?\"\":new this.util.TextDecoder(t).decode(e)}};P().get(\"IS_NODE\")&&!P().get(\"IS_BROWSER\")&&P().setPlatform(\"node\",new Zb);function ne(r,e=\"float32\",t){return e=e||\"float32\",Xc(r),new je(r,e,t)}function iW(r,e){let t=v(r,\"x\",\"cast\");if(!yb(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e===\"string\"&&t.dtype!==\"string\"||e!==\"string\"&&t.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:t},n={dtype:e};return N.runKernel(to,o,n)}var qe=T({cast_:iW});function uW(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return N.runKernel(uo,t)}var zr=T({clone_:uW});function ef(r,e=!1){console.log(r.toString(e))}Vb();var pW={buffer:ne,cast:qe,clone:zr,print:ef};L0(pW);var va={};Be(va,{browserFiles:()=>mv,browserHTTPRequest:()=>hv,concatenateArrayBuffers:()=>Lp,copyModel:()=>iv,decodeWeights:()=>jm,encodeWeights:()=>H0,fromMemory:()=>gv,fromMemorySync:()=>nC,getLoadHandlers:()=>Q0,getModelArtifactsForJSON:()=>Bp,getModelArtifactsForJSONSync:()=>qb,getModelArtifactsInfoForJSON:()=>As,getSaveHandlers:()=>Y0,getWeightSpecs:()=>Ym,http:()=>rf,isHTTPScheme:()=>tf,listModels:()=>sv,loadWeights:()=>fv,moveModel:()=>uv,registerLoadRouter:()=>X0,registerSaveRouter:()=>j0,removeModel:()=>av,weightsLoaderFactory:()=>rC,withSaveHandler:()=>xv,withSaveHandlerSync:()=>yv});var cW=\"model\",lW=\".json\",mW=\".weights.bin\";function lv(r){return new Promise(e=>setTimeout(e)).then(r)}var Sa=class{constructor(e){if(!P().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(Sa.URL_SCHEME)&&(e=e.slice(Sa.URL_SCHEME.length)),(e==null||e.length===0)&&(e=cW),this.modelJsonFileName=e+lW,this.weightDataFileName=e+mW}async save(e){if(typeof document==\"undefined\")throw new Error(\"Browser downloads are not supported in this environment since `document` is not present\");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:\"application/octet-stream\"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserDownloads.save() does not support saving model topology in binary formats yet.\");{let o=[{paths:[\"./\"+this.weightDataFileName],weights:e.weightSpecs}],n=Xm(e,o),s=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:\"application/json\"})),a=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=s,await lv(()=>a.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await lv(()=>i.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:As(e)}}}};Sa.URL_SCHEME=\"downloads://\";var Jb=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=Bp(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,Lp(a)])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Hb(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Hb(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},fW=r=>P().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Sa.URL_SCHEME)?dW(r.slice(Sa.URL_SCHEME.length)):null;mt.registerSaveRouter(fW);function dW(r=\"model\"){return new Sa(r)}function mv(r){return new Jb(r)}function eC(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function tC(r,e){e==null&&(e={});let t=e.fetchFunc==null?P().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),n=0,s=.5,i=(e.onProgress==null?await Promise.all(o):await eC(o,e.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return e.onProgress==null?await Promise.all(i):await eC(i,e.onProgress,p,u)}async function fv(r,e=\"\",t,o){return rC(a=>tC(a,{requestInit:o}))(r,e,t)}function rC(r){return async(e,t=\"\",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((f,d)=>{let h=0;f.weights.forEach(g=>{let y=\"quantization\"in g?g.quantization.dtype:g.dtype,b=al[y]*Ve(g.shape),C=()=>{n[d]=!0,s[d]==null&&(s[d]=[]),s[d].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((w,k)=>{w===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(f=>f)){let f=o.filter((d,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${f.join(\", \")}. \nManifest JSON has weights with names: ${i.join(\", \")}.`)}let p=n.reduce((f,d,h)=>(d&&f.push(h),f),[]),u=[];p.forEach(f=>{e[f].paths.forEach(d=>{let h=t+(t.endsWith(\"/\")?\"\":\"/\")+d;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(f=>{let d=e[f].paths.length,h=0;for(let w=0;w{let k=g.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=jm(k,[w.manifestEntry]);for(let E in _)l[E]=_[E]}),m+=d}),l}}var hW=\"application/octet-stream\",gW=\"application/json\",il=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?($(typeof t.fetchFunc==\"function\",()=>\"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)\"),this.fetch=t.fetchFunc):this.fetch=P().platform.fetch,$(e!=null&&e.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(e)&&$(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let o=[{paths:[\"./model.weights.bin\"],weights:e.weightSpecs}],n=Xm(e,o);t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:gW}),\"model.json\"),e.weightData!=null&&t.body.append(\"model.weights.bin\",new Blob([e.weightData],{type:hW}),\"model.weights.bin\");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:As(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(\".pb\")?a+=\" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.\":a+=\" Please make sure the server is serving valid JSON for this request.\",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Bp(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=xW(t),s=this.weightPathPrefix||o,a=Ym(e),i=[],p=[];for(let c of e)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await tC(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Lp(u)]}};il.URL_SCHEME_REGEX=/^https?:\\/\\//;function xW(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function tf(r){return r.match(il.URL_SCHEME_REGEX)!=null}var dv=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>tf(o)):t=tf(r),t)return rf(r,e)}return null};mt.registerSaveRouter(dv);mt.registerLoadRouter(dv);function rf(r,e){return new il(r,e)}function hv(r,e){return rf(r,e)}var ul=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},of=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},oC=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function gv(r,e,t,o){let n=arguments;return new oC(nC(...n))}function nC(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new ul(r):(console.warn(\"Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release.\"),new ul({modelTopology:r})):(console.warn(\"Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release.\"),new ul({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function xv(r){return new of(r)}function yv(r){return new of(r)}var Cv={};Be(Cv,{confusionMatrix:()=>bv});function yW(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Re(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return N.runKernel(cn,a,i)}var Xe=T({matMul_:yW});function bW(r,e,t=1,o=0,n=\"int32\"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:e,onValue:t,offValue:o};return N.runKernel(ca,a,i)}var pl=T({oneHot_:bW});function Tie(){P().set(\"PROD\",!0)}function Nie(){P().set(\"DEBUG\",!0)}function _ie(){P().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function sC(r){P().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}B0(sC);function Eie(){N.disposeVariables()}function cr(){return N}function $ie(){return N.memory()}function Rie(r){return N.profile(r)}function Ne(r,e){return N.tidy(r,e)}function Ft(r){sl(r).forEach(t=>t.dispose())}function So(r){return N.keep(r)}function Aie(r){return N.time(r)}function Fie(r){return N.setBackend(r)}function Die(){return N.ready()}function Pie(){return N.backendName}function Oie(r){N.removeBackend(r)}function Mie(r){return N.findBackend(r)}function Lie(r){return N.findBackendFactory(r)}function pi(r,e,t=1){return N.registerBackend(r,e,t)}function Bie(){return N.backend}function Vie(r,e){P().setPlatform(r,e)}function CW(r){let t={input:v(r,\"input\",\"imag\")};return N.runKernel(Ya,t)}var ci=T({imag_:CW});function IW(r){let t={x:v(r,\"x\",\"neg\")};return N.runKernel(Pn,t)}var yr=T({neg_:IW});function wW(r){let t={input:v(r,\"input\",\"real\")};return N.runKernel(la,t)}var ka=T({real_:wW});function SW(r,e,t){let o=v(r,\"x\",\"transpose\");if(e==null&&(e=o.shape.map((a,i)=>i).reverse()),$(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype===\"complex64\"?Ne(()=>{let a=ka(o),i=ci(o);return a=N.runKernel(Mr,{x:a},s),i=N.runKernel(Mr,{x:i},s),t&&(i=yr(i)),Er(a,i)}):N.runKernel(Mr,n,s)}var Wp=T({transpose_:SW});function vW(r,e,t){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(e,\"predictions\",\"confusionMatrix\");$(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=pl(qe(o,\"int32\"),t),a=pl(qe(n,\"int32\"),t),i=Wp(s),p=Xe(i,a);return qe(p,\"int32\")}var bv=T({confusionMatrix_:vW});var br={};Be(br,{assertAndGetBroadcastShape:()=>Je,getBroadcastDims:()=>Iv,getReductionAxes:()=>nf});function Iv(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function nf(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function Je(r,e){let t=[],o=Math.max(r.length,e.length);for(let n=0;nRW,fromPixelsAsync:()=>EW,toPixels:()=>$W});function sf(r,e,t){if(eo(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=or(r,t);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}var su;function wv(r,e=3){if(e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");if(r==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!=\"undefined\"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!=\"undefined\"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!=\"undefined\"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!=\"undefined\"&&r instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(el(Zi,N.backendName)!=null){let d={pixels:r},h={numChannels:e};return N.runKernel(Zi,d,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext(\"2d\").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(su==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")su=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else su=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});su.canvas.width=u,su.canvas.height=c,su.drawImage(r,0,0,u,c),l=su.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let d=u*c;m=new Int32Array(d*e);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(t.dtype!==\"float32\"&&t.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${t.dtype}. Please use float32 or int32 tensors.`);let a=await t.data(),i=t.dtype===\"float32\"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`)}else if(t.dtype===\"int32\"&&(f<0||f>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${f}.`);s===1?(c[0]=f*i,c[1]=f*i,c[2]=f*i):c[m]=f*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){e.width=n,e.height=o;let u=e.getContext(\"2d\"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}var RW=T({fromPixels_:wv});var af={};Be(af,{prepareAndValidate:()=>vv});function vv(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!==\"int32\")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(Ve(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var cl={};Be(cl,{calculateShapes:()=>kv,validateInput:()=>uf,validateUpdateShape:()=>aC});function aC(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;lFW,computeFlatOffset:()=>LW,computeOutShape:()=>PW,getNormalizedAxes:()=>OW,isSliceContinous:()=>MW,maskToAxes:()=>DW,parseSliceParams:()=>BW,sliceInfo:()=>VW,startForAxis:()=>Fv,startIndicesWithElidedDims:()=>$v,stopForAxis:()=>Dv,stopIndicesWithElidedDims:()=>Rv,stridesForAxis:()=>Av,stridesWithElidedDims:()=>Nv});var iC=-2,AW=-1;function FW(r,e,t){let o=r.shape.length;$(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),$(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function DW(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function PW(r,e,t){let o=[];for(let n=0;n0){let f=e[0],d=t+1;c=$v(a,f,d,o,r),l=Rv(i,f,d,n,r),m=Nv(s,f,d,r)}else for(let f=0;f-1)s[i]=0;else{let p=_v(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=_v(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=op(0,a,p-1),a}function Dv(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=op(0,a,p):a=op(-1,a,p-1),a}function MW(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function LW(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return t==null?s=new Array(n).fill(-1):typeof t==\"number\"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function VW(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&(a&a-1)!==0)throw new Error(\"Multiple ellipses in slice is not allowed.\");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(w&&m.strides[C]<=0)throw Error(\"only stride 1 allowed on non-range indexing.\");h=h&&m.strides[C]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=Tv(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=Tv(m.end[C],1,m.strides[C],k,_,E);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;f=f&&O,d=d&&(C===0&&m.strides[C]===1||O)}else f=f&&m.strides[C]===1&&R,d=d&&(C===0&&m.strides[C]===1||R);let A,D=!1;if(m.beginValid&&m.endValid?(A=m.end[C]-m.begin[C],D=!0):w?(A=1,D=!0):R&&k>=0&&(m.strides[C]<0?A=-k:A=k,D=!0),D){let O;A===0||A<0!=m.strides[C]<0?O=0:O=Math.trunc(A/m.strides[C])+(A%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?y.push(g[w]):w===iC&&y.push(1)}return{finalShapeSparse:y.filter((C,w)=>m.finalShapeGatherIndices[w]!==iC),finalShape:y,isIdentity:f,sliceDim0:d,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function zW(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var Pv={};Be(Pv,{Serializable:()=>ll,SerializationMap:()=>Ps,registerClass:()=>$r});var ll=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ps=class{constructor(){this.classNameMap={}}static getMap(){return Ps.instance==null&&(Ps.instance=new Ps),Ps.instance}static register(e){Ps.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function $r(r){$(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),$(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),$(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),Ps.register(r)}var Bv={};Be(Bv,{TEST_EPSILON_FLOAT16:()=>Ov,createVideoElement:()=>jW,encodeStrings:()=>Lv,expectArrayBuffersEqual:()=>KW,expectArraysClose:()=>UW,expectArraysEqual:()=>HW,expectNumbersClose:()=>Mv,expectPromiseToFail:()=>GW,expectValuesInRange:()=>qW,play:()=>XW,testEpsilon:()=>pf});var WW=.001,Ov=.1;function UW(r,e,t){return t==null&&(t=pf()),uC(r,e,(o,n)=>pC(o,n,t))}function pf(){return N.backend.floatPrecision()===32?WW:Ov}function uC(r,e,t){let o=!0;if((Ut(r)||Ut(e))&&(o=!1),Ut(r)&&Ut(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=or(r),i=or(e);if(!Or(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Ut(r)?r:on(r),s=Ut(e)?e:on(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}.\nActual: ${n}.\nExpected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!=\"undefined\"&&expect().nothing()}function HW(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return nn(r)||nn(r[0])||nn(e)||nn(e[0])?uC(r,t,(o,n)=>o==n):uC(r,e,(o,n)=>pC(o,n,0))}function Mv(r,e,t){if(t==null&&(t=pf()),!pC(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function pC(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function qW(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function KW(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener(\"loadeddata\",o=>t(e)),e.load()})}async function XW(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var YW=\"4.0.0\";function QW(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(_r,n)}var ge=T({add_:QW});function ZW(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(vn,n)}var cf=T({floorDiv_:ZW});function JW(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Re(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return cf(t,o);let n={a:t,b:o},s={};return N.runKernel(Cn,n,s)}var We=T({div_:JW});function eU(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(ho,n)}var oe=T({mul_:eU});function tU(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return N.runKernel(cp,t)}else{let t={x:e};return N.runKernel(sn,t)}}var Qt=T({abs_:tU});function rU(r){let t={x:v(r,\"x\",\"acos\")};return N.runKernel(Li,t)}var Vv=T({acos_:rU});function oU(r){let t={x:v(r,\"x\",\"acosh\")};return N.runKernel(Bi,t)}var zv=T({acosh_:oU});function nU(r){$(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),e.forEach(n=>{if(!Or(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return N.runKernel(an,o)}var Wv=T({addN_:nU});function sU(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return N.runKernel(oa,n,s)}var Uv=T({all_:sU});function aU(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return N.runKernel(na,n,s)}var Gv=T({any_:aU});function iU(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return N.runKernel(un,o,n)}var Hv=T({argMax_:iU});function uU(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return N.runKernel(ja,o,n)}var qv=T({argMin_:uU});function pU(r){let t={x:v(r,\"x\",\"asin\")};return N.runKernel(Vi,t)}var Kv=T({asin_:pU});function cU(r){let t={x:v(r,\"x\",\"asinh\")};return N.runKernel(zi,t)}var jv=T({asinh_:cU});function lU(r){let t={x:v(r,\"x\",\"atan\")};return N.runKernel(Wi,t)}var Xv=T({atan_:lU});function mU(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(sa,n)}var Yv=T({atan2_:mU});function fU(r){let t={x:v(r,\"x\",\"atanh\")};return N.runKernel(Ui,t)}var Qv=T({atanh_:fU});function dU(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=Jv(n);return uu(r,i,t,s,o,null,null,p)}function lC(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=lf(e),u;if(a===\"channelsLast\")u=[i,p,r[3],r[3]];else if(a===\"channelsFirst\")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return uu(r,u,t,o,n,s,!1,a)}function hU(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=cC(e),c,l;if(a===\"NDHWC\")l=\"channelsLast\",c=[i,p,u,r[4],r[4]];else if(a===\"NCDHW\")l=\"channelsFirst\",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Zv(r,c,t,o,n,!1,l,s)}function uu(r,e,t,o,n,s,a=!1,i=\"channelsLast\"){let[p,u,c,l]=[-1,-1,-1,-1];if(i===\"channelsLast\")[p,u,c,l]=r;else if(i===\"channelsFirst\")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,f,,d]=e,[h,g]=lf(t),[y,b]=lf(o),C=Up(m,y),w=Up(f,b),{padInfo:k,outHeight:_,outWidth:E}=yU(n,u,c,h,g,C,w,s,i),R=a?d*l:d,A;return i===\"channelsFirst\"?A=[p,R,_,E]:i===\"channelsLast\"&&(A=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:f,effectiveFilterHeight:C,effectiveFilterWidth:w,dilationHeight:y,dilationWidth:b,inShape:r,outShape:A,filterShape:e}}function Zv(r,e,t,o,n,s=!1,a=\"channelsLast\",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a===\"channelsLast\")[p,u,c,l,m]=r;else if(a===\"channelsFirst\")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[f,d,h,,g]=e,[y,b,C]=cC(t),[w,k,_]=cC(o),E=Up(f,w),R=Up(d,k),A=Up(h,_),{padInfo:D,outDepth:O,outHeight:M,outWidth:L}=bU(n,u,c,l,y,b,C,E,R,A,i),W=s?g*m:g,V;return a===\"channelsFirst\"?V=[p,W,O,M,L]:a===\"channelsLast\"&&(V=[p,O,M,L,W]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:W,padInfo:D,strideDepth:y,strideHeight:b,strideWidth:C,filterDepth:f,filterHeight:d,filterWidth:h,effectiveFilterDepth:E,effectiveFilterHeight:R,effectiveFilterWidth:A,dilationDepth:w,dilationHeight:k,dilationWidth:_,inShape:r,outShape:V,filterShape:e}}function gU(r,e,t,o,n){o==null&&(o=mC(r,e,t));let s=r[0],a=r[1],i=au((s-e+2*o)/t+1,n),p=au((a-e+2*o)/t+1,n);return[i,p]}function xU(r,e,t,o,n,s){n==null&&(n=mC(r,e,o));let a=r[0],i=r[1],p=r[2],u=au((a-e+2*n)/o+1,s),c=au((i-e+2*n)/o+1,s),l=au((p-e+2*n)/o+1,s);return[u,c,l,t]}function mC(r,e,t,o=1){let n=Up(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function lf(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function cC(r){return typeof r==\"number\"?[r,r,r]:r}function Up(r,e){return e<=1?r:r+(r-1)*(e-1)}function yU(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r==\"number\"){u={top:r,bottom:r,left:r,right:r,type:r===0?\"VALID\":\"NUMBER\"};let f=gU([e,t],s,o,r,i);c=f[0],l=f[1]}else if(r===\"same\"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),f=Math.max(0,(l-1)*n+a-t),d=Math.floor(m/2),h=m-d,g=Math.floor(f/2),y=f-g;u={top:d,bottom:h,left:g,right:y,type:\"SAME\"}}else if(r===\"valid\")u={top:0,bottom:0,left:0,right:0,type:\"VALID\"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r==\"object\"){let m=p===\"channelsLast\"?r[1][0]:r[2][0],f=p===\"channelsLast\"?r[1][1]:r[2][1],d=p===\"channelsLast\"?r[2][0]:r[3][0],h=p===\"channelsLast\"?r[2][1]:r[3][1];u={top:m,bottom:f,left:d,right:h,type:m===0&&f===0&&d===0&&h===0?\"VALID\":\"EXPLICIT\"},c=au((e-s+m+f)/o+1,i),l=au((t-a+d+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function bU(r,e,t,o,n,s,a,i,p,u,c){let l,m,f,d;if(typeof r==\"number\"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=xU([e,t,o,1],i,1,n,r,c);m=g[0],f=g[1],d=g[2]}else if(r===\"same\"){m=Math.ceil(e/n),f=Math.ceil(t/s),d=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(f-1)*s+p-t,y=(d-1)*a+u-o,b=Math.floor(h/2),C=h-b,w=Math.floor(g/2),k=g-w,_=Math.floor(y/2),E=y-_;l={top:w,bottom:k,left:_,right:E,front:b,back:C,type:\"SAME\"}}else if(r===\"valid\")l={top:0,bottom:0,left:0,right:0,front:0,back:0,type:\"VALID\"},m=Math.ceil((e-i+1)/n),f=Math.ceil((t-p+1)/s),d=Math.ceil((o-u+1)/a);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:f,outWidth:d}}function au(r,e){if(!e)return Math.trunc(r);switch(e){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function iu(r){let[e,t,o]=lf(r);return e===1&&t===1&&o===1}function lr(r,e){return iu(r)||iu(e)}function Jv(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Ot(r,e,t){if(t!=null){if(typeof e==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e==\"number\")$(ra(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e==\"object\")e.forEach(o=>{o.forEach(n=>{$(ra(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function CU(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return N.runKernel(Ss,o,n)}var z=T({reshape_:CU});function IU(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;$(lr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Ot(\"avgPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=N.runKernel(pn,u,c);return l=qe(l,s.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var mf=T({avgPool_:IU});function wU(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ot(\"avgPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=N.runKernel(ip,u,c);return l=qe(l,i.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var ek=T({avgPool3d_:wU});function SU(r,e=0){$(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=Ia(r,\"tensors\",\"concat\",\"string_or_numeric\");if(t[0].dtype===\"complex64\"&&t.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),t.length===1)return zr(t[0]);let o=t,n={axis:e};return N.runKernel(gs,o,n)}var gt=T({concat_:SU});function vU(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return N.runKernel(yo,t)}var Ms=T({sigmoid_:vU});function kU(r,e,t){let o=v(r,\"x\",\"slice\",\"string_or_numeric\");if(o.rank===0)throw new Error(\"Slicing scalar is not possible\");let n={x:o},s={begin:e,size:t};return N.runKernel(qn,n,s)}var Ue=T({slice_:kU});function TU(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return N.runKernel(Qn,t)}var ml=T({tanh_:TU});function NU(r,e,t,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(e,\"lstmKernel\",\"basicLSTMCell\"),p=v(t,\"lstmBias\",\"basicLSTMCell\"),u=v(o,\"data\",\"basicLSTMCell\"),c=v(n,\"c\",\"basicLSTMCell\"),l=v(s,\"h\",\"basicLSTMCell\"),m=gt([u,l],1),f=Xe(m,i),d=ge(f,p),h=d.shape[0],g=d.shape[1]/4,y=[h,g],b=Ue(d,[0,0],y),C=Ue(d,[0,g],y),w=Ue(d,[0,g*2],y),k=Ue(d,[0,g*3],y),_=ge(oe(Ms(b),ml(C)),oe(c,Ms(ge(a,w)))),E=oe(ml(_),Ms(k));return[_,E]}var tk=T({basicLSTMCell_:NU});function _U(r,e,t){let o=v(r,\"x\",\"batchToSpaceND\"),n=e.reduce((i,p)=>i*p);$(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),$(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return N.runKernel(hs,s,a)}var ff=T({batchToSpaceND_:_U});function rk(r){let e;return r.rank===0||r.rank===1?e=z(r,[1,1,1,r.size]):r.rank===2?e=z(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function EU(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),$(c==null||i.rank===c.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),$(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:rk(a),scale:u,offset:c,mean:i,variance:p},f={varianceEpsilon:s},d=N.runKernel(kn,m,f);return z(d,a.shape)}var li=T({batchNorm_:EU});function $U(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var ok=T({batchNorm2d_:$U});function RU(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var nk=T({batchNorm3d_:RU});function AU(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var sk=T({batchNorm4d_:AU});function FU(r,e,t){let o=v(r,\"x\",\"bincount\"),n=v(e,\"weights\",\"bincount\");$(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return N.runKernel(up,s,a)}var df=T({bincount_:FU});function DU(r,e){let t=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(e,\"s1\",\"broadcastArgs\",\"int32\");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return N.runKernel(pp,n)}var ak=T({broadcastArgs_:DU});function PU(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(e.some(u=>!(u>0)||u%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${e}].`);if(e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return zr(t);let i={x:t},p={reps:s};return N.runKernel(wo,i,p)}var Ls=T({broadcastTo_:PU});function OU(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return N.runKernel(ro,t)}var ik=T({ceil_:OU});function Bs(r,e,t){let o={shape:r,value:e,dtype:t};return N.runKernel(ys,{},o)}function MU(r,e,t){let o=v(r,\"x\",\"clipByValue\");if($(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Bs(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return N.runKernel(Ro,n,s)}var uk=T({clipByValue_:MU});function LU(r){return gt(r,0)}var pk=T({concat1d_:LU});function BU(r,e){return gt(r,e)}var ck=T({concat2d_:BU});function VU(r,e){return gt(r,e)}var lk=T({concat3d_:VU});function zU(r,e){return gt(r,e)}var mk=T({concat4d_:zU});function WU(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(e,\"filter\",\"conv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Ot(\"conv2d\",o,a);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let m={x:u,filter:p},f={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},d=N.runKernel(ln,m,f);return c?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var mi=T({conv2d_:WU});function UU(r,e,t,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(e,\"filter\",\"conv1d\"),u=i,c=!1;i.rank===2&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Ot(\"conv1d\",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(lr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),$(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=z(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=z(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=mi(m,l,[1,t],o,\"NHWC\",[1,s],a);return c?z(g,[g.shape[2],g.shape[3]]):z(g,[g.shape[0],g.shape[2],g.shape[3]])}var fk=T({conv1d_:UU});function GU(r,e,t,o,n,s=\"NHWC\",a){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s===\"NHWC\"?i[3]:i[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];$(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),$(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Ot(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},f={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},d=N.runKernel(mn,m,f);return u?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var hf=T({conv2DBackpropInput_:GU});function HU(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return hf(t,a,i,o,n,\"NHWC\",s)}var dk=T({conv2dTranspose_:HU});function qU(r,e,t,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(e,\"filter\",\"conv3d\"),p=a,u=!1;a.rank===4&&(u=!0,p=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(lr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`);let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=N.runKernel(mp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var hk=T({conv3d_:qU});function KU(r,e,t,o,n){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=z(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),$(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),$(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=N.runKernel(fp,c,l);return i?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var gk=T({conv3DBackpropInput_:KU});function jU(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return gk(t,s,a,o,n)}var xk=T({conv3dTranspose_:jU});function XU(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return N.runKernel(fn,t)}var yk=T({cos_:XU});function YU(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return N.runKernel(dn,t)}var bk=T({cosh_:YU});function QU(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return N.runKernel(hn,s,a)}var Ck=T({cumprod_:QU});function ZU(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return N.runKernel(gn,s,a)}var Ik=T({cumsum_:ZU});function JU(r,e,t,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(e,\"weights\",\"denseBincount\");$(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return N.runKernel(dp,a,i)}var wk=T({denseBincount_:JU});function eG(r,e,t=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=t===\"NHWC\"?o.shape[1]:o.shape[2],s=t===\"NHWC\"?o.shape[2]:o.shape[3],a=t===\"NHWC\"?o.shape[3]:o.shape[1];$(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),$(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${e} for depthToSpace with input shape\n ${o.shape}`),$(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${e} for depthToSpace with input shape\n ${o.shape}`),$(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return N.runKernel(yn,i,p)}var Sk=T({depthToSpace_:eG});function tG(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Ot(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},f={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},d=N.runKernel(bn,m,f);return c?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Gp=T({depthwiseConv2d_:tG});function rG(r){let t={x:v(r,\"x\",\"diag\")};return N.runKernel(xp,t)}var vk=T({diag_:rG});function oG(r,e,t,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(e,\"filter\",\"dilation2d\");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=z(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=N.runKernel(yp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var kk=T({dilation2d_:oG});function nG(r,e){let t=v(r,\"a\",\"equal\",\"string_or_numeric\"),o=v(e,\"b\",\"equal\",\"string_or_numeric\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(oo,n)}var gf=T({equal_:nG});function sG(r,e,t){let o=v(e,\"a\",\"where\"),n=v(t,\"b\",\"where\"),s=v(r,\"condition\",\"where\",\"bool\"),a=Je(Je(s.shape,o.shape),n.shape),i=Ls(s,a),p=Ls(o,a),u=Ls(n,a),c={condition:i,t:p,e:u};return N.runKernel(vs,c)}var os=T({where_:sG});function aG(r){let t={x:v(r,\"x\",\"zerosLike\")};return N.runKernel(Es,t)}var Gt=T({zerosLike_:aG});function iG(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");[t,o]=Re(t,o);let n=We(t,o),s=Gt(n),a=gf(o,s);return os(a,s,n)}var Tk=T({divNoNan_:iG});function uG(r,e){let t=v(r,\"t1\",\"dot\"),o=v(e,\"t2\",\"dot\");$((t.rank===1||t.rank===2)&&(o.rank===1||o.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=z(t,[1,-1]),i=z(o,[-1,1]),p=Xe(a,i);return z(p,[])}else if(t.rank===1&&o.rank===2){let a=z(t,[1,-1]),i=z(o,[o.shape[0],o.shape[1]]),p=Xe(a,i);return z(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=z(o,[-1,1]),i=Xe(t,a);return z(i,[i.size])}else{let a=z(o,[o.shape[0],o.shape[1]]);return Xe(t,a)}}var Nk=T({dot_:uG});function pG(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return N.runKernel(Xa,t,o)}var _k=T({einsum_:pG});function cG(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return N.runKernel(In,t)}var xf=T({elu_:cG});function lG(r){let e=v(r,\"x\",\"erf\");$(e.dtype===\"int32\"||e.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),e.dtype===\"int32\"&&(e=qe(e,\"float32\"));let t={x:e};return N.runKernel(Gi,t)}var Ek=T({erf_:lG});function fC(r,e){for(let t=0;tr[s]);return[t,n]}function Ta(r,e){let t=e.map(o=>1);return $k(r,t,e)}function fG(r,e,t){$(fC(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function dG(r,e){if(fC(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function hG(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function gG(r,e){let t=[];for(let o=e-r;o\"Axis must be <= rank of the tensor\");let o={input:t},n={dim:e};return N.runKernel(xs,o,n)}var _a=T({expandDims_:NG});function _G(r){let t={x:v(r,\"x\",\"expm1\")};return N.runKernel(wn,t)}var Fk=T({expm1_:_G});function EG(r,e){let t=v(r,\"x\",\"tile\",\"string_or_numeric\");$(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return N.runKernel(wo,o,n)}var fi=T({tile_:EG});function $G(r,e,t,o=\"float32\"){e==null&&(e=r);let n=ne([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),$(ra(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=z(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=N.runKernel(wp,p,u);return i?z(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Bk=T({localResponseNormalization_:zG});function WG(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return N.runKernel(lo,t)}var Ea=T({log_:WG});function UG(r){let t={x:v(r,\"x\",\"log1p\")};return N.runKernel(Ki,t)}var Sf=T({log1p_:UG});function GG(r){return $(fs(r),()=>\"The f passed in grad(f) must be a function\"),(e,t)=>{let o=v(e,\"x\",\"tf.grad\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grad\"):null;return N.tidy(()=>{let{value:s,grads:a}=N.gradients(()=>r(o),[o],n);return n!=null&&ht(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),vf(a),a[0]})}}function HG(r){return $(fs(r),()=>\"The f passed in grads(f) must be a function\"),(e,t)=>{$(Array.isArray(e),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=Ia(e,\"args\",\"tf.grads\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grads\"):null;return N.tidy(()=>{let{value:s,grads:a}=N.gradients(()=>r(...o),o,n);return n!=null&&ht(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),vf(a),a})}}function qG(r){return $(fs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{$(e instanceof ut,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),$(t==null||t instanceof ut,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=N.gradients(()=>r(e),[e],t);return vf(o),{grad:o[0],value:n}}}function KG(r){return $(fs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{$(Array.isArray(e)&&e.every(n=>n instanceof ut),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),$(t==null||t instanceof ut,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=N.gradients(()=>r(...e),e,t);return t!=null&&ht(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),vf(o.grads),o}}function dC(r,e){$(fs(r),()=>\"The f passed in variableGrads(f) must be a function\"),$(e==null||Array.isArray(e)&&e.every(u=>u instanceof ba),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let t=e!=null;if(!t){e=[];for(let u in N.registeredVariables)e.push(N.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),$(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=N.gradients(r,e,null,s);$(i.some(u=>u!=null),()=>\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Cr(r){return N.customGrad(r)}function vf(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.`)}function jG(r){let t={x:v(r,\"x\",\"softplus\")};return N.runKernel(Qi,t)}var kf=T({softplus_:jG});function XG(r){let e=v(r,\"x\",\"logSigmoid\");return Cr(o=>({value:yr(kf(yr(o))),gradFunc:a=>oe(a,Ms(yr(o)))}))(e)}var Vk=T({logSigmoid_:XG});function YG(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(Io,n)}var ke=T({sub_:YG});function QG(r,e=-1){let t=v(r,\"logits\",\"logSoftmax\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Cr((n,s)=>{let i=Vs(n,e,!0),p=ke(n,i),u=ke(qe(p,\"float32\"),Ea(tt(Bo(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[f]=m,d=!0,h=Bo(f);return ke(l,oe(tt(l,e,d),h))}}})(t)}var zk=T({logSoftmax_:QG});function ZG(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=Ka(e,o.shape),s=Vs(o,n,!0),a=ke(o,s),i=Bo(a),p=tt(i,n),u=Ea(p),c=ge(z(s,u.shape),u);if(t){let l=Ta(c.shape,n);return z(c,l)}return c}var Tf=T({logSumExp_:ZG});function JG(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(_n,n)}var lu=T({logicalAnd_:JG});function e4(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return N.runKernel(En,t)}var Nf=T({logicalNot_:e4});function t4(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(ua,n)}var _f=T({logicalOr_:t4});function r4(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return Je(t.shape,o.shape),lu(_f(r,e),Nf(lu(r,e)))}var Wk=T({logicalXor_:r4});var Ef=2147483648;function o4(r,e,t=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(e,\"values\",\"searchSorted\"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=z(o,[-1,s]),p=z(n,[-1,a]);if(i.rank<2)throw new Error(\"Sorted input argument must be at least 2-dimensional\");if(i.shape[0]!==p.shape[0])throw new Error(\"Leading dimension of 'sortedSequence' and 'values' must match.\");if(Ve(p.shape)>=Ef)throw new Error(`values tensor size must less than ${Ef}`);if(i.shape[1]>=Ef)throw new Error(`trailing dim_size must less than ${Ef} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return N.runKernel(Ep,u,c)}var dl=T({searchSorted_:o4});function Uk(r,e){return dl(r,e,\"left\")}function n4(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(lr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Ot(\"maxPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=N.runKernel(Rn,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var $f=T({maxPool_:n4});function s4(r,e=[1,1,1],t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"maxPool3d\"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ot(\"maxPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=N.runKernel(Sp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Gk=T({maxPool3d_:s4});function a4(r,e,t,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=N.runKernel(vp,a,i);return{result:p[0],indexes:p[1]}}var Hk=T({maxPoolWithArgmax_:a4});function i4(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Re(t,o),t.dtype===\"bool\"&&(t=qe(t,\"int32\"),o=qe(o,\"int32\")),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(mo,n)}var Rf=T({maximum_:i4});function u4(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return N.runKernel(An,n,s)}var mu=T({mean_:u4});function Wr(r,e=\"float32\"){if(e===\"complex64\"){let o=Wr(r,\"float32\"),n=Wr(r,\"float32\");return Er(o,n)}let t=ap(Ve(r),e);return N.makeTensor(t,r,e)}function zs(r,e=\"float32\"){if(e===\"complex64\"){let o=zs(r,\"float32\"),n=Wr(r,\"float32\");return Er(o,n)}let t=jc(Ve(r),e);return N.makeTensor(t,r,e)}function qk(r,e,{indexing:t=\"xy\"}={}){if(t!==\"xy\"&&t!==\"ij\")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,\"x\",\"meshgrid\",r instanceof ut?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof ut?e.dtype:\"float32\"),s=Ve(o.shape),a=Ve(n.shape);return t===\"xy\"?(o=z(o,[1,-1]),n=z(n,[-1,1]),[Xe(zs([a,1],o.dtype),o),Xe(n,zs([1,s],n.dtype))]):(o=z(o,[-1,1]),n=z(n,[1,-1]),[Xe(o,zs([1,a],o.dtype)),Xe(zs([s,1],n.dtype),n)])}function p4(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Re(t,o),t.dtype===\"bool\"&&(t=qe(t,\"int32\"),o=qe(o,\"int32\")),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(fo,n)}var Af=T({minimum_:p4});function c4(r,e,t){$(t===\"reflect\"||t===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");$(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),$(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return N.runKernel(Dn,a,s)}var Kk=T({mirrorPad_:c4});function l4(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(ji,n)}var jk=T({mod_:l4});function m4(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=Ka(e,r.shape),n=mu(r,o,t),s=n.shape;t||(s=Ta(n.shape,o));let a=Zt(ke(qe(r,\"float32\"),z(n,s))),i=mu(a,o,t);return{mean:n,variance:i}}var Xk=T({moments_:m4});function f4(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=Ia(t,\"c\",\"multiRNNCell\"),a=Ia(o,\"h\",\"multiRNNCell\"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?z(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=N.runKernel(kp,p,u);return a===1?z(c,[c.size]):c}var Qk=T({multinomial_:d4});function h4(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(go,n)}var Ff=T({notEqual_:h4});function g4(r){let t={x:v(r,\"x\",\"onesLike\")};return N.runKernel(Cs,t)}var Zk=T({onesLike_:g4});function x4(r,e){let t=v(r,\"v1\",\"outerProduct\"),o=v(e,\"v2\",\"outerProduct\");$(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=z(t,[-1,1]),s=z(o,[1,-1]);return Xe(n,s)}var Jk=T({outerProduct_:x4});function y4(r,e,t=0){let o=v(r,\"x\",\"pad\");if(o.rank===0)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");let n={paddings:e,constantValue:t},s={x:o};return N.runKernel(Ln,s,n)}var Ws=T({pad_:y4});function b4(r,e,t=0){return $(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Ws(r,[e],t)}var e1=T({pad1d_:b4});function C4(r,e,t=0){return $(e.length===2&&e[0].length===2&&e[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Ws(r,e,t)}var t1=T({pad2d_:C4});function I4(r,e,t=0){return $(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Ws(r,e,t)}var r1=T({pad3d_:I4});function w4(r,e,t=0){return $(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Ws(r,e,t)}var o1=T({pad4d_:w4});function S4(r,e,t){let o=v(r,\"x\",\"spaceToBatchND\");$(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),$(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return N.runKernel(ks,n,s)}var Df=T({spaceToBatchND_:S4});function v4(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o=\"valid\");let i=v(r,\"x\",\"maxPool\"),p=i,u=!1;i.rank===3&&(u=!0,p=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(lr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=lC(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=T4([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let f=l[0]===1&&l[1]===1,[d,h]=k4([c.inHeight,c.inWidth],l,m),g=f?o:\"valid\",y=f?p:Df(p,l,d),C=(t===\"avg\"?()=>mf(y,e,s,g,a):()=>$f(y,e,s,g,a))(),w=f?C:ff(C,l,h);return u?z(w,[w.shape[1],w.shape[2],w.shape[3]]):w}function k4(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function T4(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var n1=T({pool_:v4});function N4(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return N.runKernel(Vn,n)}var Pf=T({prelu_:N4});function _4(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=qe(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return N.runKernel(Ao,n,s)}var s1=T({prod_:_4});function E4(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,\"raggedGather\",\"int32\")),s=v(e,\"paramsDenseValues\",\"raggedGather\"),a=v(t,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=N.runKernel(Tp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var a1=T({raggedGather_:E4});function $4(r,e,t){let o=v(r,\"starts\",\"raggedRange\"),n=v(e,\"limits\",\"raggedRange\",o.dtype),s=v(t,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=N.runKernel(Np,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var i1=T({raggedRange_:$4});function R4(r,e,t,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(e,\"values\",\"raggedTensorToTensor\"),i=v(t,\"defaultValue\",\"raggedTensorToTensor\",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,\"raggedTensorToTensor\",\"int32\")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return N.runKernel(_p,u,c)}var u1=T({raggedTensorToTensor_:R4});function A4(r,e,t){let o=Ve(r),n=null;if(t==null||t===\"float32\")n=new Float32Array(o);else if(t===\"int32\")n=new Int32Array(o);else if(t===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;s=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype===\"float32\"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},Mf=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Bf.alea(s.toString()),this.randn=new du(0,1,o,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n==\"number\"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Bf.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function B4(r,e,t=1,o=\"float32\",n){if(t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Mf(e,t,o,n),a=ne(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),vo(e,0)}var E1=T({reverse1d_:K4});function j4(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),vo(t,e)}var $1=T({reverse2d_:j4});function X4(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),vo(t,e)}var R1=T({reverse3d_:X4});function Y4(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),vo(t,e)}var A1=T({reverse4d_:Y4});function Q4(r){let t={x:v(r,\"x\",\"round\")};return N.runKernel(da,t)}var Uf=T({round_:Q4});function Z4(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return N.runKernel(xo,t)}var F1=T({rsqrt_:Z4});function J4(r){let t={x:v(r,\"x\",\"selu\")};return N.runKernel(Xi,t)}var D1=T({selu_:J4});function eH(r,e,t,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(e,\"depthwiseFilter\",\"separableConv2d\"),u=v(t,\"pointwiseFilter\",\"separableConv2d\"),c=i,l=!1;if(i.rank===3&&(l=!0,c=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a===\"NCHW\")throw new Error(\"separableConv2d currently does not support dataFormat NCHW; only NHWC is supported\");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],f=p.shape[3];$(u.shape[2]===m*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*f}, but got ${u.shape[2]}.`);let d=Gp(c,p,o,n,a,s),g=mi(d,u,1,\"valid\",a);return l?z(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var P1=T({separableConv2d_:eH});async function tH(r,e){let t=v(r,\"x\",\"setdiff1d\"),o=v(e,\"y\",\"setdiff1d\");$(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),$(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Ue(o,[e],[t])}var V1=T({slice1d_:sH});function aH(r,e,t){let o=v(r,\"x\",\"slice2d\");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var z1=T({slice2d_:aH});function iH(r,e,t){let o=v(r,\"x\",\"slice3d\");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var W1=T({slice3d_:iH});function uH(r,e,t){let o=v(r,\"x\",\"slice4d\");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var U1=T({slice4d_:uH});function pH(r,e=-1){let t=v(r,\"logits\",\"softmax\",\"float32\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return N.runKernel(Xn,o,n)}var G1=T({softmax_:pH});function cH(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return N.runKernel(bp,e)}var qp=T({fft_:cH});function lH(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return N.runKernel(Cp,e)}var hu=T({ifft_:lH});function mH(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=z(r,[t,e]);o=hu(n)}else{let n=[t,2*(e-1)],s=z(ka(r),[t,e]),a=z(ci(r),[t,e]),i=vo(Ue(s,[0,1],[t,e-2]),1),p=oe(vo(Ue(a,[0,1],[t,e-2]),1),be(-1)),u=gt([s,i],1),c=gt([a,p],1),l=z(Er(u,c),[n[0],n[1]]);o=hu(l)}if(o=ka(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=z(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Gf=T({irfft_:mH});function fH(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return N.runKernel(Ts,n,s)}var $a=T({split_:fH});function dH(r,e){$(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Ue(r,d,h),t=e}else if(e!=null&&e>t){let d=r.shape.map(h=>h);d[r.shape.length-1]=e-t,n=gt([r,Wr(d)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=z(Er(n,s),[o,t]),i=qp(a),p=Math.floor(t/2)+1,u=ka(i),c=ci(i),l=$a(u,[p,t-p],u.shape.length-1),m=$a(c,[p,t-p],c.shape.length-1),f=n.shape.slice();return f[n.shape.length-1]=p,z(Er(l[0],m[0]),f)}var Kp=T({rfft_:dH});function hH(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o},s={};return N.runKernel(Co,n,s)}var Hf=T({squaredDifference_:hH});function gH(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return z(t,db(t.shape,e).newShape)}var jp=T({squeeze_:gH});function xH(r,e=0){let t=Ia(r,\"tensors\",\"stack\",\"string_or_numeric\");$(t.length>=1,()=>\"Pass at least one tensor to tf.stack\"),t.length>0&&$(e<=t[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=t,n={axis:e};return N.runKernel(Is,o,n)}var Ir=T({stack_:xH});function yH(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return N.runKernel($s,o,n)}var qf=T({step_:yH});function bH(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return N.runKernel(Yn,c,l)}var H1=T({stridedSlice_:bH});function CH(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return N.runKernel(xa,t)}var q1=T({tan_:CH});function mr(r,e){eo(r);let t=or(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return xr(r,null,t,e)}function gi(r,e,t){if(eo(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=or(r,t);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return xr(r,e,o,t)}function K1(r,e,t){if(eo(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=or(r,t);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}function j1(r,e,t){if(eo(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=or(r,t);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}function X1(r,e,t){if(eo(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=or(r,t);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return e=e||o,xr(r,e,o,t)}function IH(r,e=1,t=!0){let o=v(r,\"x\",\"topk\");if(o.rank===0)throw new Error(\"topk() expects the input to be of rank 1 or higher\");let n=o.shape[o.shape.length-1];if(e<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=N.runKernel(Zn,s,a);return{values:i,indices:p}}var Y1=T({topk_:IH});function wH(r,e=0,t=1,o,n){if(o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new du(e,t,o,!0,n),a=ne(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:t},n={axis:e},[s,a]=N.runKernel($p,o,n);return{values:s,indices:a}}var Z1=T({unique_:SH});function vH(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");$(ra(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return N.runKernel(Rp,s,a)}var J1=T({unsortedSegmentSum_:vH});function kH(r,e=0){let t=v(r,\"x\",\"unstack\",\"string_or_numeric\");$(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return N.runKernel(_s,o,n)}var ko=T({unstack_:kH});function eT(r,e){return dl(r,e,\"right\")}function tT(r,e=!0,t,o){return N.makeVariable(r,e,t,o)}function Kf(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),ht(i.slice(s,s+a),n.shape,\"mask's shape must match the first K dimensions of tensor's shape,\");let p=1;for(let h=s;h\"Shape mismatch in v and x\");let p=be(1),u=ke(p,i),c=oe(ke(a,s),u);if(n){$(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=We(c,ke(p,Na(i,l)))}return ge(s,c)}var $H=T({movingAverage_:EH});function RH(r,e,t){let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");uf(n,o,t);let s={indices:o,updates:n},a={shape:t};return N.runKernel(Hn,s,a)}var AH=T({scatterND_:RH});function rT(r,e,t,o){if(r.dtype!==\"int32\")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function DH(r,e,t,o=0){let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);rT(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return N.runKernel(ei,i,p)}var PH=T({sparseToDense_:DH});function OH(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return N.runKernel(Tn,n)}var MH=T({gatherND_:OH});function oT(r,e){if(e==null)return r.shape.slice();if(Or(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),$(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof ut?n.clone():n;let s=oT(n,t),a=1-e,i=We(bf(ge(zf(s,0,1,\"float32\",o),a)),a);return oe(n,i)}var BH=T({dropout_:LH});function wC(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function hl(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),ht(o.shape.slice(0,o.shape.length-1),n.shape,\"predictions's shape should be align with the targets' shape, except the last dimension.\");let s=o.shape[o.shape.length-1];$(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=hb(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hsT,depthwiseConv2d:()=>uT,matMul:()=>pT});function WH(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];$(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),$(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Ot(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return N.runKernel(lp,l,m)}var nT=T({conv2DBackpropFilter_:WH});function gu(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return oe(r,qf(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function xu(r,e){let t=e,o=nf(r.shape,e.shape);return o.length>0&&(t=tt(t,o)),z(t,r.shape)}function yu(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return hi(r);if(e===\"elu\")return xf(r);if(e===\"relu6\")return Wf(r);if(e===\"prelu\")return Pf(r,t);if(e===\"leakyrelu\")return wf(r,o);if(e===\"sigmoid\")return Ms(r);throw new Error(`Unknown fused activation ${e}.`)}var bu=(r,e)=>!(r>0)||e===\"linear\";function UH({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||\"linear\",bu(N.state.gradientDepth,p)===!1){$(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=mi(r,e,t,o,n,s,a);return i!=null&&(_=ge(_,i)),yu(_,p,u,c)}let l=v(r,\"x\",\"conv2d\",\"float32\"),m=v(e,\"filter\",\"conv2d\",\"float32\"),f=l,d=!1;l.rank===3&&(d=!0,f=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),$(f.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Ot(\"fused conv2d\",o,a);let h=n===\"NHWC\"?f.shape[3]:f.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=uu(f.shape,m.shape,t,s,o,a),y;i!=null&&(y=v(i,\"bias\",\"fused conv2d\"),[y]=Re(y,l),n===\"NHWC\"?Je(g.outShape,y.shape):($(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),$(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{Je(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,\"prelu weights\",\"fused conv2d\")}let C=(_,E)=>{$(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,A,D,O]=E,M=gu(_,D,p);$(iu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=hf(A.shape,M,R,t,o),W=nT(A,M,R.shape,t,o),V=[L,W];if(O!=null){let G=xu(O,M);V.push(G)}return V},w={x:f,filter:m,bias:y,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((E,R,A)=>{let D=N.runKernel(Do,w,k);return A([R,E,D]),d&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:C}})(f,m):Cr((E,R,A,D)=>{let O=N.runKernel(Do,w,k);return D([R,E,O,A]),d&&(O=z(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(f,m,y)}var sT=T({fusedConv2d_:UH});function GH(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return N.runKernel(hp,u,c)}var aT=T({depthwiseConv2dNativeBackpropFilter_:GH});function HH(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=N.runKernel(gp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var iT=T({depthwiseConv2dNativeBackpropInput_:HH});function qH({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(bu(N.state.gradientDepth,p)===!1){let k=Gp(r,e,t,o,n,s,a);return i!=null&&(k=ge(k,i)),yu(k,p,u,c)}let l=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),f=l,d=!1;l.rank===3&&(d=!0,f=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),$(f.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(f.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),$(lr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Ot(\"fused depthwiseConv2d\",o,a);let h=uu(f.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Re(g,l),Je(h.outShape,g.shape));let y;u!=null&&(y=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,_)=>{$(iu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,A,D]=_,O=gu(k,A,p),M=iT(R.shape,O,E,t,o,s,a),L=aT(R,O,E.shape,t,o,s,a);if(D!=null){let W=xu(g,O);return[M,L,W]}return[M,L]},C={x:f,filter:m,bias:g,preluActivationWeights:y},w={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((_,E,R)=>{let A=N.runKernel(Po,C,w);return R([E,_,A]),d&&(A=z(A,[A.shape[1],A.shape[2],A.shape[3]])),{value:A,gradFunc:b}})(f,m):Cr((_,E,R,A)=>{let D=N.runKernel(Po,C,w);return A([E,_,D,R]),d&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(f,m,g)}var uT=T({fusedDepthwiseConv2d_:qH});function KH({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(bu(N.state.gradientDepth,s)===!1){let O=Xe(r,e,t,o);return n!=null&&(O=ge(O,n)),yu(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Re(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],f=o?u.shape[u.rank-2]:u.shape[u.rank-1],d=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=Ve(d),y=Ve(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=Je(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,f]),w=t?z(p,[g,c,m]):z(p,[g,m,c]),k=o?z(u,[y,f,l]):z(u,[y,l,f]),_;n!=null&&(_=v(n,\"bias\",\"fused matMul\"),[_]=Re(_,p),Je(C,_.shape));let E;a!=null&&(E=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,W,V,G]=M,q=gu(z(O,V.shape),V,s),H,j;if(!t&&!o?(H=Xe(q,W,!1,!0),j=Xe(L,q,!0,!1)):!t&&o?(H=Xe(q,W,!1,!1),j=Xe(q,L,!0,!1)):t&&!o?(H=Xe(W,q,!1,!0),j=Xe(L,q,!1,!1)):(H=Xe(W,q,!0,!0),j=Xe(q,L,!0,!0)),n!=null){let Y=xu(G,q);return[H,j,Y]}else return[H,j]},A={a:w,b:k,bias:_,preluActivationWeights:E},D={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Cr((M,L,W)=>{let V=N.runKernel(Fo,A,D);return W([M,L,V]),{value:z(V,C),gradFunc:R}})(w,k):Cr((M,L,W,V)=>{let G=N.runKernel(Fo,A,D);return V([M,L,G,W]),{value:z(G,C),gradFunc:R}})(w,k,_)}var pT=T({fusedMatMul_:KH});function jH(r){return hl(r,.54,.46)}var cT=T({hammingWindow_:jH});function XH(r){return hl(r,.5,.5)}var Xf=T({hannWindow_:XH});function YH(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Ue(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return N.runKernel(xn,c,l)}var mT=T({cropAndResize_:ZH});function JH(r){let e=v(r,\"image\",\"flipLeftRight\",\"float32\");$(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return N.runKernel(Sn,t,{})}var fT=T({flipLeftRight_:JH});function eq(r){let e=v(r,\"image\",\"grayscaleToRGB\"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,fi(e,n)}var dT=T({grayscaleToRGB_:eq});function tq(r,e,t=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return N.runKernel(es,s,a)}var hT=T({rotateWithOffset_:tq});function Vo(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(e.rank===1,()=>\"scores must be a 1D tensor\"),$(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function rq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=Vo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return N.runKernel(On,{boxes:s,scores:a},p)}var gT=T({nonMaxSuppression_:rq});function xT(r,e,t){let o=oq(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function oq(r,e,t){return sq(r,e,t||nq)}function nq(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Qf(r,e,t,o,n){return vC(r,e,t,o,n,0)}function Zf(r,e,t,o,n,s){return vC(r,e,t,o,n,0,!1,s,!0)}function Jf(r,e,t,o,n,s){return vC(r,e,t,o,n,s,!0)}function vC(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(yT);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:y,boxIndex:b,suppressBeginIndex:C}=g;if(y=C;--k){let _=aq(r,b,l[k]);if(_>=o){w=!0;break}if(g.score=g.score*iq(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,w||(g.score===y?(l.push(b),m.push(g.score)):g.score>n&&xT(u,g,yT))}let f=l.length,d=t-f;i&&d>0&&(l.push(...new Array(d).fill(0)),m.push(...new Array(d).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=f),h}function aq(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),f=(i-s)*(p-a),d=(l-u)*(m-c);if(f<=0||d<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),y=Math.min(i,l),b=Math.min(p,m),C=Math.max(y-h,0)*Math.max(b-g,0);return C/(f+d-C)}function iq(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yT(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function uq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=Vo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Qf(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),mr(l,\"int32\")}var bT=uq;function pq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Vo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=N.runKernel(Mn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CT=T({nonMaxSuppressionWithScore_:pq});async function cq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Vo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:f}=Jf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(m,\"int32\"),selectedScores:mr(f)}}var IT=cq;function lq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Vo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},f={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},d=N.runKernel(pa,m,f);return{selectedIndices:d[0],validOutputs:d[1]}}var wT=T({nonMaxSuppressionPadded_:lq});async function mq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Vo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,f]=await Promise.all([a.data(),i.data()]),{selectedIndices:d,validOutputs:h}=Zf(m,f,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(d,\"int32\"),validOutputs:be(h,\"int32\")}}var ST=mq;function fq(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),$(o===!1||t===!1,()=>\"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=N.runKernel(Un,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vT=T({resizeBilinear_:fq});function dq(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),$(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),$(o===!1||t===!1,()=>\"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=N.runKernel(Wn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kT=T({resizeNearestNeighbor_:dq});function hq(r,e=\"binary\",t=!1,o=.5){let n=v(r,\"image\",\"threshold\"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=oe(mr([o]),255),c,l,m,f;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(e===\"otsu\"||e===\"binary\",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=$a(n,[1,1,1],-1);let g=oe(c,s),y=oe(l,a),b=oe(m,i);f=ge(ge(g,y),b)}else f=r;if(e===\"otsu\"){let g=df(qe(Uf(f),\"int32\"),nr([]),256);u=gq(g,p)}let d=t?Hp(f,u):cu(f,u);return qe(oe(d,255),\"int32\")}function gq(r,e){let t=mr([-1]),o=mr([0]),n=mr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return N.runKernel(Jn,p,u)}var NT=T({transform_:xq});function yq(r,e,t){$(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),$(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`);let o=v(r,\"a\",\"bandPart\");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2);if(!(e<=s))throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`);if(!(t<=a))throw new Error(`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`);e<0&&(e=s),t<0&&(t=a);let i=z(di(0,s,1,\"int32\"),[-1,1]),p=di(0,a,1,\"int32\"),u=ke(i,p),c=lu(Hp(u,be(+e,\"int32\")),If(u,be(-t,\"int32\"))),l=Wr([s,a],o.dtype);return z(Ir(ko(z(o,[-1,s,a])).map(m=>os(c,m,l))),n)}var _T=T({bandPart_:yq});function bq(r){let e;if(Array.isArray(r)){e=!1,$(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=$a(r,r.shape[0],0).map(n=>jp(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return $T(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=ko(z(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$T(p,e);n.push(u),s.push(c)});let a=z(Ir(n,0),r.shape),i=z(Ir(s,0),r.shape);return[a,i]}}function $T(r,e=!1){return N.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=yf(t),s=zr(r),a=gi([[1]],[1,1]),i=zr(a),p=t>=o?o:t;for(let u=0;u{let f=Ue(s,[u,u],[t-u,1]),d=pu(f),h=Ue(s,[u,u],[1,1]),g=os(cu(h,0),gi([[-1]]),gi([[1]])),y=ke(h,oe(g,d)),b=We(f,y);b.shape[0]===1?i=zr(a):i=gt([a,Ue(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=yr(We(Xe(g,y),d)),w=Ue(s,[u,0],[t-u,o]),k=oe(C,i),_=Wp(i);if(u===0)s=ke(w,Xe(k,Xe(_,w)));else{let A=ke(w,Xe(k,Xe(_,w)));s=gt([Ue(s,[0,0],[u,o]),A],0)}let E=Wp(k),R=Ue(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=ke(R,Xe(Xe(R,i),E));else{let A=ke(R,Xe(Xe(R,i),E));n=gt([Ue(n,[0,0],[t,u]),A],1)}return[i,s,n]}),Ft([c,l,m])}return!e&&t>o&&(n=Ue(n,[0,0],[t,o]),s=Ue(s,[0,0],[o,o])),[n,s]})}var RT=T({qr_:Cq});var Et;(function(r){r[r.NONE=0]=\"NONE\",r[r.MEAN=1]=\"MEAN\",r[r.SUM=2]=\"SUM\",r[r.SUM_BY_NONZERO_WEIGHTS=3]=\"SUM_BY_NONZERO_WEIGHTS\"})(Et||(Et={}));function Iq(r,e,t=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:oe(o,n);if(t===Et.NONE)return s;if(t===Et.SUM)return tt(s);if(t===Et.MEAN){if(n==null)return mu(s);{let a=o.size/n.size,i=We(tt(s),tt(n));return a>1?We(i,be(a)):i}}if(t===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return We(tt(s),be(o.size));{let a=oe(n,zs(o.shape)),i=qe(tt(Ff(a,be(0))),\"float32\");return We(tt(s),i)}}throw Error(`Unknown reduction: ${t}`)}var sr=T({computeWeightedLoss_:Iq});function wq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),ht(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Qt(ke(n,s));return sr(i,a,o)}var AT=T({absoluteDifference_:wq});function Sq(r,e,t,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),ht(s.shape,a.shape,\"Error in cosineDistance: \");let p=be(1),u=ke(p,tt(oe(s,a),t,!0));return sr(u,i,n)}var FT=T({cosineDistance_:Sq});function vq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),ht(n.shape,s.shape,\"Error in hingeLoss: \");let i=be(1);n=ke(oe(be(2),n),i);let p=hi(ke(i,oe(n,s)));return sr(p,a,o)}var DT=T({hingeLoss_:vq});function kq(r,e,t,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),ht(s.shape,a.shape,\"Error in huberLoss: \");let p=be(o),u=Qt(ke(a,s)),c=Af(u,p),l=ke(u,c),m=ge(oe(be(.5),Zt(c)),oe(p,l));return sr(m,i,n)}var PT=T({huberLoss_:kq});function Tq(r,e,t,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),ht(s.shape,a.shape,\"Error in logLoss: \");let p=be(1),u=be(o),c=yr(oe(s,Ea(ge(a,u)))),l=oe(ke(p,s),Ea(ge(ke(p,a),u))),m=ke(c,l);return sr(m,i,n)}var OT=T({logLoss_:Tq});function Nq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),ht(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Hf(n,s);return sr(i,a,o)}var MT=T({meanSquaredError_:Nq});function _q(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");ht(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=hi(o),s=oe(o,t),a=Sf(Bo(yr(Qt(o))));return ge(ke(n,s),a)}function Eq(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(e,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"sigmoidCrossEntropy\")),ht(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=be(o),c=be(1),l=be(.5);s=ge(oe(s,ke(c,u)),oe(l,u))}let p=_q(s,a);return sr(p,i,n)}var LT=T({sigmoidCrossEntropy_:Eq});function $q(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Cr((n,s,a)=>{let p=Tf(s,[t],!0),u=ke(qe(s,\"float32\"),p);a([n,u]);let c=yr(oe(u,n));return{value:tt(c,[t]),gradFunc:(f,d)=>{let[h,g]=d,y=Ta(f.shape,[t]);return[oe(z(f,y),ke(qe(h,\"float32\"),Bo(g))),oe(z(f,y),ke(Bo(g),qe(h,\"float32\")))]}}})(r,e)}function Rq(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(e,\"logits\",\"softmaxCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"softmaxCrossEntropy\")),ht(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=be(o),c=be(1),l=be(s.shape[1]);s=ge(oe(s,ke(c,u)),We(u,l))}let p=$q(s,a);return sr(p,i,n)}var BT=T({softmaxCrossEntropy_:Rq});function Aq(r,e,t,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(e,\"values\",\"sparseFillEmptyRows\"),a=v(t,\"denseShape\",\"sparseFillEmptyRows\",\"int32\"),i=v(o,\"defaultValue\",\"sparseFillEmptyRows\",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=N.runKernel(Qa,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var VT=T({sparseFillEmptyRows_:Aq});function Fq(r,e,t){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(e,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(t,\"newShape\",\"sparseReshape\",\"int32\");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape\n ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=N.runKernel(ga,a);return{outputIndices:i[0],outputShape:i[1]}}var zT=T({sparseReshape_:Fq});function Dq(r,e,t){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(e,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentMean\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return N.runKernel(Za,a)}var WT=T({sparseSegmentMean_:Dq});function Pq(r,e,t){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(e,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentSum\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return N.runKernel(Ja,a)}var UT=T({sparseSegmentSum_:Pq});function Oq(r,e,t,o,n,s,a,i){let p=v(r,\"data\",\"stringNGrams\",\"string\");if(p.dtype!==\"string\")throw new Error(\"Data must be of datatype string\");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=N.runKernel(Ns,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GT=T({stringNGrams_:Oq});function Mq(r,e,t=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(e,\"delimiter\",\"stringSplit\",\"string\");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=N.runKernel(ri,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HT=T({stringSplit_:Mq});function Lq(r,e){let t=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:e};if(e<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:t};return N.runKernel(oi,n,o)}var qT=T({stringToHashBucketFast_:Lq});var Bq={fft:qp,ifft:hu,rfft:Kp,irfft:Gf},Vq={hammingWindow:cT,hannWindow:Xf,frame:Yf,stft:lT},zq={flipLeftRight:fT,grayscaleToRGB:dT,resizeNearestNeighbor:kT,resizeBilinear:vT,rotateWithOffset:hT,cropAndResize:mT,nonMaxSuppression:gT,nonMaxSuppressionAsync:bT,nonMaxSuppressionWithScore:CT,nonMaxSuppressionWithScoreAsync:IT,nonMaxSuppressionPadded:wT,nonMaxSuppressionPaddedAsync:ST,threshold:TT,transform:NT},Wq={bandPart:_T,gramSchmidt:ET,qr:RT},Uq={absoluteDifference:AT,computeWeightedLoss:sr,cosineDistance:FT,hingeLoss:DT,huberLoss:PT,logLoss:OT,meanSquaredError:MT,sigmoidCrossEntropy:LT,softmaxCrossEntropy:BT},Gq={sparseFillEmptyRows:VT,sparseReshape:zT,sparseSegmentMean:WT,sparseSegmentSum:UT},Hq={stringNGrams:GT,stringSplit:HT,stringToHashBucketFast:qT};var wr=class extends ll{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Ft(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return dC(e,t)}dispose(){this.iterations_!=null&&Ft(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:be(this.iterations_,\"int32\")}}async getWeights(){throw new Error(\"getWeights() is not implemented for this optimizer yet.\")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(wr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var xi=class extends wr{constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:Ne(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;Ne(()=>{let c=ge(oe(p,this.rho),oe(Zt(i),1-this.rho)),l=oe(We(Rr(ge(u,this.epsilon)),Rr(ge(p,this.epsilon))),i),m=ge(oe(u,this.rho),oe(Zt(l),1-this.rho));p.assign(c),u.assign(m);let f=ge(oe(l,-this.learningRate),s);s.assign(f)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ft(this.accumulatedGrads.map(e=>e.variable)),Ft(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};xi.className=\"Adadelta\";$r(xi);var yi=class extends wr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:Ne(()=>Bs(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;Ne(()=>{let p=ge(i,Zt(a));i.assign(p);let u=ge(oe(We(a,Rr(ge(p,N.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ft(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};yi.className=\"Adagrad\";$r(yi);var bi=class extends wr{constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ne(()=>{this.accBeta1=be(t).variable(),this.accBeta2=be(o).variable()}),n==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ne(()=>{let o=ke(1,this.accBeta1),n=ke(1,this.accBeta2);t.forEach((s,a)=>{let i=N.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ne(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:Ne(()=>Gt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=ge(oe(c,this.beta1),oe(u,1-this.beta1)),f=ge(oe(l,this.beta2),oe(Zt(u),1-this.beta2)),d=We(m,o),h=We(f,n);c.assign(m),l.assign(f);let g=ge(oe(We(d,ge(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(oe(this.accBeta1,this.beta1)),this.accBeta2.assign(oe(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ft(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ft(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),Ne(()=>{this.accBeta1.assign(Na(this.beta1,this.iterations_+1)),this.accBeta2.assign(Na(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};bi.className=\"Adam\";$r(bi);var Ci=class extends wr{constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ne(()=>{this.iteration=be(0).variable(),this.accBeta1=be(t).variable()}),n==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ne(()=>{let o=ke(1,this.accBeta1),n=We(-this.learningRate,ge(oe(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=N.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Gt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Gt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=ge(oe(c,this.beta1),oe(u,1-this.beta1)),f=oe(l,this.beta2),d=Qt(u),h=Rf(f,d);c.assign(m),l.assign(h);let g=ge(oe(We(n,o),We(m,ge(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(ge(this.iteration,1)),this.accBeta1.assign(oe(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ft(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ft(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error(\"getWeights() is not implemented for Adamax yet.\")}async setWeights(e){throw new Error(\"setWeights() is not implemented for Adamax yet.\")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Ci.className=\"Adamax\";$r(Ci);var Us=class extends wr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=N.registeredVariables[o];Ne(()=>{let i=ge(oe(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=So(be(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error(\"SGD optimizer does not have settable weights.\")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};Us.className=\"SGD\";$r(Us);var Ii=class extends Us{constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=be(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:Ne(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&Ne(()=>{let p,u=ge(oe(this.m,a),i);this.useNesterov?p=ge(oe(this.c,ge(i,oe(u,this.m))),s):p=ge(oe(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ft(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Ii.className=\"Momentum\";$r(Ii);var wi=class extends wr{constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=N.backend.epsilon()),e==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:Ne(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;Ne(()=>{let c=ge(oe(p,this.decay),oe(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=ge(oe(l,this.decay),oe(i,1-this.decay)),f=We(oe(i,this.learningRate),Rr(ke(c,ge(Zt(m),this.epsilon)))),d=ge(oe(u,this.momentum),f);p.assign(c),l.assign(m),u.assign(d);let h=ke(s,d);s.assign(h)}else{let l=ge(oe(p,this.decay),oe(Zt(i),1-this.decay)),m=ge(oe(u,this.momentum),We(oe(i,this.learningRate),Rr(ge(l,this.epsilon))));p.assign(l),u.assign(m);let f=ke(s,m);s.assign(f)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ft(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ft(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ft(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};wi.className=\"RMSProp\";$r(wi);var ns=class{static sgd(e){return new Us(e)}static momentum(e,t,o=!1){return new Ii(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new wi(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new bi(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new xi(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new Ci(e,t,o,n,s)}static adagrad(e,t=.1){return new yi(e,t)}};var pMe={sgd:ns.sgd,momentum:ns.momentum,adadelta:ns.adadelta,adagrad:ns.adagrad,rmsprop:ns.rmsprop,adamax:ns.adamax,adam:ns.adam};var qq=(()=>typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r())();function kC(){return new Promise(r=>qq(()=>r()))}var I={};Be(I,{ERF_A1:()=>pK,ERF_A2:()=>cK,ERF_A3:()=>lK,ERF_A4:()=>mK,ERF_A5:()=>fK,ERF_P:()=>uK,PARALLELIZE_THRESHOLD:()=>ed,RowPartitionType:()=>Gs,SELU_SCALE:()=>iK,SELU_SCALEALPHA:()=>aK,applyActivation:()=>yu,assertAndGetBroadcastShape:()=>Je,assertAxesAreInnerMostDims:()=>fG,assertParamsConsistent:()=>Kq,assignToTypedArray:()=>bK,axesAreInnerMostDims:()=>fC,calculateShapes:()=>kv,checkEinsumDimSizes:()=>kK,checkPadOnDimRoundingMode:()=>Ot,combineLocations:()=>$k,combineRaggedTensorToTensorShapes:()=>Xq,complexWithEvenIndex:()=>gK,complexWithOddIndex:()=>xK,computeConv2DInfo:()=>uu,computeConv3DInfo:()=>Zv,computeDefaultPad:()=>mC,computeDilation2DInfo:()=>dU,computeOptimalWindowSize:()=>Jq,computeOutAndReduceShapes:()=>mG,computeOutShape:()=>jq,computePool2DInfo:()=>lC,computePool3DInfo:()=>hU,convertConv2DDataFormat:()=>Jv,decodeEinsumEquation:()=>SK,eitherStridesOrDilationsAreOne:()=>lr,expandShapeToKeepDim:()=>Ta,exponent:()=>IK,exponents:()=>CK,fromStringArrayToUint8:()=>qK,fromUint8ToStringArray:()=>HK,getAxesPermutation:()=>dG,getBroadcastDims:()=>Iv,getComplexWithIndex:()=>yK,getEinsumComputePath:()=>TK,getEinsumPermutation:()=>vK,getFusedBiasGradient:()=>xu,getFusedDyActivation:()=>gu,getImageCenter:()=>eK,getInnerMostAxes:()=>gG,getPermuted:()=>rK,getRaggedRank:()=>Qq,getReductionAxes:()=>nf,getReshaped:()=>tK,getReshapedPermuted:()=>oK,getRowPartitionTypesHelper:()=>Yq,getSliceBeginCoords:()=>nK,getSliceSize:()=>sK,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>$K,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>RK,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>AK,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>PK,getSparseReshapeInputOutputMismatchErrorMessage:()=>MK,getSparseReshapeInputOutputMultipleErrorMessage:()=>OK,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>FK,getSparseReshapeNegativeOutputDimErrorMessage:()=>DK,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>zK,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>LK,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>BK,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>VK,getUndoAxesPermutation:()=>hG,isIdentityPermutation:()=>NK,log:()=>Sz,mergeRealAndImagArrays:()=>dK,prepareAndValidate:()=>vv,prepareSplitSize:()=>EK,segment_util:()=>NC,shouldFuse:()=>bu,slice_util:()=>et,splitRealAndImagArrays:()=>hK,tupleValuesAreOne:()=>iu,upcastType:()=>ct,validateDefaultValueShape:()=>Zq,validateInput:()=>uf,validateUpdateShape:()=>aC,warn:()=>Rs});function Kq(r,e){let t=r[0].length;r.forEach((n,s)=>{$(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),$(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function jq(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function Yq(r){let e={FIRST_DIM_SIZE:Gs.FIRST_DIM_SIZE,VALUE_ROWIDS:Gs.VALUE_ROWIDS,ROW_LENGTHS:Gs.ROW_LENGTHS,ROW_SPLITS:Gs.ROW_SPLITS,ROW_LIMITS:Gs.ROW_LIMITS,ROW_STARTS:Gs.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function Qq(r){return r.length===0?0:r[0]===Gs.FIRST_DIM_SIZE?r.length-1:r.length}function Zq(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var ed=30;function Jq(r){return r<=ed?r:sp(r,Math.floor(Math.sqrt(r)))}function eK(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function tK(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function oK(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",wK=/->/g,KT=\",\",jT=\"...\";function SK(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(wK,\"\").length)/TC.length;if(t<1)throw new Error(\"Equations without an arrow are not supported.\");if(t>1)throw new Error(`Equation must contain exactly one arrow (\"${TC}\").`);let[o,n]=r.split(TC);$(o.indexOf(jT)===-1,()=>`The ellipsis notation (\"${jT}\") is not supported yet.`);let s=o.split(KT),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error(\"Support for more than 2 input tensors is not implemented yet.\");let i=[];for(let m=0;md.indexOf(f)!==-1))throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`);i.indexOf(f)===-1&&i.push(f)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function kK(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function TK(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function _K(r,e){let t=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>\"There should be only one negative value in split array.\");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}$(r.shape[t]===e.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=e}return o}function $K(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function RK(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function AK(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function FK(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function DK(r,e){return`size ${r} must be non-negative, not ${e}`}function PK(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function OK(r,e){let t=Ve(r),o=Ve(e);return`Input to reshape is a SparseTensor with ${t}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function MK(r,e){let t=Ve(r),o=Ve(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function LK(){return\"segment ids must be >= 0\"}function BK(){return\"segment ids are not increasing\"}function VK(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function zK(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var NC={};Be(NC,{collectGatherOpShapeInfo:()=>GK,computeOutShape:()=>UK,segOpComputeOptimalWindowSize:()=>WK});function WK(r,e){let t=!1,o;for(r<=ed?(o=r,t=!0):o=sp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=sp(r,o+1);return o}function UK(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) (\n ${s}).`);if(tOp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function qK(r){return r.map(e=>si(e))}var Bt={};Be(Bt,{nonMaxSuppressionV3Impl:()=>Qf,nonMaxSuppressionV4Impl:()=>Zf,nonMaxSuppressionV5Impl:()=>Jf,whereImpl:()=>Kf});var KK=P();KK.registerFlag(\"KEEP_INTERMEDIATE_TENSORS\",()=>!1,r=>{r&&console.warn(\"Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.\")});var To;(function(r){r[r.DT_INVALID=0]=\"DT_INVALID\",r[r.DT_FLOAT=1]=\"DT_FLOAT\",r[r.DT_DOUBLE=2]=\"DT_DOUBLE\",r[r.DT_INT32=3]=\"DT_INT32\",r[r.DT_UINT8=4]=\"DT_UINT8\",r[r.DT_INT16=5]=\"DT_INT16\",r[r.DT_INT8=6]=\"DT_INT8\",r[r.DT_STRING=7]=\"DT_STRING\",r[r.DT_COMPLEX64=8]=\"DT_COMPLEX64\",r[r.DT_INT64=9]=\"DT_INT64\",r[r.DT_BOOL=10]=\"DT_BOOL\",r[r.DT_QINT8=11]=\"DT_QINT8\",r[r.DT_QUINT8=12]=\"DT_QUINT8\",r[r.DT_QINT32=13]=\"DT_QINT32\",r[r.DT_BFLOAT16=14]=\"DT_BFLOAT16\",r[r.DT_QINT16=15]=\"DT_QINT16\",r[r.DT_QUINT16=16]=\"DT_QUINT16\",r[r.DT_UINT16=17]=\"DT_UINT16\",r[r.DT_COMPLEX128=18]=\"DT_COMPLEX128\",r[r.DT_HALF=19]=\"DT_HALF\",r[r.DT_RESOURCE=20]=\"DT_RESOURCE\",r[r.DT_VARIANT=21]=\"DT_VARIANT\",r[r.DT_UINT32=22]=\"DT_UINT32\",r[r.DT_UINT64=23]=\"DT_UINT64\",r[r.DT_FLOAT_REF=101]=\"DT_FLOAT_REF\",r[r.DT_DOUBLE_REF=102]=\"DT_DOUBLE_REF\",r[r.DT_INT32_REF=103]=\"DT_INT32_REF\",r[r.DT_UINT8_REF=104]=\"DT_UINT8_REF\",r[r.DT_INT16_REF=105]=\"DT_INT16_REF\",r[r.DT_INT8_REF=106]=\"DT_INT8_REF\",r[r.DT_STRING_REF=107]=\"DT_STRING_REF\",r[r.DT_COMPLEX64_REF=108]=\"DT_COMPLEX64_REF\",r[r.DT_INT64_REF=109]=\"DT_INT64_REF\",r[r.DT_BOOL_REF=110]=\"DT_BOOL_REF\",r[r.DT_QINT8_REF=111]=\"DT_QINT8_REF\",r[r.DT_QUINT8_REF=112]=\"DT_QUINT8_REF\",r[r.DT_QINT32_REF=113]=\"DT_QINT32_REF\",r[r.DT_BFLOAT16_REF=114]=\"DT_BFLOAT16_REF\",r[r.DT_QINT16_REF=115]=\"DT_QINT16_REF\",r[r.DT_QUINT16_REF=116]=\"DT_QUINT16_REF\",r[r.DT_UINT16_REF=117]=\"DT_UINT16_REF\",r[r.DT_COMPLEX128_REF=118]=\"DT_COMPLEX128_REF\",r[r.DT_HALF_REF=119]=\"DT_HALF_REF\",r[r.DT_RESOURCE_REF=120]=\"DT_RESOURCE_REF\",r[r.DT_VARIANT_REF=121]=\"DT_VARIANT_REF\",r[r.DT_UINT32_REF=122]=\"DT_UINT32_REF\",r[r.DT_UINT64_REF=123]=\"DT_UINT64_REF\"})(To||(To={}));var XT;(function(r){let e;(function(t){t[t.LEGACY=0]=\"LEGACY\",t[t.V1=1]=\"V1\",t[t.V2=2]=\"V2\"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(XT||(XT={}));var EC={};function XK(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};EC[r]=t}function td(r){return EC[r]}function YK(r){delete EC[r]}function S(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd;if(s.type===\"tensor\")return Ht(e.inputNames[s.inputIndexStart],t,o,n);if(s.type===\"tensors\")return e.inputNames.slice(i,p).map(m=>Ht(m,t,o,n));let u=Ht(e.inputNames.slice(i)[0],t,o,n),c=u.dataSync();return s.type===\"number\"?c[0]:x.toNestedArray(u.shape,c)}let a=e.attrParams[r];return a&&a.value}function Ht(r,e,t,o){let[n,s]=Sr(r);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[rd(n,i)]);return a!==void 0?e[rd(n,a)][s]:void 0}function YT(r,e,t){return e[rd(r,t.currentContextId)]}function zo(r,e){let[t,o,n]=Sr(r);return[rd(t,e&&e.currentContextId),o,n]}function rd(r,e){return e?`${r}-${e}`:r}function Sr(r){let e=r.split(\":\");if(e.length===1)return[r,0,void 0];let t=e[0],o=e.length===3?e[1]:void 0,n=Number(e[e.length-1]);return[t,n,o]}function gl(r,e,t){let o=S(\"pad\",r,e,t);if(o===\"explicit\"){o=S(\"explicitPaddings\",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function ss(r){return r.kept?r:zr(r)}var $C={};Be($C,{json:()=>QK});var QK=[{tfOpName:\"Add\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AddV2\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AddN\",category:\"arithmetic\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}]},{tfOpName:\"BiasAdd\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"Sub\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"RealDiv\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Div\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"DivNoNan\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"FloorDiv\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Mul\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Maximum\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Minimum\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Pow\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SquaredDifference\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Mod\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"FloorMod\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var RC={};Be(RC,{json:()=>ZK});var ZK=[{tfOpName:\"Abs\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Acos\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Asin\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atan2\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Ceil\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ClipByValue\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"clipValueMin\",type:\"number\"},{start:2,name:\"clipValueMax\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Complex\",category:\"basic_math\",inputs:[{start:0,name:\"real\",type:\"tensor\"},{start:1,name:\"imag\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ComplexAbs\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cos\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cosh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Elu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Exp\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Floor\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Log\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Imag\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"outputType\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Neg\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Real\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"outputType\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Prelu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"alpha\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Relu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Relu6\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Selu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sigmoid\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sin\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sinh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sqrt\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Rsqrt\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Square\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Tan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Tanh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sign\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Round\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Expm1\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Log1p\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Reciprocal\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Softplus\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Asinh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Acosh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atanh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Erf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Prod\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axes\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LeakyRelu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"alpha\",name:\"alpha\",type:\"number\",defaultValue:.2},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsNan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var AC={};Be(AC,{json:()=>JK});var JK=[{tfOpName:\"EmptyTensorList\",category:\"control\",inputs:[{start:0,name:\"elementShape\",type:\"shape\"},{start:1,name:\"maxNumElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"LoopCond\",category:\"control\",inputs:[{start:0,name:\"pred\",type:\"tensor\"}]},{tfOpName:\"Switch\",category:\"control\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"pred\",type:\"tensor\"}]},{tfOpName:\"Merge\",category:\"control\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}]},{tfOpName:\"Enter\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"frame_name\",name:\"frameName\",type:\"string\"},{tfName:\"is_constant\",name:\"isConstant\",type:\"bool\"}]},{tfOpName:\"Exit\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"NextIteration\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayV3\",category:\"control\",inputs:[{start:0,name:\"size\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"dynamic_size\",name:\"dynamicSize\",type:\"bool\"},{tfName:\"clear_after_read\",name:\"clearAfterRead\",type:\"bool\"},{tfName:\"identical_element_shapes\",name:\"identicalElementShapes\",type:\"bool\"},{tfName:\"tensor_array_name\",name:\"name\",type:\"string\"}]},{tfOpName:\"TensorArrayWriteV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"tensor\",type:\"tensor\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayReadV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayGatherV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"}]},{tfOpName:\"TensorArrayScatterV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"tensor\",type:\"tensor\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TensorArrayConcatV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape_except0\",name:\"elementShapeExcept0\",type:\"shape\",notSupported:!0}]},{tfOpName:\"TensorArraySplitV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"tensor\",type:\"tensor\"},{start:2,name:\"lengths\",type:\"number[]\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TensorArraySizeV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"flowIn\",type:\"number\"}]},{tfOpName:\"TensorArrayCloseV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"}]},{tfOpName:\"StatelessIf\",category:\"control\",inputs:[{start:0,name:\"cond\",type:\"tensor\"},{start:1,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"then_branch\",name:\"thenBranch\",type:\"func\"},{tfName:\"else_branch\",name:\"elseBranch\",type:\"func\"}]},{tfOpName:\"If\",category:\"control\",inputs:[{start:0,name:\"cond\",type:\"tensor\"},{start:1,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"then_branch\",name:\"thenBranch\",type:\"func\"},{tfName:\"else_branch\",name:\"elseBranch\",type:\"func\"}]},{tfOpName:\"StatelessWhile\",category:\"control\",inputs:[{start:0,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"cond\",name:\"cond\",type:\"func\"},{tfName:\"body\",name:\"body\",type:\"func\"}]},{tfOpName:\"While\",category:\"control\",inputs:[{start:0,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"cond\",name:\"cond\",type:\"func\"},{tfName:\"body\",name:\"body\",type:\"func\"}]},{tfOpName:\"TensorListScatter\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListScatterV2\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"},{start:3,name:\"numElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListGather\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListGetItem\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListSetItem\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListReserve\",category:\"control\",inputs:[{start:0,name:\"elementShape\",type:\"shape\"},{start:1,name:\"numElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListFromTensor\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListStack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"},{tfName:\"num_elements\",name:\"numElements\",type:\"dtype\"}]},{tfOpName:\"TensorListSplit\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"},{start:2,name:\"lengths\",type:\"number[]\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListConcat\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}],attrs:[{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListConcatV2\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}],attrs:[{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListPopBack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListPushBack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListLength\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}]},{tfOpName:\"TensorListResize\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"}]}];var FC={};Be(FC,{json:()=>e6});var e6=[{tfOpName:\"AvgPool\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPool\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[],notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPoolWithArgmax\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"include_batch_in_index\",name:\"includeBatchInIndex\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AvgPool3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPool3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Conv1D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"stride\",name:\"stride\",type:\"number\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NWC\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"dilation\",name:\"dilation\",type:\"number\",defaultValue:1}]},{tfOpName:\"Conv2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"useCudnnOnGpu\",name:\"useCudnnOnGpu\",type:\"bool\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"_FusedConv2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"use_cudnn_on_gpu\",name:\"useCudnnOnGpu\",type:\"bool\",defaultValue:!0},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",defaultValue:[1,1,1,1]},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:1e-4},{tfName:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2}]},{tfOpName:\"Conv2DBackpropInput\",category:\"convolution\",inputs:[{start:2,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:0,name:\"outputShape\",type:\"number[]\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",notSupported:!0}]},{tfOpName:\"DepthwiseConv2d\",category:\"convolution\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"DepthwiseConv2dNative\",category:\"convolution\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"FusedDepthwiseConv2dNative\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",defaultValue:[1,1,1,1]},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]}]},{tfOpName:\"Conv3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"Dilation2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"rates\",name:\"dilations\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"}]}];var DC={};Be(DC,{json:()=>t6});var t6=[{tfOpName:\"Fill\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"},{start:1,name:\"value\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"LinSpace\",category:\"creation\",inputs:[{start:0,name:\"start\",type:\"number\"},{start:1,name:\"stop\",type:\"number\"},{start:2,name:\"num\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"OneHot\",category:\"creation\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"depth\",type:\"number\"},{start:2,name:\"onValue\",type:\"number\",defaultValue:1},{start:3,name:\"offValue\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Ones\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"OnesLike\",category:\"creation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"RandomStandardNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"RandomUniform\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\",defaultValue:0},{tfName:\"maxval\",name:\"maxval\",type:\"number\",defaultValue:1},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"Range\",category:\"creation\",inputs:[{start:0,name:\"start\",type:\"number\"},{start:1,name:\"stop\",type:\"number\"},{start:2,name:\"step\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"Tidx\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TruncatedNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"means\",name:\"mean\",type:\"number\",defaultValue:0},{tfName:\"stddev\",name:\"stdDev\",type:\"number\",defaultValue:1},{tfName:\"seed\",name:\"seed\",type:\"number\"},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"Zeros\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"ZerosLike\",category:\"creation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Multinomial\",category:\"creation\",inputs:[{start:0,name:\"logits\",type:\"tensor\"},{start:1,name:\"numSamples\",type:\"number\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\"},{tfName:\"seed2\",name:\"seed2\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\"},{tfName:\"output_dtype\",name:\"output_dtype\",type:\"dtype\"}]}];var PC={};Be(PC,{json:()=>r6});var r6=[{tfOpName:\"NonMaxSuppressionV2\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"}]},{tfOpName:\"NonMaxSuppressionV3\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"}]},{tfOpName:\"NonMaxSuppressionV4\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"T_threshold\",name:\"threshold\",type:\"dtype\",notSupported:!0},{tfName:\"pad_to_max_output_size\",name:\"padToMaxOutputSize\",type:\"bool\"}]},{tfOpName:\"NonMaxSuppressionV5\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"},{start:5,name:\"softNmsSigma\",type:\"number\"}]},{tfOpName:\"Where\",category:\"dynamic\",inputs:[{start:0,name:\"condition\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ListDiff\",category:\"dynamic\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var OC={};Be(OC,{json:()=>o6});var o6=[{tfOpName:\"LowerBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{tfOpName:\"TopKV2\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"k\",type:\"number\"}],attrs:[{tfName:\"sorted\",name:\"sorted\",type:\"bool\"}]},{tfOpName:\"UpperBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{tfOpName:\"Unique\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"UniqueV2\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]}];var MC={};Be(MC,{json:()=>n6});var n6=[{tfOpName:\"PlaceholderWithDefault\",category:\"graph\",inputs:[{start:0,name:\"default\",type:\"tensor\"}],attrs:[{tfName:\"shape\",name:\"shape\",type:\"shape\"},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Placeholder\",category:\"graph\",attrs:[{tfName:\"shape\",name:\"shape\",type:\"shape\"},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Const\",category:\"graph\"},{tfOpName:\"Identity\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"IdentityN\",category:\"graph\",inputs:[{start:0,end:0,name:\"x\",type:\"tensors\"}]},{tfOpName:\"Snapshot\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Rank\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Size\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Shape\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"ShapeN\",category:\"graph\",inputs:[{start:0,end:0,name:\"x\",type:\"tensors\"}]},{tfOpName:\"Print\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"data\",type:\"tensors\"}],attrs:[{tfName:\"message\",name:\"message\",type:\"string\"},{tfName:\"first_n\",name:\"firstN\",type:\"number\",notSupported:!0},{tfName:\"summarize\",name:\"summarize\",type:\"number\",defaultValue:3}]},{tfOpName:\"NoOp\",category:\"graph\",inputs:[]},{tfOpName:\"StopGradient\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"FakeQuantWithMinMaxVars\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"min\",name:\"min\",type:\"number\"},{tfName:\"max\",name:\"max\",type:\"number\"}]}];var LC={};Be(LC,{json:()=>s6});var s6=[{tfOpName:\"HashTable\",category:\"hash_table\",inputs:[],attrs:[{tfName:\"shared_name\",name:\"sharedName\",type:\"string\"},{tfName:\"use_node_name_sharing\",name:\"useNodeNameSharing\",type:\"bool\"},{tfName:\"key_dtype\",name:\"keyDType\",type:\"dtype\"},{tfName:\"value_dtype\",name:\"valueDType\",type:\"dtype\"}]},{tfOpName:\"HashTableV2\",category:\"hash_table\",inputs:[],attrs:[{tfName:\"shared_name\",name:\"sharedName\",type:\"string\"},{tfName:\"use_node_name_sharing\",name:\"useNodeNameSharing\",type:\"bool\"},{tfName:\"key_dtype\",name:\"keyDType\",type:\"dtype\"},{tfName:\"value_dtype\",name:\"valueDType\",type:\"dtype\"}]},{tfOpName:\"LookupTableImport\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableImportV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableFind\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableFindV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableSize\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"LookupTableSizeV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]}];var BC={};Be(BC,{json:()=>a6});var a6=[{tfOpName:\"ResizeBilinear\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"size\",type:\"number[]\"}],attrs:[{tfName:\"align_corners\",name:\"alignCorners\",type:\"bool\"},{tfName:\"half_pixel_centers\",name:\"halfPixelCenters\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ResizeNearestNeighbor\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"size\",type:\"number[]\"}],attrs:[{tfName:\"align_corners\",name:\"alignCorners\",type:\"bool\"},{tfName:\"half_pixel_centers\",name:\"halfPixelCenters\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"CropAndResize\",category:\"image\",inputs:[{start:0,name:\"image\",type:\"tensor\"},{start:1,name:\"boxes\",type:\"tensor\"},{start:2,name:\"boxInd\",type:\"tensor\"},{start:3,name:\"cropSize\",type:\"number[]\"}],attrs:[{tfName:\"method\",name:\"method\",type:\"string\"},{tfName:\"extrapolation_value\",name:\"extrapolationValue\",type:\"number\"}]},{tfOpName:\"ImageProjectiveTransformV3\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"transforms\",type:\"tensor\"},{start:2,name:\"outputShape\",type:\"number[]\"},{start:3,name:\"fillValue\",type:\"number\"}],attrs:[{tfName:\"interpolation\",name:\"interpolation\",type:\"string\"},{tfName:\"fill_mode\",name:\"fillMode\",type:\"string\"}]}];var VC={};Be(VC,{json:()=>i6});var i6=[{tfOpName:\"Equal\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"NotEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Greater\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"GreaterEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Less\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LessEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalAnd\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalNot\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalOr\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Select\",category:\"logical\",inputs:[{start:0,name:\"condition\",type:\"tensor\"},{start:1,name:\"a\",type:\"tensor\"},{start:2,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SelectV2\",category:\"logical\",inputs:[{start:0,name:\"condition\",type:\"tensor\"},{start:1,name:\"a\",type:\"tensor\"},{start:2,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var zC={};Be(zC,{json:()=>u6});var u6=[{tfOpName:\"_FusedMatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:1e-4},{tfName:\"transpose_a\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"transpose_b\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"transpose_a\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"transpose_b\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"BatchMatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"adj_x\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"adj_y\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"BatchMatMulV2\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"adj_x\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"adj_y\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Transpose\",category:\"matrices\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"perm\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Einsum\",category:\"matrices\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"equation\",name:\"equation\",type:\"string\"},{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]}];var WC={};Be(WC,{json:()=>p6});var p6=[{tfOpName:\"EuclideanNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",defaultValue:!1}]},{tfOpName:\"FusedBatchNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"FusedBatchNormV2\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"FusedBatchNormV3\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"LRN\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"depth_radius\",name:\"radius\",type:\"number\",defaultValue:5},{tfName:\"bias\",name:\"bias\",type:\"number\",defaultValue:1},{tfName:\"alpha\",name:\"alpha\",type:\"number\",defaultValue:1},{tfName:\"beta\",name:\"beta\",type:\"number\",defaultValue:.5}]},{tfOpName:\"Softmax\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"LogSoftmax\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"SparseToDense\",category:\"normalization\",inputs:[{start:0,name:\"sparseIndices\",type:\"tensor\"},{start:1,name:\"outputShape\",type:\"number[]\"},{start:2,name:\"sparseValues\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",defaultValue:!0,notSupported:!0}]}];var UC={};Be(UC,{json:()=>c6});var c6=[{tfOpName:\"Bincount\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"},{start:2,name:\"weights\",type:\"tensor\"}]},{tfOpName:\"DenseBincount\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"},{start:2,name:\"weights\",type:\"tensor\"}],attrs:[{tfName:\"binary_output\",name:\"binaryOutput\",type:\"bool\"}]},{tfOpName:\"Max\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Mean\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Min\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Sum\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"All\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Any\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"ArgMax\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"ArgMin\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"Prod\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Cumprod\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"exclusive\",name:\"exclusive\",type:\"bool\"},{tfName:\"reverse\",name:\"reverse\",type:\"bool\"}]},{tfOpName:\"Cumsum\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"exclusive\",name:\"exclusive\",type:\"bool\"},{tfName:\"reverse\",name:\"reverse\",type:\"bool\"}]}];var GC={};Be(GC,{json:()=>l6});var l6=[{tfOpName:\"ConcatV2\",category:\"slice_join\",inputs:[{start:0,end:-1,name:\"tensors\",type:\"tensors\"},{start:-1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2}]},{tfOpName:\"Concat\",category:\"slice_join\",inputs:[{start:1,end:0,name:\"tensors\",type:\"tensors\"},{start:0,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2}]},{tfOpName:\"GatherV2\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"axis\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"batch_dims\",name:\"batchDims\",type:\"number\",defaultValue:0}]},{tfOpName:\"Gather\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",notSupported:!0}]},{tfOpName:\"Reverse\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"dims\",type:\"bool[]\"}]},{tfOpName:\"ReverseV2\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}]},{tfOpName:\"Slice\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"begin\",type:\"number[]\"},{start:2,name:\"size\",type:\"number[]\"}]},{tfOpName:\"StridedSlice\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"begin\",type:\"number[]\"},{start:2,name:\"end\",type:\"number[]\"},{start:3,name:\"strides\",type:\"number[]\"}],attrs:[{tfName:\"begin_mask\",name:\"beginMask\",type:\"number\",defaultValue:0},{tfName:\"end_mask\",name:\"endMask\",type:\"number\",defaultValue:0},{tfName:\"new_axis_mask\",name:\"newAxisMask\",type:\"number\",defaultValue:0},{tfName:\"ellipsis_mask\",name:\"ellipsisMask\",type:\"number\",defaultValue:0},{tfName:\"shrink_axis_mask\",name:\"shrinkAxisMask\",type:\"number\",defaultValue:0}]},{tfOpName:\"Pack\",category:\"slice_join\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",defaultValue:0}]},{tfOpName:\"Unpack\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",defaultValue:0},{tfName:\"num\",name:\"num\",type:\"number\",defaultValue:0,notSupported:!0}]},{tfOpName:\"Tile\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"reps\",type:\"number[]\"}]},{tfOpName:\"Split\",category:\"slice_join\",inputs:[{start:0,name:\"axis\",type:\"number\",defaultValue:0},{start:1,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"num_split\",name:\"numOrSizeSplits\",type:\"number\",defaultValue:1}]},{tfOpName:\"SplitV\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"numOrSizeSplits\",type:\"number[]\"},{start:2,name:\"axis\",type:\"number\",defaultValue:0}]},{tfOpName:\"ScatterNd\",category:\"slice_join\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"shape\",type:\"number[]\"}]},{tfOpName:\"GatherNd\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"}]},{tfOpName:\"SparseToDense\",category:\"slice_join\",inputs:[{start:0,name:\"sparseIndices\",type:\"tensor\"},{start:1,name:\"outputShape\",type:\"number[]\"},{start:2,name:\"sparseValues\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",defaultValue:!1,notSupported:!0}]}];var HC={};Be(HC,{json:()=>m6});var m6=[{tfOpName:\"SparseFillEmptyRows\",category:\"sparse\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"denseShape\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}]},{tfOpName:\"SparseReshape\",category:\"sparse\",inputs:[{start:0,name:\"inputIndices\",type:\"tensor\"},{start:1,name:\"inputShape\",type:\"tensor\"},{start:2,name:\"newShape\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SparseSegmentMean\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]},{tfOpName:\"SparseSegmentSum\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]}];var qC={};Be(qC,{json:()=>f6});var f6=[{tfOpName:\"FFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"IFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"RFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"fft_length\",type:\"number\",notSupported:!0}]},{tfOpName:\"IRFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"fft_length\",type:\"number\",notSupported:!0}]}];var KC={};Be(KC,{json:()=>d6});var d6=[{tfOpName:\"StringNGrams\",category:\"string\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"dataSplits\",type:\"tensor\"}],attrs:[{tfName:\"separator\",name:\"separator\",type:\"string\"},{tfName:\"ngram_widths\",name:\"nGramWidths\",type:\"number[]\"},{tfName:\"left_pad\",name:\"leftPad\",type:\"string\"},{tfName:\"right_pad\",name:\"rightPad\",type:\"string\"},{tfName:\"pad_width\",name:\"padWidth\",type:\"number\"},{tfName:\"preserve_short_sequences\",name:\"preserveShortSequences\",type:\"bool\"}],outputs:[\"ngrams\",\"ngrams_splits\"]},{tfOpName:\"StringSplit\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"delimiter\",type:\"tensor\"}],attrs:[{tfName:\"skip_empty\",name:\"skipEmpty\",type:\"bool\"}],outputs:[\"indices\",\"values\",\"shape\"]},{tfOpName:\"StringToHashBucketFast\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"num_buckets\",name:\"numBuckets\",type:\"number\"}]}];var jC={};Be(jC,{json:()=>h6});var h6=[{tfOpName:\"Cast\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"SrcT\",name:\"sdtype\",type:\"dtype\",notSupported:!0},{tfName:\"DstT\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"ExpandDims\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"MirrorPad\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"}],attrs:[{tfName:\"mode\",name:\"mode\",type:\"string\"}]},{tfOpName:\"Pad\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"}],attrs:[{tfName:\"constant_value\",name:\"constantValue\",type:\"number\",defaultValue:0}]},{tfOpName:\"PadV2\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"},{start:2,name:\"constantValue\",type:\"number\",defaultValue:0}]},{tfOpName:\"Reshape\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"shape\",type:\"number[]\"}]},{tfOpName:\"Squeeze\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"axis\",tfDeprecatedName:\"squeeze_dims\",name:\"axis\",type:\"number[]\"}]},{tfOpName:\"SpaceToBatchND\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"blockShape\",type:\"number[]\"},{start:2,name:\"paddings\",type:\"number[]\"}]},{tfOpName:\"BatchToSpaceND\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"blockShape\",type:\"number[]\"},{start:2,name:\"crops\",type:\"number[]\"}]},{tfOpName:\"DepthToSpace\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"block_size\",name:\"blockSize\",type:\"number\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\"}]},{tfOpName:\"BroadcastTo\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"shape\",type:\"number[]\"}],attrs:[]},{tfOpName:\"BroadcastArgs\",category:\"transformation\",inputs:[{start:0,name:\"s0\",type:\"tensor\"},{start:1,name:\"s1\",type:\"tensor\"}],attrs:[]}];var xl=class{constructor(){let e=[$C,RC,AC,FC,DC,PC,OC,MC,LC,BC,VC,zC,WC,UC,GC,HC,qC,KC,jC],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith(\"Placeholder\")?n.push(h[g.name]):g.op===\"Const\"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((y,b)=>{let[C,,w]=zo(y),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(w);if(_!==-1){let E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=zo(h),y=i[g];y!=null&&(y.signatureKey=l[h],u.push(y))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=zo(h),y=i[g];y&&(y.signatureKey=c[h],p.push(y))}):p=n;let f={};e.library!=null&&e.library.function!=null&&(f=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let d={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:f};return a.length>0&&(d.initNodes=a),d}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=td(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=od(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=od(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=cd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=cd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=sd(e.attr,s.tfName,s.defaultValue||0),i===void 0&&!!s.tfDeprecatedName&&(i=sd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=pd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=pd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=nd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=nd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=md(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=md(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=ud(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ud(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=ld(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ld(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=ad(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ad(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=id(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=id(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=QT(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=QT(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=zo(l.name),f={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:XC(l.type),type:\"dtype\"}},children:[]};f.signatureKey=l.name,a.push(f),s[m]=f}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((f,d)=>{let[h,,g]=zo(f),y=s[h];if(y.outputs!=null){let b=y.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[d]=C}}m.inputs.push(y),y.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,f]=zo(u[l.name]),d=s[m];d!=null&&(d.defaultOutput=f,i.push(d))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function g6(r){let e=P().global;if(typeof e.atob!=\"undefined\")return e.atob(r);if(typeof Buffer!=\"undefined\")return new Buffer(r,\"base64\").toString();throw new Error(\"Unable to decode base64 in this environment. Missing built-in atob() or Buffer()\")}function ZT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):g6(r);return e?t:t.toLowerCase()}function od(r,e,t,o=!1){let n=r[e];return n!=null?ZT(n.s,o):t}function nd(r,e,t){let o=r[e];return o?o.b:t}function sd(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n==\"number\"?n:parseInt(n,10)}function XC(r){switch(typeof r==\"string\"&&(r=To[r]),r){case To.DT_FLOAT:case To.DT_HALF:return\"float32\";case To.DT_INT32:case To.DT_INT64:case To.DT_INT8:case To.DT_UINT8:return\"int32\";case To.DT_BOOL:return\"bool\";case To.DT_DOUBLE:return\"float32\";case To.DT_STRING:return\"string\";default:return null}}function QT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ad(r,e,t){let o=r[e];return o&&o.type?XC(o.type):t}function id(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>XC(n)):t}function JT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function ud(r,e,t){let o=r[e];return o&&o.shape?JT(o.shape):t}function pd(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):t}function cd(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>ZT(s,o)):t}function ld(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>JT(n)):t}function md(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var fd=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Ht(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Ht(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return sd(this.node.rawAttrs,e,t);if(o.s!=null)return od(this.node.rawAttrs,e,t);if(o.b!=null)return nd(this.node.rawAttrs,e,t);if(o.shape!=null)return ud(this.node.rawAttrs,e,t);if(o.type!=null)return ad(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return pd(this.node.rawAttrs,e,t);if(o.list.s!=null)return cd(this.node.rawAttrs,e,t);if(o.list.shape!=null)return ld(this.node.rawAttrs,e,t);if(o.list.b!=null)return md(this.node.rawAttrs,e,t);if(o.list.type!=null)return id(this.node.rawAttrs,e,t)}return t}};var rt={};Be(rt,{OP_SCOPE_SUFFIX:()=>Ub,abs:()=>Qt,acos:()=>Vv,acosh:()=>zv,add:()=>ge,addN:()=>Wv,all:()=>Uv,any:()=>Gv,argMax:()=>Hv,argMin:()=>qv,asin:()=>Kv,asinh:()=>jv,atan:()=>Xv,atan2:()=>Yv,atanh:()=>Qv,avgPool:()=>mf,avgPool3d:()=>ek,basicLSTMCell:()=>tk,batchNorm:()=>li,batchNorm2d:()=>ok,batchNorm3d:()=>nk,batchNorm4d:()=>sk,batchToSpaceND:()=>ff,bincount:()=>df,booleanMaskAsync:()=>_H,broadcastArgs:()=>ak,broadcastTo:()=>Ls,buffer:()=>ne,cast:()=>qe,ceil:()=>ik,clipByValue:()=>uk,clone:()=>zr,complex:()=>Er,concat:()=>gt,concat1d:()=>pk,concat2d:()=>ck,concat3d:()=>lk,concat4d:()=>mk,conv1d:()=>fk,conv2d:()=>mi,conv2dTranspose:()=>dk,conv3d:()=>hk,conv3dTranspose:()=>xk,cos:()=>yk,cosh:()=>bk,cosineWindow:()=>hl,cumprod:()=>Ck,cumsum:()=>Ik,denseBincount:()=>wk,depthToSpace:()=>Sk,depthwiseConv2d:()=>Gp,diag:()=>vk,dilation2d:()=>kk,div:()=>We,divNoNan:()=>Tk,dot:()=>Nk,dropout:()=>BH,einsum:()=>_k,elu:()=>xf,enclosingPowerOfTwo:()=>wC,equal:()=>gf,erf:()=>Ek,euclideanNorm:()=>Ak,exp:()=>Bo,expandDims:()=>_a,expm1:()=>Fk,eye:()=>yf,fft:()=>qp,fill:()=>Bs,floor:()=>bf,floorDiv:()=>cf,fused:()=>SC,gather:()=>Cf,gatherND:()=>MH,greater:()=>cu,greaterEqual:()=>If,ifft:()=>hu,imag:()=>ci,image:()=>zq,inTopKAsync:()=>zH,irfft:()=>Gf,isFinite:()=>Dk,isInf:()=>Pk,isNaN:()=>Ok,leakyRelu:()=>wf,less:()=>Mk,lessEqual:()=>Hp,linalg:()=>Wq,linspace:()=>Lk,localResponseNormalization:()=>Bk,log:()=>Ea,log1p:()=>Sf,logSigmoid:()=>Vk,logSoftmax:()=>zk,logSumExp:()=>Tf,logicalAnd:()=>lu,logicalNot:()=>Nf,logicalOr:()=>_f,logicalXor:()=>Wk,losses:()=>Uq,lowerBound:()=>Uk,matMul:()=>Xe,max:()=>Vs,maxPool:()=>$f,maxPool3d:()=>Gk,maxPoolWithArgmax:()=>Hk,maximum:()=>Rf,mean:()=>mu,meshgrid:()=>qk,min:()=>fl,minimum:()=>Af,mirrorPad:()=>Kk,mod:()=>jk,moments:()=>Xk,movingAverage:()=>$H,mul:()=>oe,multiRNNCell:()=>Yk,multinomial:()=>Qk,neg:()=>yr,norm:()=>pu,notEqual:()=>Ff,oneHot:()=>pl,ones:()=>zs,onesLike:()=>Zk,op:()=>T,outerProduct:()=>Jk,pad:()=>Ws,pad1d:()=>e1,pad2d:()=>t1,pad3d:()=>r1,pad4d:()=>o1,pool:()=>n1,pow:()=>Na,prelu:()=>Pf,print:()=>ef,prod:()=>s1,raggedGather:()=>a1,raggedRange:()=>i1,raggedTensorToTensor:()=>u1,rand:()=>p1,randomGamma:()=>T1,randomNormal:()=>Vf,randomStandardNormal:()=>N1,randomUniform:()=>zf,range:()=>di,real:()=>ka,reciprocal:()=>_1,relu:()=>hi,relu6:()=>Wf,reshape:()=>z,reverse:()=>vo,reverse1d:()=>E1,reverse2d:()=>$1,reverse3d:()=>R1,reverse4d:()=>A1,rfft:()=>Kp,round:()=>Uf,rsqrt:()=>F1,scalar:()=>be,scatterND:()=>AH,searchSorted:()=>dl,selu:()=>D1,separableConv2d:()=>P1,setdiff1dAsync:()=>O1,sigmoid:()=>Ms,sign:()=>M1,signal:()=>Vq,sin:()=>L1,sinh:()=>B1,slice:()=>Ue,slice1d:()=>V1,slice2d:()=>z1,slice3d:()=>W1,slice4d:()=>U1,softmax:()=>G1,softplus:()=>kf,spaceToBatchND:()=>Df,sparse:()=>Gq,sparseToDense:()=>PH,spectral:()=>Bq,split:()=>$a,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Hf,squeeze:()=>jp,stack:()=>Ir,step:()=>qf,stridedSlice:()=>H1,string:()=>Hq,sub:()=>ke,sum:()=>tt,tan:()=>q1,tanh:()=>ml,tensor:()=>nr,tensor1d:()=>mr,tensor2d:()=>gi,tensor3d:()=>sf,tensor4d:()=>K1,tensor5d:()=>j1,tensor6d:()=>X1,tile:()=>fi,topk:()=>Y1,transpose:()=>Wp,truncatedNormal:()=>Q1,unique:()=>Z1,unsortedSegmentSum:()=>J1,unstack:()=>ko,upperBound:()=>eT,variable:()=>tT,where:()=>os,whereAsync:()=>jf,zeros:()=>Wr,zerosLike:()=>Gt});var eN=(r,e,t,o=rt)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"AddN\":return[o.addN(S(\"tensors\",r,e,t))];case\"FloorMod\":case\"Mod\":return[o.mod(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Mul\":return[o.mul(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"RealDiv\":case\"Div\":return[o.div(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"DivNoNan\":return[o.divNoNan(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"FloorDiv\":return[o.floorDiv(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Sub\":return[o.sub(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Minimum\":return[o.minimum(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Maximum\":return[o.maximum(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Pow\":return[o.pow(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"SquaredDifference\":return[o.squaredDifference(S(\"a\",r,e,t),S(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var tN=(r,e,t,o=rt)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(S(\"x\",r,e,t))];case\"Acos\":return[o.acos(S(\"x\",r,e,t))];case\"Acosh\":return[o.acosh(S(\"x\",r,e,t))];case\"Asin\":return[o.asin(S(\"x\",r,e,t))];case\"Asinh\":return[o.asinh(S(\"x\",r,e,t))];case\"Atan\":return[o.atan(S(\"x\",r,e,t))];case\"Atan2\":return[o.atan2(S(\"x\",r,e,t),S(\"y\",r,e,t))];case\"Atanh\":return[o.atanh(S(\"x\",r,e,t))];case\"Ceil\":return[o.ceil(S(\"x\",r,e,t))];case\"Complex\":return[o.complex(S(\"real\",r,e,t),S(\"imag\",r,e,t))];case\"Cos\":return[o.cos(S(\"x\",r,e,t))];case\"Cosh\":return[o.cosh(S(\"x\",r,e,t))];case\"Elu\":return[o.elu(S(\"x\",r,e,t))];case\"Erf\":return[o.erf(S(\"x\",r,e,t))];case\"Exp\":return[o.exp(S(\"x\",r,e,t))];case\"Expm1\":return[o.expm1(S(\"x\",r,e,t))];case\"Floor\":return[o.floor(S(\"x\",r,e,t))];case\"Log\":return[o.log(S(\"x\",r,e,t))];case\"Log1p\":return[o.log1p(S(\"x\",r,e,t))];case\"Imag\":return[o.imag(S(\"x\",r,e,t))];case\"Neg\":return[o.neg(S(\"x\",r,e,t))];case\"Reciprocal\":return[o.reciprocal(S(\"x\",r,e,t))];case\"Real\":return[o.real(S(\"x\",r,e,t))];case\"Relu\":return[o.relu(S(\"x\",r,e,t))];case\"Round\":return[o.round(S(\"x\",r,e,t))];case\"Selu\":return[o.selu(S(\"x\",r,e,t))];case\"Sigmoid\":return[o.sigmoid(S(\"x\",r,e,t))];case\"Sin\":return[o.sin(S(\"x\",r,e,t))];case\"Sign\":return[o.sign(S(\"x\",r,e,t))];case\"Sinh\":return[o.sinh(S(\"x\",r,e,t))];case\"Softplus\":return[o.softplus(S(\"x\",r,e,t))];case\"Sqrt\":return[o.sqrt(S(\"x\",r,e,t))];case\"Square\":return[o.square(S(\"x\",r,e,t))];case\"Tanh\":return[o.tanh(S(\"x\",r,e,t))];case\"Tan\":return[o.tan(S(\"x\",r,e,t))];case\"ClipByValue\":return[o.clipByValue(S(\"x\",r,e,t),S(\"clipValueMin\",r,e,t),S(\"clipValueMax\",r,e,t))];case\"Relu6\":return[o.relu6(S(\"x\",r,e,t))];case\"Rsqrt\":return[o.rsqrt(Ht(r.inputNames[0],e,t))];case\"Prod\":return[o.prod(S(\"x\",r,e,t),S(\"axes\",r,e,t))];case\"LeakyRelu\":return[o.leakyRelu(S(\"x\",r,e,t),S(\"alpha\",r,e,t))];case\"Prelu\":return[o.prelu(S(\"x\",r,e,t),S(\"alpha\",r,e,t))];case\"IsNan\":return[o.isNaN(Ht(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Ur(r,e,t=\"\"){if(!(typeof r==\"number\"||typeof e==\"number\")){x.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function rN(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function Xp(r,e,t){let o=dd(r,t),n=!rN(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=dd(s.shape,o)}),!rN(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function dd(r,e){if(typeof r==\"number\")return e;if(typeof e==\"number\")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var hd=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=be(0),So(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),Ur(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,So(t),o.written=!0,this.tensors[e]=o}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((o,n)=>this.write(o,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,ko(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:t.size/o,a=[];Ne(()=>{t=z(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Ur(t,s.shape,\"TensorList shape mismatch: \"),So(s)}),this.idTensor=be(0),this.maxNumElements=n,So(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Ra([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Ur(e,this.elementShape,\"TensorList shape mismatch: \");let n=Xp(this.elementShape,this.tensors,e);return Ne(()=>{let s=this.tensors.map(a=>z(a,n));return Ir(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error(\"Trying to pop from an empty list.\");let o=Xp(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Ur(n.shape,e,\"TensorList shape mismatch: \"),z(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Ur(e.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");So(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new Ra([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);Ur(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=Xp(this.elementShape,this.tensors,t);return z(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);Ur(this.elementShape,t.shape,\"TensorList shape mismatch: \"),So(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Ur(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=Xp(this.elementShape,this.tensors,o);return e.length===0?nr([],[0].concat(n)):Ne(()=>{let s=e.map(a=>z(this.tensors[a],n));return Ir(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Ur(this.elementShape,t,\"TensorList shape mismatch: \");let o=Xp(this.elementShape,this.tensors,t);return this.size()===0?nr([],[0].concat(o)):Ne(()=>{let n=this.tensors.map(s=>z(s,o));return gt(n,0)})}};function oN(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Ur(n,e,\"TensorList shape mismatch: \");let s=ko(r);return new Ra(s,e,o)}function nN(r,e,t,o){return new Ra([],r,e,o)}function sN(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new Ra([],t,r.dtype,o),a=ko(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function aN(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=dd(s,t),i=o===0?0:r.size/o,p=Ne(()=>{let c=[];r=z(r,[1,o,i]);for(let l=0;l{switch(r.op){case\"If\":case\"StatelessIf\":{let o=S(\"thenBranch\",r,e,t),n=S(\"elseBranch\",r,e,t),s=S(\"cond\",r,e,t),a=S(\"args\",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=S(\"body\",r,e,t),n=S(\"cond\",r,e,t),s=S(\"args\",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(f=>f.id);c.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&l.indexOf(f.id)===-1&&f.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&l.indexOf(f.id)===-1&&f.dispose()})}return u}case\"LoopCond\":{let o=S(\"pred\",r,e,t);return[ss(o)]}case\"Switch\":{let o=S(\"pred\",r,e,t),n=S(\"data\",r,e,t);return n.kept||(n=ss(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Ht(n,e,t)!==void 0);if(o){let n=Ht(o,e,t);return[ss(n)]}return}case\"Enter\":{let o=S(\"frameName\",r,e,t),n=S(\"tensor\",r,e,t);return t.enterFrame(o),[ss(n)]}case\"Exit\":{let o=S(\"tensor\",r,e,t);return t.exitFrame(),[ss(o)]}case\"NextIteration\":{let o=S(\"tensor\",r,e,t);return t.nextIteration(),[ss(o)]}case\"TensorArrayV3\":{let o=S(\"size\",r,e,t),n=S(\"dtype\",r,e,t),s=S(\"elementShape\",r,e,t),a=S(\"dynamicSize\",r,e,t),i=S(\"clearAfterRead\",r,e,t),p=S(\"identicalElementShapes\",r,e,t),u=S(\"name\",r,e,t),c=new hd(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,be(1)]}case\"TensorArrayWriteV3\":{let o=S(\"tensorArrayId\",r,e,t),n=S(\"index\",r,e,t),s=S(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=S(\"tensorArrayId\",r,e,t),n=S(\"index\",r,e,t);return[t.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=S(\"tensorArrayId\",r,e,t),n=S(\"indices\",r,e,t),s=S(\"dtype\",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=S(\"tensorArrayId\",r,e,t),n=S(\"indices\",r,e,t),s=S(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=S(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id),s=S(\"dtype\",r,e,t);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=S(\"tensorArrayId\",r,e,t),n=S(\"tensor\",r,e,t),s=S(\"lengths\",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=S(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return[be(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=S(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=S(\"tensorListId\",r,e,t),n=S(\"index\",r,e,t),s=S(\"tensor\",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=S(\"tensorListId\",r,e,t),n=S(\"index\",r,e,t),s=S(\"elementShape\",r,e,t),a=S(\"elementDType\",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=S(\"indices\",r,e,t),n=S(\"tensor\",r,e,t),s=S(\"elementShape\",r,e,t),a=S(\"numElements\",r,e,t),i=sN(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=S(\"elementShape\",r,e,t),n=S(\"elementDType\",r,e,t),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=S(s,r,e,t),i=r.op===\"TensorListReserve\"?-1:a,p=nN(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=S(\"tensorListId\",r,e,t),n=S(\"indices\",r,e,t),s=S(\"elementShape\",r,e,t),a=S(\"elementDType\",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=S(\"tensorListId\",r,e,t),n=S(\"elementShape\",r,e,t),s=S(\"elementDType\",r,e,t),a=S(\"numElements\",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=S(\"tensor\",r,e,t),n=S(\"elementShape\",r,e,t),s=S(\"elementDType\",r,e,t),a=oN(o,n,s);return t.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=S(\"tensorListId\",r,e,t),n=t.getTensorList(o.id),s=S(\"dtype\",r,e,t),a=S(\"elementShape\",r,e,t);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=S(\"tensorListId\",r,e,t),n=S(\"tensor\",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=S(\"tensorListId\",r,e,t),n=S(\"elementShape\",r,e,t),s=S(\"elementDType\",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=S(\"tensor\",r,e,t),n=S(\"elementShape\",r,e,t),s=S(\"lengths\",r,e,t),a=aN(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=S(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[be(n.size(),\"int32\")]}case\"TensorListResize\":{let o=S(\"tensorListId\",r,e,t),n=S(\"size\",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function uN(r,e,t){let[o,n]=S(\"fusedOps\",r,e,t),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=S(\"numArgs\",r,e,t);if(s){if(i&&u!==2)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&s&&u!==1)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.\")}if(p)throw new Error(\"FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported\");let c=S(\"strides\",r,e,t),l=gl(r,e,t),m=S(\"dataFormat\",r,e,t).toUpperCase(),f=S(\"dilations\",r,e,t),[d,h]=S(\"args\",r,e,t);a&&(h=d,d=void 0);let g=S(\"leakyreluAlpha\",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:f,biasArg:d,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var pN=(r,e,t,o=rt)=>{switch(r.op){case\"Conv1D\":{let n=S(\"stride\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"dataFormat\",r,e,t).toUpperCase(),i=S(\"dilation\",r,e,t);return[o.conv1d(S(\"x\",r,e,t),S(\"filter\",r,e,t),n,s,a,i)]}case\"Conv2D\":{let n=S(\"strides\",r,e,t),s=gl(r,e,t),a=S(\"dataFormat\",r,e,t).toUpperCase(),i=S(\"dilations\",r,e,t);return[o.conv2d(S(\"x\",r,e,t),S(\"filter\",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case\"_FusedConv2D\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=uN(r,e,t);return[o.fused.conv2d({x:S(\"x\",r,e,t),filter:S(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"FusedDepthwiseConv2dNative\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=uN(r,e,t);return[o.fused.depthwiseConv2d({x:S(\"x\",r,e,t),filter:S(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"Conv2DBackpropInput\":case\"Conv2dTranspose\":{let n=S(\"outputShape\",r,e,t),s=S(\"strides\",r,e,t),a=gl(r,e,t);return[o.conv2dTranspose(S(\"x\",r,e,t),S(\"filter\",r,e,t),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=S(\"strides\",r,e,t),s=gl(r,e,t),a=S(\"dilations\",r,e,t),i=S(\"dataFormat\",r,e,t).toUpperCase();return[o.depthwiseConv2d(S(\"input\",r,e,t),S(\"filter\",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"dataFormat\",r,e,t).toUpperCase(),i=S(\"dilations\",r,e,t);return[o.conv3d(S(\"x\",r,e,t),S(\"filter\",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"kernelSize\",r,e,t);return[o.avgPool(S(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"kernelSize\",r,e,t);return[o.maxPool(S(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"kernelSize\",r,e,t),i=S(\"includeBatchInIndex\",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(S(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"kernelSize\",r,e,t);return[o.avgPool3d(S(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"kernelSize\",r,e,t);return[o.maxPool3d(S(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=S(\"strides\",r,e,t),s=S(\"pad\",r,e,t),a=S(\"dilations\",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(S(\"x\",r,e,t),S(\"filter\",r,e,t),[i,p],s,[u,c],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var cN=(r,e,t,o=rt)=>{switch(r.op){case\"Fill\":{let n=S(\"shape\",r,e,t),s=S(\"dtype\",r,e,t),a=S(\"value\",r,e,t);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=S(\"start\",r,e,t),s=S(\"stop\",r,e,t),a=S(\"num\",r,e,t);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=S(\"logits\",r,e,t),s=S(\"numSamples\",r,e,t),a=S(\"seed\",r,e,t);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=S(\"indices\",r,e,t),s=S(\"depth\",r,e,t),a=S(\"onValue\",r,e,t),i=S(\"offValue\",r,e,t),p=S(\"dtype\",r,e,t);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(S(\"shape\",r,e,t),S(\"dtype\",r,e,t))];case\"OnesLike\":return[o.onesLike(S(\"x\",r,e,t))];case\"RandomStandardNormal\":return[o.randomStandardNormal(S(\"shape\",r,e,t),S(\"dtype\",r,e,t),S(\"seed\",r,e,t))];case\"RandomUniform\":return[o.randomUniform(S(\"shape\",r,e,t),S(\"minval\",r,e,t),S(\"maxval\",r,e,t),S(\"dtype\",r,e,t))];case\"Range\":{let n=S(\"start\",r,e,t),s=S(\"stop\",r,e,t),a=S(\"step\",r,e,t);return[o.range(n,s,a,S(\"dtype\",r,e,t))]}case\"TruncatedNormal\":{let n=S(\"shape\",r,e,t),s=S(\"mean\",r,e,t),a=S(\"stdDev\",r,e,t),i=S(\"seed\",r,e,t);return[o.truncatedNormal(n,s,a,S(\"dtype\",r,e,t),i)]}case\"Zeros\":return[o.zeros(S(\"shape\",r,e,t),S(\"dtype\",r,e,t))];case\"ZerosLike\":return[o.zerosLike(S(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function YC(r,e,t){let o=S(\"boxes\",r,e,t),n=S(\"scores\",r,e,t),s=S(\"maxOutputSize\",r,e,t),a=S(\"iouThreshold\",r,e,t),i=S(\"scoreThreshold\",r,e,t),p=S(\"softNmsSigma\",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var lN=async(r,e,t,o,n=rt)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=YC(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case\"NonMaxSuppressionV4\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=YC(r,e,t),c=S(\"padToMaxOutputSize\",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case\"NonMaxSuppressionV3\":case\"NonMaxSuppressionV2\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=YC(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(S(\"condition\",r,e,t),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(S(\"x\",r,e,t),S(\"y\",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var mN=(r,e,t,o=rt)=>{switch(r.op){case\"LowerBound\":{let n=S(\"sortedSequence\",r,e,t),s=S(\"values\",r,e,t);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=S(\"x\",r,e,t),s=S(\"k\",r,e,t),a=S(\"sorted\",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=S(\"sortedSequence\",r,e,t),s=S(\"values\",r,e,t);return[o.upperBound(n,s)]}case\"Unique\":{let n=S(\"x\",r,e,t),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=S(\"x\",r,e,t),s=S(\"axis\",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var fN=(r,e,t,o=rt)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=S(\"default\",r,e,t);return[Ht(r.name,e,t)||n];case\"Placeholder\":return[Ht(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=S(\"x\",r,e,t);return[ss(c)]}case\"IdentityN\":return S(\"x\",r,e,t).map(c=>ss(c));case\"Snapshot\":let s=S(\"x\",r,e,t);return[ss(s)];case\"Shape\":return[o.tensor1d(S(\"x\",r,e,t).shape,\"int32\")];case\"ShapeN\":return S(\"x\",r,e,t).map(c=>o.tensor1d(c.shape));case\"Size\":return[o.scalar(S(\"x\",r,e,t).size,\"int32\")];case\"Rank\":return[o.scalar(S(\"x\",r,e,t).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=S(\"x\",r,e,t),i=S(\"data\",r,e,t),p=S(\"message\",r,e,t),u=S(\"summarize\",r,e,t);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return be(this.size(),\"int32\")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Ne(()=>{let n=ko(t),s=o.length,a=n.length;x.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case\"HashTable\":case\"HashTableV2\":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=S(\"keyDType\",r,e,t),a=S(\"valueDType\",r,e,t),i=new gd(s,a);return o.addHashTable(r.name,i),[i.handle]}}case\"LookupTableImport\":case\"LookupTableImportV2\":{let n=S(\"tableHandle\",r,e,t,o),s=S(\"keys\",r,e,t),a=S(\"values\",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=S(\"tableHandle\",r,e,t,o),s=S(\"keys\",r,e,t),a=S(\"defaultValue\",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=S(\"tableHandle\",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var hN=(r,e,t,o=rt)=>{switch(r.op){case\"ResizeBilinear\":{let n=S(\"images\",r,e,t),s=S(\"size\",r,e,t),a=S(\"alignCorners\",r,e,t),i=S(\"halfPixelCenters\",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=S(\"images\",r,e,t),s=S(\"size\",r,e,t),a=S(\"alignCorners\",r,e,t),i=S(\"halfPixelCenters\",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=S(\"image\",r,e,t),s=S(\"boxes\",r,e,t),a=S(\"boxInd\",r,e,t),i=S(\"cropSize\",r,e,t),p=S(\"method\",r,e,t),u=S(\"extrapolationValue\",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=S(\"images\",r,e,t),s=S(\"transforms\",r,e,t),a=S(\"outputShape\",r,e,t),i=S(\"fillValue\",r,e,t),p=S(\"interpolation\",r,e,t),u=S(\"fillMode\",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var gN=(r,e,t,o=rt)=>{switch(r.op){case\"Equal\":return[o.equal(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"NotEqual\":return[o.notEqual(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Greater\":return[o.greater(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"GreaterEqual\":return[o.greaterEqual(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Less\":return[o.less(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"LessEqual\":return[o.lessEqual(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"LogicalAnd\":return[o.logicalAnd(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"LogicalNot\":return[o.logicalNot(S(\"a\",r,e,t))];case\"LogicalOr\":return[o.logicalOr(S(\"a\",r,e,t),S(\"b\",r,e,t))];case\"Select\":case\"SelectV2\":return[o.where(S(\"condition\",r,e,t),S(\"a\",r,e,t),S(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var xN=(r,e,t,o=rt)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(S(\"a\",r,e,t),S(\"b\",r,e,t),S(\"transposeA\",r,e,t),S(\"transposeB\",r,e,t))];case\"Einsum\":return[o.einsum(S(\"equation\",r,e,t),...S(\"tensors\",r,e,t))];case\"Transpose\":return[o.transpose(S(\"x\",r,e,t),S(\"perm\",r,e,t))];case\"_FusedMatMul\":let[n,s]=S(\"fusedOps\",r,e,t),a=n===\"biasadd\",i=s===\"prelu\",p=S(\"numArgs\",r,e,t),u=S(\"leakyreluAlpha\",r,e,t);if(a){if(i&&p!==2)throw new Error(\"Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&p!==1)throw new Error(\"Fused MatMul with BiasAdd must have one extra argument: bias.\")}let[c,l]=S(\"args\",r,e,t);return[o.fused.matMul({a:S(\"a\",r,e,t),b:S(\"b\",r,e,t),transposeA:S(\"transposeA\",r,e,t),transposeB:S(\"transposeB\",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var yN=(r,e,t,o=rt)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(S(\"x\",r,e,t),S(\"axis\",r,e,t),S(\"keepDims\",r,e,t))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(S(\"x\",r,e,t),S(\"mean\",r,e,t),S(\"variance\",r,e,t),S(\"offset\",r,e,t),S(\"scale\",r,e,t),S(\"epsilon\",r,e,t))];case\"FusedBatchNormV3\":return[o.batchNorm(S(\"x\",r,e,t),S(\"mean\",r,e,t),S(\"variance\",r,e,t),S(\"offset\",r,e,t),S(\"scale\",r,e,t),S(\"epsilon\",r,e,t))];case\"LRN\":return[o.localResponseNormalization(S(\"x\",r,e,t),S(\"radius\",r,e,t),S(\"bias\",r,e,t),S(\"alpha\",r,e,t),S(\"beta\",r,e,t))];case\"Softmax\":return[o.softmax(S(\"x\",r,e,t))];case\"LogSoftmax\":return[o.logSoftmax(S(\"x\",r,e,t))];case\"SparseToDense\":return[o.sparseToDense(S(\"sparseIndices\",r,e,t),S(\"outputShape\",r,e,t),S(\"sparseValues\",r,e,t),S(\"defaultValue\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var bN=(r,e,t,o=rt)=>{switch(r.op){case\"Max\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.max(S(\"x\",r,e,t),i,p)]}case\"Mean\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.mean(S(\"x\",r,e,t),i,p)]}case\"Min\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.min(S(\"x\",r,e,t),i,p)]}case\"Sum\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.sum(S(\"x\",r,e,t),i,p)]}case\"All\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.all(S(\"x\",r,e,t),i,p)]}case\"Any\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.any(S(\"x\",r,e,t),i,p)]}case\"ArgMax\":{let i=S(\"axis\",r,e,t);return[o.argMax(S(\"x\",r,e,t),i)]}case\"ArgMin\":{let i=S(\"axis\",r,e,t);return[o.argMin(S(\"x\",r,e,t),i)]}case\"Prod\":{let i=S(\"axis\",r,e,t),p=S(\"keepDims\",r,e,t);return[o.prod(S(\"x\",r,e,t),i,p)]}case\"Cumprod\":{let i=S(\"axis\",r,e,t),p=S(\"exclusive\",r,e,t),u=S(\"reverse\",r,e,t);return[o.cumprod(S(\"x\",r,e,t),i,p,u)]}case\"Cumsum\":{let i=S(\"axis\",r,e,t),p=S(\"exclusive\",r,e,t),u=S(\"reverse\",r,e,t);return[o.cumsum(S(\"x\",r,e,t),i,p,u)]}case\"Bincount\":let n=S(\"x\",r,e,t),s=S(\"weights\",r,e,t),a=S(\"size\",r,e,t);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=S(\"x\",r,e,t),p=S(\"weights\",r,e,t),u=S(\"size\",r,e,t),c=S(\"binaryOutput\",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var CN=(r,e,t,o=rt)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=S(\"n\",r,e,t),s=S(\"axis\",r,e,t),a=S(\"tensors\",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=S(\"x\",r,e,t),s=S(\"indices\",r,e,t);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=S(\"axis\",r,e,t),s=S(\"batchDims\",r,e,t),a=S(\"x\",r,e,t),i=S(\"indices\",r,e,t);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=S(\"dims\",r,e,t),s=[];for(let i=0;i{let n=S(\"axis\",r,e,t),s=S(\"tensors\",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=x.arraysEqual(u.shape,a);if(!c&&!x.arraysEqual(o.squeeze(u).shape,i))throw new Error(\"the input tensors shape does not match\");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case\"Unpack\":{let n=S(\"axis\",r,e,t),s=S(\"tensor\",r,e,t);return o.unstack(s,n)}case\"Tile\":{let n=S(\"reps\",r,e,t);return[o.tile(S(\"x\",r,e,t),n)]}case\"Split\":case\"SplitV\":{let n=S(\"axis\",r,e,t),s=S(\"numOrSizeSplits\",r,e,t),a=S(\"x\",r,e,t);return o.split(a,s,n)}case\"ScatterNd\":{let n=S(\"indices\",r,e,t),s=S(\"values\",r,e,t),a=S(\"shape\",r,e,t);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=S(\"x\",r,e,t),s=S(\"indices\",r,e,t);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=S(\"sparseIndices\",r,e,t),s=S(\"outputShape\",r,e,t),a=S(\"sparseValues\",r,e,t),i=S(\"defaultValue\",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var IN=(r,e,t,o=rt)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(S(\"indices\",r,e,t),S(\"values\",r,e,t),S(\"denseShape\",r,e,t),S(\"defaultValue\",r,e,t));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(S(\"inputIndices\",r,e,t),S(\"inputShape\",r,e,t),S(\"newShape\",r,e,t));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(S(\"data\",r,e,t),S(\"indices\",r,e,t),S(\"segmentIds\",r,e,t))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(S(\"data\",r,e,t),S(\"indices\",r,e,t),S(\"segmentIds\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var wN=(r,e,t,o=rt)=>{switch(r.op){case\"FFT\":return[o.fft(S(\"x\",r,e,t))];case\"IFFT\":return[o.ifft(S(\"x\",r,e,t))];case\"RFFT\":return[o.rfft(S(\"x\",r,e,t))];case\"IRFFT\":return[o.irfft(S(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var SN=(r,e,t,o=rt)=>{switch(r.op){case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(S(\"data\",r,e,t),S(\"dataSplits\",r,e,t),S(\"separator\",r,e,t),S(\"nGramWidths\",r,e,t),S(\"leftPad\",r,e,t),S(\"rightPad\",r,e,t),S(\"padWidth\",r,e,t),S(\"preserveShortSequences\",r,e,t));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(S(\"input\",r,e,t),S(\"delimiter\",r,e,t),S(\"skipEmpty\",r,e,t));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(S(\"input\",r,e,t),S(\"numBuckets\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var vN=(r,e,t,o=rt)=>{switch(r.op){case\"Cast\":return[o.cast(S(\"x\",r,e,t),S(\"dtype\",r,e,t))];case\"ExpandDims\":{let n=S(\"axis\",r,e,t);return[o.expandDims(S(\"x\",r,e,t),n)]}case\"Squeeze\":{let n=S(\"axis\",r,e,t);return[o.squeeze(S(\"x\",r,e,t),n)]}case\"Reshape\":return[o.reshape(S(\"x\",r,e,t),S(\"shape\",r,e,t))];case\"MirrorPad\":return[o.mirrorPad(S(\"x\",r,e,t),S(\"padding\",r,e,t),S(\"mode\",r,e,t))];case\"PadV2\":case\"Pad\":return[o.pad(S(\"x\",r,e,t),S(\"padding\",r,e,t),S(\"constantValue\",r,e,t))];case\"SpaceToBatchND\":{let n=S(\"blockShape\",r,e,t),s=S(\"paddings\",r,e,t);return[o.spaceToBatchND(S(\"x\",r,e,t),n,s)]}case\"BatchToSpaceND\":{let n=S(\"blockShape\",r,e,t),s=S(\"crops\",r,e,t);return[o.batchToSpaceND(S(\"x\",r,e,t),n,s)]}case\"DepthToSpace\":{let n=S(\"blockSize\",r,e,t),s=S(\"dataFormat\",r,e,t).toUpperCase();return[o.depthToSpace(S(\"x\",r,e,t),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(S(\"x\",r,e,t),S(\"shape\",r,e,t))];case\"BroadcastArgs\":return[o.broadcastArgs(S(\"s0\",r,e,t),S(\"s1\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function QC(r,e,t,o,n=Ne){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>eN(a,i,p));case\"basic_math\":return n(()=>tN(a,i,p));case\"control\":return iN(a,i,p);case\"convolution\":return n(()=>pN(a,i,p));case\"creation\":return n(()=>cN(a,i,p));case\"dynamic\":return lN(a,i,p);case\"evaluation\":return n(()=>mN(a,i,p));case\"image\":return n(()=>hN(a,i,p));case\"graph\":return n(()=>fN(a,i,p));case\"logical\":return n(()=>gN(a,i,p));case\"matrices\":return n(()=>xN(a,i,p));case\"normalization\":return n(()=>yN(a,i,p));case\"reduction\":return n(()=>bN(a,i,p));case\"slice_join\":return n(()=>CN(a,i,p));case\"sparse\":return n(()=>IN(a,i,p));case\"spectral\":return n(()=>wN(a,i,p));case\"string\":return n(()=>SN(a,i,p));case\"transformation\":return n(()=>vN(a,i,p));case\"hash_table\":return dN(a,i,p,o);case\"custom\":let u=td(a.op);if(u&&u.customExecutor)return u.customExecutor(new fd(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return x.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var yl=class{constructor(e={},t={},o={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.rootContext={id:0,frameName:\"\",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?\"\":`${t.frameName}-${t.iterationId}`).join(\"/\"):\"\"}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error(\"Cannot exit frame, the context is empty\")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error(\"Cannot increase frame iteration, the context is empty\")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function ZC(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=Object.keys(r).map(m=>Sr(m)[0]),c=[];o!=null&&(c=o.map(m=>Sr(m.name)[0]));let l=[...e];for(;l.length>0;){let m=l.pop();if((JC(m)||B6(m)||V6(m))&&a==null&&(a=m,i=a.children.map(f=>f.name).filter(f=>n.has(f))),n.add(m.name),t[m.name]==null&&u.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(f=>{p.has(f.name)||(p.add(f.name),l.push(f))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function kN(r,e,t){let{usedNodes:o,inputs:n}=t,s=[],a=Object.keys(n).map(c=>Sr(c)[0]).map(c=>r.nodes[c]),i=r.initNodes;a.forEach(c=>{o.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{o.has(c.name)&&s.push(c)}),i!=null&&i.forEach(c=>{o.has(c.name)&&s.push(c)});let p=new Set,u=[];for(;s.length>0;){let c=s.pop();p.add(c.name),e[c.name]||u.push(c),c.children.forEach(l=>{!p.has(l.name)&&o.has(l.name)&&l.inputs.every(m=>p.has(m.name))&&s.push(l)})}return u}var O6=[\"Switch\",\"Merge\",\"Enter\",\"Exit\",\"NextIteration\",\"StatelessIf\",\"StatelessWhile\",\"if\",\"While\"],M6=[\"NonMaxSuppressionV2\",\"NonMaxSuppressionV3\",\"NonMaxSuppressionV5\",\"Where\"],L6=[\"HashTable\",\"HashTableV2\",\"LookupTableImport\",\"LookupTableImportV2\",\"LookupTableFind\",\"LookupTableFindV2\",\"LookupTableSize\",\"LookupTableSizeV2\"];function JC(r){return O6.indexOf(r.op)>=0}function B6(r){return M6.indexOf(r.op)>=0}function V6(r){return L6.indexOf(r.op)>=0}var Cu=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=\",\",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(o=>{this._functionExecutorMap[o]=new Cu(e.functions[o],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(o=>e[o].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPERATOR)+\"--\"+n.join(this.SEPERATOR)}compile(e,t){let o=ZC(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let i=t.map(u=>u.name),p=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${p}]. Missing the following inputs: [${n}]`)}return kN(this.graph,this.weightMap,o)}execute(e,t){e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(l=>this.graph.nodes[Sr(l)[0]]),s=t.map(l=>Sr(l)[0]),a=s.map(l=>this.graph.nodes[l]);this.resetIntermediateTensors(),a.length===0&&(a=this._outputs);let i=this.getCompilationKey(n,a),p=this.compiledMap.get(i);p==null&&(p=this.compile(e,a),this.compiledMap.set(i,p));let u={},c={};return Ne(()=>{let l=new yl(this.weightMap,u,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);Object.keys(e).forEach(h=>{let[g,y]=Sr(h),b=[];b[y]=e[h],m[g]=b});let f=this.getFrozenTensorIds(m),d={};for(let h=0;hHt(h,m,l))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){t.category===\"control\"||a.indexOf(e)!==-1||(o[e].forEach(p=>{p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length)}),t.inputs.forEach(p=>{if(p.category!==\"control\"){let u=YT(p.name,o,n);u!=null&&u.forEach(c=>{if(c&&!c.kept&&!s.has(c.id)){let l=i[c.id];if(l===1){if(!this.keepTensorForDebug)c.dispose();else{let[m,f]=zo(t.name,n);this.intermediateTensors[m]?this.intermediateTensors[m][f]=c:(this.intermediateTensors[m]=[],this.intermediateTensors[m][f]=c)}delete i[c.id]}else l!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(o=>{o&&!o.kept&&!o.isDisposed&&!this.keepIds.has(o.id)&&o.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,o=!1,n={},s={}){o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=P().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(c){console.warn(c.message)}this.resetIntermediateTensors();let a=new yl(this.weightMap,n,s,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,a,t,o);let i=t.map(c=>Ht(c,this.tensorsMap,a)),p=i.map(c=>c.id),u=Object.keys(e).map(c=>e[c].id);return this.keepIds=new Set([...p,...u,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&a.dispose(this.keepIds),i}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(C=>this.graph.nodes[Sr(C)[0]]),i=o.map(C=>Sr(C)[0]),p=i.map(C=>this.graph.nodes[C]);p.length===0&&(p=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:l,syncInputs:m}=ZC(e,p,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(C=>({node:C,contexts:t.currentContext})),d=Object.assign({},this.weightMap);Object.keys(e).forEach(C=>{let[w,k]=Sr(C),_=[];_[k]=e[C],d[w]=_});let h={},g=this.getFrozenTensorIds(d),y={};for(;f.length>0;){let C=this.processStack(a,f,t,d,y,g,i,h,u);await Promise.all(C)}l==null&&!n&&console.warn(\"This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.\");let b=p.filter(C=>!JC(C)&&!Ht(C.name,d,t)).map(C=>C.name);if(b.length>0){let C=\"\";throw l!=null&&(C=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${C}`)}return d}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m=\"\";if(l.node.op===\"Enter\"&&S(\"isConstant\",l.node,n,o)&&([m]=zo(l.node.name,o)),n[l.node.name]==null){let f=QC(l.node,n,o,this._resourceManager);m||([m]=zo(l.node.name,o));let d=o.currentContext;x.isPromise(f)?c.push(f.then(h=>(n[m]=h,o.currentContext=d,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=zo(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Ht(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Ht(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let o=e[t],[n]=Sr(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);x.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&x.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){let t={};for(let o in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[o]!=null){let n=this._signature.inputs[o];t[n.name]=e[o]}else t[o]=e[o];return t}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Sr(o);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[o]=Sr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var xd=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}};var z6=\"?tfjs-format=file\",W6=\"model.json\",bl=class{constructor(e,t={},o=va){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new xd}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error(\"Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.\");let e=this.handler.load();return x.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Cu(xl.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=xl.Instance.transformGraph(e.modelInitializer);this.initializer=new Cu(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e==\"string\"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[0]}if(e.save==null)throw new Error(\"GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.\");return e.save(this.artifacts)}predict(e,t){let o=this.execute(e,this.outputNodes);if(this.structuredOutputKeys){let n=o instanceof ut?[o]:o,s={};return n.forEach((a,i)=>s[this.structuredOutputKeys[i]]=a),s}return o}normalizeInputs(e){if(!(e instanceof ut)&&!Array.isArray(e)){if(this.signature!=null&&this.signature.inputs!=null)for(let n in this.signature.inputs){let s=this.signature.inputs[n];s.resourceId!=null&&(e[n]=this.resourceIdToCapturedInput[s.resourceId])}return e}e=Array.isArray(e)?e:[e];let t=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+t!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-t} non-resource placeholders, while there are ${e.length} input tensors provided.`);let o=0;return this.inputNodes.reduce((n,s)=>{let a=this.signature?this.signature.inputs[s]:null;return a!=null&&a.resourceId!=null?n[s]=this.resourceIdToCapturedInput[a.resourceId]:n[s]=e[o++],n},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=Object.keys(this.initializerSignature.outputs);for(let o=0;o1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ft(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function U6(r,e={},t=va){if(r==null)throw new Error(\"modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model\");e==null&&(e={}),e.fromTFHub&&typeof r==\"string\"&&(r=H6(r));let o=new bl(r,e,t);return await o.load(),o}function G6(r){if(r==null)throw new Error(\"modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model\");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error(\"modelJSON must be the first element of the array\");if(!n||!(n instanceof ArrayBuffer))throw new Error(\"An ArrayBuffer of weights must be the second element of the array\");if(!(\"modelTopology\"in o))throw new Error(\"Model JSON is missing 'modelTopology'\");if(!(\"weightsManifest\"in o))throw new Error(\"Model JSON is missing 'weightsManifest'\");let s=va.getWeightSpecs(o.weightsManifest),a=va.getModelArtifactsForJSONSync(o,s,n);e=va.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=va.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new bl(e);return t.load(),t}function H6(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${W6}${z6}`}var q6=\"4.0.0\";function K(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var K6=Bt.whereImpl,Si=class extends Jr{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new rn(this,cr())}nextDataId(){return Si.nextDataId++}write(e,t,o){this.firstUse&&(this.firstUse=!1,P().get(\"IS_NODE\")&&I.warn(`\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t===\"string\"&&o!=null&&o.length>0&&x.isString(o[0])){let s=o.map(a=>x.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t===\"complex64\"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return I.mergeRealAndImagArrays(n,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ne(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=x.now();return e(),{kernelMs:x.now()-t}}memory(){return{unreliable:!0,reasons:[\"The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less.\"]}}where(e){K([e],\"where\");let t=this.readSync(e.dataId);return K6(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Si.nextDataId=0;var Ad={};Be(Ad,{addImpl:()=>rI,bincountImpl:()=>Zp,bincountReduceImpl:()=>yd,castImpl:()=>tI,ceilImpl:()=>oI,concatImpl:()=>Iu,equalImpl:()=>nI,expImpl:()=>aI,expm1Impl:()=>uI,floorImpl:()=>pI,gatherNdImpl:()=>bd,gatherV2Impl:()=>Cd,greaterEqualImpl:()=>lI,greaterImpl:()=>cI,lessEqualImpl:()=>fI,lessImpl:()=>mI,linSpaceImpl:()=>Id,logImpl:()=>dI,maxImpl:()=>wd,maximumImpl:()=>hI,minimumImpl:()=>gI,multiplyImpl:()=>Cl,negImpl:()=>xI,notEqualImpl:()=>yI,prodImpl:()=>bI,raggedGatherImpl:()=>Sd,raggedRangeImpl:()=>vd,raggedTensorToTensorImpl:()=>kd,rangeImpl:()=>Su,rsqrtImpl:()=>CI,scatterImpl:()=>Aa,sigmoidImpl:()=>e2,simpleAbsImpl:()=>eI,sliceImpl:()=>vu,sparseFillEmptyRowsImpl:()=>Td,sparseReshapeImpl:()=>Nd,sparseSegmentReductionImpl:()=>tc,sqrtImpl:()=>o2,squaredDifferenceImpl:()=>wI,stridedSliceImpl:()=>_d,stringNGramsImpl:()=>ku,stringSplitImpl:()=>Tu,stringToHashBucketFastImpl:()=>Nu,subImpl:()=>vI,tileImpl:()=>Ed,topKImpl:()=>$d,transposeImpl:()=>Jp,uniqueImpl:()=>Rd});function eI(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;K(e,\"abs\");let o=new Float32Array(x.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=eI(n),t.makeOutput(o,e.shape,e.dtype)},TN={kernelName:sn,backendName:\"cpu\",kernelFunc:j6};function Le(r){return(e,t,o,n,s)=>{let a=I.assertAndGetBroadcastShape(e,t),i=a.length,p=x.computeStrides(a),u=x.sizeFromShape(a),c=x.getTypedArrayFromDType(s,u),l=e.length,m=t.length,f=x.computeStrides(e),d=x.computeStrides(t),h=I.getBroadcastDims(e,a),g=I.getBroadcastDims(t,a);if(h.length+g.length===0)for(let y=0;yC[E]=0);let w=x.locToIndex(C,l,f),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=x.locToIndex(k,m,d);c[y]=r(o[w],n[_])}return[c,a]}}function qt(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}var NN={kernelName:aa,backendName:\"cpu\",kernelFunc:qt};function Yp(r,e,t=\"float32\"){if(t===\"complex64\"){let n=Yp(r,e,\"float32\"),s=Yp(r,e,\"float32\");return qt({inputs:{real:n,imag:s},backend:r})}let o=x.makeZerosTypedArray(x.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function ar(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var _N={kernelName:uo,backendName:\"cpu\",kernelFunc:ar};function Wo(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var EN={kernelName:la,backendName:\"cpu\",kernelFunc:Wo};function tI(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=x.toTypedArray([0],t),[s,a]=Le((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Uo(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return ar({inputs:{x:n},backend:t});let c=Yp(t,n.shape,n.dtype),l=Uo({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=qt({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=Wo({inputs:{input:n},backend:t}),l=Uo({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!x.hasEncodingLoss(n.dtype,s)){let c=ar({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=tI(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var $N={kernelName:to,backendName:\"cpu\",kernelFunc:Uo};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;K([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?I.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?I.fromUint8ToStringArray(c):c,f=o||a.dtype,[d,h]=e(a.shape,i.shape,l,m,f);return p.makeTensorInfo(h,f,d)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=Uo({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=p.data.get(l.dataId).values,d=p.data.get(m.dataId).values,h=Uo({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(y.dataId).values,w=p.data.get(b.dataId).values,[k,_,E]=t(a.shape,i.shape,f,d,C,w),R=p.makeTensorInfo(E,\"float32\",k),A=p.makeTensorInfo(E,\"float32\",_),D=qt({inputs:{real:R,imag:A},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(A),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,f]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(f,l,m)}}}function Qp(r){return(e,t,o,n,s,a)=>{let i=I.assertAndGetBroadcastShape(e,t),p=x.sizeFromShape(i),u=i.length,c=x.computeStrides(i),l=x.getTypedArrayFromDType(\"float32\",p),m=x.getTypedArrayFromDType(\"float32\",p),f=I.getBroadcastDims(e,i),d=I.getBroadcastDims(t,i),h=I.mergeRealAndImagArrays(o,n),g=I.mergeRealAndImagArrays(s,a),y=e.length,b=x.computeStrides(e),C=t.length,w=x.computeStrides(t);if(f.length+d.length===0)for(let k=0;kE[M]=0);let R=x.locToIndex(E,y,b),A=_.slice(-C);d.forEach(M=>A[M]=0);let D=x.locToIndex(A,C,w),O=r(h[R*2],h[R*2+1],g[D*2],g[D*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var rI=Le((r,e)=>r+e),X6=Qp((r,e,t,o)=>({real:r+t,imag:e+o})),Hs=Ye(_r,rI,X6),RN={kernelName:_r,backendName:\"cpu\",kernelFunc:Hs};function Zp(r,e,t,o,n){let s=x.sizeFromShape(o),a=x.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function yd(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ne([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function vr(r){return(e,t,o)=>{let n=x.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(K(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=x.sizeFromShape(a.shape),c=t||a.dtype,l=x.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(K(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var oI=vr(r=>Math.ceil(r)),Y6=Go(ro,oI),AN={kernelName:ro,backendName:\"cpu\",kernelFunc:Y6};function Iu(r,e,t,o){let n=x.getArrayFromDType(t,x.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=x.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?I.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),sI=Ye(oo,nI,null,\"bool\"),FN={kernelName:oo,backendName:\"cpu\",kernelFunc:sI};var aI=vr(r=>Math.exp(r)),iI=Go(no,aI,\"float32\"),DN={kernelName:no,backendName:\"cpu\",kernelFunc:iI};var uI=vr(r=>Math.expm1(r)),Q6=Go(wn,uI),PN={kernelName:wn,backendName:\"cpu\",kernelFunc:Q6};var pI=vr(r=>Math.floor(r)),Z6=Go(so,pI),ON={kernelName:so,backendName:\"cpu\",kernelFunc:Z6};function bd(r,e,t,o,n,s,a,i,p){let u=ne([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let f=0;fr>e?1:0),J6=Ye(ao,cI,null,\"bool\"),MN={kernelName:ao,backendName:\"cpu\",kernelFunc:J6};var lI=Le((r,e)=>r>=e?1:0),ej=Ye(io,lI,null,\"bool\"),LN={kernelName:io,backendName:\"cpu\",kernelFunc:ej};var mI=Le((r,e)=>rr<=e?1:0),rj=Ye(co,fI,null,\"bool\"),VN={kernelName:co,backendName:\"cpu\",kernelFunc:rj};function Id(r,e,t){let o=(e-r)/(t-1),n=x.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),oj=Go(lo,dI),zN={kernelName:lo,backendName:\"cpu\",kernelFunc:oj};function wd(r,e,t,o){let n=x.getTypedArrayFromDType(o,x.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var hI=Le((r,e)=>Math.max(r,e)),nj=Ye(mo,hI),WN={kernelName:mo,backendName:\"cpu\",kernelFunc:nj};var gI=Le((r,e)=>Math.min(r,e)),sj=Ye(fo,gI),UN={kernelName:fo,backendName:\"cpu\",kernelFunc:sj};var Cl=Le((r,e)=>r*e),aj=Qp((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),wu=Ye(ho,Cl,aj),GN={kernelName:ho,backendName:\"cpu\",kernelFunc:wu};function xI(r,e,t){let o=x.createScalarValue(-1,t);return Cl([],e,o,r,t)}function ij(r){let{inputs:e,backend:t}=r,{x:o}=e;K(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=xI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var HN={kernelName:Pn,backendName:\"cpu\",kernelFunc:ij};var yI=Le((r,e)=>r!==e?1:0),uj=Ye(go,yI,null,\"bool\"),qN={kernelName:go,backendName:\"cpu\",kernelFunc:uj};function Jp(r,e,t,o,n){let s=e.length,a=x.sizeFromShape(e),i=x.computeStrides(e),p=x.computeStrides(n),u=x.getTypedArrayFromDType(t,x.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(y,g,d)}var jN={kernelName:Ao,backendName:\"cpu\",kernelFunc:pj};function cj(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=x.indexToLoc(n,e.length,x.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function lj(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function mj(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);lj(t,o);let p=1;for(let u=0;u=0){let h=i[d],g=h[h.length-1]-f[c];for(let y=c;yn[a]=s)}return e}function XN(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error(\"starts must be a scalar or vector\");if(n.length>1)throw new Error(\"limits must be a scalar or vector\");if(a.length>1)throw new Error(\"deltas must be a scalar or vector\");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&by)w=0;else if(w=Math.ceil(Math.abs((b-y)/C)),w>YN)throw new Error(`Requires ((limit - start) / delta) <= ${YN}`);m[g+1]=m[g]+w}let f=m[l],d=x.getArrayFromDType(t,f),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case Ho.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Ho.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${Ho[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case Ho.FIRST_DIM_SIZE:return e[0];case Ho.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case Ho.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Ho[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=ZN(o,!1),a=x.getArrayFromDType(this.valuesDType,x.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=x.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let d=this.defaultValueShape;Ne(()=>{let h=z(c,d);c=Ls(h,i).dataSync()})}let l=0,m=0,f=0;for(let d=0;d<=u;++d){let h=d=u){let g=o.length;h=Math.floor(g/p)}if(h>f)if(this.defaultValue.length===1)a.subarray(f*p,h*p).fill(this.defaultValue[0]),f=h;else for(;h>f;){let g=a.slice(f*p);QN(g,c,p),++f}h<0?(l=d+1,m=f):(l=d,m=f,f=m+1)}}};function QN(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function kd(r,e,t,o,n,s,a,i,p,u){return new ec(r,e,t,o,n,s,a,i,p,u).compute()}function Su(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return x.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=x.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),gj=Go(xo,CI),JN={kernelName:xo,backendName:\"cpu\",kernelFunc:gj};function Aa(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return ne(t,e.dtype);let f=ne(c,e.dtype);typeof p==\"string\"||typeof p==\"number\"?f.values.fill(p):typeof p==\"boolean\"&&f.values.fill(+p);for(let d=0;d=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let y=0;y1/(1+Math.exp(-r))),II=we(yo,r=>1/(1+Math.exp(-r))),t2={kernelName:yo,backendName:\"cpu\",kernelFunc:II};function vu(r,e,t,o,n){let s=et.isSliceContinous(o,e,t),a=x.sizeFromShape(t),i=x.computeStrides(o);if(s){let l=et.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?I.fromUint8ToStringArray(r):r,u=ne(o,n,p),c=ne(t,n);for(let l=0;ld+e[h]);c.set(u.get(...f),...m)}return n===\"string\"?I.fromStringArrayToUint8(c.values):c.values}function qo(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;K(n,\"slice\");let[i,p]=et.parseSliceParams(n,s,a);et.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=vu(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var r2={kernelName:qn,backendName:\"cpu\",kernelFunc:qo};function Td(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=x.getArrayFromDType(t,0),y=x.getArrayFromDType(n,0);return[g,[0,l],y,u,c]}let m=!0,f=0,d=new Array(p).fill(0);for(let g=0;g=p)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,p));++d[y],m=m&&y>=f,f=y}let h=!0;for(let g=0;g0&&(d[g]+=d[g-1])}if(h&&m){let g=r,y=o;for(let b=0;b0){f[m-1]=1;for(let g=m-2;g>=0;--g)f[g]=f[g+1]*o[g+1]}let d=[];if(i>0){d[i-1]=1;for(let g=i-2;g>=0;--g)d[g]=d[g+1]*p[g+1]}let h=x.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let f=m.reduce((C,w)=>C*w,1),d=x.getArrayFromDType(t,f);if(i===0)return l>0&&d.fill(a),[d,m];if(l<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,y=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>y&&d.fill(a,y*u,b*u);for(let w=h;w=p[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return yMath.sqrt(r)),xj=we(bo,r=>Math.sqrt(r)),n2={kernelName:bo,backendName:\"cpu\",kernelFunc:xj};var wI=Le((r,e)=>{let t=r-e;return t*t}),yj=Ye(Co,wI),s2={kernelName:Co,backendName:\"cpu\",kernelFunc:yj};function _d(r,e,t,o){let n=ne(r,e.dtype);for(let s=0;s0?0:i-p),f=0;f+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){y(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=x.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],f=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,f,l),c+=f}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,f=1;this.createNGrams(e,u,i,c,f,m)}}return[i,a]}};function ku(r,e,t,o,n,s,a,i){return new SI(t,o,n,s,a,i).compute(r,e)}function bj(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),Cj=Qp((r,e,t,o)=>({real:r-t,imag:e-o})),Il=Ye(Io,vI,Cj),a2={kernelName:Io,backendName:\"cpu\",kernelFunc:Il};function Ed(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function i2(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),f=Math.min(o,Math.floor(e+(i-p)*c/i+l));i2(r,e,m,f)}let n=r[e],s=t,a=o;for(x.swap(r,t,e),wl(r[o],n)>0&&x.swap(r,t,o);s0;)a=a-1}wl(r[t],n)===0?x.swap(r,t,a):(a=a+1,x.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function $d(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=x.getTypedArrayFromDType(t,a*o),u=x.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;ld[C]={value:b,index:C}),o{for(let g=0;gnew Si,1);var kI=we(In,r=>r>=0?r:Math.exp(r)-1),u2={kernelName:In,backendName:\"cpu\",kernelFunc:kI};function TI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;K([n],\"leakyRelu\");let a=x.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=x.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?e*r:r);function NI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;K([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=wj(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var c2={kernelName:Vn,backendName:\"cpu\",kernelFunc:NI};var _I=we(zn,r=>Math.max(0,r)),l2={kernelName:zn,backendName:\"cpu\",kernelFunc:_I};var EI=we(Gn,r=>Math.min(Math.max(0,r),6)),m2={kernelName:Gn,backendName:\"cpu\",kernelFunc:EI};function _u(r,e,t,o,n){if(t===\"linear\")return ar({inputs:{x:e},backend:r});if(t===\"relu\")return _I({inputs:{x:e},backend:r});if(t===\"elu\")return kI({inputs:{x:e},backend:r});if(t===\"relu6\")return EI({inputs:{x:e},backend:r});if(t===\"prelu\")return NI({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return TI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return II({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function Oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=x.sizeFromShape(n.shape),i=x.inferFromImplicitShape(s,a),p=x.sizeFromShape(i);x.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var f2={kernelName:Ss,backendName:\"cpu\",kernelFunc:Oe};function $I(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;K([n,s],\"matMul\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],f=i?s.shape[u-2]:s.shape[u-1],d=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=x.sizeFromShape(d),y=x.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);x.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[y,f,l]:[y,l,f],_=Oe({inputs:{x:n},backend:t,attrs:{shape:w}}),E=Oe({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],A=a?_.shape[2]:_.shape[1],D=i?E.shape[1]:E.shape[2],O=Math.max(g,y),M=t.data.get(_.dataId).values,L=t.data.get(E.dataId).values,W=x.computeStrides(_.shape),V=x.computeStrides(E.shape),[G,q,H]=a?[W[0],1,W[1]]:[W[0],W[1],1],[j,Y,Z]=i?[1,V[1],V[0]]:[V[1],1,V[0]],ee=A*D,X=ne([O,A,D],_.dtype),Q=X.values,se=t.blockSize;for(let ie=0;ieMath.acos(r)),g2={kernelName:Li,backendName:\"cpu\",kernelFunc:vj};var kj=we(Bi,r=>Math.acosh(r)),x2={kernelName:Bi,backendName:\"cpu\",kernelFunc:kj};function Tj(r){let{inputs:e,backend:t}=r,o=e;K(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=ne(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=w)}f[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",f)}var I2={kernelName:un,backendName:\"cpu\",kernelFunc:Ej};function $j(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;K(n,\"argMin\");let a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],I.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[c,l]=I.computeOutAndReduceShapes(p.shape,a),m=x.sizeFromShape(c),f=x.makeZerosTypedArray(m,\"int32\"),d=x.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",f)}var w2={kernelName:ja,backendName:\"cpu\",kernelFunc:$j};var Rj=we(Vi,r=>Math.asin(r)),S2={kernelName:Vi,backendName:\"cpu\",kernelFunc:Rj};var Aj=we(zi,r=>Math.asinh(r)),v2={kernelName:zi,backendName:\"cpu\",kernelFunc:Aj};var Fj=we(Wi,r=>Math.atan(r)),k2={kernelName:Wi,backendName:\"cpu\",kernelFunc:Fj};var Dj=Le((r,e)=>Math.atan2(r,e)),Pj=Ye(sa,Dj),T2={kernelName:sa,backendName:\"cpu\",kernelFunc:Pj};var Oj=we(Ui,r=>Math.atanh(r)),N2={kernelName:Ui,backendName:\"cpu\",kernelFunc:Oj};function rc(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,f=n.padInfo.left,d=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=ne(n.outShape,t),g=h.values,y=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let w=0;wq?q=se:s===\"avg\"&&(H+=se,j++)}if(isNaN(q))break}let Y=M+L*C+E;g[Y]=s===\"avg\"?H/j:q}}}return h}function Fd(r,e,t,o,n=!1,s=!1){let a=ne(o.outShape,\"int32\"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,f=o.padInfo.top,d=o.padInfo.left,h=ne(e,t,r);for(let g=0;gD&&(D=G,n?O=s?((g*o.inHeight+M)*o.inWidth+W)*o.inChannels+y:(M*o.inWidth+W)*o.inChannels+y:O=L*m+V)}}a.set(O,g,b,_,y)}}return a}function Dd(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,f=n.effectiveFilterHeight,d=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,y=n.padInfo.left,b=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=ne(n.outShape,t),w=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let A=0;AIe?Ie=It:s===\"avg\"&&(Se+=It,Ee++),isNaN(Ie))break}if(isNaN(Ie))break}if(isNaN(Ie))break}let Me=de+M;w[Me]=s===\"avg\"?Se/Ee:Ie}}}}return C}function _2(r,e){let t=ne(e.outShape,\"int32\"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left;for(let h=0;h=L&&(L=Z,W=G*c*l+H*c+Y)}}}t.set(W,h,y,k,A,g)}}}return t}function Mj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;K(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;x.assert(I.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,f=x.computeStrides(n.shape),d=rc(m,n.shape,n.dtype,f,c,\"avg\");l=t.makeTensorInfo(c.outShape,n.dtype,d.values)}return l}var E2={kernelName:pn,backendName:\"cpu\",kernelFunc:Mj};function Lj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,\"avgPool3d\");let c=I.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=Dd(l,n.shape,n.dtype,x.computeStrides(n.shape),c,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var $2={kernelName:ip,backendName:\"cpu\",kernelFunc:Lj};function Bj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],\"avgPool3DGrad\");let c=I.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,f=c.strideWidth,d=c.filterDepth,h=c.filterHeight,g=c.filterWidth,y=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,w=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,E=w-1-c.padInfo.front,R=_-1-c.padInfo.left,A=k-1-c.padInfo.top,D=ne(s.shape,\"float32\"),O=1/(d*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(X)!==X))for(let Q=0;Q=c.outHeight||Math.floor(se)!==se))for(let ie=0;ie<_;ie+=C){let de=(Y+ie)/f;if(de<0||de>=c.outWidth||Math.floor(de)!==de)continue;let Ie=M.get(L,X,se,de,W);Z+=Ie}}}D.set(Z*O,L,V,G,q,W)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var R2={kernelName:Fm,backendName:\"cpu\",kernelFunc:Bj};function Vj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;K([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=I.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,f=c.filterHeight,d=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,y=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,w=y-1-c.padInfo.top,k=ne(a.shape,\"float32\"),_=1/(f*d),E=t.data.get(n.dataId).values,R=ne(n.shape,\"float32\",E);for(let A=0;A=c.outHeight||Math.floor(q)!==q))for(let H=0;H=c.outWidth||Math.floor(j)!==j)continue;let Y=R.get(A,q,j,D);V+=Y}}k.set(V*_,A,O,M,D)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var A2={kernelName:Am,backendName:\"cpu\",kernelFunc:Vj};function zj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;x.assert(i.shape.length===p.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),x.assert(a==null||i.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),x.assert(s==null||i.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\"),K([n,i,p,s,a],\"batchNorm\");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,f=s?t.data.get(s.dataId).values:new Float32Array([1]),d=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=d.length,y=f.length,b=m.length,C=l.length,w=0,k=0,_=0,E=0;for(let R=0;R=g&&(w=0),k>=C&&(k=0),_>=y&&(_=0),E>=b&&(E=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var F2={kernelName:kn,backendName:\"cpu\",kernelFunc:zj};function Wj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;K([n],\"batchToSpaceND\");let i=s.reduce((y,b)=>y*b),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=Oe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),h=Oe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=qo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var D2={kernelName:hs,backendName:\"cpu\",kernelFunc:Wj};function Uj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Zp(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var P2={kernelName:up,backendName:\"cpu\",kernelFunc:Uj};function Gj(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=I.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var O2={kernelName:pp,backendName:\"cpu\",kernelFunc:Gj};var Hj=we(Ro,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(x.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(h=>h.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>x.sizeFromShape(h.shape)>0);if(p.length===1)return ar({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(w=>Wo({inputs:{input:w},backend:t})),g=p.map(w=>qs({inputs:{input:w},backend:t})),y=vi({inputs:h,backend:t,attrs:{axis:s}}),b=vi({inputs:g,backend:t,attrs:{axis:s}}),C=qt({inputs:{real:y,imag:b},backend:t});return h.forEach(w=>t.disposeIntermediateTensorInfo(w)),g.forEach(w=>t.disposeIntermediateTensorInfo(w)),t.disposeIntermediateTensorInfo(y),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let y=[-1,x.sizeFromShape(h.shape.slice(s))];return Oe({inputs:{x:h},backend:t,attrs:{shape:y}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=I.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=Iu(c,i,e[0].dtype,l),f=I.computeOutShape(p.map(h=>h.shape),s),d=t.makeTensorInfo(f,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),d}var V2={kernelName:gs,backendName:\"cpu\",kernelFunc:vi};function RI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;K([n,s],\"conv2d\");let l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),f=m.filterHeight,d=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,y=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat===\"channelsLast\",w=new je(m.outShape,n.dtype),k=x.computeStrides(n.shape),_=x.computeStrides(s.shape),E=k[0],R=C?k[1]:k[2],A=C?k[2]:1,D=C?1:k[1],O=w.strides[0],M=C?w.strides[1]:w.strides[2],L=C?w.strides[2]:1,W=C?1:w.strides[1],V=t.data.get(n.dataId).values,G=t.data.get(s.dataId).values,q=w.values;for(let H=0;H=m.inHeight)continue;let ie=Q*_[0],de=j+se*R;for(let Ie=0;Ie=m.inWidth)continue;let pt=ie+Me*_[1],De=de+st*A,ft=pt;for(let at=0;at=u.inDepth)continue;let H=G*A[0],j=O+q*R[1];for(let Y=0;Y=u.inHeight)continue;let se=H+X*A[1],ie=j+Q*R[2];for(let de=0;de=u.inWidth)continue;let st=se+Ee*A[2],pt=ie+Me*u.inChannels,De=st;for(let ft=0;ftMath.cos(r)),K2={kernelName:fn,backendName:\"cpu\",kernelFunc:Zj};var Jj=we(dn,r=>Math.cosh(r)),j2={kernelName:dn,backendName:\"cpu\",kernelFunc:Jj};function eX(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,f]=n.shape,d=s.shape[0],[h,g]=i,y=ne([d,h,g,f],\"float32\"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,w=t.data.get(n.dataId).values,k=x.computeStrides(n.shape),_=x.computeStrides(y.shape);for(let E=0;E=c)continue;let W=h>1?(O-A)*(l-1)/(h-1):0,V=g>1?(M-D)*(m-1)/(g-1):0;for(let G=0;G1?A*(l-1)+G*W:.5*(A+O)*(l-1);if(q<0||q>l-1){for(let H=0;H1?D*(m-1)+Z*V:.5*(D+M)*(m-1);if(ee<0||ee>m-1){for(let ie=0;ie1?D*(m-1)+H*V:.5*(D+M)*(m-1);if(j<0||j>m-1){for(let ee=0;eey+d-b-1:(y,b)=>y+b;for(let y=0;yy+d-b-1:(y,b)=>y+b;for(let y=0;y`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,f=c/(s*s),d=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*f),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let f=I.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:d,filterWidth:h,dilationHeight:g,dilationWidth:y,padInfo:b}=f,C=b.left,w=b.top,k=f.outChannels/f.inChannels,_=new je(f.outShape,n.dtype),E=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,A=_.values;for(let D=0;D=f.inHeight)continue;let H=G*l[0],j=O+q*c[1];for(let Y=0;Y=f.inWidth)continue;let se=H+X*l[1],ie=j+Q*f.inChannels,de=Z,Ie=se;for(let Se=0;Se{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:f,inHeight:d,inWidth:h,inChannels:g,outHeight:y,outWidth:b,padInfo:C,strideHeight:w,strideWidth:k,filterHeight:_,filterWidth:E,dilationHeight:R,dilationWidth:A,outShape:D}=I.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),O=x.sizeFromShape(D),M=D.length,L=x.getArrayFromDType(o.dtype,O);for(let V=0;V=0&&Q=0&&ieZ&&(Z=Se)}}}let ee=x.locToIndex([V,G,H,Y],M,x.computeStrides(D));L[ee]=Z}}}return{dataId:p.write(x.toTypedArray(L,o.dtype),D,o.dtype),shape:D,dtype:o.dtype}}};var s_={kernelName:vb,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=x.toNestedArray(o.shape,u.data.get(o.dataId).values),l=x.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:y,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:E,dilationWidth:R,outShape:A}=I.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);x.assert(s.rank===A.length,()=>`Error in ${vb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let D=x.toNestedArray(A,u.data.get(s.dataId).values),O=x.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&X=0&&sej&&(j=ie,Y=ee,Z=Q)}}}O[Y][Z][H]+=D[L][W][G][H]}}}return{dataId:u.write(x.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var a_={kernelName:Sb,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=x.toNestedArray(o.shape,u.data.get(o.dataId).values),l=x.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:y,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:E,dilationWidth:R,outShape:A}=I.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);x.assert(s.rank===A.length,()=>`Error in ${Sb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let D=x.toNestedArray(A,u.data.get(s.dataId).values),O=x.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&X=0&&sej&&(j=ie,Y=X,Z=se)}}}O[L][Y][Z][H]+=D[L][W][G][H]}}}return{dataId:u.write(x.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function Fa(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,\"sum\");let i;n.dtype===\"bool\"?i=Uo({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=ar({inputs:{x:n},backend:t});let p=i.shape.length,u=x.parseAxisParam(s,i.shape),c=I.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=bt({inputs:{x:i},backend:t,attrs:{perm:c}}),l=I.getInnerMostAxes(l.length,p)),I.assertAxesAreInnerMostDims(\"sum\",l,m.shape.length);let[f,d]=I.computeOutAndReduceShapes(m.shape,l),h=I.upcastType(m.dtype,\"int32\"),g=Yp(t,f,h),y=x.sizeFromShape(d),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let w=0;w=0&&(m=Fa({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var u_={kernelName:Xa,backendName:\"cpu\",kernelFunc:uX};function pX(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;K([o,n],\"eluGrad\");let s=new Float32Array(x.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=1?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var p_={kernelName:Pm,backendName:\"cpu\",kernelFunc:pX};var cX=I.ERF_P,lX=I.ERF_A1,mX=I.ERF_A2,fX=I.ERF_A3,dX=I.ERF_A4,hX=I.ERF_A5,gX=we(Gi,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+cX*t);return e*(1-((((hX*o+dX)*o+fX)*o+mX)*o+lX)*o*Math.exp(-t*t))}),c_={kernelName:Gi,backendName:\"cpu\",kernelFunc:gX};function oc(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(x.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Oe({inputs:{x:n},backend:t,attrs:{shape:i}})}var l_={kernelName:xs,backendName:\"cpu\",kernelFunc:oc};var xX=Le((r,e)=>r/e),Sl=Ye(Cn,xX),vl={kernelName:Cn,backendName:\"cpu\",kernelFunc:Sl};function Pd(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=x.sizeFromShape(u),l=x.getTypedArrayFromDType(\"float32\",c),m=x.getTypedArrayFromDType(\"float32\",c);for(let g=0;g{let{image:o}=r,n=t,s=x.getTypedArrayFromDType(o.dtype,x.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&CMath.floor(r/e)),vX=Ye(vn,SX,null,\"int32\"),h_={kernelName:vn,backendName:\"cpu\",kernelFunc:vX};function kX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=RI({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;if(c===\"NCHW\"&&a.shape.length===1&&a.shape[0]!==1){let y=Oe({inputs:{x:a},backend:t,attrs:{shape:[a.shape[0],1,1]}});h=Hs({inputs:{a:h,b:y},backend:t}),t.disposeIntermediateTensorInfo(y)}else h=Hs({inputs:{a:h,b:a},backend:t});t.disposeIntermediateTensorInfo(g)}if(f){let g=h;if(c===\"NCHW\"&&f===\"prelu\"&&i.shape.length===1&&i.shape[0]!==1){let y=Oe({inputs:{x:i},backend:t,attrs:{shape:[i.shape[0],1,1]}});h=_u(t,h,f,y,d),t.disposeIntermediateTensorInfo(y)}else h=_u(t,h,f,i,d);t.disposeIntermediateTensorInfo(g)}return h}var g_={kernelName:Do,backendName:\"cpu\",kernelFunc:kX};function TX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=AI({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;h=Hs({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(f){let g=h;h=_u(t,h,f,i,d),t.disposeIntermediateTensorInfo(g)}return h}var x_={kernelName:Po,backendName:\"cpu\",kernelFunc:TX};function NX(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=x.sizeFromShape(o.shape),a=n.shape,i=a[a.length-1],[p,u,c,l]=I.prepareAndValidate(o,n);if(u===0)return t.makeTensorInfo(p,o.dtype,[]);let m=t.data.get(n.dataId).values,f=t.bufferSync(o),d=bd(m,f,o.dtype,u,i,c,l,o.shape,s);return t.makeTensorInfo(p,o.dtype,d.values)}var y_={kernelName:Tn,backendName:\"cpu\",kernelFunc:NX};function _X(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o;K([n,s],\"gatherV2\");let p=x.parseAxisParam(a,n.shape)[0],u=t.data.get(s.dataId).values,c=n.shape[p];for(let w=0;w=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=x.sizeFromShape(s.shape),f=I.segment_util.collectGatherOpShapeInfo(n,s,p,l),d=Oe({inputs:{x:n},backend:t,attrs:{shape:[f.batchSize,f.outerSize,f.dimSize,f.sliceSize]}}),h=Oe({inputs:{x:s},backend:t,attrs:{shape:[f.batchSize,m/f.batchSize]}}),g=[f.batchSize,f.outerSize,m/f.batchSize,f.sliceSize],y=t.bufferSync(h),b=t.bufferSync(d),C=Cd(b,y,g);return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(f.outputShape,C.dtype,C.values)}var b_={kernelName:bs,backendName:\"cpu\",kernelFunc:_X};function EX(r){let{inputs:e,backend:t}=r,{input:o}=e,n=x.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Oe({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Pd(i,!0,t),u=Oe({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var C_={kernelName:Cp,backendName:\"cpu\",kernelFunc:EX};var $X=we(Hi,r=>Number.isFinite(r)?1:0,\"bool\"),I_={kernelName:Hi,backendName:\"cpu\",kernelFunc:$X};var RX=we(qi,r=>Math.abs(r)===1/0?1:0,\"bool\"),w_={kernelName:qi,backendName:\"cpu\",kernelFunc:RX};var AX=we(ia,r=>Number.isNaN(r)?1:0,\"bool\"),S_={kernelName:ia,backendName:\"cpu\",kernelFunc:AX};function FX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Id(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var v_={kernelName:Ip,backendName:\"cpu\",kernelFunc:FX};var DX=we(Ki,r=>Math.log1p(r)),k_={kernelName:Ki,backendName:\"cpu\",kernelFunc:DX};var PX=Le((r,e)=>r&&e),OX=Ye(_n,PX,null,\"bool\"),T_={kernelName:_n,backendName:\"cpu\",kernelFunc:OX};var MX=we(En,r=>r?0:1,\"bool\"),N_={kernelName:En,backendName:\"cpu\",kernelFunc:MX};var LX=Le((r,e)=>r||e),BX=Ye(ua,LX,null,\"bool\"),__={kernelName:ua,backendName:\"cpu\",kernelFunc:BX};function VX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;K(n,\"LRN\");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=x.sizeFromShape(n.shape),f=new Float32Array(m);function d(h){let g=h%u,y=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;y<=b;y++){let w=l[y];C+=w*w}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,f=x.computeStrides(n.shape),d=rc(m,n.shape,n.dtype,f,c,\"max\");l=t.makeTensorInfo(c.outShape,n.dtype,d.values)}return l}var A_={kernelName:Rn,backendName:\"cpu\",kernelFunc:WX};function UX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,\"maxPool3d\");let c=I.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=Dd(l,n.shape,n.dtype,x.computeStrides(n.shape),c,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var F_={kernelName:Sp,backendName:\"cpu\",kernelFunc:UX};function GX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],\"maxPool3DGrad\");let c=I.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=_2(l,c),f=c.strideDepth,d=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,y=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,w=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,E=k-1-c.padInfo.left,R=w-1-c.padInfo.top,A=ne(s.shape,\"float32\"),D=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(Z)!==Z))for(let ee=0;ee=c.outHeight||Math.floor(X)!==X))for(let Q=0;Q=c.outWidth||Math.floor(se)!==se)continue;let ie=C*w*k-1-m.get(O,Z,X,se,M),de=Y*w*k+ee*k+Q,Ie=ie===de?1:0;if(Ie===0)continue;let Se=D.get(O,Z,X,se,M);j+=Se*Ie}}}A.set(j,O,L,W,V,M)}return t.makeTensorInfo(A.shape,A.dtype,A.values)}var D_={kernelName:Lm,backendName:\"cpu\",kernelFunc:GX};function HX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;K([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=I.computePool2DInfo(i.shape,p,u,1,c,l),f=t.data.get(i.dataId).values,d=ne(m.outShape,i.dtype,Fd(f,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,y=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,w=m.effectiveFilterWidth,k=w-1-m.padInfo.left,_=C-1-m.padInfo.top,E=ne(i.shape,\"float32\"),R=t.data.get(n.dataId).values,A=ne(n.shape,\"float32\",R);for(let D=0;D=m.outHeight||Math.floor(H)!==H))for(let j=0;j=m.outWidth||Math.floor(Y)!==Y)continue;let Z=C*w-1-d.get(D,H,Y,O),ee=q*w+j,X=Z===ee?1:0;if(X===0)continue;let Q=A.get(D,H,Y,O);G+=Q*X}}E.set(G,D,M,L,O)}return t.makeTensorInfo(E.shape,E.dtype,E.values)}var P_={kernelName:Mm,backendName:\"cpu\",kernelFunc:HX};function O_(r,e,t,o,n){let s=x.computeStrides(e),a=rc(r,e,t,s,n,\"max\"),i=Fd(r,e,t,n,!0,o);return[a.values,i.values]}var M_={kernelName:vp,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;K(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=I.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=O_(u,o.shape,o.dtype,i,c),f=p.write(l,c.outShape,o.dtype),d=p.write(m,c.outShape,o.dtype);return[{dataId:f,shape:c.outShape,dtype:o.dtype},{dataId:d,shape:c.outShape,dtype:\"int32\"}]}};function qX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=x.parseAxisParam(s,n.shape),u=I.computeOutAndReduceShapes(n.shape,i)[1],c=x.sizeFromShape(u),l=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let f=Uo({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});l.push(f);let d=Sl({inputs:{a:f,b:m},backend:t});l.push(d);let h=Fa({inputs:{x:d},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var L_={kernelName:An,backendName:\"cpu\",kernelFunc:qX};function KX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,\"min\");let i=x.parseAxisParam(s,n.shape),p=i,u=I.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=bt({inputs:{x:n},backend:t,attrs:{perm:u}}),p=I.getInnerMostAxes(p.length,n.shape.length)),I.assertAxesAreInnerMostDims(\"min\",p,c.shape.length);let[l,m]=I.computeOutAndReduceShapes(c.shape,p),f=x.sizeFromShape(m),d=x.makeZerosTypedArray(x.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let y=0;yC[0]+n.shape[w]+C[1]),p=s.map(C=>C[0]),u=s.map((C,w)=>C[0]+n.shape[w]),c=a===\"reflect\"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,f=x.computeStrides(n.shape),d=x.sizeFromShape(i),h=i.length,g=x.computeStrides(i),y=x.getTypedArrayFromDType(n.dtype,d);for(let C=0;C=u[_]&&(w[_]=(u[_]-1)*2-w[_]+c);w=w.map((_,E)=>_-p[E]);let k=x.locToIndex(w,m,f);y[C]=l[k]}return{dataId:t.write(y,i,n.dtype),shape:i,dtype:n.dtype}}var V_={kernelName:Dn,backendName:\"cpu\",kernelFunc:jX};var XX=Le((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),YX=Ye(ji,XX),z_={kernelName:ji,backendName:\"cpu\",kernelFunc:YX};var U_=rp(IC());function PI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=x.parseAxisParam([i],n.shape),u=DI({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=I.expandShapeToKeepDim(u.shape,p),l=Oe({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Il({inputs:{a:n,b:l},backend:t}),f=iI({inputs:{x:m},backend:t}),d=Fa({inputs:{x:f},backend:t,attrs:{axis:p,keepDims:!1}}),h=Oe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=Sl({inputs:{a:f,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var W_={kernelName:Xn,backendName:\"cpu\",kernelFunc:PI};function QX(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;K(n,\"multinomial\");let p=i?n:PI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],f=x.makeZerosTypedArray(x.sizeFromShape(m),\"int32\");for(let d=0;d=0&&l[m]{x.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),x.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=oc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=vi({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var Z_={kernelName:Is,backendName:\"cpu\",kernelFunc:OI};function s5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;K(n,\"pad\");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=x.sizeFromShape(n.shape),l=n.shape.length,m=x.computeStrides(n.shape),f=x.sizeFromShape(i),d=i.length,h=x.computeStrides(i),g=x.getTypedArrayFromDType(n.dtype,f);a!==0&&g.fill(a);for(let b=0;b_+p[E]),k=x.locToIndex(w,d,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Od={kernelName:Ln,backendName:\"cpu\",kernelFunc:s5};var a5=Le((r,e)=>Math.pow(r,e)),i5=Ye(Bn,a5),J_={kernelName:Bn,backendName:\"cpu\",kernelFunc:i5};function u5(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(y=>t.data.get(y.dataId).values),u=n.map(y=>y.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,f,d]=Sd(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(y=>t.makeTensorInfo([y.length],\"int32\",y)),g=t.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var eE={kernelName:Tp,backendName:\"cpu\",kernelFunc:u5};function p5(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=vd(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var tE={kernelName:Np,backendName:\"cpu\",kernelFunc:p5};function c5(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),f=i.map(g=>g.shape),[d,h]=kd(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,f,p);return t.makeTensorInfo(d,s.dtype,h)}var rE={kernelName:_p,backendName:\"cpu\",kernelFunc:c5};function l5(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=Su(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var oE={kernelName:ws,backendName:\"cpu\",kernelFunc:l5};var m5=we(ma,r=>1/r),nE={kernelName:ma,backendName:\"cpu\",kernelFunc:m5};function f5(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;K(n,\"resizeBilinear\");let p=x.computeStrides(n.shape),[u,c]=i,[l,m,f,d]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(x.sizeFromShape([l,u,c,d])),y=[s&&u>1?m-1:m,s&&c>1?f-1:f],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,w=y[0]/b[0],k=y[1]/b[1];for(let _=0;_1?u-1:u,a&&f>1?c-1:c],g=[a&&m>1?m-1:m,a&&f>1?f-1:f],y=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,w=0;for(let k=0;k1?m-1:m,s&&c>1?f-1:f],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=y[0]/b[0],w=y[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&d>1?l-1:l],b=[a&&f>1?f-1:f,a&&d>1?d-1:d],C=y[0]/b[0],w=y[1]/b[1],k=1/C,_=1/w,E=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let A=0;A=f)continue;let X=D+ee*p[1],Q=ee*C,se=Math.min(c-1,a?Math.round(Q):Math.floor(Q));if(O===se)for(let ie=0;ie=d)continue;let Ie=X+de*p[2],Se=de*w,Ee=Math.min(l-1,a?Math.round(Se):Math.floor(Se));V===Ee&&(Y+=g[Ie+j])}}h[G+j]=Y}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var uE={kernelName:Bm,backendName:\"cpu\",kernelFunc:g5};function x5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;K(n,\"reverse\");let a=n.shape.length,i=x.parseAxisParam(s,n.shape);if(a===0)return ar({inputs:{x:n},backend:t});let p=new je(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[f]=n.shape[f]-1-m[f]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var pE={kernelName:fa,backendName:\"cpu\",kernelFunc:x5};var cE={kernelName:es,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=x.getTypedArrayFromDType(o.dtype,x.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[f,d]=I.getImageCenter(a,c,l),h=255,g=Math.sin(n),y=Math.cos(n),b=i.data.get(o.dataId).values;for(let w=0;w=0&&W=0&&V{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),lE={kernelName:da,backendName:\"cpu\",kernelFunc:y5};function b5(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=!0,f=t.bufferSync(n),d=t.bufferSync(s),h=Aa(f,d,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var mE={kernelName:Hn,backendName:\"cpu\",kernelFunc:b5};function C5(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:x.sizeFromShape(n.shape.slice(1));for(let d=0;dr>=0?k5*r:v5*(Math.exp(r)-1)),gE={kernelName:Xi,backendName:\"cpu\",kernelFunc:T5};var N5=we(Yi,r=>r<0?-1:r>0?1:0),xE={kernelName:Yi,backendName:\"cpu\",kernelFunc:N5};var _5=we(Kn,r=>Math.sin(r)),yE={kernelName:Kn,backendName:\"cpu\",kernelFunc:_5};var E5=we(ha,r=>Math.sinh(r)),bE={kernelName:ha,backendName:\"cpu\",kernelFunc:E5};var $5=11920928955078125e-23,CE=Math.log($5)+2,R5=we(Qi,r=>{let e=r>-CE,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var SE={kernelName:Qa,backendName:\"cpu\",kernelFunc:F5};function D5(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=Nd(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var vE={kernelName:ga,backendName:\"cpu\",kernelFunc:D5};function P5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=tc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var kE={kernelName:Za,backendName:\"cpu\",kernelFunc:P5};function O5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=tc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var TE={kernelName:Ja,backendName:\"cpu\",kernelFunc:O5};function M5(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1,d=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),y=Boolean(t.data.get(a.dataId).values[0]);h=Aa(d,g,i,m,c,u,p,l,y,f);break}case\"float32\":{let g=t.bufferSync(s),y=t.data.get(a.dataId).values[0];h=Aa(d,g,i,m,c,u,p,l,y,f);break}case\"int32\":{let g=t.bufferSync(s),y=t.data.get(a.dataId).values[0];h=Aa(d,g,i,m,c,u,p,l,y,f);break}case\"string\":{let g=t.bufferSync(s),y=x.decodeString(t.data.get(a.dataId).values[0]);h=Aa(d,g,i,m,c,u,p,l,y,f);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var NE={kernelName:ei,backendName:\"cpu\",kernelFunc:M5};function L5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let f=qo({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,f})}var _E={kernelName:Ts,backendName:\"cpu\",kernelFunc:L5};var EE={kernelName:ti,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;K(t,\"square\");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),$E={kernelName:$s,backendName:\"cpu\",kernelFunc:B5};function V5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;K(n,\"stridedSlice\");let{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Oe({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=qo({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Oe({inputs:{x:E},backend:t,attrs:{shape:d}}),t.disposeIntermediateTensorInfo(E)}else{let _=t.bufferSync(n),E=_d(f,_,w,b);k=t.makeTensorInfo(d,E.dtype,E.values)}return k}var RE={kernelName:Yn,backendName:\"cpu\",kernelFunc:V5};function z5(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,f=t.data.get(l.dataId).values,[d,h]=ku(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],\"string\",d),t.makeTensorInfo(l.shape,\"int32\",h)]}var AE={kernelName:Ns,backendName:\"cpu\",kernelFunc:z5};function W5(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=Tu(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var FE={kernelName:ri,backendName:\"cpu\",kernelFunc:W5};function U5(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.data.get(s.dataId).values,i=Nu(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var DE={kernelName:oi,backendName:\"cpu\",kernelFunc:U5};var G5=we(xa,r=>Math.tan(r)),PE={kernelName:xa,backendName:\"cpu\",kernelFunc:G5};var H5=we(Qn,r=>Math.tanh(r)),OE={kernelName:Qn,backendName:\"cpu\",kernelFunc:H5};function q5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;K(n,\"tile\");let a=Ed(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var ME={kernelName:wo,backendName:\"cpu\",kernelFunc:q5};function K5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;K(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=$d(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var LE={kernelName:Zn,backendName:\"cpu\",kernelFunc:K5};function j5(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=x.computeStrides(n.shape),b=y[0],C=y[1],w=y[2],k=x.computeStrides(g),_=k[0],E=k[1],R=k[2],A=x.getTypedArrayFromDType(n.dtype,x.sizeFromShape(g));A.fill(p);let D=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return x.clamp(0,t,e-1)}function Y5(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return x.clamp(0,t,e-1)}function Q5(r,e){return r}function Z5(r,e){return x.clamp(0,r,e-1)}function Nl(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(d)),f}var UE={kernelName:Rp,backendName:\"cpu\",kernelFunc:o8};var n8=[h2,TN,g2,x2,RN,y2,b2,C2,I2,w2,S2,v2,k2,T2,N2,E2,$2,R2,A2,d2,F2,D2,P2,O2,$N,AN,M2,NN,L2,V2,z2,W2,U2,G2,H2,q2,K2,j2,X2,Y2,Q2,Z2,J2,e_,t_,r_,o_,n_,s_,a_,u_,u2,p_,FN,c_,DN,l_,PN,m_,f_,d_,ON,h_,g_,x_,y_,b_,MN,LN,_N,C_,B2,I_,w_,S_,p2,BN,VN,v_,zN,k_,T_,N_,__,E_,$_,R_,WN,A_,F_,D_,P_,M_,L_,B_,UN,V_,z_,G_,GN,HN,H_,q_,K_,qN,j_,Q_,Z_,Od,J_,c2,jN,eE,tE,rE,oE,EN,vl,nE,l2,m2,f2,sE,aE,iE,uE,pE,cE,lE,JN,mE,dE,hE,gE,t2,xE,yE,bE,r2,W_,IE,wE,SE,vE,kE,TE,NE,_E,n2,EE,s2,$E,RE,AE,FE,DE,a2,i_,PE,OE,ME,LE,VE,KN,zE,WE,UE,X_];for(let r of n8)ya(r);var ic={};Be(ic,{assertNotComplex:()=>as,bindCanvasToFramebuffer:()=>f8,bindColorTextureToFramebuffer:()=>Rl,bindTextureToProgramUniformSampler:()=>ZI,bindTextureUnit:()=>KE,bindVertexBufferToProgramAttribute:()=>Wd,callAndCheck:()=>me,canBeRepresented:()=>VI,createFragmentShader:()=>WI,createFramebuffer:()=>XI,createProgram:()=>UI,createStaticIndexBuffer:()=>qI,createStaticVertexBuffer:()=>HI,createTexture:()=>KI,createVertexShader:()=>zI,getBatchDim:()=>Pa,getExtensionOrThrow:()=>nc,getFramebufferErrorMessage:()=>jE,getMaxTexturesInShader:()=>tw,getNumChannels:()=>l8,getProgramUniformLocation:()=>QI,getProgramUniformLocationOrThrow:()=>YI,getRowsCols:()=>Oa,getShapeAs3D:()=>ac,getTextureShapeFromLogicalShape:()=>JI,getWebGLDisjointQueryTimerVersion:()=>rw,getWebGLErrorMessage:()=>qE,getWebGLMaxTextureSize:()=>ew,hasExtension:()=>Hr,isCapableOfRenderingToFloatTexture:()=>ow,isDownloadFloatTextureEnabled:()=>nw,isReshapeFree:()=>Ti,isWebGLFenceEnabled:()=>sw,isWebGLVersionEnabled:()=>Gd,linkProgram:()=>GI,logShaderSourceAndInfoLog:()=>zd,resetMaxTextureSize:()=>d8,resetMaxTexturesInShader:()=>h8,unbindColorTextureFromFramebuffer:()=>Ud,unbindTextureUnit:()=>m8,validateFramebuffer:()=>sc,validateProgram:()=>$l,validateTextureSize:()=>jI});var Eu={},Md={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function MI(r,e){Eu[r]=e}function Gr(r,e){if(!(r in Eu)||e!=null){let o=a8(r,e);if(o!==null)Eu[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=Eu[r];return t==null||t.isContextLost()?(delete Eu[r],Gr(r)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Eu[r])}function s8(r){if(typeof OffscreenCanvas!=\"undefined\"&&r===2)return new OffscreenCanvas(300,150);if(typeof document!=\"undefined\")return document.createElement(\"canvas\");throw new Error(\"Cannot create a canvas in this context\")}function a8(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?s8(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete Eu[r]},!1),P().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Md.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",Md)||t.getContext(\"experimental-webgl\",Md):t.getContext(\"webgl2\",Md)}var ki;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(ki||(ki={}));var ir;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(ir||(ir={}));var Jt;(function(r){r[r.UNPACKED_FLOAT16=0]=\"UNPACKED_FLOAT16\",r[r.UNPACKED_FLOAT32=1]=\"UNPACKED_FLOAT32\",r[r.PACKED_4X1_UNSIGNED_BYTE=2]=\"PACKED_4X1_UNSIGNED_BYTE\",r[r.PACKED_2X2_FLOAT32=3]=\"PACKED_2X2_FLOAT32\",r[r.PACKED_2X2_FLOAT16=4]=\"PACKED_2X2_FLOAT16\"})(Jt||(Jt={}));function $u(r,e){return[e,r]}function GE(r,e){return r*e}function _l(r){let e=x.sizeFromShape(r),t=Math.ceil(e/4);return x.sizeToSquarishShape(t)}function Ks(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function HE(r,e){let[t,o]=Ks(r,e);return t*o*4}function El(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return P().getNumber(\"WEBGL_VERSION\")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function me(r,e){let t=e();return P().getBool(\"DEBUG\")&&i8(r),t}function i8(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+qE(r,e))}var u8=596e-10,p8=65504;function VI(r){return!!(P().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||u8r.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function zI(r,e){let t=Da(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(me(r,()=>r.shaderSource(t,e)),me(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error(\"Failed to compile vertex shader.\");return t}function WI(r,e){let t=Da(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(me(r,()=>r.shaderSource(t,e)),me(r,()=>r.compileShader(t)),P().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw zd(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var c8=/ERROR: [0-9]+:([0-9]+):/g;function zd(r,e){let t=c8.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(`\n`),s=n.length.toString().length+2,a=n.map((l,m)=>x.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),\"Unable to create WebGLProgram.\")}function GI(r,e){if(me(r,()=>r.linkProgram(e)),!P().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Failed to link vertex and fragment shaders.\")}function $l(r,e){if(me(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Shader program validation failed.\")}function HI(r,e){let t=Da(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),me(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function qI(r,e){let t=Da(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return me(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),me(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function l8(){return P().getNumber(\"WEBGL_VERSION\")===2?1:4}function KI(r){return Da(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function jI(r,e){let t=P().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function XI(r){return Da(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function Wd(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),me(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),me(r,()=>r.enableVertexAttribArray(i)),!0)}function KE(r,e,t){XE(r,t),me(r,()=>r.activeTexture(r.TEXTURE0+t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function m8(r,e){XE(r,e),me(r,()=>r.activeTexture(r.TEXTURE0+e)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function YI(r,e,t){return Da(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function QI(r,e,t){return r.getUniformLocation(e,t)}function ZI(r,e,t,o){me(r,()=>KE(r,e,o)),me(r,()=>r.uniform1i(t,o))}function f8(r){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),me(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),me(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Rl(r,e,t){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),me(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Ud(r,e){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),me(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function sc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+jE(r,e))}function jE(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case r.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return`unknown error ${e}`}}function Da(r,e,t){let o=me(r,()=>e());if(o==null)throw new Error(t);return o}function XE(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function Pa(r,e=2){return x.sizeFromShape(r.slice(0,r.length-e))}function Oa(r){if(r.length===0)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function ac(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[Pa(r),...Oa(r)]),e}function JI(r,e=!1){let t=P().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=P().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&P().getBool(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?x.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=x.squeezeShape(r).newShape);let n=x.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=Pa(r),p=2,u=2;r.length&&([p,u]=Oa(r)),n=i*(p/2)*(u/2),s=x.sizeToSquarishShape(n).map(c=>c*2)}else s=x.sizeToSquarishShape(n);return s}function Ld(r){return r%2===0}function Ti(r,e){if(r=r.slice(-2),e=e.slice(-2),x.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r.slice(-1)[0],o=e.slice(-1)[0];if(t===o||Ld(t)&&Ld(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Ld(r[0])&&Ld(e[0])}var Bd,Vd;function ew(r){if(Bd==null){let e=Gr(r);Bd=e.getParameter(e.MAX_TEXTURE_SIZE)}return Bd}function d8(){Bd=null}function h8(){Vd=null}function tw(r){if(Vd==null){let e=Gr(r);Vd=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Vd)}function rw(r){if(r===0)return 0;let e,t=Gr(r);return Hr(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:Hr(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function Hr(r,e){return r.getExtension(e)!=null}function Gd(r){try{if(Gr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function ow(r){if(r===0)return!1;let e=Gr(r);if(r===1){if(!Hr(e,\"OES_texture_float\"))return!1}else if(!Hr(e,\"EXT_color_buffer_float\"))return!1;return BI(e)}function nw(r){if(r===0)return!1;let e=Gr(r);if(r===1){if(!Hr(e,\"OES_texture_float\")||!Hr(e,\"WEBGL_color_buffer_float\"))return!1}else{if(Hr(e,\"EXT_color_buffer_float\"))return BI(e);let o=\"EXT_color_buffer_half_float\";if(Hr(e,o)){let n=e.getExtension(o);return g8(e,n)}return!1}return BI(e)}function BI(r){let e=El(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,o,n,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function g8(r,e){let t=El(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,n,s,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function sw(r){return r!==2?!1:Gr(r).fenceSync!=null}function as(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Ce=P();Ce.registerFlag(\"HAS_WEBGL\",()=>Ce.getNumber(\"WEBGL_VERSION\")>0);Ce.registerFlag(\"WEBGL_VERSION\",()=>Gd(2)?2:Gd(1)?1:0);Ce.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Ce.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Ce.get(\"WEBGL_VERSION\")===2);Ce.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Ce.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Ce.registerFlag(\"WEBGL_PACK\",()=>Ce.getBool(\"HAS_WEBGL\"));Ce.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_CLIP\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>ew(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>tw(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Ce.getNumber(\"WEBGL_VERSION\");return r===0?0:rw(r)});Ce.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Ce.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!ii.isMobile());Ce.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>ow(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Ce.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Ce.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Ce.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>nw(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>sw(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Ce.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Ce.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Ce.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>ii.isMobile()?1:-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Ce.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Ce.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Ce.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Ce.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Ce.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Ce.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Ce.getBool(\"IS_TEST\"));Ce.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Ce.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Ce.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);function Ct(){let r,e,t,o,n,s,a,i,p,u;return P().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=P().getBool(\"WEBGL2_ISNAN_CUSTOM\")?`\n bool isnan_custom(float val) {\n uint floatToUint = floatBitsToUint(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n `:\"\",p=\"\",u=`\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `):(r=\"\",e=\"attribute\",t=\"varying\",o=\"varying\",n=\"texture2D\",s=\"gl_FragColor\",a=\"\",i=`\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n `,p=`\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n `,u=`\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function is(r,e,t=\"index\"){let o=x.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function Ru(r,e,t=\"index\"){let o=x.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function x8(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function YE(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=x8(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function uc(r){let e=x.computeStrides(r).map(t=>t.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z;\n }\n`}function pc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Hd=`\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n`;var{getBroadcastDims:QE}=I;function ZE(r,e,t){let o=[];if(r.forEach(f=>{let d=x.sizeFromShape(f.shapeInfo.logicalShape);if(f.shapeInfo.isUniform?o.push(`uniform float ${f.name}${d>1?`[${d}]`:\"\"};`):(o.push(`uniform sampler2D ${f.name};`),o.push(`uniform int offset${f.name};`)),t.enableShapeUniforms){let{uniformShape:h}=qd(t.packedInputs,f.shapeInfo.logicalShape,f.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${f.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${f.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${f.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${f.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${f.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push(\"uniform int outShape;\");break;case 2:o.push(\"uniform ivec2 outShape;\"),o.push(\"uniform int outShapeStrides;\");break;case 3:o.push(\"uniform ivec3 outShape;\"),o.push(\"uniform ivec2 outShapeStrides;\");break;case 4:o.push(\"uniform ivec4 outShape;\"),o.push(\"uniform ivec3 outShapeStrides;\");break;default:break}o.push(\"uniform ivec2 outTexShape;\")}t.customUniforms&&t.customUniforms.forEach(f=>{o.push(`uniform ${f.type} ${f.name}${f.arrayIndex?`[${f.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(f=>y8(f,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=Ct(),p=I8(i),u,c,l=v8(i);return e.isPacked?(u=b8(e.logicalShape,a,t.enableShapeUniforms),c=S8(i)):(u=C8(e.logicalShape,a,t.enableShapeUniforms),c=w8(i)),t.packedInputs&&(l+=_8),[l,p,c,n,u,s,t.userCode].join(`\n`)}function lc(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return V8(r,e);case 1:return W8(r,e);case 2:return G8(r,e);case 3:return q8(r,e);case 4:return j8(r,e);case 5:return X8(r);case 6:return Y8(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function JE(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return B8(r);case 1:return z8(r,e);case 2:return U8(r,e);case 3:return H8(r,e);default:return K8(r,e)}}function y8(r,e,t=!1,o){let n=\"\";t?n+=JE(r,o):n+=lc(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=Q8(r,e):n+=Z8(r,e)),n}function b8(r,e,t){switch(r.length){case 0:return e$();case 1:return E8(r,e,t);case 2:return M8(r,e,t);case 3:return R8(r,e,t);default:return F8(r,e,t)}}function C8(r,e,t){switch(r.length){case 0:return e$();case 1:return $8(r,e,t);case 2:return L8(r,e,t);case 3:return A8(r,e,t);case 4:return D8(r,e,t);case 5:return P8(r,e);case 6:return O8(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function I8(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function w8(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function S8(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function v8(r){return`${r.version}\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n ${r.varyingFs} vec2 resultUV;\n ${r.defineOutput}\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n ${r.defineSpecialNaN}\n ${r.defineSpecialInf}\n ${r.defineRound}\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${k8}\n ${T8}\n ${N8}\n `}var k8=`\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,T8=`\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,N8=`\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,_8=`\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n`;function e$(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function E8(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${o[1]}.0);\n }\n `:o[1]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${o[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n return 2 * (resTexRC.x * ${o[1]} + resTexRC.y);\n }\n `}function $8(r,e,t){return e[0]===1?t?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${e[1]}.0);\n }\n `:e[1]===1?t?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${e[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n return resTexRC.x * outTexShape[1] + resTexRC.y;\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n return resTexRC.x * ${e[1]} + resTexRC.y;\n }\n `}function R8(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec3(b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[2]/2),s=n*Math.ceil(r[1]/2);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n int index = resTexRC.x * ${o[1]} + resTexRC.y;\n\n int b = index / ${s};\n index -= b * ${s};\n\n int r = 2 * (index / ${n});\n int c = imod(index, ${n}) * 2;\n\n return ivec3(b, r, c);\n }\n `}function A8(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n ${Ru([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=is([\"r\",\"c\",\"d\"],r);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n int index = resTexRC.x * ${e[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function F8(r,e,t){if(t)return`\n ivec4 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatchN = texelsInBatch * outShape[1];\n\n int b2 = index / texelsInBatchN;\n index -= b2 * texelsInBatchN;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec4(b2, b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[r.length-1]/2),s=n*Math.ceil(r[r.length-2]/2),a=s,i=\"\",p=\"b, r, c\";for(let u=2;u=1?c=\"coords = 0;\":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(`\n`);let m=\"\";a<2&&s>0?m=\"coords\":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(\", \");let f=\"return outputValue;\",h=x.sizeFromShape(r.shapeInfo.logicalShape)===1,y=x.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!y)f=`\n return vec4(outputValue.xy, outputValue.xy);\n `;else if(h&&!y)a===1?f=`\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n `:f=`\n return vec4(outputValue.x);\n `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?f=\"return vec4(outputValue.x);\":i.indexOf(b)>-1?f=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":i.indexOf(C)>-1&&(f=\"return vec4(outputValue.xx, outputValue.zz);\")}return`\n vec4 ${n}() {\n ${p} coords = getOutputCoords();\n ${c}\n vec4 outputValue = get${o}(${m});\n ${f}\n }\n `}function Z8(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n=\"get\"+o+\"AtOutCoords\",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&x.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${t}, resultUV);\n }\n `;let u=_e(p),c=QE(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,f=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];i===0?m=\"\":p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(h=>`coords.${f[h+l]} = 0;`).join(`\n`);let d=\"\";return p<2&&i>0?d=\"coords\":d=r.shapeInfo.logicalShape.map((h,g)=>`coords.${f[g+l]}`).join(\", \"),`\n float ${n}() {\n ${u} coords = getOutputCoords();\n ${m}\n return get${o}(${d});\n }\n `}function _e(r){if(r<=1)return\"int\";if(r===2)return\"ivec2\";if(r===3)return\"ivec3\";if(r===4)return\"ivec4\";if(r===5)return\"ivec5\";if(r===6)return\"ivec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function qd(r,e,t){let{newShape:o,keptDims:n}=x.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!x.arraysEqual(e,t)&&o.lengthr[t]).join(\", \")}function r$(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=ZE(n,a,e),p=WI(r.gl,i),u=r.createProgram(p);return P().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},aw(r,e,u))}function aw(r,e,t){let o={},n={},s={},a=[],i,p,u,c=null,l=null;l=r.getUniformLocation(t,\"NAN\",!1),P().getNumber(\"WEBGL_VERSION\")===1&&(c=r.getUniformLocation(t,\"INFINITY\",!1));let m=!1;for(let f=0;f{a[d]=r.getUniformLocation(t,f.name,m)}),{uniformLocations:o,customUniformLocations:a,infLoc:c,nanLoc:l,inShapesLocations:n,inTexShapesLocations:s,outShapeLocation:i,outShapeStridesLocation:u,outTexShapeLocation:p}}function t$(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!x.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!x.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function o$(r,e,t,o,n){e.program.enableShapeUniforms||(t$(e.inShapeInfos,t),t$([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),P().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN),t.forEach((p,u)=>{let c=e.program.variableNames[u],l=e.uniformLocations[c],m=e.uniformLocations[`offset${c}`],f=e.inShapesLocations[`${c}Shape`],d=e.inTexShapesLocations[`${c}TexShape`];if(f){let{uniformShape:h}=qd(e.program.packedInputs,p.shape,p.texData.texShape);switch(h.length){case 1:r.gl.uniform1iv(f,new Int32Array(h));break;case 2:r.gl.uniform2iv(f,new Int32Array(h));break;case 3:r.gl.uniform3iv(f,new Int32Array(h));break;case 4:r.gl.uniform4iv(f,new Int32Array(h));break;default:break}}if(d&&r.gl.uniform2i(d,p.texData.texShape[0],p.texData.texShape[1]),l!=null){if(p.isUniform){if(x.sizeFromShape(p.shape)<2)r.gl.uniform1f(l,p.uniformValues[0]);else{let h=p.uniformValues;h instanceof Float32Array||(h=new Float32Array(h)),r.gl.uniform1fv(l,h)}return}p.texData.slice!=null&&m!=null&&r.gl.uniform1i(m,p.texData.slice.flatOffset),r.setInputMatrixTexture(p.texData.texture.texture,l,u)}});let i=e.outShapeLocation;if(i)switch(o.shape.length){case 1:r.gl.uniform1iv(i,new Int32Array(o.shape));break;case 2:r.gl.uniform2iv(i,new Int32Array(o.shape));break;case 3:r.gl.uniform3iv(i,new Int32Array(o.shape));break;case 4:r.gl.uniform4iv(i,new Int32Array(o.shape));break;default:break}if(e.outShapeStridesLocation){let p=x.computeStrides(o.shape);switch(o.shape.length){case 2:r.gl.uniform1iv(e.outShapeStridesLocation,new Int32Array(p));break;case 3:r.gl.uniform2iv(e.outShapeStridesLocation,new Int32Array(p));break;case 4:r.gl.uniform3iv(e.outShapeStridesLocation,new Int32Array(p));break;default:break}}e.outTexShapeLocation&&r.gl.uniform2i(e.outTexShapeLocation,o.texData.texShape[0],o.texData.texShape[1]),e.program.customUniforms&&n&&e.program.customUniforms.forEach((p,u)=>{let c=e.customUniformLocations[u],l=n[u];if(p.type===\"float\")r.gl.uniform1fv(c,l);else if(p.type===\"vec2\")r.gl.uniform2fv(c,l);else if(p.type===\"vec3\")r.gl.uniform3fv(c,l);else if(p.type===\"vec4\")r.gl.uniform4fv(c,l);else if(p.type===\"int\")r.gl.uniform1iv(c,l);else if(p.type===\"ivec2\")r.gl.uniform2iv(c,l);else if(p.type===\"ivec3\")r.gl.uniform3iv(c,l);else if(p.type===\"ivec4\")r.gl.uniform4iv(c,l);else throw Error(`uniform type ${p.type} is not supported yet.`)}),r.executeProgram()}function n$(r,e,t){let o=\"\";e.concat(t).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=qd(r.packedInputs,a.shape,p),m=\"\",f=\"\",d=\"\";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)f=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=x.computeStrides(c);d=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&x.arraysEqual(a.shape,p),y=x.sizeFromShape(a.shape)===1,b=I.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&x.arraysEqual(p,t.texData.texShape),w=r.packedInputs||c.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:\"\"}_${c.length}_${y}_${b}_${g}_${m}_${f}_${d}_${w}_${i}`}else{let p=a.isUniform?\"uniform\":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+=\"_\"+o+\"_\"+n+`${P().getNumber(\"WEBGL_VERSION\")}`,s}function lt(r){return P().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Kd=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=ki.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ru([\"r\",\"c\",\"d\"],e):is([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n ${t.output} = result;\n }\n `}};var jd=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=ki.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ru([\"r\",\"c\",\"d\"],e):is([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n ${t.output} = result;\n }\n `}};var Xd=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=ir.DOWNLOAD;let t=Ct();this.outputShape=e,this.userCode=`\n ${Hd}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var Yd=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ir.DOWNLOAD;let t=Ct();this.outputShape=e,this.userCode=`\n ${Hd}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${t.output} = encode_float(x);\n }\n `}};var tY={R:0,G:1,B:2,A:3},Al=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;ihw,createBufferFromOutputTexture:()=>yw,createFloat16MatrixTexture:()=>lw,createFloat16PackedMatrixTexture:()=>dw,createFloat32MatrixTexture:()=>cw,createIndexBuffer:()=>pw,createPackedMatrixTexture:()=>fw,createUnsignedBytesMatrixTexture:()=>mw,createVertexBuffer:()=>uw,createVertexShader:()=>iw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Cw,downloadFloat32MatrixFromBuffer:()=>bw,downloadMatrixFromPackedOutputTexture:()=>ww,downloadPackedMatrixFromBuffer:()=>Iw,getInternalFormatForFloat16MatrixTexture:()=>Jd,getInternalFormatForFloat16PackedMatrixTexture:()=>rh,getInternalFormatForFloat32MatrixTexture:()=>Zd,getInternalFormatForPackedMatrixTexture:()=>th,getInternalFormatForUnsignedBytesMatrixTexture:()=>eh,uploadDenseMatrixToTexture:()=>gw,uploadPixelDataToTexture:()=>xw});function iw(r){let e=Ct(),t=`${e.version}\n precision highp float;\n ${e.attribute} vec3 clipSpacePos;\n ${e.attribute} vec2 uv;\n ${e.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return zI(r,t)}function uw(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return HI(r,e)}function pw(r){let e=new Uint16Array([0,1,2,2,1,3]);return qI(r,e)}function Fl(r,e,t,o,n,s){jI(e,t);let a=KI(r),i=r.TEXTURE_2D;return me(r,()=>r.bindTexture(i,a)),me(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),me(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),me(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),me(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),P().getNumber(\"WEBGL_VERSION\")===1?me(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):me(r,()=>r.texStorage2D(i,1,o,e,t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function Zd(r){return r.internalFormatFloat}function cw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,Zd(o),o.textureFormatFloat,r.FLOAT)}function Jd(r){return r.internalFormatHalfFloat}function lw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,Jd(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function eh(r){return r.downloadTextureFormat}function mw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,eh(o),r.RGBA,r.UNSIGNED_BYTE)}function th(r){return r.internalFormatPackedFloat}function fw(r,e,t,o){let[n,s]=Ks(e,t);return Fl(r,n,s,th(o),r.RGBA,r.FLOAT)}function rh(r){return r.internalFormatPackedHalfFloat}function dw(r,e,t,o){let[n,s]=Ks(e,t);return Fl(r,n,s,rh(o),r.RGBA,o.textureTypeHalfFloat)}function hw(r,e,t){return me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Wd(r,e,\"clipSpacePos\",t,3,20,0)&&Wd(r,e,\"uv\",t,2,20,12)}function gw(r,e,t,o,n,s){me(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),P().getNumber(\"WEBGL_VERSION\")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function xw(r,e,t){me(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?P().getNumber(\"WEBGL_VERSION\")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):P().getNumber(\"WEBGL_VERSION\")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function yw(r,e,t,o){let n=r.createBuffer();me(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return me(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),me(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),me(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function bw(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function Cw(r,e,t,o){let[n,s]=$u(e,t),a=4,i=new Uint8Array(GE(e*t,a));return me(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function Iw(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(HE(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function ww(r,e,t){let o=new Float32Array(e*t*4);return me(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var Fu=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=P().getNumber(\"WEBGL_VERSION\");e!=null?(this.gl=e,MI(t,e)):this.gl=Gr(t);let o=\"WEBGL_color_buffer_float\",n=\"EXT_color_buffer_half_float\";if(this.parallelCompilationExtension=this.gl.getExtension(\"KHR_parallel_shader_compile\"),P().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=nc(this.gl,s),Hr(this.gl,a))this.textureHalfFloatExtension=nc(this.gl,a);else if(P().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\");if(this.colorBufferFloatExtension=this.gl.getExtension(o),Hr(this.gl,n))this.colorBufferHalfFloatExtension=nc(this.gl,n);else if(P().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\")}else if(o=\"EXT_color_buffer_float\",Hr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Hr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=uw(this.gl),this.indexBuffer=pw(this.gl),this.framebuffer=XI(this.gl),this.textureConfig=El(this.gl,this.textureHalfFloatExtension)}get debug(){return P().getBool(\"DEBUG\")}dispose(){if(this.disposed)return;this.program!=null&&console.warn(\"Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing.\"),this.outputTexture!=null&&console.warn(\"Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.\");let e=this.gl;me(e,()=>e.finish()),me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),me(e,()=>e.deleteFramebuffer(this.framebuffer)),me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),me(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),me(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),cw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),lw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),mw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),xw(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),gw(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),dw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),fw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Ud(this.gl,this.framebuffer),this.outputTexture=null),me(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>Cw(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return Iw(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return bw(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=yw(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(P().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>ww(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=iw(t));let o=UI(t);return me(t,()=>t.attachShader(o,this.vertexShader)),me(t,()=>t.attachShader(o,e)),GI(t,o),this.debug&&$l(t,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=hw(t,this.program,this.vertexBuffer)),o}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&me(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&$l(this.gl,this.program),me(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?YI(this.gl,e,t):QI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),me(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),ZI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ks(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&$l(this.gl,this.program),sc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),me(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),me(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=nc(this.gl,P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2?\"EXT_disjoint_timer_query_webgl2\":\"EXT_disjoint_timer_query\")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await x.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=rY(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;\"setTimeoutCustom\"in P().platform&&(o=P().platform.setTimeoutCustom.bind(P().platform)),x.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Rl(this.gl,e,this.framebuffer),this.debug&&sc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Rl(this.gl,this.outputTexture,this.framebuffer),this.debug&&sc(this.gl)):Ud(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Rl(n,e,this.framebuffer),this.debug&&sc(n),this.outputTexture=e,me(n,()=>n.viewport(0,0,t,o)),me(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),me(this.gl,()=>this.gl.scissor(e,t,o,n))}throwIfDisposed(){if(this.disposed)throw new Error(\"Attempted to use disposed GPGPUContext.\")}throwIfNoProgram(){if(this.program==null)throw new Error(\"No GPU program is currently set.\")}};function rY(r){let e=0;for(;e`${r}.${t}`)}function $t(r,e){return e===1?[r]:vw(r,e)}function j$(r,e){if(r===1)return\"rc\";let t=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let t=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),\n cEdge ? 0. : getA(${t[1]}),\n rEdge ? 0. : getA(${t[2]}),\n rEdge || cEdge ? 0. : getA(${t[3]})`}};var hc=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let o=\"\";for(let n=0;n<4;n++){let s=\"thisRC = rc;\";n%2===1&&(s+=\"thisRC.z += 1;\"),n>1&&(s+=\"thisRC.y += 1;\"),o+=`\n ${s}\n ${n>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\"}\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result[${n}] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n ${n>0?\"}\":\"\"}\n `}this.userCode=`\n ${oY(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?pc():uc(e)}\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = ${this.enableShapeUniforms?\"outShape[1]\":e[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":e[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function oY(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?YE([\"r\",\"c\",\"d\"],\"inputShape\"):is([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var ih=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,o){let n=Y$(t,o),s=Q$(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=X$(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].shift();return this.usedTextures[s].push(p),p}let i;return n===Jt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===Jt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===Jt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===Jt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===Jt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=Y$(o,n),a=Q$(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=X$(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=P().get(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(e);if(c<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function nY(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function X$(r,e,t,o,n){let s=sY(e,o),a;if(n){let[p,u]=Ks(r[0],r[1]);a=p*u}else{let[p,u]=$u(r[0],r[1]);a=p*u}let i=nY(t,s);return a*i}function sY(r,e){switch(r){case Jt.PACKED_2X2_FLOAT32:return th(e);case Jt.PACKED_2X2_FLOAT16:return rh(e);case Jt.UNPACKED_FLOAT32:return Zd(e);case Jt.UNPACKED_FLOAT16:return Jd(e);case Jt.PACKED_4X1_UNSIGNED_BYTE:return eh(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function aY(r){return P().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?Jt.PACKED_2X2_FLOAT32:Jt.UNPACKED_FLOAT32:r?Jt.PACKED_2X2_FLOAT16:Jt.UNPACKED_FLOAT16}function Y$(r,e){if(r===ir.UPLOAD)return Jt.PACKED_2X2_FLOAT32;if(r===ir.RENDER||r==null)return aY(e);if(r===ir.DOWNLOAD||r===ir.PIXELS)return Jt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function Q$(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var fr=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${t}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}},Vt=\"if (isnan(x)) return x;\",Z$=\"return x;\",kw=\"return abs(x);\";var J$=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",eR=Vt+`\n return (x < 0.0) ? 0.0 : x;\n`,tR=Vt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Pu=\"return x;\",rR=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var nR=\"return x;\",sR=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,aR=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,iR=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,uR=\"return 1.0 / (1.0 + exp(-1.0 * x));\",No=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${t}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var uh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.length,o=$t(\"rc\",t),n=_e(t),s=j$(t,o),a=o.slice(-2),i=t<=1?\"rc\":`vec2(${a.join(\",\")})`;this.userCode=`\n void main() {\n ${n} rc = getOutputCoords();\n vec4 packedInput = getA(${s});\n\n setOutput(getChannel(packedInput, ${i}));\n }\n `}};var uY=Bt.whereImpl,pY=1e-7,cY=1e-4,ph={};function lY(r){return r in ph||(ph[r]={}),ph[r]}var mY=P().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),fY=600;function dY(){return P().global.screen==null?1024:P().global.screen.height*P().global.screen.width*window.devicePixelRatio*fY/1024/1024}var Ni=class extends Jr{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!P().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof Fu)t=e;else{let o=Gr(P().getNumber(\"WEBGL_VERSION\"),e);t=new Fu(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Gr(P().getNumber(\"WEBGL_VERSION\"));t=new Fu(o),this.binaryCache=lY(P().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new ih(this.gpgpu),this.numMBBeforeWarning=dY(),this.texData=new rn(this,cr())}nextDataId(){return Ni.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=ac(t),c=new Al(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((P().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||P().getBool(\"DEBUG\"))&&this.checkNumericalProblems(e),o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:ir.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,o,n,s){if(P().getBool(\"DEBUG\")&&this.checkNumericalProblems(t),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(e,{shape:o,dtype:n,values:t,usage:ir.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new No(i,Pu):m=new fr(i,Pu);let f=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),d=this.readSync(f.dataId);return this.disposeIntermediateTensorInfo(f),d}if(o!=null)return this.convertAndCacheOnCPU(e);if(n===\"string\")return o;let u=this.activeTimers!=null,c;u&&(c=x.now());let l;if(n===\"complex64\"){let m=this.readSync(s.real.dataId),f=this.readSync(s.imag.dataId);l=I.mergeRealAndImagArrays(m,f)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=x.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let d=this.pendingRead.get(e);return new Promise(h=>d.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let d;p?d=new No(n,Pu):d=new fr(n,Pu);let h=this.runWebGLProgram(d,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(P().getBool(\"DEBUG\")&&!P().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&P().getNumber(\"WEBGL_VERSION\")===2)throw new Error(\"tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.\");let u=null,c;if(a!==\"complex64\"&&P().get(\"WEBGL_BUFFER_SUPPORTED\")){c=this.decode(e);let d=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(d.texture.texture,..._l(n))}this.pendingRead.set(e,[]),a!==\"complex64\"&&await this.gpgpu.createAndWaitForFence();let l;if(a===\"complex64\"){let d=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=d[0],g=d[1];l=I.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let d=x.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,d)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let d=this.gpgpu.gl;me(d,()=>d.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),f=this.pendingRead.get(e);return this.pendingRead.delete(e),f.forEach(d=>d(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i===\"complex64\")throw new Error(\"Does not support reading texture for complex64 dtype.\");if(a!=null){let f;p?f=new No(s,Pu):f=new fr(s,Pu);let d=this.runWebGLProgram(f,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(d,t);return this.disposeIntermediateTensorInfo(d),h}if(u==null)throw n!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let c=this.decode(e,t.customTexShape),l=cr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ne(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=x.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=x.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0){let p=await Promise.all(s);i.kernelMs=x.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \")}else i.kernelMs={error:\"WebGL query timers are not supported in this environment.\"};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:x.now(),endMs:null}}endTimer(e){return P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=x.now(),e)}async getQueryTime(e){if(P().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=mY){return P().getBool(\"WEBGL_CPU_FORWARD\")&&e.every(o=>this.texData.get(o.dataId).texture==null&&x.sizeFromShape(o.shape)0&&x.isString(o[0])){let s=o.map(a=>x.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new uh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new ah(e.shape),o=!0;return this.runWebGLProgram(t,[e],e.dtype,null,o)}packedReshape(e,t){let o=[Pa(e.shape),...Oa(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[Pa(t),...Oa(t)],a=new hc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=x.sizeFromShape(s),f=t[0]*t[1]*4;x.assert(m<=f,()=>\"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.\")}let i=ac(s),p;n?p=new jd(i):p=new Kd(i);let u=!0,c=[t!=null?t:_l(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===ki.DENSE){let y=a!=null?a:_l(e.outputShape);p.texShape=y.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),x.sizeFromShape(i.shape)===0)return p.values=x.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(y=>{if(y.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");let b=this.texData.get(y.dataId);if(b.texture==null){if(!e.packedInputs&&x.sizeFromShape(y.shape)<=P().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!b.isPacked!=!!e.packedInputs)y=b.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),b=this.texData.get(y.dataId);else if(b.isPacked&&!Ti(b.shape,y.shape)){let C=y,w=y.shape;y.shape=b.shape,y=this.packedReshape(y,w),u.push(y),b=this.texData.get(y.dataId),C.shape=w}return{shape:y.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=n$(e,c,l),f=this.getAndSaveBinary(m,()=>r$(this.gpgpu,e,c,l)),d=this.activeTimers!=null,h;d&&(h=this.startTimer()),P().get(\"ENGINE_COMPILE_ONLY\")||o$(this.gpgpu,f,c,l,n),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),d&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=P().get(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let y=x.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!P().getBool(\"WEBGL_LAZILY_UNPACK\")&&p.isPacked&&s===!1){let y=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),y}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(P().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!=\"undefined\"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Ne(()=>{if(!P().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=P().getBool(\"DEBUG\");P().set(\"DEBUG\",!1);let t=this.abs(be(1e-8)).dataSync()[0];if(P().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?pY:cY}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=x.now());let l=t.texShape;if(l==null&&(l=JI(o,p),t.texShape=l),s!=null){let m=ac(o),f,d=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([d,h]=Ks(l[0],l[1])),p?f=new Qd(m,g):f=new Al(m,g);let y=g?[h,d]:l,b=this.makeTensorInfo(y,n),C=this.texData.get(b.dataId);g?C.usage=ir.PIXELS:C.usage=ir.UPLOAD,C.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),d,h,s);let w=[[h,d]],k=!0,_=this.runWebGLProgram(f,[b],n,w,k),E=this.texData.get(_.dataId);t.texShape=E.texShape,t.isPacked=E.isPacked,t.usage=E.usage,P().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(_.dataId):(t.texture=E.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=x.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return this.releaseGPUData(e),t!=null&&(o.values=hY(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*x.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await kC(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(zd(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error(\"Failed to compile fragment shader.\")):new Error(\"Failed to link vertex and fragment shaders.\");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,inShapesLocations:a,inTexShapesLocations:i,outShapeLocation:p,outShapeStridesLocation:u,outTexShapeLocation:c}=aw(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.inShapesLocations=a,e.inTexShapesLocations=i,e.outShapeLocation=p,e.outShapeStridesLocation=u,e.outTexShapeLocation=c}}createTensorFromTexture(e,t,o){let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error(\"The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.\");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Ni.nextDataId=0;function hY(r,e){if(e===\"float32\"||e===\"complex64\")return r;if(e===\"int32\"||e===\"bool\"){let t=e===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Ni,2);var R9e={forceHalfFloat:pR};var gc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var _o=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=I.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${e}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}};var js=`\n result.r = isNaN.r ? NAN : result.r;\n result.g = isNaN.g ? NAN : result.g;\n result.b = isNaN.b ? NAN : result.b;\n result.a = isNaN.a ? NAN : result.a;\n`;var Ko=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=I.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=lt(s);let a=\"\";if(n)if(s===0||x.sizeFromShape(this.outputShape)===1)a=`\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n `;else if(a=`\n ${_e(s)} coords = getOutputCoords();\n `,s===1)this.enableShapeUniforms?a+=`\n result.y = (coords + 1) >= outShape ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `:a+=`\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;else{let p=$t(\"coords\",s);this.enableShapeUniforms?a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= outShape[${s} - 2];\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= outShape[${s} - 1];\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `:a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= ${this.outputShape[s-2]};\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= ${this.outputShape[s-1]};\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `}this.userCode=`\n vec4 binaryOperation(vec4 a, vec4 b) {\n ${e}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${a}\n\n setOutput(result);\n }\n `}};function Rt(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var cR={kernelName:uo,backendName:\"webgl\",kernelFunc:Rt};function Ar(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.texData.get(s.dataId),i=Rt({inputs:{x:o},backend:t}),p=Rt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lR={kernelName:aa,backendName:\"webgl\",kernelFunc:Ar};var Tw=\"return (a < 0.) ? b * a : a;\",Nw=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function xY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",x.createScalarValue(s,\"float32\")),i=P().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Ko(Nw,n.shape,a.shape):new _o(Tw,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var mR={kernelName:Nn,backendName:\"webgl\",kernelFunc:xY};var _w=\"return (a < 0.) ? b * a : a;\",Ew=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function yY(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=P().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Ko(Ew,o.shape,n.shape):new _o(_w,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var fR={kernelName:Vn,backendName:\"webgl\",kernelFunc:yY};var jo=\"if (isnan(x)) return x;\";function he({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=P().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,c;return u?c=new No(a.shape,e):c=new fr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function ot({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype===\"complex64\"){let d=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,y]=[[d.complexTensorInfos.real,h.complexTensorInfos.real],[d.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[w,k]=C,_={dataId:w.dataId,dtype:w.dtype,shape:p.shape},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new _o(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],ct(w.dtype,k.dtype))}),b=Ar({inputs:{real:g,imag:y},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(y),b}let l=s||ct(p.dtype,u.dtype);if((p.dtype===\"string\"||u.dtype===\"string\"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let d=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype===\"string\"?I.fromUint8ToStringArray(d):d,y=p.dtype===\"string\"?I.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,y,l),w=c.makeTensorInfo(C,l),k=c.texData.get(w.dataId);return k.values=b,w}let m=P().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,f;return m?f=new Ko(e,p.shape,u.shape,t):f=new _o(r,p.shape,u.shape),c.runWebGLProgram(f,[p,u],l)}}function Ma(r,e=!1){if(r===\"linear\")return e?nR:Z$;if(r===\"relu\")return e?aR:eR;if(r===\"elu\")return e?sR:J$;if(r===\"relu6\")return e?iR:tR;if(r===\"prelu\")return e?Ew:_w;if(r===\"leakyrelu\")return e?Nw:Tw;if(r===\"sigmoid\")return e?uR:rR;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var xc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=[\"matrixA\",\"matrixB\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=lt(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?\"i * 2, rc.y\":\"rc.y, i * 2\",f=s?\"rc.z, i * 2\":\"i * 2, rc.z\",d=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],h=s?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],g=\"\",y=\"\";i&&(p?g=`vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${i}\n }`:u?g=`vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${i}\n }`:g=`vec4 activation(vec4 x) {\n ${i}\n }`,y=\"result = activation(result);\");let b=a?\"result += getBiasAtOutCoords();\":\"\";a&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),u&&this.variableNames.push(\"leakyreluAlpha\");let C=\"rc.x\",w=\"rc.x\";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!Ti(n.shape,p)&&!(c.texture!==null&&Ti(c.shape,p))?gR(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var xR={kernelName:Ss,backendName:\"webgl\",kernelFunc:J};var Ol=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${x.isInt(l)?l.toPrecision(2):l}, ones);`}let c=\"\";s%o>0&&(c=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return 0.0;\n }\n `),this.userCode=`\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${c}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${i}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${u}\n }\n\n int inIdx = inOffset + ${i};\n if (${p===1}) {\n vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n ${u}\n } else if (${p===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1), 0.0, 0.0);\n\n ${u}\n } else if (${p===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2), 0.0);\n\n ${u}\n }\n setOutput(sumValue);\n }\n `}};var ch=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=\"0.0\",p=\"\";t===\"prod\"?i=\"1.0\":t===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):t===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"sum\"?u=\"sumValue\":t===\"prod\"?u=\"prodValue\":t===\"all\"?u=\"allValue\":t===\"any\"&&(u=\"anyValue\");let c=Math.floor(o/4)*4,l=o%4,m=`\n if (${t===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${t===\"prod\"}) {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = ${p}(values, minMaxValue);\n if (${t===\"min\"} || ${t===\"max\"}) {\n minMaxValue = ${p}(values, minMaxValue);\n bvec4 isNaN = isnan(values);\n if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n minMaxValue = vec4(NAN);\n }\n }\n }\n `,f=\"vec4\";t===\"all\"?(i=\"1.0\",m=`\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n `,f=\"bvec4\"):t===\"any\"&&(i=\"0.0\",m=`\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n `,f=\"bvec4\");let d=\"\";s%o>0&&(d=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `),this.userCode=`\n const float initializationValue = ${i};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${d}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n vec4 minMaxValue = vec4(${i});\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===2}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===3}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function CY(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=I.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function qr(r,e,t,o){let n=CY(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=_e(this.rank),s=vw(\"rc\",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[y,l,f]:[y,f,l],_=o?[b,d,m]:[b,m,d],E=J({inputs:{x:r},backend:n,attrs:{shape:k}}),R=J({inputs:{x:e},backend:n,attrs:{shape:_}}),A=[E,R],D=Math.max(y,b),O=t?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,W=p===\"leakyrelu\",V=p!=null?Ma(p,!0):null,G=M||L||W||V!=null,q;if((f===1||d===1)&&O>Rw&&G===!1){let j=E,Y=R;t&&(j=xt({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),A.push(j)),o&&(Y=xt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),A.push(Y));let Z=d!==1,ee=d===1,X=j;Z&&(X=J({inputs:{x:j},backend:n,attrs:{shape:[D,O,1]}}),A.push(X));let Q=d===1?2:1,se=Y;ee&&(se=J({inputs:{x:Y},backend:n,attrs:{shape:[D,1,O]}}),A.push(se));let ie=Pl({inputs:{a:X,b:se},backend:n});q=Ou({inputs:{x:ie},backend:n,attrs:{axis:Q,keepDims:!0}}),A.push(ie)}else{let j=ct(r.dtype,e.dtype),Y=new xc(k,_,[D,f,d],t,o,M,V,L,W),Z=[E,R];if(s!=null&&Z.push(s),L&&Z.push(a),W){let ee=n.makeTensorInfo([],\"float32\",x.createScalarValue(i,\"float32\"));Z.push(ee),A.push(ee)}q=n.runWebGLProgram(Y,Z,j)}let H=J({inputs:{x:q},backend:n,attrs:{shape:w}});A.push(q);for(let j of A)n.disposeIntermediateTensorInfo(j);return H}function wY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Mu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var IR={kernelName:Fo,backendName:\"webgl\",kernelFunc:wY};var wR=\"return abs(x);\";function SY(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=t.texData.get(o.dataId),a=nh(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return P().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new No(o.shape,wR):n=new fr(o.shape,wR),t.runWebGLProgram(n,[o],o.dtype)}var SR={kernelName:sn,backendName:\"webgl\",kernelFunc:SY};var vY=Vt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,kY=he({opSnippet:vY}),vR={kernelName:Li,backendName:\"webgl\",kernelFunc:kY};var TY=Vt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,backendName:\"webgl\",kernelFunc:NY};var TR=\"return a + b;\",_Y=ot({opSnippet:TR,packedOpSnippet:TR,supportsComplex:!0,cpuKernelImpl:s$}),NR={kernelName:_r,backendName:\"webgl\",kernelFunc:_Y};var fh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n float result = ${n};\n setOutput(result);\n }\n `}};var dh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n vec4 result = ${n};\n setOutput(result);\n }\n `}};function hh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Rt({inputs:{x:o[0]},backend:t});if(o.length>P().get(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=hh({inputs:o.slice(0,p),backend:t}),c=hh({inputs:o.slice(p),backend:t});return hh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>ct(p,u)),s=o.map(p=>p.shape),i=P().getBool(\"WEBGL_PACK\")?new dh(o[0].shape,s):new fh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var _R={kernelName:an,backendName:\"webgl\",kernelFunc:hh};function EY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=I.getInnerMostAxes(u.length,i)),I.assertAxesAreInnerMostDims(\"all\",u,i);let[m,f]=I.computeOutAndReduceShapes(l.shape,u),d=x.sizeFromShape(f),h=J({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}}),g=qr(h,h.dtype,\"all\",t),y;if(a){let b=I.expandShapeToKeepDim(m,p);y=J({inputs:{x:g},backend:t,attrs:{shape:b}})}else y=J({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),y}var ER={kernelName:oa,backendName:\"webgl\",kernelFunc:EY};function $Y(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=I.getInnerMostAxes(u.length,i)),I.assertAxesAreInnerMostDims(\"any\",u,i);let[m,f]=I.computeOutAndReduceShapes(l.shape,u),d=x.sizeFromShape(f),h=J({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}}),g=qr(h,h.dtype,\"any\",t),y;if(a){let b=I.expandShapeToKeepDim(m,p);y=J({inputs:{x:g},backend:t,attrs:{shape:b}})}else y=J({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),y}var $R={kernelName:na,backendName:\"webgl\",kernelFunc:$Y};var gh=class{constructor(e,t,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=t===\"max\"?\">\":\"<\",p=o?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < ${n}; i++) {\n int inIdx = ${p};\n float candidate = getA(batch, inIdx);\n if (candidate ${i} bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n `}};var xh=class{constructor(e,t,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,x.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push(\"bestIndicesA\");let i=this.outputShape,p=i.length,u=_e(p),c=$t(\"coords\",p),l,m;if(a===1){m=p+1;let R=_e(m);l=`\n ${R} sourceLocR = ${R}(${c.join()}, 0);\n ++${c[p-1]};\n ${R} sourceLocG = ${R}(${c.join()}, 0);\n ++${c[p-2]};\n ${R} sourceLocA = ${R}(${c.join()}, 0);\n --${c[p-1]};\n ${R} sourceLocB = ${R}(${c.join()}, 0);\n --${c[p-2]};`}else m=p,l=`\n ${u} sourceLocR = coords;\n ++${c[p-1]};\n ${u} sourceLocG = coords;\n ++${c[p-2]};\n ${u} sourceLocA = coords;\n --${c[p-1]};\n ${u} sourceLocB = coords;\n --${c[p-2]};`;let f=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),d=\".\"+f[m-1],h=f.map(R=>\"int \"+R),g=$t(\"sourceLocR\",m-1).concat(\"inIdx.r\"),y=$t(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=$t(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=$t(\"sourceLocA\",m-1).concat(\"inIdx.a\"),w=o===\"max\"?\"greaterThan\":\"lessThan\",k=n?\"\":`\n inIdx = round(vec4(getBestIndicesAChannel(${g.join()}),\n getBestIndicesAChannel(${y.join()}),\n getBestIndicesAChannel(${b.join()}),\n getBestIndicesAChannel(${C.join()})));`,_=`vec4(\n getAChannel(${g.join()}),\n hasNextCol ? getAChannel(${y.join()}) : 0.,\n hasNextRow ? getAChannel(${b.join()}) : 0.,\n hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,E=n?\"\":`\n float getBestIndicesAChannel(${h.join()}) {\n return getChannel(getBestIndicesA(${f.join()}),\n vec2(${f.slice(-2).join()}));\n }`;this.userCode=`\n float getAChannel(${h.join()}) {\n return getChannel(getA(${f.join()}),\n vec2(${f.slice(-2).join()}));\n }\n ${E}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${c[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${c[p-2]} < ${i[p-2]-1};\n ${l}\n ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d},\n sourceLocB${d}, sourceLocA${d}) * ${t};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${t}; i++) {\n inIdx = srcIdx;\n ${k}\n vec4 candidate = ${_};\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4(${w}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n `}};function RR(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=I.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new gh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,\"int32\");if(c.shape[1]===1)return c;let l=RR(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function AR(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=I.computeOptimalWindowSize(s),i=new xh(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===e.shape.length){let c=AR(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function yh(r,e,t,o){let n=[t];if(I.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!P().getBool(\"WEBGL_PACK_REDUCE\")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=I.computeOutAndReduceShapes(p.shape,n),l=x.sizeFromShape(c),m=J({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let f=RR(r,m,o);s.push(f);let d=J({inputs:{x:f},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),d}return AR(r,e,o)}function RY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=yh(t,p,a[0],\"max\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var FR={kernelName:un,backendName:\"webgl\",kernelFunc:RY};function AY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=yh(t,p,a[0],\"min\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var DR={kernelName:ja,backendName:\"webgl\",kernelFunc:AY};var FY=Vt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,DY=he({opSnippet:FY}),PR={kernelName:Vi,backendName:\"webgl\",kernelFunc:DY};var PY=Vt+\"return log(x + sqrt(x * x + 1.0));\",OY=he({opSnippet:PY}),OR={kernelName:zi,backendName:\"webgl\",kernelFunc:OY};var MY=Vt+`\n return atan(x);\n`,LY=he({opSnippet:MY}),MR={kernelName:Wi,backendName:\"webgl\",kernelFunc:LY};var BY=gc+`\n return atan(a, b);\n`,VY=`\n vec4 result = atan(a, b);\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n `+js+`\n return result;\n`,zY=ot({opSnippet:BY,packedOpSnippet:VY}),LR={kernelName:sa,backendName:\"webgl\",kernelFunc:zY};var WY=Vt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelName:Ui,backendName:\"webgl\",kernelFunc:UY};var us=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.top,d=e.padInfo.left;this.outputShape=e.outShape;let h=t===\"avg\",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,y=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b=\"0.0\";if(h||(b=\"-1.0 / 1e-20\"),o){let R=\">=\";this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${f}, ${d});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${m};\n wC += ${c}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${R} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?g:y:`wR * ${m} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let C=\"max\",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(w=\"avgValue / count\");let k=Math.floor(a/4)*4,_=a%4,E=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${C}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${f}, ${d});\n const float initializationValue = ${b};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4(${b});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${c};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n getValue(batch, xR, xC + 3 * ${c}, d)\n );\n\n ${E}\n }\n\n int xC = xCCorner + ${k};\n if (${_===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n initializationValue\n );\n\n ${E}\n }\n }\n setOutput(${w});\n }\n `}},Ei=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,f=e.effectiveFilterDepth,d=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,y=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t===\"avg\",w=\"0.0\";if(C||(w=\"-1.0 / 1e-20\"),o){let D=\">=\";this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${y}, ${b});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < ${f};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${d};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${h};\n wC += ${m}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${D} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${d} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(_=\"avgValue / count\");let E=Math.floor(a/4)*4,R=a%4,A=`\n if (${C}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${k}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${y}, ${b});\n const float initializationValue = ${w};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4(${w});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < ${f};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${d};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${E}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${A}\n }\n\n int xC = xCCorner + ${E};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${A}\n } else if (${R===2}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n initializationValue,\n initializationValue\n );\n\n ${A}\n } else if (${R===3}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n initializationValue\n );\n\n ${A}\n }\n }\n setOutput(${_});\n }\n }\n `}};function GY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;as(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;x.assert(I.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))return Rt({inputs:{x:n},backend:t});let l=new us(c,\"avg\",!1);return t.runWebGLProgram(l,[n],\"float32\")}var VR={kernelName:pn,backendName:\"webgl\",kernelFunc:GY};function HY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=I.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new Ei(l,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var zR={kernelName:ip,backendName:\"webgl\",kernelFunc:HY};var bh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=`\n const ivec2 pads = ivec2(${c}, ${l});\n const float avgMultiplier = float(${m});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${p};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${u};\n wC+= ${i}) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n `}},Ch=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,f=e.effectiveFilterWidth,d=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=f-1-e.padInfo.left,y=1/(t*o*n);this.userCode=`\n const ivec3 pads = ivec3(${d}, ${h}, ${g});\n const float avgMultiplier = float(${y});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${l};\n wD += ${p}) {\n float dyD = float(dyDCorner + wD) / ${s}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${m};\n wR += ${u}) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${f};\n wC += ${c}) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function qY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=I.computePool3DInfo(a.shape,i,p,l,u,c),f=new Ch(m);return t.runWebGLProgram(f,[n],a.dtype)}var WR={kernelName:Fm,backendName:\"webgl\",kernelFunc:qY};function KY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;as([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=I.computePool2DInfo(a.shape,i,p,1,u),l=new bh(c);return t.runWebGLProgram(l,[n],a.dtype)}var UR={kernelName:Am,backendName:\"webgl\",kernelFunc:KY};function jY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Mu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var GR={kernelName:cn,backendName:\"webgl\",kernelFunc:jY};var Ih=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(I.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = ${i};\n float scale = ${p};\n float inv = scale * inversesqrt(variance + float(${a}));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n `}};var wh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(I.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n vec4 offset = ${i};\n vec4 scale = ${p};\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4(${a}));\n\n setOutput((x - mean) * inv + offset);\n }\n `}};var XY=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;x.assert(n.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),x.assert(a==null||n.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),x.assert(i==null||n.shape.length===i.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=P().getBool(\"WEBGL_PACK_NORMALIZATION\")?new wh(o.shape,n.shape,s.shape,c,l,p):new Ih(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},HR={kernelName:kn,backendName:\"webgl\",kernelFunc:XY};var Sh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=_e(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=YY(this.rank),n,s=e.map((a,i)=>`sourceLoc.${Aw[i]} = start[${i}] + coords.${Aw[i]};`);n=`\n ${t} sourceLoc;\n ${t} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},Aw=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function YY(r){if(r===1)return\"sourceLoc\";if(r<=6)return Aw.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var vh=class{constructor(e){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let t=_e(this.rank),o=$t(\"coords\",this.rank),n=$t(\"sourceLoc\",this.rank),s=this.rank===1?\"sourceLoc\":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=`\n result.x = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.y = ${a};\n --${n[this.rank-1]};\n }\n `,p=this.rank===1?\"\":`\n --${o[this.rank-1]};\n if (++${o[this.rank-2]} < ${e[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${t}(${e.map((c,l)=>`start[${l}]`).join()});`:e.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(`\n`);this.userCode=`\n void main() {\n ${t} coords = getOutputCoords();\n ${t} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function QY(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=et.computeFlatOffset(e,x.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function ps(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=et.parseSliceParams(n,s,a);if(et.assertParamsValid(n,i,p),x.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.texData.get(n.dataId),m=O$(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=et.isSliceContinous(n.shape,i,p);if(u||!c){let l=P().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new vh(p):new Sh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),QY(n,i,p,t)}var qR={kernelName:qn,backendName:\"webgl\",kernelFunc:ps};var ZY=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;x.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=[],d=J({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xt({inputs:{x:d},backend:t,attrs:{perm:u}}),g=J({inputs:{x:h},backend:t,attrs:{shape:c}}),y=ps({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),y},KR={kernelName:hs,backendName:\"webgl\",kernelFunc:ZY};function JY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=oh(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var jR={kernelName:up,backendName:\"webgl\",kernelFunc:JY};function eQ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=I.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var XR={kernelName:pp,backendName:\"webgl\",kernelFunc:eQ};var tQ=\"return float(a != b);\",Fw=ot({opSnippet:tQ,cpuKernelImpl:N$,dtype:\"bool\"}),YR={kernelName:go,backendName:\"webgl\",kernelFunc:Fw};function La(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Rt({inputs:{x:n.complexTensorInfos.real},backend:t})}var QR={kernelName:la,backendName:\"webgl\",kernelFunc:La};var rQ=\"return float(int(x));\";function ZR(r,e){let t=new fr(r.shape,rQ),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Dw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Rt({inputs:{x:n},backend:t});let a=Wr(n.shape),i=Dw({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Ar({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=La({inputs:{input:n},backend:t}),i=Dw({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!x.hasEncodingLoss(n.dtype,s)){let a=Rt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=i$(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return ZR(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",x.getTypedArrayFromDType(\"bool\",1)),p=Fw({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var JR={kernelName:to,backendName:\"webgl\",kernelFunc:Dw};var eA=\"return ceil(x);\",oQ=he({opSnippet:eA,packedOpSnippet:eA,cpuKernelImpl:u$}),tA={kernelName:ro,backendName:\"webgl\",kernelFunc:oQ};var kh=class{constructor(e){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n `}};var Th=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n `}};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;P().getBool(\"WEBGL_PACK_CLIP\")?i=new Th(n.shape):i=new kh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var rA={kernelName:Ro,backendName:\"webgl\",kernelFunc:nQ};var Nh=class{constructor(e){this.variableNames=[\"real\",\"imag\"],this.outputShape=e,this.userCode=`\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n `}};function oA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function sQ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Nh(o.shape),a=[oA(o,n.complexTensorInfos.real),oA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var nA={kernelName:cp,backendName:\"webgl\",kernelFunc:sQ};var _h=class{constructor(e){this.outputShape=[],this.outputShape=I.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) {\n return getChannel(\n getT${h}(${Eh(i,u,g)}),\n vec2(${Eh(c,u,g)}));\n }`}let f=p.length,d=p[p.length-1];m+=`\n return getChannel(\n getT${f}(${Eh(i,u,d)}),\n vec2(${Eh(c,u,d)}));`,this.userCode=`\n float getValue(${i.map(h=>\"int \"+h)}) {\n ${m}\n }\n\n void main() {\n ${s} coords = getOutputCoords();\n vec4 result = vec4(getValue(${a}), 0., 0., 0.);\n\n ${a[n-1]} = ${a[n-1]} + 1;\n if (${a[n-1]} < ${o[n-1]}) {\n result.g = getValue(${a});\n }\n\n ${a[n-2]} = ${a[n-2]} + 1;\n if (${a[n-2]} < ${o[n-2]}) {\n result.a = getValue(${a});\n }\n\n ${a[n-1]} = ${a[n-1]} - 1;\n if (${a[n-2]} < ${o[n-2]} &&\n ${a[n-1]} < ${o[n-1]}) {\n result.b = getValue(${a});\n }\n setOutput(result);\n }\n `}};function Eh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Lu(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Rt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var sA={kernelName:Ya,backendName:\"webgl\",kernelFunc:Lu};function yc(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let l=r.map(g=>La({inputs:{input:g},backend:t})),m=r.map(g=>Lu({inputs:{input:g},backend:t})),f=yc(l,e,t),d=yc(m,e,t),h=Ar({inputs:{real:f,imag:d},backend:t});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),m.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),h}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let l=r.map(b=>{let w=[-1,x.sizeFromShape(b.shape.slice(e))];return J({inputs:{x:b},backend:t,attrs:{shape:w}})}),m=l.map(b=>({vals:t.readSync(b.dataId),shape:b.shape})),f=I.computeOutShape(l.map(b=>b.shape),1),d=l[0].shape[0]===1,h=p$(m,f,o,d),g=I.computeOutShape(r.map(b=>b.shape),e),y=t.makeTensorInfo(g,o,h);return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),y}let s=P().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\");if(r.length>s){let l=[];for(let f=0;f1){let l=new $h(r.map(m=>m.shape),e);return t.runWebGLProgram(l,r,o)}let{tensors2D:a,outShape:i}=aQ(r,e,t),p=new _h(a.map(l=>l.shape)),u=t.runWebGLProgram(p,a,o);a.forEach(l=>t.disposeIntermediateTensorInfo(l));let c=J({inputs:{x:u},attrs:{shape:i},backend:t});return t.disposeIntermediateTensorInfo(u),c}function aQ(r,e,t){let o=I.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>J({inputs:{x:s},attrs:{shape:[-1,x.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function Pw(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=x.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(u=>u.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>x.sizeFromShape(u.shape)>0);return p.length===1?Rt({inputs:{x:p[0]},backend:t}):yc(p,s,t)}var aA={kernelName:gs,backendName:\"webgl\",kernelFunc:Pw};var bc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat===\"channelsLast\",y=g?1:2,b=g?2:3,C=g?3:1,w=\"\",k=\"\";o&&(n?w=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?w=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:w=`\n float activation(float x) {\n ${o}\n }\n `,k=\"result = activation(result);\");let _=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${w}\n\n const ivec2 strides = ivec2(${p}, ${u});\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[${C}];\n\n ivec2 xRCCorner =\n ivec2(coords[${y}], coords[${b}]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${c};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${f}; wC++) {\n int xC = xCCorner + wC * ${l};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${d}; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if (${g}) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if (${h===1}) {\n\n if (${g}) {\n dotProd +=\n getX(batch, xR, xC, ${d}) *\n getW(wR, wC, ${d}, d2);\n } else {\n dotProd +=\n getX(batch, ${d}, xR, xC) *\n getW(wR, wC, ${d}, d2);\n }\n\n } else if (${h===2}) {\n vec2 wValues = vec2(\n getW(wR, wC, ${d}, d2),\n getW(wR, wC, ${d} + 1, d2)\n );\n\n if (${g}) {\n vec2 xValues = vec2(\n getX(batch, xR, xC, ${d}),\n getX(batch, xR, xC, ${d} + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, ${d}, xR, xC),\n getX(batch, ${d} + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if (${h===3}) {\n vec3 wValues = vec3(\n getW(wR, wC, ${d}, d2),\n getW(wR, wC, ${d} + 1, d2),\n getW(wR, wC, ${d} + 2, d2)\n );\n\n if (${g}) {\n vec3 xValues = vec3(\n getX(batch, xR, xC, ${d}),\n getX(batch, xR, xC, ${d} + 1),\n getX(batch, xR, xC, ${d} + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, ${d}, xR, xC),\n getX(batch, ${d} + 1, xR, xC),\n getX(batch, ${d} + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n ${_}\n ${k}\n setOutput(result);\n }\n `}},Rh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${t}, ${o}, ${n});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < ${l}; wF++) {\n int xF = xFCorner + wF * ${p};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${u};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${f}; wC++) {\n int xC = xCCorner + wC * ${c};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${d}; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (${h===1}) {\n dotProd +=\n getX(batch, xF, xR, xC, ${d}) *\n getW(wF, wR, wC, ${d}, d2);\n } else if (${h===2}) {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, ${d}),\n getX(batch, xF, xR, xC, ${d} + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, ${d}, d2),\n getW(wF, wR, wC, ${d} + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (${h===3}) {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, ${d}),\n getX(batch, xF, xR, xC, ${d} + 1),\n getX(batch, xF, xR, xC, ${d} + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, ${d}, d2),\n getW(wF, wR, wC, ${d} + 1, d2),\n getW(wF, wR, wC, ${d} + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};var Cc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) {\n `;for(let g=0;g<(l+1)/2;g++){let y=g*2;if(m+=`\n xC = xCCorner + ${y*p};\n `,i===1){if(y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {\n xTexelC${y} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${y}.zw = vec2(0.0);\n }\n xTexelC${y}Ready = 1;\n }\n `,p===1&&y>0?m+=`\n xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy);\n `:m+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${y} = vec4(previous.zw, xTexelC${y}.xy);\n } else {\n xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy);\n }\n `):m+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {\n xTexelC${y} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${y}.zw = vec2(0.0);\n }\n xTexelC${y}Ready = 1;\n }\n\n xC${y} = xTexelC${y};\n `,y+1= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {\n xTexelC${y+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${y+1}.zw = vec2(0.0);\n }\n xTexelC${y+1}Ready = 1;\n }\n `,p>1?m+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${y+1} = vec4(previous.zw, xTexelC${y+1}.xy);\n } else {\n xC${y+1} = vec4(0.0, 0.0, xTexelC${y+1}.xy);\n }\n `:m+=`\n xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy);\n `):b===1?m+=`\n xC${y+1} = xTexelC${y};\n `:m+=`\n xCOffset = xC + ${b};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {\n xTexelC${y+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${y+1}.zw = vec2(0.0);\n }\n xTexelC${y+1}Ready = 1;\n }\n\n xC${y+1} = xTexelC${y+1};\n `}}else y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {\n xTexelC${y} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${y}.zw = vec2(0.0);\n }\n xTexelC${y}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) {\n xTexelC${y+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${y+1}.zw = vec2(0.0);\n }\n xTexelC${y+1}Ready = 1;\n }\n\n xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw);\n `,y+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy);\n `)):(m+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {\n xTexelC${y} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${y}.zw = vec2(0.0);\n }\n xTexelC${y}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {\n xTexelC${y+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${y+1}.zw = vec2(0.);\n }\n xTexelC${y+1}Ready = 1;\n }\n\n xC${y} = vec4(\n xTexelC${y}.xy, xTexelC${y+1}.xy);\n `,y+1= 0) {\n // Use custom imod instead mod. On Intel GPU, mod may generate\n // unexpected value.\n // https://github.com/tensorflow/tfjs/issues/5447\n offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];\n d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n inChannels);\n\n if(d1 < inputShape[${i}] && d1 >= 0) {\n\n ch = imod(pos, inChannels);\n\n if (${s}) {\n innerDims = vec2(d1, ch);\n result[${c*2+l}] = getChannel(\n getA(rc.x, d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${c*2+l}] = getChannel(\n getA(rc.x, ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;this.userCode=`\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n ${u}\n\n ${n.output} = result;\n }\n `}};function Fh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Dh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,f=t.dataFormat===\"channelsLast\",d=!1,h=!1,g,y=[];if(s!=null){let w=Fh(s.shape,f);w!=null&&(s=J({inputs:{x:s},backend:o,attrs:{shape:w}}),y.push(s))}if(n!=null){let w=Fh(n.shape,f);w!=null&&(n=J({inputs:{x:n},backend:o,attrs:{shape:w}}),y.push(n))}if(!((l===1||m===1)&&c>Rw)&&u.isPacked&&f&&u.texture!=null&&p[2]%2!==0&&x.arraysEqual(u.shape.slice(-3),p.slice(-3))){let w=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,w,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,x.assert(Ti(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=J({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});y.push(E);let R=Mu({a:k,b:E,backend:o,transposeA:d,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),A=o.texData.get(R.dataId);x.assert(A.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=_,A.shape=t.outShape,g=Rt({inputs:{x:R},backend:o}),g.shape=t.outShape,y.push(R)}else{let w=t.outHeight*t.outWidth,k=J({inputs:{x:r},backend:o,attrs:{shape:f?[t.batchSize,w,t.inChannels]:[t.batchSize,t.inChannels,w]}}),_=J({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),E=Mu({a:f?k:_,b:f?_:k,transposeA:!f,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=J({inputs:{x:E},backend:o,attrs:{shape:t.outShape}}),y.push(k),y.push(_),y.push(E)}for(let w of y)o.disposeIntermediateTensorInfo(w);return g}function Ph({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:f}=t,d=f===\"channelsLast\",h=p*u*c,g=m*l,y=[t.batchSize,h,g],b=!0,C=!1,w=[];if(s!=null){let H=Fh(s.shape,d);H!=null&&(s=J({inputs:{x:s},backend:o,attrs:{shape:H}}),w.push(s))}if(n!=null){let H=Fh(n.shape,d);H!=null&&(n=J({inputs:{x:n},backend:o,attrs:{shape:H}}),w.push(n))}let k=J({inputs:{x:e},backend:o,attrs:{shape:[1,h,x.sizeFromShape(e.shape)/h]}});w.push(k);let _=new Ah(y,t),E=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(_,[r],\"float32\",E),A=J({inputs:{x:R},backend:o,attrs:{shape:y}});w.push(R),w.push(A);let D=n!=null,O=s!=null,M=i===\"leakyrelu\",L=i?Ma(i,!0):null,W=new xc(d?A.shape:k.shape,d?k.shape:A.shape,d?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,D,L,O,M),V=d?[A,k]:[k,A];if(n&&V.push(n),O&&V.push(s),M){let H=o.makeTensorInfo([],\"float32\",x.createScalarValue(a,\"float32\"));V.push(H),w.push(H)}let G=o.runWebGLProgram(W,V,\"float32\"),q=J({inputs:{x:G},backend:o,attrs:{shape:t.outShape}});w.push(G);for(let H of w)o.disposeIntermediateTensorInfo(H);return q}function iQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),f;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type===\"SAME\"||m.padInfo.type===\"VALID\"))f=Dh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l===\"channelsLast\"&&P().getBool(\"WEBGL_EXP_CONV\")){let h=new Cc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];f=t.runWebGLProgram(h,[n,s],\"float32\",g)}else if(P().getBool(\"WEBGL_CONV_IM2COL\"))f=Ph({x:n,filter:s,convInfo:m,backend:t});else{let h=new bc(m);f=t.runWebGLProgram(h,[n,s],\"float32\")}let d=J({inputs:{x:f},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(f),d}var iA={kernelName:ln,backendName:\"webgl\",kernelFunc:iQ};var Oh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat===\"channelsLast\";this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n if (${a}) {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Mh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat===\"channelsLast\",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[${l}];\n\n ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n if (${a}) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Lh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yF = 0; yF < ${e.outDepth}; yF++) {\n int xF = wF + yF * ${t} - ${s};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Bh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=`\n const ivec3 pads = ivec3(${p}, ${u}, ${c});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < ${t}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${t} - 1 - wF;\n\n for (int wR = 0; wR < ${o}; wR++) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${o} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function uQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),f=new Oh(m);return t.runWebGLProgram(f,[n,s],\"float32\")}var uA={kernelName:lp,backendName:\"webgl\",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(u),m=I.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),f=new Mh(m);return t.runWebGLProgram(f,[n,s],\"float32\")}var pA={kernelName:mn,backendName:\"webgl\",kernelFunc:pQ};function cQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=I.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Rh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var cA={kernelName:mp,backendName:\"webgl\",kernelFunc:cQ};function lQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=I.computeConv3DInfo(n.shape,p,a,1,i),c=new Lh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var lA={kernelName:Dm,backendName:\"webgl\",kernelFunc:lQ};function mQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=I.computeConv3DInfo(p,s.shape,i,1,a),c=new Bh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var mA={kernelName:fp,backendName:\"webgl\",kernelFunc:mQ};var fQ=jo+`\n return cos(x);\n`,dQ=he({opSnippet:fQ}),fA={kernelName:fn,backendName:\"webgl\",kernelFunc:dQ};var hQ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,gQ=he({opSnippet:hQ}),dA={kernelName:dn,backendName:\"webgl\",kernelFunc:gQ};var Vh=class{constructor(e,t,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let f=n===\"bilinear\"?1:0,[d,h]=[`${i-1}.0`,`${p-1}.0`],[g,y,b]=l>1?[`${(i-1)/(l-1)}`,\"(y2-y1) * height_ratio\",`y1*${d} + float(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${d}`],[C,w,k]=m>1?[`${(p-1)/(m-1)}`,\"(x2-x1) * width_ratio\",`x1*${h} + float(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${h}`];this.userCode=`\n const float height_ratio = float(${g});\n const float width_ratio = float(${C});\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= ${a}) {\n return;\n }\n\n float height_scale = ${y};\n float width_scale = ${w};\n\n float in_y = ${b};\n if( in_y < 0.0 || in_y > ${d} ) {\n setOutput(float(${s}));\n return;\n }\n float in_x = ${k};\n if( in_x < 0.0 || in_x > ${h} ) {\n setOutput(float(${s}));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if(${f} == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n `}};var xQ=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Vh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],\"float32\")},hA={kernelName:xn,backendName:\"webgl\",kernelFunc:xQ};var Bu;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Bu||(Bu={}));var Ml=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===Bu.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${gA(s,\"coords\",this.op)})`,p=this.outputShape[this.outputShape.length-1],u=\"\",c=\"\";o?(u=n?`end != ${p-1}`:\"end != 0\",c=n?\"end + 1\":\"end - 1\"):(u=n?`end + pow2 < ${p}`:\"end >= pow2\",c=n?\"end + pow2\":\"end - pow2\"),this.userCode=`\n void main() {\n ${_e(s)} coords = getOutputCoords();\n int end = ${xA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${xA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${gA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function gA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function xA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function zh(r,e,t,o,n,s){let a=e.shape.length,i=I.getAxesPermutation([o],a),p=e;i!=null&&(p=xt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=I.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Rt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new Ml(r,p.shape,!1,s),d=[[m]],h=l;l=t.runWebGLProgram(f,[l],l.dtype,d),t.disposeIntermediateTensorInfo(h)}if(n){let m=new Ml(r,p.shape,n,s),f=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(f)}if(i!=null){let m=I.getUndoAxesPermutation(i),f=xt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),f}return l}function yQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zh(Bu.Prod,n,t,s,a,i)}var yA={kernelName:hn,backendName:\"webgl\",kernelFunc:yQ};function bQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zh(Bu.Sum,n,t,s,a,i)}var bA={kernelName:gn,backendName:\"webgl\",kernelFunc:bQ};function CQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=oh(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=a$(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var CA={kernelName:dp,backendName:\"webgl\",kernelFunc:CQ};var Wh=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = ${this.getHeightCoordString()};\n int w = ${this.getWidthCoordString()};\n int d = ${this.getDepthCoordString()};\n\n int in_h = h / ${t};\n int offset_h = imod(h, ${t});\n int in_w = w / ${t};\n int offset_w = imod(w, ${t});\n int offset_d = (offset_h * ${t} + offset_w) *\n ${this.getOutputDepthSize()};\n int in_d = d + offset_d;\n\n float result = ${this.getInputSamplingString()};\n setOutput(result);\n }\n `}getHeightCoordString(){return this.dataFormat===\"NHWC\"?\"coords[1]\":\"coords[2]\"}getWidthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[2]\":\"coords[3]\"}getDepthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[3]\":\"coords[1]\"}getOutputDepthSize(){return this.dataFormat===\"NHWC\"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function IQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a===\"NHWC\"?[i,l,m,f]:[i,f,l,m],h=new Wh(d,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var IA={kernelName:yn,backendName:\"webgl\",kernelFunc:IQ};var Ic=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u=\"\",c=\"\";o&&(n?u=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?u=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:u=`\n float activation(float x) {\n ${o}\n }\n `,c=\"result = activation(result);\");let l=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${u}\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / ${p};\n int q = d2 - d1 * ${p};\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < ${a}; wR++) {\n int xR = xRCorner + wR * dilations[0];\n\n if (xR < 0 || xR >= inDims[0]) {\n continue;\n }\n\n for (int wC = 0; wC < ${i}; wC++) {\n int xC = xCCorner + wC * dilations[1];\n\n if (xC < 0 || xC >= inDims[1]) {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n ${l}\n ${c}\n setOutput(result);\n }\n `}};var wc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,f=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let y=0;y=0 && xR < inDims[0]) {\n `;for(let y=0;y<(m+1)/2;y++){let b=y*2;if(f+=`\n xC = xCCorner + ${b*u};\n `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n `,u===1&&b>0?f+=`\n xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy);\n `:f+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${b} = vec4(previous.zw, xTexelC${b}.xy);\n } else {\n xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy);\n }\n `):f+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xC${b} = xTexelC${b};\n `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n `,u>1?f+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy);\n } else {\n xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy);\n }\n `:f+=`\n xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy);\n `):C===1?f+=`\n xC${b+1} = xTexelC${b};\n `:f+=`\n xCOffset = xC + ${C};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b+1} = xTexelC${b+1};\n `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);\n `,b+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy);\n `)):(f+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(\n xTexelC${b}.xy, xTexelC${b+1}.xy);\n `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=I.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;P().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new wc(l):m=new Ic(l);let f=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],\"float32\",f)}var wA={kernelName:bn,backendName:\"webgl\",kernelFunc:wQ};var Uh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * ${a} + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Gh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=`\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < ${p}; dm++) {\n int d2 = d1 * ${p} + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function SQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=I.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Uh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var SA={kernelName:hp,backendName:\"webgl\",kernelFunc:SQ};function vQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=I.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Gh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var vA={kernelName:gp,backendName:\"webgl\",kernelFunc:vQ};var Hh=class{constructor(e){this.variableNames=[\"X\"],this.outputShape=[e,e],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n `}};function kQ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=x.sizeFromShape(o.shape),a=J({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Hh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=J({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var kA={kernelName:xp,backendName:\"webgl\",kernelFunc:kQ};var qh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=`\n const ivec2 strides = ivec2(${s}, ${a});\n const ivec2 pads = ivec2(${l}, ${m});\n const float neg_infinity = -3.4e38;\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.w;\n ivec2 outTopLeftCorner =\n coords.yz * strides - pads;\n int hBeg = outTopLeftCorner.x;\n int wBeg = outTopLeftCorner.y;\n\n float curVal = neg_infinity;\n for (int h = 0; h < ${i}; h++) {\n int hIn = hBeg + h * ${u};\n\n if (hIn >= 0 && hIn < ${t}) {\n for (int w = 0; w < ${p}; w++) {\n int wIn = wBeg + w * ${c};\n\n if (wIn >= 0 && wIn < ${o}) {\n float xVal = getX(batch, hIn, wIn, d1);\n float wVal = getW(h, w, d1);\n\n float val = xVal + wVal;\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n float result = curVal;\n setOutput(result);\n }\n `}};function TQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=I.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new qh(u);c=t.runWebGLProgram(l,[n,s],\"float32\");let m=J({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var TA={kernelName:yp,backendName:\"webgl\",kernelFunc:TQ};function NQ(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=I.decodeEinsumEquation(n,s.length);I.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=I.getEinsumComputePath(i,p),l=c.length,m=null,f=a.length,d=[];for(let h=0;h=0&&(m=Ou({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var NA={kernelName:Xa,backendName:\"webgl\",kernelFunc:NQ};var _Q=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",EQ=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,$Q=he({opSnippet:_Q,packedOpSnippet:EQ}),_A={kernelName:In,backendName:\"webgl\",kernelFunc:$Q};var RQ=\"return (b >= 1.0) ? a : a * (b + 1.0);\",AQ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,FQ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=P().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Ko(AQ,o.shape,n.shape):new _o(RQ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},EA={kernelName:Pm,backendName:\"webgl\",kernelFunc:FQ};var DQ=`\n return vec4(equal(a, b));\n`,PQ=\"return float(a == b);\",OQ=ot({opSnippet:PQ,packedOpSnippet:DQ,dtype:\"bool\",cpuKernelImpl:c$}),$A={kernelName:oo,backendName:\"webgl\",kernelFunc:OQ};var MQ=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n float p = ${I.ERF_P};\n float a1 = ${I.ERF_A1};\n float a2 = ${I.ERF_A2};\n float a3 = ${I.ERF_A3};\n float a4 = ${I.ERF_A4};\n float a5 = ${I.ERF_A5};\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`,LQ=he({opSnippet:MQ}),RA={kernelName:Gi,backendName:\"webgl\",kernelFunc:LQ};var BQ=jo+`\n return exp(x);\n`,VQ=`\n vec4 result = exp(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Ow=he({opSnippet:BQ,packedOpSnippet:VQ,cpuKernelImpl:l$,dtype:\"float32\"}),AA={kernelName:no,backendName:\"webgl\",kernelFunc:Ow};function Kh(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(x.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),J({inputs:{x:s},backend:o,attrs:{shape:i}})}var FA={kernelName:xs,backendName:\"webgl\",kernelFunc:Kh};var DA=\"return exp(x) - 1.0;\",zQ=he({opSnippet:DA,packedOpSnippet:DA,cpuKernelImpl:m$}),PA={kernelName:wn,backendName:\"webgl\",kernelFunc:zQ};var Ll=class{constructor(e,t,o){this.variableNames=[\"real\",\"imag\"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:\"1.0\",i;if(e===\"real\")i=\"return real * expR - imag * expI;\";else if(e===\"imag\")i=\"return real * expI + imag * expR;\";else throw new Error(`FFT component must be either \"real\" or \"imag\", got ${e}.`);this.userCode=`\n const float exponentMultiplier = ${s};\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n ${i}\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float(${n});\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < ${n}; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / ${a};\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n `}};function jh(r,e,t){let o=t.texData.get(r.dataId),n=x.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=J({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new Ll(\"real\",p,e),c=new Ll(\"imag\",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,\"float32\"),f=t.runWebGLProgram(c,l,\"float32\"),d=Ar({inputs:{real:m,imag:f},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f);let h=J({inputs:{x:d},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(d),h}function WQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return jh(o,!1,t)}var OA={kernelName:bp,backendName:\"webgl\",kernelFunc:WQ};var Xh=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=e,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function Ba(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||x.inferDtype(n),s===\"string\"){let a=x.getArrayFromDType(s,x.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Xh(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var MA={kernelName:ys,backendName:\"webgl\",kernelFunc:Ba};var Yh=class{constructor(e){this.variableNames=[\"Image\"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${t} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${t}) {\n outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n } else {\n outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var LA={kernelName:Sn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Yh(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var BA=\"return floor(x);\",UQ=he({opSnippet:BA,packedOpSnippet:BA,cpuKernelImpl:f$}),VA={kernelName:so,backendName:\"webgl\",kernelFunc:UQ};var GQ=`\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n`,HQ=`\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n`,qQ=ot({opSnippet:GQ,packedOpSnippet:HQ,dtype:\"int32\"}),zA={kernelName:vn,backendName:\"webgl\",kernelFunc:qQ};var Qh=class{constructor(e){this.variableNames=[\"A\"];let t=Ct(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0);\n\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n `}};var Zh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=Ct(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2(${n}.0, ${o}.0);\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n ${t.output} = result;\n }\n `}};var WA={kernelName:Zi,backendName:\"webgl\",kernelFunc:KQ},Sc,Mw=P().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function KQ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=P().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Sc==null||h!==Mw)&&(Mw=h,Sc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:Mw})),Sc.canvas.width=p,Sc.canvas.height=u,Sc.drawImage(n,0,0,p,u),n=Sc.canvas}let m=t.makeTensorInfo(c,\"int32\");t.texData.get(m.dataId).usage=ir.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let f=P().getBool(\"WEBGL_PACK\")?new Zh(l):new Qh(l),d=t.runWebGLProgram(f,[m],\"int32\");return t.disposeData(m.dataId),d}function jQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=I.convertConv2DDataFormat(c),g=I.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),y,b=[],C=a!=null,w=i!=null,k=f===\"leakyrelu\",_=()=>{let R=[n,s],A=(D,O)=>{if(O===\"NCHW\"&&D.shape.length===1&&D.shape[0]!==1){let M=J({inputs:{x:D},backend:t,attrs:{shape:[D.shape[0],1,1]}});return b.push(M),M}return D};if(C&&R.push(A(a,c)),w&&R.push(A(i,c)),k){let D=t.makeTensorInfo([],\"float32\",x.createScalarValue(d,\"float32\"));R.push(D),b.push(D)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type===\"SAME\"||g.padInfo.type===\"VALID\"))y=Dh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else if(g.strideWidth<=2&&h===\"channelsLast\"&&P().getBool(\"WEBGL_EXP_CONV\")){let R=f?Ma(f,!0):null,A=new Cc(g,C,R,w,k),D=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();y=t.runWebGLProgram(A,O,\"float32\",D)}else if(P().getBool(\"WEBGL_CONV_IM2COL\"))y=Ph({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else{let R=f?Ma(f,!1):null,A=new bc(g,C,R,w,k),D=_();y=t.runWebGLProgram(A,D,\"float32\")}let E=J({inputs:{x:y},backend:t,attrs:{shape:g.outShape}});return b.push(y),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),E}var UA={kernelName:Do,backendName:\"webgl\",kernelFunc:jQ};function XQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:f}=o,d=[],h=c;h==null&&(h=[1,1]),x.assert(I.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=I.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),y=P().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Ma(m,y):null,C=[n,s],w=a!=null,k=i!=null,_=m===\"leakyrelu\";if(w&&C.push(a),k&&C.push(i),_){let D=t.makeTensorInfo([],\"float32\",x.createScalarValue(f,\"float32\"));C.push(D),d.push(D)}let E;y?E=new wc(g,w,b,k,_):E=new Ic(g,w,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],A=t.runWebGLProgram(E,C,\"float32\",R);return d.forEach(D=>t.disposeIntermediateTensorInfo(D)),A}var GA={kernelName:Po,backendName:\"webgl\",kernelFunc:XQ};var Jh=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=_e(o.length),a=`\n int index;`;for(let i=0;i= ${this.paramsShape[i]};\n flattenIndex += index * ${this.strides[i]};`;this.userCode=`\n void main() {\n ${s} coords = getOutputCoords();\n int flattenIndex = 0;\n bool out_of_bounds = false;\n\n ${a}\n\n setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n }\n `}};function YQ(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=x.sizeFromShape(o.shape),[p,u,c,l]=I.prepareAndValidate(o,n),m=J({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),f=J({inputs:{x:o},backend:t,attrs:{shape:[x.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let y=t.readSync(n.dataId),b=t.bufferSync(o),C=d$(y,b,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,C.values)}let d=new Jh(a,l,[u,c],o.shape),h=t.runWebGLProgram(d,[f,m],f.dtype),g=J({inputs:{x:h},backend:t,attrs:{shape:p}});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var HA={kernelName:Tn,backendName:\"webgl\",kernelFunc:YQ};var eg=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=_e(this.rank),n=QQ(e,2);this.userCode=`\n void main() {\n ${o} resRC = getOutputCoords();\n int index = int(getIndices(resRC.x, resRC.z));\n float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function QQ(r,e){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=I.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=x.sizeFromShape(s.shape),l=[],m=J({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),f=J({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(f);let d=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=t.bufferSync(f),C=t.bufferSync(m),w=h$(C,b,d);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,w.dtype,w.values)}let h=new eg(m.shape,d),g=t.runWebGLProgram(h,[m,f],m.dtype);l.push(g);let y=J({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),y}var qA={kernelName:bs,backendName:\"webgl\",kernelFunc:Lw};var ZQ=\"return float(a > b);\",JQ=`\n return vec4(greaterThan(a, b));\n`,e7=ot({opSnippet:ZQ,packedOpSnippet:JQ,cpuKernelImpl:g$,dtype:\"bool\"}),KA={kernelName:ao,backendName:\"webgl\",kernelFunc:e7};var t7=\"return float(a >= b);\",r7=`\n return vec4(greaterThanEqual(a, b));\n`,o7=ot({opSnippet:t7,packedOpSnippet:r7,dtype:\"bool\",cpuKernelImpl:x$}),jA={kernelName:io,backendName:\"webgl\",kernelFunc:o7};function n7(r){let{inputs:e,backend:t}=r,{input:o}=e;return jh(o,!0,t)}var XA={kernelName:Cp,backendName:\"webgl\",kernelFunc:n7};var s7=\"return float(!isnan(x) && !isinf(x));\",a7=he({opSnippet:s7,dtype:\"bool\"}),YA={kernelName:Hi,backendName:\"webgl\",kernelFunc:a7};var i7=\"return float(isinf(x));\",u7=he({opSnippet:i7,dtype:\"bool\"}),QA={kernelName:qi,backendName:\"webgl\",kernelFunc:u7};var p7=\"return float(isnan(x));\",c7=he({opSnippet:p7,dtype:\"bool\"}),ZA={kernelName:ia,backendName:\"webgl\",kernelFunc:c7};var l7=\"return float(a < b);\",m7=`\n return vec4(lessThan(a, b));\n`,f7=ot({opSnippet:l7,packedOpSnippet:m7,cpuKernelImpl:y$,dtype:\"bool\"}),JA={kernelName:po,backendName:\"webgl\",kernelFunc:f7};var d7=\"return float(a <= b);\",h7=`\n return vec4(lessThanEqual(a, b));\n`,g7=ot({opSnippet:d7,packedOpSnippet:h7,cpuKernelImpl:b$,dtype:\"bool\"}),eF={kernelName:co,backendName:\"webgl\",kernelFunc:g7};function x7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=C$(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var tF={kernelName:Ip,backendName:\"webgl\",kernelFunc:x7};var y7=jo+`\n return x < 0.0 ? 0./0. : log(x);\n`,b7=`\n vec4 result = log(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n return result;\n`,C7=he({opSnippet:y7,packedOpSnippet:b7,cpuKernelImpl:I$}),rF={kernelName:lo,backendName:\"webgl\",kernelFunc:C7};var I7=jo+`\n return log(1.0 + x);\n`,w7=he({opSnippet:I7}),oF={kernelName:Ki,backendName:\"webgl\",kernelFunc:w7};var S7=\"return float(a >= 1.0 && b >= 1.0);\",v7=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,k7=ot({opSnippet:S7,packedOpSnippet:v7,dtype:\"bool\"}),nF={kernelName:_n,backendName:\"webgl\",kernelFunc:k7};var T7=\"return float(!(x >= 1.0));\",N7=he({opSnippet:T7}),sF={kernelName:En,backendName:\"webgl\",kernelFunc:N7};var _7=\"return float(a >= 1.0 || b >= 1.0);\",E7=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,$7=ot({opSnippet:_7,packedOpSnippet:E7,dtype:\"bool\"}),aF={kernelName:ua,backendName:\"webgl\",kernelFunc:$7};var tg=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -${a}; j <= ${a}; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= ${i}) {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * ${p};\n setOutput(val);\n }\n `}};var rg=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < ${this.outputShape[3]};\n bool hasNextRow = c < ${this.outputShape[2]};\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - ${a};\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - ${a}; j <= ${a}; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * ${p};\n setOutput(result);\n }\n `}};var R7=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=P().getBool(\"WEBGL_PACK_NORMALIZATION\")?new rg(n.shape,s,a,i,p):new tg(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},iF={kernelName:wp,backendName:\"webgl\",kernelFunc:R7};var og=class{constructor(e,t,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < ${this.depth}; ++d) {\n int depthBegin = int(max(0.0, float(d - ${t})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${t} + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = ${this.depth};\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float(${n}) * norm + float(${o});\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float(${n})\n * float(${s})\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * ${s});\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n `}};var A7=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new og(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},uF={kernelName:Om,backendName:\"webgl\",kernelFunc:A7};function pF(r,e,t,o){let n=x.sizeFromShape(e),a=x.sizeFromShape(r.shape)/n,i=J({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=qr(i,r.dtype,\"max\",o),u=J({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Bw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),f=n;if(l){if(m){let C=t.texData.get(f.dataId).values,w=new Array(i);for(let E=0;E`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))return Rt({inputs:{x:n},backend:t});let l=new us(c,\"max\",!1);return t.runWebGLProgram(l,[n],n.dtype)}var mF={kernelName:Rn,backendName:\"webgl\",kernelFunc:O7};function M7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=I.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Ei(l,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var fF={kernelName:Sp,backendName:\"webgl\",kernelFunc:M7};var ng=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${s};\n wR += ${n}) {\n float dyR = float(dyRCorner + wR) / ${t}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${a}; wC++) {\n float dyC = float(dyCCorner + wC) / ${o}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * ${a} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n `}},sg=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,f=c-1-e.padInfo.left,d=p*u*c-1;this.userCode=`\n const ivec3 pads = ivec3(${l}, ${m}, ${f});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${p};\n wD += ${s}) {\n float dyD = float(dyDCorner + wD) / ${t}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${u};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${o}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${c};\n wC += ${i}) {\n float dyC = float(dyCCorner + wC) / ${n}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = ${d} -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * ${u} * ${c} +\n wR * ${c} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function L7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=I.computePool3DInfo(a.shape,i,p,l,u,c),f=new Ei(m,\"max\",!0),d=t.runWebGLProgram(f,[a],a.dtype),h=new sg(m),g=t.runWebGLProgram(h,[n,d],a.dtype);return t.disposeIntermediateTensorInfo(d),g}var dF={kernelName:Lm,backendName:\"webgl\",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;as([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=I.computePool2DInfo(i.shape,p,u,1,c,l),f=!0,d=new us(m,\"max\",f),h=t.runWebGLProgram(d,[i],i.dtype),g=new ng(m),y=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),y}var hF={kernelName:Mm,backendName:\"webgl\",kernelFunc:B7};function gF(r,e,t,o){let n=new us(t,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new us(t,\"max\",!0,!0,e);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var xF={kernelName:vp,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;x.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];x.assert(I.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=I.computePool2DInfo(o.shape,n,s,u,a),[l,m]=gF(o,i,c,p);return[l,m]}};function yF(r,e,t,o){let n=x.sizeFromShape(e),a=x.sizeFromShape(r.shape)/n,i=J({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=qr(i,\"float32\",\"mean\",o),u=J({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var bF={kernelName:An,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=x.parseAxisParam(s,o.shape),u=p,c=I.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),f=[],d=o;if(l){if(m){let w=a.texData.get(d.dataId).values,k=new Array(i);for(let R=0;Rc[0]+e[l]+c[1]);let n=e.length,s=_e(n),a=t.map(c=>c[0]).join(\",\"),i=t.map((c,l)=>c[0]+e[l]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n),u=o===\"reflect\"?0:1;if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start) {\n outC = start * 2 - outC - ${u};\n } else if(outC >= end) {\n outC = (end - 1) * 2 - outC + ${u};\n }\n setOutput(getX(outC - start));\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n for (int i = 0; i < ${n}; i++) {\n if (outC[i] < start[i]) {\n outC[i] = start[i] * 2 - outC[i] - ${u};\n } else if(outC[i] >= end[i]) {\n outC[i] = (end[i] - 1) * 2 - outC[i] + ${u};\n }\n }\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n `}};var ig=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((d,h)=>d[0]+e[h]+d[1]);let n=e.length,s=_e(n),a=t.map(d=>d[0]).join(\",\"),i=t.map((d,h)=>d[0]+e[h]).join(\",\"),p=$t(\"rc\",n),u=$t(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=o===\"reflect\"?0:1,f=\"\";if(n===1){let d=`\n ${s} source = rc;\n if (source < start) {\n source = start * 2 - source - ${m};\n } else if (source >= end) {\n source = (end - 1) * 2 - source + ${m};\n }\n source -= start;\n `;f=`\n ${s} rc = outputLoc;\n ${d}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${d}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n `}else{let d=`\n ${s} source = rc;\n ${s} lt = ${s}(lessThan(source, start));\n ${s} gte = ${s}(greaterThanEqual(source, end));\n ${s} orig = 1 - (lt + gte);\n source = orig * source +\n lt * (start * 2 - source - ${m}) +\n gte * ((end - 1) * 2 - source + ${m});\n source -= start;\n `;f=`\n ${s} rc = outputLoc;\n ${d}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${d}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {\n ${d}\n result[2] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${d}\n result[3] = getChannel(getX(${u.join()}), ${l});\n }\n }\n `}this.userCode=`\n const ${s} start = ${s}(${a});\n const ${s} end = ${s}(${i});\n\n void main() {\n ${s} outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n ${f}\n setOutput(result);\n }\n `}};var G7=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=P().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new ig(o.shape,n,s):new ag(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},wF={kernelName:Dn,backendName:\"webgl\",kernelFunc:G7};var H7=`if (b == 0.0) return NAN;\n return mod(a, b);`,q7=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+js+`\n return result;\n`,K7=ot({opSnippet:H7,packedOpSnippet:q7}),SF={kernelName:ji,backendName:\"webgl\",kernelFunc:K7};var ug=class{constructor(e,t,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[e,o],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < ${t-1}; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float(${t-1}));\n }\n `}};var j7=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,X7=`\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n`,Vw=ot({opSnippet:j7,packedOpSnippet:X7,checkOutOfBounds:!0}),vF={kernelName:Cn,backendName:\"webgl\",kernelFunc:Vw};var kF=\"return a - b;\",zw=ot({opSnippet:kF,packedOpSnippet:kF,supportsComplex:!0,cpuKernelImpl:G$}),TF={kernelName:Io,backendName:\"webgl\",kernelFunc:zw};function Ww(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=x.parseAxisParam([s],n.shape),i=Bw({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=I.expandShapeToKeepDim(i.shape,a),u=J({inputs:{x:i},backend:t,attrs:{shape:p}}),c=zw({inputs:{a:n,b:u},backend:t}),l=Ow({inputs:{x:c},backend:t}),m=Ou({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),f=J({inputs:{x:m},backend:t,attrs:{shape:p}}),d=Vw({inputs:{a:l,b:f},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),d}var NF={kernelName:Xn,backendName:\"webgl\",kernelFunc:Ww};function Y7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Ww({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new ug(u,c,s),m=[[a]],f=t.runWebGLProgram(l,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),f}var _F={kernelName:kp,backendName:\"webgl\",kernelFunc:Y7};var Q7=Vt+`\n return -x;\n`,Z7=`\n vec4 result = -x;\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`;function J7(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=T$(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return P().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new No(o.shape,Z7):n=new fr(o.shape,Q7),t.runWebGLProgram(n,[o],o.dtype)}var EF={kernelName:Pn,backendName:\"webgl\",kernelFunc:J7};var eZ=Bt.nonMaxSuppressionV3Impl;function tZ(r){I.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=eZ(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var $F={kernelName:On,backendName:\"webgl\",kernelFunc:tZ};var rZ=Bt.nonMaxSuppressionV4Impl;function oZ(r){I.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:f}=rZ(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([f]))]}var RF={kernelName:pa,backendName:\"webgl\",kernelFunc:oZ};var nZ=Bt.nonMaxSuppressionV5Impl;function sZ(r){I.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,f=i,d=p,h=u,{selectedIndices:g,selectedScores:y}=nZ(c,l,m,f,d,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([y.length],\"float32\",new Float32Array(y))]}var AF={kernelName:Mn,backendName:\"webgl\",kernelFunc:sZ};var pg=class{constructor(e,t,o,n){this.variableNames=[\"indices\"],this.outputShape=[e,t],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float(${n}), float(${o}),\n float(index == coords.y)));\n }\n `}};var aZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=x.sizeFromShape(n.shape),c=new pg(u,a,i,p),l=J({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let f=[...n.shape,a],d=J({inputs:{x:m},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(m),d},FF={kernelName:ca,backendName:\"webgl\",kernelFunc:aZ};function Bl(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=La({inputs:{input:o},backend:t}),s=Bl({inputs:{x:n},backend:t}),a=Lu({inputs:{input:o},backend:t}),i=Bl({inputs:{x:a},backend:t}),p=Ar({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ba({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var DF={kernelName:Es,backendName:\"webgl\",kernelFunc:Bl};function PF(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=La({inputs:{input:o},backend:t}),s=PF({inputs:{x:n},backend:t}),a=Lu({inputs:{input:o},backend:t}),i=Bl({inputs:{x:a},backend:t}),p=Ar({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ba({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var OF={kernelName:Cs,backendName:\"webgl\",kernelFunc:PF};function iZ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Kh({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),x.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Kh({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var MF={kernelName:Is,backendName:\"webgl\",kernelFunc:iZ};var cg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=_e(n),a=t.map(u=>u[0]).join(\",\"),i=t.map((u,c)=>u[0]+e[c]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n);if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(value);\n } else {\n setOutput(getX(outC - start));\n }\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(value);\n } else {\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n }\n `}};var lg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=_e(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=$t(\"rc\",n),u=$t(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1;\n if(${c}) {\n `,n===1?\"\":`}\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?\"\":` ${p[n-1]} += 1;\n if(${c}) {`],f=n===1?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",d=\"\";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(x.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ba({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=P().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new lg(n.shape,s,a):new cg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},LF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Uw};var uZ=`\n if(a < 0.0 && floor(b) < b){\n return NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n return (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n`,pZ=`\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n bvec4 isNaN1 = lessThan(a, vec4(0.0));\n bvec4 isNaN2 = lessThan(floor(b), b);\n bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);\n `+js+`\n return result;\n`,cZ=ot({opSnippet:uZ,packedOpSnippet:pZ}),BF={kernelName:Bn,backendName:\"webgl\",kernelFunc:cZ};function lZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=x.parseAxisParam(s,n.shape),c=u,l=I.getAxesPermutation(c,i),m=n;l!=null&&(m=xt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=I.getInnerMostAxes(c.length,i),p.push(m)),I.assertAxesAreInnerMostDims(\"prod\",c,i);let f;if(t.shouldExecuteOnCPU([m])){let d=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:y}=_$(m.shape,m.dtype,d,c);f=t.makeTensorInfo(g,y,h)}else{let[d,h]=I.computeOutAndReduceShapes(m.shape,c),g=x.sizeFromShape(h),y=J({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=Ca(n.dtype),C=qr(y,b,\"prod\",t);f=J({inputs:{x:C},backend:t,attrs:{shape:d}}),p.push(y),p.push(C)}if(a){p.push(f);let d=I.expandShapeToKeepDim(f.shape,u);f=J({inputs:{x:f},backend:t,attrs:{shape:d}})}return p.forEach(d=>t.disposeIntermediateTensorInfo(d)),f}var VF={kernelName:Ao,backendName:\"webgl\",kernelFunc:lZ};function mZ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(y=>t.readSync(y.dataId)),u=n.map(y=>y.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,f,d]=E$(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(y=>t.makeTensorInfo([y.length],\"int32\",y)),g=t.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var zF={kernelName:Tp,backendName:\"webgl\",kernelFunc:mZ};function fZ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=$$(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var WF={kernelName:Np,backendName:\"webgl\",kernelFunc:fZ};function dZ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),f=i.map(g=>g.shape),[d,h]=R$(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,f,p);return t.makeTensorInfo(d,s.dtype,h)}var UF={kernelName:_p,backendName:\"webgl\",kernelFunc:dZ};var Gw=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=A$(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},GF={kernelName:ws,backendName:\"webgl\",kernelFunc:Gw};var hZ=\"return 1.0 / x;\",gZ=he({opSnippet:hZ}),HF={kernelName:ma,backendName:\"webgl\",kernelFunc:gZ};var xZ=Vt+`\n return (x < 0.0) ? 0.0 : x;\n`,yZ=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,bZ=he({opSnippet:xZ,packedOpSnippet:yZ}),qF={kernelName:zn,backendName:\"webgl\",kernelFunc:bZ};var CZ=Vt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,IZ=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,wZ=he({opSnippet:CZ,packedOpSnippet:IZ}),KF={kernelName:Gn,backendName:\"webgl\",kernelFunc:wZ};var mg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)\":m=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n `}};var fg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)\":m=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n `}};function SZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=P().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new fg(n.shape,p,u,s,a):new mg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],\"float32\")}var jF={kernelName:Un,backendName:\"webgl\",kernelFunc:SZ};var dg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,f=1/l,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${f});\n\n const int winHeight = int(${d});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), ${n-1}.0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function vZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new dg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var XF={kernelName:Vm,backendName:\"webgl\",kernelFunc:vZ};var hg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",f;s?f=\"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":f=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${f};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}};var gg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",f;s?f=\"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))\":f=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${f};\n\n // Compute the coordinators of nearest neighbor point.\n ivec3 sourceNearestRC = ivec3(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n vec4 newValue = vec4(\n getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n setOutput(newValue);\n }\n `}};function kZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=P().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new gg(n.shape,p,u,s,a):new hg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var YF={kernelName:Wn,backendName:\"webgl\",kernelFunc:kZ};var xg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,f=1/l,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${f});\n\n const int winHeight = int(${d});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float sourceFracRow =\n float(${p[0]}) *\n (float(dyR) / float(${u[0]}));\n\n float sourceFracCol =\n float(${p[1]}) *\n (float(dyC) / float(${u[1]}));\n\n int sourceNearestRow = int(min(\n float(int(${n}) - 1),\n ${o} ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int(${s}) - 1),\n ${o} ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function TZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new xg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var QF={kernelName:Bm,backendName:\"webgl\",kernelFunc:TZ};var yg=class{constructor(e,t){this.variableNames=[\"x\"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${e[0]} - coord - 1));\n }\n `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,s=e.map((i,p)=>n(p)).join(\",\"),a=_e(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var bg=class{constructor(e,t){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=$t(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=_e(o);o===1?this.userCode=`\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX(${e[0]} - rc - 1),\n ${e[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),\n ${e[0]} - (rc + 1) - 1);\n }\n setOutput(result);\n }\n `:this.userCode=`\n void main() {\n ${i} rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = ${p(n.slice())};\n if(${s}){\n result.g = ${u(n.slice())};\n }\n if(${a}) {\n result.b = ${c(n.slice())};\n if(${s}) {\n result.a = ${l(n.slice())};\n }\n }\n setOutput(result);\n }\n `;function p(d){return m(d)}function u(d){return d[o-1]=\"(\"+d[o-1]+\" + 1)\",m(d)}function c(d){return d[o-2]=\"(\"+d[o-2]+\" + 1)\",m(d)}function l(d){return d[o-1]=\"(\"+d[o-1]+\" + 1)\",d[o-2]=\"(\"+d[o-2]+\" + 1)\",m(d)}function m(d){let h=e.map((b,C)=>f(C,d)),g=h.join(\",\"),y=h.slice(-2).join(\",\");return`getChannel(getX(${g}), vec2(${y}))`}function f(d,h){return t.indexOf(d)!==-1&&e[d]!==1?`${e[d]} - ${h[d]} - 1`:`${h[d]}`}}};function NZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=x.parseAxisParam(s,n.shape);if(a===0)return Rt({inputs:{x:n},backend:t});let p=P().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new bg(n.shape,i):new yg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var ZF={kernelName:fa,backendName:\"webgl\",kernelFunc:NZ};var Cg=class{constructor(e,t){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=e[1],n=e[2];this.outputShape=e;let s=\"\";typeof t==\"number\"?s=`float outputValue = ${t.toFixed(2)};`:s=`\n vec3 fill = vec3(${t.join(\",\")});\n float outputValue = fill[coords[3]];`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n int y = coords[1];\n float coordXFloat = (float(x) - params[0]) * params[3] -\n (float(y) - params[1]) * params[2];\n float coordYFloat = (float(x) - params[0]) * params[2] +\n (float(y) - params[1]) * params[3];\n int coordX = int(round(coordXFloat + params[0]));\n int coordY = int(round(coordYFloat + params[1]));\n ${s}\n if(coordX >= 0 && coordX < ${n} && coordY >= 0 && coordY < ${o}) {\n outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var JF={kernelName:es,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Cg(o.shape,s),[u,c]=I.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var _Z=`\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n`,EZ=he({opSnippet:_Z}),eD={kernelName:da,backendName:\"webgl\",kernelFunc:EZ};var $Z=\"return inversesqrt(x);\",RZ=he({opSnippet:$Z,cpuKernelImpl:F$}),tD={kernelName:xo,backendName:\"webgl\",kernelFunc:RZ};var vc=class{constructor(e,t,o,n,s,a,i=!0){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let p=_e(s.length),u=_e(a.length),c=\"\";o===1?c=\"i\":o===2&&(c=\"i, j\");let l=`getIndices(${c})`,m=\"\";n===1?m=\"i\":n===2&&(m=\"i, coords[1]\");let f=`getUpdates(${m})`,d=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${p} strides = ${p}(${s});\n\n void main() {\n ${u} coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < ${e}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${t}; j++) {\n int index = round(${l});\n flattenedIndex += index * ${d};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n `}};function AZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let f=J({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),d=J({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],\"float32\",new Float32Array([0])),g=new vc(p,i,f.shape.length,d.shape.length,c,m),y=t.runWebGLProgram(g,[d,f,h],d.dtype),b=J({inputs:{x:y},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(y),t.disposeIntermediateTensorInfo(h),b}var rD={kernelName:Hn,backendName:\"webgl\",kernelFunc:AZ};var Ig=class{constructor(e,t,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[e,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=P().getNumber(\"WEBGL_VERSION\")===2?s:a,p=n===\"left\"?\"<\":\"<=\";this.userCode=`\n int findBound(int batch, float value) {\n int left = 0;\n int right = numInputs;\n int mid;\n ${i}\n mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${p} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int valueIndex = coords[1];\n\n float value = getValues(batch, valueIndex);\n\n setOutput(float(findBound(batch, value)));\n }\n `}};function FZ(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Ig(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var oD={kernelName:Ep,backendName:\"webgl\",kernelFunc:FZ};var wg=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s=\"resRC\",n=\"resRC\";else{let i=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],p=[],u=[];for(let c=0;c= 1.0) {\n setOutput(getA(${s}));\n } else {\n setOutput(getB(${s}));\n }\n }\n `}};function DZ(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new wg(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],ct(n.dtype,s.dtype))}var nD={kernelName:vs,backendName:\"webgl\",kernelFunc:DZ};var PZ=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${I.SELU_SCALEALPHA};\n float scale = ${I.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,OZ=he({opSnippet:PZ}),sD={kernelName:Xi,backendName:\"webgl\",kernelFunc:OZ};var MZ=jo+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,LZ=`\n vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,BZ=he({opSnippet:MZ,packedOpSnippet:LZ,cpuKernelImpl:P$}),aD={kernelName:yo,backendName:\"webgl\",kernelFunc:BZ};var VZ=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,zZ=he({opSnippet:VZ}),iD={kernelName:Yi,backendName:\"webgl\",kernelFunc:zZ};var WZ=jo+`\n return sin(x);\n`,UZ=he({opSnippet:WZ}),uD={kernelName:Kn,backendName:\"webgl\",kernelFunc:UZ};var GZ=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,HZ=he({opSnippet:GZ}),pD={kernelName:ha,backendName:\"webgl\",kernelFunc:HZ};var qZ=`\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n`,KZ=he({opSnippet:qZ}),cD={kernelName:Qi,backendName:\"webgl\",kernelFunc:KZ};var jZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;x.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((y,b)=>y*b),p=[[0,0]];p.push(...a);for(let y=1+s.length;yt.disposeIntermediateTensorInfo(y)),g},lD={kernelName:ks,backendName:\"webgl\",kernelFunc:jZ};function XZ(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:\n ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw:\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw:\n ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw:\n ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,f,d,h]=M$(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,f),t.makeTensorInfo([d.length],\"bool\",new Uint8Array(d.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var mD={kernelName:Qa,backendName:\"webgl\",kernelFunc:XZ};function YZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=L$(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var fD={kernelName:ga,backendName:\"webgl\",kernelFunc:YZ};function QZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=sh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var dD={kernelName:Za,backendName:\"webgl\",kernelFunc:QZ};function ZZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=sh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var hD={kernelName:Ja,backendName:\"webgl\",kernelFunc:ZZ};function JZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1;if(s.dtype===\"string\"){let y=t.bufferSync(n),b=t.bufferSync(s),C=x.decodeString(t.readSync(a.dataId)[0]),w=D$(y,b,i,m,c,u,p,l,C,f);return t.makeTensorInfo(i,w.dtype,w.values)}let d=new vc(u,p,n.shape.length,s.shape.length,l,[m,1],f),h=t.runWebGLProgram(d,[s,n,a],s.dtype),g=J({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var gD={kernelName:ei,backendName:\"webgl\",kernelFunc:JZ};function e9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let f=[...l];f[i]=m;let d=ps({inputs:{x:n},backend:t,attrs:{begin:c,size:f}});return c[i]+=m,d})}var xD={kernelName:Ts,backendName:\"webgl\",kernelFunc:e9};var yD=\"return sqrt(x);\",t9=he({opSnippet:yD,packedOpSnippet:yD,cpuKernelImpl:B$}),bD={kernelName:bo,backendName:\"webgl\",kernelFunc:t9};var r9=\"return x * x;\",o9=he({opSnippet:r9}),CD={kernelName:ti,backendName:\"webgl\",kernelFunc:o9};var ID=\"return (a - b) * (a - b);\",n9=ot({opSnippet:ID,packedOpSnippet:ID}),wD={kernelName:Co,backendName:\"webgl\",kernelFunc:n9};function s9({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Vt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new fr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var SD={kernelName:$s,backendName:\"webgl\",kernelFunc:s9};var Sg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=_e(o.length),a=_e(o.length),i=\"\";if(n===1)i=\"coords * strides + begin\";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(\",\")}this.userCode=`\n ${s} begin = ${s}(${e});\n ${s} strides = ${s}(${t});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function a9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=J({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let E=et.computeOutShape(b,C,w),R=ps({inputs:{x:n},backend:t,attrs:{begin:b,size:E}});k=J({inputs:{x:R},backend:t,attrs:{shape:d}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),A=ne(n.shape,n.dtype,R),D=V$(f,A,w,b);k=t.makeTensorInfo(d,n.dtype,D.values)}else{let R=new Sg(b,w,f);k=t.runWebGLProgram(R,[n],n.dtype)}let _=J({inputs:{x:k},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(k),_}var vD={kernelName:Yn,backendName:\"webgl\",kernelFunc:a9};function i9(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),f=t.readSync(l.dataId),[d,h]=z$(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],\"string\",d),t.makeTensorInfo(l.shape,\"int32\",h)]}var kD={kernelName:Ns,backendName:\"webgl\",kernelFunc:i9};function u9(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=W$(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var TD={kernelName:ri,backendName:\"webgl\",kernelFunc:u9};function p9(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.readSync(s.dataId),i=U$(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var ND={kernelName:oi,backendName:\"webgl\",kernelFunc:p9};var c9=\"return tan(x);\",l9=he({opSnippet:c9}),_D={kernelName:xa,backendName:\"webgl\",kernelFunc:l9};var m9=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,f9=he({opSnippet:m9}),ED={kernelName:Qn,backendName:\"webgl\",kernelFunc:f9};var vg=class{constructor(e,t){this.variableNames=[\"A\"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>x.decodeString(m)):p,c=ne(n.shape,n.dtype,u),l=H$(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new vg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var $D={kernelName:wo,backendName:\"webgl\",kernelFunc:Hw};var kg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"negativeInf\",type:\"float\"},{name:\"dir\",type:\"int\"},{name:\"inc\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced above,\n // Figure5(a) shows that element[1] is in the\n // second half of the group when group size is 2, but it is in the\n // first half of the group when group size is 4.\n\n bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n // Denotes which direction indices are in (ascending or descending).\n bool reverse = imod(elemIdx, 2 * dir) >= dir;\n bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) { // Elements in opposite order of direction\n int iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutput(float(i0));\n } else {\n setOutput(float(i1));\n }\n }\n `}},Tg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),\n // we only need to output the indices at positions |, the indices at\n // positions _ can be thrown away, see Figure5(b) After Phase 2\n // (Merge phase) in the Bitonic Top K paper referenced above.\n // For example, the paper shows we only need to output the orange bars.\n // The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back\n // to the previous sequence to find the corresponding value,\n // we need to double the index. When we double the index,\n // we basically interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n // of each 2k positions by - elemIdx % k. E.g. for output at\n // index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n float x0 = getX(batch, i0);\n float x1 = i1 < n ? getX(batch, i1) : x0;\n\n setOutput(x0 >= x1 ? float(i0) : float(i1));\n }\n `}};function Vu(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function RD(r){let e=1;for(;ep){let D=t.readSync(n.dataId),[O,M]=q$(D,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,\"int32\",[])];if(c===1)return[n,Ba({attrs:{shape:u,dtype:\"int32\",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,f=m?t.unpackTensor(n):n,h=x.sizeFromShape(u)/c,g=J({inputs:{x:f},attrs:{shape:[h,c]},backend:t});m&&Vu(t,f);let y=RD(s),b=RD(c),C=null,w=()=>C===null?[g,g]:[g,C],k=(D,O,M)=>{let L=w(),W=new kg(M),G=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[D],[O]],q=C;C=t.runWebGLProgram(W,L,\"int32\",G),Vu(t,q)};for(let D=1;D=1;M/=2)k(O,M,[h,b])}for(let D=b;D>y;D/=2){let O=w(),M=new Tg([h,D/2]),W=[[c],[C===null?1:0],[y]],V=C;C=t.runWebGLProgram(M,O,\"int32\",W),Vu(t,V);let G=y/2,q=G*2;for(let H=G;H>=1;H/=2)k(q,H,C.shape)}let _=C;C=ps({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),Vu(t,_);let E=Lw({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});Vu(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=J({inputs:{x:C},attrs:{shape:R},backend:t}),Vu(t,_);let A=E;return E=J({inputs:{x:E},attrs:{shape:R},backend:t}),Vu(t,A),[E,C]}var AD={kernelName:Zn,backendName:\"webgl\",kernelFunc:h9};var Ng=class{constructor(e,t,o,n,s,a){this.variableNames=[\"Image\",\"Transforms\"],this.outputShape=a;let i=o===\"nearest\"?1:2,p;switch(n){case\"constant\":p=1;break;case\"reflect\":p=2;break;case\"wrap\":p=3;break;case\"nearest\":p=4;break;default:p=1;break}this.userCode=`\n float mapCoord(float outCoord, float len) {\n float inCoord = outCoord;\n if(${p} == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n inCoord -= sz2 * float(int(float(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord -= len * float(int(float(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n } else {\n return outCoord;\n }\n }\n\n float readWithFillValue(int batch, int coordY, int coordX,\n int channel) {\n float outputValue;\n if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = float(${s});\n }\n return outputValue;\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n float outputValue;\n int batch = coords[0];\n int x = coords[2];\n int y = coords[1];\n int channel = coords[3];\n float xf = float(x);\n float yf = float(y);\n float a1 = getTransforms(batch, 0);\n float a2 = getTransforms(batch, 1);\n float a3 = getTransforms(batch, 2);\n float b1 = getTransforms(batch, 3);\n float b2 = getTransforms(batch, 4);\n float b3 = getTransforms(batch, 5);\n float c1 = getTransforms(batch, 6);\n float c2 = getTransforms(batch, 7);\n float projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = float(${s});\n } else {\n float inX = (a1 * xf + a2 * yf + a3) / projection;\n float inY = (b1 * xf + b2 * yf + b3) / projection;\n float mapX = mapCoord(inX, float(${t}));\n float mapY = mapCoord(inY, float(${e}));\n\n if (${i} == 1) {\n int coordY = int(round(mapY));\n int coordX = int(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n float yFloor = floor(mapY);\n float xFloor = floor(mapX);\n float yCeil = yFloor + 1.0;\n float xCeil = xFloor + 1.0;\n float valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n float valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutput(outputValue);\n }\n `}};function g9(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Ng(l,m,a,i,p,g);return t.runWebGLProgram(y,[n,s],\"float32\")}var FD={kernelName:Jn,backendName:\"webgl\",kernelFunc:g9};function x9(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;as(s,\"unique\"),console.warn(\"WARNING: \",\"UI might be locked temporarily as data is being downloaded\");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=K$(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var DD={kernelName:$p,backendName:\"webgl\",kernelFunc:x9};function y9(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),d}var PD={kernelName:_s,backendName:\"webgl\",kernelFunc:y9};var _g=class{constructor(e,t){this.variableNames=[\"x\",\"segmentIds\"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p=\"0.0\",u=\"sumValue\",c=Math.floor(o/4)*4,l=o%4,m=`\n sumValue += dot(values, segFilter);\n `,f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `);let d=\"\";s%o>0&&(d=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return -1.0;\n }\n `),this.userCode=`\n const float initializationValue = ${p};\n\n float getValue(int batch, int inIdx) {\n ${f}\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n ${d}\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n ${a})) * float(${o}));\n int currentSeg = int(mod(float(outIdx), float(${a})));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function b9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=I.getAxesPermutation([u],i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=I.getInnerMostAxes(1,i)[0]);let m=I.segment_util.computeOutShape(l.shape,u,a),f=x.sizeFromShape([l.shape[u]]),d=J({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}});p.push(d);let h=Ca(n.dtype),g=(w,k,_,E,R)=>{let A=w.shape[0],D=w.shape[1],O=I.segment_util.segOpComputeOptimalWindowSize(D,R),M={windowSize:O,inSize:D,batchSize:A,numSegments:R},L=new _g(M,k),W=t.compileAndRun(L,[w,_],E);if(p.push(W),W.shape[1]===R)return W;let V=Gw({backend:t,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),G=Hw({inputs:{x:V},backend:t,attrs:{reps:[D/O]}});return p.push(V),p.push(G),g(W,k,G,E,R)},y=g(d,\"unsortedSegmentSum\",s,h,a),b=J({inputs:{x:y},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let w=I.getUndoAxesPermutation(c);C=xt({inputs:{x:C},backend:t,attrs:{perm:w}})}return p.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}var OD={kernelName:Rp,backendName:\"webgl\",kernelFunc:b9};var C9=[IR,SR,vR,kR,NR,_R,ER,$R,FR,DR,PR,OR,MR,LR,BR,VR,zR,WR,UR,GR,HR,KR,jR,XR,JR,tA,rA,lR,nA,aA,iA,uA,pA,cA,lA,mA,fA,dA,hA,yA,bA,CA,IA,wA,SA,vA,kA,TA,NA,_A,EA,$A,RA,AA,FA,PA,OA,MA,LA,VA,zA,WA,UA,GA,HA,qA,KA,jA,cR,XA,sA,YA,QA,ZA,mR,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,cF,lF,mF,fF,dF,hF,xF,bF,CF,IF,wF,SF,_F,hR,EF,$F,RF,AF,YR,FF,OF,MF,LF,BF,fR,VF,zF,WF,UF,GF,QR,vF,HF,qF,KF,xR,jF,XF,YF,QF,ZF,JF,eD,tD,rD,oD,nD,sD,aD,iD,uD,pD,qR,NF,cD,lD,mD,fD,dD,hD,gD,xD,bD,CD,wD,SD,vD,kD,TD,ND,TF,bR,_D,ED,$D,AD,FD,CR,DD,PD,OD,DF];for(let r of C9)ya(r);var Ae;(function(r){r[r.float32=0]=\"float32\",r[r.int32=1]=\"int32\",r[r.bool=2]=\"bool\",r[r.string=3]=\"string\",r[r.complex64=4]=\"complex64\"})(Ae||(Ae={}));var $i;(function(r){r[r.linear=0]=\"linear\",r[r.relu=1]=\"relu\",r[r.relu6=2]=\"relu6\",r[r.prelu=3]=\"prelu\",r[r.leakyrelu=4]=\"leakyrelu\",r[r.sigmoid=5]=\"sigmoid\",r[r.elu=6]=\"elu\"})($i||($i={}));var MD;function I9(r){MD=r.wasm.cwrap(Fo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function w9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"_FusedMatMul for non non-float32 tensors not yet supported.\");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,f=t.dataIdMap.get(s.dataId).id,d=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);d=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=$i[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let y=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),w=t.makeOutput([...C,y,b],n.dtype),k=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return MD(m,_,n.shape.length,f,E,s.shape.length,p,u,g,d,h,l||0,k),w}var LD={kernelName:Fo,backendName:\"wasm\",setupFunc:I9,kernelFunc:w9};function Qe(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,[\"number\",\"number\",\"number\"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return x.sizeFromShape(u.shape)===0||t(p,Ae[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var BD=Qe(sn);function nt(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,f=t!=null?t:u.dtype,d=I.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(d,f);if(x.sizeFromShape(d)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return(()=>o(l,g,u.shape.length,m,y,c.shape.length,Ae[u.dtype],b))(),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var S9=!0,VD=nt(_r,S9);var zD;function v9(r){zD=r.wasm.cwrap(an,null,[\"array\",\"number\",\"number\",\"number\"])}function k9(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(x.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return zD(s,n.length,Ae[o.dtype],a),o}var WD={kernelName:an,backendName:\"wasm\",setupFunc:v9,kernelFunc:k9};function zu(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return nr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var UD={kernelName:uo,backendName:\"wasm\",kernelFunc:zu};var GD;function T9(r){GD=r.wasm.cwrap(Mr,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Eo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=_9(e.x.shape,o.perm),a=!0;for(let d=0;d=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var HD={kernelName:Mr,backendName:\"wasm\",kernelFunc:Eo,setupFunc:T9};function kr(r,e,t){let o=r.shape,n=r.shape.length,s=x.parseAxisParam(e,o),a=s,i=I.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let f=0;f`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var eP={kernelName:Ss,backendName:\"wasm\",kernelFunc:Mt};var tP;function M9(r){tP=r.wasm.cwrap(cn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function L9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"BatchMatMul for non non-float32 tensors not yet supported.\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],f=i?s.shape[u-2]:s.shape[u-1],d=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=x.sizeFromShape(d),y=x.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);x.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[y,f,l]:[y,l,f],_=Mt({inputs:{x:n},backend:t,attrs:{shape:w}}),E=Mt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,A=t.dataIdMap.get(E.dataId).id,D=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,y),L=t.makeOutput([M,D,O],_.dtype),W=t.dataIdMap.get(L.dataId).id,V=new Uint8Array(new Int32Array(_.shape).buffer),G=new Uint8Array(new Int32Array(E.shape).buffer);return tP(R,V,_.shape.length,A,G,E.shape.length,a,i,W),t.disposeData(_.dataId),t.disposeData(E.dataId),L.shape=C,L}var rP={kernelName:cn,backendName:\"wasm\",setupFunc:M9,kernelFunc:L9};function Xo(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=et.parseSliceParams(e,t,o),i=et.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=x.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let d=et.computeFlatOffset(s,c);return e.dtype===\"string\"?l.stringBytes=p.slice(d,d+x.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(d,d+x.sizeFromShape(a))),u}if(e.dtype===\"string\"){let d=vu(p,s,a,e.shape,e.dtype);return l.stringBytes=d,u}let m=n.typedArrayFromHeap(u),f=e.shape.length;if(f===2)B9(p,c[0],m,s,a);else if(f===3)V9(p,c[0],c[1],m,s,a);else if(f===4)z9(p,c[0],c[1],c[2],m,s,a);else{let d=vu(p,s,a,e.shape,e.dtype);m.set(d)}return u}function B9(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;uy*b),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=Mt({inputs:{x:n},backend:t,attrs:{shape:p}}),d=Eo({inputs:{x:f},backend:t,attrs:{perm:u}}),h=Mt({inputs:{x:d},backend:t,attrs:{shape:c}}),g=Xo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(f.dataId),t.disposeData(d.dataId),t.disposeData(f.dataId),g}var nP={kernelName:hs,backendName:\"wasm\",kernelFunc:W9};function cs(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var sP={kernelName:to,backendName:\"wasm\",kernelFunc:cs};var aP=Qe(ro);var iP;function U9(r){iP=r.wasm.cwrap(Ro,null,[\"number\",\"number\",\"number\",\"number\"])}function G9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return iP(i,s,a,u),p}var uP={kernelName:Ro,backendName:\"wasm\",setupFunc:U9,kernelFunc:G9};function qw(r){let{inputs:e,backend:t}=r,o=x.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(f=>f.shape);I.assertParamsConsistent(n,o);let s=I.computeOutShape(e.map(f=>f.shape),o),a=e.filter(f=>x.sizeFromShape(f.shape)>0);if(a.length===1)return zu({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(x.sizeFromShape(s)===0)return i;if(a[0].dtype===\"string\"){let f=a.map(C=>{let k=[-1,x.sizeFromShape(C.shape.slice(o))];return Mt({inputs:{x:C},backend:t,attrs:{shape:k}})}),d=f.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=I.computeOutShape(f.map(C=>C.shape),1);let h=f[0].shape[0]===1,g=Iu(d,s,e[0].dtype,h),y=I.computeOutShape(a.map(C=>C.shape),o);i.shape=y;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=I.fromStringArrayToUint8(g),f.forEach(C=>t.disposeData(C.dataId)),i}let p=x.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(f=>{let d=x.sizeFromShape(f.shape.slice(o));return u+=d,d}),l=a.map(f=>t.typedArrayFromHeap(f)),m=t.typedArrayFromHeap(i);for(let f=0;f`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],p),c=n;u!==null&&(c=Eo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=I.getInnerMostAxes(1,p)[0];I.assertAxesAreInnerMostDims(\"cumprod\",[l],p);let m=t.makeOutput(c.shape,c.dtype),f=c.shape[l],d=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;yP(d,a?1:0,i?1:0,f,h,Ae[n.dtype]);let g=m;if(u!==null){let y=I.getUndoAxesPermutation(u);g=Eo({inputs:{x:m},attrs:{perm:y},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var bP={kernelName:hn,backendName:\"wasm\",setupFunc:Q9,kernelFunc:Z9};var CP;function J9(r){CP=r.wasm.cwrap(gn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function eJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;x.assert(n.dtype===\"float32\"||n.dtype===\"int32\",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],p),c=n;u!==null&&(c=Eo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=I.getInnerMostAxes(1,p)[0];I.assertAxesAreInnerMostDims(\"cumsum\",[l],p);let m=t.makeOutput(c.shape,c.dtype),f=c.shape[l],d=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;CP(d,a?1:0,i?1:0,f,h,Ae[n.dtype]);let g=m;if(u!==null){let y=I.getUndoAxesPermutation(u);g=Eo({inputs:{x:m},attrs:{perm:y},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var IP={kernelName:gn,backendName:\"wasm\",setupFunc:J9,kernelFunc:eJ};var wP;function tJ(r){wP=r.wasm.cwrap(yn,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function rJ(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a===\"NHWC\"?[i,l,m,f]:[i,f,l,m],h=e.makeOutput(d,\"float32\"),y=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(d).buffer),w=new Uint8Array(new Int32Array(x.computeStrides(d)).buffer),k=e.dataIdMap.get(h.dataId).id;return wP(y,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,w,d.length,k),h}var SP={kernelName:yn,backendName:\"wasm\",setupFunc:tJ,kernelFunc:rJ};var vP;function oJ(r){vP=r.wasm.cwrap(bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function nJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,f=I.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),d=f.filterHeight,h=f.filterWidth,g=f.padInfo.top,y=f.padInfo.right,b=f.padInfo.bottom,C=f.padInfo.left,w=f.dilationHeight,k=f.dilationWidth,_=f.strideHeight,E=f.strideWidth,R=f.inChannels,A=f.outChannels,D=f.padInfo.type===\"SAME\"?1:0;if(f.dataFormat!==\"channelsLast\")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(f.outShape,\"float32\"),M=o.dataIdMap.get(O.dataId).id;return vP(a,n.shape[0],n.shape[1],n.shape[2],i,d,h,g,y,b,C,D,w,k,_,E,R,A,M),O}var kP={kernelName:bn,backendName:\"wasm\",setupFunc:oJ,kernelFunc:nJ};var TP=Qe(In);var sJ=!1,NP=nt(oo,sJ,\"bool\");var _P=Qe(no,\"float32\");function Eg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(x.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Mt({inputs:{x:n},backend:o,attrs:{shape:i}})}var EP={kernelName:xs,backendName:\"wasm\",kernelFunc:Eg};function jw(r){let{attrs:{shape:e,value:t,dtype:o},backend:n}=r,s=n.makeOutput(e,o);return n.typedArrayFromHeap(s).fill(t),s}var $P={kernelName:ys,backendName:\"wasm\",kernelFunc:jw};var RP;function aJ(r){RP=r.wasm.cwrap(Sn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function iJ(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return RP(s,i,p,u,c,a),n}var AP={kernelName:Sn,backendName:\"wasm\",kernelFunc:iJ,setupFunc:aJ};var FP=Qe(so);var uJ=!1,DP=nt(vn,uJ);var PP;function pJ(r){PP=r.wasm.cwrap(kn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function cJ(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,f=p!=null?e.dataIdMap.get(p.dataId).id:0,d=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(x.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return PP(c,l,m,f,d,n,g),h}var OP={kernelName:kn,backendName:\"wasm\",setupFunc:pJ,kernelFunc:cJ};var MP;function lJ(r){MP=r.wasm.cwrap(Do,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function mJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=I.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=$i[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedConv2D in the wasm backend.`);let y=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let X=o.dataIdMap.get(a.dataId);if(X.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`);w=X.id}let k=h.filterHeight,_=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,A=h.padInfo.bottom,D=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,G=h.padInfo.type===\"SAME\"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let Y=o.makeOutput(h.outShape,\"float32\"),Z=o.dataIdMap.get(Y.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return MP(y,q,H,j,b,k,_,w,E,R,A,D,G,O,M,L,W,V,C,g,ee,d||0,Z),Y}var LP={kernelName:Do,backendName:\"wasm\",setupFunc:lJ,kernelFunc:mJ};var BP;function fJ(r){BP=r.wasm.cwrap(Po,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function dJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=I.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=$i[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let X=o.dataIdMap.get(a.dataId);if(X.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`);w=X.id}let k=h.filterHeight,_=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,A=h.padInfo.bottom,D=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,G=h.padInfo.type===\"SAME\"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let Y=o.makeOutput(h.outShape,\"float32\"),Z=o.dataIdMap.get(Y.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return BP(y,q,H,j,b,k,_,w,E,R,A,D,G,O,M,L,W,V,C,g,ee,d||0,Z),Y}var VP={kernelName:Po,backendName:\"wasm\",setupFunc:fJ,kernelFunc:dJ};var zP;function hJ(r){zP=r.wasm.cwrap(Tn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function gJ(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=af.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],f=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),y=e.dataIdMap.get(u.dataId).id;return zP(f,Ae[o.dtype],h,a,l,i,g,y),u}var WP={kernelName:Tn,backendName:\"wasm\",setupFunc:hJ,kernelFunc:gJ};var UP;function xJ(r){UP=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function yJ(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=x.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let A=0;A=0,()=>`GatherV2: the index value ${D} is not in [0, ${c-1}]`)}let l=I.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Mt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),f=x.sizeFromShape(s.shape),d=Mt({inputs:{x:s},attrs:{shape:[l.batchSize,f/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,f/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(x.sizeFromShape(n.shape)===0)return g;let y=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(d.dataId).id,_=e.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(x.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(x.computeStrides(h)).buffer);return UP(C,Ae[n.dtype],E,y,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(d.dataId),g.shape=l.outputShape,g}var GP={kernelName:bs,backendName:\"wasm\",setupFunc:xJ,kernelFunc:yJ};var bJ=!1,HP=nt(ao,bJ,\"bool\");var CJ=!1,qP=nt(io,CJ,\"bool\");var KP;function IJ(r){KP=r.wasm.cwrap(Nn,null,[\"number\",\"number\",\"number\",\"number\"])}function wJ(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,\"float32\");if(x.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;KP(n,Ae[e.dtype],t,a)}return s}var jP={kernelName:Nn,backendName:\"wasm\",setupFunc:IJ,kernelFunc:wJ};var SJ=!1,XP=nt(po,SJ,\"bool\");var vJ=!1,YP=nt(co,vJ,\"bool\");var QP=Qe(lo);var kJ=!1,ZP=nt(_n,kJ,\"bool\");var JP=Qe(En);var TJ=!1,eO=nt(ua,TJ,\"bool\");var NJ=!1,tO=nt(g0,NJ,\"bool\");var rO;function _J(r){rO=r.wasm.cwrap($n,null,[\"number\",\"number\",\"number\",\"number\"])}function EJ(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e);if(f){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let d=u.shape.length;I.assertAxesAreInnerMostDims(\"max\",l,d);let[h,g]=I.computeOutAndReduceShapes(u.shape,l),y=x.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;rO(p,Ae[a.dtype],y,C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var oO={kernelName:$n,backendName:\"wasm\",setupFunc:_J,kernelFunc:EJ};var $J=!1,nO=nt(mo,$J);var sO;function RJ(r){sO=r.wasm.cwrap(Rn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function AJ(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;x.assert(n.dtype===\"float32\",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=I.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,f=c.padInfo.top,d=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,y=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,w=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!==\"channelsLast\")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let E=o.makeOutput(c.outShape,\"float32\"),R=o.dataIdMap.get(E.dataId).id;return sO(s,n.shape[0],n.shape[1],n.shape[2],l,m,f,d,h,g,y,b,C,w,k,_,R),E}var aO={kernelName:Rn,backendName:\"wasm\",setupFunc:RJ,kernelFunc:AJ};var iO;function FJ(r){iO=r.wasm.cwrap(An,null,[\"number, number, number\"])}function DJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let w=e.dataIdMap.get(c.dataId).id;w!==i&&(u=c,p=w,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims(\"mean\",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=cs({backend:e,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,\"float32\");if(x.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(C.dataId).id;iO(p,y,w)}if(f&&e.disposeData(c.dataId),s){let w=I.expandShapeToKeepDim(C.shape,m);C.shape=w}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),C}var uO={kernelName:An,backendName:\"wasm\",setupFunc:FJ,kernelFunc:DJ};var pO;function PJ(r){pO=r.wasm.cwrap(Fn,null,[\"number\",\"number\",\"number\",\"number\"])}function OJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e);if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let d=u.shape.length;I.assertAxesAreInnerMostDims(\"min\",l,d);let[h,g]=I.computeOutAndReduceShapes(u.shape,l),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;pO(p,Ae[a.dtype],y,C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var cO={kernelName:Fn,backendName:\"wasm\",setupFunc:PJ,kernelFunc:OJ};var MJ=!1,lO=nt(fo,MJ);var Xw;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Xw||(Xw={}));var mO;function LJ(r){mO=r.wasm.cwrap(Dn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function BJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((d,h)=>d[0]+e.shape[h]+d[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(d=>d[0]),l=o.map(d=>d[1]),m=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(l).buffer);return mO(a,u,e.shape.length,Ae[e.dtype],m,f,Xw[n],p),i}var fO={kernelName:Dn,backendName:\"wasm\",kernelFunc:BJ,setupFunc:LJ};var VJ=!0,dO=nt(ho,VJ);var hO=Qe(Pn);function kc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var gO;function zJ(r){gO=r.wasm.cwrap(On,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function WJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=gO(u,c,s,n,a),{pSelectedIndices:m,selectedSize:f,pSelectedScores:d,pValidOutputs:h}=kc(e,l);return e.wasm._free(d),e.wasm._free(h),e.makeOutput([f],\"int32\",m)}var xO={kernelName:On,backendName:\"wasm\",setupFunc:zJ,kernelFunc:WJ};var yO;function UJ(r){yO=r.wasm.cwrap(pa,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function GJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=yO(c,l,s,n,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=kc(e,m);e.wasm._free(h);let y=e.makeOutput([d],\"int32\",f),b=e.makeOutput([],\"int32\",g);return[y,b]}var bO={kernelName:pa,backendName:\"wasm\",setupFunc:UJ,kernelFunc:GJ};var CO;function HJ(r){CO=r.wasm.cwrap(Mn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function qJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=CO(c,l,s,n,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=kc(e,m);e.wasm._free(g);let y=e.makeOutput([d],\"int32\",f),b=e.makeOutput([d],\"float32\",h);return[y,b]}var IO={kernelName:Mn,backendName:\"wasm\",setupFunc:HJ,kernelFunc:qJ};var KJ=!1,wO=nt(go,KJ,\"bool\");var SO;function jJ(r){SO=r.wasm.cwrap(ca,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function XJ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return SO(m,a,i,p,c),u}var vO={kernelName:ca,backendName:\"wasm\",setupFunc:jJ,kernelFunc:XJ};function YJ(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var kO={kernelName:Cs,backendName:\"wasm\",kernelFunc:YJ};function QJ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Eg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),x.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Eg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=qw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var TO={kernelName:Is,backendName:\"wasm\",kernelFunc:QJ};var NO;function ZJ(r){NO=r.wasm.cwrap(Ln,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function JJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(x.sizeFromShape(e.shape)===0)return jw({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),f=new Uint8Array(new Int32Array(l).buffer),d=new Uint8Array(new Int32Array(m).buffer);return NO(a,c,e.shape.length,Ae[e.dtype],f,d,n,u),i}var $g={kernelName:Ln,backendName:\"wasm\",kernelFunc:JJ,setupFunc:ZJ};var eee=!1,_O=nt(Bn,eee);var EO;function tee(r){EO=r.wasm.cwrap(Vn,null,[\"number\",\"number\",\"number\"])}function ree(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=cs({backend:t,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,\"float32\"),l=t.dataIdMap.get(c.dataId).id;return EO(i,a,l),p.dtype!==\"float32\"&&t.disposeData(u.dataId),c}var $O={kernelName:Vn,backendName:\"wasm\",setupFunc:tee,kernelFunc:ree};var RO;function oee(r){RO=r.wasm.cwrap(Ao,null,[\"number\",\"number\",\"number\",\"number\"])}function nee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims(\"prod\",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;RO(p,y,Ae[b.dtype],C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var AO={kernelName:Ao,backendName:\"wasm\",setupFunc:oee,kernelFunc:nee};var see=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Su(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},FO={kernelName:ws,backendName:\"wasm\",kernelFunc:see};var aee=!0,DO=nt(Cn,aee);var PO=Qe(zn);var OO=Qe(Gn);var MO;function iee(r){MO=r.wasm.cwrap(Un,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function uee(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,f]=n.shape,d=[c,p,u,f],h=e.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=cs({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=e.dataIdMap.get(g.dataId));let y=h.id,b=e.makeOutput(d,\"float32\");if(x.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return MO(y,c,l,m,f,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var LO={kernelName:Un,backendName:\"wasm\",setupFunc:iee,kernelFunc:uee};var BO;function pee(r){BO=r.wasm.cwrap(Wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function cee(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,f]=n.shape,d=[c,p,u,f],h=e.makeOutput(d,\"float32\");if(x.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),y;g.dtype!==\"float32\"&&(y=cs({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=e.dataIdMap.get(y.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return BO(b,c,l,m,f,p,u,s?1:0,a?1:0,C),y!=null&&e.disposeData(y.dataId),h}var VO={kernelName:Wn,backendName:\"wasm\",setupFunc:pee,kernelFunc:cee};var zO;function lee(r){zO=r.wasm.cwrap(fa,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function mee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=x.parseAxisParam(s,n.shape);if(n.shape.length===0)return zu({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);zO(p,c,a.length,l,n.shape.length,u);let m=Mt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var WO={kernelName:fa,backendName:\"wasm\",kernelFunc:mee,setupFunc:lee};var UO;function fee(r){UO=r.wasm.cwrap(es,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function dee(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,f,d]=n.shape,[h,g]=I.getImageCenter(i,m,f),y=a===0,b=255,C=typeof a==\"number\"?[a,a,a,y?0:b]:[...a,b],w=new Uint8Array(new Int32Array(C).buffer);return UO(u,l,m,f,d,s,h,g,w,C.length,c),p}var GO={kernelName:es,backendName:\"wasm\",kernelFunc:dee,setupFunc:fee};var HO=Qe(da);var qO=Qe(xo);var KO;function hee(r){KO=r.wasm.cwrap(Hn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function gee(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(x.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=cl.calculateShapes(s,n,a),d=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return KO(d,g,Ae[s.dtype],p,u,c,y,m,b),i}var jO={kernelName:Hn,backendName:\"wasm\",setupFunc:hee,kernelFunc:gee};var XO;function xee(r){XO=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function yee(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,f=l===0||l>1||m===1?1:x.sizeFromShape(n.shape.slice(1));return XO(a,i,p,f,c),u}var YO={kernelName:vs,backendName:\"wasm\",kernelFunc:yee,setupFunc:xee};var QO;function bee(r){QO=r.wasm.cwrap(yo,null,[\"number\",\"number\"])}function Cee(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return x.sizeFromShape(n.shape)===0||QO(o,s),n}var ZO={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:bee,kernelFunc:Cee};var JO=Qe(Kn);var e3;function Iee(r){e3=r.wasm.cwrap(Xn,null,[\"number\",\"number\",\"number\",\"number\"])}function wee(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=x.sizeFromShape(t.shape)/i;return x.sizeFromShape(s.shape)===0||e3(n,a,i,p),s}var t3={kernelName:Xn,backendName:\"wasm\",setupFunc:Iee,kernelFunc:wee};function See(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=x.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_0?p+1:0;if(c<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,f=t.dataIdMap.get(s.dataId).id,d=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,y=t.makeOutput([4],\"int32\"),b=t.dataIdMap.get(y.dataId).id;i3(m,Ae[n.dtype],n.shape[0],f,d,g,b,e,0);let C=t.readSync(y.dataId),w;switch(C[0]){case 0:{w=I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{w=I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:w=I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:w=I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:w=\"\"}if(t.disposeData(y.dataId),w)throw t.disposeData(h.dataId),new Error(w);return h}function _ee(r){return Ag(r,!0)}var u3={kernelName:Za,backendName:\"wasm\",setupFunc:Rg,kernelFunc:_ee};function Eee(r){return Ag(r,!1)}var p3={kernelName:Ja,backendName:\"wasm\",setupFunc:Rg,kernelFunc:Eee};function $ee(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let f=Xo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,f})}var c3={kernelName:Ts,backendName:\"wasm\",kernelFunc:$ee};var l3=Qe(bo);var m3=Qe(ti);var Ree=!0,f3=nt(Co,Ree);var d3;function Aee(r){d3=r.wasm.cwrap($s,null,[\"number\",\"number\",\"number\",\"number\"])}function Fee(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return d3(a,n,Ae[s.dtype],p),i}var h3={kernelName:$s,backendName:\"wasm\",setupFunc:Aee,kernelFunc:Fee};var g3;function Dee(r){g3=r.wasm.cwrap(Yn,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Pee(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Mt({inputs:{x:n},backend:e,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=Xo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Mt({inputs:{x:E},backend:e,attrs:{shape:d}}),e.disposeData(E.dataId)}else{let _=e.makeOutput(f,\"float32\"),E=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),A=new Uint8Array(new Int32Array(b).buffer),D=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(w).buffer),M=new Uint8Array(new Int32Array(f).buffer),L=new Uint8Array(new Int32Array(x.computeStrides(f)).buffer),W=e.dataIdMap.get(_.dataId).id;g3(E,R,n.shape.length,A,D,O,M,L,f.length,W),k=Mt({inputs:{x:_},backend:e,attrs:{shape:d}}),e.disposeData(_.dataId)}return k}var x3={kernelName:Yn,backendName:\"wasm\",setupFunc:Dee,kernelFunc:Pee};function Oee(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),f=e.readSync(s.dataId),[d,h]=ku(m,f,a,i,p,u,c,l),g=e.makeOutput([d.length],\"string\"),y=e.dataIdMap.get(g.dataId);y.stringBytes=d;let b=e.makeOutput(s.shape,\"int32\");return e.typedArrayFromHeap(b).set(h),[g,b]}var y3={kernelName:Ns,backendName:\"wasm\",kernelFunc:Oee};function Mee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=Tu(i,p[0],a),m=c.length,f=e.makeOutput([m,2],\"int32\");e.typedArrayFromHeap(f).set(u);let h=e.makeOutput([m],\"string\"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let y=e.makeOutput([2],\"int32\");return e.typedArrayFromHeap(y).set(l),[f,h,y]}var b3={kernelName:ri,backendName:\"wasm\",kernelFunc:Mee};function Lee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=Nu(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var C3={kernelName:oi,backendName:\"wasm\",kernelFunc:Lee};var Bee=!0,I3=nt(Io,Bee);var w3;function Vee(r){w3=r.wasm.cwrap(jn,null,[\"number\",\"number\",\"number\",\"number\"])}function zee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims(\"sum\",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;w3(p,y,Ae[b.dtype],C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var S3={kernelName:jn,backendName:\"wasm\",setupFunc:Vee,kernelFunc:zee};var v3=Qe(xa);var k3=Qe(Qn);var T3;function Wee(r){T3=r.wasm.cwrap(wo,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Uee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,\"int32\"),m=e.dataIdMap.get(l.dataId).id;return _3(a,i,o.shape.length,Ae[o.dtype],n,s,c,m),[u,l]},E3={kernelName:Zn,backendName:\"wasm\",setupFunc:Gee,kernelFunc:Hee};var $3;function qee(r){$3=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Kee(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(x.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),w=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,A=a===\"nearest\"?1:2,D;switch(i){case\"constant\":D=1;break;case\"reflect\":D=2;break;case\"wrap\":D=3;break;case\"nearest\":D=4;break;default:D=1;break}return $3(_,R,s.shape[0]>1,c,d,h,f,m,l,y,n.shape.length-1,b,g.length-1,A,D,p,w),C}var R3={kernelName:Jn,backendName:\"wasm\",setupFunc:qee,kernelFunc:Kee};function jee(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let f=0;f({dataId:f,dtype:d,shape:p}))}var A3={kernelName:_s,backendName:\"wasm\",kernelFunc:jee};function Xee(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var F3={kernelName:Es,backendName:\"wasm\",kernelFunc:Xee};var Yee=[LD,BD,VD,WD,KD,XD,QD,JD,rP,nP,sP,aP,uP,pP,lP,fP,dP,hP,xP,bP,IP,SP,kP,TP,NP,_P,EP,$P,AP,FP,DP,OP,LP,VP,WP,GP,HP,qP,UD,jP,XP,YP,QP,ZP,JP,eO,tO,oO,nO,aO,uO,cO,lO,fO,dO,hO,xO,bO,IO,wO,vO,kO,TO,$g,_O,$O,AO,FO,DO,PO,OO,eP,LO,VO,WO,GO,HO,qO,jO,YO,ZO,JO,oP,t3,r3,n3,a3,u3,p3,c3,l3,m3,f3,h3,x3,y3,b3,C3,I3,S3,v3,k3,N3,E3,R3,HD,A3,F3];for(let r of Yee)ya(r);var Yw=P();Yw.registerFlag(\"WASM_HAS_SIMD_SUPPORT\",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(r){return!1}});Yw.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(Yw.get(\"IS_NODE\"))return!1;try{return 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(r){return!1}});var oS=rp(M3()),U3=rp(B3()),nS=rp(V3());var z3=oS.default||oS,Qee=nS.default||nS,Gl=class extends Jr{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(H3),rS=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new rn(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=x.now();return e(),{kernelMs:x.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=x.sizeFromShape(o),p=i*x.bytesPerElement(n),u=this.wasm._malloc(p);this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s===\"string\")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||x.sizeFromShape(a);let p=x.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return Jee(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o){let n;if(o==null)n=this.write(null,e,t);else{let s=this.dataIdNextNumber++;n={id:s},this.dataIdMap.set(n,{id:s,memoryOffset:o,shape:e,dtype:t,refCount:1});let a=x.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,o)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=x.sizeFromShape(e);switch(t){case\"float32\":return new Float32Array(n,s,a);case\"int32\":return new Int32Array(n,s,a);case\"bool\":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function Zee(r){return(e,t)=>(x.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function W3(r,e,t){if(Pg!=null)return Pg;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),Wl!=null&&Wl[o]!=null?Wl[o]:t+o}async function G3(){let[r,e]=await Promise.all([P().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),P().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=U3.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?W3(r,e,zl!=null?zl:p):p+i},sS&&(n.instantiateWasm=Zee(W3(r,e,zl!=null?zl:\"\")));let s=!1;n.onAbort=()=>{if(s||Ul)return;Ul=!0,o({message:\"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers\"})};let a;e&&r&&Pg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+z3.toString()],{type:\"text/javascript\"}),a=z3(n)):a=Qee(n),a.then(i=>{s=!0,Ul=!1;let p=null;i.tfjs={init:i.cwrap(\"init\",null,[]),initWithThreadsCount:i.cwrap(\"init_with_threads_count\",null,[\"number\"]),getThreadsCount:i.cwrap(\"get_threads_count\",\"number\",[]),registerTensor:i.cwrap(\"register_tensor\",null,[\"number\",\"number\",\"number\"]),disposeData:i.cwrap(\"dispose_data\",p,[\"number\"]),dispose:i.cwrap(\"dispose\",p,[])},t({wasm:i})}).catch(o)})}function Jee(r,e){switch(e){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var ete=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Pg=null,zl=null,Wl={},Ul=!1,sS=!1;function tte(r,e=!1){if(sC(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),Ul)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");Pg=r,sS=e}function rte(r,e=!1){if(Ul)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`\");if(typeof r==\"string\")zl=r;else{Wl=r;let t=ete.filter(o=>Wl[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.join(\",\")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}sS=e}var H3=-1,rS=-1;function ote(r){H3=r}function nte(){if(rS===-1)throw new Error(\"WASM backend not initialized.\");return rS}var ste=\"4.0.0\";var ate=2;pi(\"wasm\",async()=>{let{wasm:r}=await G3();return new Gl(r)},ate);var Va=P();Va.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);Va.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);Va.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);Va.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!1);Va.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);Va.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);Va.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);Va.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);Va.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);var Og=class{constructor(e){e&&(this.vendor=e.vendor)}isIntel(){return this.vendor===\"intel\"}};var Mg=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,o=!1){let n=q3(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let a=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(a),a}this.numBytesAllocated+=e;let s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o});return this.usedBuffers.get(n).push(s),s}releaseBuffer(e,t,o){if(this.freeBuffers.size===0)return;let n=q3(t,o);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let s=this.usedBuffers.get(n),a=s.indexOf(e);if(a<0)throw new Error(\"Cannot release a buffer that was never provided by this buffer manager\");s.splice(a,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,o){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,o)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function q3(r,e){return`${r}_${e}`}var Lg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=j3(o),a=e*t*s,i=K3(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e,t,o,n,s){if(this.freeTextures.size===0)return;let a=K3(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=j3(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function K3(r,e,t,o){return`${r}_${e}_${t}_${o}`}function j3(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function X3(r,e){if(Math.max(...r)>3)throw new Error(\"Cannot symbolically compute strides for rank > 4 tensor.\");let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}var Z3=(r,e,t,o)=>{let n={dtype:o.dtype,shape:o.shape},s=ite(t,n,e),a=r.createShaderModule({code:s,label:e.constructor.name});return r.createComputePipeline({compute:{module:a,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})};function At(r){if(r<=1)return\"i32\";if(r===2)return\"vec2\";if(r===3)return\"vec3\";if(r===4)return\"vec4\";if(r===5)return\"vec5\";if(r===6)return\"vec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function Yo(r){if(r===0)return\"x\";if(r===1)return\"y\";if(r===2)return\"z\";if(r===3)return\"w\";if(r===4)return\"u\";if(r===5)return\"v\";throw Error(`Index ${r} is not yet supported`)}function ue(...r){let e;switch(r.length){case 0:e=`\n ${Ri()}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n main();\n }\n\n fn main()\n `;break;case 1:e=`\n ${Ri()}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n main(getGlobalIndex());\n }\n\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return e}function Ri(){return`\n @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ)\n`}function ite(r,e,t){let o=[];if(o.push(`\n const workGroupSizeX = ${t.workGroupSize[0]}u;\n const workGroupSizeY = ${t.workGroupSize[1]}u;\n const workGroupSizeZ = ${t.workGroupSize[2]}u;\n\n var localId: vec3;\n var globalId: vec3;\n var numWorkgroups: vec3;\n\n // Only used when the y/z dimension of workgroup size is 1.\n fn getGlobalIndex() -> i32 {\n ${eM(t)?\" return i32(globalId.x);\":` let localInvocationIndex = localId.z * workGroupSizeX * workGroupSizeY +\n localId.y * workGroupSizeX + localId.x;\n let workGroupID = (globalId - localId)/vec3(\n workGroupSizeX, workGroupSizeY, workGroupSizeZ);\n\n return i32((workGroupID.z * numWorkgroups.x * numWorkgroups.y +\n workGroupID.y * numWorkgroups.x + workGroupID.x) *\n (workGroupSizeX * workGroupSizeY * workGroupSizeZ) +\n localInvocationIndex);\n `}\n }\n `),t.isFromPixels)return o.push(`\n struct Uniform {\n size : i32,\n numChannels : i32,\n outShapeStrides : vec2,\n };\n\n @group(0) @binding(0) var result: array<${Tc(e.dtype,t.isVec4)}>;\n @group(0) @binding(2) var uniforms: Uniform;\n `),[Y3,o.join(`\n`),Q3(e.shape),t.getUserCode()].join(`\n`);let n=\"struct Uniforms { NAN : f32, \";t.variableNames.forEach((m,f)=>{let d=At(r[f].shape.length);n+=`${m.charAt(0).toLowerCase()+m.slice(1)}Shape : ${d}, `});let s=At(e.shape.length);n+=`outShape : ${s}, `;let a=e.shape.length-1,i=At(a);n+=`\n outShapeStrides: ${i}, `,t.size&&(n+=\"size : i32, \"),t.uniforms&&(n+=t.uniforms),n+=\"};\",n=dte(n),o.push(n),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Tc(e.dtype,t.isVec4)}>;\n `),t.variableNames.forEach((m,f)=>{o.push(`\n @group(0) @binding(${1+f}) var ${m}: array<${t.variableTypes?t.variableTypes[f]:Tc(r[f].dtype,t.isVec4)}>;\n `)}),n!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let p=lte(e.shape,t.dispatchLayout),u=[Y3,o.join(`\n`),Q3(e.shape),p,mte(e.shape.length)];t.atomic||u.push(fte(e.shape,e.dtype,t.isVec4));let c=r.map((m,f)=>cte(m,e.shape,t.variableTypes?t.variableTypes[f]===\"vec4\":t.isVec4,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);return u.push(c),u.push(t.getUserCode()),u.join(`\n`)}function J3(r,e,t,o){let n=r.shaderKey;if(r.isFromPixels)return n;let s=t.map(c=>c.dtype).concat(o.dtype),a=t.map(c=>I.getBroadcastDims(c.shape,o.shape)),i=t.map(c=>x.arraysEqual(c.shape,o.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=eM(r)?\"flatDispatch\":\"\";return n+=\"_\"+(r.workGroupSize?r.workGroupSize.join(\",\"):\"\")+e.map(c=>c.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,n}var Y3=`\n struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32};\n struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32};\n\n // Checks whether coordinates lie within the bounds of the shape.\n fn coordsInBounds2D(coord : vec2, shape : vec2) -> bool {\n return all(coord >= vec2(0)) && all(coord < shape);\n }\n fn coordsInBounds3D(coord : vec3, shape : vec3) -> bool {\n return all(coord >= vec3(0)) && all(coord < shape);\n }\n fn coordsInBounds4D(coord : vec4, shape : vec4) -> bool {\n return all(coord >= vec4(0)) && all(coord < shape);\n }\n\n fn getIndexFromCoords1D(coord : i32, shape : i32) -> i32 {\n return coord;\n }\n fn getIndexFromCoords2D(coords : vec2, shape : vec2) -> i32 {\n return dot(coords, vec2(shape.y, 1));\n }\n fn getIndexFromCoords3D(coords : vec3, shape : vec3) -> i32 {\n return dot(coords, vec3(shape.y * shape.z, shape.z, 1));\n }\n fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\n return dot(coords, vec4(\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\n }\n fn getIndexFromCoords5D(coords : vec5, shape : vec5) -> i32 {\n let shapeStrides: vec5 = vec5(shape.y * shape.z * shape.w * shape.u, shape.z * shape.w * shape.u, shape.w * shape.u, shape.u, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u;\n }\n fn getIndexFromCoords6D(coords : vec6, shape : vec6) -> i32 {\n let shapeStrides: vec6 = vec6(shape.y * shape.z * shape.w * shape.u * shape.v, shape.z * shape.w * shape.u * shape.v, shape.w * shape.u * shape.v, shape.u * shape.v, shape.v, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u + coords.v*shapeStrides.v;\n }\n\n fn idiv(a: i32, b: i32, sign: f32) -> i32 {\n var res: i32 = a / b;\n let modulo: i32 = a % b;\n if (sign < 0. && modulo != 0) {\n res = res - 1;\n }\n return res;\n }\n\n // NaN defination in IEEE 754-1985 is :\n // - sign = either 0 or 1.\n // - biased exponent = all 1 bits.\n // - fraction = anything except all 0 bits (since all 0 bits represents infinity).\n // https://en.wikipedia.org/wiki/IEEE_754-1985#Representation_of_non-numbers\n fn isnan(val: f32) -> bool {\n let floatToUint: u32 = bitcast(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n fn isnanVec4(val : vec4) -> vec4 {\n return vec4(isnan(val[0]), isnan(val[1]), isnan(val[2]), isnan(val[3]));\n }\n`;function Q3(r){let e=r.length;if(e<=1)return\"fn getCoordsFromIndex(index : i32) -> i32 { return index; }\";let t=x.computeStrides(r),o=At(e),n=[];for(let a=0;a vec2 {\n let d0 = index / uniforms.outShapeStrides; let d1 = index - d0 * uniforms.outShapeStrides;\n return vec2(d0, d1);\n }`;let s;return s=\"var index2 = index;\"+t.map((a,i)=>{let p=`let ${n[i]} = index2 / uniforms.outShapeStrides.${Yo(i)}`,u=i===t.length-1?`let ${n[i+1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}`:`index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}`;return`${p}; ${u};`}).join(\"\"),`\n fn getCoordsFromIndex(index : i32) -> ${o} {\n ${s}\n return ${o}(${n.join(\",\")});\n }\n `}function ute(r,e){let t=r.name,o=r.shape.length,n=At(o),s=\"get\"+t.charAt(0).toUpperCase()+t.slice(1),a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=a.map(c=>`${c} : i32`).join(\", \");if(o<1)return e?`\n fn ${s}() -> vec4 {\n return vec4(${t}[0]);\n }\n `:`\n fn ${s}() ->f32 {\n return f32(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),e?`\n fn ${s}(${i}) -> vec4 {\n return vec4(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p}) / 4]);\n }\n `:`\n fn ${s}(${i}) -> f32 {\n return f32(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})]);\n }\n `}function pte(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=e.length,u=At(p);if(x.arraysEqual(r.shape,e)&&o)return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n return vec4(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> vec4 {\n return vec4(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"} / 4]);\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32 {\n return f32(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> f32 {\n return f32(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}]);\n }\n `;let c=I.getBroadcastDims(r.shape,e),l=p-i,m=\"\";if(i===0)return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> vec4 {\n return get${s}();\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> f32{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${Yo(g+l)} = 0;`).join(`\n`);let f=\"\";if(p<2&&i>0)f=\"coords\";else if(p>1){let g=At(i),y=r.shape.map((b,C)=>`coords.${Yo(C+l)}`).join(\", \");f=`${g}(${y})`}else f=\"coords\";let d=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4];\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> vec4 {\n var coords = coordsIn;\n ${m}\n return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4];\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32 {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> f32 {\n var coords = coordsIn;\n ${m}\n return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]);\n }\n`}function cte(r,e,t,o){let n=ute(r,t);return r.shape.length<=e.length&&(n+=pte(r,e,t,o)),n}function lte(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return\"\";if(t.length===s)return`fn getOutputCoords() -> ${At(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[t,o,n];for(let m=0;m ${c} {\n ${i}\n`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(\",\")}); }`,l}function mte(r){let e=\"\";switch(r){case 0:case 1:e+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:e+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:e+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:e+=`\n fn getOutputIndexFromCoords(coords : vec4) -> i32 {\n return dot(coords, vec4(\n uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, uniforms.outShapeStrides.z, 1));\n }\n `;break;case 5:e+=`\n fn getOutputIndexFromCoords(coords : vec5) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u;\n }\n `;break;case 6:e+=`\n fn getOutputIndexFromCoords(coords : vec6) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u * uniforms.outShapeStrides.u +\n coords.v;\n }\n `;break;default:x.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function eM(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Tc(r,e){return r===\"float32\"?e?\"vec4\":\"f32\":r===\"int32\"||r===\"bool\"?e?\"vec4\":\"i32\":r}function fte(r,e,t){let o=r.length,n=Tc(e,t),s;if(t?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) {\n result[flatIndex] = ${n}(value);\n }\n fn setOutputAtIndexI32(flatIndex : i32, value : vec4) {\n result[flatIndex] = ${n}(value);\n }`:s=`fn setOutputAtIndex(flatIndex : i32, value : f32) {\n result[flatIndex] = ${n}(value);\n }\n fn setOutputAtIndexI32(flatIndex : i32, value : i32) {\n result[flatIndex] = ${n}(value);\n }`,o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=At(o);t?s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : vec4) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex / 4, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : vec4) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex / 4, value);\n }\n `:s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : f32) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : i32) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex, value);\n }\n `}return s}function dte(r){let e=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(e,o=>\"@align(16) \"+o);let t=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}var pS={};Be(pS,{ArrayBufferToTypedArray:()=>uS,GPUBytesPerElement:()=>iS,MatMulProgramType:()=>Qo,computeDispatch:()=>ae,computeWorkGroupInfoForMatMul:()=>aS,computeWorkGroupSizeForConv2d:()=>Hl,computeWorkPerThreadForConv2d:()=>ql,flatDispatchLayout:()=>fe,isWebGPUSupported:()=>Kl,tilesFitEvenlyIntoShape:()=>gte});var Wu=r=>{let e=1;for(let t=0;tt%r[o]===0)}function ae(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Wu(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Wu(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Wu(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function aS(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workGroupSize:n,elementsPerThread:s}}function Hl(r,e,t=!1){if(t)return[8,8,1];let o=Wu(r.x.map(s=>e[s])),n=Wu(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function ql(r,e,t=!1){if(t)return[4,4,1];let o=Wu(r.x.map(s=>e[s])),n=Wu(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function fe(r){return{x:r.map((e,t)=>t)}}function iS(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function uS(r,e){if(e===\"float32\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function Kl(){return(typeof window!=\"undefined\"||typeof WorkerGlobalScope!=\"undefined\")&&!!navigator.gpu}var Qo;(function(r){r[r.MatMulReduceProgram=0]=\"MatMulReduceProgram\",r[r.MatMulSplitKProgram=1]=\"MatMulSplitKProgram\",r[r.MatMulSmallOutputSizeProgram=2]=\"MatMulSmallOutputSizeProgram\",r[r.MatMulPackedProgram=3]=\"MatMulPackedProgram\",r[r.MatMulMax=4]=\"MatMulMax\"})(Qo||(Qo={}));var xte=P().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),yte=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;x.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>\"Dispatch size exceeds WebGPU limits in Y or Z dimension.\");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),x.assert(s<=t,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},Ai=class extends Jr{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!Kl())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has(\"timestamp-query\"),this.adapterInfo=new Og(t),this.bufferManager=new Mg(this.device),this.textureManager=new Lg(this.device),this.tensorMap=new rn(this,cr()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:2})),P().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(this.dummyCanvas=document.createElement(\"canvas\"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext(\"webgpu\"),this.dummyContext.configure({device:e,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Ai.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);if(this.decRef(e),!t&&o.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if(\"texture\"in t.resourceInfo){let o=t.resourceInfo;o.texture instanceof GPUTexture&&this.textureManager.releaseTexture(o.texture,o.width,o.height,o.format,o.usage),o.texture=null}else{let o=t.resourceInfo;this.bufferManager.releaseBuffer(o.buffer,o.size,o.usage),o.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),P().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(x.assert(this.dummyContext!==void 0,()=>\"Fail to get context for profiling tool\"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return this.releaseResource(e),o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o}=t;if(o==null)throw new Error(\"WebGPU readSync is only available for CPU-resident tensors.\");return o}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return this.convertAndCacheOnCPU(e,o);let n;if(t.dtype===\"complex64\"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=I.mergeRealAndImagArrays(a,i)}else{let s=t.resourceInfo,a=await this.getBufferData(s.buffer,s.size);n=uS(a,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:o,dtype:n,shape:s,resourceInfo:a}=t;if(n===\"complex64\")throw new Error(\"Does not support reading buffer for complex64 dtype.\");if(a==null)throw o!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let i=a.size,p=this.bufferManager.acquireBuffer(i,a.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(a.buffer,0,p,0,i),this.submitQueue();let u=this.makeTensorInfo(s,n),c=cr().makeTensorFromTensorInfo(u),l=this.tensorMap.get(u.dataId);return l.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:p},{tensorRef:c,buffer:p,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ne(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.\");let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=x.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=x.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=x.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \"),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t===\"string\"&&o!=null&&o.length>0&&x.isString(o[0])&&(o=o.map(s=>x.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if(\"texture\"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let o=t.resourceInfo;return{offset:0,size:o.size,buffer:o.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let o=iS(t.dtype)*x.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(o,this.defaultGpuBufferUsage());if(t.resourceInfo={size:o,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let s=this.bufferManager.acquireUploadBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),a=s.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),s.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s,0,n,0,o);let i={size:o,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:s};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,o=0,n=[];e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:x.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4});let s=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type===\"int32\"?new Int32Array(s,c,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(s,c,p.data.length).set(p.data):new Float32Array(s,c,p.data.length).set(p.data)});let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(a,0,s,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:a};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:a}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),x.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=x.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=yte(this.device,e);let a=[],i=[];if(!e.isFromPixels){a.push({type:\"float32\",data:[NaN]}),i=t.concat(s).map(y=>y.shape);let h=\"int32\";i.map(y=>{a.push({type:h,data:y})});let g=x.computeStrides(s.shape);if(a.push({type:h,data:g}),e.size){let y=x.sizeFromShape(e.outputShape);a.push({type:h,data:[e.isVec4?y/4:y]})}}let p=t.map((h,g)=>{if(h.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");return this.uploadToGPU(h.dataId),{dtype:this.tensorMap.get(h.dataId).dtype,shape:h.shape,name:e.variableNames[g]}}),u=J3(e,i,p,s),c;u in this.pipelineCache?c=this.pipelineCache[u]:(c=Z3(this.device,e,p,s),this.pipelineCache[u]=c),n&&(a=[...a,...n]);let l=[this.tensorToBinding(s),...t.map(h=>this.tensorToBinding(h)),this.makeUniforms(a)],m=this.device.createBindGroup({layout:c.getBindGroupLayout(0),entries:l.map((h,g)=>({binding:g,resource:h}))});this.ensureCommandEncoderReady();let f=this.getComputePass(),d=this.activeTimers!=null;return d&&this.supportTimeQuery&&f.writeTimestamp(this.querySet,0),f.setPipeline(c),f.setBindGroup(0,m),f.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),d&&this.supportTimeQuery&&f.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(h=>{this.commandQueueOwnedIds.add(h.dataId)}),this.commandQueueOwnedIds.add(s.dataId),P().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchNumberInEncoder&&this.submitQueue(),d&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),s}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),o=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,o,0,16),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(o.getMappedRange()),s=Number(n[1]-n[0]);return o.unmap(),this.bufferManager.releaseBuffer(o,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),s/1e6}shouldExecuteOnCPU(e,t=xte){return P().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resourceInfo==null&&x.sizeFromShape(o.shape){P().set(\"CHECK_COMPUTATION_FOR_ERRORS\",!1);let r={powerPreference:P().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t=e.limits,o={},n=e.features.has(\"timestamp-query\");o.requiredLimits={maxComputeWorkgroupStorageSize:t.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:t.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:t.maxStorageBufferBindingSize},n&&(o.requiredFeatures=[\"timestamp-query\"]);let s=await e.requestDevice(o),a=await e.requestAdapterInfo();return new Ai(s,a)},3);var ye;(function(r){r[r.MUL=0]=\"MUL\",r[r.ADD=1]=\"ADD\",r[r.ATAN2=2]=\"ATAN2\",r[r.SUB=3]=\"SUB\",r[r.DIV=4]=\"DIV\",r[r.EQUAL=5]=\"EQUAL\",r[r.GREATER=6]=\"GREATER\",r[r.GREATER_EQUAL=7]=\"GREATER_EQUAL\",r[r.LESS=8]=\"LESS\",r[r.LESS_EQUAL=9]=\"LESS_EQUAL\",r[r.LOGICAL_AND=10]=\"LOGICAL_AND\",r[r.NOT_EQUAL=11]=\"NOT_EQUAL\",r[r.SQUARED_DIFFERENCE=12]=\"SQUARED_DIFFERENCE\",r[r.INT_DIV=13]=\"INT_DIV\",r[r.POW=14]=\"POW\",r[r.PRELU=15]=\"PRELU\",r[r.MAX=16]=\"MAX\",r[r.MIN=17]=\"MIN\",r[r.COMPLEX_MULTIPLY_REAL=18]=\"COMPLEX_MULTIPLY_REAL\",r[r.COMPLEX_MULTIPLY_IMAG=19]=\"COMPLEX_MULTIPLY_IMAG\"})(ye||(ye={}));var bte=`\n if (isnan(a)) { return a; }\n if (isnan(b)) { return b; }\n `,tM=`\n if (isNaN.r) {\n resultTemp.r = valueForNaN;\n }\n if (isNaN.g) {\n resultTemp.g = valueForNaN;\n }\n if (isNaN.b) {\n resultTemp.b = valueForNaN;\n }\n if (isNaN.a) {\n resultTemp.a = valueForNaN;\n }\n `,rM=`\n let isNaN = isnanVec4(a) | isnanVec4(b);\n ${tM}\n `,Cte=\"return a + b;\",Ite=\"return areal * breal - aimag * bimag;\",wte=\"return areal * bimag + aimag * breal;\",Ste=\"return a / b;\",vte=\"return a * b;\",kte=\"return (a - b) * (a - b);\",Tte=\"return a - b;\",Nte=\"return f32(a == b);\",_te=\"return vec4(a == b);\",Ete=\"return f32(a > b);\",$te=\"return vec4(a > b);\",Rte=\"return f32(a >= b);\",Ate=\"return vec4(a >= b);\",Fte=\"return f32(a < b);\",Dte=\"return vec4(a < b);\",Pte=\"return f32(a <= b);\",Ote=\"return vec4(a <= b);\",Mte=\"return f32(f32(a) >= 1.0 && f32(b) >= 1.0);\",Lte=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,Bte=`\n let s = sign(a) * sign(b);\n let ia = i32(round(a));\n let ib = i32(round(b));\n return f32(idiv(ia, ib, s));\n `,Vte=`\n let ia = vec4(round(a));\n let ib = vec4(round(b));\n let cond = ib != vec4(0);\n var resultTemp = vec4(0);\n let s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n resultTemp[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n resultTemp[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n resultTemp[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n resultTemp[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(resultTemp);\n `,zte=`\n if (isnan(a) || isnan(b)) {\n return 1.0;\n }\n return f32(a != b);\n`,Wte=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n ${rM}\n\n return resultTemp;\n`,Ute=`\n if(a < 0.0 && floor(b) < b) {\n return uniforms.NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n if (round(abs(b) % 2.0) != 1.0) {\n return pow(abs(a), b);\n }\n return sign(a) * pow(abs(a), b);\n `,Gte=`\n let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1);\n let isModRound1 = vec4(isModRound1Bool);\n let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n var resultTemp = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n let isExpZero = b == vec4(0.0);\n if (isExpZero.r) {\n resultTemp.r = 1.0;\n }\n if (isExpZero.g) {\n resultTemp.g = 1.0;\n }\n if (isExpZero.b) {\n resultTemp.b = 1.0;\n }\n if (isExpZero.a) {\n resultTemp.a = 1.0;\n }\n let isNaN = (a < vec4(0.0)) & (floor(b) < b);\n let valueForNaN = uniforms.NAN;\n ${tM}\n return resultTemp;\n `,Hte=\"if (a < 0.0) { return b * a; } return a;\",qte=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n `;function cS(r,e,t=\"uniforms.NAN\"){let o=e?rM:bte;return e?`\n let valueForNaN = ${t};\n var resultTemp = vec4(${r}(a, b));\n `+o+`\n return resultTemp;\n `:o+`\n return ${r}(a, b);\n `}function Nc(r,e){switch(r){case ye.MUL:return vte;case ye.ADD:return Cte;case ye.ATAN2:return cS(\"atan2\",e);case ye.SUB:return Tte;case ye.DIV:return Ste;case ye.EQUAL:return e?_te:Nte;case ye.GREATER:return e?$te:Ete;case ye.GREATER_EQUAL:return e?Ate:Rte;case ye.LESS:return e?Dte:Fte;case ye.LESS_EQUAL:return e?Ote:Pte;case ye.LOGICAL_AND:return e?Lte:Mte;case ye.NOT_EQUAL:return e?Wte:zte;case ye.SQUARED_DIFFERENCE:return kte;case ye.INT_DIV:return e?Vte:Bte;case ye.PRELU:return e?qte:Hte;case ye.MAX:return cS(\"max\",e);case ye.MIN:return cS(\"min\",e);case ye.POW:return e?Gte:Ute;case ye.COMPLEX_MULTIPLY_REAL:return Ite;case ye.COMPLEX_MULTIPLY_IMAG:return wte;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var pe;(function(r){r[r.ABS=0]=\"ABS\",r[r.CEIL=1]=\"CEIL\",r[r.COS=2]=\"COS\",r[r.COSH=3]=\"COSH\",r[r.ELU=4]=\"ELU\",r[r.EXP=5]=\"EXP\",r[r.EXPM1=6]=\"EXPM1\",r[r.FLOOR=7]=\"FLOOR\",r[r.IS_NAN=8]=\"IS_NAN\",r[r.LINEAR=9]=\"LINEAR\",r[r.LOG=10]=\"LOG\",r[r.LOGICAL_NOT=11]=\"LOGICAL_NOT\",r[r.NEG=12]=\"NEG\",r[r.RELU=13]=\"RELU\",r[r.RELU6=14]=\"RELU6\",r[r.LEAKYRELU=15]=\"LEAKYRELU\",r[r.RECIPROCAL=16]=\"RECIPROCAL\",r[r.RSQRT=17]=\"RSQRT\",r[r.SIN=18]=\"SIN\",r[r.SINH=19]=\"SINH\",r[r.SIGMOID=20]=\"SIGMOID\",r[r.SQRT=21]=\"SQRT\",r[r.SQUARE=22]=\"SQUARE\",r[r.TANH=23]=\"TANH\",r[r.TO_INT=24]=\"TO_INT\"})(pe||(pe={}));var Kte=\"return abs(a);\",jte=\"return ceil(a);\",Xte=\"return cos(a);\",Yte=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,Qte=\"return exp(a) - 1.0;\",Zte=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",Jte=`\n var resFloat = exp(a) - vec4(1.0);\n if (a.r >= 0.0) {\n resFloat.r = a.r;\n }\n if (a.g >= 0.0) {\n resFloat.g = a.g;\n }\n if (a.b >= 0.0) {\n resFloat.b = a.b;\n }\n if (a.a >= 0.0) {\n resFloat.a = a.a;\n }\n return resFloat;\n`,ere=\"return exp(a);\",tre=\"return floor(a);\",rre=\"return f32(isnan(a));\",ore=\"return a;\",nre=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,sre=\"return f32(!(a >= 1.0));\",are=\"return -a;\",ire=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",ure=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,pre=\"return 1.0 / a;\",cre=\"return select(a, 0.0, a < 0.0);\",lre=\"return clamp(a, 0.0, 6.0);\",mre=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",fre=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,dre=\"return 1.0/sqrt(a);\",hre=\"return 1.0 / (1.0 + exp(-1.0 * a));\",gre=\"return sin(a);\",xre=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,yre=\"return sqrt(a);\",bre=\"return a * a;\",Cre=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Ire=\"return f32(i32((a)));\";function za(r,e){switch(r){case pe.ABS:return Kte;case pe.COS:return Xte;case pe.COSH:return Yte;case pe.CEIL:return jte;case pe.ELU:return e?Jte:Zte;case pe.EXP:return ere;case pe.EXPM1:return Qte;case pe.FLOOR:return tre;case pe.IS_NAN:return rre;case pe.LINEAR:return ore;case pe.LOG:return nre;case pe.LOGICAL_NOT:return sre;case pe.NEG:return are;case pe.LEAKYRELU:return e?ure:ire;case pe.RECIPROCAL:return pre;case pe.RELU:return e?fre:cre;case pe.RELU6:return e?mre:lre;case pe.RSQRT:return dre;case pe.SIGMOID:return hre;case pe.SIN:return gre;case pe.SINH:return xre;case pe.SQRT:return yre;case pe.SQUARE:return bre;case pe.TANH:return Cre;case pe.TO_INT:return Ire;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var vt=r=>{switch(r){case 1:return\"f32\";case 2:return\"vec2\";case 3:return\"vec3\";case 4:return\"vec4\";default:throw new Error(`${r}-component is not supported.`)}};function ur(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=za(pe.LINEAR);else if(r===\"relu\")n=za(pe.RELU,t);else if(r===\"elu\")n=za(pe.ELU,t);else if(r===\"relu6\")n=za(pe.RELU6,t);else if(r===\"prelu\")n=Nc(ye.PRELU,t);else if(r===\"sigmoid\")n=za(pe.SIGMOID,t);else if(r===\"leakyrelu\")n=za(pe.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=vt(t?4:1),i=\"\";return e?i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n let b = getPreluActivationWeightsByOutputCoords(coords);\n ${n}\n }`:i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n ${n}\n }`,i}function Kr(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function lS(r,e,t,o,n=!1,s=!1,a=!1,i=1){x.assert(t&&i===1||!t,()=>`transposeA ${t} is not compatible with component size ${i}`);let p=`\n let batch = ${r?\"0\":\"batchIn\"};\n ${t?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,u=o?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} {\n var value = ${vt(i)}(0.0);\n let col = colIn * ${i};\n ${n&&a?p:`\n ${t?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${p}\n }\n `}\n return value;\n }\n\n fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} {\n let col = colIn * ${i};\n let batch = ${e?\"0\":\"batchIn\"};\n var value = ${vt(i)}(0.0);\n ${u}\n return value;\n }\n `}function jl(r,e,t,o,n,s,a=!1,i=!1,p=!1,u=1){return`\n ${lS(t,o,n,s,a,i,p,u)}\n fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${vt(u)}) {\n let col = colIn * ${u};\n ${a&&i?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${Kr(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var wre=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart / InnerElementSize + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRow + innerRow,\n kStart / InnerElementSize + inputCol);\n `,Sre=(r,e)=>r?`\n let ACached0 = mm_Asub[k * InnerElementSize][localRow];\n let ACached1 = mm_Asub[k * InnerElementSize + 1][localRow];\n let ACached2 = mm_Asub[k * InnerElementSize + 2][localRow];\n ${e===3?\"\":\"let ACached3 = mm_Asub[k * InnerElementSize + 3][localRow];\"}\n for (var i = 0; i < RowPerThread; i = i + 1) {\n acc[i] = BCached0 * ACached0[i] + acc[i];\n acc[i] = BCached1 * ACached1[i] + acc[i];\n acc[i] = BCached2 * ACached2[i] + acc[i];\n ${e===3?\"\":\"acc[i] = BCached3 * ACached3[i] + acc[i];\"}\n }`:`\n for (var i = 0; i < RowPerThread; i = i + 1) {\n let ACached = mm_Asub[tileRow + i][k];\n acc[i] = BCached0 * ACached.x + acc[i];\n acc[i] = BCached1 * ACached.y + acc[i];\n acc[i] = BCached2 * ACached.z + acc[i];\n ${e===3?\"\":\"acc[i] = BCached3 * ACached.w + acc[i];\"}\n }`;function Uu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1];return x.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4.\n Otherwise, innerElementSize ${l} must be 3 or 4.\n tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}. tileInner ${o} must be divisible by workGroupSize[1] ${e[1]}. ColPerThread ${r[0]} must be 4.`),`\n var mm_Asub : array, ${u/l}>, ${c}>;\n var mm_Bsub : array, ${p/r[0]}>, ${o}>;\n\n const RowPerThread = ${r[1]};\n const ColPerThread = ${r[0]};\n const InnerElementSize = ${l};\n const TileInner = ${o};\n\n @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ)\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(num_workgroups) NumWorkgroups: vec3,\n @builtin(workgroup_id) workgroupId: vec3) {\n localId = LocalId;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n\n let localRow = i32(localId.y);\n let tileRow = ${a?\"0\":\"localRow * RowPerThread\"};\n let tileCol = i32(localId.x);\n\n let globalRow = ${a?\"0\":\"i32(globalId.y) * RowPerThread\"};\n let globalCol = i32(globalId.x);\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:\"(uniforms.dimInner - 1) / TileInner + 1\"};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, RowPerThread>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${wre(t)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow = innerRow + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol);\n }\n kStart = kStart + TileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < TileInner / InnerElementSize; k = k + 1) {\n let BCached0 = mm_Bsub[k * InnerElementSize][tileCol];\n let BCached1 = mm_Bsub[k * InnerElementSize + 1][tileCol];\n let BCached2 = mm_Bsub[k * InnerElementSize + 2][tileCol];\n ${l===3?\"\":\"let BCached3 = mm_Bsub[k * InnerElementSize + 3][tileCol];\"}\n\n ${Sre(t,l)}\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var oM=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,vre=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Gu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=r[1]*e[1],p=r[0]*e[0],u=t?i:o,c=t?o:i;x.assert(c%e[1]===0&&u%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workGroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}, tileInner ${o} must be divisible by workGroupSize[1]${e[1]}`);let l=c/e[1],m=u/e[0],f=o/e[1],d=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${i};\n let globalColStart = i32(workgroupId.x) * ${p};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) {\n ${oM(t)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${p}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + TileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < TileInner; k = k + 1) {\n for (var inner = 0; inner < ColPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] +\n ACached * BCached[innerCol];\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n let gCol = globalColStart + localCol + innerCol * ${e[0]};\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\n }\n }\n `:`\n let tileRow = i32(localId.y) * RowPerThread;\n let tileCol = i32(localId.x) * ColPerThread;\n\n let globalRow = i32(globalId.y) * RowPerThread;\n let globalCol = i32(globalId.x) * ColPerThread;\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let tileRowA = i32(localId.y) * ${l};\n let tileColA = i32(localId.x) * ${m};\n let tileRowB = i32(localId.y) * ${f};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${l}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ${m}; innerCol = innerCol + 1) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${oM(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${f}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + TileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < TileInner; k = k + 1) {\n for (var inner = 0; inner < ColPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n ${vre(t)}\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${c}>;\n var mm_Bsub : array, ${o}>;\n const RowPerThread = ${r[1]};\n const ColPerThread = ${r[0]};\n const TileInner = ${o};\n\n @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ)\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(num_workgroups) NumWorkgroups: vec3,\n @builtin(workgroup_id) workgroupId: vec3) {\n localId = LocalId;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:\"(uniforms.dimInner - 1) / TileInner + 1\"};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, RowPerThread>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${d}\n }\n `}var kre=r=>r?`\n mm_readA(batch, colA, globalRow),\n mm_readA(batch, colA + 1, globalRow),\n mm_readA(batch, colA + 2, globalRow),\n mm_readA(batch, colA + 3, globalRow)\n `:`\n mm_readA(batch, globalRow, colA),\n mm_readA(batch, globalRow, colA + 1),\n mm_readA(batch, globalRow, colA + 2),\n mm_readA(batch, globalRow, colA + 3)\n `;function Tre(r,e=!1){return x.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`),`\n const TileSize = ${r[0]*4};\n var mm_Asub : array, ${r[0]}>;\n\n ${ue()} {\n let tileCol = i32(localId.x);\n let globalCol = i32(globalId.x);\n let globalRow = i32(globalId.y);\n\n let numTiles = (uniforms.dimInner - 1) / TileSize + 1;\n let batch = i32(globalId.z);\n // Without this initialization strange values show up in acc.\n var acc = 0.0;\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n let colA = t * TileSize + tileCol * 4;\n mm_Asub[tileCol] = vec4(${kre(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < TileSize / 4; k = k + 1) {\n let rowB = t * TileSize + k * 4;\n let BCached = vec4(mm_readB(batch, rowB, globalCol),\n mm_readB(batch, rowB + 1, globalCol),\n mm_readB(batch, rowB + 2, globalCol),\n mm_readB(batch, rowB + 3, globalCol));\n\n let ACached = mm_Asub[k];\n acc = acc + dot(ACached, BCached);\n }\n\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var Bg=class{constructor(e,t,o,n,s=!1,a=!1,i=null,p=null,u=null,c=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=s?e[1]:e[2];if(this.isVec4=(l%4===0&&!s||t[1]%4===0&&s)&&t[2]%4===0&&!a,this.isVectorA=t[1]===1&&!s,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workGroupSize=[32,1,1];else{let d=aS(t[1],l,t[2],s);this.workGroupSize=d.workGroupSize,this.elementsPerThread=d.elementsPerThread}this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread);let m=i!=null,f=u!=null;m&&this.variableNames.push(\"bias\"),f&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=c,this.transposeA=s,this.transposeB=a,this.addBias=m,this.activation=p,this.hasPreluActivationWeights=f,this.batchAEqualOne=o,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workGroupSize[1]*this.elementsPerThread[1],s=this.workGroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workGroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?Tre(this.workGroupSize,this.transposeA):Gu(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)}\n `}};function Nre(){return`\n var sumValues : array;\n ${ue()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let row = coords[1];\n let col = coords[2];\n var sum = 0.0;\n let Length = uniforms.dimInner;\n for (var k = i32(localId.x); k < Length; k = k + i32(workGroupSizeX)) {\n let dataA = mm_readA(batch, row, k);\n let dataB = mm_readB(batch, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = workGroupSizeX / 2u; currentSize > 1u;\n currentSize = currentSize / 2u) {\n if (localId.x < currentSize)\n {\n sumValues[localId.x] = sumValues[localId.x] + sumValues[localId.x + currentSize];\n }\n workgroupBarrier();\n }\n\n if (localId.x == 0u) {\n sum = sumValues[0] + sumValues[1];\n mm_write(batch, row, col, sum);\n }\n }\n `}var Vg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize);let u=a!=null,c=p!=null;u&&this.variableNames.push(\"bias\"),c&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=t,this.batchBEqualOne=o,this.shaderKey=`matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)}\n ${Nre()}\n `}};function _re(r){let e=r[1],t=r[0],o=e>t?e:t;return`\n var mm_Asub : array, ${e}>;\n var mm_Bsub : array, ${o}>;\n\n // If the output size is small for matrix multiplication, avoid to use vec4\n // and handle some elements per thread to optimally utilize the ALU.\n // Read data from global memory to registers firstly, then store them into\n // shared memory, so it is instruction-Level parallelism for arithmetic\n // operations and others handle IO operations between barrier api, makes ALU\n // and load/store units work simultaneously, could improves the performance.\n ${ue()} {\n let tileRow = i32(localId.y);\n let tileCol = i32(localId.x);\n let globalRow = i32(globalId.y);\n let globalCol = i32(globalId.x);\n let batch = i32(globalId.z);\n\n // uniforms.dimInner should be greater than 0.\n let numTiles = (uniforms.dimInner - 1) / ${o} + 1;\n var acc = 0.0;\n\n var globalColA = tileCol;\n var globalRowB = 0;\n var regA = mm_readA(batch, globalRow, globalColA);\n var regB0 = mm_readB(batch, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batch, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var t = 0; t < numTiles; t = t + 1) {\n mm_Asub[tileRow][tileCol] = regA;\n mm_Bsub[2 * tileRow][tileCol] = regB0;\n mm_Bsub[2 * tileRow + 1][tileCol] = regB1;\n\n workgroupBarrier();\n\n regA = mm_readA(batch, globalRow, globalColA);\n regB0 = mm_readB(batch, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batch, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var k = 0; k < ${o}; k = k + 1) {\n acc = acc + mm_Asub[tileRow][k] * mm_Bsub[k][tileCol];\n }\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var zg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workGroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workGroupSize[0]),Math.ceil(o[1]/this.workGroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push(\"bias\");let c=p!=null;c&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)}\n ${_re(this.workGroupSize)}\n `}};var Wg=class{constructor(e,t,o,n,s=!1,a=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workGroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,x.assert(e[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(s&&this.outputShape[1]%4===0||!s&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=ae(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workGroupSize,this.elementsPerThread),this.transposeA=s,this.transposeB=a,this.batchAEqualOne=o,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=n=>`\n for (var i = 0; i < ${n}; i = i + 1)\n {\n var oldValue = atomicLoad(&(result[flatIndex + i]));\n var exchanged = false;\n for (; !exchanged;) {\n let newValueF32 = bitcast(oldValue) + ${n>1?\"value[i]\":\"value\"};\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(&(result[flatIndex + i]), oldValue, newValue);\n oldValue = res.old_value;\n exchanged = res.exchanged;\n }\n }\n `,t=this.isVec4?4:1;return`\n ${lS(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)}\n fn mm_write(batch: i32, row : i32, colIn : i32, value : ${vt(t)}) {\n let col = colIn * ${t};\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n ${e(t)}\n }\n }\n ${this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner):Gu(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Ug=class{constructor(e,t=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push(\"bias\"),this.hasPreluActivationWeights&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${Kr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var Gg=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function $o(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||x.inferDtype(n),s===\"string\"){let a=x.getArrayFromDType(s,x.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Gg(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var nM={kernelName:ys,backendName:\"webgpu\",kernelFunc:$o};function xe(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=x.sizeFromShape(o.shape),a=x.inferFromImplicitShape(n,s),i=x.sizeFromShape(a);return x.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var sM={kernelName:Ss,backendName:\"webgpu\",kernelFunc:xe};function _c({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],f=t?r.shape[u-1]:r.shape[u-2],d=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),y=x.sizeFromShape(h),b=x.sizeFromShape(g),w=br.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([f,d]);x.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[y,l,f]:[y,f,l],_=o?[b,d,m]:[b,m,d],E=xe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=xe({inputs:{x:e},backend:n,attrs:{shape:_}}),A=[E,R],D=Math.max(y,b),O=y===1,M=b===1,L=[E,R],W=[{type:\"int32\",data:[f]},{type:\"int32\",data:[d]},{type:\"int32\",data:[l]}],V,G,q=[D,f,d],H=P().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");switch(H<0&&(f*d<=128?H=Qo.MatMulReduceProgram:D===1&&f<=128&&d<=48&&m>=2e3?H=Qo.MatMulSplitKProgram:f<=16&&(d<=512||m>=2*d)||d<=16&&(f<=512||l>=2*f)?H=Qo.MatMulSmallOutputSizeProgram:H=Qo.MatMulPackedProgram),H){case Qo.MatMulReduceProgram:V=new Vg(q,O,M,t,o,s,p,a);break;case Qo.MatMulSplitKProgram:{if(G=$o({backend:n,attrs:{shape:q,value:0,dtype:r.dtype}}),V=new Wg(q,m,O,M,t,o),s||p){G=n.runWebGPUProgram(V,L,r.dtype,W,G);let Z=new Ug(G.shape,s,p,a),ee=null,X=[G];s&&X.push(s),a&&X.push(a),p===\"leakyrelu\"&&(ee=[{type:\"float32\",data:[i]}],Z.uniforms+=\" alpha : f32,\");let Q=n.runWebGPUProgram(Z,X,G.dtype,ee);A.push(G);let se=xe({inputs:{x:Q},backend:n,attrs:{shape:w}});A.push(Q);for(let ie of A)n.disposeData(ie.dataId);return se}break}case Qo.MatMulSmallOutputSizeProgram:V=new zg(k,_,q,t,o,s,p,a);break;case Qo.MatMulPackedProgram:let Y=n.adapterInfo.isIntel();V=new Bg(k,q,O,M,t,o,s,p,a,Y);break;default:throw new Error(`Unsupported MatMulProgramType ${H}.`)}s&&L.push(s),a&&L.push(a),p===\"leakyrelu\"&&(W.push({type:\"float32\",data:[i]}),V.uniforms+=\" alpha : f32,\"),G=n.runWebGPUProgram(V,L,r.dtype,W,G);let j=xe({inputs:{x:G},backend:n,attrs:{shape:w}});A.push(G);for(let Y of A)n.disposeData(Y.dataId);return j}function Ere(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _c({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var aM={kernelName:Fo,backendName:\"webgpu\",kernelFunc:Ere};var Xl=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=I.assertAndGetBroadcastShape(t,o),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${Nc(this.op,!1)}\n }\n\n ${ue(\"index\")} {\n if(index < uniforms.size) {\n let areal = getARealByOutputIndex(index);\n let aimag = getAImagByOutputIndex(index);\n let breal = getBRealByOutputIndex(index);\n let bimag = getBImagByOutputIndex(index);\n setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag));\n }\n }\n `}};var Hu=class{constructor(e,t,o){this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=I.assertAndGetBroadcastShape(t,o),this.dispatchLayout=fe(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type=\"shared\",this.workGroupSize=[256,1,1],this.workPerThread=1):(x.arraysEqual(t,o)&&x.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type=\"vec4\",this.workPerThread=4):(this.isVec4=!1,this.type=\"plain\",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workGroupSize=[128,1,1]),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${Nc(this.op,this.isVec4)}\n };\n `;if(this.type===\"shared\"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:\"0\",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index);\n let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}];\n let b = getBByOutputIndex(index);`;e=`\n ${o}\n var sharedBuf : array;\n ${ue(\"index\")} {\n // Fill in the shared memory buffer.\n let localIndex = i32(localId.x);\n if(localIndex < ${this.lastDimensionSize}) {\n sharedBuf[localIndex] = f32(${this.useSharedMemoryWithB?\"B\":\"A\"}[localIndex]);\n }\n workgroupBarrier();\n\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n ${s}\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `}else e=`\n ${o}\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n let b = getBByOutputIndex(index);\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function Lt(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var iM={kernelName:uo,backendName:\"webgpu\",kernelFunc:Lt};function ls(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.tensorMap.get(s.dataId),i=Lt({inputs:{x:o},backend:t}),p=Lt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var uM={kernelName:aa,backendName:\"webgpu\",kernelFunc:ls};var Zo=class{constructor(e,t){this.variableNames=[\"A\"],this.size=!0;let o=128;this.workGroupSize=[o,1,1],this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${za(this.op,!1)}\n }\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function Ge({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Zo(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function it({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype===\"complex64\"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),f,d;if(r!==ye.MUL)[f,d]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[y,b]=g,C={dataId:y.dataId,dtype:y.dtype,shape:a.shape},w={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,w],ct(y.dtype,b.dtype))});else{let g=new Xl(ye.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),y=new Xl(ye.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];f=p.runWebGPUProgram(g,b,\"float32\"),d=p.runWebGPUProgram(y,b,\"float32\")}let h=ls({inputs:{real:f,imag:d},backend:p});return p.disposeData(f.dataId),p.disposeData(d.dataId),h}let u=o||ct(a.dtype,i.dtype);if((a.dtype===\"string\"||i.dtype===\"string\"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,f=a.dtype===\"string\"?I.fromUint8ToStringArray(l):l,d=a.dtype===\"string\"?I.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,f,d,u);return p.makeTensorInfo(g,u,h)}let c=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var FS={};Be(FS,{addImpl:()=>dS,bincountImpl:()=>lM,bincountReduceImpl:()=>mM,castImpl:()=>fS,ceilImpl:()=>hS,concatImpl:()=>fM,equalImpl:()=>gS,expImpl:()=>xS,expm1Impl:()=>yS,floorImpl:()=>bS,gatherNdImpl:()=>dM,gatherV2Impl:()=>hM,greaterEqualImpl:()=>IS,greaterImpl:()=>CS,lessEqualImpl:()=>SS,lessImpl:()=>wS,linSpaceImpl:()=>gM,logImpl:()=>vS,maxImpl:()=>xM,maximumImpl:()=>kS,minimumImpl:()=>TS,multiplyImpl:()=>Ql,negImpl:()=>yM,notEqualImpl:()=>NS,prodImpl:()=>bM,raggedGatherImpl:()=>IM,raggedTensorToTensorImpl:()=>vM,rangeImpl:()=>kM,rsqrtImpl:()=>ES,scatterImpl:()=>TM,sigmoidImpl:()=>NM,simpleAbsImpl:()=>pM,sliceImpl:()=>_M,sparseFillEmptyRowsImpl:()=>EM,sparseReshapeImpl:()=>$M,sparseSegmentReductionImpl:()=>RM,sqrtImpl:()=>AM,squaredDifferenceImpl:()=>$S,stridedSliceImpl:()=>FM,stringNGramsImpl:()=>DM,stringSplitImpl:()=>PM,stringToHashBucketFastImpl:()=>OM,subImpl:()=>AS,tileImpl:()=>MM,topKImpl:()=>BM,transposeImpl:()=>_S,uniqueImpl:()=>VM});function Xs(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}function pM(r){let e=new Float32Array(r.length);for(let t=0;t{let a=I.assertAndGetBroadcastShape(e,t),i=a.length,p=x.computeStrides(a),u=x.sizeFromShape(a),c=x.getTypedArrayFromDType(s,u),l=e.length,m=t.length,f=x.computeStrides(e),d=x.computeStrides(t),h=I.getBroadcastDims(e,a),g=I.getBroadcastDims(t,a);if(h.length+g.length===0)for(let y=0;yC[E]=0);let w=x.locToIndex(C,l,f),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=x.locToIndex(k,m,d);c[y]=r(o[w],n[_])}return[c,a]}}function Ec(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}function Hg(r,e,t=\"float32\"){if(t===\"complex64\"){let n=Hg(r,e,\"float32\"),s=Hg(r,e,\"float32\");return Ec({inputs:{real:n,imag:s},backend:r})}let o=x.makeZerosTypedArray(x.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function mS(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function cM(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}function fS(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=x.toTypedArray([0],t),[s,a]=kt((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Yl(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return mS({inputs:{x:n},backend:t});let c=Hg(t,n.shape,n.dtype),l=Yl({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=Ec({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=cM({inputs:{input:n},backend:t}),l=Yl({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!x.hasEncodingLoss(n.dtype,s)){let c=mS({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=fS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}function Dt(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Xs([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?I.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?I.fromUint8ToStringArray(c):c,f=o||a.dtype,[d,h]=e(a.shape,i.shape,l,m,f);return p.makeTensorInfo(h,f,d)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=Yl({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=p.data.get(l.dataId).values,d=p.data.get(m.dataId).values,h=Yl({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(y.dataId).values,w=p.data.get(b.dataId).values,[k,_,E]=t(a.shape,i.shape,f,d,C,w),R=p.makeTensorInfo(E,\"float32\",k),A=p.makeTensorInfo(E,\"float32\",_),D=Ec({inputs:{real:R,imag:A},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(A),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,f]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(f,l,m)}}}function $c(r){return(e,t,o,n,s,a)=>{let i=I.assertAndGetBroadcastShape(e,t),p=x.sizeFromShape(i),u=i.length,c=x.computeStrides(i),l=x.getTypedArrayFromDType(\"float32\",p),m=x.getTypedArrayFromDType(\"float32\",p),f=I.getBroadcastDims(e,i),d=I.getBroadcastDims(t,i),h=I.mergeRealAndImagArrays(o,n),g=I.mergeRealAndImagArrays(s,a),y=e.length,b=x.computeStrides(e),C=t.length,w=x.computeStrides(t);if(f.length+d.length===0)for(let k=0;kE[M]=0);let R=x.locToIndex(E,y,b),A=_.slice(-C);d.forEach(M=>A[M]=0);let D=x.locToIndex(A,C,w),O=r(h[R*2],h[R*2+1],g[D*2],g[D*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var dS=kt((r,e)=>r+e),$re=$c((r,e,t,o)=>({real:r+t,imag:e+o})),LTt=Dt(_r,dS,$re);function lM(r,e,t,o,n){let s=x.sizeFromShape(o),a=x.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function mM(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ne([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function Tr(r){return(e,t,o)=>{let n=x.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(Xs(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=x.sizeFromShape(a.shape),c=t||a.dtype,l=x.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(Xs(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var hS=Tr(r=>Math.ceil(r)),YTt=Jo(ro,hS);function fM(r,e,t,o){let n=x.getArrayFromDType(t,x.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=x.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?I.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),oNt=Dt(oo,gS,null,\"bool\");var xS=Tr(r=>Math.exp(r)),uNt=Jo(no,xS,\"float32\");var yS=Tr(r=>Math.expm1(r)),fNt=Jo(wn,yS);var bS=Tr(r=>Math.floor(r)),yNt=Jo(so,bS);function dM(r,e,t,o,n,s,a,i,p){let u=ne([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let f=0;fr>e?1:0),NNt=Dt(ao,CS,null,\"bool\");var IS=kt((r,e)=>r>=e?1:0),ANt=Dt(io,IS,null,\"bool\");var wS=kt((r,e)=>rr<=e?1:0),WNt=Dt(co,SS,null,\"bool\");function gM(r,e,t){let o=(e-r)/(t-1),n=x.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),XNt=Jo(lo,vS);function xM(r,e,t,o){let n=x.getTypedArrayFromDType(o,x.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var kS=kt((r,e)=>Math.max(r,e)),r2t=Dt(mo,kS);var TS=kt((r,e)=>Math.min(r,e)),i2t=Dt(fo,TS);var Ql=kt((r,e)=>r*e),Rre=$c((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),m2t=Dt(ho,Ql,Rre);function yM(r,e,t){let o=x.createScalarValue(-1,t);return Ql([],e,o,r,t)}var NS=kt((r,e)=>r!==e?1:0),I2t=Dt(go,NS,null,\"bool\");function _S(r,e,t,o,n){let s=e.length,a=x.sizeFromShape(e),i=x.computeStrides(e),p=x.computeStrides(n),u=x.getTypedArrayFromDType(t,x.sizeFromShape(n));for(let c=0;c{if(o<0||o>=t){let s=x.indexToLoc(n,e.length,x.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function Fre(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function Dre(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);Fre(t,o);let p=1;for(let u=0;u=0){let h=i[d],g=h[h.length-1]-f[c];for(let y=c;yn[a]=s)}return e}function CM(r,e){let t=r.slice(0,e);for(;t.lengtho&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case en.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case en.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${en[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case en.FIRST_DIM_SIZE:return e[0];case en.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case en.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${en[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=SM(o,!1),a=x.getArrayFromDType(this.valuesDType,x.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=x.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let d=this.defaultValueShape;Ne(()=>{let h=z(c,d);c=Ls(h,i).dataSync()})}let l=0,m=0,f=0;for(let d=0;d<=u;++d){let h=d=u){let g=o.length;h=Math.floor(g/p)}if(h>f)if(this.defaultValue.length===1)a.subarray(f*p,h*p).fill(this.defaultValue[0]),f=h;else for(;h>f;){let g=a.slice(f*p);wM(g,c,p),++f}h<0?(l=d+1,m=f):(l=d,m=f,f=m+1)}}};function wM(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function vM(r,e,t,o,n,s,a,i,p,u){return new Rc(r,e,t,o,n,s,a,i,p,u).compute()}function kM(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return x.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=x.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),U2t=Jo(xo,ES);function TM(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return ne(t,e.dtype);let f=ne(c,e.dtype);typeof p==\"string\"||typeof p==\"number\"?f.values.fill(p):typeof p==\"boolean\"&&f.values.fill(+p);for(let d=0;d=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let y=0;y1/(1+Math.exp(-r))),Y2t=qg(yo,r=>1/(1+Math.exp(-r)));function _M(r,e,t,o,n){let s=et.isSliceContinous(o,e,t),a=x.sizeFromShape(t),i=x.computeStrides(o);if(s){let l=et.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?I.fromUint8ToStringArray(r):r,u=ne(o,n,p),c=ne(t,n);for(let l=0;ld+e[h]);c.set(u.get(...f),...m)}return n===\"string\"?I.fromStringArrayToUint8(c.values):c.values}function EM(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=x.getArrayFromDType(t,0),y=x.getArrayFromDType(n,0);return[g,[0,l],y,u,c]}let m=!0,f=0,d=new Array(p).fill(0);for(let g=0;g=p)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,p));++d[y],m=m&&y>=f,f=y}let h=!0;for(let g=0;g0&&(d[g]+=d[g-1])}if(h&&m){let g=r,y=o;for(let b=0;b0){f[m-1]=1;for(let g=m-2;g>=0;--g)f[g]=f[g+1]*o[g+1]}let d=[];if(i>0){d[i-1]=1;for(let g=i-2;g>=0;--g)d[g]=d[g+1]*p[g+1]}let h=x.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let f=m.reduce((C,w)=>C*w,1),d=x.getArrayFromDType(t,f);if(i===0)return l>0&&d.fill(a),[d,m];if(l<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,y=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>y&&d.fill(a,y*u,b*u);for(let w=h;w=p[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return yMath.sqrt(r)),c_t=qg(bo,r=>Math.sqrt(r));var $S=kt((r,e)=>{let t=r-e;return t*t}),h_t=Dt(Co,$S);function FM(r,e,t,o){let n=ne(r,e.dtype);for(let s=0;s0?0:i-p),f=0;f+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){y(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=x.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],f=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,f,l),c+=f}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,f=1;this.createNGrams(e,u,i,c,f,m)}}return[i,a]}};function DM(r,e,t,o,n,s,a,i){return new RS(t,o,n,s,a,i).compute(r,e)}function Lre(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),Bre=$c((r,e,t,o)=>({real:r-t,imag:e-o})),__t=Dt(Io,AS,Bre);function MM(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function LM(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),f=Math.min(o,Math.floor(e+(i-p)*c/i+l));LM(r,e,m,f)}let n=r[e],s=t,a=o;for(x.swap(r,t,e),Zl(r[o],n)>0&&x.swap(r,t,o);s0;)a=a-1}Zl(r[t],n)===0?x.swap(r,t,a):(a=a+1,x.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function BM(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=x.getTypedArrayFromDType(t,a*o),u=x.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;ld[C]={value:b,index:C}),o{for(let g=0;g`T${o}`),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey=\"addN\"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(\" + \");return`\n ${ue(\"index\")} {\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let flatIndex = index * ${this.workPerThread} + i;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n ${e.join(`\n `)}\n setOutputAtIndex(flatIndex, ${t});\n }\n }\n }\n `}};function Wre(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Lt({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>ct(i,p)),s=o.map(i=>i.shape),a=new Kg(s);return t.runWebGPUProgram(a,o,n)}var wL={kernelName:an,backendName:\"webgpu\",kernelFunc:Wre};var Ac=class{constructor(e,t,o){this.workGroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[t];this.op=o===\"min\"?\"<\":\">\";let[s,a]=I.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=fe(this.outputShape),x.sizeFromShape(a)<32||x.sizeFromShape(s)>1e3?(this.type=\"plain\",this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize)):(this.type=\"shared\",this.dispatch=ae(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${Yo(this.inputShape.length-1)}`,t=()=>{let o=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(o+=\"outputCoords,\");else for(let n=0;n u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${ue(\"index\")} {\n let outputIndex = index / i32(workGroupSizeX);\n let reduceLength = ${e()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + i32(workGroupSizeX)) {\n let candidate = getX(${t()} k);\n if (!isnan(candidate) && candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = k;\n }\n }\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = bestIndex;\n workgroupBarrier();\n\n var reduceSize = min(u32(reduceLength), workGroupSizeX);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = xBestIndices[localId.x + interval];\n }\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n setOutputAtIndexI32(outputIndex, xBestIndices[localId.x]);\n }\n }\n `:`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${t()} 0);\n let reduceLength = ${e()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${t()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};var jg=class{constructor(e,t){this.variableNames=[\"A\"],this.workGroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n tile : array, ${this.workGroupSize[0]}>;\n ${Ri()}\n fn _start(@builtin(local_invocation_id) localId : vec3,\n @builtin(workgroup_id) workgroupId : vec3) {\n var x = i32(workgroupId.x) * TILE_DIM + i32(localId.x);\n var y = i32(workgroupId.y) * TILE_DIM + i32(localId.y);\n let width = uniforms.outShape[0];\n let height = uniforms.outShape[1];\n if (x < width && y < height) {\n tile[localId.y][localId.x] = A[y * width + x];\n }\n workgroupBarrier();\n\n x = i32(workgroupId.y) * TILE_DIM + i32(localId.x);\n y = i32(workgroupId.x) * TILE_DIM + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var Xg=class{constructor(e,t){this.variableNames=[\"A\"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;ot.disposeData(f.dataId)),m}var vL={kernelName:un,backendName:\"webgpu\",kernelFunc:Gre};function Hre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=new Ac(p.shape,a[0],\"min\"),l=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(f=>t.disposeData(f.dataId)),m}var kL={kernelName:ja,backendName:\"webgpu\",kernelFunc:Hre};var qre=it({opType:ye.ATAN2}),TL={kernelName:sa,backendName:\"webgpu\",kernelFunc:qre};var Jl=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,\",this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e=\"resultValue = max(value, resultValue);\";this.poolType===\"avg\"&&(e=\"resultValue = resultValue + value; count = count + 1.0;\");let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / count\"),`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let xRCCorner = vec2(coords.yz) * uniforms.stride - uniforms.pad;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};\n var count = 0.0;\n\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilation.x) {\n let xR = xRCorner + wR;\n\n if (xR < 0 || xR >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + uniforms.dilation.y) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.y) {\n continue;\n }\n\n let value = getX(batch, xR, xC, coords[3]);\n ${e}\n }\n }\n\n setOutputAtIndex(index, ${t});\n }\n }\n `}};var Yg=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"stride : vec2,\",this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let xRCCorner = coords.yz * uniforms.stride;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n let value = getX(batch, xRCorner, xCCorner, d);\n setOutputAtIndex(index, value);\n }\n }\n `}};var Qg=class{constructor(e,t){this.workGroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"reduceSize : i32,\",this.size=!0,this.inputShape=[e.batchSize,e.inSize];let[o]=I.computeOutAndReduceShapes(this.inputShape,[1]);this.outputShape=o.length===0?[1]:o,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e=\"\",t=\"0.0\";this.reduceType===\"min\"||this.reduceType===\"max\"?(e=`\n if (isnan(candidate)) {\n bestValue = uniforms.NAN;\n } else if (!isnan(bestValue) && candidate ${this.reduceType===\"min\"?\"<\":\">\"} bestValue)\n { bestValue = candidate; }`,t=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?e=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"&&(e=\" bestValue = bestValue * candidate; \",t=\"1.0\");let o=this.reduceType===\"mean\"?\"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));\":\"setOutputAtIndex(outputIndex, bestValue);\";return`\n fn DIV_CEIL(a : u32, b : u32) -> u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestValues : array;\n `}\n fn getOffset(outputIndex : i32) -> i32 {\n let outputCoords = getCoordsFromIndex(outputIndex);\n let offset = ${this.outputShape.length===1?\"outputCoords\":\"outputCoords[0]\"} * uniforms.reduceSize;\n return offset;\n }\n ${ue(\"index\")} {\n let outputIndex = index / i32(workGroupSizeX);\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), workGroupSizeX);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + i32(workGroupSizeX)) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), workGroupSizeX);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n ${e}\n xBestValues[localId.x] = bestValue;\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n ${o}\n }\n }\n `}};function Ys(r,e,t,o,n){let s=r.shape.length,a=[],i=x.parseAxisParam(e,r.shape),p=i,u=I.getAxesPermutation(p,s),c=r;u!=null&&(c=Nr({inputs:{x:r},attrs:{perm:u},backend:n}),p=I.getInnerMostAxes(p.length,s),a.push(c)),I.assertAxesAreInnerMostDims(o,p,s);let[l,m]=I.computeOutAndReduceShapes(c.shape,p),f=l;t&&(f=I.expandShapeToKeepDim(l,i));let d;if((o===\"max\"||o===\"prod\")&&n.shouldExecuteOnCPU([c])){let h=n.tensorMap.get(c.dataId).values;switch(o){case\"max\":let g=rL(h,x.sizeFromShape(m),f,r.dtype);d=n.makeTensorInfo(f,r.dtype,g);break;case\"prod\":let{outVals:y,outShape:b,outDtype:C}=uL(c.shape,c.dtype,h,p);d=n.makeTensorInfo(b,C,y);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=x.sizeFromShape(m),y=x.sizeFromShape(c.shape)/h,b={windowSize:h,inSize:h,batchSize:y,outSize:1},C=o===\"mean\"?\"float32\":Ca(r.dtype),w=[{type:\"int32\",data:[h]}],k=new Qg(b,o),_=n.runWebGPUProgram(k,[c],C,w);a.push(_),d=xe({inputs:{x:_},attrs:{shape:f},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),d}function em(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return Ys(n,s,a,\"max\",t)}var NL={kernelName:$n,backendName:\"webgpu\",kernelFunc:em};function DS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return Ys(n,a,s,\"mean\",t)}var _L={kernelName:An,backendName:\"webgpu\",kernelFunc:DS};function Zg(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&x.arraysEqual(e.inShape,e.outShape))return Lt({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type===\"VALID\"){let a=r.shape.length,i=xe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=DS({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(x.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=em({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=xe({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new Yg(e):(t===\"avg\"?n=new Jl(e,\"avg\"):(x.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Jl(e,\"max\")),s.push({type:\"int32\",data:[e.padInfo.top,e.padInfo.left]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]},{type:\"int32\",data:[e.inHeight,e.inWidth]},{type:\"int32\",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=I.computePool2DInfo(n.shape,s,a,u,i,p);return Zg(n,c,\"avg\",t)}var EL={kernelName:pn,backendName:\"webgpu\",kernelFunc:Kre};function jre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return _c({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var $L={kernelName:cn,backendName:\"webgpu\",kernelFunc:jre};var Jg=class{constructor(e,t){this.variableNames=[\"source\"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${At(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=At(this.rank),t=Xre(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>\"sourceLoc = uniforms.start + coords;\"):o=this.outputShape.map((s,a)=>`sourceLoc.${PS[a]} = uniforms.start.${Yo(a)} + coords.${PS[a]};`),`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${e};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${t}));\n }\n }\n `}},PS=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function Xre(r){if(r===1)return\"sourceLoc\";if(r<=6)return PS.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function ms(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=et.parseSliceParams(n,s,a);if(et.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.tensorMap.get(n.dataId),m=fL(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(x.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Jg(i,p),c=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var RL={kernelName:qn,backendName:\"webgpu\",kernelFunc:ms};var Yre=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;x.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=[],d=xe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Nr({inputs:{x:d},backend:t,attrs:{perm:u}}),g=xe({inputs:{x:h},backend:t,attrs:{shape:c}}),y=ms({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(b=>t.disposeData(b.dataId)),y},AL={kernelName:hs,backendName:\"webgpu\",kernelFunc:Yre};var OS=it({opType:ye.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:iL}),FL={kernelName:go,backendName:\"webgpu\",kernelFunc:OS};function Wa(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Lt({inputs:{x:n.complexTensorInfos.real},backend:t})}var DL={kernelName:la,backendName:\"webgpu\",kernelFunc:Wa};function PL(r,e){let t=new Zo(r.shape,pe.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function MS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Lt({inputs:{x:n},backend:t});let a=Wr(n.shape),i=MS({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=ls({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=Wa({inputs:{input:n},backend:t}),i=MS({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!x.hasEncodingLoss(n.dtype,s)){let a=Lt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=WM(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return PL(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",x.getTypedArrayFromDType(\"bool\",1)),p=OS({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var OL={kernelName:to,backendName:\"webgpu\",kernelFunc:MS};var Qre=Ge({opType:pe.CEIL,cpuKernelImpl:UM}),ML={kernelName:ro,backendName:\"webgpu\",kernelFunc:Qre};var ex=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workGroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${ue(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue : vec4;\n for (var i = 0; i < 4; i = i + 1) {\n if (isnan(value[i])) {\n clampedValue[i] = value[i];\n } else {\n clampedValue[i] = clamp(value[i], uniforms.minVal, uniforms.maxVal);\n }\n }\n\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var tx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${ue(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n if (isnan(value)) {\n setOutputAtIndex(index, value);\n return;\n }\n setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal));\n }\n }\n `}};function Zre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:\"float32\",data:[s]},{type:\"float32\",data:[a]}];return x.sizeFromShape(n.shape)%4===0?i=new ex(n.shape):i=new tx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var LL={kernelName:Ro,backendName:\"webgpu\",kernelFunc:Zre};var rx=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=I.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;sWa({inputs:{input:C},backend:t})),h=r.map(C=>qu({inputs:{input:C},backend:t})),g=Fc(d,e,t),y=Fc(h,e,t),b=ls({inputs:{real:g,imag:y},backend:t});return d.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(y.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(k=>{let E=[-1,x.sizeFromShape(k.shape.slice(e))];return xe({inputs:{x:k},backend:t,attrs:{shape:E}})}),h=d.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=I.computeOutShape(d.map(k=>k.shape),1),y=d[0].shape[0]===1,b=GM(h,g,o,y),C=I.computeOutShape(r.map(k=>k.shape),e),w=t.makeTensorInfo(C,o,b);return d.forEach(k=>t.disposeData(k.dataId)),w}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let d=[];for(let g=0;gd.shape),u=new rx(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:\"int32\",data:[l[0]]});for(let d=1;dt.disposeData(d.dataId));let f=xe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),f}function Jre(r,e,t){let o=I.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>xe({inputs:{x:s},backend:t,attrs:{shape:[x.sizeFromShape(s.shape.slice(0,e)),x.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function LS(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=x.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(u=>u.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>x.sizeFromShape(u.shape)>0);return p.length===1?Lt({inputs:{x:p[0]},backend:t}):Fc(p,s,t)}var VL={kernelName:gs,backendName:\"webgpu\",kernelFunc:LS};function eoe(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=A=>{switch(A){case 1:return\"resData = x[xIndex];\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = x[xIndex / 4];\";default:throw new Error(`innerElementSize ${A} is not supported.`)}},l=A=>{switch(A){case 1:return\"return W[row * uniforms.wShape[3] + colIn];\";case 4:return\"return W[row * uniforms.wShape[3] / 4 + colIn];\";default:throw new Error(`innerElementSize ${A} is not supported.`)}},m=r?`\n let coord = vec4(batch, xRow, xCol, xCh);\n `:`\n let coord = vec4(batch, xCh, xRow, xCol);\n `,f=r?`\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n `:`\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `,d=r?\"uniforms.xShape[1]\":\"uniforms.xShape[2]\",h=r?\"uniforms.xShape[2]\":\"uniforms.xShape[3]\",g=r?\"row\":\"col\",y=r?\"col\":\"row\",b=`\n let inChannels = uniforms.wShape[2];\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n let outRow = ${g} / outWidth;\n let outCol = ${g} % outWidth;\n\n let WRow = ${y} / (uniforms.filterDims[1] * inChannels);\n let WCol = ${y} / inChannels % uniforms.filterDims[1];\n let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0];\n let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1];\n let xCh = ${y} % inChannels;\n var resData = ${vt(i)}(0.0);\n // The bounds checking is always needed since we use it to pad zero for\n // the 'same' padding type.\n if (xRow >= 0 && xRow < ${d} && xCol >= 0 && xCol < ${h}) {\n ${m}\n let xIndex = getIndexFromCoords4D(coord, uniforms.xShape);\n ${c(i)}\n }\n return resData;`,C=r?e&&o?`\n let col = colIn * ${i};\n ${b}`:`\n let col = colIn * ${i};\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${vt(i)}(0.0);`:o&&t?`\n let col = colIn * ${i};\n ${b}`:`\n let col = colIn * ${i};\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${vt(i)}(0.0);`,w=`${l(p)}`,k=vt(u),_=r?vt(i):vt(p),E=r?vt(p):vt(i);return`\n ${ur(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${_} {\n ${r?C:w}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${E} {\n ${r?w:C}\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${k}) {\n let col = colIn * ${u};\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\n {\n var value = valueIn;\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n ${f}\n ${Kr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var ox=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workGroupSize=Hl(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ql(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=[\"f32\",\"vec4\"]):(this.innerElementSize=4,this.variableTypes=[\"vec4\",\"vec4\"]),s&&(this.variableNames.push(\"bias\"),this.variableTypes.push(\"vec4\")),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableTypes.push(\"vec4\"))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push(\"bias\"),i&&this.variableNames.push(\"preluActivationWeights\")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workGroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workGroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workGroupSize[0]*this.innerElementSize,this.workGroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner):Gu(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${eoe(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var nx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,\",this.workGroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights,!1,4)}\n fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{\n let coords = vec4(batch, row, col, chan);\n if (coordsInBounds4D(coords, uniforms.xShape)) {\n return getX(batch, row, col, chan);\n } else {\n return 0.0;\n }\n }\n fn readFilt(row : i32, col : i32, xChannel : i32, outChannel : i32) -> f32{\n let coords = vec4(row, col, xChannel, outChannel);\n if(coordsInBounds4D(coords, uniforms.wShape)) {\n return getW(row, col, xChannel, outChannel);\n } else {\n return 0.0;\n }\n }\n fn writeResult(batch : i32, row : i32, col : i32, chan : i32, valueIn : f32) {\n let coords = ${this.isChannelsLast?\"vec4(batch, row, col, chan);\":\"vec4(batch, chan, row, col);\"}\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = valueIn;\n ${Kr(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${ue(\"index\")} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let outChannel = ${this.isChannelsLast?\"coords[3];\":\"coords[1];\"}\n let outRow = ${this.isChannelsLast?\"coords[1];\":\"coords[2];\"}\n let outCol = ${this.isChannelsLast?\"coords[2];\":\"coords[3];\"}\n var acc : f32 = 0.0;\n for (var row = 0; row < uniforms.filterDims[0]; row = row + 1) {\n for (var col = 0; col < uniforms.filterDims[1]; col = col + 1) {\n let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * row - uniforms.pad[0];\n let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * col - uniforms.pad[1];\n for (var xChannel = 0; xChannel < ${this.isChannelsLast?\"uniforms.xShape[3];\":\"uniforms.xShape[1];\"} xChannel = xChannel + 1) {\n ${this.isChannelsLast?\"let v = readInp(batch, xRow, xCol, xChannel);\":\"let v = readInp(batch, xChannel, xRow, xCol);\"}\n let f = readFilt(row, col, xChannel, outChannel);\n acc = acc + v * f;\n }\n }\n }\n writeResult(batch, outRow, outCol, outChannel, acc);\n }\n `}};function zL(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function toe({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat===\"channelsLast\",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=[],f,d;if(l){let y=t.inHeight*t.inWidth*t.inChannels;f=xe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,y]}}),d=xe({inputs:{x:e},backend:o,attrs:{shape:[1,y,t.outChannels]}})}else f=xe({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),d=xe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(f),m.push(d),s!=null){let y=zL(s.shape,p);y!=null&&(s=xe({inputs:{x:s},backend:o,attrs:{shape:y}}),m.push(s))}if(n!=null){let y=zL(n.shape,p);y!=null&&(n=xe({inputs:{x:n},backend:o,attrs:{shape:y}}),m.push(n))}let h=_c({a:p?f:d,b:p?d:f,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=xe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let y of m)o.disposeData(y.dataId);return g}function sx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat===\"channelsLast\",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=P().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type===\"SAME\"||t.padInfo.type===\"VALID\")))return toe({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let f,d=[t.padInfo.top,t.padInfo.left],h=[{type:\"int32\",data:[t.filterHeight,t.filterWidth]},{type:\"int32\",data:[...d]},{type:\"int32\",data:[t.strideHeight,t.strideWidth]},{type:\"int32\",data:[t.dilationHeight,t.dilationWidth]}];if(m)f=new nx(t,p,i,u);else{let C=c?t.outHeight*t.outWidth:t.outChannels,w=c?t.outChannels:t.outHeight*t.outWidth,k=t.filterHeight*t.filterWidth*t.inChannels;h.push({type:\"int32\",data:[C]},{type:\"int32\",data:[w]},{type:\"int32\",data:[k]});let _=o.adapterInfo.isIntel();f=new ox(t,C,w,k,p,i,u,_)}let g=[],y=[r,e];p&&(!c&&n.shape.length===1&&(n=xe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),g.push(n)),y.push(n)),u&&(!c&&s.shape.length===1&&(s=xe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),g.push(s)),y.push(s)),i===\"leakyrelu\"&&(h.push({type:\"float32\",data:[a]}),f.uniforms+=\" alpha : f32,\");let b=o.runWebGPUProgram(f,y,r.dtype,h);for(let C of g)o.disposeData(C.dataId);return b}function roe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return sx({x:n,filter:s,convInfo:m,backend:o})}var WL={kernelName:ln,backendName:\"webgpu\",kernelFunc:roe};function ooe(r=4){let e=s=>{switch(s){case 1:return\"return W[getIndexFromCoords4D(coord, uniforms.wShape)];\";case 4:return`\n let coord1 = vec4(coordX, coordY, col + 1, rowInner);\n let coord2 = vec4(coordX, coordY, col + 2, rowInner);\n let coord3 = vec4(coordX, coordY, col + 3, rowInner);\n let v0 = W[getIndexFromCoords4D(coord, uniforms.wShape)];\n let v1 = W[getIndexFromCoords4D(coord1, uniforms.wShape)];\n let v2 = W[getIndexFromCoords4D(coord2, uniforms.wShape)];\n let v3 = W[getIndexFromCoords4D(coord3, uniforms.wShape)];\n return vec4(v0, v1, v2, v3);\n `;default:throw new Error(`innerElementSize ${s} is not supported.`)}},o=`if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${`\n let outRow = row / uniforms.outShape[2];\n let outCol = row % uniforms.outShape[2];\n\n let WRow = col / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let WCol = col / uniforms.outBackprop[3] % uniforms.filterDims[1];\n let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.stride[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.stride[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${vt(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${vt(r)}(0.0);\n }\n let coord = vec4(\n batch,\n i32(xR),\n i32(xC),\n col % uniforms.outBackprop[3]);\n return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`}\n }\n return ${vt(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${vt(r)} {\n let col = colIn * ${r};\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${vt(r)} {\n let col = colIn * ${r};\n let coordX = uniforms.filterDims.x - 1 -\n row / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let coordY = uniforms.filterDims.y - 1 -\n (row / uniforms.outBackprop[3]) % uniforms.filterDims[1];\n if (row < uniforms.dimInner && col < uniforms.dimBOuter &&\n coordX >= 0 && coordY >= 0) {\n let rowInner = row % uniforms.outBackprop[3];\n let coord = vec4(coordX, coordY, col, rowInner);\n ${e(r)}\n }\n return ${vt(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${vt(r)}) {\n let col = colIn * ${r};\n if (row < uniforms.dimAOuter && (col + ${r-1}) < uniforms.dimBOuter) {\n var value = valueInput;\n let outCoord = vec4(\n batch,\n row / uniforms.outShape[2],\n row % uniforms.outShape[2],\n col);\n result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value;\n }\n }`}var ax=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.inShape,x.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workGroupSize=Hl(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ql(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=[\"vec4\",\"f32\"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Uu(this.elementsPerThread,this.workGroupSize):Gu(this.elementsPerThread,this.workGroupSize);return`\n ${ooe(this.isVec4?4:1)}\n ${e}\n `}};var ix=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1;return`\n ${ue(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[${o}];\n\n let dyCorner = vec2(coords[${e}], coords[${t}]) - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = (f32(dyRCorner) + f32(wR)) / f32(uniforms.stride.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) || fract(dyR) > 0.0 ||\n wRPerm < 0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = (f32(dyCCorner) + f32(wC)) / f32(uniforms.stride.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0 || wCPerm < 0) {\n continue;\n }\n let idyC = i32(dyC);\n\n for (var d2 = 0; d2 < uniforms.outBackprop[3]; d2 = d2 + 1) {\n if (${this.isChannelsLast}) {\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n } else {\n let xValue = getDy(batch, d2, idyR, idyC);\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function noe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(u),m=I.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),f=[{type:\"int32\",data:[m.filterHeight,m.filterWidth]},{type:\"int32\",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],d;if(P().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.filterHeight<=2&&m.filterWidth<=2&&m.outChannels<=16&&m.inChannels===1)d=new ix(m);else{d=new ax(m);let h=m.inHeight*m.inWidth,g=m.inChannels,y=m.filterHeight*m.filterWidth*m.outChannels;f.push({type:\"uint32\",data:[h]},{type:\"uint32\",data:[g]},{type:\"uint32\",data:[y]})}return t.runWebGPUProgram(d,[n,s],\"float32\",f)}var UL={kernelName:mn,backendName:\"webgpu\",kernelFunc:noe};var soe=Ge({opType:pe.COS}),GL={kernelName:fn,backendName:\"webgpu\",kernelFunc:soe};var aoe=Ge({opType:pe.COSH}),HL={kernelName:dn,backendName:\"webgpu\",kernelFunc:aoe};var ux=class{constructor(e,t,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workGroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.methodId=n===\"bilinear\"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${e} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${t} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${t}`];return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let height_ratio = f32(${o});\n let width_ratio = f32(${a});\n let b = coords[0];\n let y = coords[1];\n let x = coords[2];\n let d = coords[3];\n // get box vals\n let y1 = getBoxes(b, 0);\n let x1 = getBoxes(b, 1);\n let y2 = getBoxes(b, 2);\n let x2 = getBoxes(b, 3);\n // get image in batch index\n let bInd = i32(round(getBoxInd(b)));\n if(bInd < 0 || bInd >= uniforms.outShape[0]) {\n return;\n }\n let height_scale = ${n};\n let width_scale = ${i};\n let in_y = ${s};\n if( in_y < 0.0 || in_y > ${e} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let sourceFracIndexCR = vec2(in_x,in_y);\n if(${this.methodId} == 1) {\n // Compute the four integer indices.\n let sourceFloorCR = vec2(sourceFracIndexCR);\n let sourceCeilCR = vec2(ceil(sourceFracIndexCR));\n let topLeft = getImage(bInd, sourceFloorCR.y, sourceFloorCR.x, d);\n let bottomLeft = getImage(bInd, sourceCeilCR.y, sourceFloorCR.x, d);\n let topRight = getImage(bInd, sourceFloorCR.y, sourceCeilCR.x, d);\n let bottomRight = getImage(bInd, sourceCeilCR.y, sourceCeilCR.x, d);\n let fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n let top = topLeft + (topRight - topLeft) * fracCR.x;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n let newValue = top + (bottom - top) * fracCR.y;\n setOutputAtIndex(index, newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n let sourceNearestCR = vec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n let newValue = getImage(\n bInd, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutputAtIndex(index, newValue);\n }\n }\n }\n `}};var ioe=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new ux(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],\"float32\",l)},qL={kernelName:xn,backendName:\"webgpu\",kernelFunc:ioe};var Ku;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Ku||(Ku={}));var tm=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0;let s=128;this.workGroupSize=[s,1,1],this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Ku.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${KL(e,\"coords\",this.op)})`,n=this.outputShape[this.outputShape.length-1],s=\"\",a=\"\";return this.exclusive?(s=this.reverse?`end != ${n-1}`:\"end != 0\",a=this.reverse?\"end + 1\":\"end - 1\"):(s=this.reverse?`end + pow2 < ${n}`:\"end >= pow2\",a=this.reverse?\"end + pow2\":\"end - pow2\"),`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${jL(e,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${jL(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${KL(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function KL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function jL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function px(r,e,t,o,n,s){let a=e.shape.length,i=I.getAxesPermutation([o],a),p=e;i!=null&&(p=Nr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=I.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Lt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new tm(r,p.shape,!1,s),d=l,h=[{type:\"float32\",data:[m]}];l=t.runWebGPUProgram(f,[l],l.dtype,h),t.disposeData(d.dataId)}if(n){let m=new tm(r,p.shape,n,s),f=l,d=[{type:\"float32\",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,d),t.disposeData(f.dataId)}if(i!=null){let m=I.getUndoAxesPermutation(i),f=Nr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),f}return l}function uoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return px(Ku.Prod,n,t,s,a,i)}var XL={kernelName:hn,backendName:\"webgpu\",kernelFunc:uoe};function poe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return px(Ku.Sum,n,t,s,a,i)}var YL={kernelName:gn,backendName:\"webgpu\",kernelFunc:poe};var cx=class{constructor(e,t){this.variableNames=[\"x\"],this.workGroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let h = ${this.getHeightCoordString()};\n let w = ${this.getWidthCoordString()};\n let d = ${this.getDepthCoordString()};\n\n let in_h = h / uniforms.blockSize;\n let offset_h = h % uniforms.blockSize;\n let in_w = w / uniforms.blockSize;\n let offset_w = w % uniforms.blockSize;\n let offset_d = (offset_h * uniforms.blockSize + offset_w) *\n ${this.getOutputDepthSize()};\n let in_d = d + offset_d;\n\n let rlt = ${this.getInputSamplingString()};\n setOutputAtIndex(index, rlt);\n }\n }`}getHeightCoordString(){return this.dataFormat===\"NHWC\"?\"coords[1]\":\"coords[2]\"}getWidthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[2]\":\"coords[3]\"}getDepthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[3]\":\"coords[1]\"}getOutputDepthSize(){return this.dataFormat===\"NHWC\"?\"uniforms.outShape[3]\":\"uniforms.outShape[1]\"}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function coe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a===\"NHWC\"?[i,l,m,f]:[i,f,l,m],h=[{type:\"int32\",data:[s]}],g=new cx(d,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var QL={kernelName:yn,backendName:\"webgpu\",kernelFunc:coe};var lx=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pad : vec2, inDims : vec2,\",this.workGroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),n&&this.variableNames.push(\"bias\"),a&&this.variableNames.push(\"preluActivationWeights\"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workGroupSize[0]*this.workGroupSize[1]*this.workGroupSize[2],o=this.workGroupSize[1]+this.filterHeight-1,n=this.workGroupSize[0]+this.filterWidth-1;return`\n ${ur(this.activation,this.hasPreluActivation,!1,4)}\n\n var mm_Asub : array, ${o}>;\n var mm_Bsub : array, ${this.filterHeight}>;\n fn readX(batch : i32, channel : i32, row : i32, col : i32) -> f32 {\n var value = 0.0;\n if (row >=0 && row < uniforms.inDims[0] && col >=0 && col < uniforms.inDims[1])\n {\n value = getX(batch, channel, row, col);\n }\n return value;\n }\n\n ${Ri()}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(num_workgroups) NumWorkgroups: vec3) {\n localId = LocalId;\n globalId = GlobalId;\n let localIndex = i32(LocalIndex);\n numWorkgroups = NumWorkgroups;\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pad;\n let channelMul = uniforms.wShape[3];\n let d1 = coords[1] / channelMul;\n let q = coords[1] % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n\n // Load one tile of X into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workGroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workGroupSize[0]}) {\n let rowOffset = inputRow - localRow;\n let colOffset = inputCol - localCol;\n mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset);\n }\n }\n\n // Load one tile of W into local memory.\n var wIndex = localIndex;\n ${e, inDims : vec2,\",this.workGroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[4,this.workPerThread,1]),x.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return`\n ${ur(this.activation,this.hasPreluActivation,!0,4)}\n fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 {\n var value = vec4(0.0);\n if (col >=0 && col < uniforms.inDims[1]) {\n value = getX(batch, row, col, channel);\n }\n return value;\n }\n\n const strideHeight = ${this.convInfo.strideHeight};\n const strideWidth = ${this.convInfo.strideWidth};\n ${Ri()}\n fn _start(@builtin(global_invocation_id) globalId: vec3) {\n let batch = i32(globalId.z) / uniforms.outShape[1];\n let r = i32(globalId.z) % uniforms.outShape[1];\n let c = i32(globalId.y) * ${this.workPerThread};\n let d1 = i32(globalId.x) * 4;\n let xRCCorner = vec2(r, c) * vec2(strideHeight, strideWidth) - uniforms.pad;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${e}>;\n var dotProd : array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n\n // Use constant instead of uniform can give better performance.\n for (var wR = 0; wR < ${this.convInfo.filterHeight}; wR = wR + 1) {\n let xR = xRCorner + wR;\n if (xR >=0 && xR < uniforms.inDims[0]) {\n for (var i = 0; i < ${e}; i++) {\n xVals[i] = readX(batch, xR, xCCorner + i, d1);\n }\n for (var wC = 0; wC < ${this.convInfo.filterWidth}; wC = wC + 1) {\n let wValue = getW(wR, wC, d1, 0);\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = fma(xVals[i * strideWidth + wC], wValue, dotProd[i]);\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = dotProd[i];\n ${Kr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var Pc=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, stride : vec2, dilation : vec2,`,this.workGroupSize=[256,1,1],this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?\"getX(batch, xR, xC, d1);\":\"getX(batch, d1, xR, xC);\";return`\n ${ur(this.activation,this.hasPreluActivation,!1,4)}\n\n ${ue()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.${this.isChannelsLast?\"yz\":\"zw\"}) * uniforms.stride - uniforms.pad;\n let d2 = coords[${this.isChannelsLast?3:1}];\n let channelMul = uniforms.wShape[3];\n let d1 = d2 / channelMul;\n let q = d2 % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n let inputRowEnd = inputRowStart + uniforms.filterHeight *\n uniforms.dilation[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilation[1];\n\n // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get\n // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all\n // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC.\n // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW.\n var value = 0.0;\n\n // Extract if checking out of for loop for performance.\n if (inputRowStart >= 0 && inputColStart >= 0 &&\n inputRowEnd < uniforms.inDims[0] &&\n inputColEnd < uniforms.inDims[1]) {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilation[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilation[1];\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n } else {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilation[0];\n\n if (xR < 0 || xR >= uniforms.inDims[0]) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilation[1];\n\n if (xC < 0 || xC >= uniforms.inDims[1]) {\n continue;\n }\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n }\n ${Kr(this.addBias,this.activation)}\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function loe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let f=I.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),d=[{type:\"int32\",data:[f.padInfo.top,f.padInfo.left]},{type:\"int32\",data:[f.inHeight,f.inWidth]}],h=f.dataFormat===\"channelsLast\",g;return!h&&f.inHeight>16&&f.inWidth>16&&f.strideHeight===1&&f.strideWidth===1&&f.dilationWidth===1&&f.dilationHeight===1&&f.inChannels===f.outChannels?g=new lx(f.outShape,f.filterHeight,f.filterWidth):h&&f.inHeight>4&&f.inWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?g=new Dc(f):(g=new Pc(f),d.push({type:\"int32\",data:[f.filterHeight]},{type:\"int32\",data:[f.filterWidth]},{type:\"int32\",data:[f.strideHeight,f.strideWidth]},{type:\"int32\",data:[f.dilationHeight,f.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,d)}var ZL={kernelName:bn,backendName:\"webgpu\",kernelFunc:loe};var BS=it({opType:ye.MUL,cpuKernelImpl:sL,supportsComplex:!0}),JL={kernelName:ho,backendName:\"webgpu\",kernelFunc:BS};function rm(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,\"sum\",t)}var eB={kernelName:jn,backendName:\"webgpu\",kernelFunc:rm};function moe(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=I.decodeEinsumEquation(n,s.length);I.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=I.getEinsumComputePath(i,p),l=c.length,m=null,f=a.length,d=[];for(let h=0;h=0&&(m=rm({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeData(h.dataId);return m}var tB={kernelName:Xa,backendName:\"webgpu\",kernelFunc:moe};var foe=Ge({opType:pe.ELU}),rB={kernelName:In,backendName:\"webgpu\",kernelFunc:foe};var doe=it({opType:ye.EQUAL,dtype:\"bool\",cpuKernelImpl:HM}),oB={kernelName:oo,backendName:\"webgpu\",kernelFunc:doe};var VS=Ge({opType:pe.EXP,cpuKernelImpl:qM,dtype:\"float32\"}),nB={kernelName:no,backendName:\"webgpu\",kernelFunc:VS};function mx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(x.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),xe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sB={kernelName:xs,backendName:\"webgpu\",kernelFunc:mx};var hoe=Ge({opType:pe.EXPM1,cpuKernelImpl:KM}),aB={kernelName:wn,backendName:\"webgpu\",kernelFunc:hoe};var fx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordX = uniforms.xShape[2] - coords[2] - 1;\n let outputValue = getX(coords[0], coords[1], coordX, coords[3]);\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var iB={kernelName:Sn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new fx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var goe=Ge({opType:pe.FLOOR,cpuKernelImpl:jM}),uB={kernelName:so,backendName:\"webgpu\",kernelFunc:goe};var xoe=it({opType:ye.INT_DIV,dtype:\"int32\"}),pB={kernelName:vn,backendName:\"webgpu\",kernelFunc:xoe};var dx=class{constructor(e,t,o=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?\"textureLoad(src, vec2(coords.yx));\":\"textureLoad(src, vec2(coords.yx), 0)\";return`\n @binding(1) @group(0) var src: ${this.importVideo?\"texture_external\":\"texture_2d\"};\n ${ue(\"index\")} {\n let flatIndex = index * uniforms.numChannels;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n let values = ${e};\n for (var i = 0; i < uniforms.numChannels; i = i + 1) {\n result[flatIndex + i] = i32(floor(255.0 * values[i]));\n }\n }\n }\n `}};var cB={kernelName:Zi,backendName:\"webgpu\",kernelFunc:yoe},Oc,zS=P().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\"),hx=new Map;function yoe(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!=\"undefined\"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!=\"undefined\"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!=\"undefined\"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],f=!1,d=a||i;if(u||p||d){let b;if(f){let D=n;if(!hx.has(D)||hx.get(D).expired){let O={source:D};hx.set(D,t.device.importExternalTexture(O))}b={width:c,height:l,format:null,usage:null,texture:hx.get(D)}}else{if(d){let L=P().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Oc==null||L!==zS)&&(zS=L,Oc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:zS})),Oc.canvas.width=c,Oc.canvas.height=l,Oc.drawImage(n,0,0,c,l),n=Oc.canvas}let D=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,O=\"rgba8unorm\",M=t.textureManager.acquireTexture(m[1],m[0],O,D);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b={width:c,height:l,format:O,usage:D,texture:M}}let C=x.sizeFromShape(m),w=x.computeStrides(m),k=new dx(m,s,f),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...w]}],E=t.makeTensorInfo([l,c],\"int32\"),R=t.tensorMap.get(E.dataId);R.resourceInfo=b;let A=t.runWebGPUProgram(k,[E],\"int32\",_);return t.disposeData(E.dataId),A}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,C=0;for(let w=0;w(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var lB={kernelName:kn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let f=new gx(o.shape,a.shape,i.shape,l,m),d=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(f,c,o.dtype,d)}};function boe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=I.convertConv2DDataFormat(c),g=I.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return sx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:d,activation:f})}var mB={kernelName:Do,backendName:\"webgpu\",kernelFunc:boe};function Coe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:f}=o,d=c;d==null&&(d=[1,1]),x.assert(I.eitherStridesOrDilationsAreOne(p,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${d}'`);let h=I.computeConv2DInfo(n.shape,s.shape,p,d,u,l,!0),g=[n,s],y=a!=null,b=i!=null;y&&g.push(a),b&&g.push(i);let C=[{type:\"int32\",data:[h.padInfo.top,h.padInfo.left]},{type:\"int32\",data:[h.inHeight,h.inWidth]}],w;return h.inHeight>4&&h.inWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?w=new Dc(h,y,m,b):(w=new Pc(h,y,m,b),C.push({type:\"int32\",data:[h.filterHeight]},{type:\"int32\",data:[h.filterWidth]},{type:\"int32\",data:[h.strideHeight,h.strideWidth]},{type:\"int32\",data:[h.dilationHeight,h.dilationWidth]})),m===\"leakyrelu\"&&(C.push({type:\"float32\",data:[f]}),w.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(w,g,\"float32\",C)}var fB={kernelName:Po,backendName:\"webgpu\",kernelFunc:Coe};var xx=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${At(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var flattenIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexTemp = i32(round(getIndices(coords[0], j)));\n let strideNum = ${e};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function Ioe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=x.sizeFromShape(o.shape),[p,u,c,l]=I.prepareAndValidate(o,n),m=xe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),f=xe({inputs:{x:o},backend:t,attrs:{shape:[x.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=t.readSync(n.dataId),C=t.bufferSync(o),w=XM(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,w.values)}let d=new xx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=t.runWebGPUProgram(d,[f,m],f.dtype,h),y=xe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(f.dataId),t.disposeData(g.dataId),y}var dB={kernelName:Tn,backendName:\"webgpu\",kernelFunc:Ioe};var yx=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=woe(this.aShape);return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let resRC = getCoordsFromIndex(index);\n let indexZ = i32(getIndices(resRC.x, resRC.z));\n let inBounds = select(0.0, 1.0, indexZ >= 0 && indexZ < uniforms.aShape[2]);\n setOutputAtIndex(index, inBounds * getA(${e}));\n }\n }\n `}};function woe(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(A.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new yx(m.shape,d),g=t.runWebGPUProgram(h,[m,f],m.dtype);l.push(g);let y=xe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),y}var hB={kernelName:bs,backendName:\"webgpu\",kernelFunc:WS};var Soe=it({opType:ye.GREATER,cpuKernelImpl:ZM,dtype:\"bool\"}),gB={kernelName:ao,backendName:\"webgpu\",kernelFunc:Soe};var voe=it({opType:ye.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:QM}),xB={kernelName:io,backendName:\"webgpu\",kernelFunc:voe};var koe=Ge({opType:pe.IS_NAN,dtype:\"bool\"}),yB={kernelName:ia,backendName:\"webgpu\",kernelFunc:koe};function Toe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Zo(n.shape,pe.LEAKYRELU);return i.uniforms=\"alpha : f32,\",t.runWebGPUProgram(i,[n],\"float32\",a)}var bB={kernelName:Nn,backendName:\"webgpu\",kernelFunc:Toe};var Noe=it({opType:ye.LESS,dtype:\"bool\",cpuKernelImpl:eL}),CB={kernelName:po,backendName:\"webgpu\",kernelFunc:Noe};var _oe=it({opType:ye.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:JM}),IB={kernelName:co,backendName:\"webgpu\",kernelFunc:_oe};var Eoe=Ge({opType:pe.LOG,cpuKernelImpl:tL}),wB={kernelName:lo,backendName:\"webgpu\",kernelFunc:Eoe};var $oe=it({opType:ye.LOGICAL_AND,dtype:\"bool\"}),SB={kernelName:_n,backendName:\"webgpu\",kernelFunc:$oe};var Roe=Ge({opType:pe.LOGICAL_NOT}),vB={kernelName:En,backendName:\"webgpu\",kernelFunc:Roe};var Aoe=it({opType:ye.MAX,cpuKernelImpl:oL}),kB={kernelName:mo,backendName:\"webgpu\",kernelFunc:Aoe};function Foe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=I.computePool2DInfo(n.shape,s,a,u,i,p);return Zg(n,c,\"max\",t)}var TB={kernelName:Rn,backendName:\"webgpu\",kernelFunc:Foe};function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,\"min\",t)}var NB={kernelName:Fn,backendName:\"webgpu\",kernelFunc:Doe};var Poe=it({opType:ye.MIN,cpuKernelImpl:nL}),_B={kernelName:fo,backendName:\"webgpu\",kernelFunc:Poe};var bx=class{constructor(e,t,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(\",\"),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:\"\"}`).join(\",\"),n=e===1?\"start\":\"start[i]\",s=e===1?\"end\":\"end[i]\",a=e===1?\"outC\":\"outC[i]\",i=At(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${t});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${e}; i = i + 1) {\n if (${a} < ${n}) {\n ${a} = ${n} * 2 - ${a} - ${this.offset};\n } else if(${a} >= ${s}) {\n ${a} = (${s} - 1) * 2 - ${a} + ${this.offset};\n }\n }\n let coords = outC - start;\n setOutputAtIndex(index, getX(${p}));\n }\n }\n `}};var EB={kernelName:Dn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:\"int32\",data:[c[0],c[1]]})),p=new bx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};function Ooe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=aL(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Zo(o.shape,pe.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var $B={kernelName:Pn,backendName:\"webgpu\",kernelFunc:Ooe};function Moe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Bt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var RB={kernelName:On,backendName:\"webgpu\",kernelFunc:Moe};function Loe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,f=i,d=p,h=u,{selectedIndices:g,selectedScores:y}=Bt.nonMaxSuppressionV5Impl(c,l,m,f,d,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([y.length],\"float32\",new Float32Array(y))]}var AB={kernelName:Mn,backendName:\"webgpu\",kernelFunc:Loe};function om(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=Wa({inputs:{input:o},backend:t}),s=om({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=om({inputs:{x:a},backend:t}),p=ls({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return $o({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var FB={kernelName:Es,backendName:\"webgpu\",kernelFunc:om};function DB(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=Wa({inputs:{input:o},backend:t}),s=DB({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=om({inputs:{x:a},backend:t}),p=ls({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return $o({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var PB={kernelName:Cs,backendName:\"webgpu\",kernelFunc:DB};function Boe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return mx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),x.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=mx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=LS({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var OB={kernelName:Is,backendName:\"webgpu\",kernelFunc:Boe};var Cx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){let e=this.xShape.length,t=At(e),o=this.xShape.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),n=this.xShape.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:\"\"}`).join(\",\"),s=e>1?`${t}(${o})`:`${o}`,a=e>1?`${t}(${n})`:`${n}`,i=e>1?\"any(outC < start)\":\"outC < start\",p=e>1?\"any(outC >= end)\":\"outC >= end\",u=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let start = ${s};\n let end = ${a};\n let outC = getCoordsFromIndex(index);\n\n if (${i} || ${p}) {\n setOutputAtIndex(index, uniforms.constantValue);\n } else {\n let coords = outC - start;\n setOutputAtIndex(index, getX(${u}));\n }\n }\n }\n `}};var US=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>x.arraysEqual(u,[0,0])))return Lt({inputs:{x:n},backend:t});if(x.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return $o({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:\"float32\",data:[a]}];s.map(u=>i.push({type:\"int32\",data:[u[0],u[1]]}));let p=new Cx(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},MB={kernelName:Ln,backendName:\"webgpu\",kernelFunc:US};var Voe=it({opType:ye.POW}),LB={kernelName:Bn,backendName:\"webgpu\",kernelFunc:Voe};function zoe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Hu(ye.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var BB={kernelName:Vn,backendName:\"webgpu\",kernelFunc:zoe};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,\"prod\",t)}var VB={kernelName:Ao,backendName:\"webgpu\",kernelFunc:Woe};var Uoe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=pL(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},zB={kernelName:ws,backendName:\"webgpu\",kernelFunc:Uoe};var GS=it({opType:ye.DIV}),WB={kernelName:Cn,backendName:\"webgpu\",kernelFunc:GS};var Goe=Ge({opType:pe.RECIPROCAL}),UB={kernelName:ma,backendName:\"webgpu\",kernelFunc:Goe};var Hoe=Ge({opType:pe.RELU}),GB={kernelName:zn,backendName:\"webgpu\",kernelFunc:Hoe};var qoe=Ge({opType:pe.RELU6}),HB={kernelName:Gn,backendName:\"webgpu\",kernelFunc:qoe};var Ix=class{constructor(e,t,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC =\n (vec2(rc) + vec2(uniforms.halfPixelCenters)) *\n effectiveInputOverOutputRatioRC - vec2(uniforms.halfPixelCenters);\n\n // Compute the four integer indices.\n let sourceFloorRC = vec2(sourceFracIndexRC);\n let sourceCeilRC = vec2(\n min(vec2(uniforms.xShape.yz) - vec2(1.0), ceil(sourceFracIndexRC)));\n\n let topLeft = getX(b, sourceFloorRC.x, sourceFloorRC.y, d);\n let bottomLeft = getX(b, sourceCeilRC.x, sourceFloorRC.y, d);\n let topRight = getX(b, sourceFloorRC.x, sourceCeilRC.y, d);\n let bottomRight = getX(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n let fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n let top = topLeft + (topRight - topLeft) * fracRC.y;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n let newValue = top + (bottom - top) * fracRC.x;\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function Koe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,f=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[i?.5:0]}],d=new Ix(n.shape,p,u);return t.runWebGPUProgram(d,[n],\"float32\",f)}var qB={kernelName:Un,backendName:\"webgpu\",kernelFunc:Koe};var wx=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":e=\"vec2(rc) * effectiveInputOverOutputRatioRC\",`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC = ${e};\n\n // Compute the coordinators of nearest neighbor point.\n let inputShapeRC = vec2(f32(uniforms.xShape.y), f32(uniforms.xShape.z));\n let sourceNearestRC = vec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + uniforms.roundBase)));\n let newValue = getX(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function joe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,f=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[s?.5:0]}],d=new wx(n.shape,p,u,a);return t.runWebGPUProgram(d,[n],n.dtype,f)}var KB={kernelName:Wn,backendName:\"webgpu\",kernelFunc:joe};var Sx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=e,typeof t==\"number\"?(this.uniforms+=\" fillValue : f32,\",this.fillSnippet=\"var outputValue = uniforms.fillValue;\",this.shaderKey+=\"_float\"):(this.uniforms+=\" fillValue : vec3,\",this.fillSnippet=\"var outputValue = uniforms.fillValue[coords[3]];\",this.shaderKey+=\"_vec3\")}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordXFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.cosRadians - (f32(coords[1]) - uniforms.centerY) *\n uniforms.sinRadians;\n let coordYFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.sinRadians + (f32(coords[1]) - uniforms.centerY) *\n uniforms.cosRadians;\n let coordX = i32(round(coordXFloat + uniforms.centerX));\n let coordY = i32(round(coordYFloat + uniforms.centerY));\n ${this.fillSnippet}\n if(coordX >= 0 && coordX < uniforms.xShape[2] && coordY >= 0 &&\n coordY < uniforms.xShape[1]) {\n outputValue = getX(coords[0], coordY, coordX, coords[3]);\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var jB={kernelName:es,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Sx(o.shape,s),[u,c]=I.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:\"float32\",data:[u]},{type:\"float32\",data:[c]},{type:\"float32\",data:[Math.sin(n)]},{type:\"float32\",data:[Math.cos(n)]}];return typeof s==\"number\"?l.push({type:\"float32\",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:\"float32\",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var Xoe=Ge({opType:pe.RSQRT,cpuKernelImpl:cL}),XB={kernelName:xo,backendName:\"webgpu\",kernelFunc:Xoe};var Fi=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=[\"updates\",\"indices\"],this.workGroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=fe(e),this.dispatch=ae(this.dispatchLayout,e,this.workGroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=At(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, size: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e=\"\";this.indicesRank===1?e=\"coords[0]\":this.indicesRank===2&&(e=\"coords[0], j\");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?\"uniforms.strides[j]\":\"uniforms.strides\",n=\"\",s=\"\";this.dispatchLayout.x.length===1?(n=\"flattenedIndex\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 {\n return index;\n }\n `):this.dispatchLayout.x.length===2&&(n=\"vec2(flattenedIndex, coords[1])\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> vec2 {\n // N.B. |updates| could be a scalar tensor, conceptually representing a\n // 2D tensor with all values equal to that. By design, its size must be\n // the same as |outShape[1]| in one dimension, and |indicesShape[0]|\n // gives the other.\n let sliceSize = uniforms.outShape[1];\n let d0 = index / sliceSize;\n let d1 = index - d0 * sliceSize;\n return vec2(d0, d1);\n }\n `);let i=`getUpdates(${Array.from({length:this.updatesRank},(c,l)=>`coords[${l}]`).join(\", \")})`,p=(c,l)=>{let m=`atomicAdd(${c}, bitcast(${l}))`;this.type===\"float32\"&&(m=`\n {\n var oldBits = 0;\n var newBits = bitcast(${l});\n loop {\n let info = atomicCompareExchangeWeak(${c}, oldBits, newBits);\n if (info.exchanged) {\n break;\n }\n oldBits = info.old_value;\n let oldValue = bitcast(oldBits);\n let newValue = oldValue + (${l});\n newBits = bitcast(newValue);\n }\n }\n `);let f=`atomicStore(${c}, bitcast(${l}));`;return this.sumDupeIndices?m:f};return`\n ${s}\n\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getUpdatesCoordsFromFlatIndex(index);\n var flattenedIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexInside = i32(round(${t}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${Tc(this.type,!1)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${p(\"&result[flatIndex]\",\"updateValue\")};\n }\n }`}};function Yoe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let f=xe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),d=xe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=d.dtype,g=$o({backend:t,attrs:{shape:m,value:0,dtype:h}}),y=x.sizeFromShape(d.shape),b=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[y]}],C=new Fi(d.shape,i,f.shape.length,d.shape.length,c,m,h),w=t.runWebGPUProgram(C,[d,f],h,b,g),k=xe({inputs:{x:w},backend:t,attrs:{shape:a}});return t.disposeData(f.dataId),t.disposeData(d.dataId),t.disposeData(w.dataId),k}var YB={kernelName:Hn,backendName:\"webgpu\",kernelFunc:Yoe};var vx=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.cRank=e,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t=\"resRC\",e=\"resRC\";else{let n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],s=[],a=[];for(let i=0;i= 1.0) {\n setOutputAtIndex(index, getA(${t}));\n } else {\n setOutputAtIndex(index, getB(${t}));\n }\n }\n }\n `}};function Qoe(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new vx(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],ct(n.dtype,s.dtype))}var QB={kernelName:vs,backendName:\"webgpu\",kernelFunc:Qoe};var Zoe=Ge({opType:pe.SIGMOID}),ZB={kernelName:yo,backendName:\"webgpu\",kernelFunc:Zoe};var Joe=Ge({opType:pe.SIN}),JB={kernelName:Kn,backendName:\"webgpu\",kernelFunc:Joe};var ene=Ge({opType:pe.SINH}),eV={kernelName:ha,backendName:\"webgpu\",kernelFunc:ene};var HS=it({opType:ye.SUB,cpuKernelImpl:gL,supportsComplex:!0}),tV={kernelName:Io,backendName:\"webgpu\",kernelFunc:HS};function tne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=x.parseAxisParam([s],n.shape),i=em({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=I.expandShapeToKeepDim(i.shape,a),u=xe({inputs:{x:i},backend:t,attrs:{shape:p}}),c=HS({inputs:{a:n,b:u},backend:t}),l=VS({inputs:{x:c},backend:t}),m=rm({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),f=xe({inputs:{x:m},backend:t,attrs:{shape:p}}),d=GS({inputs:{a:l,b:f},backend:t});return t.disposeData(i.dataId),t.disposeData(u.dataId),t.disposeData(c.dataId),t.disposeData(l.dataId),t.disposeData(m.dataId),t.disposeData(f.dataId),d}var rV={kernelName:Xn,backendName:\"webgpu\",kernelFunc:tne};var rne=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;x.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((y,b)=>y*b),p=[[0,0]];p.push(...a);for(let y=1+s.length;yt.disposeData(y.dataId)),g},oV={kernelName:ks,backendName:\"webgpu\",kernelFunc:rne};var kx=class{constructor(e,t){this.variableNames=[\"A\"],this.workGroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>x.decodeString(m)):p,c=ne(n.shape,n.dtype,u),l=xL(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new kx(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var nV={kernelName:wo,backendName:\"webgpu\",kernelFunc:qS};function nne(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1;if(s.dtype===\"string\"){let R=t.bufferSync(n),A=t.bufferSync(s),D=x.decodeString(t.readSync(a.dataId)[0]),O=lL(R,A,i,m,c,u,p,l,D,f);return t.makeTensorInfo(i,O.dtype,O.values)}let d=[m/c,c],h=xe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?xe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):Lt({inputs:{x:s},backend:t}),y=g.dtype,b=t.makeTensorInfo([],y,x.makeZerosTypedArray(1,y)),C=xe({inputs:{x:a},backend:t,attrs:{shape:Array(d.length).fill(1)}}),w=qS({inputs:{x:C},backend:t,attrs:{reps:d}}),k=x.sizeFromShape([u,c]),_=[{type:\"int32\",data:[p]},{type:\"int32\",data:l},{type:\"int32\",data:[k]}];switch(u){case 0:break;case 1:{let R=new Fi([u,c],p,h.shape.length,g.shape.length,l,d,y,f);t.runWebGPUProgram(R,[g,h],y,_,w)}break;default:{let R=new Fi([u,c],p,h.shape.length,b.shape.length,l,d,y,f);t.runWebGPUProgram(R,[b,h],y,_,w)}{let R=new Fi([u,c],p,h.shape.length,g.shape.length,l,d,y);t.runWebGPUProgram(R,[g,h],y,_,w)}}let E=xe({inputs:{x:w},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(w.dataId),E}var sV={kernelName:ei,backendName:\"webgpu\",kernelFunc:nne};function sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let f=[...l];f[i]=m;let d=ms({inputs:{x:n},backend:t,attrs:{begin:c,size:f}});return c[i]+=m,d})}var aV={kernelName:Ts,backendName:\"webgpu\",kernelFunc:sne};var ane=Ge({opType:pe.SQRT}),iV={kernelName:bo,backendName:\"webgpu\",kernelFunc:ane};var uV={kernelName:ti,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Zo(t.shape,pe.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var ine=it({opType:ye.SQUARED_DIFFERENCE}),pV={kernelName:Co,backendName:\"webgpu\",kernelFunc:ine};var Tx=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]);let t=At(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let e=this.outputShape.length,t=\"\";if(e===1)t=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(\",\")}return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function une(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=xe({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=ms({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=xe({inputs:{x:E},backend:t,attrs:{shape:d}}),t.disposeData(E.dataId)}else if(t.shouldExecuteOnCPU([n])){let E=t.readSync(n.dataId),R=ne(n.shape,n.dtype,E),A=dL(f,R,w,b);k=t.makeTensorInfo(d,n.dtype,A.values)}else{let E=new Tx(f),R=[{type:\"int32\",data:b},{type:\"int32\",data:w}],A=t.runWebGPUProgram(E,[n],n.dtype,R);k=xe({inputs:{x:A},backend:t,attrs:{shape:d}}),t.disposeData(A.dataId)}return k}var cV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:une};function pne(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),f=t.readSync(l.dataId),[d,h]=hL(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],\"string\",d),t.makeTensorInfo(l.shape,\"int32\",h)]}var lV={kernelName:Ns,backendName:\"webgpu\",kernelFunc:pne};var cne=Ge({opType:pe.TANH}),mV={kernelName:Qn,backendName:\"webgpu\",kernelFunc:cne};var Nx=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32,\n dir : i32, inc : i32,`,this.shaderKey=\"swap\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced\n // above, Figure5(a) shows that element[1] is in the second half of\n // the group when group size is 2, but it is in the first half of\n // the group when group size is 4.\n let isFirstInPair = elemIdx % (2 * uniforms.inc) < uniforms.inc;\n var i = 0;\n if (isFirstInPair) {\n i = elemIdx;\n } else {\n i = elemIdx - uniforms.inc;\n }\n\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.inc;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.inc));\n }\n\n var x0 = f32(0.0);\n var x1 = f32(0.0);\n if (i0 < uniforms.inputSize) {\n x0 = getX(batch, i0);\n } else {\n x0 = uniforms.negativeInf;\n }\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = uniforms.negativeInf;\n }\n\n let reverse = elemIdx % (2 * uniforms.dir) >= uniforms.dir;\n let isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) {\n // Elements in opposite order of direction\n let iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}},_x=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _\n // (k=4), we only need to output the indices at positions |, the\n // indices at positions _ can be thrown away, see Figure5(b) After\n // Phase 2 (Merge phase) in the Bitonic Top K paper referenced\n // above.\n // For example, the paper shows we only need to output the orange\n // bars. The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back to\n // the previous sequence to find the corresponding value, we need\n // to double the index. When we double the index, we basically\n // interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k\n // position of each 2k positions by - elemIdx % k. E.g. for output\n // at index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n var i = 0;\n if (elemIdx < uniforms.k) {\n i = elemIdx;\n } else {\n i = elemIdx * 2 - elemIdx % uniforms.k;\n }\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.k;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.k));\n }\n\n let x0 = getX(batch, i0);\n var x1 = f32(0.0);\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = x0;\n }\n\n if (x0 >= x1) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}};function Mc(r,e){e!==null&&r.disposeData(e.dataId)}function fV(r){let e=1;for(;ed===null?[l,l]:[l,d],g=(k,_,E)=>{let R=h(),A=new Nx(E),O=[{type:\"int32\",data:[p]},{type:\"int32\",data:[d===null?1:0]},{type:\"float32\",data:[Number.NEGATIVE_INFINITY]},{type:\"int32\",data:[k]},{type:\"int32\",data:[_]}],M=d;d=t.runWebGPUProgram(A,R,\"int32\",O),Mc(t,M)};for(let k=1;k=1;E/=2)g(_,E,[c,f])}for(let k=f;k>m;k/=2){let _=h(),E=new _x([c,k/2]),A=[{type:\"int32\",data:[p]},{type:\"int32\",data:[d===null?1:0]},{type:\"int32\",data:[m]}],D=d;d=t.runWebGPUProgram(E,_,\"int32\",A),Mc(t,D);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,d.shape)}let y=d;d=ms({inputs:{x:d},backend:t,attrs:{begin:0,size:[c,s]}}),Mc(t,y);let b=WS({inputs:{x:l,indices:d},backend:t,attrs:{axis:1,batchDims:1}});Mc(t,l);let C=i.slice(0,-1);C.push(s),y=d,d=xe({inputs:{x:d},attrs:{shape:C},backend:t}),Mc(t,y);let w=b;return b=xe({inputs:{x:b},attrs:{shape:C},backend:t}),Mc(t,w),[b,d]}var dV={kernelName:Zn,backendName:\"webgpu\",kernelFunc:lne};var Ex=class{constructor(e){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : f32,\",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=\"transform\"}getUserCode(){return`\n fn mapCoord(outCoord : f32, len : f32) -> f32{\n var inCoord = outCoord;\n if(uniforms.fillModeId == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * f32(i32(f32(-inCoord / sz2))) +\n inCoord;\n }\n if (inCoord < -len) {\n inCoord = inCoord + sz2;\n } else {\n inCoord = -inCoord - 1.0;\n }\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n inCoord = inCoord - sz2 * f32(i32(f32(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord + len * (f32(i32(f32(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord - len * f32(i32(f32(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n }\n return outCoord;\n }\n fn readWithFillValue(batch : i32, coordY : i32, coordX : i32,\n channel : i32) -> f32 {\n var outputValue : f32;\n if (0 <= coordY && coordY < uniforms.imageShape[1] && 0 <= coordX && coordX < uniforms.imageShape[2]) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = uniforms.fillValue;\n }\n return outputValue;\n }\n\n ${ue(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var outputValue : f32;\n let batch = coords[0];\n let x = coords[2];\n let y = coords[1];\n let channel = coords[3];\n let xf = f32(x);\n let yf = f32(y);\n let a1 = getTransforms(batch, 0);\n let a2 = getTransforms(batch, 1);\n let a3 = getTransforms(batch, 2);\n let b1 = getTransforms(batch, 3);\n let b2 = getTransforms(batch, 4);\n let b3 = getTransforms(batch, 5);\n let c1 = getTransforms(batch, 6);\n let c2 = getTransforms(batch, 7);\n let projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = uniforms.fillValue;\n } else {\n let inX = (a1 * xf + a2 * yf + a3) / projection;\n let inY = (b1 * xf + b2 * yf + b3) / projection;\n let mapX = mapCoord(inX, f32(uniforms.imageShape[2]));\n let mapY = mapCoord(inY, f32(uniforms.imageShape[1]));\n\n if (uniforms.interpolationModeId == 1) {\n let coordY = i32(round(mapY));\n let coordX = i32(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n let yFloor = floor(mapY);\n let xFloor = floor(mapX);\n let yCeil = yFloor + 1.0;\n let xCeil = xFloor + 1.0;\n let valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, i32(yFloor), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yFloor), i32(xCeil), channel);\n let valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, i32(yCeil), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yCeil), i32(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};function mne(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Ex(g),b=a===\"nearest\"?1:2,C;switch(i){case\"constant\":C=1;break;case\"reflect\":C=2;break;case\"wrap\":C=3;break;case\"nearest\":C=4;break;default:C=1;break}let w=[{type:\"int32\",data:[b]},{type:\"int32\",data:[C]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(y,[n,s],\"float32\",w)}var hV={kernelName:Jn,backendName:\"webgpu\",kernelFunc:mne};function fne(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),d}var gV={kernelName:_s,backendName:\"webgpu\",kernelFunc:fne};var dne=[aM,CL,IL,wL,vL,kL,TL,EL,$L,AL,OL,ML,LL,uM,VL,WL,UL,GL,HL,qL,XL,YL,QL,ZL,tB,rB,oB,nB,sB,aB,nM,iB,cB,uB,pB,lB,mB,fB,dB,hB,gB,xB,iM,BL,yB,bB,CB,IB,wB,SB,vB,NL,kB,TB,_L,NB,_B,EB,JL,$B,RB,AB,FL,PB,OB,MB,LB,BB,VB,zB,DL,WB,UB,GB,HB,sM,qB,KB,jB,XB,YB,QB,ZB,JB,eV,RL,cV,lV,rV,oV,sV,aV,iV,uV,pV,tV,eB,mV,nV,dV,hV,SL,gV,FB];for(let r of dne)ya(r);var xV=\"4.0.0\",hne=\"4.0.0\",gne=\"4.0.0\",xne=\"4.0.0\",yne=\"4.0.0\",bne=\"0.0.1-alpha.14\",Cne={tfjs:xV,\"tfjs-core\":xV,\"tfjs-converter\":hne,\"tfjs-backend-cpu\":gne,\"tfjs-backend-webgl\":xne,\"tfjs-backend-wasm\":yne,\"tfjs-backend-webgpu\":bne};export{sn as Abs,Li as Acos,Bi as Acosh,xi as AdadeltaOptimizer,yi as AdagradOptimizer,bi as AdamOptimizer,Ci as AdamaxOptimizer,_r as Add,an as AddN,oa as All,na as Any,un as ArgMax,ja as ArgMin,Vi as Asin,zi as Asinh,Wi as Atan,sa as Atan2,Ui as Atanh,pn as AvgPool,ip as AvgPool3D,Fm as AvgPool3DGrad,Am as AvgPoolGrad,Gl as BackendWasm,cn as BatchMatMul,hs as BatchToSpaceND,up as Bincount,pp as BroadcastArgs,Tne as BroadcastTo,to as Cast,ro as Ceil,Ro as ClipByValue,aa as Complex,cp as ComplexAbs,gs as Concat,ln as Conv2D,lp as Conv2DBackpropFilter,mn as Conv2DBackpropInput,mp as Conv3D,Dm as Conv3DBackpropFilterV2,fp as Conv3DBackpropInputV2,fn as Cos,dn as Cosh,xn as CropAndResize,hn as Cumprod,gn as Cumsum,rn as DataStorage,dp as DenseBincount,yn as DepthToSpace,bn as DepthwiseConv2dNative,hp as DepthwiseConv2dNativeBackpropFilter,gp as DepthwiseConv2dNativeBackpropInput,xp as Diag,yp as Dilation2D,vb as Dilation2DBackpropFilter,Sb as Dilation2DBackpropInput,Cb as ENV,Xa as Einsum,In as Elu,Pm as EluGrad,Qc as Environment,oo as Equal,Gi as Erf,no as Exp,xs as ExpandDims,wn as Expm1,bp as FFT,ys as Fill,Sn as FlipLeftRight,so as Floor,vn as FloorDiv,Zi as FromPixels,kn as FusedBatchNorm,Do as FusedConv2D,Po as FusedDepthwiseConv2D,Fu as GPGPUContext,Tn as GatherNd,bs as GatherV2,bl as GraphModel,ao as Greater,io as GreaterEqual,Cp as IFFT,uo as Identity,Ya as Imag,Hi as IsFinite,qi as IsInf,ia as IsNan,Jr as KernelBackend,wp as LRN,Om as LRNGrad,Nn as LeakyRelu,po as Less,co as LessEqual,Ip as LinSpace,lo as Log,Ki as Log1p,Nne as LogSoftmax,_n as LogicalAnd,En as LogicalNot,ua as LogicalOr,g0 as LogicalXor,_ne as LowerBound,Si as MathBackendCPU,Ni as MathBackendWebGL,$n as Max,Rn as MaxPool,Sp as MaxPool3D,Lm as MaxPool3DGrad,Mm as MaxPoolGrad,vp as MaxPoolWithArgmax,mo as Maximum,An as Mean,Fn as Min,fo as Minimum,Dn as MirrorPad,ji as Mod,Ii as MomentumOptimizer,kp as Multinomial,ho as Multiply,Pn as Neg,On as NonMaxSuppressionV3,pa as NonMaxSuppressionV4,Mn as NonMaxSuppressionV5,go as NotEqual,Ub as OP_SCOPE_SUFFIX,ca as OneHot,Cs as OnesLike,wr as Optimizer,ns as OptimizerConstructors,Is as Pack,Ln as PadV2,Ene as Pool,Bn as Pow,Vn as Prelu,Ao as Prod,wi as RMSPropOptimizer,Tp as RaggedGather,Np as RaggedRange,_p as RaggedTensorToTensor,ws as Range,Fb as Rank,la as Real,Cn as RealDiv,ma as Reciprocal,Et as Reduction,zn as Relu,Gn as Relu6,Ss as Reshape,Un as ResizeBilinear,Vm as ResizeBilinearGrad,Wn as ResizeNearestNeighbor,Bm as ResizeNearestNeighborGrad,fa as Reverse,es as RotateWithOffset,da as Round,xo as Rsqrt,Us as SGDOptimizer,Hn as ScatterNd,Ep as SearchSorted,vs as Select,Xi as Selu,yo as Sigmoid,Yi as Sign,Kn as Sin,ha as Sinh,qn as Slice,Xn as Softmax,Qi as Softplus,ks as SpaceToBatchND,Qa as SparseFillEmptyRows,ga as SparseReshape,Za as SparseSegmentMean,Ja as SparseSegmentSum,ei as SparseToDense,Ts as SplitV,bo as Sqrt,ti as Square,Co as SquaredDifference,$s as Step,Yn as StridedSlice,Ns as StringNGrams,ri as StringSplit,oi as StringToHashBucketFast,Io as Sub,jn as Sum,xa as Tan,Qn as Tanh,ut as Tensor,je as TensorBuffer,wo as Tile,Zn as TopK,Jn as Transform,Mr as Transpose,$p as Unique,_s as Unpack,Rp as UnsortedSegmentSum,$ne as UpperBound,ba as Variable,Ai as WebGPUBackend,Es as ZerosLike,Fo as _FusedMatMul,Qt as abs,Vv as acos,zv as acosh,ge as add,Wv as addN,Uv as all,Gv as any,Hv as argMax,qv as argMin,Kv as asin,jv as asinh,Xv as atan,Yv as atan2,Qv as atanh,mf as avgPool,ek as avgPool3d,Bie as backend,I as backend_util,tk as basicLSTMCell,li as batchNorm,ok as batchNorm2d,nk as batchNorm3d,sk as batchNorm4d,ff as batchToSpaceND,df as bincount,_H as booleanMaskAsync,ak as broadcastArgs,Ls as broadcastTo,br as broadcast_util,Sv as browser,ne as buffer,qe as cast,ik as ceil,uk as clipByValue,zr as clone,Er as complex,gt as concat,pk as concat1d,ck as concat2d,lk as concat3d,mk as concat4d,fk as conv1d,mi as conv2d,dk as conv2dTranspose,hk as conv3d,xk as conv3dTranspose,Lne as copyRegisteredKernels,yk as cos,bk as cosh,hl as cosineWindow,Ck as cumprod,Ik as cumsum,Cr as customGrad,wk as denseBincount,sC as deprecationWarn,Sk as depthToSpace,Gp as depthwiseConv2d,YK as deregisterOp,ii as device_util,vk as diag,kk as dilation2d,_ie as disableDeprecationWarnings,Ft as dispose,Eie as disposeVariables,We as div,Tk as divNoNan,Nk as dot,BH as dropout,_k as einsum,xf as elu,Nie as enableDebugMode,Tie as enableProdMode,wC as enclosingPowerOfTwo,cr as engine,P as env,gf as equal,Ek as erf,Ak as euclideanNorm,Bo as exp,_a as expandDims,Fk as expm1,yf as eye,qp as fft,Bs as fill,Mie as findBackend,Lie as findBackendFactory,bf as floor,cf as floorDiv,pR as forceHalfFloat,SC as fused,Cf as gather,MH as gatherND,af as gather_util,Pie as getBackend,kb as getGradient,el as getKernel,zm as getKernelsForBackend,nte as getThreadsCount,Sw as gpgpu_util,GG as grad,HG as grads,cu as greater,If as greaterEqual,hu as ifft,ci as imag,zq as image,zH as inTopKAsync,va as io,Gf as irfft,Dk as isFinite,Pk as isInf,Ok as isNaN,So as keep,Bt as kernel_impls,wf as leakyRelu,Mk as less,Hp as lessEqual,Wq as linalg,Lk as linspace,U6 as loadGraphModel,G6 as loadGraphModelSync,Bk as localResponseNormalization,Ea as log,Sf as log1p,Vk as logSigmoid,zk as logSoftmax,Tf as logSumExp,lu as logicalAnd,Nf as logicalNot,_f as logicalOr,Wk as logicalXor,Uq as losses,Uk as lowerBound,Xe as matMul,Cv as math,Vs as max,$f as maxPool,Gk as maxPool3d,Hk as maxPoolWithArgmax,Rf as maximum,mu as mean,$ie as memory,qk as meshgrid,fl as min,Af as minimum,Kk as mirrorPad,jk as mod,Xk as moments,$H as movingAverage,oe as mul,Yk as multiRNNCell,Qk as multinomial,yr as neg,kC as nextFrame,pu as norm,Ff as notEqual,pl as oneHot,zs as ones,Zk as onesLike,T as op,Jk as outerProduct,Ws as pad,e1 as pad1d,t1 as pad2d,r1 as pad3d,o1 as pad4d,n1 as pool,Na as pow,Pf as prelu,ef as print,s1 as prod,Rie as profile,a1 as raggedGather,i1 as raggedRange,u1 as raggedTensorToTensor,p1 as rand,T1 as randomGamma,Vf as randomNormal,N1 as randomStandardNormal,zf as randomUniform,di as range,Die as ready,ka as real,_1 as reciprocal,pi as registerBackend,Pne as registerGradient,ya as registerKernel,XK as registerOp,hi as relu,Wf as relu6,Oie as removeBackend,z as reshape,vo as reverse,E1 as reverse1d,$1 as reverse2d,R1 as reverse3d,A1 as reverse4d,Kp as rfft,Uf as round,F1 as rsqrt,be as scalar,AH as scatterND,cl as scatter_util,dl as searchSorted,D1 as selu,P1 as separableConv2d,Pv as serialization,Fie as setBackend,Vie as setPlatform,ote as setThreadsCount,tte as setWasmPath,rte as setWasmPaths,MI as setWebGLContext,O1 as setdiff1dAsync,Ad as shared,Ms as sigmoid,M1 as sign,Vq as signal,L1 as sin,B1 as sinh,Ue as slice,V1 as slice1d,z1 as slice2d,W1 as slice3d,U1 as slice4d,et as slice_util,G1 as softmax,kf as softplus,Df as spaceToBatchND,Gq as sparse,PH as sparseToDense,Bq as spectral,$a as split,Rr as sqrt,Zt as square,Hf as squaredDifference,jp as squeeze,Ir as stack,qf as step,H1 as stridedSlice,Hq as string,ke as sub,tt as sum,Ca as sumOutType,q1 as tan,ml as tanh,nr as tensor,mr as tensor1d,gi as tensor2d,sf as tensor3d,K1 as tensor4d,j1 as tensor5d,X1 as tensor6d,z0 as tensor_util,Bv as test_util,Ne as tidy,fi as tile,Aie as time,Y1 as topk,pMe as train,Wp as transpose,Q1 as truncatedNormal,Z1 as unique,Mne as unregisterGradient,One as unregisterKernel,J1 as unsortedSegmentSum,ko as unstack,ct as upcastType,eT as upperBound,x as util,qG as valueAndGrad,KG as valueAndGrads,tT as variable,dC as variableGrads,Cne as version,q6 as version_converter,YW as version_core,Ij as version_cpu,ste as version_wasm,gY as version_webgl,R9e as webgl,ic as webgl_util,pS as webgpu_util,os as where,jf as whereAsync,Wr as zeros,Gt as zerosLike};\n", "import type { Config } from '../exports';\n\n/**\n * Simple helper functions used accross codebase\n */\n\n// helper function: wrapper around console output\nexport function log(...msg): void {\n const dt = new Date();\n const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;\n if (msg) console.log(ts, 'Human:', ...msg); // eslint-disable-line no-console\n}\n\n// helper function: join two paths\nexport function join(folder: string, file: string): string {\n const separator = folder.endsWith('/') ? '' : '/';\n const skipJoin = file.startsWith('.') || file.startsWith('/') || file.startsWith('http:') || file.startsWith('https:') || file.startsWith('file:');\n const path = skipJoin ? `${file}` : `${folder}${separator}${file}`;\n if (!path.toLocaleLowerCase().includes('.json')) throw new Error(`modelpath error: expecting json file: ${path}`);\n return path;\n}\n\n// helper function: gets elapsed time on both browser and nodejs\nexport const now = () => {\n if (typeof performance !== 'undefined') return performance.now();\n return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());\n};\n\n// helper function: checks current config validity\nexport function validate(defaults: Partial, config: Partial, parent = 'config', msgs: { reason: string, where: string, expected?: string }[] = []) {\n for (const key of Object.keys(config)) {\n if (typeof config[key] === 'object') {\n validate(defaults[key], config[key], key, msgs);\n } else {\n const defined = defaults && (typeof defaults[key] !== 'undefined');\n if (!defined) msgs.push({ reason: 'unknown property', where: `${parent}.${key} = ${config[key]}` });\n const same = defaults && typeof defaults[key] === typeof config[key];\n if (defined && !same) msgs.push({ reason: 'property type mismatch', where: `${parent}.${key} = ${config[key]}`, expected: typeof defaults[key] });\n }\n // ok = ok && defined && same;\n }\n if (config.debug && parent === 'config' && msgs.length > 0) log('invalid configuration', msgs);\n return msgs;\n}\n\n// helper function: perform deep merge of multiple objects so it allows full inheritance with overrides\nexport function mergeDeep(...objects) {\n const isObject = (obj) => obj && typeof obj === 'object';\n return objects.reduce((prev, obj) => {\n Object.keys(obj || {}).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n if (Array.isArray(pVal) && Array.isArray(oVal)) prev[key] = pVal.concat(...oVal);\n else if (isObject(pVal) && isObject(oVal)) prev[key] = mergeDeep(pVal, oVal);\n else prev[key] = oVal;\n });\n return prev;\n }, {});\n}\n\n// helper function: return min and max from input array\nexport const minmax = (data: number[]) => data.reduce((acc: number[], val) => {\n acc[0] = (acc[0] === undefined || val < acc[0]) ? val : acc[0];\n acc[1] = (acc[1] === undefined || val > acc[1]) ? val : acc[1];\n return acc;\n}, []);\n\n// helper function: async wait\nexport async function wait(time: number) {\n const waiting = new Promise((resolve) => { setTimeout(() => resolve(true), time); });\n await waiting;\n}\n", "/* eslint-disable no-multi-spaces */\n\n/** Possible TensorFlow backends */\nexport type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu';\n\n/** Possible values for `human.warmup` */\nexport type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body';\n\n/** Possible segmentation model behavior */\nexport type SegmentationEnum = 'default' | 'alpha' | 'foreground' | 'state'\n\n/** Generic config type inherited by all module types */\nexport interface GenericConfig {\n /** is module enabled? */\n enabled: boolean,\n /** path to model json file (relative to `modelBasePath` */\n modelPath: string,\n /** how many max frames to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipFrames: number,\n /** how many max milliseconds to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipTime: number,\n}\n\n/** Detector part of face configuration */\nexport interface FaceDetectorConfig extends GenericConfig {\n /** is face rotation correction performed after detecting face?\n * used to correctly analyze faces under high angles\n */\n rotation: boolean,\n /** maximum number of detected faces */\n maxDetected: number,\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: true,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n iouThreshold: 0.1,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-full.json',\n },\n },\n object: {\n enabled: false,\n modelPath: 'centernet.json',\n minConfidence: 0.2,\n iouThreshold: 0.4,\n maxDetected: 10,\n skipFrames: 99,\n skipTime: 2000,\n },\n segmentation: {\n enabled: false,\n modelPath: 'rvm.json',\n ratio: 0.5,\n mode: 'default',\n },\n};\n\nexport { config as defaults };\n", "export const vertexIdentity = `\n precision highp float;\n attribute vec2 pos;\n attribute vec2 uv;\n varying vec2 vUv;\n uniform float flipY;\n void main(void) {\n vUv = uv;\n gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);\n }\n`;\n\nexport const fragmentIdentity = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n void main(void) {\n gl_FragColor = texture2D(texture, vUv);\n }\n`;\n\nexport const colorMatrixWithAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];\n gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];\n }\n`;\n\nexport const colorMatrixWithoutAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];\n gl_FragColor.a = c.a;\n }\n`;\n\nexport const pixelate = `\n precision highp float;\n varying vec2 vUv;\n uniform vec2 size;\n uniform sampler2D texture;\n vec2 pixelate(vec2 coord, vec2 size) {\n return floor( coord / size ) * size;\n }\n void main(void) {\n gl_FragColor = vec4(0.0);\n vec2 coord = pixelate(vUv, size);\n gl_FragColor += texture2D(texture, coord);\n }\n`;\n\nexport const blur = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n void main(void) {\n gl_FragColor = vec4(0.0);\n gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;\n gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv )*0.159576912161;\n gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;\n }\n`;\n\nexport const convolution = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n uniform float m[9];\n void main(void) {\n vec4 c11 = texture2D(texture, vUv - px); // top left\n vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y)); // top center\n vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y)); // top right\n vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) ); // mid left\n vec4 c22 = texture2D(texture, vUv); // mid center\n vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) ); // mid right\n vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) ); // bottom left\n vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) ); // bottom center\n vec4 c33 = texture2D(texture, vUv + px ); // bottom right\n gl_FragColor = \n c11 * m[0] + c12 * m[1] + c22 * m[2] +\n c21 * m[3] + c22 * m[4] + c23 * m[5] +\n c31 * m[6] + c32 * m[7] + c33 * m[8];\n gl_FragColor.a = c22.a;\n }\n`;\n", "/**\n * Image Filters in WebGL algoritm implementation\n * Based on: [WebGLImageFilter](https://github.com/phoboslab/WebGLImageFilter)\n */\n\n/* eslint-disable func-names */\n\nimport * as shaders from './imagefxshaders';\nimport { canvas } from './image';\nimport { log } from '../util/util';\n\nconst collect = (source, prefix: string, collection) => {\n const r = new RegExp('\\\\b' + prefix + ' \\\\w+ (\\\\w+)', 'ig');\n source.replace(r, (match, name) => {\n collection[name] = 0;\n return match;\n });\n};\n\nclass GLProgram {\n uniform = {};\n attribute = {};\n gl: WebGLRenderingContext;\n id: WebGLProgram;\n\n constructor(gl, vertexSource, fragmentSource) {\n this.gl = gl;\n const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER);\n const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER);\n this.id = this.gl.createProgram() as WebGLProgram;\n if (!vertexShader || !fragmentShader) return;\n if (!this.id) {\n log('filter: could not create webgl program');\n return;\n }\n this.gl.attachShader(this.id, vertexShader);\n this.gl.attachShader(this.id, fragmentShader);\n this.gl.linkProgram(this.id);\n if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) {\n log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || 'unknown'}`);\n return;\n }\n this.gl.useProgram(this.id);\n collect(vertexSource, 'attribute', this.attribute); // Collect attributes\n for (const a in this.attribute) this.attribute[a] = this.gl.getAttribLocation(this.id, a);\n collect(vertexSource, 'uniform', this.uniform); // Collect uniforms\n collect(fragmentSource, 'uniform', this.uniform);\n for (const u in this.uniform) this.uniform[u] = this.gl.getUniformLocation(this.id, u);\n }\n\n compile = (source, type): WebGLShader | null => {\n const shader = this.gl.createShader(type);\n if (!shader) {\n log('filter: could not create shader');\n return null;\n }\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || 'unknown'}`);\n return null;\n }\n return shader;\n };\n}\n\n// function that is instantiated as class so it has private this members\n/**\n * @class GLImageFilter\n * @property {function} reset reset current filter chain\n * @property {function} add add specified filter to filter chain\n * @property {function} apply execute filter chain and draw result\n * @property {function} draw just draw input to result\n */\n\nexport function GLImageFilter() {\n let drawCount = 0;\n let sourceTexture: WebGLTexture | null = null;\n let lastInChain = false;\n let currentFramebufferIndex = -1;\n let tempFramebuffers: [null, null] | [{ fbo: WebGLFramebuffer | null, texture: WebGLTexture | null }] = [null, null];\n let filterChain: Record[] = [];\n let vertexBuffer: WebGLBuffer | null = null;\n let currentProgram: GLProgram | null = null;\n const fxcanvas = canvas(100, 100) as HTMLCanvasElement;\n const shaderProgramCache = { }; // key is the shader program source, value is the compiled program\n const DRAW = { INTERMEDIATE: 1 };\n const gl = fxcanvas.getContext('webgl') as WebGLRenderingContext;\n if (!gl) {\n log('filter: cannot get webgl context');\n return;\n }\n // @ts-ignore used for sanity checks outside of imagefx\n this.gl = gl;\n\n function resize(width, height) {\n if (width === fxcanvas.width && height === fxcanvas.height) return; // Same width/height? Nothing to do here\n fxcanvas.width = width;\n fxcanvas.height = height;\n if (!vertexBuffer) { // Create the context if we don't have it yet\n const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); // Create the vertex buffer for the two triangles [x, y, u, v] * 6\n vertexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n }\n gl.viewport(0, 0, fxcanvas.width, fxcanvas.height);\n tempFramebuffers = [null, null]; // Delete old temp framebuffers\n }\n\n function createFramebufferTexture(width, height) {\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const renderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return { fbo, texture };\n }\n\n function getTempFramebuffer(index): { fbo: WebGLFramebuffer | null, texture: WebGLTexture | null } {\n tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);\n return tempFramebuffers[index] as { fbo: WebGLFramebuffer, texture: WebGLTexture };\n }\n\n function draw(flags = 0) {\n if (!currentProgram) return;\n let source: WebGLTexture | null = null;\n let target: WebGLFramebuffer | null = null;\n let flipY = false;\n if (drawCount === 0) source = sourceTexture; // First draw call - use the source texture\n else source = getTempFramebuffer(currentFramebufferIndex).texture || null; // All following draw calls use the temp buffer last drawn to\n drawCount++;\n if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { // Last filter in our chain - draw directly to the WebGL Canvas. We may also have to flip the image vertically now\n target = null;\n flipY = drawCount % 2 === 0;\n } else {\n currentFramebufferIndex = (currentFramebufferIndex + 1) % 2;\n target = getTempFramebuffer(currentFramebufferIndex).fbo || null; // Intermediate draw call - get a temp buffer to draw to\n }\n gl.bindTexture(gl.TEXTURE_2D, source); // Bind the source and target and draw the two triangles\n gl.bindFramebuffer(gl.FRAMEBUFFER, target);\n gl.uniform1f(currentProgram.uniform['flipY'], (flipY ? -1 : 1));\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n function compileShader(fragmentSource): GLProgram | null {\n if (shaderProgramCache[fragmentSource]) {\n currentProgram = shaderProgramCache[fragmentSource];\n gl.useProgram((currentProgram ? currentProgram.id : null) || null);\n return currentProgram;\n }\n currentProgram = new GLProgram(gl, shaders.vertexIdentity, fragmentSource);\n if (!currentProgram) {\n log('filter: could not get webgl program');\n return null;\n }\n const floatSize = Float32Array.BYTES_PER_ELEMENT;\n const vertSize = 4 * floatSize;\n gl.enableVertexAttribArray(currentProgram.attribute['pos']);\n gl.vertexAttribPointer(currentProgram.attribute['pos'], 2, gl.FLOAT, false, vertSize, 0 * floatSize);\n gl.enableVertexAttribArray(currentProgram.attribute['uv']);\n gl.vertexAttribPointer(currentProgram.attribute['uv'], 2, gl.FLOAT, false, vertSize, 2 * floatSize);\n shaderProgramCache[fragmentSource] = currentProgram;\n return currentProgram;\n }\n\n const filter = {\n colorMatrix: (matrix: number[]) => { // general color matrix filter\n const m = new Float32Array(matrix);\n m[4] /= 255;\n m[9] /= 255;\n m[14] /= 255;\n m[19] /= 255;\n const shader = (m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0) // Can we ignore the alpha value? Makes things a bit faster.\n ? shaders.colorMatrixWithoutAlpha\n : shaders.colorMatrixWithAlpha;\n const program = compileShader(shader);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n draw();\n },\n\n brightness: (brightness: number) => {\n const b = (brightness || 0) + 1;\n filter.colorMatrix([\n b, 0, 0, 0, 0,\n 0, b, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n saturation: (amount: number) => {\n const x = (amount || 0) * 2 / 3 + 1;\n const y = ((x - 1) * -0.5);\n filter.colorMatrix([\n x, y, y, 0, 0,\n y, x, y, 0, 0,\n y, y, x, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturate: () => {\n filter.saturation(-1);\n },\n\n contrast: (amount: number) => {\n const v = (amount || 0) + 1;\n const o = -128 * (v - 1);\n filter.colorMatrix([\n v, 0, 0, 0, o,\n 0, v, 0, 0, o,\n 0, 0, v, 0, o,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n negative: () => {\n filter.contrast(-2);\n },\n\n hue: (rotation: number) => {\n rotation = (rotation || 0) / 180 * Math.PI;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const lumR = 0.213;\n const lumG = 0.715;\n const lumB = 0.072;\n filter.colorMatrix([\n lumR + cos * (1 - lumR) + sin * (-lumR), lumG + cos * (-lumG) + sin * (-lumG), lumB + cos * (-lumB) + sin * (1 - lumB), 0, 0,\n lumR + cos * (-lumR) + sin * (0.143), lumG + cos * (1 - lumG) + sin * (0.140), lumB + cos * (-lumB) + sin * (-0.283), 0, 0,\n lumR + cos * (-lumR) + sin * (-(1 - lumR)), lumG + cos * (-lumG) + sin * (lumG), lumB + cos * (1 - lumB) + sin * (lumB), 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturateLuminance: () => {\n filter.colorMatrix([\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n sepia: () => {\n filter.colorMatrix([\n 0.393, 0.7689999, 0.18899999, 0, 0,\n 0.349, 0.6859999, 0.16799999, 0, 0,\n 0.272, 0.5339999, 0.13099999, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n brownie: () => {\n filter.colorMatrix([\n 0.5997023498159715, 0.34553243048391263, -0.2708298674538042, 0, 47.43192855600873,\n -0.037703249837783157, 0.8609577587992641, 0.15059552388459913, 0, -36.96841498319127,\n 0.24113635128153335, -0.07441037908422492, 0.44972182064877153, 0, -7.562075277591283,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n vintagePinhole: () => {\n filter.colorMatrix([\n 0.6279345635605994, 0.3202183420819367, -0.03965408211312453, 0, 9.651285835294123,\n 0.02578397704808868, 0.6441188644374771, 0.03259127616149294, 0, 7.462829176470591,\n 0.0466055556782719, -0.0851232987247891, 0.5241648018700465, 0, 5.159190588235296,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n kodachrome: () => {\n filter.colorMatrix([\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n technicolor: () => {\n filter.colorMatrix([\n 1.9125277891456083, -0.8545344976951645, -0.09155508482755585, 0, 11.793603434377337,\n -0.3087833385928097, 1.7658908555458428, -0.10601743074722245, 0, -70.35205161461398,\n -0.231103377548616, -0.7501899197440212, 1.847597816108189, 0, 30.950940869491138,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n polaroid: () => {\n filter.colorMatrix([\n 1.438, -0.062, -0.062, 0, 0,\n -0.122, 1.378, -0.122, 0, 0,\n -0.016, -0.016, 1.483, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n shiftToBGR: () => {\n filter.colorMatrix([\n 0, 0, 1, 0, 0,\n 0, 1, 0, 0, 0,\n 1, 0, 0, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n convolution: (matrix: number[]) => { // general convolution Filter\n const m = new Float32Array(matrix);\n const pixelSizeX = 1 / fxcanvas.width;\n const pixelSizeY = 1 / fxcanvas.height;\n const program = compileShader(shaders.convolution);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n gl.uniform2f(program.uniform['px'], pixelSizeX, pixelSizeY);\n draw();\n },\n\n detectEdges: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, 1, 0,\n 1, -4, 1,\n 0, 1, 0,\n ]);\n },\n\n sobelX: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, 0, 1,\n -2, 0, 2,\n -1, 0, 1,\n ]);\n },\n\n sobelY: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, -2, -1,\n 0, 0, 0,\n 1, 2, 1,\n ]);\n },\n\n sharpen: (amount) => {\n const a = amount || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, -1 * a, 0,\n -1 * a, 1 + 4 * a, -1 * a,\n 0, -1 * a, 0,\n ]);\n },\n\n emboss: (size: number) => {\n const s = size || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n -2 * s, -1 * s, 0,\n -1 * s, 1, 1 * s,\n 0, 1 * s, 2 * s,\n ]);\n },\n\n blur: (size: number) => {\n const blurSizeX = (size / 7) / fxcanvas.width;\n const blurSizeY = (size / 7) / fxcanvas.height;\n const program = compileShader(shaders.blur);\n if (!program) return;\n // Vertical\n gl.uniform2f(program.uniform['px'], 0, blurSizeY);\n draw(DRAW.INTERMEDIATE);\n // Horizontal\n gl.uniform2f(program.uniform['px'], blurSizeX, 0);\n draw();\n },\n\n pixelate: (size: number) => {\n const blurSizeX = (size) / fxcanvas.width;\n const blurSizeY = (size) / fxcanvas.height;\n const program = compileShader(shaders.pixelate);\n if (!program) return;\n gl.uniform2f(program.uniform['size'], blurSizeX, blurSizeY);\n draw();\n },\n };\n\n // @ts-ignore this\n this.add = function (name) {\n const args = Array.prototype.slice.call(arguments, 1); // eslint-disable-line prefer-rest-params\n const func = filter[name];\n filterChain.push({ func, args });\n };\n\n // @ts-ignore this\n this.reset = function () {\n filterChain = [];\n };\n\n // @ts-ignore this\n this.get = function () {\n return filterChain;\n };\n\n // @ts-ignore this\n this.apply = function (image) {\n resize(image.width, image.height);\n drawCount = 0;\n if (!sourceTexture) sourceTexture = gl.createTexture(); // Create the texture for the input image if we haven't yet\n gl.bindTexture(gl.TEXTURE_2D, sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n for (let i = 0; i < filterChain.length; i++) {\n lastInChain = (i === filterChain.length - 1);\n const f = filterChain[i];\n // @ts-ignore function assigment\n f.func.apply(this, f.args || []);\n }\n return fxcanvas;\n };\n\n // @ts-ignore this\n this.draw = function (image) {\n this.add('brightness', 0);\n return this.apply(image);\n };\n}\n", "/**\n * Image enhancements\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from '../exports';\n\nexport async function histogramEqualization(inputImage: Tensor): Promise {\n const squeeze = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage;\n const rgb = tf.split(squeeze, 3, 2);\n const min: Tensor[] = [tf.min(rgb[0]), tf.min(rgb[1]), tf.min(rgb[2])]; // minimum pixel value per channel T[]\n const max: Tensor[] = [tf.max(rgb[0]), tf.max(rgb[1]), tf.max(rgb[2])]; // maximum pixel value per channel T[]\n // const absMin = await Promise.all(min.map((channel) => channel.data())); // minimum pixel value per channel A[]\n // const minValue = Math.min(absMax[0][0], absMin[1][0], absMin[2][0]);\n const absMax = await Promise.all(max.map((channel) => channel.data())); // maximum pixel value per channel A[]\n const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]);\n const maxRange = maxValue > 1 ? 255 : 1;\n const factor = maxRange / maxValue;\n let final: Tensor;\n if (factor > 1) {\n const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values\n const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges\n // const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between\n const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];\n const stack = tf.stack([enh[0], enh[1], enh[2]], 2);\n final = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);\n tf.dispose([...sub, ...range, ...enh]);\n } else {\n final = tf.expandDims(squeeze, 0);\n }\n tf.dispose([...rgb, ...min, ...max, rgb, squeeze, inputImage]);\n return final;\n}\n", "/**\n * Image Processing algorithm implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as fxImage from './imagefx';\nimport type { Input, AnyCanvas, Config } from '../exports';\nimport type { Tensor, Tensor3D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport * as enhance from './enhance';\n\nconst maxSize = 3840;\n// internal temp canvases\nlet inCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet outCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet tmpCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\n// @ts-ignore // imagefx is js module that should be converted to a class\nlet fx: fxImage.GLImageFilter | null; // instance of imagefx\n\nconst last: { inputSum: number, cacheDiff: number, sumMethod: number, inputTensor: undefined | Tensor } = {\n inputSum: 0,\n cacheDiff: 1,\n sumMethod: 0,\n inputTensor: undefined,\n};\n\nexport function reset() {\n last.inputSum = 0;\n last.cacheDiff = 1;\n last.sumMethod = 0;\n last.inputTensor = undefined;\n}\n\nexport function canvas(width: number, height: number): AnyCanvas {\n let c: AnyCanvas;\n if (env.browser) { // browser defines canvas object\n if (env.worker) { // if runing in web worker use OffscreenCanvas\n if (typeof OffscreenCanvas === 'undefined') throw new Error('canvas error: attempted to run in web worker but OffscreenCanvas is not supported');\n c = new OffscreenCanvas(width, height);\n } else { // otherwise use DOM canvas\n if (typeof document === 'undefined') throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n }\n } else { // if not running in browser, there is no \"default\" canvas object, so we need monkey patch or fail\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n // else throw new Error('canvas error: attempted to use canvas in nodejs without canvas support installed');\n }\n // @ts-ignore its either defined or we already threw an error\n return c;\n}\n\n// helper function to copy canvas from input to output\nexport function copy(input: AnyCanvas, output?: AnyCanvas) {\n const outputCanvas = output || canvas(input.width, input.height);\n const ctx = outputCanvas.getContext('2d') as CanvasRenderingContext2D;\n ctx.drawImage(input, 0, 0);\n return outputCanvas;\n}\n\n// process input image and return tensor\n// input can be tensor, imagedata, htmlimageelement, htmlvideoelement\n// input is resized and run through imagefx filter\nexport async function process(input: Input, config: Config, getTensor: boolean = true): Promise<{ tensor: Tensor4D | null, canvas: AnyCanvas | null }> {\n if (!input) {\n // throw new Error('input is missing');\n if (config.debug) log('input error: input is missing');\n return { tensor: null, canvas: null }; // video may become temporarily unavailable due to onresize\n }\n // sanity checks since different browsers do not implement all dom elements\n if (\n !(input instanceof tf.Tensor)\n && !(typeof Image !== 'undefined' && input instanceof Image)\n && !(typeof env.Canvas !== 'undefined' && input instanceof env.Canvas)\n && !(typeof globalThis.Canvas !== 'undefined' && input instanceof globalThis.Canvas)\n && !(typeof ImageData !== 'undefined' && input instanceof ImageData)\n && !(typeof ImageBitmap !== 'undefined' && input instanceof ImageBitmap)\n && !(typeof HTMLImageElement !== 'undefined' && input instanceof HTMLImageElement)\n && !(typeof HTMLMediaElement !== 'undefined' && input instanceof HTMLMediaElement)\n && !(typeof HTMLVideoElement !== 'undefined' && input instanceof HTMLVideoElement)\n && !(typeof HTMLCanvasElement !== 'undefined' && input instanceof HTMLCanvasElement)\n && !(typeof OffscreenCanvas !== 'undefined' && input instanceof OffscreenCanvas)\n ) {\n throw new Error('input error: type is not recognized');\n }\n if (input instanceof tf.Tensor) { // if input is tensor use as-is without filters but correct shape as needed\n let tensor: Tensor | null = null;\n if (input['isDisposedInternal']) throw new Error('input error: attempted to use tensor but it is disposed');\n if (!(input as Tensor).shape) throw new Error('input error: attempted to use tensor without a shape');\n if ((input as Tensor).shape.length === 3) { // [height, width, 3 || 4]\n if ((input as Tensor).shape[2] === 3) { // [height, width, 3] so add batch\n tensor = tf.expandDims(input, 0);\n } else if ((input as Tensor).shape[2] === 4) { // [height, width, 4] so strip alpha and add batch\n const rgb = tf.slice3d(input as Tensor3D, [0, 0, 0], [-1, -1, 3]);\n tensor = tf.expandDims(rgb, 0);\n tf.dispose(rgb);\n }\n } else if ((input as Tensor).shape.length === 4) { // [1, width, height, 3 || 4]\n if ((input as Tensor).shape[3] === 3) { // [1, width, height, 3] just clone\n tensor = tf.clone(input);\n } else if ((input as Tensor).shape[3] === 4) { // [1, width, height, 4] so strip alpha\n tensor = tf.slice4d(input as Tensor4D, [0, 0, 0, 0], [-1, -1, -1, 3]);\n }\n }\n // at the end shape must be [1, height, width, 3]\n if (tensor == null || tensor.shape.length !== 4 || tensor.shape[0] !== 1 || tensor.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${((input as Tensor).shape).toString()}`);\n if ((tensor).dtype === 'int32') {\n const cast = tf.cast(tensor, 'float32');\n tf.dispose(tensor);\n tensor = cast;\n }\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n }\n // check if resizing will be needed\n if (typeof input['readyState'] !== 'undefined' && (input as HTMLMediaElement).readyState <= 2) {\n if (config.debug) log('input stream is not ready');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n const originalWidth: number = input['naturalWidth'] || input['videoWidth'] || input['width'] || (input['shape'] && (input['shape'][1] > 0));\n const originalHeight: number = input['naturalHeight'] || input['videoHeight'] || input['height'] || (input['shape'] && (input['shape'][2] > 0));\n if (!originalWidth || !originalHeight) {\n if (config.debug) log('cannot determine input dimensions');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n let targetWidth: number = originalWidth;\n let targetHeight: number = originalHeight;\n if (targetWidth > maxSize) {\n targetWidth = maxSize;\n targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth);\n }\n if (targetHeight > maxSize) {\n targetHeight = maxSize;\n targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight);\n }\n\n // create our canvas and resize it if needed\n if ((config.filter?.width || 0) > 0) targetWidth = config.filter.width as number;\n else if ((config.filter?.height || 0) > 0) targetWidth = originalWidth * ((config.filter.height || 0) / originalHeight);\n if ((config.filter.height || 0) > 0) targetHeight = config.filter.height as number;\n else if ((config.filter.width || 0) > 0) targetHeight = originalHeight * ((config.filter.width || 0) / originalWidth);\n if (!targetWidth || !targetHeight) throw new Error('input error: cannot determine dimension');\n if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) inCanvas = canvas(targetWidth, targetHeight);\n\n // draw input to our canvas\n const inCtx = inCanvas.getContext('2d') as CanvasRenderingContext2D;\n if ((typeof ImageData !== 'undefined') && (input instanceof ImageData)) {\n inCtx.putImageData(input, 0, 0);\n } else {\n if (config.filter.flip && typeof inCtx.translate !== 'undefined') {\n inCtx.translate(originalWidth, 0);\n inCtx.scale(-1, 1);\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults\n } else {\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n }\n }\n\n if (!outCanvas || (inCanvas.width !== outCanvas.width) || (inCanvas.height !== outCanvas.height)) outCanvas = canvas(inCanvas.width, inCanvas.height); // init output canvas\n\n // imagefx transforms using gl from input canvas to output canvas\n if (config.filter.enabled && env.webgl.supported) {\n if (!fx) fx = env.browser ? new fxImage.GLImageFilter() : null; // && (typeof document !== 'undefined')\n env.filter = !!fx;\n if (!fx?.add) {\n if (config.debug) log('input process error: cannot initialize filters');\n env.webgl.supported = false;\n config.filter.enabled = false;\n copy(inCanvas, outCanvas); // filter failed to initialize\n // return { tensor: null, canvas: inCanvas };\n } else {\n fx.reset();\n if (config.filter.brightness !== 0) fx.add('brightness', config.filter.brightness);\n if (config.filter.contrast !== 0) fx.add('contrast', config.filter.contrast);\n if (config.filter.sharpness !== 0) fx.add('sharpen', config.filter.sharpness);\n if (config.filter.blur !== 0) fx.add('blur', config.filter.blur);\n if (config.filter.saturation !== 0) fx.add('saturation', config.filter.saturation);\n if (config.filter.hue !== 0) fx.add('hue', config.filter.hue);\n if (config.filter.negative) fx.add('negative');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.vintage) fx.add('brownie');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.kodachrome) fx.add('kodachrome');\n if (config.filter.technicolor) fx.add('technicolor');\n if (config.filter.polaroid) fx.add('polaroid');\n if (config.filter.pixelate !== 0) fx.add('pixelate', config.filter.pixelate);\n if (fx.get()?.length > 1) outCanvas = fx.apply(inCanvas);\n else outCanvas = fx.draw(inCanvas);\n }\n } else {\n copy(inCanvas, outCanvas); // if no filters applied, output canvas is input canvas\n if (fx) fx = null;\n env.filter = !!fx;\n }\n\n if (!getTensor) return { tensor: null, canvas: outCanvas }; // just canvas was requested\n if (!outCanvas) throw new Error('canvas error: cannot create output');\n\n // create tensor from image unless input was a tensor already\n let pixels;\n let depth = 3;\n if ((typeof ImageData !== 'undefined' && input instanceof ImageData) || ((input as ImageData).data && (input as ImageData).width && (input as ImageData).height)) { // if input is imagedata, just use it\n if (env.browser && tf.browser) {\n pixels = tf.browser ? tf.browser.fromPixels(input as ImageData) : null;\n } else {\n depth = (input as ImageData).data.length / (input as ImageData).height / (input as ImageData).width;\n // const arr = Uint8Array.from(input['data']);\n const arr = new Uint8Array((input as ImageData).data.buffer);\n pixels = tf.tensor(arr, [(input as ImageData).height, (input as ImageData).width, depth], 'int32');\n }\n } else {\n if (!tmpCanvas || (outCanvas.width !== tmpCanvas.width) || (outCanvas.height !== tmpCanvas.height)) tmpCanvas = canvas(outCanvas.width, outCanvas.height); // init output canvas\n if (tf.browser && env.browser) {\n if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') {\n pixels = tf.browser.fromPixels(outCanvas as HTMLCanvasElement); // safe to reuse since both backend and context are gl based\n } else {\n tmpCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n pixels = tf.browser.fromPixels(tmpCanvas as HTMLCanvasElement);\n }\n } else {\n const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D;\n const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);\n depth = tempData.data.length / targetWidth / targetHeight;\n const arr = new Uint8Array(tempData.data.buffer);\n pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]);\n }\n }\n if (depth === 4) { // rgba to rgb\n const rgb = tf.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); // strip alpha channel\n tf.dispose(pixels);\n pixels = rgb;\n }\n if (!pixels) throw new Error('input error: cannot create tensor');\n const casted: Tensor = tf.cast(pixels, 'float32');\n const tensor: Tensor = config.filter.equalization ? await enhance.histogramEqualization(casted) : tf.expandDims(casted, 0);\n tf.dispose([pixels, casted]);\n\n if (config.filter.autoBrightness) {\n const max = tf.max(tensor);\n const maxVal = await max.data();\n config.filter.brightness = maxVal[0] > 1 ? (1 - maxVal[0] / 255) : (1 - maxVal[0]);\n tf.dispose(max);\n }\n\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n}\n\n/*\nconst checksum = async (input: Tensor): Promise => { // use tf sum or js based sum loop depending on which is faster\n const resizeFact = 48;\n const reduced: Tensor = tf.image.resizeBilinear(input, [Math.trunc((input.shape[1] || 1) / resizeFact), Math.trunc((input.shape[2] || 1) / resizeFact)]);\n const tfSum = async (): Promise => {\n const sumT = tf.sum(reduced);\n const sum0 = await sumT.data();\n tf.dispose(sumT);\n return sum0[0];\n };\n const jsSum = async (): Promise => {\n const reducedData = await reduced.data(); // raw image rgb array\n let sum0 = 0;\n for (let i = 0; i < reducedData.length / 3; i++) sum0 += reducedData[3 * i + 2]; // look only at green value of each pixel\n return sum0;\n };\n if (last.sumMethod === 0) {\n const t0 = now();\n await jsSum();\n const t1 = now();\n await tfSum();\n const t2 = now();\n last.sumMethod = t1 - t0 < t2 - t1 ? 1 : 2;\n }\n const res = last.sumMethod === 1 ? await jsSum() : await tfSum();\n tf.dispose(reduced);\n return res;\n};\n*/\n\nexport async function skip(config: Partial, input: Tensor) {\n let skipFrame = false;\n if (config.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; // cache disabled or input is invalid or too large for cache analysis\n\n /*\n const checkSum = await checksum(input);\n const diff = 100 * (Math.max(checkSum, last.inputSum) / Math.min(checkSum, last.inputSum) - 1);\n last.inputSum = checkSum;\n // if previous frame was skipped, skip this frame if changed more than cacheSensitivity\n // if previous frame was not skipped, then look for cacheSensitivity or difference larger than one in previous frame to avoid resetting cache in subsequent frames unnecessarily\n let skipFrame = diff < Math.max(config.cacheSensitivity, last.cacheDiff);\n // if difference is above 10x threshold, don't use last value to force reset cache for significant change of scenes or images\n last.cacheDiff = diff > 10 * config.cacheSensitivity ? 0 : diff;\n skipFrame = skipFrame && (last.cacheDiff > 0); // if no cached diff value then force no skip\n */\n\n if (!last.inputTensor) {\n last.inputTensor = tf.clone(input);\n } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { // input resolution changed\n tf.dispose(last.inputTensor);\n last.inputTensor = tf.clone(input);\n } else {\n const t: Record = {};\n t.diff = tf.sub(input, last.inputTensor);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; // squared difference relative to input resolution and averaged per channel\n tf.dispose([last.inputTensor, t.diff, t.squared, t.sum]);\n last.inputTensor = tf.clone(input);\n skipFrame = diffRelative <= (config.cacheSensitivity || 0);\n }\n return skipFrame;\n}\n\nexport async function compare(config: Partial, input1: Tensor, input2: Tensor): Promise {\n const t: Record = {};\n if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) {\n if (!config.debug) log('invalid input tensor or tensor shapes do not match:', input1.shape, input2.shape);\n return 0;\n }\n if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) {\n if (!config.debug) log('input tensors must be of shape [1, height, width, 3]:', input1.shape, input2.shape);\n return 0;\n }\n t.input1 = tf.clone(input1);\n t.input2 = (input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2]) ? tf.image.resizeBilinear(input2 as Tensor3D, [input1.shape[1], input1.shape[2]]) : tf.clone(input2);\n t.diff = tf.sub(t.input1, t.input2);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3;\n tf.dispose([t.input1, t.input2, t.diff, t.squared, t.sum]);\n return diffRelative;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as image from '../image/image';\n\n/** Env class that holds detected capabilities */\nexport class Env {\n /** Running in Browser */\n browser: boolean;\n /** Running in NodeJS */\n node: boolean;\n /** Running in WebWorker thread */\n worker: boolean;\n /** Detected platform */\n platform: string = '';\n /** Detected agent */\n agent: string = '';\n /** List of supported backends */\n backends: string[] = [];\n /** Has any work been performed so far */\n initial: boolean;\n /** Are image filters supported? */\n filter: boolean | undefined;\n /** TFJS instance details */\n tfjs: {\n version: undefined | string,\n };\n /** Is offscreenCanvas supported? */\n offscreen: undefined | boolean;\n /** Are performance counter instant values or additive */\n perfadd: boolean = false;\n /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */\n tensorflow: {\n version: undefined | string,\n gpu: undefined | boolean,\n } = {\n version: undefined,\n gpu: undefined,\n };\n /** WASM detected capabilities */\n wasm: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n simd: undefined | boolean,\n multithread: undefined | boolean,\n } = {\n supported: undefined,\n backend: undefined,\n simd: undefined,\n multithread: undefined,\n };\n /** WebGL detected capabilities */\n webgl: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n version: undefined | string,\n renderer: undefined | string,\n shader: undefined | string,\n vendor: undefined | string,\n } = {\n supported: undefined,\n backend: undefined,\n version: undefined,\n renderer: undefined,\n shader: undefined,\n vendor: undefined,\n };\n /** WebGPU detected capabilities */\n webgpu: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n adapter: undefined | GPUAdapterInfo,\n } = {\n supported: undefined,\n backend: undefined,\n adapter: undefined,\n };\n /** CPU info */\n cpu: {\n model: undefined | string,\n flags: string[],\n } = {\n model: undefined,\n flags: [],\n };\n /** List of supported kernels for current backend */\n kernels: string[] = [];\n /** MonkeyPatch for Canvas */\n Canvas: undefined;\n /** MonkeyPatch for Image */\n Image: undefined;\n /** MonkeyPatch for ImageData */\n ImageData: undefined;\n\n constructor() {\n this.browser = typeof navigator !== 'undefined';\n this.node = (typeof process !== 'undefined') && (typeof process.versions !== 'undefined') && (typeof process.versions.node !== 'undefined');\n this.tfjs = { version: tf.version['tfjs-core'] };\n this.offscreen = typeof OffscreenCanvas !== 'undefined';\n this.initial = true;\n\n // @ts-ignore WorkerGlobalScope evaluated in browser only\n this.worker = this.browser && this.offscreen ? (typeof WorkerGlobalScope !== 'undefined') : undefined;\n if (typeof navigator !== 'undefined') { // TBD replace with navigator.userAgentData once in mainline\n const raw = navigator.userAgent.match(/\\(([^()]+)\\)/g);\n if (raw?.[0]) {\n const platformMatch = raw[0].match(/\\(([^()]+)\\)/g);\n this.platform = (platformMatch?.[0]) ? platformMatch[0].replace(/\\(|\\)/g, '') : '';\n this.agent = navigator.userAgent.replace(raw[0], '');\n if (this.platform[1]) this.agent = this.agent.replace(raw[1], '');\n this.agent = this.agent.replace(/ /g, ' ');\n }\n } else if (typeof process !== 'undefined') {\n this.platform = `${process.platform} ${process.arch}`;\n this.agent = `NodeJS ${process.version}`;\n }\n }\n\n /** update backend information */\n async updateBackend() {\n // analyze backends\n this.backends = Object.keys(tf.engine().registryFactory);\n try { // backend may not be initialized\n this.tensorflow = {\n version: (tf.backend()['binding'] ? tf.backend()['binding'].TF_Version : undefined),\n gpu: (tf.backend()['binding'] ? tf.backend()['binding'].isUsingGpuDevice() : undefined),\n };\n } catch { /**/ }\n this.wasm.supported = typeof WebAssembly !== 'undefined';\n this.wasm.backend = this.backends.includes('wasm');\n if (this.wasm.supported && this.wasm.backend) {\n this.wasm.simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n this.wasm.multithread = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n }\n const c = image.canvas(100, 100);\n const gl = c ? c.getContext('webgl2') as WebGL2RenderingContext : undefined; // causes too many gl contexts\n this.webgl.supported = typeof gl !== 'undefined';\n this.webgl.backend = this.backends.includes('webgl');\n if (this.webgl.supported && this.webgl.backend && gl) {\n this.webgl.version = gl.getParameter(gl.VERSION);\n this.webgl.vendor = gl.getParameter(gl.VENDOR);\n this.webgl.renderer = gl.getParameter(gl.RENDERER);\n this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\n }\n this.webgpu.supported = this.browser && typeof navigator.gpu !== 'undefined';\n this.webgpu.backend = this.backends.includes('webgpu');\n try {\n if (this.webgpu.supported) {\n const adapter = await navigator.gpu.requestAdapter();\n this.webgpu.adapter = await adapter?.requestAdapterInfo();\n }\n } catch {\n this.webgpu.supported = false;\n }\n try {\n this.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase());\n } catch { /**/ }\n }\n\n /** update cpu information */\n updateCPU() {\n const cpu = { model: '', flags: [] };\n if (this.node && this.platform.startsWith('linux')) {\n /*\n const fs = require('fs');\n try {\n const data = fs.readFileSync('/proc/cpuinfo').toString();\n for (const line of data.split('\\n')) {\n if (line.startsWith('model name')) cpu.model = line.match(/:(.*)/g)[0].replace(':', '').trim();\n if (line.startsWith('flags')) cpu.flags = line.match(/:(.*)/g)[0].replace(':', '').trim().split(' ').sort();\n }\n } catch { }\n */\n }\n if (!this.cpu) Object.defineProperty(this, 'cpu', { value: cpu });\n else this.cpu = cpu;\n }\n}\n\nexport const env = new Env();\n", "import { log } from './util';\n\n// const log = (...msg) => console.log('webcam', ...msg); // eslint-disable-line no-console\n\n/** WebCam configuration */\nexport interface WebCamConfig {\n /**\n * element can be:\n * - string which indicates dom element id\n * - actual HTMLVideo dom element\n * - undefined in which case a new HTMLVideoElement will be created\n */\n element: string | HTMLVideoElement | undefined,\n /** print messages on console */\n debug: boolean,\n /** use front or back camera */\n mode: 'front' | 'back',\n /** camera crop mode */\n crop: boolean,\n /** desired webcam width */\n width: number,\n /** desired webcam height */\n height: number,\n /** deviceId of the video device to use */\n id?: string,\n}\n\nexport class WebCam { // eslint-disable-line @typescript-eslint/no-extraneous-class\n /** current webcam configuration */\n config: WebCamConfig;\n /** instance of dom element associated with webcam stream */\n element: HTMLVideoElement | undefined;\n /** active webcam stream */\n stream: MediaStream | undefined;\n /** enumerated video devices */\n devices: MediaDeviceInfo[] = [];\n\n constructor() {\n this.config = {\n element: undefined,\n debug: true,\n mode: 'front',\n crop: false,\n width: 0,\n height: 0,\n };\n }\n\n /** get active webcam stream track */\n public get track(): MediaStreamTrack | undefined {\n if (!this.stream) return undefined;\n return this.stream.getVideoTracks()[0];\n }\n\n /** get webcam capabilities */\n public get capabilities(): MediaTrackCapabilities | undefined {\n if (!this.track) return undefined;\n return this.track.getCapabilities ? this.track.getCapabilities() : undefined;\n }\n\n /** get webcam constraints */\n public get constraints(): MediaTrackConstraints | undefined {\n if (!this.track) return undefined;\n return this.track.getConstraints ? this.track.getConstraints() : undefined;\n }\n\n /** get webcam settings */\n public get settings(): MediaTrackSettings | undefined {\n if (!this.stream) return undefined;\n const track: MediaStreamTrack = this.stream.getVideoTracks()[0];\n return track.getSettings ? track.getSettings() : undefined;\n }\n\n /** get webcam label */\n public get label(): string {\n if (!this.track) return '';\n return this.track.label;\n }\n\n /** is webcam paused */\n public get paused(): boolean {\n return this.element?.paused || false;\n }\n\n /** webcam current width */\n public get width(): number {\n return this.element?.videoWidth || 0;\n }\n\n /** webcam current height */\n public get height(): number {\n return this.element?.videoHeight || 0;\n }\n\n public enumerate = async (): Promise => {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.devices = devices.filter((device) => device.kind === 'videoinput');\n } catch {\n this.devices = [];\n }\n return this.devices;\n };\n\n /** start method initializizes webcam stream and associates it with a dom video element */\n public start = async (webcamConfig?: Partial): Promise => {\n // set config\n if (webcamConfig?.debug) this.config.debug = webcamConfig?.debug;\n if (webcamConfig?.crop) this.config.crop = webcamConfig?.crop;\n if (webcamConfig?.mode) this.config.mode = webcamConfig?.mode;\n if (webcamConfig?.width) this.config.width = webcamConfig?.width;\n if (webcamConfig?.height) this.config.height = webcamConfig?.height;\n if (webcamConfig?.id) this.config.id = webcamConfig?.id;\n\n // use or create dom element\n if (webcamConfig?.element) {\n if (typeof webcamConfig.element === 'string') {\n const el = document.getElementById(webcamConfig.element);\n if (el && el instanceof HTMLVideoElement) {\n this.element = el;\n } else {\n if (this.config.debug) log('webcam', 'cannot get dom element', webcamConfig.element);\n return;\n }\n } else if (webcamConfig.element instanceof HTMLVideoElement) {\n this.element = webcamConfig.element;\n } else {\n if (this.config.debug) log('webcam', 'unknown dom element', webcamConfig.element);\n return;\n }\n } else {\n this.element = document.createElement('video');\n }\n\n // set constraints to use\n const requestedConstraints: MediaStreamConstraints = {\n audio: false,\n video: {\n facingMode: this.config.mode === 'front' ? 'user' : 'environment',\n // @ts-ignore // resizeMode is still not defined in tslib\n resizeMode: this.config.crop ? 'crop-and-scale' : 'none',\n width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth },\n height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight },\n },\n };\n if (this.config.id) (requestedConstraints.video as MediaTrackConstraintSet).deviceId = this.config.id;\n\n // set default event listeners\n this.element.addEventListener('play', () => { if (this.config.debug) log('webcam', 'play'); });\n this.element.addEventListener('pause', () => { if (this.config.debug) log('webcam', 'pause'); });\n this.element.addEventListener('click', async () => { // pause when clicked on screen and resume on next click\n if (!this.element || !this.stream) return;\n if (this.element.paused) await this.element.play();\n else this.element.pause();\n });\n\n // get webcam and set it to run in dom element\n if (!navigator?.mediaDevices) {\n if (this.config.debug) log('webcam', 'no devices');\n return;\n }\n try {\n this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); // get stream that satisfies constraints\n } catch (err) {\n log('webcam', err);\n return;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam', 'no stream');\n return;\n }\n this.element.srcObject = this.stream; // assign it to dom element\n const ready = new Promise((resolve) => { // wait until stream is ready\n if (!this.element) resolve(false);\n else this.element.onloadeddata = () => resolve(true);\n });\n await ready;\n await this.element.play(); // start playing\n\n if (this.config.debug) {\n log('webcam', {\n width: this.width,\n height: this.height,\n label: this.label,\n stream: this.stream,\n track: this.track,\n settings: this.settings,\n constraints: this.constraints,\n capabilities: this.capabilities,\n });\n }\n };\n\n /** pause webcam video method */\n public pause = (): void => {\n if (this.element) this.element.pause();\n };\n\n /** play webcam video method */\n public play = async (): Promise => {\n if (this.element) await this.element.play();\n };\n\n /** stop method stops active webcam stream track and disconnects webcam */\n public stop = (): void => {\n if (this.config.debug) log('webcam', 'stop');\n if (this.track) this.track.stop();\n };\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log, join } from '../util/util';\nimport type { GraphModel } from './types';\nimport type { Config } from '../config';\nimport * as modelsDefs from '../../models/models.json';\n\nconst options = {\n cacheModels: true,\n cacheSupported: true,\n verbose: true,\n debug: false,\n modelBasePath: '',\n};\n\nexport interface ModelInfo {\n name: string,\n inCache: boolean,\n sizeDesired: number,\n sizeFromManifest: number,\n sizeLoadedWeights: number,\n url: string,\n}\n\nexport const modelStats: Record = {};\n\nasync function httpHandler(url: string, init?: RequestInit): Promise {\n if (options.debug) log('load model fetch:', url, init);\n return fetch(url, init);\n}\n\nexport function setModelLoadOptions(config: Config) {\n options.cacheModels = config.cacheModels;\n options.verbose = config.debug;\n options.modelBasePath = config.modelBasePath;\n}\n\nexport async function loadModel(modelPath: string | undefined): Promise {\n let modelUrl = join(options.modelBasePath, modelPath || '');\n if (!modelUrl.toLowerCase().endsWith('.json')) modelUrl += '.json';\n const modelPathSegments = modelUrl.includes('/') ? modelUrl.split('/') : modelUrl.split('\\\\');\n const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace('.json', '');\n const cachedModelName = 'indexeddb://' + shortModelName; // generate short model name for cache\n modelStats[shortModelName] = {\n name: shortModelName,\n sizeFromManifest: 0,\n sizeLoadedWeights: 0,\n sizeDesired: modelsDefs[shortModelName],\n inCache: false,\n url: '',\n };\n options.cacheSupported = (typeof indexedDB !== 'undefined'); // check if localStorage and indexedb are available\n let cachedModels = {};\n try {\n cachedModels = (options.cacheSupported && options.cacheModels) ? await tf.io.listModels() : {}; // list all models already in cache // this fails for webview although localStorage is defined\n } catch {\n options.cacheSupported = false;\n }\n modelStats[shortModelName].inCache = (options.cacheSupported && options.cacheModels) && Object.keys(cachedModels).includes(cachedModelName); // is model found in cache\n modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl;\n const tfLoadOptions = typeof fetch === 'undefined' ? {} : { fetchFunc: (url: string, init?: RequestInit) => httpHandler(url, init) };\n let model: GraphModel = new tf.GraphModel(modelStats[shortModelName].url, tfLoadOptions) as unknown as GraphModel; // create model prototype and decide if load from cache or from original modelurl\n let loaded = false;\n try {\n // @ts-ignore private function\n model.findIOHandler(); // decide how to actually load a model\n if (options.debug) log('model load handler:', model['handler']);\n } catch (err) {\n log('error finding model i/o handler:', modelUrl, err);\n }\n try {\n // @ts-ignore private property\n const artifacts = await model.handler?.load() || null; // load manifest\n modelStats[shortModelName].sizeFromManifest = artifacts?.weightData?.byteLength || 0;\n if (artifacts) model.loadSync(artifacts); // load weights\n else model = await tf.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions) as unknown as GraphModel;\n // @ts-ignore private property\n modelStats[shortModelName].sizeLoadedWeights = model.artifacts?.weightData?.byteLength || 0;\n if (options.verbose) log('load:', { model: shortModelName, url: model['modelUrl'], bytes: modelStats[shortModelName].sizeLoadedWeights });\n loaded = true;\n } catch (err) {\n log('error loading model:', modelUrl, err);\n }\n if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { // save model to cache\n try {\n const saveResult = await model.save(cachedModelName);\n if (options.debug) log('model saved:', cachedModelName, saveResult);\n } catch (err) {\n log('error saving model:', modelUrl, err);\n }\n }\n return model;\n}\n", "/** TFJS custom backend registration */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human } from '../human';\nimport { log } from '../util/util';\nimport * as image from '../image/image';\nimport type { AnyCanvas } from '../exports';\n\nexport const config = {\n name: 'humangl',\n priority: 999,\n canvas: null as null | AnyCanvas,\n gl: null as null | WebGL2RenderingContext,\n extensions: [] as string[] | null,\n webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2\n alpha: false,\n antialias: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: false,\n stencil: false,\n failIfMajorPerformanceCaveat: false, // default=true\n desynchronized: true, // default=undefined\n },\n};\n\nfunction extensions(): void {\n /*\n https://www.khronos.org/registry/webgl/extensions/\n https://webglreport.com/?v=2\n */\n const gl = config.gl;\n if (!gl) return;\n config.extensions = gl.getSupportedExtensions();\n // gl.getExtension('KHR_parallel_shader_compile');\n}\n\n/**\n * Registers custom WebGL2 backend to be used by Human library\n *\n * @returns void\n */\nexport function register(instance: Human): void {\n // force backend reload if gl context is not valid\n if (instance.config.backend !== 'humangl') return;\n if ((config.name in tf.engine().registry) && !config?.gl?.getParameter(config.gl.VERSION)) {\n log('humangl error: backend invalid context');\n instance.models.reset();\n /*\n log('resetting humangl backend');\n await tf.removeBackend(config.name);\n await register(instance); // re-register\n */\n }\n if (!tf.findBackend(config.name)) {\n try {\n config.canvas = image.canvas(100, 100);\n } catch (err) {\n log('humangl error: cannot create canvas:', err);\n return;\n }\n try {\n config.gl = config.canvas.getContext('webgl2', config.webGLattr) as WebGL2RenderingContext;\n if (!config.gl) {\n log('humangl error: cannot get webgl context');\n return;\n }\n const glv2 = config.gl.getParameter(config.gl.VERSION).includes('2.0');\n if (!glv2) {\n log('backend override: using fallback webgl backend as webgl 2.0 is not detected');\n instance.config.backend = 'webgl';\n return;\n }\n if (config.canvas) {\n config.canvas.addEventListener('webglcontextlost', (e) => {\n log('humangl error:', e.type);\n log('possible browser memory leak using webgl or conflict with multiple backend registrations');\n instance.emit('error');\n throw new Error('backend error: webgl context lost');\n });\n config.canvas.addEventListener('webglcontextrestored', (e) => {\n log('humangl error: context restored:', e);\n });\n config.canvas.addEventListener('webglcontextcreationerror', (e) => {\n log('humangl error: context create:', e);\n });\n }\n } catch (err) {\n log('humangl error: cannot get webgl context:', err);\n return;\n }\n try {\n tf.setWebGLContext(2, config.gl);\n } catch (err) {\n log('humangl error: cannot set webgl context:', err);\n return;\n }\n try {\n const ctx = new tf.GPGPUContext(config.gl);\n // @ts-ignore uncompatible kernelMs timing info\n tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);\n } catch (err) {\n log('humangl error: cannot register webgl backend:', err);\n return;\n }\n try {\n const kernels = tf.getKernelsForBackend('webgl');\n kernels.forEach((kernelConfig) => {\n const newKernelConfig = { ...kernelConfig, backendName: config.name };\n tf.registerKernel(newKernelConfig);\n });\n } catch (err) {\n log('humangl error: cannot update webgl backend registration:', err);\n return;\n }\n try {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_VERSION) tf.env().set('WEBGL_VERSION', 2);\n } catch (err) {\n log('humangl error: cannot set WebGL backend flags:', err);\n return;\n }\n extensions();\n const backend = tf.backend();\n const current = typeof backend['gpgpu'] !== 'undefined' ? backend['getGPGPUContext']().gl : null;\n if (current) {\n if (instance.config.debug) log('humangl backend registered:', { webgl: current.getParameter(current.VERSION) as string, renderer: current.getParameter(current.RENDERER) as string });\n } else {\n log('humangl error: no current gl context:', current, config.gl);\n }\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from './types';\n\nexport const constants: Record = {\n tf255: 255.0,\n tf1: 1.0,\n tf2: 2.0,\n tf05: 0.5,\n tf127: 127.5,\n rgb: [0.2989, 0.5870, 0.1140],\n};\n\nexport function init() {\n constants.tf255 = tf.scalar(255.0, 'float32');\n constants.tf1 = tf.scalar(1.0, 'float32');\n constants.tf2 = tf.scalar(2.0, 'float32');\n constants.tf05 = tf.scalar(0.5, 'float32');\n constants.tf127 = tf.scalar(127.5, 'float32');\n constants.rgb = tf.tensor1d([0.2989, 0.5870, 0.1140], 'float32'); // factors for red/green/blue colors when converting to grayscale\n}\n", "/** TFJS backend initialization and customization */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human, Config, BackendEnum } from '../human';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as humangl from './humangl';\nimport * as constants from './constants';\nimport type { TensorInfo } from './types';\n\nexport async function getBestBackend(): Promise {\n await env.updateBackend(); // update env on backend init\n if (!env.browser) return 'tensorflow';\n if (env.webgpu.supported && env.webgpu.backend) return 'webgpu';\n if (env.webgl.supported && env.webgl.backend) return 'webgl';\n if (env.wasm.supported && env.wasm.backend) return 'wasm';\n return 'cpu';\n}\n\nfunction registerCustomOps(config: Config) {\n const newKernels: string[] = [];\n if (!env.kernels.includes('mod')) {\n const kernelMod = {\n kernelName: 'Mod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.sub(op.inputs.a, tf.mul(tf.div(op.inputs.a, op.inputs.b), op.inputs.b))),\n };\n tf.registerKernel(kernelMod);\n env.kernels.push('mod');\n newKernels.push('mod');\n }\n if (!env.kernels.includes('floormod')) {\n const kernelFloorMod = {\n kernelName: 'FloorMod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.add(tf.mul(tf.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf.mod(op.inputs.a, op.inputs.b))),\n };\n tf.registerKernel(kernelFloorMod);\n env.kernels.push('floormod');\n newKernels.push('floormod');\n }\n /*\n if (!env.kernels.includes('atan2') && config.softwareKernels) {\n const kernelAtan2 = {\n kernelName: 'Atan2',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu');\n const t = tf.atan2(op.inputs.a, op.inputs.b);\n tf.setBackend(backend);\n return t;\n }),\n };\n if (config.debug) log('registered kernel:', 'atan2');\n log('registered kernel:', 'atan2');\n tf.registerKernel(kernelAtan2);\n env.kernels.push('atan2');\n newKernels.push('atan2');\n }\n */\n if (!env.kernels.includes('rotatewithoffset') && config.softwareKernels) {\n const kernelRotateWithOffset = {\n kernelName: 'RotateWithOffset',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu'); // eslint-disable-line @typescript-eslint/no-floating-promises\n const t = tf.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center);\n tf.setBackend(backend); // eslint-disable-line @typescript-eslint/no-floating-promises\n return t;\n }),\n };\n tf.registerKernel(kernelRotateWithOffset);\n env.kernels.push('rotatewithoffset');\n newKernels.push('rotatewithoffset');\n }\n if ((newKernels.length > 0) && config.debug) log('registered kernels:', newKernels);\n}\n\nlet defaultFlags: Record = {};\n\nexport async function check(instance: Human, force = false) {\n instance.state = 'backend';\n if (instance.config.backend?.length === 0) instance.config.backend = await getBestBackend();\n if (force || env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {\n const timeStamp = now();\n\n if (instance.config.backend && instance.config.backend.length > 0) {\n // detect web worker\n // @ts-ignore ignore missing type for WorkerGlobalScope as that is the point\n if (typeof window === 'undefined' && typeof WorkerGlobalScope !== 'undefined' && instance.config.debug) {\n if (instance.config.debug) log('running inside web worker');\n }\n\n // force browser vs node backend\n if (env.browser && instance.config.backend === 'tensorflow') {\n if (instance.config.debug) log('override: backend set to tensorflow while running in browser');\n instance.config.backend = 'webgl';\n }\n if (env.node && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl')) {\n if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`);\n instance.config.backend = 'tensorflow';\n }\n\n // handle webgpu\n if (env.browser && instance.config.backend === 'webgpu') {\n if (typeof navigator === 'undefined' || typeof navigator.gpu === 'undefined') {\n log('override: backend set to webgpu but browser does not support webgpu');\n instance.config.backend = 'webgl';\n } else {\n const adapter = await navigator.gpu.requestAdapter();\n if (instance.config.debug) log('enumerated webgpu adapter:', adapter);\n if (!adapter) {\n log('override: backend set to webgpu but browser reports no available gpu');\n instance.config.backend = 'webgl';\n } else {\n // @ts-ignore requestAdapterInfo is not in tslib\n const adapterInfo = 'requestAdapterInfo' in adapter ? await adapter.requestAdapterInfo() : undefined;\n // if (adapter.features) adapter.features.forEach((feature) => log('webgpu features:', feature));\n log('webgpu adapter info:', adapterInfo);\n }\n }\n }\n\n // check available backends\n let available = Object.keys(tf.engine().registryFactory as Record);\n if (instance.config.backend === 'humangl' && !available.includes('humangl')) {\n humangl.register(instance);\n available = Object.keys(tf.engine().registryFactory as Record);\n }\n if (instance.config.debug) log('available backends:', available);\n\n if (!available.includes(instance.config.backend)) {\n log(`error: backend ${instance.config.backend} not found in registry`);\n instance.config.backend = env.node ? 'tensorflow' : 'webgl';\n if (instance.config.debug) log(`override: setting backend ${instance.config.backend}`);\n }\n\n if (instance.config.debug) log('setting backend:', [instance.config.backend]);\n\n // customize wasm\n if (instance.config.backend === 'wasm') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true);\n if (instance.config.debug) log('wasm path:', instance.config.wasmPath);\n if (typeof tf.setWasmPaths !== 'undefined') tf.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch);\n else throw new Error('backend error: attempting to use wasm backend but wasm path is not set');\n let mt = false;\n let simd = false;\n try {\n mt = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n if (instance.config.debug) log(`wasm execution: ${simd ? 'simd' : 'no simd'} ${mt ? 'multithreaded' : 'singlethreaded'}`);\n if (instance.config.debug && !simd) log('warning: wasm simd support is not enabled');\n } catch {\n log('wasm detection failed');\n }\n }\n\n try {\n await tf.setBackend(instance.config.backend);\n await tf.ready();\n } catch (err) {\n log('error: cannot set backend:', instance.config.backend, err);\n return false;\n }\n // @ts-ignore private property\n if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(tf.env().flags));\n }\n\n // customize humangl\n if (tf.getBackend() === 'humangl' || tf.getBackend() === 'webgl') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', true); // default=false \n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_EXP_CONV) tf.env().set('WEBGL_EXP_CONV', true); // default=false \n // if (tf.env().flagRegistry['WEBGL_PACK_DEPTHWISECONV']) tf.env().set('WEBGL_PACK_DEPTHWISECONV', false); // default=true \n // if (tf.env().flagRegistry.USE_SETTIMEOUTCUSTOM) tf.env().set('USE_SETTIMEOUTCUSTOM', true); // default=false \n // if (tf.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD) tf.env().set('CPU_HANDOFF_SIZE_THRESHOLD', 1024); // default=1000\n // if (tf.env().flagRegistry['WEBGL_FORCE_F16_TEXTURES'] && !instance.config.object.enabled) tf.env().set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision\n if (instance.config.debug && typeof instance.config.deallocate !== 'undefined' && instance.config.deallocate) { // hidden param\n log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', true);\n tf.env().set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0);\n }\n }\n\n // customize webgpu\n if (tf.getBackend() === 'webgpu') {\n // if (tf.env().flagRegistry['WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512);\n // if (tf.env().flagRegistry['WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE']) tf.env().set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0);\n // if (tf.env().flagRegistry['WEBGPU_CPU_FORWARD']) tf.env().set('WEBGPU_CPU_FORWARD', true);\n }\n\n if (instance.config.debug) {\n // @ts-ignore private property\n const newFlags = tf.env().flags;\n const updatedFlags = {};\n for (const key of Object.keys(newFlags)) {\n if (defaultFlags[key] === newFlags[key]) continue;\n updatedFlags[key] = newFlags[key];\n }\n if (instance.config.debug && Object.keys(updatedFlags).length > 0) log('backend:', tf.getBackend(), 'flags:', updatedFlags);\n }\n\n if (instance.config.flags && Object.keys(instance.config.flags).length > 0) {\n if (instance.config.debug) log('flags:', instance.config['flags']);\n for (const [key, val] of Object.entries(instance.config.flags)) {\n tf.env().set(key, val as number | boolean);\n }\n }\n\n tf.enableProdMode();\n constants.init();\n instance.performance.initBackend = Math.trunc(now() - timeStamp);\n instance.config.backend = tf.getBackend() as BackendEnum;\n await env.updateBackend(); // update env on backend init\n registerCustomOps(instance.config);\n // await env.updateBackend(); // update env on backend init\n env.initial = false;\n }\n return true;\n}\n\n// register fake missing tfjs ops\nexport function fakeOps(kernelNames: string[], config) {\n // if (config.debug) log('registerKernel:', kernelNames);\n for (const kernelName of kernelNames) {\n const kernelConfig = {\n kernelName,\n backendName: config.backend,\n kernelFunc: (param): TensorInfo => {\n if (config.debug) log('kernelFunc', kernelName, config.backend, param);\n return param?.inputs?.info as TensorInfo;\n },\n // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n };\n tf.registerKernel(kernelConfig);\n }\n env.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); // re-scan registered ops\n}\n", "/**\n * Module that implements helper draw functions, exposed as human.draw\n */\n\nimport { mergeDeep, now } from '../util/util';\nimport { env } from '../util/env';\nimport { getCanvasContext, rect } from './primitives';\nimport { options } from './options';\nimport { face } from './face';\nimport { body } from './body';\nimport { hand } from './hand';\nimport { object } from './object';\nimport { gesture } from './gesture';\nimport { defaultLabels } from './labels';\nimport type { Result, PersonResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet drawTime = 0;\n\nexport { options } from './options';\nexport { face } from './face';\nexport { body } from './body';\nexport { hand } from './hand';\nexport { object } from './object';\nexport { gesture } from './gesture';\n\n/** draw combined person results instead of individual detection result objects */\nexport function person(inCanvas: AnyCanvas, result: PersonResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n\n for (let i = 0; i < result.length; i++) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels) {\n const label = `person #${i}`;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.stroke();\n }\n }\n}\n\n/** draw processed canvas */\nexport function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, output: AnyCanvas) {\n if (!input || !output) return;\n const ctx = getCanvasContext(output) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.drawImage(input, 0, 0);\n}\n\n/** meta-function that performs draw for: canvas, face, body, hand */\nexport async function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial) {\n if (!result?.performance || !inCanvas) return null;\n const timeStamp = now();\n const localOptions = mergeDeep(options, drawOptions);\n const promise = Promise.all([\n face(inCanvas, result.face, localOptions),\n body(inCanvas, result.body, localOptions),\n hand(inCanvas, result.hand, localOptions),\n object(inCanvas, result.object, localOptions),\n gesture(inCanvas, result.gesture, localOptions), // gestures do not have buffering\n // person(inCanvas, result.persons, localOptions); // already included above\n ]);\n drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp);\n result.performance.draw = drawTime;\n return promise;\n}\n\n/** sets default label templates for face/body/hand/object/gestures */\nexport function init() {\n options.faceLabels = defaultLabels.face;\n options.bodyLabels = defaultLabels.body;\n options.bodyPartLabels = defaultLabels.bodyPart;\n options.handLabels = defaultLabels.hand;\n options.fingerLabels = defaultLabels.finger;\n options.objectLabels = defaultLabels.object;\n options.gestureLabels = defaultLabels.gesture;\n}\n", "import { log } from '../util/util';\nimport type { AnyCanvas } from '../exports';\nimport type { Point } from '../result';\nimport type { DrawOptions } from './options';\n\nexport const getCanvasContext = (input: AnyCanvas) => {\n if (!input) log('draw error: invalid canvas');\n else if (!input.getContext) log('draw error: canvas context not defined');\n else {\n const ctx = input.getContext('2d');\n if (!ctx) log('draw error: cannot get canvas context');\n else return ctx;\n }\n return null;\n};\n\nexport const rad2deg = (theta: number) => Math.round((theta * 180) / Math.PI);\n\nexport const replace = (str: string, source: string, target: string | number) => str.replace(source, typeof target === 'number' ? target.toFixed(1) : target);\n\nexport const colorDepth = (z: number | undefined, opt: DrawOptions): string => { // performance optimization needed\n if (!opt.useDepth || typeof z === 'undefined') return opt.color;\n const rgb = Uint8ClampedArray.from([127 + (2 * z), 127 - (2 * z), 255]);\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opt.alpha})`;\n};\n\nexport function labels(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, str: string, startX: number, startY: number, localOptions: DrawOptions) {\n const line: string[] = str.replace(/\\[.*\\]/g, '').split('\\n').map((l) => l.trim()); // remove unmatched templates and split into array\n const x = Math.max(0, startX);\n for (let i = line.length - 1; i >= 0; i--) {\n const y = i * localOptions.lineHeight + startY;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(line[i], x + 5, y + 16);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(line[i], x + 4, y + 15);\n }\n}\n\nexport function point(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, z: number | undefined, localOptions: DrawOptions) {\n ctx.fillStyle = colorDepth(z, localOptions);\n ctx.beginPath();\n ctx.arc(x, y, localOptions.pointSize, 0, 2 * Math.PI);\n ctx.fill();\n}\n\nexport function rect(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, width: number, height: number, localOptions: DrawOptions) {\n ctx.beginPath();\n ctx.lineWidth = localOptions.lineWidth;\n if (localOptions.useCurves) {\n const cx = (x + x + width) / 2;\n const cy = (y + y + height) / 2;\n ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n ctx.moveTo(x + localOptions.roundRect, y);\n ctx.lineTo(x + width - localOptions.roundRect, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions.roundRect);\n ctx.lineTo(x + width, y + height - localOptions.roundRect);\n ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions.roundRect, y + height);\n ctx.lineTo(x + localOptions.roundRect, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions.roundRect);\n ctx.lineTo(x, y + localOptions.roundRect);\n ctx.quadraticCurveTo(x, y, x + localOptions.roundRect, y);\n ctx.closePath();\n }\n ctx.stroke();\n}\n\nexport function lines(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n for (const pt of points) {\n ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions);\n ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1]));\n }\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function curves(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.lineWidth = localOptions.lineWidth;\n if (!localOptions.useCurves || points.length <= 2) {\n lines(ctx, points, localOptions);\n return;\n }\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 0; i < points.length - 2; i++) {\n const xc = (points[i][0] + points[i + 1][0]) / 2;\n const yc = (points[i][1] + points[i + 1][1]) / 2;\n ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc);\n }\n ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function arrow(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, from: Point, to: Point, radius = 5) {\n let angle;\n let x;\n let y;\n ctx.beginPath();\n ctx.moveTo(from[0], from[1]);\n ctx.lineTo(to[0], to[1]);\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.moveTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n}\n", "/** Draw Options\n * - Accessed via `human.draw.options` or provided per each draw method as the drawOptions optional parameter\n */\n\nexport interface DrawOptions {\n /** draw line color */\n color: string,\n /** alpha value used for lines */\n alpha: number,\n /** label color */\n labelColor: string,\n /** label shadow color */\n shadowColor: string,\n /** label font */\n font: string,\n /** line spacing between labels */\n lineHeight: number,\n /** line width for drawn lines */\n lineWidth: number,\n /** size of drawn points */\n pointSize: number,\n /** draw rounded boxes by n pixels */\n roundRect: number,\n /** should points be drawn? */\n drawPoints: boolean,\n /** should labels be drawn? */\n drawLabels: boolean,\n /** should face attention keypoints be highlighted */\n drawAttention: boolean;\n /** should detected gestures be drawn? */\n drawGestures: boolean,\n /** should draw boxes around detection results? */\n drawBoxes: boolean,\n /** should draw polygons from detection points? */\n drawPolygons: boolean,\n /** should draw gaze arrows? */\n drawGaze: boolean,\n /** should fill polygons? */\n fillPolygons: boolean,\n /** use z-coordinate when available */\n useDepth: boolean,\n /** should lines be curved? */\n useCurves: boolean,\n /** string template for face labels */\n faceLabels: string,\n /** string template for body labels */\n bodyLabels: string,\n /** string template for body part labels */\n bodyPartLabels: string,\n /** string template for hand labels */\n handLabels: string,\n /** string template for hand labels */\n fingerLabels: string,\n /** string template for object labels */\n objectLabels: string,\n /** string template for gesture labels */\n gestureLabels: string,\n}\n\n/** currently set draw options {@link DrawOptions} */\nexport const options: DrawOptions = {\n color: 'rgba(173, 216, 230, 0.6)' as string, // 'lightblue' with light alpha channel\n labelColor: 'rgba(173, 216, 230, 1)' as string, // 'lightblue' with dark alpha channel\n shadowColor: 'black' as string,\n alpha: 0.5 as number,\n font: 'small-caps 16px \"Segoe UI\"' as string,\n lineHeight: 18 as number,\n lineWidth: 4 as number,\n pointSize: 2 as number,\n roundRect: 8 as number,\n drawPoints: false as boolean,\n drawLabels: true as boolean,\n drawBoxes: true as boolean,\n drawAttention: true as boolean,\n drawGestures: true as boolean,\n drawPolygons: true as boolean,\n drawGaze: true as boolean,\n fillPolygons: false as boolean,\n useDepth: true as boolean,\n useCurves: false as boolean,\n faceLabels: '' as string,\n bodyLabels: '' as string,\n bodyPartLabels: '' as string,\n objectLabels: '' as string,\n handLabels: '' as string,\n fingerLabels: '' as string,\n gestureLabels: '' as string,\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nexport const meshAnnotations: Record = {\n silhouette: [\n 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288,\n 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136,\n 172, 58, 132, 93, 234, 127, 162, 21, 54, 103, 67, 109,\n ],\n // lipsUpperOuter: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11\n // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10\n // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11\n // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11\n lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409],\n lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291],\n lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415],\n lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308],\n lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306],\n lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408],\n lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292],\n lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407],\n rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], // 7\n rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], // 9\n rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], // 7\n rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], // 9\n rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], // 7\n rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], // 9\n rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], // 9\n rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], // 8\n rightEyebrowLower: [35, 124, 46, 53, 52, 65], // 6\n rightEyeIris: [473, 474, 475, 476, 477], // 5\n leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398],\n leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362],\n leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414],\n leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463],\n leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413],\n leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464],\n leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465],\n leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417],\n leftEyebrowLower: [265, 353, 276, 283, 282, 295],\n leftEyeIris: [468, 469, 470, 471, 472],\n midwayBetweenEyes: [168],\n noseTip: [1],\n noseBottom: [2],\n noseRightCorner: [98],\n noseLeftCorner: [327],\n rightCheek: [205],\n leftCheek: [425],\n};\n\nexport const meshLandmarks: Record = {\n count: 468,\n mouth: 13,\n symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]],\n};\n\nexport const blazeFaceLandmarks: Record = {\n leftEye: 0,\n rightEye: 1,\n nose: 2,\n mouth: 3,\n leftEar: 4,\n rightEar: 5,\n symmetryLine: [3, 2],\n};\n\nexport const irisIndices: { key: string, indices: number[] }[] = [ // A mapping from facemesh model keypoints to iris model keypoints.\n { key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] }, // 7 x 3d\n { key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] }, // 7 x 3d\n { key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] }, // 7 x 3d\n { key: 'EyeLower0', indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, // 7 x 3d\n { key: 'EyeLower1', indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, // 9 x 3d\n { key: 'EyeLower2', indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, // 9 x 3d\n { key: 'EyeLower3', indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, // 9 x 3d\n { key: 'EyebrowUpper', indices: [63, 64, 65, 66, 67, 68, 69, 70] }, // 8 x 3d\n { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] }, // 6 x 3d\n];\n\nexport const UV468: [number, number][] = [\n [0.499976992607117, 0.652534008026123],\n [0.500025987625122, 0.547487020492554],\n [0.499974012374878, 0.602371990680695],\n [0.482113003730774, 0.471979022026062],\n [0.500150978565216, 0.527155995368958],\n [0.499909996986389, 0.498252987861633],\n [0.499523013830185, 0.40106201171875],\n [0.289712011814117, 0.380764007568359],\n [0.499954998493195, 0.312398016452789],\n [0.499987006187439, 0.269918978214264],\n [0.500023007392883, 0.107050001621246],\n [0.500023007392883, 0.666234016418457],\n [0.5000159740448, 0.679224014282227],\n [0.500023007392883, 0.692348003387451],\n [0.499976992607117, 0.695277988910675],\n [0.499976992607117, 0.70593398809433],\n [0.499976992607117, 0.719385027885437],\n [0.499976992607117, 0.737019002437592],\n [0.499967992305756, 0.781370997428894],\n [0.499816000461578, 0.562981009483337],\n [0.473773002624512, 0.573909997940063],\n [0.104906998574734, 0.254140973091125],\n [0.365929991006851, 0.409575998783112],\n [0.338757991790771, 0.41302502155304],\n [0.311120003461838, 0.409460008144379],\n [0.274657994508743, 0.389131009578705],\n [0.393361985683441, 0.403706014156342],\n [0.345234006643295, 0.344011008739471],\n [0.370094001293182, 0.346076011657715],\n [0.319321990013123, 0.347265005111694],\n [0.297903001308441, 0.353591024875641],\n [0.24779200553894, 0.410809993743896],\n [0.396889001131058, 0.842755019664764],\n [0.280097991228104, 0.375599980354309],\n [0.106310002505779, 0.399955987930298],\n [0.2099249958992, 0.391353011131287],\n [0.355807989835739, 0.534406006336212],\n [0.471751004457474, 0.65040397644043],\n [0.474155008792877, 0.680191993713379],\n [0.439785003662109, 0.657229006290436],\n [0.414617002010345, 0.66654098033905],\n [0.450374007225037, 0.680860996246338],\n [0.428770989179611, 0.682690978050232],\n [0.374971002340317, 0.727805018424988],\n [0.486716985702515, 0.547628998756409],\n [0.485300987958908, 0.527395009994507],\n [0.257764995098114, 0.314490020275116],\n [0.401223003864288, 0.455172002315521],\n [0.429818987846375, 0.548614978790283],\n [0.421351999044418, 0.533740997314453],\n [0.276895999908447, 0.532056987285614],\n [0.483370006084442, 0.499586999416351],\n [0.33721199631691, 0.282882988452911],\n [0.296391993761063, 0.293242990970612],\n [0.169294998049736, 0.193813979625702],\n [0.447580009698868, 0.302609980106354],\n [0.392390012741089, 0.353887975215912],\n [0.354490011930466, 0.696784019470215],\n [0.067304998636246, 0.730105042457581],\n [0.442739009857178, 0.572826027870178],\n [0.457098007202148, 0.584792017936707],\n [0.381974011659622, 0.694710969924927],\n [0.392388999462128, 0.694203019142151],\n [0.277076005935669, 0.271932005882263],\n [0.422551989555359, 0.563233017921448],\n [0.385919004678726, 0.281364023685455],\n [0.383103013038635, 0.255840003490448],\n [0.331431001424789, 0.119714021682739],\n [0.229923993349075, 0.232002973556519],\n [0.364500999450684, 0.189113974571228],\n [0.229622006416321, 0.299540996551514],\n [0.173287004232407, 0.278747975826263],\n [0.472878992557526, 0.666198015213013],\n [0.446828007698059, 0.668527007102966],\n [0.422762006521225, 0.673889994621277],\n [0.445307999849319, 0.580065965652466],\n [0.388103008270264, 0.693961024284363],\n [0.403039008378983, 0.706539988517761],\n [0.403629004955292, 0.693953037261963],\n [0.460041999816895, 0.557139039039612],\n [0.431158006191254, 0.692366003990173],\n [0.452181994915009, 0.692366003990173],\n [0.475387006998062, 0.692366003990173],\n [0.465828001499176, 0.779190003871918],\n [0.472328990697861, 0.736225962638855],\n [0.473087012767792, 0.717857003211975],\n [0.473122000694275, 0.704625964164734],\n [0.473033010959625, 0.695277988910675],\n [0.427942007780075, 0.695277988910675],\n [0.426479011774063, 0.703539967536926],\n [0.423162013292313, 0.711845993995667],\n [0.4183090031147, 0.720062971115112],\n [0.390094995498657, 0.639572978019714],\n [0.013953999616206, 0.560034036636353],\n [0.499913990497589, 0.58014702796936],\n [0.413199990987778, 0.69539999961853],\n [0.409626007080078, 0.701822996139526],\n [0.468080013990402, 0.601534962654114],\n [0.422728985548019, 0.585985004901886],\n [0.463079988956451, 0.593783974647522],\n [0.37211999297142, 0.47341400384903],\n [0.334562003612518, 0.496073007583618],\n [0.411671012639999, 0.546965003013611],\n [0.242175996303558, 0.14767599105835],\n [0.290776997804642, 0.201445996761322],\n [0.327338010072708, 0.256527006626129],\n [0.399509996175766, 0.748921036720276],\n [0.441727995872498, 0.261676013469696],\n [0.429764986038208, 0.187834024429321],\n [0.412198007106781, 0.108901023864746],\n [0.288955003023148, 0.398952007293701],\n [0.218936994671822, 0.435410976409912],\n [0.41278201341629, 0.398970007896423],\n [0.257135003805161, 0.355440020561218],\n [0.427684992551804, 0.437960982322693],\n [0.448339998722076, 0.536936044692993],\n [0.178560003638268, 0.45755398273468],\n [0.247308000922203, 0.457193970680237],\n [0.286267012357712, 0.467674970626831],\n [0.332827985286713, 0.460712015628815],\n [0.368755996227264, 0.447206974029541],\n [0.398963987827301, 0.432654976844788],\n [0.476410001516342, 0.405806005001068],\n [0.189241006970406, 0.523923993110657],\n [0.228962004184723, 0.348950982093811],\n [0.490725994110107, 0.562400996685028],\n [0.404670000076294, 0.485132992267609],\n [0.019469000399113, 0.401564002037048],\n [0.426243007183075, 0.420431017875671],\n [0.396993011236191, 0.548797011375427],\n [0.266469985246658, 0.376977026462555],\n [0.439121007919312, 0.51895797252655],\n [0.032313998788595, 0.644356966018677],\n [0.419054001569748, 0.387154996395111],\n [0.462783008813858, 0.505746960639954],\n [0.238978996872902, 0.779744982719421],\n [0.198220998048782, 0.831938028335571],\n [0.107550002634525, 0.540755033493042],\n [0.183610007166862, 0.740257024765015],\n [0.134409993886948, 0.333683013916016],\n [0.385764002799988, 0.883153975009918],\n [0.490967005491257, 0.579378008842468],\n [0.382384985685349, 0.508572995662689],\n [0.174399003386497, 0.397670984268188],\n [0.318785011768341, 0.39623498916626],\n [0.343364000320435, 0.400596976280212],\n [0.396100014448166, 0.710216999053955],\n [0.187885001301765, 0.588537991046906],\n [0.430987000465393, 0.944064974784851],\n [0.318993002176285, 0.898285031318665],\n [0.266247987747192, 0.869701027870178],\n [0.500023007392883, 0.190576016902924],\n [0.499976992607117, 0.954452991485596],\n [0.366169989109039, 0.398822009563446],\n [0.393207013607025, 0.39553701877594],\n [0.410373002290726, 0.391080021858215],\n [0.194993004202843, 0.342101991176605],\n [0.388664990663528, 0.362284004688263],\n [0.365961998701096, 0.355970978736877],\n [0.343364000320435, 0.355356991291046],\n [0.318785011768341, 0.35834002494812],\n [0.301414996385574, 0.363156020641327],\n [0.058132998645306, 0.319076001644135],\n [0.301414996385574, 0.387449026107788],\n [0.499987989664078, 0.618434011936188],\n [0.415838003158569, 0.624195992946625],\n [0.445681989192963, 0.566076993942261],\n [0.465844005346298, 0.620640993118286],\n [0.49992299079895, 0.351523995399475],\n [0.288718998432159, 0.819945991039276],\n [0.335278987884521, 0.852819979190826],\n [0.440512001514435, 0.902418971061707],\n [0.128294005990028, 0.791940987110138],\n [0.408771991729736, 0.373893976211548],\n [0.455606997013092, 0.451801002025604],\n [0.499877005815506, 0.908990025520325],\n [0.375436991453171, 0.924192011356354],\n [0.11421000212431, 0.615022003650665],\n [0.448662012815475, 0.695277988910675],\n [0.4480200111866, 0.704632043838501],\n [0.447111994028091, 0.715808033943176],\n [0.444831997156143, 0.730794012546539],\n [0.430011987686157, 0.766808986663818],\n [0.406787008047104, 0.685672998428345],\n [0.400738000869751, 0.681069016456604],\n [0.392399996519089, 0.677703022956848],\n [0.367855995893478, 0.663918972015381],\n [0.247923001646996, 0.601333022117615],\n [0.452769994735718, 0.420849978923798],\n [0.43639200925827, 0.359887003898621],\n [0.416164010763168, 0.368713974952698],\n [0.413385987281799, 0.692366003990173],\n [0.228018000721931, 0.683571994304657],\n [0.468268007040024, 0.352671027183533],\n [0.411361992359161, 0.804327011108398],\n [0.499989002943039, 0.469825029373169],\n [0.479153990745544, 0.442654013633728],\n [0.499974012374878, 0.439637005329132],\n [0.432112008333206, 0.493588984012604],\n [0.499886006116867, 0.866917014122009],\n [0.49991300702095, 0.821729004383087],\n [0.456548988819122, 0.819200992584229],\n [0.344549000263214, 0.745438992977142],\n [0.37890899181366, 0.574010014533997],\n [0.374292999505997, 0.780184984207153],\n [0.319687992334366, 0.570737957954407],\n [0.357154995203018, 0.604269981384277],\n [0.295284003019333, 0.621580958366394],\n [0.447750002145767, 0.862477004528046],\n [0.410986006259918, 0.508723020553589],\n [0.31395098567009, 0.775308012962341],\n [0.354128003120422, 0.812552988529205],\n [0.324548006057739, 0.703992962837219],\n [0.189096003770828, 0.646299958229065],\n [0.279776990413666, 0.71465802192688],\n [0.1338230073452, 0.682700991630554],\n [0.336768001317978, 0.644733011722565],\n [0.429883986711502, 0.466521978378296],\n [0.455527991056442, 0.548622965812683],\n [0.437114000320435, 0.558896005153656],\n [0.467287987470627, 0.529924988746643],\n [0.414712011814117, 0.335219979286194],\n [0.37704598903656, 0.322777986526489],\n [0.344107985496521, 0.320150971412659],\n [0.312875986099243, 0.32233202457428],\n [0.283526003360748, 0.333190023899078],\n [0.241245999932289, 0.382785975933075],\n [0.102986000478268, 0.468762993812561],\n [0.267612010240555, 0.424560010433197],\n [0.297879010438919, 0.433175981044769],\n [0.333433985710144, 0.433878004550934],\n [0.366427004337311, 0.426115989685059],\n [0.396012008190155, 0.416696012020111],\n [0.420121014118195, 0.41022801399231],\n [0.007561000064015, 0.480777025222778],\n [0.432949006557465, 0.569517970085144],\n [0.458638995885849, 0.479089021682739],\n [0.473466008901596, 0.545744001865387],\n [0.476087987422943, 0.563830018043518],\n [0.468472003936768, 0.555056989192963],\n [0.433990985155106, 0.582361996173859],\n [0.483518004417419, 0.562983989715576],\n [0.482482999563217, 0.57784903049469],\n [0.42645001411438, 0.389798998832703],\n [0.438998997211456, 0.39649498462677],\n [0.450067013502121, 0.400434017181396],\n [0.289712011814117, 0.368252992630005],\n [0.276670008897781, 0.363372981548309],\n [0.517862021923065, 0.471948027610779],\n [0.710287988185883, 0.380764007568359],\n [0.526226997375488, 0.573909997940063],\n [0.895093023777008, 0.254140973091125],\n [0.634069979190826, 0.409575998783112],\n [0.661242008209229, 0.41302502155304],\n [0.688880026340485, 0.409460008144379],\n [0.725341975688934, 0.389131009578705],\n [0.606630027294159, 0.40370500087738],\n [0.654766023159027, 0.344011008739471],\n [0.629905998706818, 0.346076011657715],\n [0.680678009986877, 0.347265005111694],\n [0.702096998691559, 0.353591024875641],\n [0.75221198797226, 0.410804986953735],\n [0.602918028831482, 0.842862963676453],\n [0.719901978969574, 0.375599980354309],\n [0.893692970275879, 0.399959981441498],\n [0.790081977844238, 0.391354024410248],\n [0.643998026847839, 0.534487962722778],\n [0.528249025344849, 0.65040397644043],\n [0.525849997997284, 0.680191040039062],\n [0.560214996337891, 0.657229006290436],\n [0.585384011268616, 0.66654098033905],\n [0.549625992774963, 0.680860996246338],\n [0.57122802734375, 0.682691991329193],\n [0.624852001667023, 0.72809898853302],\n [0.513050019741058, 0.547281980514526],\n [0.51509702205658, 0.527251958847046],\n [0.742246985435486, 0.314507007598877],\n [0.598631024360657, 0.454979002475739],\n [0.570338010787964, 0.548575043678284],\n [0.578631997108459, 0.533622980117798],\n [0.723087012767792, 0.532054007053375],\n [0.516445994377136, 0.499638974666595],\n [0.662801027297974, 0.282917976379395],\n [0.70362401008606, 0.293271005153656],\n [0.830704987049103, 0.193813979625702],\n [0.552385985851288, 0.302568018436432],\n [0.607609987258911, 0.353887975215912],\n [0.645429015159607, 0.696707010269165],\n [0.932694971561432, 0.730105042457581],\n [0.557260990142822, 0.572826027870178],\n [0.542901992797852, 0.584792017936707],\n [0.6180260181427, 0.694710969924927],\n [0.607590973377228, 0.694203019142151],\n [0.722943007946014, 0.271963000297546],\n [0.577413976192474, 0.563166975975037],\n [0.614082992076874, 0.281386971473694],\n [0.616907000541687, 0.255886018276215],\n [0.668509006500244, 0.119913995265961],\n [0.770092010498047, 0.232020974159241],\n [0.635536015033722, 0.189248979091644],\n [0.77039098739624, 0.299556016921997],\n [0.826722025871277, 0.278755009174347],\n [0.527121007442474, 0.666198015213013],\n [0.553171992301941, 0.668527007102966],\n [0.577238023281097, 0.673889994621277],\n [0.554691970348358, 0.580065965652466],\n [0.611896991729736, 0.693961024284363],\n [0.59696102142334, 0.706539988517761],\n [0.596370995044708, 0.693953037261963],\n [0.539958000183105, 0.557139039039612],\n [0.568841993808746, 0.692366003990173],\n [0.547818005084991, 0.692366003990173],\n [0.52461302280426, 0.692366003990173],\n [0.534089982509613, 0.779141008853912],\n [0.527670979499817, 0.736225962638855],\n [0.526912987232208, 0.717857003211975],\n [0.526877999305725, 0.704625964164734],\n [0.526966989040375, 0.695277988910675],\n [0.572058022022247, 0.695277988910675],\n [0.573521018028259, 0.703539967536926],\n [0.57683801651001, 0.711845993995667],\n [0.581691026687622, 0.720062971115112],\n [0.609944999217987, 0.639909982681274],\n [0.986046016216278, 0.560034036636353],\n [0.5867999792099, 0.69539999961853],\n [0.590372025966644, 0.701822996139526],\n [0.531915009021759, 0.601536989212036],\n [0.577268004417419, 0.585934996604919],\n [0.536915004253387, 0.593786001205444],\n [0.627542972564697, 0.473352015018463],\n [0.665585994720459, 0.495950996875763],\n [0.588353991508484, 0.546862006187439],\n [0.757824003696442, 0.14767599105835],\n [0.709249973297119, 0.201507985591888],\n [0.672684013843536, 0.256581008434296],\n [0.600408971309662, 0.74900496006012],\n [0.55826598405838, 0.261672019958496],\n [0.570303976535797, 0.187870979309082],\n [0.588165998458862, 0.109044015407562],\n [0.711045026779175, 0.398952007293701],\n [0.781069993972778, 0.435405015945435],\n [0.587247014045715, 0.398931980133057],\n [0.742869973182678, 0.355445981025696],\n [0.572156012058258, 0.437651991844177],\n [0.55186802148819, 0.536570012569427],\n [0.821442008018494, 0.457556009292603],\n [0.752701997756958, 0.457181990146637],\n [0.71375697851181, 0.467626988887787],\n [0.66711300611496, 0.460672974586487],\n [0.631101012229919, 0.447153985500336],\n [0.6008620262146, 0.432473003864288],\n [0.523481011390686, 0.405627012252808],\n [0.810747981071472, 0.523926019668579],\n [0.771045982837677, 0.348959028720856],\n [0.509127020835876, 0.562718033790588],\n [0.595292985439301, 0.485023975372314],\n [0.980530977249146, 0.401564002037048],\n [0.573499977588654, 0.420000016689301],\n [0.602994978427887, 0.548687994480133],\n [0.733529984951019, 0.376977026462555],\n [0.560611009597778, 0.519016981124878],\n [0.967685997486115, 0.644356966018677],\n [0.580985009670258, 0.387160003185272],\n [0.537728011608124, 0.505385041236877],\n [0.760966002941132, 0.779752969741821],\n [0.801778972148895, 0.831938028335571],\n [0.892440974712372, 0.54076099395752],\n [0.816350996494293, 0.740260004997253],\n [0.865594983100891, 0.333687007427216],\n [0.614073991775513, 0.883246004581451],\n [0.508952975273132, 0.579437971115112],\n [0.617941975593567, 0.508316040039062],\n [0.825608015060425, 0.397674977779388],\n [0.681214988231659, 0.39623498916626],\n [0.656635999679565, 0.400596976280212],\n [0.603900015354156, 0.710216999053955],\n [0.81208598613739, 0.588539004325867],\n [0.56801301240921, 0.944564998149872],\n [0.681007981300354, 0.898285031318665],\n [0.733752012252808, 0.869701027870178],\n [0.633830010890961, 0.398822009563446],\n [0.606792986392975, 0.39553701877594],\n [0.589659988880157, 0.391062021255493],\n [0.805015981197357, 0.342108011245728],\n [0.611334979534149, 0.362284004688263],\n [0.634037971496582, 0.355970978736877],\n [0.656635999679565, 0.355356991291046],\n [0.681214988231659, 0.35834002494812],\n [0.698584973812103, 0.363156020641327],\n [0.941866993904114, 0.319076001644135],\n [0.698584973812103, 0.387449026107788],\n [0.584177017211914, 0.624107003211975],\n [0.554318010807037, 0.566076993942261],\n [0.534153997898102, 0.62064003944397],\n [0.711217999458313, 0.819975018501282],\n [0.664629995822906, 0.852871000766754],\n [0.559099972248077, 0.902631998062134],\n [0.871706008911133, 0.791940987110138],\n [0.591234028339386, 0.373893976211548],\n [0.544341027736664, 0.451583981513977],\n [0.624562978744507, 0.924192011356354],\n [0.88577002286911, 0.615028977394104],\n [0.551338016986847, 0.695277988910675],\n [0.551980018615723, 0.704632043838501],\n [0.552887976169586, 0.715808033943176],\n [0.555167973041534, 0.730794012546539],\n [0.569944024085999, 0.767035007476807],\n [0.593203008174896, 0.685675978660583],\n [0.599261999130249, 0.681069016456604],\n [0.607599973678589, 0.677703022956848],\n [0.631937980651855, 0.663500010967255],\n [0.752032995223999, 0.601315021514893],\n [0.547226011753082, 0.420395016670227],\n [0.563543975353241, 0.359827995300293],\n [0.583841025829315, 0.368713974952698],\n [0.586614012718201, 0.692366003990173],\n [0.771915018558502, 0.683578014373779],\n [0.531597018241882, 0.352482974529266],\n [0.588370978832245, 0.804440975189209],\n [0.52079701423645, 0.442565023899078],\n [0.567984998226166, 0.493479013442993],\n [0.543282985687256, 0.819254994392395],\n [0.655317008495331, 0.745514988899231],\n [0.621008992195129, 0.574018001556396],\n [0.625559985637665, 0.78031200170517],\n [0.680198013782501, 0.570719003677368],\n [0.64276397228241, 0.604337990283966],\n [0.704662978649139, 0.621529996395111],\n [0.552012026309967, 0.862591981887817],\n [0.589071989059448, 0.508637011051178],\n [0.685944974422455, 0.775357007980347],\n [0.645735025405884, 0.812640011310577],\n [0.675342977046967, 0.703978002071381],\n [0.810858011245728, 0.646304965019226],\n [0.72012197971344, 0.714666962623596],\n [0.866151988506317, 0.682704985141754],\n [0.663187026977539, 0.644596993923187],\n [0.570082008838654, 0.466325998306274],\n [0.544561982154846, 0.548375964164734],\n [0.562758982181549, 0.558784961700439],\n [0.531987011432648, 0.530140042304993],\n [0.585271000862122, 0.335177004337311],\n [0.622952997684479, 0.32277899980545],\n [0.655896008014679, 0.320163011550903],\n [0.687132000923157, 0.322345972061157],\n [0.716481983661652, 0.333200991153717],\n [0.758756995201111, 0.382786989212036],\n [0.897013008594513, 0.468769013881683],\n [0.732392013072968, 0.424547016620636],\n [0.70211398601532, 0.433162987232208],\n [0.66652500629425, 0.433866024017334],\n [0.633504986763, 0.426087975502014],\n [0.603875994682312, 0.416586995124817],\n [0.579657971858978, 0.409945011138916],\n [0.992439985275269, 0.480777025222778],\n [0.567192018032074, 0.569419980049133],\n [0.54136598110199, 0.478899002075195],\n [0.526564002037048, 0.546118021011353],\n [0.523913025856018, 0.563830018043518],\n [0.531529009342194, 0.555056989192963],\n [0.566035985946655, 0.582329034805298],\n [0.51631098985672, 0.563053965568542],\n [0.5174720287323, 0.577877044677734],\n [0.573594987392426, 0.389806985855103],\n [0.560697972774506, 0.395331978797913],\n [0.549755990505219, 0.399751007556915],\n [0.710287988185883, 0.368252992630005],\n [0.723330020904541, 0.363372981548309],\n];\n\nexport const TRI468: number[] = [\n 127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9,\n 151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56,\n 157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91,\n 181, 85, 84, 17, 206, 203, 36, 148, 171, 140, 92, 40, 39, 193, 189, 244, 159, 158, 28, 247, 246, 161, 236, 3, 196, 54, 68, 104, 193, 168, 8, 117,\n 228, 31, 189, 193, 55, 98, 97, 99, 126, 47, 100, 166, 79, 218, 155, 154, 26, 209, 49, 131, 135, 136, 150, 47, 126, 217, 223, 52, 53, 45, 51, 134, 211,\n 170, 140, 67, 69, 108, 43, 106, 91, 230, 119, 120, 226, 130, 247, 63, 53, 52, 238, 20, 242, 46, 70, 156, 78, 62, 96, 46, 53, 63, 143, 34, 227, 173,\n 155, 133, 123, 117, 111, 44, 125, 19, 236, 134, 51, 216, 206, 205, 154, 153, 22, 39, 37, 167, 200, 201, 208, 36, 142, 100, 57, 212, 202, 20, 60, 99, 28,\n 158, 157, 35, 226, 113, 160, 159, 27, 204, 202, 210, 113, 225, 46, 43, 202, 204, 62, 76, 77, 137, 123, 116, 41, 38, 72, 203, 129, 142, 64, 98, 240, 49,\n 102, 64, 41, 73, 74, 212, 216, 207, 42, 74, 184, 169, 170, 211, 170, 149, 176, 105, 66, 69, 122, 6, 168, 123, 147, 187, 96, 77, 90, 65, 55, 107, 89,\n 90, 180, 101, 100, 120, 63, 105, 104, 93, 137, 227, 15, 86, 85, 129, 102, 49, 14, 87, 86, 55, 8, 9, 100, 47, 121, 145, 23, 22, 88, 89, 179, 6, 122,\n 196, 88, 95, 96, 138, 172, 136, 215, 58, 172, 115, 48, 219, 42, 80, 81, 195, 3, 51, 43, 146, 61, 171, 175, 199, 81, 82, 38, 53, 46, 225, 144, 163, 110,\n 246, 33, 7, 52, 65, 66, 229, 228, 117, 34, 127, 234, 107, 108, 69, 109, 108, 151, 48, 64, 235, 62, 78, 191, 129, 209, 126, 111, 35, 143, 163, 161, 246,\n 117, 123, 50, 222, 65, 52, 19, 125, 141, 221, 55, 65, 3, 195, 197, 25, 7, 33, 220, 237, 44, 70, 71, 139, 122, 193, 245, 247, 130, 33, 71, 21, 162,\n 153, 158, 159, 170, 169, 150, 188, 174, 196, 216, 186, 92, 144, 160, 161, 2, 97, 167, 141, 125, 241, 164, 167, 37, 72, 38, 12, 145, 159, 160, 38, 82, 13,\n 63, 68, 71, 226, 35, 111, 158, 153, 154, 101, 50, 205, 206, 92, 165, 209, 198, 217, 165, 167, 97, 220, 115, 218, 133, 112, 243, 239, 238, 241, 214,\n 135, 169, 190, 173, 133, 171, 208, 32, 125, 44, 237, 86, 87, 178, 85, 86, 179, 84, 85, 180, 83, 84, 181, 201, 83, 182, 137, 93, 132, 76, 62, 183, 61,\n 76, 184, 57, 61, 185, 212, 57, 186, 214, 207, 187, 34, 143, 156, 79, 239, 237, 123, 137, 177, 44, 1, 4, 201, 194, 32, 64, 102, 129, 213, 215, 138, 59,\n 166, 219, 242, 99, 97, 2, 94, 141, 75, 59, 235, 24, 110, 228, 25, 130, 226, 23, 24, 229, 22, 23, 230, 26, 22, 231, 112, 26, 232, 189, 190, 243, 221, 56,\n 190, 28, 56, 221, 27, 28, 222, 29, 27, 223, 30, 29, 224, 247, 30, 225, 238, 79, 20, 166, 59, 75, 60, 75, 240, 147, 177, 215, 20, 79, 166, 187, 147, 213,\n 112, 233, 244, 233, 128, 245, 128, 114, 188, 114, 217, 174, 131, 115, 220, 217, 198, 236, 198, 131, 134, 177, 132, 58, 143, 35, 124, 110, 163, 7, 228,\n 110, 25, 356, 389, 368, 11, 302, 267, 452, 350, 349, 302, 303, 269, 357, 343, 277, 452, 453, 357, 333, 332, 297, 175, 152, 377, 384, 398, 382, 347,\n 348, 330, 303, 304, 270, 9, 336, 337, 278, 279, 360, 418, 262, 431, 304, 408, 409, 310, 415, 407, 270, 409, 410, 450, 348, 347, 422, 430, 434, 313,\n 314, 17, 306, 307, 375, 387, 388, 260, 286, 414, 398, 335, 406, 418, 364, 367, 416, 423, 358, 327, 251, 284, 298, 281, 5, 4, 373, 374, 253, 307, 320,\n 321, 425, 427, 411, 421, 313, 18, 321, 405, 406, 320, 404, 405, 315, 16, 17, 426, 425, 266, 377, 400, 369, 322, 391, 269, 417, 465, 464, 386, 257, 258,\n 466, 260, 388, 456, 399, 419, 284, 332, 333, 417, 285, 8, 346, 340, 261, 413, 441, 285, 327, 460, 328, 355, 371, 329, 392, 439, 438, 382, 341, 256,\n 429, 420, 360, 364, 394, 379, 277, 343, 437, 443, 444, 283, 275, 440, 363, 431, 262, 369, 297, 338, 337, 273, 375, 321, 450, 451, 349, 446, 342, 467,\n 293, 334, 282, 458, 461, 462, 276, 353, 383, 308, 324, 325, 276, 300, 293, 372, 345, 447, 382, 398, 362, 352, 345, 340, 274, 1, 19, 456, 248, 281, 436,\n 427, 425, 381, 256, 252, 269, 391, 393, 200, 199, 428, 266, 330, 329, 287, 273, 422, 250, 462, 328, 258, 286, 384, 265, 353, 342, 387, 259, 257, 424,\n 431, 430, 342, 353, 276, 273, 335, 424, 292, 325, 307, 366, 447, 345, 271, 303, 302, 423, 266, 371, 294, 455, 460, 279, 278, 294, 271, 272, 304, 432,\n 434, 427, 272, 407, 408, 394, 430, 431, 395, 369, 400, 334, 333, 299, 351, 417, 168, 352, 280, 411, 325, 319, 320, 295, 296, 336, 319, 403, 404, 330,\n 348, 349, 293, 298, 333, 323, 454, 447, 15, 16, 315, 358, 429, 279, 14, 15, 316, 285, 336, 9, 329, 349, 350, 374, 380, 252, 318, 402, 403, 6, 197, 419,\n 318, 319, 325, 367, 364, 365, 435, 367, 397, 344, 438, 439, 272, 271, 311, 195, 5, 281, 273, 287, 291, 396, 428, 199, 311, 271, 268, 283, 444, 445,\n 373, 254, 339, 263, 466, 249, 282, 334, 296, 449, 347, 346, 264, 447, 454, 336, 296, 299, 338, 10, 151, 278, 439, 455, 292, 407, 415, 358, 371, 355,\n 340, 345, 372, 390, 249, 466, 346, 347, 280, 442, 443, 282, 19, 94, 370, 441, 442, 295, 248, 419, 197, 263, 255, 359, 440, 275, 274, 300, 383, 368,\n 351, 412, 465, 263, 467, 466, 301, 368, 389, 380, 374, 386, 395, 378, 379, 412, 351, 419, 436, 426, 322, 373, 390, 388, 2, 164, 393, 370, 462, 461,\n 164, 0, 267, 302, 11, 12, 374, 373, 387, 268, 12, 13, 293, 300, 301, 446, 261, 340, 385, 384, 381, 330, 266, 425, 426, 423, 391, 429, 355, 437, 391,\n 327, 326, 440, 457, 438, 341, 382, 362, 459, 457, 461, 434, 430, 394, 414, 463, 362, 396, 369, 262, 354, 461, 457, 316, 403, 402, 315, 404, 403, 314,\n 405, 404, 313, 406, 405, 421, 418, 406, 366, 401, 361, 306, 408, 407, 291, 409, 408, 287, 410, 409, 432, 436, 410, 434, 416, 411, 264, 368, 383, 309,\n 438, 457, 352, 376, 401, 274, 275, 4, 421, 428, 262, 294, 327, 358, 433, 416, 367, 289, 455, 439, 462, 370, 326, 2, 326, 370, 305, 460, 455, 254,\n 449, 448, 255, 261, 446, 253, 450, 449, 252, 451, 450, 256, 452, 451, 341, 453, 452, 413, 464, 463, 441, 413, 414, 258, 442, 441, 257, 443, 442, 259,\n 444, 443, 260, 445, 444, 467, 342, 445, 459, 458, 250, 289, 392, 290, 290, 328, 460, 376, 433, 435, 250, 290, 392, 411, 416, 433, 341, 463, 464, 453,\n 464, 465, 357, 465, 412, 343, 412, 399, 360, 363, 440, 437, 399, 456, 420, 456, 363, 401, 435, 288, 372, 383, 353, 339, 255, 249, 448, 261, 255, 133,\n 243, 190, 133, 155, 112, 33, 246, 247, 33, 130, 25, 398, 384, 286, 362, 398, 414, 362, 463, 341, 263, 359, 467, 263, 249, 255, 466, 467, 260, 75, 60,\n 166, 238, 239, 79, 162, 127, 139, 72, 11, 37, 121, 232, 120, 73, 72, 39, 114, 128, 47, 233, 232, 128, 103, 104, 67, 152, 175, 148, 173, 157, 155,\n 119, 118, 101, 74, 73, 40, 107, 9, 108, 49, 48, 131, 32, 194, 211, 184, 74, 185, 191, 80, 183, 185, 40, 186, 119, 230, 118, 210, 202, 214, 84, 83, 17,\n 77, 76, 146, 161, 160, 30, 190, 56, 173, 182, 106, 194, 138, 135, 192, 129, 203, 98, 54, 21, 68, 5, 51, 4, 145, 144, 23, 90, 77, 91, 207, 205, 187, 83,\n 201, 18, 181, 91, 182, 180, 90, 181, 16, 85, 17, 205, 206, 36, 176, 148, 140, 165, 92, 39, 245, 193, 244, 27, 159, 28, 30, 247, 161, 174, 236, 196,\n 103, 54, 104, 55, 193, 8, 111, 117, 31, 221, 189, 55, 240, 98, 99, 142, 126, 100, 219, 166, 218, 112, 155, 26, 198, 209, 131, 169, 135, 150, 114, 47,\n 217, 224, 223, 53, 220, 45, 134, 32, 211, 140, 109, 67, 108, 146, 43, 91, 231, 230, 120, 113, 226, 247, 105, 63, 52, 241, 238, 242, 124, 46, 156, 95,\n 78, 96, 70, 46, 63, 116, 143, 227, 116, 123, 111, 1, 44, 19, 3, 236, 51, 207, 216, 205, 26, 154, 22, 165, 39, 167, 199, 200, 208, 101, 36, 100, 43,\n 57, 202, 242, 20, 99, 56, 28, 157, 124, 35, 113, 29, 160, 27, 211, 204, 210, 124, 113, 46, 106, 43, 204, 96, 62, 77, 227, 137, 116, 73, 41, 72, 36, 203,\n 142, 235, 64, 240, 48, 49, 64, 42, 41, 74, 214, 212, 207, 183, 42, 184, 210, 169, 211, 140, 170, 176, 104, 105, 69, 193, 122, 168, 50, 123, 187, 89, 96,\n 90, 66, 65, 107, 179, 89, 180, 119, 101, 120, 68, 63, 104, 234, 93, 227, 16, 15, 85, 209, 129, 49, 15, 14, 86, 107, 55, 9, 120, 100, 121, 153, 145, 22,\n 178, 88, 179, 197, 6, 196, 89, 88, 96, 135, 138, 136, 138, 215, 172, 218, 115, 219, 41, 42, 81, 5, 195, 51, 57, 43, 61, 208, 171, 199, 41, 81, 38,\n 224, 53, 225, 24, 144, 110, 105, 52, 66, 118, 229, 117, 227, 34, 234, 66, 107, 69, 10, 109, 151, 219, 48, 235, 183, 62, 191, 142, 129, 126, 116, 111,\n 143, 7, 163, 246, 118, 117, 50, 223, 222, 52, 94, 19, 141, 222, 221, 65, 196, 3, 197, 45, 220, 44, 156, 70, 139, 188, 122, 245, 139, 71, 162, 145,\n 153, 159, 149, 170, 150, 122, 188, 196, 206, 216, 92, 163, 144, 161, 164, 2, 167, 242, 141, 241, 0, 164, 37, 11, 72, 12, 144, 145, 160, 12, 38, 13, 70,\n 63, 71, 31, 226, 111, 157, 158, 154, 36, 101, 205, 203, 206, 165, 126, 209, 217, 98, 165, 97, 237, 220, 218, 237, 239, 241, 210, 214, 169, 140, 171, 32,\n 241, 125, 237, 179, 86, 178, 180, 85, 179, 181, 84, 180, 182, 83, 181, 194, 201, 182, 177, 137, 132, 184, 76, 183, 185, 61, 184, 186, 57, 185, 216, 212,\n 186, 192, 214, 187, 139, 34, 156, 218, 79, 237, 147, 123, 177, 45, 44, 4, 208, 201, 32, 98, 64, 129, 192, 213, 138, 235, 59, 219, 141, 242, 97, 97, 2,\n 141, 240, 75, 235, 229, 24, 228, 31, 25, 226, 230, 23, 229, 231, 22, 230, 232, 26, 231, 233, 112, 232, 244, 189, 243, 189, 221, 190, 222, 28, 221,\n 223, 27, 222, 224, 29, 223, 225, 30, 224, 113, 247, 225, 99, 60, 240, 213, 147, 215, 60, 20, 166, 192, 187, 213, 243, 112, 244, 244, 233, 245, 245,\n 128, 188, 188, 114, 174, 134, 131, 220, 174, 217, 236, 236, 198, 134, 215, 177, 58, 156, 143, 124, 25, 110, 7, 31, 228, 25, 264, 356, 368, 0, 11, 267,\n 451, 452, 349, 267, 302, 269, 350, 357, 277, 350, 452, 357, 299, 333, 297, 396, 175, 377, 381, 384, 382, 280, 347, 330, 269, 303, 270, 151, 9, 337,\n 344, 278, 360, 424, 418, 431, 270, 304, 409, 272, 310, 407, 322, 270, 410, 449, 450, 347, 432, 422, 434, 18, 313, 17, 291, 306, 375, 259, 387, 260,\n 424, 335, 418, 434, 364, 416, 391, 423, 327, 301, 251, 298, 275, 281, 4, 254, 373, 253, 375, 307, 321, 280, 425, 411, 200, 421, 18, 335, 321, 406,\n 321, 320, 405, 314, 315, 17, 423, 426, 266, 396, 377, 369, 270, 322, 269, 413, 417, 464, 385, 386, 258, 248, 456, 419, 298, 284, 333, 168, 417, 8,\n 448, 346, 261, 417, 413, 285, 326, 327, 328, 277, 355, 329, 309, 392, 438, 381, 382, 256, 279, 429, 360, 365, 364, 379, 355, 277, 437, 282, 443, 283,\n 281, 275, 363, 395, 431, 369, 299, 297, 337, 335, 273, 321, 348, 450, 349, 359, 446, 467, 283, 293, 282, 250, 458, 462, 300, 276, 383, 292, 308, 325,\n 283, 276, 293, 264, 372, 447, 346, 352, 340, 354, 274, 19, 363, 456, 281, 426, 436, 425, 380, 381, 252, 267, 269, 393, 421, 200, 428, 371, 266, 329,\n 432, 287, 422, 290, 250, 328, 385, 258, 384, 446, 265, 342, 386, 387, 257, 422, 424, 430, 445, 342, 276, 422, 273, 424, 306, 292, 307, 352, 366, 345,\n 268, 271, 302, 358, 423, 371, 327, 294, 460, 331, 279, 294, 303, 271, 304, 436, 432, 427, 304, 272, 408, 395, 394, 431, 378, 395, 400, 296, 334, 299,\n 6, 351, 168, 376, 352, 411, 307, 325, 320, 285, 295, 336, 320, 319, 404, 329, 330, 349, 334, 293, 333, 366, 323, 447, 316, 15, 315, 331, 358, 279,\n 317, 14, 316, 8, 285, 9, 277, 329, 350, 253, 374, 252, 319, 318, 403, 351, 6, 419, 324, 318, 325, 397, 367, 365, 288, 435, 397, 278, 344, 439, 310,\n 272, 311, 248, 195, 281, 375, 273, 291, 175, 396, 199, 312, 311, 268, 276, 283, 445, 390, 373, 339, 295, 282, 296, 448, 449, 346, 356, 264, 454, 337,\n 336, 299, 337, 338, 151, 294, 278, 455, 308, 292, 415, 429, 358, 355, 265, 340, 372, 388, 390, 466, 352, 346, 280, 295, 442, 282, 354, 19, 370, 285,\n 441, 295, 195, 248, 197, 457, 440, 274, 301, 300, 368, 417, 351, 465, 251, 301, 389, 385, 380, 386, 394, 395, 379, 399, 412, 419, 410, 436, 322, 387,\n 373, 388, 326, 2, 393, 354, 370, 461, 393, 164, 267, 268, 302, 12, 386, 374, 387, 312, 268, 13, 298, 293, 301, 265, 446, 340, 380, 385, 381, 280, 330,\n 425, 322, 426, 391, 420, 429, 437, 393, 391, 326, 344, 440, 438, 458, 459, 461, 364, 434, 394, 428, 396, 262, 274, 354, 457, 317, 316, 402, 316, 315,\n 403, 315, 314, 404, 314, 313, 405, 313, 421, 406, 323, 366, 361, 292, 306, 407, 306, 291, 408, 291, 287, 409, 287, 432, 410, 427, 434, 411, 372, 264,\n 383, 459, 309, 457, 366, 352, 401, 1, 274, 4, 418, 421, 262, 331, 294, 358, 435, 433, 367, 392, 289, 439, 328, 462, 326, 94, 2, 370, 289, 305, 455, 339,\n 254, 448, 359, 255, 446, 254, 253, 449, 253, 252, 450, 252, 256, 451, 256, 341, 452, 414, 413, 463, 286, 441, 414, 286, 258, 441, 258, 257, 442, 257,\n 259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357,\n 453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255];\n\nexport const TRI68: number[] = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59,\n 8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16,\n 45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24,\n 23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29,\n 39, 40, 29, 47, 42, 30, 31, 32, 30, 32, 33, 30, 33, 34, 30, 34, 35, 31, 50, 32, 31, 40, 41, 31, 48, 49, 31, 49, 50, 32, 51, 33, 32, 50, 51, 33, 51, 34, 34, 52,\n 35, 34, 51, 52, 35, 46, 47, 35, 52, 53, 35, 53, 54, 36, 41, 37, 37, 40, 38, 37, 41, 40, 38, 40, 39, 42, 47, 43, 43, 47, 44, 44, 46, 45, 44, 47, 46, 48, 60, 49,\n 48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56,\n 66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22];\n\nexport const TRI33: number[] = [\n /* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3,\n /* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2,\n /* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25,\n /* nose */ 11, 12, 4, 11, 4, 13, 1, 12, 11, 11, 13, 2, 12, 14, 4, 4, 14, 13,\n /* up-lip */ 14, 5, 15, 14, 15, 6, 12, 5, 14, 14, 6, 13,\n /* cheeks */ 8, 12, 1, 2, 13, 10, 8, 26, 12, 10, 13, 27, 26, 5, 12, 13, 6, 27, 0, 26, 8, 10, 27, 3,\n /* chin */ 5, 32, 16, 16, 32, 6, 5, 30, 32, 6, 32, 31,\n /* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29,\n];\n\nexport const TRI7: number[] = [0, 4, 1, 2, 4, 3, 4, 5, 6];\n\nexport const VTX68: number[] = [\n /* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356,\n /* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300,\n /* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327,\n /* eyes */ 33, 160, 158, 133, 153, 144, 362, 385, 387, 263, 373, 380,\n /* lip */ 57, 40, 37, 0, 267, 270, 287, 321, 314, 17, 84, 91,\n /* mouth */ 78, 81, 13, 311, 308, 402, 14, 178,\n];\n\nexport const VTX33: number[] = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152];\n\nexport const VTX7: number[] = [33, 133, 362, 263, 1, 78, 308];\n\nexport const UV68 = VTX68.map((x) => UV468[x]);\n\nexport const UV33 = VTX33.map((x) => UV468[x]);\n\nexport const UV7 = VTX7.map((x) => UV468[x]);\n\n// https://github.com/tensorflow/tfjs-models/blob/master/face-landmarks-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const pairsLips: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nexport const pairsLeftEye: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nexport const pairsLeftEyebrow: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nexport const pairsLeftIris: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nexport const pairsRightEye: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nexport const pairsRightEyebrow: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nexport const pairsRightIris: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nexport const pairsFaceContour: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389],\n [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397],\n [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172],\n [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162],\n [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const contourKeypoints = {\n lips: connectionsToIndices(pairsLips),\n leftEye: connectionsToIndices(pairsLeftEye),\n leftEyebrow: connectionsToIndices(pairsLeftEyebrow),\n leftIris: connectionsToIndices(pairsLeftIris),\n rightEye: connectionsToIndices(pairsRightEye),\n rightEyebrow: connectionsToIndices(pairsRightEyebrow),\n rightIris: connectionsToIndices(pairsRightIris),\n faceOval: connectionsToIndices(pairsFaceContour),\n};\n\nexport const pairsFaceMesh: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11],\n [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72],\n [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175],\n [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73],\n [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74],\n [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40],\n [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76],\n [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56],\n [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21],\n [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144],\n [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91],\n [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85],\n [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193],\n [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247],\n [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117],\n [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98],\n [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209],\n [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47],\n [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67],\n [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230],\n [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46],\n [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46],\n [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236],\n [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154],\n [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57],\n [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28],\n [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113],\n [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62],\n [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64],\n [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41],\n [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170],\n [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122],\n [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89],\n [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63],\n [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14],\n [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100],\n [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88],\n [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215],\n [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43],\n [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81],\n [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229],\n [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107],\n [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129],\n [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117],\n [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3],\n [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220],\n [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71],\n [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188],\n [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164],\n [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38],\n [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206],\n [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165],\n [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214],\n [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171],\n [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84],\n [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201],\n [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57],\n [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214],\n [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44],\n [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64],\n [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2],\n [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24],\n [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26],\n [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189],\n [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29],\n [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247],\n [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147],\n [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187],\n [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114],\n [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217],\n [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110],\n [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356],\n [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357],\n [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333],\n [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9],\n [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418],\n [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450],\n [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313],\n [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335],\n [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423],\n [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307],\n [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421],\n [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426],\n [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322],\n [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456],\n [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417],\n [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355],\n [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382],\n [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443],\n [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431],\n [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446],\n [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458],\n [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372],\n [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274],\n [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269],\n [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266],\n [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265],\n [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424],\n [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366],\n [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423],\n [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432],\n [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394],\n [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352],\n [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295],\n [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323],\n [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358],\n [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374],\n [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6],\n [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344],\n [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195],\n [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283],\n [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282],\n [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338],\n [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292],\n [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442],\n [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441],\n [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300],\n [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263],\n [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436],\n [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370],\n [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293],\n [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330],\n [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440],\n [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459],\n [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354],\n [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315],\n [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366],\n [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291],\n [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264],\n [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352],\n [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433],\n [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462],\n [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255],\n [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252],\n [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441],\n [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257],\n [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459],\n [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290],\n [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341],\n [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357],\n [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420],\n [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372],\n [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133],\n [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33],\n [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263],\n [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466],\n [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72],\n [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73],\n [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152],\n [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74],\n [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184],\n [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185],\n [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77],\n [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190],\n [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54],\n [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145],\n [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181],\n [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16],\n [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245],\n [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30],\n [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111],\n [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240],\n [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198],\n [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114],\n [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109],\n [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231],\n [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124],\n [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70],\n [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3],\n [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26],\n [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43],\n [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56],\n [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124],\n [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96],\n [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235],\n [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42],\n [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140],\n [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193],\n [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179],\n [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68],\n [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15],\n [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120],\n [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89],\n [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138],\n [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57],\n [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41],\n [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118],\n [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66],\n [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142],\n [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118],\n [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196],\n [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156],\n [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122],\n [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164],\n [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12],\n [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31],\n [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98],\n [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237],\n [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179],\n [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181],\n [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184],\n [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186],\n [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218],\n [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45],\n [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235],\n [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97],\n [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230],\n [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232],\n [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222],\n [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224],\n [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213],\n [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192],\n [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188],\n [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174],\n [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25],\n [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264],\n [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350],\n [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299],\n [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151],\n [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424],\n [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449],\n [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18],\n [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434],\n [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301],\n [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280],\n [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335],\n [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396],\n [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413],\n [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168],\n [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417],\n [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381],\n [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365],\n [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395],\n [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335],\n [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250],\n [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292],\n [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354],\n [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426],\n [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371],\n [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290],\n [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422],\n [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422],\n [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358],\n [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331],\n [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395],\n [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296],\n [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285],\n [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329],\n [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331],\n [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8],\n [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351],\n [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397],\n [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248],\n [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175],\n [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295],\n [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356],\n [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308],\n [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265],\n [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285],\n [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457],\n [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394],\n [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410],\n [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268],\n [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298],\n [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420],\n [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344],\n [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274],\n [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316],\n [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323],\n [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306],\n [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372],\n [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366],\n [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435],\n [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328],\n [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359],\n [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253],\n [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286],\n [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258],\n [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309],\n [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305],\n [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453],\n [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343],\n [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360],\n [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265],\n [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n", "// @tensorflow/tfjs-models/face-landmark-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nconst LIPS_CONNECTIONS: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nconst LEFT_EYE_CONNECTIONS: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nconst LEFT_EYEBROW_CONNECTIONS: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nconst LEFT_IRIS_CONNECTIONS: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nconst RIGHT_EYE_CONNECTIONS: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nconst RIGHT_EYEBROW_CONNECTIONS: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nconst RIGHT_IRIS_CONNECTIONS: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nconst FACE_OVAL_CONNECTIONS: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389], [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397], [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172], [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162], [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const MEDIAPIPE_FACE_MESH_CONNECTED_KEYPOINTS_PAIRS: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11], [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72], [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175], [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73], [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74], [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40], [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76], [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56], [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21], [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144], [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91], [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85], [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193], [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247], [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117], [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98], [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209], [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47], [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67], [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230], [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46], [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46], [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236], [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154], [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57], [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28], [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113], [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62], [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64], [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41], [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170], [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122], [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89], [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63], [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14], [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100], [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88], [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215], [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43], [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81], [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229], [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107], [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129], [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117], [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3], [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220], [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71], [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188], [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164], [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38], [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206], [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165], [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214], [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171], [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84], [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201], [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57], [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214], [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44], [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64], [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2], [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24], [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26], [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189], [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29], [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247], [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147], [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187], [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114], [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217], [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110], [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356], [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357], [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333], [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9], [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418], [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450], [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313], [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335], [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423], [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307], [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421], [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426], [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322], [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456], [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417], [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355], [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382], [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443], [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431], [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446], [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458], [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372], [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274], [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269], [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266], [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265], [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424], [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366], [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423], [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432], [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394], [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352], [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295], [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323], [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358], [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374], [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6], [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344], [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195], [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283], [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282], [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338], [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292], [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442], [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441], [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300], [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263], [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436], [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370], [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293], [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330], [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440], [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459], [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354], [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315], [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366], [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291], [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264], [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352], [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433], [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462], [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255], [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252], [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441], [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257], [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459], [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290], [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341], [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357], [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420], [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372], [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133], [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33], [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263], [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466], [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72], [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73], [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152], [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74], [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184], [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185], [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77], [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190], [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54], [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145], [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181], [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16], [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245], [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30], [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111], [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240], [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198], [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114], [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109], [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231], [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124], [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70], [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3], [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26], [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43], [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56], [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124], [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96], [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235], [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42], [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140], [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193], [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179], [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68], [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15], [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120], [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89], [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138], [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57], [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41], [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118], [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66], [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142], [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118], [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196], [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156], [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122], [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164], [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12], [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31], [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98], [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237], [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179], [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181], [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184], [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186], [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218], [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45], [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235], [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97], [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230], [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232], [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222], [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224], [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213], [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192], [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188], [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174], [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25], [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264], [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350], [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299], [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151], [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424], [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449], [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18], [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434], [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301], [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280], [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335], [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396], [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413], [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168], [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417], [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381], [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365], [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395], [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335], [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250], [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292], [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354], [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426], [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371], [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290], [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422], [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422], [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358], [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331], [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395], [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296], [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285], [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329], [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331], [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8], [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351], [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397], [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248], [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175], [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295], [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356], [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308], [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265], [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285], [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457], [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394], [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410], [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268], [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298], [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420], [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344], [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274], [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316], [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323], [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306], [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372], [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366], [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435], [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328], [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359], [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253], [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286], [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258], [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309], [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305], [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453], [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343], [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360], [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265], [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = {\n lips: connectionsToIndices(LIPS_CONNECTIONS),\n leftEye: connectionsToIndices(LEFT_EYE_CONNECTIONS),\n leftEyebrow: connectionsToIndices(LEFT_EYEBROW_CONNECTIONS),\n leftIris: connectionsToIndices(LEFT_IRIS_CONNECTIONS),\n rightEye: connectionsToIndices(RIGHT_EYE_CONNECTIONS),\n rightEyebrow: connectionsToIndices(RIGHT_EYEBROW_CONNECTIONS),\n rightIris: connectionsToIndices(RIGHT_IRIS_CONNECTIONS),\n faceOval: connectionsToIndices(FACE_OVAL_CONNECTIONS),\n};\n\nconst indexLabelPairs: [number, string][] = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR)\n .map(([label, indices]) => indices.map((index) => [index, label] as [number, string]))\n .flat();\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs);\n\ntype AssignAverage = number[];\nexport interface LandmarksRefinementConfig {\n indexesMapping: number[]; // Maps indexes of the given set of landmarks to indexes of the resulting set of landmarks. Should be non empty and contain the same amount of indexes as landmarks in the corresponding input\n zRefinement: 'none'|'copy'|AssignAverage; // Z refinement instructions.\n}\n\nexport const LANDMARKS_REFINEMENT_LIPS_CONFIG = [\n 61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291, // Lower outer.\n 185, 40, 39, 37, 0, 267, 269, 270, 409, // Upper outer(excluding corners).\n 78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308, // Lower inner.\n 191, 80, 81, 82, 13, 312, 311, 310, 415, // Upper inner(excluding corners).\n 76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306, // Lower semi - outer.\n 184, 74, 73, 72, 11, 302, 303, 304, 408, // Upper semi - outer(excluding corners).\n 62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292, // Lower semi - inner.\n 183, 42, 41, 38, 12, 268, 271, 272, 407, // Upper semi - inner(excluding corners).\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // upper contour (excluding corners).\n 130, 25, 110, 24, 23, 22, 26, 112, 243, // Halo x2 lower contour.\n 247, 30, 29, 27, 28, 56, 190, // Halo x2 upper contour (excluding corners).\n 226, 31, 228, 229, 230, 231, 232, 233, 244, // Halo x3 lower contour.\n 113, 225, 224, 223, 222, 221, 189, // Halo x3 upper contour (excluding corners).\n 35, 124, 46, 53, 52, 65, // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour.\n 143, 111, 117, 118, 119, 120, 121, 128, 245, // Halo x5 lower contour.\n 156, 70, 63, 105, 66, 107, 55, 193, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n 359, 255, 339, 254, 253, 252, 256, 341, 463, // Halo x2 lower contour.\n 467, 260, 259, 257, 258, 286, 414, // Halo x2 upper contour (excluding corners).\n 446, 261, 448, 449, 450, 451, 452, 453, 464, // Halo x3 lower contour.\n 342, 445, 444, 443, 442, 441, 413, // Halo x3 upper contour (excluding corners).\n 265, 353, 276, 283, 282, 295, // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour.\n 372, 340, 346, 347, 348, 349, 350, 357, 465, // Halo x5 lower contour.\n 383, 300, 293, 334, 296, 336, 285, 417, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_IRIS_CONFIG = [\n 468, // Center.\n 469, // Iris right edge.\n 470, // Iris top edge.\n 471, // Iris left edge.\n 472, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // Upper contour (excluding corners).\n];\n*/\n\nexport const LANDMARKS_REFINEMENT_RIGHT_IRIS_CONFIG = [\n 473, // Center.\n 474, // Iris right edge.\n 475, // Iris top edge.\n 476, // Iris left edge.\n 477, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n];\n*/\n", "import { TRI468 as triangulation } from '../face/facemeshcoords';\nimport { mergeDeep } from '../util/util';\nimport { getCanvasContext, rad2deg, rect, point, lines, arrow, labels, replace } from './primitives';\nimport { options } from './options';\nimport * as facemeshConstants from '../face/constants';\nimport type { FaceResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet localOptions: DrawOptions;\n\nfunction drawLabels(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (!localOptions.drawLabels || (localOptions.faceLabels?.length === 0)) return;\n let l = localOptions.faceLabels.slice();\n if (f.score) l = replace(l, '[score]', 100 * f.score);\n if (f.gender) l = replace(l, '[gender]', f.gender);\n if (f.genderScore) l = replace(l, '[genderScore]', 100 * f.genderScore);\n if (f.age) l = replace(l, '[age]', f.age);\n if (f.distance) l = replace(l, '[distance]', 100 * f.distance);\n if (f.real) l = replace(l, '[real]', 100 * f.real);\n if (f.live) l = replace(l, '[live]', 100 * f.live);\n if (f.emotion && f.emotion.length > 0) {\n const emotion = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`);\n if (emotion.length > 3) emotion.length = 3;\n l = replace(l, '[emotions]', emotion.join(' '));\n }\n if (f.rotation?.angle?.roll) l = replace(l, '[roll]', rad2deg(f.rotation.angle.roll));\n if (f.rotation?.angle?.yaw) l = replace(l, '[yaw]', rad2deg(f.rotation.angle.yaw));\n if (f.rotation?.angle?.pitch) l = replace(l, '[pitch]', rad2deg(f.rotation.angle.pitch));\n if (f.rotation?.gaze?.bearing) l = replace(l, '[gaze]', rad2deg(f.rotation.gaze.bearing));\n labels(ctx, l, f.box[0], f.box[1], localOptions);\n}\n\nfunction drawIrisElipse(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n // iris: array[center, left, top, right, bottom]\n if (f.annotations?.leftEyeIris && f.annotations?.leftEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n if (f.annotations?.rightEyeIris && f.annotations?.rightEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n}\n\nfunction drawGazeSpheres(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.angle && typeof Path2D !== 'undefined') {\n ctx.strokeStyle = 'pink';\n const valX = (f.box[0] + f.box[2] / 2) - (f.box[3] * rad2deg(f.rotation.angle.yaw) / 90);\n const valY = (f.box[1] + f.box[3] / 2) + (f.box[2] * rad2deg(f.rotation.angle.pitch) / 90);\n const pathV = new Path2D(`\n M ${f.box[0] + f.box[2] / 2} ${f.box[1]}\n C\n ${valX} ${f.box[1]},\n ${valX} ${f.box[1] + f.box[3]},\n ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]}\n `);\n const pathH = new Path2D(`\n M ${f.box[0]} ${f.box[1] + f.box[3] / 2}\n C \n ${f.box[0]} ${valY},\n ${f.box[0] + f.box[2]} ${valY},\n ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2}\n `);\n ctx.stroke(pathH);\n ctx.stroke(pathV);\n }\n}\n\nfunction drawGazeArrows(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.gaze.strength && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) {\n ctx.strokeStyle = 'pink';\n ctx.fillStyle = 'pink';\n const leftGaze = [\n f.annotations.leftEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.leftEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4);\n const rightGaze = [\n f.annotations.rightEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.rightEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4);\n }\n}\n\nfunction drawFacePolygons(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPolygons && f.mesh.length >= 468) {\n ctx.lineWidth = 1;\n for (let i = 0; i < triangulation.length / 3; i++) {\n const points = [triangulation[i * 3 + 0], triangulation[i * 3 + 1], triangulation[i * 3 + 2]].map((index) => f.mesh[index]);\n lines(ctx, points, localOptions);\n }\n drawIrisElipse(f, ctx);\n }\n /*\n if (localOptions.drawPolygons && f.contours.length > 1) {\n ctx.lineWidth = 5;\n lines(ctx, f.contours, opt);\n }\n ctx.lineWidth = 1;\n */\n}\n\nfunction drawFacePoints(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPoints && f.mesh.length >= 468) {\n for (let i = 0; i < f.mesh.length; i++) {\n point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions);\n if (localOptions.drawAttention) {\n if (facemeshConstants.LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) + 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n }\n }\n }\n}\n\nfunction drawFaceBoxes(f: FaceResult, ctx) {\n if (localOptions.drawBoxes) {\n rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions);\n }\n}\n\n/** draw detected faces */\nexport function face(inCanvas: AnyCanvas, result: FaceResult[], drawOptions?: Partial) {\n localOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n for (const f of result) {\n drawFaceBoxes(f, ctx);\n drawLabels(f, ctx);\n if (f.mesh && f.mesh.length > 0) {\n drawFacePoints(f, ctx);\n drawFacePolygons(f, ctx);\n drawGazeSpheres(f, ctx);\n drawGazeArrows(f, ctx);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, curves, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { BodyResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected bodies */\nexport function body(inCanvas: AnyCanvas, result: BodyResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n for (let i = 0; i < result.length; i++) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n ctx.lineWidth = localOptions.lineWidth;\n ctx.font = localOptions.font;\n if (localOptions.drawBoxes && result[i].box && result[i].box.length === 4) {\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.bodyLabels?.length > 0)) {\n let l = localOptions.bodyLabels.slice();\n l = replace(l, '[score]', 100 * result[i].score);\n labels(ctx, l, result[i].box[0], result[i].box[1], localOptions);\n }\n }\n if (localOptions.drawPoints && result[i].keypoints) {\n for (let pt = 0; pt < result[i].keypoints.length; pt++) {\n if (!result[i].keypoints[pt].score || (result[i].keypoints[pt].score === 0)) continue;\n ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions);\n point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);\n }\n }\n if (localOptions.drawLabels && (localOptions.bodyPartLabels?.length > 0) && result[i].keypoints) {\n ctx.font = localOptions.font;\n for (const pt of result[i].keypoints) {\n if (!pt.score || (pt.score === 0)) continue;\n let l = localOptions.bodyPartLabels.slice();\n l = replace(l, '[label]', pt.part);\n l = replace(l, '[score]', 100 * pt.score);\n labels(ctx, l, pt.position[0], pt.position[1], localOptions);\n }\n }\n if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {\n for (const part of Object.values(result[i].annotations)) {\n for (const connected of part) curves(ctx, connected, localOptions);\n }\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { HandResult } from '../result';\nimport type { AnyCanvas, DrawOptions, Point } from '../exports';\n\n/** draw detected hands */\nexport function hand(inCanvas: AnyCanvas, result: HandResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.handLabels?.length > 0)) {\n let l = localOptions.handLabels.slice();\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n if (localOptions.drawPoints) {\n if (h.keypoints && h.keypoints.length > 0) {\n for (const pt of h.keypoints) {\n ctx.fillStyle = colorDepth(pt[2], localOptions);\n point(ctx, pt[0], pt[1], 0, localOptions);\n }\n }\n }\n if (localOptions.drawLabels && h.annotations && (localOptions.fingerLabels?.length > 0)) {\n for (const [part, pt] of Object.entries(h.annotations)) {\n let l = localOptions.fingerLabels.slice();\n l = replace(l, '[label]', part);\n labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions);\n }\n }\n if (localOptions.drawPolygons && h.annotations) {\n const addHandLine = (part: Point[]) => {\n if (!part || part.length === 0 || !part[0]) return;\n for (let i = 0; i < part.length; i++) {\n ctx.beginPath();\n const z = part[i][2] || 0;\n ctx.strokeStyle = colorDepth(i * z, localOptions);\n ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]);\n ctx.lineTo(part[i][0], part[i][1]);\n ctx.stroke();\n }\n };\n ctx.lineWidth = localOptions.lineWidth;\n addHandLine(h.annotations.index);\n addHandLine(h.annotations.middle);\n addHandLine(h.annotations.ring);\n addHandLine(h.annotations.pinky);\n addHandLine(h.annotations.thumb);\n // addPart(h.annotations.palm);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { ObjectResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected objects */\nexport function object(inCanvas: AnyCanvas, result: ObjectResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.objectLabels?.length > 0)) {\n let l = localOptions.objectLabels.slice();\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { GestureResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected gestures */\nexport function gesture(inCanvas: AnyCanvas, result: GestureResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n if (localOptions.drawGestures && (localOptions.gestureLabels?.length > 0)) {\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.fillStyle = localOptions.color;\n let i = 1;\n for (let j = 0; j < result.length; j++) {\n const [where, what] = Object.entries(result[j]);\n if ((what.length > 1) && ((what[1] as string).length > 0)) {\n const who = where[1] as number > 0 ? `#${where[1]}` : '';\n let l = localOptions.gestureLabels.slice();\n l = replace(l, '[where]', where[0]);\n l = replace(l, '[who]', who);\n l = replace(l, '[what]', what[1]);\n labels(ctx, l, 8, 2 + (i * localOptions.lineHeight), localOptions);\n i += 1;\n }\n }\n }\n}\n", "export const defaultLabels = {\n face: `face\n confidence: [score]%\n [gender] [genderScore]%\n age: [age] years\n distance: [distance]cm\n real: [real]%\n live: [live]%\n [emotions]\n roll: [roll]\u00B0 yaw:[yaw]\u00B0 pitch:[pitch]\u00B0\n gaze: [gaze]\u00B0`,\n body: 'body [score]%',\n bodyPart: '[label] [score]%',\n object: '[label] [score]%',\n hand: '[label] [score]%',\n finger: '[label]',\n gesture: '[where] [who]: [what]',\n};\n", "/* eslint-disable no-multi-spaces */\n\nexport const kpt: string[] = [\n 'nose', // 0\n 'leftEyeInside', // 1\n 'leftEye', // 2\n 'leftEyeOutside', // 3\n 'rightEyeInside', // 4\n 'rightEye', // 5\n 'rightEyeOutside', // 6\n 'leftEar', // 7\n 'rightEar', // 8\n 'leftMouth', // 9\n 'rightMouth', // 10\n 'leftShoulder', // 11\n 'rightShoulder', // 12\n 'leftElbow', // 13\n 'rightElbow', // 14\n 'leftWrist', // 15\n 'rightWrist', // 16\n 'leftPinky', // 17\n 'rightPinky', // 18\n 'leftIndex', // 19\n 'rightIndex', // 20\n 'leftThumb', // 21\n 'rightThumb', // 22\n 'leftHip', // 23\n 'rightHip', // 24\n 'leftKnee', // 25\n 'rightKnee', // 26\n 'leftAnkle', // 27\n 'rightAnkle', // 28\n 'leftHeel', // 29\n 'rightHeel', // 30\n 'leftFoot', // 31\n 'rightFoot', // 32\n 'bodyCenter', // 33\n 'bodyTop', // 34\n 'leftPalm', // 35 // z-coord not ok\n 'leftHand', // 36 // similar to wrist but z-coord not ok\n 'rightPalm', // 37 // z-coord not ok\n 'rightHand', // 38 // similar to wrist but z-coord not ok\n];\n\nexport const connected: Record = {\n shoulders: ['leftShoulder', 'rightShoulder'],\n hips: ['rightHip', 'leftHip'],\n mouth: ['leftMouth', 'rightMouth'],\n leftLegUpper: ['leftHip', 'leftKnee'],\n leftLegLower: ['leftKnee', 'leftAnkle'],\n leftFoot: ['leftAnkle', 'leftHeel', 'leftFoot'],\n leftTorso: ['leftShoulder', 'leftHip'],\n leftArmUpper: ['leftShoulder', 'leftElbow'],\n leftArmLower: ['leftElbow', 'leftWrist'],\n leftHand: ['leftWrist', 'leftPalm'],\n leftHandPinky: ['leftPalm', 'leftPinky'],\n leftHandIndex: ['leftPalm', 'leftIndex'],\n leftHandThumb: ['leftPalm', 'leftThumb'],\n leftEyeOutline: ['leftEyeInside', 'leftEyeOutside'],\n rightLegUpper: ['rightHip', 'rightKnee'],\n rightLegLower: ['rightKnee', 'rightAnkle'],\n rightFoot: ['rightAnkle', 'rightHeel', 'rightFoot'],\n rightTorso: ['rightShoulder', 'rightHip'],\n rightArmUpper: ['rightShoulder', 'rightElbow'],\n rightArmLower: ['rightElbow', 'rightWrist'],\n rightHand: ['rightWrist', 'rightPalm'],\n rightHandPinky: ['rightPalm', 'rightPinky'],\n rightHandIndex: ['rightPalm', 'rightIndex'],\n rightHandThumb: ['rightPalm', 'rightThumb'],\n rightEyeOutline: ['rightEyeInside', 'rightEyeOutside'],\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport type { Box } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D } from '../tfjs/types';\n\nexport interface DetectedBox { box: Box, boxRaw: Box, score: number }\n\nlet model: GraphModel | null;\nlet inputSize = 224;\nlet anchorTensor: { x, y };\nconst numLayers = 5;\nconst strides = [8, 16, 32, 32, 32];\n\nexport function createAnchors() {\n const anchors: { x: number, y: number }[] = [];\n let layerId = 0;\n while (layerId < numLayers) {\n let anchorCount = 0;\n let lastSameStrideLayer = layerId;\n while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) {\n anchorCount += 2;\n lastSameStrideLayer++;\n }\n const stride = strides[layerId];\n const featureMapHeight = Math.ceil(inputSize / stride);\n const featureMapWidth = Math.ceil(inputSize / stride);\n for (let y = 0; y < featureMapHeight; ++y) {\n for (let x = 0; x < featureMapWidth; ++x) {\n for (let anchorId = 0; anchorId < anchorCount; ++anchorId) {\n anchors.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight });\n }\n }\n }\n layerId = lastSameStrideLayer;\n }\n anchorTensor = { x: tf.tensor1d(anchors.map((a) => a.x)), y: tf.tensor1d(anchors.map((a) => a.y)) };\n}\n\nexport async function loadDetector(config: Config): Promise {\n if (env.initial) model = null;\n if (!model && config.body['detector'] && config.body['detector'].modelPath || '') {\n model = await loadModel(config.body['detector'].modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug && model) log('cached model:', model['modelUrl']);\n createAnchors();\n return model as GraphModel;\n}\n\nconst cropFactor = [5.0, 5.0];\nexport function decodeBoxes(boxesTensor, anchor) {\n return tf.tidy(() => {\n const split = tf.split(boxesTensor, 12, 1); // first 4 are box data [x,y,w,h] and 4 are keypoints data [x,y] for total of 12\n let xCenter = tf.squeeze(split[0]);\n let yCenter = tf.squeeze(split[1]);\n let width = tf.squeeze(split[2]);\n let height = tf.squeeze(split[3]);\n xCenter = tf.add(tf.div(xCenter, inputSize), anchor.x);\n yCenter = tf.add(tf.div(yCenter, inputSize), anchor.y);\n width = tf.mul(tf.div(width, inputSize), cropFactor[0]);\n height = tf.mul(tf.div(height, inputSize), cropFactor[1]);\n const xMin = tf.sub(xCenter, tf.div(width, 2));\n const yMin = tf.sub(yCenter, tf.div(height, 2));\n const xMax = tf.add(xMin, width);\n const yMax = tf.add(yMin, height);\n const boxes = tf.stack([xMin, yMin, xMax, yMax], 1);\n return boxes;\n });\n}\n\nasync function decodeResults(boxesTensor: Tensor, logitsTensor: Tensor, config: Config, outputSize: [number, number]): Promise {\n const detectedBoxes: DetectedBox[] = [];\n const t: Record = {};\n t.boxes = decodeBoxes(boxesTensor, anchorTensor);\n t.scores = tf.sigmoid(logitsTensor);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, 1, config.body['detector']?.minConfidence || 0.1, config.body['detector']?.iouThreshold || 0.1);\n const nms = await t.nms.data();\n const scores = await t.scores.data();\n const boxes = await t.boxes.array();\n for (const i of Array.from(nms)) {\n const score = scores[i];\n const boxRaw: Box = boxes[i];\n const box: Box = [Math.round(boxRaw[0] * outputSize[0]), Math.round(boxRaw[1] * outputSize[1]), Math.round(boxRaw[2] * outputSize[0]), Math.round(boxRaw[3] * outputSize[1])];\n const detectedBox: DetectedBox = { score, boxRaw, box };\n detectedBoxes.push(detectedBox);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return detectedBoxes;\n}\n\nexport async function detectBoxes(input: Tensor, config: Config, outputSize: [number, number]) {\n const t: Record = {};\n t.res = model?.execute(input, ['Identity']) as Tensor; //\n t.logitsRaw = tf.slice(t.res, [0, 0, 0], [1, -1, 1]);\n t.boxesRaw = tf.slice(t.res, [0, 0, 1], [1, -1, -1]);\n t.logits = tf.squeeze(t.logitsRaw);\n t.boxes = tf.squeeze(t.boxesRaw);\n const boxes = await decodeResults(t.boxes, t.logits, config, outputSize);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import type { Point, Box } from '../result';\n\nexport function calc(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const box: Box = [min[0], min[1], max[0] - min[0], max[1] - min[1]];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function square(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const center = [(min[0] + max[0]) / 2, (min[1] + max[1]) / 2]; // find center x and y coord of all fingers\n const dist = Math.max(center[0] - min[0], center[1] - min[1], -center[0] + max[0], -center[1] + max[1]); // largest distance from center in any direction\n const box: Box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function scale(box: Box, scaleFact: number) {\n const dist = [box[2] * scaleFact, box[3] * scaleFact];\n const newBox: Box = [\n box[0] - (dist[0] - box[2]) / 2,\n box[1] - (dist[1] - box[3]) / 2,\n dist[0],\n dist[1],\n ];\n return newBox;\n}\n\nexport function crop(box: Box) { // [y1, x1, y2, x2] clamped to 0..1\n const yxBox: Box = [Math.max(0, box[1]), Math.max(0, box[0]), Math.min(1, box[3] + box[1]), Math.min(1, box[2] + box[0])];\n return yxBox;\n}\n", "/**\n * BlazePose model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { log, now } from '../util/util';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, Box, Point, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport * as coords from './blazeposecoords';\nimport { loadDetector, detectBoxes, DetectedBox } from './blazeposedetector';\nimport * as box from '../util/box';\nimport { env } from '../util/env';\n\n// const models: [GraphModel | null, GraphModel | null] = [null, null];\nlet model: GraphModel | null;\nlet inputSize = 256;\nlet skipped = Number.MAX_SAFE_INTEGER;\nconst outputNodes: { detector: string[], landmarks: string[] } = {\n landmarks: ['ld_3d', 'activation_segmentation', 'activation_heatmap', 'world_3d', 'output_poseflag'],\n detector: [],\n};\n\nconst cache: BodyResult[] = [];\nlet padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];\nlet lastTime = 0;\n\nconst sigmoid = (x) => (1 - (1 / (1 + Math.exp(x))));\n\nexport const loadDetect = (config: Config): Promise => loadDetector(config);\n\nexport async function loadPose(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.body.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nfunction prepareImage(input: Tensor4D, size: number, cropBox?: Box): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n let final: Tensor;\n if (cropBox) {\n t.cropped = tf.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); // if we have cached box use it to crop input\n }\n if (input.shape[1] !== input.shape[2]) { // only pad if width different than height\n const height: [number, number] = [\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n ];\n const width: [number, number] = [\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n ];\n padding = [\n [0, 0], // dont touch batch\n height, // height before&after\n width, // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(t.cropped || input, padding); // use cropped box if it exists\n t.resize = tf.image.resizeBilinear(t.pad as Tensor4D, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else if (input.shape[1] !== size) { // if input needs resizing\n t.resize = tf.image.resizeBilinear(t.cropped as Tensor4D || input, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else { // if input is already in a correct resolution just normalize it\n final = tf.div(t.cropped || input, constants.tf255);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nfunction rescaleKeypoints(keypoints: BodyKeypoint[], outputSize: [number, number], cropBox?: Box): BodyKeypoint[] {\n for (const kpt of keypoints) { // first rescale due to padding\n kpt.position = [\n Math.trunc(kpt.position[0] * (outputSize[0] + padding[2][0] + padding[2][1]) / outputSize[0] - padding[2][0]),\n Math.trunc(kpt.position[1] * (outputSize[1] + padding[1][0] + padding[1][1]) / outputSize[1] - padding[1][0]),\n kpt.position[2] as number,\n ];\n kpt.positionRaw = [kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1], 2 * (kpt.position[2] as number) / (outputSize[0] + outputSize[1])];\n }\n if (cropBox) { // second rescale due to cropping\n const width = cropBox[2] - cropBox[0];\n const height = cropBox[3] - cropBox[1];\n for (const kpt of keypoints) {\n kpt.positionRaw = [\n kpt.positionRaw[0] / height + cropBox[1], // correct offset due to crop\n kpt.positionRaw[1] / width + cropBox[0], // correct offset due to crop\n kpt.positionRaw[2] as number,\n ];\n kpt.position = [\n Math.trunc(kpt.positionRaw[0] * outputSize[0]),\n Math.trunc(kpt.positionRaw[1] * outputSize[1]),\n kpt.positionRaw[2] as number,\n ];\n }\n }\n return keypoints;\n}\n\nfunction fixKeypoints(keypoints: BodyKeypoint[]) {\n // palm z-coord is incorrect around near-zero so we approximate it\n const leftPalm = keypoints.find((k) => k.part === 'leftPalm') as BodyKeypoint;\n const leftWrist = keypoints.find((k) => k.part === 'leftWrist') as BodyKeypoint;\n const leftIndex = keypoints.find((k) => k.part === 'leftIndex') as BodyKeypoint;\n leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2;\n const rightPalm = keypoints.find((k) => k.part === 'rightPalm') as BodyKeypoint;\n const rightWrist = keypoints.find((k) => k.part === 'rightWrist') as BodyKeypoint;\n const rightIndex = keypoints.find((k) => k.part === 'rightIndex') as BodyKeypoint;\n rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2;\n}\n\nasync function detectLandmarks(input: Tensor, config: Config, outputSize: [number, number]): Promise {\n /**\n * t.ld: 39 keypoints [x,y,z,score,presence] normalized to input size\n * t.segmentation:\n * t.heatmap:\n * t.world: 39 keypoints [x,y,z] normalized to -1..1\n * t.poseflag: body score\n */\n if (!model?.['executor']) return null;\n const t: Record = {};\n [t.ld/* 1,195(39*5) */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117(39*3) */, t.poseflag/* 1,1 */] = model?.execute(input, outputNodes.landmarks) as Tensor[]; // run model\n const poseScore = (await t.poseflag.data())[0];\n const points = await t.ld.data();\n const distances = await t.world.data();\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor])); // dont need tensors after this\n const keypointsRelative: BodyKeypoint[] = [];\n const depth = 5; // each points has x,y,z,visibility,presence\n for (let i = 0; i < points.length / depth; i++) {\n const score = sigmoid(points[depth * i + 3]);\n const presence = sigmoid(points[depth * i + 4]);\n const adjScore = Math.trunc(100 * score * presence * poseScore) / 100;\n const positionRaw: Point = [points[depth * i + 0] / inputSize, points[depth * i + 1] / inputSize, points[depth * i + 2] + 0];\n const position: Point = [Math.trunc(outputSize[0] * positionRaw[0]), Math.trunc(outputSize[1] * positionRaw[1]), positionRaw[2] as number];\n const distance: Point = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0];\n keypointsRelative.push({ part: coords.kpt[i] as BodyLandmark, positionRaw, position, distance, score: adjScore });\n }\n if (poseScore < (config.body.minConfidence || 0)) return null;\n fixKeypoints(keypointsRelative);\n const keypoints: BodyKeypoint[] = rescaleKeypoints(keypointsRelative, outputSize); // keypoints were relative to input image which is padded\n const kpts = keypoints.map((k) => k.position);\n const boxes = box.calc(kpts, [outputSize[0], outputSize[1]]); // now find boxes based on rescaled keypoints\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations };\n return body;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && cache !== null) {\n skipped++;\n } else {\n let boxes: DetectedBox[] = [];\n if (config.body?.['detector']?.['enabled']) {\n const preparedImage = prepareImage(input, 224);\n boxes = await detectBoxes(preparedImage, config, outputSize);\n tf.dispose(preparedImage);\n } else {\n boxes = [{ box: [0, 0, 0, 0] as Box, boxRaw: [0, 0, 1, 1], score: 0 }]; // running without detector\n }\n for (let i = 0; i < boxes.length; i++) {\n const preparedBox = prepareImage(input, 256, boxes[i]?.boxRaw); // padded and resized\n cache.length = 0;\n const bodyResult = await detectLandmarks(preparedBox, config, outputSize);\n tf.dispose(preparedBox);\n if (!bodyResult) continue;\n bodyResult.id = i;\n // bodyResult.score = 0; // TBD\n cache.push(bodyResult);\n }\n /*\n cropBox = [0, 0, 1, 1]; // reset crop coordinates\n if (cache?.boxRaw && config.skipAllowed) {\n const cx = (2.0 * cache.boxRaw[0] + cache.boxRaw[2]) / 2;\n const cy = (2.0 * cache.boxRaw[1] + cache.boxRaw[3]) / 2;\n let size = cache.boxRaw[2] > cache.boxRaw[3] ? cache.boxRaw[2] : cache.boxRaw[3];\n size = (size * 1.0) / 2; // enlarge and half it\n if (cx > 0.1 && cx < 0.9 && cy > 0.1 && cy < 0.9 && size > 0.1) { // only update if box is sane\n const y = 0; // cy - size;\n const x = cx - size;\n cropBox = [y, x, y + 1, x + 1]; // [y0,x0,y1,x1] used for cropping but width/height are not yet implemented so we only reposition image to center of body\n }\n }\n */\n lastTime = now();\n skipped = 0;\n }\n return cache;\n}\n", "/**\n * CoCo Labels used by object detection implementations\n */\nexport const labels = [\n { class: 1, label: 'person' },\n { class: 2, label: 'bicycle' },\n { class: 3, label: 'car' },\n { class: 4, label: 'motorcycle' },\n { class: 5, label: 'airplane' },\n { class: 6, label: 'bus' },\n { class: 7, label: 'train' },\n { class: 8, label: 'truck' },\n { class: 9, label: 'boat' },\n { class: 10, label: 'traffic light' },\n { class: 11, label: 'fire hydrant' },\n { class: 12, label: 'stop sign' },\n { class: 13, label: 'parking meter' },\n { class: 14, label: 'bench' },\n { class: 15, label: 'bird' },\n { class: 16, label: 'cat' },\n { class: 17, label: 'dog' },\n { class: 18, label: 'horse' },\n { class: 19, label: 'sheep' },\n { class: 20, label: 'cow' },\n { class: 21, label: 'elephant' },\n { class: 22, label: 'bear' },\n { class: 23, label: 'zebra' },\n { class: 24, label: 'giraffe' },\n { class: 25, label: 'backpack' },\n { class: 26, label: 'umbrella' },\n { class: 27, label: 'handbag' },\n { class: 28, label: 'tie' },\n { class: 29, label: 'suitcase' },\n { class: 30, label: 'frisbee' },\n { class: 31, label: 'skis' },\n { class: 32, label: 'snowboard' },\n { class: 33, label: 'sports ball' },\n { class: 34, label: 'kite' },\n { class: 35, label: 'baseball bat' },\n { class: 36, label: 'baseball glove' },\n { class: 37, label: 'skateboard' },\n { class: 38, label: 'surfboard' },\n { class: 39, label: 'tennis racket' },\n { class: 40, label: 'bottle' },\n { class: 41, label: 'wine glass' },\n { class: 42, label: 'cup' },\n { class: 43, label: 'fork' },\n { class: 44, label: 'knife' },\n { class: 45, label: 'spoon' },\n { class: 46, label: 'bowl' },\n { class: 47, label: 'banana' },\n { class: 48, label: 'apple' },\n { class: 49, label: 'sandwich' },\n { class: 50, label: 'orange' },\n { class: 51, label: 'broccoli' },\n { class: 52, label: 'carrot' },\n { class: 53, label: 'hot dog' },\n { class: 54, label: 'pizza' },\n { class: 55, label: 'donut' },\n { class: 56, label: 'cake' },\n { class: 57, label: 'chair' },\n { class: 58, label: 'couch' },\n { class: 59, label: 'potted plant' },\n { class: 60, label: 'bed' },\n { class: 61, label: 'dining table' },\n { class: 62, label: 'toilet' },\n { class: 63, label: 'tv' },\n { class: 64, label: 'laptop' },\n { class: 65, label: 'mouse' },\n { class: 66, label: 'remote' },\n { class: 67, label: 'keyboard' },\n { class: 68, label: 'cell phone' },\n { class: 69, label: 'microwave' },\n { class: 70, label: 'oven' },\n { class: 71, label: 'toaster' },\n { class: 72, label: 'sink' },\n { class: 73, label: 'refrigerator' },\n { class: 74, label: 'book' },\n { class: 75, label: 'clock' },\n { class: 76, label: 'vase' },\n { class: 77, label: 'scissors' },\n { class: 78, label: 'teddy bear' },\n { class: 79, label: 'hair drier' },\n { class: 80, label: 'toothbrush' },\n];\n", "/**\n * CenterNet object detection model implementation\n *\n * Based on: [**MB3-CenterNet**](https://github.com/610265158/mobilenetv3_centernet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n // fakeOps(['floormod'], config);\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor | null, outputShape: [number, number], config: Config) {\n if (!res) return [];\n const t: Record = {};\n const results: ObjectResult[] = [];\n const detections = await res.array() as number[][][];\n t.squeeze = tf.squeeze(res);\n const arr = tf.split(t.squeeze, 6, 1); // x1, y1, x2, y2, score, class\n t.stack = tf.stack([arr[1], arr[0], arr[3], arr[2]], 1); // reorder dims as tf.nms expects y, x\n t.boxes = tf.squeeze(t.stack);\n t.scores = tf.squeeze(arr[4]);\n t.classes = tf.squeeze(arr[5]);\n tf.dispose([res, ...arr]);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, config.object.maxDetected || 0, config.object.iouThreshold, (config.object.minConfidence || 0));\n const nms = await t.nms.data();\n let i = 0;\n for (const id of Array.from(nms)) {\n const score = Math.trunc(100 * detections[0][id][4]) / 100;\n const classVal = detections[0][id][5];\n if (Number.isNaN(classVal)) continue;\n const label = labels[classVal].label as ObjectType;\n const [x, y] = [\n detections[0][id][0] / inputSize,\n detections[0][id][1] / inputSize,\n ];\n const boxRaw: Box = [\n x,\n y,\n detections[0][id][2] / inputSize - x,\n detections[0][id][3] / inputSize - y,\n ];\n const box: Box = [\n Math.trunc(boxRaw[0] * outputShape[0]),\n Math.trunc(boxRaw[1] * outputShape[1]),\n Math.trunc(boxRaw[2] * outputShape[0]),\n Math.trunc(boxRaw[3] * outputShape[1]),\n ];\n results.push({ id: i++, score, class: classVal, label, box, boxRaw });\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return results;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const outputSize = [input.shape[2] || 0, input.shape[1] || 0] as [number, number];\n const resize = tf.image.resizeBilinear(input, [inputSize, inputSize]);\n const objectT = config.object.enabled ? model?.execute(resize, ['tower_0/detections']) as Tensor : null;\n lastTime = now();\n tf.dispose(resize);\n\n const obj = await process(objectT, outputSize, config);\n last = obj;\n\n resolve(obj);\n });\n}\n", "export const kpt: string[] = [\n 'head',\n 'neck',\n 'rightShoulder',\n 'rightElbow',\n 'rightWrist',\n 'chest',\n 'leftShoulder',\n 'leftElbow',\n 'leftWrist',\n 'bodyCenter',\n 'rightHip',\n 'rightKnee',\n 'rightAnkle',\n 'leftHip',\n 'leftKnee',\n 'leftAnkle',\n];\n\nexport const connected: Record = {\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * EfficientPose model implementation\n *\n * Based on: [**EfficientPose**](https://github.com/daniegr/EfficientPose)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as coords from './efficientposecoords';\nimport { constants } from '../tfjs/constants';\nimport type { BodyResult, Point, BodyLandmark, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet lastTime = 0;\nconst cache: BodyResult = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} as Record };\n\n// const keypoints: Array = [];\n// let box: Box = [0, 0, 0, 0];\n// let boxRaw: Box = [0, 0, 0, 0];\n// let score = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n// performs argmax and max functions on a 2d tensor\nasync function max2d(inputs, minScore): Promise<[number, number, number]> {\n const [width, height] = inputs.shape;\n const reshaped = tf.reshape(inputs, [height * width]); // combine all data\n const max = tf.max(reshaped, 0);\n const newScore: number = (await max.data())[0]; // get highest score\n if (newScore > minScore) { // skip coordinate calculation is score is too low\n const coordinates = tf.argMax(reshaped, 0);\n const mod = tf.mod(coordinates, width);\n const x = (await mod.data())[0];\n const div = tf.div(coordinates, width);\n const y: number = (await div.data())[0];\n tf.dispose([reshaped, max, coordinates, mod, div]);\n return [x, y, newScore];\n }\n tf.dispose([reshaped, max]);\n return [0, 0, newScore];\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs[0].shape) return [];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && Object.keys(cache.keypoints).length > 0) {\n skipped++;\n return [cache];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const tensor = tf.tidy(() => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape?.[2] || 0, model?.inputs[0].shape?.[1] || 0], false);\n const enhance = tf.mul(resize, constants.tf2);\n const norm = tf.sub(enhance, constants.tf1);\n return norm;\n });\n let resT;\n if (config.body.enabled) resT = model?.execute(tensor);\n lastTime = now();\n tf.dispose(tensor);\n\n if (resT) {\n cache.keypoints.length = 0;\n const squeeze = tf.squeeze(resT);\n tf.dispose(resT);\n // body parts are basically just a stack of 2d tensors\n const stack = tf.unstack(squeeze, 2);\n tf.dispose(squeeze);\n\n // process each unstacked tensor as a separate body part\n for (let id = 0; id < stack.length; id++) {\n // actual processing to get coordinates and score\n const [x, y, partScore] = await max2d(stack[id], config.body.minConfidence);\n if (partScore > (config.body.minConfidence || 0)) {\n cache.keypoints.push({\n score: Math.round(100 * partScore) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw: [ // normalized to 0..1\n // @ts-ignore model is not undefined here\n x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],\n ],\n position: [ // normalized to input image size\n // @ts-ignore model is not undefined here\n Math.round(image.shape[2] * x / model.inputs[0].shape[2]), Math.round(image.shape[1] * y / model.inputs[0].shape[1]),\n ],\n });\n }\n }\n stack.forEach((s) => tf.dispose(s));\n }\n cache.score = cache.keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const x = cache.keypoints.map((a) => a.position[0]);\n const y = cache.keypoints.map((a) => a.position[1]);\n cache.box = [\n Math.min(...x),\n Math.min(...y),\n Math.max(...x) - Math.min(...x),\n Math.max(...y) - Math.min(...y),\n ];\n const xRaw = cache.keypoints.map((a) => a.positionRaw[0]);\n const yRaw = cache.keypoints.map((a) => a.positionRaw[1]);\n cache.boxRaw = [\n Math.min(...xRaw),\n Math.min(...yRaw),\n Math.max(...xRaw) - Math.min(...xRaw),\n Math.max(...yRaw) - Math.min(...yRaw),\n ];\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = cache.keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = cache.keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n cache.annotations[name] = pt;\n }\n resolve([cache]);\n });\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport { constants } from '../tfjs/constants';\nimport type { Box, Point } from '../result';\nimport { env } from '../util/env';\n\nexport const createBox = (startEndTensor) => ({ startPoint: tf.slice(startEndTensor, [0, 0], [-1, 2]), endPoint: tf.slice(startEndTensor, [0, 2], [-1, 2]) });\n\nexport const disposeBox = (t) => tf.dispose([t.startPoint, t.endPoint]);\n\nexport const getBoxSize = (box): [number, number] => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])];\n\nexport const getBoxCenter = (box): [number, number, number] => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1];\n\nexport const clampBox = (box, input): Box => (box ? [\n Math.trunc(Math.max(0, box.startPoint[0])),\n Math.trunc(Math.max(0, box.startPoint[1])),\n Math.trunc(Math.min((input.shape[2] || 0), box.endPoint[0]) - Math.max(0, box.startPoint[0])),\n Math.trunc(Math.min((input.shape[1] || 0), box.endPoint[1]) - Math.max(0, box.startPoint[1])),\n] : [0, 0, 0, 0]);\n\nexport const getRawBox = (box, input): Box => (box ? [\n box.startPoint[0] / (input.shape[2] || 0),\n box.startPoint[1] / (input.shape[1] || 0),\n (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0),\n (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0),\n] : [0, 0, 0, 0]);\n\nexport const scaleBoxCoordinates = (box, factor) => {\n const startPoint: Point = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]];\n const endPoint: Point = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]];\n return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const cutAndResize = (box, image, cropSize) => {\n const h = image.shape[1];\n const w = image.shape[2];\n const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w];\n const crop = tf.image.cropAndResize(image, [cutBox], [0], cropSize);\n const norm = tf.div(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n};\n\nexport const enlargeBox = (box, factor) => {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize: [number, number] = [factor * size[0] / 2, factor * size[1] / 2];\n return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point, endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const squarifyBox = (box) => {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize = Math.max(...size) / 2;\n return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point, endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return { startPoint: [Math.min(...x), Math.min(...y)] as Point, endPoint: [Math.max(...x), Math.max(...y)] as Point, landmarks };\n};\n\nexport const fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];\n\nexport const normalizeRadians = (angle: number) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n\nexport const computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]));\n\nexport const radToDegrees = (rad) => rad * 180 / Math.PI;\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport const dot = (v1: number[], v2: number[]) => {\n let product = 0;\n for (let i = 0; i < v1.length; i++) product += v1[i] * v2[i];\n return product;\n};\n\nexport const getColumnFrom2DArr = (arr, columnIndex) => {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) column.push(arr[i][columnIndex]);\n return column;\n};\n\nexport const multiplyTransformMatrices = (mat1, mat2) => {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n return product;\n};\n\nexport const buildRotationMatrix = (rotation, center) => {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n};\n\nexport const invertTransformMatrix = (matrix) => {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)];\n return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]];\n};\n\nexport const rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])];\n\nexport const xyDistanceBetweenPoints = (a, b) => Math.sqrt(((a[0] - b[0]) ** 2) + ((a[1] - b[1]) ** 2));\n\nexport function generateAnchors(inputSize: number) {\n const spec = inputSize === 192\n ? { strides: [4], anchors: [1] } // facemesh-detector\n : { strides: [inputSize / 16, inputSize / 8], anchors: [2, 6] }; // blazeface\n const anchors: [number, number][] = [];\n for (let i = 0; i < spec.strides.length; i++) {\n const stride = spec.strides[i];\n const gridRows = Math.floor((inputSize + stride - 1) / stride);\n const gridCols = Math.floor((inputSize + stride - 1) / stride);\n const anchorsNum = spec.anchors[i];\n for (let gridY = 0; gridY < gridRows; gridY++) {\n const anchorY = stride * (gridY + 0.5);\n for (let gridX = 0; gridX < gridCols; gridX++) {\n const anchorX = stride * (gridX + 0.5);\n for (let n = 0; n < anchorsNum; n++) anchors.push([anchorX, anchorY]);\n }\n }\n }\n return anchors;\n}\n\nexport function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize) {\n const boxSize = getBoxSize(box);\n const coordsScaled = coordsRaw.map((coord) => ([ // scaled around zero-point\n (boxSize[0] / inputSize) * (coord[0] - (inputSize / 2)),\n (boxSize[1] / inputSize) * (coord[1] - (inputSize / 2)),\n (coord[2] || 0),\n ]));\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix;\n const coordsRotated = largeAngle ? coordsScaled.map((coord) => ([...rotatePoint(coord, coordsRotationMatrix), coord[2]])) : coordsScaled;\n const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix;\n const boxCenter = getBoxCenter(box);\n const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])];\n return coordsRotated.map((coord) => ([\n Math.trunc(coord[0] + offsets[0]),\n Math.trunc(coord[1] + offsets[1]),\n Math.trunc(coord[2] || 0),\n ]));\n}\n\nexport function correctFaceRotation(rotate, box, input, inputSize) {\n const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count)\n ? coords.meshLandmarks.symmetryLine\n : coords.blazeFaceLandmarks.symmetryLine;\n let angle = 0; // default\n let rotationMatrix = fixedRotationMatrix; // default\n let face; // default\n\n if (rotate && env.kernels.includes('rotatewithoffset')) {\n angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n if (largeAngle) { // perform rotation only if angle is sufficiently high\n const center: Point = getBoxCenter(box);\n const centerRaw: Point = [center[0] / input.shape[2], center[1] / input.shape[1]];\n const rotated = tf.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]);\n rotationMatrix = buildRotationMatrix(-angle, center);\n face = cutAndResize(box, rotated, [inputSize, inputSize]);\n tf.dispose(rotated);\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n return [angle, rotationMatrix, face];\n}\n\nexport const findFaceCenter = (mesh) => {\n const x = mesh.map((m) => m[0]);\n const y = mesh.map((m) => m[1]);\n // weighted center\n /*\n const sum = (arr: number[]) => arr.reduce((prev, curr) => prev + curr, 0);\n return [sum(x) / mesh.length, sum(y) / mesh.length];\n */\n // absolute center\n return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2];\n};\n\nexport const calculateFaceBox = (mesh, previousBox) => {\n const center = findFaceCenter(mesh);\n const boxSize = getBoxSize(previousBox);\n const calculatedBox = {\n startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2] as Point,\n endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] as Point,\n };\n return calculatedBox;\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport * as util from './facemeshutil';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { Tensor, GraphModel, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport type { Point } from '../result';\n\nconst keypointsCount = 6;\nconst faceBoxScaleFactor = 1.4;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\ninterface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number }\n\nexport const size = () => inputSize;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.detector?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model['executor'] && model.inputs[0].shape) ? model.inputs[0].shape[2] : 256;\n inputSizeT = tf.scalar(inputSize, 'int32') as Tensor;\n anchors = tf.tensor2d(util.generateAnchors(inputSize)) as Tensor;\n return model;\n}\n\nfunction decodeBoxes(boxOutputs: Tensor) {\n if (!anchors || !inputSizeT) return tf.zeros([0, 0]);\n const t: Record = {};\n t.boxStarts = tf.slice(boxOutputs, [0, 1], [-1, 2]);\n t.centers = tf.add(t.boxStarts, anchors);\n t.boxSizes = tf.slice(boxOutputs, [0, 3], [-1, 2]);\n t.boxSizesNormalized = tf.div(t.boxSizes, inputSizeT);\n t.centersNormalized = tf.div(t.centers, inputSizeT);\n t.halfBoxSize = tf.div(t.boxSizesNormalized, constants.tf2);\n t.starts = tf.sub(t.centersNormalized, t.halfBoxSize);\n t.ends = tf.add(t.centersNormalized, t.halfBoxSize);\n t.startNormalized = tf.mul(t.starts, inputSizeT);\n t.endNormalized = tf.mul(t.ends, inputSizeT);\n const boxes = tf.concat2d([t.startNormalized as Tensor2D, t.endNormalized as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n\nexport async function getBoxes(inputImage: Tensor4D, config: Config) {\n // sanity check on input\n if ((!inputImage) || (inputImage['isDisposedInternal']) || (inputImage.shape.length !== 4) || (inputImage.shape[1] < 1) || (inputImage.shape[2] < 1)) return [];\n const t: Record = {};\n t.resized = tf.image.resizeBilinear(inputImage, [inputSize, inputSize]);\n t.div = tf.div(t.resized, constants.tf127);\n t.normalized = tf.sub(t.div, constants.tf05);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n if (confidence > (config.face.detector?.minConfidence || 0)) {\n const b: Record = {};\n b.bbox = tf.slice(t.boxes, [nms[i], 0], [1, -1]);\n b.slice = tf.slice(t.batch, [nms[i], keypointsCount - 1], [1, -1]);\n b.squeeze = tf.squeeze(b.slice);\n b.landmarks = tf.reshape(b.squeeze, [keypointsCount, -1]);\n const points = await b.bbox.data();\n const rawBox = {\n startPoint: [points[0], points[1]] as Point,\n endPoint: [points[2], points[3]] as Point,\n landmarks: (await b.landmarks.array()) as Point[],\n confidence,\n };\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize]);\n const enlargedBox = util.enlargeBox(scaledBox, config.face['scale'] || faceBoxScaleFactor);\n const squaredBox = util.squarifyBox(enlargedBox);\n boxes.push(squaredBox);\n Object.keys(b).forEach((tensor) => tf.dispose(b[tensor]));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport * as util from './facemeshutil';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { Point } from '../result';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\n\nconst irisEnlarge = 2.3;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\n\ninterface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number }\n\nconst cache = {\n boxes: [] as DetectBox[],\n skipped: Number.MAX_SAFE_INTEGER,\n timestamp: 0,\n};\n\nlet model: GraphModel | null = null;\nlet inputSize = 0;\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n // reset cached boxes\n const skipTime = (config.face.detector?.skipTime || 0) > (now() - cache.timestamp);\n const skipFrame = cache.skipped < (config.face.detector?.skipFrames || 0);\n if (!config.skipAllowed || !skipTime || !skipFrame || cache.boxes.length === 0) {\n cache.boxes = await blazeface.getBoxes(input, config); // get results from blazeface detector\n cache.timestamp = now();\n cache.skipped = 0;\n } else {\n cache.skipped++;\n }\n const faces: FaceResult[] = [];\n const newCache: DetectBox[] = [];\n let id = 0;\n const size = inputSize;\n for (let i = 0; i < cache.boxes.length; i++) {\n const box = cache.boxes[i];\n let angle = 0;\n let rotationMatrix;\n const face: FaceResult = { // init face result\n id: id++,\n mesh: [],\n meshRaw: [],\n box: [0, 0, 0, 0],\n boxRaw: [0, 0, 0, 0],\n score: 0,\n boxScore: 0,\n faceScore: 0,\n // contoursRaw: [],\n // contours: [],\n annotations: {} as Record,\n };\n\n // optional rotation correction based on detector data only if mesh is disabled otherwise perform it later when we have more accurate mesh data. if no rotation correction this function performs crop\n [angle, rotationMatrix, face.tensor] = util.correctFaceRotation(config.face.detector?.rotation, box, input, config.face.mesh?.enabled ? inputSize : blazeface.size());\n if (config.filter.equalization) {\n const equilized = face.tensor ? await histogramEqualization(face.tensor) : undefined;\n tf.dispose(face.tensor);\n if (equilized) face.tensor = equilized;\n }\n face.boxScore = Math.round(100 * box.confidence) / 100;\n if (!config.face.mesh?.enabled) { // mesh not enabled, return resuts from detector only\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0])) / 2 + ((box.endPoint[0] + box.startPoint[0]) * pt[0] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()),\n ]);\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n } else if (!model) { // mesh enabled, but not loaded\n if (config.debug) log('face mesh detection requested, but model is not loaded');\n } else { // mesh enabled\n if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {\n config.face.attention.enabled = false;\n tf.dispose(face.tensor);\n return faces;\n }\n const results = model.execute(face.tensor as Tensor) as Tensor[];\n const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;\n const faceConfidence = await confidenceT.data();\n face.faceScore = Math.round(100 * faceConfidence[0]) / 100;\n if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh\n box.confidence = face.faceScore; // reset confidence of cached box\n if (config.face.mesh.keepInvalid) {\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0])) / 2 + ((box.endPoint[0] + box.startPoint[0]) * pt[0] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()),\n ]);\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n }\n } else {\n const meshT = results.find((t) => t.shape[t.shape.length - 1] === 1404) as Tensor;\n const coordsReshaped = tf.reshape(meshT, [-1, 3]);\n let rawCoords = await coordsReshaped.array();\n tf.dispose(coordsReshaped);\n if (config.face.attention?.enabled) {\n rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results\n } else if (config.face.iris?.enabled) {\n rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize); // run iris model and augment results\n }\n face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.meshAnnotations)) face.annotations[key] = coords.meshAnnotations[key].map((index) => face.mesh[index]); // add annotations\n face.score = face.faceScore;\n const calculatedBox = { ...util.calculateFaceBox(face.mesh, box), confidence: box.confidence, landmarks: box.landmarks };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n /*\n const contoursT = results.find((t) => t.shape[t.shape.length - 1] === 266) as Tensor;\n const contoursData = contoursT && await contoursT.data(); // 133 x 2d points\n face.contoursRaw = [];\n for (let j = 0; j < contoursData.length / 2; j++) face.contoursRaw.push([contoursData[2 * j + 0] / inputSize, contoursData[2 * j + 1] / inputSize]);\n face.contours = face.contoursRaw.map((c) => [Math.trunc((input.shape[2] || 1) * c[0]), Math.trunc((input.shape[1] || 1) * c[1])]);\n */\n newCache.push(calculatedBox);\n }\n tf.dispose(results);\n }\n if (face.score > (config.face.detector?.minConfidence || 1)) faces.push(face);\n else tf.dispose(face.tensor);\n }\n cache.boxes = newCache; // reset cache\n return faces;\n}\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (config.face.attention?.enabled && model?.['signature']) {\n if (Object.keys(model?.['signature']?.outputs || {}).length < 6) model = null;\n }\n if (!model) {\n if (config.face.attention?.enabled) model = await loadModel(config.face.attention.modelPath);\n else model = await loadModel(config.face.mesh?.modelPath);\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n inputSize = (model['executor'] && model?.inputs?.[0].shape) ? model?.inputs?.[0].shape[2] : 256;\n return model;\n}\n\nexport const triangulation = coords.TRI468;\nexport const uvmap = coords.UV468;\n", "/**\n * Emotion model implementation\n *\n * [**Oarriaga**](https://github.com/oarriaga/face_classification)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Emotion } from '../result';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\n\nconst annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral'];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.emotion?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ score: number, emotion: Emotion }[]> {\n if (!model) return [];\n const skipFrame = skipped < (config.face.emotion?.skipFrames || 0);\n const skipTime = (config.face.emotion?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx] && (last[idx].length > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const obj: { score: number, emotion: Emotion }[] = [];\n if (config.face.emotion?.enabled) {\n const t: Record = {};\n const inputSize = model?.inputs[0].shape ? model.inputs[0].shape[2] : 0;\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n // const box = [[0.15, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // const resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n // [t.red, t.green, t.blue] = tf.split(t.resize, 3, 3);\n // weighted rgb to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n // t.redNorm = tf.mul(t.red, rgb[0]);\n // t.greenNorm = tf.mul(t.green, rgb[1]);\n // t.blueNorm = tf.mul(t.blue, rgb[2]);\n // t.grayscale = tf.addN([t.redNorm, t.greenNorm, t.blueNorm]);\n t.channels = tf.mul(t.resize, constants.rgb);\n t.grayscale = tf.sum(t.channels, 3, true);\n t.grayscaleSub = tf.sub(t.grayscale, constants.tf05);\n t.grayscaleMul = tf.mul(t.grayscaleSub, constants.tf2);\n t.emotion = model?.execute(t.grayscaleMul) as Tensor; // result is already in range 0..1, no need for additional activation\n lastTime = now();\n const data = await t.emotion.data();\n for (let i = 0; i < data.length; i++) {\n if (data[i] > (config.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] as Emotion });\n }\n obj.sort((a, b) => b.score - a.score);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "/**\n * FaceRes model implementation\n *\n * Returns Age, Gender, Descriptor\n * Implements Face similarity function\n *\n * Based on: [**HSE-FaceRes**](https://github.com/HSE-asavchenko/HSE_FaceRec_tf)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel, Tensor4D, Tensor1D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport type { Gender, Race } from '../result';\n\nexport interface FaceRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nlet model: GraphModel | null;\nconst last: FaceRes[] = [];\n\nlet lastTime = 0;\nlet lastCount = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.description?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport function enhance(input): Tensor {\n const tensor = (input.image || input.tensor || input) as Tensor4D; // input received from detector is already normalized to 0..1, input is also assumed to be straightened\n if (!model?.inputs[0].shape) return tensor; // model has no shape so no point continuing\n const crop: Tensor = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n const norm: Tensor = tf.mul(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n /*\n // do a tight crop of image and resize it to fit the model\n const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n const crop = (tensor.shape.length === 3)\n ? tf.image.cropAndResize(tf.expandDims(tensor, 0), box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]) // add batch dimension if missing\n : tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n */\n /*\n // convert to black&white to avoid colorization impact\n const rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n const [red, green, blue] = tf.split(crop, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n */\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n const obj: FaceRes = {\n age: 0 as number,\n gender: 'unknown' as Gender,\n genderScore: 0 as number,\n descriptor: [] as number[],\n };\n if (!model?.['executor']) return obj;\n const skipFrame = skipped < (config.face.description?.skipFrames || 0);\n const skipTime = (config.face.description?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && (last?.[idx]?.age > 0) && (last?.[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (config.face.description?.enabled) {\n const enhanced = enhance(image);\n const resT = model?.execute(enhanced) as Tensor[];\n lastTime = now();\n tf.dispose(enhanced);\n const genderT = resT.find((t) => t.shape[1] === 1) as Tensor;\n const gender = await genderT.data();\n const confidence = Math.trunc(200 * Math.abs((gender[0] - 0.5))) / 100;\n if (confidence > (config.face.description.minConfidence || 0)) {\n obj.gender = gender[0] <= 0.5 ? 'female' : 'male';\n obj.genderScore = Math.min(0.99, confidence);\n }\n const argmax = tf.argMax(resT.find((t) => t.shape[1] === 100) as Tensor1D, 1);\n const ageIdx: number = (await argmax.data())[0];\n tf.dispose(argmax);\n const ageT = resT.find((t) => t.shape[1] === 100) as Tensor;\n const all = await ageT.data();\n obj.age = Math.round(all[ageIdx - 1] > all[ageIdx + 1] ? 10 * ageIdx - 100 * all[ageIdx - 1] : 10 * ageIdx + 100 * all[ageIdx + 1]) / 10;\n\n if (Number.isNaN(gender[0]) || Number.isNaN(all[0])) log('faceres error:', { model, result: resT });\n\n const desc = resT.find((t) => t.shape[1] === 1024);\n // const reshape = desc.reshape([128, 8]); // reshape large 1024-element descriptor to 128 x 8\n // const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it which leaves us with 128-element descriptor\n const descriptor = desc ? await desc.data() : [] as number[];\n obj.descriptor = Array.from(descriptor);\n resT.forEach((t) => tf.dispose(t));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "import type { Tensor } from '../tfjs/types';\nimport type { FaceResult } from '../result';\n// import * as tf from 'dist/tfjs.esm.js';\nimport { meshAnnotations } from './facemeshcoords';\n\nconst expandFact = 0.1;\nconst alpha = 0.5;\n\n// point inclusion in polygon based on https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\nfunction insidePoly(x: number, y: number, polygon: { x: number, y: number }[]): boolean {\n let inside = false;\n let j = polygon.length - 1;\n for (let i = 0; i < polygon.length; j = i++) {\n if (((polygon[i].y > y) !== (polygon[j].y > y)) && (x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) inside = !inside;\n }\n return inside;\n}\n\nexport async function mask(face: FaceResult): Promise {\n if (!face.tensor) return face.tensor;\n if (!face.mesh || face.mesh.length < 100) return face.tensor;\n const width = face.tensor.shape[2] || 0;\n const height = face.tensor.shape[1] || 0;\n const buffer = await face.tensor.buffer();\n let silhouette: { x: number, y: number }[] = [];\n for (const pt of meshAnnotations.silhouette) silhouette.push({ x: (face.mesh[pt][0] - face.box[0]) / face.box[2], y: (face.mesh[pt][1] - face.box[1]) / face.box[3] }); // add all silhouette points scaled to local box\n if (expandFact && expandFact > 0) silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); // expand silhouette\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const inside = insidePoly(x / width, y / width, silhouette);\n if (!inside) {\n buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0);\n buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1);\n buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2);\n }\n }\n }\n const output = buffer.toTensor();\n // tf.dispose(buffer);\n return output;\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.antispoof?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.antispoof?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.antispoof?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.liveness?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.liveness?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.liveness?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * GEAR [gender/emotion/age/race] model implementation\n *\n * Based on: [**GEAR Predictor**](https://github.com/Udolf15/GEAR-Predictor)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Gender, Race } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nexport interface GearType { age: number, gender: Gender, genderScore: number, race: { score: number, race: Race }[] }\nlet model: GraphModel | null;\nconst last: GearType[] = [];\nconst raceNames = ['white', 'black', 'asian', 'indian', 'other'];\nconst ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.gear?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model) return { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n const skipFrame = skipped < (config.face.gear?.skipFrames || 0);\n const skipTime = (config.face.gear?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n // t.resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape[2], model?.inputs[0].shape[1]], false);\n const box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const obj: GearType = { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n if (config.face.gear?.enabled) [t.age, t.gender, t.race] = model.execute(t.resize, ['age_output', 'gender_output', 'race_output']) as Tensor[];\n const gender = await t.gender.data();\n obj.gender = gender[0] > gender[1] ? 'male' : 'female';\n obj.genderScore = Math.round(100 * (gender[0] > gender[1] ? gender[0] : gender[1])) / 100;\n const race = await t.race.data();\n for (let i = 0; i < race.length; i++) {\n if (race[i] > (config.face.gear?.minConfidence || 0.2)) obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] as Race });\n }\n obj.race.sort((a, b) => b.score - a.score);\n // {0: 'Below20', 1: '21-25', 2: '26-30', 3: '31-40',4: '41-50', 5: '51-60', 6: 'Above60'}\n const ageDistribution = Array.from(await t.age.data());\n const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]);\n let age = ageSorted[0][0]; // pick best starting point\n for (let i = 1; i < ageSorted.length; i++) age += ageSorted[i][1] * (ageSorted[i][0] - age); // adjust with each other choice by weight\n obj.age = Math.round(10 * age) / 10;\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Age model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\n\nlet model: GraphModel | null;\nconst last: { age: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet'].modelPathAge);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ age: number }> {\n if (!model) return { age: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.age && (last[idx]?.age > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs || !model.inputs[0] || !model.inputs[0].shape) return;\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n t.enhance = tf.mul(t.resize, constants.tf255);\n const obj = { age: 0 };\n if (config.face['ssrnet']?.enabled) t.age = model.execute(t.enhance) as Tensor;\n if (t.age) {\n const data = await t.age.data();\n obj.age = Math.trunc(10 * data[0]) / 10;\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Gender model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Gender } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: { gender: Gender, genderScore: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\n// tuning values\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet']?.modelPathGender);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx, count): Promise<{ gender: Gender, genderScore: number }> {\n if (!model) return { gender: 'unknown', genderScore: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.gender && (last[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n t.enhance = tf.tidy(() => {\n const [red, green, blue] = tf.split(t.resize, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n return normalize;\n });\n const obj: { gender: Gender, genderScore: number } = { gender: 'unknown', genderScore: 0 };\n if (config.face['ssrnet']?.enabled) t.gender = model.execute(t.enhance) as Tensor;\n const data = await t.gender.data();\n obj.gender = data[0] > data[1] ? 'female' : 'male'; // returns two values 0..1, bigger one is prediction\n obj.genderScore = data[0] > data[1] ? (Math.trunc(100 * data[0]) / 100) : (Math.trunc(100 * data[1]) / 100);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * MobileFaceNet model implementation\n *\n * Based on: [**BecauseofAI MobileFace**](https://github.com/becauseofAI/MobileFace)\n *\n * Obsolete and replaced by `faceres` that performs age/gender/descriptor analysis\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['mobilefacenet']?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n/*\n// convert to black&white to avoid colorization impact\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\nconst [red, green, blue] = tf.split(crop, 3, 3);\nconst redNorm = tf.mul(red, rgb[0]);\nconst greenNorm = tf.mul(green, rgb[1]);\nconst blueNorm = tf.mul(blue, rgb[2]);\nconst grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\nconst merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n\n// optional increase image contrast\n// or do it per-channel so mean is done on each channel\n// or do it based on histogram\nconst mean = merge.mean();\nconst factor = 5;\nconst contrast = merge.sub(mean).mul(factor).add(mean);\n*/\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['mobilefacenet']?.skipFrames || 0);\n const skipTime = (config.face['mobilefacenet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['mobilefacenet']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n /*\n // optional normalize outputs with l2 normalization\n const scaled = tf.tidy(() => {\n const l2 = res.norm('euclidean');\n const scale = res.div(l2);\n return scale;\n });\n\n // optional reduce feature vector complexity\n const reshape = tf.reshape(res, [128, 2]); // split 256 vectors into 128 x 2\n const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it\n */\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "/**\n * InsightFace model implementation\n *\n * Based on: [**DeepInsight InsightFace**](https://github.com/deepinsight/insightface)\n *\n * Alternative face embedding detection\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['insightface'].modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['insightface']?.skipFrames || 0);\n const skipTime = (config.face['insightface']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['insightface']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "import type { Point, FaceResult } from '../result';\n\ntype Vector = [number, number, number];\n\nconst calculateGaze = (face: FaceResult): { bearing: number, strength: number } => {\n const radians = (pt1: Point, pt2: Point) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); // function to calculate angle between any two points\n if (!face.annotations.rightEyeIris || !face.annotations.leftEyeIris) return { bearing: 0, strength: 0 };\n\n const offsetIris = [0, -0.1]; // iris center may not align with average of eye extremes\n const eyeRatio = 1; // factor to normalize changes x vs y\n\n const left = (face.mesh[33][2] || 0) > (face.mesh[263][2] || 0); // pick left or right eye depending which one is closer bazed on outsize point z axis\n const irisCenter = left ? face.mesh[473] : face.mesh[468];\n const eyeCenter = left // eye center is average of extreme points on x axis for both x and y, ignoring y extreme points as eyelids naturally open/close more when gazing up/down so relative point is less precise\n ? [(face.mesh[133][0] + face.mesh[33][0]) / 2, (face.mesh[133][1] + face.mesh[33][1]) / 2]\n : [(face.mesh[263][0] + face.mesh[362][0]) / 2, (face.mesh[263][1] + face.mesh[362][1]) / 2];\n const eyeSize = left // eye size is difference between extreme points for both x and y, used to normalize & squarify eye dimensions\n ? [face.mesh[133][0] - face.mesh[33][0], face.mesh[23][1] - face.mesh[27][1]]\n : [face.mesh[263][0] - face.mesh[362][0], face.mesh[253][1] - face.mesh[257][1]];\n const eyeDiff: Point = [ // x distance between extreme point and center point normalized with eye size\n (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0],\n eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1],\n ];\n let strength = Math.sqrt((eyeDiff[0] * eyeDiff[0]) + (eyeDiff[1] * eyeDiff[1])); // vector length is a diagonal between two differences\n strength = Math.min(strength, face.boxRaw[2] / 2, face.boxRaw[3] / 2); // limit strength to half of box size to avoid clipping due to low precision\n const bearing = (radians([0, 0], eyeDiff) + (Math.PI / 2)) % Math.PI; // using eyeDiff instead eyeCenter/irisCenter combo due to manual adjustments and rotate clockwise 90degrees\n return { bearing, strength };\n};\n\nexport const calculateFaceAngle = (face: FaceResult, imageSize: [number, number]): {\n angle: { pitch: number, yaw: number, roll: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n} => {\n // const degrees = (theta) => Math.abs(((theta * 180) / Math.PI) % 360);\n const normalize = (v: Vector): Vector => { // normalize vector\n const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n v[0] /= length;\n v[1] /= length;\n v[2] /= length;\n return v;\n };\n const subVectors = (a: Vector, b: Vector): Vector => { // vector subtraction (a - b)\n const x = a[0] - b[0];\n const y = a[1] - b[1];\n const z = a[2] - b[2];\n return [x, y, z];\n };\n const crossVectors = (a: Vector, b: Vector): Vector => { // vector cross product (a x b)\n const x = a[1] * b[2] - a[2] * b[1];\n const y = a[2] * b[0] - a[0] * b[2];\n const z = a[0] * b[1] - a[1] * b[0];\n return [x, y, z];\n };\n // 3x3 rotation matrix to Euler angles based on https://www.geometrictools.com/Documentation/EulerAngles.pdf\n const rotationMatrixToEulerAngle = (r: number[]): { pitch: number, yaw: number, roll: number } => {\n const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; // eslint-disable-line @typescript-eslint/no-unused-vars\n let thetaX: number;\n let thetaY: number;\n let thetaZ: number;\n if (r10 < 1) { // YZX calculation\n if (r10 > -1) {\n thetaZ = Math.asin(r10);\n thetaY = Math.atan2(-r20, r00);\n thetaX = Math.atan2(-r12, r11);\n } else {\n thetaZ = -Math.PI / 2;\n thetaY = -Math.atan2(r21, r22);\n thetaX = 0;\n }\n } else {\n thetaZ = Math.PI / 2;\n thetaY = Math.atan2(r21, r22);\n thetaX = 0;\n }\n if (Number.isNaN(thetaX)) thetaX = 0;\n if (Number.isNaN(thetaY)) thetaY = 0;\n if (Number.isNaN(thetaZ)) thetaZ = 0;\n return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ };\n };\n\n /*\n const meshToEulerAngle = (mesh) => { // simple Euler angle calculation based existing 3D mesh\n const radians = (a1, a2, b1, b2) => Math.atan2(b2 - a2, b1 - a1);\n return { // values are in radians in range of -pi/2 to pi/2 which is -90 to +90 degrees, value of 0 means center\n pitch: radians(mesh[10][1], mesh[10][2], mesh[152][1], mesh[152][2]), // looking at y,z of top and bottom points of the face // pitch is face move up/down\n yaw: radians(mesh[33][0], mesh[33][2], mesh[263][0], mesh[263][2]), // looking at x,z of outside corners of leftEye and rightEye // yaw is face turn left/right\n roll: radians(mesh[33][0], mesh[33][1], mesh[263][0], mesh[263][1]), // looking at x,y of outside corners of leftEye and rightEye // roll is face lean left/right\n };\n };\n */\n\n // initialize gaze and mesh\n const mesh = face.meshRaw;\n if (!mesh || mesh.length < 300) return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } };\n\n const size = Math.max(face.boxRaw[2] * imageSize[0], face.boxRaw[3] * imageSize[1]) / 1.5;\n // top, bottom, left, right\n const pts: Point[] = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size, pt[1] * imageSize[1] / size, pt[2]] as Point); // make the xyz coordinates proportional, independent of the image/box size\n\n const yAxis = normalize(subVectors(pts[1] as Vector, pts[0] as Vector));\n let xAxis = normalize(subVectors(pts[3] as Vector, pts[2] as Vector));\n const zAxis = normalize(crossVectors(xAxis, yAxis));\n // adjust xAxis to make sure that all axes are perpendicular to each other\n xAxis = crossVectors(yAxis, zAxis);\n\n // Rotation Matrix from Axis Vectors - http://renderdan.blogspot.com/2006/05/rotation-matrix-from-axis-vectors.html\n // 3x3 rotation matrix is flatten to array in row-major order. Note that the rotation represented by this matrix is inverted.\n const matrix: [number, number, number, number, number, number, number, number, number] = [\n xAxis[0], xAxis[1], xAxis[2],\n yAxis[0], yAxis[1], yAxis[2],\n zAxis[0], zAxis[1], zAxis[2],\n ];\n const angle = rotationMatrixToEulerAngle(matrix);\n // const angle = meshToEulerAngle(mesh);\n\n // we have iris keypoints so we can calculate gaze direction\n const gaze = mesh.length === 478 ? calculateGaze(face) : { bearing: 0, strength: 0 };\n\n return { angle, matrix, gaze };\n};\n", "import type { FaceResult } from '../result';\n\nexport function calculateCameraDistance(face: FaceResult, width: number): number {\n // iris points are [center, left, top, right, bottom]\n // average size of human iris is 11.7mm - fairly constant for all ages/genders/races\n const f = face?.annotations;\n if (!f) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // distance of eye from camera in meters\n const cameraDistance = Math.round(1.17 / irisSize) / 100;\n return cameraDistance;\n}\n\nexport function calculateEyesDistance(face: FaceResult, width: number): number {\n // average distance between eyes is 65mm - fairly constant for typical adult male, but varies otherwise\n const f = face?.annotations;\n if (!f) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // pixel x and y distance of centers of left and right iris, you can use edges instead\n const irisDistanceXY = [f.leftEyeIris[0][0] - f.rightEyeIris[0][0], f.leftEyeIris[0][1] - f.rightEyeIris[0][1]];\n // absolute distance bewtween eyes in 0..1 range to account for head pitch (we can ignore yaw)\n const irisDistance = Math.sqrt((irisDistanceXY[0] * irisDistanceXY[0]) + (irisDistanceXY[1] * irisDistanceXY[1])) / width;\n // distance between eyes in meters\n const eyesDistance = Math.round(1.17 * irisDistance / irisSize) / 100;\n return eyesDistance;\n}\n", "/**\n * Face algorithm implementation\n * Uses FaceMesh, Emotion and FaceRes models to create a unified pipeline\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as facemesh from './facemesh';\nimport * as emotion from '../gear/emotion';\nimport * as faceres from './faceres';\nimport * as mask from './mask';\nimport * as antispoof from './antispoof';\nimport * as liveness from './liveness';\nimport * as gear from '../gear/gear';\nimport * as ssrnetAge from '../gear/ssrnet-age';\nimport * as ssrnetGender from '../gear/ssrnet-gender';\nimport * as mobilefacenet from './mobilefacenet';\nimport * as insightface from './insightface';\nimport type { FaceResult, Emotion, Gender, Race } from '../result';\nimport type { Tensor4D } from '../tfjs/types';\nimport type { Human } from '../human';\nimport { calculateFaceAngle } from './angles';\nimport { calculateCameraDistance } from './anthropometry';\n\ninterface DescRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nexport const detectFace = async (instance: Human /* instance of human */, input: Tensor4D): Promise => {\n // run facemesh, includes blazeface and iris\n let timeStamp: number = now();\n let ageRes: { age: number } | Promise<{ age: number }> | null;\n let gearRes: gear.GearType | Promise | null;\n let genderRes: { gender: string, genderScore: number } | Promise<{ gender: string, genderScore: number }> | null;\n let emotionRes: { score: number, emotion: Emotion }[] | Promise<{ score: number, emotion: Emotion }[]>;\n let mobilefacenetRes: number[] | Promise | null;\n let insightfaceRes: number[] | Promise | null;\n let antispoofRes: number | Promise | null;\n let livenessRes: number | Promise | null;\n let descRes: DescRes | Promise | null;\n\n const faceRes: FaceResult[] = [];\n instance.state = 'run:face';\n\n const faces: FaceResult[] = await facemesh.predict(input, instance.config);\n instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n if (!input.shape || input.shape.length !== 4) return [];\n if (!faces) return [];\n // for (const face of faces) {\n for (let i = 0; i < faces.length; i++) {\n instance.analyze('Get Face');\n\n // is something went wrong, skip the face\n // @ts-ignore possibly undefied\n if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) {\n log('Face object is disposed:', faces[i].tensor);\n continue;\n }\n\n // optional face mask\n if (instance.config.face.detector?.mask) {\n const masked = await mask.mask(faces[i]);\n tf.dispose(faces[i].tensor);\n if (masked) faces[i].tensor = masked;\n }\n\n // calculate face angles\n const rotation = faces[i].mesh && (faces[i].mesh.length > 200) ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null;\n\n // run emotion, inherits face from blazeface\n instance.analyze('Start Emotion:');\n if (instance.config.async) {\n emotionRes = instance.config.face.emotion?.enabled ? emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n } else {\n instance.state = 'run:emotion';\n timeStamp = now();\n emotionRes = instance.config.face.emotion?.enabled ? await emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Emotion:');\n\n // run antispoof, inherits face from blazeface\n instance.analyze('Start AntiSpoof:');\n if (instance.config.async) {\n antispoofRes = instance.config.face.antispoof?.enabled ? antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:antispoof';\n timeStamp = now();\n antispoofRes = instance.config.face.antispoof?.enabled ? await antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End AntiSpoof:');\n\n // run liveness, inherits face from blazeface\n instance.analyze('Start Liveness:');\n if (instance.config.async) {\n livenessRes = instance.config.face.liveness?.enabled ? liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:liveness';\n timeStamp = now();\n livenessRes = instance.config.face.liveness?.enabled ? await liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Liveness:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start GEAR:');\n if (instance.config.async) {\n gearRes = instance.config.face.gear?.enabled ? gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:gear';\n timeStamp = now();\n gearRes = instance.config.face.gear?.enabled ? await gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.gear = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End GEAR:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start SSRNet:');\n if (instance.config.async) {\n ageRes = instance.config.face['ssrnet']?.enabled ? ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:ssrnet';\n timeStamp = now();\n ageRes = instance.config.face['ssrnet']?.enabled ? await ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? await ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.ssrnet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End SSRNet:');\n\n // run mobilefacenet alternative, inherits face from blazeface\n instance.analyze('Start MobileFaceNet:');\n if (instance.config.async) {\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? await mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End MobileFaceNet:');\n\n // run insightface alternative, inherits face from blazeface\n instance.analyze('Start InsightFace:');\n if (instance.config.async) {\n insightfaceRes = instance.config.face['insightface']?.enabled ? insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n insightfaceRes = instance.config.face['insightface']?.enabled ? await insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End InsightFace:');\n\n // run faceres, inherits face from blazeface\n instance.analyze('Start Description:');\n if (instance.config.async) {\n descRes = faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n } else {\n instance.state = 'run:description';\n timeStamp = now();\n descRes = await faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Description:');\n\n // if async wait for results\n if (instance.config.async) {\n [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]);\n }\n instance.analyze('Finish Face:');\n\n if (instance.config.face['ssrnet']?.enabled && ageRes && genderRes) { // override age/gender if ssrnet model is used\n descRes = {\n ...(descRes as DescRes),\n age: (ageRes as { age: number}).age,\n gender: (genderRes as { gender: Gender, genderScore: number }).gender,\n genderScore: (genderRes as { gender: Gender, genderScore: number }).genderScore,\n };\n }\n if (instance.config.face.gear?.enabled && gearRes) { // override age/gender/race if gear model is used\n descRes = {\n ...(descRes as DescRes),\n age: (gearRes as gear.GearType).age,\n gender: (gearRes as gear.GearType).gender,\n genderScore: (gearRes as gear.GearType).genderScore,\n race: (gearRes as gear.GearType).race,\n };\n }\n if (instance.config.face['mobilefacenet']?.enabled && mobilefacenetRes) { // override descriptor if mobilefacenet model is used\n (descRes as DescRes).descriptor = mobilefacenetRes as number[];\n }\n\n if (instance.config.face['insightface']?.enabled && insightfaceRes) { // override descriptor if insightface model is used\n (descRes as DescRes).descriptor = insightfaceRes as number[];\n }\n\n const irisSize = instance.config.face.iris?.enabled ? calculateCameraDistance(faces[i], input.shape[2]) : 0;\n\n // optionally return tensor\n const tensor = instance.config.face.detector?.return ? tf.squeeze(faces[i].tensor as Tensor4D) : null;\n // dispose original face tensor\n tf.dispose(faces[i].tensor);\n // delete temp face image\n if (faces[i].tensor) delete faces[i].tensor;\n // combine results\n const res: FaceResult = {\n ...faces[i],\n id: i,\n };\n if ((descRes as DescRes).age) res.age = (descRes as DescRes).age;\n if ((descRes as DescRes).gender) res.gender = (descRes as DescRes).gender;\n if ((descRes as DescRes).genderScore) res.genderScore = (descRes as DescRes).genderScore;\n if ((descRes as DescRes).descriptor) res.embedding = (descRes as DescRes).descriptor;\n if ((descRes as DescRes).race) res.race = (descRes as DescRes).race as { score: number, race: Race }[];\n if (emotionRes) res.emotion = emotionRes as { score: number, emotion: Emotion }[];\n if (antispoofRes) res.real = antispoofRes as number;\n if (livenessRes) res.live = livenessRes as number;\n if (irisSize > 0) res.distance = irisSize;\n if (rotation) res.rotation = rotation;\n if (tensor) res.tensor = tensor;\n faceRes.push(res);\n instance.analyze('End Face');\n }\n instance.analyze('End FaceMesh:');\n if (instance.config.async) {\n if (instance.performance.face) delete instance.performance.face;\n if (instance.performance.age) delete instance.performance.age;\n if (instance.performance.gender) delete instance.performance.gender;\n if (instance.performance.emotion) delete instance.performance.emotion;\n }\n return faceRes;\n};\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nexport const Finger = {\n thumb: 0,\n index: 1,\n middle: 2,\n ring: 3,\n pinky: 4,\n all: [0, 1, 2, 3, 4], // just for convenience\n nameMapping: { 0: 'thumb', 1: 'index', 2: 'middle', 3: 'ring', 4: 'pinky' },\n // Describes mapping of joints based on the 21 points returned by handpose.\n // [0] Palm\n // [1-4] Thumb\n // [5-8] Index\n // [9-12] Middle\n // [13-16] Ring\n // [17-20] Pinky\n pointsMapping: {\n 0: [[0, 1], [1, 2], [2, 3], [3, 4]],\n 1: [[0, 5], [5, 6], [6, 7], [7, 8]],\n 2: [[0, 9], [9, 10], [10, 11], [11, 12]],\n 3: [[0, 13], [13, 14], [14, 15], [15, 16]],\n 4: [[0, 17], [17, 18], [18, 19], [19, 20]],\n },\n getName: (value) => Finger.nameMapping[value],\n getPoints: (value) => Finger.pointsMapping[value],\n};\n\nexport const FingerCurl = {\n none: 0,\n half: 1,\n full: 2,\n nameMapping: { 0: 'none', 1: 'half', 2: 'full' },\n getName: (value) => FingerCurl.nameMapping[value],\n};\n\nexport const FingerDirection = {\n verticalUp: 0,\n verticalDown: 1,\n horizontalLeft: 2,\n horizontalRight: 3,\n diagonalUpRight: 4,\n diagonalUpLeft: 5,\n diagonalDownRight: 6,\n diagonalDownLeft: 7,\n nameMapping: { 0: 'verticalUp', 1: 'verticalDown', 2: 'horizontalLeft', 3: 'horizontalRight', 4: 'diagonalUpRight', 5: 'diagonalUpLeft', 6: 'diagonalDownRight', 7: 'diagonalDownLeft' },\n getName: (value) => FingerDirection.nameMapping[value],\n};\n\nexport class FingerGesture {\n name;\n curls;\n directions;\n weights;\n weightsRelative;\n\n constructor(name) {\n // name (should be unique)\n this.name = name;\n this.curls = {};\n this.directions = {};\n this.weights = [1.0, 1.0, 1.0, 1.0, 1.0];\n this.weightsRelative = [1.0, 1.0, 1.0, 1.0, 1.0];\n }\n\n curl(finger, curl, confidence) {\n if (typeof this.curls[finger] === 'undefined') this.curls[finger] = [];\n this.curls[finger].push([curl, confidence]);\n }\n\n direction(finger, position, confidence) {\n if (!this.directions[finger]) this.directions[finger] = [];\n this.directions[finger].push([position, confidence]);\n }\n\n weight(finger, weight) {\n this.weights[finger] = weight;\n // recalculate relative weights\n const total = this.weights.reduce((a, b) => a + b, 0);\n this.weightsRelative = this.weights.map((el) => el * 5 / total);\n }\n\n matchAgainst(detectedCurls, detectedDirections) {\n let confidence = 0.0;\n // look at the detected curl of each finger and compare with\n // the expected curl of this finger inside current gesture\n for (const fingerIdx in detectedCurls) {\n const detectedCurl = detectedCurls[fingerIdx];\n const expectedCurls = this.curls[fingerIdx];\n if (typeof expectedCurls === 'undefined') {\n // no curl description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible curl of this specific finger\n for (const [expectedCurl, score] of expectedCurls) {\n if (detectedCurl === expectedCurl) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n // same for detected direction of each finger\n for (const fingerIdx in detectedDirections) {\n const detectedDirection = detectedDirections[fingerIdx];\n const expectedDirections = this.directions[fingerIdx];\n if (typeof expectedDirections === 'undefined') {\n // no direction description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible direction of this specific finger\n for (const [expectedDirection, score] of expectedDirections) {\n if (detectedDirection === expectedDirection) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n return confidence / 10;\n }\n}\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nimport { Finger, FingerCurl, FingerDirection, FingerGesture } from './fingerdef';\n\nexport const { thumb, index, middle, ring, pinky } = Finger;\nexport const { none, half, full } = FingerCurl;\nexport const { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;\n\n// describe thumbs up gesture \uD83D\uDC4D\nconst ThumbsUp = new FingerGesture('thumbs up');\nThumbsUp.curl(thumb, none, 1.0);\nThumbsUp.direction(thumb, verticalUp, 1.0);\nThumbsUp.direction(thumb, diagonalUpLeft, 0.25);\nThumbsUp.direction(thumb, diagonalUpRight, 0.25);\nfor (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {\n ThumbsUp.curl(finger, full, 1.0);\n ThumbsUp.direction(finger, horizontalLeft, 1.0);\n ThumbsUp.direction(finger, horizontalRight, 1.0);\n}\n\n// describe Victory gesture \u270C\uFE0F\nconst Victory = new FingerGesture('victory');\nVictory.curl(thumb, half, 0.5);\nVictory.curl(thumb, none, 0.5);\nVictory.direction(thumb, verticalUp, 1.0);\nVictory.direction(thumb, diagonalUpLeft, 1.0);\nVictory.curl(index, none, 1.0);\nVictory.direction(index, verticalUp, 0.75);\nVictory.direction(index, diagonalUpLeft, 1.0);\nVictory.curl(middle, none, 1.0);\nVictory.direction(middle, verticalUp, 1.0);\nVictory.direction(middle, diagonalUpLeft, 0.75);\nVictory.curl(ring, full, 1.0);\nVictory.direction(ring, verticalUp, 0.2);\nVictory.direction(ring, diagonalUpLeft, 1.0);\nVictory.direction(ring, horizontalLeft, 0.2);\nVictory.curl(pinky, full, 1.0);\nVictory.direction(pinky, verticalUp, 0.2);\nVictory.direction(pinky, diagonalUpLeft, 1.0);\nVictory.direction(pinky, horizontalLeft, 0.2);\nVictory.weight(index, 2);\nVictory.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst Point = new FingerGesture('point');\nPoint.curl(thumb, full, 1.0);\nPoint.curl(index, none, 0.5);\nPoint.curl(middle, full, 0.5);\nPoint.curl(ring, full, 0.5);\nPoint.curl(pinky, full, 0.5);\nPoint.weight(index, 2);\nPoint.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst MiddleFinger = new FingerGesture('middle finger');\nMiddleFinger.curl(thumb, none, 1.0);\nMiddleFinger.curl(index, full, 0.5);\nMiddleFinger.curl(middle, full, 0.5);\nMiddleFinger.curl(ring, full, 0.5);\nMiddleFinger.curl(pinky, full, 0.5);\nMiddleFinger.weight(index, 2);\nMiddleFinger.weight(middle, 2);\n\n// describe Open Palm gesture \u270C\uFE0F\nconst OpenPalm = new FingerGesture('open palm');\nOpenPalm.curl(thumb, none, 0.75);\nOpenPalm.curl(index, none, 0.75);\nOpenPalm.curl(middle, none, 0.75);\nOpenPalm.curl(ring, none, 0.75);\nOpenPalm.curl(pinky, none, 0.75);\n\nexport default [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];\n", "/**\n * FingerPose algorithm implementation constants\n *\n * Based on: [**FingerPose***](https://github.com/andypotato/fingerpose)\n */\n\n/* eslint-disable camelcase */\n\nimport { Finger, FingerCurl, FingerDirection } from './fingerdef';\nimport Gestures from '../hand/fingergesture';\n\nconst minConfidence = 0.7;\nconst options = {\n // curl estimation\n HALF_CURL_START_LIMIT: 60.0,\n NO_CURL_START_LIMIT: 130.0,\n // direction estimation\n DISTANCE_VOTE_POWER: 1.1,\n SINGLE_ANGLE_VOTE_POWER: 0.9,\n TOTAL_ANGLE_VOTE_POWER: 1.6,\n};\n\nfunction calculateSlope(point1x, point1y, point2x, point2y) {\n const value = (point1y - point2y) / (point1x - point2x);\n let slope = Math.atan(value) * 180 / Math.PI;\n if (slope <= 0) slope = -slope;\n else if (slope > 0) slope = 180 - slope;\n return slope;\n}\n\n// point1, point2 are 2d or 3d point arrays (xy[z])\n// returns either a single scalar (2d) or array of two slopes (3d)\nfunction getSlopes(point1, point2) {\n if (!point1 || !point2) return [0, 0];\n const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);\n if (point1.length === 2) return slopeXY;\n const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]);\n return [slopeXY, slopeYZ];\n}\n\nfunction angleOrientationAt(angle, weightageAt = 1.0) {\n let isVertical = 0;\n let isDiagonal = 0;\n let isHorizontal = 0;\n if (angle >= 75.0 && angle <= 105.0) isVertical = 1 * weightageAt;\n else if (angle >= 25.0 && angle <= 155.0) isDiagonal = 1 * weightageAt;\n else isHorizontal = 1 * weightageAt;\n return [isVertical, isDiagonal, isHorizontal];\n}\n\nfunction estimateFingerCurl(startPoint, midPoint, endPoint) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const start_mid_z_dist = startPoint[2] - midPoint[2];\n const start_end_z_dist = startPoint[2] - endPoint[2];\n const mid_end_z_dist = midPoint[2] - endPoint[2];\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist);\n let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist);\n if (cos_in > 1.0) cos_in = 1.0;\n else if (cos_in < -1.0) cos_in = -1.0;\n let angleOfCurve = Math.acos(cos_in);\n angleOfCurve = (57.2958 * angleOfCurve) % 180;\n let fingerCurl;\n if (angleOfCurve > options.NO_CURL_START_LIMIT) fingerCurl = FingerCurl.none;\n else if (angleOfCurve > options.HALF_CURL_START_LIMIT) fingerCurl = FingerCurl.half;\n else fingerCurl = FingerCurl.full;\n return fingerCurl;\n}\n\nfunction estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n if (max_dist_x === Math.abs(start_end_x_dist)) {\n if (start_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else if (max_dist_x === Math.abs(start_mid_x_dist)) {\n if (start_mid_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else {\n if (mid_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n }\n return estimatedDirection;\n}\n\nfunction estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) {\n let estimatedDirection;\n if (max_dist_y === Math.abs(start_end_y_dist)) {\n if (start_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else if (max_dist_y === Math.abs(start_mid_y_dist)) {\n if (start_mid_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else {\n if (mid_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n }\n return estimatedDirection;\n}\n\nfunction estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n if (reqd_vertical_direction === FingerDirection.verticalUp) {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalUpLeft;\n else estimatedDirection = FingerDirection.diagonalUpRight;\n } else {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalDownLeft;\n else estimatedDirection = FingerDirection.diagonalDownRight;\n }\n return estimatedDirection;\n}\n\nfunction calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist));\n const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist));\n let voteVertical = 0.0;\n let voteDiagonal = 0.0;\n let voteHorizontal = 0.0;\n const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 0.00001);\n if (start_end_x_y_dist_ratio > 1.5) voteVertical += options.DISTANCE_VOTE_POWER;\n else if (start_end_x_y_dist_ratio > 0.66) voteDiagonal += options.DISTANCE_VOTE_POWER;\n else voteHorizontal += options.DISTANCE_VOTE_POWER;\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist);\n const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist);\n let calc_start_point_x = startPoint[0];\n let calc_start_point_y = startPoint[1];\n let calc_end_point_x = endPoint[0];\n let calc_end_point_y = endPoint[1];\n if (max_dist === start_mid_dist) {\n calc_end_point_x = endPoint[0];\n calc_end_point_y = endPoint[1];\n } else if (max_dist === mid_end_dist) {\n calc_start_point_x = midPoint[0];\n calc_start_point_y = midPoint[1];\n }\n const calcStartPoint = [calc_start_point_x, calc_start_point_y];\n const calcEndPoint = [calc_end_point_x, calc_end_point_y];\n const totalAngle = getSlopes(calcStartPoint, calcEndPoint);\n const votes = angleOrientationAt(totalAngle, options.TOTAL_ANGLE_VOTE_POWER);\n voteVertical += votes[0];\n voteDiagonal += votes[1];\n voteHorizontal += votes[2];\n for (const fingerSlope of fingerSlopes) {\n const fingerVotes = angleOrientationAt(fingerSlope, options.SINGLE_ANGLE_VOTE_POWER);\n voteVertical += fingerVotes[0];\n voteDiagonal += fingerVotes[1];\n voteHorizontal += fingerVotes[2];\n }\n // in case of tie, highest preference goes to Vertical,\n // followed by horizontal and then diagonal\n let estimatedDirection;\n if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n } else {\n estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n }\n return estimatedDirection;\n}\n\nfunction estimate(landmarks) {\n // step 1: calculate slopes\n const slopesXY: number[][] = [];\n const slopesYZ: number[][] = [];\n const fingerCurls: number[] = [];\n const fingerDirections: number[] = [];\n if (!landmarks) return { curls: fingerCurls, directions: fingerDirections };\n\n // step 1: calculate slopes\n for (const finger of Finger.all) {\n const points = Finger.getPoints(finger);\n const slopeAtXY: number[] = [];\n const slopeAtYZ: number[] = [];\n for (const point of points) {\n const point1 = landmarks[point[0]];\n const point2 = landmarks[point[1]];\n // calculate single slope\n const slopes = getSlopes(point1, point2);\n const slopeXY = slopes[0];\n const slopeYZ = slopes[1];\n slopeAtXY.push(slopeXY);\n slopeAtYZ.push(slopeYZ);\n }\n slopesXY.push(slopeAtXY);\n slopesYZ.push(slopeAtYZ);\n }\n\n // step 2: calculate orientations\n for (const finger of Finger.all) {\n // start finger predictions from palm - except for thumb\n const pointIndexAt = (finger === Finger.thumb) ? 1 : 0;\n const fingerPointsAt = Finger.getPoints(finger);\n const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]];\n const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]];\n const endPoint = landmarks[fingerPointsAt[3][1]];\n // check if finger is curled\n const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint);\n const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt));\n fingerCurls[finger] = fingerCurled;\n fingerDirections[finger] = fingerPosition;\n }\n return { curls: fingerCurls, directions: fingerDirections };\n}\n\nexport function analyze(keypoints) { // get estimations of curl / direction for each finger\n if (!keypoints || keypoints.length === 0) return null;\n const estimatorRes = estimate(keypoints);\n const landmarks = {};\n for (const fingerIdx of Finger.all) {\n landmarks[Finger.getName(fingerIdx)] = {\n curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]),\n direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]),\n };\n }\n return landmarks;\n}\n\nexport function match(keypoints) { // compare gesture description to each known gesture\n const poses: { name: string, confidence: number }[] = [];\n if (!keypoints || keypoints.length === 0) return poses;\n const estimatorRes = estimate(keypoints);\n for (const gesture of Gestures) {\n const confidence = gesture.matchAgainst(estimatorRes.curls, estimatorRes.directions);\n if (confidence >= minConfidence) poses.push({ name: gesture.name, confidence });\n }\n return poses;\n}\n", "/**\n * Gesture detection algorithm\n */\n\nimport type { GestureResult, BodyResult, FaceResult, HandResult, Point } from '../result';\nimport * as fingerPose from '../hand/fingerpose';\n\n/** face gesture type */\nexport type FaceGesture =\n `facing ${'left' | 'center' | 'right'}`\n | `blink ${'left' | 'right'} eye`\n | `mouth ${number}% open`\n | `head ${'up' | 'down'}`;\n\n/** iris gesture type */\nexport type IrisGesture =\n 'facing center'\n | `looking ${'left' | 'right' | 'up' | 'down'}`\n | 'looking center';\n\n/** body gesture type */\nexport type BodyGesture =\n `leaning ${'left' | 'right'}`\n | `raise ${'left' | 'right'} hand`\n | 'i give up';\n\n/** hand gesture type */\nexport type HandGesture =\n `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} forward`\n | `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} up`\n | 'victory'\n | 'thumbs up';\n\nexport const body = (res: BodyResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { body: number, gesture: BodyGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n // raising hands\n const leftWrist = res[i].keypoints.find((a) => (a.part === 'leftWrist'));\n const rightWrist = res[i].keypoints.find((a) => (a.part === 'rightWrist'));\n const nose = res[i].keypoints.find((a) => (a.part === 'nose'));\n if (nose && leftWrist && rightWrist && (leftWrist.position[1] < nose.position[1]) && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'i give up' });\n else if (nose && leftWrist && (leftWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise left hand' });\n else if (nose && rightWrist && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise right hand' });\n\n // leaning\n const leftShoulder = res[i].keypoints.find((a) => (a.part === 'leftShoulder'));\n const rightShoulder = res[i].keypoints.find((a) => (a.part === 'rightShoulder'));\n if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) {\n gestures.push({ body: i, gesture: `leaning ${(leftShoulder.position[1] > rightShoulder.position[1]) ? 'left' : 'right'}` });\n }\n }\n return gestures;\n};\n\nexport const face = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { face: number, gesture: FaceGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (res[i].mesh && res[i].mesh.length > 450) {\n const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0);\n const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0];\n if (Math.abs(zDiff / xDiff) <= 0.15) gestures.push({ face: i, gesture: 'facing center' });\n else gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? 'left' : 'right'}` });\n const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openLeft < 0.2) gestures.push({ face: i, gesture: 'blink left eye' });\n const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openRight < 0.2) gestures.push({ face: i, gesture: 'blink right eye' });\n const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1]));\n if (mouthOpen > 10) gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` });\n const chinDepth = res[i].mesh[152][2] || 0;\n if (Math.abs(chinDepth) > 10) gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? 'up' : 'down'}` });\n }\n }\n return gestures;\n};\n\nexport const iris = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { iris: number, gesture: IrisGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!res[i].annotations?.leftEyeIris?.[0] || !res[i].annotations?.rightEyeIris?.[0]) continue;\n const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0];\n const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1];\n const areaLeft = Math.abs(sizeXLeft * sizeYLeft);\n\n const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0];\n const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1];\n const areaRight = Math.abs(sizeXRight * sizeYRight);\n\n let center = false;\n const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight);\n if (difference < 0.25) {\n center = true;\n gestures.push({ iris: i, gesture: 'facing center' });\n }\n\n const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2];\n const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2];\n if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) center = false;\n if (leftIrisCenterX > rightIrisCenterX) { // check eye with bigger offset\n if (leftIrisCenterX > 0.05) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (rightIrisCenterX > 0.05) gestures.push({ iris: i, gesture: 'looking left' });\n }\n\n const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3];\n const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3];\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) center = false;\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) gestures.push({ iris: i, gesture: 'looking down' });\n if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) gestures.push({ iris: i, gesture: 'looking up' });\n\n // still center;\n if (center) gestures.push({ iris: i, gesture: 'looking center' });\n }\n return gestures;\n};\n\nexport const hand = (res: HandResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { hand: number, gesture: HandGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n const fingers: { name: string, position: Point }[] = [];\n if (res[i].annotations) {\n for (const [finger, pos] of Object.entries(res[i].annotations)) {\n if (finger !== 'palmBase' && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger\n }\n }\n if (fingers && fingers.length > 0) {\n const closest = fingers.reduce((best, a) => ((best.position[2] || 0) < (a.position[2] || 0) ? best : a));\n gestures.push({ hand: i, gesture: `${closest.name} forward` as HandGesture });\n const highest = fingers.reduce((best, a) => (best.position[1] < a.position[1] ? best : a));\n gestures.push({ hand: i, gesture: `${highest.name} up` as HandGesture });\n }\n if (res[i].keypoints) {\n const poses = fingerPose.match(res[i].keypoints);\n for (const pose of poses) gestures.push({ hand: i, gesture: pose.name as HandGesture });\n }\n }\n return gestures;\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Point } from '../result';\n\nexport function getBoxSize(box) {\n return [\n Math.abs(box.endPoint[0] - box.startPoint[0]),\n Math.abs(box.endPoint[1] - box.startPoint[1]),\n ];\n}\n\nexport function getBoxCenter(box) {\n return [\n box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2,\n box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2,\n ];\n}\n\nexport function cutBoxFromImageAndResize(box, image, cropSize) {\n const h = image.shape[1];\n const w = image.shape[2];\n const boxes = [[\n box.startPoint[1] / h,\n box.startPoint[0] / w,\n box.endPoint[1] / h,\n box.endPoint[0] / w,\n ]];\n return tf.image.cropAndResize(image, boxes, [0], cropSize);\n}\n\nexport function scaleBoxCoordinates(box, factor) {\n const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]] as Point;\n const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]] as Point;\n const palmLandmarks = box.palmLandmarks.map((coord) => {\n const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]];\n return scaledCoord;\n });\n return { startPoint, endPoint, palmLandmarks, confidence: box.confidence };\n}\n\nexport function enlargeBox(box, factor = 1.5) {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const newHalfSize = [factor * size[0] / 2, factor * size[1] / 2];\n const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]] as Point;\n const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function squarifyBox(box) {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const maxEdge = Math.max(...size);\n const halfSize = maxEdge / 2;\n const startPoint = [centers[0] - halfSize, centers[1] - halfSize] as Point;\n const endPoint = [centers[0] + halfSize, centers[1] + halfSize] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function shiftBox(box, shiftFactor) {\n const boxSize = [\n box.endPoint[0] - box.startPoint[0],\n box.endPoint[1] - box.startPoint[1],\n ];\n const shiftVector = [boxSize[0] * shiftFactor[0], boxSize[1] * shiftFactor[1]];\n const startPoint = [box.startPoint[0] + shiftVector[0], box.startPoint[1] + shiftVector[1]] as Point;\n const endPoint = [box.endPoint[0] + shiftVector[0], box.endPoint[1] + shiftVector[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function normalizeRadians(angle) {\n return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n}\n\nexport function computeRotation(point1, point2) {\n const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]);\n return normalizeRadians(radians);\n}\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport function dot(v1, v2) {\n let product = 0;\n for (let i = 0; i < v1.length; i++) {\n product += v1[i] * v2[i];\n }\n return product;\n}\n\nexport function getColumnFrom2DArr(arr, columnIndex) {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) {\n column.push(arr[i][columnIndex]);\n }\n return column;\n}\n\nexport function multiplyTransformMatrices(mat1, mat2) {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) {\n product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n }\n return product;\n}\n\nexport function buildRotationMatrix(rotation, center) {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n}\n\nexport function invertTransformMatrix(matrix) {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [\n -dot(rotationComponent[0], translationComponent),\n -dot(rotationComponent[1], translationComponent),\n ];\n return [\n rotationComponent[0].concat(invertedTranslation[0]),\n rotationComponent[1].concat(invertedTranslation[1]),\n [0, 0, 1],\n ];\n}\n\nexport function rotatePoint(homogeneousCoordinate, rotationMatrix) {\n return [\n dot(homogeneousCoordinate, rotationMatrix[0]),\n dot(homogeneousCoordinate, rotationMatrix[1]),\n ];\n}\n", "/**\n * HandPose model implementation constants\n * See `handpose.ts` for entry point\n */\n\nexport const anchors = [\n { x: 0.015625, y: 0.015625 },\n { x: 0.015625, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n];\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport * as anchors from './handposeanchors';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, Tensor1D, Tensor2D, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Point } from '../result';\nimport type { Config } from '../config';\n\nexport class HandDetector {\n model: GraphModel;\n anchors: number[][];\n anchorsTensor: Tensor;\n inputSize: number;\n inputSizeTensor: Tensor;\n doubleInputSizeTensor: Tensor;\n\n constructor(model: GraphModel) {\n this.model = model;\n this.anchors = anchors.anchors.map((anchor) => [anchor.x, anchor.y]);\n this.anchorsTensor = tf.tensor2d(this.anchors);\n this.inputSize = this?.model?.inputs?.[0]?.shape?.[2] || 0;\n this.inputSizeTensor = tf.tensor1d([this.inputSize, this.inputSize]);\n this.doubleInputSizeTensor = tf.tensor1d([this.inputSize * 2, this.inputSize * 2]);\n }\n\n normalizeBoxes(boxes) {\n const t: Record = {};\n t.boxOffsets = tf.slice(boxes, [0, 0], [-1, 2]);\n t.boxSizes = tf.slice(boxes, [0, 2], [-1, 2]);\n t.div = tf.div(t.boxOffsets, this.inputSizeTensor);\n t.boxCenterPoints = tf.add(t.div, this.anchorsTensor);\n t.halfBoxSizes = tf.div(t.boxSizes, this.doubleInputSizeTensor);\n t.sub = tf.sub(t.boxCenterPoints, t.halfBoxSizes);\n t.startPoints = tf.mul(t.sub, this.inputSizeTensor);\n t.add = tf.add(t.boxCenterPoints, t.halfBoxSizes);\n t.endPoints = tf.mul(t.add, this.inputSizeTensor);\n const res = tf.concat2d([t.startPoints as Tensor2D, t.endPoints as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res as Tensor;\n }\n\n normalizeLandmarks(rawPalmLandmarks, index: number): Tensor {\n const t: Record = {};\n t.reshape = tf.reshape(rawPalmLandmarks, [-1, 7, 2]);\n t.div = tf.div(t.reshape, this.inputSizeTensor);\n t.landmarks = tf.add(t.div, this.anchors[index] ? this.anchors[index] : 0);\n const res = tf.mul(t.landmarks, this.inputSizeTensor);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res;\n }\n\n async predict(input: Tensor4D, config: Config): Promise<{ startPoint: Point; endPoint: Point, palmLandmarks: Point[]; confidence: number }[]> {\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);\n t.div = tf.div(t.resize, constants.tf127);\n t.image = tf.sub(t.div, constants.tf1);\n t.batched = this.model.execute(t.image) as Tensor;\n t.predictions = tf.squeeze(t.batched);\n t.slice = tf.slice(t.predictions, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.slice);\n t.scores = tf.squeeze(t.sigmoid);\n const scores = await t.scores.data();\n t.boxes = tf.slice(t.predictions, [0, 1], [-1, 4]);\n t.norm = this.normalizeBoxes(t.boxes);\n // box detection is flaky so we look for 3x boxes than we need results\n t.nms = await tf.image.nonMaxSuppressionAsync(t.norm as Tensor2D, t.scores as Tensor1D, 3 * (config.hand?.maxDetected || 1), config.hand.iouThreshold, config.hand.minConfidence);\n const nms = await t.nms.array() as number[];\n const hands: { startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number }[] = [];\n for (const index of nms) {\n const p: Record = {};\n p.box = tf.slice(t.norm, [index, 0], [1, -1]);\n p.slice = tf.slice(t.predictions, [index, 5], [1, 14]);\n p.norm = this.normalizeLandmarks(p.slice, index);\n p.palmLandmarks = tf.reshape(p.norm, [-1, 2]);\n const box = await p.box.data();\n const startPoint = box.slice(0, 2) as unknown as Point;\n const endPoint = box.slice(2, 4) as unknown as Point;\n const palmLandmarks = await p.palmLandmarks.array();\n const hand = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };\n const scaled = util.scaleBoxCoordinates(hand, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]);\n hands.push(scaled);\n Object.keys(p).forEach((tensor) => tf.dispose(p[tensor]));\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport type * as detector from './handposedetector';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { now } from '../util/util';\nimport type { Point } from '../result';\n\nconst palmBoxEnlargeFactor = 5; // default 3\nconst handBoxEnlargeFactor = 1.65; // default 1.65\nconst palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2];\nconst palmLandmarksPalmBase = 0;\nconst palmLandmarksMiddleFingerBase = 2;\nlet lastTime = 0;\n\nexport class HandPipeline {\n handDetector: detector.HandDetector;\n handPoseModel: GraphModel;\n inputSize: number;\n storedBoxes: ({ startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number } | null)[];\n skipped: number;\n detectedHands: number;\n\n constructor(handDetector, handPoseModel) {\n this.handDetector = handDetector;\n this.handPoseModel = handPoseModel;\n this.inputSize = this.handPoseModel?.inputs?.[0].shape?.[2] || 0;\n this.storedBoxes = [];\n this.skipped = Number.MAX_SAFE_INTEGER;\n this.detectedHands = 0;\n }\n\n calculateLandmarksBoundingBox(landmarks) { // eslint-disable-line class-methods-use-this\n const xs = landmarks.map((d) => d[0]);\n const ys = landmarks.map((d) => d[1]);\n const startPoint = [Math.min(...xs), Math.min(...ys)];\n const endPoint = [Math.max(...xs), Math.max(...ys)];\n return { startPoint, endPoint };\n }\n\n getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) {\n const rotatedPalmLandmarks = palmLandmarks.map((coord) => util.rotatePoint([...coord, 1], rotationMatrix));\n const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks);\n return util.enlargeBox(util.squarifyBox(boxAroundPalm), palmBoxEnlargeFactor);\n }\n\n getBoxForHandLandmarks(landmarks) {\n const boundingBox = this.calculateLandmarksBoundingBox(landmarks);\n const boxAroundHand = util.enlargeBox(util.squarifyBox(boundingBox), handBoxEnlargeFactor);\n boxAroundHand.palmLandmarks = [];\n for (let i = 0; i < palmLandmarkIds.length; i++) {\n boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2));\n }\n return boxAroundHand;\n }\n\n transformRawCoords(rawCoords, box2, angle, rotationMatrix) {\n const boxSize = util.getBoxSize(box2);\n const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2];\n const coordsScaled = rawCoords.map((coord) => [\n scaleFactor[0] * (coord[0] - this.inputSize / 2),\n scaleFactor[1] * (coord[1] - this.inputSize / 2),\n scaleFactor[2] * coord[2],\n ]);\n const coordsRotationMatrix = util.buildRotationMatrix(angle, [0, 0]);\n const coordsRotated = coordsScaled.map((coord) => {\n const rotated = util.rotatePoint(coord, coordsRotationMatrix);\n return [...rotated, coord[2]];\n });\n const inverseRotationMatrix = util.invertTransformMatrix(rotationMatrix);\n const boxCenter = [...util.getBoxCenter(box2), 1];\n const originalBoxCenter = [\n util.dot(boxCenter, inverseRotationMatrix[0]),\n util.dot(boxCenter, inverseRotationMatrix[1]),\n ];\n return coordsRotated.map((coord) => [\n Math.trunc(coord[0] + originalBoxCenter[0]),\n Math.trunc(coord[1] + originalBoxCenter[1]),\n Math.trunc(coord[2]),\n ]);\n }\n\n async estimateHands(image, config) {\n let useFreshBox = false;\n\n // run new detector every skipFrames\n let boxes;\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = this.skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\n if (config.skipAllowed) this.skipped++;\n\n // if detector result count doesn't match current working set, use it to reset current working set\n if (boxes && (boxes.length > 0) && ((boxes.length !== this.detectedHands) && (this.detectedHands !== config.hand.maxDetected) || !config.hand.landmarks)) {\n this.detectedHands = 0;\n this.storedBoxes = [...boxes];\n // for (const possible of boxes) this.storedBoxes.push(possible);\n if (this.storedBoxes.length > 0) useFreshBox = true;\n }\n const hands: { landmarks: Point[], confidence: number, boxConfidence: number, fingerConfidence: number, box: { topLeft: Point, bottomRight: Point } }[] = [];\n\n // go through working set of boxes\n for (let i = 0; i < this.storedBoxes.length; i++) {\n const currentBox = this.storedBoxes[i];\n if (!currentBox) continue;\n if (config.hand.landmarks) {\n const angle = config.hand.rotation ? util.computeRotation(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0;\n const palmCenter = util.getBoxCenter(currentBox);\n const palmCenterNormalized: [number, number] = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]];\n const rotatedImage = config.hand.rotation && env.kernels.includes('rotatewithoffset') ? tf.image.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone();\n const rotationMatrix = util.buildRotationMatrix(-angle, palmCenter);\n const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox;\n const croppedInput = util.cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]);\n const handImage = tf.div(croppedInput, constants.tf255);\n tf.dispose(croppedInput);\n tf.dispose(rotatedImage);\n const [confidenceT, keypoints] = this.handPoseModel.execute(handImage) as Tensor[];\n lastTime = now();\n tf.dispose(handImage);\n const confidence = (await confidenceT.data())[0];\n tf.dispose(confidenceT);\n if (confidence >= config.hand.minConfidence / 4) {\n const keypointsReshaped = tf.reshape(keypoints, [-1, 3]);\n const rawCoords = await keypointsReshaped.array();\n tf.dispose(keypoints);\n tf.dispose(keypointsReshaped);\n const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);\n const nextBoundingBox = this.getBoxForHandLandmarks(coords);\n this.storedBoxes[i] = { ...nextBoundingBox, confidence };\n const result = {\n landmarks: coords,\n confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: confidence,\n box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint },\n };\n hands.push(result);\n } else {\n this.storedBoxes[i] = null;\n }\n tf.dispose(keypoints);\n } else {\n // const enlarged = box.enlargeBox(box.squarifyBox(box.shiftBox(currentBox, HAND_BOX_SHIFT_VECTOR)), handBoxEnlargeFactor);\n const enlarged = util.enlargeBox(util.squarifyBox(currentBox), handBoxEnlargeFactor);\n const result = {\n confidence: currentBox.confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: 0,\n box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint },\n landmarks: [],\n };\n hands.push(result);\n }\n }\n this.storedBoxes = this.storedBoxes.filter((a) => a !== null);\n this.detectedHands = hands.length;\n if (hands.length > config.hand.maxDetected) hands.length = config.hand.maxDetected;\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n *\n * Based on: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n */\n\nimport { log } from '../util/util';\nimport * as handdetector from './handposedetector';\nimport * as handpipeline from './handposepipeline';\nimport * as fingerPose from './fingerpose';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, Box, Point } from '../result';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nconst meshAnnotations = {\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n palm: [0],\n};\n\nlet handDetectorModel: GraphModel | null;\nlet handPoseModel: GraphModel | null;\nlet handPipeline: handpipeline.HandPipeline;\n\nexport async function predict(input: Tensor, config: Config): Promise {\n const predictions = await handPipeline.estimateHands(input, config);\n if (!predictions) return [];\n const hands: HandResult[] = [];\n for (let i = 0; i < predictions.length; i++) {\n const annotations = {};\n if (predictions[i].landmarks) {\n for (const key of Object.keys(meshAnnotations)) {\n annotations[key] = meshAnnotations[key].map((index) => predictions[i].landmarks[index]);\n }\n }\n const keypoints = predictions[i].landmarks as unknown as Point[];\n let box: Box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; // maximums so conditionals work\n let boxRaw: Box = [0, 0, 0, 0];\n if (keypoints && keypoints.length > 0) { // if we have landmarks, calculate box based on landmarks\n for (const pt of keypoints) {\n if (pt[0] < box[0]) box[0] = pt[0];\n if (pt[1] < box[1]) box[1] = pt[1];\n if (pt[0] > box[2]) box[2] = pt[0];\n if (pt[1] > box[3]) box[3] = pt[1];\n }\n box[2] -= box[0];\n box[3] -= box[1];\n boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)];\n } else { // otherwise use box from prediction\n box = predictions[i].box ? [\n Math.trunc(Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.max(0, predictions[i].box.topLeft[1])),\n Math.trunc(Math.min((input.shape[2] || 0), predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.min((input.shape[1] || 0), predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])),\n ] : [0, 0, 0, 0];\n boxRaw = [\n (predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n ];\n }\n const landmarks = fingerPose.analyze(keypoints);\n hands.push({\n id: i,\n score: Math.round(100 * predictions[i].confidence) / 100,\n boxScore: Math.round(100 * predictions[i].boxConfidence) / 100,\n fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100,\n label: 'hand',\n box,\n boxRaw,\n keypoints,\n annotations: annotations as HandResult['annotations'],\n landmarks: landmarks as HandResult['landmarks'],\n });\n }\n return hands;\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (env.initial) {\n handDetectorModel = null;\n handPoseModel = null;\n }\n if (!handDetectorModel || !handPoseModel) {\n [handDetectorModel, handPoseModel] = await Promise.all([\n config.hand.enabled ? loadModel(config.hand.detector?.modelPath) : null,\n config.hand.landmarks ? loadModel(config.hand.skeleton?.modelPath) : null,\n ]);\n } else {\n if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n }\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n return [handDetectorModel, handPoseModel];\n}\n", "/**\n * HandTrack model implementation\n *\n * Based on:\n * - Hand Detection & Skeleton: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n * - Hand Tracking: [**HandTracking**](https://github.com/victordibia/handtracking)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, HandType, Box, Point } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as fingerPose from './fingerpose';\nimport { fakeOps } from '../tfjs/backend';\nimport { constants } from '../tfjs/constants';\n\nconst models: [GraphModel | null, GraphModel | null] = [null, null];\nconst modelOutputNodes = ['StatefulPartitionedCall/Postprocessor/Slice', 'StatefulPartitionedCall/Postprocessor/ExpandDims_1'];\n\nconst inputSize = [[0, 0], [0, 0]];\n\nconst classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];\nconst faceIndex = 4;\n\nconst boxExpandFact = 1.6;\nconst maxDetectorResolution = 512;\nconst detectorExpandFact = 1.4;\n\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastTime = 0;\nlet outputSize: [number, number] = [0, 0];\n\ninterface HandDetectResult {\n id: number,\n score: number,\n box: Box,\n boxRaw: Box,\n label: HandType,\n}\n\nconst cache: {\n boxes: HandDetectResult[],\n hands: HandResult[];\n} = {\n boxes: [],\n hands: [],\n};\n\nconst fingerMap = {\n /*\n thumb: [0, 1, 2, 3, 4],\n index: [0, 5, 6, 7, 8],\n middle: [0, 9, 10, 11, 12],\n ring: [0, 13, 14, 15, 16],\n pinky: [0, 17, 18, 19, 20],\n palm: [0],\n */\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n base: [0],\n palm: [0, 17, 13, 9, 5, 1, 0],\n};\n\nexport async function loadDetect(config: Config): Promise {\n // HandTrack Model: Original: TFJS Port: \n if (env.initial) models[0] = null;\n if (!models[0]) {\n // handtrack model has some kernel ops defined in model but those are never referenced and non-existent in tfjs\n // ideally need to prune the model itself\n fakeOps(['tensorlistreserve', 'enter', 'tensorlistfromtensor', 'merge', 'loopcond', 'switch', 'exit', 'tensorliststack', 'nextiteration', 'tensorlistsetitem', 'tensorlistgetitem', 'reciprocal', 'shape', 'split', 'where'], config);\n models[0] = await loadModel(config.hand.detector?.modelPath);\n const inputs = models[0]['executor'] ? Object.values(models[0].modelSignature['inputs']) : undefined;\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[0]['modelUrl']);\n return models[0];\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) models[1] = null;\n if (!models[1]) {\n models[1] = await loadModel(config.hand.skeleton?.modelPath);\n const inputs = models[1]['executor'] ? Object.values(models[1].modelSignature['inputs']) : undefined;\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[1]['modelUrl']);\n return models[1];\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (!models[0]) await loadDetect(config);\n if (!models[1]) await loadSkeleton(config);\n return models;\n}\n\nasync function detectHands(input: Tensor4D, config: Config): Promise {\n const hands: HandDetectResult[] = [];\n if (!input || !models[0]) return hands;\n const t: Record = {};\n const ratio = (input.shape[2] || 1) / (input.shape[1] || 1);\n const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); // use dynamic input size but cap at 512\n const width = Math.round(height * ratio / 8) * 8;\n t.resize = tf.image.resizeBilinear(input, [height, width]); // todo: resize with padding\n t.cast = tf.cast(t.resize, 'int32');\n [t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[];\n t.boxes = tf.squeeze(t.rawBoxes, [0, 2]);\n t.scores = tf.squeeze(t.rawScores, [0]);\n const classScores: Tensor[] = tf.unstack(t.scores, 1); // unstack scores based on classes\n tf.dispose(classScores[faceIndex]);\n classScores.splice(faceIndex, 1); // remove faces\n t.filtered = tf.stack(classScores, 1); // restack\n tf.dispose(classScores);\n // t.filtered = t.scores;\n t.max = tf.max(t.filtered, 1); // max overall score\n t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score\n let id = 0;\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.max as Tensor1D, (config.hand.maxDetected || 0) + 1, config.hand.iouThreshold || 0, config.hand.minConfidence || 1);\n const nms = await t.nms.data();\n const scores = await t.max.data();\n const classNum = await t.argmax.data();\n for (const nmsIndex of Array.from(nms)) { // generates results for each class\n const boxSlice = tf.slice(t.boxes, nmsIndex, 1);\n const boxYX = await boxSlice.data();\n tf.dispose(boxSlice);\n const boxData: Box = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; // yx box reshaped to standard box\n const boxRaw: Box = box.scale(boxData, detectorExpandFact);\n const boxFull: Box = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];\n const score = scores[nmsIndex];\n const label = classes[classNum[nmsIndex]] as HandType;\n const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, label };\n hands.push(hand);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n hands.sort((a, b) => b.score - a.score);\n if (hands.length > (config.hand.maxDetected || 1)) hands.length = (config.hand.maxDetected || 1);\n return hands;\n}\n\nasync function detectFingers(input: Tensor4D, h: HandDetectResult, config: Config): Promise {\n const hand: HandResult = { // initial values inherited from hand detect\n id: h.id,\n score: Math.round(100 * h.score) / 100,\n boxScore: Math.round(100 * h.score) / 100,\n fingerScore: 0,\n box: h.box,\n boxRaw: h.boxRaw,\n label: h.label,\n keypoints: [],\n landmarks: {} as HandResult['landmarks'],\n annotations: {} as HandResult['annotations'],\n };\n if (input && models[1] && config.hand.landmarks && h.score > (config.hand.minConfidence || 0)) {\n const t: Record = {};\n const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]] as Box;\n t.crop = tf.image.cropAndResize(input, [boxCrop], [0], [inputSize[1][0], inputSize[1][1]], 'bilinear');\n t.div = tf.div(t.crop, constants.tf255);\n [t.score, t.keypoints] = models[1].execute(t.div, ['Identity_1', 'Identity']) as Tensor[];\n const rawScore = (await t.score.data())[0];\n const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; // reverse sigmoid value\n if (score >= (config.hand.minConfidence || 0)) {\n hand.fingerScore = score;\n t.reshaped = tf.reshape(t.keypoints, [-1, 3]);\n const coordsData: Point[] = await t.reshaped.array() as Point[];\n const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]);\n const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]);\n hand.keypoints = (coordsNorm).map((kpt) => [outputSize[0] * (kpt[0] + h.boxRaw[0]), outputSize[1] * (kpt[1] + h.boxRaw[1]), (kpt[2] || 0)]);\n hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger gestures\n for (const key of Object.keys(fingerMap)) { // map keypoints to per-finger annotations\n hand.annotations[key] = fingerMap[key].map((index: number) => (hand.landmarks && hand.keypoints[index] ? hand.keypoints[index] : null));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n return hand;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!models[0]?.['executor'] || !models[1]?.['executor'] || !models[0].inputs[0].shape || !models[1].inputs[0].shape) return []; // something is wrong with the model\n outputSize = [input.shape[2] || 0, input.shape[1] || 0];\n skipped++; // increment skip frames\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.hands; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const skipTimeExtended = 3 * (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrameExtended = skipped < 3 * (config.hand.skipFrames || 0);\n if (config.skipAllowed && cache.hands.length === config.hand.maxDetected) { // we have all detected hands so we're definitely skipping\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else if (config.skipAllowed && skipTimeExtended && skipFrameExtended && cache.hands.length > 0) { // we have some cached results: maybe not enough but anyhow continue for bit longer\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else { // finally rerun detector\n cache.boxes = await detectHands(input, config);\n lastTime = now();\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n skipped = 0;\n }\n\n const oldCache = [...cache.boxes];\n cache.boxes.length = 0; // reset cache\n if (config.cacheSensitivity > 0) {\n for (let i = 0; i < cache.hands.length; i++) {\n const boxKpt = box.square(cache.hands[i].keypoints, outputSize);\n if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache.hands[i].fingerScore && cache.hands[i].fingerScore > (config.hand.minConfidence || 0)) {\n const boxScale = box.scale(boxKpt.box, boxExpandFact);\n const boxScaleRaw = box.scale(boxKpt.boxRaw, boxExpandFact);\n // const boxCrop = box.crop(boxScaleRaw);\n cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw });\n }\n }\n }\n for (let i = 0; i < cache.hands.length; i++) { // replace detected boxes with calculated boxes in final output\n const bbox = box.calc(cache.hands[i].keypoints, outputSize);\n cache.hands[i].box = bbox.box;\n cache.hands[i].boxRaw = bbox.boxRaw;\n }\n resolve(cache.hands);\n });\n}\n", "/**\n * Type definitions for Human result object\n */\n\nimport type { Tensor } from './tfjs/types';\nimport type { FaceGesture, BodyGesture, HandGesture, IrisGesture } from './gesture/gesture';\nimport type { AnyCanvas } from './exports';\n\n/** generic box as [x, y, width, height] */\nexport type Box = [number, number, number, number];\n/** generic point as [x, y, z?] */\nexport type Point = [number, number, number?];\n\nexport type Emotion = 'angry' | 'disgust' | 'fear' | 'happy' | 'sad' | 'surprise' | 'neutral';\nexport type Gender = 'male' | 'female' | 'unknown';\nexport type Race = 'white' | 'black' | 'asian' | 'indian' | 'other';\nexport type FaceLandmark = 'leftEye' | 'rightEye' | 'nose' | 'mouth' | 'leftEar' | 'rightEar' | 'symmetryLine' | 'silhouette'\n | 'lipsUpperOuter' | 'lipsLowerOuter' | 'lipsUpperInner' | 'lipsLowerInner'\n | 'rightEyeUpper0' | 'rightEyeLower0' | 'rightEyeUpper1' | 'rightEyeLower1' | 'rightEyeUpper2' | 'rightEyeLower2' | 'rightEyeLower3' | 'rightEyebrowUpper' | 'rightEyebrowLower' | 'rightEyeIris'\n | 'leftEyeUpper0' | 'leftEyeLower0' | 'leftEyeUpper1' | 'leftEyeLower1' | 'leftEyeUpper2' | 'leftEyeLower2' | 'leftEyeLower3' | 'leftEyebrowUpper' | 'leftEyebrowLower' | 'leftEyeIris'\n | 'midwayBetweenEyes' | 'noseTip' | 'noseBottom' | 'noseRightCorner' | 'noseLeftCorner' | 'rightCheek' | 'leftCheek';\n\n/** Face results\n * - Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models\n * - Some values may be null if specific model is not enabled\n */\nexport interface FaceResult {\n /** face id */\n id: number\n /** overall face score */\n score: number,\n /** detection score */\n boxScore: number,\n /** mesh score */\n faceScore: number,\n /** detected face box */\n box: Box,\n /** detected face box normalized to 0..1 */\n boxRaw: Box,\n /** detected face mesh */\n mesh: Point[]\n /** detected face mesh normalized to 0..1 */\n meshRaw: Point[],\n /** face contours as array of 2d points normalized to 0..1 */\n // contoursRaw: Array<[number, number]>,\n /** face contours as array of 2d points */\n // contours: Array<[number, number]>,\n /** mesh keypoints combined into annotated results */\n annotations: Record,\n /** detected age */\n age?: number,\n /** detected gender */\n gender?: Gender,\n /** gender detection score */\n genderScore?: number,\n /** detected emotions */\n emotion?: { score: number, emotion: Emotion }[],\n /** detected race */\n race?: { score: number, race: Race }[],\n /** face descriptor */\n embedding?: number[],\n /** face distance from camera */\n distance?: number,\n /** face anti-spoofing result confidence */\n real?: number,\n /** face liveness result confidence */\n live?: number,\n /** face rotation details */\n rotation?: {\n angle: { roll: number, yaw: number, pitch: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n } | null,\n /** detected face as tensor that can be used in further pipelines */\n tensor?: Tensor,\n}\n\nexport type BodyLandmarkPoseNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkMoveNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkEfficientNet = 'head' | 'neck' | 'rightShoulder' | 'rightElbow' | 'rightWrist' | 'chest' | 'leftShoulder' | 'leftElbow' | 'leftWrist' | 'bodyCenter' | 'rightHip' | 'rightKnee' | 'rightAnkle' | 'leftHip' | 'leftKnee' | 'leftAnkle';\nexport type BodyLandmarkBlazePose = 'nose' | 'leftEyeInside' | 'leftEye' | 'leftEyeOutside' | 'rightEyeInside' | 'rightEye' | 'rightEyeOutside' | 'leftEar' | 'rightEar' | 'leftMouth' | 'rightMouth' | 'leftShoulder' | 'rightShoulder'\n | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftPinky' | 'rightPinky' | 'leftIndex' | 'rightIndex' | 'leftThumb' | 'rightThumb' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle'\n | 'leftHeel' | 'rightHeel' | 'leftFoot' | 'rightFoot' | 'bodyCenter' | 'bodyTop' | 'leftPalm' | 'leftHand' | 'rightPalm' | 'rightHand';\nexport type BodyLandmark = BodyLandmarkPoseNet | BodyLandmarkMoveNet | BodyLandmarkEfficientNet | BodyLandmarkBlazePose;\nexport type BodyAnnotationBlazePose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'leftEye' | 'rightEye' | 'mouth';\nexport type BodyAnnotationEfficientPose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'head';\nexport type BodyAnnotation = BodyAnnotationBlazePose | BodyAnnotationEfficientPose;\n\n/** Body Result keypoints */\nexport interface BodyKeypoint {\n /** body part name */\n part: BodyLandmark,\n /** body part position */\n position: Point,\n /** body part position normalized to 0..1 */\n positionRaw: Point,\n /** body part position relative to body center in meters */\n distance?: Point,\n /** body part detection score */\n score: number,\n}\n\n/** Body results */\nexport interface BodyResult {\n /** body id */\n id: number,\n /** body detection score */\n score: number,\n /** detected body box */\n box: Box,\n /** detected body box normalized to 0..1 */\n boxRaw: Box,\n /** detected body keypoints */\n keypoints: BodyKeypoint[]\n /** detected body keypoints combined into annotated parts */\n annotations: Record,\n}\n\nexport type HandType = 'hand' | 'fist' | 'pinch' | 'point' | 'face' | 'tip' | 'pinchtip';\nexport type Finger = 'index' | 'middle' | 'pinky' | 'ring' | 'thumb' | 'palm';\nexport type FingerCurl = 'none' | 'half' | 'full';\nexport type FingerDirection = 'verticalUp' | 'verticalDown' | 'horizontalLeft' | 'horizontalRight' | 'diagonalUpRight' | 'diagonalUpLeft' | 'diagonalDownRight' | 'diagonalDownLeft';\n\n/** Hand results */\nexport interface HandResult {\n /** hand id */\n id: number,\n /** hand overal score */\n score: number,\n /** hand detection score */\n boxScore: number,\n /** hand skelton score */\n fingerScore: number,\n /** detected hand box */\n box: Box,\n /** detected hand box normalized to 0..1 */\n boxRaw: Box,\n /** detected hand keypoints */\n keypoints: Point[],\n /** detected hand class */\n label: HandType,\n /** detected hand keypoints combined into annotated parts */\n annotations: Record,\n /** detected hand parts annotated with part gestures */\n landmarks: Record,\n}\n\nexport type ObjectType = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter'\n | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee'\n | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork'\n | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant'\n | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book'\n | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush';\n\n/** Object results */\nexport interface ObjectResult {\n /** object id */\n id: number,\n /** object detection score */\n score: number,\n /** detected object class id */\n class: number,\n /** detected object class name */\n label: ObjectType,\n /** detected object box */\n box: Box,\n /** detected object box normalized to 0..1 */\n boxRaw: Box,\n}\n\n/** Gesture combined results\n * Each result has:\n * - part: part name and number where gesture was detected: `face`, `iris`, `body`, `hand`\n * - gesture: gesture detected\n */\nexport type GestureResult =\n { 'face': number, gesture: FaceGesture }\n | { 'iris': number, gesture: IrisGesture }\n | { 'body': number, gesture: BodyGesture }\n | { 'hand': number, gesture: HandGesture }\n\n/** Person getter\n* - Triggers combining all individual results into a virtual person object\n*/\nexport interface PersonResult {\n /** person id */\n id: number,\n /** face result that belongs to this person */\n face: FaceResult,\n /** body result that belongs to this person */\n body: BodyResult | null,\n /** left and right hand results that belong to this person */\n hands: { left: HandResult | null, right: HandResult | null },\n /** detected gestures specific to this person */\n gestures: GestureResult[],\n /** box that defines the person */\n box: Box,\n /** box that defines the person normalized to 0..1 */\n boxRaw?: Box,\n}\n\n/**\n * Result interface definition for **Human** library\n *\n * Contains all possible detection results\n */\nexport interface Result {\n /** {@link FaceResult}: detection & analysis results */\n face: FaceResult[],\n /** {@link BodyResult}: detection & analysis results */\n body: BodyResult[],\n /** {@link HandResult}: detection & analysis results */\n hand: HandResult[],\n /** {@link GestureResult}: detection & analysis results */\n gesture: GestureResult[],\n /** {@link ObjectResult}: detection & analysis results */\n object: ObjectResult[]\n /** global performance object with timing values for each operation */\n performance: Record,\n /** optional processed canvas that can be used to draw input on screen */\n canvas?: AnyCanvas | null,\n /** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */\n readonly timestamp: number,\n /** getter property that returns unified persons object */\n persons: PersonResult[],\n /** Last known error message */\n error: string | null;\n /** Resolution width */\n width: number,\n /** Resolution height */\n height: number,\n}\n\nexport const empty = (error: string | null = null): Result => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error });\n", "export const kpt: string[] = [ // used to create part labels\n 'nose',\n 'leftEye',\n 'rightEye',\n 'leftEar',\n 'rightEar',\n 'leftShoulder',\n 'rightShoulder',\n 'leftElbow',\n 'rightElbow',\n 'leftWrist',\n 'rightWrist',\n 'leftHip',\n 'rightHip',\n 'leftKnee',\n 'rightKnee',\n 'leftAnkle',\n 'rightAnkle',\n];\n\nexport const horizontal: string[][] = [ // used to fix left vs right\n ['leftEye', 'rightEye'],\n ['leftEar', 'rightEar'],\n ['leftShoulder', 'rightShoulder'],\n ['leftElbow', 'rightElbow'],\n ['leftWrist', 'rightWrist'],\n ['leftHip', 'rightHip'],\n ['leftKnee', 'rightKnee'],\n ['leftAnkle', 'rightAnkle'],\n];\n\nexport const vertical: string[][] = [ // used to remove unlikely keypoint positions\n ['leftKnee', 'leftShoulder'],\n ['rightKnee', 'rightShoulder'],\n ['leftAnkle', 'leftKnee'],\n ['rightAnkle', 'rightKnee'],\n];\n\nexport const relative: string[][][] = [ // used to match relative body parts\n [['leftHip', 'rightHip'], ['leftShoulder', 'rightShoulder']],\n [['leftElbow', 'rightElbow'], ['leftShoulder', 'rightShoulder']],\n];\n\nexport const connected: Record = { // used to create body outline in annotations\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * Results interpolation for smoothening of video detection results inbetween detected frames\n */\n\nimport { Result, FaceResult, BodyResult, HandResult, ObjectResult, PersonResult, Box, Point, BodyLandmark, BodyAnnotation, empty } from '../result';\nimport type { Config } from '../config';\n\nimport * as moveNetCoords from '../body/movenetcoords';\nimport * as blazePoseCoords from '../body/blazeposecoords';\nimport * as efficientPoseCoords from '../body/efficientposecoords';\nimport { now } from './util';\nimport { env } from './env';\n\nconst bufferedResult: Result = empty();\nlet interpolateTime = 0;\n\nexport function calc(newResult: Result, config: Config): Result {\n const t0 = now();\n if (!newResult) return empty();\n // each record is only updated using deep clone when number of detected record changes, otherwise it will converge by itself\n // otherwise bufferedResult is a shallow clone of result plus updated local calculated values\n // thus mixing by-reference and by-value assignments to minimize memory operations\n\n const elapsed = Date.now() - newResult.timestamp;\n\n /* curve fitted: buffer = 8 - ln(delay)\n interpolation formula: current = ((buffer - 1) * previous + live) / buffer\n - at 50ms delay buffer = ~4.1 => 28% towards live data\n - at 250ms delay buffer = ~2.5 => 40% towards live data\n - at 500ms delay buffer = ~1.8 => 55% towards live data\n - at 750ms delay buffer = ~1.4 => 71% towards live data\n - at 1sec delay buffer = 1 which means live data is used\n */\n const bufferedFactor = elapsed < 1000 ? 8 - Math.log(elapsed + 1) : 1;\n\n if (newResult.canvas) bufferedResult.canvas = newResult.canvas;\n if (newResult.error) bufferedResult.error = newResult.error;\n\n // interpolate body results\n if (!bufferedResult.body || (newResult.body.length !== bufferedResult.body.length)) {\n bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)) as BodyResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.body.length; i++) {\n const box = newResult.body[i].box // update box\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor) as Box;\n const boxRaw = newResult.body[i].boxRaw // update boxRaw\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor) as Box;\n const keypoints = (newResult.body[i].keypoints // update keypoints\n .map((newKpt, j) => ({\n score: newKpt.score,\n part: newKpt.part,\n position: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2],\n ],\n positionRaw: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2],\n ],\n distance: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[0] || 0) + (newKpt.distance?.[0] || 0)) / bufferedFactor : newKpt.distance?.[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[1] || 0) + (newKpt.distance?.[1] || 0)) / bufferedFactor : newKpt.distance?.[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[2] || 0) + (newKpt.distance?.[2] || 0)) / bufferedFactor : newKpt.distance?.[2],\n ],\n }))) as { score: number, part: BodyLandmark, position: [number, number, number?], positionRaw: [number, number, number?] }[];\n\n const annotations: Record = {} as Record; // recreate annotations\n let coords = { connected: {} };\n if (config.body.modelPath?.includes('efficientpose')) coords = efficientPoseCoords;\n else if (config.body.modelPath?.includes('blazepose')) coords = blazePoseCoords;\n else if (config.body.modelPath?.includes('movenet')) coords = moveNetCoords;\n for (const [name, indexes] of Object.entries(coords.connected as Record)) {\n const pt: Point[][] = [];\n for (let j = 0; j < indexes.length - 1; j++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[j]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]);\n // if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations }; // shallow clone plus updated values\n }\n }\n\n // interpolate hand results\n if (!bufferedResult.hand || (newResult.hand.length !== bufferedResult.hand.length)) {\n bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); // deep clone once\n } else {\n for (let i = 0; i < newResult.hand.length; i++) {\n const box = (newResult.hand[i].box// update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.hand[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; // reset keypoints as previous frame did not have them\n const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints // update landmarks\n .map((landmark, j) => landmark\n .map((coord, k) => (((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) as Point)\n : [];\n let annotations = {};\n if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) {\n bufferedResult.hand[i].annotations = newResult.hand[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.hand[i].annotations;\n } else if (newResult.hand[i].annotations) {\n for (const key of Object.keys(newResult.hand[i].annotations)) { // update annotations\n annotations[key] = newResult.hand[i]?.annotations?.[key]?.[0]\n ? newResult.hand[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations as HandResult['annotations'] }; // shallow clone plus updated values\n }\n }\n\n // interpolate face results\n if (!bufferedResult.face || (newResult.face.length !== bufferedResult.face.length)) {\n bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)) as FaceResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.face.length; i++) {\n const box = (newResult.face[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.face[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (newResult.face[i].rotation) {\n const rotation: {\n matrix: [number, number, number, number, number, number, number, number, number],\n angle: { roll: number, yaw: number, pitch: number },\n gaze: { bearing: number, strength: number }\n } = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } };\n rotation.matrix = newResult.face[i].rotation?.matrix as [number, number, number, number, number, number, number, number, number];\n rotation.angle = {\n roll: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.roll || 0) + (newResult.face[i].rotation?.angle?.roll || 0)) / bufferedFactor,\n yaw: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.yaw || 0) + (newResult.face[i].rotation?.angle?.yaw || 0)) / bufferedFactor,\n pitch: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.pitch || 0) + (newResult.face[i].rotation?.angle?.pitch || 0)) / bufferedFactor,\n };\n rotation.gaze = {\n // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive\n bearing: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.bearing || 0) + (newResult.face[i].rotation?.gaze.bearing || 0)) / bufferedFactor,\n strength: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.strength || 0) + (newResult.face[i].rotation?.gaze.strength || 0)) / bufferedFactor,\n };\n bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n }\n\n // interpolate object detection results\n if (!bufferedResult.object || (newResult.object.length !== bufferedResult.object.length)) {\n bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)) as ObjectResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.object.length; i++) {\n const box = (newResult.object[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.object[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n\n // interpolate person results\n if (newResult.persons) {\n const newPersons = newResult.persons; // trigger getter function\n if (!bufferedResult.persons || (newPersons.length !== bufferedResult.persons.length)) {\n bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)) as PersonResult[];\n } else {\n for (let i = 0; i < newPersons.length; i++) { // update person box, we don't update the rest as it's updated as reference anyhow\n bufferedResult.persons[i].box = (newPersons[i].box\n .map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor)) as Box;\n }\n }\n }\n\n // copy latest gestures without interpolation\n if (newResult.gesture) bufferedResult.gesture = newResult.gesture;\n\n // copy resolution info\n bufferedResult.width = newResult.width;\n bufferedResult.height = newResult.height;\n\n // append interpolation performance data\n const t1 = now();\n interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0);\n if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime };\n\n return bufferedResult;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Meet**](https://drive.google.com/file/d/1lnP1bRi9CSqQQXUHa13159vLELYDgDu0/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]);\n // t.softmax = tf.softmax(t.squeeze); // model meet has two channels for fg and bg\n [t.bgRaw, t.fgRaw] = tf.unstack(t.squeeze, 2);\n // t.bg = tf.softmax(t.bgRaw); // we can ignore bg channel\n t.fg = tf.softmax(t.fgRaw);\n t.mul = tf.mul(t.fg, constants.tf255);\n t.expand = tf.expandDims(t.mul, 2);\n t.output = tf.image.resizeBilinear(t.expand as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.output], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.output, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/** Face descriptor type as number array */\nexport type Descriptor = number[]\nexport type MatchOptions = { order?: number, threshold?: number, multiplier?: number, min?: number, max?: number } | undefined;\n\n/** Calculates distance between two descriptors\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n */\nexport function distance(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25 }) {\n // general minkowski distance, euclidean distance is limited case where order is 2\n if (!descriptor1 || !descriptor1) return Number.MAX_SAFE_INTEGER;\n let sum = 0;\n for (let i = 0; i < descriptor1.length; i++) {\n const diff = (!options.order || options.order === 2) ? (descriptor1[i] - descriptor2[i]) : (Math.abs(descriptor1[i] - descriptor2[i]));\n sum += (!options.order || options.order === 2) ? (diff * diff) : (diff ** options.order);\n }\n return (options.multiplier || 20) * sum;\n}\n\n// invert distance to similarity, normalize to given range and clamp\nconst normalizeDistance = (dist, order, min, max) => {\n if (dist === 0) return 1; // short circuit for identical inputs\n const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); // take root of distance\n const norm = (1 - (root / 100) - min) / (max - min); // normalize to range\n const clamp = Math.max(Math.min(norm, 1), 0); // clamp to 0..1\n return clamp;\n};\n\n/** Calculates normalized similarity between two face descriptors based on their `distance`\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n * - min - normalize similarity result to a given range\n * - max - normalzie similarity resutl to a given range\n * default is 0.2...0.8\n * Returns similarity between two face descriptors normalized to 0..1 range where 0 is no similarity and 1 is perfect similarity\n */\nexport function similarity(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) {\n const dist = distance(descriptor1, descriptor2, options);\n return normalizeDistance(dist, options.order || 2, options.min || 0, options.max || 1);\n}\n\n/** Matches given descriptor to a closest entry in array of descriptors\n * @param descriptor - face descriptor\n * @param descriptors - array of face descriptors to commpare given descriptor to\n * @param options - see `similarity` method for options description\n * Returns\n * - `index` index array index where best match was found or -1 if no matches\n * - `distance` calculated `distance` of given descriptor to the best match\n * - `similarity` calculated normalized `similarity` of given descriptor to the best match\n*/\nexport function find(descriptor: Descriptor, descriptors: Descriptor[], options: MatchOptions = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) {\n if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { // validate input\n return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };\n }\n let lowestDistance = Number.MAX_SAFE_INTEGER;\n let index = -1;\n for (let i = 0; i < descriptors.length; i++) {\n const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options) : Number.MAX_SAFE_INTEGER;\n if (res < lowestDistance) {\n lowestDistance = res;\n index = i;\n }\n if (lowestDistance < (options.threshold || 0)) break;\n }\n const normalizedSimilarity = normalizeDistance(lowestDistance, options.order || 2, options.min || 0, options.max || 1);\n return { index, distance: lowestDistance, similarity: normalizedSimilarity };\n}\n", "/**\n * Loader and Validator for all models used by Human\n */\n\nimport { env } from './util/env';\nimport { log } from './util/util';\nimport * as antispoof from './face/antispoof';\nimport * as blazeface from './face/blazeface';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as emotion from './gear/emotion';\nimport * as facemesh from './face/facemesh';\nimport * as faceres from './face/faceres';\nimport * as gear from './gear/gear';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as insightface from './face/insightface';\nimport * as iris from './face/iris';\nimport * as liveness from './face/liveness';\nimport * as meet from './segmentation/meet';\nimport * as mobilefacenet from './face/mobilefacenet';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as ssrnetAge from './gear/ssrnet-age';\nimport * as ssrnetGender from './gear/ssrnet-gender';\nimport { modelStats, ModelInfo } from './tfjs/load';\nimport type { GraphModel } from './tfjs/types';\nimport type { Human } from './human';\n\nexport interface KernelOps { name: string, url: string, missing: string[], ops: string[] }\n\nexport function validateModel(instance: Human | null, model: GraphModel | null, name: string): KernelOps | null {\n if (!model) return null;\n if (!instance?.config?.validateModels) return null;\n const simpleOps = ['const', 'placeholder', 'noop', 'pad', 'squeeze', 'add', 'sub', 'mul', 'div'];\n const ignoreOps = ['biasadd', 'fusedbatchnormv3', 'matmul', 'switch', 'shape', 'merge', 'split', 'broadcastto'];\n const ops: string[] = [];\n const missing: string[] = [];\n interface Op { name: string, category: string, op: string }\n const url = model['modelUrl'] as string;\n const executor = model['executor'];\n if (executor?.graph?.nodes) {\n for (const kernel of Object.values(executor.graph.nodes)) {\n const op = (kernel as Op).op.toLowerCase();\n if (!ops.includes(op)) ops.push(op);\n }\n } else {\n if (!executor && instance.config.debug) {\n log('model not loaded', name);\n }\n }\n for (const op of ops) {\n if (!simpleOps.includes(op) // exclude simple ops\n && !ignoreOps.includes(op) // exclude specific ops\n && !instance.env.kernels.includes(op) // check actual kernel ops\n && !instance.env.kernels.includes(op.replace('_', '')) // check variation without _\n && !instance.env.kernels.includes(op.replace('native', '')) // check standard variation\n && !instance.env.kernels.includes(op.replace('v2', ''))) { // check non-versioned variation\n missing.push(op);\n }\n }\n if (instance.config.debug && missing.length > 0) log('model validation failed:', name, missing);\n return missing.length > 0 ? { name, missing, ops, url } : null;\n}\n\n/** structure that holds global stats for currently loaded models */\nexport interface ModelStats {\n numLoadedModels: number,\n numDefinedModels: number,\n percentageLoaded: number,\n totalSizeFromManifest: number,\n totalSizeWeights: number,\n totalSizeLoading: number,\n modelStats: ModelInfo[],\n}\n\n/** Models class used by Human\n * - models: record of all GraphModels\n * - list: returns list of configured models with their stats\n * - loaded: returns array of loaded models\n * - reset: unloads all models\n * - validate: checks loaded models for valid kernel ops vs current backend\n * - stats: live detailed model stats that can be checked during model load phase\n */\nexport class Models {\n instance: Human;\n models: Record;\n\n constructor(currentInstance: Human) {\n this.models = {};\n this.instance = currentInstance;\n }\n\n stats(): ModelStats {\n let totalSizeFromManifest = 0;\n let totalSizeWeights = 0;\n let totalSizeLoading = 0;\n for (const m of Object.values(modelStats)) {\n totalSizeFromManifest += m.sizeFromManifest;\n totalSizeWeights += m.sizeLoadedWeights;\n totalSizeLoading += m.sizeDesired;\n }\n const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0;\n return {\n numLoadedModels: Object.values(modelStats).length,\n numDefinedModels: Object.keys(this.models).length,\n percentageLoaded,\n totalSizeFromManifest,\n totalSizeWeights,\n totalSizeLoading,\n modelStats: Object.values(modelStats),\n };\n }\n\n reset(): void {\n for (const model of Object.keys(this.models)) this.models[model] = null;\n }\n\n async load(): Promise {\n if (env.initial) this.reset();\n const m: Record> = {};\n // face main models\n m.blazeface = (this.instance.config.face.enabled && !this.models.blazeface) ? blazeface.load(this.instance.config) : null;\n m.antispoof = (this.instance.config.face.enabled && this.instance.config.face.antispoof?.enabled && !this.models.antispoof) ? antispoof.load(this.instance.config) : null;\n m.liveness = (this.instance.config.face.enabled && this.instance.config.face.liveness?.enabled && !this.models.liveness) ? liveness.load(this.instance.config) : null;\n m.faceres = (this.instance.config.face.enabled && this.instance.config.face.description?.enabled && !this.models.faceres) ? faceres.load(this.instance.config) : null;\n m.emotion = (this.instance.config.face.enabled && this.instance.config.face.emotion?.enabled && !this.models.emotion) ? emotion.load(this.instance.config) : null;\n m.iris = (this.instance.config.face.enabled && this.instance.config.face.iris?.enabled && !this.instance.config.face.attention?.enabled && !this.models.iris) ? iris.load(this.instance.config) : null;\n m.facemesh = (this.instance.config.face.enabled && this.instance.config.face.mesh?.enabled && (!this.models.facemesh)) ? facemesh.load(this.instance.config) : null;\n // face alternatives\n m.gear = (this.instance.config.face.enabled && this.instance.config.face['gear']?.enabled && !this.models.gear) ? gear.load(this.instance.config) : null;\n m.ssrnetage = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetage) ? ssrnetAge.load(this.instance.config) : null;\n m.ssrnetgender = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetgender) ? ssrnetGender.load(this.instance.config) : null;\n m.mobilefacenet = (this.instance.config.face.enabled && this.instance.config.face['mobilefacenet']?.enabled && !this.models.mobilefacenet) ? mobilefacenet.load(this.instance.config) : null;\n m.insightface = (this.instance.config.face.enabled && this.instance.config.face['insightface']?.enabled && !this.models.insightface) ? insightface.load(this.instance.config) : null;\n // body alterinatives\n m.blazepose = (this.instance.config.body.enabled && !this.models.blazepose && this.instance.config.body.modelPath?.includes('blazepose')) ? blazepose.loadPose(this.instance.config) : null;\n m.blazeposedetect = (this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body['detector'] && this.instance.config.body['detector'].modelPath) ? blazepose.loadDetect(this.instance.config) : null;\n m.efficientpose = (this.instance.config.body.enabled && !this.models.efficientpose && this.instance.config.body.modelPath?.includes('efficientpose')) ? efficientpose.load(this.instance.config) : null;\n m.movenet = (this.instance.config.body.enabled && !this.models.movenet && this.instance.config.body.modelPath?.includes('movenet')) ? movenet.load(this.instance.config) : null;\n m.posenet = (this.instance.config.body.enabled && !this.models.posenet && this.instance.config.body.modelPath?.includes('posenet')) ? posenet.load(this.instance.config) : null;\n // hand alternatives\n m.handtrack = (this.instance.config.hand.enabled && !this.models.handtrack && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadDetect(this.instance.config) : null;\n m.handskeleton = (this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadSkeleton(this.instance.config) : null;\n if (this.instance.config.hand.detector?.modelPath?.includes('handdetect')) [m.handpose, m.handskeleton] = (!this.models.handpose) ? await handpose.load(this.instance.config) : [null, null];\n // object detection alternatives\n m.centernet = (this.instance.config.object.enabled && !this.models.centernet && this.instance.config.object.modelPath?.includes('centernet')) ? centernet.load(this.instance.config) : null;\n m.nanodet = (this.instance.config.object.enabled && !this.models.nanodet && this.instance.config.object.modelPath?.includes('nanodet')) ? nanodet.load(this.instance.config) : null;\n // segmentation alternatives\n m.selfie = (this.instance.config.segmentation.enabled && !this.models.selfie && this.instance.config.segmentation.modelPath?.includes('selfie')) ? selfie.load(this.instance.config) : null;\n m.meet = (this.instance.config.segmentation.enabled && !this.models.meet && this.instance.config.segmentation.modelPath?.includes('meet')) ? meet.load(this.instance.config) : null;\n m.rvm = (this.instance.config.segmentation.enabled && !this.models.rvm && this.instance.config.segmentation.modelPath?.includes('rvm')) ? rvm.load(this.instance.config) : null;\n\n // models are loaded in parallel asynchronously so lets wait until they are actually loaded\n await Promise.all([...Object.values(m)]);\n for (const model of Object.keys(m)) this.models[model] = m[model] as GraphModel || this.models[model] || null; // only update actually loaded models\n }\n\n list() {\n const models = Object.keys(this.models).map((model) => ({ name: model, loaded: (this.models[model] !== null), size: 0, url: this.models[model] ? this.models[model]?.['modelUrl'] : null }));\n for (const m of models) {\n const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name));\n if (!stats) continue;\n m.size = modelStats[stats].sizeLoadedWeights;\n m.url = modelStats[stats].url;\n }\n return models;\n }\n\n loaded() {\n const list = this.list();\n const loaded = list.filter((model) => model.loaded).map((model) => model.name);\n return loaded;\n }\n\n validate(): { name: string, missing: string[] }[] {\n const missing: KernelOps[] = [];\n for (const defined of Object.keys(this.models)) {\n const model: GraphModel | null = this.models[defined as keyof Models];\n if (!model) continue;\n const res = validateModel(this.instance, model, defined);\n if (res) missing.push(res);\n }\n return missing;\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { BodyKeypoint, BodyResult } from '../result';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport type { Tensor, Tensor3D } from '../tfjs/types';\n\nconst maxJitter = 0.005; // default allowed jitter is within 0.5%\n\nconst cache: {\n keypoints: BodyKeypoint[],\n padding: [number, number][];\n} = {\n keypoints: [],\n padding: [[0, 0], [0, 0], [0, 0], [0, 0]],\n};\n\nexport function bodyParts(body: BodyResult) { // model sometimes mixes up left vs right keypoints so we fix them\n for (const pair of coords.horizontal) { // fix body parts left vs right\n const left = body.keypoints.findIndex((kp) => kp.part === pair[0]);\n const right = body.keypoints.findIndex((kp) => kp.part === pair[1]);\n if (body.keypoints[left] && body.keypoints[right]) {\n if (body.keypoints[left].position[0] < body.keypoints[right].position[0]) {\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n }\n for (const pair of coords.vertical) { // remove body parts with improbable vertical position\n const lower = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const higher = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n if (body.keypoints[lower] && body.keypoints[higher]) {\n if (body.keypoints[lower].position[1] < body.keypoints[higher].position[1]) {\n body.keypoints.splice(lower, 1);\n }\n }\n }\n for (const [pair, compare] of coords.relative) { // rearrange body parts according to their relative position\n const left = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const right = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n const leftTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[0]));\n const rightTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[1]));\n if (!body.keypoints[leftTo] || !body.keypoints[rightTo]) continue; // only if we have both compare points\n const distanceLeft = body.keypoints[left] ? [\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[left].position[0]),\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[left].position[0]),\n ] : [0, 0];\n const distanceRight = body.keypoints[right] ? [\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[right].position[0]),\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[right].position[0]),\n ] : [0, 0];\n if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { // should flip keypoints\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n}\n\nexport function jitter(keypoints: BodyKeypoint[]): BodyKeypoint[] {\n for (let i = 0; i < keypoints.length; i++) {\n if (keypoints[i] && cache.keypoints[i]) {\n const diff = [Math.abs(keypoints[i].positionRaw[0] - cache.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache.keypoints[i].positionRaw[1])];\n if (diff[0] < maxJitter && diff[1] < maxJitter) {\n keypoints[i] = cache.keypoints[i]; // below jitter so replace keypoint\n } else {\n cache.keypoints[i] = keypoints[i]; // above jitter so update cache\n }\n } else {\n cache.keypoints[i] = keypoints[i]; // cache for keypoint doesnt exist so create it here\n }\n }\n return keypoints;\n}\n\nexport function padInput(input: Tensor, inputSize: number): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n cache.padding = [\n [0, 0], // dont touch batch\n [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], // height before&after\n [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(input, cache.padding);\n t.resize = tf.image.resizeBilinear(t.pad as Tensor3D, [inputSize, inputSize]);\n const final = tf.cast(t.resize, 'int32');\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nexport function rescaleBody(body: BodyResult, outputSize: [number, number]): BodyResult {\n body.keypoints = body.keypoints.filter((kpt) => kpt?.position); // filter invalid keypoints\n for (const kpt of body.keypoints) {\n kpt.position = [\n kpt.position[0] * (outputSize[0] + cache.padding[2][0] + cache.padding[2][1]) / outputSize[0] - cache.padding[2][0],\n kpt.position[1] * (outputSize[1] + cache.padding[1][0] + cache.padding[1][1]) / outputSize[1] - cache.padding[1][0],\n ];\n kpt.positionRaw = [\n kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1],\n ];\n }\n const rescaledBoxes = box.calc(body.keypoints.map((pt) => pt.position), outputSize);\n body.box = rescaledBoxes.box;\n body.boxRaw = rescaledBoxes.boxRaw;\n return body;\n}\n", "/**\n * MoveNet model implementation\n *\n * Based on: [**MoveNet**](https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport * as fix from './movenetfix';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, BodyAnnotation, Box, Point } from '../result';\nimport type { GraphModel, Tensor } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { fakeOps } from '../tfjs/backend';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n// const boxExpandFact = 1.5; // increase to 150%\n\nconst cache: {\n boxes: Box[], // unused\n bodies: BodyResult[];\n last: number,\n} = {\n boxes: [],\n bodies: [],\n last: 0,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n fakeOps(['size'], config);\n model = await loadModel(config.body.modelPath);\n } else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model?.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize < 64) inputSize = 256;\n return model;\n}\n\nfunction parseSinglePose(res, config, image) {\n const kpt = res[0][0];\n const keypoints: BodyKeypoint[] = [];\n let score = 0;\n for (let id = 0; id < kpt.length; id++) {\n score = kpt[id][2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[id][1], kpt[id][0]];\n keypoints.push({\n score: Math.round(100 * score) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw,\n position: [ // normalized to input image size\n Math.round((image.shape[2] || 0) * positionRaw[0]),\n Math.round((image.shape[1] || 0) * positionRaw[1]),\n ],\n });\n }\n }\n score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const bodies: BodyResult[] = [];\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n const annotations: Record = {};\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations };\n fix.bodyParts(body);\n bodies.push(body);\n return bodies;\n}\n\nfunction parseMultiPose(res, config, image) {\n const bodies: BodyResult[] = [];\n for (let id = 0; id < res[0].length; id++) {\n const kpt = res[0][id];\n const totalScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (totalScore > config.body.minConfidence) {\n const keypoints: BodyKeypoint[] = [];\n for (let i = 0; i < 17; i++) {\n const score = kpt[3 * i + 2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[3 * i + 1], kpt[3 * i + 0]];\n keypoints.push({\n part: coords.kpt[i] as BodyLandmark,\n score: Math.round(100 * score) / 100,\n positionRaw,\n position: [Math.round((image.shape[2] || 0) * positionRaw[0]), Math.round((image.shape[1] || 0) * positionRaw[1])],\n });\n }\n }\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n // movenet-multipose has built-in box details\n // const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];\n // const box: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations };\n fix.bodyParts(body);\n bodies.push(body);\n }\n }\n bodies.sort((a, b) => b.score - a.score);\n if (bodies.length > config.body.maxDetected) bodies.length = config.body.maxDetected;\n return bodies;\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return []; // something is wrong with the model\n if (!config.skipAllowed) cache.boxes.length = 0; // allowed to use cache or not\n skipped++; // increment skip frames\n const skipTime = (config.body.skipTime || 0) > (now() - cache.last);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.bodies; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const t: Record = {};\n skipped = 0;\n // run detection on squared input and cached boxes\n /*\n cache.bodies = []; // reset bodies result\n if (cache.boxes.length >= (config.body.maxDetected || 0)) { // if we have enough cached boxes run detection using cache\n for (let i = 0; i < cache.boxes.length; i++) { // run detection based on cached boxes\n t.crop = tf.image.cropAndResize(input, [cache.boxes[i]], [0], [inputSize, inputSize], 'bilinear');\n t.cast = tf.cast(t.crop, 'int32');\n // t.input = prepareImage(input);\n t.res = model?.execute(t.cast) as Tensor;\n const res = await t.res.array();\n const newBodies = (t.res.shape[2] === 17) ? await parseSinglePose(res, config, input, cache.boxes[i]) : await parseMultiPose(res, config, input, cache.boxes[i]);\n cache.bodies = cache.bodies.concat(newBodies);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n }\n if (cache.bodies.length !== config.body.maxDetected) { // did not find enough bodies based on cached boxes so run detection on full frame\n t.input = prepareImage(input);\n t.res = model?.execute(t.input) as Tensor;\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17) ? await parseSinglePose(res, config, input, [0, 0, 1, 1]) : await parseMultiPose(res, config, input, [0, 0, 1, 1]);\n for (const body of cache.bodies) rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n cache.boxes.length = 0; // reset cache\n for (let i = 0; i < cache.bodies.length; i++) {\n if (cache.bodies[i].keypoints.length > (coords.kpt.length / 2)) { // only update cache if we detected at least half keypoints\n const scaledBox = box.scale(cache.bodies[i].boxRaw, boxExpandFact);\n const cropBox = box.crop(scaledBox);\n cache.boxes.push(cropBox);\n }\n }\n */\n\n // run detection on squared input and no cached boxes\n t.input = fix.padInput(input, inputSize);\n t.res = model?.execute(t.input) as Tensor;\n cache.last = now();\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17)\n ? parseSinglePose(res, config, input)\n : parseMultiPose(res, config, input);\n for (const body of cache.bodies) {\n fix.rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n fix.jitter(body.keypoints);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n\n resolve(cache.bodies);\n });\n}\n", "/**\n * NanoDet object detection model implementation\n *\n * Based on: [**NanoDet**](https://github.com/RangiLyu/nanodet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet inputSize = 0;\n\nconst scaleBox = 2.5; // increase box size\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) {\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor[], outputShape: [number, number], config: Config) {\n let id = 0;\n let results: ObjectResult[] = [];\n const size = inputSize;\n for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects\n // find scores, boxes, classes\n const baseSize = strideSize * 13; // 13x13=169, 26x26=676, 52x52=2704\n // find boxes and scores output depending on stride\n const scoresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) === labels.length)) as Tensor2D);\n const scores = await scoresT.array(); // optionally use exponential scores or just as-is\n const featuresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) < labels.length)) as Tensor2D);\n const boxesMaxT = tf.reshape(featuresT, [-1, 4, (featuresT.shape?.[1] || 0) / 4]); // reshape [output] to [4, output / 4] where number is number of different features inside each stride\n const boxIdxT = tf.argMax(boxesMaxT, 2); // what we need is indexes of features with highest scores, not values itself\n const boxIdx = await boxIdxT.array(); // what we need is indexes of features with highest scores, not values itself\n for (let i = 0; i < scoresT.shape[0]; i++) { // total strides (x * y matrix)\n for (let j = 0; j < (scoresT.shape?.[1] || 0); j++) { // one score for each class\n const score = scores[i][j]; // get score for current position\n if (score > (config.object.minConfidence || 0) && j !== 61) {\n const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; // center.x normalized to range 0..1\n const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; // center.y normalized to range 0..1\n const boxOffset = boxIdx[i].map((a: number) => a * (baseSize / strideSize / (size))); // just grab indexes of features with highest scores\n const [x, y] = [\n cx - (scaleBox / strideSize * boxOffset[0]),\n cy - (scaleBox / strideSize * boxOffset[1]),\n ];\n const [w, h] = [\n cx + (scaleBox / strideSize * boxOffset[2]) - x,\n cy + (scaleBox / strideSize * boxOffset[3]) - y,\n ];\n let boxRaw: Box = [x, y, w, h]; // results normalized to range 0..1\n boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))) as Box; // fix out-of-bounds coords\n const box = [ // results normalized to input image pixels\n boxRaw[0] * outputShape[0],\n boxRaw[1] * outputShape[1],\n boxRaw[2] * outputShape[0],\n boxRaw[3] * outputShape[1],\n ];\n const result = {\n id: id++,\n // strideSize,\n score: Math.round(100 * score) / 100,\n class: j + 1,\n label: labels[j].label as ObjectType,\n // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)],\n // centerRaw: [cx, cy],\n box: box.map((a) => Math.trunc(a)) as Box,\n boxRaw,\n };\n results.push(result);\n }\n }\n }\n tf.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]);\n }\n\n // normally nms is run on raw results, but since boxes need to be calculated this way we skip calulcation of\n // unnecessary boxes and run nms only on good candidates (basically it just does IOU analysis as scores are already filtered)\n const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); // switches coordinates from x,y to y,x as expected by tf.nms\n const nmsScores = results.map((a) => a.score);\n let nmsIdx: number[] = [];\n if (nmsBoxes && nmsBoxes.length > 0) {\n const nms = await tf.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config.object.maxDetected || 0, config.object.iouThreshold, config.object.minConfidence);\n nmsIdx = Array.from(await nms.data());\n tf.dispose(nms);\n }\n\n // filter & sort results\n results = results\n .filter((_val, idx) => nmsIdx.includes(idx))\n .sort((a, b) => (b.score - a.score));\n\n return results;\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n if (!env.kernels.includes('mod') || !env.kernels.includes('sparsetodense')) return last;\n return new Promise(async (resolve) => {\n const outputSize = [image.shape[2] || 0, image.shape[1] || 0];\n const resizeT = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n const normT = tf.div(resizeT, constants.tf255);\n const transposeT = tf.transpose(normT, [0, 3, 1, 2]);\n\n let objectT;\n if (config.object.enabled) objectT = model.execute(transposeT);\n lastTime = now();\n\n const obj = await process(objectT as Tensor[], outputSize as [number, number], config);\n last = obj;\n tf.dispose([resizeT, normT, transposeT, ...objectT]);\n resolve(obj);\n });\n}\n", "/**\n * PoseNet body detection model implementation constants\n * See `posenet.ts` for entry point\n */\n\nimport type { Point, BodyResult, BodyAnnotation, BodyLandmark } from '../result';\n\nexport const partNames = [\n 'nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder',\n 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist',\n 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle',\n];\n\nexport const count = partNames.length; // 17 keypoints\n\nexport const partIds = partNames.reduce((result, jointName, i) => {\n result[jointName] = i;\n return result;\n}, {});\n\nconst connectedPartNames = [\n ['leftHip', 'leftShoulder'], ['leftElbow', 'leftShoulder'],\n ['leftElbow', 'leftWrist'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['rightHip', 'rightShoulder'],\n ['rightElbow', 'rightShoulder'], ['rightElbow', 'rightWrist'],\n ['rightHip', 'rightKnee'], ['rightKnee', 'rightAnkle'],\n ['leftShoulder', 'rightShoulder'], ['leftHip', 'rightHip'],\n];\nexport const connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => ([partIds[jointNameA], partIds[jointNameB]]));\n\nexport const poseChain = [\n ['nose', 'leftEye'], ['leftEye', 'leftEar'], ['nose', 'rightEye'],\n ['rightEye', 'rightEar'], ['nose', 'leftShoulder'],\n ['leftShoulder', 'leftElbow'], ['leftElbow', 'leftWrist'],\n ['leftShoulder', 'leftHip'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['nose', 'rightShoulder'],\n ['rightShoulder', 'rightElbow'], ['rightElbow', 'rightWrist'],\n ['rightShoulder', 'rightHip'], ['rightHip', 'rightKnee'],\n ['rightKnee', 'rightAnkle'],\n];\n\nexport function eitherPointDoesntMeetConfidence(a: number, b: number, minConfidence: number) {\n return (a < minConfidence || b < minConfidence);\n}\n\nexport function getAdjacentKeyPoints(keypoints, minConfidence: number) {\n return connectedPartIndices.reduce((result, [leftJoint, rightJoint]) => {\n if (eitherPointDoesntMeetConfidence(keypoints[leftJoint].score, keypoints[rightJoint].score, minConfidence)) {\n return result;\n }\n result.push([keypoints[leftJoint], keypoints[rightJoint]]);\n return result;\n }, []);\n}\n\nexport function getBoundingBox(keypoints): [number, number, number, number] {\n const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({\n maxX: Math.max(maxX, x),\n maxY: Math.max(maxY, y),\n minX: Math.min(minX, x),\n minY: Math.min(minY, y),\n }), {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY];\n}\n\nexport function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]): BodyResult[] {\n const scaleY = height / inputResolutionHeight;\n const scaleX = width / inputResolutionWidth;\n const scalePose = (pose, i): BodyResult => ({\n id: i,\n score: pose.score,\n boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight],\n box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)],\n keypoints: pose.keypoints.map(({ score, part, position }) => ({\n score: score as number,\n part: part as BodyLandmark,\n position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)] as Point,\n positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] as Point,\n })),\n annotations: {} as Record,\n });\n const scaledPoses = poses.map((pose, i) => scalePose(pose, i));\n return scaledPoses;\n}\n\n// algorithm based on Coursera Lecture from Algorithms, Part 1: https://www.coursera.org/learn/algorithms-part1/lecture/ZjoSM/heapsort\nexport class MaxHeap {\n priorityQueue: unknown[]; // don't touch\n numberOfElements: number;\n getElementValue: unknown; // function call\n\n constructor(maxSize, getElementValue) {\n this.priorityQueue = new Array(maxSize);\n this.numberOfElements = -1;\n this.getElementValue = getElementValue;\n }\n\n enqueue(x) {\n this.priorityQueue[++this.numberOfElements] = x;\n this.swim(this.numberOfElements);\n }\n\n dequeue() {\n const max = this.priorityQueue[0];\n this.exchange(0, this.numberOfElements--);\n this.sink(0);\n this.priorityQueue[this.numberOfElements + 1] = null;\n return max;\n }\n\n empty() { return this.numberOfElements === -1; }\n\n size() { return this.numberOfElements + 1; }\n\n all() { return this.priorityQueue.slice(0, this.numberOfElements + 1); }\n\n max() { return this.priorityQueue[0]; }\n\n swim(k) {\n while (k > 0 && this.less(Math.floor(k / 2), k)) {\n this.exchange(k, Math.floor(k / 2));\n k = Math.floor(k / 2);\n }\n }\n\n sink(k) {\n while (2 * k <= this.numberOfElements) {\n let j = 2 * k;\n if (j < this.numberOfElements && this.less(j, j + 1)) j++;\n if (!this.less(k, j)) break;\n this.exchange(k, j);\n k = j;\n }\n }\n\n getValueAt(i) {\n // @ts-ignore getter is of unknown type\n return this.getElementValue(this.priorityQueue[i]);\n }\n\n less(i, j) {\n return this.getValueAt(i) < this.getValueAt(j);\n }\n\n exchange(i, j) {\n const t = this.priorityQueue[i];\n this.priorityQueue[i] = this.priorityQueue[j];\n this.priorityQueue[j] = t;\n }\n}\n\nexport function getOffsetPoint(y, x, keypoint: number, offsets) {\n return {\n y: offsets.get(y, x, keypoint),\n x: offsets.get(y, x, keypoint + count),\n };\n}\n\nexport function getImageCoords(part, outputStride: number, offsets) {\n const { heatmapY, heatmapX, id: keypoint } = part;\n const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets);\n return {\n x: part.heatmapX * outputStride + x,\n y: part.heatmapY * outputStride + y,\n };\n}\n\nexport function fillArray(element, size) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = element;\n }\n return result;\n}\n\nexport function clamp(a, min, max) {\n if (a < min) return min;\n if (a > max) return max;\n return a;\n}\n\nexport function squaredDistance(y1, x1, y2, x2) {\n const dy = y2 - y1;\n const dx = x2 - x1;\n return dy * dy + dx * dx;\n}\n\nexport function addVectors(a: { x: number, y: number }, b: { x: number, y: number }) {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\nexport function clampVector(a, min, max) {\n return { y: clamp(a.y, min, max), x: clamp(a.x, min, max) };\n}\n", "/**\n * PoseNet body detection model implementation\n *\n * Based on: [**PoseNet**](https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyResult, BodyLandmark, Box } from '../result';\nimport type { Tensor, GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as utils from './posenetutils';\n\nlet model: GraphModel;\nconst poseNetOutputs = ['MobilenetV1/offset_2/BiasAdd'/* offsets */, 'MobilenetV1/heatmap_2/BiasAdd'/* heatmapScores */, 'MobilenetV1/displacement_fwd_2/BiasAdd'/* displacementFwd */, 'MobilenetV1/displacement_bwd_2/BiasAdd'/* displacementBwd */];\nconst localMaximumRadius = 1;\nconst outputStride = 16;\nconst squaredNmsRadius = 50 ** 2;\n\nfunction traverse(edgeId: number, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) {\n const getDisplacement = (point) => ({\n y: displacements.get(point.y, point.x, edgeId),\n x: displacements.get(point.y, point.x, (displacements.shape[2] / 2) + edgeId),\n });\n const getStridedIndexNearPoint = (point, height, width) => ({\n y: utils.clamp(Math.round(point.y / outputStride), 0, height - 1),\n x: utils.clamp(Math.round(point.x / outputStride), 0, width - 1),\n });\n\n const [height, width] = scores.shape;\n // Nearest neighbor interpolation for the source->target displacements.\n const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width);\n const displacement = getDisplacement(sourceKeypointIndices);\n const displacedPoint = utils.addVectors(sourceKeypoint.position, displacement);\n let targetKeypoint = displacedPoint;\n for (let i = 0; i < offsetRefineStep; i++) {\n const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const offsetPoint = utils.getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets);\n targetKeypoint = utils.addVectors(\n { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride },\n { x: offsetPoint.x, y: offsetPoint.y },\n );\n }\n const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId);\n return { position: targetKeypoint, part: utils.partNames[targetId], score };\n}\n\nexport function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) {\n const tuples = utils.poseChain.map(([parentJoinName, childJoinName]) => ([utils.partIds[parentJoinName], utils.partIds[childJoinName]]));\n const edgesFwd = tuples.map(([, childJointId]) => childJointId);\n const edgesBwd = tuples.map(([parentJointId]) => parentJointId);\n const numParts = scores.shape[2]; // [21,21,17]\n const numEdges = edgesFwd.length;\n const keypoints = new Array(numParts);\n // Start a new detection instance at the position of the root.\n const rootPoint = utils.getImageCoords(root.part, outputStride, offsets);\n keypoints[root.part.id] = {\n score: root.score,\n part: utils.partNames[root.part.id] as BodyLandmark,\n position: rootPoint,\n };\n // Decode the part positions upwards in the tree, following the backward displacements.\n for (let edge = numEdges - 1; edge >= 0; --edge) {\n const sourceId = edgesFwd[edge];\n const targetId = edgesBwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd);\n }\n }\n // Decode the part positions downwards in the tree, following the forward displacements.\n for (let edge = 0; edge < numEdges; ++edge) {\n const sourceId = edgesBwd[edge];\n const targetId = edgesFwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd);\n }\n }\n return keypoints;\n}\n\nfunction scoreIsMaximumInLocalWindow(keypointId, score: number, heatmapY: number, heatmapX: number, scores) {\n const [height, width]: [number, number] = scores.shape;\n let localMaximum = true;\n const yStart = Math.max(heatmapY - localMaximumRadius, 0);\n const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height);\n for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) {\n const xStart = Math.max(heatmapX - localMaximumRadius, 0);\n const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width);\n for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) {\n if (scores.get(yCurrent, xCurrent, keypointId) > score) {\n localMaximum = false;\n break;\n }\n }\n if (!localMaximum) break;\n }\n return localMaximum;\n}\n\nexport function buildPartWithScoreQueue(minConfidence, scores) {\n const [height, width, numKeypoints] = scores.shape;\n const queue = new utils.MaxHeap(height * width * numKeypoints, ({ score }) => score);\n for (let heatmapY = 0; heatmapY < height; ++heatmapY) {\n for (let heatmapX = 0; heatmapX < width; ++heatmapX) {\n for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) {\n const score = scores.get(heatmapY, heatmapX, keypointId);\n // Only consider parts with score greater or equal to threshold as root candidates.\n if (score < minConfidence) continue;\n // Only consider keypoints whose score is maximum in a local window.\n if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } });\n }\n }\n }\n return queue;\n}\n\nfunction withinRadius(poses, { x, y }, keypointId) {\n return poses.some(({ keypoints }) => {\n const correspondingKeypoint = keypoints[keypointId]?.position;\n if (!correspondingKeypoint) return false;\n return utils.squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius;\n });\n}\n\nfunction getInstanceScore(existingPoses, keypoints) {\n const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => {\n if (!withinRadius(existingPoses, position, keypointId)) result += score;\n return result;\n }, 0.0);\n return notOverlappedKeypointScores / keypoints.length;\n}\n\nexport function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence) {\n const poses: { keypoints, box: Box, score: number }[] = [];\n const queue = buildPartWithScoreQueue(minConfidence, scores);\n // Generate at most maxDetected object instances per image in decreasing root part score order.\n while (poses.length < maxDetected && !queue.empty()) {\n // The top element in the queue is the next root candidate.\n const root = queue.dequeue();\n // Part-based non-maximum suppression: We reject a root candidate if it is within a disk of `nmsRadius` pixels from the corresponding part of a previously detected instance.\n // @ts-ignore this one is tree walk\n const rootImageCoords = utils.getImageCoords(root.part, outputStride, offsets);\n // @ts-ignore this one is tree walk\n if (withinRadius(poses, rootImageCoords, root.part.id)) continue;\n // Else start a new detection instance at the position of the root.\n let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd);\n keypoints = keypoints.filter((a) => a.score > minConfidence);\n const score = getInstanceScore(poses, keypoints);\n const box = utils.getBoundingBox(keypoints);\n if (score > minConfidence) poses.push({ keypoints, box, score: Math.round(100 * score) / 100 });\n }\n return poses;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n /** posenet is mostly obsolete\n * caching is not implemented\n */\n if (!model?.['executor']) return [];\n const res = tf.tidy(() => {\n if (!model.inputs[0].shape) return [];\n const resized = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const normalized = tf.sub(tf.div(tf.cast(resized, 'float32'), 127.5), 1.0);\n const results: Tensor[] = model.execute(normalized, poseNetOutputs) as Tensor[];\n const results3d = results.map((y) => tf.squeeze(y, [0]));\n results3d[1] = tf.sigmoid(results3d[1]); // apply sigmoid on scores\n return results3d;\n });\n\n const buffers = await Promise.all(res.map((tensor: Tensor) => tensor.buffer()));\n for (const t of res) tf.dispose(t);\n\n const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config.body.maxDetected, config.body.minConfidence);\n if (!model.inputs[0].shape) return [];\n const scaled = utils.scalePoses(decoded, [input.shape[1], input.shape[2]], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n return scaled;\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**Robust Video Matting**](https://github.com/PeterL1n/RobustVideoMatting)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\n// internal state varaibles\nconst outputNodes = ['fgr', 'pha', 'r1o', 'r2o', 'r3o', 'r4o'];\nconst t: Record = {}; // contains input tensor and recurrent states\nlet ratio = 0;\n\nfunction init(config: Config) {\n tf.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]);\n t.r1i = tf.tensor(0.0);\n t.r2i = tf.tensor(0.0);\n t.r3i = tf.tensor(0.0);\n t.r4i = tf.tensor(0.0);\n ratio = config.segmentation.ratio || 0.5;\n t.downsample_ratio = tf.tensor(ratio); // initialize downsample ratio\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n init(config);\n return model;\n}\n\nconst normalize = (r: Tensor): Tensor => tf.tidy(() => {\n const squeeze = tf.squeeze(r, ([0]));\n const mul = tf.mul(squeeze, constants.tf255);\n const cast = tf.cast(mul, 'int32');\n return cast;\n});\n\nfunction getRGBA(fgr: Tensor | null, pha: Tensor | null): Tensor { // gets rgba // either fgr or pha must be present\n const rgb = fgr\n ? normalize(fgr) // normalize and use value\n : tf.fill([pha!.shape[1] || 0, pha!.shape[2] || 0, 3], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const a = pha\n ? normalize(pha) // normalize and use value\n : tf.fill([fgr!.shape[1] || 0, fgr!.shape[2] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const rgba = tf.concat([rgb, a], -1);\n tf.dispose([rgb, a]);\n return rgba;\n}\n\nfunction getState(state: Tensor): Tensor { // gets internal recurrent states\n return tf.tidy(() => {\n const r: Record = {};\n r.unstack = tf.unstack(state, -1);\n r.concat = tf.concat(r.unstack, 1);\n r.split = tf.split(r.concat, 4, 1);\n r.stack = tf.concat(r.split, 2);\n r.squeeze = tf.squeeze(r.stack, [0]);\n r.expand = tf.expandDims(r.squeeze, -1);\n r.add = tf.add(r.expand, 1);\n r.mul = tf.mul(r.add, 127.5);\n r.cast = tf.cast(r.mul, 'int32');\n r.tile = tf.tile(r.cast, [1, 1, 3]);\n r.alpha = tf.fill([(r.tile as Tensor).shape[0] || 0, (r.tile as Tensor).shape[1] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\n return tf.concat([r.tile, r.alpha], -1);\n });\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor']) return null;\n // const expand = tf.expandDims(input, 0);\n t.src = tf.div(input, 255);\n if (ratio !== config.segmentation.ratio) init(config); // reinitialize recurrent states if requested downsample ratio changed\n const [fgr, pha, r1o, r2o, r3o, r4o] = await model.executeAsync(t, outputNodes) as Tensor[]; // execute model\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n rgba = getRGBA(fgr, pha);\n break;\n case 'alpha':\n rgba = getRGBA(null, pha);\n break;\n case 'foreground':\n rgba = getRGBA(fgr, null);\n break;\n case 'state':\n rgba = getState(r1o); // can view any internal recurrent state r10, r20, r3o, r4o\n break;\n default:\n rgba = tf.tensor(0);\n }\n tf.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]);\n [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; // update recurrent states\n return rgba;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Selfie**](https://drive.google.com/file/d/1dCfozqknMa068vVsO2j_1FgZkW_e3VWv/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]); // meet.shape:[1,256,256,1], selfie.shape:[1,144,256,2]\n t.alpha = tf.image.resizeBilinear(t.squeeze as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]); // model selfie has a single channel that we can use directly\n t.mul = tf.mul(t.alpha, constants.tf255);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.mul], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.mul, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/**\n * Analyze detection Results and sort&combine them into per-person view\n */\n\nimport type { FaceResult, BodyResult, HandResult, GestureResult, PersonResult, Box } from '../result';\n\nexport function join(faces: FaceResult[], bodies: BodyResult[], hands: HandResult[], gestures: GestureResult[], shape: number[] | undefined): PersonResult[] {\n let id = 0;\n const persons: PersonResult[] = [];\n for (const face of faces) { // person is defined primarily by face and then we append other objects as found\n const person: PersonResult = { id: id++, face, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] };\n for (const body of bodies) {\n if (face.box[0] > body.box[0] // x within body\n && face.box[0] < body.box[0] + body.box[2]\n && face.box[1] + face.box[3] > body.box[1] // y within body\n && face.box[1] + face.box[3] < body.box[1] + body.box[3]) {\n person.body = body;\n }\n }\n if (person.body) { // only try to join hands if body is found\n for (const hand of hands) {\n if (hand.box[0] + hand.box[2] > person.body.box[0] // x within body for left hand\n && hand.box[0] + hand.box[2] < person.body.box[0] + person.body.box[2]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for left hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.left = hand;\n }\n if (hand.box[0] < person.body.box[0] + person.body.box[2] // x within body for right hand\n && hand.box[0] > person.body.box[0]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for right hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.right = hand;\n }\n }\n }\n for (const gesture of gestures) { // append all gestures according to ids\n if (gesture['face'] !== undefined && gesture['face'] === face.id) person.gestures.push(gesture);\n else if (gesture['iris'] !== undefined && gesture['iris'] === face.id) person.gestures.push(gesture);\n else if (gesture['body'] !== undefined && gesture['body'] === person.body?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.left?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.right?.id) person.gestures.push(gesture);\n }\n\n // create new overarching box from all boxes belonging to person\n const x: number[] = [];\n const y: number[] = [];\n const extractXY = (box: Box | undefined) => { // extract all [x, y] coordinates from boxes [x, y, width, height]\n if (box && box.length === 4) {\n x.push(box[0], box[0] + box[2]);\n y.push(box[1], box[1] + box[3]);\n }\n };\n extractXY(person.face.box);\n extractXY(person.body?.box);\n extractXY(person.hands.left?.box);\n extractXY(person.hands.right?.box);\n const minX = Math.min(...x);\n const minY = Math.min(...y);\n person.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; // create new overarching box\n\n // shape is known so we calculate boxRaw as well\n if (shape?.[1] && shape?.[2]) person.boxRaw = [person.box[0] / shape[2], person.box[1] / shape[1], person.box[2] / shape[2], person.box[3] / shape[1]];\n\n persons.push(person);\n }\n return persons;\n}\n", "/**\n * Embedded sample images used during warmup in dataURL format\n */\n\n// data:image/jpeg;base64,\nexport const face = `\n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`;\n\n// data:image/jpeg;base64,\nexport const body = `\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N\nmtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm\n9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N\nIpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W\nMYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2\n+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql\no+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37\nO99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE\nTE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1\nL7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4\nizsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt\n1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb\nV5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum\nL37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12\n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\nAOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM\nd8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5\n6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP\nbFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu\nLJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy\nwt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX\n0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK\n3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn\nKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0\nvobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t\nzya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps\nuOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi\nFdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA\n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\nNO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h\n2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te\npSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7\ncvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7\nmZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA\nAAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA\nhGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J\nqx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI\nXRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy\nRHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX\nqNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX\nkaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P\nya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC\nExKJgBnEpiyvdlEgsizKLKollFgWxLKJVRLKJBbEp3VxLKJBnuMWQJEbpBIAAAJAAAABIAAAAAAA\nlAJAAAAAAAAAAAAAASAAAAAAAAAAAAAJAAAABAJABAlAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA\nAAABAJQAAAAgAABAAI2EoBGyJhkgGPKxmqxAKpownHC+YRMdN5BrTj67R3bOn01o7p01Iv71u89o\n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\n2Q==`;\n", "/**\n * Warmup algorithm that uses embedded images to exercise loaded models for faster future inference\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep } from './util/util';\nimport * as sample from './sample';\nimport * as image from './image/image';\nimport * as backend from './tfjs/backend';\nimport { env } from './util/env';\nimport { empty, Result } from './result';\nimport type { Config } from './config';\nimport type { Human } from './human';\nimport type { Tensor, DataType } from './tfjs/types';\n\nasync function warmupBitmap(instance: Human): Promise {\n const b64toBlob = (base64: string, type = 'application/octet-stream') => fetch(`data:${type};base64,${base64}`).then((res) => res.blob());\n let blob: Blob | null;\n let res: Result | undefined;\n switch (instance.config.warmup) {\n case 'face': blob = await b64toBlob(sample.face); break;\n case 'body':\n case 'full': blob = await b64toBlob(sample.body); break;\n default: blob = null;\n }\n if (blob) {\n const bitmap = await createImageBitmap(blob);\n res = await instance.detect(bitmap, instance.config);\n bitmap.close();\n }\n return res;\n}\n\nasync function warmupCanvas(instance: Human): Promise {\n return new Promise((resolve) => {\n let src: string;\n // let size = 0;\n switch (instance.config.warmup) {\n case 'face':\n // size = 256;\n src = 'data:image/jpeg;base64,' + sample.face;\n break;\n case 'full':\n case 'body':\n // size = 1200;\n src = 'data:image/jpeg;base64,' + sample.body;\n break;\n default:\n src = '';\n }\n // src = encodeURI('../assets/human-sample-upper.jpg');\n let img: HTMLImageElement;\n if (typeof Image !== 'undefined') img = new Image();\n // @ts-ignore env.image is an external monkey-patch\n else if (env.Image) img = new env.Image();\n else return;\n img.onload = async () => {\n const canvas = image.canvas(img.naturalWidth, img.naturalHeight);\n if (!canvas) {\n log('Warmup: Canvas not found');\n resolve(undefined);\n } else {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (ctx) ctx.drawImage(img, 0, 0);\n // const data = ctx?.getImageData(0, 0, canvas.height, canvas.width);\n const tensor = await instance.image(canvas, true);\n const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : undefined;\n resolve(res);\n }\n };\n if (src) img.src = src;\n else resolve(undefined);\n });\n}\n\nasync function warmupNode(instance: Human): Promise {\n const atob = (str: string) => Buffer.from(str, 'base64');\n let img;\n if (instance.config.warmup === 'face') img = atob(sample.face);\n else img = atob(sample.body);\n let res: Result;\n if (('node' in tf) && (tf.getBackend() === 'tensorflow')) {\n // @ts-ignore\n const data: Tensor = tf['node'].decodeJpeg(img); // eslint-disable-line import/namespace\n const expanded: Tensor = tf.expandDims(data, 0);\n instance.tf.dispose(data);\n // log('Input:', expanded);\n res = await instance.detect(expanded, instance.config);\n instance.tf.dispose(expanded);\n } else {\n if (instance.config.debug) log('Warmup tfjs-node not loaded');\n /*\n const input = await canvasJS.loadImage(img);\n const canvas = canvasJS.createCanvas(input.width, input.height);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, input.width, input.height);\n res = await instance.detect(input, instance.config);\n */\n }\n // @ts-ignore\n return res;\n}\n\nasync function runInference(instance: Human) {\n let res: Result | undefined;\n if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);\n else if (typeof Image !== 'undefined' || env.Canvas !== undefined) res = await warmupCanvas(instance);\n else res = await warmupNode(instance);\n return res;\n}\n\n/** Runs pre-compile on all loaded models */\nexport async function runCompile(instance: Human) {\n // @ts-ignore private property\n if (!tf.env().flagRegistry.ENGINE_COMPILE_ONLY) return; // tfjs does not support compile-only inference\n const backendType = tf.getBackend();\n const webGLBackend = tf.backend();\n if ((backendType !== 'webgl' && backendType !== 'humangl') || !webGLBackend?.['checkCompileCompletion']) {\n // log('compile pass: skip');\n return;\n }\n tf.env().set('ENGINE_COMPILE_ONLY', true);\n const numTensorsStart = tf.engine().state.numTensors;\n const compiledModels: string[] = [];\n for (const [modelName, model] of Object.entries(instance.models).filter(([key, val]) => (key !== null && val !== null))) {\n const shape = (model?.modelSignature && model?.inputs?.[0]?.shape) ? [...model.inputs[0].shape] : [1, 64, 64, 3];\n const dtype: DataType = (model?.modelSignature && model?.inputs?.[0]?.dtype) ? model.inputs[0].dtype : 'float32';\n for (let dim = 0; dim < shape.length; dim++) {\n if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; // override batch number and any dynamic dimensions\n }\n const tensor = tf.zeros(shape, dtype);\n try {\n const res = model.execute(tensor);\n compiledModels.push(modelName);\n if (Array.isArray(res)) res.forEach((t) => tf.dispose(t));\n else tf.dispose(res);\n } catch {\n if (instance.config.debug) log('compile fail model:', modelName);\n }\n tf.dispose(tensor);\n }\n const kernels = await webGLBackend['checkCompileCompletionAsync']();\n webGLBackend['getUniformLocations']();\n if (instance.config.debug) log('compile pass:', { models: compiledModels, kernels: kernels.length });\n tf.env().set('ENGINE_COMPILE_ONLY', false);\n const numTensorsEnd = tf.engine().state.numTensors;\n if ((numTensorsEnd - numTensorsStart) > 0) log('tensor leak:', numTensorsEnd - numTensorsStart);\n}\n\n/** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used in browser environments for `webgl` and `humangl` backends\n * @param userConfig?: Config\n*/\nexport async function warmup(instance: Human, userConfig?: Partial): Promise {\n await backend.check(instance, false);\n const t0 = now();\n instance.state = 'warmup';\n if (userConfig) instance.config = mergeDeep(instance.config, userConfig) as Config;\n if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === 'none') {\n return empty();\n }\n return new Promise(async (resolve) => {\n await instance.models.load();\n await runCompile(instance);\n const res = await runInference(instance);\n const t1 = now();\n if (instance.config.debug) log('warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');\n instance.emit('warmup');\n resolve(res);\n });\n}\n", "/**\n * Human main module\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\n// module imports\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep, validate } from './util/util';\nimport { defaults } from './config';\nimport { env, Env } from './util/env';\nimport { WebCam } from './util/webcam';\nimport { setModelLoadOptions } from './tfjs/load';\nimport * as app from '../package.json';\nimport * as backend from './tfjs/backend';\nimport * as draw from './draw/draw';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as face from './face/face';\nimport * as facemesh from './face/facemesh';\nimport * as gesture from './gesture/gesture';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as image from './image/image';\nimport * as interpolate from './util/interpolate';\nimport * as meet from './segmentation/meet';\nimport * as match from './face/match';\nimport * as models from './models';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as persons from './util/persons';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as warmups from './warmup';\n\n// type definitions\nimport { Input, Config, Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, AnyCanvas, empty } from './exports';\nimport type { Tensor, Tensor4D } from './tfjs/types';\n// type exports\nexport * from './exports';\n\n/** **Human** library main class\n *\n * All methods and properties are available only as members of Human class\n *\n * - Configuration object definition: {@link Config}\n * - Results object definition: {@link Result}\n * - Possible inputs: {@link Input}\n *\n * @param userConfig - {@link Config}\n * @returns instance of {@link Human}\n */\nexport class Human {\n /** Current version of Human library in *semver* format */\n version: string;\n\n /** Current configuration\n * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\n config: Config;\n\n /** Last known result of detect run\n * - Can be accessed anytime after initial detection\n */\n result: Result;\n\n /** Current state of Human library\n * - Can be polled to determine operations that are currently executed\n * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'\n */\n state: string;\n\n /** currenty processed image tensor and canvas */\n process: { tensor: Tensor | null, canvas: AnyCanvas | null };\n\n /** Instance of TensorFlow/JS used by Human\n * - Can be embedded or externally provided\n * [TFJS API](https://js.tensorflow.org/api/latest/)\n */\n tf;\n\n /** Object containing environment information used for diagnostics */\n env: Env = env;\n\n /** Draw helper classes that can draw detected objects on canvas using specified draw\n * - canvas: draws input to canvas\n * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions}\n * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas\n */\n // draw: { canvas: typeof draw.canvas, face: typeof draw.face, body: typeof draw.body, hand: typeof draw.hand, gesture: typeof draw.gesture, object: typeof draw.object, person: typeof draw.person, all: typeof draw.all, options: DrawOptions };\n draw: typeof draw = draw;\n\n /** Face Matching\n * - similarity: compare two face descriptors and return similarity index\n * - distance: compare two face descriptors and return raw calculated differences\n * - find: compare face descriptor to array of face descriptors and return best match\n */\n match: typeof match = match;\n\n /** Currently loaded models\n * @internal\n * {@link models#Models}\n */\n models: models.Models;\n\n /** Container for events dispatched by Human\n * Possible events:\n * - `create`: triggered when Human object is instantiated\n * - `load`: triggered when models are loaded (explicitly or on-demand)\n * - `image`: triggered when input image is processed\n * - `result`: triggered when detection is complete\n * - `warmup`: triggered when warmup is complete\n * - `error`: triggered on some errors\n */\n events: EventTarget | undefined;\n /** Reference face triangualtion array of 468 points, used for triangle references between points */\n faceTriangulation: number[];\n /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */\n faceUVMap: [number, number][];\n /** Performance object that contains values for all recently performed operations */\n performance: Record; // perf members are dynamically defined as needed\n #numTensors: number;\n #analyzeMemoryLeaks: boolean;\n #checkSanity: boolean;\n // definition end\n\n /** Constructor for **Human** library that is futher used for all operations\n * @param userConfig - user configuration object {@link Config}\n */\n constructor(userConfig?: Partial) {\n /*\n defaults.wasmPath = tf.version['tfjs-core'].includes('-') // custom build or official build\n ? 'https://vladmandic.github.io/tfjs/dist/'\n : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`;\n */\n const tfVersion = (tf.version.tfjs || tf.version_core).replace(/-(.*)/, '');\n defaults.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`;\n defaults.modelBasePath = env.browser ? '../models/' : 'file://models/';\n this.version = app.version; // expose version property on instance of class\n Object.defineProperty(this, 'version', { value: app.version }); // expose version property directly on class itself\n this.config = JSON.parse(JSON.stringify(defaults));\n Object.seal(this.config);\n this.config.cacheModels = typeof indexedDB !== 'undefined';\n if (userConfig) this.config = mergeDeep(this.config, userConfig);\n setModelLoadOptions(this.config);\n this.tf = tf;\n this.state = 'idle';\n this.#numTensors = 0;\n this.#analyzeMemoryLeaks = false;\n this.#checkSanity = false;\n this.performance = {};\n this.events = (typeof EventTarget !== 'undefined') ? new EventTarget() : undefined;\n // object that contains all initialized models\n this.models = new models.Models(this);\n // reexport draw methods\n draw.init();\n this.result = empty();\n // export access to image processing\n this.process = { tensor: null, canvas: null };\n // export raw access to underlying models\n this.faceTriangulation = facemesh.triangulation;\n this.faceUVMap = facemesh.uvmap;\n // init model validation\n models.validateModel(this, null, '');\n // include platform info\n this.emit('create');\n if (this.config.debug || this.env.browser) log(`version: ${this.version}`);\n if (this.config.debug) log(`tfjs version: ${this.tf.version['tfjs-core']}`);\n const envTemp = JSON.parse(JSON.stringify(this.env));\n delete envTemp.kernels;\n delete envTemp.initial;\n delete envTemp.perfadd;\n if (this.config.debug) log('environment:', envTemp);\n }\n\n /** internal function to measure tensor leaks */\n analyze = (...msg: string[]) => {\n if (!this.#analyzeMemoryLeaks) return;\n const currentTensors = this.tf.engine().state.numTensors;\n const previousTensors = this.#numTensors;\n this.#numTensors = currentTensors;\n const leaked = currentTensors - previousTensors;\n if (leaked !== 0) log(...msg, leaked);\n };\n\n /** internal function for quick sanity check on inputs @hidden */\n #sanity = (input: Input): null | string => {\n if (!this.#checkSanity) return null;\n if (!input) return 'input is not defined';\n if (this.env.node && !(input instanceof tf.Tensor)) return 'input must be a tensor';\n try {\n this.tf.getBackend();\n } catch {\n return 'backend not loaded';\n }\n return null;\n };\n\n /** Reset configuration to default values */\n reset(): void {\n const currentBackend = this.config.backend; // save backend;\n this.config = JSON.parse(JSON.stringify(defaults));\n this.config.backend = currentBackend;\n image.reset();\n env.initial = true;\n }\n\n /** Validate current configuration schema */\n validate(userConfig?: Partial) {\n const msgs = validate(defaults, userConfig || this.config);\n if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig) as Config;\n return msgs;\n }\n\n /** Utility wrapper for performance.now() */\n now(): number { // eslint-disable-line class-methods-use-this\n return now();\n }\n\n /** Process input as return canvas and tensor\n *\n * @param input - any input {@link Input}\n * @param getTensor - should image processing also return tensor or just canvas\n * Returns object with `tensor` and `canvas`\n */\n image(input: Input, getTensor: boolean = false) {\n return image.process(input, this.config, getTensor);\n }\n\n /** Segmentation method takes any input and returns RGBA tensor\n * Note: Segmentation is not triggered as part of detect process\n *\n * @param input - {@link Input}\n * Returns tensor which contains image data in RGBA format\n */\n async segmentation(input: Input, userConfig?: Partial): Promise {\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (!this.config.segmentation.enabled) return null;\n const processed = await image.process(input, this.config);\n if (!processed.tensor) return null;\n let tensor: Tensor | null = null;\n if (this.config.segmentation.modelPath?.includes('rvm')) tensor = await rvm.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('meet')) tensor = await meet.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('selfie')) tensor = await selfie.predict(processed.tensor, this.config);\n tf.dispose(processed.tensor);\n return tensor;\n }\n\n /** Compare two input tensors for pixel similarity\n * - use `human.image` to process any valid input and get a tensor that can be used for compare\n * - when passing manually generated tensors:\n * - both input tensors must be in format [1, height, width, 3]\n * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor\n * - return value is pixel similarity score normalized by input resolution and rgb channels\n */\n compare(firstImageTensor: Tensor, secondImageTensor: Tensor): Promise {\n return image.compare(this.config, firstImageTensor, secondImageTensor);\n }\n\n /** Explicit backend initialization\n * - Normally done implicitly during initial load phase\n * - Call to explictly register and initialize TFJS backend without any other operations\n * - Use when changing backend during runtime\n */\n async init(): Promise {\n await backend.check(this, true);\n await this.tf.ready();\n image.reset();\n }\n\n /** WebCam helper methods\n *\n */\n public webcam = new WebCam();\n\n /** Load method preloads all configured models on-demand\n * - Not explicitly required as any required model is load implicitly on it's first run\n *\n * @param userConfig - {@link Config}\n */\n async load(userConfig?: Partial): Promise {\n this.state = 'load';\n const timeStamp = now();\n const count = Object.values(this.models).filter((model) => model).length;\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n\n if (this.env.initial) { // print version info on first run and check for correct backend setup\n if (!await backend.check(this, false)) log('error: backend check failed');\n await tf.ready();\n if (this.env.browser) {\n if (this.config.debug) log('configuration:', this.config);\n if (this.config.debug) log('tf flags:', this.tf.ENV.flags);\n }\n }\n\n await this.models.load(); // actually loads models\n if (this.env.initial && this.config.debug) log('tf engine state:', this.tf.engine().state.numBytes, 'bytes', this.tf.engine().state.numTensors, 'tensors'); // print memory stats on first run\n this.env.initial = false;\n\n const loaded = Object.values(this.models).filter((model) => model).length;\n if (loaded !== count) { // number of loaded models changed\n this.models.validate(); // validate kernel ops used by model against current backend\n this.emit('load');\n }\n\n const current = Math.trunc(now() - timeStamp);\n if (current > (this.performance.loadModels || 0)) this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current;\n }\n\n /** emit event */\n emit = (event: string) => {\n if (this.events?.dispatchEvent) this.events.dispatchEvent(new Event(event));\n };\n\n /** Runs interpolation using last known result and returns smoothened result\n * Interpolation is based on time since last known result so can be called independently\n *\n * @param result - {@link Result} optional use specific result set to run interpolation on\n * @returns result - {@link Result}\n */\n next(result: Result = this.result): Result {\n return interpolate.calc(result, this.config);\n }\n\n /** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used for `webgl` and `humangl` backends\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async warmup(userConfig?: Partial) {\n const t0 = now();\n const res = await warmups.warmup(this, userConfig);\n const t1 = now();\n this.performance.warmup = Math.trunc(t1 - t0);\n return res;\n }\n\n /** Run detect with tensorflow profiling\n * - result object will contain total exeuction time information for top-20 kernels\n * - actual detection object can be accessed via `human.result`\n */\n async profile(input: Input, userConfig?: Partial): Promise<{ kernel: string, time: number, perc: number }[]> {\n // @ts-ignore profile wraps method return values\n const profile = await this.tf.profile(() => this.detect(input, userConfig));\n const kernels: Record = {};\n let total = 0;\n for (const kernel of profile.kernels) { // sum kernel time values per kernel\n const ms = Number(kernel.kernelTimeMs) || 0;\n if (kernels[kernel.name]) kernels[kernel.name] += ms;\n else kernels[kernel.name] = ms;\n total += ms;\n }\n const kernelArr: { kernel: string, time: number, perc: number }[] = [];\n Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1] as unknown as number, perc: 0 })); // convert to array\n for (const kernel of kernelArr) {\n kernel.perc = Math.round(1000 * kernel.time / total) / 1000;\n kernel.time = Math.round(1000 * kernel.time) / 1000;\n }\n kernelArr.sort((a, b) => b.time - a.time); // sort\n kernelArr.length = 20; // crop\n return kernelArr;\n }\n\n /** Main detection method\n * - Analyze configuration: {@link Config}\n * - Pre-process input: {@link Input}\n * - Run inference for all configured models\n * - Process and return result: {@link Result}\n *\n * @param input - {@link Input}\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async detect(input: Input, userConfig?: Partial): Promise {\n // detection happens inside a promise\n this.state = 'detect';\n return new Promise(async (resolve) => {\n this.state = 'config';\n let timeStamp;\n\n // update configuration\n this.config = mergeDeep(this.config, userConfig) as Config;\n\n // sanity checks\n this.state = 'check';\n const error = this.#sanity(input);\n if (error) {\n log(error, input);\n this.emit('error');\n resolve(empty(error));\n }\n\n const timeStart = now();\n\n // load models if enabled\n await this.load();\n\n timeStamp = now();\n this.state = 'image';\n const img = await image.process(input, this.config) as { canvas: AnyCanvas, tensor: Tensor4D };\n this.process = img;\n this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Get Image:');\n\n if (!img.tensor) {\n if (this.config.debug) log('could not convert input to tensor');\n this.emit('error');\n resolve(empty('could not convert input to tensor'));\n return;\n }\n this.emit('image');\n\n timeStamp = now();\n this.config.skipAllowed = await image.skip(this.config, img.tensor);\n this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; // disable autoBrightness on scene change\n if (!this.performance.totalFrames) this.performance.totalFrames = 0;\n if (!this.performance.cachedFrames) this.performance.cachedFrames = 0;\n (this.performance.totalFrames)++;\n if (this.config.skipAllowed) this.performance.cachedFrames++;\n this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Check Changed:');\n\n // prepare where to store model results\n // keep them with weak typing as it can be promise or not\n let faceRes: FaceResult[] | Promise | never[] = [];\n let bodyRes: BodyResult[] | Promise | never[] = [];\n let handRes: HandResult[] | Promise | never[] = [];\n let objectRes: ObjectResult[] | Promise | never[] = [];\n\n // run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion\n this.state = 'detect:face';\n if (this.config.async) {\n faceRes = this.config.face.enabled ? face.detectFace(this, img.tensor) : [];\n if (this.performance.face) delete this.performance.face;\n } else {\n timeStamp = now();\n faceRes = this.config.face.enabled ? await face.detectFace(this, img.tensor) : [];\n this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n\n if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) faceRes = await faceRes; // need face result for auto-detect number of hands or bodies\n\n // run body: can be posenet, blazepose, efficientpose, movenet\n this.analyze('Start Body:');\n this.state = 'detect:body';\n const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of bodies\n if (this.config.async) {\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(img.tensor, bodyConfig) : [];\n if (this.performance.body) delete this.performance.body;\n } else {\n timeStamp = now();\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(img.tensor, bodyConfig) : [];\n this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Body:');\n\n // run handpose\n this.analyze('Start Hand:');\n this.state = 'detect:hand';\n const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of hands\n if (this.config.async) {\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? handtrack.predict(img.tensor, handConfig) : [];\n if (this.performance.hand) delete this.performance.hand;\n } else {\n timeStamp = now();\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? await handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? await handtrack.predict(img.tensor, handConfig) : [];\n this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Hand:');\n\n // run object detection\n this.analyze('Start Object:');\n this.state = 'detect:object';\n if (this.config.async) {\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(img.tensor, this.config) : [];\n if (this.performance.object) delete this.performance.object;\n } else {\n timeStamp = now();\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(img.tensor, this.config) : [];\n this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Object:');\n\n // if async wait for results\n this.state = 'detect:await';\n if (this.config.async) [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);\n\n // run gesture analysis last\n this.state = 'detect:gesture';\n let gestureRes: GestureResult[] = [];\n if (this.config.gesture.enabled) {\n timeStamp = now();\n gestureRes = [...gesture.face(faceRes as FaceResult[]), ...gesture.body(bodyRes as BodyResult[]), ...gesture.hand(handRes as HandResult[]), ...gesture.iris(faceRes as FaceResult[])];\n if (!this.config.async) this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n else if (this.performance.gesture) delete this.performance.gesture;\n }\n\n this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart);\n const shape = this.process.tensor?.shape || [0, 0, 0, 0];\n this.result = {\n face: faceRes as FaceResult[],\n body: bodyRes as BodyResult[],\n hand: handRes as HandResult[],\n gesture: gestureRes,\n object: objectRes as ObjectResult[],\n performance: this.performance,\n canvas: this.process.canvas,\n timestamp: Date.now(),\n error: null,\n width: shape[2],\n height: shape[1],\n get persons() { return persons.join(faceRes as FaceResult[], bodyRes as BodyResult[], handRes as HandResult[], gestureRes, shape); },\n };\n\n // finally dispose input tensor\n tf.dispose(img.tensor);\n\n // log('Result:', result);\n this.emit('detect');\n this.state = 'idle';\n resolve(this.result);\n });\n }\n\n /** Helper function\n * @param ms - sleep time in miliseconds\n */\n async sleep(ms: number): Promise { // eslint-disable-line class-methods-use-this\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n }\n\n /** internal structure that keeps track of processed videos @hidden */\n #loops: Record = {};\n /** Continously detect video frames\n * @param element - HTMLVideoElement input\n * @param run - boolean run continously or stop if already running, default true\n * @param delay - number delay detection between frames for number of miliseconds, default 0\n */\n async video(element: HTMLVideoElement, run: boolean = true, delay: number = 0) {\n if (run) {\n if (!this.#loops[element.id]) {\n if (this.config.debug) log('video start', element.id);\n this.#loops[element.id] = true;\n }\n if (!element.paused && this.#loops[element.id] && (element.readyState >= 2)) await this.detect(element);\n if (delay > 0) await this.sleep(delay);\n if (this.#loops[element.id]) requestAnimationFrame(() => this.video(element, run, delay));\n } else {\n if (this.config.debug) log('video stop', element.id);\n this.#loops[element.id] = false;\n }\n }\n}\n\n/** Class Human as default export */\n/* eslint no-restricted-exports: [\"off\", { \"restrictedNamedExports\": [\"default\"] }] */\nexport { Human as default, match, draw, models };\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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BAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,gBAAgB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,m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BAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,m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AA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACtJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACnJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AA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;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO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C7DO,IAAMK,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Jb,IAAMC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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", - "names": ["t", "config", "match", "gl", "index", "x", "v", "size", "rgb", "fx", "process", "config", "_a", "_c", "tensor", "rgb", "t", "gl", "el", "_a", "init", "config", "_a", "_c", "_d", "model", "config", "gl", "_a", "config", "op", "t", "_a", "mt", "canvas", "init", "options", "z", "rgb", "localOptions", "x", "cx", "xc", "yc", "to", "options", "x", "connectionsToIndices", "index", "_a", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "emotion", "index", "inCanvas", "options", "inCanvas", "_a", "localOptions", "options", "connected", "inCanvas", "_a", "localOptions", "options", "z", "inCanvas", "_a", "localOptions", "options", "inCanvas", "_a", "localOptions", "options", "inCanvas", "localOptions", "options", "canvas", "init", "anchors", "x", "config", "outputSize", "_a", "t", "outputSize", "model", "inputSize", "x", "config", "size", "_a", "t", "outputSize", "kpt", "distance", "annotations", "body", "_c", "labels", "model", "inputSize", "last", "lastTime", "skipped", "config", "process", "t", "id", "labels", "x", "predict", "outputSize", "connected", "kpt", "model", "lastTime", "cache", "skipped", "load", "config", "x", "predict", "_a", "enhance", "id", "y", "kpt", "connected", "size", "x", "x", "v1", "v2", "size", "inputSize", "anchors", "face", "x", "model", "inputSize", "load", "config", "_a", "decodeBoxes", "t", "_c", "_d", "model", "inputSize", "load", "config", "_a", "index", "face", "x", "z", "_a", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "t", "cache", "model", "inputSize", "predict", "config", "_a", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "id", "size", "face", "t", "index", "load", "model", "last", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "t", "inputSize", "model", "last", "lastTime", "lastCount", "skipped", "load", "config", "_a", "predict", "count", "_c", "_d", "t", "gender", "all", "x", "face", "model", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "model", "cached", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "t", "gender", "age", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_c", "_d", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_c", "_d", "t", "normalize", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "face", "normalize", "v", "x", "z", "size", "face", "_a", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "predict", "el", "options", "point", "point2", "gesture", "body", "face", "iris", "_a", "_c", "_d", "hand", "getBoxSize", "getBoxCenter", "scaleBoxCoordinates", "enlargeBox", "size", "squarifyBox", "normalizeRadians", "computeRotation", "buildTranslationMatrix", "x", "dot", "v1", "v2", "getColumnFrom2DArr", "multiplyTransformMatrices", "size", "buildRotationMatrix", "invertTransformMatrix", "rotatePoint", "anchors", "model", "_a", "_c", "_d", "anchors", "t", "index", "config", "hand", "scaleBoxCoordinates", "lastTime", "handPoseModel", "_a", "_c", "xs", "ys", "rotatePoint", "enlargeBox", "squarifyBox", "getBoxSize", "buildRotationMatrix", "invertTransformMatrix", "getBoxCenter", "dot", "config", "computeRotation", "meshAnnotations", "predict", "config", "annotations", "index", "load", "_a", "models", "inputSize", "skipped", "lastTime", "cache", "loadDetect", "config", "_a", "config", "models", "t", "ratio", "id", "hand", "inputSize", "kpt", "index", "predict", "_a", "skipped", "lastTime", "cache", "connected", "kpt", "calc", "config", "_a", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_b", "annotations", "kp", "t1", "model", "load", "config", "predict", "_a", "t", "options", "clamp", "index", "models_exports", "cache", "body", "kp", "compare", "inputSize", "_a", "t", "outputSize", "kpt", "model", "inputSize", "skipped", "cache", "load", "config", "_a", "kpt", "id", "annotations", "connected", "kp", "body", "predict", "t", "model", "last", "lastTime", "skipped", "inputSize", "load", "config", "process", "_a", "id", "size", "labels", "cx", "x", "predict", "outputSize", "x", "maxSize", "t", "outputStride", "x1", "y2", "x2", "dx", "model", "point", "height", "width", "minConfidence", "x", "_a", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "rgb", "predict", "model", "load", "config", "predict", "_a", "t", "model", "_a", "op", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "_A", "load", "loadDetect", "models", "join", "_a", "_c", "_d", "_e", "_f", "id", "face", "person", "body", "hand", "gesture", "x", "face", "body", "res", "face", "body", "canvas", "atob", "_a", "_c", "_d", "model", "t", "t1", "_a", "init", "process", "_c", "predict", "count", "model", "calc", "t1", "ms", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] + "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar yV=Object.create;var ub=Object.defineProperty;var bV=Object.getOwnPropertyDescriptor;var CV=Object.getOwnPropertyNames;var SV=Object.getPrototypeOf,wV=Object.prototype.hasOwnProperty;var bm=(r=>typeof require!=\"undefined\"?require:typeof Proxy!=\"undefined\"?new Proxy(r,{get:(e,t)=>(typeof require!=\"undefined\"?require:e)[t]}):r)(function(r){if(typeof require!=\"undefined\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var qt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ue=(r,e)=>{for(var t in e)ub(r,t,{get:e[t],enumerable:!0})},IV=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of CV(e))!wV.call(r,n)&&n!==t&&ub(r,n,{get:()=>e[n],enumerable:!(o=bV(e,n))||o.enumerable});return r};var rp=(r,e,t)=>(t=r!=null?yV(SV(r)):{},IV(e||!r||!r.__esModule?ub(t,\"default\",{value:r,enumerable:!0}):t,r));var rv=qt((Pne,tv)=>{tv.exports=It;var xo=null;try{xo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function It(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}It.prototype.__isLong__;Object.defineProperty(It.prototype,\"__isLong__\",{value:!0});function Lr(r){return(r&&r.__isLong__)===!0}It.isLong=Lr;var qI={},KI={};function eu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=KI[r],o)?o:(t=vt(r,(r|0)<0?-1:0,!0),n&&(KI[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=qI[r],o)?o:(t=vt(r,r<0?-1:0,!1),n&&(qI[r]=t),t))}It.fromInt=eu;function yo(r,e){if(isNaN(r))return e?Ji:bo;if(e){if(r<0)return Ji;if(r>=QI)return ev}else{if(r<=-XI)return Mr;if(r+1>=XI)return JI}return r<0?yo(-r,e).neg():vt(r%Ep|0,r/Ep|0,e)}It.fromNumber=yo;function vt(r,e,t){return new It(r,e,t)}It.fromBits=vt;var Rm=Math.pow;function Ib(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return bo;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return Ib(r.substring(1),e,t).neg();for(var n=yo(Rm(t,8)),s=bo,a=0;a>>0:this.low};me.toNumber=function(){return this.unsigned?(this.high>>>0)*Ep+(this.low>>>0):this.high*Ep+(this.low>>>0)};me.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c=\"0\"+c;i=\"\"+c+i}};me.getHighBits=function(){return this.high};me.getHighBitsUnsigned=function(){return this.high>>>0};me.getLowBits=function(){return this.low};me.getLowBitsUnsigned=function(){return this.low>>>0};me.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Mr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&(e&1<=0};me.isOdd=function(){return(this.low&1)===1};me.isEven=function(){return(this.low&1)===0};me.equals=function(e){return Lr(e)||(e=ts(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};me.eq=me.equals;me.notEquals=function(e){return!this.eq(e)};me.neq=me.notEquals;me.ne=me.notEquals;me.lessThan=function(e){return this.comp(e)<0};me.lt=me.lessThan;me.lessThanOrEqual=function(e){return this.comp(e)<=0};me.lte=me.lessThanOrEqual;me.le=me.lessThanOrEqual;me.greaterThan=function(e){return this.comp(e)>0};me.gt=me.greaterThan;me.greaterThanOrEqual=function(e){return this.comp(e)>=0};me.gte=me.greaterThanOrEqual;me.ge=me.greaterThanOrEqual;me.compare=function(e){if(Lr(e)||(e=ts(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};me.comp=me.compare;me.negate=function(){return!this.unsigned&&this.eq(Mr)?Mr:this.not().add(_p)};me.neg=me.negate;me.add=function(e){Lr(e)||(e=ts(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,vt(m<<16|d,c<<16|l,this.unsigned)};me.subtract=function(e){return Lr(e)||(e=ts(e)),this.add(e.neg())};me.sub=me.subtract;me.multiply=function(e){if(this.isZero())return bo;if(Lr(e)||(e=ts(e)),xo){var t=xo.mul(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}if(e.isZero())return bo;if(this.eq(Mr))return e.isOdd()?Mr:bo;if(e.eq(Mr))return this.isOdd()?Mr:bo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(YI)&&e.lt(YI))return yo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,d=0,f=0;return f+=a*c,d+=f>>>16,f&=65535,d+=s*c,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,vt(d<<16|f,l<<16|m,this.unsigned)};me.mul=me.multiply;me.divide=function(e){if(Lr(e)||(e=ts(e)),e.isZero())throw Error(\"division by zero\");if(xo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?xo.div_u:xo.div_s)(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ji:bo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Ji;if(e.gt(this.shru(1)))return ZI;s=Ji}else{if(this.eq(Mr)){if(e.eq(_p)||e.eq(wb))return Mr;if(e.eq(Mr))return _p;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(bo)?e.isNegative()?_p:wb:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Mr))return this.unsigned?Ji:bo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=bo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Rm(2,i-48),u=yo(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=yo(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=_p),s=s.add(u),n=n.sub(c)}return s};me.div=me.divide;me.modulo=function(e){if(Lr(e)||(e=ts(e)),xo){var t=(this.unsigned?xo.rem_u:xo.rem_s)(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};me.mod=me.modulo;me.rem=me.modulo;me.not=function(){return vt(~this.low,~this.high,this.unsigned)};me.and=function(e){return Lr(e)||(e=ts(e)),vt(this.low&e.low,this.high&e.high,this.unsigned)};me.or=function(e){return Lr(e)||(e=ts(e)),vt(this.low|e.low,this.high|e.high,this.unsigned)};me.xor=function(e){return Lr(e)||(e=ts(e)),vt(this.low^e.low,this.high^e.high,this.unsigned)};me.shiftLeft=function(e){return Lr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?vt(this.low<>>32-e,this.unsigned):vt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):vt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};me.shr=me.shiftRight;me.shiftRightUnsigned=function(e){if(Lr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return vt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?vt(t,0,this.unsigned):vt(t>>>e-32,0,this.unsigned)};me.shru=me.shiftRightUnsigned;me.shr_u=me.shiftRightUnsigned;me.toSigned=function(){return this.unsigned?vt(this.low,this.high,!1):this};me.toUnsigned=function(){return this.unsigned?this:vt(this.low,this.high,!0)};me.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};me.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};me.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};It.fromBytes=function(e,t,o){return o?It.fromBytesLE(e,t):It.fromBytesBE(e,t)};It.fromBytesLE=function(e,t){return new It(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};It.fromBytesBE=function(e,t){return new It(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Mv=qt(()=>{});var Lv=qt(()=>{});var Bk=qt((Lk,cC)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(\" \"),p.s1=u(\" \"),p.s2=u(\" \"),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c==\"object\"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(Lk,typeof cC==\"object\"&&cC,typeof define==\"function\"&&define)});var zk=qt((Vk,lC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(Vk,typeof lC==\"object\"&&lC,typeof define==\"function\"&&define)});var Uk=qt((Wk,mC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(Wk,typeof mC==\"object\"&&mC,typeof define==\"function\"&&define)});var Hk=qt((Gk,dC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,d;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,d=[];if(c===(c|0))m=d[0]=c;else for(c=\"\"+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(Gk,typeof dC==\"object\"&&dC,typeof define==\"function\"&&define)});var Kk=qt((qk,fC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,d;return i.w=u=u+1640531527|0,d=c[l+34&127],m=c[l=l+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=c[l]=d^m,i.i=l,d+(u^u>>>16)|0};function p(u,c){var l,m,d,f,h,g=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+\"\\0\",m=0,x=Math.max(x,c.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,l=g[f&127]^=m+h,d=l==0?d+1:0);for(d>=128&&(g[(c&&c.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],l=g[d=d+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[d]=m^l;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(qk,typeof fC==\"object\"&&fC,typeof define==\"function\"&&define)});var Xk=qt((jk,hC)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.b,l=i.c,m=i.d,d=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^d,d=d-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^d,i.a=d-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(jk,typeof hC==\"object\"&&hC,typeof define==\"function\"&&define)});var Yk=qt(()=>{});var Zk=qt((Qk,kd)=>{(function(r,e,t){var o=256,n=6,s=52,a=\"random\",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,w,k){var _=[];w=w==!0?{entropy:!0}:w||{};var $=g(h(w.entropy?[C,b(e)]:C==null?x():C,3),_),A=new d(_),R=function(){for(var D=A.g(n),P=i,M=0;D=u;)D/=2,P/=2,M>>>=1;return(D+M)/P};return R.int32=function(){return A.g(4)|0},R.quick=function(){return A.g(4)/4294967296},R.double=R,g(b(A.S),e),(w.pass||k||function(D,P,M,L){return L&&(L.S&&f(L,A),D.state=function(){return f(A,{})}),M?(t[a]=D,P):D})(R,$,\"global\"in w?w.global:this==t,w.state)}function d(C){var w,k=C.length,_=this,$=0,A=_.i=_.j=0,R=_.S=[];for(k||(C=[k++]);${var eG=Bk(),tG=zk(),rG=Uk(),oG=Hk(),nG=Kk(),sG=Xk(),du=Zk();du.alea=eG;du.xor128=tG;du.xorwow=rG;du.xorshift7=oG;du.xor4096=nG;du.tychei=sG;Jk.exports=du});var Rl=qt(()=>{});var qw=qt(()=>{});var l3=qt(()=>{});var m3=qt(()=>{});var d3=qt(()=>{});var f3=qt((wg,jw)=>{var Kw=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};function t(){return J.buffer!=Oe&&Nt(J.buffer),mt}function o(){return J.buffer!=Oe&&Nt(J.buffer),at}function n(){return J.buffer!=Oe&&Nt(J.buffer),ft}function s(){return J.buffer!=Oe&&Nt(J.buffer),Fr}function a(){return J.buffer!=Oe&&Nt(J.buffer),Ot}function i(){return J.buffer!=Oe&&Nt(J.buffer),Kr}function p(){return J.buffer!=Oe&&Nt(J.buffer),er}var u=typeof e!=\"undefined\"?e:{},c,l;u.ready=new Promise(function(F,B){c=F,l=B});var m;typeof process!=\"undefined\"&&process.listeners&&(m={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var d=Object.assign({},u),f=[],h=\"./this.program\",g=(F,B)=>{throw B},x=typeof window==\"object\",b=typeof importScripts==\"function\",C=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",w=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,A,R,D;function P(F){if(F instanceof Hi)return;q(\"exiting due to exception: \"+F)}if(C){b?k=Rl().dirname(k)+\"/\":k=__dirname+\"/\";var M,L;typeof bm==\"function\"&&(M=qw(),L=Rl()),$=(B,ne)=>(B=L.normalize(B),M.readFileSync(B,ne?void 0:\"utf8\")),R=B=>{var ne=$(B,!0);return ne.buffer||(ne=new Uint8Array(ne)),ne},A=(B,ne,fe)=>{B=L.normalize(B),M.readFile(B,function(Te,Ze){Te?fe(Te):ne(Ze.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),f=process.argv.slice(2),process.on(\"uncaughtException\",function(B){if(!(B instanceof Hi))throw B}),process.on(\"unhandledRejection\",function(B){throw B}),g=(B,ne)=>{if(Fo())throw process.exitCode=B,ne;P(ne),process.exit(B)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=l3()}catch(B){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),B}global.Worker=F.Worker}else(x||b)&&(b?k=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(k=document.currentScript.src),typeof r!=\"undefined\"&&r&&(k=r),k.indexOf(\"blob:\")!==0?k=k.substr(0,k.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):k=\"\",C||($=F=>{var B=new XMLHttpRequest;return B.open(\"GET\",F,!1),B.send(null),B.responseText},b&&(R=F=>{var B=new XMLHttpRequest;return B.open(\"GET\",F,!1),B.responseType=\"arraybuffer\",B.send(null),new Uint8Array(B.response)}),A=(F,B,ne)=>{var fe=new XMLHttpRequest;fe.open(\"GET\",F,!0),fe.responseType=\"arraybuffer\",fe.onload=()=>{if(fe.status==200||fe.status==0&&fe.response){B(fe.response);return}ne()},fe.onerror=ne,fe.send(null)}),D=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=m3().performance);var W=console.log.bind(console),V=console.warn.bind(console);C&&(W=F=>M.writeSync(1,F+`\n`),V=F=>M.writeSync(2,F+`\n`));var U=u.print||W,q=u.printErr||V;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var H=4,j=Atomics.load,X=Atomics.store,Z=Atomics.compareExchange,ee;u.wasmBinary&&(ee=u.wasmBinary);var Y=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&Xu(\"no native wasm support detected\");var J,ie,pe=!1,he;function we(F,B){F||Xu(B)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function $e(F,B,ne){for(var fe=B+ne,Te=B;F[Te]&&!(Te>=fe);)++Te;if(Te-B>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(B,Te):F.subarray(B,Te));for(var Ze=\"\";B>10,56320|Qr&1023)}}return Ze}function Le(F,B){return F?$e(o(),F,B):\"\"}function nt(F,B,ne,fe){if(!(fe>0))return 0;for(var Te=ne,Ze=ne+fe-1,Ae=0;Ae=55296&&Pe<=57343){var zt=F.charCodeAt(++Ae);Pe=65536+((Pe&1023)<<10)|zt&1023}if(Pe<=127){if(ne>=Ze)break;B[ne++]=Pe}else if(Pe<=2047){if(ne+1>=Ze)break;B[ne++]=192|Pe>>6,B[ne++]=128|Pe&63}else if(Pe<=65535){if(ne+2>=Ze)break;B[ne++]=224|Pe>>12,B[ne++]=128|Pe>>6&63,B[ne++]=128|Pe&63}else{if(ne+3>=Ze)break;B[ne++]=240|Pe>>18,B[ne++]=128|Pe>>12&63,B[ne++]=128|Pe>>6&63,B[ne++]=128|Pe&63}}return B[ne]=0,ne-Te}function pt(F,B,ne){return nt(F,o(),B,ne)}var Oe,mt,at,ft,wt,Fr,Ot,Kr,er;w&&(Oe=u.buffer);function Nt(F){Oe=F,u.HEAP8=mt=new Int8Array(F),u.HEAP16=ft=new Int16Array(F),u.HEAP32=Fr=new Int32Array(F),u.HEAPU8=at=new Uint8Array(F),u.HEAPU16=wt=new Uint16Array(F),u.HEAPU32=Ot=new Uint32Array(F),u.HEAPF32=Kr=new Float32Array(F),u.HEAPF64=er=new Float64Array(F)}var tr=u.INITIAL_MEMORY||16777216;if(w)J=u.wasmMemory,Oe=u.buffer;else if(u.wasmMemory)J=u.wasmMemory;else if(J=new WebAssembly.Memory({initial:tr/65536,maximum:32768,shared:!0}),!(J.buffer instanceof SharedArrayBuffer))throw q(\"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\"),C&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");J&&(Oe=J.buffer),tr=Oe.byteLength,Nt(Oe);var rr,jr=[],Xr=[],pr=[],Js=!1;function Fo(){return Y}function Ka(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)Ac(u.preRun.shift());Pc(jr)}function Kt(){Js=!0,!w&&Pc(Xr)}function ea(){if(!w){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)SI(u.postRun.shift());Pc(pr)}}function Ac(F){jr.unshift(F)}function Rc(F){Xr.unshift(F)}function SI(F){pr.unshift(F)}var ja=0,ju=null,ta=null;function wI(F){ja++,u.monitorRunDependencies&&u.monitorRunDependencies(ja)}function II(F){if(ja--,u.monitorRunDependencies&&u.monitorRunDependencies(ja),ja==0&&(ju!==null&&(clearInterval(ju),ju=null),ta)){var B=ta;ta=null,B()}}function Xu(F){w?postMessage({cmd:\"onAbort\",arg:F}):u.onAbort&&u.onAbort(F),F=\"Aborted(\"+F+\")\",q(F),pe=!0,he=1,F+=\". Build with -sASSERTIONS for more info.\";var B=new WebAssembly.RuntimeError(F);throw l(B),B}var Ix=\"data:application/octet-stream;base64,\";function jl(F){return F.startsWith(Ix)}function Fc(F){return F.startsWith(\"file://\")}var fr;fr=\"tfjs-backend-wasm-threaded-simd.wasm\",jl(fr)||(fr=_(fr));function Xl(F){try{if(F==fr&&ee)return new Uint8Array(ee);if(R)return R(F);throw\"both async and sync fetching of the wasm failed\"}catch(B){Xu(B)}}function vx(){if(!ee&&(x||b)){if(typeof fetch==\"function\"&&!Fc(fr))return fetch(fr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+fr+\"'\";return F.arrayBuffer()}).catch(function(){return Xl(fr)});if(A)return new Promise(function(F,B){A(fr,function(ne){F(new Uint8Array(ne))},B)})}return Promise.resolve().then(function(){return Xl(fr)})}function kx(){var F={env:im,wasi_snapshot_preview1:im};function B(Ae,Pe){var zt=Ae.exports;if(u.asm=zt,Ox(u.asm._emscripten_tls_init),rr=u.asm.__indirect_function_table,Rc(u.asm.__wasm_call_ctors),ie=Pe,!w){var Qr=De.unusedWorkers.length;De.unusedWorkers.forEach(function(oa){De.loadWasmModuleToWorker(oa,function(){--Qr||II(\"wasm-instantiate\")})})}}w||wI(\"wasm-instantiate\");function ne(Ae){B(Ae.instance,Ae.module)}function fe(Ae){return vx().then(function(Pe){return WebAssembly.instantiate(Pe,F)}).then(function(Pe){return Pe}).then(Ae,function(Pe){q(\"failed to asynchronously prepare wasm: \"+Pe),Xu(Pe)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming==\"function\"&&!jl(fr)&&!Fc(fr)&&!C&&typeof fetch==\"function\"?fetch(fr,{credentials:\"same-origin\"}).then(function(Ae){var Pe=WebAssembly.instantiateStreaming(Ae,F);return Pe.then(ne,function(zt){return q(\"wasm streaming compile failed: \"+zt),q(\"falling back to ArrayBuffer instantiation\"),fe(ne)})}):fe(ne)}if(u.instantiateWasm)try{var Ze=u.instantiateWasm(F,B);return Ze}catch(Ae){q(\"Module.instantiateWasm callback failed with error: \"+Ae),l(Ae)}return Te().catch(l),{}}var Nx,vI,Tx={};function Hi(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function _x(F){var B=De.pthreads[F];delete De.pthreads[F],B.terminate(),sb(F),De.runningWorkers.splice(De.runningWorkers.indexOf(B),1),B.pthread_ptr=0}function Ex(F){var B=De.pthreads[F];B.postMessage({cmd:\"cancel\"})}function Dc(F){var B=De.pthreads[F];we(B),De.returnWorkerToPool(B)}function Yl(F){var B=De.getNewWorker();if(!B)return 6;De.runningWorkers.push(B),De.pthreads[F.pthread_ptr]=B,B.pthread_ptr=F.pthread_ptr;var ne={cmd:\"run\",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return B.runPthread=()=>{ne.time=performance.now(),B.postMessage(ne,F.transferList)},B.loaded&&(B.runPthread(),delete B.runPthread),0}var Ql={varargs:void 0,get:function(){Ql.varargs+=4;var F=s()[Ql.varargs-4>>2];return F},getStr:function(F){var B=Le(F);return B}};function Oc(F){if(w)return Xa(1,1,F);he=F,Fo()||(De.terminateAllThreads(),u.onExit&&u.onExit(F),pe=!0),g(F,new Hi(F))}function kI(F,B){if(he=F,!B&&w)throw Jl(F),\"unwind\";Oc(F)}var Zl=kI;function $x(F){if(F instanceof Hi||F==\"unwind\")return he;g(1,F)}var De={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){w?De.initWorker():De.initMainThread()},initMainThread:function(){for(var F=8;F--;)De.allocateUnusedWorker()},initWorker:function(){Y=!1},setExitStatus:function(F){he=F},terminateAllThreads:function(){for(var F of Object.values(De.pthreads))De.returnWorkerToPool(F);for(var F of De.unusedWorkers)F.terminate();De.unusedWorkers=[]},returnWorkerToPool:function(F){var B=F.pthread_ptr;delete De.pthreads[B],De.unusedWorkers.push(F),De.runningWorkers.splice(De.runningWorkers.indexOf(F),1),F.pthread_ptr=0,sb(B)},receiveObjectTransfer:function(F){},threadInitTLS:function(){De.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,B){F.onmessage=ne=>{var fe=ne.data,Te=fe.cmd;if(F.pthread_ptr&&(De.currentProxiedOperationCallerThread=F.pthread_ptr),fe.targetThread&&fe.targetThread!=dm()){var Ze=De.pthreads[fe.targetThread];Ze?Ze.postMessage(fe,fe.transferList):q('Internal error! Worker sent a message \"'+Te+'\" to target pthread '+fe.targetThread+\", but that thread no longer exists!\"),De.currentProxiedOperationCallerThread=void 0;return}Te===\"processProxyingQueue\"?Mc(fe.queue):Te===\"spawnThread\"?Yl(fe):Te===\"cleanupThread\"?Dc(fe.thread):Te===\"killThread\"?_x(fe.thread):Te===\"cancelThread\"?Ex(fe.thread):Te===\"loaded\"?(F.loaded=!0,B&&B(F),F.runPthread&&(F.runPthread(),delete F.runPthread)):Te===\"print\"?U(\"Thread \"+fe.threadId+\": \"+fe.text):Te===\"printErr\"?q(\"Thread \"+fe.threadId+\": \"+fe.text):Te===\"alert\"?alert(\"Thread \"+fe.threadId+\": \"+fe.text):fe.target===\"setimmediate\"?F.postMessage(fe):Te===\"onAbort\"?u.onAbort&&u.onAbort(fe.arg):Te&&q(\"worker sent an unknown command \"+Te),De.currentProxiedOperationCallerThread=void 0},F.onerror=ne=>{var fe=\"worker sent an error!\";throw q(fe+\" \"+ne.filename+\":\"+ne.lineno+\": \"+ne.message),ne},C&&(F.on(\"message\",function(ne){F.onmessage({data:ne})}),F.on(\"error\",function(ne){F.onerror(ne)}),F.on(\"detachedExit\",function(){})),F.postMessage({cmd:\"load\",urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:J,wasmModule:ie})},allocateUnusedWorker:function(){var F=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");De.unusedWorkers.push(new Worker(F))},getNewWorker:function(){return De.unusedWorkers.length==0&&(De.allocateUnusedWorker(),De.loadWasmModuleToWorker(De.unusedWorkers[0])),De.unusedWorkers.pop()}};u.PThread=De;function Pc(F){for(;F.length>0;)F.shift()(u)}function Ax(F){var B=ab(),ne=F();return fm(B),ne}function NI(F){return F}function TI(F){var B=/\\b_Z[\\w\\d_]+/g;return F.replace(B,function(ne){var fe=ne;return ne===fe?ne:fe+\" [\"+ne+\"]\"})}function Rx(){var F=dm(),B=s()[F+44>>2],ne=s()[F+48>>2],fe=B-ne;DI(B,fe),fm(B)}u.establishStackSpace=Rx;function Jl(F){if(w)return Xa(2,0,F);try{Zl(F)}catch(B){$x(B)}}var Yu=[];function Fx(F){var B=Yu[F];return B||(F>=Yu.length&&(Yu.length=F+1),Yu[F]=B=rr.get(F)),B}function Dx(F,B){var ne=Fx(F)(B);Fo()?De.setExitStatus(ne):FI(ne)}u.invokeEntryPoint=Dx;function _I(){var F=new Error;if(!F.stack){try{throw new Error}catch(B){F=B}if(!F.stack)return\"(no stack trace available)\"}return F.stack.toString()}function Ox(F){De.tlsInitFunctions.push(F)}function Px(F,B){t().set(F,B)}function Mx(F){$I(F,!b,1,!x),De.threadInitTLS()}function Lx(F){w?postMessage({cmd:\"cleanupThread\",thread:F}):Dc(F)}function em(F,B,ne,fe){return w?Xa(3,1,F,B,ne,fe):tm(F,B,ne,fe)}function tm(F,B,ne,fe){if(typeof SharedArrayBuffer==\"undefined\")return q(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Te=[],Ze=0;if(w&&(Te.length===0||Ze))return em(F,B,ne,fe);if(Ze)return Ze;var Ae={startRoutine:ne,pthread_ptr:F,arg:fe,transferList:Te};return w?(Ae.cmd=\"spawnThread\",postMessage(Ae,Te),0):Yl(Ae)}function Bx(){return 2097152}var Vx=!0;function zx(){return Vx}function Mc(F){Atomics.store(s(),F>>2,1),dm()&&RI(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=Mc;function Wx(F,B,ne,fe){if(F==B)setTimeout(()=>Mc(fe));else if(w)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:fe});else{var Te=De.pthreads[F];if(!Te)return;Te.postMessage({cmd:\"processProxyingQueue\",queue:fe})}return 1}function Ux(F,B,ne){return-1}function Gx(){Xu(\"\")}function qi(F){qi.shown||(qi.shown={}),qi.shown[F]||(qi.shown[F]=1,C&&(F=\"warning: \"+F),q(F))}function Hx(){C||b||qi(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function qx(){return Date.now()}function rm(){return 2147483648}function Kx(){return rm()}var Qu;C?Qu=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:w?Qu=()=>performance.now()-u.__performance_now_clock_drift:Qu=()=>performance.now();function jx(F,B,ne){o().copyWithin(F,B,B+ne)}function Xx(){return C?d3().cpus().length:navigator.hardwareConcurrency}function Xa(F,B){var ne=arguments.length-2,fe=arguments;return Ax(()=>{for(var Te=ne,Ze=hm(Te*8),Ae=Ze>>3,Pe=0;Pe>3,Te=0;Te>>16),Nt(J.buffer),1}catch(B){}}function Zx(F){var B=o().length;if(F=F>>>0,F<=B)return!1;var ne=rm();if(F>ne)return!1;let fe=(zt,Qr)=>zt+(Qr-zt%Qr)%Qr;for(var Te=1;Te<=4;Te*=2){var Ze=B*(1+.2/Te);Ze=Math.min(Ze,F+100663296);var Ae=Math.min(ne,fe(Math.max(F,Ze),65536)),Pe=Qx(Ae);if(Pe)return!0}return!1}function Jx(){throw\"unwind\"}function om(F){return w?Xa(4,1,F):52}function nm(F,B,ne,fe,Te){return w?Xa(5,1,F,B,ne,fe,Te):70}var ey=[null,[],[]];function ty(F,B){var ne=ey[F];B===0||B===10?((F===1?U:q)($e(ne,0)),ne.length=0):ne.push(B)}function sm(F,B,ne,fe){if(w)return Xa(6,1,F,B,ne,fe);for(var Te=0,Ze=0;Ze>2],Pe=a()[B+4>>2];B+=8;for(var zt=0;zt>2]=Te,0}function am(F){var B=u[\"_\"+F];return B}function ry(F,B,ne,fe,Te){var Ze={string:Dr=>{var tp=0;if(Dr!=null&&Dr!==0){var MI=(Dr.length<<2)+1;tp=hm(MI),pt(Dr,tp,MI)}return tp},array:Dr=>{var tp=hm(Dr.length);return Px(Dr,tp),tp}};function Ae(Dr){return B===\"string\"?Le(Dr):B===\"boolean\"?Boolean(Dr):Dr}var Pe=am(F),zt=[],Qr=0;if(fe)for(var oa=0;oaAe===\"number\"||Ae===\"boolean\"),Ze=B!==\"string\";return Ze&&Te&&!fe?am(F):function(){return ry(F,B,ne,arguments,fe)}}De.init();var ny=[null,Oc,Jl,em,om,nm,sm],im={__emscripten_init_main_thread_js:Mx,__emscripten_thread_cleanup:Lx,__pthread_create_js:tm,_emscripten_default_pthread_stack_size:Bx,_emscripten_get_now_is_monotonic:zx,_emscripten_notify_task_queue:Wx,_emscripten_set_offscreencanvas_size:Ux,abort:Gx,emscripten_check_blocking_allowed:Hx,emscripten_date_now:qx,emscripten_get_heap_max:Kx,emscripten_get_now:Qu,emscripten_memcpy_big:jx,emscripten_num_logical_cores:Xx,emscripten_receive_on_main_thread_js:Yx,emscripten_resize_heap:Zx,emscripten_unwind_to_js_event_loop:Jx,exit:Zl,fd_close:om,fd_seek:nm,fd_write:sm,memory:J||u.wasmMemory},EI=kx(),sy=u.___wasm_call_ctors=function(){return(sy=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},ay=u._init=function(){return(ay=u._init=u.asm.init).apply(null,arguments)},iy=u._init_with_threads_count=function(){return(iy=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},uy=u._get_threads_count=function(){return(uy=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},py=u._register_tensor=function(){return(py=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},cy=u._dispose_data=function(){return(cy=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},ly=u._dispose=function(){return(ly=u._dispose=u.asm.dispose).apply(null,arguments)},my=u._Abs=function(){return(my=u._Abs=u.asm.Abs).apply(null,arguments)},dy=u._Add=function(){return(dy=u._Add=u.asm.Add).apply(null,arguments)},fy=u._AddN=function(){return(fy=u._AddN=u.asm.AddN).apply(null,arguments)},hy=u._All=function(){return(hy=u._All=u.asm.All).apply(null,arguments)},gy=u._Any=function(){return(gy=u._Any=u.asm.Any).apply(null,arguments)},xy=u._ArgMax=function(){return(xy=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yy=u._AvgPool=function(){return(yy=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},by=u._BatchMatMul=function(){return(by=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Cy=u._Ceil=function(){return(Cy=u._Ceil=u.asm.Ceil).apply(null,arguments)},Sy=u._ClipByValue=function(){return(Sy=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},wy=u._Conv2D=function(){return(wy=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Iy=u._Conv2DBackpropInput=function(){return(Iy=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},vy=u._Cos=function(){return(vy=u._Cos=u.asm.Cos).apply(null,arguments)},ky=u._Cosh=function(){return(ky=u._Cosh=u.asm.Cosh).apply(null,arguments)},Ny=u._CropAndResize=function(){return(Ny=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Ty=u._Cumprod=function(){return(Ty=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},_y=u._Cumsum=function(){return(_y=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ey=u._DepthToSpace=function(){return(Ey=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},$y=u._DepthwiseConv2dNative=function(){return($y=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Ay=u._Elu=function(){return(Ay=u._Elu=u.asm.Elu).apply(null,arguments)},Ry=u._Equal=function(){return(Ry=u._Equal=u.asm.Equal).apply(null,arguments)},Fy=u._Exp=function(){return(Fy=u._Exp=u.asm.Exp).apply(null,arguments)},Dy=u._FlipLeftRight=function(){return(Dy=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},Oy=u._Floor=function(){return(Oy=u._Floor=u.asm.Floor).apply(null,arguments)},Py=u._FloorDiv=function(){return(Py=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},My=u._FusedBatchNorm=function(){return(My=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},Ly=u._FusedConv2D=function(){return(Ly=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},By=u._FusedDepthwiseConv2D=function(){return(By=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},Vy=u._Gather=function(){return(Vy=u._Gather=u.asm.Gather).apply(null,arguments)},zy=u._GatherNd=function(){return(zy=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},Wy=u._Greater=function(){return(Wy=u._Greater=u.asm.Greater).apply(null,arguments)},Uy=u._GreaterEqual=function(){return(Uy=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},Gy=u._IsNan=function(){return(Gy=u._IsNan=u.asm.IsNan).apply(null,arguments)},Hy=u._LeakyRelu=function(){return(Hy=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},qy=u._Less=function(){return(qy=u._Less=u.asm.Less).apply(null,arguments)},Ky=u._LessEqual=function(){return(Ky=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},jy=u._Log=function(){return(jy=u._Log=u.asm.Log).apply(null,arguments)},Xy=u._LogicalAnd=function(){return(Xy=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},Yy=u._LogicalNot=function(){return(Yy=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},Qy=u._LogicalOr=function(){return(Qy=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},Zy=u._LogicalXor=function(){return(Zy=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},Jy=u._Max=function(){return(Jy=u._Max=u.asm.Max).apply(null,arguments)},eb=u._MaxPool=function(){return(eb=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},um=u._Maximum=function(){return(um=u._Maximum=u.asm.Maximum).apply(null,arguments)},pm=u._Mean=function(){return(pm=u._Mean=u.asm.Mean).apply(null,arguments)},Bc=u._Min=function(){return(Bc=u._Min=u.asm.Min).apply(null,arguments)},tb=u._Minimum=function(){return(tb=u._Minimum=u.asm.Minimum).apply(null,arguments)},rb=u._MirrorPad=function(){return(rb=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},Zu=u._Multiply=function(){return(Zu=u._Multiply=u.asm.Multiply).apply(null,arguments)},cm=u._Neg=function(){return(cm=u._Neg=u.asm.Neg).apply(null,arguments)},Ju=u._NonMaxSuppressionV3=function(){return(Ju=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},ep=u._NonMaxSuppressionV4=function(){return(ep=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},ob=u._NonMaxSuppressionV5=function(){return(ob=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},G=u._NotEqual=function(){return(G=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},oe=u._OneHot=function(){return(oe=u._OneHot=u.asm.OneHot).apply(null,arguments)},ke=u._PadV2=function(){return(ke=u._PadV2=u.asm.PadV2).apply(null,arguments)},je=u._Pow=function(){return(je=u._Pow=u.asm.Pow).apply(null,arguments)},Tt=u._Prelu=function(){return(Tt=u._Prelu=u.asm.Prelu).apply(null,arguments)},_t=u._Prod=function(){return(_t=u._Prod=u.asm.Prod).apply(null,arguments)},qe=u._RealDiv=function(){return(qe=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},We=u._Reciprocal=function(){return(We=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},Vt=u._Relu=function(){return(Vt=u._Relu=u.asm.Relu).apply(null,arguments)},Yr=u._Relu6=function(){return(Yr=u._Relu6=u.asm.Relu6).apply(null,arguments)},ra=u._ResizeBilinear=function(){return(ra=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},lm=u._ResizeNearestNeighbor=function(){return(lm=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},Vc=u._Reverse=function(){return(Vc=u._Reverse=u.asm.Reverse).apply(null,arguments)},nb=u._RotateWithOffset=function(){return(nb=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},hr=u._Round=function(){return(hr=u._Round=u.asm.Round).apply(null,arguments)},Ya=u._Rsqrt=function(){return(Ya=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},mm=u._ScatterNd=function(){return(mm=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},BB=u._SelectV2=function(){return(BB=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},VB=u._Sigmoid=function(){return(VB=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},zB=u._Sin=function(){return(zB=u._Sin=u.asm.Sin).apply(null,arguments)},WB=u._Softmax=function(){return(WB=u._Softmax=u.asm.Softmax).apply(null,arguments)},UB=u._SparseFillEmptyRows=function(){return(UB=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},GB=u._SparseReshape=function(){return(GB=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},HB=u._SparseSegmentReduction=function(){return(HB=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},qB=u._Sqrt=function(){return(qB=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},KB=u._Square=function(){return(KB=u._Square=u.asm.Square).apply(null,arguments)},jB=u._SquaredDifference=function(){return(jB=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},XB=u._Step=function(){return(XB=u._Step=u.asm.Step).apply(null,arguments)},YB=u._StridedSlice=function(){return(YB=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},QB=u._Sub=function(){return(QB=u._Sub=u.asm.Sub).apply(null,arguments)},ZB=u._Sum=function(){return(ZB=u._Sum=u.asm.Sum).apply(null,arguments)},JB=u._Tan=function(){return(JB=u._Tan=u.asm.Tan).apply(null,arguments)},eV=u._Tanh=function(){return(eV=u._Tanh=u.asm.Tanh).apply(null,arguments)},tV=u._Tile=function(){return(tV=u._Tile=u.asm.Tile).apply(null,arguments)},rV=u._TopK=function(){return(rV=u._TopK=u.asm.TopK).apply(null,arguments)},oV=u._Transform=function(){return(oV=u._Transform=u.asm.Transform).apply(null,arguments)},nV=u._Transpose=function(){return(nV=u._Transpose=u.asm.Transpose).apply(null,arguments)},sV=u.__FusedMatMul=function(){return(sV=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},aV=u._malloc=function(){return(aV=u._malloc=u.asm.malloc).apply(null,arguments)},iV=u._free=function(){return(iV=u._free=u.asm.free).apply(null,arguments)},uV=u.__emscripten_tls_init=function(){return(uV=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},dm=u._pthread_self=function(){return(dm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},pV=u.___errno_location=function(){return(pV=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},$I=u.__emscripten_thread_init=function(){return($I=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},cV=u.__emscripten_thread_crashed=function(){return(cV=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},lV=u._emscripten_main_thread_process_queued_calls=function(){return(lV=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},mV=u._emscripten_main_browser_thread_id=function(){return(mV=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},AI=u._emscripten_run_in_main_runtime_thread_js=function(){return(AI=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},dV=u._emscripten_dispatch_to_thread_=function(){return(dV=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},RI=u.__emscripten_proxy_execute_task_queue=function(){return(RI=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},sb=u.__emscripten_thread_free_data=function(){return(sb=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},FI=u.__emscripten_thread_exit=function(){return(FI=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},DI=u._emscripten_stack_set_limits=function(){return(DI=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},ab=u.stackSave=function(){return(ab=u.stackSave=u.asm.stackSave).apply(null,arguments)},fm=u.stackRestore=function(){return(fm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},hm=u.stackAlloc=function(){return(hm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},fV=u.dynCall_iijjiiii=function(){return(fV=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},hV=u.dynCall_jiji=function(){return(hV=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Fo,u.wasmMemory=J,u.cwrap=oy,u.ExitStatus=Hi,u.PThread=De;var gm;ta=function F(){gm||OI(),gm||(ta=F)};function OI(F){if(F=F||f,ja>0)return;if(w){c(u),Kt(),postMessage({cmd:\"loaded\"});return}if(Ka(),ja>0)return;function B(){gm||(gm=!0,u.calledRun=!0,!pe&&(Kt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),ea()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),B()},1)):B()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();OI();var xm;m&&(xm={uncaughtException:process.listeners(\"uncaughtException\").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var ym;if(typeof WasmBackendModule!=\"undefined\")ym=WasmBackendModule;else if(typeof e!=\"undefined\")ym=e;else throw new Error(\"Could not find wasm module in post.js\");if(xm){var gV=ym._dispose;ym._dispose=function(){gV(),xm.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),xm.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return e.ready}})();typeof wg==\"object\"&&typeof jw==\"object\"?jw.exports=Kw:typeof define==\"function\"&&define.amd?define([],function(){return Kw}):typeof wg==\"object\"&&(wg.WasmBackendModuleThreadedSimd=Kw)});var g3=qt((kkt,h3)=>{h3.exports.wasmWorkerContents=`\"use strict\";var Module={};var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require(\"worker_threads\");var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",data=>onmessage({data:data}));var fs=require(\"fs\");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,\"utf8\"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+\"\n\");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:Module[\"_pthread_self\"]()})}var err=threadPrintErr;self.alert=threadAlert;Module[\"instantiateWasm\"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);receiveInstance(instance);Module[\"wasmModule\"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob==\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd===\"run\"){Module[\"__performance_now_clock_drift\"]=performance.now()-e.data.time;Module[\"__emscripten_thread_init\"](e.data.pthread_ptr,0,0,1);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module[\"executeNotifiedProxyingQueue\"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module[\"invokeEntryPoint\"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!=\"unwind\"){if(ex instanceof Module[\"ExitStatus\"]){if(Module[\"keepRuntimeAlive\"]()){}else{Module[\"__emscripten_thread_exit\"](ex.status)}}else{throw ex}}}}else if(e.data.cmd===\"cancel\"){if(Module[\"_pthread_self\"]()){Module[\"__emscripten_thread_exit\"](-1)}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processProxyingQueue\"){if(initializedJS){Module[\"executeNotifiedProxyingQueue\"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){if(Module[\"__emscripten_thread_crashed\"]){Module[\"__emscripten_thread_crashed\"]()}throw ex}};`});var x3=qt((Ig,Yw)=>{var Xw=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!=\"undefined\"?e:{},o,n;t.ready=new Promise(function(G,oe){o=G,n=oe});var s;typeof process!=\"undefined\"&&process.listeners&&(s={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var a=Object.assign({},t),i=[],p=\"./this.program\",u=(G,oe)=>{throw oe},c=typeof window==\"object\",l=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",d=\"\";function f(G){return t.locateFile?t.locateFile(G,d):d+G}var h,g,x,b;function C(G){if(G instanceof ju)return;$(\"exiting due to exception: \"+G)}if(m){l?d=Rl().dirname(d)+\"/\":d=__dirname+\"/\";var w,k;typeof bm==\"function\"&&(w=qw(),k=Rl()),h=(G,oe)=>(G=k.normalize(G),w.readFileSync(G,oe?void 0:\"utf8\")),x=G=>{var oe=h(G,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},g=(G,oe,ke)=>{G=k.normalize(G),w.readFile(G,function(je,Tt){je?ke(je):oe(Tt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(G){if(!(G instanceof ju))throw G}),process.on(\"unhandledRejection\",function(G){throw G}),u=(G,oe)=>{if(at())throw process.exitCode=G,oe;C(oe),process.exit(G)},t.inspect=function(){return\"[Emscripten Module object]\"}}else(c||l)&&(l?d=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf(\"blob:\")!==0?d=d.substr(0,d.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):d=\"\",h=G=>{var oe=new XMLHttpRequest;return oe.open(\"GET\",G,!1),oe.send(null),oe.responseText},l&&(x=G=>{var oe=new XMLHttpRequest;return oe.open(\"GET\",G,!1),oe.responseType=\"arraybuffer\",oe.send(null),new Uint8Array(oe.response)}),g=(G,oe,ke)=>{var je=new XMLHttpRequest;je.open(\"GET\",G,!0),je.responseType=\"arraybuffer\",je.onload=()=>{if(je.status==200||je.status==0&&je.response){oe(je.response);return}ke()},je.onerror=ke,je.send(null)},b=G=>document.title=G);var _=t.print||console.log.bind(console),$=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var A=4,R;t.wasmBinary&&(R=t.wasmBinary);var D=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&pr(\"no native wasm support detected\");var P,M=!1,L;function W(G,oe){G||pr(oe)}var V=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(G,oe,ke){for(var je=oe+ke,Tt=oe;G[Tt]&&!(Tt>=je);)++Tt;if(Tt-oe>16&&G.buffer&&V)return V.decode(G.subarray(oe,Tt));for(var _t=\"\";oe>10,56320|Yr&1023)}}return _t}function q(G,oe){return G?U(ee,G,oe):\"\"}function H(G,oe,ke,je){if(!(je>0))return 0;for(var Tt=ke,_t=ke+je-1,qe=0;qe=55296&&We<=57343){var Vt=G.charCodeAt(++qe);We=65536+((We&1023)<<10)|Vt&1023}if(We<=127){if(ke>=_t)break;oe[ke++]=We}else if(We<=2047){if(ke+1>=_t)break;oe[ke++]=192|We>>6,oe[ke++]=128|We&63}else if(We<=65535){if(ke+2>=_t)break;oe[ke++]=224|We>>12,oe[ke++]=128|We>>6&63,oe[ke++]=128|We&63}else{if(ke+3>=_t)break;oe[ke++]=240|We>>18,oe[ke++]=128|We>>12&63,oe[ke++]=128|We>>6&63,oe[ke++]=128|We&63}}return oe[ke]=0,ke-Tt}function j(G,oe,ke){return H(G,ee,oe,ke)}var X,Z,ee,Y,J,ie,pe,he,we;function ve(G){X=G,t.HEAP8=Z=new Int8Array(G),t.HEAP16=Y=new Int16Array(G),t.HEAP32=ie=new Int32Array(G),t.HEAPU8=ee=new Uint8Array(G),t.HEAPU16=J=new Uint16Array(G),t.HEAPU32=pe=new Uint32Array(G),t.HEAPF32=he=new Float32Array(G),t.HEAPF64=we=new Float64Array(G)}var $e=t.INITIAL_MEMORY||16777216,Le,nt=[],pt=[],Oe=[],mt=!1;function at(){return D}function ft(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Ot(t.preRun.shift());ta(nt)}function wt(){mt=!0,ta(pt)}function Fr(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)er(t.postRun.shift());ta(Oe)}function Ot(G){nt.unshift(G)}function Kr(G){pt.unshift(G)}function er(G){Oe.unshift(G)}var Nt=0,tr=null,rr=null;function jr(G){Nt++,t.monitorRunDependencies&&t.monitorRunDependencies(Nt)}function Xr(G){if(Nt--,t.monitorRunDependencies&&t.monitorRunDependencies(Nt),Nt==0&&(tr!==null&&(clearInterval(tr),tr=null),rr)){var oe=rr;rr=null,oe()}}function pr(G){t.onAbort&&t.onAbort(G),G=\"Aborted(\"+G+\")\",$(G),M=!0,L=1,G+=\". Build with -sASSERTIONS for more info.\";var oe=new WebAssembly.RuntimeError(G);throw n(oe),oe}var Js=\"data:application/octet-stream;base64,\";function Fo(G){return G.startsWith(Js)}function Ka(G){return G.startsWith(\"file://\")}var Kt;Kt=\"tfjs-backend-wasm.wasm\",Fo(Kt)||(Kt=f(Kt));function ea(G){try{if(G==Kt&&R)return new Uint8Array(R);if(x)return x(G);throw\"both async and sync fetching of the wasm failed\"}catch(oe){pr(oe)}}function Ac(){if(!R&&(c||l)){if(typeof fetch==\"function\"&&!Ka(Kt))return fetch(Kt,{credentials:\"same-origin\"}).then(function(G){if(!G.ok)throw\"failed to load wasm binary file at '\"+Kt+\"'\";return G.arrayBuffer()}).catch(function(){return ea(Kt)});if(g)return new Promise(function(G,oe){g(Kt,function(ke){G(new Uint8Array(ke))},oe)})}return Promise.resolve().then(function(){return ea(Kt)})}function Rc(){var G={env:Oc,wasi_snapshot_preview1:Oc};function oe(qe,We){var Vt=qe.exports;t.asm=Vt,P=t.asm.memory,ve(P.buffer),Le=t.asm.__indirect_function_table,Kr(t.asm.__wasm_call_ctors),Xr(\"wasm-instantiate\")}jr(\"wasm-instantiate\");function ke(qe){oe(qe.instance)}function je(qe){return Ac().then(function(We){return WebAssembly.instantiate(We,G)}).then(function(We){return We}).then(qe,function(We){$(\"failed to asynchronously prepare wasm: \"+We),pr(We)})}function Tt(){return!R&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Fo(Kt)&&!Ka(Kt)&&!m&&typeof fetch==\"function\"?fetch(Kt,{credentials:\"same-origin\"}).then(function(qe){var We=WebAssembly.instantiateStreaming(qe,G);return We.then(ke,function(Vt){return $(\"wasm streaming compile failed: \"+Vt),$(\"falling back to ArrayBuffer instantiation\"),je(ke)})}):je(ke)}if(t.instantiateWasm)try{var _t=t.instantiateWasm(G,oe);return _t}catch(qe){$(\"Module.instantiateWasm callback failed with error: \"+qe),n(qe)}return Tt().catch(n),{}}var SI,ja;function ju(G){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+G+\")\",this.status=G}function ta(G){for(;G.length>0;)G.shift()(t)}function wI(G){return G}function II(G){var oe=/\\b_Z[\\w\\d_]+/g;return G.replace(oe,function(ke){var je=ke;return ke===je?ke:je+\" [\"+ke+\"]\"})}function Xu(){var G=new Error;if(!G.stack){try{throw new Error}catch(oe){G=oe}if(!G.stack)return\"(no stack trace available)\"}return G.stack.toString()}function Ix(G,oe){Z.set(G,oe)}function jl(){pr(\"\")}function Fc(){return 2147483648}function fr(){return Fc()}function Xl(G,oe,ke){ee.copyWithin(G,oe,oe+ke)}function vx(G){try{return P.grow(G-X.byteLength+65535>>>16),ve(P.buffer),1}catch(oe){}}function kx(G){var oe=ee.length;G=G>>>0;var ke=Fc();if(G>ke)return!1;let je=(Vt,Yr)=>Vt+(Yr-Vt%Yr)%Yr;for(var Tt=1;Tt<=4;Tt*=2){var _t=oe*(1+.2/Tt);_t=Math.min(_t,G+100663296);var qe=Math.min(ke,je(Math.max(G,_t),65536)),We=vx(qe);if(We)return!0}return!1}var Nx={varargs:void 0,get:function(){Nx.varargs+=4;var G=ie[Nx.varargs-4>>2];return G},getStr:function(G){var oe=q(G);return oe}};function vI(G){return 52}function Tx(G,oe,ke,je,Tt){return 70}var Hi=[null,[],[]];function _x(G,oe){var ke=Hi[G];oe===0||oe===10?((G===1?_:$)(U(ke,0)),ke.length=0):ke.push(oe)}function Ex(G,oe,ke,je){for(var Tt=0,_t=0;_t>2],We=pe[oe+4>>2];oe+=8;for(var Vt=0;Vt>2]=Tt,0}function Dc(G){var oe=t[\"_\"+G];return oe}function Yl(G,oe,ke,je,Tt){var _t={string:hr=>{var Ya=0;if(hr!=null&&hr!==0){var mm=(hr.length<<2)+1;Ya=Bc(mm),j(hr,Ya,mm)}return Ya},array:hr=>{var Ya=Bc(hr.length);return Ix(hr,Ya),Ya}};function qe(hr){return oe===\"string\"?q(hr):oe===\"boolean\"?Boolean(hr):hr}var We=Dc(G),Vt=[],Yr=0;if(je)for(var ra=0;raqe===\"number\"||qe===\"boolean\"),_t=oe!==\"string\";return _t&&Tt&&!je?Dc(G):function(){return Yl(G,oe,ke,arguments,je)}}var Oc={abort:jl,emscripten_get_heap_max:fr,emscripten_memcpy_big:Xl,emscripten_resize_heap:kx,fd_close:vI,fd_seek:Tx,fd_write:Ex},kI=Rc(),Zl=t.___wasm_call_ctors=function(){return(Zl=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},$x=t._init=function(){return($x=t._init=t.asm.init).apply(null,arguments)},De=t._init_with_threads_count=function(){return(De=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Pc=t._get_threads_count=function(){return(Pc=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Ax=t._register_tensor=function(){return(Ax=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},NI=t._dispose_data=function(){return(NI=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},TI=t._dispose=function(){return(TI=t._dispose=t.asm.dispose).apply(null,arguments)},Rx=t._Abs=function(){return(Rx=t._Abs=t.asm.Abs).apply(null,arguments)},Jl=t._Add=function(){return(Jl=t._Add=t.asm.Add).apply(null,arguments)},Yu=t._AddN=function(){return(Yu=t._AddN=t.asm.AddN).apply(null,arguments)},Fx=t._All=function(){return(Fx=t._All=t.asm.All).apply(null,arguments)},Dx=t._Any=function(){return(Dx=t._Any=t.asm.Any).apply(null,arguments)},_I=t._ArgMax=function(){return(_I=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Ox=t._AvgPool=function(){return(Ox=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Px=t._BatchMatMul=function(){return(Px=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Mx=t._Ceil=function(){return(Mx=t._Ceil=t.asm.Ceil).apply(null,arguments)},Lx=t._ClipByValue=function(){return(Lx=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},em=t._Conv2D=function(){return(em=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},tm=t._Conv2DBackpropInput=function(){return(tm=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Bx=t._Cos=function(){return(Bx=t._Cos=t.asm.Cos).apply(null,arguments)},Vx=t._Cosh=function(){return(Vx=t._Cosh=t.asm.Cosh).apply(null,arguments)},zx=t._CropAndResize=function(){return(zx=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Mc=t._Cumprod=function(){return(Mc=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Wx=t._Cumsum=function(){return(Wx=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Ux=t._DepthToSpace=function(){return(Ux=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Gx=t._DepthwiseConv2dNative=function(){return(Gx=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},qi=t._Elu=function(){return(qi=t._Elu=t.asm.Elu).apply(null,arguments)},Hx=t._Equal=function(){return(Hx=t._Equal=t.asm.Equal).apply(null,arguments)},qx=t._Exp=function(){return(qx=t._Exp=t.asm.Exp).apply(null,arguments)},rm=t._FlipLeftRight=function(){return(rm=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},Kx=t._Floor=function(){return(Kx=t._Floor=t.asm.Floor).apply(null,arguments)},Qu=t._FloorDiv=function(){return(Qu=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},jx=t._FusedBatchNorm=function(){return(jx=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},Xx=t._FusedConv2D=function(){return(Xx=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Xa=t._FusedDepthwiseConv2D=function(){return(Xa=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},Lc=t._Gather=function(){return(Lc=t._Gather=t.asm.Gather).apply(null,arguments)},Yx=t._GatherNd=function(){return(Yx=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},Qx=t._Greater=function(){return(Qx=t._Greater=t.asm.Greater).apply(null,arguments)},Zx=t._GreaterEqual=function(){return(Zx=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},Jx=t._IsNan=function(){return(Jx=t._IsNan=t.asm.IsNan).apply(null,arguments)},om=t._LeakyRelu=function(){return(om=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},nm=t._Less=function(){return(nm=t._Less=t.asm.Less).apply(null,arguments)},ey=t._LessEqual=function(){return(ey=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},ty=t._Log=function(){return(ty=t._Log=t.asm.Log).apply(null,arguments)},sm=t._LogicalAnd=function(){return(sm=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},am=t._LogicalNot=function(){return(am=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},ry=t._LogicalOr=function(){return(ry=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},oy=t._LogicalXor=function(){return(oy=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},ny=t._Max=function(){return(ny=t._Max=t.asm.Max).apply(null,arguments)},im=t._MaxPool=function(){return(im=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},EI=t._Maximum=function(){return(EI=t._Maximum=t.asm.Maximum).apply(null,arguments)},sy=t._Mean=function(){return(sy=t._Mean=t.asm.Mean).apply(null,arguments)},ay=t._Min=function(){return(ay=t._Min=t.asm.Min).apply(null,arguments)},iy=t._Minimum=function(){return(iy=t._Minimum=t.asm.Minimum).apply(null,arguments)},uy=t._MirrorPad=function(){return(uy=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},py=t._Multiply=function(){return(py=t._Multiply=t.asm.Multiply).apply(null,arguments)},cy=t._Neg=function(){return(cy=t._Neg=t.asm.Neg).apply(null,arguments)},ly=t._NonMaxSuppressionV3=function(){return(ly=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},my=t._NonMaxSuppressionV4=function(){return(my=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},dy=t._NonMaxSuppressionV5=function(){return(dy=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},fy=t._NotEqual=function(){return(fy=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},hy=t._OneHot=function(){return(hy=t._OneHot=t.asm.OneHot).apply(null,arguments)},gy=t._PadV2=function(){return(gy=t._PadV2=t.asm.PadV2).apply(null,arguments)},xy=t._Pow=function(){return(xy=t._Pow=t.asm.Pow).apply(null,arguments)},yy=t._Prelu=function(){return(yy=t._Prelu=t.asm.Prelu).apply(null,arguments)},by=t._Prod=function(){return(by=t._Prod=t.asm.Prod).apply(null,arguments)},Cy=t._RealDiv=function(){return(Cy=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},Sy=t._Reciprocal=function(){return(Sy=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},wy=t._Relu=function(){return(wy=t._Relu=t.asm.Relu).apply(null,arguments)},Iy=t._Relu6=function(){return(Iy=t._Relu6=t.asm.Relu6).apply(null,arguments)},vy=t._ResizeBilinear=function(){return(vy=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},ky=t._ResizeNearestNeighbor=function(){return(ky=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},Ny=t._Reverse=function(){return(Ny=t._Reverse=t.asm.Reverse).apply(null,arguments)},Ty=t._RotateWithOffset=function(){return(Ty=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},_y=t._Round=function(){return(_y=t._Round=t.asm.Round).apply(null,arguments)},Ey=t._Rsqrt=function(){return(Ey=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},$y=t._ScatterNd=function(){return($y=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},Ay=t._SelectV2=function(){return(Ay=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},Ry=t._Sigmoid=function(){return(Ry=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},Fy=t._Sin=function(){return(Fy=t._Sin=t.asm.Sin).apply(null,arguments)},Dy=t._Softmax=function(){return(Dy=t._Softmax=t.asm.Softmax).apply(null,arguments)},Oy=t._SparseFillEmptyRows=function(){return(Oy=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},Py=t._SparseReshape=function(){return(Py=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},My=t._SparseSegmentReduction=function(){return(My=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},Ly=t._Sqrt=function(){return(Ly=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},By=t._Square=function(){return(By=t._Square=t.asm.Square).apply(null,arguments)},Vy=t._SquaredDifference=function(){return(Vy=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},zy=t._Step=function(){return(zy=t._Step=t.asm.Step).apply(null,arguments)},Wy=t._StridedSlice=function(){return(Wy=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},Uy=t._Sub=function(){return(Uy=t._Sub=t.asm.Sub).apply(null,arguments)},Gy=t._Sum=function(){return(Gy=t._Sum=t.asm.Sum).apply(null,arguments)},Hy=t._Tan=function(){return(Hy=t._Tan=t.asm.Tan).apply(null,arguments)},qy=t._Tanh=function(){return(qy=t._Tanh=t.asm.Tanh).apply(null,arguments)},Ky=t._Tile=function(){return(Ky=t._Tile=t.asm.Tile).apply(null,arguments)},jy=t._TopK=function(){return(jy=t._TopK=t.asm.TopK).apply(null,arguments)},Xy=t._Transform=function(){return(Xy=t._Transform=t.asm.Transform).apply(null,arguments)},Yy=t._Transpose=function(){return(Yy=t._Transpose=t.asm.Transpose).apply(null,arguments)},Qy=t.__FusedMatMul=function(){return(Qy=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},Zy=t._malloc=function(){return(Zy=t._malloc=t.asm.malloc).apply(null,arguments)},Jy=t._free=function(){return(Jy=t._free=t.asm.free).apply(null,arguments)},eb=t.___errno_location=function(){return(eb=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},um=t.stackSave=function(){return(um=t.stackSave=t.asm.stackSave).apply(null,arguments)},pm=t.stackRestore=function(){return(pm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},Bc=t.stackAlloc=function(){return(Bc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},tb=t.dynCall_iijjiiii=function(){return(tb=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},rb=t.dynCall_jiji=function(){return(rb=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=Ql;var Zu;rr=function G(){Zu||cm(),Zu||(rr=G)};function cm(G){if(G=G||i,Nt>0||(ft(),Nt>0))return;function oe(){Zu||(Zu=!0,t.calledRun=!0,!M&&(wt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Fr()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),oe()},1)):oe()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();cm();var Ju;s&&(Ju={uncaughtException:process.listeners(\"uncaughtException\").filter(function(G){return!s.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(G){return!s.unhandledRejection.indexOf(G)>-1})});var ep;if(typeof e!=\"undefined\")ep=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")ep=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Ju){var ob=ep._dispose;ep._dispose=function(){ob(),Ju.uncaughtException.forEach(function(G){process.removeListener(\"uncaughtException\",G)}),Ju.unhandledRejection.forEach(function(G){process.removeListener(\"unhandledRejection\",G)})}}return e.ready}})();typeof Ig==\"object\"&&typeof Yw==\"object\"?Yw.exports=Xw:typeof define==\"function\"&&define.amd?define([],function(){return Xw}):typeof Ig==\"object\"&&(Ig.WasmBackendModule=Xw)});var Do=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},Zr=class{refCount(e){return Or(\"refCount\")}incRef(e){return Or(\"incRef\")}timerAvailable(){return!0}time(e){return Or(\"time\")}read(e){return Or(\"read\")}readSync(e){return Or(\"readSync\")}readToGPU(e,t){return Or(\"readToGPU\")}numDataIds(){return Or(\"numDataIds\")}disposeData(e,t){return Or(\"disposeData\")}write(e,t,o){return Or(\"write\")}move(e,t,o,n,s){return Or(\"move\")}createTensorFromTexture(e,t,o){return Or(\"createTensorFromTexture\")}memory(){return Or(\"memory\")}floatPrecision(){return Or(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Or(\"dispose\")}};function Or(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function LI(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,Cm(r,e,t)}function vV(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,Cm(r,t,o),Cm(e,t,o)}function op(r,e,t){return Math.max(r,Math.min(e,t))}function kV(r){return r%2===0?r:r+1}function Cm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function NV(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function Jr(r){E(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function Oo(r,e=[],t=!1){if(e==null&&(e=[]),Array.isArray(r)||Wt(r)&&!t)for(let o=0;o0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function DV(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Qa(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),E(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),E(r.every(o=>na(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function pb(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Qa(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function cb(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else throw new Error(`Unknown data type ${r}`);return t}function lb(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else if(r===\"string\")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function mb(r,e){for(let t=0;te+=t.length),e}function Po(r){return typeof r==\"string\"||r instanceof String}function BI(r){return typeof r==\"boolean\"}function VI(r){return typeof r==\"number\"}function np(r){return Array.isArray(r)?np(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":VI(r)?\"float32\":Po(r)?\"string\":BI(r)?\"bool\":\"float32\"}function fs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function sp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function zI(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?\" for a complex tensor\":\"\"}.`);return zI(0,r,e,t)}function zc(r,e){let t=ap(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Ki(r,new Float32Array(t));if(e===\"int32\")return Ki(r,new Int32Array(t));if(e===\"bool\")return Ki(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function yt(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function MV(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=WV(n,s)})}};function VV(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(zV(e,o[0],o[1]),o.join(\"=\"))),e}function zV(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function WV(r,e){if(e=e.toLowerCase(),e===\"true\"||e===\"false\")return e===\"true\";if(`${+e}`===e)return+e;throw new Error(`Could not parse value flag value ${e} for flag ${r}.`)}function O(){return hb}var hb=null;function UI(r){hb=r}var gb;function xb(){if(gb==null){let r;if(typeof window!=\"undefined\")r=window;else if(typeof global!=\"undefined\")r=global;else if(typeof process!=\"undefined\")r=process;else if(typeof self!=\"undefined\")r=self;else throw new Error(\"Could not find a global object\");gb=r}return gb}function UV(){let r=xb();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function Gc(r,e){let t=UV();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var gs=\"Abs\",sa=\"Acos\",aa=\"Acosh\",eo=\"Add\",Mo=\"AddN\",Lo=\"All\",Bo=\"Any\",Vo=\"ArgMax\",Za=\"ArgMin\",ia=\"Asin\",ua=\"Asinh\",pa=\"Atan\",ca=\"Atanh\",la=\"Atan2\",zo=\"AvgPool\",wm=\"AvgPoolGrad\",ip=\"AvgPool3D\",Im=\"AvgPool3DGrad\",Wo=\"BatchMatMul\",xs=\"BatchToSpaceND\",Ja=\"Bincount\",wne=\"BroadcastTo\",up=\"BroadcastArgs\",co=\"Cast\",Uo=\"Ceil\",lo=\"ClipByValue\",ei=\"Complex\",pp=\"ComplexAbs\",ys=\"Concat\",Go=\"Conv2D\",cp=\"Conv2DBackpropFilter\",Ho=\"Conv2DBackpropInput\",lp=\"Conv3D\",vm=\"Conv3DBackpropFilterV2\",mp=\"Conv3DBackpropInputV2\",qo=\"Cos\",Ko=\"Cosh\",jo=\"Cumprod\",Xo=\"Cumsum\",Yo=\"CropAndResize\",ti=\"DenseBincount\",Qo=\"DepthToSpace\",Zo=\"DepthwiseConv2dNative\",dp=\"DepthwiseConv2dNativeBackpropFilter\",fp=\"DepthwiseConv2dNativeBackpropInput\",hp=\"Diag\",gp=\"Dilation2D\",yb=\"Dilation2DBackpropInput\",bb=\"Dilation2DBackpropFilter\",Jo=\"RealDiv\",ri=\"Einsum\",en=\"Elu\",km=\"EluGrad\",ma=\"Erf\",tn=\"Equal\",rn=\"Exp\",bs=\"ExpandDims\",da=\"Expm1\",oi=\"FFT\",Cs=\"Fill\",on=\"FlipLeftRight\",nn=\"Floor\",sn=\"FloorDiv\",an=\"FusedBatchNorm\",Ss=\"GatherV2\",un=\"GatherNd\",pn=\"Greater\",cn=\"GreaterEqual\",mo=\"Identity\",ni=\"IFFT\",si=\"Imag\",fa=\"IsFinite\",ha=\"IsInf\",ln=\"IsNan\",mn=\"LeakyRelu\",dn=\"Less\",fn=\"LessEqual\",xp=\"LinSpace\",hn=\"Log\",ga=\"Log1p\",gn=\"LogicalAnd\",xn=\"LogicalNot\",xa=\"LogicalOr\",GI=\"LogicalXor\",Ine=\"LogSoftmax\",vne=\"LowerBound\",yp=\"LRN\",Nm=\"LRNGrad\",yn=\"Max\",bn=\"Maximum\",Cn=\"MaxPool\",Tm=\"MaxPoolGrad\",bp=\"MaxPool3D\",_m=\"MaxPool3DGrad\",Cp=\"MaxPoolWithArgmax\",Sn=\"Mean\",wn=\"Min\",In=\"Minimum\",vn=\"MirrorPad\",ya=\"Mod\",Sp=\"Multinomial\",kn=\"Multiply\",ws=\"Neg\",Nn=\"NotEqual\",Tn=\"NonMaxSuppressionV3\",ba=\"NonMaxSuppressionV4\",_n=\"NonMaxSuppressionV5\",Is=\"OnesLike\",En=\"OneHot\",vs=\"Pack\",$n=\"PadV2\",kne=\"Pool\",An=\"Pow\",Rn=\"Prelu\",Fn=\"Prod\",wp=\"RaggedGather\",Ip=\"RaggedRange\",vp=\"RaggedTensorToTensor\",ks=\"Range\",ai=\"Real\",Dn=\"Reciprocal\",On=\"Relu\",Ns=\"Reshape\",Pn=\"ResizeNearestNeighbor\",Em=\"ResizeNearestNeighborGrad\",Mn=\"ResizeBilinear\",$m=\"ResizeBilinearGrad\",Ln=\"Relu6\",Bn=\"Reverse\",Ca=\"Round\",Vn=\"Rsqrt\",zn=\"ScatterNd\",ii=\"SearchSorted\",Ts=\"Select\",Xi=\"Selu\",_s=\"Slice\",Wn=\"Sin\",Sa=\"Sinh\",Yi=\"Sign\",Un=\"Sigmoid\",Qi=\"Softplus\",Gn=\"Sqrt\",Hn=\"Sum\",Es=\"SpaceToBatchND\",$s=\"SplitV\",qn=\"Softmax\",ui=\"SparseFillEmptyRows\",wa=\"SparseReshape\",pi=\"SparseSegmentMean\",ci=\"SparseSegmentSum\",li=\"SparseToDense\",Kn=\"SquaredDifference\",mi=\"Square\",jn=\"StridedSlice\",As=\"StringNGrams\",di=\"StringSplit\",fi=\"StringToHashBucketFast\",Xn=\"Sub\",Yn=\"Tan\",Qn=\"Tanh\",to=\"Tile\",Zn=\"TopK\",Jn=\"Transform\",ro=\"Transpose\",kp=\"Unique\",Rs=\"Unpack\",Np=\"UnsortedSegmentSum\",Nne=\"UpperBound\",Fs=\"ZerosLike\",Ds=\"Step\",Zi=\"FromPixels\",es=\"RotateWithOffset\",fo=\"_FusedMatMul\",ho=\"FusedConv2D\",go=\"FusedDepthwiseConv2D\";function Os(...r){O().getBool(\"IS_TEST\")||O().getBool(\"PROD\")||console.warn(...r)}function GV(...r){O().getBool(\"IS_TEST\")||O().getBool(\"PROD\")||console.log(...r)}var Tp=Gc(\"kernelRegistry\",()=>new Map),Hc=Gc(\"gradRegistry\",()=>new Map);function qc(r,e){let t=Sb(r,e);return Tp.get(t)}function Cb(r){return Hc.get(r)}function Am(r){let e=Tp.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&t.push(a)}return t}function Ia(r){let{kernelName:e,backendName:t}=r,o=Sb(e,t);Tp.has(o)&&Os(`The kernel '${e}' for backend '${t}' is already registered`),Tp.set(o,r)}function Ane(r){let{kernelName:e}=r;Hc.has(e)&&O().getBool(\"DEBUG\")&&Os(`Overriding the gradient for '${e}'`),Hc.set(e,r)}function Rne(r,e){let t=Sb(r,e);if(!Tp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);Tp.delete(t)}function Fne(r){if(!Hc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Hc.delete(r)}function Dne(r,e){Am(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});Ia(n)})}function Sb(r,e){return`${e}_${r}`}var y={};Ue(y,{arraysEqual:()=>Pr,assert:()=>E,assertNonNegativeIntegerDimensions:()=>yt,assertNonNull:()=>Jr,assertShapesMatch:()=>ht,bytesFromStringArray:()=>fb,bytesPerElement:()=>Sm,checkConversionForErrors:()=>mb,clamp:()=>op,computeStrides:()=>hs,createScalarValue:()=>QV,createShuffledIndices:()=>RV,decodeString:()=>Ap,distSquared:()=>_V,encodeString:()=>gi,fetch:()=>JV,fingerPrint64:()=>YV,flatten:()=>Oo,getArrayFromDType:()=>lb,getTypedArrayFromDType:()=>cb,hasEncodingLoss:()=>OV,hexToLong:()=>Kc,indexToLoc:()=>LV,inferDtype:()=>np,inferFromImplicitShape:()=>DV,isBoolean:()=>BI,isFunction:()=>fs,isInt:()=>na,isNumber:()=>VI,isPromise:()=>Wc,isScalarShape:()=>EV,isString:()=>Po,isTypedArray:()=>Wt,isValidDtype:()=>db,locToIndex:()=>MV,makeOnesTypedArray:()=>zc,makeZerosNestedTypedArray:()=>PV,makeZerosTypedArray:()=>ap,nearestDivisor:()=>sp,nearestLargerEven:()=>kV,now:()=>ou,parseAxisParam:()=>Qa,randUniform:()=>TV,repeatedTry:()=>FV,rightPad:()=>ji,shuffle:()=>LI,shuffleCombo:()=>vV,sizeFromShape:()=>ze,sizeToSquarishShape:()=>AV,squeezeShape:()=>pb,sum:()=>NV,swap:()=>Cm,tanh:()=>$V,toNestedArray:()=>Ki,toTypedArray:()=>$p});var kb=rp(rv());var ru=kb.default||kb;function Kc(r){return ru.fromString(r,!0,16)}var nv=Kc(\"c3a5c85c97cb3127\"),tu=Kc(\"b492b66fbe98f273\"),gr=Kc(\"9ae16a3b2f90404f\");function vb(r){return r.xor(r.shru(47))}function sv(r,e,t){let o=r.slice(e,e+t);return ru.fromBytes(Array.from(o),!0,!0)}function bt(r,e){return sv(r,e,8)}function ov(r,e){return sv(r,e,4)}function jt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function hi(r,e,t=Kc(\"9ddfea08eb382d69\")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function qV(r,e,t,o,n,s){n=n.add(r),s=jt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(jt(n,44)),[n.add(o),s.add(a)]}function Fm(r,e,t,o){return qV(bt(r,e),bt(r,e+8),bt(r,e+16),bt(r,e+24),t,o)}function KV(r,e=r.length){if(e>=8){let t=gr.add(e*2),o=bt(r,0).add(gr),n=bt(r,e-8),s=jt(n,37).mul(t).add(o),a=jt(o,25).add(n).mul(t);return hi(s,a,t)}if(e>=4){let t=gr.add(e*2),o=ov(r,0);return hi(o.shl(3).add(e),ov(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return vb(gr.mul(s).xor(nv.mul(a))).mul(gr)}return gr}function jV(r,e=r.length){let t=gr.add(e*2),o=bt(r,0).mul(tu),n=bt(r,8),s=bt(r,e-8).mul(t),a=bt(r,e-16).mul(gr);return hi(jt(o.add(n),43).add(jt(s,30)).add(a),o.add(jt(n.add(gr),18)).add(s),t)}function XV(r,e=r.length){let t=gr.add(e*2),o=bt(r,0).mul(gr),n=bt(r,8),s=bt(r,e-8).mul(t),a=bt(r,e-16).mul(gr),i=jt(o.add(n),43).add(jt(s,30)).add(a),p=hi(i,o.add(jt(n.add(gr),18)).add(s),t),u=bt(r,16).mul(t),c=bt(r,24),l=i.add(bt(r,e-32)).mul(t),m=p.add(bt(r,e-24)).mul(t);return hi(jt(u.add(c),43).add(jt(l,30)).add(m),u.add(jt(c.add(o),18)).add(l),t)}function YV(r,e=r.length){let t=ru.fromNumber(81,!0);if(e<=32)return e<=16?KV(r,e):jV(r,e);if(e<=64)return XV(r,e);let o=t,n=t.mul(tu).add(113),s=vb(n.mul(gr).add(113)).mul(gr),a=[ru.UZERO,ru.UZERO],i=[ru.UZERO,ru.UZERO];o=o.mul(gr).add(bt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=jt(o.add(n).add(a[0]).add(bt(r,p+8)),37).mul(tu),n=jt(n.add(a[1]).add(bt(r,p+48)),42).mul(tu),o=o.xor(i[1]),n=n.add(a[0]).add(bt(r,p+40)),s=jt(s.add(i[0]),33).mul(tu),a=Fm(r,p,a[1].mul(tu),o.add(i[0])),i=Fm(r,p+32,s.add(i[1]),n.add(bt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=tu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=jt(o.add(n).add(a[0]).add(bt(r,p+8)),37).mul(l),n=jt(n.add(a[1]).add(bt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(bt(r,p+40))),s=jt(s.add(i[0]),33).mul(l),a=Fm(r,p,a[1].mul(l),o.add(i[0])),i=Fm(r,p+32,s.add(i[1]),n.add(bt(r,p+16))),[s,o]=[o,s],hi(hi(a[0],i[0],l).add(vb(n).mul(nv)).add(s),hi(a[1],i[1],l).add(o),l)}function QV(r,e){return e===\"string\"?gi(r):$p([r],e)}function ZV(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function $p(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Oo(r)),O().getBool(\"DEBUG\")&&mb(r,e),ZV(r,e))return r;if(e==null||e===\"float32\"||e===\"complex64\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=ou();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:ou()-i})}if(O().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{ez(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function ez(r,e,t){if(e!==\"float32\")return!1;for(let o=0;o0?h:\"\"} `}}console.log(`%c${p}\t%c${i}\t%c${u}D ${l}\t%c${c}\t%c${m}\t%c${a}`,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")}};function av(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!==\"float32\")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!Pr(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var uv=20,jc=3,Tb=7;function pv(r,e,t,o){let n=hs(e),s=tz(r,e,t,n),a=e.length,i=Om(r,e,t,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function tz(r,e,t,o){let n=ze(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t===\"complex64\"?Yc(r):r;if(i>1)for(let u=0;uuv){let g=jc*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-jc)*a,i*a));return t===\"complex64\"&&(x=Yc(x),b=Yc(b)),[\"[\"+x.map((C,w)=>Xc(C,n[w],t)).join(\", \")+\", ..., \"+b.map((C,w)=>Xc(C,n[i-jc+w],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?Yc(r):Array.from(r)).map((g,x)=>Xc(g,n[x],t)).join(\", \")+\"]\"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>uv){for(let h=0;h`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t===\"complex64\")throw new Error(\"complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).\");this.values=o||lb(t,this.size),this.strides=hs(e)}set(e,...t){t.length===0&&(t=[0]),E(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nAp(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return e}dataToGPU(e){return this.throwIfDisposed(),rs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=rs().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>Ap(t))}catch(t){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}return e}async bytes(){this.throwIfDisposed();let e=await rs().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(rs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return Rp.print(this,e)}clone(){return this.throwIfDisposed(),Rp.clone(this)}toString(e=!1){let t=this.dataSync();return pv(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Rp.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),rs().makeVariable(this,e,t,o)}};Object.defineProperty(it,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function oz(){return Gc(\"Tensor\",()=>it)}oz();var va=class extends it{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Pr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);rs().disposeTensor(this),this.dataId=e.dataId,rs().incRef(this,null)}dispose(){rs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(va,Symbol.hasInstance,{value:r=>r instanceof it&&r.assign!=null&&r.assign instanceof Function});var hv={};Ue(hv,{assertTypesMatch:()=>Fb,getTensorsInContainer:()=>Qc,isTensorInList:()=>sz,makeTypesMatch:()=>Re});var _b;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(_b||(_b={}));var Eb;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(Eb||(Eb={}));var $b;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})($b||($b={}));var Ab;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(Ab||(Ab={}));var Rb;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Rb||(Rb={}));var nz={float32:Ab,int32:Eb,bool:$b,complex64:Rb};function dt(r,e){if(r===\"string\"||e===\"string\"){if(r===\"string\"&&e===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${e}`)}return nz[r][e]}function ka(r){return dt(r,\"int32\")}function Re(r,e){if(r.dtype===e.dtype)return[r,e];let t=dt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Fb(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function sz(r,e){return e.some(t=>t.id===r.id)}function Qc(r){let e=[];return fv(r,e,new Set),e}function fv(r,e,t){if(r==null)return;if(r instanceof it){e.push(r);return}if(!az(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),fv(s,e,t))}}function az(r){return Array.isArray(r)||typeof r==\"object\"}function Db(r){return r.kernelName!=null}var Pm=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},xi=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Pm}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Am(e).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let o=t.factory();if(o&&!(o instanceof Zr)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return xi.nextTensorId++}nextVariableId(){return xi.nextVariableId++}clone(e){let t=T.runKernel(mo,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return T.runKernel(co,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(qc(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype===\"complex64\"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Db(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Db(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=qc(f,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,C);let w=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,w);o=this.saveTensorsForBackwardMode(k)}return w}}else{let{forwardFunc:f}=e,h=g=>{!n||(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:l}=e,m=Db(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool(\"DEBUG\")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(f=>c[f]!=null?c[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=Cb(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?(E(Array.isArray(t),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=e;o===\"string\"&&Po(e[0])&&(s=e.map(p=>gi(p)));let a=n.write(s,t,o),i=new it(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=fb(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||\"float32\";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new it(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new va(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype===\"string\"&&this.state.numStringTensors++;let o=0;e.dtype!==\"complex64\"&&e.dtype!==\"string\"&&(o=e.size*Sm(e.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:o})),e instanceof va||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype===\"string\"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!==\"complex64\"&&e.dtype!==\"string\"){let o=e.size*Sm(e.dtype);this.state.numBytes-=o}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push(\"Memory usage by string tensors is approximate (2 bytes per character)\")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,o=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=Cb(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=ap(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Qc(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if(E(t.length>0,()=>\"gradients() received an empty list of xs.\"),o!=null&&o.dtype!==\"float32\")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy(\"forward\",e));E(s instanceof it,()=>\"The result y returned by f() must be a tensor.\");let a=av(this.state.activeTape,t,s);if(!n&&a.length===0&&t.length>0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.\");return this.tidy(\"backward\",()=>{let i={};i[s.id]=o==null?iz(s.shape):o,iv(i,a,u=>this.tidy(u),uz);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return E(fs(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{E(t.every(i=>i instanceof it),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),E(o.value instanceof it,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),E(fs(o.gradFunc),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.\"),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];E(c.length===t.length,()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).\"),E(c.every(m=>m instanceof it),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.\");let l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=ou(),o=await this.backend.time(e);return o.wallMs=ou()-t,o}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Pm;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};xi.nextTensorId=0;xi.nextVariableId=0;function iz(r){let e=zc(ze(r),\"float32\");return T.makeTensor(e,r,\"float32\")}function Ob(){let r=xb();if(r._tfengine==null){let e=new Uc(r);r._tfengine=new xi(e)}return UI(r._tfengine.ENV),lv(()=>r._tfengine),r._tfengine}var T=Ob();function uz(r,e){let t={a:r,b:e};return T.runKernel(eo,t)}var yi={};Ue(yi,{isBrowser:()=>Mb,isMobile:()=>lz,mockIsMobile:()=>cz});function pz(){return typeof navigator!=\"undefined\"&&navigator!=null}var Pb;function cz(r){Pb=r}function lz(r){if(Pb!==void 0)return Pb;if(r||pz()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let e=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}return/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(e.substr(0,4))}return!1}function Mb(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var oo=O();oo.registerFlag(\"DEBUG\",()=>!1,r=>{r&&console.warn(\"Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.\")});oo.registerFlag(\"IS_BROWSER\",()=>Mb());oo.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");oo.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));oo.registerFlag(\"PROD\",()=>!1);oo.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>oo.getBool(\"DEBUG\"));oo.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);oo.registerFlag(\"IS_TEST\",()=>!1);oo.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>!0);oo.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);oo.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);oo.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function or(r,e){let t=r;if(Wt(r))return e===\"string\"?[]:[r.length];if(typeof r==\"object\"&&\"texture\"in r){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Wt(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&O().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&xv(r,o,[]),o}function xv(r,e,t){if(t=t||[],!Array.isArray(r)&&!Wt(r)){E(e.length===0,()=>`Element arr[${t.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}E(e.length>0,()=>`Element arr[${t.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===e[0],()=>`Element arr[${t.join(\"][\")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),gv(o,n,e,t),r==null||!Wt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\"){let p=r==null?\"null\":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=or(r,n);!Wt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?$p(r,n):Oo(r,[],!0);return T.makeTensor(i,s,n)}function Na(r,e,t,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Lb=\"__op\";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith(\"_\")&&(t=t.substring(0,t.length-1)),t=t+Lb;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Wc(a)&&console.error(\"Cannot return a Promise inside of tidy.\"),T.endScope(a),a}catch(a){throw T.endScope(null),a}};return Object.defineProperty(n,\"name\",{value:t,configurable:!0}),n}function mz(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");ht(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return T.runKernel(ei,n)}var Tr=N({complex_:mz});function xr(r,e,t,o){if(o==null&&(o=np(r)),o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(typeof r==\"object\"&&\"texture\"in r){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return r.channels=r.channels||\"RGBA\",T.backend.createTensorFromTexture(r,e||t,o)}if(!Wt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\")throw new Error(\"values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray\");if(e!=null){yt(e);let n=ze(e),s=ze(t);E(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Wt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?$p(r,o):Oo(r,[],!0),T.makeTensor(r,e,o)}function nr(r,e,t){let o=or(r,t);return xr(r,e,o,t)}var Zc={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Mm=4;async function bv(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+Mm*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(e+=s.byteLength,t.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Bb=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function yv(r){return Bb?Buffer.byteLength(r):new Blob([r]).size}function Cv(r){if(Bb)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{e+=n.byteLength});let t=new Uint8Array(e),o=0;return r.forEach(n=>{t.set(new Uint8Array(n),o),o+=n.byteLength}),t.buffer}function Vb(r){let e=\"/\";for(r=r.trim();r.endsWith(e);)r=r.slice(0,r.length-1);let t=r.split(e);return t[t.length-1]}function Bm(r,e){let t={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:e};return r.signature!=null&&(t.signature=r.signature),r.userDefinedMetadata!=null&&(t.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(t.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(t.initializerSignature=r.initializerSignature),r.trainingConfig!=null&&(t.trainingConfig=r.trainingConfig),t}function zb(r,e,t){let o={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(o.trainingConfig=r.trainingConfig),r.weightsManifest!=null){if(!e)throw new Error(\"modelJSON has weightsManifest but weightSpecs is null\");if(!t)throw new Error(\"modelJSON has weightsManifest but weightData is null\");o.weightSpecs=e,o.weightData=t}return r.signature!=null&&(o.signature=r.signature),r.userDefinedMetadata!=null&&(o.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(o.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(o.initializerSignature=r.initializerSignature),o}async function Dp(r,e){let t,o;return r.weightsManifest!=null&&([t,o]=await e(r.weightsManifest)),zb(r,t,o)}function Ps(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error(\"Expected JSON model topology, received ArrayBuffer.\");return{dateSaved:new Date,modelTopologyType:\"JSON\",modelTopologyBytes:r.modelTopology==null?0:yv(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:yv(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function Vm(r){let e=[];for(let t of r)e.push(...t.weights);return e}function fz(){let r=t=>{let o=t<<13,n=0;for(;(o&8388608)===0;)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function hz(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function gz(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function xz(){let r=fz(),e=hz(),t=gz();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var lt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return lt.instance==null&&(lt.instance=new lt),lt.instance}static registerSaveRouter(e){lt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){lt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return lt.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return lt.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?lt.getInstance().loadRouters:lt.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},wv=r=>lt.registerSaveRouter(r),Iv=r=>lt.registerLoadRouter(r),vv=r=>lt.getSaveHandlers(r),kv=(r,e)=>lt.getLoadHandlers(r,e);var Wb=\"tensorflowjs\",Ub=1,nu=\"models_store\",bi=\"model_info_store\";function Nv(){if(!O().getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");let r=typeof window==\"undefined\"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function Gb(r){let e=r.result;e.createObjectStore(nu,{keyPath:\"modelPath\"}),e.createObjectStore(bi,{keyPath:\"modelPath\"})}var Ms=class{constructor(e){if(this.indexedDB=Nv(),e==null||!e)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((o,n)=>{let s=this.indexedDB.open(Wb,Ub);s.onupgradeneeded=()=>Gb(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(nu,\"readonly\"),u=i.objectStore(nu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{let i=Ps(t),p=a.transaction(bi,\"readwrite\"),u=p.objectStore(bi),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),l;c.onsuccess=()=>{l=a.transaction(nu,\"readwrite\");let d=l.objectStore(nu).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(bi);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Ms.URL_SCHEME=\"indexeddb://\";var Tv=r=>O().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Ms.URL_SCHEME)?yz(r.slice(Ms.URL_SCHEME.length)):null;lt.registerSaveRouter(Tv);lt.registerLoadRouter(Tv);function yz(r){return new Ms(r)}function bz(r){return r.startsWith(Ms.URL_SCHEME)?r.slice(Ms.URL_SCHEME.length):r}var zm=class{constructor(){this.indexedDB=Nv()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Wb,Ub);o.onupgradeneeded=()=>Gb(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(bi,\"readonly\"),i=s.objectStore(bi).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=bz(e),new Promise((t,o)=>{let n=this.indexedDB.open(Wb,Ub);n.onupgradeneeded=()=>Gb(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(bi,\"readwrite\"),i=a.objectStore(bi),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(nu,\"readwrite\");let d=u.objectStore(nu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var Ta=\"/\",Op=\"tensorflowjs_models\",_v=\"info\",Cz=\"model_topology\",Sz=\"weight_specs\",wz=\"weight_data\",Iz=\"model_metadata\";function Ev(r){return{info:[Op,r,_v].join(Ta),topology:[Op,r,Cz].join(Ta),weightSpecs:[Op,r,Sz].join(Ta),weightData:[Op,r,wz].join(Ta),modelMetadata:[Op,r,Iz].join(Ta)}}function $v(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function vz(r){let e=r.split(Ta);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(Ta)}function kz(r){return r.startsWith(Ls.URL_SCHEME)?r.slice(Ls.URL_SCHEME.length):r}var Ls=class{constructor(e){if(!O().getBool(\"IS_BROWSER\")||typeof window==\"undefined\"||typeof window.localStorage==\"undefined\")throw new Error(\"The current environment does not support local storage.\");if(this.LS=window.localStorage,e==null||!e)throw new Error(\"For local storage, modelPath must not be null, undefined or empty.\");this.modelPath=e,this.keys=Ev(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");{let t=JSON.stringify(e.modelTopology),o=JSON.stringify(e.weightSpecs),n=Ps(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,Cv(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw $v(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!==\"JSON\")throw new Error(\"BrowserLocalStorage does not support loading non-JSON model topology yet.\");let t={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=Sv(a),t}};Ls.URL_SCHEME=\"localstorage://\";var Av=r=>O().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Ls.URL_SCHEME)?Nz(r.slice(Ls.URL_SCHEME.length)):null;lt.registerSaveRouter(Av);lt.registerLoadRouter(Av);function Nz(r){return new Ls(r)}var Wm=class{constructor(){E(O().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),E(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let e={},t=Op+Ta,o=Ta+_v;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(Pp)&&(e=e.slice(0,e.indexOf(Pp))),E(e.length>0,()=>\"scheme must not be an empty string.\");let o=Xt.getInstance();E(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=Xt.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Xt.getInstance().managers)}};function Um(r){if(r.indexOf(Pp)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Xt.getSchemes().join(\",\")}`);return{scheme:r.split(Pp)[0],path:r.split(Pp)[1]}}async function Rv(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=lt.getLoadHandlers(r);E(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),E(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=lt.getSaveHandlers(e);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),E(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Um(r).scheme,p=Um(r).path,u=i===Um(r).scheme,c=await n.load();t&&u&&await Xt.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Xt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function Fv(){let r=Xt.getSchemes(),e={};for(let t of r){let o=await Xt.getManager(t).listModels();for(let n in o){let s=t+Pp+n;e[s]=o[n]}}return e}async function Dv(r){let e=Um(r);return Xt.getManager(e.scheme).removeModel(e.path)}async function Ov(r,e){return Rv(r,e,!1)}async function Pv(r,e){return Rv(r,e,!0)}var Hb=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!==\"utf-8\"&&t!==\"utf8\")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window==\"undefined\"||!O().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener(\"message\",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(O().get(\"IS_BROWSER\")){O().setPlatform(\"browser\",new Hb);try{Xt.registerManager(Ls.URL_SCHEME,new Wm)}catch(r){}try{Xt.registerManager(Ms.URL_SCHEME,new zm)}catch(r){}}var Tz={importFetch:()=>Mv()},qb;var Kb=class{constructor(){this.util=Lv(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return O().global.fetch!=null?O().global.fetch(e,t):(qb==null&&(qb=Tz.importFetch()),qb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!==\"utf-8\"&&t!==\"utf8\")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?\"\":new this.util.TextDecoder(t).decode(e)}};O().get(\"IS_NODE\")&&!O().get(\"IS_BROWSER\")&&O().setPlatform(\"node\",new Kb);function le(r,e=\"float32\",t){return e=e||\"float32\",yt(r),new st(r,e,t)}function _z(r,e){let t=v(r,\"x\",\"cast\");if(!db(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e===\"string\"&&t.dtype!==\"string\"||e!==\"string\"&&t.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:t},n={dtype:e};return T.runKernel(co,o,n)}var Ke=N({cast_:_z});function Ez(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(mo,t)}var Br=N({clone_:Ez});function Gm(r,e=!1){console.log(r.toString(e))}Ob();var $z={buffer:le,cast:Ke,clone:Br,print:Gm};mv($z);var Ea={};Ue(Ea,{browserFiles:()=>Vv,browserHTTPRequest:()=>Uv,concatenateArrayBuffers:()=>Fp,copyModel:()=>Ov,decodeWeights:()=>Lm,encodeWeights:()=>bv,fromMemory:()=>Gv,fromMemorySync:()=>Jb,getLoadHandlers:()=>kv,getModelArtifactsForJSON:()=>Dp,getModelArtifactsForJSONSync:()=>zb,getModelArtifactsInfoForJSON:()=>Ps,getSaveHandlers:()=>vv,getWeightSpecs:()=>Vm,http:()=>qm,isHTTPScheme:()=>Hm,listModels:()=>Fv,loadWeights:()=>zv,moveModel:()=>Pv,registerLoadRouter:()=>Iv,registerSaveRouter:()=>wv,removeModel:()=>Dv,weightsLoaderFactory:()=>Qb,withSaveHandler:()=>Hv,withSaveHandlerSync:()=>qv});var Az=\"model\",Rz=\".json\",Fz=\".weights.bin\";function Bv(r){return new Promise(e=>setTimeout(e)).then(r)}var _a=class{constructor(e){if(!O().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(_a.URL_SCHEME)&&(e=e.slice(_a.URL_SCHEME.length)),(e==null||e.length===0)&&(e=Az),this.modelJsonFileName=e+Rz,this.weightDataFileName=e+Fz}async save(e){if(typeof document==\"undefined\")throw new Error(\"Browser downloads are not supported in this environment since `document` is not present\");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:\"application/octet-stream\"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserDownloads.save() does not support saving model topology in binary formats yet.\");{let o=[{paths:[\"./\"+this.weightDataFileName],weights:e.weightSpecs}],n=Bm(e,o),s=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:\"application/json\"})),a=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=s,await Bv(()=>a.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await Bv(()=>i.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:Ps(e)}}}};_a.URL_SCHEME=\"downloads://\";var jb=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=Dp(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,Fp(a)])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Vb(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Vb(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},Dz=r=>O().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(_a.URL_SCHEME)?Oz(r.slice(_a.URL_SCHEME.length)):null;lt.registerSaveRouter(Dz);function Oz(r=\"model\"){return new _a(r)}function Vv(r){return new jb(r)}function Xb(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){E(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){E(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),E(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function Yb(r,e){e==null&&(e={});let t=e.fetchFunc==null?O().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),n=0,s=.5,i=(e.onProgress==null?await Promise.all(o):await Xb(o,e.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return e.onProgress==null?await Promise.all(i):await Xb(i,e.onProgress,p,u)}async function zv(r,e=\"\",t,o){return Qb(a=>Yb(a,{requestInit:o}))(r,e,t)}function Qb(r){return async(e,t=\"\",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x=\"quantization\"in g?g.quantization.dtype:g.dtype,b=Zc[x]*ze(g.shape),C=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((w,k)=>{w===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(\", \")}. \nManifest JSON has weights with names: ${i.join(\", \")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith(\"/\")?\"\":\"/\")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=0;for(let w=0;w{let k=g.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=Lm(k,[w.manifestEntry]);for(let $ in _)l[$]=_[$]}),m+=f}),l}}var Pz=\"application/octet-stream\",Mz=\"application/json\",Jc=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(E(typeof t.fetchFunc==\"function\",()=>\"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)\"),this.fetch=t.fetchFunc):this.fetch=O().platform.fetch,E(e!=null&&e.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(e)&&E(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let o=[{paths:[\"./model.weights.bin\"],weights:e.weightSpecs}],n=Bm(e,o);t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:Mz}),\"model.json\"),e.weightData!=null&&t.body.append(\"model.weights.bin\",new Blob([e.weightData],{type:Pz}),\"model.weights.bin\");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:Ps(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(\".pb\")?a+=\" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.\":a+=\" Please make sure the server is serving valid JSON for this request.\",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Dp(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=Lz(t),s=this.weightPathPrefix||o,a=Vm(e),i=[],p=[];for(let c of e)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await Yb(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Fp(u)]}};Jc.URL_SCHEME_REGEX=/^https?:\\/\\//;function Lz(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function Hm(r){return r.match(Jc.URL_SCHEME_REGEX)!=null}var Wv=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>Hm(o)):t=Hm(r),t)return qm(r,e)}return null};lt.registerSaveRouter(Wv);lt.registerLoadRouter(Wv);function qm(r,e){return new Jc(r,e)}function Uv(r,e){return qm(r,e)}var el=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},Km=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},Zb=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function Gv(r,e,t,o){let n=arguments;return new Zb(Jb(...n))}function Jb(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new el(r):(console.warn(\"Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release.\"),new el({modelTopology:r})):(console.warn(\"Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release.\"),new el({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function Hv(r){return new Km(r)}function qv(r){return new Km(r)}var jv={};Ue(jv,{confusionMatrix:()=>Kv});function Bz(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Re(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Wo,a,i)}var Xe=N({matMul_:Bz});function Vz(r,e,t=1,o=0,n=\"int32\"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:e,onValue:t,offValue:o};return T.runKernel(En,a,i)}var tl=N({oneHot_:Vz});function wie(){O().set(\"PROD\",!0)}function Iie(){O().set(\"DEBUG\",!0)}function vie(){O().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function eC(r){O().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}dv(eC);function kie(){T.disposeVariables()}function cr(){return T}function Nie(){return T.memory()}function Tie(r){return T.profile(r)}function Ee(r,e){return T.tidy(r,e)}function Dt(r){Qc(r).forEach(t=>t.dispose())}function _r(r){return T.keep(r)}function _ie(r){return T.time(r)}function Eie(r){return T.setBackend(r)}function $ie(){return T.ready()}function Aie(){return T.backendName}function Rie(r){T.removeBackend(r)}function Fie(r){return T.findBackend(r)}function Die(r){return T.findBackendFactory(r)}function Ci(r,e,t=1){return T.registerBackend(r,e,t)}function Oie(){return T.backend}function Pie(r,e){O().setPlatform(r,e)}function zz(r){let t={input:v(r,\"input\",\"imag\")};return T.runKernel(si,t)}var Si=N({imag_:zz});function Wz(r){let t={x:v(r,\"x\",\"neg\")};return T.runKernel(ws,t)}var yr=N({neg_:Wz});function Uz(r){let t={input:v(r,\"input\",\"real\")};return T.runKernel(ai,t)}var $a=N({real_:Uz});function Gz(r,e,t){let o=v(r,\"x\",\"transpose\");if(e==null&&(e=o.shape.map((a,i)=>i).reverse()),E(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{E(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype===\"complex64\"?Ee(()=>{let a=$a(o),i=Si(o);return a=T.runKernel(ro,{x:a},s),i=T.runKernel(ro,{x:i},s),t&&(i=yr(i)),Tr(a,i)}):T.runKernel(ro,n,s)}var Mp=N({transpose_:Gz});function Hz(r,e,t){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(e,\"predictions\",\"confusionMatrix\");E(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),E(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),E(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),E(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),E(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=tl(Ke(o,\"int32\"),t),a=tl(Ke(n,\"int32\"),t),i=Mp(s),p=Xe(i,a);return Ke(p,\"int32\")}var Kv=N({confusionMatrix_:Hz});var br={};Ue(br,{assertAndGetBroadcastShape:()=>Je,getBroadcastDims:()=>Xv,getReductionAxes:()=>jm});function Xv(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function jm(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function Je(r,e){let t=[],o=Math.max(r.length,e.length);for(let n=0;nZz,fromPixelsAsync:()=>Yz,toPixels:()=>Qz});function Xm(r,e,t){if(Jr(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=or(r,t);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}var su;function Yv(r,e=3){if(e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");if(r==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!=\"undefined\"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!=\"undefined\"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!=\"undefined\"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!=\"undefined\"&&r instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(qc(Zi,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Zi,f,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext(\"2d\").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(su==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")su=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else su=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});su.canvas.width=u,su.canvas.height=c,su.drawImage(r,0,0,u,c),l=su.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*e);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(t.dtype!==\"float32\"&&t.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${t.dtype}. Please use float32 or int32 tensors.`);let a=await t.data(),i=t.dtype===\"float32\"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype===\"int32\"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(c[0]=d*i,c[1]=d*i,c[2]=d*i):c[m]=d*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){e.width=n,e.height=o;let u=e.getContext(\"2d\"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}var Zz=N({fromPixels_:Yv});var Ym={};Ue(Ym,{prepareAndValidate:()=>Zv});function Zv(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!==\"int32\")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var rl={};Ue(rl,{calculateShapes:()=>Jv,validateInput:()=>Qm,validateUpdateShape:()=>tC});function tC(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;leW,computeFlatOffset:()=>sW,computeOutShape:()=>rW,getNormalizedAxes:()=>oW,isSliceContinous:()=>nW,maskToAxes:()=>tW,parseSliceParams:()=>aW,sliceInfo:()=>iW,startForAxis:()=>i0,startIndicesWithElidedDims:()=>n0,stopForAxis:()=>u0,stopIndicesWithElidedDims:()=>s0,stridesForAxis:()=>a0,stridesWithElidedDims:()=>t0});var rC=-2,Jz=-1;function eW(r,e,t){let o=r.shape.length;E(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),E(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function tW(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function rW(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=n0(a,d,f,o,r),l=s0(i,d,f,n,r),m=t0(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=r0(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=r0(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=op(0,a,p-1),a}function u0(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=op(0,a,p):a=op(-1,a,p-1),a}function nW(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function sW(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{E(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return t==null?s=new Array(n).fill(-1):typeof t==\"number\"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:(E(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function iW(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&(a&a-1)!==0)throw new Error(\"Multiple ellipses in slice is not allowed.\");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(w&&m.strides[C]<=0)throw Error(\"only stride 1 allowed on non-range indexing.\");h=h&&m.strides[C]===1;let A=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=e0(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=e0(m.end[C],1,m.strides[C],k,_,$);let P=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&P,f=f&&(C===0&&m.strides[C]===1||P)}else d=d&&m.strides[C]===1&&A,f=f&&(C===0&&m.strides[C]===1||A);let R,D=!1;if(m.beginValid&&m.endValid?(R=m.end[C]-m.begin[C],D=!0):w?(R=1,D=!0):A&&k>=0&&(m.strides[C]<0?R=-k:R=k,D=!0),D){let P;R===0||R<0!=m.strides[C]<0?P=0:P=Math.trunc(R/m.strides[C])+(R%m.strides[C]!==0?1:0),g.push(P)}else g.push(-1)}for(let C=0;C=0?x.push(g[w]):w===rC&&x.push(1)}return{finalShapeSparse:x.filter((C,w)=>m.finalShapeGatherIndices[w]!==rC),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function uW(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var p0={};Ue(p0,{Serializable:()=>ol,SerializationMap:()=>Bs,registerClass:()=>Er});var ol=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Bs=class{constructor(){this.classNameMap={}}static getMap(){return Bs.instance==null&&(Bs.instance=new Bs),Bs.instance}static register(e){Bs.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Er(r){E(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),E(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),E(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),Bs.register(r)}var d0={};Ue(d0,{TEST_EPSILON_FLOAT16:()=>c0,createVideoElement:()=>hW,encodeStrings:()=>m0,expectArrayBuffersEqual:()=>fW,expectArraysClose:()=>cW,expectArraysEqual:()=>mW,expectNumbersClose:()=>l0,expectPromiseToFail:()=>lW,expectValuesInRange:()=>dW,play:()=>gW,testEpsilon:()=>Zm});var pW=.001,c0=.1;function cW(r,e,t){return t==null&&(t=Zm()),oC(r,e,(o,n)=>nC(o,n,t))}function Zm(){return T.backend.floatPrecision()===32?pW:c0}function oC(r,e,t){let o=!0;if((Wt(r)||Wt(e))&&(o=!1),Wt(r)&&Wt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=or(r),i=or(e);if(!Pr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Wt(r)?r:Oo(r),s=Wt(e)?e:Oo(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}.\nActual: ${n}.\nExpected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!=\"undefined\"&&expect().nothing()}function mW(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return Po(r)||Po(r[0])||Po(e)||Po(e[0])?oC(r,t,(o,n)=>o==n):oC(r,e,(o,n)=>nC(o,n,0))}function l0(r,e,t){if(t==null&&(t=Zm()),!nC(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function nC(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function dW(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function fW(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener(\"loadeddata\",o=>t(e)),e.load()})}async function gW(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var xW=\"4.1.0\";function yW(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(eo,n)}var xe=N({add_:yW});function bW(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(sn,n)}var Jm=N({floorDiv_:bW});function CW(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Re(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return Jm(t,o);let n={a:t,b:o},s={};return T.runKernel(Jo,n,s)}var Ge=N({div_:CW});function SW(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(kn,n)}var ae=N({mul_:SW});function wW(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return T.runKernel(pp,t)}else{let t={x:e};return T.runKernel(gs,t)}}var Yt=N({abs_:wW});function IW(r){let t={x:v(r,\"x\",\"acos\")};return T.runKernel(sa,t)}var f0=N({acos_:IW});function vW(r){let t={x:v(r,\"x\",\"acosh\")};return T.runKernel(aa,t)}var h0=N({acosh_:vW});function kW(r){E(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),E(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),e.forEach(n=>{if(!Pr(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return T.runKernel(Mo,o)}var g0=N({addN_:kW});function NW(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Lo,n,s)}var x0=N({all_:NW});function TW(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Bo,n,s)}var y0=N({any_:TW});function _W(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return T.runKernel(Vo,o,n)}var b0=N({argMax_:_W});function EW(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return T.runKernel(Za,o,n)}var C0=N({argMin_:EW});function $W(r){let t={x:v(r,\"x\",\"asin\")};return T.runKernel(ia,t)}var S0=N({asin_:$W});function AW(r){let t={x:v(r,\"x\",\"asinh\")};return T.runKernel(ua,t)}var w0=N({asinh_:AW});function RW(r){let t={x:v(r,\"x\",\"atan\")};return T.runKernel(pa,t)}var I0=N({atan_:RW});function FW(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(la,n)}var v0=N({atan2_:FW});function DW(r){let t={x:v(r,\"x\",\"atanh\")};return T.runKernel(ca,t)}var k0=N({atanh_:DW});function OW(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=T0(n);return uu(r,i,t,s,o,null,null,p)}function aC(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=ed(e),u;if(a===\"channelsLast\")u=[i,p,r[3],r[3]];else if(a===\"channelsFirst\")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return uu(r,u,t,o,n,s,!1,a)}function PW(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=sC(e),c,l;if(a===\"NDHWC\")l=\"channelsLast\",c=[i,p,u,r[4],r[4]];else if(a===\"NCDHW\")l=\"channelsFirst\",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return N0(r,c,t,o,n,!1,l,s)}function uu(r,e,t,o,n,s,a=!1,i=\"channelsLast\"){let[p,u,c,l]=[-1,-1,-1,-1];if(i===\"channelsLast\")[p,u,c,l]=r;else if(i===\"channelsFirst\")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=ed(t),[x,b]=ed(o),C=Lp(m,x),w=Lp(d,b),{padInfo:k,outHeight:_,outWidth:$}=BW(n,u,c,h,g,C,w,s,i),A=a?f*l:f,R;return i===\"channelsFirst\"?R=[p,A,_,$]:i===\"channelsLast\"&&(R=[p,_,$,A]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:A,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:w,dilationHeight:x,dilationWidth:b,inShape:r,outShape:R,filterShape:e}}function N0(r,e,t,o,n,s=!1,a=\"channelsLast\",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a===\"channelsLast\")[p,u,c,l,m]=r;else if(a===\"channelsFirst\")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,C]=sC(t),[w,k,_]=sC(o),$=Lp(d,w),A=Lp(f,k),R=Lp(h,_),{padInfo:D,outDepth:P,outHeight:M,outWidth:L}=VW(n,u,c,l,x,b,C,$,A,R,i),W=s?g*m:g,V;return a===\"channelsFirst\"?V=[p,W,P,M,L]:a===\"channelsLast\"&&(V=[p,P,M,L,W]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:P,outHeight:M,outWidth:L,outChannels:W,padInfo:D,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:A,effectiveFilterWidth:R,dilationDepth:w,dilationHeight:k,dilationWidth:_,inShape:r,outShape:V,filterShape:e}}function MW(r,e,t,o,n){o==null&&(o=iC(r,e,t));let s=r[0],a=r[1],i=au((s-e+2*o)/t+1,n),p=au((a-e+2*o)/t+1,n);return[i,p]}function LW(r,e,t,o,n,s){n==null&&(n=iC(r,e,o));let a=r[0],i=r[1],p=r[2],u=au((a-e+2*n)/o+1,s),c=au((i-e+2*n)/o+1,s),l=au((p-e+2*n)/o+1,s);return[u,c,l,t]}function iC(r,e,t,o=1){let n=Lp(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function ed(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function sC(r){return typeof r==\"number\"?[r,r,r]:r}function Lp(r,e){return e<=1?r:r+(r-1)*(e-1)}function BW(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r==\"number\"){u={top:r,bottom:r,left:r,right:r,type:r===0?\"VALID\":\"NUMBER\"};let d=MW([e,t],s,o,r,i);c=d[0],l=d[1]}else if(r===\"same\"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),d=Math.max(0,(l-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:\"SAME\"}}else if(r===\"valid\")u={top:0,bottom:0,left:0,right:0,type:\"VALID\"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r==\"object\"){let m=p===\"channelsLast\"?r[1][0]:r[2][0],d=p===\"channelsLast\"?r[1][1]:r[2][1],f=p===\"channelsLast\"?r[2][0]:r[3][0],h=p===\"channelsLast\"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?\"VALID\":\"EXPLICIT\"},c=au((e-s+m+d)/o+1,i),l=au((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function VW(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(typeof r==\"number\"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=LW([e,t,o,1],i,1,n,r,c);m=g[0],d=g[1],f=g[2]}else if(r===\"same\"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),C=h-b,w=Math.floor(g/2),k=g-w,_=Math.floor(x/2),$=x-_;l={top:w,bottom:k,left:_,right:$,front:b,back:C,type:\"SAME\"}}else if(r===\"valid\")l={top:0,bottom:0,left:0,right:0,front:0,back:0,type:\"VALID\"},m=Math.ceil((e-i+1)/n),d=Math.ceil((t-p+1)/s),f=Math.ceil((o-u+1)/a);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function au(r,e){if(!e)return Math.trunc(r);switch(e){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function iu(r){let[e,t,o]=ed(r);return e===1&&t===1&&o===1}function lr(r,e){return iu(r)||iu(e)}function T0(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Pt(r,e,t){if(t!=null){if(typeof e==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e==\"number\")E(na(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e==\"object\")e.forEach(o=>{o.forEach(n=>{E(na(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function zW(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return T.runKernel(Ns,o,n)}var z=N({reshape_:zW});function WW(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;E(lr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Pt(\"avgPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(zo,u,c);return l=Ke(l,s.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var td=N({avgPool_:WW});function UW(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Pt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ip,u,c);return l=Ke(l,i.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var _0=N({avgPool3d_:UW});function GW(r,e=0){E(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=Na(r,\"tensors\",\"concat\",\"string_or_numeric\");if(t[0].dtype===\"complex64\"&&t.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),t.length===1)return Br(t[0]);let o=t,n={axis:e};return T.runKernel(ys,o,n)}var gt=N({concat_:GW});function HW(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(Un,t)}var zs=N({sigmoid_:HW});function qW(r,e,t){let o=v(r,\"x\",\"slice\",\"string_or_numeric\");if(o.rank===0)throw new Error(\"Slicing scalar is not possible\");let n={x:o},s={begin:e,size:t};return T.runKernel(_s,n,s)}var He=N({slice_:qW});function KW(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel(Qn,t)}var nl=N({tanh_:KW});function jW(r,e,t,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(e,\"lstmKernel\",\"basicLSTMCell\"),p=v(t,\"lstmBias\",\"basicLSTMCell\"),u=v(o,\"data\",\"basicLSTMCell\"),c=v(n,\"c\",\"basicLSTMCell\"),l=v(s,\"h\",\"basicLSTMCell\"),m=gt([u,l],1),d=Xe(m,i),f=xe(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=He(f,[0,0],x),C=He(f,[0,g],x),w=He(f,[0,g*2],x),k=He(f,[0,g*3],x),_=xe(ae(zs(b),nl(C)),ae(c,zs(xe(a,w)))),$=ae(nl(_),zs(k));return[_,$]}var E0=N({basicLSTMCell_:jW});function XW(r,e,t){let o=v(r,\"x\",\"batchToSpaceND\"),n=e.reduce((i,p)=>i*p);E(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),E(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),E(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return T.runKernel(xs,s,a)}var rd=N({batchToSpaceND_:XW});function $0(r){let e;return r.rank===0||r.rank===1?e=z(r,[1,1,1,r.size]):r.rank===2?e=z(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function YW(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),E(c==null||i.rank===c.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),E(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:$0(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(an,m,d);return z(f,a.shape)}var wi=N({batchNorm_:YW});function QW(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),E(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),E(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var A0=N({batchNorm2d_:QW});function ZW(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),E(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),E(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var R0=N({batchNorm3d_:ZW});function JW(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),E(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),E(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var F0=N({batchNorm4d_:JW});function eU(r,e,t){let o=v(r,\"x\",\"bincount\"),n=v(e,\"weights\",\"bincount\");E(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return T.runKernel(Ja,s,a)}var od=N({bincount_:eU});function tU(r,e){let t=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(e,\"s1\",\"broadcastArgs\",\"int32\");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return T.runKernel(up,n)}var D0=N({broadcastArgs_:tU});function rU(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(yt(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Br(t);let i={x:t},p={reps:s};return T.runKernel(to,i,p)}var Ii=N({broadcastTo_:rU});function oU(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(Uo,t)}var O0=N({ceil_:oU});function Ws(r,e,t){yt(r);let o={shape:r,value:e,dtype:t};return T.runKernel(Cs,{},o)}function nU(r,e,t){let o=v(r,\"x\",\"clipByValue\");if(E(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Ws(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(lo,n,s)}var P0=N({clipByValue_:nU});function sU(r){return gt(r,0)}var M0=N({concat1d_:sU});function aU(r,e){return gt(r,e)}var L0=N({concat2d_:aU});function iU(r,e){return gt(r,e)}var B0=N({concat3d_:iU});function uU(r,e){return gt(r,e)}var V0=N({concat4d_:uU});function pU(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(e,\"filter\",\"conv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Pt(\"conv2d\",o,a);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),E(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(Go,m,d);return c?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var vi=N({conv2d_:pU});function cU(r,e,t,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(e,\"filter\",\"conv1d\"),u=i,c=!1;i.rank===2&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1]])),E(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),E(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Pt(\"conv1d\",o,a),E(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),E(lr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=z(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=z(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=vi(m,l,[1,t],o,\"NHWC\",[1,s],a);return c?z(g,[g.shape[2],g.shape[3]]):z(g,[g.shape[0],g.shape[2],g.shape[3]])}var z0=N({conv1d_:cU});function lU(r,e,t,o,n,s=\"NHWC\",a){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),E(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),E(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),E(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s===\"NHWC\"?i[3]:i[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];E(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),E(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Pt(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(Ho,m,d);return u?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var nd=N({conv2DBackpropInput_:lU});function mU(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return nd(t,a,i,o,n,\"NHWC\",s)}var W0=N({conv2dTranspose_:mU});function dU(r,e,t,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(e,\"filter\",\"conv3d\"),p=a,u=!1;a.rank===4&&(u=!0,p=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),E(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),E(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),E(lr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`);let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(lp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var U0=N({conv3d_:dU});function fU(r,e,t,o,n){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=z(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),E(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),E(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),E(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=T.runKernel(mp,c,l);return i?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var G0=N({conv3DBackpropInput_:fU});function hU(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return G0(t,s,a,o,n)}var H0=N({conv3dTranspose_:hU});function gU(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(qo,t)}var q0=N({cos_:gU});function xU(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(Ko,t)}var K0=N({cosh_:xU});function yU(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(jo,s,a)}var j0=N({cumprod_:yU});function bU(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(Xo,s,a)}var X0=N({cumsum_:bU});function CU(r,e,t,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(e,\"weights\",\"denseBincount\");E(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),E(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return T.runKernel(ti,a,i)}var Y0=N({denseBincount_:CU});function SU(r,e,t=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=t===\"NHWC\"?o.shape[1]:o.shape[2],s=t===\"NHWC\"?o.shape[2]:o.shape[3],a=t===\"NHWC\"?o.shape[3]:o.shape[1];E(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),E(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${e} for depthToSpace with input shape\n ${o.shape}`),E(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${e} for depthToSpace with input shape\n ${o.shape}`),E(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return T.runKernel(Qo,i,p)}var Q0=N({depthToSpace_:SU});function wU(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Pt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(Zo,m,d);return c?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Bp=N({depthwiseConv2d_:wU});function IU(r){let t={x:v(r,\"x\",\"diag\")};return T.runKernel(hp,t)}var Z0=N({diag_:IU});function vU(r,e,t,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(e,\"filter\",\"dilation2d\");E(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),E(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),E(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=z(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(gp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var J0=N({dilation2d_:vU});function kU(r,e){let t=v(r,\"a\",\"equal\",\"string_or_numeric\"),o=v(e,\"b\",\"equal\",\"string_or_numeric\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(tn,n)}var sd=N({equal_:kU});function NU(r,e,t){let o=v(e,\"a\",\"where\"),n=v(t,\"b\",\"where\"),s=v(r,\"condition\",\"where\",\"bool\"),a=Je(Je(s.shape,o.shape),n.shape),i=Ii(s,a),p=Ii(o,a),u=Ii(n,a),c={condition:i,t:p,e:u};return T.runKernel(Ts,c)}var os=N({where_:NU});function TU(r){let t={x:v(r,\"x\",\"zerosLike\")};return T.runKernel(Fs,t)}var Ut=N({zerosLike_:TU});function _U(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");[t,o]=Re(t,o);let n=Ge(t,o),s=Ut(n),a=sd(o,s);return os(a,s,n)}var ek=N({divNoNan_:_U});function EU(r,e){let t=v(r,\"t1\",\"dot\"),o=v(e,\"t2\",\"dot\");E((t.rank===1||t.rank===2)&&(o.rank===1||o.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if(E(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=z(t,[1,-1]),i=z(o,[-1,1]),p=Xe(a,i);return z(p,[])}else if(t.rank===1&&o.rank===2){let a=z(t,[1,-1]),i=z(o,[o.shape[0],o.shape[1]]),p=Xe(a,i);return z(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=z(o,[-1,1]),i=Xe(t,a);return z(i,[i.size])}else{let a=z(o,[o.shape[0],o.shape[1]]);return Xe(t,a)}}var tk=N({dot_:EU});function $U(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(ri,t,o)}var rk=N({einsum_:$U});function AU(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(en,t)}var ad=N({elu_:AU});function RU(r){let e=v(r,\"x\",\"erf\");E(e.dtype===\"int32\"||e.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),e.dtype===\"int32\"&&(e=Ke(e,\"float32\"));let t={x:e};return T.runKernel(ma,t)}var ok=N({erf_:RU});function uC(r,e){for(let t=0;tr[s]);return[t,n]}function Aa(r,e){let t=e.map(o=>1);return nk(r,t,e)}function DU(r,e,t){E(uC(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function OU(r,e){if(uC(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function PU(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function MU(r,e){let t=[];for(let o=e-r;o\"Axis must be <= rank of the tensor\");let o={input:t},n={dim:e};return T.runKernel(bs,o,n)}var Fa=N({expandDims_:jU});function XU(r){let t={x:v(r,\"x\",\"expm1\")};return T.runKernel(da,t)}var ik=N({expm1_:XU});function YU(r,e){let t=v(r,\"x\",\"tile\",\"string_or_numeric\");E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return T.runKernel(to,o,n)}var ki=N({tile_:YU});function QU(r,e,t,o=\"float32\"){e==null&&(e=r);let n=le([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),E(na(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=z(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=T.runKernel(yp,p,u);return i?z(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var dk=N({localResponseNormalization_:u4});function p4(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(hn,t)}var Da=N({log_:p4});function c4(r){let t={x:v(r,\"x\",\"log1p\")};return T.runKernel(ga,t)}var md=N({log1p_:c4});function l4(r){return E(fs(r),()=>\"The f passed in grad(f) must be a function\"),(e,t)=>{let o=v(e,\"x\",\"tf.grad\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grad\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&ht(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),dd(a),a[0]})}}function m4(r){return E(fs(r),()=>\"The f passed in grads(f) must be a function\"),(e,t)=>{E(Array.isArray(e),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=Na(e,\"args\",\"tf.grads\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grads\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&ht(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),dd(a),a})}}function d4(r){return E(fs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{E(e instanceof it,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),E(t==null||t instanceof it,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return dd(o),{grad:o[0],value:n}}}function f4(r){return E(fs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof it),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),E(t==null||t instanceof it,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...e),e,t);return t!=null&&ht(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),dd(o.grads),o}}function pC(r,e){E(fs(r),()=>\"The f passed in variableGrads(f) must be a function\"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof va),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let t=e!=null;if(!t){e=[];for(let u in T.registeredVariables)e.push(T.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),E(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=T.gradients(r,e,null,s);E(i.some(u=>u!=null),()=>\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"),E(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Cr(r){return T.customGrad(r)}function dd(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.`)}function h4(r){let t={x:v(r,\"x\",\"softplus\")};return T.runKernel(Qi,t)}var fd=N({softplus_:h4});function g4(r){let e=v(r,\"x\",\"logSigmoid\");return Cr(o=>({value:yr(fd(yr(o))),gradFunc:a=>ae(a,zs(yr(o)))}))(e)}var fk=N({logSigmoid_:g4});function x4(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var Ne=N({sub_:x4});function y4(r,e=-1){let t=v(r,\"logits\",\"logSoftmax\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Cr((n,s)=>{let i=Us(n,e,!0),p=Ne(n,i),u=Ne(Ke(p,\"float32\"),Da(et(Co(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=Co(d);return Ne(l,ae(et(l,e,f),h))}}})(t)}var hk=N({logSoftmax_:y4});function b4(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=Qa(e,o.shape),s=Us(o,n,!0),a=Ne(o,s),i=Co(a),p=et(i,n),u=Da(p),c=xe(z(s,u.shape),u);if(t){let l=Aa(c.shape,n);return z(c,l)}return c}var hd=N({logSumExp_:b4});function C4(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(gn,n)}var lu=N({logicalAnd_:C4});function S4(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(xn,t)}var gd=N({logicalNot_:S4});function w4(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(xa,n)}var xd=N({logicalOr_:w4});function I4(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return Je(t.shape,o.shape),lu(xd(r,e),gd(lu(r,e)))}var gk=N({logicalXor_:I4});var yd=2147483648;function v4(r,e,t=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(e,\"values\",\"searchSorted\"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=z(o,[-1,s]),p=z(n,[-1,a]);if(i.rank<2)throw new Error(\"Sorted input argument must be at least 2-dimensional\");if(i.shape[0]!==p.shape[0])throw new Error(\"Leading dimension of 'sortedSequence' and 'values' must match.\");if(ze(p.shape)>=yd)throw new Error(`values tensor size must less than ${yd}`);if(i.shape[1]>=yd)throw new Error(`trailing dim_size must less than ${yd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(ii,u,c)}var al=N({searchSorted_:v4});function xk(r,e){return al(r,e,\"left\")}function k4(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),E(lr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Pt(\"maxPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Cn,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var bd=N({maxPool_:k4});function N4(r,e=[1,1,1],t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"maxPool3d\"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Pt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(bp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var yk=N({maxPool3d_:N4});function T4(r,e,t,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=T.runKernel(Cp,a,i);return{result:p[0],indexes:p[1]}}var bk=N({maxPoolWithArgmax_:T4});function _4(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Re(t,o),t.dtype===\"bool\"&&(t=Ke(t,\"int32\"),o=Ke(o,\"int32\")),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(bn,n)}var Cd=N({maximum_:_4});function E4(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return T.runKernel(Sn,n,s)}var mu=N({mean_:E4});function Vr(r,e=\"float32\"){if(yt(r),e===\"complex64\"){let o=Vr(r,\"float32\"),n=Vr(r,\"float32\");return Tr(o,n)}let t=ap(ze(r),e);return T.makeTensor(t,r,e)}function Gs(r,e=\"float32\"){if(yt(r),e===\"complex64\"){let o=Gs(r,\"float32\"),n=Vr(r,\"float32\");return Tr(o,n)}let t=zc(ze(r),e);return T.makeTensor(t,r,e)}function Ck(r,e,{indexing:t=\"xy\"}={}){if(t!==\"xy\"&&t!==\"ij\")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,\"x\",\"meshgrid\",r instanceof it?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof it?e.dtype:\"float32\"),s=ze(o.shape),a=ze(n.shape);return t===\"xy\"?(o=z(o,[1,-1]),n=z(n,[-1,1]),[Xe(Gs([a,1],o.dtype),o),Xe(n,Gs([1,s],n.dtype))]):(o=z(o,[-1,1]),n=z(n,[1,-1]),[Xe(o,Gs([1,a],o.dtype)),Xe(Gs([s,1],n.dtype),n)])}function $4(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Re(t,o),t.dtype===\"bool\"&&(t=Ke(t,\"int32\"),o=Ke(o,\"int32\")),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(In,n)}var Sd=N({minimum_:$4});function A4(r,e,t){E(t===\"reflect\"||t===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");E(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),E(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return T.runKernel(vn,a,s)}var Sk=N({mirrorPad_:A4});function R4(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(ya,n)}var wk=N({mod_:R4});function F4(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=Qa(e,r.shape),n=mu(r,o,t),s=n.shape;t||(s=Aa(n.shape,o));let a=Qt(Ne(Ke(r,\"float32\"),z(n,s))),i=mu(a,o,t);return{mean:n,variance:i}}var Ik=N({moments_:F4});function D4(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=Na(t,\"c\",\"multiRNNCell\"),a=Na(o,\"h\",\"multiRNNCell\"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?z(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(Sp,p,u);return a===1?z(c,[c.size]):c}var kk=N({multinomial_:O4});function P4(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Nn,n)}var wd=N({notEqual_:P4});function M4(r){let t={x:v(r,\"x\",\"onesLike\")};return T.runKernel(Is,t)}var Nk=N({onesLike_:M4});function L4(r,e){let t=v(r,\"v1\",\"outerProduct\"),o=v(e,\"v2\",\"outerProduct\");E(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=z(t,[-1,1]),s=z(o,[1,-1]);return Xe(n,s)}var Tk=N({outerProduct_:L4});function B4(r,e,t=0){let o=v(r,\"x\",\"pad\");if(o.rank===0)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");let n={paddings:e,constantValue:t},s={x:o};return T.runKernel($n,s,n)}var Hs=N({pad_:B4});function V4(r,e,t=0){return E(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Hs(r,[e],t)}var _k=N({pad1d_:V4});function z4(r,e,t=0){return E(e.length===2&&e[0].length===2&&e[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Hs(r,e,t)}var Ek=N({pad2d_:z4});function W4(r,e,t=0){return E(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Hs(r,e,t)}var $k=N({pad3d_:W4});function U4(r,e,t=0){return E(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Hs(r,e,t)}var Ak=N({pad4d_:U4});function G4(r,e,t){let o=v(r,\"x\",\"spaceToBatchND\");E(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),E(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),E(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return T.runKernel(Es,n,s)}var Id=N({spaceToBatchND_:G4});function H4(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o=\"valid\");let i=v(r,\"x\",\"maxPool\"),p=i,u=!1;i.rank===3&&(u=!0,p=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(lr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=aC(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=K4([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=q4([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Id(p,l,f),C=(t===\"avg\"?()=>td(x,e,s,g,a):()=>bd(x,e,s,g,a))(),w=d?C:rd(C,l,h);return u?z(w,[w.shape[1],w.shape[2],w.shape[3]]):w}function q4(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function K4(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var Rk=N({pool_:H4});function j4(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return T.runKernel(Rn,n)}var vd=N({prelu_:j4});function X4(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=Ke(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(Fn,n,s)}var Fk=N({prod_:X4});function Y4(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,\"raggedGather\",\"int32\")),s=v(e,\"paramsDenseValues\",\"raggedGather\"),a=v(t,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(wp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Dk=N({raggedGather_:Y4});function Q4(r,e,t){let o=v(r,\"starts\",\"raggedRange\"),n=v(e,\"limits\",\"raggedRange\",o.dtype),s=v(t,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Ip,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var Ok=N({raggedRange_:Q4});function Z4(r,e,t,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(e,\"values\",\"raggedTensorToTensor\"),i=v(t,\"defaultValue\",\"raggedTensorToTensor\",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,\"raggedTensorToTensor\",\"int32\")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return T.runKernel(vp,u,c)}var Pk=N({raggedTensorToTensor_:Z4});function J4(r,e,t){yt(r);let o=ze(r),n=null;if(t==null||t===\"float32\")n=new Float32Array(o);else if(t===\"int32\")n=new Int32Array(o);else if(t===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;s=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype===\"float32\"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},Nd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=_d.alea(s.toString()),this.randn=new fu(0,1,o,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n==\"number\"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=_d.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function aG(r,e,t=1,o=\"float32\",n){if(yt(r),t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Nd(e,t,o,n),a=le(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),no(e,0)}var o1=N({reverse1d_:fG});function hG(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),no(t,e)}var n1=N({reverse2d_:hG});function gG(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),no(t,e)}var s1=N({reverse3d_:gG});function xG(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),no(t,e)}var a1=N({reverse4d_:xG});function yG(r){let t={x:v(r,\"x\",\"round\")};return T.runKernel(Ca,t)}var Rd=N({round_:yG});function bG(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(Vn,t)}var i1=N({rsqrt_:bG});function CG(r){let t={x:v(r,\"x\",\"selu\")};return T.runKernel(Xi,t)}var u1=N({selu_:CG});function SG(r,e,t,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(e,\"depthwiseFilter\",\"separableConv2d\"),u=v(t,\"pointwiseFilter\",\"separableConv2d\"),c=i,l=!1;if(i.rank===3&&(l=!0,c=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a===\"NCHW\")throw new Error(\"separableConv2d currently does not support dataFormat NCHW; only NHWC is supported\");E(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),E(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),E(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),E(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];E(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=Bp(c,p,o,n,a,s),g=vi(f,u,1,\"valid\",a);return l?z(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var p1=N({separableConv2d_:SG});async function wG(r,e){let t=v(r,\"x\",\"setdiff1d\"),o=v(e,\"y\",\"setdiff1d\");E(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),E(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),E(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),He(o,[e],[t])}var f1=N({slice1d_:NG});function TG(r,e,t){let o=v(r,\"x\",\"slice2d\");return E(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var h1=N({slice2d_:TG});function _G(r,e,t){let o=v(r,\"x\",\"slice3d\");return E(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var g1=N({slice3d_:_G});function EG(r,e,t){let o=v(r,\"x\",\"slice4d\");return E(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var x1=N({slice4d_:EG});function $G(r,e=-1){let t=v(r,\"logits\",\"softmax\",\"float32\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return T.runKernel(qn,o,n)}var y1=N({softmax_:$G});function AG(r){E(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(oi,e)}var zp=N({fft_:AG});function RG(r){E(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(ni,e)}var hu=N({ifft_:RG});function FG(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=z(r,[t,e]);o=hu(n)}else{let n=[t,2*(e-1)],s=z($a(r),[t,e]),a=z(Si(r),[t,e]),i=no(He(s,[0,1],[t,e-2]),1),p=ae(no(He(a,[0,1],[t,e-2]),1),be(-1)),u=gt([s,i],1),c=gt([a,p],1),l=z(Tr(u,c),[n[0],n[1]]);o=hu(l)}if(o=$a(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=z(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Fd=N({irfft_:FG});function DG(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return T.runKernel($s,n,s)}var Oa=N({split_:DG});function OG(r,e){E(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=He(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=gt([r,Vr(f)],r.shape.length-1),t=e}else n=r;let s=Ut(n),a=z(Tr(n,s),[o,t]),i=zp(a),p=Math.floor(t/2)+1,u=$a(i),c=Si(i),l=Oa(u,[p,t-p],u.shape.length-1),m=Oa(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,z(Tr(l[0],m[0]),d)}var Wp=N({rfft_:OG});function PG(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(Kn,n,s)}var Dd=N({squaredDifference_:PG});function MG(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return z(t,pb(t.shape,e).newShape)}var Up=N({squeeze_:MG});function LG(r,e=0){let t=Na(r,\"tensors\",\"stack\",\"string_or_numeric\");E(t.length>=1,()=>\"Pass at least one tensor to tf.stack\"),t.length>0&&E(e<=t[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=t,n={axis:e};return T.runKernel(vs,o,n)}var Sr=N({stack_:LG});function BG(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return T.runKernel(Ds,o,n)}var Od=N({step_:BG});function VG(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(jn,c,l)}var b1=N({stridedSlice_:VG});function zG(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel(Yn,t)}var C1=N({tan_:zG});function mr(r,e){Jr(r);let t=or(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return xr(r,null,t,e)}function _i(r,e,t){if(Jr(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=or(r,t);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return xr(r,e,o,t)}function S1(r,e,t){if(Jr(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=or(r,t);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}function w1(r,e,t){if(Jr(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=or(r,t);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return xr(r,e,o,t)}function I1(r,e,t){if(Jr(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=or(r,t);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return e=e||o,xr(r,e,o,t)}function WG(r,e=1,t=!0){let o=v(r,\"x\",\"topk\");if(o.rank===0)throw new Error(\"topk() expects the input to be of rank 1 or higher\");let n=o.shape[o.shape.length-1];if(e<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=T.runKernel(Zn,s,a);return{values:i,indices:p}}var v1=N({topk_:WG});function UG(r,e=0,t=1,o,n){if(yt(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new fu(e,t,o,!0,n),a=le(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:t},n={axis:e},[s,a]=T.runKernel(kp,o,n);return{values:s,indices:a}}var N1=N({unique_:GG});function HG(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");E(na(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Np,s,a)}var T1=N({unsortedSegmentSum_:HG});function qG(r,e=0){let t=v(r,\"x\",\"unstack\",\"string_or_numeric\");E(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return T.runKernel(Rs,o,n)}var so=N({unstack_:qG});function _1(r,e){return al(r,e,\"right\")}function E1(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Pd(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),ht(i.slice(s,s+a),n.shape,\"mask's shape must match the first K dimensions of tensor's shape,\");let p=1;for(let h=s;h\"Shape mismatch in v and x\");let p=be(1),u=Ne(p,i),c=ae(Ne(a,s),u);if(n){E(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=Ge(c,Ne(p,Ra(i,l)))}return xe(s,c)}var QG=N({movingAverage_:YG});function ZG(r,e,t){yt(t);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");Qm(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(zn,s,a)}var JG=N({scatterND_:ZG});function $1(r,e,t,o){if(r.dtype!==\"int32\")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function tH(r,e,t,o=0){yt(t);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);$1(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(li,i,p)}var rH=N({sparseToDense_:tH});function oH(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return T.runKernel(un,n)}var nH=N({gatherND_:oH});function A1(r,e){if(e==null)return r.shape.slice();if(Pr(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),E(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof it?n.clone():n;let s=A1(n,t),a=1-e,i=Ge(ud(xe($d(s,0,1,\"float32\",o),a)),a);return ae(n,i)}var aH=N({dropout_:sH});function xC(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function il(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),E(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),ht(o.shape.slice(0,o.shape.length-1),n.shape,\"predictions's shape should be align with the targets' shape, except the last dimension.\");let s=o.shape[o.shape.length-1];E(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=cb(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hF1,depthwiseConv2d:()=>P1,matMul:()=>M1});function pH(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]])),E(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),E(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),E(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];E(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),E(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Pt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(cp,l,m)}var R1=N({conv2DBackpropFilter_:pH});function gu(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return ae(r,Od(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function xu(r,e){let t=e,o=jm(r.shape,e.shape);return o.length>0&&(t=et(t,o)),z(t,r.shape)}function yu(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return Ti(r);if(e===\"elu\")return ad(r);if(e===\"relu6\")return Ad(r);if(e===\"prelu\")return vd(r,t);if(e===\"leakyrelu\")return ld(r,o);if(e===\"sigmoid\")return zs(r);throw new Error(`Unknown fused activation ${e}.`)}var bu=(r,e)=>!(r>0)||e===\"linear\";function cH({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||\"linear\",bu(T.state.gradientDepth,p)===!1){E(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=vi(r,e,t,o,n,s,a);return i!=null&&(_=xe(_,i)),yu(_,p,u,c)}let l=v(r,\"x\",\"conv2d\",\"float32\"),m=v(e,\"filter\",\"conv2d\",\"float32\"),d=l,f=!1;l.rank===3&&(f=!0,d=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Pt(\"fused conv2d\",o,a);let h=n===\"NHWC\"?d.shape[3]:d.shape[1];E(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),E(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=uu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Re(x,l),n===\"NHWC\"?Je(g.outShape,x.shape):(E(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),E(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if(E(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)E(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{Je(_,g.outShape)}catch($){let A=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(A)}b=v(u,\"prelu weights\",\"fused conv2d\")}let C=(_,$)=>{E(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[A,R,D,P]=$,M=gu(_,D,p);E(iu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=nd(R.shape,M,A,t,o),W=R1(R,M,A.shape,t,o),V=[L,W];if(P!=null){let U=xu(P,M);V.push(U)}return V},w={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr(($,A,R)=>{let D=T.runKernel(ho,w,k);return R([A,$,D]),f&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:C}})(d,m):Cr(($,A,R,D)=>{let P=T.runKernel(ho,w,k);return D([A,$,P,R]),f&&(P=z(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m,x)}var F1=N({fusedConv2d_:cH});function lH(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return T.runKernel(dp,u,c)}var D1=N({depthwiseConv2dNativeBackpropFilter_:lH});function mH(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(fp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var O1=N({depthwiseConv2dNativeBackpropInput_:mH});function dH({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(bu(T.state.gradientDepth,p)===!1){let k=Bp(r,e,t,o,n,s,a);return i!=null&&(k=xe(k,i)),yu(k,p,u,c)}let l=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),d=l,f=!1;l.rank===3&&(f=!0,d=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),E(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),E(lr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Pt(\"fused depthwiseConv2d\",o,a);let h=uu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Re(g,l),Je(h.outShape,g.shape));let x;u!=null&&(x=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,_)=>{E(iu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,A,R,D]=_,P=gu(k,R,p),M=O1(A.shape,P,$,t,o,s,a),L=D1(A,P,$.shape,t,o,s,a);if(D!=null){let W=xu(g,P);return[M,L,W]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},w={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((_,$,A)=>{let R=T.runKernel(go,C,w);return A([$,_,R]),f&&(R=z(R,[R.shape[1],R.shape[2],R.shape[3]])),{value:R,gradFunc:b}})(d,m):Cr((_,$,A,R)=>{let D=T.runKernel(go,C,w);return R([$,_,D,A]),f&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m,g)}var P1=N({fusedDepthwiseConv2d_:dH});function fH({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(bu(T.state.gradientDepth,s)===!1){let P=Xe(r,e,t,o);return n!=null&&(P=xe(P,n)),yu(P,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Re(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);E(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=Je(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),w=t?z(p,[g,c,m]):z(p,[g,m,c]),k=o?z(u,[x,d,l]):z(u,[x,l,d]),_;n!=null&&(_=v(n,\"bias\",\"fused matMul\"),[_]=Re(_,p),Je(C,_.shape));let $;a!=null&&($=v(a,\"prelu weights\",\"fused matMul\"));let A=(P,M)=>{let[L,W,V,U]=M,q=gu(z(P,V.shape),V,s),H,j;if(!t&&!o?(H=Xe(q,W,!1,!0),j=Xe(L,q,!0,!1)):!t&&o?(H=Xe(q,W,!1,!1),j=Xe(q,L,!0,!1)):t&&!o?(H=Xe(W,q,!1,!0),j=Xe(L,q,!1,!1)):(H=Xe(W,q,!0,!0),j=Xe(q,L,!0,!0)),n!=null){let X=xu(U,q);return[H,j,X]}else return[H,j]},R={a:w,b:k,bias:_,preluActivationWeights:$},D={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Cr((M,L,W)=>{let V=T.runKernel(fo,R,D);return W([M,L,V]),{value:z(V,C),gradFunc:A}})(w,k):Cr((M,L,W,V)=>{let U=T.runKernel(fo,R,D);return V([M,L,U,W]),{value:z(U,C),gradFunc:A}})(w,k,_)}var M1=N({fusedMatMul_:fH});function hH(r){return il(r,.54,.46)}var L1=N({hammingWindow_:hH});function gH(r){return il(r,.5,.5)}var Ld=N({hannWindow_:gH});function xH(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(He(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),E(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),E(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),E(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),E(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(Yo,c,l)}var V1=N({cropAndResize_:bH});function CH(r){let e=v(r,\"image\",\"flipLeftRight\",\"float32\");E(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return T.runKernel(on,t,{})}var z1=N({flipLeftRight_:CH});function SH(r){let e=v(r,\"image\",\"grayscaleToRGB\"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),E(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,ki(e,n)}var W1=N({grayscaleToRGB_:SH});function wH(r,e,t=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");E(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return T.runKernel(es,s,a)}var U1=N({rotateWithOffset_:wH});function So(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),E(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),E(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),E(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),E(e.rank===1,()=>\"scores must be a 1D tensor\"),E(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function IH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=So(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return T.runKernel(Tn,{boxes:s,scores:a},p)}var G1=N({nonMaxSuppression_:IH});function H1(r,e,t){let o=vH(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function vH(r,e,t){return NH(r,e,t||kH)}function kH(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Vd(r,e,t,o,n){return bC(r,e,t,o,n,0)}function zd(r,e,t,o,n,s){return bC(r,e,t,o,n,0,!1,s,!0)}function Wd(r,e,t,o,n,s){return bC(r,e,t,o,n,s,!0)}function bC(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(q1);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:C}=g;if(x=C;--k){let _=TH(r,b,l[k]);if(_>=o){w=!0;break}if(g.score=g.score*_H(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,w||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&H1(u,g,q1))}let d=l.length,f=t-d;i&&f>0&&(l.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function TH(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(l-u)*(m-c);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),x=Math.min(i,l),b=Math.min(p,m),C=Math.max(x-h,0)*Math.max(b-g,0);return C/(d+f-C)}function _H(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function q1(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function EH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=So(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Vd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),mr(l,\"int32\")}var K1=EH;function $H(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=So(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(_n,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var j1=N({nonMaxSuppressionWithScore_:$H});async function AH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=So(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:d}=Wd(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(m,\"int32\"),selectedScores:mr(d)}}var X1=AH;function RH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=So(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},f=T.runKernel(ba,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var Y1=N({nonMaxSuppressionPadded_:RH});async function FH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=So(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=zd(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(f,\"int32\"),validOutputs:be(h,\"int32\")}}var Q1=FH;function DH(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");E(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),E(o===!1||t===!1,()=>\"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(Mn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var Z1=N({resizeBilinear_:DH});function OH(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");E(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),E(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),E(o===!1||t===!1,()=>\"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(Pn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var J1=N({resizeNearestNeighbor_:OH});function PH(r,e=\"binary\",t=!1,o=.5){let n=v(r,\"image\",\"threshold\"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=ae(mr([o]),255),c,l,m,d;if(E(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),E(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),E(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),E(e===\"otsu\"||e===\"binary\",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=Oa(n,[1,1,1],-1);let g=ae(c,s),x=ae(l,a),b=ae(m,i);d=xe(xe(g,x),b)}else d=r;if(e===\"otsu\"){let g=od(Ke(Rd(d),\"int32\"),nr([]),256);u=MH(g,p)}let f=t?Vp(d,u):cu(d,u);return Ke(ae(f,255),\"int32\")}function MH(r,e){let t=mr([-1]),o=mr([0]),n=mr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),E(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Jn,p,u)}var tN=N({transform_:LH});function BH(r,e,t){E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`);let o=v(r,\"a\",\"bandPart\");E(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2);if(!(e<=s))throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`);if(!(t<=a))throw new Error(`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`);e<0&&(e=s),t<0&&(t=a);let i=z(Ni(0,s,1,\"int32\"),[-1,1]),p=Ni(0,a,1,\"int32\"),u=Ne(i,p),c=lu(Vp(u,be(+e,\"int32\")),cd(u,be(-t,\"int32\"))),l=Vr([s,a],o.dtype);return z(Sr(so(z(o,[-1,s,a])).map(m=>os(c,m,l))),n)}var rN=N({bandPart_:BH});function VH(r){let e;if(Array.isArray(r)){e=!1,E(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=Oa(r,r.shape[0],0).map(n=>Up(n,[0]));E(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return nN(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=so(z(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=nN(p,e);n.push(u),s.push(c)});let a=z(Sr(n,0),r.shape),i=z(Sr(s,0),r.shape);return[a,i]}}function nN(r,e=!1){return T.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=id(t),s=Br(r),a=_i([[1]],[1,1]),i=Br(a),p=t>=o?o:t;for(let u=0;u{let d=He(s,[u,u],[t-u,1]),f=pu(d),h=He(s,[u,u],[1,1]),g=os(cu(h,0),_i([[-1]]),_i([[1]])),x=Ne(h,ae(g,f)),b=Ge(d,x);b.shape[0]===1?i=Br(a):i=gt([a,He(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=yr(Ge(Xe(g,x),f)),w=He(s,[u,0],[t-u,o]),k=ae(C,i),_=Mp(i);if(u===0)s=Ne(w,Xe(k,Xe(_,w)));else{let R=Ne(w,Xe(k,Xe(_,w)));s=gt([He(s,[0,0],[u,o]),R],0)}let $=Mp(k),A=He(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Ne(A,Xe(Xe(A,i),$));else{let R=Ne(A,Xe(Xe(A,i),$));n=gt([He(n,[0,0],[t,u]),R],1)}return[i,s,n]}),Dt([c,l,m])}return!e&&t>o&&(n=He(n,[0,0],[t,o]),s=He(s,[0,0],[o,o])),[n,s]})}var sN=N({qr_:zH});var Et;(function(r){r[r.NONE=0]=\"NONE\",r[r.MEAN=1]=\"MEAN\",r[r.SUM=2]=\"SUM\",r[r.SUM_BY_NONZERO_WEIGHTS=3]=\"SUM_BY_NONZERO_WEIGHTS\"})(Et||(Et={}));function WH(r,e,t=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:ae(o,n);if(t===Et.NONE)return s;if(t===Et.SUM)return et(s);if(t===Et.MEAN){if(n==null)return mu(s);{let a=o.size/n.size,i=Ge(et(s),et(n));return a>1?Ge(i,be(a)):i}}if(t===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return Ge(et(s),be(o.size));{let a=ae(n,Gs(o.shape)),i=Ke(et(wd(a,be(0))),\"float32\");return Ge(et(s),i)}}throw Error(`Unknown reduction: ${t}`)}var sr=N({computeWeightedLoss_:WH});function UH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),ht(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Yt(Ne(n,s));return sr(i,a,o)}var aN=N({absoluteDifference_:UH});function GH(r,e,t,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),ht(s.shape,a.shape,\"Error in cosineDistance: \");let p=be(1),u=Ne(p,et(ae(s,a),t,!0));return sr(u,i,n)}var iN=N({cosineDistance_:GH});function HH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),ht(n.shape,s.shape,\"Error in hingeLoss: \");let i=be(1);n=Ne(ae(be(2),n),i);let p=Ti(Ne(i,ae(n,s)));return sr(p,a,o)}var uN=N({hingeLoss_:HH});function qH(r,e,t,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),ht(s.shape,a.shape,\"Error in huberLoss: \");let p=be(o),u=Yt(Ne(a,s)),c=Sd(u,p),l=Ne(u,c),m=xe(ae(be(.5),Qt(c)),ae(p,l));return sr(m,i,n)}var pN=N({huberLoss_:qH});function KH(r,e,t,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),ht(s.shape,a.shape,\"Error in logLoss: \");let p=be(1),u=be(o),c=yr(ae(s,Da(xe(a,u)))),l=ae(Ne(p,s),Da(xe(Ne(p,a),u))),m=Ne(c,l);return sr(m,i,n)}var cN=N({logLoss_:KH});function jH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),ht(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Dd(n,s);return sr(i,a,o)}var lN=N({meanSquaredError_:jH});function XH(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");ht(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=Ti(o),s=ae(o,t),a=md(Co(yr(Yt(o))));return xe(Ne(n,s),a)}function YH(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(e,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"sigmoidCrossEntropy\")),ht(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=be(o),c=be(1),l=be(.5);s=xe(ae(s,Ne(c,u)),ae(l,u))}let p=XH(s,a);return sr(p,i,n)}var mN=N({sigmoidCrossEntropy_:YH});function QH(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Cr((n,s,a)=>{let p=hd(s,[t],!0),u=Ne(Ke(s,\"float32\"),p);a([n,u]);let c=yr(ae(u,n));return{value:et(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=Aa(d.shape,[t]);return[ae(z(d,x),Ne(Ke(h,\"float32\"),Co(g))),ae(z(d,x),Ne(Co(g),Ke(h,\"float32\")))]}}})(r,e)}function ZH(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(e,\"logits\",\"softmaxCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"softmaxCrossEntropy\")),ht(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=be(o),c=be(1),l=be(s.shape[1]);s=xe(ae(s,Ne(c,u)),Ge(u,l))}let p=QH(s,a);return sr(p,i,n)}var dN=N({softmaxCrossEntropy_:ZH});function JH(r,e,t,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(e,\"values\",\"sparseFillEmptyRows\"),a=v(t,\"denseShape\",\"sparseFillEmptyRows\",\"int32\"),i=v(o,\"defaultValue\",\"sparseFillEmptyRows\",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(ui,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var fN=N({sparseFillEmptyRows_:JH});function eq(r,e,t){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(e,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(t,\"newShape\",\"sparseReshape\",\"int32\");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape\n ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(wa,a);return{outputIndices:i[0],outputShape:i[1]}}var hN=N({sparseReshape_:eq});function tq(r,e,t){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(e,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentMean\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(pi,a)}var gN=N({sparseSegmentMean_:tq});function rq(r,e,t){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(e,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentSum\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ci,a)}var xN=N({sparseSegmentSum_:rq});function oq(r,e,t,o,n,s,a,i){let p=v(r,\"data\",\"stringNGrams\",\"string\");if(p.dtype!==\"string\")throw new Error(\"Data must be of datatype string\");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=T.runKernel(As,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var yN=N({stringNGrams_:oq});function nq(r,e,t=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(e,\"delimiter\",\"stringSplit\",\"string\");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=T.runKernel(di,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var bN=N({stringSplit_:nq});function sq(r,e){let t=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:e};if(e<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:t};return T.runKernel(fi,n,o)}var CN=N({stringToHashBucketFast_:sq});var aq={fft:zp,ifft:hu,rfft:Wp,irfft:Fd},iq={hammingWindow:L1,hannWindow:Ld,frame:Bd,stft:B1},uq={flipLeftRight:z1,grayscaleToRGB:W1,resizeNearestNeighbor:J1,resizeBilinear:Z1,rotateWithOffset:U1,cropAndResize:V1,nonMaxSuppression:G1,nonMaxSuppressionAsync:K1,nonMaxSuppressionWithScore:j1,nonMaxSuppressionWithScoreAsync:X1,nonMaxSuppressionPadded:Y1,nonMaxSuppressionPaddedAsync:Q1,threshold:eN,transform:tN},pq={bandPart:rN,gramSchmidt:oN,qr:sN},cq={absoluteDifference:aN,computeWeightedLoss:sr,cosineDistance:iN,hingeLoss:uN,huberLoss:pN,logLoss:cN,meanSquaredError:lN,sigmoidCrossEntropy:mN,softmaxCrossEntropy:dN},lq={sparseFillEmptyRows:fN,sparseReshape:hN,sparseSegmentMean:gN,sparseSegmentSum:xN},mq={stringNGrams:yN,stringSplit:bN,stringToHashBucketFast:CN};var wr=class extends ol{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Dt(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return pC(e,t)}dispose(){this.iterations_!=null&&Dt(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:be(this.iterations_,\"int32\")}}async getWeights(){throw new Error(\"getWeights() is not implemented for this optimizer yet.\")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(wr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ei=class extends wr{constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:Ee(()=>Ut(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;Ee(()=>{let c=xe(ae(p,this.rho),ae(Qt(i),1-this.rho)),l=ae(Ge($r(xe(u,this.epsilon)),$r(xe(p,this.epsilon))),i),m=xe(ae(u,this.rho),ae(Qt(l),1-this.rho));p.assign(c),u.assign(m);let d=xe(ae(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Dt(this.accumulatedGrads.map(e=>e.variable)),Dt(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};Ei.className=\"Adadelta\";Er(Ei);var $i=class extends wr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:Ee(()=>Ws(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;Ee(()=>{let p=xe(i,Qt(a));i.assign(p);let u=xe(ae(Ge(a,$r(xe(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Dt(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};$i.className=\"Adagrad\";Er($i);var Ai=class extends wr{constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ee(()=>{this.accBeta1=be(t).variable(),this.accBeta2=be(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ee(()=>{let o=Ne(1,this.accBeta1),n=Ne(1,this.accBeta2);t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ee(()=>Ut(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:Ee(()=>Ut(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=xe(ae(c,this.beta1),ae(u,1-this.beta1)),d=xe(ae(l,this.beta2),ae(Qt(u),1-this.beta2)),f=Ge(m,o),h=Ge(d,n);c.assign(m),l.assign(d);let g=xe(ae(Ge(f,xe($r(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(ae(this.accBeta1,this.beta1)),this.accBeta2.assign(ae(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Dt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Dt(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),Ee(()=>{this.accBeta1.assign(Ra(this.beta1,this.iterations_+1)),this.accBeta2.assign(Ra(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Ai.className=\"Adam\";Er(Ai);var Ri=class extends wr{constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ee(()=>{this.iteration=be(0).variable(),this.accBeta1=be(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ee(()=>{let o=Ne(1,this.accBeta1),n=Ge(-this.learningRate,xe(ae(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ut(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Ut(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=xe(ae(c,this.beta1),ae(u,1-this.beta1)),d=ae(l,this.beta2),f=Yt(u),h=Cd(d,f);c.assign(m),l.assign(h);let g=xe(ae(Ge(n,o),Ge(m,xe(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(xe(this.iteration,1)),this.accBeta1.assign(ae(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Dt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Dt(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error(\"getWeights() is not implemented for Adamax yet.\")}async setWeights(e){throw new Error(\"setWeights() is not implemented for Adamax yet.\")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Ri.className=\"Adamax\";Er(Ri);var qs=class extends wr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=T.registeredVariables[o];Ee(()=>{let i=xe(ae(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=_r(be(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error(\"SGD optimizer does not have settable weights.\")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};qs.className=\"SGD\";Er(qs);var Fi=class extends qs{constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=be(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:Ee(()=>Ut(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&Ee(()=>{let p,u=xe(ae(this.m,a),i);this.useNesterov?p=xe(ae(this.c,xe(i,ae(u,this.m))),s):p=xe(ae(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Dt(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Fi.className=\"Momentum\";Er(Fi);var Di=class extends wr{constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),e==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:Ee(()=>Ut(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;Ee(()=>{let c=xe(ae(p,this.decay),ae(Qt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=xe(ae(l,this.decay),ae(i,1-this.decay)),d=Ge(ae(i,this.learningRate),$r(Ne(c,xe(Qt(m),this.epsilon)))),f=xe(ae(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Ne(s,f);s.assign(h)}else{let l=xe(ae(p,this.decay),ae(Qt(i),1-this.decay)),m=xe(ae(u,this.momentum),Ge(ae(i,this.learningRate),$r(xe(l,this.epsilon))));p.assign(l),u.assign(m);let d=Ne(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Dt(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Dt(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Dt(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Di.className=\"RMSProp\";Er(Di);var ns=class{static sgd(e){return new qs(e)}static momentum(e,t,o=!1){return new Fi(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new Di(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new Ai(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ei(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new Ri(e,t,o,n,s)}static adagrad(e,t=.1){return new $i(e,t)}};var hMe={sgd:ns.sgd,momentum:ns.momentum,adadelta:ns.adadelta,adagrad:ns.adagrad,rmsprop:ns.rmsprop,adamax:ns.adamax,adam:ns.adam};var dq=(()=>typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r())();function CC(){return new Promise(r=>dq(()=>r()))}var S={};Ue(S,{ERF_A1:()=>$q,ERF_A2:()=>Aq,ERF_A3:()=>Rq,ERF_A4:()=>Fq,ERF_A5:()=>Dq,ERF_P:()=>Eq,PARALLELIZE_THRESHOLD:()=>Ud,RowPartitionType:()=>Ks,SELU_SCALE:()=>_q,SELU_SCALEALPHA:()=>Tq,applyActivation:()=>yu,assertAndGetBroadcastShape:()=>Je,assertAxesAreInnerMostDims:()=>DU,assertParamsConsistent:()=>fq,assignToTypedArray:()=>Vq,axesAreInnerMostDims:()=>uC,calculateShapes:()=>Jv,checkEinsumDimSizes:()=>qq,checkPadOnDimRoundingMode:()=>Pt,combineLocations:()=>nk,combineRaggedTensorToTensorShapes:()=>gq,complexWithEvenIndex:()=>Mq,complexWithOddIndex:()=>Lq,computeConv2DInfo:()=>uu,computeConv3DInfo:()=>N0,computeDefaultPad:()=>iC,computeDilation2DInfo:()=>OW,computeOptimalWindowSize:()=>Cq,computeOutAndReduceShapes:()=>FU,computeOutShape:()=>hq,computePool2DInfo:()=>aC,computePool3DInfo:()=>PW,convertConv2DDataFormat:()=>T0,decodeEinsumEquation:()=>Gq,eitherStridesOrDilationsAreOne:()=>lr,expandShapeToKeepDim:()=>Aa,exponent:()=>Wq,exponents:()=>zq,fromStringArrayToUint8:()=>dK,fromUint8ToStringArray:()=>mK,getAxesPermutation:()=>OU,getBroadcastDims:()=>Xv,getComplexWithIndex:()=>Bq,getEinsumComputePath:()=>Kq,getEinsumPermutation:()=>Hq,getFusedBiasGradient:()=>xu,getFusedDyActivation:()=>gu,getImageCenter:()=>Sq,getInnerMostAxes:()=>MU,getPermuted:()=>Iq,getRaggedRank:()=>yq,getReductionAxes:()=>jm,getReshaped:()=>wq,getReshapedPermuted:()=>vq,getRowPartitionTypesHelper:()=>xq,getSliceBeginCoords:()=>kq,getSliceSize:()=>Nq,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>Qq,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>Zq,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>Jq,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>rK,getSparseReshapeInputOutputMismatchErrorMessage:()=>nK,getSparseReshapeInputOutputMultipleErrorMessage:()=>oK,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>eK,getSparseReshapeNegativeOutputDimErrorMessage:()=>tK,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>uK,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>sK,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>aK,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>iK,getUndoAxesPermutation:()=>PU,isIdentityPermutation:()=>jq,log:()=>GV,mergeRealAndImagArrays:()=>Oq,prepareAndValidate:()=>Zv,prepareSplitSize:()=>Yq,segment_util:()=>wC,shouldFuse:()=>bu,slice_util:()=>ut,splitRealAndImagArrays:()=>Pq,tupleValuesAreOne:()=>iu,upcastType:()=>dt,validateDefaultValueShape:()=>bq,validateInput:()=>Qm,validateUpdateShape:()=>tC,warn:()=>Os});function fq(r,e){let t=r[0].length;r.forEach((n,s)=>{E(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),E(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function hq(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function xq(r){let e={FIRST_DIM_SIZE:Ks.FIRST_DIM_SIZE,VALUE_ROWIDS:Ks.VALUE_ROWIDS,ROW_LENGTHS:Ks.ROW_LENGTHS,ROW_SPLITS:Ks.ROW_SPLITS,ROW_LIMITS:Ks.ROW_LIMITS,ROW_STARTS:Ks.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function yq(r){return r.length===0?0:r[0]===Ks.FIRST_DIM_SIZE?r.length-1:r.length}function bq(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var Ud=30;function Cq(r){return r<=Ud?r:sp(r,Math.floor(Math.sqrt(r)))}function Sq(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function wq(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function vq(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",Uq=/->/g,SN=\",\",wN=\"...\";function Gq(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(Uq,\"\").length)/SC.length;if(t<1)throw new Error(\"Equations without an arrow are not supported.\");if(t>1)throw new Error(`Equation must contain exactly one arrow (\"${SC}\").`);let[o,n]=r.split(SC);E(o.indexOf(wN)===-1,()=>`The ellipsis notation (\"${wN}\") is not supported yet.`);let s=o.split(SN),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error(\"Support for more than 2 input tensors is not implemented yet.\");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function qq(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function Kq(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function Xq(r,e){let t=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);E(n<=1,()=>\"There should be only one negative value in split array.\");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}E(r.shape[t]===e.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=e}return o}function Qq(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function Zq(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function Jq(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function eK(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function tK(r,e){return`size ${r} must be non-negative, not ${e}`}function rK(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function oK(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function nK(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function sK(){return\"segment ids must be >= 0\"}function aK(){return\"segment ids are not increasing\"}function iK(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function uK(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var wC={};Ue(wC,{collectGatherOpShapeInfo:()=>lK,computeOutShape:()=>cK,segOpComputeOptimalWindowSize:()=>pK});function pK(r,e){let t=!1,o;for(r<=Ud?(o=r,t=!0):o=sp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=sp(r,o+1);return o}function cK(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) (\n ${s}).`);if(tAp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function dK(r){return r.map(e=>gi(e))}var Lt={};Ue(Lt,{nonMaxSuppressionV3Impl:()=>Vd,nonMaxSuppressionV4Impl:()=>zd,nonMaxSuppressionV5Impl:()=>Wd,whereImpl:()=>Pd});var fK=O();fK.registerFlag(\"KEEP_INTERMEDIATE_TENSORS\",()=>!1,r=>{r&&console.warn(\"Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.\")});var ao;(function(r){r[r.DT_INVALID=0]=\"DT_INVALID\",r[r.DT_FLOAT=1]=\"DT_FLOAT\",r[r.DT_DOUBLE=2]=\"DT_DOUBLE\",r[r.DT_INT32=3]=\"DT_INT32\",r[r.DT_UINT8=4]=\"DT_UINT8\",r[r.DT_INT16=5]=\"DT_INT16\",r[r.DT_INT8=6]=\"DT_INT8\",r[r.DT_STRING=7]=\"DT_STRING\",r[r.DT_COMPLEX64=8]=\"DT_COMPLEX64\",r[r.DT_INT64=9]=\"DT_INT64\",r[r.DT_BOOL=10]=\"DT_BOOL\",r[r.DT_QINT8=11]=\"DT_QINT8\",r[r.DT_QUINT8=12]=\"DT_QUINT8\",r[r.DT_QINT32=13]=\"DT_QINT32\",r[r.DT_BFLOAT16=14]=\"DT_BFLOAT16\",r[r.DT_QINT16=15]=\"DT_QINT16\",r[r.DT_QUINT16=16]=\"DT_QUINT16\",r[r.DT_UINT16=17]=\"DT_UINT16\",r[r.DT_COMPLEX128=18]=\"DT_COMPLEX128\",r[r.DT_HALF=19]=\"DT_HALF\",r[r.DT_RESOURCE=20]=\"DT_RESOURCE\",r[r.DT_VARIANT=21]=\"DT_VARIANT\",r[r.DT_UINT32=22]=\"DT_UINT32\",r[r.DT_UINT64=23]=\"DT_UINT64\",r[r.DT_FLOAT_REF=101]=\"DT_FLOAT_REF\",r[r.DT_DOUBLE_REF=102]=\"DT_DOUBLE_REF\",r[r.DT_INT32_REF=103]=\"DT_INT32_REF\",r[r.DT_UINT8_REF=104]=\"DT_UINT8_REF\",r[r.DT_INT16_REF=105]=\"DT_INT16_REF\",r[r.DT_INT8_REF=106]=\"DT_INT8_REF\",r[r.DT_STRING_REF=107]=\"DT_STRING_REF\",r[r.DT_COMPLEX64_REF=108]=\"DT_COMPLEX64_REF\",r[r.DT_INT64_REF=109]=\"DT_INT64_REF\",r[r.DT_BOOL_REF=110]=\"DT_BOOL_REF\",r[r.DT_QINT8_REF=111]=\"DT_QINT8_REF\",r[r.DT_QUINT8_REF=112]=\"DT_QUINT8_REF\",r[r.DT_QINT32_REF=113]=\"DT_QINT32_REF\",r[r.DT_BFLOAT16_REF=114]=\"DT_BFLOAT16_REF\",r[r.DT_QINT16_REF=115]=\"DT_QINT16_REF\",r[r.DT_QUINT16_REF=116]=\"DT_QUINT16_REF\",r[r.DT_UINT16_REF=117]=\"DT_UINT16_REF\",r[r.DT_COMPLEX128_REF=118]=\"DT_COMPLEX128_REF\",r[r.DT_HALF_REF=119]=\"DT_HALF_REF\",r[r.DT_RESOURCE_REF=120]=\"DT_RESOURCE_REF\",r[r.DT_VARIANT_REF=121]=\"DT_VARIANT_REF\",r[r.DT_UINT32_REF=122]=\"DT_UINT32_REF\",r[r.DT_UINT64_REF=123]=\"DT_UINT64_REF\"})(ao||(ao={}));var IN;(function(r){let e;(function(t){t[t.LEGACY=0]=\"LEGACY\",t[t.V1=1]=\"V1\",t[t.V2=2]=\"V2\"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(IN||(IN={}));var vC={};function gK(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};vC[r]=t}function Gd(r){return vC[r]}function xK(r){delete vC[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd;if(s.type===\"tensor\")return Gt(e.inputNames[s.inputIndexStart],t,o,n);if(s.type===\"tensors\")return e.inputNames.slice(i,p).map(m=>Gt(m,t,o,n));let u=Gt(e.inputNames.slice(i)[0],t,o,n),c=u.dataSync();return s.type===\"number\"?c[0]:y.toNestedArray(u.shape,c)}let a=e.attrParams[r];return a&&a.value}function Gt(r,e,t,o){let[n,s]=Ir(r);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[Hd(n,i)]);return a!==void 0?e[Hd(n,a)][s]:void 0}function vN(r,e,t){return e[Hd(r,t.currentContextId)]}function ss(r,e){let[t,o,n]=Ir(r);return[Hd(t,e&&e.currentContextId),o,n]}function Hd(r,e){return e?`${r}-${e}`:r}function Ir(r){let e=r.split(\":\");if(e.length===1)return[r,0,void 0];let t=e[0],o=e.length===3?e[1]:void 0,n=Number(e[e.length-1]);return[t,n,o]}function ul(r,e,t){let o=I(\"pad\",r,e,t);if(o===\"explicit\"){o=I(\"explicitPaddings\",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function as(r){return r.kept?r:Br(r)}var kC={};Ue(kC,{json:()=>yK});var yK=[{tfOpName:\"Add\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AddV2\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AddN\",category:\"arithmetic\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}]},{tfOpName:\"BiasAdd\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"Sub\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"RealDiv\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Div\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"DivNoNan\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"FloorDiv\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Mul\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Maximum\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Minimum\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Pow\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SquaredDifference\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Mod\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"FloorMod\",category:\"arithmetic\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var NC={};Ue(NC,{json:()=>bK});var bK=[{tfOpName:\"Abs\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Acos\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Asin\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atan2\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Ceil\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ClipByValue\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"clipValueMin\",type:\"number\"},{start:2,name:\"clipValueMax\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Complex\",category:\"basic_math\",inputs:[{start:0,name:\"real\",type:\"tensor\"},{start:1,name:\"imag\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ComplexAbs\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cos\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cosh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Elu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Exp\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Floor\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Log\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Imag\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"outputType\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Neg\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Real\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"outputType\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Prelu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"alpha\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Relu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Relu6\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Selu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sigmoid\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sin\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sinh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sqrt\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Rsqrt\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Square\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Tan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Tanh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Sign\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Round\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Expm1\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Log1p\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Reciprocal\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Softplus\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Asinh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Acosh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Atanh\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Erf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Prod\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axes\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LeakyRelu\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"alpha\",name:\"alpha\",type:\"number\",defaultValue:.2},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsNan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var TC={};Ue(TC,{json:()=>CK});var CK=[{tfOpName:\"EmptyTensorList\",category:\"control\",inputs:[{start:0,name:\"elementShape\",type:\"shape\"},{start:1,name:\"maxNumElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"LoopCond\",category:\"control\",inputs:[{start:0,name:\"pred\",type:\"tensor\"}]},{tfOpName:\"Switch\",category:\"control\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"pred\",type:\"tensor\"}]},{tfOpName:\"Merge\",category:\"control\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}]},{tfOpName:\"Enter\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"frame_name\",name:\"frameName\",type:\"string\"},{tfName:\"is_constant\",name:\"isConstant\",type:\"bool\"}]},{tfOpName:\"Exit\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"NextIteration\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayV3\",category:\"control\",inputs:[{start:0,name:\"size\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"dynamic_size\",name:\"dynamicSize\",type:\"bool\"},{tfName:\"clear_after_read\",name:\"clearAfterRead\",type:\"bool\"},{tfName:\"identical_element_shapes\",name:\"identicalElementShapes\",type:\"bool\"},{tfName:\"tensor_array_name\",name:\"name\",type:\"string\"}]},{tfOpName:\"TensorArrayWriteV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"tensor\",type:\"tensor\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayReadV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"TensorArrayGatherV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"}]},{tfOpName:\"TensorArrayScatterV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"tensor\",type:\"tensor\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TensorArrayConcatV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"element_shape_except0\",name:\"elementShapeExcept0\",type:\"shape\",notSupported:!0}]},{tfOpName:\"TensorArraySplitV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"tensor\",type:\"tensor\"},{start:2,name:\"lengths\",type:\"number[]\"},{start:3,name:\"flowIn\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TensorArraySizeV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"},{start:1,name:\"flowIn\",type:\"number\"}]},{tfOpName:\"TensorArrayCloseV3\",category:\"control\",inputs:[{start:0,name:\"tensorArrayId\",type:\"tensor\"}]},{tfOpName:\"StatelessIf\",category:\"control\",inputs:[{start:0,name:\"cond\",type:\"tensor\"},{start:1,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"then_branch\",name:\"thenBranch\",type:\"func\"},{tfName:\"else_branch\",name:\"elseBranch\",type:\"func\"}]},{tfOpName:\"If\",category:\"control\",inputs:[{start:0,name:\"cond\",type:\"tensor\"},{start:1,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"then_branch\",name:\"thenBranch\",type:\"func\"},{tfName:\"else_branch\",name:\"elseBranch\",type:\"func\"}]},{tfOpName:\"StatelessWhile\",category:\"control\",inputs:[{start:0,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"cond\",name:\"cond\",type:\"func\"},{tfName:\"body\",name:\"body\",type:\"func\"}]},{tfOpName:\"While\",category:\"control\",inputs:[{start:0,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"cond\",name:\"cond\",type:\"func\"},{tfName:\"body\",name:\"body\",type:\"func\"}]},{tfOpName:\"TensorListScatter\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListScatterV2\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"},{start:3,name:\"numElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListGather\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"indices\",type:\"number[]\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListGetItem\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListSetItem\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"index\",type:\"number\"},{start:2,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListReserve\",category:\"control\",inputs:[{start:0,name:\"elementShape\",type:\"shape\"},{start:1,name:\"numElements\",type:\"number\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListFromTensor\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListStack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"},{tfName:\"num_elements\",name:\"numElements\",type:\"dtype\"}]},{tfOpName:\"TensorListSplit\",category:\"control\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"},{start:2,name:\"lengths\",type:\"number[]\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListConcat\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}],attrs:[{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListConcatV2\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}],attrs:[{tfName:\"element_shape\",name:\"elementShape\",type:\"shape\"},{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListPopBack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"elementShape\",type:\"shape\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListPushBack\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"element_dtype\",name:\"elementDType\",type:\"dtype\"}]},{tfOpName:\"TensorListLength\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}]},{tfOpName:\"TensorListResize\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"}]}];var _C={};Ue(_C,{json:()=>SK});var SK=[{tfOpName:\"AvgPool\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPool\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[],notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPoolWithArgmax\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"include_batch_in_index\",name:\"includeBatchInIndex\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"AvgPool3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MaxPool3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"ksize\",name:\"kernelSize\",type:\"number[]\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Conv1D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"stride\",name:\"stride\",type:\"number\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NWC\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"dilation\",name:\"dilation\",type:\"number\",defaultValue:1}]},{tfOpName:\"Conv2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"useCudnnOnGpu\",name:\"useCudnnOnGpu\",type:\"bool\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"_FusedConv2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"use_cudnn_on_gpu\",name:\"useCudnnOnGpu\",type:\"bool\",defaultValue:!0},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",defaultValue:[1,1,1,1]},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:1e-4},{tfName:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2}]},{tfOpName:\"Conv2DBackpropInput\",category:\"convolution\",inputs:[{start:2,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:0,name:\"outputShape\",type:\"number[]\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",notSupported:!0}]},{tfOpName:\"DepthwiseConv2d\",category:\"convolution\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"DepthwiseConv2dNative\",category:\"convolution\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"FusedDepthwiseConv2dNative\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\",defaultValue:[1,1,1,1]},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"explicit_paddings\",name:\"explicitPaddings\",type:\"number[]\",defaultValue:[]}]},{tfOpName:\"Conv3D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",defaultValue:\"NHWC\"},{tfName:\"dilations\",name:\"dilations\",type:\"number[]\"}]},{tfOpName:\"Dilation2D\",category:\"convolution\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"filter\",type:\"tensor\"}],attrs:[{tfName:\"strides\",name:\"strides\",type:\"number[]\"},{tfName:\"rates\",name:\"dilations\",type:\"number[]\"},{tfName:\"padding\",name:\"pad\",type:\"string\"}]}];var EC={};Ue(EC,{json:()=>wK});var wK=[{tfOpName:\"Fill\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"},{start:1,name:\"value\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"LinSpace\",category:\"creation\",inputs:[{start:0,name:\"start\",type:\"number\"},{start:1,name:\"stop\",type:\"number\"},{start:2,name:\"num\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"OneHot\",category:\"creation\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"depth\",type:\"number\"},{start:2,name:\"onValue\",type:\"number\",defaultValue:1},{start:3,name:\"offValue\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",notSupported:!0},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Ones\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"OnesLike\",category:\"creation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"RandomStandardNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"RandomUniform\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\",defaultValue:0},{tfName:\"maxval\",name:\"maxval\",type:\"number\",defaultValue:1},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"Range\",category:\"creation\",inputs:[{start:0,name:\"start\",type:\"number\"},{start:1,name:\"stop\",type:\"number\"},{start:2,name:\"step\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"Tidx\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"TruncatedNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"means\",name:\"mean\",type:\"number\",defaultValue:0},{tfName:\"stddev\",name:\"stdDev\",type:\"number\",defaultValue:1},{tfName:\"seed\",name:\"seed\",type:\"number\"},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,notSupported:!0},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"},{tfName:\"T\",name:\"T\",type:\"number\",notSupported:!0}]},{tfOpName:\"Zeros\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"ZerosLike\",category:\"creation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Multinomial\",category:\"creation\",inputs:[{start:0,name:\"logits\",type:\"tensor\"},{start:1,name:\"numSamples\",type:\"number\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\"},{tfName:\"seed2\",name:\"seed2\",type:\"number\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\"},{tfName:\"output_dtype\",name:\"output_dtype\",type:\"dtype\"}]}];var $C={};Ue($C,{json:()=>IK});var IK=[{tfOpName:\"NonMaxSuppressionV2\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"}]},{tfOpName:\"NonMaxSuppressionV3\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"}]},{tfOpName:\"NonMaxSuppressionV4\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0},{tfName:\"T_threshold\",name:\"threshold\",type:\"dtype\",notSupported:!0},{tfName:\"pad_to_max_output_size\",name:\"padToMaxOutputSize\",type:\"bool\"}]},{tfOpName:\"NonMaxSuppressionV5\",category:\"dynamic\",inputs:[{start:0,name:\"boxes\",type:\"tensor\"},{start:1,name:\"scores\",type:\"tensor\"},{start:2,name:\"maxOutputSize\",type:\"number\"},{start:3,name:\"iouThreshold\",type:\"number\"},{start:4,name:\"scoreThreshold\",type:\"number\"},{start:5,name:\"softNmsSigma\",type:\"number\"}]},{tfOpName:\"Where\",category:\"dynamic\",inputs:[{start:0,name:\"condition\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ListDiff\",category:\"dynamic\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var AC={};Ue(AC,{json:()=>vK});var vK=[{tfOpName:\"LowerBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{tfOpName:\"TopKV2\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"k\",type:\"number\"}],attrs:[{tfName:\"sorted\",name:\"sorted\",type:\"bool\"}]},{tfOpName:\"UpperBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{tfOpName:\"Unique\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"UniqueV2\",category:\"evaluation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]}];var RC={};Ue(RC,{json:()=>kK});var kK=[{tfOpName:\"PlaceholderWithDefault\",category:\"graph\",inputs:[{start:0,name:\"default\",type:\"tensor\"}],attrs:[{tfName:\"shape\",name:\"shape\",type:\"shape\"},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Placeholder\",category:\"graph\",attrs:[{tfName:\"shape\",name:\"shape\",type:\"shape\"},{tfName:\"dtype\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"Const\",category:\"graph\"},{tfOpName:\"Identity\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"IdentityN\",category:\"graph\",inputs:[{start:0,end:0,name:\"x\",type:\"tensors\"}]},{tfOpName:\"Snapshot\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Rank\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Size\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"Shape\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"ShapeN\",category:\"graph\",inputs:[{start:0,end:0,name:\"x\",type:\"tensors\"}]},{tfOpName:\"Print\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"data\",type:\"tensors\"}],attrs:[{tfName:\"message\",name:\"message\",type:\"string\"},{tfName:\"first_n\",name:\"firstN\",type:\"number\",notSupported:!0},{tfName:\"summarize\",name:\"summarize\",type:\"number\",defaultValue:3}]},{tfOpName:\"NoOp\",category:\"graph\",inputs:[]},{tfOpName:\"StopGradient\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"FakeQuantWithMinMaxVars\",category:\"graph\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"min\",name:\"min\",type:\"number\"},{tfName:\"max\",name:\"max\",type:\"number\"}]}];var FC={};Ue(FC,{json:()=>NK});var NK=[{tfOpName:\"HashTable\",category:\"hash_table\",inputs:[],attrs:[{tfName:\"shared_name\",name:\"sharedName\",type:\"string\"},{tfName:\"use_node_name_sharing\",name:\"useNodeNameSharing\",type:\"bool\"},{tfName:\"key_dtype\",name:\"keyDType\",type:\"dtype\"},{tfName:\"value_dtype\",name:\"valueDType\",type:\"dtype\"}]},{tfOpName:\"HashTableV2\",category:\"hash_table\",inputs:[],attrs:[{tfName:\"shared_name\",name:\"sharedName\",type:\"string\"},{tfName:\"use_node_name_sharing\",name:\"useNodeNameSharing\",type:\"bool\"},{tfName:\"key_dtype\",name:\"keyDType\",type:\"dtype\"},{tfName:\"value_dtype\",name:\"valueDType\",type:\"dtype\"}]},{tfOpName:\"LookupTableImport\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableImportV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableFind\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableFindV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"Tin\",name:\"tIn\",type:\"dtype\",notSupported:!0},{tfName:\"Tout\",name:\"tOut\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LookupTableSize\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"LookupTableSizeV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"InitializeTable\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]},{tfOpName:\"InitializeTableV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var DC={};Ue(DC,{json:()=>TK});var TK=[{tfOpName:\"ResizeBilinear\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"size\",type:\"number[]\"}],attrs:[{tfName:\"align_corners\",name:\"alignCorners\",type:\"bool\"},{tfName:\"half_pixel_centers\",name:\"halfPixelCenters\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"ResizeNearestNeighbor\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"size\",type:\"number[]\"}],attrs:[{tfName:\"align_corners\",name:\"alignCorners\",type:\"bool\"},{tfName:\"half_pixel_centers\",name:\"halfPixelCenters\",type:\"bool\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"CropAndResize\",category:\"image\",inputs:[{start:0,name:\"image\",type:\"tensor\"},{start:1,name:\"boxes\",type:\"tensor\"},{start:2,name:\"boxInd\",type:\"tensor\"},{start:3,name:\"cropSize\",type:\"number[]\"}],attrs:[{tfName:\"method\",name:\"method\",type:\"string\"},{tfName:\"extrapolation_value\",name:\"extrapolationValue\",type:\"number\"}]},{tfOpName:\"ImageProjectiveTransformV3\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"transforms\",type:\"tensor\"},{start:2,name:\"outputShape\",type:\"number[]\"},{start:3,name:\"fillValue\",type:\"number\"}],attrs:[{tfName:\"interpolation\",name:\"interpolation\",type:\"string\"},{tfName:\"fill_mode\",name:\"fillMode\",type:\"string\"}]}];var OC={};Ue(OC,{json:()=>_K});var _K=[{tfOpName:\"Equal\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"NotEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Greater\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"GreaterEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Less\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LessEqual\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalAnd\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalNot\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"LogicalOr\",category:\"logical\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Select\",category:\"logical\",inputs:[{start:0,name:\"condition\",type:\"tensor\"},{start:1,name:\"a\",type:\"tensor\"},{start:2,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SelectV2\",category:\"logical\",inputs:[{start:0,name:\"condition\",type:\"tensor\"},{start:1,name:\"a\",type:\"tensor\"},{start:2,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var PC={};Ue(PC,{json:()=>EK});var EK=[{tfOpName:\"_FusedMatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"},{start:2,end:0,name:\"args\",type:\"tensors\"}],attrs:[{tfName:\"num_args\",name:\"numArgs\",type:\"number\"},{tfName:\"fused_ops\",name:\"fusedOps\",type:\"string[]\",defaultValue:[]},{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:1e-4},{tfName:\"transpose_a\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"transpose_b\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"MatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"transpose_a\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"transpose_b\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"BatchMatMul\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"adj_x\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"adj_y\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"BatchMatMulV2\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"b\",type:\"tensor\"}],attrs:[{tfName:\"adj_x\",name:\"transposeA\",type:\"bool\",defaultValue:!1},{tfName:\"adj_y\",name:\"transposeB\",type:\"bool\",defaultValue:!1},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Transpose\",category:\"matrices\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"perm\",type:\"number[]\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Einsum\",category:\"matrices\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"equation\",name:\"equation\",type:\"string\"},{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]}];var MC={};Ue(MC,{json:()=>$K});var $K=[{tfOpName:\"EuclideanNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",defaultValue:!1}]},{tfOpName:\"FusedBatchNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"FusedBatchNormV2\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"FusedBatchNormV3\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"scale\",type:\"tensor\"},{start:2,name:\"offset\",type:\"tensor\"},{start:3,name:\"mean\",type:\"tensor\"},{start:4,name:\"variance\",type:\"tensor\"}],attrs:[{tfName:\"epsilon\",name:\"epsilon\",type:\"number\",defaultValue:.001},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\",notSupported:!0}]},{tfOpName:\"LRN\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"depth_radius\",name:\"radius\",type:\"number\",defaultValue:5},{tfName:\"bias\",name:\"bias\",type:\"number\",defaultValue:1},{tfName:\"alpha\",name:\"alpha\",type:\"number\",defaultValue:1},{tfName:\"beta\",name:\"beta\",type:\"number\",defaultValue:.5}]},{tfOpName:\"Softmax\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"LogSoftmax\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"SparseToDense\",category:\"normalization\",inputs:[{start:0,name:\"sparseIndices\",type:\"tensor\"},{start:1,name:\"outputShape\",type:\"number[]\"},{start:2,name:\"sparseValues\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",defaultValue:!0,notSupported:!0}]}];var LC={};Ue(LC,{json:()=>AK});var AK=[{tfOpName:\"Bincount\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"},{start:2,name:\"weights\",type:\"tensor\"}]},{tfOpName:\"DenseBincount\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"},{start:2,name:\"weights\",type:\"tensor\"}],attrs:[{tfName:\"binary_output\",name:\"binaryOutput\",type:\"bool\"}]},{tfOpName:\"Max\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Mean\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Min\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Sum\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"All\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Any\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"ArgMax\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"ArgMin\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"Prod\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\"}]},{tfOpName:\"Cumprod\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"exclusive\",name:\"exclusive\",type:\"bool\"},{tfName:\"reverse\",name:\"reverse\",type:\"bool\"}]},{tfOpName:\"Cumsum\",category:\"reduction\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"exclusive\",name:\"exclusive\",type:\"bool\"},{tfName:\"reverse\",name:\"reverse\",type:\"bool\"}]}];var BC={};Ue(BC,{json:()=>RK});var RK=[{tfOpName:\"ConcatV2\",category:\"slice_join\",inputs:[{start:0,end:-1,name:\"tensors\",type:\"tensors\"},{start:-1,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2}]},{tfOpName:\"Concat\",category:\"slice_join\",inputs:[{start:1,end:0,name:\"tensors\",type:\"tensors\"},{start:0,name:\"axis\",type:\"number\"}],attrs:[{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2}]},{tfOpName:\"GatherV2\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"axis\",type:\"number\",defaultValue:0}],attrs:[{tfName:\"batch_dims\",name:\"batchDims\",type:\"number\",defaultValue:0}]},{tfOpName:\"Gather\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",notSupported:!0}]},{tfOpName:\"Reverse\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"dims\",type:\"bool[]\"}]},{tfOpName:\"ReverseV2\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}]},{tfOpName:\"Slice\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"begin\",type:\"number[]\"},{start:2,name:\"size\",type:\"number[]\"}]},{tfOpName:\"StridedSlice\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"begin\",type:\"number[]\"},{start:2,name:\"end\",type:\"number[]\"},{start:3,name:\"strides\",type:\"number[]\"}],attrs:[{tfName:\"begin_mask\",name:\"beginMask\",type:\"number\",defaultValue:0},{tfName:\"end_mask\",name:\"endMask\",type:\"number\",defaultValue:0},{tfName:\"new_axis_mask\",name:\"newAxisMask\",type:\"number\",defaultValue:0},{tfName:\"ellipsis_mask\",name:\"ellipsisMask\",type:\"number\",defaultValue:0},{tfName:\"shrink_axis_mask\",name:\"shrinkAxisMask\",type:\"number\",defaultValue:0}]},{tfOpName:\"Pack\",category:\"slice_join\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",defaultValue:0}]},{tfOpName:\"Unpack\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"}],attrs:[{tfName:\"axis\",name:\"axis\",type:\"number\",defaultValue:0},{tfName:\"num\",name:\"num\",type:\"number\",defaultValue:0,notSupported:!0}]},{tfOpName:\"Tile\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"reps\",type:\"number[]\"}]},{tfOpName:\"Split\",category:\"slice_join\",inputs:[{start:0,name:\"axis\",type:\"number\",defaultValue:0},{start:1,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"num_split\",name:\"numOrSizeSplits\",type:\"number\",defaultValue:1}]},{tfOpName:\"SplitV\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"numOrSizeSplits\",type:\"number[]\"},{start:2,name:\"axis\",type:\"number\",defaultValue:0}]},{tfOpName:\"ScatterNd\",category:\"slice_join\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"shape\",type:\"number[]\"}]},{tfOpName:\"GatherNd\",category:\"slice_join\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"}]},{tfOpName:\"SparseToDense\",category:\"slice_join\",inputs:[{start:0,name:\"sparseIndices\",type:\"tensor\"},{start:1,name:\"outputShape\",type:\"number[]\"},{start:2,name:\"sparseValues\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}],attrs:[{tfName:\"validate_indices\",name:\"validateIndices\",type:\"bool\",defaultValue:!1,notSupported:!0}]}];var VC={};Ue(VC,{json:()=>FK});var FK=[{tfOpName:\"SparseFillEmptyRows\",category:\"sparse\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"denseShape\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}]},{tfOpName:\"SparseReshape\",category:\"sparse\",inputs:[{start:0,name:\"inputIndices\",type:\"tensor\"},{start:1,name:\"inputShape\",type:\"tensor\"},{start:2,name:\"newShape\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SparseSegmentMean\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]},{tfOpName:\"SparseSegmentSum\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]}];var zC={};Ue(zC,{json:()=>DK});var DK=[{tfOpName:\"FFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"IFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"}]},{tfOpName:\"RFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"fft_length\",type:\"number\",notSupported:!0}]},{tfOpName:\"IRFFT\",category:\"spectral\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"fft_length\",type:\"number\",notSupported:!0}]}];var WC={};Ue(WC,{json:()=>OK});var OK=[{tfOpName:\"StringNGrams\",category:\"string\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"dataSplits\",type:\"tensor\"}],attrs:[{tfName:\"separator\",name:\"separator\",type:\"string\"},{tfName:\"ngram_widths\",name:\"nGramWidths\",type:\"number[]\"},{tfName:\"left_pad\",name:\"leftPad\",type:\"string\"},{tfName:\"right_pad\",name:\"rightPad\",type:\"string\"},{tfName:\"pad_width\",name:\"padWidth\",type:\"number\"},{tfName:\"preserve_short_sequences\",name:\"preserveShortSequences\",type:\"bool\"}],outputs:[\"ngrams\",\"ngrams_splits\"]},{tfOpName:\"StringSplit\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"delimiter\",type:\"tensor\"}],attrs:[{tfName:\"skip_empty\",name:\"skipEmpty\",type:\"bool\"}],outputs:[\"indices\",\"values\",\"shape\"]},{tfOpName:\"StringToHashBucketFast\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"num_buckets\",name:\"numBuckets\",type:\"number\"}]}];var UC={};Ue(UC,{json:()=>PK});var PK=[{tfOpName:\"Cast\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"SrcT\",name:\"sdtype\",type:\"dtype\",notSupported:!0},{tfName:\"DstT\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"ExpandDims\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number\"}]},{tfOpName:\"MirrorPad\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"}],attrs:[{tfName:\"mode\",name:\"mode\",type:\"string\"}]},{tfOpName:\"Pad\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"}],attrs:[{tfName:\"constant_value\",name:\"constantValue\",type:\"number\",defaultValue:0}]},{tfOpName:\"PadV2\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"padding\",type:\"number[]\"},{start:2,name:\"constantValue\",type:\"number\",defaultValue:0}]},{tfOpName:\"Reshape\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"shape\",type:\"number[]\"}]},{tfOpName:\"Squeeze\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"axis\",tfDeprecatedName:\"squeeze_dims\",name:\"axis\",type:\"number[]\"}]},{tfOpName:\"SpaceToBatchND\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"blockShape\",type:\"number[]\"},{start:2,name:\"paddings\",type:\"number[]\"}]},{tfOpName:\"BatchToSpaceND\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"blockShape\",type:\"number[]\"},{start:2,name:\"crops\",type:\"number[]\"}]},{tfOpName:\"DepthToSpace\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"block_size\",name:\"blockSize\",type:\"number\"},{tfName:\"data_format\",name:\"dataFormat\",type:\"string\"}]},{tfOpName:\"BroadcastTo\",category:\"transformation\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"shape\",type:\"number[]\"}],attrs:[]},{tfOpName:\"BroadcastArgs\",category:\"transformation\",inputs:[{start:0,name:\"s0\",type:\"tensor\"},{start:1,name:\"s1\",type:\"tensor\"}],attrs:[]}];var pl=class{constructor(){let e=[kC,NC,TC,_C,EC,$C,AC,RC,FC,DC,OC,PC,MC,LC,BC,VC,zC,WC,UC],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith(\"Placeholder\")?n.push(h[g.name]):g.op===\"Const\"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[C,,w]=ss(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(w);if(_!==-1){let $=`${C}:${_}`;g.inputNames[b]=$}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=ss(h),x=i[g];x!=null&&(x.signatureKey=l[h],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=ss(h),x=i[g];x&&(x.signatureKey=c[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=Gd(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=qd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=qd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=Jd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Jd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=jd(e.attr,s.tfName,s.defaultValue||0),i===void 0&&!!s.tfDeprecatedName&&(i=jd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=Zd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Zd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=Kd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Kd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=tf(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=tf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=Qd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Qd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=ef(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ef(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=Xd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Xd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=Yd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Yd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=kN(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=kN(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=ss(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:GC(l.type),type:\"dtype\"}},children:[]};d.signatureKey=l.name,a.push(d),s[m]=d}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((d,f)=>{let[h,,g]=ss(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[f]=C}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,d]=ss(u[l.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function MK(r){let e=O().global;if(typeof e.atob!=\"undefined\")return e.atob(r);if(typeof Buffer!=\"undefined\")return new Buffer(r,\"base64\").toString();throw new Error(\"Unable to decode base64 in this environment. Missing built-in atob() or Buffer()\")}function NN(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):MK(r);return e?t:t.toLowerCase()}function qd(r,e,t,o=!1){let n=r[e];return n!=null?NN(n.s,o):t}function Kd(r,e,t){let o=r[e];return o?o.b:t}function jd(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n==\"number\"?n:parseInt(n,10)}function GC(r){switch(typeof r==\"string\"&&(r=ao[r]),r){case ao.DT_FLOAT:case ao.DT_HALF:return\"float32\";case ao.DT_INT32:case ao.DT_INT64:case ao.DT_INT8:case ao.DT_UINT8:return\"int32\";case ao.DT_BOOL:return\"bool\";case ao.DT_DOUBLE:return\"float32\";case ao.DT_STRING:return\"string\";default:return null}}function kN(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function Xd(r,e,t){let o=r[e];return o&&o.type?GC(o.type):t}function Yd(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>GC(n)):t}function TN(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function Qd(r,e,t){let o=r[e];return o&&o.shape?TN(o.shape):t}function Zd(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):t}function Jd(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>NN(s,o)):t}function ef(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>TN(n)):t}function tf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var rf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Gt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Gt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return jd(this.node.rawAttrs,e,t);if(o.s!=null)return qd(this.node.rawAttrs,e,t);if(o.b!=null)return Kd(this.node.rawAttrs,e,t);if(o.shape!=null)return Qd(this.node.rawAttrs,e,t);if(o.type!=null)return Xd(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return Zd(this.node.rawAttrs,e,t);if(o.list.s!=null)return Jd(this.node.rawAttrs,e,t);if(o.list.shape!=null)return ef(this.node.rawAttrs,e,t);if(o.list.b!=null)return tf(this.node.rawAttrs,e,t);if(o.list.type!=null)return Yd(this.node.rawAttrs,e,t)}return t}};var Ye={};Ue(Ye,{OP_SCOPE_SUFFIX:()=>Lb,abs:()=>Yt,acos:()=>f0,acosh:()=>h0,add:()=>xe,addN:()=>g0,all:()=>x0,any:()=>y0,argMax:()=>b0,argMin:()=>C0,asin:()=>S0,asinh:()=>w0,atan:()=>I0,atan2:()=>v0,atanh:()=>k0,avgPool:()=>td,avgPool3d:()=>_0,basicLSTMCell:()=>E0,batchNorm:()=>wi,batchNorm2d:()=>A0,batchNorm3d:()=>R0,batchNorm4d:()=>F0,batchToSpaceND:()=>rd,bincount:()=>od,booleanMaskAsync:()=>XG,broadcastArgs:()=>D0,broadcastTo:()=>Ii,buffer:()=>le,cast:()=>Ke,ceil:()=>O0,clipByValue:()=>P0,clone:()=>Br,complex:()=>Tr,concat:()=>gt,concat1d:()=>M0,concat2d:()=>L0,concat3d:()=>B0,concat4d:()=>V0,conv1d:()=>z0,conv2d:()=>vi,conv2dTranspose:()=>W0,conv3d:()=>U0,conv3dTranspose:()=>H0,cos:()=>q0,cosh:()=>K0,cosineWindow:()=>il,cumprod:()=>j0,cumsum:()=>X0,denseBincount:()=>Y0,depthToSpace:()=>Q0,depthwiseConv2d:()=>Bp,diag:()=>Z0,dilation2d:()=>J0,div:()=>Ge,divNoNan:()=>ek,dot:()=>tk,dropout:()=>aH,einsum:()=>rk,elu:()=>ad,enclosingPowerOfTwo:()=>xC,equal:()=>sd,erf:()=>ok,euclideanNorm:()=>ak,exp:()=>Co,expandDims:()=>Fa,expm1:()=>ik,eye:()=>id,fft:()=>zp,fill:()=>Ws,floor:()=>ud,floorDiv:()=>Jm,fused:()=>yC,gather:()=>pd,gatherND:()=>nH,greater:()=>cu,greaterEqual:()=>cd,ifft:()=>hu,imag:()=>Si,image:()=>uq,inTopKAsync:()=>uH,irfft:()=>Fd,isFinite:()=>uk,isInf:()=>pk,isNaN:()=>ck,leakyRelu:()=>ld,less:()=>lk,lessEqual:()=>Vp,linalg:()=>pq,linspace:()=>mk,localResponseNormalization:()=>dk,log:()=>Da,log1p:()=>md,logSigmoid:()=>fk,logSoftmax:()=>hk,logSumExp:()=>hd,logicalAnd:()=>lu,logicalNot:()=>gd,logicalOr:()=>xd,logicalXor:()=>gk,losses:()=>cq,lowerBound:()=>xk,matMul:()=>Xe,max:()=>Us,maxPool:()=>bd,maxPool3d:()=>yk,maxPoolWithArgmax:()=>bk,maximum:()=>Cd,mean:()=>mu,meshgrid:()=>Ck,min:()=>sl,minimum:()=>Sd,mirrorPad:()=>Sk,mod:()=>wk,moments:()=>Ik,movingAverage:()=>QG,mul:()=>ae,multiRNNCell:()=>vk,multinomial:()=>kk,neg:()=>yr,norm:()=>pu,notEqual:()=>wd,oneHot:()=>tl,ones:()=>Gs,onesLike:()=>Nk,op:()=>N,outerProduct:()=>Tk,pad:()=>Hs,pad1d:()=>_k,pad2d:()=>Ek,pad3d:()=>$k,pad4d:()=>Ak,pool:()=>Rk,pow:()=>Ra,prelu:()=>vd,print:()=>Gm,prod:()=>Fk,raggedGather:()=>Dk,raggedRange:()=>Ok,raggedTensorToTensor:()=>Pk,rand:()=>Mk,randomGamma:()=>e1,randomNormal:()=>Ed,randomStandardNormal:()=>t1,randomUniform:()=>$d,range:()=>Ni,real:()=>$a,reciprocal:()=>r1,relu:()=>Ti,relu6:()=>Ad,reshape:()=>z,reverse:()=>no,reverse1d:()=>o1,reverse2d:()=>n1,reverse3d:()=>s1,reverse4d:()=>a1,rfft:()=>Wp,round:()=>Rd,rsqrt:()=>i1,scalar:()=>be,scatterND:()=>JG,searchSorted:()=>al,selu:()=>u1,separableConv2d:()=>p1,setdiff1dAsync:()=>c1,sigmoid:()=>zs,sign:()=>l1,signal:()=>iq,sin:()=>m1,sinh:()=>d1,slice:()=>He,slice1d:()=>f1,slice2d:()=>h1,slice3d:()=>g1,slice4d:()=>x1,softmax:()=>y1,softplus:()=>fd,spaceToBatchND:()=>Id,sparse:()=>lq,sparseToDense:()=>rH,spectral:()=>aq,split:()=>Oa,sqrt:()=>$r,square:()=>Qt,squaredDifference:()=>Dd,squeeze:()=>Up,stack:()=>Sr,step:()=>Od,stridedSlice:()=>b1,string:()=>mq,sub:()=>Ne,sum:()=>et,tan:()=>C1,tanh:()=>nl,tensor:()=>nr,tensor1d:()=>mr,tensor2d:()=>_i,tensor3d:()=>Xm,tensor4d:()=>S1,tensor5d:()=>w1,tensor6d:()=>I1,tile:()=>ki,topk:()=>v1,transpose:()=>Mp,truncatedNormal:()=>k1,unique:()=>N1,unsortedSegmentSum:()=>T1,unstack:()=>so,upperBound:()=>_1,variable:()=>E1,where:()=>os,whereAsync:()=>Md,zeros:()=>Vr,zerosLike:()=>Ut});var _N=(r,e,t,o=Ye)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"AddN\":return[o.addN(I(\"tensors\",r,e,t))];case\"FloorMod\":case\"Mod\":return[o.mod(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Mul\":return[o.mul(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"RealDiv\":case\"Div\":return[o.div(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"DivNoNan\":return[o.divNoNan(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"FloorDiv\":return[o.floorDiv(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Sub\":return[o.sub(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Minimum\":return[o.minimum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Maximum\":return[o.maximum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Pow\":return[o.pow(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"SquaredDifference\":return[o.squaredDifference(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var EN=(r,e,t,o=Ye)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(I(\"x\",r,e,t))];case\"Acos\":return[o.acos(I(\"x\",r,e,t))];case\"Acosh\":return[o.acosh(I(\"x\",r,e,t))];case\"Asin\":return[o.asin(I(\"x\",r,e,t))];case\"Asinh\":return[o.asinh(I(\"x\",r,e,t))];case\"Atan\":return[o.atan(I(\"x\",r,e,t))];case\"Atan2\":return[o.atan2(I(\"x\",r,e,t),I(\"y\",r,e,t))];case\"Atanh\":return[o.atanh(I(\"x\",r,e,t))];case\"Ceil\":return[o.ceil(I(\"x\",r,e,t))];case\"Complex\":return[o.complex(I(\"real\",r,e,t),I(\"imag\",r,e,t))];case\"Cos\":return[o.cos(I(\"x\",r,e,t))];case\"Cosh\":return[o.cosh(I(\"x\",r,e,t))];case\"Elu\":return[o.elu(I(\"x\",r,e,t))];case\"Erf\":return[o.erf(I(\"x\",r,e,t))];case\"Exp\":return[o.exp(I(\"x\",r,e,t))];case\"Expm1\":return[o.expm1(I(\"x\",r,e,t))];case\"Floor\":return[o.floor(I(\"x\",r,e,t))];case\"Log\":return[o.log(I(\"x\",r,e,t))];case\"Log1p\":return[o.log1p(I(\"x\",r,e,t))];case\"Imag\":return[o.imag(I(\"x\",r,e,t))];case\"Neg\":return[o.neg(I(\"x\",r,e,t))];case\"Reciprocal\":return[o.reciprocal(I(\"x\",r,e,t))];case\"Real\":return[o.real(I(\"x\",r,e,t))];case\"Relu\":return[o.relu(I(\"x\",r,e,t))];case\"Round\":return[o.round(I(\"x\",r,e,t))];case\"Selu\":return[o.selu(I(\"x\",r,e,t))];case\"Sigmoid\":return[o.sigmoid(I(\"x\",r,e,t))];case\"Sin\":return[o.sin(I(\"x\",r,e,t))];case\"Sign\":return[o.sign(I(\"x\",r,e,t))];case\"Sinh\":return[o.sinh(I(\"x\",r,e,t))];case\"Softplus\":return[o.softplus(I(\"x\",r,e,t))];case\"Sqrt\":return[o.sqrt(I(\"x\",r,e,t))];case\"Square\":return[o.square(I(\"x\",r,e,t))];case\"Tanh\":return[o.tanh(I(\"x\",r,e,t))];case\"Tan\":return[o.tan(I(\"x\",r,e,t))];case\"ClipByValue\":return[o.clipByValue(I(\"x\",r,e,t),I(\"clipValueMin\",r,e,t),I(\"clipValueMax\",r,e,t))];case\"Relu6\":return[o.relu6(I(\"x\",r,e,t))];case\"Rsqrt\":return[o.rsqrt(Gt(r.inputNames[0],e,t))];case\"Prod\":return[o.prod(I(\"x\",r,e,t),I(\"axes\",r,e,t))];case\"LeakyRelu\":return[o.leakyRelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"Prelu\":return[o.prelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"IsNan\":return[o.isNaN(Gt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function zr(r,e,t=\"\"){if(!(typeof r==\"number\"||typeof e==\"number\")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function $N(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function Gp(r,e,t){let o=of(r,t),n=!$N(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=of(s.shape,o)}),!$N(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function of(r,e){if(typeof r==\"number\")return e;if(typeof e==\"number\")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var nf=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=be(0),_r(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),zr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,_r(t),o.written=!0,this.tensors[e]=o}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((o,n)=>this.write(o,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,so(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:t.size/o,a=[];Ee(()=>{t=z(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);zr(t,s.shape,\"TensorList shape mismatch: \"),_r(s)}),this.idTensor=be(0),this.maxNumElements=n,_r(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Pa([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);zr(e,this.elementShape,\"TensorList shape mismatch: \");let n=Gp(this.elementShape,this.tensors,e);return Ee(()=>{let s=this.tensors.map(a=>z(a,n));return Sr(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error(\"Trying to pop from an empty list.\");let o=Gp(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,zr(n.shape,e,\"TensorList shape mismatch: \"),z(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(zr(e.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");_r(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new Pa([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);zr(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=Gp(this.elementShape,this.tensors,t);return z(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);zr(this.elementShape,t.shape,\"TensorList shape mismatch: \"),_r(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);zr(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=Gp(this.elementShape,this.tensors,o);return e.length===0?nr([],[0].concat(n)):Ee(()=>{let s=e.map(a=>z(this.tensors[a],n));return Sr(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);zr(this.elementShape,t,\"TensorList shape mismatch: \");let o=Gp(this.elementShape,this.tensors,t);return this.size()===0?nr([],[0].concat(o)):Ee(()=>{let n=this.tensors.map(s=>z(s,o));return gt(n,0)})}};function AN(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);zr(n,e,\"TensorList shape mismatch: \");let s=so(r);return new Pa(s,e,o)}function RN(r,e,t,o){return new Pa([],r,e,o)}function FN(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new Pa([],t,r.dtype,o),a=so(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function DN(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=of(s,t),i=o===0?0:r.size/o,p=Ee(()=>{let c=[];r=z(r,[1,o,i]);for(let l=0;l{switch(r.op){case\"If\":case\"StatelessIf\":{let o=I(\"thenBranch\",r,e,t),n=I(\"elseBranch\",r,e,t),s=I(\"cond\",r,e,t),a=I(\"args\",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=I(\"body\",r,e,t),n=I(\"cond\",r,e,t),s=I(\"args\",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(d=>d.id);c.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()})}return u}case\"LoopCond\":{let o=I(\"pred\",r,e,t);return[as(o)]}case\"Switch\":{let o=I(\"pred\",r,e,t),n=I(\"data\",r,e,t);return n.kept||(n=as(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Gt(n,e,t)!==void 0);if(o){let n=Gt(o,e,t);return[as(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,e,t),n=I(\"tensor\",r,e,t);return t.enterFrame(o),[as(n)]}case\"Exit\":{let o=I(\"tensor\",r,e,t);return t.exitFrame(),[as(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,e,t);return t.nextIteration(),[as(o)]}case\"TensorArrayV3\":{let o=I(\"size\",r,e,t),n=I(\"dtype\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"dynamicSize\",r,e,t),i=I(\"clearAfterRead\",r,e,t),p=I(\"identicalElementShapes\",r,e,t),u=I(\"name\",r,e,t),c=new nf(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,be(1)]}case\"TensorArrayWriteV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t);return[t.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"dtype\",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id),s=I(\"dtype\",r,e,t);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"lengths\",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return[be(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=I(\"indices\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"numElements\",r,e,t),i=FN(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=I(\"elementShape\",r,e,t),n=I(\"elementDType\",r,e,t),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=I(s,r,e,t),i=r.op===\"TensorListReserve\"?-1:a,p=RN(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=I(\"tensorListId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=I(\"numElements\",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=AN(o,n,s);return t.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id),s=I(\"dtype\",r,e,t),a=I(\"elementShape\",r,e,t);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"tensor\",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"lengths\",r,e,t),a=DN(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[be(n.size(),\"int32\")]}case\"TensorListResize\":{let o=I(\"tensorListId\",r,e,t),n=I(\"size\",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PN(r,e,t){let[o,n]=I(\"fusedOps\",r,e,t),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=I(\"numArgs\",r,e,t);if(s){if(i&&u!==2)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&s&&u!==1)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.\")}if(p)throw new Error(\"FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported\");let c=I(\"strides\",r,e,t),l=ul(r,e,t),m=I(\"dataFormat\",r,e,t).toUpperCase(),d=I(\"dilations\",r,e,t),[f,h]=I(\"args\",r,e,t);a&&(h=f,f=void 0);let g=I(\"leakyreluAlpha\",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var MN=(r,e,t,o=Ye)=>{switch(r.op){case\"Conv1D\":{let n=I(\"stride\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilation\",r,e,t);return[o.conv1d(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,s,a,i)]}case\"Conv2D\":{let n=I(\"strides\",r,e,t),s=ul(r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case\"_FusedConv2D\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PN(r,e,t);return[o.fused.conv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"FusedDepthwiseConv2dNative\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PN(r,e,t);return[o.fused.depthwiseConv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"Conv2DBackpropInput\":case\"Conv2dTranspose\":{let n=I(\"outputShape\",r,e,t),s=I(\"strides\",r,e,t),a=ul(r,e,t);return[o.conv2dTranspose(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=I(\"strides\",r,e,t),s=ul(r,e,t),a=I(\"dilations\",r,e,t),i=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthwiseConv2d(I(\"input\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv3d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t),i=I(\"includeBatchInIndex\",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dilations\",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[i,p],s,[u,c],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LN=(r,e,t,o=Ye)=>{switch(r.op){case\"Fill\":{let n=I(\"shape\",r,e,t),s=I(\"dtype\",r,e,t),a=I(\"value\",r,e,t);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"num\",r,e,t);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=I(\"logits\",r,e,t),s=I(\"numSamples\",r,e,t),a=I(\"seed\",r,e,t);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=I(\"indices\",r,e,t),s=I(\"depth\",r,e,t),a=I(\"onValue\",r,e,t),i=I(\"offValue\",r,e,t),p=I(\"dtype\",r,e,t);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"OnesLike\":return[o.onesLike(I(\"x\",r,e,t))];case\"RandomStandardNormal\":return[o.randomStandardNormal(I(\"shape\",r,e,t),I(\"dtype\",r,e,t),I(\"seed\",r,e,t))];case\"RandomUniform\":return[o.randomUniform(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"dtype\",r,e,t))];case\"Range\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"step\",r,e,t);return[o.range(n,s,a,I(\"dtype\",r,e,t))]}case\"TruncatedNormal\":{let n=I(\"shape\",r,e,t),s=I(\"mean\",r,e,t),a=I(\"stdDev\",r,e,t),i=I(\"seed\",r,e,t);return[o.truncatedNormal(n,s,a,I(\"dtype\",r,e,t),i)]}case\"Zeros\":return[o.zeros(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"ZerosLike\":return[o.zerosLike(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function HC(r,e,t){let o=I(\"boxes\",r,e,t),n=I(\"scores\",r,e,t),s=I(\"maxOutputSize\",r,e,t),a=I(\"iouThreshold\",r,e,t),i=I(\"scoreThreshold\",r,e,t),p=I(\"softNmsSigma\",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var BN=async(r,e,t,o,n=Ye)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=HC(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case\"NonMaxSuppressionV4\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=HC(r,e,t),c=I(\"padToMaxOutputSize\",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case\"NonMaxSuppressionV3\":case\"NonMaxSuppressionV2\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=HC(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(I(\"condition\",r,e,t),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(I(\"x\",r,e,t),I(\"y\",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VN=(r,e,t,o=Ye)=>{switch(r.op){case\"LowerBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=I(\"x\",r,e,t),s=I(\"k\",r,e,t),a=I(\"sorted\",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.upperBound(n,s)]}case\"Unique\":{let n=I(\"x\",r,e,t),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=I(\"x\",r,e,t),s=I(\"axis\",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zN=(r,e,t,o=Ye)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,e,t);return[Gt(r.name,e,t)||n];case\"Placeholder\":return[Gt(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,e,t);return[as(c)]}case\"IdentityN\":return I(\"x\",r,e,t).map(c=>as(c));case\"Snapshot\":let s=I(\"x\",r,e,t);return[as(s)];case\"Shape\":return[o.tensor1d(I(\"x\",r,e,t).shape,\"int32\")];case\"ShapeN\":return I(\"x\",r,e,t).map(c=>o.tensor1d(c.shape));case\"Size\":return[o.scalar(I(\"x\",r,e,t).size,\"int32\")];case\"Rank\":return[o.scalar(I(\"x\",r,e,t).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=I(\"x\",r,e,t),i=I(\"data\",r,e,t),p=I(\"message\",r,e,t),u=I(\"summarize\",r,e,t);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return be(this.size(),\"int32\")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Ee(()=>{let n=so(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case\"HashTable\":case\"HashTableV2\":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I(\"keyDType\",r,e,t),a=I(\"valueDType\",r,e,t),i=new sf(s,a);return o.addHashTable(r.name,i),[i.handle]}}case\"InitializeTable\":case\"InitializeTableV2\":case\"LookupTableImport\":case\"LookupTableImportV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"values\",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"defaultValue\",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=I(\"tableHandle\",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UN=(r,e,t,o=Ye)=>{switch(r.op){case\"ResizeBilinear\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=I(\"image\",r,e,t),s=I(\"boxes\",r,e,t),a=I(\"boxInd\",r,e,t),i=I(\"cropSize\",r,e,t),p=I(\"method\",r,e,t),u=I(\"extrapolationValue\",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=I(\"images\",r,e,t),s=I(\"transforms\",r,e,t),a=I(\"outputShape\",r,e,t),i=I(\"fillValue\",r,e,t),p=I(\"interpolation\",r,e,t),u=I(\"fillMode\",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GN=(r,e,t,o=Ye)=>{switch(r.op){case\"Equal\":return[o.equal(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"NotEqual\":return[o.notEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Greater\":return[o.greater(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"GreaterEqual\":return[o.greaterEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Less\":return[o.less(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LessEqual\":return[o.lessEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalAnd\":return[o.logicalAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalNot\":return[o.logicalNot(I(\"a\",r,e,t))];case\"LogicalOr\":return[o.logicalOr(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Select\":case\"SelectV2\":return[o.where(I(\"condition\",r,e,t),I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HN=(r,e,t,o=Ye)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(I(\"a\",r,e,t),I(\"b\",r,e,t),I(\"transposeA\",r,e,t),I(\"transposeB\",r,e,t))];case\"Einsum\":return[o.einsum(I(\"equation\",r,e,t),...I(\"tensors\",r,e,t))];case\"Transpose\":return[o.transpose(I(\"x\",r,e,t),I(\"perm\",r,e,t))];case\"_FusedMatMul\":let[n,s]=I(\"fusedOps\",r,e,t),a=n===\"biasadd\",i=s===\"prelu\",p=I(\"numArgs\",r,e,t),u=I(\"leakyreluAlpha\",r,e,t);if(a){if(i&&p!==2)throw new Error(\"Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&p!==1)throw new Error(\"Fused MatMul with BiasAdd must have one extra argument: bias.\")}let[c,l]=I(\"args\",r,e,t);return[o.fused.matMul({a:I(\"a\",r,e,t),b:I(\"b\",r,e,t),transposeA:I(\"transposeA\",r,e,t),transposeB:I(\"transposeB\",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var qN=(r,e,t,o=Ye)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(I(\"x\",r,e,t),I(\"axis\",r,e,t),I(\"keepDims\",r,e,t))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"FusedBatchNormV3\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"LRN\":return[o.localResponseNormalization(I(\"x\",r,e,t),I(\"radius\",r,e,t),I(\"bias\",r,e,t),I(\"alpha\",r,e,t),I(\"beta\",r,e,t))];case\"Softmax\":return[o.softmax(I(\"x\",r,e,t))];case\"LogSoftmax\":return[o.logSoftmax(I(\"x\",r,e,t))];case\"SparseToDense\":return[o.sparseToDense(I(\"sparseIndices\",r,e,t),I(\"outputShape\",r,e,t),I(\"sparseValues\",r,e,t),I(\"defaultValue\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KN=(r,e,t,o=Ye)=>{switch(r.op){case\"RaggedGather\":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I(\"paramsNestedSplits\",r,e,t),I(\"paramsDenseValues\",r,e,t),I(\"indices\",r,e,t),I(\"outputRaggedRank\",r,e,t));return n.concat(s)}case\"RaggedRange\":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I(\"starts\",r,e,t),I(\"limits\",r,e,t),I(\"splits\",r,e,t));return[n,s]}case\"RaggedTensorToTensor\":return[o.raggedTensorToTensor(I(\"shape\",r,e,t),I(\"values\",r,e,t),I(\"defaultValue\",r,e,t),I(\"rowPartitionTensors\",r,e,t),I(\"rowPartitionTypes\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var jN=(r,e,t,o=Ye)=>{switch(r.op){case\"Max\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.max(I(\"x\",r,e,t),i,p)]}case\"Mean\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.mean(I(\"x\",r,e,t),i,p)]}case\"Min\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.min(I(\"x\",r,e,t),i,p)]}case\"Sum\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.sum(I(\"x\",r,e,t),i,p)]}case\"All\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.all(I(\"x\",r,e,t),i,p)]}case\"Any\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.any(I(\"x\",r,e,t),i,p)]}case\"ArgMax\":{let i=I(\"axis\",r,e,t);return[o.argMax(I(\"x\",r,e,t),i)]}case\"ArgMin\":{let i=I(\"axis\",r,e,t);return[o.argMin(I(\"x\",r,e,t),i)]}case\"Prod\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.prod(I(\"x\",r,e,t),i,p)]}case\"Cumprod\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumprod(I(\"x\",r,e,t),i,p,u)]}case\"Cumsum\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumsum(I(\"x\",r,e,t),i,p,u)]}case\"Bincount\":let n=I(\"x\",r,e,t),s=I(\"weights\",r,e,t),a=I(\"size\",r,e,t);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=I(\"x\",r,e,t),p=I(\"weights\",r,e,t),u=I(\"size\",r,e,t),c=I(\"binaryOutput\",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XN=(r,e,t,o=Ye)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=I(\"n\",r,e,t),s=I(\"axis\",r,e,t),a=I(\"tensors\",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=I(\"axis\",r,e,t),s=I(\"batchDims\",r,e,t),a=I(\"x\",r,e,t),i=I(\"indices\",r,e,t);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=I(\"dims\",r,e,t),s=[];for(let i=0;i{let n=I(\"axis\",r,e,t),s=I(\"tensors\",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=y.arraysEqual(u.shape,a);if(!c&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error(\"the input tensors shape does not match\");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case\"Unpack\":{let n=I(\"axis\",r,e,t),s=I(\"tensor\",r,e,t);return o.unstack(s,n)}case\"Tile\":{let n=I(\"reps\",r,e,t);return[o.tile(I(\"x\",r,e,t),n)]}case\"Split\":case\"SplitV\":{let n=I(\"axis\",r,e,t),s=I(\"numOrSizeSplits\",r,e,t),a=I(\"x\",r,e,t);return o.split(a,s,n)}case\"ScatterNd\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"shape\",r,e,t);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=I(\"sparseIndices\",r,e,t),s=I(\"outputShape\",r,e,t),a=I(\"sparseValues\",r,e,t),i=I(\"defaultValue\",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var YN=(r,e,t,o=Ye)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I(\"indices\",r,e,t),I(\"values\",r,e,t),I(\"denseShape\",r,e,t),I(\"defaultValue\",r,e,t));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I(\"inputIndices\",r,e,t),I(\"inputShape\",r,e,t),I(\"newShape\",r,e,t));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var QN=(r,e,t,o=Ye)=>{switch(r.op){case\"FFT\":return[o.fft(I(\"x\",r,e,t))];case\"IFFT\":return[o.ifft(I(\"x\",r,e,t))];case\"RFFT\":return[o.rfft(I(\"x\",r,e,t))];case\"IRFFT\":return[o.irfft(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ZN=(r,e,t,o=Ye)=>{switch(r.op){case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I(\"data\",r,e,t),I(\"dataSplits\",r,e,t),I(\"separator\",r,e,t),I(\"nGramWidths\",r,e,t),I(\"leftPad\",r,e,t),I(\"rightPad\",r,e,t),I(\"padWidth\",r,e,t),I(\"preserveShortSequences\",r,e,t));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I(\"input\",r,e,t),I(\"delimiter\",r,e,t),I(\"skipEmpty\",r,e,t));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(I(\"input\",r,e,t),I(\"numBuckets\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var JN=(r,e,t,o=Ye)=>{switch(r.op){case\"Cast\":return[o.cast(I(\"x\",r,e,t),I(\"dtype\",r,e,t))];case\"ExpandDims\":{let n=I(\"axis\",r,e,t);return[o.expandDims(I(\"x\",r,e,t),n)]}case\"Squeeze\":{let n=I(\"axis\",r,e,t);return[o.squeeze(I(\"x\",r,e,t),n)]}case\"Reshape\":return[o.reshape(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"MirrorPad\":return[o.mirrorPad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"mode\",r,e,t))];case\"PadV2\":case\"Pad\":return[o.pad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"constantValue\",r,e,t))];case\"SpaceToBatchND\":{let n=I(\"blockShape\",r,e,t),s=I(\"paddings\",r,e,t);return[o.spaceToBatchND(I(\"x\",r,e,t),n,s)]}case\"BatchToSpaceND\":{let n=I(\"blockShape\",r,e,t),s=I(\"crops\",r,e,t);return[o.batchToSpaceND(I(\"x\",r,e,t),n,s)]}case\"DepthToSpace\":{let n=I(\"blockSize\",r,e,t),s=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthToSpace(I(\"x\",r,e,t),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"BroadcastArgs\":return[o.broadcastArgs(I(\"s0\",r,e,t),I(\"s1\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function qC(r,e,t,o,n=Ee){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>_N(a,i,p));case\"basic_math\":return n(()=>EN(a,i,p));case\"control\":return ON(a,i,p);case\"convolution\":return n(()=>MN(a,i,p));case\"creation\":return n(()=>LN(a,i,p));case\"dynamic\":return BN(a,i,p);case\"evaluation\":return n(()=>VN(a,i,p));case\"image\":return n(()=>UN(a,i,p));case\"graph\":return n(()=>zN(a,i,p));case\"logical\":return n(()=>GN(a,i,p));case\"matrices\":return n(()=>HN(a,i,p));case\"normalization\":return n(()=>qN(a,i,p));case\"ragged\":return n(()=>KN(a,i,p));case\"reduction\":return n(()=>jN(a,i,p));case\"slice_join\":return n(()=>XN(a,i,p));case\"sparse\":return n(()=>YN(a,i,p));case\"spectral\":return n(()=>QN(a,i,p));case\"string\":return n(()=>ZN(a,i,p));case\"transformation\":return n(()=>JN(a,i,p));case\"hash_table\":return WN(a,i,p,o);case\"custom\":let u=Gd(a.op);if(u&&u.customExecutor)return u.customExecutor(new rf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var cl=class{constructor(e={},t={},o={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.rootContext={id:0,frameName:\"\",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?\"\":`${t.frameName}-${t.iterationId}`).join(\"/\"):\"\"}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error(\"Cannot exit frame, the context is empty\")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error(\"Cannot increase frame iteration, the context is empty\")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function KC(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=Object.keys(r).map(m=>Ir(m)[0]),c=[];o!=null&&(c=o.map(m=>Ir(m.name)[0]));let l=[...e];for(;l.length>0;){let m=l.pop();if((jC(m)||i6(m)||u6(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&u.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),l.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function eT(r,e,t){let{usedNodes:o,inputs:n}=t,s=[],a=Object.keys(n).map(c=>Ir(c)[0]).map(c=>r.nodes[c]),i=r.initNodes;a.forEach(c=>{o.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{o.has(c.name)&&s.push(c)}),i!=null&&i.forEach(c=>{o.has(c.name)&&s.push(c)});let p=new Set,u=[];for(;s.length>0;){let c=s.pop();p.add(c.name),e[c.name]||u.push(c),c.children.forEach(l=>{!p.has(l.name)&&o.has(l.name)&&l.inputs.every(m=>p.has(m.name))&&s.push(l)})}return u}var n6=[\"Switch\",\"Merge\",\"Enter\",\"Exit\",\"NextIteration\",\"StatelessIf\",\"StatelessWhile\",\"if\",\"While\"],s6=[\"NonMaxSuppressionV2\",\"NonMaxSuppressionV3\",\"NonMaxSuppressionV5\",\"Where\"],a6=[\"HashTable\",\"HashTableV2\",\"LookupTableImport\",\"LookupTableImportV2\",\"LookupTableFind\",\"LookupTableFindV2\",\"LookupTableSize\",\"LookupTableSizeV2\"];function jC(r){return n6.indexOf(r.op)>=0}function i6(r){return s6.indexOf(r.op)>=0}function u6(r){return a6.indexOf(r.op)>=0}var Cu=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=\",\",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(o=>{this._functionExecutorMap[o]=new Cu(e.functions[o],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(o=>e[o].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPERATOR)+\"--\"+n.join(this.SEPERATOR)}compile(e,t){let o=KC(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let i=t.map(u=>u.name),p=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${p}]. Missing the following inputs: [${n}]`)}return eT(this.graph,this.weightMap,o)}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return _r(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(l=>this.graph.nodes[Ir(l)[0]]),s=t.map(l=>Ir(l)[0]),a=s.map(l=>this.graph.nodes[l]);a.length===0&&(a=this._outputs);let i=this.getCompilationKey(n,a),p=this.compiledMap.get(i);p==null&&(p=this.compile(e,a),this.compiledMap.set(i,p));try{this.keepIntermediateTensors=O().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(l){this.keepIntermediateTensors=!1,console.warn(l.message)}let u={},c={};return Ee(()=>{let l=new cl(this.weightMap,u,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(h=>{let[g,x]=Ir(h),b=[];b[x]=e[h],m[g]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[g]=this.cloneTensorList(b))});let d=this.getFrozenTensorIds(m),f={};for(let h=0;hGt(h,m,l))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){t.category===\"control\"||a.indexOf(e)!==-1||(o[e].forEach(p=>{p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length)}),t.inputs.forEach(p=>{if(p.category!==\"control\"){let u=vN(p.name,o,n);u!=null&&u.forEach(c=>{if(c&&!c.kept&&!s.has(c.id)){let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.clonedTensorsMap||(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=O().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new cl(this.weightMap,n,s,this.functionExecutorMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Gt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(e).map(m=>e[m].id),l=new Set([...u,...c,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!l.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(l),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(C=>this.graph.nodes[Ir(C)[0]]),i=o.map(C=>Ir(C)[0]),p=i.map(C=>this.graph.nodes[C]);p.length===0&&(p=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:l,syncInputs:m}=KC(e,p,this.weightMap,this._initNodes),d=[...a,...this.graph.weights,...this._initNodes||[]].map(C=>({node:C,contexts:t.currentContext})),f=Object.assign({},this.weightMap);Object.keys(e).forEach(C=>{let[w,k]=Ir(C),_=[];_[k]=e[C],f[w]=_});let h={},g=this.getFrozenTensorIds(f),x={};for(;d.length>0;){let C=this.processStack(a,d,t,f,x,g,i,h,u);await Promise.all(C)}l==null&&!n&&console.warn(\"This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.\");let b=p.filter(C=>!jC(C)&&!Gt(C.name,f,t)).map(C=>C.name);if(b.length>0){let C=\"\";throw l!=null&&(C=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${C}`)}return f}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m=\"\";if(l.node.op===\"Enter\"&&I(\"isConstant\",l.node,n,o)&&([m]=ss(l.node.name,o)),n[l.node.name]==null){let d=qC(l.node,n,o,this._resourceManager);m||([m]=ss(l.node.name,o));let f=o.currentContext;y.isPromise(d)?c.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=ss(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Gt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Gt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let o=e[t],[n]=Ir(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Ir(o);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Ir(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var af=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}};var p6=\"?tfjs-format=file\",c6=\"model.json\",ll=class{constructor(e,t={},o=Ea){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new af}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error(\"Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.\");let e=this.handler.load();return y.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Cu(pl.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=pl.Instance.transformGraph(e.modelInitializer);this.initializer=new Cu(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e==\"string\"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[0]}if(e.save==null)throw new Error(\"GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.\");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof it?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof it)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let c=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return c!=null?s[a]=this.resourceIdToCapturedInput[c]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Dt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function l6(r,e={},t=Ea){if(r==null)throw new Error(\"modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model\");e==null&&(e={}),e.fromTFHub&&typeof r==\"string\"&&(r=d6(r));let o=new ll(r,e,t);return await o.load(),o}function m6(r){if(r==null)throw new Error(\"modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model\");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error(\"modelJSON must be the first element of the array\");if(!n||!(n instanceof ArrayBuffer))throw new Error(\"An ArrayBuffer of weights must be the second element of the array\");if(!(\"modelTopology\"in o))throw new Error(\"Model JSON is missing 'modelTopology'\");if(!(\"weightsManifest\"in o))throw new Error(\"Model JSON is missing 'weightsManifest'\");let s=Ea.getWeightSpecs(o.weightsManifest),a=Ea.getModelArtifactsForJSONSync(o,s,n);e=Ea.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=Ea.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new ll(e);return t.load(),t}function d6(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${c6}${p6}`}var f6=\"4.1.0\";function K(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var h6=Lt.whereImpl,Oi=class extends Zr{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Do(this,cr())}nextDataId(){return Oi.nextDataId++}write(e,t,o){this.firstUse&&(this.firstUse=!1,O().get(\"IS_NODE\")&&S.warn(`\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t===\"complex64\"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return S.mergeRealAndImagArrays(n,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return le(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}memory(){return{unreliable:!0,reasons:[\"The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less.\"]}}where(e){K([e],\"where\");let t=this.readSync(e.dataId);return h6(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Oi.nextDataId=0;var Qp={};Ue(Qp,{addImpl:()=>QC,bincountImpl:()=>Kp,bincountReduceImpl:()=>uf,castImpl:()=>YC,ceilImpl:()=>ZC,concatImpl:()=>Su,equalImpl:()=>JC,expImpl:()=>tS,expm1Impl:()=>oS,floorImpl:()=>nS,gatherNdImpl:()=>pf,gatherV2Impl:()=>cf,greaterEqualImpl:()=>aS,greaterImpl:()=>sS,lessEqualImpl:()=>uS,lessImpl:()=>iS,linSpaceImpl:()=>lf,logImpl:()=>pS,maxImpl:()=>mf,maximumImpl:()=>cS,minimumImpl:()=>lS,multiplyImpl:()=>ml,negImpl:()=>mS,notEqualImpl:()=>dS,prodImpl:()=>fS,raggedGatherImpl:()=>df,raggedRangeImpl:()=>ff,raggedTensorToTensorImpl:()=>hf,rangeImpl:()=>Iu,rsqrtImpl:()=>hS,scatterImpl:()=>Ma,sigmoidImpl:()=>ET,simpleAbsImpl:()=>XC,sliceImpl:()=>vu,sparseFillEmptyRowsImpl:()=>gf,sparseReshapeImpl:()=>xf,sparseSegmentReductionImpl:()=>Yp,sqrtImpl:()=>RT,squaredDifferenceImpl:()=>xS,stridedSliceImpl:()=>yf,stringNGramsImpl:()=>ku,stringSplitImpl:()=>Nu,stringToHashBucketFastImpl:()=>Tu,subImpl:()=>bS,tileImpl:()=>bf,topKImpl:()=>Cf,transposeImpl:()=>jp,uniqueImpl:()=>Sf});function XC(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;K(e,\"abs\");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=XC(n),t.makeOutput(o,e.shape,e.dtype)},tT={kernelName:gs,backendName:\"cpu\",kernelFunc:g6};function Be(r){return(e,t,o,n,s)=>{let a=S.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=S.getBroadcastDims(e,a),g=S.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let w=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[w],n[_])}return[c,a]}}function Ht(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}var rT={kernelName:ei,backendName:\"cpu\",kernelFunc:Ht};function Hp(r,e,t=\"float32\"){if(t===\"complex64\"){let n=Hp(r,e,\"float32\"),s=Hp(r,e,\"float32\");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function ar(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var oT={kernelName:mo,backendName:\"cpu\",kernelFunc:ar};function wo(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var nT={kernelName:ai,backendName:\"cpu\",kernelFunc:wo};function YC(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],t),[s,a]=Be((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Io(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return ar({inputs:{x:n},backend:t});let c=Hp(t,n.shape,n.dtype),l=Io({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=Ht({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=wo({inputs:{input:n},backend:t}),l=Io({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=ar({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=YC(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var sT={kernelName:co,backendName:\"cpu\",kernelFunc:Io};function Qe(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;K([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?S.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?S.fromUint8ToStringArray(c):c,d=o||a.dtype,[f,h]=e(a.shape,i.shape,l,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=Io({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,d=p.data.get(l.dataId).values,f=p.data.get(m.dataId).values,h=Io({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(x.dataId).values,w=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,w),A=p.makeTensorInfo($,\"float32\",k),R=p.makeTensorInfo($,\"float32\",_),D=Ht({inputs:{real:A,imag:R},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(A),p.disposeIntermediateTensorInfo(R),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,d]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function qp(r){return(e,t,o,n,s,a)=>{let i=S.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=S.getBroadcastDims(e,i),f=S.getBroadcastDims(t,i),h=S.mergeRealAndImagArrays(o,n),g=S.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,w=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let A=y.locToIndex($,x,b),R=_.slice(-C);f.forEach(M=>R[M]=0);let D=y.locToIndex(R,C,w),P=r(h[A*2],h[A*2+1],g[D*2],g[D*2+1]);l[k]=P.real,m[k]=P.imag}return[l,m,i]}}var QC=Be((r,e)=>r+e),x6=qp((r,e,t,o)=>({real:r+t,imag:e+o})),js=Qe(eo,QC,x6),aT={kernelName:eo,backendName:\"cpu\",kernelFunc:js};function Kp(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function uf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=le([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function vr(r){return(e,t,o)=>{let n=y.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(K(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=y.sizeFromShape(a.shape),c=t||a.dtype,l=y.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(K(a,r),a.dtype===\"string\"||t===\"string\")throw new Error(\"unaryKernelFunc does not support string input/output\");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var ZC=vr(r=>Math.ceil(r)),y6=vo(Uo,ZC),iT={kernelName:Uo,backendName:\"cpu\",kernelFunc:y6};function Su(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?S.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),eS=Qe(tn,JC,null,\"bool\"),uT={kernelName:tn,backendName:\"cpu\",kernelFunc:eS};var tS=vr(r=>Math.exp(r)),rS=vo(rn,tS,\"float32\"),pT={kernelName:rn,backendName:\"cpu\",kernelFunc:rS};var oS=vr(r=>Math.expm1(r)),b6=vo(da,oS),cT={kernelName:da,backendName:\"cpu\",kernelFunc:b6};var nS=vr(r=>Math.floor(r)),C6=vo(nn,nS),lT={kernelName:nn,backendName:\"cpu\",kernelFunc:C6};function pf(r,e,t,o,n,s,a,i,p){let u=le([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>e?1:0),S6=Qe(pn,sS,null,\"bool\"),mT={kernelName:pn,backendName:\"cpu\",kernelFunc:S6};var aS=Be((r,e)=>r>=e?1:0),w6=Qe(cn,aS,null,\"bool\"),dT={kernelName:cn,backendName:\"cpu\",kernelFunc:w6};var iS=Be((r,e)=>rr<=e?1:0),v6=Qe(fn,uS,null,\"bool\"),hT={kernelName:fn,backendName:\"cpu\",kernelFunc:v6};function lf(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),k6=vo(hn,pS),gT={kernelName:hn,backendName:\"cpu\",kernelFunc:k6};function mf(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var cS=Be((r,e)=>Math.max(r,e)),N6=Qe(bn,cS),xT={kernelName:bn,backendName:\"cpu\",kernelFunc:N6};var lS=Be((r,e)=>Math.min(r,e)),T6=Qe(In,lS),yT={kernelName:In,backendName:\"cpu\",kernelFunc:T6};var ml=Be((r,e)=>r*e),_6=qp((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),wu=Qe(kn,ml,_6),bT={kernelName:kn,backendName:\"cpu\",kernelFunc:wu};function mS(r,e,t){let o=y.createScalarValue(-1,t);return ml([],e,o,r,t)}function E6(r){let{inputs:e,backend:t}=r,{x:o}=e;K(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=mS(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var CT={kernelName:ws,backendName:\"cpu\",kernelFunc:E6};var dS=Be((r,e)=>r!==e?1:0),$6=Qe(Nn,dS,null,\"bool\"),ST={kernelName:Nn,backendName:\"cpu\",kernelFunc:$6};function jp(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var IT={kernelName:Fn,backendName:\"cpu\",kernelFunc:A6};function R6(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function F6(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function D6(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);F6(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[c];for(let x=c;xn[a]=s)}return e}function vT(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error(\"starts must be a scalar or vector\");if(n.length>1)throw new Error(\"limits must be a scalar or vector\");if(a.length>1)throw new Error(\"deltas must be a scalar or vector\");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&bx)w=0;else if(w=Math.ceil(Math.abs((b-x)/C)),w>kT)throw new Error(`Requires ((limit - start) / delta) <= ${kT}`);m[g+1]=m[g]+w}let d=m[l],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case ko.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case ko.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${ko[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case ko.FIRST_DIM_SIZE:return e[0];case ko.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case ko.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${ko[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=TT(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;Ee(()=>{let h=z(c,f);c=Ii(h,i).dataSync()})}let l=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);NT(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function NT(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function hf(r,e,t,o,n,s,a,i,p,u){return new Xp(r,e,t,o,n,s,a,i,p,u).compute()}function Iu(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),L6=vo(Vn,hS),_T={kernelName:Vn,backendName:\"cpu\",kernelFunc:L6};function Ma(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return le(t,e.dtype);let d=le(c,e.dtype);typeof p==\"string\"||typeof p==\"number\"?d.values.fill(p):typeof p==\"boolean\"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),gS=Ie(Un,r=>1/(1+Math.exp(-r))),$T={kernelName:Un,backendName:\"cpu\",kernelFunc:gS};function vu(r,e,t,o,n){let s=ut.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=ut.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?S.fromUint8ToStringArray(r):r,u=le(o,n,p),c=le(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n===\"string\"?S.fromStringArrayToUint8(c.values):c.values}function No(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;K(n,\"slice\");let[i,p]=ut.parseSliceParams(n,s,a);ut.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=vu(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var AT={kernelName:_s,backendName:\"cpu\",kernelFunc:No};function gf(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,l],x,u,c]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,w)=>C*w,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let w=h;w=p[0])throw new Error(S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),B6=Ie(Gn,r=>Math.sqrt(r)),FT={kernelName:Gn,backendName:\"cpu\",kernelFunc:B6};var xS=Be((r,e)=>{let t=r-e;return t*t}),V6=Qe(Kn,xS),DT={kernelName:Kn,backendName:\"cpu\",kernelFunc:V6};function yf(r,e,t,o){let n=le(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){x(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(e,u,i,c,d,m)}}return[i,a]}};function ku(r,e,t,o,n,s,a,i){return new yS(t,o,n,s,a,i).compute(r,e)}function z6(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),W6=qp((r,e,t,o)=>({real:r-t,imag:e-o})),dl=Qe(Xn,bS,W6),OT={kernelName:Xn,backendName:\"cpu\",kernelFunc:dl};function bf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function PT(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),d=Math.min(o,Math.floor(e+(i-p)*c/i+l));PT(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),fl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}fl(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function Cf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew Oi,1);var CS=Ie(en,r=>r>=0?r:Math.exp(r)-1),MT={kernelName:en,backendName:\"cpu\",kernelFunc:CS};function SS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;K([n],\"leakyRelu\");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?e*r:r);function wS(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;K([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=G6(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var BT={kernelName:Rn,backendName:\"cpu\",kernelFunc:wS};var IS=Ie(On,r=>Math.max(0,r)),VT={kernelName:On,backendName:\"cpu\",kernelFunc:IS};var vS=Ie(Ln,r=>Math.min(Math.max(0,r),6)),zT={kernelName:Ln,backendName:\"cpu\",kernelFunc:vS};function _u(r,e,t,o,n){if(t===\"linear\")return ar({inputs:{x:e},backend:r});if(t===\"relu\")return IS({inputs:{x:e},backend:r});if(t===\"elu\")return CS({inputs:{x:e},backend:r});if(t===\"relu6\")return vS({inputs:{x:e},backend:r});if(t===\"prelu\")return wS({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return SS({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return gS({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function Me(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var WT={kernelName:Ns,backendName:\"cpu\",kernelFunc:Me};function kS(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;K([n,s],\"matMul\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=Me({inputs:{x:n},backend:t,attrs:{shape:w}}),$=Me({inputs:{x:s},backend:t,attrs:{shape:k}}),A=a?_.shape[1]:_.shape[2],R=a?_.shape[2]:_.shape[1],D=i?$.shape[1]:$.shape[2],P=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,W=y.computeStrides(_.shape),V=y.computeStrides($.shape),[U,q,H]=a?[W[0],1,W[1]]:[W[0],W[1],1],[j,X,Z]=i?[1,V[1],V[0]]:[V[1],1,V[0]],ee=R*D,Y=le([P,R,D],_.dtype),J=Y.values,ie=t.blockSize;for(let pe=0;peMath.acos(r)),HT={kernelName:sa,backendName:\"cpu\",kernelFunc:q6};var K6=Ie(aa,r=>Math.acosh(r)),qT={kernelName:aa,backendName:\"cpu\",kernelFunc:K6};function j6(r){let{inputs:e,backend:t}=r,o=e;K(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=le(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=w)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var YT={kernelName:Vo,backendName:\"cpu\",kernelFunc:Q6};function Z6(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;K(n,\"argMin\");let a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],S.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[c,l]=S.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(c),d=y.makeZerosTypedArray(m,\"int32\"),f=y.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var QT={kernelName:Za,backendName:\"cpu\",kernelFunc:Z6};var J6=Ie(ia,r=>Math.asin(r)),ZT={kernelName:ia,backendName:\"cpu\",kernelFunc:J6};var ej=Ie(ua,r=>Math.asinh(r)),JT={kernelName:ua,backendName:\"cpu\",kernelFunc:ej};var tj=Ie(pa,r=>Math.atan(r)),e2={kernelName:pa,backendName:\"cpu\",kernelFunc:tj};var rj=Be((r,e)=>Math.atan2(r,e)),oj=Qe(la,rj),t2={kernelName:la,backendName:\"cpu\",kernelFunc:oj};var nj=Ie(ca,r=>Math.atanh(r)),r2={kernelName:ca,backendName:\"cpu\",kernelFunc:nj};function Zp(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=le(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let w=0;wq?q=ie:s===\"avg\"&&(H+=ie,j++)}if(isNaN(q))break}let X=M+L*C+$;g[X]=s===\"avg\"?H/j:q}}}return h}function wf(r,e,t,o,n=!1,s=!1){let a=le(o.outShape,\"int32\"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=le(e,t,r);for(let g=0;gD&&(D=U,n?P=s?((g*o.inHeight+M)*o.inWidth+W)*o.inChannels+x:(M*o.inWidth+W)*o.inChannels+x:P=L*m+V)}}a.set(P,g,b,_,x)}}return a}function If(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=le(n.outShape,t),w=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],$=n.outShape[3]*n.outShape[4],A=n.outShape[4];for(let R=0;Rwe?we=wt:s===\"avg\"&&(ve+=wt,$e++),isNaN(we))break}if(isNaN(we))break}if(isNaN(we))break}let Le=he+M;w[Le]=s===\"avg\"?ve/$e:we}}}}return C}function o2(r,e){let t=le(e.outShape,\"int32\"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=Z,W=U*c*l+H*c+X)}}}t.set(W,h,x,k,R,g)}}}return t}function sj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;K(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(S.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Zp(m,n.shape,n.dtype,d,c,\"avg\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var n2={kernelName:zo,backendName:\"cpu\",kernelFunc:sj};function aj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,\"avgPool3d\");let c=S.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=If(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var s2={kernelName:ip,backendName:\"cpu\",kernelFunc:aj};function ij(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],\"avgPool3DGrad\");let c=S.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,d=c.strideWidth,f=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,w=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=w-1-c.padInfo.front,A=_-1-c.padInfo.left,R=k-1-c.padInfo.top,D=le(s.shape,\"float32\"),P=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(Y)!==Y))for(let J=0;J=c.outHeight||Math.floor(ie)!==ie))for(let pe=0;pe<_;pe+=C){let he=(X+pe)/d;if(he<0||he>=c.outWidth||Math.floor(he)!==he)continue;let we=M.get(L,Y,ie,he,W);Z+=we}}}D.set(Z*P,L,V,U,q,W)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var a2={kernelName:Im,backendName:\"cpu\",kernelFunc:ij};function uj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;K([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=S.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,d=c.filterHeight,f=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,w=x-1-c.padInfo.top,k=le(a.shape,\"float32\"),_=1/(d*f),$=t.data.get(n.dataId).values,A=le(n.shape,\"float32\",$);for(let R=0;R=c.outHeight||Math.floor(q)!==q))for(let H=0;H=c.outWidth||Math.floor(j)!==j)continue;let X=A.get(R,q,j,D);V+=X}}k.set(V*_,R,P,M,D)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var i2={kernelName:wm,backendName:\"cpu\",kernelFunc:uj};function pj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||i.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(s==null||i.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\"),K([n,i,p,s,a],\"batchNorm\");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=f.length,x=d.length,b=m.length,C=l.length,w=0,k=0,_=0,$=0;for(let A=0;A=g&&(w=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var u2={kernelName:an,backendName:\"cpu\",kernelFunc:pj};function cj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;K([n],\"batchToSpaceND\");let i=s.reduce((x,b)=>x*b),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=Me({inputs:{x:n},backend:t,attrs:{shape:p}}),f=Ct({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Me({inputs:{x:f},backend:t,attrs:{shape:c}}),g=No({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var p2={kernelName:xs,backendName:\"cpu\",kernelFunc:cj};function lj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Kp(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var c2={kernelName:Ja,backendName:\"cpu\",kernelFunc:lj};function mj(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=S.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var l2={kernelName:up,backendName:\"cpu\",kernelFunc:mj};var dj=Ie(lo,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return ar({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(w=>wo({inputs:{input:w},backend:t})),g=p.map(w=>Xs({inputs:{input:w},backend:t})),x=Pi({inputs:h,backend:t,attrs:{axis:s}}),b=Pi({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(w=>t.disposeIntermediateTensorInfo(w)),g.forEach(w=>t.disposeIntermediateTensorInfo(w)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Me({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=S.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=Su(c,i,e[0].dtype,l),d=S.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var h2={kernelName:ys,backendName:\"cpu\",kernelFunc:Pi};function NS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;K([n,s],\"conv2d\");let l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat===\"channelsLast\",w=new st(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],A=C?k[1]:k[2],R=C?k[2]:1,D=C?1:k[1],P=w.strides[0],M=C?w.strides[1]:w.strides[2],L=C?w.strides[2]:1,W=C?1:w.strides[1],V=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,q=w.values;for(let H=0;H=m.inHeight)continue;let pe=J*_[0],he=j+ie*A;for(let we=0;we=m.inWidth)continue;let pt=pe+Le*_[1],Oe=he+nt*R,mt=pt;for(let at=0;at=u.inDepth)continue;let H=U*R[0],j=P+q*A[1];for(let X=0;X=u.inHeight)continue;let ie=H+Y*R[1],pe=j+J*A[2];for(let he=0;he=u.inWidth)continue;let nt=ie+$e*R[2],pt=pe+Le*u.inChannels,Oe=nt;for(let mt=0;mtMath.cos(r)),w2={kernelName:qo,backendName:\"cpu\",kernelFunc:Cj};var Sj=Ie(Ko,r=>Math.cosh(r)),I2={kernelName:Ko,backendName:\"cpu\",kernelFunc:Sj};function wj(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=le([f,h,g,d],\"float32\"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,w=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let W=h>1?(P-R)*(l-1)/(h-1):0,V=g>1?(M-D)*(m-1)/(g-1):0;for(let U=0;U1?R*(l-1)+U*W:.5*(R+P)*(l-1);if(q<0||q>l-1){for(let H=0;H1?D*(m-1)+Z*V:.5*(D+M)*(m-1);if(ee<0||ee>m-1){for(let pe=0;pe1?D*(m-1)+H*V:.5*(D+M)*(m-1);if(j<0||j>m-1){for(let ee=0;eex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,d=c/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=S.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,w=b.top,k=d.outChannels/d.inChannels,_=new st(d.outShape,n.dtype),$=t.data.get(n.dataId).values,A=t.data.get(s.dataId).values,R=_.values;for(let D=0;D=d.inHeight)continue;let H=U*l[0],j=P+q*c[1];for(let X=0;X=d.inWidth)continue;let ie=H+Y*l[1],pe=j+J*d.inChannels,he=Z,we=ie;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:C,strideHeight:w,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:A,dilationWidth:R,outShape:D}=S.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),P=y.sizeFromShape(D),M=D.length,L=y.getArrayFromDType(o.dtype,P);for(let V=0;V=0&&J=0&&peZ&&(Z=ve)}}}let ee=y.locToIndex([V,U,H,X],M,y.computeStrides(D));L[ee]=Z}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),D,o.dtype),shape:D,dtype:o.dtype}}};var D2={kernelName:bb,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:A,outShape:R}=S.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===R.length,()=>`Error in ${bb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`);let D=y.toNestedArray(R,u.data.get(s.dataId).values),P=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&Y=0&&iej&&(j=pe,X=ee,Z=J)}}}P[X][Z][H]+=D[L][W][U][H]}}}return{dataId:u.write(y.toTypedArray(P,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var O2={kernelName:yb,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:A,outShape:R}=S.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===R.length,()=>`Error in ${yb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`);let D=y.toNestedArray(R,u.data.get(s.dataId).values),P=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&Y=0&&iej&&(j=pe,X=Y,Z=ie)}}}P[L][X][Z][H]+=D[L][W][U][H]}}}return{dataId:u.write(y.toTypedArray(P,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function La(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,\"sum\");let i;n.dtype===\"bool\"?i=Io({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=ar({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=S.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=Ct({inputs:{x:i},backend:t,attrs:{perm:c}}),l=S.getInnerMostAxes(l.length,p)),S.assertAxesAreInnerMostDims(\"sum\",l,m.shape.length);let[d,f]=S.computeOutAndReduceShapes(m.shape,l),h=S.upcastType(m.dtype,\"int32\"),g=Hp(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let w=0;w=0&&(m=La({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var M2={kernelName:ri,backendName:\"cpu\",kernelFunc:$j};function Aj(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;K([o,n],\"eluGrad\");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=1?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var L2={kernelName:km,backendName:\"cpu\",kernelFunc:Aj};var Rj=S.ERF_P,Fj=S.ERF_A1,Dj=S.ERF_A2,Oj=S.ERF_A3,Pj=S.ERF_A4,Mj=S.ERF_A5,Lj=Ie(ma,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+Rj*t);return e*(1-((((Mj*o+Pj)*o+Oj)*o+Dj)*o+Fj)*o*Math.exp(-t*t))}),B2={kernelName:ma,backendName:\"cpu\",kernelFunc:Lj};function Jp(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Me({inputs:{x:n},backend:t,attrs:{shape:i}})}var V2={kernelName:bs,backendName:\"cpu\",kernelFunc:Jp};var Bj=Be((r,e)=>r/e),hl=Qe(Jo,Bj),gl={kernelName:Jo,backendName:\"cpu\",kernelFunc:hl};function vf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=y.sizeFromShape(u),l=y.getTypedArrayFromDType(\"float32\",c),m=y.getTypedArrayFromDType(\"float32\",c);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&CMath.floor(r/e)),qj=Qe(sn,Hj,null,\"int32\"),G2={kernelName:sn,backendName:\"cpu\",kernelFunc:qj};function Kj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=NS({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;if(c===\"NCHW\"&&a.shape.length===1&&a.shape[0]!==1){let x=Me({inputs:{x:a},backend:t,attrs:{shape:[a.shape[0],1,1]}});h=js({inputs:{a:h,b:x},backend:t}),t.disposeIntermediateTensorInfo(x)}else h=js({inputs:{a:h,b:a},backend:t});t.disposeIntermediateTensorInfo(g)}if(d){let g=h;if(c===\"NCHW\"&&d===\"prelu\"&&i.shape.length===1&&i.shape[0]!==1){let x=Me({inputs:{x:i},backend:t,attrs:{shape:[i.shape[0],1,1]}});h=_u(t,h,d,x,f),t.disposeIntermediateTensorInfo(x)}else h=_u(t,h,d,i,f);t.disposeIntermediateTensorInfo(g)}return h}var H2={kernelName:ho,backendName:\"cpu\",kernelFunc:Kj};function jj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=TS({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;h=js({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(d){let g=h;h=_u(t,h,d,i,f),t.disposeIntermediateTensorInfo(g)}return h}var q2={kernelName:go,backendName:\"cpu\",kernelFunc:jj};function Xj(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=y.sizeFromShape(o.shape),a=n.shape,i=a[a.length-1],[p,u,c,l]=S.prepareAndValidate(o,n);if(u===0)return t.makeTensorInfo(p,o.dtype,[]);let m=t.data.get(n.dataId).values,d=t.bufferSync(o),f=pf(m,d,o.dtype,u,i,c,l,o.shape,s);return t.makeTensorInfo(p,o.dtype,f.values)}var K2={kernelName:un,backendName:\"cpu\",kernelFunc:Xj};function Yj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o;K([n,s],\"gatherV2\");let p=y.parseAxisParam(a,n.shape)[0],u=t.data.get(s.dataId).values,c=n.shape[p];for(let w=0;w=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=y.sizeFromShape(s.shape),d=S.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=Me({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Me({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),C=cf(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var j2={kernelName:Ss,backendName:\"cpu\",kernelFunc:Yj};function Qj(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Me({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=vf(i,!0,t),u=Me({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var X2={kernelName:ni,backendName:\"cpu\",kernelFunc:Qj};var Zj=Ie(fa,r=>Number.isFinite(r)?1:0,\"bool\"),Y2={kernelName:fa,backendName:\"cpu\",kernelFunc:Zj};var Jj=Ie(ha,r=>Math.abs(r)===1/0?1:0,\"bool\"),Q2={kernelName:ha,backendName:\"cpu\",kernelFunc:Jj};var eX=Ie(ln,r=>Number.isNaN(r)?1:0,\"bool\"),Z2={kernelName:ln,backendName:\"cpu\",kernelFunc:eX};function tX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=lf(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var J2={kernelName:xp,backendName:\"cpu\",kernelFunc:tX};var rX=Ie(ga,r=>Math.log1p(r)),e_={kernelName:ga,backendName:\"cpu\",kernelFunc:rX};var oX=Be((r,e)=>r&&e),nX=Qe(gn,oX,null,\"bool\"),t_={kernelName:gn,backendName:\"cpu\",kernelFunc:nX};var sX=Ie(xn,r=>r?0:1,\"bool\"),r_={kernelName:xn,backendName:\"cpu\",kernelFunc:sX};var aX=Be((r,e)=>r||e),iX=Qe(xa,aX,null,\"bool\"),o_={kernelName:xa,backendName:\"cpu\",kernelFunc:iX};function uX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;K(n,\"LRN\");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;x<=b;x++){let w=l[x];C+=w*w}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Zp(m,n.shape,n.dtype,d,c,\"max\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var i_={kernelName:Cn,backendName:\"cpu\",kernelFunc:cX};function lX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,\"maxPool3d\");let c=S.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=If(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var u_={kernelName:bp,backendName:\"cpu\",kernelFunc:lX};function mX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],\"maxPool3DGrad\");let c=S.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=o2(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,w=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,A=w-1-c.padInfo.top,R=le(s.shape,\"float32\"),D=t.bufferSync(n);for(let P=0;P=c.outDepth||Math.floor(Z)!==Z))for(let ee=0;ee=c.outHeight||Math.floor(Y)!==Y))for(let J=0;J=c.outWidth||Math.floor(ie)!==ie)continue;let pe=C*w*k-1-m.get(P,Z,Y,ie,M),he=X*w*k+ee*k+J,we=pe===he?1:0;if(we===0)continue;let ve=D.get(P,Z,Y,ie,M);j+=ve*we}}}R.set(j,P,L,W,V,M)}return t.makeTensorInfo(R.shape,R.dtype,R.values)}var p_={kernelName:_m,backendName:\"cpu\",kernelFunc:mX};function dX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;K([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=S.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=le(m.outShape,i.dtype,wf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,w=m.effectiveFilterWidth,k=w-1-m.padInfo.left,_=C-1-m.padInfo.top,$=le(i.shape,\"float32\"),A=t.data.get(n.dataId).values,R=le(n.shape,\"float32\",A);for(let D=0;D=m.outHeight||Math.floor(H)!==H))for(let j=0;j=m.outWidth||Math.floor(X)!==X)continue;let Z=C*w-1-f.get(D,H,X,P),ee=q*w+j,Y=Z===ee?1:0;if(Y===0)continue;let J=R.get(D,H,X,P);U+=J*Y}}$.set(U,D,M,L,P)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var c_={kernelName:Tm,backendName:\"cpu\",kernelFunc:dX};function l_(r,e,t,o,n){let s=y.computeStrides(e),a=Zp(r,e,t,s,n,\"max\"),i=wf(r,e,t,n,!0,o);return[a.values,i.values]}var m_={kernelName:Cp,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;K(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=S.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=l_(u,o.shape,o.dtype,i,c),d=p.write(l,c.outShape,o.dtype),f=p.write(m,c.outShape,o.dtype);return[{dataId:d,shape:c.outShape,dtype:o.dtype},{dataId:f,shape:c.outShape,dtype:\"int32\"}]}};function fX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=S.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Io({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});l.push(d);let f=hl({inputs:{a:d,b:m},backend:t});l.push(f);let h=La({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var d_={kernelName:Sn,backendName:\"cpu\",kernelFunc:fX};function hX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,\"min\");let i=y.parseAxisParam(s,n.shape),p=i,u=S.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:u}}),p=S.getInnerMostAxes(p.length,n.shape.length)),S.assertAxesAreInnerMostDims(\"min\",p,c.shape.length);let[l,m]=S.computeOutAndReduceShapes(c.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let x=0;xC[0]+n.shape[w]+C[1]),p=s.map(C=>C[0]),u=s.map((C,w)=>C[0]+n.shape[w]),c=a===\"reflect\"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let C=0;C=u[_]&&(w[_]=(u[_]-1)*2-w[_]+c);w=w.map((_,$)=>_-p[$]);let k=y.locToIndex(w,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var h_={kernelName:vn,backendName:\"cpu\",kernelFunc:gX};var xX=Be((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),yX=Qe(ya,xX),g_={kernelName:ya,backendName:\"cpu\",kernelFunc:yX};var y_=rp(gC());function $S(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=ES({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=S.expandShapeToKeepDim(u.shape,p),l=Me({inputs:{x:u},backend:t,attrs:{shape:c}}),m=dl({inputs:{a:n,b:l},backend:t}),d=rS({inputs:{x:m},backend:t}),f=La({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=Me({inputs:{x:f},backend:t,attrs:{shape:c}}),g=hl({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var x_={kernelName:qn,backendName:\"cpu\",kernelFunc:$S};function bX(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;K(n,\"multinomial\");let p=i?n:$S({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),\"int32\");for(let f=0;f=0&&l[m]{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Jp({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pi({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var T_={kernelName:vs,backendName:\"cpu\",kernelFunc:AS};function TX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;K(n,\"pad\");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=y.sizeFromShape(n.shape),l=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;b_+p[$]),k=y.locToIndex(w,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var kf={kernelName:$n,backendName:\"cpu\",kernelFunc:TX};var _X=Be((r,e)=>Math.pow(r,e)),EX=Qe(An,_X),__={kernelName:An,backendName:\"cpu\",kernelFunc:EX};function $X(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,d,f]=df(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var E_={kernelName:wp,backendName:\"cpu\",kernelFunc:$X};function AX(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=ff(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var $_={kernelName:Ip,backendName:\"cpu\",kernelFunc:AX};function RX(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=hf(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var A_={kernelName:vp,backendName:\"cpu\",kernelFunc:RX};function FX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=Iu(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var R_={kernelName:ks,backendName:\"cpu\",kernelFunc:FX};var DX=Ie(Dn,r=>1/r),F_={kernelName:Dn,backendName:\"cpu\",kernelFunc:DX};function OX(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;K(n,\"resizeBilinear\");let p=y.computeStrides(n.shape),[u,c]=i,[l,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([l,u,c,f])),x=[s&&u>1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,w=x[0]/b[0],k=x[1]/b[1];for(let _=0;_1?u-1:u,a&&d>1?c-1:c],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,w=0;for(let k=0;k1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=x[0]/b[0],w=x[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&f>1?l-1:l],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],C=x[0]/b[0],w=x[1]/b[1],k=1/C,_=1/w,$=Math.ceil(k)*2+2,A=Math.ceil(_)*2+2;for(let R=0;R=d)continue;let Y=D+ee*p[1],J=ee*C,ie=Math.min(c-1,a?Math.round(J):Math.floor(J));if(P===ie)for(let pe=0;pe=f)continue;let we=Y+he*p[2],ve=he*w,$e=Math.min(l-1,a?Math.round(ve):Math.floor(ve));V===$e&&(X+=g[we+j])}}h[U+j]=X}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var M_={kernelName:Em,backendName:\"cpu\",kernelFunc:LX};function BX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;K(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return ar({inputs:{x:n},backend:t});let p=new st(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var L_={kernelName:Bn,backendName:\"cpu\",kernelFunc:BX};var B_={kernelName:es,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[d,f]=S.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let w=0;w=0&&W=0&&V{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),V_={kernelName:Ca,backendName:\"cpu\",kernelFunc:VX};function zX(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=S.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=Ma(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var z_={kernelName:zn,backendName:\"cpu\",kernelFunc:zX};function WX(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?KX*r:qX*(Math.exp(r)-1)),H_={kernelName:Xi,backendName:\"cpu\",kernelFunc:jX};var XX=Ie(Yi,r=>r<0?-1:r>0?1:0),q_={kernelName:Yi,backendName:\"cpu\",kernelFunc:XX};var YX=Ie(Wn,r=>Math.sin(r)),K_={kernelName:Wn,backendName:\"cpu\",kernelFunc:YX};var QX=Ie(Sa,r=>Math.sinh(r)),j_={kernelName:Sa,backendName:\"cpu\",kernelFunc:QX};var ZX=11920928955078125e-23,X_=Math.log(ZX)+2,JX=Ie(Qi,r=>{let e=r>-X_,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var Z_={kernelName:ui,backendName:\"cpu\",kernelFunc:t5};function r5(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=xf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var J_={kernelName:wa,backendName:\"cpu\",kernelFunc:r5};function o5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Yp(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var eE={kernelName:pi,backendName:\"cpu\",kernelFunc:o5};function n5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Yp(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var tE={kernelName:ci,backendName:\"cpu\",kernelFunc:n5};function s5(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=S.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),x=Boolean(t.data.get(a.dataId).values[0]);h=Ma(f,g,i,m,c,u,p,l,x,d);break}case\"float32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Ma(f,g,i,m,c,u,p,l,x,d);break}case\"int32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Ma(f,g,i,m,c,u,p,l,x,d);break}case\"string\":{let g=t.bufferSync(s),x=y.decodeString(t.data.get(a.dataId).values[0]);h=Ma(f,g,i,m,c,u,p,l,x,d);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var rE={kernelName:li,backendName:\"cpu\",kernelFunc:s5};function a5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=No({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var oE={kernelName:$s,backendName:\"cpu\",kernelFunc:a5};var nE={kernelName:mi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;K(t,\"square\");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),sE={kernelName:Ds,backendName:\"cpu\",kernelFunc:i5};function u5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;K(n,\"stridedSlice\");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Me({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=No({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Me({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=yf(d,_,w,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var aE={kernelName:jn,backendName:\"cpu\",kernelFunc:u5};function p5(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,d=t.data.get(l.dataId).values,[f,h]=ku(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var iE={kernelName:As,backendName:\"cpu\",kernelFunc:p5};function c5(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=Nu(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var uE={kernelName:di,backendName:\"cpu\",kernelFunc:c5};function l5(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.data.get(s.dataId).values,i=Tu(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var pE={kernelName:fi,backendName:\"cpu\",kernelFunc:l5};var m5=Ie(Yn,r=>Math.tan(r)),cE={kernelName:Yn,backendName:\"cpu\",kernelFunc:m5};var d5=Ie(Qn,r=>Math.tanh(r)),lE={kernelName:Qn,backendName:\"cpu\",kernelFunc:d5};function f5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;K(n,\"tile\");let a=bf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var mE={kernelName:to,backendName:\"cpu\",kernelFunc:f5};function h5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;K(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=Cf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var dE={kernelName:Zn,backendName:\"cpu\",kernelFunc:h5};function g5(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=y.computeStrides(n.shape),b=x[0],C=x[1],w=x[2],k=y.computeStrides(g),_=k[0],$=k[1],A=k[2],R=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));R.fill(p);let D=o.data.get(n.dataId).values,P=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function y5(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function b5(r,e){return r}function C5(r,e){return y.clamp(0,r,e-1)}function bl(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var yE={kernelName:Np,backendName:\"cpu\",kernelFunc:k5};var N5=[GT,tT,HT,qT,aT,KT,jT,XT,YT,QT,ZT,JT,e2,t2,r2,n2,s2,a2,i2,UT,u2,p2,c2,l2,sT,iT,m2,rT,d2,h2,g2,x2,y2,b2,C2,S2,w2,I2,v2,k2,N2,T2,_2,E2,$2,A2,R2,F2,D2,O2,M2,MT,L2,uT,B2,pT,V2,cT,z2,W2,U2,lT,G2,H2,q2,K2,j2,mT,dT,oT,X2,f2,Y2,Q2,Z2,LT,fT,hT,J2,gT,e_,t_,r_,o_,n_,s_,a_,xT,i_,u_,p_,c_,m_,d_,f_,yT,h_,g_,b_,bT,CT,C_,S_,w_,ST,I_,N_,T_,kf,__,BT,IT,E_,$_,A_,R_,nT,gl,F_,VT,zT,WT,D_,O_,P_,M_,L_,B_,V_,_T,z_,U_,G_,H_,$T,q_,K_,j_,AT,x_,Y_,Q_,Z_,J_,eE,tE,rE,oE,FT,nE,DT,sE,aE,iE,uE,pE,OT,P2,cE,lE,mE,dE,hE,wT,gE,xE,yE,v_];for(let r of N5)Ia(r);var oc={};Ue(oc,{assertNotComplex:()=>is,bindCanvasToFramebuffer:()=>O5,bindColorTextureToFramebuffer:()=>Il,bindTextureToProgramUniformSampler:()=>KS,bindTextureUnit:()=>wE,bindVertexBufferToProgramAttribute:()=>Af,callAndCheck:()=>ce,canBeRepresented:()=>OS,createFragmentShader:()=>MS,createFramebuffer:()=>GS,createProgram:()=>LS,createStaticIndexBuffer:()=>zS,createStaticVertexBuffer:()=>VS,createTexture:()=>WS,createVertexShader:()=>PS,getBatchDim:()=>Va,getExtensionOrThrow:()=>ec,getFramebufferErrorMessage:()=>IE,getMaxTexturesInShader:()=>YS,getNumChannels:()=>F5,getProgramUniformLocation:()=>qS,getProgramUniformLocationOrThrow:()=>HS,getRowsCols:()=>za,getShapeAs3D:()=>rc,getTextureShapeFromLogicalShape:()=>jS,getWebGLDisjointQueryTimerVersion:()=>QS,getWebGLErrorMessage:()=>SE,getWebGLMaxTextureSize:()=>XS,hasExtension:()=>Ur,isCapableOfRenderingToFloatTexture:()=>ZS,isDownloadFloatTextureEnabled:()=>JS,isReshapeFree:()=>Li,isWebGLFenceEnabled:()=>ew,isWebGLVersionEnabled:()=>Ff,linkProgram:()=>BS,logShaderSourceAndInfoLog:()=>$f,resetMaxTextureSize:()=>P5,resetMaxTexturesInShader:()=>M5,unbindColorTextureFromFramebuffer:()=>Rf,unbindTextureUnit:()=>D5,validateFramebuffer:()=>tc,validateProgram:()=>wl,validateTextureSize:()=>US});var Eu={},Nf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function RS(r,e){Eu[r]=e}function Wr(r,e){if(!(r in Eu)||e!=null){let o=_5(r,e);if(o!==null)Eu[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=Eu[r];return t==null||t.isContextLost()?(delete Eu[r],Wr(r)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Eu[r])}function T5(r){if(typeof OffscreenCanvas!=\"undefined\"&&r===2)return new OffscreenCanvas(300,150);if(typeof document!=\"undefined\")return document.createElement(\"canvas\");throw new Error(\"Cannot create a canvas in this context\")}function _5(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?T5(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete Eu[r]},!1),O().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Nf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",Nf)||t.getContext(\"experimental-webgl\",Nf):t.getContext(\"webgl2\",Nf)}var Mi;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(Mi||(Mi={}));var ir;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(ir||(ir={}));var Zt;(function(r){r[r.UNPACKED_FLOAT16=0]=\"UNPACKED_FLOAT16\",r[r.UNPACKED_FLOAT32=1]=\"UNPACKED_FLOAT32\",r[r.PACKED_4X1_UNSIGNED_BYTE=2]=\"PACKED_4X1_UNSIGNED_BYTE\",r[r.PACKED_2X2_FLOAT32=3]=\"PACKED_2X2_FLOAT32\",r[r.PACKED_2X2_FLOAT16=4]=\"PACKED_2X2_FLOAT16\"})(Zt||(Zt={}));function $u(r,e){return[e,r]}function bE(r,e){return r*e}function Cl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ys(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function CE(r,e){let[t,o]=Ys(r,e);return t*o*4}function Sl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return O().getNumber(\"WEBGL_VERSION\")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function ce(r,e){let t=e();return O().getBool(\"DEBUG\")&&E5(r),t}function E5(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+SE(r,e))}var $5=596e-10,A5=65504;function OS(r){return!!(O().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||$5r.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function PS(r,e){let t=Ba(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error(\"Failed to compile vertex shader.\");return t}function MS(r,e){let t=Ba(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),O().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw $f(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var R5=/ERROR: [0-9]+:([0-9]+):/g;function $f(r,e){let t=R5.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(`\n`),s=n.length.toString().length+2,a=n.map((l,m)=>y.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),\"Unable to create WebGLProgram.\")}function BS(r,e){if(ce(r,()=>r.linkProgram(e)),!O().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Failed to link vertex and fragment shaders.\")}function wl(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Shader program validation failed.\")}function VS(r,e){let t=Ba(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function zS(r,e){let t=Ba(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function F5(){return O().getNumber(\"WEBGL_VERSION\")===2?1:4}function WS(r){return Ba(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function US(r,e){let t=O().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function GS(r){return Ba(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function Af(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function wE(r,e,t){vE(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function D5(r,e){vE(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function HS(r,e,t){return Ba(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function qS(r,e,t){return r.getUniformLocation(e,t)}function KS(r,e,t,o){ce(r,()=>wE(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function O5(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Il(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Rf(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function tc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+IE(r,e))}function IE(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case r.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return`unknown error ${e}`}}function Ba(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function vE(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function Va(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function za(r){if(r.length===0)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function rc(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[Va(r),...za(r)]),e}function jS(r,e=!1){let t=O().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=O().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&O().getBool(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=Va(r),p=2,u=2;r.length&&([p,u]=za(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Tf(r){return r%2===0}function Li(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r.slice(-1)[0],o=e.slice(-1)[0];if(t===o||Tf(t)&&Tf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Tf(r[0])&&Tf(e[0])}var _f,Ef;function XS(r){if(_f==null){let e=Wr(r);_f=e.getParameter(e.MAX_TEXTURE_SIZE)}return _f}function P5(){_f=null}function M5(){Ef=null}function YS(r){if(Ef==null){let e=Wr(r);Ef=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Ef)}function QS(r){if(r===0)return 0;let e,t=Wr(r);return Ur(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:Ur(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function Ur(r,e){return r.getExtension(e)!=null}function Ff(r){try{if(Wr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function ZS(r){if(r===0)return!1;let e=Wr(r);if(r===1){if(!Ur(e,\"OES_texture_float\"))return!1}else if(!Ur(e,\"EXT_color_buffer_float\"))return!1;return DS(e)}function JS(r){if(r===0)return!1;let e=Wr(r);if(r===1){if(!Ur(e,\"OES_texture_float\")||!Ur(e,\"WEBGL_color_buffer_float\"))return!1}else{if(Ur(e,\"EXT_color_buffer_float\"))return DS(e);let o=\"EXT_color_buffer_half_float\";if(Ur(e,o)){let n=e.getExtension(o);return L5(e,n)}return!1}return DS(e)}function DS(r){let e=Sl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,o,n,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function L5(r,e){let t=Sl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,n,s,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function ew(r){return r!==2?!1:Wr(r).fenceSync!=null}function is(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Ce=O();Ce.registerFlag(\"HAS_WEBGL\",()=>Ce.getNumber(\"WEBGL_VERSION\")>0);Ce.registerFlag(\"WEBGL_VERSION\",()=>Ff(2)?2:Ff(1)?1:0);Ce.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Ce.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Ce.get(\"WEBGL_VERSION\")===2);Ce.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Ce.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Ce.registerFlag(\"WEBGL_PACK\",()=>Ce.getBool(\"HAS_WEBGL\"));Ce.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_CLIP\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Ce.getBool(\"WEBGL_PACK\"));Ce.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>XS(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>YS(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Ce.getNumber(\"WEBGL_VERSION\");return r===0?0:QS(r)});Ce.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Ce.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!yi.isMobile());Ce.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>ZS(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Ce.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Ce.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Ce.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>JS(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>ew(Ce.getNumber(\"WEBGL_VERSION\")));Ce.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Ce.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Ce.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Ce.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>yi.isMobile()?1:-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Ce.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Ce.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Ce.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Ce.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Ce.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Ce.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Ce.getBool(\"IS_TEST\"));Ce.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Ce.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Ce.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);Ce.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function St(){let r,e,t,o,n,s,a,i,p,u;return O().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=O().getBool(\"WEBGL2_ISNAN_CUSTOM\")?`\n bool isnan_custom(float val) {\n uint floatToUint = floatBitsToUint(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n `:\"\",p=\"\",u=`\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `):(r=\"\",e=\"attribute\",t=\"varying\",o=\"varying\",n=\"texture2D\",s=\"gl_FragColor\",a=\"\",i=`\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n `,p=`\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n `,u=`\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function us(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function Au(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function B5(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function kE(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=B5(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function nc(r){let e=y.computeStrides(r).map(t=>t.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z;\n }\n`}function sc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Df=`\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n`;var{getBroadcastDims:NE}=S;function TE(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:\"\"};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=Of(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push(\"uniform int outShape;\");break;case 2:o.push(\"uniform ivec2 outShape;\"),o.push(\"uniform int outShapeStrides;\");break;case 3:o.push(\"uniform ivec3 outShape;\"),o.push(\"uniform ivec2 outShapeStrides;\");break;case 4:o.push(\"uniform ivec4 outShape;\"),o.push(\"uniform ivec3 outShapeStrides;\");break;default:break}o.push(\"uniform ivec2 outTexShape;\")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(d=>V5(d,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=St(),p=U5(i),u,c,l=q5(i);return e.isPacked?(u=z5(e.logicalShape,a,t.enableShapeUniforms),c=H5(i)):(u=W5(e.logicalShape,a,t.enableShapeUniforms),c=G5(i)),t.packedInputs&&(l+=Y5),[l,p,c,n,u,s,t.userCode].join(`\n`)}function ic(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return u8(r,e);case 1:return c8(r,e);case 2:return m8(r,e);case 3:return f8(r,e);case 4:return g8(r,e);case 5:return x8(r);case 6:return y8(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function _E(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return i8(r);case 1:return p8(r,e);case 2:return l8(r,e);case 3:return d8(r,e);default:return h8(r,e)}}function V5(r,e,t=!1,o){let n=\"\";t?n+=_E(r,o):n+=ic(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=b8(r,e):n+=C8(r,e)),n}function z5(r,e,t){switch(r.length){case 0:return EE();case 1:return Q5(r,e,t);case 2:return s8(r,e,t);case 3:return J5(r,e,t);default:return t8(r,e,t)}}function W5(r,e,t){switch(r.length){case 0:return EE();case 1:return Z5(r,e,t);case 2:return a8(r,e,t);case 3:return e8(r,e,t);case 4:return r8(r,e,t);case 5:return o8(r,e);case 6:return n8(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function U5(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function G5(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function H5(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function q5(r){return`${r.version}\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n ${r.varyingFs} vec2 resultUV;\n ${r.defineOutput}\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n ${r.defineSpecialNaN}\n ${r.defineSpecialInf}\n ${r.defineRound}\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${K5}\n ${j5}\n ${X5}\n `}var K5=`\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,j5=`\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,X5=`\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,Y5=`\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n`;function EE(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function Q5(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${o[1]}.0);\n }\n `:o[1]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${o[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n return 2 * (resTexRC.x * ${o[1]} + resTexRC.y);\n }\n `}function Z5(r,e,t){return e[0]===1?t?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${e[1]}.0);\n }\n `:e[1]===1?t?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${e[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n return resTexRC.x * outTexShape[1] + resTexRC.y;\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n return resTexRC.x * ${e[1]} + resTexRC.y;\n }\n `}function J5(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec3(b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[2]/2),s=n*Math.ceil(r[1]/2);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n int index = resTexRC.x * ${o[1]} + resTexRC.y;\n\n int b = index / ${s};\n index -= b * ${s};\n\n int r = 2 * (index / ${n});\n int c = imod(index, ${n}) * 2;\n\n return ivec3(b, r, c);\n }\n `}function e8(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n ${Au([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=us([\"r\",\"c\",\"d\"],r);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n int index = resTexRC.x * ${e[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function t8(r,e,t){if(t)return`\n ivec4 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatchN = texelsInBatch * outShape[1];\n\n int b2 = index / texelsInBatchN;\n index -= b2 * texelsInBatchN;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec4(b2, b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[r.length-1]/2),s=n*Math.ceil(r[r.length-2]/2),a=s,i=\"\",p=\"b, r, c\";for(let u=2;u=1?c=\"coords = 0;\":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(`\n`);let m=\"\";a<2&&s>0?m=\"coords\":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(\", \");let d=\"return outputValue;\",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=`\n return vec4(outputValue.xy, outputValue.xy);\n `;else if(h&&!x)a===1?d=`\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n `:d=`\n return vec4(outputValue.x);\n `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?d=\"return vec4(outputValue.x);\":i.indexOf(b)>-1?d=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":i.indexOf(C)>-1&&(d=\"return vec4(outputValue.xx, outputValue.zz);\")}return`\n vec4 ${n}() {\n ${p} coords = getOutputCoords();\n ${c}\n vec4 outputValue = get${o}(${m});\n ${d}\n }\n `}function C8(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n=\"get\"+o+\"AtOutCoords\",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${t}, resultUV);\n }\n `;let u=_e(p),c=NE(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];i===0?m=\"\":p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(`\n`);let f=\"\";return p<2&&i>0?f=\"coords\":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+l]}`).join(\", \"),`\n float ${n}() {\n ${u} coords = getOutputCoords();\n ${m}\n return get${o}(${f});\n }\n `}function _e(r){if(r<=1)return\"int\";if(r===2)return\"ivec2\";if(r===3)return\"ivec3\";if(r===4)return\"ivec4\";if(r===5)return\"ivec5\";if(r===6)return\"ivec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function Of(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(\", \")}function AE(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=TE(n,a,e),p=MS(r.gl,i),u=r.createProgram(p);return O().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},tw(r,e,u))}function tw(r,e,t){let o={},n={},s={},a=[],i,p,u,c=null,l=null;l=r.getUniformLocation(t,\"NAN\",!1),O().getNumber(\"WEBGL_VERSION\")===1&&(c=r.getUniformLocation(t,\"INFINITY\",!1));let m=!1;for(let d=0;d{a[f]=r.getUniformLocation(t,d.name,m)}),{uniformLocations:o,customUniformLocations:a,infLoc:c,nanLoc:l,inShapesLocations:n,inTexShapesLocations:s,outShapeLocation:i,outShapeStridesLocation:u,outTexShapeLocation:p}}function $E(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function RE(r,e,t,o,n){e.program.enableShapeUniforms||($E(e.inShapeInfos,t),$E([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),O().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN),t.forEach((p,u)=>{let c=e.program.variableNames[u],l=e.uniformLocations[c],m=e.uniformLocations[`offset${c}`],d=e.inShapesLocations[`${c}Shape`],f=e.inTexShapesLocations[`${c}TexShape`];if(d){let{uniformShape:h}=Of(e.program.packedInputs,p.shape,p.texData.texShape);switch(h.length){case 1:r.gl.uniform1iv(d,new Int32Array(h));break;case 2:r.gl.uniform2iv(d,new Int32Array(h));break;case 3:r.gl.uniform3iv(d,new Int32Array(h));break;case 4:r.gl.uniform4iv(d,new Int32Array(h));break;default:break}}if(f&&r.gl.uniform2i(f,p.texData.texShape[0],p.texData.texShape[1]),l!=null){if(p.isUniform){if(y.sizeFromShape(p.shape)<2)r.gl.uniform1f(l,p.uniformValues[0]);else{let h=p.uniformValues;h instanceof Float32Array||(h=new Float32Array(h)),r.gl.uniform1fv(l,h)}return}p.texData.slice!=null&&m!=null&&r.gl.uniform1i(m,p.texData.slice.flatOffset),r.setInputMatrixTexture(p.texData.texture.texture,l,u)}});let i=e.outShapeLocation;if(i)switch(o.shape.length){case 1:r.gl.uniform1iv(i,new Int32Array(o.shape));break;case 2:r.gl.uniform2iv(i,new Int32Array(o.shape));break;case 3:r.gl.uniform3iv(i,new Int32Array(o.shape));break;case 4:r.gl.uniform4iv(i,new Int32Array(o.shape));break;default:break}if(e.outShapeStridesLocation){let p=y.computeStrides(o.shape);switch(o.shape.length){case 2:r.gl.uniform1iv(e.outShapeStridesLocation,new Int32Array(p));break;case 3:r.gl.uniform2iv(e.outShapeStridesLocation,new Int32Array(p));break;case 4:r.gl.uniform3iv(e.outShapeStridesLocation,new Int32Array(p));break;default:break}}e.outTexShapeLocation&&r.gl.uniform2i(e.outTexShapeLocation,o.texData.texShape[0],o.texData.texShape[1]),e.program.customUniforms&&n&&e.program.customUniforms.forEach((p,u)=>{let c=e.customUniformLocations[u],l=n[u];if(p.type===\"float\")r.gl.uniform1fv(c,l);else if(p.type===\"vec2\")r.gl.uniform2fv(c,l);else if(p.type===\"vec3\")r.gl.uniform3fv(c,l);else if(p.type===\"vec4\")r.gl.uniform4fv(c,l);else if(p.type===\"int\")r.gl.uniform1iv(c,l);else if(p.type===\"ivec2\")r.gl.uniform2iv(c,l);else if(p.type===\"ivec3\")r.gl.uniform3iv(c,l);else if(p.type===\"ivec4\")r.gl.uniform4iv(c,l);else throw Error(`uniform type ${p.type} is not supported yet.`)}),r.executeProgram()}function FE(r,e,t){let o=\"\";e.concat(t).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=Of(r.packedInputs,a.shape,p),m=\"\",d=\"\",f=\"\";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)d=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=y.computeStrides(c);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=S.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),w=r.packedInputs||c.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:\"\"}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${w}_${i}`}else{let p=a.isUniform?\"uniform\":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+=\"_\"+o+\"_\"+n+`${O().getNumber(\"WEBGL_VERSION\")}`,s}function ct(r){return O().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Pf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Mi.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=St();this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Au([\"r\",\"c\",\"d\"],e):us([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n ${t.output} = result;\n }\n `}};var Mf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Mi.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=St();this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Au([\"r\",\"c\",\"d\"],e):us([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n ${t.output} = result;\n }\n `}};var Lf=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=ir.DOWNLOAD;let t=St();this.outputShape=e,this.userCode=`\n ${Df}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var Bf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ir.DOWNLOAD;let t=St();this.outputShape=e,this.userCode=`\n ${Df}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${t.output} = encode_float(x);\n }\n `}};var I8={R:0,G:1,B:2,A:3},vl=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=St();this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;icw,createBufferFromOutputTexture:()=>dw,createFloat16MatrixTexture:()=>aw,createFloat16PackedMatrixTexture:()=>pw,createFloat32MatrixTexture:()=>sw,createIndexBuffer:()=>nw,createPackedMatrixTexture:()=>uw,createUnsignedBytesMatrixTexture:()=>iw,createVertexBuffer:()=>ow,createVertexShader:()=>rw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>hw,downloadFloat32MatrixFromBuffer:()=>fw,downloadMatrixFromPackedOutputTexture:()=>xw,downloadPackedMatrixFromBuffer:()=>gw,getInternalFormatForFloat16MatrixTexture:()=>Wf,getInternalFormatForFloat16PackedMatrixTexture:()=>Hf,getInternalFormatForFloat32MatrixTexture:()=>zf,getInternalFormatForPackedMatrixTexture:()=>Gf,getInternalFormatForUnsignedBytesMatrixTexture:()=>Uf,uploadDenseMatrixToTexture:()=>lw,uploadPixelDataToTexture:()=>mw});function rw(r){let e=St(),t=`${e.version}\n precision highp float;\n ${e.attribute} vec3 clipSpacePos;\n ${e.attribute} vec2 uv;\n ${e.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return PS(r,t)}function ow(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return VS(r,e)}function nw(r){let e=new Uint16Array([0,1,2,2,1,3]);return zS(r,e)}function kl(r,e,t,o,n,s){US(e,t);let a=WS(r),i=r.TEXTURE_2D;return ce(r,()=>r.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),O().getNumber(\"WEBGL_VERSION\")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function zf(r){return r.internalFormatFloat}function sw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,zf(o),o.textureFormatFloat,r.FLOAT)}function Wf(r){return r.internalFormatHalfFloat}function aw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,Wf(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function Uf(r){return r.downloadTextureFormat}function iw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,Uf(o),r.RGBA,r.UNSIGNED_BYTE)}function Gf(r){return r.internalFormatPackedFloat}function uw(r,e,t,o){let[n,s]=Ys(e,t);return kl(r,n,s,Gf(o),r.RGBA,r.FLOAT)}function Hf(r){return r.internalFormatPackedHalfFloat}function pw(r,e,t,o){let[n,s]=Ys(e,t);return kl(r,n,s,Hf(o),r.RGBA,o.textureTypeHalfFloat)}function cw(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Af(r,e,\"clipSpacePos\",t,3,20,0)&&Af(r,e,\"uv\",t,2,20,12)}function lw(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),O().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function mw(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?O().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):O().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function dw(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function fw(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function hw(r,e,t,o){let[n,s]=$u(e,t),a=4,i=new Uint8Array(bE(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function gw(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(CE(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function xw(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var Fu=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=O().getNumber(\"WEBGL_VERSION\");if(e!=null?(this.gl=e,RS(t,e)):this.gl=Wr(t),e=this.gl,O().getNumber(\"WEBGL_VERSION\")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension(\"OES_vertex_array_object\");if(s==null)throw new Error(\"All WebGL1 implementations are expected to offer OES_vertex_array_object.\");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o=\"WEBGL_color_buffer_float\",n=\"EXT_color_buffer_half_float\";if(this.parallelCompilationExtension=this.gl.getExtension(\"KHR_parallel_shader_compile\"),O().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=ec(this.gl,s),Ur(this.gl,a))this.textureHalfFloatExtension=ec(this.gl,a);else if(O().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\");if(this.colorBufferFloatExtension=this.gl.getExtension(o),Ur(this.gl,n))this.colorBufferHalfFloatExtension=ec(this.gl,n);else if(O().get(\"WEBGL_FORCE_F16_TEXTURES\"))throw new Error(\"GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.\")}else if(o=\"EXT_color_buffer_float\",Ur(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Ur(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=ow(this.gl),this.indexBuffer=nw(this.gl),this.framebuffer=GS(this.gl),this.textureConfig=Sl(this.gl,this.textureHalfFloatExtension)}get debug(){return O().getBool(\"DEBUG\")}dispose(){if(this.disposed)return;this.program!=null&&console.warn(\"Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing.\"),this.outputTexture!=null&&console.warn(\"Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.\");let e=this.gl;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),sw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),aw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),iw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),mw(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),lw(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),pw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),uw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Rf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>hw(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return gw(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return fw(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=dw(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(O().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>xw(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=rw(t));let o=LS(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),BS(t,o);let n;return n=Object.assign(o,{vao:this.createVertexArray()}),this.bindVertexArray(n.vao),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),console.assert(cw(t,n,this.vertexBuffer),\"gpgpu_util.bindVertexProgramAttributeStreams not fully successful.\"),this.debug&&wl(t,n),this.setProgram(n),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&(this.bindVertexArray(this.program.vao),this.debug&&wl(this.gl,this.program)),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?HS(this.gl,e,t):qS(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),KS(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ys(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&wl(this.gl,this.program),tc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,\"VAO changed between setProgram and executeProgram!\"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=ec(this.gl,O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2?\"EXT_disjoint_timer_query_webgl2\":\"EXT_disjoint_timer_query\")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=v8(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;\"setTimeoutCustom\"in O().platform&&(o=O().platform.setTimeoutCustom.bind(O().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Il(this.gl,e,this.framebuffer),this.debug&&tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Il(this.gl,this.outputTexture,this.framebuffer),this.debug&&tc(this.gl)):Rf(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Il(n,e,this.framebuffer),this.debug&&tc(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}throwIfDisposed(){if(this.disposed)throw new Error(\"Attempted to use disposed GPGPUContext.\")}throwIfNoProgram(){if(this.program==null)throw new Error(\"No GPU program is currently set.\")}};function v8(r){let e=0;for(;e`${r}.${t}`)}function $t(r,e){return e===1?[r]:bw(r,e)}function I$(r,e){if(r===1)return\"rc\";let t=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let t=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),\n cEdge ? 0. : getA(${t[1]}),\n rEdge ? 0. : getA(${t[2]}),\n rEdge || cEdge ? 0. : getA(${t[3]})`}};var lc=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length);let o=\"\";for(let n=0;n<4;n++){let s=\"thisRC = rc;\";n%2===1&&(s+=\"thisRC.z += 1;\"),n>1&&(s+=\"thisRC.y += 1;\"),o+=`\n ${s}\n ${n>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\"}\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result[${n}] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n ${n>0?\"}\":\"\"}\n `}this.userCode=`\n ${k8(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?sc():nc(e)}\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = ${this.enableShapeUniforms?\"outShape[1]\":e[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":e[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function k8(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?kE([\"r\",\"c\",\"d\"],\"inputShape\"):us([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var Yf=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,o){let n=k$(t,o),s=N$(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=v$(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].shift();return this.usedTextures[s].push(p),p}let i;return n===Zt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===Zt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===Zt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===Zt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===Zt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=k$(o,n),a=N$(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=v$(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=O().get(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(e);if(c<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function N8(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function v$(r,e,t,o,n){let s=T8(e,o),a;if(n){let[p,u]=Ys(r[0],r[1]);a=p*u}else{let[p,u]=$u(r[0],r[1]);a=p*u}let i=N8(t,s);return a*i}function T8(r,e){switch(r){case Zt.PACKED_2X2_FLOAT32:return Gf(e);case Zt.PACKED_2X2_FLOAT16:return Hf(e);case Zt.UNPACKED_FLOAT32:return zf(e);case Zt.UNPACKED_FLOAT16:return Wf(e);case Zt.PACKED_4X1_UNSIGNED_BYTE:return Uf(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function _8(r){return O().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?Zt.PACKED_2X2_FLOAT32:Zt.UNPACKED_FLOAT32:r?Zt.PACKED_2X2_FLOAT16:Zt.UNPACKED_FLOAT16}function k$(r,e){if(r===ir.UPLOAD)return Zt.PACKED_2X2_FLOAT32;if(r===ir.RENDER||r==null)return _8(e);if(r===ir.DOWNLOAD||r===ir.PIXELS)return Zt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function N$(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var Jt=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${t}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}},Bt=\"if (isnan(x)) return x;\",T$=\"return x;\",Cw=\"return abs(x);\";var _$=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",E$=Bt+`\n return (x < 0.0) ? 0.0 : x;\n`,$$=Bt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Qs=\"return x;\",A$=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var F$=\"return x;\",D$=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,O$=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,P$=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,M$=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Ar=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${t}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var Qf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length);let t=e.length,o=$t(\"rc\",t),n=_e(t),s=I$(t,o),a=o.slice(-2),i=t<=1?\"rc\":`vec2(${a.join(\",\")})`;this.userCode=`\n void main() {\n ${n} rc = getOutputCoords();\n vec4 packedInput = getA(${s});\n\n setOutput(getChannel(packedInput, ${i}));\n }\n `}};var $8=Lt.whereImpl,A8=1e-7,R8=1e-4,Zf={};function F8(r){return r in Zf||(Zf[r]={}),Zf[r]}var D8=O().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),O8=600;function P8(){return O().global.screen==null?1024:O().global.screen.height*O().global.screen.width*window.devicePixelRatio*O8/1024/1024}var Bi=class extends Zr{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!O().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof Fu)t=e;else{let o=Wr(O().getNumber(\"WEBGL_VERSION\"),e);t=new Fu(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Wr(O().getNumber(\"WEBGL_VERSION\"));t=new Fu(o),this.binaryCache=F8(O().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Yf(this.gpgpu),this.numMBBeforeWarning=P8(),this.texData=new Do(this,cr())}nextDataId(){return Bi.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=rc(t),c=new vl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((O().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||O().getBool(\"DEBUG\"))&&this.checkNumericalProblems(e),o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:ir.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,o,n,s){if(O().getBool(\"DEBUG\")&&this.checkNumericalProblems(t),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(e,{shape:o,dtype:n,values:t,usage:ir.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Ar(i,Qs):m=new Jt(i,Qs);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n===\"string\")return o;let u=this.activeTimers!=null,c;u&&(c=y.now());let l;if(n===\"complex64\"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);l=S.mergeRealAndImagArrays(m,d)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Ar(n,Qs):f=new Jt(n,Qs);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(O().getBool(\"DEBUG\")&&!O().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&O().getNumber(\"WEBGL_VERSION\")===2)throw new Error(\"tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.\");let u=null,c;if(a!==\"complex64\"&&O().get(\"WEBGL_BUFFER_SUPPORTED\")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...Cl(n))}this.pendingRead.set(e,[]),a!==\"complex64\"&&await this.gpgpu.createAndWaitForFence();let l;if(a===\"complex64\"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];l=S.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i===\"complex64\")throw new Error(\"Does not support reading texture for complex64 dtype.\");if(a!=null){let d;p?d=new Ar(s,Qs):d=new Jt(s,Qs);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let c=this.decode(e,t.customTexShape),l=cr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return le(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \")}else i.kernelMs={error:\"WebGL query timers are not supported in this environment.\"};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(O().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=D8){return O().getBool(\"WEBGL_CPU_FORWARD\")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new Qf(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new Xf(e.shape),o=!0;return this.runWebGLProgram(t,[e],e.dtype,null,o)}packedReshape(e,t){let o=[Va(e.shape),...za(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[Va(t),...za(t)],a=new lc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>\"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.\")}let i=rc(s),p;n?p=new Mf(i):p=new Pf(i);let u=!0,c=[t!=null?t:Cl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===Mi.DENSE){let x=a!=null?a:Cl(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(x=>{if(x.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=O().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!Li(b.shape,x.shape)){let C=x,w=x.shape;x.shape=b.shape,x=this.packedReshape(x,w),u.push(x),b=this.texData.get(x.dataId),C.shape=w}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=FE(e,c,l),d=this.getAndSaveBinary(m,()=>AE(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),O().get(\"ENGINE_COMPILE_ONLY\")||RE(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=O().get(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!O().getBool(\"WEBGL_LAZILY_UNPACK\")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(O().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!=\"undefined\"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Ee(()=>{if(!O().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=O().getBool(\"DEBUG\");O().set(\"DEBUG\",!1);let t=this.abs(be(1e-8)).dataSync()[0];if(O().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?A8:R8}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=t.texShape;if(l==null&&(l=jS(o,p),t.texShape=l),s!=null){let m=rc(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ys(l[0],l[1])),p?d=new Vf(m,g):d=new vl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=ir.PIXELS:C.usage=ir.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let w=[[h,f]],k=!0,_=this.runWebGLProgram(d,[b],n,w,k),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,O().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(_.dataId):(t.texture=$.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=M8(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await CC(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?($f(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error(\"Failed to compile fragment shader.\")):new Error(\"Failed to link vertex and fragment shaders.\");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,inShapesLocations:a,inTexShapesLocations:i,outShapeLocation:p,outShapeStridesLocation:u,outTexShapeLocation:c}=tw(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.inShapesLocations=a,e.inTexShapesLocations=i,e.outShapeLocation=p,e.outShapeStridesLocation=u,e.outTexShapeLocation=c}}createTensorFromTexture(e,t,o){let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error(\"The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.\");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Bi.nextDataId=0;function M8(r,e){if(e===\"float32\"||e===\"complex64\")return r;if(e===\"int32\"||e===\"bool\"){let t=e===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Bi,2);var L9e={forceHalfFloat:L$};var mc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var io=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=S.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${e}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}};var Zs=`\n result.r = isNaN.r ? NAN : result.r;\n result.g = isNaN.g ? NAN : result.g;\n result.b = isNaN.b ? NAN : result.b;\n result.a = isNaN.a ? NAN : result.a;\n`;var To=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=S.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ct(s);let a=\"\";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=`\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n `;else if(a=`\n ${_e(s)} coords = getOutputCoords();\n `,s===1)this.enableShapeUniforms?a+=`\n result.y = (coords + 1) >= outShape ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `:a+=`\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;else{let p=$t(\"coords\",s);this.enableShapeUniforms?a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= outShape[${s} - 2];\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= outShape[${s} - 1];\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `:a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= ${this.outputShape[s-2]};\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= ${this.outputShape[s-1]};\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `}this.userCode=`\n vec4 binaryOperation(vec4 a, vec4 b) {\n ${e}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${a}\n\n setOutput(result);\n }\n `}};function At(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var B$={kernelName:mo,backendName:\"webgl\",kernelFunc:At};function Rr(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.texData.get(s.dataId),i=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var V$={kernelName:ei,backendName:\"webgl\",kernelFunc:Rr};var Sw=\"return (a < 0.) ? b * a : a;\",ww=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function B8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=O().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new To(ww,n.shape,a.shape):new io(Sw,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var z$={kernelName:mn,backendName:\"webgl\",kernelFunc:B8};var Iw=\"return (a < 0.) ? b * a : a;\",vw=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function V8(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=O().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new To(vw,o.shape,n.shape):new io(Iw,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var W$={kernelName:Rn,backendName:\"webgl\",kernelFunc:V8};var _o=\"if (isnan(x)) return x;\";function ge({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=O().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,c;return u?c=new Ar(a.shape,e):c=new Jt(a.shape,r),i.runWebGLProgram(c,[a],p)}}function tt({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype===\"complex64\"){let f=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[w,k]=C,_={dataId:w.dataId,dtype:w.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},A=new io(r,p.shape,u.shape);return c.runWebGLProgram(A,[_,$],dt(w.dtype,k.dtype))}),b=Rr({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),b}let l=s||dt(p.dtype,u.dtype);if((p.dtype===\"string\"||u.dtype===\"string\"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let f=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype===\"string\"?S.fromUint8ToStringArray(f):f,x=p.dtype===\"string\"?S.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),w=c.makeTensorInfo(C,l),k=c.texData.get(w.dataId);return k.values=b,w}let m=O().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,d;return m?d=new To(e,p.shape,u.shape,t):d=new io(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function Wa(r,e=!1){if(r===\"linear\")return e?F$:T$;if(r===\"relu\")return e?O$:E$;if(r===\"elu\")return e?D$:_$;if(r===\"relu6\")return e?P$:$$;if(r===\"prelu\")return e?vw:Iw;if(r===\"leakyrelu\")return e?ww:Sw;if(r===\"sigmoid\")return e?M$:A$;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var dc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=[\"matrixA\",\"matrixB\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=ct(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?\"i * 2, rc.y\":\"rc.y, i * 2\",d=s?\"rc.z, i * 2\":\"i * 2, rc.z\",f=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],h=s?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],g=\"\",x=\"\";i&&(p?g=`vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${i}\n }`:u?g=`vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${i}\n }`:g=`vec4 activation(vec4 x) {\n ${i}\n }`,x=\"result = activation(result);\");let b=a?\"result += getBiasAtOutCoords();\":\"\";a&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),u&&this.variableNames.push(\"leakyreluAlpha\");let C=\"rc.x\",w=\"rc.x\";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!Li(n.shape,p)&&!(c.texture!==null&&Li(c.shape,p))?H$(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var q$={kernelName:Ns,backendName:\"webgl\",kernelFunc:te};var _l=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c=\"\";s%o>0&&(c=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return 0.0;\n }\n `),this.userCode=`\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${c}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${i}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${u}\n }\n\n int inIdx = inOffset + ${i};\n if (${p===1}) {\n vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n ${u}\n } else if (${p===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1), 0.0, 0.0);\n\n ${u}\n } else if (${p===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2), 0.0);\n\n ${u}\n }\n setOutput(sumValue);\n }\n `}};var Jf=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=\"0.0\",p=\"\";t===\"prod\"?i=\"1.0\":t===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):t===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"sum\"?u=\"sumValue\":t===\"prod\"?u=\"prodValue\":t===\"all\"?u=\"allValue\":t===\"any\"&&(u=\"anyValue\");let c=Math.floor(o/4)*4,l=o%4,m=`\n if (${t===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${t===\"prod\"}) {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = ${p}(values, minMaxValue);\n if (${t===\"min\"} || ${t===\"max\"}) {\n minMaxValue = ${p}(values, minMaxValue);\n bvec4 isNaN = isnan(values);\n if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n minMaxValue = vec4(NAN);\n }\n }\n }\n `,d=\"vec4\";t===\"all\"?(i=\"1.0\",m=`\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n `,d=\"bvec4\"):t===\"any\"&&(i=\"0.0\",m=`\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n `,d=\"bvec4\");let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `),this.userCode=`\n const float initializationValue = ${i};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${f}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n vec4 minMaxValue = vec4(${i});\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===2}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===3}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function W8(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=S.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function Gr(r,e,t,o){let n=W8(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=_e(this.rank),s=bw(\"rc\",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=te({inputs:{x:r},backend:n,attrs:{shape:k}}),A=te({inputs:{x:e},backend:n,attrs:{shape:_}}),R=[$,A],D=Math.max(x,b),P=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,W=p===\"leakyrelu\",V=p!=null?Wa(p,!0):null,U=M||L||W||V!=null,q;if((d===1||f===1)&&P>Nw&&U===!1){let j=$,X=A;t&&(j=xt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),R.push(j)),o&&(X=xt({inputs:{x:A},backend:n,attrs:{perm:[0,2,1]}}),R.push(X));let Z=f!==1,ee=f===1,Y=j;Z&&(Y=te({inputs:{x:j},backend:n,attrs:{shape:[D,P,1]}}),R.push(Y));let J=f===1?2:1,ie=X;ee&&(ie=te({inputs:{x:X},backend:n,attrs:{shape:[D,1,P]}}),R.push(ie));let pe=Tl({inputs:{a:Y,b:ie},backend:n});q=Ou({inputs:{x:pe},backend:n,attrs:{axis:J,keepDims:!0}}),R.push(pe)}else{let j=dt(r.dtype,e.dtype),X=new dc(k,_,[D,d,f],t,o,M,V,L,W),Z=[$,A];if(s!=null&&Z.push(s),L&&Z.push(a),W){let ee=n.makeTensorInfo([],\"float32\",y.createScalarValue(i,\"float32\"));Z.push(ee),R.push(ee)}q=n.runWebGLProgram(X,Z,j)}let H=te({inputs:{x:q},backend:n,attrs:{shape:w}});R.push(q);for(let j of R)n.disposeIntermediateTensorInfo(j);return H}function G8(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Pu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var Y$={kernelName:fo,backendName:\"webgl\",kernelFunc:G8};var Q$=\"return abs(x);\";function H8(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=t.texData.get(o.dataId),a=Kf(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return O().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Ar(o.shape,Q$):n=new Jt(o.shape,Q$),t.runWebGLProgram(n,[o],o.dtype)}var Z$={kernelName:gs,backendName:\"webgl\",kernelFunc:H8};var q8=Bt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,K8=ge({opSnippet:q8}),J$={kernelName:sa,backendName:\"webgl\",kernelFunc:K8};var j8=Bt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,X8=ge({opSnippet:j8}),eA={kernelName:aa,backendName:\"webgl\",kernelFunc:X8};var tA=\"return a + b;\",Y8=tt({opSnippet:tA,packedOpSnippet:tA,supportsComplex:!0,cpuKernelImpl:DE}),rA={kernelName:eo,backendName:\"webgl\",kernelFunc:Y8};var rh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n float result = ${n};\n setOutput(result);\n }\n `}};var oh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n vec4 result = ${n};\n setOutput(result);\n }\n `}};function nh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({inputs:{x:o[0]},backend:t});if(o.length>O().get(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=nh({inputs:o.slice(0,p),backend:t}),c=nh({inputs:o.slice(p),backend:t});return nh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>dt(p,u)),s=o.map(p=>p.shape),i=O().getBool(\"WEBGL_PACK\")?new oh(o[0].shape,s):new rh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var oA={kernelName:Mo,backendName:\"webgl\",kernelFunc:nh};function Q8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=S.getInnerMostAxes(u.length,i)),S.assertAxesAreInnerMostDims(\"all\",u,i);let[m,d]=S.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Gr(h,h.dtype,\"all\",t),x;if(a){let b=S.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Lo,backendName:\"webgl\",kernelFunc:Q8};function Z8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=S.getInnerMostAxes(u.length,i)),S.assertAxesAreInnerMostDims(\"any\",u,i);let[m,d]=S.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Gr(h,h.dtype,\"any\",t),x;if(a){let b=S.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var sA={kernelName:Bo,backendName:\"webgl\",kernelFunc:Z8};var sh=class{constructor(e,t,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=t===\"max\"?\">\":\"<\",p=o?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < ${n}; i++) {\n int inIdx = ${p};\n float candidate = getA(batch, inIdx);\n if (candidate ${i} bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n `}};var ah=class{constructor(e,t,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push(\"bestIndicesA\");let i=this.outputShape,p=i.length,u=_e(p),c=$t(\"coords\",p),l,m;if(a===1){m=p+1;let A=_e(m);l=`\n ${A} sourceLocR = ${A}(${c.join()}, 0);\n ++${c[p-1]};\n ${A} sourceLocG = ${A}(${c.join()}, 0);\n ++${c[p-2]};\n ${A} sourceLocA = ${A}(${c.join()}, 0);\n --${c[p-1]};\n ${A} sourceLocB = ${A}(${c.join()}, 0);\n --${c[p-2]};`}else m=p,l=`\n ${u} sourceLocR = coords;\n ++${c[p-1]};\n ${u} sourceLocG = coords;\n ++${c[p-2]};\n ${u} sourceLocA = coords;\n --${c[p-1]};\n ${u} sourceLocB = coords;\n --${c[p-2]};`;let d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),f=\".\"+d[m-1],h=d.map(A=>\"int \"+A),g=$t(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=$t(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=$t(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=$t(\"sourceLocA\",m-1).concat(\"inIdx.a\"),w=o===\"max\"?\"greaterThan\":\"lessThan\",k=n?\"\":`\n inIdx = round(vec4(getBestIndicesAChannel(${g.join()}),\n getBestIndicesAChannel(${x.join()}),\n getBestIndicesAChannel(${b.join()}),\n getBestIndicesAChannel(${C.join()})));`,_=`vec4(\n getAChannel(${g.join()}),\n hasNextCol ? getAChannel(${x.join()}) : 0.,\n hasNextRow ? getAChannel(${b.join()}) : 0.,\n hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,$=n?\"\":`\n float getBestIndicesAChannel(${h.join()}) {\n return getChannel(getBestIndicesA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }`;this.userCode=`\n float getAChannel(${h.join()}) {\n return getChannel(getA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }\n ${$}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${c[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${c[p-2]} < ${i[p-2]-1};\n ${l}\n ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f},\n sourceLocB${f}, sourceLocA${f}) * ${t};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${t}; i++) {\n inIdx = srcIdx;\n ${k}\n vec4 candidate = ${_};\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4(${w}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n `}};function aA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=S.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new sh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,\"int32\");if(c.shape[1]===1)return c;let l=aA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function iA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=S.computeOptimalWindowSize(s),i=new ah(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===e.shape.length){let c=iA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function ih(r,e,t,o){let n=[t];if(S.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!O().getBool(\"WEBGL_PACK_REDUCE\")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=S.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=aA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return iA(r,e,o)}function J8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=ih(t,p,a[0],\"max\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Vo,backendName:\"webgl\",kernelFunc:J8};function eY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=ih(t,p,a[0],\"min\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var pA={kernelName:Za,backendName:\"webgl\",kernelFunc:eY};var tY=Bt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,rY=ge({opSnippet:tY}),cA={kernelName:ia,backendName:\"webgl\",kernelFunc:rY};var oY=Bt+\"return log(x + sqrt(x * x + 1.0));\",nY=ge({opSnippet:oY}),lA={kernelName:ua,backendName:\"webgl\",kernelFunc:nY};var sY=Bt+`\n return atan(x);\n`,aY=ge({opSnippet:sY}),mA={kernelName:pa,backendName:\"webgl\",kernelFunc:aY};var iY=mc+`\n return atan(a, b);\n`,uY=`\n vec4 result = atan(a, b);\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n `+Zs+`\n return result;\n`,pY=tt({opSnippet:iY,packedOpSnippet:uY}),dA={kernelName:la,backendName:\"webgl\",kernelFunc:pY};var cY=Bt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,lY=ge({opSnippet:cY}),fA={kernelName:ca,backendName:\"webgl\",kernelFunc:lY};var ps=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t===\"avg\",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b=\"0.0\";if(h||(b=\"-1.0 / 1e-20\"),o){let A=\">=\";this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${m};\n wC += ${c}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${A} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?g:x:`wR * ${m} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let C=\"max\",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(w=\"avgValue / count\");let k=Math.floor(a/4)*4,_=a%4,$=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${C}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n const float initializationValue = ${b};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4(${b});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${c};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n getValue(batch, xR, xC + 3 * ${c}, d)\n );\n\n ${$}\n }\n\n int xC = xCCorner + ${k};\n if (${_===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${$}\n } else if (${_===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n initializationValue,\n initializationValue\n );\n\n ${$}\n } else if (${_===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n initializationValue\n );\n\n ${$}\n }\n }\n setOutput(${w});\n }\n `}},zi=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t===\"avg\",w=\"0.0\";if(C||(w=\"-1.0 / 1e-20\"),o){let D=\">=\";this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < ${d};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${h};\n wC += ${m}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${D} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(_=\"avgValue / count\");let $=Math.floor(a/4)*4,A=a%4,R=`\n if (${C}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${k}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n const float initializationValue = ${w};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4(${w});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < ${d};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${$}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${R}\n }\n\n int xC = xCCorner + ${$};\n if (${A===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${R}\n } else if (${A===2}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n initializationValue,\n initializationValue\n );\n\n ${R}\n } else if (${A===3}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n initializationValue\n );\n\n ${R}\n }\n }\n setOutput(${_});\n }\n }\n `}};function mY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;is(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(S.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:t});let l=new ps(c,\"avg\",!1);return t.runWebGLProgram(l,[n],\"float32\")}var hA={kernelName:zo,backendName:\"webgl\",kernelFunc:mY};function dY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=S.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new zi(l,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var gA={kernelName:ip,backendName:\"webgl\",kernelFunc:dY};var uh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=`\n const ivec2 pads = ivec2(${c}, ${l});\n const float avgMultiplier = float(${m});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${p};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${u};\n wC+= ${i}) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n `}},ph=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=`\n const ivec3 pads = ivec3(${f}, ${h}, ${g});\n const float avgMultiplier = float(${x});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${l};\n wD += ${p}) {\n float dyD = float(dyDCorner + wD) / ${s}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${m};\n wR += ${u}) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${d};\n wC += ${c}) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function fY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=S.computePool3DInfo(a.shape,i,p,l,u,c),d=new ph(m);return t.runWebGLProgram(d,[n],a.dtype)}var xA={kernelName:Im,backendName:\"webgl\",kernelFunc:fY};function hY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;is([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=S.computePool2DInfo(a.shape,i,p,1,u),l=new uh(c);return t.runWebGLProgram(l,[n],a.dtype)}var yA={kernelName:wm,backendName:\"webgl\",kernelFunc:hY};function gY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Pu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var bA={kernelName:Wo,backendName:\"webgl\",kernelFunc:gY};var ch=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(S.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = ${i};\n float scale = ${p};\n float inv = scale * inversesqrt(variance + float(${a}));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n `}};var lh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(S.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n vec4 offset = ${i};\n vec4 scale = ${p};\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4(${a}));\n\n setOutput((x - mean) * inv + offset);\n }\n `}};var xY=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||n.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(i==null||n.shape.length===i.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=O().getBool(\"WEBGL_PACK_NORMALIZATION\")?new lh(o.shape,n.shape,s.shape,c,l,p):new ch(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},CA={kernelName:an,backendName:\"webgl\",kernelFunc:xY};var mh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=_e(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=yY(this.rank),n,s=e.map((a,i)=>`sourceLoc.${Tw[i]} = start[${i}] + coords.${Tw[i]};`);n=`\n ${t} sourceLoc;\n ${t} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},Tw=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function yY(r){if(r===1)return\"sourceLoc\";if(r<=6)return Tw.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var dh=class{constructor(e){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let t=_e(this.rank),o=$t(\"coords\",this.rank),n=$t(\"sourceLoc\",this.rank),s=this.rank===1?\"sourceLoc\":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=`\n result.x = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.y = ${a};\n --${n[this.rank-1]};\n }\n `,p=this.rank===1?\"\":`\n --${o[this.rank-1]};\n if (++${o[this.rank-2]} < ${e[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${t}(${e.map((c,l)=>`start[${l}]`).join()});`:e.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(`\n`);this.userCode=`\n void main() {\n ${t} coords = getOutputCoords();\n ${t} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function bY(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=ut.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function cs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=ut.parseSliceParams(n,s,a);if(ut.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.texData.get(n.dataId),m=l$(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=ut.isSliceContinous(n.shape,i,p);if(u||!c){let l=O().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new dh(p):new mh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),bY(n,i,p,t)}var SA={kernelName:_s,backendName:\"webgl\",kernelFunc:cs};var CY=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=cs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},wA={kernelName:xs,backendName:\"webgl\",kernelFunc:CY};function SY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=qf(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var IA={kernelName:Ja,backendName:\"webgl\",kernelFunc:SY};function wY(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=S.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var vA={kernelName:up,backendName:\"webgl\",kernelFunc:wY};var IY=\"return float(a != b);\",_w=tt({opSnippet:IY,cpuKernelImpl:r$,dtype:\"bool\"}),kA={kernelName:Nn,backendName:\"webgl\",kernelFunc:_w};function Ua(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var NA={kernelName:ai,backendName:\"webgl\",kernelFunc:Ua};var vY=\"return float(int(x));\";function TA(r,e){let t=new Jt(r.shape,vY),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Ew(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return At({inputs:{x:n},backend:t});let a=Vr(n.shape),i=Ew({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Rr({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=Ua({inputs:{input:n},backend:t}),i=Ew({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=PE(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return TA(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=_w({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var _A={kernelName:co,backendName:\"webgl\",kernelFunc:Ew};var EA=\"return ceil(x);\",kY=ge({opSnippet:EA,packedOpSnippet:EA,cpuKernelImpl:ME}),$A={kernelName:Uo,backendName:\"webgl\",kernelFunc:kY};var fh=class{constructor(e){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n `}};var hh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n `}};function NY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;O().getBool(\"WEBGL_PACK_CLIP\")?i=new hh(n.shape):i=new fh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var AA={kernelName:lo,backendName:\"webgl\",kernelFunc:NY};var gh=class{constructor(e){this.variableNames=[\"real\",\"imag\"],this.outputShape=e,this.userCode=`\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n `}};function RA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function TY(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new gh(o.shape),a=[RA(o,n.complexTensorInfos.real),RA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var FA={kernelName:pp,backendName:\"webgl\",kernelFunc:TY};var xh=class{constructor(e){this.outputShape=[],this.outputShape=S.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) {\n return getChannel(\n getT${h}(${yh(i,u,g)}),\n vec2(${yh(c,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${yh(i,u,f)}),\n vec2(${yh(c,u,f)}));`,this.userCode=`\n float getValue(${i.map(h=>\"int \"+h)}) {\n ${m}\n }\n\n void main() {\n ${s} coords = getOutputCoords();\n vec4 result = vec4(getValue(${a}), 0., 0., 0.);\n\n ${a[n-1]} = ${a[n-1]} + 1;\n if (${a[n-1]} < ${o[n-1]}) {\n result.g = getValue(${a});\n }\n\n ${a[n-2]} = ${a[n-2]} + 1;\n if (${a[n-2]} < ${o[n-2]}) {\n result.a = getValue(${a});\n }\n\n ${a[n-1]} = ${a[n-1]} - 1;\n if (${a[n-2]} < ${o[n-2]} &&\n ${a[n-1]} < ${o[n-1]}) {\n result.b = getValue(${a});\n }\n setOutput(result);\n }\n `}};function yh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Mu(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:t})}var DA={kernelName:si,backendName:\"webgl\",kernelFunc:Mu};function fc(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>Ua({inputs:{input:b},backend:t})),f=r.map(b=>Mu({inputs:{input:b},backend:t})),h=fc(d,e,t),g=fc(f,e,t),x=Rr({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(w=>{let _=[-1,y.sizeFromShape(w.shape.slice(e))];return te({inputs:{x:w},backend:t,attrs:{shape:_}})}),f=d.map(w=>({vals:t.readSync(w.dataId),shape:w.shape})),h=S.computeOutShape(d.map(w=>w.shape),1),g=d[0].shape[0]===1,x=LE(f,h,o,g),b=S.computeOutShape(r.map(w=>w.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=O().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&s[0].shape.length>1;if(s.length===1){let d=a?new Jt(r[0].shape,Qs):new Ar(r[0].shape,Qs);return t.runWebGLProgram(d,r,o)}let i=O().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=_Y(s,e,t),c=new xh(p.map(d=>d.shape)),l=t.runWebGLProgram(c,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(l),m}function _Y(r,e,t){let o=S.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function $w(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:t}):fc(p,s,t)}var OA={kernelName:ys,backendName:\"webgl\",kernelFunc:$w};var hc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat===\"channelsLast\",x=g?1:2,b=g?2:3,C=g?3:1,w=\"\",k=\"\";o&&(n?w=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?w=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:w=`\n float activation(float x) {\n ${o}\n }\n `,k=\"result = activation(result);\");let _=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${w}\n\n const ivec2 strides = ivec2(${p}, ${u});\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[${C}];\n\n ivec2 xRCCorner =\n ivec2(coords[${x}], coords[${b}]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${c};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${l};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if (${g}) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if (${h===1}) {\n\n if (${g}) {\n dotProd +=\n getX(batch, xR, xC, ${f}) *\n getW(wR, wC, ${f}, d2);\n } else {\n dotProd +=\n getX(batch, ${f}, xR, xC) *\n getW(wR, wC, ${f}, d2);\n }\n\n } else if (${h===2}) {\n vec2 wValues = vec2(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2)\n );\n\n if (${g}) {\n vec2 xValues = vec2(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if (${h===3}) {\n vec3 wValues = vec3(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2),\n getW(wR, wC, ${f} + 2, d2)\n );\n\n if (${g}) {\n vec3 xValues = vec3(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1),\n getX(batch, xR, xC, ${f} + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC),\n getX(batch, ${f} + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n ${_}\n ${k}\n setOutput(result);\n }\n `}},Ch=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${t}, ${o}, ${n});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < ${l}; wF++) {\n int xF = xFCorner + wF * ${p};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${u};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${c};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (${h===1}) {\n dotProd +=\n getX(batch, xF, xR, xC, ${f}) *\n getW(wF, wR, wC, ${f}, d2);\n } else if (${h===2}) {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (${h===3}) {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1),\n getX(batch, xF, xR, xC, ${f} + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2),\n getW(wF, wR, wC, ${f} + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};var gc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) {\n `;for(let g=0;g<(l+1)/2;g++){let x=g*2;if(m+=`\n xC = xCCorner + ${x*p};\n `,i===1){if(x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n `,p===1&&x>0?m+=`\n xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy);\n `:m+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${x} = vec4(previous.zw, xTexelC${x}.xy);\n } else {\n xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy);\n }\n `):m+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xC${x} = xTexelC${x};\n `,x+1= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n `,p>1?m+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy);\n } else {\n xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy);\n }\n `:m+=`\n xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy);\n `):b===1?m+=`\n xC${x+1} = xTexelC${x};\n `:m+=`\n xCOffset = xC + ${b};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x+1} = xTexelC${x+1};\n `}}else x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw);\n `,x+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy);\n `)):(m+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(\n xTexelC${x}.xy, xTexelC${x+1}.xy);\n `,x+1= 0) {\n // Use custom imod instead mod. On Intel GPU, mod may generate\n // unexpected value.\n // https://github.com/tensorflow/tfjs/issues/5447\n offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];\n d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n inChannels);\n\n if(d1 < inputShape[${i}] && d1 >= 0) {\n\n ch = imod(pos, inChannels);\n\n if (${s}) {\n innerDims = vec2(d1, ch);\n result[${c*2+l}] = getChannel(\n getA(rc.x, d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${c*2+l}] = getChannel(\n getA(rc.x, ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;this.userCode=`\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n ${u}\n\n ${n.output} = result;\n }\n `}};function wh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Ih({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat===\"channelsLast\",f=!1,h=!1,g,x=[];if(s!=null){let w=wh(s.shape,d);w!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:w}}),x.push(s))}if(n!=null){let w=wh(n.shape,d);w!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:w}}),x.push(n))}if(!((l===1||m===1)&&c>Nw)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let w=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,w,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(Li(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let $=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push($);let A=Pu({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),R=o.texData.get(A.dataId);y.assert(R.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=_,R.shape=t.outShape,g=At({inputs:{x:A},backend:o}),g.shape=t.outShape,x.push(A)}else{let w=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,w,t.inChannels]:[t.batchSize,t.inChannels,w]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Pu({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:$},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(_),x.push($)}for(let w of x)o.disposeIntermediateTensorInfo(w);return g}function vh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:d}=t,f=d===\"channelsLast\",h=p*u*c,g=m*l,x=[t.batchSize,h,g],b=!0,C=!1,w=[];if(s!=null){let H=wh(s.shape,f);H!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:H}}),w.push(s))}if(n!=null){let H=wh(n.shape,f);H!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:H}}),w.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});w.push(k);let _=new Sh(x,t),$=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],A=o.runWebGLProgram(_,[r],\"float32\",$),R=te({inputs:{x:A},backend:o,attrs:{shape:x}});w.push(A),w.push(R);let D=n!=null,P=s!=null,M=i===\"leakyrelu\",L=i?Wa(i,!0):null,W=new dc(f?R.shape:k.shape,f?k.shape:R.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,D,L,P,M),V=f?[R,k]:[k,R];if(n&&V.push(n),P&&V.push(s),M){let H=o.makeTensorInfo([],\"float32\",y.createScalarValue(a,\"float32\"));V.push(H),w.push(H)}let U=o.runWebGLProgram(W,V,\"float32\"),q=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});w.push(U);for(let H of w)o.disposeIntermediateTensorInfo(H);return q}function EY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type===\"SAME\"||m.padInfo.type===\"VALID\"))d=Ih({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l===\"channelsLast\"&&O().getBool(\"WEBGL_EXP_CONV\")){let h=new gc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],\"float32\",g)}else if(O().getBool(\"WEBGL_CONV_IM2COL\"))d=vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new hc(m);d=t.runWebGLProgram(h,[n,s],\"float32\")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var PA={kernelName:Go,backendName:\"webgl\",kernelFunc:EY};var kh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat===\"channelsLast\";this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n if (${a}) {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Nh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat===\"channelsLast\",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[${l}];\n\n ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n if (${a}) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Th=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yF = 0; yF < ${e.outDepth}; yF++) {\n int xF = wF + yF * ${t} - ${s};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}},_h=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=`\n const ivec3 pads = ivec3(${p}, ${u}, ${c});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < ${t}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${t} - 1 - wF;\n\n for (int wR = 0; wR < ${o}; wR++) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${o} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function $Y(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new kh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var MA={kernelName:cp,backendName:\"webgl\",kernelFunc:$Y};function AY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=new Nh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var LA={kernelName:Ho,backendName:\"webgl\",kernelFunc:AY};function RY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=S.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Ch(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var BA={kernelName:lp,backendName:\"webgl\",kernelFunc:RY};function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=S.computeConv3DInfo(n.shape,p,a,1,i),c=new Th(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var VA={kernelName:vm,backendName:\"webgl\",kernelFunc:FY};function DY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=S.computeConv3DInfo(p,s.shape,i,1,a),c=new _h(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var zA={kernelName:mp,backendName:\"webgl\",kernelFunc:DY};var OY=_o+`\n return cos(x);\n`,PY=ge({opSnippet:OY}),WA={kernelName:qo,backendName:\"webgl\",kernelFunc:PY};var MY=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,LY=ge({opSnippet:MY}),UA={kernelName:Ko,backendName:\"webgl\",kernelFunc:LY};var Eh=class{constructor(e,t,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let d=n===\"bilinear\"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=l>1?[`${(i-1)/(l-1)}`,\"(y2-y1) * height_ratio\",`y1*${f} + float(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${f}`],[C,w,k]=m>1?[`${(p-1)/(m-1)}`,\"(x2-x1) * width_ratio\",`x1*${h} + float(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${h}`];this.userCode=`\n const float height_ratio = float(${g});\n const float width_ratio = float(${C});\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= ${a}) {\n return;\n }\n\n float height_scale = ${x};\n float width_scale = ${w};\n\n float in_y = ${b};\n if( in_y < 0.0 || in_y > ${f} ) {\n setOutput(float(${s}));\n return;\n }\n float in_x = ${k};\n if( in_x < 0.0 || in_x > ${h} ) {\n setOutput(float(${s}));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if(${d} == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n `}};var BY=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Eh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],\"float32\")},GA={kernelName:Yo,backendName:\"webgl\",kernelFunc:BY};var Lu;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Lu||(Lu={}));var El=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===Lu.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${HA(s,\"coords\",this.op)})`,p=this.outputShape[this.outputShape.length-1],u=\"\",c=\"\";o?(u=n?`end != ${p-1}`:\"end != 0\",c=n?\"end + 1\":\"end - 1\"):(u=n?`end + pow2 < ${p}`:\"end >= pow2\",c=n?\"end + pow2\":\"end - pow2\"),this.userCode=`\n void main() {\n ${_e(s)} coords = getOutputCoords();\n int end = ${qA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${qA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${HA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function HA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function qA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function $h(r,e,t,o,n,s){let a=e.shape.length,i=S.getAxesPermutation([o],a),p=e;i!=null&&(p=xt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=S.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new El(r,p.shape,!1,s),f=[[m]],h=l;l=t.runWebGLProgram(d,[l],l.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new El(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=S.getUndoAxesPermutation(i),d=xt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function VY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return $h(Lu.Prod,n,t,s,a,i)}var KA={kernelName:jo,backendName:\"webgl\",kernelFunc:VY};function zY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return $h(Lu.Sum,n,t,s,a,i)}var jA={kernelName:Xo,backendName:\"webgl\",kernelFunc:zY};function WY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=qf(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=OE(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var XA={kernelName:ti,backendName:\"webgl\",kernelFunc:WY};var Ah=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = ${this.getHeightCoordString()};\n int w = ${this.getWidthCoordString()};\n int d = ${this.getDepthCoordString()};\n\n int in_h = h / ${t};\n int offset_h = imod(h, ${t});\n int in_w = w / ${t};\n int offset_w = imod(w, ${t});\n int offset_d = (offset_h * ${t} + offset_w) *\n ${this.getOutputDepthSize()};\n int in_d = d + offset_d;\n\n float result = ${this.getInputSamplingString()};\n setOutput(result);\n }\n `}getHeightCoordString(){return this.dataFormat===\"NHWC\"?\"coords[1]\":\"coords[2]\"}getWidthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[2]\":\"coords[3]\"}getDepthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[3]\":\"coords[1]\"}getOutputDepthSize(){return this.dataFormat===\"NHWC\"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function UY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=new Ah(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var YA={kernelName:Qo,backendName:\"webgl\",kernelFunc:UY};var xc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u=\"\",c=\"\";o&&(n?u=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?u=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:u=`\n float activation(float x) {\n ${o}\n }\n `,c=\"result = activation(result);\");let l=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${u}\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / ${p};\n int q = d2 - d1 * ${p};\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < ${a}; wR++) {\n int xR = xRCorner + wR * dilations[0];\n\n if (xR < 0 || xR >= inDims[0]) {\n continue;\n }\n\n for (int wC = 0; wC < ${i}; wC++) {\n int xC = xCCorner + wC * dilations[1];\n\n if (xC < 0 || xC >= inDims[1]) {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n ${l}\n ${c}\n setOutput(result);\n }\n `}};var yc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,d=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x=0 && xR < inDims[0]) {\n `;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(d+=`\n xC = xCCorner + ${b*u};\n `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n `,u===1&&b>0?d+=`\n xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy);\n `:d+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${b} = vec4(previous.zw, xTexelC${b}.xy);\n } else {\n xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy);\n }\n `):d+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xC${b} = xTexelC${b};\n `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n `,u>1?d+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy);\n } else {\n xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy);\n }\n `:d+=`\n xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy);\n `):C===1?d+=`\n xC${b+1} = xTexelC${b};\n `:d+=`\n xCOffset = xC + ${C};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b+1} = xTexelC${b+1};\n `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);\n `,b+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy);\n `)):(d+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(\n xTexelC${b}.xy, xTexelC${b+1}.xy);\n `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=S.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;O().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new yc(l):m=new xc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],\"float32\",d)}var QA={kernelName:Zo,backendName:\"webgl\",kernelFunc:GY};var Rh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * ${a} + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Fh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=`\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < ${p}; dm++) {\n int d2 = d1 * ${p} + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function HY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=S.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Rh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var ZA={kernelName:dp,backendName:\"webgl\",kernelFunc:HY};function qY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=S.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Fh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var JA={kernelName:fp,backendName:\"webgl\",kernelFunc:qY};var Dh=class{constructor(e){this.variableNames=[\"X\"],this.outputShape=[e,e],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n `}};function KY(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var eR={kernelName:hp,backendName:\"webgl\",kernelFunc:KY};var Oh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=`\n const ivec2 strides = ivec2(${s}, ${a});\n const ivec2 pads = ivec2(${l}, ${m});\n const float neg_infinity = -3.4e38;\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.w;\n ivec2 outTopLeftCorner =\n coords.yz * strides - pads;\n int hBeg = outTopLeftCorner.x;\n int wBeg = outTopLeftCorner.y;\n\n float curVal = neg_infinity;\n for (int h = 0; h < ${i}; h++) {\n int hIn = hBeg + h * ${u};\n\n if (hIn >= 0 && hIn < ${t}) {\n for (int w = 0; w < ${p}; w++) {\n int wIn = wBeg + w * ${c};\n\n if (wIn >= 0 && wIn < ${o}) {\n float xVal = getX(batch, hIn, wIn, d1);\n float wVal = getW(h, w, d1);\n\n float val = xVal + wVal;\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n float result = curVal;\n setOutput(result);\n }\n `}};function jY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=S.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Oh(u);c=t.runWebGLProgram(l,[n,s],\"float32\");let m=te({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var tR={kernelName:gp,backendName:\"webgl\",kernelFunc:jY};function XY(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=S.decodeEinsumEquation(n,s.length);S.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=S.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Ou({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var rR={kernelName:ri,backendName:\"webgl\",kernelFunc:XY};var YY=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",QY=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,ZY=ge({opSnippet:YY,packedOpSnippet:QY}),oR={kernelName:en,backendName:\"webgl\",kernelFunc:ZY};var JY=\"return (b >= 1.0) ? a : a * (b + 1.0);\",eQ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,tQ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=O().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new To(eQ,o.shape,n.shape):new io(JY,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},nR={kernelName:km,backendName:\"webgl\",kernelFunc:tQ};var rQ=`\n return vec4(equal(a, b));\n`,oQ=\"return float(a == b);\",nQ=tt({opSnippet:oQ,packedOpSnippet:rQ,dtype:\"bool\",cpuKernelImpl:BE}),sR={kernelName:tn,backendName:\"webgl\",kernelFunc:nQ};var sQ=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n float p = ${S.ERF_P};\n float a1 = ${S.ERF_A1};\n float a2 = ${S.ERF_A2};\n float a3 = ${S.ERF_A3};\n float a4 = ${S.ERF_A4};\n float a5 = ${S.ERF_A5};\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`,aQ=ge({opSnippet:sQ}),aR={kernelName:ma,backendName:\"webgl\",kernelFunc:aQ};var iQ=_o+`\n return exp(x);\n`,uQ=`\n vec4 result = exp(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Aw=ge({opSnippet:iQ,packedOpSnippet:uQ,cpuKernelImpl:VE,dtype:\"float32\"}),iR={kernelName:rn,backendName:\"webgl\",kernelFunc:Aw};function Ph(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var uR={kernelName:bs,backendName:\"webgl\",kernelFunc:Ph};var pR=\"return exp(x) - 1.0;\",pQ=ge({opSnippet:pR,packedOpSnippet:pR,cpuKernelImpl:zE}),cR={kernelName:da,backendName:\"webgl\",kernelFunc:pQ};var $l=class{constructor(e,t,o){this.variableNames=[\"real\",\"imag\"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:\"1.0\",i;if(e===\"real\")i=\"return real * expR - imag * expI;\";else if(e===\"imag\")i=\"return real * expI + imag * expR;\";else throw new Error(`FFT component must be either \"real\" or \"imag\", got ${e}.`);this.userCode=`\n const float exponentMultiplier = ${s};\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n ${i}\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float(${n});\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < ${n}; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / ${a};\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n `}};function Mh(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new $l(\"real\",p,e),c=new $l(\"imag\",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,\"float32\"),d=t.runWebGLProgram(c,l,\"float32\"),f=Rr({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function cQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return Mh(o,!1,t)}var lR={kernelName:oi,backendName:\"webgl\",kernelFunc:cQ};var Lh=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=e,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function Ga(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Lh(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var mR={kernelName:Cs,backendName:\"webgl\",kernelFunc:Ga};var Bh=class{constructor(e){this.variableNames=[\"Image\"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${t} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${t}) {\n outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n } else {\n outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var dR={kernelName:on,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bh(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var fR=\"return floor(x);\",lQ=ge({opSnippet:fR,packedOpSnippet:fR,cpuKernelImpl:WE}),hR={kernelName:nn,backendName:\"webgl\",kernelFunc:lQ};var mQ=`\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n`,dQ=`\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n`,fQ=tt({opSnippet:mQ,packedOpSnippet:dQ,dtype:\"int32\"}),gR={kernelName:sn,backendName:\"webgl\",kernelFunc:fQ};var Vh=class{constructor(e){this.variableNames=[\"A\"];let t=St(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0);\n\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n `}};var zh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=St(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2(${n}.0, ${o}.0);\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n ${t.output} = result;\n }\n `}};var xR={kernelName:Zi,backendName:\"webgl\",kernelFunc:hQ},bc,Rw=O().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function hQ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=O().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(bc==null||h!==Rw)&&(Rw=h,bc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:Rw})),bc.canvas.width=p,bc.canvas.height=u,bc.drawImage(n,0,0,p,u),n=bc.canvas}let m=t.makeTensorInfo(c,\"int32\");t.texData.get(m.dataId).usage=ir.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=O().getBool(\"WEBGL_PACK\")?new zh(l):new Vh(l),f=t.runWebGLProgram(d,[m],\"int32\");return t.disposeData(m.dataId),f}function gQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=S.convertConv2DDataFormat(c),g=S.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,w=i!=null,k=d===\"leakyrelu\",_=()=>{let A=[n,s],R=(D,P)=>{if(P===\"NCHW\"&&D.shape.length===1&&D.shape[0]!==1){let M=te({inputs:{x:D},backend:t,attrs:{shape:[D.shape[0],1,1]}});return b.push(M),M}return D};if(C&&A.push(R(a,c)),w&&A.push(R(i,c)),k){let D=t.makeTensorInfo([],\"float32\",y.createScalarValue(f,\"float32\"));A.push(D),b.push(D)}return A};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type===\"SAME\"||g.padInfo.type===\"VALID\"))x=Ih({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&O().getBool(\"WEBGL_EXP_CONV\")){let A=d?Wa(d,!0):null,R=new gc(g,C,A,w,k),D=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],P=_();x=t.runWebGLProgram(R,P,\"float32\",D)}else if(O().getBool(\"WEBGL_CONV_IM2COL\"))x=vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let A=d?Wa(d,!1):null,R=new hc(g,C,A,w,k),D=_();x=t.runWebGLProgram(R,D,\"float32\")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(A=>t.disposeIntermediateTensorInfo(A)),$}var yR={kernelName:ho,backendName:\"webgl\",kernelFunc:gQ};function xQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=[],h=c;h==null&&(h=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=S.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=O().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Wa(m,x):null,C=[n,s],w=a!=null,k=i!=null,_=m===\"leakyrelu\";if(w&&C.push(a),k&&C.push(i),_){let D=t.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(D),f.push(D)}let $;x?$=new yc(g,w,b,k,_):$=new xc(g,w,b,k,_);let A=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],R=t.runWebGLProgram($,C,\"float32\",A);return f.forEach(D=>t.disposeIntermediateTensorInfo(D)),R}var bR={kernelName:go,backendName:\"webgl\",kernelFunc:xQ};var Wh=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=_e(o.length),a=`\n int index;`;for(let i=0;i= ${this.paramsShape[i]};\n flattenIndex += index * ${this.strides[i]};`;this.userCode=`\n void main() {\n ${s} coords = getOutputCoords();\n int flattenIndex = 0;\n bool out_of_bounds = false;\n\n ${a}\n\n setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n }\n `}};function yQ(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=S.prepareAndValidate(o,n),m=te({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=te({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let x=t.readSync(n.dataId),b=t.bufferSync(o),C=UE(x,b,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,C.values)}let f=new Wh(a,l,[u,c],o.shape),h=t.runWebGLProgram(f,[d,m],d.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:p}});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var CR={kernelName:un,backendName:\"webgl\",kernelFunc:yQ};var Uh=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=_e(this.rank),n=bQ(e,2);this.userCode=`\n void main() {\n ${o} resRC = getOutputCoords();\n int index = int(getIndices(resRC.x, resRC.z));\n float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function bQ(r,e){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=S.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=y.sizeFromShape(s.shape),l=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(d);let f=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=t.bufferSync(d),C=t.bufferSync(m),w=GE(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,w.dtype,w.values)}let h=new Uh(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var SR={kernelName:Ss,backendName:\"webgl\",kernelFunc:Fw};var CQ=\"return float(a > b);\",SQ=`\n return vec4(greaterThan(a, b));\n`,wQ=tt({opSnippet:CQ,packedOpSnippet:SQ,cpuKernelImpl:HE,dtype:\"bool\"}),wR={kernelName:pn,backendName:\"webgl\",kernelFunc:wQ};var IQ=\"return float(a >= b);\",vQ=`\n return vec4(greaterThanEqual(a, b));\n`,kQ=tt({opSnippet:IQ,packedOpSnippet:vQ,dtype:\"bool\",cpuKernelImpl:qE}),IR={kernelName:cn,backendName:\"webgl\",kernelFunc:kQ};function NQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return Mh(o,!0,t)}var vR={kernelName:ni,backendName:\"webgl\",kernelFunc:NQ};var TQ=\"return float(!isnan(x) && !isinf(x));\",_Q=ge({opSnippet:TQ,dtype:\"bool\"}),kR={kernelName:fa,backendName:\"webgl\",kernelFunc:_Q};var EQ=\"return float(isinf(x));\",$Q=ge({opSnippet:EQ,dtype:\"bool\"}),NR={kernelName:ha,backendName:\"webgl\",kernelFunc:$Q};var AQ=\"return float(isnan(x));\",RQ=ge({opSnippet:AQ,dtype:\"bool\"}),TR={kernelName:ln,backendName:\"webgl\",kernelFunc:RQ};var FQ=\"return float(a < b);\",DQ=`\n return vec4(lessThan(a, b));\n`,OQ=tt({opSnippet:FQ,packedOpSnippet:DQ,cpuKernelImpl:KE,dtype:\"bool\"}),_R={kernelName:dn,backendName:\"webgl\",kernelFunc:OQ};var PQ=\"return float(a <= b);\",MQ=`\n return vec4(lessThanEqual(a, b));\n`,LQ=tt({opSnippet:PQ,packedOpSnippet:MQ,cpuKernelImpl:jE,dtype:\"bool\"}),ER={kernelName:fn,backendName:\"webgl\",kernelFunc:LQ};function BQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=XE(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var $R={kernelName:xp,backendName:\"webgl\",kernelFunc:BQ};var VQ=_o+`\n return x < 0.0 ? 0./0. : log(x);\n`,zQ=`\n vec4 result = log(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n return result;\n`,WQ=ge({opSnippet:VQ,packedOpSnippet:zQ,cpuKernelImpl:YE}),AR={kernelName:hn,backendName:\"webgl\",kernelFunc:WQ};var UQ=_o+`\n return log(1.0 + x);\n`,GQ=ge({opSnippet:UQ}),RR={kernelName:ga,backendName:\"webgl\",kernelFunc:GQ};var HQ=\"return float(a >= 1.0 && b >= 1.0);\",qQ=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,KQ=tt({opSnippet:HQ,packedOpSnippet:qQ,dtype:\"bool\"}),FR={kernelName:gn,backendName:\"webgl\",kernelFunc:KQ};var jQ=\"return float(!(x >= 1.0));\",XQ=ge({opSnippet:jQ}),DR={kernelName:xn,backendName:\"webgl\",kernelFunc:XQ};var YQ=\"return float(a >= 1.0 || b >= 1.0);\",QQ=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,ZQ=tt({opSnippet:YQ,packedOpSnippet:QQ,dtype:\"bool\"}),OR={kernelName:xa,backendName:\"webgl\",kernelFunc:ZQ};var Gh=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -${a}; j <= ${a}; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= ${i}) {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * ${p};\n setOutput(val);\n }\n `}};var Hh=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < ${this.outputShape[3]};\n bool hasNextRow = c < ${this.outputShape[2]};\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - ${a};\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - ${a}; j <= ${a}; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * ${p};\n setOutput(result);\n }\n `}};var JQ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=O().getBool(\"WEBGL_PACK_NORMALIZATION\")?new Hh(n.shape,s,a,i,p):new Gh(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},PR={kernelName:yp,backendName:\"webgl\",kernelFunc:JQ};var qh=class{constructor(e,t,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < ${this.depth}; ++d) {\n int depthBegin = int(max(0.0, float(d - ${t})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${t} + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = ${this.depth};\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float(${n}) * norm + float(${o});\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float(${n})\n * float(${s})\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * ${s});\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n `}};var e7=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new qh(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},MR={kernelName:Nm,backendName:\"webgl\",kernelFunc:e7};function LR(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Gr(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Dw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,w=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:t});let l=new ps(c,\"max\",!1);return t.runWebGLProgram(l,[n],n.dtype)}var zR={kernelName:Cn,backendName:\"webgl\",kernelFunc:n7};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=S.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new zi(l,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var WR={kernelName:bp,backendName:\"webgl\",kernelFunc:s7};var Kh=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${s};\n wR += ${n}) {\n float dyR = float(dyRCorner + wR) / ${t}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${a}; wC++) {\n float dyC = float(dyCCorner + wC) / ${o}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * ${a} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n `}},jh=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=c-1-e.padInfo.left,f=p*u*c-1;this.userCode=`\n const ivec3 pads = ivec3(${l}, ${m}, ${d});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${p};\n wD += ${s}) {\n float dyD = float(dyDCorner + wD) / ${t}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${u};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${o}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${c};\n wC += ${i}) {\n float dyC = float(dyCCorner + wC) / ${n}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = ${f} -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * ${u} * ${c} +\n wR * ${c} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function a7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=S.computePool3DInfo(a.shape,i,p,l,u,c),d=new zi(m,\"max\",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new jh(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var UR={kernelName:_m,backendName:\"webgl\",kernelFunc:a7};function i7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;is([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=S.computePool2DInfo(i.shape,p,u,1,c,l),d=!0,f=new ps(m,\"max\",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new Kh(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var GR={kernelName:Tm,backendName:\"webgl\",kernelFunc:i7};function HR(r,e,t,o){let n=new ps(t,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new ps(t,\"max\",!0,!0,e);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var qR={kernelName:Cp,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(S.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=S.computePool2DInfo(o.shape,n,s,u,a),[l,m]=HR(o,i,c,p);return[l,m]}};function KR(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Gr(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var jR={kernelName:Sn,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,c=S.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let w=a.texData.get(f.dataId).values,k=new Array(i);for(let A=0;Ac[0]+e[l]+c[1]);let n=e.length,s=_e(n),a=t.map(c=>c[0]).join(\",\"),i=t.map((c,l)=>c[0]+e[l]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n),u=o===\"reflect\"?0:1;if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start) {\n outC = start * 2 - outC - ${u};\n } else if(outC >= end) {\n outC = (end - 1) * 2 - outC + ${u};\n }\n setOutput(getX(outC - start));\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n for (int i = 0; i < ${n}; i++) {\n if (outC[i] < start[i]) {\n outC[i] = start[i] * 2 - outC[i] - ${u};\n } else if(outC[i] >= end[i]) {\n outC[i] = (end[i] - 1) * 2 - outC[i] + ${u};\n }\n }\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n `}};var Yh=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=_e(n),a=t.map(f=>f[0]).join(\",\"),i=t.map((f,h)=>f[0]+e[h]).join(\",\"),p=$t(\"rc\",n),u=$t(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=o===\"reflect\"?0:1,d=\"\";if(n===1){let f=`\n ${s} source = rc;\n if (source < start) {\n source = start * 2 - source - ${m};\n } else if (source >= end) {\n source = (end - 1) * 2 - source + ${m};\n }\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n `}else{let f=`\n ${s} source = rc;\n ${s} lt = ${s}(lessThan(source, start));\n ${s} gte = ${s}(greaterThanEqual(source, end));\n ${s} orig = 1 - (lt + gte);\n source = orig * source +\n lt * (start * 2 - source - ${m}) +\n gte * ((end - 1) * 2 - source + ${m});\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {\n ${f}\n result[2] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[3] = getChannel(getX(${u.join()}), ${l});\n }\n }\n `}this.userCode=`\n const ${s} start = ${s}(${a});\n const ${s} end = ${s}(${i});\n\n void main() {\n ${s} outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n ${d}\n setOutput(result);\n }\n `}};var m7=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=O().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Yh(o.shape,n,s):new Xh(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},QR={kernelName:vn,backendName:\"webgl\",kernelFunc:m7};var d7=`if (b == 0.0) return NAN;\n return mod(a, b);`,f7=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+Zs+`\n return result;\n`,h7=tt({opSnippet:d7,packedOpSnippet:f7}),ZR={kernelName:ya,backendName:\"webgl\",kernelFunc:h7};var Qh=class{constructor(e,t,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[e,o],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < ${t-1}; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float(${t-1}));\n }\n `}};var g7=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,x7=`\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n`,Ow=tt({opSnippet:g7,packedOpSnippet:x7,checkOutOfBounds:!0}),JR={kernelName:Jo,backendName:\"webgl\",kernelFunc:Ow};var eF=\"return a - b;\",Pw=tt({opSnippet:eF,packedOpSnippet:eF,supportsComplex:!0,cpuKernelImpl:b$}),tF={kernelName:Xn,backendName:\"webgl\",kernelFunc:Pw};function Mw(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Dw({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=S.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=Pw({inputs:{a:n,b:u},backend:t}),l=Aw({inputs:{x:c},backend:t}),m=Ou({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ow({inputs:{a:l,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var rF={kernelName:qn,backendName:\"webgl\",kernelFunc:Mw};function y7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Mw({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qh(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),d}var oF={kernelName:Sp,backendName:\"webgl\",kernelFunc:y7};var b7=Bt+`\n return -x;\n`,C7=`\n vec4 result = -x;\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`;function S7(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=t$(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return O().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Ar(o.shape,C7):n=new Jt(o.shape,b7),t.runWebGLProgram(n,[o],o.dtype)}var nF={kernelName:ws,backendName:\"webgl\",kernelFunc:S7};var w7=Lt.nonMaxSuppressionV3Impl;function I7(r){S.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=w7(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var sF={kernelName:Tn,backendName:\"webgl\",kernelFunc:I7};var v7=Lt.nonMaxSuppressionV4Impl;function k7(r){S.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=v7(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var aF={kernelName:ba,backendName:\"webgl\",kernelFunc:k7};var N7=Lt.nonMaxSuppressionV5Impl;function T7(r){S.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=N7(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var iF={kernelName:_n,backendName:\"webgl\",kernelFunc:T7};var Zh=class{constructor(e,t,o,n){this.variableNames=[\"indices\"],this.outputShape=[e,t],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float(${n}), float(${o}),\n float(index == coords.y)));\n }\n `}};var _7=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Zh(u,a,i,p),l=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},uF={kernelName:En,backendName:\"webgl\",kernelFunc:_7};function Al(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=Ua({inputs:{input:o},backend:t}),s=Al({inputs:{x:n},backend:t}),a=Mu({inputs:{input:o},backend:t}),i=Al({inputs:{x:a},backend:t}),p=Rr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ga({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var pF={kernelName:Fs,backendName:\"webgl\",kernelFunc:Al};function cF(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=Ua({inputs:{input:o},backend:t}),s=cF({inputs:{x:n},backend:t}),a=Mu({inputs:{input:o},backend:t}),i=Al({inputs:{x:a},backend:t}),p=Rr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ga({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var lF={kernelName:Is,backendName:\"webgl\",kernelFunc:cF};function E7(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Ph({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Ph({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=$w({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var mF={kernelName:vs,backendName:\"webgl\",kernelFunc:E7};var Jh=class{constructor(e,t,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=_e(n),a=t.map(u=>u[0]).join(\",\"),i=t.map((u,c)=>u[0]+e[c]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n);if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(value);\n } else {\n setOutput(getX(outC - start));\n }\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(value);\n } else {\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n }\n `}};var eg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=_e(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=$t(\"rc\",n),u=$t(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1;\n if(${c}) {\n `,n===1?\"\":`}\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?\"\":` ${p[n-1]} += 1;\n if(${c}) {`],d=n===1?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",f=\"\";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ga({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=O().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new eg(n.shape,s,a):new Jh(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},dF={kernelName:$n,backendName:\"webgl\",kernelFunc:Lw};var $7=`\n if(a < 0.0 && floor(b) < b){\n return NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n return (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n`,A7=`\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n bvec4 isNaN1 = lessThan(a, vec4(0.0));\n bvec4 isNaN2 = lessThan(floor(b), b);\n bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);\n `+Zs+`\n return result;\n`,R7=tt({opSnippet:$7,packedOpSnippet:A7}),fF={kernelName:An,backendName:\"webgl\",kernelFunc:R7};function F7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),c=u,l=S.getAxesPermutation(c,i),m=n;l!=null&&(m=xt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=S.getInnerMostAxes(c.length,i),p.push(m)),S.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=o$(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=S.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=ka(n.dtype),C=Gr(x,b,\"prod\",t);d=te({inputs:{x:C},backend:t,attrs:{shape:f}}),p.push(x),p.push(C)}if(a){p.push(d);let f=S.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var hF={kernelName:Fn,backendName:\"webgl\",kernelFunc:F7};function D7(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,d,f]=n$(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var gF={kernelName:wp,backendName:\"webgl\",kernelFunc:D7};function O7(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=s$(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var xF={kernelName:Ip,backendName:\"webgl\",kernelFunc:O7};function P7(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=a$(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var yF={kernelName:vp,backendName:\"webgl\",kernelFunc:P7};var Bw=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=i$(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},bF={kernelName:ks,backendName:\"webgl\",kernelFunc:Bw};var M7=\"return 1.0 / x;\",L7=ge({opSnippet:M7}),CF={kernelName:Dn,backendName:\"webgl\",kernelFunc:L7};var B7=Bt+`\n return (x < 0.0) ? 0.0 : x;\n`,V7=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,z7=ge({opSnippet:B7,packedOpSnippet:V7}),SF={kernelName:On,backendName:\"webgl\",kernelFunc:z7};var W7=Bt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,U7=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,G7=ge({opSnippet:W7,packedOpSnippet:U7}),wF={kernelName:Ln,backendName:\"webgl\",kernelFunc:G7};var tg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)\":m=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n `}};var rg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)\":m=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n `}};function H7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=O().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new rg(n.shape,p,u,s,a):new tg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],\"float32\")}var IF={kernelName:Mn,backendName:\"webgl\",kernelFunc:H7};var og=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), ${n-1}.0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new og(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var vF={kernelName:$m,backendName:\"webgl\",kernelFunc:q7};var ng=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":d=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}};var sg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))\":d=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec3 sourceNearestRC = ivec3(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n vec4 newValue = vec4(\n getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n setOutput(newValue);\n }\n `}};function K7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=O().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new sg(n.shape,p,u,s,a):new ng(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var kF={kernelName:Pn,backendName:\"webgl\",kernelFunc:K7};var ag=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float sourceFracRow =\n float(${p[0]}) *\n (float(dyR) / float(${u[0]}));\n\n float sourceFracCol =\n float(${p[1]}) *\n (float(dyC) / float(${u[1]}));\n\n int sourceNearestRow = int(min(\n float(int(${n}) - 1),\n ${o} ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int(${s}) - 1),\n ${o} ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function j7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new ag(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var NF={kernelName:Em,backendName:\"webgl\",kernelFunc:j7};var ig=class{constructor(e,t){this.variableNames=[\"x\"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${e[0]} - coord - 1));\n }\n `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,s=e.map((i,p)=>n(p)).join(\",\"),a=_e(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var ug=class{constructor(e,t){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=$t(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=_e(o);o===1?this.userCode=`\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX(${e[0]} - rc - 1),\n ${e[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),\n ${e[0]} - (rc + 1) - 1);\n }\n setOutput(result);\n }\n `:this.userCode=`\n void main() {\n ${i} rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = ${p(n.slice())};\n if(${s}){\n result.g = ${u(n.slice())};\n }\n if(${a}) {\n result.b = ${c(n.slice())};\n if(${s}) {\n result.a = ${l(n.slice())};\n }\n }\n setOutput(result);\n }\n `;function p(f){return m(f)}function u(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",m(f)}function c(f){return f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function l(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function m(f){let h=e.map((b,C)=>d(C,f)),g=h.join(\",\"),x=h.slice(-2).join(\",\");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function X7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return At({inputs:{x:n},backend:t});let p=O().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new ug(n.shape,i):new ig(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var TF={kernelName:Bn,backendName:\"webgl\",kernelFunc:X7};var pg=class{constructor(e,t){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=e[1],n=e[2];this.outputShape=e;let s=\"\";typeof t==\"number\"?s=`float outputValue = ${t.toFixed(2)};`:s=`\n vec3 fill = vec3(${t.join(\",\")});\n float outputValue = fill[coords[3]];`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n int y = coords[1];\n float coordXFloat = (float(x) - params[0]) * params[3] -\n (float(y) - params[1]) * params[2];\n float coordYFloat = (float(x) - params[0]) * params[2] +\n (float(y) - params[1]) * params[3];\n int coordX = int(round(coordXFloat + params[0]));\n int coordY = int(round(coordYFloat + params[1]));\n ${s}\n if(coordX >= 0 && coordX < ${n} && coordY >= 0 && coordY < ${o}) {\n outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var _F={kernelName:es,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new pg(o.shape,s),[u,c]=S.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var Y7=`\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n`,Q7=ge({opSnippet:Y7}),EF={kernelName:Ca,backendName:\"webgl\",kernelFunc:Q7};var Z7=\"return inversesqrt(x);\",J7=ge({opSnippet:Z7,cpuKernelImpl:u$}),$F={kernelName:Vn,backendName:\"webgl\",kernelFunc:J7};var Cc=class{constructor(e,t,o,n,s,a,i=!0){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let p=_e(s.length),u=_e(a.length),c=\"\";o===1?c=\"i\":o===2&&(c=\"i, j\");let l=`getIndices(${c})`,m=\"\";n===1?m=\"i\":n===2&&(m=\"i, coords[1]\");let d=`getUpdates(${m})`,f=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${p} strides = ${p}(${s});\n\n void main() {\n ${u} coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < ${e}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${t}; j++) {\n int index = round(${l});\n flattenedIndex += index * ${f};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${d};\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n `}};function eZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=S.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],\"float32\",new Float32Array([0])),g=new Cc(p,i,d.shape.length,f.shape.length,c,m),x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var AF={kernelName:zn,backendName:\"webgl\",kernelFunc:eZ};var cg=class{constructor(e,t,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[e,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=O().getNumber(\"WEBGL_VERSION\")===2?s:a,p=n===\"left\"?\"<\":\"<=\";this.userCode=`\n int findBound(int batch, float value) {\n int left = 0;\n int right = numInputs;\n int mid;\n ${i}\n mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${p} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int valueIndex = coords[1];\n\n float value = getValues(batch, valueIndex);\n\n setOutput(float(findBound(batch, value)));\n }\n `}};function tZ(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new cg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var RF={kernelName:ii,backendName:\"webgl\",kernelFunc:tZ};var lg=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s=\"resRC\",n=\"resRC\";else{let i=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],p=[],u=[];for(let c=0;c= 1.0) {\n setOutput(getA(${s}));\n } else {\n setOutput(getB(${s}));\n }\n }\n `}};function rZ(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new lg(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var FF={kernelName:Ts,backendName:\"webgl\",kernelFunc:rZ};var oZ=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${S.SELU_SCALEALPHA};\n float scale = ${S.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,nZ=ge({opSnippet:oZ}),DF={kernelName:Xi,backendName:\"webgl\",kernelFunc:nZ};var sZ=_o+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,aZ=`\n vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,iZ=ge({opSnippet:sZ,packedOpSnippet:aZ,cpuKernelImpl:c$}),OF={kernelName:Un,backendName:\"webgl\",kernelFunc:iZ};var uZ=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,pZ=ge({opSnippet:uZ}),PF={kernelName:Yi,backendName:\"webgl\",kernelFunc:pZ};var cZ=_o+`\n return sin(x);\n`,lZ=ge({opSnippet:cZ}),MF={kernelName:Wn,backendName:\"webgl\",kernelFunc:lZ};var mZ=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,dZ=ge({opSnippet:mZ}),LF={kernelName:Sa,backendName:\"webgl\",kernelFunc:dZ};var fZ=`\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n`,hZ=ge({opSnippet:fZ}),BF={kernelName:Qi,backendName:\"webgl\",kernelFunc:hZ};var gZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},VF={kernelName:Es,backendName:\"webgl\",kernelFunc:gZ};function xZ(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:\n ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw:\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw:\n ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw:\n ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,d,f,h]=m$(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],\"bool\",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var zF={kernelName:ui,backendName:\"webgl\",kernelFunc:xZ};function yZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=d$(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var WF={kernelName:wa,backendName:\"webgl\",kernelFunc:yZ};function bZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=jf(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var UF={kernelName:pi,backendName:\"webgl\",kernelFunc:bZ};function CZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=jf(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var GF={kernelName:ci,backendName:\"webgl\",kernelFunc:CZ};function SZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=S.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let x=t.bufferSync(n),b=t.bufferSync(s),C=y.decodeString(t.readSync(a.dataId)[0]),w=p$(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,w.dtype,w.values)}let f=new Cc(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var HF={kernelName:li,backendName:\"webgl\",kernelFunc:SZ};function wZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=cs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var qF={kernelName:$s,backendName:\"webgl\",kernelFunc:wZ};var KF=\"return sqrt(x);\",IZ=ge({opSnippet:KF,packedOpSnippet:KF,cpuKernelImpl:f$}),jF={kernelName:Gn,backendName:\"webgl\",kernelFunc:IZ};var vZ=\"return x * x;\",kZ=ge({opSnippet:vZ}),XF={kernelName:mi,backendName:\"webgl\",kernelFunc:kZ};var YF=\"return (a - b) * (a - b);\",NZ=tt({opSnippet:YF,packedOpSnippet:YF}),QF={kernelName:Kn,backendName:\"webgl\",kernelFunc:NZ};function TZ({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Bt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new Jt(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var ZF={kernelName:Ds,backendName:\"webgl\",kernelFunc:TZ};var mg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=_e(o.length),a=_e(o.length),i=\"\";if(n===1)i=\"coords * strides + begin\";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(\",\")}this.userCode=`\n ${s} begin = ${s}(${e});\n ${s} strides = ${s}(${t});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function _Z(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let $=ut.computeOutShape(b,C,w),A=cs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:A},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(A)}else if(t.shouldExecuteOnCPU([n])){let A=t.readSync(n.dataId),R=le(n.shape,n.dtype,A),D=h$(d,R,w,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let A=new mg(b,w,d);k=t.runWebGLProgram(A,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var JF={kernelName:jn,backendName:\"webgl\",kernelFunc:_Z};function EZ(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=g$(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var eD={kernelName:As,backendName:\"webgl\",kernelFunc:EZ};function $Z(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=x$(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var tD={kernelName:di,backendName:\"webgl\",kernelFunc:$Z};function AZ(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.readSync(s.dataId),i=y$(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var rD={kernelName:fi,backendName:\"webgl\",kernelFunc:AZ};var RZ=\"return tan(x);\",FZ=ge({opSnippet:RZ}),oD={kernelName:Yn,backendName:\"webgl\",kernelFunc:FZ};var DZ=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,OZ=ge({opSnippet:DZ}),nD={kernelName:Qn,backendName:\"webgl\",kernelFunc:OZ};var dg=class{constructor(e,t){this.variableNames=[\"A\"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=le(n.shape,n.dtype,u),l=C$(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new dg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var sD={kernelName:to,backendName:\"webgl\",kernelFunc:Vw};var fg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"negativeInf\",type:\"float\"},{name:\"dir\",type:\"int\"},{name:\"inc\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced above,\n // Figure5(a) shows that element[1] is in the\n // second half of the group when group size is 2, but it is in the\n // first half of the group when group size is 4.\n\n bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n // Denotes which direction indices are in (ascending or descending).\n bool reverse = imod(elemIdx, 2 * dir) >= dir;\n bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) { // Elements in opposite order of direction\n int iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutput(float(i0));\n } else {\n setOutput(float(i1));\n }\n }\n `}},hg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),\n // we only need to output the indices at positions |, the indices at\n // positions _ can be thrown away, see Figure5(b) After Phase 2\n // (Merge phase) in the Bitonic Top K paper referenced above.\n // For example, the paper shows we only need to output the orange bars.\n // The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back\n // to the previous sequence to find the corresponding value,\n // we need to double the index. When we double the index,\n // we basically interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n // of each 2k positions by - elemIdx % k. E.g. for output at\n // index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n float x0 = getX(batch, i0);\n float x1 = i1 < n ? getX(batch, i1) : x0;\n\n setOutput(x0 >= x1 ? float(i0) : float(i1));\n }\n `}};function Bu(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function aD(r){let e=1;for(;ep){let D=t.readSync(n.dataId),[P,M]=S$(D,u,n.dtype,s,a);return[t.makeTensorInfo(P.shape,P.dtype,P.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,\"int32\",[])];if(c===1)return[n,Ga({attrs:{shape:u,dtype:\"int32\",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:t});m&&Bu(t,d);let x=aD(s),b=aD(c),C=null,w=()=>C===null?[g,g]:[g,C],k=(D,P,M)=>{let L=w(),W=new fg(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[D],[P]],q=C;C=t.runWebGLProgram(W,L,\"int32\",U),Bu(t,q)};for(let D=1;D=1;M/=2)k(P,M,[h,b])}for(let D=b;D>x;D/=2){let P=w(),M=new hg([h,D/2]),W=[[c],[C===null?1:0],[x]],V=C;C=t.runWebGLProgram(M,P,\"int32\",W),Bu(t,V);let U=x/2,q=U*2;for(let H=U;H>=1;H/=2)k(q,H,C.shape)}let _=C;C=cs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),Bu(t,_);let $=Fw({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});Bu(t,g);let A=u.slice(0,-1);A.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:A},backend:t}),Bu(t,_);let R=$;return $=te({inputs:{x:$},attrs:{shape:A},backend:t}),Bu(t,R),[$,C]}var iD={kernelName:Zn,backendName:\"webgl\",kernelFunc:MZ};var gg=class{constructor(e,t,o,n,s,a){this.variableNames=[\"Image\",\"Transforms\"],this.outputShape=a;let i=o===\"nearest\"?1:2,p;switch(n){case\"constant\":p=1;break;case\"reflect\":p=2;break;case\"wrap\":p=3;break;case\"nearest\":p=4;break;default:p=1;break}this.userCode=`\n float mapCoord(float outCoord, float len) {\n float inCoord = outCoord;\n if(${p} == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n inCoord -= sz2 * float(int(float(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord -= len * float(int(float(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n } else {\n return outCoord;\n }\n }\n\n float readWithFillValue(int batch, int coordY, int coordX,\n int channel) {\n float outputValue;\n if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = float(${s});\n }\n return outputValue;\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n float outputValue;\n int batch = coords[0];\n int x = coords[2];\n int y = coords[1];\n int channel = coords[3];\n float xf = float(x);\n float yf = float(y);\n float a1 = getTransforms(batch, 0);\n float a2 = getTransforms(batch, 1);\n float a3 = getTransforms(batch, 2);\n float b1 = getTransforms(batch, 3);\n float b2 = getTransforms(batch, 4);\n float b3 = getTransforms(batch, 5);\n float c1 = getTransforms(batch, 6);\n float c2 = getTransforms(batch, 7);\n float projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = float(${s});\n } else {\n float inX = (a1 * xf + a2 * yf + a3) / projection;\n float inY = (b1 * xf + b2 * yf + b3) / projection;\n float mapX = mapCoord(inX, float(${t}));\n float mapY = mapCoord(inY, float(${e}));\n\n if (${i} == 1) {\n int coordY = int(round(mapY));\n int coordX = int(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n float yFloor = floor(mapY);\n float xFloor = floor(mapX);\n float yCeil = yFloor + 1.0;\n float xCeil = xFloor + 1.0;\n float valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n float valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutput(outputValue);\n }\n `}};function LZ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new gg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],\"float32\")}var uD={kernelName:Jn,backendName:\"webgl\",kernelFunc:LZ};function BZ(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;is(s,\"unique\"),console.warn(\"WARNING: \",\"UI might be locked temporarily as data is being downloaded\");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=w$(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var pD={kernelName:kp,backendName:\"webgl\",kernelFunc:BZ};function VZ(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var cD={kernelName:Rs,backendName:\"webgl\",kernelFunc:VZ};var xg=class{constructor(e,t){this.variableNames=[\"x\",\"segmentIds\"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p=\"0.0\",u=\"sumValue\",c=Math.floor(o/4)*4,l=o%4,m=`\n sumValue += dot(values, segFilter);\n `,d=\"\";s%o>0&&(d=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `);let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return -1.0;\n }\n `),this.userCode=`\n const float initializationValue = ${p};\n\n float getValue(int batch, int inIdx) {\n ${d}\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n ${f}\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n ${a})) * float(${o}));\n int currentSeg = int(mod(float(outIdx), float(${a})));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function zZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=S.getAxesPermutation([u],i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=S.getInnerMostAxes(1,i)[0]);let m=S.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=te({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=ka(n.dtype),g=(w,k,_,$,A)=>{let R=w.shape[0],D=w.shape[1],P=S.segment_util.segOpComputeOptimalWindowSize(D,A),M={windowSize:P,inSize:D,batchSize:R,numSegments:A},L=new xg(M,k),W=t.compileAndRun(L,[w,_],$);if(p.push(W),W.shape[1]===A)return W;let V=Bw({backend:t,attrs:{start:0,stop:A,step:1,dtype:\"float32\"}}),U=Vw({inputs:{x:V},backend:t,attrs:{reps:[D/P]}});return p.push(V),p.push(U),g(W,k,U,$,A)},x=g(f,\"unsortedSegmentSum\",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let w=S.getUndoAxesPermutation(c);C=xt({inputs:{x:C},backend:t,attrs:{perm:w}})}return p.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}var lD={kernelName:Np,backendName:\"webgl\",kernelFunc:zZ};var WZ=[Y$,Z$,J$,eA,rA,oA,nA,sA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,CA,wA,IA,vA,_A,$A,AA,V$,FA,OA,PA,MA,LA,BA,VA,zA,WA,UA,GA,KA,jA,XA,YA,QA,ZA,JA,eR,tR,rR,oR,nR,sR,aR,iR,uR,cR,lR,mR,dR,hR,gR,xR,yR,bR,CR,SR,wR,IR,B$,vR,DA,kR,NR,TR,z$,_R,ER,$R,AR,RR,FR,DR,OR,PR,MR,BR,VR,zR,WR,UR,GR,qR,jR,XR,YR,QR,ZR,oF,G$,nF,sF,aF,iF,kA,uF,lF,mF,dF,fF,W$,hF,gF,xF,yF,bF,NA,JR,CF,SF,wF,q$,IF,vF,kF,NF,TF,_F,EF,$F,AF,RF,FF,DF,OF,PF,MF,LF,SA,rF,BF,VF,zF,WF,UF,GF,HF,qF,jF,XF,QF,ZF,JF,eD,tD,rD,tF,j$,oD,nD,sD,iD,uD,X$,pD,cD,lD,pF];for(let r of WZ)Ia(r);var Fe;(function(r){r[r.float32=0]=\"float32\",r[r.int32=1]=\"int32\",r[r.bool=2]=\"bool\",r[r.string=3]=\"string\",r[r.complex64=4]=\"complex64\"})(Fe||(Fe={}));var Wi;(function(r){r[r.linear=0]=\"linear\",r[r.relu=1]=\"relu\",r[r.relu6=2]=\"relu6\",r[r.prelu=3]=\"prelu\",r[r.leakyrelu=4]=\"leakyrelu\",r[r.sigmoid=5]=\"sigmoid\",r[r.elu=6]=\"elu\"})(Wi||(Wi={}));var mD;function UZ(r){mD=r.wasm.cwrap(fo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function GZ(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"_FusedMatMul for non non-float32 tensors not yet supported.\");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let A=t.dataIdMap.get(a.dataId);if(A.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${A.shape.length}.`);f=A.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=Wi[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),w=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return mD(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),w}var dD={kernelName:fo,backendName:\"wasm\",setupFunc:UZ,kernelFunc:GZ};function Ve(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,[\"number\",\"number\",\"number\"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,Fe[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var fD=Ve(gs);function rt(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,d=t!=null?t:u.dtype,f=S.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return(()=>o(l,g,u.shape.length,m,x,c.shape.length,Fe[u.dtype],b))(),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var HZ=!0,hD=rt(eo,HZ);var gD;function qZ(r){gD=r.wasm.cwrap(Mo,null,[\"array\",\"number\",\"number\",\"number\"])}function KZ(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return gD(s,n.length,Fe[o.dtype],a),o}var xD={kernelName:Mo,backendName:\"wasm\",setupFunc:qZ,kernelFunc:KZ};function Vu(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return nr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var yD={kernelName:mo,backendName:\"wasm\",kernelFunc:Vu};var bD;function jZ(r){bD=r.wasm.cwrap(ro,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function uo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=YZ(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var CD={kernelName:ro,backendName:\"wasm\",kernelFunc:uo,setupFunc:jZ};function kr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=S.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var ED={kernelName:Ns,backendName:\"wasm\",kernelFunc:Mt};var $D;function s9(r){$D=r.wasm.cwrap(Wo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function a9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"BatchMatMul for non non-float32 tensors not yet supported.\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=Mt({inputs:{x:n},backend:t,attrs:{shape:w}}),$=Mt({inputs:{x:s},backend:t,attrs:{shape:k}}),A=t.dataIdMap.get(_.dataId).id,R=t.dataIdMap.get($.dataId).id,D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,D,P],_.dtype),W=t.dataIdMap.get(L.dataId).id,V=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return $D(A,V,_.shape.length,R,U,$.shape.length,a,i,W),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var AD={kernelName:Wo,backendName:\"wasm\",setupFunc:s9,kernelFunc:a9};function Eo(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=ut.parseSliceParams(e,t,o),i=ut.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=y.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=ut.computeFlatOffset(s,c);return e.dtype===\"string\"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype===\"string\"){let f=vu(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)i9(p,c[0],m,s,a);else if(d===3)u9(p,c[0],c[1],m,s,a);else if(d===4)p9(p,c[0],c[1],c[2],m,s,a);else{let f=vu(p,s,a,e.shape,e.dtype);m.set(f)}return u}function i9(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=Mt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=uo({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Mt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Eo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(d.dataId),g}var FD={kernelName:xs,backendName:\"wasm\",kernelFunc:c9};function ls(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var DD={kernelName:co,backendName:\"wasm\",kernelFunc:ls};var OD=Ve(Uo);var PD;function l9(r){PD=r.wasm.cwrap(lo,null,[\"number\",\"number\",\"number\",\"number\"])}function m9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return PD(i,s,a,u),p}var MD={kernelName:lo,backendName:\"wasm\",setupFunc:l9,kernelFunc:m9};function zw(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);S.assertParamsConsistent(n,o);let s=S.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Vu({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype===\"string\"){let d=a.map(C=>{let k=[-1,y.sizeFromShape(C.shape.slice(o))];return Mt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=S.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=Su(f,s,e[0].dtype,h),x=S.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=S.fromStringArrayToUint8(g),d.forEach(C=>t.disposeData(C.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),l=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=S.getAxesPermutation([s],p),c=n;u!==null&&(c=uo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=S.getInnerMostAxes(1,p)[0];S.assertAxesAreInnerMostDims(\"cumprod\",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;KD(f,a?1:0,i?1:0,d,h,Fe[n.dtype]);let g=m;if(u!==null){let x=S.getUndoAxesPermutation(u);g=uo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var jD={kernelName:jo,backendName:\"wasm\",setupFunc:b9,kernelFunc:C9};var XD;function S9(r){XD=r.wasm.cwrap(Xo,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function w9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype===\"float32\"||n.dtype===\"int32\",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=S.getAxesPermutation([s],p),c=n;u!==null&&(c=uo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=S.getInnerMostAxes(1,p)[0];S.assertAxesAreInnerMostDims(\"cumsum\",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;XD(f,a?1:0,i?1:0,d,h,Fe[n.dtype]);let g=m;if(u!==null){let x=S.getUndoAxesPermutation(u);g=uo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var YD={kernelName:Xo,backendName:\"wasm\",setupFunc:S9,kernelFunc:w9};var QD;function I9(r){QD=r.wasm.cwrap(Qo,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function v9(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=e.makeOutput(f,\"float32\"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(f).buffer),w=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return QD(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,w,f.length,k),h}var ZD={kernelName:Qo,backendName:\"wasm\",setupFunc:I9,kernelFunc:v9};var JD;function k9(r){JD=r.wasm.cwrap(Zo,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function N9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,d=S.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,C=d.padInfo.left,w=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,A=d.inChannels,R=d.outChannels,D=d.padInfo.type===\"SAME\"?1:0;if(d.dataFormat!==\"channelsLast\")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let P=o.makeOutput(d.outShape,\"float32\"),M=o.dataIdMap.get(P.dataId).id;return JD(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,D,w,k,_,$,A,R,M),P}var eO={kernelName:Zo,backendName:\"wasm\",setupFunc:k9,kernelFunc:N9};var tO=Ve(en);var T9=!1,rO=rt(tn,T9,\"bool\");var oO=Ve(rn,\"float32\");function yg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Mt({inputs:{x:n},backend:o,attrs:{shape:i}})}var nO={kernelName:bs,backendName:\"wasm\",kernelFunc:yg};function Uw(r){let{attrs:{shape:e,value:t,dtype:o},backend:n}=r,s=n.makeOutput(e,o);return n.typedArrayFromHeap(s).fill(t),s}var sO={kernelName:Cs,backendName:\"wasm\",kernelFunc:Uw};var aO;function _9(r){aO=r.wasm.cwrap(on,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function E9(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return aO(s,i,p,u,c,a),n}var iO={kernelName:on,backendName:\"wasm\",kernelFunc:E9,setupFunc:_9};var uO=Ve(nn);var $9=!1,pO=rt(sn,$9);var cO;function A9(r){cO=r.wasm.cwrap(an,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function R9(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return cO(c,l,m,d,f,n,g),h}var lO={kernelName:an,backendName:\"wasm\",setupFunc:A9,kernelFunc:R9};var mO;function F9(r){mO=r.wasm.cwrap(ho,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function D9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=S.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=Wi[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let Y=o.dataIdMap.get(a.dataId);if(Y.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`);if(Y.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`);w=Y.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,A=h.padInfo.right,R=h.padInfo.bottom,D=h.padInfo.left,P=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let X=o.makeOutput(h.outShape,\"float32\"),Z=o.dataIdMap.get(X.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return mO(x,q,H,j,b,k,_,w,$,A,R,D,U,P,M,L,W,V,C,g,ee,f||0,Z),X}var dO={kernelName:ho,backendName:\"wasm\",setupFunc:F9,kernelFunc:D9};var fO;function O9(r){fO=r.wasm.cwrap(go,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function P9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=S.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=Wi[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let Y=o.dataIdMap.get(a.dataId);if(Y.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`);if(Y.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`);w=Y.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,A=h.padInfo.right,R=h.padInfo.bottom,D=h.padInfo.left,P=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let X=o.makeOutput(h.outShape,\"float32\"),Z=o.dataIdMap.get(X.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return fO(x,q,H,j,b,k,_,w,$,A,R,D,U,P,M,L,W,V,C,g,ee,f||0,Z),X}var hO={kernelName:go,backendName:\"wasm\",setupFunc:O9,kernelFunc:P9};var gO;function M9(r){gO=r.wasm.cwrap(un,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function L9(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=Ym.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return gO(d,Fe[o.dtype],h,a,l,i,g,x),u}var xO={kernelName:un,backendName:\"wasm\",setupFunc:M9,kernelFunc:L9};var yO;function B9(r){yO=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function V9(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let R=0;R=0,()=>`GatherV2: the index value ${D} is not in [0, ${c-1}]`)}let l=S.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Mt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=Mt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,_=e.dataIdMap.get(g.dataId).id,$=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),A=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return yO(C,Fe[n.dtype],$,x,k,l.batchSize,A,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var bO={kernelName:Ss,backendName:\"wasm\",setupFunc:B9,kernelFunc:V9};var z9=!1,CO=rt(pn,z9,\"bool\");var W9=!1,SO=rt(cn,W9,\"bool\");var wO=Ve(ln,\"bool\");var IO;function U9(r){IO=r.wasm.cwrap(mn,null,[\"number\",\"number\",\"number\",\"number\"])}function G9(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,\"float32\");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;IO(n,Fe[e.dtype],t,a)}return s}var vO={kernelName:mn,backendName:\"wasm\",setupFunc:U9,kernelFunc:G9};var H9=!1,kO=rt(dn,H9,\"bool\");var q9=!1,NO=rt(fn,q9,\"bool\");var TO=Ve(hn);var K9=!1,_O=rt(gn,K9,\"bool\");var EO=Ve(xn);var j9=!1,$O=rt(xa,j9,\"bool\");var X9=!1,AO=rt(GI,X9,\"bool\");var RO;function Y9(r){RO=r.wasm.cwrap(yn,null,[\"number\",\"number\",\"number\",\"number\"])}function Q9(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;S.assertAxesAreInnerMostDims(\"max\",l,f);let[h,g]=S.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;RO(p,Fe[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FO={kernelName:yn,backendName:\"wasm\",setupFunc:Y9,kernelFunc:Q9};var Z9=!1,DO=rt(bn,Z9);var OO;function J9(r){OO=r.wasm.cwrap(Cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function eJ(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype===\"float32\",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=S.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,d=c.padInfo.top,f=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,w=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!==\"channelsLast\")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let $=o.makeOutput(c.outShape,\"float32\"),A=o.dataIdMap.get($.dataId).id;return OO(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,w,k,_,A),$}var PO={kernelName:Cn,backendName:\"wasm\",setupFunc:J9,kernelFunc:eJ};var MO;function tJ(r){MO=r.wasm.cwrap(Sn,null,[\"number, number, number\"])}function rJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let w=e.dataIdMap.get(c.dataId).id;w!==i&&(u=c,p=w,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims(\"mean\",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=ls({backend:e,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,\"float32\");if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(C.dataId).id;MO(p,x,w)}if(d&&e.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(C.shape,m);C.shape=w}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),C}var LO={kernelName:Sn,backendName:\"wasm\",setupFunc:tJ,kernelFunc:rJ};var BO;function oJ(r){BO=r.wasm.cwrap(wn,null,[\"number\",\"number\",\"number\",\"number\"])}function nJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;S.assertAxesAreInnerMostDims(\"min\",l,f);let[h,g]=S.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;BO(p,Fe[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var VO={kernelName:wn,backendName:\"wasm\",setupFunc:oJ,kernelFunc:nJ};var sJ=!1,zO=rt(In,sJ);var Gw;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Gw||(Gw={}));var WO;function aJ(r){WO=r.wasm.cwrap(vn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function iJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(f=>f[0]),l=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(c).buffer),d=new Uint8Array(new Int32Array(l).buffer);return WO(a,u,e.shape.length,Fe[e.dtype],m,d,Gw[n],p),i}var UO={kernelName:vn,backendName:\"wasm\",kernelFunc:iJ,setupFunc:aJ};var uJ=!0,GO=rt(kn,uJ);var HO=Ve(ws);function Sc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var qO;function pJ(r){qO=r.wasm.cwrap(Tn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function cJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=qO(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Sc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],\"int32\",m)}var KO={kernelName:Tn,backendName:\"wasm\",setupFunc:pJ,kernelFunc:cJ};var jO;function lJ(r){jO=r.wasm.cwrap(ba,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function mJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=jO(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Sc(e,m);e.wasm._free(h);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([],\"int32\",g);return[x,b]}var XO={kernelName:ba,backendName:\"wasm\",setupFunc:lJ,kernelFunc:mJ};var YO;function dJ(r){YO=r.wasm.cwrap(_n,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function fJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=YO(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Sc(e,m);e.wasm._free(g);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([f],\"float32\",h);return[x,b]}var QO={kernelName:_n,backendName:\"wasm\",setupFunc:dJ,kernelFunc:fJ};var hJ=!1,ZO=rt(Nn,hJ,\"bool\");var JO;function gJ(r){JO=r.wasm.cwrap(En,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function xJ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return JO(m,a,i,p,c),u}var eP={kernelName:En,backendName:\"wasm\",setupFunc:gJ,kernelFunc:xJ};function yJ(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var tP={kernelName:Is,backendName:\"wasm\",kernelFunc:yJ};function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return yg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=yg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=zw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var rP={kernelName:vs,backendName:\"wasm\",kernelFunc:bJ};var oP;function CJ(r){oP=r.wasm.cwrap($n,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function SJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Uw({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(l).buffer),f=new Uint8Array(new Int32Array(m).buffer);return oP(a,c,e.shape.length,Fe[e.dtype],d,f,n,u),i}var bg={kernelName:$n,backendName:\"wasm\",kernelFunc:SJ,setupFunc:CJ};var wJ=!1,nP=rt(An,wJ);var sP;function IJ(r){sP=r.wasm.cwrap(Rn,null,[\"number\",\"number\",\"number\"])}function vJ(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=ls({backend:t,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,\"float32\"),l=t.dataIdMap.get(c.dataId).id;return sP(i,a,l),p.dtype!==\"float32\"&&t.disposeData(u.dataId),c}var aP={kernelName:Rn,backendName:\"wasm\",setupFunc:IJ,kernelFunc:vJ};var iP;function kJ(r){iP=r.wasm.cwrap(Fn,null,[\"number\",\"number\",\"number\",\"number\"])}function NJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims(\"prod\",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;iP(p,x,Fe[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var uP={kernelName:Fn,backendName:\"wasm\",setupFunc:kJ,kernelFunc:NJ};var TJ=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Iu(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},pP={kernelName:ks,backendName:\"wasm\",kernelFunc:TJ};var _J=!0,cP=rt(Jo,_J);var lP=Ve(Dn);var mP=Ve(On);var dP=Ve(Ln);var fP;function EJ(r){fP=r.wasm.cwrap(Mn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $J(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=ls({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return fP(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var hP={kernelName:Mn,backendName:\"wasm\",setupFunc:EJ,kernelFunc:$J};var gP;function AJ(r){gP=r.wasm.cwrap(Pn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function RJ(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!==\"float32\"&&(x=ls({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return gP(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var xP={kernelName:Pn,backendName:\"wasm\",setupFunc:AJ,kernelFunc:RJ};var yP;function FJ(r){yP=r.wasm.cwrap(Bn,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function DJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Vu({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);yP(p,c,a.length,l,n.shape.length,u);let m=Mt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var bP={kernelName:Bn,backendName:\"wasm\",kernelFunc:DJ,setupFunc:FJ};var CP;function OJ(r){CP=r.wasm.cwrap(es,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function PJ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,d,f]=n.shape,[h,g]=S.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a==\"number\"?[a,a,a,x?0:b]:[...a,b],w=new Uint8Array(new Int32Array(C).buffer);return CP(u,l,m,d,f,s,h,g,w,C.length,c),p}var SP={kernelName:es,backendName:\"wasm\",kernelFunc:PJ,setupFunc:OJ};var wP=Ve(Ca);var IP=Ve(Vn);var vP;function MJ(r){vP=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function LJ(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=rl.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return vP(f,g,Fe[s.dtype],p,u,c,x,m,b),i}var kP={kernelName:zn,backendName:\"wasm\",setupFunc:MJ,kernelFunc:LJ};var NP;function BJ(r){NP=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function VJ(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,d=l===0||l>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return NP(a,i,p,d,c),u}var TP={kernelName:Ts,backendName:\"wasm\",kernelFunc:VJ,setupFunc:BJ};var _P;function zJ(r){_P=r.wasm.cwrap(Un,null,[\"number\",\"number\"])}function WJ(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||_P(o,s),n}var EP={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:zJ,kernelFunc:WJ};var $P=Ve(Wn);var AP;function UJ(r){AP=r.wasm.cwrap(qn,null,[\"number\",\"number\",\"number\",\"number\"])}function GJ(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||AP(n,a,i,p),s}var RP={kernelName:qn,backendName:\"wasm\",setupFunc:UJ,kernelFunc:GJ};function HJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_0?p+1:0;if(c<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],\"int32\"),b=t.dataIdMap.get(x.dataId).id;LP(m,Fe[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),w;switch(C[0]){case 0:{w=S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{w=S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:w=S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:w=S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:w=\"\"}if(t.disposeData(x.dataId),w)throw t.disposeData(h.dataId),new Error(w);return h}function YJ(r){return Sg(r,!0)}var BP={kernelName:pi,backendName:\"wasm\",setupFunc:Cg,kernelFunc:YJ};function QJ(r){return Sg(r,!1)}var VP={kernelName:ci,backendName:\"wasm\",setupFunc:Cg,kernelFunc:QJ};function ZJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=Eo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var zP={kernelName:$s,backendName:\"wasm\",kernelFunc:ZJ};var WP=Ve(Gn);var UP=Ve(mi);var JJ=!0,GP=rt(Kn,JJ);var HP;function eee(r){HP=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"number\",\"number\"])}function tee(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return HP(a,n,Fe[s.dtype],p),i}var qP={kernelName:Ds,backendName:\"wasm\",setupFunc:eee,kernelFunc:tee};var KP;function ree(r){KP=r.wasm.cwrap(jn,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function oee(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Mt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=Eo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Mt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,\"float32\"),$=e.dataIdMap.get(n.dataId).id,A=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),R=new Uint8Array(new Int32Array(b).buffer),D=new Uint8Array(new Int32Array(C).buffer),P=new Uint8Array(new Int32Array(w).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),W=e.dataIdMap.get(_.dataId).id;KP($,A,n.shape.length,R,D,P,M,L,d.length,W),k=Mt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var jP={kernelName:jn,backendName:\"wasm\",setupFunc:ree,kernelFunc:oee};function nee(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=ku(m,d,a,i,p,u,c,l),g=e.makeOutput([f.length],\"string\"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,\"int32\");return e.typedArrayFromHeap(b).set(h),[g,b]}var XP={kernelName:As,backendName:\"wasm\",kernelFunc:nee};function see(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=Nu(i,p[0],a),m=c.length,d=e.makeOutput([m,2],\"int32\");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],\"string\"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let x=e.makeOutput([2],\"int32\");return e.typedArrayFromHeap(x).set(l),[d,h,x]}var YP={kernelName:di,backendName:\"wasm\",kernelFunc:see};function aee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=Tu(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var QP={kernelName:fi,backendName:\"wasm\",kernelFunc:aee};var iee=!0,ZP=rt(Xn,iee);var JP;function uee(r){JP=r.wasm.cwrap(Hn,null,[\"number\",\"number\",\"number\",\"number\"])}function pee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims(\"sum\",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;JP(p,x,Fe[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var e3={kernelName:Hn,backendName:\"wasm\",setupFunc:uee,kernelFunc:pee};var t3=Ve(Yn);var r3=Ve(Qn);var o3;function cee(r){o3=r.wasm.cwrap(to,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,\"int32\"),m=e.dataIdMap.get(l.dataId).id;return s3(a,i,o.shape.length,Fe[o.dtype],n,s,c,m),[u,l]},a3={kernelName:Zn,backendName:\"wasm\",setupFunc:mee,kernelFunc:dee};var i3;function fee(r){i3=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function hee(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),w=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,A=e.dataIdMap.get(s.dataId).id,R=a===\"nearest\"?1:2,D;switch(i){case\"constant\":D=1;break;case\"reflect\":D=2;break;case\"wrap\":D=3;break;case\"nearest\":D=4;break;default:D=1;break}return i3(_,A,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,R,D,p,w),C}var u3={kernelName:Jn,backendName:\"wasm\",setupFunc:fee,kernelFunc:hee};function gee(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var p3={kernelName:Rs,backendName:\"wasm\",kernelFunc:gee};function xee(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var c3={kernelName:Fs,backendName:\"wasm\",kernelFunc:xee};var yee=[dD,fD,hD,xD,wD,vD,ND,_D,AD,FD,DD,OD,MD,LD,VD,WD,UD,GD,qD,jD,YD,ZD,eO,tO,rO,oO,nO,sO,iO,uO,pO,lO,dO,hO,xO,bO,CO,SO,yD,wO,vO,kO,NO,TO,_O,EO,$O,AO,FO,DO,PO,LO,VO,zO,UO,GO,HO,KO,XO,QO,ZO,eP,tP,rP,bg,nP,aP,uP,pP,cP,lP,mP,dP,ED,hP,xP,bP,SP,wP,IP,kP,TP,EP,$P,RD,RP,FP,OP,MP,BP,VP,zP,WP,UP,GP,qP,jP,XP,YP,QP,ZP,e3,t3,r3,n3,a3,u3,CD,p3,c3];for(let r of yee)Ia(r);var Hw=O();Hw.registerFlag(\"WASM_HAS_SIMD_SUPPORT\",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(r){return!1}});Hw.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(Hw.get(\"IS_NODE\"))return!1;try{return 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(r){return!1}});var Zw=rp(f3()),C3=rp(g3()),Jw=rp(x3());var y3=Zw.default||Zw,bee=Jw.default||Jw,Pl=class extends Zr{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(w3),Qw=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Do(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p);this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s===\"string\")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return See(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o){let n;if(o==null)n=this.write(null,e,t);else{let s=this.dataIdNextNumber++;n={id:s},this.dataIdMap.set(n,{id:s,memoryOffset:o,shape:e,dtype:t,refCount:1});let a=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,o)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case\"float32\":return new Float32Array(n,s,a);case\"int32\":return new Int32Array(n,s,a);case\"bool\":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function Cee(r){return(e,t)=>(y.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function b3(r,e,t){if(vg!=null)return vg;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),Dl!=null&&Dl[o]!=null?Dl[o]:t+o}async function S3(){let[r,e]=await Promise.all([O().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),O().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=C3.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?b3(r,e,Fl!=null?Fl:p):p+i},eI&&(n.instantiateWasm=Cee(b3(r,e,Fl!=null?Fl:\"\")));let s=!1;n.onAbort=()=>{if(s||Ol)return;Ol=!0,o({message:\"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers\"})};let a;e&&r&&vg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+y3.toString()],{type:\"text/javascript\"}),a=y3(n)):a=bee(n),a.then(i=>{s=!0,Ol=!1;let p=null;i.tfjs={init:i.cwrap(\"init\",null,[]),initWithThreadsCount:i.cwrap(\"init_with_threads_count\",null,[\"number\"]),getThreadsCount:i.cwrap(\"get_threads_count\",\"number\",[]),registerTensor:i.cwrap(\"register_tensor\",null,[\"number\",\"number\",\"number\"]),disposeData:i.cwrap(\"dispose_data\",p,[\"number\"]),dispose:i.cwrap(\"dispose\",p,[])},t({wasm:i})}).catch(o)})}function See(r,e){switch(e){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var wee=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],vg=null,Fl=null,Dl={},Ol=!1,eI=!1;function Iee(r,e=!1){if(eC(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),Ol)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");vg=r,eI=e}function vee(r,e=!1){if(Ol)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`\");if(typeof r==\"string\")Fl=r;else{Dl=r;let t=wee.filter(o=>Dl[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.join(\",\")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}eI=e}var w3=-1,Qw=-1;function kee(r){w3=r}function Nee(){if(Qw===-1)throw new Error(\"WASM backend not initialized.\");return Qw}var Tee=\"4.1.0\";var _ee=2;Ci(\"wasm\",async()=>{let{wasm:r}=await S3();return new Pl(r)},_ee);var ms=O();ms.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);ms.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);ms.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);ms.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!1);ms.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);ms.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);ms.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);ms.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);ms.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);ms.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>0);ms.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);var kg=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith(\"gen\"))return Number(this.architecture.match(/\\d+/));if(this.architecture.startsWith(\"xe\"))return 12}return 0}isIntel(){return this.vendor===\"intel\"}};var Ng=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,o=!1){let n=I3(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let a=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(a),a}this.numBytesAllocated+=e;let s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o});return this.usedBuffers.get(n).push(s),s}releaseBuffer(e,t,o){if(this.freeBuffers.size===0)return;let n=I3(t,o);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let s=this.usedBuffers.get(n),a=s.indexOf(e);if(a<0)throw new Error(\"Cannot release a buffer that was never provided by this buffer manager\");s.splice(a,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,o){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,o)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function I3(r,e){return`${r}_${e}`}var Tg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=k3(o),a=e*t*s,i=v3(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e,t,o,n,s){if(this.freeTextures.size===0)return;let a=v3(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=k3(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function v3(r,e,t,o){return`${r}_${e}_${t}_${o}`}function k3(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function N3(r,e){if(Math.max(...r)>3)throw new Error(\"Cannot symbolically compute strides for rank > 4 tensor.\");let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}var A3=(r,e,t,o)=>{let n={dtype:o.dtype,shape:o.shape},s=$ee(t,n,e),a=r.createShaderModule({code:s,label:e.constructor.name});return r.createComputePipeline({compute:{module:a,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})};function Rt(r){if(r<=1)return\"i32\";if(r===2)return\"vec2\";if(r===3)return\"vec3\";if(r===4)return\"vec4\";if(r===5)return\"vec5\";if(r===6)return\"vec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function $o(r){if(r===0)return\"x\";if(r===1)return\"y\";if(r===2)return\"z\";if(r===3)return\"w\";if(r===4)return\"u\";if(r===5)return\"v\";throw Error(`Index ${r} is not yet supported`)}function se(...r){let e;switch(r.length){case 0:e=`\n fn main()\n `;break;case 1:e=`\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return e}function T3(r){let e;return e=`\n ${Eee()}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(workgroup_id) WorkgroupId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n localIndex = LocalIndex;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n workgroupId = WorkgroupId;\n ${r?\"main(getGlobalIndex());\":\"main();\"};\n }\n `,e}function Eee(){return`\n @compute @workgroup_size(workgroupSizeX, workgroupSizeY, workgroupSizeZ)\n`}function $ee(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(o.push(`\n const workgroupSizeX = ${t.workgroupSize[0]}u;\n const workgroupSizeY = ${t.workgroupSize[1]}u;\n const workgroupSizeZ = ${t.workgroupSize[2]}u;\n\n var localId: vec3;\n var localIndex: u32;\n var globalId: vec3;\n var numWorkgroups: vec3;\n var workgroupId: vec3;\n\n // Only used when the y/z dimension of workgroup size is 1.\n fn getGlobalIndex() -> i32 {\n ${F3(t)?\" return i32(globalId.x);\":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y +\n workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n} +\n localIndex);\n `}\n }\n `),t.isFromPixels){o.push(`\n struct Uniform {\n size : i32,\n numChannels : i32,\n outShapeStrides : vec2,\n };\n\n @group(0) @binding(0) var result: array<${wc(e.dtype,t.isVec4)}>;\n @group(0) @binding(2) var uniforms: Uniform;\n `);let f=$3(t);return[_3,o.join(`\n`),E3(e.shape),t.getUserCode(),T3(f)].join(`\n`)}let s=\"struct Uniforms { NAN : f32, INFINITY : f32, \";t.variableNames.forEach((f,h)=>{let g=Rt(r[h].shape.length);s+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `});let a=Rt(e.shape.length);s+=`outShape : ${a}, `;let i=e.shape.length-1,p=Rt(i);s+=`\n outShapeStrides: ${p}, `,t.size&&(s+=\"size : i32, \"),t.uniforms&&(s+=t.uniforms),s+=\"};\",s=Lee(s),o.push(s),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${wc(e.dtype,t.isVec4)}>;\n `),t.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${t.variableTypes?t.variableTypes[h]:wc(r[h].dtype,t.isVec4)}>;\n `)}),s!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let u=Oee(e.shape,t.dispatchLayout),c=[_3+Aee,o.join(`\n`),E3(e.shape),u,Pee(e.shape.length)];t.atomic||c.push(Mee(e.shape,e.dtype,t.isVec4));let l=r.map((f,h)=>Dee(f,e.shape,t.variableTypes?t.variableTypes[h]===\"vec4\":t.isVec4,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);c.push(l),c.push(t.getUserCode());let m=$3(t);return c.push(T3(m)),c.join(`\n`)}function R3(r,e,t,o){let n=r.shaderKey;if(r.isFromPixels)return n;let s=t.map(c=>c.dtype).concat(o.dtype),a=t.map(c=>S.getBroadcastDims(c.shape,o.shape)),i=t.map(c=>y.arraysEqual(c.shape,o.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=F3(r)?\"flatDispatch\":\"\";return n+=\"_\"+(r.workgroupSize?r.workgroupSize.join(\",\"):\"\")+e.map(c=>c.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,n}var _3=`\n struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32};\n struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32};\n\n // Checks whether coordinates lie within the bounds of the shape.\n fn coordsInBounds2D(coord : vec2, shape : vec2) -> bool {\n return all(coord >= vec2(0)) && all(coord < shape);\n }\n fn coordsInBounds3D(coord : vec3, shape : vec3) -> bool {\n return all(coord >= vec3(0)) && all(coord < shape);\n }\n fn coordsInBounds4D(coord : vec4, shape : vec4) -> bool {\n return all(coord >= vec4(0)) && all(coord < shape);\n }\n\n fn getIndexFromCoords1D(coord : i32, shape : i32) -> i32 {\n return coord;\n }\n fn getIndexFromCoords2D(coords : vec2, shape : vec2) -> i32 {\n return dot(coords, vec2(shape.y, 1));\n }\n fn getIndexFromCoords3D(coords : vec3, shape : vec3) -> i32 {\n return dot(coords, vec3(shape.y * shape.z, shape.z, 1));\n }\n fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\n return dot(coords, vec4(\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\n }\n fn getIndexFromCoords5D(coords : vec5, shape : vec5) -> i32 {\n let shapeStrides: vec5 = vec5(shape.y * shape.z * shape.w * shape.u, shape.z * shape.w * shape.u, shape.w * shape.u, shape.u, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u;\n }\n fn getIndexFromCoords6D(coords : vec6, shape : vec6) -> i32 {\n let shapeStrides: vec6 = vec6(shape.y * shape.z * shape.w * shape.u * shape.v, shape.z * shape.w * shape.u * shape.v, shape.w * shape.u * shape.v, shape.u * shape.v, shape.v, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u + coords.v*shapeStrides.v;\n }\n\n fn idiv(a: i32, b: i32, sign: f32) -> i32 {\n var res: i32 = a / b;\n let modulo: i32 = a % b;\n if (sign < 0. && modulo != 0) {\n res = res - 1;\n }\n return res;\n }\n\n // NaN defination in IEEE 754-1985 is :\n // - sign = either 0 or 1.\n // - biased exponent = all 1 bits.\n // - fraction = anything except all 0 bits (since all 0 bits represents infinity).\n // https://en.wikipedia.org/wiki/IEEE_754-1985#Representation_of_non-numbers\n fn isnan(val: f32) -> bool {\n let floatToUint: u32 = bitcast(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n fn isnanVec4(val : vec4) -> vec4 {\n return vec4(isnan(val[0]), isnan(val[1]), isnan(val[2]), isnan(val[3]));\n }\n`,Aee=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function E3(r){let e=r.length;if(e<=1)return\"fn getCoordsFromIndex(index : i32) -> i32 { return index; }\";let t=y.computeStrides(r),o=Rt(e),n=[];for(let a=0;a vec2 {\n let d0 = index / uniforms.outShapeStrides; let d1 = index - d0 * uniforms.outShapeStrides;\n return vec2(d0, d1);\n }`;let s;return s=\"var index2 = index;\"+t.map((a,i)=>{let p=`let ${n[i]} = index2 / uniforms.outShapeStrides.${$o(i)}`,u=i===t.length-1?`let ${n[i+1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}`:`index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}`;return`${p}; ${u};`}).join(\"\"),`\n fn getCoordsFromIndex(index : i32) -> ${o} {\n ${s}\n return ${o}(${n.join(\",\")});\n }\n `}function Ree(r,e){let t=r.name,o=r.shape.length,n=Rt(o),s=\"get\"+t.charAt(0).toUpperCase()+t.slice(1),a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=a.map(c=>`${c} : i32`).join(\", \");if(o<1)return e?`\n fn ${s}() -> vec4 {\n return vec4(${t}[0]);\n }\n `:`\n fn ${s}() ->f32 {\n return f32(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),e?`\n fn ${s}(${i}) -> vec4 {\n return vec4(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p}) / 4]);\n }\n `:`\n fn ${s}(${i}) -> f32 {\n return f32(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})]);\n }\n `}function Fee(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=e.length,u=Rt(p);if(y.arraysEqual(r.shape,e)&&o)return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n return vec4(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> vec4 {\n return vec4(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"} / 4]);\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32 {\n return f32(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> f32 {\n return f32(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}]);\n }\n `;let c=S.getBroadcastDims(r.shape,e),l=p-i,m=\"\";if(i===0)return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> vec4 {\n return get${s}();\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> f32{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${$o(g+l)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=Rt(i),x=r.shape.map((b,C)=>`coords.${$o(C+l)}`).join(\", \");d=`${g}(${x})`}else d=\"coords\";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return t?`\n fn ${a}Index(globalIndex : i32) -> vec4 {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4];\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> vec4 {\n var coords = coordsIn;\n ${m}\n return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4];\n }\n `:`\n fn ${a}Index(globalIndex : i32) -> f32 {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> f32 {\n var coords = coordsIn;\n ${m}\n return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]);\n }\n`}function Dee(r,e,t,o){let n=Ree(r,t);return r.shape.length<=e.length&&(n+=Fee(r,e,t,o)),n}function Oee(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return\"\";if(t.length===s)return`fn getOutputCoords() -> ${Rt(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[t,o,n];for(let m=0;m ${c} {\n ${i}\n`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(\",\")}); }`,l}function Pee(r){let e=\"\";switch(r){case 0:case 1:e+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:e+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:e+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:e+=`\n fn getOutputIndexFromCoords(coords : vec4) -> i32 {\n return dot(coords, vec4(\n uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, uniforms.outShapeStrides.z, 1));\n }\n `;break;case 5:e+=`\n fn getOutputIndexFromCoords(coords : vec5) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u;\n }\n `;break;case 6:e+=`\n fn getOutputIndexFromCoords(coords : vec6) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u * uniforms.outShapeStrides.u +\n coords.v;\n }\n `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function F3(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function wc(r,e){return r===\"float32\"?e?\"vec4\":\"f32\":r===\"int32\"||r===\"bool\"?e?\"vec4\":\"i32\":r}function Mee(r,e,t){let o=r.length,n=wc(e,t),s;if(t?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) {\n result[flatIndex] = ${n}(value);\n }\n fn setOutputAtIndexI32(flatIndex : i32, value : vec4) {\n result[flatIndex] = ${n}(value);\n }`:s=`fn setOutputAtIndex(flatIndex : i32, value : f32) {\n result[flatIndex] = ${n}(value);\n }\n fn setOutputAtIndexI32(flatIndex : i32, value : i32) {\n result[flatIndex] = ${n}(value);\n }`,o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=Rt(o);t?s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : vec4) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex / 4, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : vec4) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex / 4, value);\n }\n `:s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : f32) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : i32) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex, value);\n }\n `}return s}function Lee(r){let e=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(e,o=>\"@align(16) \"+o);let t=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function $3(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var nI={};Ue(nI,{ArrayBufferToTypedArray:()=>oI,GPUBytesPerElement:()=>rI,MatMulProgramType:()=>Ao,computeDispatch:()=>re,computeWorkPerThreadForConv2d:()=>Ll,computeWorkgroupInfoForMatMul:()=>tI,computeWorkgroupSizeForConv2d:()=>Ml,flatDispatchLayout:()=>ue,isWebGPUSupported:()=>Bl,tilesFitEvenlyIntoShape:()=>Vee});var zu=r=>{let e=1;for(let t=0;tt%r[o]===0)}function re(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(zu(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(zu(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(zu(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function tI(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function Ml(r,e,t=!1){if(t)return[8,8,1];let o=zu(r.x.map(s=>e[s])),n=zu(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function Ll(r,e,t=!1){if(t)return[4,4,1];let o=zu(r.x.map(s=>e[s])),n=zu(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function ue(r){return{x:r.map((e,t)=>t)}}function rI(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function oI(r,e){if(e===\"float32\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function Bl(){return(typeof window!=\"undefined\"||typeof WorkerGlobalScope!=\"undefined\")&&!!navigator.gpu}var Ao;(function(r){r[r.MatMulReduceProgram=0]=\"MatMulReduceProgram\",r[r.MatMulSplitKProgram=1]=\"MatMulSplitKProgram\",r[r.MatMulSmallOutputSizeProgram=2]=\"MatMulSmallOutputSizeProgram\",r[r.MatMulPackedProgram=3]=\"MatMulPackedProgram\",r[r.MatMulMax=4]=\"MatMulMax\"})(Ao||(Ao={}));var zee=O().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),Wee=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>\"Dispatch size exceeds WebGPU limits in Y or Z dimension.\");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},Ui=class extends Zr{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!Bl())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has(\"timestamp-query-inside-passes\"),this.adapterInfo=new kg(t),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Ng(this.device),this.textureManager=new Tg(this.device),this.tensorMap=new Do(this,cr()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:2})),O().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(this.dummyCanvas=document.createElement(\"canvas\"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext(\"webgpu\"),this.dummyContext.configure({device:e,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Ui.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);if(this.decRef(e),!t&&o.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if(\"texture\"in t.resourceInfo){let o=t.resourceInfo;o.texture instanceof GPUTexture&&this.textureManager.releaseTexture(o.texture,o.width,o.height,o.format,o.usage),o.texture=null}else{let o=t.resourceInfo;this.bufferManager.releaseBuffer(o.buffer,o.size,o.usage),o.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),O().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(y.assert(this.dummyContext!==void 0,()=>\"Fail to get context for profiling tool\"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return this.releaseResource(e),o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o}=t;if(o==null)throw new Error(\"WebGPU readSync is only available for CPU-resident tensors.\");return o}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return this.convertAndCacheOnCPU(e,o);let n;if(t.dtype===\"complex64\"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=S.mergeRealAndImagArrays(a,i)}else{let s=t.resourceInfo,a=await this.getBufferData(s.buffer,s.size);n=oI(a,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:o,dtype:n,shape:s,resourceInfo:a}=t;if(n===\"complex64\")throw new Error(\"Does not support reading buffer for complex64 dtype.\");if(a==null)throw o!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let i=a.size,p=this.bufferManager.acquireBuffer(i,a.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(a.buffer,0,p,0,i),this.submitQueue();let u=this.makeTensorInfo(s,n),c=cr().makeTensorFromTensorInfo(u),l=this.tensorMap.get(u.dataId);return l.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:p},{tensorRef:c,buffer:p,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return le(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn(\"This device doesn't support timestamp-query-inside-passes extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.\");let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \"),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if(\"texture\"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let o=t.resourceInfo;return{offset:0,size:o.size,buffer:o.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let o=rI(t.dtype)*y.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(o,this.defaultGpuBufferUsage());if(t.resourceInfo={size:o,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let s=this.bufferManager.acquireUploadBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),a=s.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),s.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s,0,n,0,o);let i={size:o,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:s};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,o=0,n=[];e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4});let s=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type===\"int32\"?new Int32Array(s,c,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(s,c,p.data.length).set(p.data):new Float32Array(s,c,p.data.length).set(p.data)});let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(a,0,s,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:a};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:a}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Wee(this.device,e);let a=[],i=[];if(!e.isFromPixels){a.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),i=t.concat(s).map(x=>x.shape);let h=\"int32\";i.map(x=>{a.push({type:h,data:x})});let g=y.computeStrides(s.shape);if(a.push({type:h,data:g}),e.size){let x=y.sizeFromShape(e.outputShape);a.push({type:h,data:[e.isVec4?x/4:x]})}}let p=t.map((h,g)=>{if(h.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");return this.uploadToGPU(h.dataId),{dtype:this.tensorMap.get(h.dataId).dtype,shape:h.shape,name:e.variableNames[g]}}),u=R3(e,i,p,s),c;u in this.pipelineCache?c=this.pipelineCache[u]:(c=A3(this.device,e,p,s),this.pipelineCache[u]=c),n&&(a=[...a,...n]);let l=[this.tensorToBinding(s),...t.map(h=>this.tensorToBinding(h)),this.makeUniforms(a)],m=this.device.createBindGroup({layout:c.getBindGroupLayout(0),entries:l.map((h,g)=>({binding:g,resource:h}))});this.ensureCommandEncoderReady();let d=this.getComputePass(),f=this.activeTimers!=null;return f&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,0),d.setPipeline(c),d.setBindGroup(0,m),d.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),f&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(h=>{this.commandQueueOwnedIds.add(h.dataId)}),this.commandQueueOwnedIds.add(s.dataId),O().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchNumberInEncoder&&this.submitQueue(),f&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),s}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),o=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,o,0,16),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(o.getMappedRange()),s=Number(n[1]-n[0]);return o.unmap(),this.bufferManager.releaseBuffer(o,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),s/1e6}shouldExecuteOnCPU(e,t=zee){return O().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resourceInfo==null&&y.sizeFromShape(o.shape){O().set(\"CHECK_COMPUTATION_FOR_ERRORS\",!1);let r={powerPreference:O().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t={};e.features.has(\"timestamp-query-inside-passes\")&&(t.requiredFeatures=[\"timestamp-query-inside-passes\"]);let o=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:o.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:o.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:o.maxStorageBufferBindingSize};let n=await e.requestDevice(t),s=await e.requestAdapterInfo();return new Ui(n,s)},3);var ye;(function(r){r[r.ADD=0]=\"ADD\",r[r.ATAN2=1]=\"ATAN2\",r[r.COMPLEX_MULTIPLY_IMAG=2]=\"COMPLEX_MULTIPLY_IMAG\",r[r.COMPLEX_MULTIPLY_REAL=3]=\"COMPLEX_MULTIPLY_REAL\",r[r.DIV=4]=\"DIV\",r[r.EQUAL=5]=\"EQUAL\",r[r.GREATER=6]=\"GREATER\",r[r.GREATER_EQUAL=7]=\"GREATER_EQUAL\",r[r.INT_DIV=8]=\"INT_DIV\",r[r.LESS=9]=\"LESS\",r[r.LESS_EQUAL=10]=\"LESS_EQUAL\",r[r.LOGICAL_AND=11]=\"LOGICAL_AND\",r[r.MAX=12]=\"MAX\",r[r.MIN=13]=\"MIN\",r[r.MOD=14]=\"MOD\",r[r.MUL=15]=\"MUL\",r[r.NOT_EQUAL=16]=\"NOT_EQUAL\",r[r.POW=17]=\"POW\",r[r.PRELU=18]=\"PRELU\",r[r.SQUARED_DIFFERENCE=19]=\"SQUARED_DIFFERENCE\",r[r.SUB=20]=\"SUB\"})(ye||(ye={}));var D3=`\n if (isnan(a)) { return a; }\n if (isnan(b)) { return b; }\n `,O3=`\n if (isNaN.r) {\n resultTemp.r = valueForNaN;\n }\n if (isNaN.g) {\n resultTemp.g = valueForNaN;\n }\n if (isNaN.b) {\n resultTemp.b = valueForNaN;\n }\n if (isNaN.a) {\n resultTemp.a = valueForNaN;\n }\n `,aI=`\n let isNaN = isnanVec4(a) | isnanVec4(b);\n ${O3}\n `,Uee=\"return a + b;\",Gee=\"return areal * breal - aimag * bimag;\",Hee=\"return areal * bimag + aimag * breal;\",qee=\"return a / b;\",Kee=\"return f32(a == b);\",jee=\"return vec4(a == b);\",Xee=\"return f32(a > b);\",Yee=\"return vec4(a > b);\",Qee=\"return f32(a >= b);\",Zee=\"return vec4(a >= b);\",Jee=`\n let s = sign(a) * sign(b);\n let ia = i32(round(a));\n let ib = i32(round(b));\n return f32(idiv(ia, ib, s));\n`,ete=`\n let ia = vec4(round(a));\n let ib = vec4(round(b));\n let cond = ib != vec4(0);\n var resultTemp = vec4(0);\n let s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n resultTemp[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n resultTemp[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n resultTemp[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n resultTemp[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(resultTemp);\n`,tte=\"return f32(a < b);\",rte=\"return vec4(a < b);\",ote=\"return f32(a <= b);\",nte=\"return vec4(a <= b);\",ste=\"return f32(f32(a) >= 1.0 && f32(b) >= 1.0);\",ate=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,ite=`\n ${D3}\n if (b == 0.) {\n return uniforms.NAN;\n }\n var resultTemp = a % b;\n if ((a < 0. && b < 0.) || (a >= 0. && b > 0.)) {\n return resultTemp;\n } else {\n return (resultTemp + b) % b;\n }\n`,ute=`\n let valueForNaN = uniforms.NAN;\n var resultTemp = vec4(a % b);\n ${aI}\n\n if (b[0] == 0.) {\n resultTemp[0] = uniforms.NAN;\n }\n if (b[1] == 0.) {\n resultTemp[1] = uniforms.NAN;\n }\n if (b[2] == 0.) {\n resultTemp[2] = uniforms.NAN;\n }\n if (b[3] == 0.) {\n resultTemp[3] = uniforms.NAN;\n }\n\n if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) {\n resultTemp[0] = (resultTemp[0] + b[0]) % b[0];\n }\n if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) {\n resultTemp[1] = (resultTemp[1] + b[1]) % b[1];\n }\n if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) {\n resultTemp[2] = (resultTemp[2] + b[2]) % b[2];\n }\n if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) {\n resultTemp[3] = (resultTemp[3] + b[3]) % b[3];\n }\n\n return resultTemp;\n`,pte=\"return a * b;\",cte=`\n if (isnan(a) || isnan(b)) {\n return 1.0;\n }\n return f32(a != b);\n`,lte=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n ${aI}\n\n return resultTemp;\n`,mte=`\n if(a < 0.0 && floor(b) < b) {\n return uniforms.NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n if (round(abs(b) % 2.0) != 1.0) {\n return pow(abs(a), b);\n }\n return sign(a) * pow(abs(a), b);\n`,dte=`\n let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1);\n let isModRound1 = vec4(isModRound1Bool);\n let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n var resultTemp = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n let isExpZero = b == vec4(0.0);\n if (isExpZero.r) {\n resultTemp.r = 1.0;\n }\n if (isExpZero.g) {\n resultTemp.g = 1.0;\n }\n if (isExpZero.b) {\n resultTemp.b = 1.0;\n }\n if (isExpZero.a) {\n resultTemp.a = 1.0;\n }\n let isNaN = (a < vec4(0.0)) & (floor(b) < b);\n let valueForNaN = uniforms.NAN;\n ${O3}\n return resultTemp;\n`,fte=\"if (a < 0.0) { return b * a; } return a;\",hte=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,gte=\"return (a - b) * (a - b);\",xte=\"return a - b;\";function sI(r,e,t=\"uniforms.NAN\"){let o=e?aI:D3;return e?`\n let valueForNaN = ${t};\n var resultTemp = vec4(${r}(a, b));\n `+o+`\n return resultTemp;\n `:o+`\n return ${r}(a, b);\n `}function Ic(r,e){switch(r){case ye.ADD:return Uee;case ye.ATAN2:return sI(\"atan2\",e);case ye.COMPLEX_MULTIPLY_IMAG:return Hee;case ye.COMPLEX_MULTIPLY_REAL:return Gee;case ye.DIV:return qee;case ye.EQUAL:return e?jee:Kee;case ye.GREATER:return e?Yee:Xee;case ye.GREATER_EQUAL:return e?Zee:Qee;case ye.INT_DIV:return e?ete:Jee;case ye.LESS:return e?rte:tte;case ye.LESS_EQUAL:return e?nte:ote;case ye.LOGICAL_AND:return e?ate:ste;case ye.MAX:return sI(\"max\",e);case ye.MIN:return sI(\"min\",e);case ye.MOD:return e?ute:ite;case ye.MUL:return pte;case ye.NOT_EQUAL:return e?lte:cte;case ye.POW:return e?dte:mte;case ye.PRELU:return e?hte:fte;case ye.SQUARED_DIFFERENCE:return gte;case ye.SUB:return xte;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var Q;(function(r){r[r.ABS=0]=\"ABS\",r[r.ACOS=1]=\"ACOS\",r[r.ACOSH=2]=\"ACOSH\",r[r.ASIN=3]=\"ASIN\",r[r.ASINH=4]=\"ASINH\",r[r.ATAN=5]=\"ATAN\",r[r.ATANH=6]=\"ATANH\",r[r.CEIL=7]=\"CEIL\",r[r.COS=8]=\"COS\",r[r.COSH=9]=\"COSH\",r[r.ELU=10]=\"ELU\",r[r.ERF=11]=\"ERF\",r[r.EXP=12]=\"EXP\",r[r.EXPM1=13]=\"EXPM1\",r[r.FLOOR=14]=\"FLOOR\",r[r.IS_FINITE=15]=\"IS_FINITE\",r[r.IS_INF=16]=\"IS_INF\",r[r.IS_NAN=17]=\"IS_NAN\",r[r.LINEAR=18]=\"LINEAR\",r[r.LOG=19]=\"LOG\",r[r.LOG1P=20]=\"LOG1P\",r[r.LOGICAL_NOT=21]=\"LOGICAL_NOT\",r[r.NEG=22]=\"NEG\",r[r.RELU=23]=\"RELU\",r[r.RELU6=24]=\"RELU6\",r[r.LEAKYRELU=25]=\"LEAKYRELU\",r[r.RECIPROCAL=26]=\"RECIPROCAL\",r[r.RSQRT=27]=\"RSQRT\",r[r.SIN=28]=\"SIN\",r[r.SINH=29]=\"SINH\",r[r.SIGMOID=30]=\"SIGMOID\",r[r.SQRT=31]=\"SQRT\",r[r.SQUARE=32]=\"SQUARE\",r[r.TAN=33]=\"TAN\",r[r.TANH=34]=\"TANH\",r[r.TO_INT=35]=\"TO_INT\"})(Q||(Q={}));var yte=\"return abs(a);\",bte=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,Cte=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,Ste=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,wte=\"return asinh(a);\",Ite=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,vte=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n if (a == 1.) {\n return uniforms.INFINITY;\n }\n if (a == -1.) {\n return -uniforms.INFINITY;\n }\n return atanh(a);\n`,kte=\"return ceil(a);\",Nte=\"return cos(a);\",Tte=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,_te=\"return exp(a) - 1.0;\",Ete=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",$te=`\n var resFloat = exp(a) - vec4(1.0);\n if (a.r >= 0.0) {\n resFloat.r = a.r;\n }\n if (a.g >= 0.0) {\n resFloat.g = a.g;\n }\n if (a.b >= 0.0) {\n resFloat.b = a.b;\n }\n if (a.a >= 0.0) {\n resFloat.a = a.a;\n }\n return resFloat;\n`,Ate=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n let p = ${S.ERF_P};\n let a1 = ${S.ERF_A1};\n let a2 = ${S.ERF_A2};\n let a3 = ${S.ERF_A3};\n let a4 = ${S.ERF_A4};\n let a5 = ${S.ERF_A5};\n\n let sign = sign(a);\n let absA = abs(a);\n let t = 1.0 / (1.0 + p * absA);\n return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA));\n`,Rte=\"return exp(a);\",Fte=\"return floor(a);\",Dte=\"return f32(!isnan(a) && !isinf(a));\",Ote=\"return f32(isinf(a));\",Pte=\"return f32(isnan(a));\",Mte=\"return a;\",Lte=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,Bte=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,Vte=\"return f32(!(a >= 1.0));\",zte=\"return -a;\",Wte=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",Ute=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Gte=\"return 1.0 / a;\",Hte=\"return select(a, 0.0, a < 0.0);\",qte=\"return clamp(a, 0.0, 6.0);\",Kte=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",jte=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,Xte=\"return inverseSqrt(a);\",Yte=\"return 1.0 / (1.0 + exp(-1.0 * a));\",Qte=\"return sin(a);\",Zte=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Jte=\"return sqrt(a);\",ere=\"return a * a;\",tre=\"return tan(a);\",rre=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,ore=\"return f32(i32((a)));\";function Ha(r,e){switch(r){case Q.ABS:return yte;case Q.ACOS:return bte;case Q.ACOSH:return Cte;case Q.ASIN:return Ste;case Q.ASINH:return wte;case Q.ATAN:return Ite;case Q.ATANH:return vte;case Q.COS:return Nte;case Q.COSH:return Tte;case Q.CEIL:return kte;case Q.ELU:return e?$te:Ete;case Q.ERF:return Ate;case Q.EXP:return Rte;case Q.EXPM1:return _te;case Q.FLOOR:return Fte;case Q.IS_FINITE:return Dte;case Q.IS_INF:return Ote;case Q.IS_NAN:return Pte;case Q.LINEAR:return Mte;case Q.LOG:return Lte;case Q.LOG1P:return Bte;case Q.LOGICAL_NOT:return Vte;case Q.NEG:return zte;case Q.LEAKYRELU:return e?Ute:Wte;case Q.RECIPROCAL:return Gte;case Q.RELU:return e?jte:Hte;case Q.RELU6:return e?Kte:qte;case Q.RSQRT:return Xte;case Q.SIGMOID:return Yte;case Q.SIN:return Qte;case Q.SINH:return Zte;case Q.SQRT:return Jte;case Q.SQUARE:return ere;case Q.TAN:return tre;case Q.TANH:return rre;case Q.TO_INT:return ore;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var kt=r=>{switch(r){case 1:return\"f32\";case 2:return\"vec2\";case 3:return\"vec3\";case 4:return\"vec4\";default:throw new Error(`${r}-component is not supported.`)}};function ur(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=Ha(Q.LINEAR);else if(r===\"relu\")n=Ha(Q.RELU,t);else if(r===\"elu\")n=Ha(Q.ELU,t);else if(r===\"relu6\")n=Ha(Q.RELU6,t);else if(r===\"prelu\")n=Ic(ye.PRELU,t);else if(r===\"sigmoid\")n=Ha(Q.SIGMOID,t);else if(r===\"leakyrelu\")n=Ha(Q.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=kt(t?4:1),i=\"\";return e?i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n let b = getPreluActivationWeightsByOutputCoords(coords);\n ${n}\n }`:i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n ${n}\n }`,i}function Hr(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function iI(r,e,t,o,n=!1,s=!1,a=!1,i=1){y.assert(t&&i===1||!t,()=>`transposeA ${t} is not compatible with component size ${i}`);let p=`\n let batch = ${r?\"0\":\"batchIn\"};\n ${t?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,u=o?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} {\n var value = ${kt(i)}(0.0);\n let col = colIn * ${i};\n ${n&&a?p:`\n ${t?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${p}\n }\n `}\n return value;\n }\n\n fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} {\n let col = colIn * ${i};\n let batch = ${e?\"0\":\"batchIn\"};\n var value = ${kt(i)}(0.0);\n ${u}\n return value;\n }\n `}function Vl(r,e,t,o,n,s,a=!1,i=!1,p=!1,u=1){return`\n ${iI(t,o,n,s,a,i,p,u)}\n fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${kt(u)}) {\n let col = colIn * ${u};\n ${a&&i?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${Hr(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var nre=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart / innerElementSize + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRow + innerRow,\n kStart / innerElementSize + inputCol);\n `,sre=(r,e)=>r?`\n let ACached0 = mm_Asub[k * innerElementSize][localRow];\n let ACached1 = mm_Asub[k * innerElementSize + 1][localRow];\n let ACached2 = mm_Asub[k * innerElementSize + 2][localRow];\n ${e===3?\"\":\"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];\"}\n for (var i = 0; i < rowPerThread; i = i + 1) {\n acc[i] = BCached0 * ACached0[i] + acc[i];\n acc[i] = BCached1 * ACached1[i] + acc[i];\n acc[i] = BCached2 * ACached2[i] + acc[i];\n ${e===3?\"\":\"acc[i] = BCached3 * ACached3[i] + acc[i];\"}\n }`:`\n for (var i = 0; i < rowPerThread; i = i + 1) {\n let ACached = mm_Asub[tileRow + i][k];\n acc[i] = BCached0 * ACached.x + acc[i];\n acc[i] = BCached1 * ACached.y + acc[i];\n acc[i] = BCached2 * ACached.z + acc[i];\n ${e===3?\"\":\"acc[i] = BCached3 * ACached.w + acc[i];\"}\n }`;function Wu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1];return y.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4.\n Otherwise, innerElementSize ${l} must be 3 or 4.\n tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`),`\n var mm_Asub : array, ${u/l}>, ${c}>;\n var mm_Bsub : array, ${p/r[0]}>, ${o}>;\n\n const rowPerThread = ${r[1]};\n const colPerThread = ${r[0]};\n const innerElementSize = ${l};\n const tileInner = ${o};\n\n ${se()} {\n let localRow = i32(localId.y);\n let tileRow = ${a?\"0\":\"localRow * rowPerThread\"};\n let tileCol = i32(localId.x);\n\n let globalRow = ${a?\"0\":\"i32(globalId.y) * rowPerThread\"};\n let globalCol = i32(globalId.x);\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:\"(uniforms.dimInner - 1) / tileInner + 1\"};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, rowPerThread>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${nre(t)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow = innerRow + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol);\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < tileInner / innerElementSize; k = k + 1) {\n let BCached0 = mm_Bsub[k * innerElementSize][tileCol];\n let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol];\n let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol];\n ${l===3?\"\":\"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];\"}\n\n ${sre(t,l)}\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var P3=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,are=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Uu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=r[1]*e[1],p=r[0]*e[0],u=t?i:o,c=t?o:i;y.assert(c%e[1]===0&&u%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let l=c/e[1],m=u/e[0],d=o/e[1],f=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${i};\n let globalColStart = i32(workgroupId.x) * ${p};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) {\n ${P3(t)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${p}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < tileInner; k = k + 1) {\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] +\n ACached * BCached[innerCol];\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n let gCol = globalColStart + localCol + innerCol * ${e[0]};\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\n }\n }\n `:`\n let tileRow = i32(localId.y) * rowPerThread;\n let tileCol = i32(localId.x) * colPerThread;\n\n let globalRow = i32(globalId.y) * rowPerThread;\n let globalCol = i32(globalId.x) * colPerThread;\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let tileRowA = i32(localId.y) * ${l};\n let tileColA = i32(localId.x) * ${m};\n let tileRowB = i32(localId.y) * ${d};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${l}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ${m}; innerCol = innerCol + 1) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${P3(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < tileInner; k = k + 1) {\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n ${are(t)}\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${c}>;\n var mm_Bsub : array, ${o}>;\n const rowPerThread = ${r[1]};\n const colPerThread = ${r[0]};\n const tileInner = ${o};\n\n ${se()} {\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:\"(uniforms.dimInner - 1) / tileInner + 1\"};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, rowPerThread>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${f}\n }\n `}var ire=r=>r?`\n mm_readA(batch, colA, globalRow),\n mm_readA(batch, colA + 1, globalRow),\n mm_readA(batch, colA + 2, globalRow),\n mm_readA(batch, colA + 3, globalRow)\n `:`\n mm_readA(batch, globalRow, colA),\n mm_readA(batch, globalRow, colA + 1),\n mm_readA(batch, globalRow, colA + 2),\n mm_readA(batch, globalRow, colA + 3)\n `;function ure(r,e=!1){return y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`),`\n const tileSize = ${r[0]*4};\n var mm_Asub : array, ${r[0]}>;\n\n ${se()} {\n let tileCol = i32(localId.x);\n let globalCol = i32(globalId.x);\n let globalRow = i32(globalId.y);\n\n let numTiles = (uniforms.dimInner - 1) / tileSize + 1;\n let batch = i32(globalId.z);\n // Without this initialization strange values show up in acc.\n var acc = 0.0;\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t = t + 1) {\n // Load one tile of A into local memory.\n let colA = t * tileSize + tileCol * 4;\n mm_Asub[tileCol] = vec4(${ire(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < tileSize / 4; k = k + 1) {\n let rowB = t * tileSize + k * 4;\n let BCached = vec4(mm_readB(batch, rowB, globalCol),\n mm_readB(batch, rowB + 1, globalCol),\n mm_readB(batch, rowB + 2, globalCol),\n mm_readB(batch, rowB + 3, globalCol));\n\n let ACached = mm_Asub[k];\n acc = acc + dot(ACached, BCached);\n }\n\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var _g=class{constructor(e,t,o,n,s=!1,a=!1,i=null,p=null,u=null,c=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=s?e[1]:e[2];if(this.isVec4=(l%4===0&&!s||t[1]%4===0&&s)&&t[2]%4===0&&!a,this.isVectorA=t[1]===1&&!s,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let f=tI(t[1],l,t[2],s);this.workgroupSize=f.workgroupSize,this.elementsPerThread=f.elementsPerThread}this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let m=i!=null,d=u!=null;m&&this.variableNames.push(\"bias\"),d&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=c,this.transposeA=s,this.transposeB=a,this.addBias=m,this.activation=p,this.hasPreluActivationWeights=d,this.batchAEqualOne=o,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?ure(this.workgroupSize,this.transposeA):Uu(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)}\n `}};function pre(){return`\n var sumValues : array;\n ${se()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let row = coords[1];\n let col = coords[2];\n var sum = 0.0;\n let Length = uniforms.dimInner;\n for (var k = i32(localId.x); k < Length; k = k + i32(workgroupSizeX)) {\n let dataA = mm_readA(batch, row, k);\n let dataB = mm_readB(batch, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = workgroupSizeX / 2u; currentSize > 1u;\n currentSize = currentSize / 2u) {\n if (localId.x < currentSize)\n {\n sumValues[localId.x] = sumValues[localId.x] + sumValues[localId.x + currentSize];\n }\n workgroupBarrier();\n }\n\n if (localId.x == 0u) {\n sum = sumValues[0] + sumValues[1];\n mm_write(batch, row, col, sum);\n }\n }\n `}var Eg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize);let u=a!=null,c=p!=null;u&&this.variableNames.push(\"bias\"),c&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=t,this.batchBEqualOne=o,this.shaderKey=`matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)}\n ${pre()}\n `}};function cre(r){let e=r[1],t=r[0],o=e>t?e:t;return`\n var mm_Asub : array, ${e}>;\n var mm_Bsub : array, ${o}>;\n\n // If the output size is small for matrix multiplication, avoid to use vec4\n // and handle some elements per thread to optimally utilize the ALU.\n // Read data from global memory to registers firstly, then store them into\n // shared memory, so it is instruction-Level parallelism for arithmetic\n // operations and others handle IO operations between barrier api, makes ALU\n // and load/store units work simultaneously, could improves the performance.\n ${se()} {\n let tileRow = i32(localId.y);\n let tileCol = i32(localId.x);\n let globalRow = i32(globalId.y);\n let globalCol = i32(globalId.x);\n let batch = i32(globalId.z);\n\n // uniforms.dimInner should be greater than 0.\n let numTiles = (uniforms.dimInner - 1) / ${o} + 1;\n var acc = 0.0;\n\n var globalColA = tileCol;\n var globalRowB = 0;\n var regA = mm_readA(batch, globalRow, globalColA);\n var regB0 = mm_readB(batch, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batch, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var t = 0; t < numTiles; t = t + 1) {\n mm_Asub[tileRow][tileCol] = regA;\n mm_Bsub[2 * tileRow][tileCol] = regB0;\n mm_Bsub[2 * tileRow + 1][tileCol] = regB1;\n\n workgroupBarrier();\n\n regA = mm_readA(batch, globalRow, globalColA);\n regB0 = mm_readB(batch, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batch, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var k = 0; k < ${o}; k = k + 1) {\n acc = acc + mm_Asub[tileRow][k] * mm_Bsub[k][tileCol];\n }\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var $g=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push(\"bias\");let c=p!=null;c&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)}\n ${cre(this.workgroupSize)}\n `}};var Ag=class{constructor(e,t,o,n,s=!1,a=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,y.assert(e[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(s&&this.outputShape[1]%4===0||!s&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=re(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=s,this.transposeB=a,this.batchAEqualOne=o,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=n=>`\n for (var i = 0; i < ${n}; i = i + 1)\n {\n var oldValue = atomicLoad(&(result[flatIndex + i]));\n var exchanged = false;\n for (; !exchanged;) {\n let newValueF32 = bitcast(oldValue) + ${n>1?\"value[i]\":\"value\"};\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(&(result[flatIndex + i]), oldValue, newValue);\n oldValue = res.old_value;\n exchanged = res.exchanged;\n }\n }\n `,t=this.isVec4?4:1;return`\n ${iI(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)}\n fn mm_write(batch: i32, row : i32, colIn : i32, value : ${kt(t)}) {\n let col = colIn * ${t};\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n ${e(t)}\n }\n }\n ${this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Uu(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Rg=class{constructor(e,t=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push(\"bias\"),this.hasPreluActivationWeights&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights)}\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${Hr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var Fg=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function dr(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Fg(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var M3={kernelName:Cs,backendName:\"webgpu\",kernelFunc:dr};function de(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var L3={kernelName:Ns,backendName:\"webgpu\",kernelFunc:de};function Gu({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),w=br.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=de({inputs:{x:r},backend:n,attrs:{shape:k}}),A=de({inputs:{x:e},backend:n,attrs:{shape:_}}),R=[$,A],D=Math.max(x,b),P=x===1,M=b===1,L=[$,A],W=[{type:\"int32\",data:[d]},{type:\"int32\",data:[f]},{type:\"int32\",data:[l]}],V,U,q=[D,d,f],H=O().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");if(H<0){let X=O().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),Z=X>0?X:n.thresholdToIncreaseWorkgroups,ee=D*Math.ceil(d/32)*Math.ceil(f/32);ee<=Z||d<=8&&ee<=Z*2?D*d*f<=128?H=Ao.MatMulReduceProgram:D===1&&m>=2e3?H=Ao.MatMulSplitKProgram:H=Ao.MatMulSmallOutputSizeProgram:H=Ao.MatMulPackedProgram}switch(H){case Ao.MatMulReduceProgram:V=new Eg(q,P,M,t,o,s,p,a);break;case Ao.MatMulSplitKProgram:{if(U=dr({backend:n,attrs:{shape:q,value:0,dtype:r.dtype}}),V=new Ag(q,m,P,M,t,o),s||p){U=n.runWebGPUProgram(V,L,r.dtype,W,U);let Z=new Rg(U.shape,s,p,a),ee=null,Y=[U];s&&Y.push(s),a&&Y.push(a),p===\"leakyrelu\"&&(ee=[{type:\"float32\",data:[i]}],Z.uniforms+=\" alpha : f32,\");let J=n.runWebGPUProgram(Z,Y,U.dtype,ee);R.push(U);let ie=de({inputs:{x:J},backend:n,attrs:{shape:w}});R.push(J);for(let pe of R)n.disposeData(pe.dataId);return ie}break}case Ao.MatMulSmallOutputSizeProgram:V=new $g(k,_,q,t,o,s,p,a);break;case Ao.MatMulPackedProgram:let X=n.adapterInfo.isIntel();V=new _g(k,q,P,M,t,o,s,p,a,X);break;default:throw new Error(`Unsupported MatMulProgramType ${H}.`)}s&&L.push(s),a&&L.push(a),p===\"leakyrelu\"&&(W.push({type:\"float32\",data:[i]}),V.uniforms+=\" alpha : f32,\"),U=n.runWebGPUProgram(V,L,r.dtype,W,U);let j=de({inputs:{x:U},backend:n,attrs:{shape:w}});R.push(U);for(let X of R)n.disposeData(X.dataId);return j}function lre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Gu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var B3={kernelName:fo,backendName:\"webgpu\",kernelFunc:lre};var zl=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=S.assertAndGetBroadcastShape(t,o),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${Ic(this.op,!1)}\n }\n\n ${se(\"index\")} {\n if(index < uniforms.size) {\n let areal = getARealByOutputIndex(index);\n let aimag = getAImagByOutputIndex(index);\n let breal = getBRealByOutputIndex(index);\n let bimag = getBImagByOutputIndex(index);\n setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag));\n }\n }\n `}};var Hu=class{constructor(e,t,o){this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=S.assertAndGetBroadcastShape(t,o),this.dispatchLayout=ue(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type=\"shared\",this.workgroupSize=[256,1,1],this.workPerThread=1):(y.arraysEqual(t,o)&&y.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type=\"vec4\",this.workPerThread=4):(this.isVec4=!1,this.type=\"plain\",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workgroupSize=[128,1,1]),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${Ic(this.op,this.isVec4)}\n };\n `;if(this.type===\"shared\"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:\"0\",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index);\n let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}];\n let b = getBByOutputIndex(index);`;e=`\n ${o}\n var sharedBuf : array;\n ${se(\"index\")} {\n // Fill in the shared memory buffer.\n let localIndex = i32(localId.x);\n if(localIndex < ${this.lastDimensionSize}) {\n sharedBuf[localIndex] = f32(${this.useSharedMemoryWithB?\"B\":\"A\"}[localIndex]);\n }\n workgroupBarrier();\n\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n ${s}\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `}else e=`\n ${o}\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n let b = getBByOutputIndex(index);\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function Ft(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var V3={kernelName:mo,backendName:\"webgpu\",kernelFunc:Ft};function po(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.tensorMap.get(s.dataId),i=Ft({inputs:{x:o},backend:t}),p=Ft({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var z3={kernelName:ei,backendName:\"webgpu\",kernelFunc:po};var Ro=class{constructor(e,t){this.variableNames=[\"A\"],this.size=!0;let o=128;this.workgroupSize=[o,1,1],this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${Ha(this.op,!1)}\n }\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function Se({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Ro(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function ot({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype===\"complex64\"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==ye.MUL)[d,f]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,C={dataId:x.dataId,dtype:x.dtype,shape:a.shape},w={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,w],dt(x.dtype,b.dtype))});else{let g=new zl(ye.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new zl(ye.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,\"float32\"),f=p.runWebGPUProgram(x,b,\"float32\")}let h=po({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||dt(a.dtype,i.dtype);if((a.dtype===\"string\"||i.dtype===\"string\"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype===\"string\"?S.fromUint8ToStringArray(l):l,f=a.dtype===\"string\"?S.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:W3,castImpl:U3,ceilImpl:G3,concatImpl:H3,equalImpl:q3,expImpl:K3,expm1Impl:j3,floorImpl:X3,gatherNdImpl:Y3,gatherV2Impl:Q3,greaterEqualImpl:Z3,greaterImpl:J3,lessEqualImpl:eM,lessImpl:tM,logImpl:rM,maxImpl:oM,maximumImpl:nM,minimumImpl:sM,multiplyImpl:aM,negImpl:iM,notEqualImpl:uM,prodImpl:pM,rangeImpl:cM,rsqrtImpl:lM,scatterImpl:mM,simpleAbsImpl:dM,sliceImpl:fM,stridedSliceImpl:hM,stringNGramsImpl:gM,subImpl:xM,tileImpl:yM,topKImpl:bM,transposeImpl:CM,uniqueImpl:kNt}=Qp;var mre=Se({opType:Q.ABS,cpuKernelImpl:dM}),SM={kernelName:gs,backendName:\"webgpu\",kernelFunc:mre};var dre=Se({opType:Q.ACOS}),wM={kernelName:sa,backendName:\"webgpu\",kernelFunc:dre};var fre=Se({opType:Q.ACOSH}),IM={kernelName:aa,backendName:\"webgpu\",kernelFunc:fre};var hre=ot({opType:ye.ADD,cpuKernelImpl:W3,supportsComplex:!0}),vM={kernelName:eo,backendName:\"webgpu\",kernelFunc:hre};var Dg=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"addN\"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(\" + \");return`\n ${se(\"index\")} {\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let flatIndex = index * ${this.workPerThread} + i;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n ${e.join(`\n `)}\n setOutputAtIndex(flatIndex, ${t});\n }\n }\n }\n `}};function gre(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Ft({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new Dg(s);return t.runWebGPUProgram(a,o,n)}var kM={kernelName:Mo,backendName:\"webgpu\",kernelFunc:gre};var Og=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`),`\n const tileSize = ${this.workgroupSize[0]};\n var tile : array, ${this.workgroupSize[0]}>;\n ${se()} {\n var x = i32(workgroupId.x) * tileSize + i32(localId.x);\n var y = i32(workgroupId.y) * tileSize + i32(localId.y);\n let width = uniforms.outShape[0];\n let height = uniforms.outShape[1];\n if (x < width && y < height) {\n tile[localId.y][localId.x] = f32(A[y * width + x]);\n }\n workgroupBarrier();\n\n x = i32(workgroupId.y) * tileSize + i32(localId.x);\n y = i32(workgroupId.x) * tileSize + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var Pg=class{constructor(e,t){this.variableNames=[\"A\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o\"} bestValue)\n { bestValue = candidate; }`,t=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?e=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"?(e=\" bestValue = bestValue * candidate; \",t=\"1.0\"):this.reduceType===\"all\"?(e=\" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); \",t=\"1.0\"):this.reduceType===\"any\"&&(e=\" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); \",t=\"0.0\");let o=this.reduceType===\"mean\"?\"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));\":\"setOutputAtIndex(outputIndex, bestValue);\";return`\n fn DIV_CEIL(a : u32, b : u32) -> u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestValues : array;\n `}\n fn getOffset(outputIndex : i32) -> i32 {\n let outputCoords = getCoordsFromIndex(outputIndex);\n let offset = ${this.outputShape.length===1?\"outputCoords\":\"outputCoords[0]\"} * uniforms.reduceSize;\n return offset;\n }\n ${se(\"index\")} {\n let outputIndex = index / i32(workgroupSizeX);\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), workgroupSizeX);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + i32(workgroupSizeX)) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), workgroupSizeX);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n ${e}\n xBestValues[localId.x] = bestValue;\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n ${o}\n }\n }\n `}};function qr(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=S.getAxesPermutation(p,s),c=r;u!=null&&(c=Nr({inputs:{x:r},attrs:{perm:u},backend:n}),p=S.getInnerMostAxes(p.length,s),a.push(c)),S.assertAxesAreInnerMostDims(o,p,s);let[l,m]=S.computeOutAndReduceShapes(c.shape,p),d=l;t&&(d=S.expandShapeToKeepDim(l,i));let f;if((o===\"max\"||o===\"prod\")&&n.shouldExecuteOnCPU([c])){let h=n.tensorMap.get(c.dataId).values;switch(o){case\"max\":let g=oM(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=pM(c.shape,c.dtype,h,p);f=n.makeTensorInfo(b,C,x);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=y.sizeFromShape(m),x=y.sizeFromShape(c.shape)/h,b={windowSize:h,inSize:h,batchSize:x,outSize:1},C=o===\"mean\"?\"float32\":ka(r.dtype),w=[{type:\"int32\",data:[h]}],k=new Mg(b,o),_=n.runWebGPUProgram(k,[c],C,w);a.push(_),f=de({inputs:{x:_},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function yre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,\"all\",t)}var TM={kernelName:Lo,backendName:\"webgpu\",kernelFunc:yre};function bre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,\"any\",t)}var _M={kernelName:Bo,backendName:\"webgpu\",kernelFunc:bre};var vc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[t];this.op=o===\"min\"?\"<\":\">\";let[s,a]=S.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=ue(this.outputShape),y.sizeFromShape(a)<32||y.sizeFromShape(s)>1e3?(this.type=\"plain\",this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type=\"shared\",this.dispatch=re(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${$o(this.inputShape.length-1)}`,t=()=>{let o=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(o+=\"outputCoords,\");else for(let n=0;n u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${se(\"index\")} {\n let outputIndex = index / i32(workgroupSizeX);\n let reduceLength = ${e()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + i32(workgroupSizeX)) {\n let candidate = getX(${t()} k);\n if (!isnan(candidate) && candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = k;\n }\n }\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = bestIndex;\n workgroupBarrier();\n\n var reduceSize = min(u32(reduceLength), workgroupSizeX);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = xBestIndices[localId.x + interval];\n }\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n setOutputAtIndexI32(outputIndex, xBestIndices[localId.x]);\n }\n }\n `:`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${t()} 0);\n let reduceLength = ${e()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${t()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};function Cre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=new vc(p.shape,a[0],\"max\"),l=[{type:\"float32\",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var EM={kernelName:Vo,backendName:\"webgpu\",kernelFunc:Cre};function Sre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=new vc(p.shape,a[0],\"min\"),l=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var $M={kernelName:Za,backendName:\"webgpu\",kernelFunc:Sre};var wre=Se({opType:Q.ASIN}),AM={kernelName:ia,backendName:\"webgpu\",kernelFunc:wre};var Ire=Se({opType:Q.ASINH}),RM={kernelName:ua,backendName:\"webgpu\",kernelFunc:Ire};var vre=Se({opType:Q.ATAN}),FM={kernelName:pa,backendName:\"webgpu\",kernelFunc:vre};var kre=ot({opType:ye.ATAN2}),DM={kernelName:la,backendName:\"webgpu\",kernelFunc:kre};var Nre=Se({opType:Q.ATANH}),OM={kernelName:ca,backendName:\"webgpu\",kernelFunc:Nre};var Wl=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,\",this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e=\"resultValue = max(value, resultValue);\";this.poolType===\"avg\"&&(e=\"resultValue = resultValue + value; count = count + 1.0;\");let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / count\"),`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let xRCCorner = vec2(coords.yz) * uniforms.stride - uniforms.pad;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};\n var count = 0.0;\n\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilation.x) {\n let xR = xRCorner + wR;\n\n if (xR < 0 || xR >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + uniforms.dilation.y) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.y) {\n continue;\n }\n\n let value = getX(batch, xR, xC, coords[3]);\n ${e}\n }\n }\n\n setOutputAtIndex(index, ${t});\n }\n }\n `}};var Lg=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"stride : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let xRCCorner = coords.yz * uniforms.stride;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n let value = getX(batch, xRCorner, xCCorner, d);\n setOutputAtIndex(index, value);\n }\n }\n `}};function Ul(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return qr(n,s,a,\"max\",t)}var PM={kernelName:yn,backendName:\"webgpu\",kernelFunc:Ul};function uI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,\"mean\",t)}var MM={kernelName:Sn,backendName:\"webgpu\",kernelFunc:uI};function Bg(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return Ft({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type===\"VALID\"){let a=r.shape.length,i=de({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=uI({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=Ul({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=de({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new Lg(e):(t===\"avg\"?n=new Wl(e,\"avg\"):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Wl(e,\"max\")),s.push({type:\"int32\",data:[e.padInfo.top,e.padInfo.left]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]},{type:\"int32\",data:[e.inHeight,e.inWidth]},{type:\"int32\",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Tre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=S.computePool2DInfo(n.shape,s,a,u,i,p);return Bg(n,c,\"avg\",t)}var LM={kernelName:zo,backendName:\"webgpu\",kernelFunc:Tre};function _re(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Gu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var BM={kernelName:Wo,backendName:\"webgpu\",kernelFunc:_re};var Vg=class{constructor(e,t){this.variableNames=[\"source\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Rt(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=Rt(this.rank),t=Ere(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>\"sourceLoc = uniforms.start + coords;\"):o=this.outputShape.map((s,a)=>`sourceLoc.${pI[a]} = uniforms.start.${$o(a)} + coords.${pI[a]};`),`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${e};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${t}));\n }\n }\n `}},pI=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function Ere(r){if(r===1)return\"sourceLoc\";if(r<=6)return pI.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function ds(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=ut.parseSliceParams(n,s,a);if(ut.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.tensorMap.get(n.dataId),m=fM(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Vg(i,p),c=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var VM={kernelName:_s,backendName:\"webgpu\",kernelFunc:ds};var $re=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=[],f=de({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Nr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=de({inputs:{x:h},backend:t,attrs:{shape:c}}),x=ds({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},zM={kernelName:xs,backendName:\"webgpu\",kernelFunc:$re};var Are=`\n fn bincount_write(index: i32, value: f32) {\n var oldValue = atomicLoad(& (result[index]));\n var exchanged = false;\n for (; !exchanged;) {\n let newValueF32 = bitcast(oldValue) + value;\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(\n &(result[index]), oldValue, newValue);\n oldValue = res.old_value;\n exchanged = res.exchanged;\n }\n }\n`,Rre=`\n fn bincount_write(index: i32, value: f32) {\n result[index] = value;\n }\n`,kc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"binCountSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push(\"w\"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return`\n ${this.binaryOutput?Rre:Are}\n ${se(\"index\")} {\n ${this.rank===1?`if (index < uniforms.xShape) {\n let indexVal = i32(getX(index));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"f32(getW(index))\":\"1.\"};\n bincount_write(indexVal, value);\n }\n }`:`let coord = getCoordsFromIndex(index);\n if (coordsInBounds2D(coord, uniforms.xShape)) {\n let indexVal = i32(getX(coord[0], coord[1]));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"f32(getW(coord[0], coord[1]))\":\"1.\"};\n bincount_write(coord.x * uniforms.binCountSize + indexVal, value);\n }\n }`}\n }\n `}};function Fre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=dr({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new kc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var WM={kernelName:Ja,backendName:\"webgpu\",kernelFunc:Fre};var cI=ot({opType:ye.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:uM}),UM={kernelName:Nn,backendName:\"webgpu\",kernelFunc:cI};function qa(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:t})}var GM={kernelName:ai,backendName:\"webgpu\",kernelFunc:qa};function HM(r,e){let t=new Ro(r.shape,Q.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function lI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Ft({inputs:{x:n},backend:t});let a=Vr(n.shape),i=lI({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=po({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=qa({inputs:{input:n},backend:t}),i=lI({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=U3(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return HM(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=cI({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var qM={kernelName:co,backendName:\"webgpu\",kernelFunc:lI};var Dre=Se({opType:Q.CEIL,cpuKernelImpl:G3}),KM={kernelName:Uo,backendName:\"webgpu\",kernelFunc:Dre};var zg=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workgroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${se(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue : vec4;\n for (var i = 0; i < 4; i = i + 1) {\n if (isnan(value[i])) {\n clampedValue[i] = value[i];\n } else {\n clampedValue[i] = clamp(value[i], uniforms.minVal, uniforms.maxVal);\n }\n }\n\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var Wg=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${se(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n if (isnan(value)) {\n setOutputAtIndex(index, value);\n return;\n }\n setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal));\n }\n }\n `}};function Ore(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:\"float32\",data:[s]},{type:\"float32\",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new zg(n.shape):i=new Wg(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var jM={kernelName:lo,backendName:\"webgpu\",kernelFunc:Ore};var Ug=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=S.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;sqa({inputs:{input:C},backend:t})),h=r.map(C=>qu({inputs:{input:C},backend:t})),g=Nc(f,e,t),x=Nc(h,e,t),b=po({inputs:{real:g,imag:x},backend:t});return f.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let f=r.map(k=>{let $=[-1,y.sizeFromShape(k.shape.slice(e))];return de({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=S.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=H3(h,g,o,x),C=S.computeOutShape(r.map(k=>k.shape),e),w=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),w}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new Ug(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:\"int32\",data:[l[0]]});for(let f=1;ft.disposeData(f.dataId));let d=de({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Pre(r,e,t){let o=S.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>de({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function mI(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:t}):Nc(p,s,t)}var YM={kernelName:ys,backendName:\"webgpu\",kernelFunc:mI};function Mre(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=R=>{switch(R){case 1:return\"resData = x[xIndex];\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = x[xIndex / 4];\";default:throw new Error(`innerElementSize ${R} is not supported.`)}},l=R=>{switch(R){case 1:return\"return W[row * uniforms.wShape[3] + colIn];\";case 4:return\"return W[row * uniforms.wShape[3] / 4 + colIn];\";default:throw new Error(`innerElementSize ${R} is not supported.`)}},m=r?`\n let coord = vec4(batch, xRow, xCol, xCh);\n `:`\n let coord = vec4(batch, xCh, xRow, xCol);\n `,d=r?`\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n `:`\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `,f=r?\"uniforms.xShape[1]\":\"uniforms.xShape[2]\",h=r?\"uniforms.xShape[2]\":\"uniforms.xShape[3]\",g=r?\"row\":\"col\",x=r?\"col\":\"row\",b=`\n let inChannels = uniforms.wShape[2];\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n let outRow = ${g} / outWidth;\n let outCol = ${g} % outWidth;\n\n let WRow = ${x} / (uniforms.filterDims[1] * inChannels);\n let WCol = ${x} / inChannels % uniforms.filterDims[1];\n let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0];\n let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1];\n let xCh = ${x} % inChannels;\n var resData = ${kt(i)}(0.0);\n // The bounds checking is always needed since we use it to pad zero for\n // the 'same' padding type.\n if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) {\n ${m}\n let xIndex = getIndexFromCoords4D(coord, uniforms.xShape);\n ${c(i)}\n }\n return resData;`,C=r?e&&o?`\n let col = colIn * ${i};\n ${b}`:`\n let col = colIn * ${i};\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${kt(i)}(0.0);`:o&&t?`\n let col = colIn * ${i};\n ${b}`:`\n let col = colIn * ${i};\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${kt(i)}(0.0);`,w=`${l(p)}`,k=kt(u),_=r?kt(i):kt(p),$=r?kt(p):kt(i);return`\n ${ur(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${_} {\n ${r?C:w}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${$} {\n ${r?w:C}\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${k}) {\n let col = colIn * ${u};\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\n {\n var value = valueIn;\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n ${d}\n ${Hr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var Gg=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=Ml(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=Ll(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=[\"f32\",\"vec4\"]):(this.innerElementSize=4,this.variableTypes=[\"vec4\",\"vec4\"]),s&&(this.variableNames.push(\"bias\"),this.variableTypes.push(\"vec4\")),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableTypes.push(\"vec4\"))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push(\"bias\"),i&&this.variableNames.push(\"preluActivationWeights\")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Uu(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${Mre(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var Hg=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,\",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return`\n ${ur(this.activation,this.hasPreluActivationWeights,!1,4)}\n fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{\n let coords = vec4(batch, row, col, chan);\n if (coordsInBounds4D(coords, uniforms.xShape)) {\n return getX(batch, row, col, chan);\n } else {\n return 0.0;\n }\n }\n fn readFilt(row : i32, col : i32, xChannel : i32, outChannel : i32) -> f32{\n let coords = vec4(row, col, xChannel, outChannel);\n if(coordsInBounds4D(coords, uniforms.wShape)) {\n return getW(row, col, xChannel, outChannel);\n } else {\n return 0.0;\n }\n }\n fn writeResult(batch : i32, row : i32, col : i32, chan : i32, valueIn : f32) {\n let coords = ${this.isChannelsLast?\"vec4(batch, row, col, chan);\":\"vec4(batch, chan, row, col);\"}\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = valueIn;\n ${Hr(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${se(\"index\")} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let outChannel = ${this.isChannelsLast?\"coords[3];\":\"coords[1];\"}\n let outRow = ${this.isChannelsLast?\"coords[1];\":\"coords[2];\"}\n let outCol = ${this.isChannelsLast?\"coords[2];\":\"coords[3];\"}\n var acc : f32 = 0.0;\n for (var row = 0; row < uniforms.filterDims[0]; row = row + 1) {\n for (var col = 0; col < uniforms.filterDims[1]; col = col + 1) {\n let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * row - uniforms.pad[0];\n let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * col - uniforms.pad[1];\n for (var xChannel = 0; xChannel < ${this.isChannelsLast?\"uniforms.xShape[3];\":\"uniforms.xShape[1];\"} xChannel = xChannel + 1) {\n ${this.isChannelsLast?\"let v = readInp(batch, xRow, xCol, xChannel);\":\"let v = readInp(batch, xChannel, xRow, xCol);\"}\n let f = readFilt(row, col, xChannel, outChannel);\n acc = acc + v * f;\n }\n }\n }\n writeResult(batch, outRow, outCol, outChannel, acc);\n }\n `}};var qg=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=`pad : vec2, stride : vec2, dilation : vec2, outWidth : i32, itemsPerBlockRow : i32,\n inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?\"coords[1]\":\"coords[2]\",n=this.isChannelsLast?\"coords[2]\":\"coords[1]\",s=this.isChannelsLast?\"getX(batch, xRow, xCol, ch)\":\"getX(batch, ch, xRow, xCol)\";return`\n ${se(\"index\")} {\n let coords = getCoordsFromIndex(index);\n if(index < uniforms.size) {\n let batch = coords[0];\n let row = ${o};\n let col = ${n};\n let offsetY = (row / uniforms.outWidth) * uniforms.stride[0] - uniforms.pad[0];\n let xRow = offsetY + uniforms.dilation[0] * (col / uniforms.itemsPerBlockRow);\n var value = 0.0;\n if(xRow < uniforms.xShape[${e}] && xRow >= 0) {\n let offsetX = (row % uniforms.outWidth) * uniforms.stride[1] -\n uniforms.pad[1];\n let xCol = offsetX + uniforms.dilation[1] * ((col %\n uniforms.itemsPerBlockRow) / uniforms.inChannels);\n let ch = col % uniforms.inChannels;\n if(xCol < uniforms.xShape[${t}] && xCol >= 0) {\n value = ${s};\n }\n }\n setOutputAtIndex(index, value);\n }\n }\n `}};function Kg(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Lre({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat===\"channelsLast\",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=[],d,f;if(l){let x=t.inHeight*t.inWidth*t.inChannels;d=de({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=de({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=de({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=de({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=Kg(s.shape,p);x!=null&&(s=de({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=Kg(n.shape,p);x!=null&&(n=de({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=Gu({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=de({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Bre({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,strideWidth:l,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,C=b===\"channelsLast\",w=p*u*c,k=h*f,_=C?[t.batchSize,k,w]:[t.batchSize,w,k],$=new qg(_,C),A=[{type:\"int32\",data:[d.top,d.left]},{type:\"int32\",data:[m,l]},{type:\"int32\",data:[x,g]},{type:\"int32\",data:[f]},{type:\"int32\",data:[c*p]},{type:\"int32\",data:[c]}],R=o.runWebGPUProgram($,[r],r.dtype,A),D=[];D.push(R);let P=de({inputs:{x:e},backend:o,attrs:{shape:[1,w,-1]}});if(D.push(P),s!=null){let U=Kg(s.shape,C);U!=null&&(s=de({inputs:{x:s},backend:o,attrs:{shape:U}}),D.push(s))}if(n!=null){let U=Kg(n.shape,C);U!=null&&(n=de({inputs:{x:n},backend:o,attrs:{shape:U}}),D.push(n))}let W=Gu({a:C?R:P,b:C?P:R,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),V=de({inputs:{x:W},backend:o,attrs:{shape:t.outShape}});D.push(W);for(let U of D)o.disposeData(U.dataId);return V}function jg({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat===\"channelsLast\",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=O().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type===\"SAME\"||t.padInfo.type===\"VALID\")))return Lre({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=O().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),f=d>0?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(O().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return Bre({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:\"int32\",data:[t.filterHeight,t.filterWidth]},{type:\"int32\",data:[...x]},{type:\"int32\",data:[t.strideHeight,t.strideWidth]},{type:\"int32\",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new Hg(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,A=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[$]},{type:\"int32\",data:[A]});let R=o.adapterInfo.isIntel();g=new Gg(t,_,$,A,p,i,u,R)}let C=[],w=[r,e];p&&(!c&&n.shape.length===1&&(n=de({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),w.push(n)),u&&(!c&&s.shape.length===1&&(s=de({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),w.push(s)),i===\"leakyrelu\"&&(b.push({type:\"float32\",data:[a]}),g.uniforms+=\" alpha : f32,\");let k=o.runWebGPUProgram(g,w,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function Vre(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return jg({x:n,filter:s,convInfo:m,backend:o})}var QM={kernelName:Go,backendName:\"webgpu\",kernelFunc:Vre};function zre(r=4){let e=s=>{switch(s){case 1:return\"return W[getIndexFromCoords4D(coord, uniforms.wShape)];\";case 4:return`\n let coord1 = vec4(coordX, coordY, col + 1, rowInner);\n let coord2 = vec4(coordX, coordY, col + 2, rowInner);\n let coord3 = vec4(coordX, coordY, col + 3, rowInner);\n let v0 = W[getIndexFromCoords4D(coord, uniforms.wShape)];\n let v1 = W[getIndexFromCoords4D(coord1, uniforms.wShape)];\n let v2 = W[getIndexFromCoords4D(coord2, uniforms.wShape)];\n let v3 = W[getIndexFromCoords4D(coord3, uniforms.wShape)];\n return vec4(v0, v1, v2, v3);\n `;default:throw new Error(`innerElementSize ${s} is not supported.`)}},o=`if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${`\n let outRow = row / uniforms.outShape[2];\n let outCol = row % uniforms.outShape[2];\n\n let WRow = col / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let WCol = col / uniforms.outBackprop[3] % uniforms.filterDims[1];\n let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.stride[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.stride[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${kt(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${kt(r)}(0.0);\n }\n let coord = vec4(\n batch,\n i32(xR),\n i32(xC),\n col % uniforms.outBackprop[3]);\n return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`}\n }\n return ${kt(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${kt(r)} {\n let col = colIn * ${r};\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${kt(r)} {\n let col = colIn * ${r};\n let coordX = uniforms.filterDims.x - 1 -\n row / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let coordY = uniforms.filterDims.y - 1 -\n (row / uniforms.outBackprop[3]) % uniforms.filterDims[1];\n if (row < uniforms.dimInner && col < uniforms.dimBOuter &&\n coordX >= 0 && coordY >= 0) {\n let rowInner = row % uniforms.outBackprop[3];\n let coord = vec4(coordX, coordY, col, rowInner);\n ${e(r)}\n }\n return ${kt(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${kt(r)}) {\n let col = colIn * ${r};\n if (row < uniforms.dimAOuter && (col + ${r-1}) < uniforms.dimBOuter) {\n var value = valueInput;\n let outCoord = vec4(\n batch,\n row / uniforms.outShape[2],\n row % uniforms.outShape[2],\n col);\n result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value;\n }\n }`}var Xg=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.inShape,y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=Ml(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=Ll(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=[\"vec4\",\"f32\"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Wu(this.elementsPerThread,this.workgroupSize):Uu(this.elementsPerThread,this.workgroupSize);return`\n ${zre(this.isVec4?4:1)}\n ${e}\n `}};var Yg=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1;return`\n ${se(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[${o}];\n\n let dyCorner = vec2(coords[${e}], coords[${t}]) - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = (f32(dyRCorner) + f32(wR)) / f32(uniforms.stride.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) || fract(dyR) > 0.0 ||\n wRPerm < 0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = (f32(dyCCorner) + f32(wC)) / f32(uniforms.stride.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0 || wCPerm < 0) {\n continue;\n }\n let idyC = i32(dyC);\n\n for (var d2 = 0; d2 < uniforms.outBackprop[3]; d2 = d2 + 1) {\n if (${this.isChannelsLast}) {\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n } else {\n let xValue = getDy(batch, d2, idyR, idyC);\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Wre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=[{type:\"int32\",data:[m.filterHeight,m.filterWidth]},{type:\"int32\",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(O().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.filterHeight<=2&&m.filterWidth<=2&&m.outChannels<=16&&m.inChannels===1)f=new Yg(m);else{f=new Xg(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:\"uint32\",data:[h]},{type:\"uint32\",data:[g]},{type:\"uint32\",data:[x]})}return t.runWebGPUProgram(f,[n,s],\"float32\",d)}var ZM={kernelName:Ho,backendName:\"webgpu\",kernelFunc:Wre};var Ure=Se({opType:Q.COS}),JM={kernelName:qo,backendName:\"webgpu\",kernelFunc:Ure};var Gre=Se({opType:Q.COSH}),eL={kernelName:Ko,backendName:\"webgpu\",kernelFunc:Gre};var Qg=class{constructor(e,t,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n===\"bilinear\"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${e} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${t} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${t}`];return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let height_ratio = f32(${o});\n let width_ratio = f32(${a});\n let b = coords[0];\n let y = coords[1];\n let x = coords[2];\n let d = coords[3];\n // get box vals\n let y1 = getBoxes(b, 0);\n let x1 = getBoxes(b, 1);\n let y2 = getBoxes(b, 2);\n let x2 = getBoxes(b, 3);\n // get image in batch index\n let bInd = i32(round(getBoxInd(b)));\n if(bInd < 0 || bInd >= uniforms.outShape[0]) {\n return;\n }\n let height_scale = ${n};\n let width_scale = ${i};\n let in_y = ${s};\n if( in_y < 0.0 || in_y > ${e} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let sourceFracIndexCR = vec2(in_x,in_y);\n if(${this.methodId} == 1) {\n // Compute the four integer indices.\n let sourceFloorCR = vec2(sourceFracIndexCR);\n let sourceCeilCR = vec2(ceil(sourceFracIndexCR));\n let topLeft = getImage(bInd, sourceFloorCR.y, sourceFloorCR.x, d);\n let bottomLeft = getImage(bInd, sourceCeilCR.y, sourceFloorCR.x, d);\n let topRight = getImage(bInd, sourceFloorCR.y, sourceCeilCR.x, d);\n let bottomRight = getImage(bInd, sourceCeilCR.y, sourceCeilCR.x, d);\n let fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n let top = topLeft + (topRight - topLeft) * fracCR.x;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n let newValue = top + (bottom - top) * fracCR.y;\n setOutputAtIndex(index, newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n let sourceNearestCR = vec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n let newValue = getImage(\n bInd, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutputAtIndex(index, newValue);\n }\n }\n }\n `}};var Hre=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Qg(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],\"float32\",l)},tL={kernelName:Yo,backendName:\"webgpu\",kernelFunc:Hre};var Ku;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Ku||(Ku={}));var Gl=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Ku.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${rL(e,\"coords\",this.op)})`,n=this.outputShape[this.outputShape.length-1],s=\"\",a=\"\";return this.exclusive?(s=this.reverse?`end != ${n-1}`:\"end != 0\",a=this.reverse?\"end + 1\":\"end - 1\"):(s=this.reverse?`end + pow2 < ${n}`:\"end >= pow2\",a=this.reverse?\"end + pow2\":\"end - pow2\"),`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${oL(e,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${oL(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${rL(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function rL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function oL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function Zg(r,e,t,o,n,s){let a=e.shape.length,i=S.getAxesPermutation([o],a),p=e;i!=null&&(p=Nr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=S.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Ft({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new Gl(r,p.shape,!1,s),f=l,h=[{type:\"float32\",data:[m]}];l=t.runWebGPUProgram(d,[l],l.dtype,h),t.disposeData(f.dataId)}if(n){let m=new Gl(r,p.shape,n,s),d=l,f=[{type:\"float32\",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=S.getUndoAxesPermutation(i),d=Nr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function qre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Zg(Ku.Prod,n,t,s,a,i)}var nL={kernelName:jo,backendName:\"webgpu\",kernelFunc:qre};function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Zg(Ku.Sum,n,t,s,a,i)}var sL={kernelName:Xo,backendName:\"webgpu\",kernelFunc:Kre};function jre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,c=y.sizeFromShape(s.shape)>0,l=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=dr({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new kc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var aL={kernelName:ti,backendName:\"webgpu\",kernelFunc:jre};var Jg=class{constructor(e,t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let h = ${this.getHeightCoordString()};\n let w = ${this.getWidthCoordString()};\n let d = ${this.getDepthCoordString()};\n\n let in_h = h / uniforms.blockSize;\n let offset_h = h % uniforms.blockSize;\n let in_w = w / uniforms.blockSize;\n let offset_w = w % uniforms.blockSize;\n let offset_d = (offset_h * uniforms.blockSize + offset_w) *\n ${this.getOutputDepthSize()};\n let in_d = d + offset_d;\n\n let rlt = ${this.getInputSamplingString()};\n setOutputAtIndex(index, rlt);\n }\n }`}getHeightCoordString(){return this.dataFormat===\"NHWC\"?\"coords[1]\":\"coords[2]\"}getWidthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[2]\":\"coords[3]\"}getDepthCoordString(){return this.dataFormat===\"NHWC\"?\"coords[3]\":\"coords[1]\"}getOutputDepthSize(){return this.dataFormat===\"NHWC\"?\"uniforms.outShape[3]\":\"uniforms.outShape[1]\"}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function Xre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=[{type:\"int32\",data:[s]}],g=new Jg(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var iL={kernelName:Qo,backendName:\"webgpu\",kernelFunc:Xre};var ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pad : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push(\"bias\"),a&&this.variableNames.push(\"preluActivationWeights\"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return`\n ${ur(this.activation,this.hasPreluActivation,!1,4)}\n\n var mm_Asub : array, ${o}>;\n var mm_Bsub : array, ${this.filterHeight}>;\n fn readX(batch : i32, channel : i32, row : i32, col : i32) -> f32 {\n var value = 0.0;\n if (row >=0 && row < uniforms.inDims[0] && col >=0 && col < uniforms.inDims[1])\n {\n value = getX(batch, channel, row, col);\n }\n return value;\n }\n\n ${se()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pad;\n let channelMul = uniforms.wShape[3];\n let d1 = coords[1] / channelMul;\n let q = coords[1] % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n\n // Load one tile of X into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workgroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) {\n let rowOffset = inputRow - localRow;\n let colOffset = inputCol - localCol;\n mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset);\n }\n }\n\n // Load one tile of W into local memory.\n var wIndex = i32(localIndex);\n ${e, inDims : vec2,\",this.workgroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1]),y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return`\n ${ur(this.activation,this.hasPreluActivation,!0,4)}\n fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 {\n var value = vec4(0.0);\n if (col >=0 && col < uniforms.inDims[1]) {\n value = getX(batch, row, col, channel);\n }\n return value;\n }\n\n const strideHeight = ${this.convInfo.strideHeight};\n const strideWidth = ${this.convInfo.strideWidth};\n ${se()} {\n let batch = i32(globalId.z) / uniforms.outShape[1];\n let r = i32(globalId.z) % uniforms.outShape[1];\n let c = i32(globalId.y) * ${this.workPerThread};\n let d1 = i32(globalId.x) * 4;\n let xRCCorner = vec2(r, c) * vec2(strideHeight, strideWidth) - uniforms.pad;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${e}>;\n var dotProd : array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n\n // Use constant instead of uniform can give better performance.\n for (var wR = 0; wR < ${this.convInfo.filterHeight}; wR = wR + 1) {\n let xR = xRCorner + wR;\n if (xR >=0 && xR < uniforms.inDims[0]) {\n for (var i = 0; i < ${e}; i++) {\n xVals[i] = readX(batch, xR, xCCorner + i, d1);\n }\n for (var wC = 0; wC < ${this.convInfo.filterWidth}; wC = wC + 1) {\n let wValue = getW(wR, wC, d1, 0);\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = fma(xVals[i * strideWidth + wC], wValue, dotProd[i]);\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = dotProd[i];\n ${Hr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var _c=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, stride : vec2, dilation : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?\"getX(batch, xR, xC, d1);\":\"getX(batch, d1, xR, xC);\";return`\n ${ur(this.activation,this.hasPreluActivation,!1,4)}\n\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.${this.isChannelsLast?\"yz\":\"zw\"}) * uniforms.stride - uniforms.pad;\n let d2 = coords[${this.isChannelsLast?3:1}];\n let channelMul = uniforms.wShape[3];\n let d1 = d2 / channelMul;\n let q = d2 % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n let inputRowEnd = inputRowStart + uniforms.filterHeight *\n uniforms.dilation[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilation[1];\n\n // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get\n // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all\n // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC.\n // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW.\n var value = 0.0;\n\n // Extract if checking out of for loop for performance.\n if (inputRowStart >= 0 && inputColStart >= 0 &&\n inputRowEnd < uniforms.inDims[0] &&\n inputColEnd < uniforms.inDims[1]) {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilation[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilation[1];\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n } else {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilation[0];\n\n if (xR < 0 || xR >= uniforms.inDims[0]) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilation[1];\n\n if (xC < 0 || xC >= uniforms.inDims[1]) {\n continue;\n }\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n }\n ${Hr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function Yre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=S.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),f=[{type:\"int32\",data:[d.padInfo.top,d.padInfo.left]},{type:\"int32\",data:[d.inHeight,d.inWidth]}],h=d.dataFormat===\"channelsLast\",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new ex(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?g=new Tc(d):(g=new _c(d),f.push({type:\"int32\",data:[d.filterHeight]},{type:\"int32\",data:[d.filterWidth]},{type:\"int32\",data:[d.strideHeight,d.strideWidth]},{type:\"int32\",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var uL={kernelName:Zo,backendName:\"webgpu\",kernelFunc:Yre};var dI=ot({opType:ye.MUL,cpuKernelImpl:aM,supportsComplex:!0}),pL={kernelName:kn,backendName:\"webgpu\",kernelFunc:dI};function Hl(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,\"sum\",t)}var cL={kernelName:Hn,backendName:\"webgpu\",kernelFunc:Hl};function Qre(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=S.decodeEinsumEquation(n,s.length);S.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=S.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Hl({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var lL={kernelName:ri,backendName:\"webgpu\",kernelFunc:Qre};var Zre=Se({opType:Q.ELU}),mL={kernelName:en,backendName:\"webgpu\",kernelFunc:Zre};var Jre=ot({opType:ye.EQUAL,dtype:\"bool\",cpuKernelImpl:q3}),dL={kernelName:tn,backendName:\"webgpu\",kernelFunc:Jre};var eoe=Se({opType:Q.ERF}),fL={kernelName:ma,backendName:\"webgpu\",kernelFunc:eoe};var fI=Se({opType:Q.EXP,cpuKernelImpl:K3,dtype:\"float32\"}),hL={kernelName:rn,backendName:\"webgpu\",kernelFunc:fI};function tx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),de({inputs:{x:s},backend:o,attrs:{shape:i}})}var gL={kernelName:bs,backendName:\"webgpu\",kernelFunc:tx};var toe=Se({opType:Q.EXPM1,cpuKernelImpl:j3}),xL={kernelName:da,backendName:\"webgpu\",kernelFunc:toe};var ql=class{constructor(e,t){this.variableNames=[\"real\",\"imag\"],this.outputShape=[],this.uniforms=\"exponentMultiplier : f32, denominator: f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return`\n fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 {\n ${this.component===\"real\"?\"return real * expR - imag * expI;\":\"return real * expI + imag * expR;\"}\n }\n\n fn mulMatDFT(batch: i32, index: i32) -> f32 {\n let indexRatio = f32(index) / f32(uniforms.realShape[1]);\n let exponentMultiplierTimesIndexRatio =\n uniforms.exponentMultiplier * indexRatio;\n\n var result = 0.0;\n\n for (var i = 0; i < uniforms.realShape[1]; i = i + 1) {\n // x = (-2|2 * PI / N) * index * i;\n let x = exponentMultiplierTimesIndexRatio * f32(i);\n let expR = cos(x);\n let expI = sin(x);\n let real = getReal(batch, i);\n let imag = getImag(batch, i);\n\n result = result +\n unaryOpComplex(real, expR, imag, expI) / uniforms.denominator;\n }\n\n return result;\n }\n\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n setOutputAtIndex(index, mulMatDFT(coords[0], coords[1]));\n }\n }\n `}};function rx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=de({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ql(\"real\",u),l=new ql(\"imag\",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:\"float32\",data:[d]},{type:\"float32\",data:[f]}],g=t.runWebGPUProgram(c,m,\"float32\",h);i.push(g);let x=t.runWebGPUProgram(l,m,\"float32\",h);i.push(x);let b=po({inputs:{real:g,imag:x},backend:t});i.push(b);let C=de({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(w=>t.disposeData(w.dataId)),C}function roe(r){let{inputs:e,backend:t}=r,{input:o}=e;return rx(o,!1,t)}var yL={kernelName:oi,backendName:\"webgpu\",kernelFunc:roe};var ox=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordX = uniforms.xShape[2] - coords[2] - 1;\n let outputValue = getX(coords[0], coords[1], coordX, coords[3]);\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var bL={kernelName:on,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new ox(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ooe=Se({opType:Q.FLOOR,cpuKernelImpl:X3}),CL={kernelName:nn,backendName:\"webgpu\",kernelFunc:ooe};var noe=ot({opType:ye.INT_DIV,dtype:\"int32\"}),SL={kernelName:sn,backendName:\"webgpu\",kernelFunc:noe};var nx=class{constructor(e,t,o=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?\"textureLoad(src, vec2(coords.yx));\":\"textureLoad(src, vec2(coords.yx), 0)\";return`\n @binding(1) @group(0) var src: ${this.importVideo?\"texture_external\":\"texture_2d\"};\n ${se(\"index\")} {\n let flatIndex = index * uniforms.numChannels;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n let values = ${e};\n for (var i = 0; i < uniforms.numChannels; i = i + 1) {\n result[flatIndex + i] = i32(floor(255.0 * values[i]));\n }\n }\n }\n `}};var wL={kernelName:Zi,backendName:\"webgpu\",kernelFunc:soe},Ec,hI=O().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\"),sx=new Map;function soe(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!=\"undefined\"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!=\"undefined\"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!=\"undefined\"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],d=!1,f=a||i;if(u||p||f){let b;if(d){let D=n;if(!sx.has(D)||sx.get(D).expired){let P={source:D};sx.set(D,t.device.importExternalTexture(P))}b={width:c,height:l,format:null,usage:null,texture:sx.get(D)}}else{if(f){let L=O().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Ec==null||L!==hI)&&(hI=L,Ec=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:hI})),Ec.canvas.width=c,Ec.canvas.height=l,Ec.drawImage(n,0,0,c,l),n=Ec.canvas}let D=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,P=\"rgba8unorm\",M=t.textureManager.acquireTexture(m[1],m[0],P,D);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b={width:c,height:l,format:P,usage:D,texture:M}}let C=y.sizeFromShape(m),w=y.computeStrides(m),k=new nx(m,s,d),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...w]}],$=t.makeTensorInfo([l,c],\"int32\"),A=t.tensorMap.get($.dataId);A.resourceInfo=b;let R=t.runWebGPUProgram(k,[$],\"int32\",_);return t.disposeData($.dataId),R}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,C=0;for(let w=0;w(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var IL={kernelName:an,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let d=new ax(o.shape,a.shape,i.shape,l,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function aoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=S.convertConv2DDataFormat(c),g=S.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return jg({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var vL={kernelName:ho,backendName:\"webgpu\",kernelFunc:aoe};function ioe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=c;f==null&&(f=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=S.computeConv2DInfo(n.shape,s.shape,p,f,u,l,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let C=[{type:\"int32\",data:[h.padInfo.top,h.padInfo.left]},{type:\"int32\",data:[h.inHeight,h.inWidth]}],w;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?w=new Tc(h,x,m,b):(w=new _c(h,x,m,b),C.push({type:\"int32\",data:[h.filterHeight]},{type:\"int32\",data:[h.filterWidth]},{type:\"int32\",data:[h.strideHeight,h.strideWidth]},{type:\"int32\",data:[h.dilationHeight,h.dilationWidth]})),m===\"leakyrelu\"&&(C.push({type:\"float32\",data:[d]}),w.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(w,g,\"float32\",C)}var kL={kernelName:go,backendName:\"webgpu\",kernelFunc:ioe};var ix=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Rt(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var flattenIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexTemp = i32(round(getIndices(coords[0], j)));\n let strideNum = ${e};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function uoe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=S.prepareAndValidate(o,n),m=de({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=de({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=t.readSync(n.dataId),C=t.bufferSync(o),w=Y3(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,w.values)}let f=new ix(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=de({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var NL={kernelName:un,backendName:\"webgpu\",kernelFunc:uoe};var ux=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=poe(this.aShape);return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let resRC = getCoordsFromIndex(index);\n let indexZ = i32(getIndices(resRC.x, resRC.z));\n let inBounds = select(0.0, 1.0, indexZ >= 0 && indexZ < uniforms.aShape[2]);\n setOutputAtIndex(index, inBounds * getA(${e}));\n }\n }\n `}};function poe(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(R.dataId)),t.makeTensorInfo(u.outputShape,A.dtype,A.values)}let h=new ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=de({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var TL={kernelName:Ss,backendName:\"webgpu\",kernelFunc:gI};var coe=ot({opType:ye.GREATER,cpuKernelImpl:J3,dtype:\"bool\"}),_L={kernelName:pn,backendName:\"webgpu\",kernelFunc:coe};var loe=ot({opType:ye.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:Z3}),EL={kernelName:cn,backendName:\"webgpu\",kernelFunc:loe};function moe(r){let{inputs:e,backend:t}=r,{input:o}=e;return rx(o,!0,t)}var $L={kernelName:ni,backendName:\"webgpu\",kernelFunc:moe};var doe=Se({opType:Q.IS_FINITE,dtype:\"bool\"}),AL={kernelName:fa,backendName:\"webgpu\",kernelFunc:doe};var foe=Se({opType:Q.IS_INF,dtype:\"bool\"}),RL={kernelName:ha,backendName:\"webgpu\",kernelFunc:foe};var hoe=Se({opType:Q.IS_NAN,dtype:\"bool\"}),FL={kernelName:ln,backendName:\"webgpu\",kernelFunc:hoe};function goe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Ro(n.shape,Q.LEAKYRELU);return i.uniforms=\"alpha : f32,\",t.runWebGPUProgram(i,[n],\"float32\",a)}var DL={kernelName:mn,backendName:\"webgpu\",kernelFunc:goe};var xoe=ot({opType:ye.LESS,dtype:\"bool\",cpuKernelImpl:tM}),OL={kernelName:dn,backendName:\"webgpu\",kernelFunc:xoe};var yoe=ot({opType:ye.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:eM}),PL={kernelName:fn,backendName:\"webgpu\",kernelFunc:yoe};var boe=Se({opType:Q.LOG,cpuKernelImpl:rM}),ML={kernelName:hn,backendName:\"webgpu\",kernelFunc:boe};var Coe=Se({opType:Q.LOG1P}),LL={kernelName:ga,backendName:\"webgpu\",kernelFunc:Coe};var Soe=ot({opType:ye.LOGICAL_AND,dtype:\"bool\"}),BL={kernelName:gn,backendName:\"webgpu\",kernelFunc:Soe};var woe=Se({opType:Q.LOGICAL_NOT}),VL={kernelName:xn,backendName:\"webgpu\",kernelFunc:woe};var Ioe=ot({opType:ye.MAX,cpuKernelImpl:nM}),zL={kernelName:bn,backendName:\"webgpu\",kernelFunc:Ioe};function voe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=S.computePool2DInfo(n.shape,s,a,u,i,p);return Bg(n,c,\"max\",t)}var WL={kernelName:Cn,backendName:\"webgpu\",kernelFunc:voe};function koe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,\"min\",t)}var UL={kernelName:wn,backendName:\"webgpu\",kernelFunc:koe};var Noe=ot({opType:ye.MIN,cpuKernelImpl:sM}),GL={kernelName:In,backendName:\"webgpu\",kernelFunc:Noe};var px=class{constructor(e,t,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(\",\"),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:\"\"}`).join(\",\"),n=e===1?\"start\":\"start[i]\",s=e===1?\"end\":\"end[i]\",a=e===1?\"outC\":\"outC[i]\",i=Rt(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${t});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${e}; i = i + 1) {\n if (${a} < ${n}) {\n ${a} = ${n} * 2 - ${a} - ${this.offset};\n } else if(${a} >= ${s}) {\n ${a} = (${s} - 1) * 2 - ${a} + ${this.offset};\n }\n }\n let coords = outC - start;\n setOutputAtIndex(index, getX(${p}));\n }\n }\n `}};var HL={kernelName:vn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:\"int32\",data:[c[0],c[1]]})),p=new px(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Toe=ot({opType:ye.MOD}),qL={kernelName:ya,backendName:\"webgpu\",kernelFunc:Toe};function _oe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=iM(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Ro(o.shape,Q.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var KL={kernelName:ws,backendName:\"webgpu\",kernelFunc:_oe};function Eoe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Lt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var jL={kernelName:Tn,backendName:\"webgpu\",kernelFunc:Eoe};function $oe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Lt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var XL={kernelName:_n,backendName:\"webgpu\",kernelFunc:$oe};var cx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"onValue : f32, offValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"onehot\"}getUserCode(){return`\n ${se(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue,\n f32(i32(round(getX(coords.x))) == coords.y)));\n }\n }\n `}};function Aoe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new cx(u,a),l=de({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}],d=t.runWebGPUProgram(c,[l],s,m);t.disposeData(l.dataId);let f=[...n.shape,a],h=de({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YL={kernelName:En,backendName:\"webgpu\",kernelFunc:Aoe};function Kl(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=qa({inputs:{input:o},backend:t}),s=Kl({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=Kl({inputs:{x:a},backend:t}),p=po({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return dr({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var QL={kernelName:Fs,backendName:\"webgpu\",kernelFunc:Kl};function ZL(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=qa({inputs:{input:o},backend:t}),s=ZL({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=Kl({inputs:{x:a},backend:t}),p=po({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return dr({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JL={kernelName:Is,backendName:\"webgpu\",kernelFunc:ZL};function Roe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return tx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=tx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=mI({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eB={kernelName:vs,backendName:\"webgpu\",kernelFunc:Roe};var lx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){let e=this.xShape.length,t=Rt(e),o=this.xShape.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),n=this.xShape.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:\"\"}`).join(\",\"),s=e>1?`${t}(${o})`:`${o}`,a=e>1?`${t}(${n})`:`${n}`,i=e>1?\"any(outC < start)\":\"outC < start\",p=e>1?\"any(outC >= end)\":\"outC >= end\",u=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let start = ${s};\n let end = ${a};\n let outC = getCoordsFromIndex(index);\n\n if (${i} || ${p}) {\n setOutputAtIndex(index, uniforms.constantValue);\n } else {\n let coords = outC - start;\n setOutputAtIndex(index, getX(${u}));\n }\n }\n }\n `}};var xI=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Ft({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return dr({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:\"float32\",data:[a]}];s.map(u=>i.push({type:\"int32\",data:[u[0],u[1]]}));let p=new lx(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tB={kernelName:$n,backendName:\"webgpu\",kernelFunc:xI};var Foe=ot({opType:ye.POW}),rB={kernelName:An,backendName:\"webgpu\",kernelFunc:Foe};function Doe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Hu(ye.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var oB={kernelName:Rn,backendName:\"webgpu\",kernelFunc:Doe};function Ooe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,\"prod\",t)}var nB={kernelName:Fn,backendName:\"webgpu\",kernelFunc:Ooe};var Poe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=cM(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sB={kernelName:ks,backendName:\"webgpu\",kernelFunc:Poe};var yI=ot({opType:ye.DIV}),aB={kernelName:Jo,backendName:\"webgpu\",kernelFunc:yI};var Moe=Se({opType:Q.RECIPROCAL}),iB={kernelName:Dn,backendName:\"webgpu\",kernelFunc:Moe};var Loe=Se({opType:Q.RELU}),uB={kernelName:On,backendName:\"webgpu\",kernelFunc:Loe};var Boe=Se({opType:Q.RELU6}),pB={kernelName:Ln,backendName:\"webgpu\",kernelFunc:Boe};var mx=class{constructor(e,t,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC =\n (vec2(rc) + vec2(uniforms.halfPixelCenters)) *\n effectiveInputOverOutputRatioRC - vec2(uniforms.halfPixelCenters);\n\n // Compute the four integer indices.\n let sourceFloorRC = vec2(sourceFracIndexRC);\n let sourceCeilRC = vec2(\n min(vec2(uniforms.xShape.yz) - vec2(1.0), ceil(sourceFracIndexRC)));\n\n let topLeft = getX(b, sourceFloorRC.x, sourceFloorRC.y, d);\n let bottomLeft = getX(b, sourceCeilRC.x, sourceFloorRC.y, d);\n let topRight = getX(b, sourceFloorRC.x, sourceCeilRC.y, d);\n let bottomRight = getX(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n let fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n let top = topLeft + (topRight - topLeft) * fracRC.y;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n let newValue = top + (bottom - top) * fracRC.x;\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function Voe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[i?.5:0]}],f=new mx(n.shape,p,u);return t.runWebGPUProgram(f,[n],\"float32\",d)}var cB={kernelName:Mn,backendName:\"webgpu\",kernelFunc:Voe};var dx=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":e=\"vec2(rc) * effectiveInputOverOutputRatioRC\",`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC = ${e};\n\n // Compute the coordinators of nearest neighbor point.\n let inputShapeRC = vec2(f32(uniforms.xShape.y), f32(uniforms.xShape.z));\n let sourceNearestRC = vec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + uniforms.roundBase)));\n let newValue = getX(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function zoe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[s?.5:0]}],f=new dx(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var lB={kernelName:Pn,backendName:\"webgpu\",kernelFunc:zoe};var fx=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\" axis : vec4,\",this.shaderKey=\"reverse\"}getUserCode(){return`\n \n // Using uniform variables as judging conditions, so the function has\n // coherent execution within all threads.\n fn getReverseCoords(coords : vec4) -> vec4 {\n var reverseCoords = coords;\n if (uniforms.axis[0] == 1) {\n reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1;\n }\n if (uniforms.axis[1] == 1) {\n reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1;\n }\n if (uniforms.axis[2] == 1) {\n reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1;\n }\n if (uniforms.axis[3] == 1) {\n reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1;\n }\n\n return reverseCoords;\n }\n \n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let reverseCoords = getReverseCoords(coords);\n setOutputAtIndex(index, getX(reverseCoords[0],\n reverseCoords[1], reverseCoords[2], reverseCoords[3]));\n }\n }\n `}};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return Ft({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),c=[0,0,0,0];u.forEach(g=>{let x=g+4-a;c[x]=1});let l=[{type:\"int32\",data:c}],m=de({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new fx(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=de({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var mB={kernelName:Bn,backendName:\"webgpu\",kernelFunc:Woe};var hx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=e,typeof t==\"number\"?(this.uniforms+=\" fillValue : f32,\",this.fillSnippet=\"var outputValue = uniforms.fillValue;\",this.shaderKey+=\"_float\"):(this.uniforms+=\" fillValue : vec3,\",this.fillSnippet=\"var outputValue = uniforms.fillValue[coords[3]];\",this.shaderKey+=\"_vec3\")}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordXFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.cosRadians - (f32(coords[1]) - uniforms.centerY) *\n uniforms.sinRadians;\n let coordYFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.sinRadians + (f32(coords[1]) - uniforms.centerY) *\n uniforms.cosRadians;\n let coordX = i32(round(coordXFloat + uniforms.centerX));\n let coordY = i32(round(coordYFloat + uniforms.centerY));\n ${this.fillSnippet}\n if(coordX >= 0 && coordX < uniforms.xShape[2] && coordY >= 0 &&\n coordY < uniforms.xShape[1]) {\n outputValue = getX(coords[0], coordY, coordX, coords[3]);\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var dB={kernelName:es,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new hx(o.shape,s),[u,c]=S.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:\"float32\",data:[u]},{type:\"float32\",data:[c]},{type:\"float32\",data:[Math.sin(n)]},{type:\"float32\",data:[Math.cos(n)]}];return typeof s==\"number\"?l.push({type:\"float32\",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:\"float32\",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var Uoe=Se({opType:Q.RSQRT,cpuKernelImpl:lM}),fB={kernelName:Vn,backendName:\"webgpu\",kernelFunc:Uoe};var Gi=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=[\"updates\",\"indices\"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=ue(e),this.dispatch=re(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=Rt(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e=\"\";this.indicesRank===1?e=\"coords[0]\":this.indicesRank===2&&(e=\"coords[0], j\");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?\"uniforms.strides[j]\":\"uniforms.strides\",n=\"\",s=\"\";this.dispatchLayout.x.length===1?(n=\"flattenedIndex\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 {\n return index;\n }\n `):this.dispatchLayout.x.length===2&&(n=\"vec2(flattenedIndex, coords[1])\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> vec2 {\n // N.B. |updates| could be a scalar tensor, conceptually representing a\n // 2D tensor with all values equal to that. By design, its size must be\n // the same as |outShape[1]| in one dimension, and |indicesShape[0]|\n // gives the other.\n let sliceSize = uniforms.outShape[1];\n let d0 = index / sliceSize;\n let d1 = index - d0 * sliceSize;\n return vec2(d0, d1);\n }\n `);let i=`getUpdates(${Array.from({length:this.updatesRank},(c,l)=>`coords[${l}]`).join(\", \")})`,p=(c,l)=>{let m=`atomicAdd(${c}, bitcast(${l}))`;this.type===\"float32\"&&(m=`\n {\n var oldBits = 0;\n var newBits = bitcast(${l});\n loop {\n let info = atomicCompareExchangeWeak(${c}, oldBits, newBits);\n if (info.exchanged) {\n break;\n }\n oldBits = info.old_value;\n let oldValue = bitcast(oldBits);\n let newValue = oldValue + (${l});\n newBits = bitcast(newValue);\n }\n }\n `);let d=`atomicStore(${c}, bitcast(${l}));`;return this.sumDupeIndices?m:d};return`\n ${s}\n\n ${se(\"index\")} {\n if (index < uniforms.updatesSize) {\n let coords = getUpdatesCoordsFromFlatIndex(index);\n var flattenedIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexInside = i32(round(${t}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${wc(this.type,!1)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${p(\"&result[flatIndex]\",\"updateValue\")};\n }\n }`}};function Goe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=S.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=de({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=de({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=dr({backend:t,attrs:{shape:m,value:0,dtype:h}}),x=y.sizeFromShape(f.shape),b=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[x]}],C=new Gi(f.shape,i,d.shape.length,f.shape.length,c,m,h),w=t.runWebGPUProgram(C,[f,d],h,b,g),k=de({inputs:{x:w},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(w.dataId),k}var hB={kernelName:zn,backendName:\"webgpu\",kernelFunc:Goe};var gx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"sortedSequence\",\"values\"],this.uniforms=\"numInputs : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return`\n fn findBound(batch: i32, value: f32) -> i32 {\n var left = i32(0);\n var right = uniforms.numInputs;\n while (left < right) {\n var mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${this.side===\"left\"?\"<\":\"<=\"} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let value = getValuesByOutputIndex(index);\n setOutputAtIndexI32(index, findBound(coords[0], value));\n }\n }\n `}};function Hoe(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new gx([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],\"int32\",p)}var gB={kernelName:ii,backendName:\"webgpu\",kernelFunc:Hoe};var xx=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t=\"resRC\",e=\"resRC\";else{let n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],s=[],a=[];for(let i=0;i= 1.0) {\n setOutputAtIndex(index, getA(${t}));\n } else {\n setOutputAtIndex(index, getB(${t}));\n }\n }\n }\n `}};function qoe(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new xx(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var xB={kernelName:Ts,backendName:\"webgpu\",kernelFunc:qoe};var Koe=Se({opType:Q.SIGMOID}),yB={kernelName:Un,backendName:\"webgpu\",kernelFunc:Koe};var joe=Se({opType:Q.SIN}),bB={kernelName:Wn,backendName:\"webgpu\",kernelFunc:joe};var Xoe=Se({opType:Q.SINH}),CB={kernelName:Sa,backendName:\"webgpu\",kernelFunc:Xoe};var bI=ot({opType:ye.SUB,cpuKernelImpl:xM,supportsComplex:!0}),SB={kernelName:Xn,backendName:\"webgpu\",kernelFunc:bI};function Yoe(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Ul({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=S.expandShapeToKeepDim(i.shape,a),u=de({inputs:{x:i},backend:t,attrs:{shape:p}}),c=bI({inputs:{a:n,b:u},backend:t}),l=fI({inputs:{x:c},backend:t}),m=Hl({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=de({inputs:{x:m},backend:t,attrs:{shape:p}}),f=yI({inputs:{a:l,b:d},backend:t});return t.disposeData(i.dataId),t.disposeData(u.dataId),t.disposeData(c.dataId),t.disposeData(l.dataId),t.disposeData(m.dataId),t.disposeData(d.dataId),f}var wB={kernelName:qn,backendName:\"webgpu\",kernelFunc:Yoe};var Qoe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeData(x.dataId)),g},IB={kernelName:Es,backendName:\"webgpu\",kernelFunc:Qoe};var yx=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=le(n.shape,n.dtype,u),l=yM(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new yx(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var vB={kernelName:to,backendName:\"webgpu\",kernelFunc:CI};function Joe(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=S.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let A=t.bufferSync(n),R=t.bufferSync(s),D=y.decodeString(t.readSync(a.dataId)[0]),P=mM(A,R,i,m,c,u,p,l,D,d);return t.makeTensorInfo(i,P.dtype,P.values)}let f=[m/c,c],h=de({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?de({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):Ft({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=de({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),w=CI({inputs:{x:C},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,c]),_=[{type:\"int32\",data:[p]},{type:\"int32\",data:l},{type:\"int32\",data:[k]}];switch(u){case 0:break;case 1:{let A=new Gi([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(A,[g,h],x,_,w)}break;default:{let A=new Gi([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(A,[b,h],x,_,w)}{let A=new Gi([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(A,[g,h],x,_,w)}}let $=de({inputs:{x:w},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(w.dataId),$}var kB={kernelName:li,backendName:\"webgpu\",kernelFunc:Joe};function ene(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=ds({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var NB={kernelName:$s,backendName:\"webgpu\",kernelFunc:ene};var tne=Se({opType:Q.SQRT}),TB={kernelName:Gn,backendName:\"webgpu\",kernelFunc:tne};var _B={kernelName:mi,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Ro(t.shape,Q.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var rne=ot({opType:ye.SQUARED_DIFFERENCE}),EB={kernelName:Kn,backendName:\"webgpu\",kernelFunc:rne};var bx=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Rt(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let e=this.outputShape.length,t=\"\";if(e===1)t=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(\",\")}return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function one(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=de({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=ds({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=de({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),A=le(n.shape,n.dtype,$),R=hM(d,A,w,b);k=t.makeTensorInfo(f,n.dtype,R.values)}else{let $=new bx(d),A=[{type:\"int32\",data:b},{type:\"int32\",data:w}],R=t.runWebGPUProgram($,[n],n.dtype,A);k=de({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeData(R.dataId)}return k}var $B={kernelName:jn,backendName:\"webgpu\",kernelFunc:one};function nne(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=gM(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var AB={kernelName:As,backendName:\"webgpu\",kernelFunc:nne};var sne=Se({opType:Q.TAN}),RB={kernelName:Yn,backendName:\"webgpu\",kernelFunc:sne};var ane=Se({opType:Q.TANH}),FB={kernelName:Qn,backendName:\"webgpu\",kernelFunc:ane};var Cx=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32,\n dir : i32, inc : i32,`,this.shaderKey=\"swap\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced\n // above, Figure5(a) shows that element[1] is in the second half of\n // the group when group size is 2, but it is in the first half of\n // the group when group size is 4.\n let isFirstInPair = elemIdx % (2 * uniforms.inc) < uniforms.inc;\n var i = 0;\n if (isFirstInPair) {\n i = elemIdx;\n } else {\n i = elemIdx - uniforms.inc;\n }\n\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.inc;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.inc));\n }\n\n var x0 = f32(0.0);\n var x1 = f32(0.0);\n if (i0 < uniforms.inputSize) {\n x0 = getX(batch, i0);\n } else {\n x0 = uniforms.negativeInf;\n }\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = uniforms.negativeInf;\n }\n\n let reverse = elemIdx % (2 * uniforms.dir) >= uniforms.dir;\n let isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) {\n // Elements in opposite order of direction\n let iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}},Sx=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _\n // (k=4), we only need to output the indices at positions |, the\n // indices at positions _ can be thrown away, see Figure5(b) After\n // Phase 2 (Merge phase) in the Bitonic Top K paper referenced\n // above.\n // For example, the paper shows we only need to output the orange\n // bars. The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back to\n // the previous sequence to find the corresponding value, we need\n // to double the index. When we double the index, we basically\n // interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k\n // position of each 2k positions by - elemIdx % k. E.g. for output\n // at index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n var i = 0;\n if (elemIdx < uniforms.k) {\n i = elemIdx;\n } else {\n i = elemIdx * 2 - elemIdx % uniforms.k;\n }\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.k;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.k));\n }\n\n let x0 = getX(batch, i0);\n var x1 = f32(0.0);\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = x0;\n }\n\n if (x0 >= x1) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}};function $c(r,e){e!==null&&r.disposeData(e.dataId)}function DB(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let A=h(),R=new Cx($),P=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"float32\",data:[Number.NEGATIVE_INFINITY]},{type:\"int32\",data:[k]},{type:\"int32\",data:[_]}],M=f;f=t.runWebGPUProgram(R,A,\"int32\",P),$c(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new Sx([c,k/2]),R=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],D=f;f=t.runWebGPUProgram($,_,\"int32\",R),$c(t,D);let P=m/2,M=P*2;for(let L=P;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=ds({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),$c(t,x);let b=gI({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});$c(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=de({inputs:{x:f},attrs:{shape:C},backend:t}),$c(t,x);let w=b;return b=de({inputs:{x:b},attrs:{shape:C},backend:t}),$c(t,w),[b,f]}var OB={kernelName:Zn,backendName:\"webgpu\",kernelFunc:ine};var wx=class{constructor(e){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"transform\"}getUserCode(){return`\n fn mapCoord(outCoord : f32, len : f32) -> f32{\n var inCoord = outCoord;\n if(uniforms.fillModeId == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * f32(i32(f32(-inCoord / sz2))) +\n inCoord;\n }\n if (inCoord < -len) {\n inCoord = inCoord + sz2;\n } else {\n inCoord = -inCoord - 1.0;\n }\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n inCoord = inCoord - sz2 * f32(i32(f32(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord + len * (f32(i32(f32(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord - len * f32(i32(f32(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n }\n return outCoord;\n }\n fn readWithFillValue(batch : i32, coordY : i32, coordX : i32,\n channel : i32) -> f32 {\n var outputValue : f32;\n if (0 <= coordY && coordY < uniforms.imageShape[1] && 0 <= coordX && coordX < uniforms.imageShape[2]) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = uniforms.fillValue;\n }\n return outputValue;\n }\n\n ${se(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var outputValue : f32;\n let batch = coords[0];\n let x = coords[2];\n let y = coords[1];\n let channel = coords[3];\n let xf = f32(x);\n let yf = f32(y);\n let a1 = getTransforms(batch, 0);\n let a2 = getTransforms(batch, 1);\n let a3 = getTransforms(batch, 2);\n let b1 = getTransforms(batch, 3);\n let b2 = getTransforms(batch, 4);\n let b3 = getTransforms(batch, 5);\n let c1 = getTransforms(batch, 6);\n let c2 = getTransforms(batch, 7);\n let projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = uniforms.fillValue;\n } else {\n let inX = (a1 * xf + a2 * yf + a3) / projection;\n let inY = (b1 * xf + b2 * yf + b3) / projection;\n let mapX = mapCoord(inX, f32(uniforms.imageShape[2]));\n let mapY = mapCoord(inY, f32(uniforms.imageShape[1]));\n\n if (uniforms.interpolationModeId == 1) {\n let coordY = i32(round(mapY));\n let coordX = i32(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n let yFloor = floor(mapY);\n let xFloor = floor(mapX);\n let yCeil = yFloor + 1.0;\n let xCeil = xFloor + 1.0;\n let valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, i32(yFloor), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yFloor), i32(xCeil), channel);\n let valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, i32(yCeil), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yCeil), i32(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};function une(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new wx(g),b=a===\"nearest\"?1:2,C;switch(i){case\"constant\":C=1;break;case\"reflect\":C=2;break;case\"wrap\":C=3;break;case\"nearest\":C=4;break;default:C=1;break}let w=[{type:\"int32\",data:[b]},{type:\"int32\",data:[C]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(x,[n,s],\"float32\",w)}var PB={kernelName:Jn,backendName:\"webgpu\",kernelFunc:une};function pne(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),f}var MB={kernelName:Rs,backendName:\"webgpu\",kernelFunc:pne};var cne=[B3,SM,wM,IM,vM,kM,TM,_M,EM,$M,AM,RM,FM,DM,OM,LM,BM,zM,WM,qM,KM,jM,z3,YM,QM,ZM,JM,eL,tL,nL,sL,aL,iL,uL,lL,mL,dL,fL,hL,gL,xL,yL,M3,bL,wL,CL,SL,IL,vL,kL,NL,TL,_L,EL,V3,$L,XM,AL,RL,FL,DL,OL,PL,LL,ML,BL,VL,PM,zL,WL,MM,UL,GL,HL,qL,pL,KL,jL,XL,UM,YL,JL,eB,tB,rB,oB,nB,sB,GM,aB,iB,uB,pB,L3,cB,lB,mB,dB,fB,hB,gB,xB,yB,bB,CB,VM,$B,AB,wB,IB,kB,NB,TB,_B,EB,SB,cL,RB,FB,vB,OB,PB,NM,MB,QL];for(let r of cne)Ia(r);var LB=\"4.1.0\",lne=\"4.1.0\",mne=\"4.1.0\",dne=\"4.1.0\",fne=\"4.1.0\",hne=\"0.0.1-alpha.16\",gne={tfjs:LB,\"tfjs-core\":LB,\"tfjs-converter\":lne,\"tfjs-backend-cpu\":mne,\"tfjs-backend-webgl\":dne,\"tfjs-backend-wasm\":fne,\"tfjs-backend-webgpu\":hne};export{gs as Abs,sa as Acos,aa as Acosh,Ei as AdadeltaOptimizer,$i as AdagradOptimizer,Ai as AdamOptimizer,Ri as AdamaxOptimizer,eo as Add,Mo as AddN,Lo as All,Bo as Any,Vo as ArgMax,Za as ArgMin,ia as Asin,ua as Asinh,pa as Atan,la as Atan2,ca as Atanh,zo as AvgPool,ip as AvgPool3D,Im as AvgPool3DGrad,wm as AvgPoolGrad,Pl as BackendWasm,Wo as BatchMatMul,xs as BatchToSpaceND,Ja as Bincount,up as BroadcastArgs,wne as BroadcastTo,co as Cast,Uo as Ceil,lo as ClipByValue,ei as Complex,pp as ComplexAbs,ys as Concat,Go as Conv2D,cp as Conv2DBackpropFilter,Ho as Conv2DBackpropInput,lp as Conv3D,vm as Conv3DBackpropFilterV2,mp as Conv3DBackpropInputV2,qo as Cos,Ko as Cosh,Yo as CropAndResize,jo as Cumprod,Xo as Cumsum,Do as DataStorage,ti as DenseBincount,Qo as DepthToSpace,Zo as DepthwiseConv2dNative,dp as DepthwiseConv2dNativeBackpropFilter,fp as DepthwiseConv2dNativeBackpropInput,hp as Diag,gp as Dilation2D,bb as Dilation2DBackpropFilter,yb as Dilation2DBackpropInput,hb as ENV,ri as Einsum,en as Elu,km as EluGrad,Uc as Environment,tn as Equal,ma as Erf,rn as Exp,bs as ExpandDims,da as Expm1,oi as FFT,Cs as Fill,on as FlipLeftRight,nn as Floor,sn as FloorDiv,Zi as FromPixels,an as FusedBatchNorm,ho as FusedConv2D,go as FusedDepthwiseConv2D,Fu as GPGPUContext,un as GatherNd,Ss as GatherV2,ll as GraphModel,pn as Greater,cn as GreaterEqual,ni as IFFT,mo as Identity,si as Imag,fa as IsFinite,ha as IsInf,ln as IsNan,Zr as KernelBackend,yp as LRN,Nm as LRNGrad,mn as LeakyRelu,dn as Less,fn as LessEqual,xp as LinSpace,hn as Log,ga as Log1p,Ine as LogSoftmax,gn as LogicalAnd,xn as LogicalNot,xa as LogicalOr,GI as LogicalXor,vne as LowerBound,Oi as MathBackendCPU,Bi as MathBackendWebGL,yn as Max,Cn as MaxPool,bp as MaxPool3D,_m as MaxPool3DGrad,Tm as MaxPoolGrad,Cp as MaxPoolWithArgmax,bn as Maximum,Sn as Mean,wn as Min,In as Minimum,vn as MirrorPad,ya as Mod,Fi as MomentumOptimizer,Sp as Multinomial,kn as Multiply,ws as Neg,Tn as NonMaxSuppressionV3,ba as NonMaxSuppressionV4,_n as NonMaxSuppressionV5,Nn as NotEqual,Lb as OP_SCOPE_SUFFIX,En as OneHot,Is as OnesLike,wr as Optimizer,ns as OptimizerConstructors,vs as Pack,$n as PadV2,kne as Pool,An as Pow,Rn as Prelu,Fn as Prod,Di as RMSPropOptimizer,wp as RaggedGather,Ip as RaggedRange,vp as RaggedTensorToTensor,ks as Range,_b as Rank,ai as Real,Jo as RealDiv,Dn as Reciprocal,Et as Reduction,On as Relu,Ln as Relu6,Ns as Reshape,Mn as ResizeBilinear,$m as ResizeBilinearGrad,Pn as ResizeNearestNeighbor,Em as ResizeNearestNeighborGrad,Bn as Reverse,es as RotateWithOffset,Ca as Round,Vn as Rsqrt,qs as SGDOptimizer,zn as ScatterNd,ii as SearchSorted,Ts as Select,Xi as Selu,Un as Sigmoid,Yi as Sign,Wn as Sin,Sa as Sinh,_s as Slice,qn as Softmax,Qi as Softplus,Es as SpaceToBatchND,ui as SparseFillEmptyRows,wa as SparseReshape,pi as SparseSegmentMean,ci as SparseSegmentSum,li as SparseToDense,$s as SplitV,Gn as Sqrt,mi as Square,Kn as SquaredDifference,Ds as Step,jn as StridedSlice,As as StringNGrams,di as StringSplit,fi as StringToHashBucketFast,Xn as Sub,Hn as Sum,Yn as Tan,Qn as Tanh,it as Tensor,st as TensorBuffer,to as Tile,Zn as TopK,Jn as Transform,ro as Transpose,kp as Unique,Rs as Unpack,Np as UnsortedSegmentSum,Nne as UpperBound,va as Variable,Ui as WebGPUBackend,Fs as ZerosLike,fo as _FusedMatMul,Yt as abs,f0 as acos,h0 as acosh,xe as add,g0 as addN,x0 as all,y0 as any,b0 as argMax,C0 as argMin,S0 as asin,w0 as asinh,I0 as atan,v0 as atan2,k0 as atanh,td as avgPool,_0 as avgPool3d,Oie as backend,S as backend_util,E0 as basicLSTMCell,wi as batchNorm,A0 as batchNorm2d,R0 as batchNorm3d,F0 as batchNorm4d,rd as batchToSpaceND,od as bincount,XG as booleanMaskAsync,D0 as broadcastArgs,Ii as broadcastTo,br as broadcast_util,Qv as browser,le as buffer,Ke as cast,O0 as ceil,P0 as clipByValue,Br as clone,Tr as complex,gt as concat,M0 as concat1d,L0 as concat2d,B0 as concat3d,V0 as concat4d,z0 as conv1d,vi as conv2d,W0 as conv2dTranspose,U0 as conv3d,H0 as conv3dTranspose,Dne as copyRegisteredKernels,q0 as cos,K0 as cosh,il as cosineWindow,j0 as cumprod,X0 as cumsum,Cr as customGrad,Y0 as denseBincount,eC as deprecationWarn,Q0 as depthToSpace,Bp as depthwiseConv2d,xK as deregisterOp,yi as device_util,Z0 as diag,J0 as dilation2d,vie as disableDeprecationWarnings,Dt as dispose,kie as disposeVariables,Ge as div,ek as divNoNan,tk as dot,aH as dropout,rk as einsum,ad as elu,Iie as enableDebugMode,wie as enableProdMode,xC as enclosingPowerOfTwo,cr as engine,O as env,sd as equal,ok as erf,ak as euclideanNorm,Co as exp,Fa as expandDims,ik as expm1,id as eye,zp as fft,Ws as fill,Fie as findBackend,Die as findBackendFactory,ud as floor,Jm as floorDiv,L$ as forceHalfFloat,yC as fused,pd as gather,nH as gatherND,Ym as gather_util,Aie as getBackend,Cb as getGradient,qc as getKernel,Am as getKernelsForBackend,Nee as getThreadsCount,yw as gpgpu_util,l4 as grad,m4 as grads,cu as greater,cd as greaterEqual,hu as ifft,Si as imag,uq as image,uH as inTopKAsync,Ea as io,Fd as irfft,uk as isFinite,pk as isInf,ck as isNaN,_r as keep,Lt as kernel_impls,ld as leakyRelu,lk as less,Vp as lessEqual,pq as linalg,mk as linspace,l6 as loadGraphModel,m6 as loadGraphModelSync,dk as localResponseNormalization,Da as log,md as log1p,fk as logSigmoid,hk as logSoftmax,hd as logSumExp,lu as logicalAnd,gd as logicalNot,xd as logicalOr,gk as logicalXor,cq as losses,xk as lowerBound,Xe as matMul,jv as math,Us as max,bd as maxPool,yk as maxPool3d,bk as maxPoolWithArgmax,Cd as maximum,mu as mean,Nie as memory,Ck as meshgrid,sl as min,Sd as minimum,Sk as mirrorPad,wk as mod,Ik as moments,QG as movingAverage,ae as mul,vk as multiRNNCell,kk as multinomial,yr as neg,CC as nextFrame,pu as norm,wd as notEqual,tl as oneHot,Gs as ones,Nk as onesLike,N as op,Tk as outerProduct,Hs as pad,_k as pad1d,Ek as pad2d,$k as pad3d,Ak as pad4d,Rk as pool,Ra as pow,vd as prelu,Gm as print,Fk as prod,Tie as profile,Dk as raggedGather,Ok as raggedRange,Pk as raggedTensorToTensor,Mk as rand,e1 as randomGamma,Ed as randomNormal,t1 as randomStandardNormal,$d as randomUniform,Ni as range,$ie as ready,$a as real,r1 as reciprocal,Ci as registerBackend,Ane as registerGradient,Ia as registerKernel,gK as registerOp,Ti as relu,Ad as relu6,Rie as removeBackend,z as reshape,no as reverse,o1 as reverse1d,n1 as reverse2d,s1 as reverse3d,a1 as reverse4d,Wp as rfft,Rd as round,i1 as rsqrt,be as scalar,JG as scatterND,rl as scatter_util,al as searchSorted,u1 as selu,p1 as separableConv2d,p0 as serialization,Eie as setBackend,Pie as setPlatform,kee as setThreadsCount,Iee as setWasmPath,vee as setWasmPaths,RS as setWebGLContext,c1 as setdiff1dAsync,Qp as shared,zs as sigmoid,l1 as sign,iq as signal,m1 as sin,d1 as sinh,He as slice,f1 as slice1d,h1 as slice2d,g1 as slice3d,x1 as slice4d,ut as slice_util,y1 as softmax,fd as softplus,Id as spaceToBatchND,lq as sparse,rH as sparseToDense,aq as spectral,Oa as split,$r as sqrt,Qt as square,Dd as squaredDifference,Up as squeeze,Sr as stack,Od as step,b1 as stridedSlice,mq as string,Ne as sub,et as sum,ka as sumOutType,C1 as tan,nl as tanh,nr as tensor,mr as tensor1d,_i as tensor2d,Xm as tensor3d,S1 as tensor4d,w1 as tensor5d,I1 as tensor6d,hv as tensor_util,d0 as test_util,Ee as tidy,ki as tile,_ie as time,v1 as topk,hMe as train,Mp as transpose,k1 as truncatedNormal,N1 as unique,Fne as unregisterGradient,Rne as unregisterKernel,T1 as unsortedSegmentSum,so as unstack,dt as upcastType,_1 as upperBound,y as util,d4 as valueAndGrad,f4 as valueAndGrads,E1 as variable,pC as variableGrads,gne as version,f6 as version_converter,xW as version_core,U6 as version_cpu,Tee as version_wasm,L8 as version_webgl,L9e as webgl,oc as webgl_util,nI as webgpu_util,os as where,Md as whereAsync,Vr as zeros,Ut as zerosLike};\n", "import type { Config } from '../exports';\n\n/**\n * Simple helper functions used accross codebase\n */\n\n// helper function: wrapper around console output\nexport function log(...msg): void {\n const dt = new Date();\n const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;\n if (msg) console.log(ts, 'Human:', ...msg); // eslint-disable-line no-console\n}\n\n// helper function: join two paths\nexport function join(folder: string, file: string): string {\n const separator = folder.endsWith('/') ? '' : '/';\n const skipJoin = file.startsWith('.') || file.startsWith('/') || file.startsWith('http:') || file.startsWith('https:') || file.startsWith('file:');\n const path = skipJoin ? `${file}` : `${folder}${separator}${file}`;\n if (!path.toLocaleLowerCase().includes('.json')) throw new Error(`modelpath error: expecting json file: ${path}`);\n return path;\n}\n\n// helper function: gets elapsed time on both browser and nodejs\nexport const now = () => {\n if (typeof performance !== 'undefined') return performance.now();\n return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());\n};\n\n// helper function: checks current config validity\nexport function validate(defaults: Partial, config: Partial, parent = 'config', msgs: { reason: string, where: string, expected?: string }[] = []) {\n for (const key of Object.keys(config)) {\n if (typeof config[key] === 'object') {\n validate(defaults[key], config[key], key, msgs);\n } else {\n const defined = defaults && (typeof defaults[key] !== 'undefined');\n if (!defined) msgs.push({ reason: 'unknown property', where: `${parent}.${key} = ${config[key]}` });\n const same = defaults && typeof defaults[key] === typeof config[key];\n if (defined && !same) msgs.push({ reason: 'property type mismatch', where: `${parent}.${key} = ${config[key]}`, expected: typeof defaults[key] });\n }\n // ok = ok && defined && same;\n }\n if (config.debug && parent === 'config' && msgs.length > 0) log('invalid configuration', msgs);\n return msgs;\n}\n\n// helper function: perform deep merge of multiple objects so it allows full inheritance with overrides\nexport function mergeDeep(...objects) {\n const isObject = (obj) => obj && typeof obj === 'object';\n return objects.reduce((prev, obj) => {\n Object.keys(obj || {}).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n if (Array.isArray(pVal) && Array.isArray(oVal)) prev[key] = pVal.concat(...oVal);\n else if (isObject(pVal) && isObject(oVal)) prev[key] = mergeDeep(pVal, oVal);\n else prev[key] = oVal;\n });\n return prev;\n }, {});\n}\n\n// helper function: return min and max from input array\nexport const minmax = (data: number[]) => data.reduce((acc: number[], val) => {\n acc[0] = (acc[0] === undefined || val < acc[0]) ? val : acc[0];\n acc[1] = (acc[1] === undefined || val > acc[1]) ? val : acc[1];\n return acc;\n}, []);\n\n// helper function: async wait\nexport async function wait(time: number) {\n const waiting = new Promise((resolve) => { setTimeout(() => resolve(true), time); });\n await waiting;\n}\n", "/* eslint-disable no-multi-spaces */\n\n/** Possible TensorFlow backends */\nexport type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu';\n\n/** Possible values for `human.warmup` */\nexport type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body';\n\n/** Possible segmentation model behavior */\nexport type SegmentationEnum = 'default' | 'alpha' | 'foreground' | 'state'\n\n/** Generic config type inherited by all module types */\nexport interface GenericConfig {\n /** is module enabled? */\n enabled: boolean,\n /** path to model json file (relative to `modelBasePath` */\n modelPath: string,\n /** how many max frames to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipFrames: number,\n /** how many max milliseconds to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipTime: number,\n}\n\n/** Detector part of face configuration */\nexport interface FaceDetectorConfig extends GenericConfig {\n /** is face rotation correction performed after detecting face?\n * used to correctly analyze faces under high angles\n */\n rotation: boolean,\n /** maximum number of detected faces */\n maxDetected: number,\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: true,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n iouThreshold: 0.1,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-full.json',\n },\n },\n object: {\n enabled: false,\n modelPath: 'centernet.json',\n minConfidence: 0.2,\n iouThreshold: 0.4,\n maxDetected: 10,\n skipFrames: 99,\n skipTime: 2000,\n },\n segmentation: {\n enabled: false,\n modelPath: 'rvm.json',\n ratio: 0.5,\n mode: 'default',\n },\n};\n\nexport { config as defaults };\n", "export const vertexIdentity = `\n precision highp float;\n attribute vec2 pos;\n attribute vec2 uv;\n varying vec2 vUv;\n uniform float flipY;\n void main(void) {\n vUv = uv;\n gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);\n }\n`;\n\nexport const fragmentIdentity = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n void main(void) {\n gl_FragColor = texture2D(texture, vUv);\n }\n`;\n\nexport const colorMatrixWithAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];\n gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];\n }\n`;\n\nexport const colorMatrixWithoutAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];\n gl_FragColor.a = c.a;\n }\n`;\n\nexport const pixelate = `\n precision highp float;\n varying vec2 vUv;\n uniform vec2 size;\n uniform sampler2D texture;\n vec2 pixelate(vec2 coord, vec2 size) {\n return floor( coord / size ) * size;\n }\n void main(void) {\n gl_FragColor = vec4(0.0);\n vec2 coord = pixelate(vUv, size);\n gl_FragColor += texture2D(texture, coord);\n }\n`;\n\nexport const blur = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n void main(void) {\n gl_FragColor = vec4(0.0);\n gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;\n gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv )*0.159576912161;\n gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;\n }\n`;\n\nexport const convolution = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n uniform float m[9];\n void main(void) {\n vec4 c11 = texture2D(texture, vUv - px); // top left\n vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y)); // top center\n vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y)); // top right\n vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) ); // mid left\n vec4 c22 = texture2D(texture, vUv); // mid center\n vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) ); // mid right\n vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) ); // bottom left\n vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) ); // bottom center\n vec4 c33 = texture2D(texture, vUv + px ); // bottom right\n gl_FragColor = \n c11 * m[0] + c12 * m[1] + c22 * m[2] +\n c21 * m[3] + c22 * m[4] + c23 * m[5] +\n c31 * m[6] + c32 * m[7] + c33 * m[8];\n gl_FragColor.a = c22.a;\n }\n`;\n", "/**\n * Image Filters in WebGL algoritm implementation\n * Based on: [WebGLImageFilter](https://github.com/phoboslab/WebGLImageFilter)\n */\n\n/* eslint-disable func-names */\n\nimport * as shaders from './imagefxshaders';\nimport { canvas } from './image';\nimport { log } from '../util/util';\n\nconst collect = (source, prefix: string, collection) => {\n const r = new RegExp('\\\\b' + prefix + ' \\\\w+ (\\\\w+)', 'ig');\n source.replace(r, (match, name) => {\n collection[name] = 0;\n return match;\n });\n};\n\nclass GLProgram {\n uniform = {};\n attribute = {};\n gl: WebGLRenderingContext;\n id: WebGLProgram;\n\n constructor(gl, vertexSource, fragmentSource) {\n this.gl = gl;\n const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER);\n const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER);\n this.id = this.gl.createProgram() as WebGLProgram;\n if (!vertexShader || !fragmentShader) return;\n if (!this.id) {\n log('filter: could not create webgl program');\n return;\n }\n this.gl.attachShader(this.id, vertexShader);\n this.gl.attachShader(this.id, fragmentShader);\n this.gl.linkProgram(this.id);\n if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) {\n log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || 'unknown'}`);\n return;\n }\n this.gl.useProgram(this.id);\n collect(vertexSource, 'attribute', this.attribute); // Collect attributes\n for (const a in this.attribute) this.attribute[a] = this.gl.getAttribLocation(this.id, a);\n collect(vertexSource, 'uniform', this.uniform); // Collect uniforms\n collect(fragmentSource, 'uniform', this.uniform);\n for (const u in this.uniform) this.uniform[u] = this.gl.getUniformLocation(this.id, u);\n }\n\n compile = (source, type): WebGLShader | null => {\n const shader = this.gl.createShader(type);\n if (!shader) {\n log('filter: could not create shader');\n return null;\n }\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || 'unknown'}`);\n return null;\n }\n return shader;\n };\n}\n\n// function that is instantiated as class so it has private this members\n/**\n * @class GLImageFilter\n * @property {function} reset reset current filter chain\n * @property {function} add add specified filter to filter chain\n * @property {function} apply execute filter chain and draw result\n * @property {function} draw just draw input to result\n */\n\nexport function GLImageFilter() {\n let drawCount = 0;\n let sourceTexture: WebGLTexture | null = null;\n let lastInChain = false;\n let currentFramebufferIndex = -1;\n let tempFramebuffers: [null, null] | [{ fbo: WebGLFramebuffer | null, texture: WebGLTexture | null }] = [null, null];\n let filterChain: Record[] = [];\n let vertexBuffer: WebGLBuffer | null = null;\n let currentProgram: GLProgram | null = null;\n const fxcanvas = canvas(100, 100) as HTMLCanvasElement;\n const shaderProgramCache = { }; // key is the shader program source, value is the compiled program\n const DRAW = { INTERMEDIATE: 1 };\n const gl = fxcanvas.getContext('webgl') as WebGLRenderingContext;\n if (!gl) {\n log('filter: cannot get webgl context');\n return;\n }\n // @ts-ignore used for sanity checks outside of imagefx\n this.gl = gl;\n\n function resize(width, height) {\n if (width === fxcanvas.width && height === fxcanvas.height) return; // Same width/height? Nothing to do here\n fxcanvas.width = width;\n fxcanvas.height = height;\n if (!vertexBuffer) { // Create the context if we don't have it yet\n const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); // Create the vertex buffer for the two triangles [x, y, u, v] * 6\n vertexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n }\n gl.viewport(0, 0, fxcanvas.width, fxcanvas.height);\n tempFramebuffers = [null, null]; // Delete old temp framebuffers\n }\n\n function createFramebufferTexture(width, height) {\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const renderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return { fbo, texture };\n }\n\n function getTempFramebuffer(index): { fbo: WebGLFramebuffer | null, texture: WebGLTexture | null } {\n tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);\n return tempFramebuffers[index] as { fbo: WebGLFramebuffer, texture: WebGLTexture };\n }\n\n function draw(flags = 0) {\n if (!currentProgram) return;\n let source: WebGLTexture | null = null;\n let target: WebGLFramebuffer | null = null;\n let flipY = false;\n if (drawCount === 0) source = sourceTexture; // First draw call - use the source texture\n else source = getTempFramebuffer(currentFramebufferIndex).texture || null; // All following draw calls use the temp buffer last drawn to\n drawCount++;\n if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { // Last filter in our chain - draw directly to the WebGL Canvas. We may also have to flip the image vertically now\n target = null;\n flipY = drawCount % 2 === 0;\n } else {\n currentFramebufferIndex = (currentFramebufferIndex + 1) % 2;\n target = getTempFramebuffer(currentFramebufferIndex).fbo || null; // Intermediate draw call - get a temp buffer to draw to\n }\n gl.bindTexture(gl.TEXTURE_2D, source); // Bind the source and target and draw the two triangles\n gl.bindFramebuffer(gl.FRAMEBUFFER, target);\n gl.uniform1f(currentProgram.uniform['flipY'], (flipY ? -1 : 1));\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n function compileShader(fragmentSource): GLProgram | null {\n if (shaderProgramCache[fragmentSource]) {\n currentProgram = shaderProgramCache[fragmentSource];\n gl.useProgram((currentProgram ? currentProgram.id : null) || null);\n return currentProgram;\n }\n currentProgram = new GLProgram(gl, shaders.vertexIdentity, fragmentSource);\n if (!currentProgram) {\n log('filter: could not get webgl program');\n return null;\n }\n const floatSize = Float32Array.BYTES_PER_ELEMENT;\n const vertSize = 4 * floatSize;\n gl.enableVertexAttribArray(currentProgram.attribute['pos']);\n gl.vertexAttribPointer(currentProgram.attribute['pos'], 2, gl.FLOAT, false, vertSize, 0 * floatSize);\n gl.enableVertexAttribArray(currentProgram.attribute['uv']);\n gl.vertexAttribPointer(currentProgram.attribute['uv'], 2, gl.FLOAT, false, vertSize, 2 * floatSize);\n shaderProgramCache[fragmentSource] = currentProgram;\n return currentProgram;\n }\n\n const filter = {\n colorMatrix: (matrix: number[]) => { // general color matrix filter\n const m = new Float32Array(matrix);\n m[4] /= 255;\n m[9] /= 255;\n m[14] /= 255;\n m[19] /= 255;\n const shader = (m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0) // Can we ignore the alpha value? Makes things a bit faster.\n ? shaders.colorMatrixWithoutAlpha\n : shaders.colorMatrixWithAlpha;\n const program = compileShader(shader);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n draw();\n },\n\n brightness: (brightness: number) => {\n const b = (brightness || 0) + 1;\n filter.colorMatrix([\n b, 0, 0, 0, 0,\n 0, b, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n saturation: (amount: number) => {\n const x = (amount || 0) * 2 / 3 + 1;\n const y = ((x - 1) * -0.5);\n filter.colorMatrix([\n x, y, y, 0, 0,\n y, x, y, 0, 0,\n y, y, x, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturate: () => {\n filter.saturation(-1);\n },\n\n contrast: (amount: number) => {\n const v = (amount || 0) + 1;\n const o = -128 * (v - 1);\n filter.colorMatrix([\n v, 0, 0, 0, o,\n 0, v, 0, 0, o,\n 0, 0, v, 0, o,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n negative: () => {\n filter.contrast(-2);\n },\n\n hue: (rotation: number) => {\n rotation = (rotation || 0) / 180 * Math.PI;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const lumR = 0.213;\n const lumG = 0.715;\n const lumB = 0.072;\n filter.colorMatrix([\n lumR + cos * (1 - lumR) + sin * (-lumR), lumG + cos * (-lumG) + sin * (-lumG), lumB + cos * (-lumB) + sin * (1 - lumB), 0, 0,\n lumR + cos * (-lumR) + sin * (0.143), lumG + cos * (1 - lumG) + sin * (0.140), lumB + cos * (-lumB) + sin * (-0.283), 0, 0,\n lumR + cos * (-lumR) + sin * (-(1 - lumR)), lumG + cos * (-lumG) + sin * (lumG), lumB + cos * (1 - lumB) + sin * (lumB), 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturateLuminance: () => {\n filter.colorMatrix([\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n sepia: () => {\n filter.colorMatrix([\n 0.393, 0.7689999, 0.18899999, 0, 0,\n 0.349, 0.6859999, 0.16799999, 0, 0,\n 0.272, 0.5339999, 0.13099999, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n brownie: () => {\n filter.colorMatrix([\n 0.5997023498159715, 0.34553243048391263, -0.2708298674538042, 0, 47.43192855600873,\n -0.037703249837783157, 0.8609577587992641, 0.15059552388459913, 0, -36.96841498319127,\n 0.24113635128153335, -0.07441037908422492, 0.44972182064877153, 0, -7.562075277591283,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n vintagePinhole: () => {\n filter.colorMatrix([\n 0.6279345635605994, 0.3202183420819367, -0.03965408211312453, 0, 9.651285835294123,\n 0.02578397704808868, 0.6441188644374771, 0.03259127616149294, 0, 7.462829176470591,\n 0.0466055556782719, -0.0851232987247891, 0.5241648018700465, 0, 5.159190588235296,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n kodachrome: () => {\n filter.colorMatrix([\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n technicolor: () => {\n filter.colorMatrix([\n 1.9125277891456083, -0.8545344976951645, -0.09155508482755585, 0, 11.793603434377337,\n -0.3087833385928097, 1.7658908555458428, -0.10601743074722245, 0, -70.35205161461398,\n -0.231103377548616, -0.7501899197440212, 1.847597816108189, 0, 30.950940869491138,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n polaroid: () => {\n filter.colorMatrix([\n 1.438, -0.062, -0.062, 0, 0,\n -0.122, 1.378, -0.122, 0, 0,\n -0.016, -0.016, 1.483, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n shiftToBGR: () => {\n filter.colorMatrix([\n 0, 0, 1, 0, 0,\n 0, 1, 0, 0, 0,\n 1, 0, 0, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n convolution: (matrix: number[]) => { // general convolution Filter\n const m = new Float32Array(matrix);\n const pixelSizeX = 1 / fxcanvas.width;\n const pixelSizeY = 1 / fxcanvas.height;\n const program = compileShader(shaders.convolution);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n gl.uniform2f(program.uniform['px'], pixelSizeX, pixelSizeY);\n draw();\n },\n\n detectEdges: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, 1, 0,\n 1, -4, 1,\n 0, 1, 0,\n ]);\n },\n\n sobelX: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, 0, 1,\n -2, 0, 2,\n -1, 0, 1,\n ]);\n },\n\n sobelY: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, -2, -1,\n 0, 0, 0,\n 1, 2, 1,\n ]);\n },\n\n sharpen: (amount) => {\n const a = amount || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, -1 * a, 0,\n -1 * a, 1 + 4 * a, -1 * a,\n 0, -1 * a, 0,\n ]);\n },\n\n emboss: (size: number) => {\n const s = size || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n -2 * s, -1 * s, 0,\n -1 * s, 1, 1 * s,\n 0, 1 * s, 2 * s,\n ]);\n },\n\n blur: (size: number) => {\n const blurSizeX = (size / 7) / fxcanvas.width;\n const blurSizeY = (size / 7) / fxcanvas.height;\n const program = compileShader(shaders.blur);\n if (!program) return;\n // Vertical\n gl.uniform2f(program.uniform['px'], 0, blurSizeY);\n draw(DRAW.INTERMEDIATE);\n // Horizontal\n gl.uniform2f(program.uniform['px'], blurSizeX, 0);\n draw();\n },\n\n pixelate: (size: number) => {\n const blurSizeX = (size) / fxcanvas.width;\n const blurSizeY = (size) / fxcanvas.height;\n const program = compileShader(shaders.pixelate);\n if (!program) return;\n gl.uniform2f(program.uniform['size'], blurSizeX, blurSizeY);\n draw();\n },\n };\n\n // @ts-ignore this\n this.add = function (name) {\n const args = Array.prototype.slice.call(arguments, 1); // eslint-disable-line prefer-rest-params\n const func = filter[name];\n filterChain.push({ func, args });\n };\n\n // @ts-ignore this\n this.reset = function () {\n filterChain = [];\n };\n\n // @ts-ignore this\n this.get = function () {\n return filterChain;\n };\n\n // @ts-ignore this\n this.apply = function (image) {\n resize(image.width, image.height);\n drawCount = 0;\n if (!sourceTexture) sourceTexture = gl.createTexture(); // Create the texture for the input image if we haven't yet\n gl.bindTexture(gl.TEXTURE_2D, sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n for (let i = 0; i < filterChain.length; i++) {\n lastInChain = (i === filterChain.length - 1);\n const f = filterChain[i];\n // @ts-ignore function assigment\n f.func.apply(this, f.args || []);\n }\n return fxcanvas;\n };\n\n // @ts-ignore this\n this.draw = function (image) {\n this.add('brightness', 0);\n return this.apply(image);\n };\n}\n", "/**\n * Image enhancements\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from '../exports';\n\nexport async function histogramEqualization(inputImage: Tensor): Promise {\n const squeeze = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage;\n const rgb = tf.split(squeeze, 3, 2);\n const min: Tensor[] = [tf.min(rgb[0]), tf.min(rgb[1]), tf.min(rgb[2])]; // minimum pixel value per channel T[]\n const max: Tensor[] = [tf.max(rgb[0]), tf.max(rgb[1]), tf.max(rgb[2])]; // maximum pixel value per channel T[]\n // const absMin = await Promise.all(min.map((channel) => channel.data())); // minimum pixel value per channel A[]\n // const minValue = Math.min(absMax[0][0], absMin[1][0], absMin[2][0]);\n const absMax = await Promise.all(max.map((channel) => channel.data())); // maximum pixel value per channel A[]\n const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]);\n const maxRange = maxValue > 1 ? 255 : 1;\n const factor = maxRange / maxValue;\n let final: Tensor;\n if (factor > 1) {\n const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values\n const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges\n // const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between\n const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];\n const stack = tf.stack([enh[0], enh[1], enh[2]], 2);\n final = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);\n tf.dispose([...sub, ...range, ...enh]);\n } else {\n final = tf.expandDims(squeeze, 0);\n }\n tf.dispose([...rgb, ...min, ...max, rgb, squeeze, inputImage]);\n return final;\n}\n", "/**\n * Image Processing algorithm implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as fxImage from './imagefx';\nimport type { Input, AnyCanvas, Config } from '../exports';\nimport type { Tensor, Tensor3D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport * as enhance from './enhance';\n\nconst maxSize = 3840;\n// internal temp canvases\nlet inCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet outCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet tmpCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\n// @ts-ignore // imagefx is js module that should be converted to a class\nlet fx: fxImage.GLImageFilter | null; // instance of imagefx\n\nconst last: { inputSum: number, cacheDiff: number, sumMethod: number, inputTensor: undefined | Tensor } = {\n inputSum: 0,\n cacheDiff: 1,\n sumMethod: 0,\n inputTensor: undefined,\n};\n\nexport function reset() {\n last.inputSum = 0;\n last.cacheDiff = 1;\n last.sumMethod = 0;\n last.inputTensor = undefined;\n}\n\nexport function canvas(width: number, height: number): AnyCanvas {\n let c: AnyCanvas;\n if (env.browser) { // browser defines canvas object\n if (env.worker) { // if runing in web worker use OffscreenCanvas\n if (typeof OffscreenCanvas === 'undefined') throw new Error('canvas error: attempted to run in web worker but OffscreenCanvas is not supported');\n c = new OffscreenCanvas(width, height);\n } else { // otherwise use DOM canvas\n if (typeof document === 'undefined') throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n }\n } else { // if not running in browser, there is no \"default\" canvas object, so we need monkey patch or fail\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n // else throw new Error('canvas error: attempted to use canvas in nodejs without canvas support installed');\n }\n // @ts-ignore its either defined or we already threw an error\n return c;\n}\n\n// helper function to copy canvas from input to output\nexport function copy(input: AnyCanvas, output?: AnyCanvas) {\n const outputCanvas = output || canvas(input.width, input.height);\n const ctx = outputCanvas.getContext('2d') as CanvasRenderingContext2D;\n ctx.drawImage(input, 0, 0);\n return outputCanvas;\n}\n\n// process input image and return tensor\n// input can be tensor, imagedata, htmlimageelement, htmlvideoelement\n// input is resized and run through imagefx filter\nexport async function process(input: Input, config: Config, getTensor: boolean = true): Promise<{ tensor: Tensor4D | null, canvas: AnyCanvas | null }> {\n if (!input) {\n // throw new Error('input is missing');\n if (config.debug) log('input error: input is missing');\n return { tensor: null, canvas: null }; // video may become temporarily unavailable due to onresize\n }\n // sanity checks since different browsers do not implement all dom elements\n if (\n !(input instanceof tf.Tensor)\n && !(typeof Image !== 'undefined' && input instanceof Image)\n && !(typeof env.Canvas !== 'undefined' && input instanceof env.Canvas)\n && !(typeof globalThis.Canvas !== 'undefined' && input instanceof globalThis.Canvas)\n && !(typeof ImageData !== 'undefined' && input instanceof ImageData)\n && !(typeof ImageBitmap !== 'undefined' && input instanceof ImageBitmap)\n && !(typeof HTMLImageElement !== 'undefined' && input instanceof HTMLImageElement)\n && !(typeof HTMLMediaElement !== 'undefined' && input instanceof HTMLMediaElement)\n && !(typeof HTMLVideoElement !== 'undefined' && input instanceof HTMLVideoElement)\n && !(typeof HTMLCanvasElement !== 'undefined' && input instanceof HTMLCanvasElement)\n && !(typeof OffscreenCanvas !== 'undefined' && input instanceof OffscreenCanvas)\n ) {\n throw new Error('input error: type is not recognized');\n }\n if (input instanceof tf.Tensor) { // if input is tensor use as-is without filters but correct shape as needed\n let tensor: Tensor | null = null;\n if (input['isDisposedInternal']) throw new Error('input error: attempted to use tensor but it is disposed');\n if (!(input as Tensor).shape) throw new Error('input error: attempted to use tensor without a shape');\n if ((input as Tensor).shape.length === 3) { // [height, width, 3 || 4]\n if ((input as Tensor).shape[2] === 3) { // [height, width, 3] so add batch\n tensor = tf.expandDims(input, 0);\n } else if ((input as Tensor).shape[2] === 4) { // [height, width, 4] so strip alpha and add batch\n const rgb = tf.slice3d(input as Tensor3D, [0, 0, 0], [-1, -1, 3]);\n tensor = tf.expandDims(rgb, 0);\n tf.dispose(rgb);\n }\n } else if ((input as Tensor).shape.length === 4) { // [1, width, height, 3 || 4]\n if ((input as Tensor).shape[3] === 3) { // [1, width, height, 3] just clone\n tensor = tf.clone(input);\n } else if ((input as Tensor).shape[3] === 4) { // [1, width, height, 4] so strip alpha\n tensor = tf.slice4d(input as Tensor4D, [0, 0, 0, 0], [-1, -1, -1, 3]);\n }\n }\n // at the end shape must be [1, height, width, 3]\n if (tensor == null || tensor.shape.length !== 4 || tensor.shape[0] !== 1 || tensor.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${((input as Tensor).shape).toString()}`);\n if ((tensor).dtype === 'int32') {\n const cast = tf.cast(tensor, 'float32');\n tf.dispose(tensor);\n tensor = cast;\n }\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n }\n // check if resizing will be needed\n if (typeof input['readyState'] !== 'undefined' && (input as HTMLMediaElement).readyState <= 2) {\n if (config.debug) log('input stream is not ready');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n const originalWidth: number = input['naturalWidth'] || input['videoWidth'] || input['width'] || (input['shape'] && (input['shape'][1] > 0));\n const originalHeight: number = input['naturalHeight'] || input['videoHeight'] || input['height'] || (input['shape'] && (input['shape'][2] > 0));\n if (!originalWidth || !originalHeight) {\n if (config.debug) log('cannot determine input dimensions');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n let targetWidth: number = originalWidth;\n let targetHeight: number = originalHeight;\n if (targetWidth > maxSize) {\n targetWidth = maxSize;\n targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth);\n }\n if (targetHeight > maxSize) {\n targetHeight = maxSize;\n targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight);\n }\n\n // create our canvas and resize it if needed\n if ((config.filter?.width || 0) > 0) targetWidth = config.filter.width as number;\n else if ((config.filter?.height || 0) > 0) targetWidth = originalWidth * ((config.filter.height || 0) / originalHeight);\n if ((config.filter.height || 0) > 0) targetHeight = config.filter.height as number;\n else if ((config.filter.width || 0) > 0) targetHeight = originalHeight * ((config.filter.width || 0) / originalWidth);\n if (!targetWidth || !targetHeight) throw new Error('input error: cannot determine dimension');\n if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) inCanvas = canvas(targetWidth, targetHeight);\n\n // draw input to our canvas\n const inCtx = inCanvas.getContext('2d') as CanvasRenderingContext2D;\n if ((typeof ImageData !== 'undefined') && (input instanceof ImageData)) {\n inCtx.putImageData(input, 0, 0);\n } else {\n if (config.filter.flip && typeof inCtx.translate !== 'undefined') {\n inCtx.translate(originalWidth, 0);\n inCtx.scale(-1, 1);\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults\n } else {\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n }\n }\n\n if (!outCanvas || (inCanvas.width !== outCanvas.width) || (inCanvas.height !== outCanvas.height)) outCanvas = canvas(inCanvas.width, inCanvas.height); // init output canvas\n\n // imagefx transforms using gl from input canvas to output canvas\n if (config.filter.enabled && env.webgl.supported) {\n if (!fx) fx = env.browser ? new fxImage.GLImageFilter() : null; // && (typeof document !== 'undefined')\n env.filter = !!fx;\n if (!fx?.add) {\n if (config.debug) log('input process error: cannot initialize filters');\n env.webgl.supported = false;\n config.filter.enabled = false;\n copy(inCanvas, outCanvas); // filter failed to initialize\n // return { tensor: null, canvas: inCanvas };\n } else {\n fx.reset();\n if (config.filter.brightness !== 0) fx.add('brightness', config.filter.brightness);\n if (config.filter.contrast !== 0) fx.add('contrast', config.filter.contrast);\n if (config.filter.sharpness !== 0) fx.add('sharpen', config.filter.sharpness);\n if (config.filter.blur !== 0) fx.add('blur', config.filter.blur);\n if (config.filter.saturation !== 0) fx.add('saturation', config.filter.saturation);\n if (config.filter.hue !== 0) fx.add('hue', config.filter.hue);\n if (config.filter.negative) fx.add('negative');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.vintage) fx.add('brownie');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.kodachrome) fx.add('kodachrome');\n if (config.filter.technicolor) fx.add('technicolor');\n if (config.filter.polaroid) fx.add('polaroid');\n if (config.filter.pixelate !== 0) fx.add('pixelate', config.filter.pixelate);\n if (fx.get()?.length > 1) outCanvas = fx.apply(inCanvas);\n else outCanvas = fx.draw(inCanvas);\n }\n } else {\n copy(inCanvas, outCanvas); // if no filters applied, output canvas is input canvas\n if (fx) fx = null;\n env.filter = !!fx;\n }\n\n if (!getTensor) return { tensor: null, canvas: outCanvas }; // just canvas was requested\n if (!outCanvas) throw new Error('canvas error: cannot create output');\n\n // create tensor from image unless input was a tensor already\n let pixels;\n let depth = 3;\n if ((typeof ImageData !== 'undefined' && input instanceof ImageData) || ((input as ImageData).data && (input as ImageData).width && (input as ImageData).height)) { // if input is imagedata, just use it\n if (env.browser && tf.browser) {\n pixels = tf.browser ? tf.browser.fromPixels(input as ImageData) : null;\n } else {\n depth = (input as ImageData).data.length / (input as ImageData).height / (input as ImageData).width;\n // const arr = Uint8Array.from(input['data']);\n const arr = new Uint8Array((input as ImageData).data.buffer);\n pixels = tf.tensor(arr, [(input as ImageData).height, (input as ImageData).width, depth], 'int32');\n }\n } else {\n if (!tmpCanvas || (outCanvas.width !== tmpCanvas.width) || (outCanvas.height !== tmpCanvas.height)) tmpCanvas = canvas(outCanvas.width, outCanvas.height); // init output canvas\n if (tf.browser && env.browser) {\n if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') {\n pixels = tf.browser.fromPixels(outCanvas as HTMLCanvasElement); // safe to reuse since both backend and context are gl based\n } else {\n tmpCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n pixels = tf.browser.fromPixels(tmpCanvas as HTMLCanvasElement);\n }\n } else {\n const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D;\n const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);\n depth = tempData.data.length / targetWidth / targetHeight;\n const arr = new Uint8Array(tempData.data.buffer);\n pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]);\n }\n }\n if (depth === 4) { // rgba to rgb\n const rgb = tf.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); // strip alpha channel\n tf.dispose(pixels);\n pixels = rgb;\n }\n if (!pixels) throw new Error('input error: cannot create tensor');\n const casted: Tensor = tf.cast(pixels, 'float32');\n const tensor: Tensor = config.filter.equalization ? await enhance.histogramEqualization(casted) : tf.expandDims(casted, 0);\n tf.dispose([pixels, casted]);\n\n if (config.filter.autoBrightness) {\n const max = tf.max(tensor);\n const maxVal = await max.data();\n config.filter.brightness = maxVal[0] > 1 ? (1 - maxVal[0] / 255) : (1 - maxVal[0]);\n tf.dispose(max);\n }\n\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n}\n\n/*\nconst checksum = async (input: Tensor): Promise => { // use tf sum or js based sum loop depending on which is faster\n const resizeFact = 48;\n const reduced: Tensor = tf.image.resizeBilinear(input, [Math.trunc((input.shape[1] || 1) / resizeFact), Math.trunc((input.shape[2] || 1) / resizeFact)]);\n const tfSum = async (): Promise => {\n const sumT = tf.sum(reduced);\n const sum0 = await sumT.data();\n tf.dispose(sumT);\n return sum0[0];\n };\n const jsSum = async (): Promise => {\n const reducedData = await reduced.data(); // raw image rgb array\n let sum0 = 0;\n for (let i = 0; i < reducedData.length / 3; i++) sum0 += reducedData[3 * i + 2]; // look only at green value of each pixel\n return sum0;\n };\n if (last.sumMethod === 0) {\n const t0 = now();\n await jsSum();\n const t1 = now();\n await tfSum();\n const t2 = now();\n last.sumMethod = t1 - t0 < t2 - t1 ? 1 : 2;\n }\n const res = last.sumMethod === 1 ? await jsSum() : await tfSum();\n tf.dispose(reduced);\n return res;\n};\n*/\n\nexport async function skip(config: Partial, input: Tensor) {\n let skipFrame = false;\n if (config.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; // cache disabled or input is invalid or too large for cache analysis\n\n /*\n const checkSum = await checksum(input);\n const diff = 100 * (Math.max(checkSum, last.inputSum) / Math.min(checkSum, last.inputSum) - 1);\n last.inputSum = checkSum;\n // if previous frame was skipped, skip this frame if changed more than cacheSensitivity\n // if previous frame was not skipped, then look for cacheSensitivity or difference larger than one in previous frame to avoid resetting cache in subsequent frames unnecessarily\n let skipFrame = diff < Math.max(config.cacheSensitivity, last.cacheDiff);\n // if difference is above 10x threshold, don't use last value to force reset cache for significant change of scenes or images\n last.cacheDiff = diff > 10 * config.cacheSensitivity ? 0 : diff;\n skipFrame = skipFrame && (last.cacheDiff > 0); // if no cached diff value then force no skip\n */\n\n if (!last.inputTensor) {\n last.inputTensor = tf.clone(input);\n } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { // input resolution changed\n tf.dispose(last.inputTensor);\n last.inputTensor = tf.clone(input);\n } else {\n const t: Record = {};\n t.diff = tf.sub(input, last.inputTensor);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; // squared difference relative to input resolution and averaged per channel\n tf.dispose([last.inputTensor, t.diff, t.squared, t.sum]);\n last.inputTensor = tf.clone(input);\n skipFrame = diffRelative <= (config.cacheSensitivity || 0);\n }\n return skipFrame;\n}\n\nexport async function compare(config: Partial, input1: Tensor, input2: Tensor): Promise {\n const t: Record = {};\n if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) {\n if (!config.debug) log('invalid input tensor or tensor shapes do not match:', input1.shape, input2.shape);\n return 0;\n }\n if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) {\n if (!config.debug) log('input tensors must be of shape [1, height, width, 3]:', input1.shape, input2.shape);\n return 0;\n }\n t.input1 = tf.clone(input1);\n t.input2 = (input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2]) ? tf.image.resizeBilinear(input2 as Tensor3D, [input1.shape[1], input1.shape[2]]) : tf.clone(input2);\n t.diff = tf.sub(t.input1, t.input2);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3;\n tf.dispose([t.input1, t.input2, t.diff, t.squared, t.sum]);\n return diffRelative;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as image from '../image/image';\n\n/** Env class that holds detected capabilities */\nexport class Env {\n /** Running in Browser */\n browser: boolean;\n /** Running in NodeJS */\n node: boolean;\n /** Running in WebWorker thread */\n worker: boolean;\n /** Detected platform */\n platform: string = '';\n /** Detected agent */\n agent: string = '';\n /** List of supported backends */\n backends: string[] = [];\n /** Has any work been performed so far */\n initial: boolean;\n /** Are image filters supported? */\n filter: boolean | undefined;\n /** TFJS instance details */\n tfjs: {\n version: undefined | string,\n };\n /** Is offscreenCanvas supported? */\n offscreen: undefined | boolean;\n /** Are performance counter instant values or additive */\n perfadd: boolean = false;\n /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */\n tensorflow: {\n version: undefined | string,\n gpu: undefined | boolean,\n } = {\n version: undefined,\n gpu: undefined,\n };\n /** WASM detected capabilities */\n wasm: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n simd: undefined | boolean,\n multithread: undefined | boolean,\n } = {\n supported: undefined,\n backend: undefined,\n simd: undefined,\n multithread: undefined,\n };\n /** WebGL detected capabilities */\n webgl: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n version: undefined | string,\n renderer: undefined | string,\n shader: undefined | string,\n vendor: undefined | string,\n } = {\n supported: undefined,\n backend: undefined,\n version: undefined,\n renderer: undefined,\n shader: undefined,\n vendor: undefined,\n };\n /** WebGPU detected capabilities */\n webgpu: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n adapter: undefined | GPUAdapterInfo,\n } = {\n supported: undefined,\n backend: undefined,\n adapter: undefined,\n };\n /** CPU info */\n cpu: {\n model: undefined | string,\n flags: string[],\n } = {\n model: undefined,\n flags: [],\n };\n /** List of supported kernels for current backend */\n kernels: string[] = [];\n /** MonkeyPatch for Canvas */\n Canvas: undefined;\n /** MonkeyPatch for Image */\n Image: undefined;\n /** MonkeyPatch for ImageData */\n ImageData: undefined;\n\n constructor() {\n this.browser = typeof navigator !== 'undefined';\n this.node = (typeof process !== 'undefined') && (typeof process.versions !== 'undefined') && (typeof process.versions.node !== 'undefined');\n this.tfjs = { version: tf.version['tfjs-core'] };\n this.offscreen = typeof OffscreenCanvas !== 'undefined';\n this.initial = true;\n\n // @ts-ignore WorkerGlobalScope evaluated in browser only\n this.worker = this.browser && this.offscreen ? (typeof WorkerGlobalScope !== 'undefined') : undefined;\n if (typeof navigator !== 'undefined') { // TBD replace with navigator.userAgentData once in mainline\n const raw = navigator.userAgent.match(/\\(([^()]+)\\)/g);\n if (raw?.[0]) {\n const platformMatch = raw[0].match(/\\(([^()]+)\\)/g);\n this.platform = (platformMatch?.[0]) ? platformMatch[0].replace(/\\(|\\)/g, '') : '';\n this.agent = navigator.userAgent.replace(raw[0], '');\n if (this.platform[1]) this.agent = this.agent.replace(raw[1], '');\n this.agent = this.agent.replace(/ /g, ' ');\n }\n } else if (typeof process !== 'undefined') {\n this.platform = `${process.platform} ${process.arch}`;\n this.agent = `NodeJS ${process.version}`;\n }\n }\n\n /** update backend information */\n async updateBackend() {\n // analyze backends\n this.backends = Object.keys(tf.engine().registryFactory);\n try { // backend may not be initialized\n this.tensorflow = {\n version: (tf.backend()['binding'] ? tf.backend()['binding'].TF_Version : undefined),\n gpu: (tf.backend()['binding'] ? tf.backend()['binding'].isUsingGpuDevice() : undefined),\n };\n } catch { /**/ }\n this.wasm.supported = typeof WebAssembly !== 'undefined';\n this.wasm.backend = this.backends.includes('wasm');\n if (this.wasm.supported && this.wasm.backend) {\n this.wasm.simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n this.wasm.multithread = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n }\n const c = image.canvas(100, 100);\n const gl = c ? c.getContext('webgl2') as WebGL2RenderingContext : undefined; // causes too many gl contexts\n this.webgl.supported = typeof gl !== 'undefined';\n this.webgl.backend = this.backends.includes('webgl');\n if (this.webgl.supported && this.webgl.backend && gl) {\n this.webgl.version = gl.getParameter(gl.VERSION);\n this.webgl.vendor = gl.getParameter(gl.VENDOR);\n this.webgl.renderer = gl.getParameter(gl.RENDERER);\n this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\n }\n this.webgpu.supported = this.browser && typeof navigator.gpu !== 'undefined';\n this.webgpu.backend = this.backends.includes('webgpu');\n try {\n if (this.webgpu.supported) {\n const adapter = await navigator.gpu.requestAdapter();\n this.webgpu.adapter = await adapter?.requestAdapterInfo();\n }\n } catch {\n this.webgpu.supported = false;\n }\n try {\n this.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase());\n } catch { /**/ }\n }\n\n /** update cpu information */\n updateCPU() {\n const cpu = { model: '', flags: [] };\n if (this.node && this.platform.startsWith('linux')) {\n /*\n const fs = require('fs');\n try {\n const data = fs.readFileSync('/proc/cpuinfo').toString();\n for (const line of data.split('\\n')) {\n if (line.startsWith('model name')) cpu.model = line.match(/:(.*)/g)[0].replace(':', '').trim();\n if (line.startsWith('flags')) cpu.flags = line.match(/:(.*)/g)[0].replace(':', '').trim().split(' ').sort();\n }\n } catch { }\n */\n }\n if (!this.cpu) Object.defineProperty(this, 'cpu', { value: cpu });\n else this.cpu = cpu;\n }\n}\n\nexport const env = new Env();\n", "import { log } from './util';\n\n// const log = (...msg) => console.log('webcam', ...msg); // eslint-disable-line no-console\n\n/** WebCam configuration */\nexport interface WebCamConfig {\n /**\n * element can be:\n * - string which indicates dom element id\n * - actual HTMLVideo dom element\n * - undefined in which case a new HTMLVideoElement will be created\n */\n element: string | HTMLVideoElement | undefined,\n /** print messages on console */\n debug: boolean,\n /** use front or back camera */\n mode: 'front' | 'back',\n /** camera crop mode */\n crop: boolean,\n /** desired webcam width */\n width: number,\n /** desired webcam height */\n height: number,\n /** deviceId of the video device to use */\n id?: string,\n}\n\nexport class WebCam { // eslint-disable-line @typescript-eslint/no-extraneous-class\n /** current webcam configuration */\n config: WebCamConfig;\n /** instance of dom element associated with webcam stream */\n element: HTMLVideoElement | undefined;\n /** active webcam stream */\n stream: MediaStream | undefined;\n /** enumerated video devices */\n devices: MediaDeviceInfo[] = [];\n\n constructor() {\n this.config = {\n element: undefined,\n debug: true,\n mode: 'front',\n crop: false,\n width: 0,\n height: 0,\n };\n }\n\n /** get active webcam stream track */\n public get track(): MediaStreamTrack | undefined {\n if (!this.stream) return undefined;\n return this.stream.getVideoTracks()[0];\n }\n\n /** get webcam capabilities */\n public get capabilities(): MediaTrackCapabilities | undefined {\n if (!this.track) return undefined;\n return this.track.getCapabilities ? this.track.getCapabilities() : undefined;\n }\n\n /** get webcam constraints */\n public get constraints(): MediaTrackConstraints | undefined {\n if (!this.track) return undefined;\n return this.track.getConstraints ? this.track.getConstraints() : undefined;\n }\n\n /** get webcam settings */\n public get settings(): MediaTrackSettings | undefined {\n if (!this.stream) return undefined;\n const track: MediaStreamTrack = this.stream.getVideoTracks()[0];\n return track.getSettings ? track.getSettings() : undefined;\n }\n\n /** get webcam label */\n public get label(): string {\n if (!this.track) return '';\n return this.track.label;\n }\n\n /** is webcam paused */\n public get paused(): boolean {\n return this.element?.paused || false;\n }\n\n /** webcam current width */\n public get width(): number {\n return this.element?.videoWidth || 0;\n }\n\n /** webcam current height */\n public get height(): number {\n return this.element?.videoHeight || 0;\n }\n\n public enumerate = async (): Promise => {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.devices = devices.filter((device) => device.kind === 'videoinput');\n } catch {\n this.devices = [];\n }\n return this.devices;\n };\n\n /** start method initializizes webcam stream and associates it with a dom video element */\n public start = async (webcamConfig?: Partial): Promise => {\n // set config\n if (webcamConfig?.debug) this.config.debug = webcamConfig?.debug;\n if (webcamConfig?.crop) this.config.crop = webcamConfig?.crop;\n if (webcamConfig?.mode) this.config.mode = webcamConfig?.mode;\n if (webcamConfig?.width) this.config.width = webcamConfig?.width;\n if (webcamConfig?.height) this.config.height = webcamConfig?.height;\n if (webcamConfig?.id) this.config.id = webcamConfig?.id;\n\n // use or create dom element\n if (webcamConfig?.element) {\n if (typeof webcamConfig.element === 'string') {\n const el = document.getElementById(webcamConfig.element);\n if (el && el instanceof HTMLVideoElement) {\n this.element = el;\n } else {\n if (this.config.debug) log('webcam', 'cannot get dom element', webcamConfig.element);\n return;\n }\n } else if (webcamConfig.element instanceof HTMLVideoElement) {\n this.element = webcamConfig.element;\n } else {\n if (this.config.debug) log('webcam', 'unknown dom element', webcamConfig.element);\n return;\n }\n } else {\n this.element = document.createElement('video');\n }\n\n // set constraints to use\n const requestedConstraints: MediaStreamConstraints = {\n audio: false,\n video: {\n facingMode: this.config.mode === 'front' ? 'user' : 'environment',\n // @ts-ignore // resizeMode is still not defined in tslib\n resizeMode: this.config.crop ? 'crop-and-scale' : 'none',\n width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth },\n height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight },\n },\n };\n if (this.config.id) (requestedConstraints.video as MediaTrackConstraintSet).deviceId = this.config.id;\n\n // set default event listeners\n this.element.addEventListener('play', () => { if (this.config.debug) log('webcam', 'play'); });\n this.element.addEventListener('pause', () => { if (this.config.debug) log('webcam', 'pause'); });\n this.element.addEventListener('click', async () => { // pause when clicked on screen and resume on next click\n if (!this.element || !this.stream) return;\n if (this.element.paused) await this.element.play();\n else this.element.pause();\n });\n\n // get webcam and set it to run in dom element\n if (!navigator?.mediaDevices) {\n if (this.config.debug) log('webcam', 'no devices');\n return;\n }\n try {\n this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); // get stream that satisfies constraints\n } catch (err) {\n log('webcam', err);\n return;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam', 'no stream');\n return;\n }\n this.element.srcObject = this.stream; // assign it to dom element\n const ready = new Promise((resolve) => { // wait until stream is ready\n if (!this.element) resolve(false);\n else this.element.onloadeddata = () => resolve(true);\n });\n await ready;\n await this.element.play(); // start playing\n\n if (this.config.debug) {\n log('webcam', {\n width: this.width,\n height: this.height,\n label: this.label,\n stream: this.stream,\n track: this.track,\n settings: this.settings,\n constraints: this.constraints,\n capabilities: this.capabilities,\n });\n }\n };\n\n /** pause webcam video method */\n public pause = (): void => {\n if (this.element) this.element.pause();\n };\n\n /** play webcam video method */\n public play = async (): Promise => {\n if (this.element) await this.element.play();\n };\n\n /** stop method stops active webcam stream track and disconnects webcam */\n public stop = (): void => {\n if (this.config.debug) log('webcam', 'stop');\n if (this.track) this.track.stop();\n };\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log, join } from '../util/util';\nimport type { GraphModel } from './types';\nimport type { Config } from '../config';\nimport * as modelsDefs from '../../models/models.json';\n\nconst options = {\n cacheModels: true,\n cacheSupported: true,\n verbose: true,\n debug: false,\n modelBasePath: '',\n};\n\nexport interface ModelInfo {\n name: string,\n inCache: boolean,\n sizeDesired: number,\n sizeFromManifest: number,\n sizeLoadedWeights: number,\n url: string,\n}\n\nexport const modelStats: Record = {};\n\nasync function httpHandler(url: string, init?: RequestInit): Promise {\n if (options.debug) log('load model fetch:', url, init);\n return fetch(url, init);\n}\n\nexport function setModelLoadOptions(config: Config) {\n options.cacheModels = config.cacheModels;\n options.verbose = config.debug;\n options.modelBasePath = config.modelBasePath;\n}\n\nexport async function loadModel(modelPath: string | undefined): Promise {\n let modelUrl = join(options.modelBasePath, modelPath || '');\n if (!modelUrl.toLowerCase().endsWith('.json')) modelUrl += '.json';\n const modelPathSegments = modelUrl.includes('/') ? modelUrl.split('/') : modelUrl.split('\\\\');\n const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace('.json', '');\n const cachedModelName = 'indexeddb://' + shortModelName; // generate short model name for cache\n modelStats[shortModelName] = {\n name: shortModelName,\n sizeFromManifest: 0,\n sizeLoadedWeights: 0,\n sizeDesired: modelsDefs[shortModelName],\n inCache: false,\n url: '',\n };\n options.cacheSupported = (typeof indexedDB !== 'undefined'); // check if localStorage and indexedb are available\n let cachedModels = {};\n try {\n cachedModels = (options.cacheSupported && options.cacheModels) ? await tf.io.listModels() : {}; // list all models already in cache // this fails for webview although localStorage is defined\n } catch {\n options.cacheSupported = false;\n }\n modelStats[shortModelName].inCache = (options.cacheSupported && options.cacheModels) && Object.keys(cachedModels).includes(cachedModelName); // is model found in cache\n modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl;\n const tfLoadOptions = typeof fetch === 'undefined' ? {} : { fetchFunc: (url: string, init?: RequestInit) => httpHandler(url, init) };\n let model: GraphModel = new tf.GraphModel(modelStats[shortModelName].url, tfLoadOptions) as unknown as GraphModel; // create model prototype and decide if load from cache or from original modelurl\n let loaded = false;\n try {\n // @ts-ignore private function\n model.findIOHandler(); // decide how to actually load a model\n if (options.debug) log('model load handler:', model['handler']);\n } catch (err) {\n log('error finding model i/o handler:', modelUrl, err);\n }\n try {\n // @ts-ignore private property\n const artifacts = await model.handler?.load() || null; // load manifest\n modelStats[shortModelName].sizeFromManifest = artifacts?.weightData?.byteLength || 0;\n if (artifacts) model.loadSync(artifacts); // load weights\n else model = await tf.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions) as unknown as GraphModel;\n // @ts-ignore private property\n modelStats[shortModelName].sizeLoadedWeights = model.artifacts?.weightData?.byteLength || 0;\n if (options.verbose) log('load:', { model: shortModelName, url: model['modelUrl'], bytes: modelStats[shortModelName].sizeLoadedWeights });\n loaded = true;\n } catch (err) {\n log('error loading model:', modelUrl, err);\n }\n if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { // save model to cache\n try {\n const saveResult = await model.save(cachedModelName);\n if (options.debug) log('model saved:', cachedModelName, saveResult);\n } catch (err) {\n log('error saving model:', modelUrl, err);\n }\n }\n return model;\n}\n", "/** TFJS custom backend registration */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human } from '../human';\nimport { log } from '../util/util';\nimport * as image from '../image/image';\nimport type { AnyCanvas } from '../exports';\n\nexport const config = {\n name: 'humangl',\n priority: 999,\n canvas: null as null | AnyCanvas,\n gl: null as null | WebGL2RenderingContext,\n extensions: [] as string[] | null,\n webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2\n alpha: false,\n antialias: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: false,\n stencil: false,\n failIfMajorPerformanceCaveat: false, // default=true\n desynchronized: true, // default=undefined\n },\n};\n\nfunction extensions(): void {\n /*\n https://www.khronos.org/registry/webgl/extensions/\n https://webglreport.com/?v=2\n */\n const gl = config.gl;\n if (!gl) return;\n config.extensions = gl.getSupportedExtensions();\n // gl.getExtension('KHR_parallel_shader_compile');\n}\n\n/**\n * Registers custom WebGL2 backend to be used by Human library\n *\n * @returns void\n */\nexport function register(instance: Human): void {\n // force backend reload if gl context is not valid\n if (instance.config.backend !== 'humangl') return;\n if ((config.name in tf.engine().registry) && !config?.gl?.getParameter(config.gl.VERSION)) {\n log('humangl error: backend invalid context');\n instance.models.reset();\n /*\n log('resetting humangl backend');\n await tf.removeBackend(config.name);\n await register(instance); // re-register\n */\n }\n if (!tf.findBackend(config.name)) {\n try {\n config.canvas = image.canvas(100, 100);\n } catch (err) {\n log('humangl error: cannot create canvas:', err);\n return;\n }\n try {\n config.gl = config.canvas.getContext('webgl2', config.webGLattr) as WebGL2RenderingContext;\n if (!config.gl) {\n log('humangl error: cannot get webgl context');\n return;\n }\n const glv2 = config.gl.getParameter(config.gl.VERSION).includes('2.0');\n if (!glv2) {\n log('backend override: using fallback webgl backend as webgl 2.0 is not detected');\n instance.config.backend = 'webgl';\n return;\n }\n if (config.canvas) {\n config.canvas.addEventListener('webglcontextlost', (e) => {\n log('humangl error:', e.type);\n log('possible browser memory leak using webgl or conflict with multiple backend registrations');\n instance.emit('error');\n throw new Error('backend error: webgl context lost');\n });\n config.canvas.addEventListener('webglcontextrestored', (e) => {\n log('humangl error: context restored:', e);\n });\n config.canvas.addEventListener('webglcontextcreationerror', (e) => {\n log('humangl error: context create:', e);\n });\n }\n } catch (err) {\n log('humangl error: cannot get webgl context:', err);\n return;\n }\n try {\n tf.setWebGLContext(2, config.gl);\n } catch (err) {\n log('humangl error: cannot set webgl context:', err);\n return;\n }\n try {\n const ctx = new tf.GPGPUContext(config.gl);\n // @ts-ignore uncompatible kernelMs timing info\n tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);\n } catch (err) {\n log('humangl error: cannot register webgl backend:', err);\n return;\n }\n try {\n const kernels = tf.getKernelsForBackend('webgl');\n kernels.forEach((kernelConfig) => {\n const newKernelConfig = { ...kernelConfig, backendName: config.name };\n tf.registerKernel(newKernelConfig);\n });\n } catch (err) {\n log('humangl error: cannot update webgl backend registration:', err);\n return;\n }\n try {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_VERSION) tf.env().set('WEBGL_VERSION', 2);\n } catch (err) {\n log('humangl error: cannot set WebGL backend flags:', err);\n return;\n }\n extensions();\n const backend = tf.backend();\n const current = typeof backend['gpgpu'] !== 'undefined' ? backend['getGPGPUContext']().gl : null;\n if (current) {\n if (instance.config.debug) log('humangl backend registered:', { webgl: current.getParameter(current.VERSION) as string, renderer: current.getParameter(current.RENDERER) as string });\n } else {\n log('humangl error: no current gl context:', current, config.gl);\n }\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from './types';\n\nexport const constants: Record = {\n tf255: 255.0,\n tf1: 1.0,\n tf2: 2.0,\n tf05: 0.5,\n tf127: 127.5,\n rgb: [0.2989, 0.5870, 0.1140],\n};\n\nexport function init() {\n constants.tf255 = tf.scalar(255.0, 'float32');\n constants.tf1 = tf.scalar(1.0, 'float32');\n constants.tf2 = tf.scalar(2.0, 'float32');\n constants.tf05 = tf.scalar(0.5, 'float32');\n constants.tf127 = tf.scalar(127.5, 'float32');\n constants.rgb = tf.tensor1d([0.2989, 0.5870, 0.1140], 'float32'); // factors for red/green/blue colors when converting to grayscale\n}\n", "/** TFJS backend initialization and customization */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human, Config, BackendEnum } from '../human';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as humangl from './humangl';\nimport * as constants from './constants';\nimport type { TensorInfo } from './types';\n\nexport async function getBestBackend(): Promise {\n await env.updateBackend(); // update env on backend init\n if (!env.browser) return 'tensorflow';\n if (env.webgpu.supported && env.webgpu.backend) return 'webgpu';\n if (env.webgl.supported && env.webgl.backend) return 'webgl';\n if (env.wasm.supported && env.wasm.backend) return 'wasm';\n return 'cpu';\n}\n\nfunction registerCustomOps(config: Config) {\n const newKernels: string[] = [];\n if (!env.kernels.includes('mod')) {\n const kernelMod = {\n kernelName: 'Mod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.sub(op.inputs.a, tf.mul(tf.div(op.inputs.a, op.inputs.b), op.inputs.b))),\n };\n tf.registerKernel(kernelMod);\n env.kernels.push('mod');\n newKernels.push('mod');\n }\n if (!env.kernels.includes('floormod')) {\n const kernelFloorMod = {\n kernelName: 'FloorMod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.add(tf.mul(tf.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf.mod(op.inputs.a, op.inputs.b))),\n };\n tf.registerKernel(kernelFloorMod);\n env.kernels.push('floormod');\n newKernels.push('floormod');\n }\n /*\n if (!env.kernels.includes('atan2') && config.softwareKernels) {\n const kernelAtan2 = {\n kernelName: 'Atan2',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu');\n const t = tf.atan2(op.inputs.a, op.inputs.b);\n tf.setBackend(backend);\n return t;\n }),\n };\n if (config.debug) log('registered kernel:', 'atan2');\n log('registered kernel:', 'atan2');\n tf.registerKernel(kernelAtan2);\n env.kernels.push('atan2');\n newKernels.push('atan2');\n }\n */\n if (!env.kernels.includes('rotatewithoffset') && config.softwareKernels) {\n const kernelRotateWithOffset = {\n kernelName: 'RotateWithOffset',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu'); // eslint-disable-line @typescript-eslint/no-floating-promises\n const t = tf.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center);\n tf.setBackend(backend); // eslint-disable-line @typescript-eslint/no-floating-promises\n return t;\n }),\n };\n tf.registerKernel(kernelRotateWithOffset);\n env.kernels.push('rotatewithoffset');\n newKernels.push('rotatewithoffset');\n }\n if ((newKernels.length > 0) && config.debug) log('registered kernels:', newKernels);\n}\n\nlet defaultFlags: Record = {};\n\nexport async function check(instance: Human, force = false) {\n instance.state = 'backend';\n if (instance.config.backend?.length === 0) instance.config.backend = await getBestBackend();\n if (force || env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {\n const timeStamp = now();\n\n if (instance.config.backend && instance.config.backend.length > 0) {\n // detect web worker\n // @ts-ignore ignore missing type for WorkerGlobalScope as that is the point\n if (typeof window === 'undefined' && typeof WorkerGlobalScope !== 'undefined' && instance.config.debug) {\n if (instance.config.debug) log('running inside web worker');\n }\n\n // force browser vs node backend\n if (env.browser && instance.config.backend === 'tensorflow') {\n if (instance.config.debug) log('override: backend set to tensorflow while running in browser');\n instance.config.backend = 'webgl';\n }\n if (env.node && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl')) {\n if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`);\n instance.config.backend = 'tensorflow';\n }\n\n // handle webgpu\n if (env.browser && instance.config.backend === 'webgpu') {\n if (typeof navigator === 'undefined' || typeof navigator.gpu === 'undefined') {\n log('override: backend set to webgpu but browser does not support webgpu');\n instance.config.backend = 'webgl';\n } else {\n const adapter = await navigator.gpu.requestAdapter();\n if (instance.config.debug) log('enumerated webgpu adapter:', adapter);\n if (!adapter) {\n log('override: backend set to webgpu but browser reports no available gpu');\n instance.config.backend = 'webgl';\n } else {\n // @ts-ignore requestAdapterInfo is not in tslib\n const adapterInfo = 'requestAdapterInfo' in adapter ? await adapter.requestAdapterInfo() : undefined;\n // if (adapter.features) adapter.features.forEach((feature) => log('webgpu features:', feature));\n log('webgpu adapter info:', adapterInfo);\n }\n }\n }\n\n // check available backends\n let available = Object.keys(tf.engine().registryFactory as Record);\n if (instance.config.backend === 'humangl' && !available.includes('humangl')) {\n humangl.register(instance);\n available = Object.keys(tf.engine().registryFactory as Record);\n }\n if (instance.config.debug) log('available backends:', available);\n\n if (!available.includes(instance.config.backend)) {\n log(`error: backend ${instance.config.backend} not found in registry`);\n instance.config.backend = env.node ? 'tensorflow' : 'webgl';\n if (instance.config.debug) log(`override: setting backend ${instance.config.backend}`);\n }\n\n if (instance.config.debug) log('setting backend:', [instance.config.backend]);\n\n // customize wasm\n if (instance.config.backend === 'wasm') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true);\n if (instance.config.debug) log('wasm path:', instance.config.wasmPath);\n if (typeof tf.setWasmPaths !== 'undefined') tf.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch);\n else throw new Error('backend error: attempting to use wasm backend but wasm path is not set');\n let mt = false;\n let simd = false;\n try {\n mt = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n if (instance.config.debug) log(`wasm execution: ${simd ? 'simd' : 'no simd'} ${mt ? 'multithreaded' : 'singlethreaded'}`);\n if (instance.config.debug && !simd) log('warning: wasm simd support is not enabled');\n } catch {\n log('wasm detection failed');\n }\n }\n\n try {\n await tf.setBackend(instance.config.backend);\n await tf.ready();\n } catch (err) {\n log('error: cannot set backend:', instance.config.backend, err);\n return false;\n }\n // @ts-ignore private property\n if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(tf.env().flags));\n }\n\n // customize humangl\n if (tf.getBackend() === 'humangl' || tf.getBackend() === 'webgl') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', true); // default=false \n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_EXP_CONV) tf.env().set('WEBGL_EXP_CONV', true); // default=false \n // if (tf.env().flagRegistry['WEBGL_PACK_DEPTHWISECONV']) tf.env().set('WEBGL_PACK_DEPTHWISECONV', false); // default=true \n // if (tf.env().flagRegistry.USE_SETTIMEOUTCUSTOM) tf.env().set('USE_SETTIMEOUTCUSTOM', true); // default=false \n // if (tf.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD) tf.env().set('CPU_HANDOFF_SIZE_THRESHOLD', 1024); // default=1000\n // if (tf.env().flagRegistry['WEBGL_FORCE_F16_TEXTURES'] && !instance.config.object.enabled) tf.env().set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision\n if (instance.config.debug && typeof instance.config.deallocate !== 'undefined' && instance.config.deallocate) { // hidden param\n log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', true);\n tf.env().set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0);\n }\n }\n\n // customize webgpu\n if (tf.getBackend() === 'webgpu') {\n // if (tf.env().flagRegistry['WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512);\n // if (tf.env().flagRegistry['WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE']) tf.env().set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0);\n // if (tf.env().flagRegistry['WEBGPU_CPU_FORWARD']) tf.env().set('WEBGPU_CPU_FORWARD', true);\n }\n\n if (instance.config.debug) {\n // @ts-ignore private property\n const newFlags = tf.env().flags;\n const updatedFlags = {};\n for (const key of Object.keys(newFlags)) {\n if (defaultFlags[key] === newFlags[key]) continue;\n updatedFlags[key] = newFlags[key];\n }\n if (instance.config.debug && Object.keys(updatedFlags).length > 0) log('backend:', tf.getBackend(), 'flags:', updatedFlags);\n }\n\n if (instance.config.flags && Object.keys(instance.config.flags).length > 0) {\n if (instance.config.debug) log('flags:', instance.config['flags']);\n for (const [key, val] of Object.entries(instance.config.flags)) {\n tf.env().set(key, val as number | boolean);\n }\n }\n\n tf.enableProdMode();\n constants.init();\n instance.performance.initBackend = Math.trunc(now() - timeStamp);\n instance.config.backend = tf.getBackend() as BackendEnum;\n await env.updateBackend(); // update env on backend init\n registerCustomOps(instance.config);\n // await env.updateBackend(); // update env on backend init\n env.initial = false;\n }\n return true;\n}\n\n// register fake missing tfjs ops\nexport function fakeOps(kernelNames: string[], config) {\n // if (config.debug) log('registerKernel:', kernelNames);\n for (const kernelName of kernelNames) {\n const kernelConfig = {\n kernelName,\n backendName: config.backend,\n kernelFunc: (param): TensorInfo => {\n if (config.debug) log('kernelFunc', kernelName, config.backend, param);\n return param?.inputs?.info as TensorInfo;\n },\n // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n };\n tf.registerKernel(kernelConfig);\n }\n env.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); // re-scan registered ops\n}\n", "/**\n * Module that implements helper draw functions, exposed as human.draw\n */\n\nimport { mergeDeep, now } from '../util/util';\nimport { env } from '../util/env';\nimport { getCanvasContext, rect } from './primitives';\nimport { options } from './options';\nimport { face } from './face';\nimport { body } from './body';\nimport { hand } from './hand';\nimport { object } from './object';\nimport { gesture } from './gesture';\nimport { defaultLabels } from './labels';\nimport type { Result, PersonResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet drawTime = 0;\n\nexport { options } from './options';\nexport { face } from './face';\nexport { body } from './body';\nexport { hand } from './hand';\nexport { object } from './object';\nexport { gesture } from './gesture';\n\n/** draw combined person results instead of individual detection result objects */\nexport function person(inCanvas: AnyCanvas, result: PersonResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n\n for (let i = 0; i < result.length; i++) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels) {\n const label = `person #${i}`;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.stroke();\n }\n }\n}\n\n/** draw processed canvas */\nexport function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, output: AnyCanvas) {\n if (!input || !output) return;\n const ctx = getCanvasContext(output) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.drawImage(input, 0, 0);\n}\n\n/** meta-function that performs draw for: canvas, face, body, hand */\nexport async function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial) {\n if (!result?.performance || !inCanvas) return null;\n const timeStamp = now();\n const localOptions = mergeDeep(options, drawOptions);\n const promise = Promise.all([\n face(inCanvas, result.face, localOptions),\n body(inCanvas, result.body, localOptions),\n hand(inCanvas, result.hand, localOptions),\n object(inCanvas, result.object, localOptions),\n gesture(inCanvas, result.gesture, localOptions), // gestures do not have buffering\n // person(inCanvas, result.persons, localOptions); // already included above\n ]);\n drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp);\n result.performance.draw = drawTime;\n return promise;\n}\n\n/** sets default label templates for face/body/hand/object/gestures */\nexport function init() {\n options.faceLabels = defaultLabels.face;\n options.bodyLabels = defaultLabels.body;\n options.bodyPartLabels = defaultLabels.bodyPart;\n options.handLabels = defaultLabels.hand;\n options.fingerLabels = defaultLabels.finger;\n options.objectLabels = defaultLabels.object;\n options.gestureLabels = defaultLabels.gesture;\n}\n", "import { log } from '../util/util';\nimport type { AnyCanvas } from '../exports';\nimport type { Point } from '../result';\nimport type { DrawOptions } from './options';\n\nexport const getCanvasContext = (input: AnyCanvas) => {\n if (!input) log('draw error: invalid canvas');\n else if (!input.getContext) log('draw error: canvas context not defined');\n else {\n const ctx = input.getContext('2d');\n if (!ctx) log('draw error: cannot get canvas context');\n else return ctx;\n }\n return null;\n};\n\nexport const rad2deg = (theta: number) => Math.round((theta * 180) / Math.PI);\n\nexport const replace = (str: string, source: string, target: string | number) => str.replace(source, typeof target === 'number' ? target.toFixed(1) : target);\n\nexport const colorDepth = (z: number | undefined, opt: DrawOptions): string => { // performance optimization needed\n if (!opt.useDepth || typeof z === 'undefined') return opt.color;\n const rgb = Uint8ClampedArray.from([127 + (2 * z), 127 - (2 * z), 255]);\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opt.alpha})`;\n};\n\nexport function labels(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, str: string, startX: number, startY: number, localOptions: DrawOptions) {\n const line: string[] = str.replace(/\\[.*\\]/g, '').split('\\n').map((l) => l.trim()); // remove unmatched templates and split into array\n const x = Math.max(0, startX);\n for (let i = line.length - 1; i >= 0; i--) {\n const y = i * localOptions.lineHeight + startY;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(line[i], x + 5, y + 16);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(line[i], x + 4, y + 15);\n }\n}\n\nexport function point(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, z: number | undefined, localOptions: DrawOptions) {\n ctx.fillStyle = colorDepth(z, localOptions);\n ctx.beginPath();\n ctx.arc(x, y, localOptions.pointSize, 0, 2 * Math.PI);\n ctx.fill();\n}\n\nexport function rect(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, width: number, height: number, localOptions: DrawOptions) {\n ctx.beginPath();\n ctx.lineWidth = localOptions.lineWidth;\n if (localOptions.useCurves) {\n const cx = (x + x + width) / 2;\n const cy = (y + y + height) / 2;\n ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n ctx.moveTo(x + localOptions.roundRect, y);\n ctx.lineTo(x + width - localOptions.roundRect, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions.roundRect);\n ctx.lineTo(x + width, y + height - localOptions.roundRect);\n ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions.roundRect, y + height);\n ctx.lineTo(x + localOptions.roundRect, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions.roundRect);\n ctx.lineTo(x, y + localOptions.roundRect);\n ctx.quadraticCurveTo(x, y, x + localOptions.roundRect, y);\n ctx.closePath();\n }\n ctx.stroke();\n}\n\nexport function lines(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n for (const pt of points) {\n ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions);\n ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1]));\n }\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function curves(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.lineWidth = localOptions.lineWidth;\n if (!localOptions.useCurves || points.length <= 2) {\n lines(ctx, points, localOptions);\n return;\n }\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 0; i < points.length - 2; i++) {\n const xc = (points[i][0] + points[i + 1][0]) / 2;\n const yc = (points[i][1] + points[i + 1][1]) / 2;\n ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc);\n }\n ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function arrow(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, from: Point, to: Point, radius = 5) {\n let angle;\n let x;\n let y;\n ctx.beginPath();\n ctx.moveTo(from[0], from[1]);\n ctx.lineTo(to[0], to[1]);\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.moveTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n}\n", "/** Draw Options\n * - Accessed via `human.draw.options` or provided per each draw method as the drawOptions optional parameter\n */\n\nexport interface DrawOptions {\n /** draw line color */\n color: string,\n /** alpha value used for lines */\n alpha: number,\n /** label color */\n labelColor: string,\n /** label shadow color */\n shadowColor: string,\n /** label font */\n font: string,\n /** line spacing between labels */\n lineHeight: number,\n /** line width for drawn lines */\n lineWidth: number,\n /** size of drawn points */\n pointSize: number,\n /** draw rounded boxes by n pixels */\n roundRect: number,\n /** should points be drawn? */\n drawPoints: boolean,\n /** should labels be drawn? */\n drawLabels: boolean,\n /** should face attention keypoints be highlighted */\n drawAttention: boolean;\n /** should detected gestures be drawn? */\n drawGestures: boolean,\n /** should draw boxes around detection results? */\n drawBoxes: boolean,\n /** should draw polygons from detection points? */\n drawPolygons: boolean,\n /** should draw gaze arrows? */\n drawGaze: boolean,\n /** should fill polygons? */\n fillPolygons: boolean,\n /** use z-coordinate when available */\n useDepth: boolean,\n /** should lines be curved? */\n useCurves: boolean,\n /** string template for face labels */\n faceLabels: string,\n /** string template for body labels */\n bodyLabels: string,\n /** string template for body part labels */\n bodyPartLabels: string,\n /** string template for hand labels */\n handLabels: string,\n /** string template for hand labels */\n fingerLabels: string,\n /** string template for object labels */\n objectLabels: string,\n /** string template for gesture labels */\n gestureLabels: string,\n}\n\n/** currently set draw options {@link DrawOptions} */\nexport const options: DrawOptions = {\n color: 'rgba(173, 216, 230, 0.6)' as string, // 'lightblue' with light alpha channel\n labelColor: 'rgba(173, 216, 230, 1)' as string, // 'lightblue' with dark alpha channel\n shadowColor: 'black' as string,\n alpha: 0.5 as number,\n font: 'small-caps 16px \"Segoe UI\"' as string,\n lineHeight: 18 as number,\n lineWidth: 4 as number,\n pointSize: 2 as number,\n roundRect: 8 as number,\n drawPoints: false as boolean,\n drawLabels: true as boolean,\n drawBoxes: true as boolean,\n drawAttention: true as boolean,\n drawGestures: true as boolean,\n drawPolygons: true as boolean,\n drawGaze: true as boolean,\n fillPolygons: false as boolean,\n useDepth: true as boolean,\n useCurves: false as boolean,\n faceLabels: '' as string,\n bodyLabels: '' as string,\n bodyPartLabels: '' as string,\n objectLabels: '' as string,\n handLabels: '' as string,\n fingerLabels: '' as string,\n gestureLabels: '' as string,\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nexport const meshAnnotations: Record = {\n silhouette: [\n 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288,\n 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136,\n 172, 58, 132, 93, 234, 127, 162, 21, 54, 103, 67, 109,\n ],\n // lipsUpperOuter: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11\n // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10\n // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11\n // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11\n lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409],\n lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291],\n lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415],\n lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308],\n lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306],\n lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408],\n lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292],\n lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407],\n rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], // 7\n rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], // 9\n rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], // 7\n rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], // 9\n rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], // 7\n rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], // 9\n rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], // 9\n rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], // 8\n rightEyebrowLower: [35, 124, 46, 53, 52, 65], // 6\n rightEyeIris: [473, 474, 475, 476, 477], // 5\n leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398],\n leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362],\n leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414],\n leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463],\n leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413],\n leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464],\n leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465],\n leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417],\n leftEyebrowLower: [265, 353, 276, 283, 282, 295],\n leftEyeIris: [468, 469, 470, 471, 472],\n midwayBetweenEyes: [168],\n noseTip: [1],\n noseBottom: [2],\n noseRightCorner: [98],\n noseLeftCorner: [327],\n rightCheek: [205],\n leftCheek: [425],\n};\n\nexport const meshLandmarks: Record = {\n count: 468,\n mouth: 13,\n symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]],\n};\n\nexport const blazeFaceLandmarks: Record = {\n leftEye: 0,\n rightEye: 1,\n nose: 2,\n mouth: 3,\n leftEar: 4,\n rightEar: 5,\n symmetryLine: [3, 2],\n};\n\nexport const irisIndices: { key: string, indices: number[] }[] = [ // A mapping from facemesh model keypoints to iris model keypoints.\n { key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] }, // 7 x 3d\n { key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] }, // 7 x 3d\n { key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] }, // 7 x 3d\n { key: 'EyeLower0', indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, // 7 x 3d\n { key: 'EyeLower1', indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, // 9 x 3d\n { key: 'EyeLower2', indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, // 9 x 3d\n { key: 'EyeLower3', indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, // 9 x 3d\n { key: 'EyebrowUpper', indices: [63, 64, 65, 66, 67, 68, 69, 70] }, // 8 x 3d\n { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] }, // 6 x 3d\n];\n\nexport const UV468: [number, number][] = [\n [0.499976992607117, 0.652534008026123],\n [0.500025987625122, 0.547487020492554],\n [0.499974012374878, 0.602371990680695],\n [0.482113003730774, 0.471979022026062],\n [0.500150978565216, 0.527155995368958],\n [0.499909996986389, 0.498252987861633],\n [0.499523013830185, 0.40106201171875],\n [0.289712011814117, 0.380764007568359],\n [0.499954998493195, 0.312398016452789],\n [0.499987006187439, 0.269918978214264],\n [0.500023007392883, 0.107050001621246],\n [0.500023007392883, 0.666234016418457],\n [0.5000159740448, 0.679224014282227],\n [0.500023007392883, 0.692348003387451],\n [0.499976992607117, 0.695277988910675],\n [0.499976992607117, 0.70593398809433],\n [0.499976992607117, 0.719385027885437],\n [0.499976992607117, 0.737019002437592],\n [0.499967992305756, 0.781370997428894],\n [0.499816000461578, 0.562981009483337],\n [0.473773002624512, 0.573909997940063],\n [0.104906998574734, 0.254140973091125],\n [0.365929991006851, 0.409575998783112],\n [0.338757991790771, 0.41302502155304],\n [0.311120003461838, 0.409460008144379],\n [0.274657994508743, 0.389131009578705],\n [0.393361985683441, 0.403706014156342],\n [0.345234006643295, 0.344011008739471],\n [0.370094001293182, 0.346076011657715],\n [0.319321990013123, 0.347265005111694],\n [0.297903001308441, 0.353591024875641],\n [0.24779200553894, 0.410809993743896],\n [0.396889001131058, 0.842755019664764],\n [0.280097991228104, 0.375599980354309],\n [0.106310002505779, 0.399955987930298],\n [0.2099249958992, 0.391353011131287],\n [0.355807989835739, 0.534406006336212],\n [0.471751004457474, 0.65040397644043],\n [0.474155008792877, 0.680191993713379],\n [0.439785003662109, 0.657229006290436],\n [0.414617002010345, 0.66654098033905],\n [0.450374007225037, 0.680860996246338],\n [0.428770989179611, 0.682690978050232],\n [0.374971002340317, 0.727805018424988],\n [0.486716985702515, 0.547628998756409],\n [0.485300987958908, 0.527395009994507],\n [0.257764995098114, 0.314490020275116],\n [0.401223003864288, 0.455172002315521],\n [0.429818987846375, 0.548614978790283],\n [0.421351999044418, 0.533740997314453],\n [0.276895999908447, 0.532056987285614],\n [0.483370006084442, 0.499586999416351],\n [0.33721199631691, 0.282882988452911],\n [0.296391993761063, 0.293242990970612],\n [0.169294998049736, 0.193813979625702],\n [0.447580009698868, 0.302609980106354],\n [0.392390012741089, 0.353887975215912],\n [0.354490011930466, 0.696784019470215],\n [0.067304998636246, 0.730105042457581],\n [0.442739009857178, 0.572826027870178],\n [0.457098007202148, 0.584792017936707],\n [0.381974011659622, 0.694710969924927],\n [0.392388999462128, 0.694203019142151],\n [0.277076005935669, 0.271932005882263],\n [0.422551989555359, 0.563233017921448],\n [0.385919004678726, 0.281364023685455],\n [0.383103013038635, 0.255840003490448],\n [0.331431001424789, 0.119714021682739],\n [0.229923993349075, 0.232002973556519],\n [0.364500999450684, 0.189113974571228],\n [0.229622006416321, 0.299540996551514],\n [0.173287004232407, 0.278747975826263],\n [0.472878992557526, 0.666198015213013],\n [0.446828007698059, 0.668527007102966],\n [0.422762006521225, 0.673889994621277],\n [0.445307999849319, 0.580065965652466],\n [0.388103008270264, 0.693961024284363],\n [0.403039008378983, 0.706539988517761],\n [0.403629004955292, 0.693953037261963],\n [0.460041999816895, 0.557139039039612],\n [0.431158006191254, 0.692366003990173],\n [0.452181994915009, 0.692366003990173],\n [0.475387006998062, 0.692366003990173],\n [0.465828001499176, 0.779190003871918],\n [0.472328990697861, 0.736225962638855],\n [0.473087012767792, 0.717857003211975],\n [0.473122000694275, 0.704625964164734],\n [0.473033010959625, 0.695277988910675],\n [0.427942007780075, 0.695277988910675],\n [0.426479011774063, 0.703539967536926],\n [0.423162013292313, 0.711845993995667],\n [0.4183090031147, 0.720062971115112],\n [0.390094995498657, 0.639572978019714],\n [0.013953999616206, 0.560034036636353],\n [0.499913990497589, 0.58014702796936],\n [0.413199990987778, 0.69539999961853],\n [0.409626007080078, 0.701822996139526],\n [0.468080013990402, 0.601534962654114],\n [0.422728985548019, 0.585985004901886],\n [0.463079988956451, 0.593783974647522],\n [0.37211999297142, 0.47341400384903],\n [0.334562003612518, 0.496073007583618],\n [0.411671012639999, 0.546965003013611],\n [0.242175996303558, 0.14767599105835],\n [0.290776997804642, 0.201445996761322],\n [0.327338010072708, 0.256527006626129],\n [0.399509996175766, 0.748921036720276],\n [0.441727995872498, 0.261676013469696],\n [0.429764986038208, 0.187834024429321],\n [0.412198007106781, 0.108901023864746],\n [0.288955003023148, 0.398952007293701],\n [0.218936994671822, 0.435410976409912],\n [0.41278201341629, 0.398970007896423],\n [0.257135003805161, 0.355440020561218],\n [0.427684992551804, 0.437960982322693],\n [0.448339998722076, 0.536936044692993],\n [0.178560003638268, 0.45755398273468],\n [0.247308000922203, 0.457193970680237],\n [0.286267012357712, 0.467674970626831],\n [0.332827985286713, 0.460712015628815],\n [0.368755996227264, 0.447206974029541],\n [0.398963987827301, 0.432654976844788],\n [0.476410001516342, 0.405806005001068],\n [0.189241006970406, 0.523923993110657],\n [0.228962004184723, 0.348950982093811],\n [0.490725994110107, 0.562400996685028],\n [0.404670000076294, 0.485132992267609],\n [0.019469000399113, 0.401564002037048],\n [0.426243007183075, 0.420431017875671],\n [0.396993011236191, 0.548797011375427],\n [0.266469985246658, 0.376977026462555],\n [0.439121007919312, 0.51895797252655],\n [0.032313998788595, 0.644356966018677],\n [0.419054001569748, 0.387154996395111],\n [0.462783008813858, 0.505746960639954],\n [0.238978996872902, 0.779744982719421],\n [0.198220998048782, 0.831938028335571],\n [0.107550002634525, 0.540755033493042],\n [0.183610007166862, 0.740257024765015],\n [0.134409993886948, 0.333683013916016],\n [0.385764002799988, 0.883153975009918],\n [0.490967005491257, 0.579378008842468],\n [0.382384985685349, 0.508572995662689],\n [0.174399003386497, 0.397670984268188],\n [0.318785011768341, 0.39623498916626],\n [0.343364000320435, 0.400596976280212],\n [0.396100014448166, 0.710216999053955],\n [0.187885001301765, 0.588537991046906],\n [0.430987000465393, 0.944064974784851],\n [0.318993002176285, 0.898285031318665],\n [0.266247987747192, 0.869701027870178],\n [0.500023007392883, 0.190576016902924],\n [0.499976992607117, 0.954452991485596],\n [0.366169989109039, 0.398822009563446],\n [0.393207013607025, 0.39553701877594],\n [0.410373002290726, 0.391080021858215],\n [0.194993004202843, 0.342101991176605],\n [0.388664990663528, 0.362284004688263],\n [0.365961998701096, 0.355970978736877],\n [0.343364000320435, 0.355356991291046],\n [0.318785011768341, 0.35834002494812],\n [0.301414996385574, 0.363156020641327],\n [0.058132998645306, 0.319076001644135],\n [0.301414996385574, 0.387449026107788],\n [0.499987989664078, 0.618434011936188],\n [0.415838003158569, 0.624195992946625],\n [0.445681989192963, 0.566076993942261],\n [0.465844005346298, 0.620640993118286],\n [0.49992299079895, 0.351523995399475],\n [0.288718998432159, 0.819945991039276],\n [0.335278987884521, 0.852819979190826],\n [0.440512001514435, 0.902418971061707],\n [0.128294005990028, 0.791940987110138],\n [0.408771991729736, 0.373893976211548],\n [0.455606997013092, 0.451801002025604],\n [0.499877005815506, 0.908990025520325],\n [0.375436991453171, 0.924192011356354],\n [0.11421000212431, 0.615022003650665],\n [0.448662012815475, 0.695277988910675],\n [0.4480200111866, 0.704632043838501],\n [0.447111994028091, 0.715808033943176],\n [0.444831997156143, 0.730794012546539],\n [0.430011987686157, 0.766808986663818],\n [0.406787008047104, 0.685672998428345],\n [0.400738000869751, 0.681069016456604],\n [0.392399996519089, 0.677703022956848],\n [0.367855995893478, 0.663918972015381],\n [0.247923001646996, 0.601333022117615],\n [0.452769994735718, 0.420849978923798],\n [0.43639200925827, 0.359887003898621],\n [0.416164010763168, 0.368713974952698],\n [0.413385987281799, 0.692366003990173],\n [0.228018000721931, 0.683571994304657],\n [0.468268007040024, 0.352671027183533],\n [0.411361992359161, 0.804327011108398],\n [0.499989002943039, 0.469825029373169],\n [0.479153990745544, 0.442654013633728],\n [0.499974012374878, 0.439637005329132],\n [0.432112008333206, 0.493588984012604],\n [0.499886006116867, 0.866917014122009],\n [0.49991300702095, 0.821729004383087],\n [0.456548988819122, 0.819200992584229],\n [0.344549000263214, 0.745438992977142],\n [0.37890899181366, 0.574010014533997],\n [0.374292999505997, 0.780184984207153],\n [0.319687992334366, 0.570737957954407],\n [0.357154995203018, 0.604269981384277],\n [0.295284003019333, 0.621580958366394],\n [0.447750002145767, 0.862477004528046],\n [0.410986006259918, 0.508723020553589],\n [0.31395098567009, 0.775308012962341],\n [0.354128003120422, 0.812552988529205],\n [0.324548006057739, 0.703992962837219],\n [0.189096003770828, 0.646299958229065],\n [0.279776990413666, 0.71465802192688],\n [0.1338230073452, 0.682700991630554],\n [0.336768001317978, 0.644733011722565],\n [0.429883986711502, 0.466521978378296],\n [0.455527991056442, 0.548622965812683],\n [0.437114000320435, 0.558896005153656],\n [0.467287987470627, 0.529924988746643],\n [0.414712011814117, 0.335219979286194],\n [0.37704598903656, 0.322777986526489],\n [0.344107985496521, 0.320150971412659],\n [0.312875986099243, 0.32233202457428],\n [0.283526003360748, 0.333190023899078],\n [0.241245999932289, 0.382785975933075],\n [0.102986000478268, 0.468762993812561],\n [0.267612010240555, 0.424560010433197],\n [0.297879010438919, 0.433175981044769],\n [0.333433985710144, 0.433878004550934],\n [0.366427004337311, 0.426115989685059],\n [0.396012008190155, 0.416696012020111],\n [0.420121014118195, 0.41022801399231],\n [0.007561000064015, 0.480777025222778],\n [0.432949006557465, 0.569517970085144],\n [0.458638995885849, 0.479089021682739],\n [0.473466008901596, 0.545744001865387],\n [0.476087987422943, 0.563830018043518],\n [0.468472003936768, 0.555056989192963],\n [0.433990985155106, 0.582361996173859],\n [0.483518004417419, 0.562983989715576],\n [0.482482999563217, 0.57784903049469],\n [0.42645001411438, 0.389798998832703],\n [0.438998997211456, 0.39649498462677],\n [0.450067013502121, 0.400434017181396],\n [0.289712011814117, 0.368252992630005],\n [0.276670008897781, 0.363372981548309],\n [0.517862021923065, 0.471948027610779],\n [0.710287988185883, 0.380764007568359],\n [0.526226997375488, 0.573909997940063],\n [0.895093023777008, 0.254140973091125],\n [0.634069979190826, 0.409575998783112],\n [0.661242008209229, 0.41302502155304],\n [0.688880026340485, 0.409460008144379],\n [0.725341975688934, 0.389131009578705],\n [0.606630027294159, 0.40370500087738],\n [0.654766023159027, 0.344011008739471],\n [0.629905998706818, 0.346076011657715],\n [0.680678009986877, 0.347265005111694],\n [0.702096998691559, 0.353591024875641],\n [0.75221198797226, 0.410804986953735],\n [0.602918028831482, 0.842862963676453],\n [0.719901978969574, 0.375599980354309],\n [0.893692970275879, 0.399959981441498],\n [0.790081977844238, 0.391354024410248],\n [0.643998026847839, 0.534487962722778],\n [0.528249025344849, 0.65040397644043],\n [0.525849997997284, 0.680191040039062],\n [0.560214996337891, 0.657229006290436],\n [0.585384011268616, 0.66654098033905],\n [0.549625992774963, 0.680860996246338],\n [0.57122802734375, 0.682691991329193],\n [0.624852001667023, 0.72809898853302],\n [0.513050019741058, 0.547281980514526],\n [0.51509702205658, 0.527251958847046],\n [0.742246985435486, 0.314507007598877],\n [0.598631024360657, 0.454979002475739],\n [0.570338010787964, 0.548575043678284],\n [0.578631997108459, 0.533622980117798],\n [0.723087012767792, 0.532054007053375],\n [0.516445994377136, 0.499638974666595],\n [0.662801027297974, 0.282917976379395],\n [0.70362401008606, 0.293271005153656],\n [0.830704987049103, 0.193813979625702],\n [0.552385985851288, 0.302568018436432],\n [0.607609987258911, 0.353887975215912],\n [0.645429015159607, 0.696707010269165],\n [0.932694971561432, 0.730105042457581],\n [0.557260990142822, 0.572826027870178],\n [0.542901992797852, 0.584792017936707],\n [0.6180260181427, 0.694710969924927],\n [0.607590973377228, 0.694203019142151],\n [0.722943007946014, 0.271963000297546],\n [0.577413976192474, 0.563166975975037],\n [0.614082992076874, 0.281386971473694],\n [0.616907000541687, 0.255886018276215],\n [0.668509006500244, 0.119913995265961],\n [0.770092010498047, 0.232020974159241],\n [0.635536015033722, 0.189248979091644],\n [0.77039098739624, 0.299556016921997],\n [0.826722025871277, 0.278755009174347],\n [0.527121007442474, 0.666198015213013],\n [0.553171992301941, 0.668527007102966],\n [0.577238023281097, 0.673889994621277],\n [0.554691970348358, 0.580065965652466],\n [0.611896991729736, 0.693961024284363],\n [0.59696102142334, 0.706539988517761],\n [0.596370995044708, 0.693953037261963],\n [0.539958000183105, 0.557139039039612],\n [0.568841993808746, 0.692366003990173],\n [0.547818005084991, 0.692366003990173],\n [0.52461302280426, 0.692366003990173],\n [0.534089982509613, 0.779141008853912],\n [0.527670979499817, 0.736225962638855],\n [0.526912987232208, 0.717857003211975],\n [0.526877999305725, 0.704625964164734],\n [0.526966989040375, 0.695277988910675],\n [0.572058022022247, 0.695277988910675],\n [0.573521018028259, 0.703539967536926],\n [0.57683801651001, 0.711845993995667],\n [0.581691026687622, 0.720062971115112],\n [0.609944999217987, 0.639909982681274],\n [0.986046016216278, 0.560034036636353],\n [0.5867999792099, 0.69539999961853],\n [0.590372025966644, 0.701822996139526],\n [0.531915009021759, 0.601536989212036],\n [0.577268004417419, 0.585934996604919],\n [0.536915004253387, 0.593786001205444],\n [0.627542972564697, 0.473352015018463],\n [0.665585994720459, 0.495950996875763],\n [0.588353991508484, 0.546862006187439],\n [0.757824003696442, 0.14767599105835],\n [0.709249973297119, 0.201507985591888],\n [0.672684013843536, 0.256581008434296],\n [0.600408971309662, 0.74900496006012],\n [0.55826598405838, 0.261672019958496],\n [0.570303976535797, 0.187870979309082],\n [0.588165998458862, 0.109044015407562],\n [0.711045026779175, 0.398952007293701],\n [0.781069993972778, 0.435405015945435],\n [0.587247014045715, 0.398931980133057],\n [0.742869973182678, 0.355445981025696],\n [0.572156012058258, 0.437651991844177],\n [0.55186802148819, 0.536570012569427],\n [0.821442008018494, 0.457556009292603],\n [0.752701997756958, 0.457181990146637],\n [0.71375697851181, 0.467626988887787],\n [0.66711300611496, 0.460672974586487],\n [0.631101012229919, 0.447153985500336],\n [0.6008620262146, 0.432473003864288],\n [0.523481011390686, 0.405627012252808],\n [0.810747981071472, 0.523926019668579],\n [0.771045982837677, 0.348959028720856],\n [0.509127020835876, 0.562718033790588],\n [0.595292985439301, 0.485023975372314],\n [0.980530977249146, 0.401564002037048],\n [0.573499977588654, 0.420000016689301],\n [0.602994978427887, 0.548687994480133],\n [0.733529984951019, 0.376977026462555],\n [0.560611009597778, 0.519016981124878],\n [0.967685997486115, 0.644356966018677],\n [0.580985009670258, 0.387160003185272],\n [0.537728011608124, 0.505385041236877],\n [0.760966002941132, 0.779752969741821],\n [0.801778972148895, 0.831938028335571],\n [0.892440974712372, 0.54076099395752],\n [0.816350996494293, 0.740260004997253],\n [0.865594983100891, 0.333687007427216],\n [0.614073991775513, 0.883246004581451],\n [0.508952975273132, 0.579437971115112],\n [0.617941975593567, 0.508316040039062],\n [0.825608015060425, 0.397674977779388],\n [0.681214988231659, 0.39623498916626],\n [0.656635999679565, 0.400596976280212],\n [0.603900015354156, 0.710216999053955],\n [0.81208598613739, 0.588539004325867],\n [0.56801301240921, 0.944564998149872],\n [0.681007981300354, 0.898285031318665],\n [0.733752012252808, 0.869701027870178],\n [0.633830010890961, 0.398822009563446],\n [0.606792986392975, 0.39553701877594],\n [0.589659988880157, 0.391062021255493],\n [0.805015981197357, 0.342108011245728],\n [0.611334979534149, 0.362284004688263],\n [0.634037971496582, 0.355970978736877],\n [0.656635999679565, 0.355356991291046],\n [0.681214988231659, 0.35834002494812],\n [0.698584973812103, 0.363156020641327],\n [0.941866993904114, 0.319076001644135],\n [0.698584973812103, 0.387449026107788],\n [0.584177017211914, 0.624107003211975],\n [0.554318010807037, 0.566076993942261],\n [0.534153997898102, 0.62064003944397],\n [0.711217999458313, 0.819975018501282],\n [0.664629995822906, 0.852871000766754],\n [0.559099972248077, 0.902631998062134],\n [0.871706008911133, 0.791940987110138],\n [0.591234028339386, 0.373893976211548],\n [0.544341027736664, 0.451583981513977],\n [0.624562978744507, 0.924192011356354],\n [0.88577002286911, 0.615028977394104],\n [0.551338016986847, 0.695277988910675],\n [0.551980018615723, 0.704632043838501],\n [0.552887976169586, 0.715808033943176],\n [0.555167973041534, 0.730794012546539],\n [0.569944024085999, 0.767035007476807],\n [0.593203008174896, 0.685675978660583],\n [0.599261999130249, 0.681069016456604],\n [0.607599973678589, 0.677703022956848],\n [0.631937980651855, 0.663500010967255],\n [0.752032995223999, 0.601315021514893],\n [0.547226011753082, 0.420395016670227],\n [0.563543975353241, 0.359827995300293],\n [0.583841025829315, 0.368713974952698],\n [0.586614012718201, 0.692366003990173],\n [0.771915018558502, 0.683578014373779],\n [0.531597018241882, 0.352482974529266],\n [0.588370978832245, 0.804440975189209],\n [0.52079701423645, 0.442565023899078],\n [0.567984998226166, 0.493479013442993],\n [0.543282985687256, 0.819254994392395],\n [0.655317008495331, 0.745514988899231],\n [0.621008992195129, 0.574018001556396],\n [0.625559985637665, 0.78031200170517],\n [0.680198013782501, 0.570719003677368],\n [0.64276397228241, 0.604337990283966],\n [0.704662978649139, 0.621529996395111],\n [0.552012026309967, 0.862591981887817],\n [0.589071989059448, 0.508637011051178],\n [0.685944974422455, 0.775357007980347],\n [0.645735025405884, 0.812640011310577],\n [0.675342977046967, 0.703978002071381],\n [0.810858011245728, 0.646304965019226],\n [0.72012197971344, 0.714666962623596],\n [0.866151988506317, 0.682704985141754],\n [0.663187026977539, 0.644596993923187],\n [0.570082008838654, 0.466325998306274],\n [0.544561982154846, 0.548375964164734],\n [0.562758982181549, 0.558784961700439],\n [0.531987011432648, 0.530140042304993],\n [0.585271000862122, 0.335177004337311],\n [0.622952997684479, 0.32277899980545],\n [0.655896008014679, 0.320163011550903],\n [0.687132000923157, 0.322345972061157],\n [0.716481983661652, 0.333200991153717],\n [0.758756995201111, 0.382786989212036],\n [0.897013008594513, 0.468769013881683],\n [0.732392013072968, 0.424547016620636],\n [0.70211398601532, 0.433162987232208],\n [0.66652500629425, 0.433866024017334],\n [0.633504986763, 0.426087975502014],\n [0.603875994682312, 0.416586995124817],\n [0.579657971858978, 0.409945011138916],\n [0.992439985275269, 0.480777025222778],\n [0.567192018032074, 0.569419980049133],\n [0.54136598110199, 0.478899002075195],\n [0.526564002037048, 0.546118021011353],\n [0.523913025856018, 0.563830018043518],\n [0.531529009342194, 0.555056989192963],\n [0.566035985946655, 0.582329034805298],\n [0.51631098985672, 0.563053965568542],\n [0.5174720287323, 0.577877044677734],\n [0.573594987392426, 0.389806985855103],\n [0.560697972774506, 0.395331978797913],\n [0.549755990505219, 0.399751007556915],\n [0.710287988185883, 0.368252992630005],\n [0.723330020904541, 0.363372981548309],\n];\n\nexport const TRI468: number[] = [\n 127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9,\n 151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56,\n 157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91,\n 181, 85, 84, 17, 206, 203, 36, 148, 171, 140, 92, 40, 39, 193, 189, 244, 159, 158, 28, 247, 246, 161, 236, 3, 196, 54, 68, 104, 193, 168, 8, 117,\n 228, 31, 189, 193, 55, 98, 97, 99, 126, 47, 100, 166, 79, 218, 155, 154, 26, 209, 49, 131, 135, 136, 150, 47, 126, 217, 223, 52, 53, 45, 51, 134, 211,\n 170, 140, 67, 69, 108, 43, 106, 91, 230, 119, 120, 226, 130, 247, 63, 53, 52, 238, 20, 242, 46, 70, 156, 78, 62, 96, 46, 53, 63, 143, 34, 227, 173,\n 155, 133, 123, 117, 111, 44, 125, 19, 236, 134, 51, 216, 206, 205, 154, 153, 22, 39, 37, 167, 200, 201, 208, 36, 142, 100, 57, 212, 202, 20, 60, 99, 28,\n 158, 157, 35, 226, 113, 160, 159, 27, 204, 202, 210, 113, 225, 46, 43, 202, 204, 62, 76, 77, 137, 123, 116, 41, 38, 72, 203, 129, 142, 64, 98, 240, 49,\n 102, 64, 41, 73, 74, 212, 216, 207, 42, 74, 184, 169, 170, 211, 170, 149, 176, 105, 66, 69, 122, 6, 168, 123, 147, 187, 96, 77, 90, 65, 55, 107, 89,\n 90, 180, 101, 100, 120, 63, 105, 104, 93, 137, 227, 15, 86, 85, 129, 102, 49, 14, 87, 86, 55, 8, 9, 100, 47, 121, 145, 23, 22, 88, 89, 179, 6, 122,\n 196, 88, 95, 96, 138, 172, 136, 215, 58, 172, 115, 48, 219, 42, 80, 81, 195, 3, 51, 43, 146, 61, 171, 175, 199, 81, 82, 38, 53, 46, 225, 144, 163, 110,\n 246, 33, 7, 52, 65, 66, 229, 228, 117, 34, 127, 234, 107, 108, 69, 109, 108, 151, 48, 64, 235, 62, 78, 191, 129, 209, 126, 111, 35, 143, 163, 161, 246,\n 117, 123, 50, 222, 65, 52, 19, 125, 141, 221, 55, 65, 3, 195, 197, 25, 7, 33, 220, 237, 44, 70, 71, 139, 122, 193, 245, 247, 130, 33, 71, 21, 162,\n 153, 158, 159, 170, 169, 150, 188, 174, 196, 216, 186, 92, 144, 160, 161, 2, 97, 167, 141, 125, 241, 164, 167, 37, 72, 38, 12, 145, 159, 160, 38, 82, 13,\n 63, 68, 71, 226, 35, 111, 158, 153, 154, 101, 50, 205, 206, 92, 165, 209, 198, 217, 165, 167, 97, 220, 115, 218, 133, 112, 243, 239, 238, 241, 214,\n 135, 169, 190, 173, 133, 171, 208, 32, 125, 44, 237, 86, 87, 178, 85, 86, 179, 84, 85, 180, 83, 84, 181, 201, 83, 182, 137, 93, 132, 76, 62, 183, 61,\n 76, 184, 57, 61, 185, 212, 57, 186, 214, 207, 187, 34, 143, 156, 79, 239, 237, 123, 137, 177, 44, 1, 4, 201, 194, 32, 64, 102, 129, 213, 215, 138, 59,\n 166, 219, 242, 99, 97, 2, 94, 141, 75, 59, 235, 24, 110, 228, 25, 130, 226, 23, 24, 229, 22, 23, 230, 26, 22, 231, 112, 26, 232, 189, 190, 243, 221, 56,\n 190, 28, 56, 221, 27, 28, 222, 29, 27, 223, 30, 29, 224, 247, 30, 225, 238, 79, 20, 166, 59, 75, 60, 75, 240, 147, 177, 215, 20, 79, 166, 187, 147, 213,\n 112, 233, 244, 233, 128, 245, 128, 114, 188, 114, 217, 174, 131, 115, 220, 217, 198, 236, 198, 131, 134, 177, 132, 58, 143, 35, 124, 110, 163, 7, 228,\n 110, 25, 356, 389, 368, 11, 302, 267, 452, 350, 349, 302, 303, 269, 357, 343, 277, 452, 453, 357, 333, 332, 297, 175, 152, 377, 384, 398, 382, 347,\n 348, 330, 303, 304, 270, 9, 336, 337, 278, 279, 360, 418, 262, 431, 304, 408, 409, 310, 415, 407, 270, 409, 410, 450, 348, 347, 422, 430, 434, 313,\n 314, 17, 306, 307, 375, 387, 388, 260, 286, 414, 398, 335, 406, 418, 364, 367, 416, 423, 358, 327, 251, 284, 298, 281, 5, 4, 373, 374, 253, 307, 320,\n 321, 425, 427, 411, 421, 313, 18, 321, 405, 406, 320, 404, 405, 315, 16, 17, 426, 425, 266, 377, 400, 369, 322, 391, 269, 417, 465, 464, 386, 257, 258,\n 466, 260, 388, 456, 399, 419, 284, 332, 333, 417, 285, 8, 346, 340, 261, 413, 441, 285, 327, 460, 328, 355, 371, 329, 392, 439, 438, 382, 341, 256,\n 429, 420, 360, 364, 394, 379, 277, 343, 437, 443, 444, 283, 275, 440, 363, 431, 262, 369, 297, 338, 337, 273, 375, 321, 450, 451, 349, 446, 342, 467,\n 293, 334, 282, 458, 461, 462, 276, 353, 383, 308, 324, 325, 276, 300, 293, 372, 345, 447, 382, 398, 362, 352, 345, 340, 274, 1, 19, 456, 248, 281, 436,\n 427, 425, 381, 256, 252, 269, 391, 393, 200, 199, 428, 266, 330, 329, 287, 273, 422, 250, 462, 328, 258, 286, 384, 265, 353, 342, 387, 259, 257, 424,\n 431, 430, 342, 353, 276, 273, 335, 424, 292, 325, 307, 366, 447, 345, 271, 303, 302, 423, 266, 371, 294, 455, 460, 279, 278, 294, 271, 272, 304, 432,\n 434, 427, 272, 407, 408, 394, 430, 431, 395, 369, 400, 334, 333, 299, 351, 417, 168, 352, 280, 411, 325, 319, 320, 295, 296, 336, 319, 403, 404, 330,\n 348, 349, 293, 298, 333, 323, 454, 447, 15, 16, 315, 358, 429, 279, 14, 15, 316, 285, 336, 9, 329, 349, 350, 374, 380, 252, 318, 402, 403, 6, 197, 419,\n 318, 319, 325, 367, 364, 365, 435, 367, 397, 344, 438, 439, 272, 271, 311, 195, 5, 281, 273, 287, 291, 396, 428, 199, 311, 271, 268, 283, 444, 445,\n 373, 254, 339, 263, 466, 249, 282, 334, 296, 449, 347, 346, 264, 447, 454, 336, 296, 299, 338, 10, 151, 278, 439, 455, 292, 407, 415, 358, 371, 355,\n 340, 345, 372, 390, 249, 466, 346, 347, 280, 442, 443, 282, 19, 94, 370, 441, 442, 295, 248, 419, 197, 263, 255, 359, 440, 275, 274, 300, 383, 368,\n 351, 412, 465, 263, 467, 466, 301, 368, 389, 380, 374, 386, 395, 378, 379, 412, 351, 419, 436, 426, 322, 373, 390, 388, 2, 164, 393, 370, 462, 461,\n 164, 0, 267, 302, 11, 12, 374, 373, 387, 268, 12, 13, 293, 300, 301, 446, 261, 340, 385, 384, 381, 330, 266, 425, 426, 423, 391, 429, 355, 437, 391,\n 327, 326, 440, 457, 438, 341, 382, 362, 459, 457, 461, 434, 430, 394, 414, 463, 362, 396, 369, 262, 354, 461, 457, 316, 403, 402, 315, 404, 403, 314,\n 405, 404, 313, 406, 405, 421, 418, 406, 366, 401, 361, 306, 408, 407, 291, 409, 408, 287, 410, 409, 432, 436, 410, 434, 416, 411, 264, 368, 383, 309,\n 438, 457, 352, 376, 401, 274, 275, 4, 421, 428, 262, 294, 327, 358, 433, 416, 367, 289, 455, 439, 462, 370, 326, 2, 326, 370, 305, 460, 455, 254,\n 449, 448, 255, 261, 446, 253, 450, 449, 252, 451, 450, 256, 452, 451, 341, 453, 452, 413, 464, 463, 441, 413, 414, 258, 442, 441, 257, 443, 442, 259,\n 444, 443, 260, 445, 444, 467, 342, 445, 459, 458, 250, 289, 392, 290, 290, 328, 460, 376, 433, 435, 250, 290, 392, 411, 416, 433, 341, 463, 464, 453,\n 464, 465, 357, 465, 412, 343, 412, 399, 360, 363, 440, 437, 399, 456, 420, 456, 363, 401, 435, 288, 372, 383, 353, 339, 255, 249, 448, 261, 255, 133,\n 243, 190, 133, 155, 112, 33, 246, 247, 33, 130, 25, 398, 384, 286, 362, 398, 414, 362, 463, 341, 263, 359, 467, 263, 249, 255, 466, 467, 260, 75, 60,\n 166, 238, 239, 79, 162, 127, 139, 72, 11, 37, 121, 232, 120, 73, 72, 39, 114, 128, 47, 233, 232, 128, 103, 104, 67, 152, 175, 148, 173, 157, 155,\n 119, 118, 101, 74, 73, 40, 107, 9, 108, 49, 48, 131, 32, 194, 211, 184, 74, 185, 191, 80, 183, 185, 40, 186, 119, 230, 118, 210, 202, 214, 84, 83, 17,\n 77, 76, 146, 161, 160, 30, 190, 56, 173, 182, 106, 194, 138, 135, 192, 129, 203, 98, 54, 21, 68, 5, 51, 4, 145, 144, 23, 90, 77, 91, 207, 205, 187, 83,\n 201, 18, 181, 91, 182, 180, 90, 181, 16, 85, 17, 205, 206, 36, 176, 148, 140, 165, 92, 39, 245, 193, 244, 27, 159, 28, 30, 247, 161, 174, 236, 196,\n 103, 54, 104, 55, 193, 8, 111, 117, 31, 221, 189, 55, 240, 98, 99, 142, 126, 100, 219, 166, 218, 112, 155, 26, 198, 209, 131, 169, 135, 150, 114, 47,\n 217, 224, 223, 53, 220, 45, 134, 32, 211, 140, 109, 67, 108, 146, 43, 91, 231, 230, 120, 113, 226, 247, 105, 63, 52, 241, 238, 242, 124, 46, 156, 95,\n 78, 96, 70, 46, 63, 116, 143, 227, 116, 123, 111, 1, 44, 19, 3, 236, 51, 207, 216, 205, 26, 154, 22, 165, 39, 167, 199, 200, 208, 101, 36, 100, 43,\n 57, 202, 242, 20, 99, 56, 28, 157, 124, 35, 113, 29, 160, 27, 211, 204, 210, 124, 113, 46, 106, 43, 204, 96, 62, 77, 227, 137, 116, 73, 41, 72, 36, 203,\n 142, 235, 64, 240, 48, 49, 64, 42, 41, 74, 214, 212, 207, 183, 42, 184, 210, 169, 211, 140, 170, 176, 104, 105, 69, 193, 122, 168, 50, 123, 187, 89, 96,\n 90, 66, 65, 107, 179, 89, 180, 119, 101, 120, 68, 63, 104, 234, 93, 227, 16, 15, 85, 209, 129, 49, 15, 14, 86, 107, 55, 9, 120, 100, 121, 153, 145, 22,\n 178, 88, 179, 197, 6, 196, 89, 88, 96, 135, 138, 136, 138, 215, 172, 218, 115, 219, 41, 42, 81, 5, 195, 51, 57, 43, 61, 208, 171, 199, 41, 81, 38,\n 224, 53, 225, 24, 144, 110, 105, 52, 66, 118, 229, 117, 227, 34, 234, 66, 107, 69, 10, 109, 151, 219, 48, 235, 183, 62, 191, 142, 129, 126, 116, 111,\n 143, 7, 163, 246, 118, 117, 50, 223, 222, 52, 94, 19, 141, 222, 221, 65, 196, 3, 197, 45, 220, 44, 156, 70, 139, 188, 122, 245, 139, 71, 162, 145,\n 153, 159, 149, 170, 150, 122, 188, 196, 206, 216, 92, 163, 144, 161, 164, 2, 167, 242, 141, 241, 0, 164, 37, 11, 72, 12, 144, 145, 160, 12, 38, 13, 70,\n 63, 71, 31, 226, 111, 157, 158, 154, 36, 101, 205, 203, 206, 165, 126, 209, 217, 98, 165, 97, 237, 220, 218, 237, 239, 241, 210, 214, 169, 140, 171, 32,\n 241, 125, 237, 179, 86, 178, 180, 85, 179, 181, 84, 180, 182, 83, 181, 194, 201, 182, 177, 137, 132, 184, 76, 183, 185, 61, 184, 186, 57, 185, 216, 212,\n 186, 192, 214, 187, 139, 34, 156, 218, 79, 237, 147, 123, 177, 45, 44, 4, 208, 201, 32, 98, 64, 129, 192, 213, 138, 235, 59, 219, 141, 242, 97, 97, 2,\n 141, 240, 75, 235, 229, 24, 228, 31, 25, 226, 230, 23, 229, 231, 22, 230, 232, 26, 231, 233, 112, 232, 244, 189, 243, 189, 221, 190, 222, 28, 221,\n 223, 27, 222, 224, 29, 223, 225, 30, 224, 113, 247, 225, 99, 60, 240, 213, 147, 215, 60, 20, 166, 192, 187, 213, 243, 112, 244, 244, 233, 245, 245,\n 128, 188, 188, 114, 174, 134, 131, 220, 174, 217, 236, 236, 198, 134, 215, 177, 58, 156, 143, 124, 25, 110, 7, 31, 228, 25, 264, 356, 368, 0, 11, 267,\n 451, 452, 349, 267, 302, 269, 350, 357, 277, 350, 452, 357, 299, 333, 297, 396, 175, 377, 381, 384, 382, 280, 347, 330, 269, 303, 270, 151, 9, 337,\n 344, 278, 360, 424, 418, 431, 270, 304, 409, 272, 310, 407, 322, 270, 410, 449, 450, 347, 432, 422, 434, 18, 313, 17, 291, 306, 375, 259, 387, 260,\n 424, 335, 418, 434, 364, 416, 391, 423, 327, 301, 251, 298, 275, 281, 4, 254, 373, 253, 375, 307, 321, 280, 425, 411, 200, 421, 18, 335, 321, 406,\n 321, 320, 405, 314, 315, 17, 423, 426, 266, 396, 377, 369, 270, 322, 269, 413, 417, 464, 385, 386, 258, 248, 456, 419, 298, 284, 333, 168, 417, 8,\n 448, 346, 261, 417, 413, 285, 326, 327, 328, 277, 355, 329, 309, 392, 438, 381, 382, 256, 279, 429, 360, 365, 364, 379, 355, 277, 437, 282, 443, 283,\n 281, 275, 363, 395, 431, 369, 299, 297, 337, 335, 273, 321, 348, 450, 349, 359, 446, 467, 283, 293, 282, 250, 458, 462, 300, 276, 383, 292, 308, 325,\n 283, 276, 293, 264, 372, 447, 346, 352, 340, 354, 274, 19, 363, 456, 281, 426, 436, 425, 380, 381, 252, 267, 269, 393, 421, 200, 428, 371, 266, 329,\n 432, 287, 422, 290, 250, 328, 385, 258, 384, 446, 265, 342, 386, 387, 257, 422, 424, 430, 445, 342, 276, 422, 273, 424, 306, 292, 307, 352, 366, 345,\n 268, 271, 302, 358, 423, 371, 327, 294, 460, 331, 279, 294, 303, 271, 304, 436, 432, 427, 304, 272, 408, 395, 394, 431, 378, 395, 400, 296, 334, 299,\n 6, 351, 168, 376, 352, 411, 307, 325, 320, 285, 295, 336, 320, 319, 404, 329, 330, 349, 334, 293, 333, 366, 323, 447, 316, 15, 315, 331, 358, 279,\n 317, 14, 316, 8, 285, 9, 277, 329, 350, 253, 374, 252, 319, 318, 403, 351, 6, 419, 324, 318, 325, 397, 367, 365, 288, 435, 397, 278, 344, 439, 310,\n 272, 311, 248, 195, 281, 375, 273, 291, 175, 396, 199, 312, 311, 268, 276, 283, 445, 390, 373, 339, 295, 282, 296, 448, 449, 346, 356, 264, 454, 337,\n 336, 299, 337, 338, 151, 294, 278, 455, 308, 292, 415, 429, 358, 355, 265, 340, 372, 388, 390, 466, 352, 346, 280, 295, 442, 282, 354, 19, 370, 285,\n 441, 295, 195, 248, 197, 457, 440, 274, 301, 300, 368, 417, 351, 465, 251, 301, 389, 385, 380, 386, 394, 395, 379, 399, 412, 419, 410, 436, 322, 387,\n 373, 388, 326, 2, 393, 354, 370, 461, 393, 164, 267, 268, 302, 12, 386, 374, 387, 312, 268, 13, 298, 293, 301, 265, 446, 340, 380, 385, 381, 280, 330,\n 425, 322, 426, 391, 420, 429, 437, 393, 391, 326, 344, 440, 438, 458, 459, 461, 364, 434, 394, 428, 396, 262, 274, 354, 457, 317, 316, 402, 316, 315,\n 403, 315, 314, 404, 314, 313, 405, 313, 421, 406, 323, 366, 361, 292, 306, 407, 306, 291, 408, 291, 287, 409, 287, 432, 410, 427, 434, 411, 372, 264,\n 383, 459, 309, 457, 366, 352, 401, 1, 274, 4, 418, 421, 262, 331, 294, 358, 435, 433, 367, 392, 289, 439, 328, 462, 326, 94, 2, 370, 289, 305, 455, 339,\n 254, 448, 359, 255, 446, 254, 253, 449, 253, 252, 450, 252, 256, 451, 256, 341, 452, 414, 413, 463, 286, 441, 414, 286, 258, 441, 258, 257, 442, 257,\n 259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357,\n 453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255];\n\nexport const TRI68: number[] = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59,\n 8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16,\n 45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24,\n 23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29,\n 39, 40, 29, 47, 42, 30, 31, 32, 30, 32, 33, 30, 33, 34, 30, 34, 35, 31, 50, 32, 31, 40, 41, 31, 48, 49, 31, 49, 50, 32, 51, 33, 32, 50, 51, 33, 51, 34, 34, 52,\n 35, 34, 51, 52, 35, 46, 47, 35, 52, 53, 35, 53, 54, 36, 41, 37, 37, 40, 38, 37, 41, 40, 38, 40, 39, 42, 47, 43, 43, 47, 44, 44, 46, 45, 44, 47, 46, 48, 60, 49,\n 48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56,\n 66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22];\n\nexport const TRI33: number[] = [\n /* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3,\n /* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2,\n /* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25,\n /* nose */ 11, 12, 4, 11, 4, 13, 1, 12, 11, 11, 13, 2, 12, 14, 4, 4, 14, 13,\n /* up-lip */ 14, 5, 15, 14, 15, 6, 12, 5, 14, 14, 6, 13,\n /* cheeks */ 8, 12, 1, 2, 13, 10, 8, 26, 12, 10, 13, 27, 26, 5, 12, 13, 6, 27, 0, 26, 8, 10, 27, 3,\n /* chin */ 5, 32, 16, 16, 32, 6, 5, 30, 32, 6, 32, 31,\n /* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29,\n];\n\nexport const TRI7: number[] = [0, 4, 1, 2, 4, 3, 4, 5, 6];\n\nexport const VTX68: number[] = [\n /* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356,\n /* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300,\n /* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327,\n /* eyes */ 33, 160, 158, 133, 153, 144, 362, 385, 387, 263, 373, 380,\n /* lip */ 57, 40, 37, 0, 267, 270, 287, 321, 314, 17, 84, 91,\n /* mouth */ 78, 81, 13, 311, 308, 402, 14, 178,\n];\n\nexport const VTX33: number[] = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152];\n\nexport const VTX7: number[] = [33, 133, 362, 263, 1, 78, 308];\n\nexport const UV68 = VTX68.map((x) => UV468[x]);\n\nexport const UV33 = VTX33.map((x) => UV468[x]);\n\nexport const UV7 = VTX7.map((x) => UV468[x]);\n\n// https://github.com/tensorflow/tfjs-models/blob/master/face-landmarks-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const pairsLips: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nexport const pairsLeftEye: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nexport const pairsLeftEyebrow: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nexport const pairsLeftIris: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nexport const pairsRightEye: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nexport const pairsRightEyebrow: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nexport const pairsRightIris: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nexport const pairsFaceContour: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389],\n [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397],\n [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172],\n [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162],\n [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const contourKeypoints = {\n lips: connectionsToIndices(pairsLips),\n leftEye: connectionsToIndices(pairsLeftEye),\n leftEyebrow: connectionsToIndices(pairsLeftEyebrow),\n leftIris: connectionsToIndices(pairsLeftIris),\n rightEye: connectionsToIndices(pairsRightEye),\n rightEyebrow: connectionsToIndices(pairsRightEyebrow),\n rightIris: connectionsToIndices(pairsRightIris),\n faceOval: connectionsToIndices(pairsFaceContour),\n};\n\nexport const pairsFaceMesh: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11],\n [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72],\n [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175],\n [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73],\n [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74],\n [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40],\n [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76],\n [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56],\n [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21],\n [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144],\n [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91],\n [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85],\n [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193],\n [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247],\n [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117],\n [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98],\n [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209],\n [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47],\n [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67],\n [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230],\n [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46],\n [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46],\n [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236],\n [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154],\n [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57],\n [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28],\n [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113],\n [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62],\n [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64],\n [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41],\n [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170],\n [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122],\n [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89],\n [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63],\n [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14],\n [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100],\n [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88],\n [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215],\n [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43],\n [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81],\n [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229],\n [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107],\n [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129],\n [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117],\n [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3],\n [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220],\n [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71],\n [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188],\n [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164],\n [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38],\n [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206],\n [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165],\n [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214],\n [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171],\n [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84],\n [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201],\n [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57],\n [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214],\n [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44],\n [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64],\n [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2],\n [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24],\n [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26],\n [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189],\n [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29],\n [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247],\n [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147],\n [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187],\n [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114],\n [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217],\n [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110],\n [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356],\n [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357],\n [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333],\n [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9],\n [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418],\n [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450],\n [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313],\n [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335],\n [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423],\n [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307],\n [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421],\n [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426],\n [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322],\n [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456],\n [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417],\n [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355],\n [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382],\n [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443],\n [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431],\n [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446],\n [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458],\n [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372],\n [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274],\n [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269],\n [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266],\n [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265],\n [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424],\n [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366],\n [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423],\n [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432],\n [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394],\n [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352],\n [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295],\n [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323],\n [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358],\n [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374],\n [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6],\n [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344],\n [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195],\n [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283],\n [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282],\n [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338],\n [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292],\n [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442],\n [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441],\n [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300],\n [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263],\n [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436],\n [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370],\n [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293],\n [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330],\n [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440],\n [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459],\n [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354],\n [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315],\n [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366],\n [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291],\n [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264],\n [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352],\n [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433],\n [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462],\n [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255],\n [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252],\n [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441],\n [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257],\n [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459],\n [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290],\n [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341],\n [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357],\n [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420],\n [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372],\n [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133],\n [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33],\n [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263],\n [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466],\n [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72],\n [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73],\n [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152],\n [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74],\n [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184],\n [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185],\n [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77],\n [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190],\n [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54],\n [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145],\n [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181],\n [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16],\n [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245],\n [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30],\n [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111],\n [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240],\n [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198],\n [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114],\n [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109],\n [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231],\n [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124],\n [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70],\n [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3],\n [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26],\n [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43],\n [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56],\n [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124],\n [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96],\n [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235],\n [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42],\n [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140],\n [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193],\n [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179],\n [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68],\n [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15],\n [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120],\n [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89],\n [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138],\n [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57],\n [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41],\n [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118],\n [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66],\n [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142],\n [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118],\n [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196],\n [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156],\n [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122],\n [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164],\n [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12],\n [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31],\n [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98],\n [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237],\n [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179],\n [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181],\n [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184],\n [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186],\n [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218],\n [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45],\n [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235],\n [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97],\n [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230],\n [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232],\n [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222],\n [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224],\n [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213],\n [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192],\n [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188],\n [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174],\n [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25],\n [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264],\n [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350],\n [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299],\n [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151],\n [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424],\n [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449],\n [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18],\n [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434],\n [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301],\n [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280],\n [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335],\n [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396],\n [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413],\n [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168],\n [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417],\n [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381],\n [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365],\n [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395],\n [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335],\n [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250],\n [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292],\n [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354],\n [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426],\n [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371],\n [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290],\n [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422],\n [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422],\n [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358],\n [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331],\n [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395],\n [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296],\n [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285],\n [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329],\n [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331],\n [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8],\n [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351],\n [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397],\n [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248],\n [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175],\n [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295],\n [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356],\n [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308],\n [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265],\n [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285],\n [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457],\n [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394],\n [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410],\n [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268],\n [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298],\n [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420],\n [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344],\n [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274],\n [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316],\n [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323],\n [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306],\n [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372],\n [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366],\n [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435],\n [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328],\n [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359],\n [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253],\n [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286],\n [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258],\n [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309],\n [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305],\n [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453],\n [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343],\n [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360],\n [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265],\n [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n", "// @tensorflow/tfjs-models/face-landmark-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nconst LIPS_CONNECTIONS: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nconst LEFT_EYE_CONNECTIONS: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nconst LEFT_EYEBROW_CONNECTIONS: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nconst LEFT_IRIS_CONNECTIONS: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nconst RIGHT_EYE_CONNECTIONS: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nconst RIGHT_EYEBROW_CONNECTIONS: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nconst RIGHT_IRIS_CONNECTIONS: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nconst FACE_OVAL_CONNECTIONS: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389], [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397], [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172], [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162], [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const MEDIAPIPE_FACE_MESH_CONNECTED_KEYPOINTS_PAIRS: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11], [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72], [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175], [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73], [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74], [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40], [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76], [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56], [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21], [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144], [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91], [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85], [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193], [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247], [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117], [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98], [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209], [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47], [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67], [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230], [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46], [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46], [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236], [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154], [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57], [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28], [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113], [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62], [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64], [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41], [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170], [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122], [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89], [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63], [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14], [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100], [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88], [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215], [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43], [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81], [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229], [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107], [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129], [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117], [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3], [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220], [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71], [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188], [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164], [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38], [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206], [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165], [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214], [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171], [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84], [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201], [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57], [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214], [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44], [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64], [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2], [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24], [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26], [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189], [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29], [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247], [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147], [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187], [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114], [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217], [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110], [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356], [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357], [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333], [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9], [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418], [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450], [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313], [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335], [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423], [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307], [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421], [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426], [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322], [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456], [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417], [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355], [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382], [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443], [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431], [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446], [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458], [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372], [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274], [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269], [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266], [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265], [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424], [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366], [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423], [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432], [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394], [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352], [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295], [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323], [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358], [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374], [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6], [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344], [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195], [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283], [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282], [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338], [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292], [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442], [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441], [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300], [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263], [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436], [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370], [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293], [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330], [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440], [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459], [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354], [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315], [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366], [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291], [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264], [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352], [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433], [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462], [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255], [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252], [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441], [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257], [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459], [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290], [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341], [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357], [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420], [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372], [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133], [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33], [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263], [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466], [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72], [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73], [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152], [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74], [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184], [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185], [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77], [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190], [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54], [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145], [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181], [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16], [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245], [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30], [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111], [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240], [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198], [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114], [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109], [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231], [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124], [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70], [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3], [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26], [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43], [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56], [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124], [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96], [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235], [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42], [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140], [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193], [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179], [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68], [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15], [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120], [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89], [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138], [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57], [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41], [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118], [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66], [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142], [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118], [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196], [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156], [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122], [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164], [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12], [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31], [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98], [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237], [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179], [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181], [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184], [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186], [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218], [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45], [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235], [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97], [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230], [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232], [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222], [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224], [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213], [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192], [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188], [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174], [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25], [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264], [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350], [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299], [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151], [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424], [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449], [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18], [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434], [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301], [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280], [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335], [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396], [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413], [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168], [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417], [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381], [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365], [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395], [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335], [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250], [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292], [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354], [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426], [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371], [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290], [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422], [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422], [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358], [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331], [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395], [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296], [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285], [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329], [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331], [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8], [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351], [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397], [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248], [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175], [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295], [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356], [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308], [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265], [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285], [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457], [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394], [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410], [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268], [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298], [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420], [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344], [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274], [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316], [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323], [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306], [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372], [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366], [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435], [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328], [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359], [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253], [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286], [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258], [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309], [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305], [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453], [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343], [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360], [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265], [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = {\n lips: connectionsToIndices(LIPS_CONNECTIONS),\n leftEye: connectionsToIndices(LEFT_EYE_CONNECTIONS),\n leftEyebrow: connectionsToIndices(LEFT_EYEBROW_CONNECTIONS),\n leftIris: connectionsToIndices(LEFT_IRIS_CONNECTIONS),\n rightEye: connectionsToIndices(RIGHT_EYE_CONNECTIONS),\n rightEyebrow: connectionsToIndices(RIGHT_EYEBROW_CONNECTIONS),\n rightIris: connectionsToIndices(RIGHT_IRIS_CONNECTIONS),\n faceOval: connectionsToIndices(FACE_OVAL_CONNECTIONS),\n};\n\nconst indexLabelPairs: [number, string][] = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR)\n .map(([label, indices]) => indices.map((index) => [index, label] as [number, string]))\n .flat();\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs);\n\ntype AssignAverage = number[];\nexport interface LandmarksRefinementConfig {\n indexesMapping: number[]; // Maps indexes of the given set of landmarks to indexes of the resulting set of landmarks. Should be non empty and contain the same amount of indexes as landmarks in the corresponding input\n zRefinement: 'none'|'copy'|AssignAverage; // Z refinement instructions.\n}\n\nexport const LANDMARKS_REFINEMENT_LIPS_CONFIG = [\n 61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291, // Lower outer.\n 185, 40, 39, 37, 0, 267, 269, 270, 409, // Upper outer(excluding corners).\n 78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308, // Lower inner.\n 191, 80, 81, 82, 13, 312, 311, 310, 415, // Upper inner(excluding corners).\n 76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306, // Lower semi - outer.\n 184, 74, 73, 72, 11, 302, 303, 304, 408, // Upper semi - outer(excluding corners).\n 62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292, // Lower semi - inner.\n 183, 42, 41, 38, 12, 268, 271, 272, 407, // Upper semi - inner(excluding corners).\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // upper contour (excluding corners).\n 130, 25, 110, 24, 23, 22, 26, 112, 243, // Halo x2 lower contour.\n 247, 30, 29, 27, 28, 56, 190, // Halo x2 upper contour (excluding corners).\n 226, 31, 228, 229, 230, 231, 232, 233, 244, // Halo x3 lower contour.\n 113, 225, 224, 223, 222, 221, 189, // Halo x3 upper contour (excluding corners).\n 35, 124, 46, 53, 52, 65, // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour.\n 143, 111, 117, 118, 119, 120, 121, 128, 245, // Halo x5 lower contour.\n 156, 70, 63, 105, 66, 107, 55, 193, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n 359, 255, 339, 254, 253, 252, 256, 341, 463, // Halo x2 lower contour.\n 467, 260, 259, 257, 258, 286, 414, // Halo x2 upper contour (excluding corners).\n 446, 261, 448, 449, 450, 451, 452, 453, 464, // Halo x3 lower contour.\n 342, 445, 444, 443, 442, 441, 413, // Halo x3 upper contour (excluding corners).\n 265, 353, 276, 283, 282, 295, // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour.\n 372, 340, 346, 347, 348, 349, 350, 357, 465, // Halo x5 lower contour.\n 383, 300, 293, 334, 296, 336, 285, 417, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_IRIS_CONFIG = [\n 468, // Center.\n 469, // Iris right edge.\n 470, // Iris top edge.\n 471, // Iris left edge.\n 472, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // Upper contour (excluding corners).\n];\n*/\n\nexport const LANDMARKS_REFINEMENT_RIGHT_IRIS_CONFIG = [\n 473, // Center.\n 474, // Iris right edge.\n 475, // Iris top edge.\n 476, // Iris left edge.\n 477, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n];\n*/\n", "import { TRI468 as triangulation } from '../face/facemeshcoords';\nimport { mergeDeep } from '../util/util';\nimport { getCanvasContext, rad2deg, rect, point, lines, arrow, labels, replace } from './primitives';\nimport { options } from './options';\nimport * as facemeshConstants from '../face/constants';\nimport type { FaceResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet localOptions: DrawOptions;\n\nfunction drawLabels(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (!localOptions.drawLabels || (localOptions.faceLabels?.length === 0)) return;\n let l = localOptions.faceLabels.slice();\n if (f.score) l = replace(l, '[score]', 100 * f.score);\n if (f.gender) l = replace(l, '[gender]', f.gender);\n if (f.genderScore) l = replace(l, '[genderScore]', 100 * f.genderScore);\n if (f.age) l = replace(l, '[age]', f.age);\n if (f.distance) l = replace(l, '[distance]', 100 * f.distance);\n if (f.real) l = replace(l, '[real]', 100 * f.real);\n if (f.live) l = replace(l, '[live]', 100 * f.live);\n if (f.emotion && f.emotion.length > 0) {\n const emotion = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`);\n if (emotion.length > 3) emotion.length = 3;\n l = replace(l, '[emotions]', emotion.join(' '));\n }\n if (f.rotation?.angle?.roll) l = replace(l, '[roll]', rad2deg(f.rotation.angle.roll));\n if (f.rotation?.angle?.yaw) l = replace(l, '[yaw]', rad2deg(f.rotation.angle.yaw));\n if (f.rotation?.angle?.pitch) l = replace(l, '[pitch]', rad2deg(f.rotation.angle.pitch));\n if (f.rotation?.gaze?.bearing) l = replace(l, '[gaze]', rad2deg(f.rotation.gaze.bearing));\n labels(ctx, l, f.box[0], f.box[1], localOptions);\n}\n\nfunction drawIrisElipse(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n // iris: array[center, left, top, right, bottom]\n if (f.annotations?.leftEyeIris && f.annotations?.leftEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n if (f.annotations?.rightEyeIris && f.annotations?.rightEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n}\n\nfunction drawGazeSpheres(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.angle && typeof Path2D !== 'undefined') {\n ctx.strokeStyle = 'pink';\n const valX = (f.box[0] + f.box[2] / 2) - (f.box[3] * rad2deg(f.rotation.angle.yaw) / 90);\n const valY = (f.box[1] + f.box[3] / 2) + (f.box[2] * rad2deg(f.rotation.angle.pitch) / 90);\n const pathV = new Path2D(`\n M ${f.box[0] + f.box[2] / 2} ${f.box[1]}\n C\n ${valX} ${f.box[1]},\n ${valX} ${f.box[1] + f.box[3]},\n ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]}\n `);\n const pathH = new Path2D(`\n M ${f.box[0]} ${f.box[1] + f.box[3] / 2}\n C \n ${f.box[0]} ${valY},\n ${f.box[0] + f.box[2]} ${valY},\n ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2}\n `);\n ctx.stroke(pathH);\n ctx.stroke(pathV);\n }\n}\n\nfunction drawGazeArrows(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.gaze.strength && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) {\n ctx.strokeStyle = 'pink';\n ctx.fillStyle = 'pink';\n const leftGaze = [\n f.annotations.leftEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.leftEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4);\n const rightGaze = [\n f.annotations.rightEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.rightEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4);\n }\n}\n\nfunction drawFacePolygons(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPolygons && f.mesh.length >= 468) {\n ctx.lineWidth = 1;\n for (let i = 0; i < triangulation.length / 3; i++) {\n const points = [triangulation[i * 3 + 0], triangulation[i * 3 + 1], triangulation[i * 3 + 2]].map((index) => f.mesh[index]);\n lines(ctx, points, localOptions);\n }\n drawIrisElipse(f, ctx);\n }\n /*\n if (localOptions.drawPolygons && f.contours.length > 1) {\n ctx.lineWidth = 5;\n lines(ctx, f.contours, opt);\n }\n ctx.lineWidth = 1;\n */\n}\n\nfunction drawFacePoints(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPoints && f.mesh.length >= 468) {\n for (let i = 0; i < f.mesh.length; i++) {\n point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions);\n if (localOptions.drawAttention) {\n if (facemeshConstants.LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) + 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n }\n }\n }\n}\n\nfunction drawFaceBoxes(f: FaceResult, ctx) {\n if (localOptions.drawBoxes) {\n rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions);\n }\n}\n\n/** draw detected faces */\nexport function face(inCanvas: AnyCanvas, result: FaceResult[], drawOptions?: Partial) {\n localOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n for (const f of result) {\n drawFaceBoxes(f, ctx);\n drawLabels(f, ctx);\n if (f.mesh && f.mesh.length > 0) {\n drawFacePoints(f, ctx);\n drawFacePolygons(f, ctx);\n drawGazeSpheres(f, ctx);\n drawGazeArrows(f, ctx);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, curves, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { BodyResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected bodies */\nexport function body(inCanvas: AnyCanvas, result: BodyResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n for (let i = 0; i < result.length; i++) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n ctx.lineWidth = localOptions.lineWidth;\n ctx.font = localOptions.font;\n if (localOptions.drawBoxes && result[i].box && result[i].box.length === 4) {\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.bodyLabels?.length > 0)) {\n let l = localOptions.bodyLabels.slice();\n l = replace(l, '[score]', 100 * result[i].score);\n labels(ctx, l, result[i].box[0], result[i].box[1], localOptions);\n }\n }\n if (localOptions.drawPoints && result[i].keypoints) {\n for (let pt = 0; pt < result[i].keypoints.length; pt++) {\n if (!result[i].keypoints[pt].score || (result[i].keypoints[pt].score === 0)) continue;\n ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions);\n point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);\n }\n }\n if (localOptions.drawLabels && (localOptions.bodyPartLabels?.length > 0) && result[i].keypoints) {\n ctx.font = localOptions.font;\n for (const pt of result[i].keypoints) {\n if (!pt.score || (pt.score === 0)) continue;\n let l = localOptions.bodyPartLabels.slice();\n l = replace(l, '[label]', pt.part);\n l = replace(l, '[score]', 100 * pt.score);\n labels(ctx, l, pt.position[0], pt.position[1], localOptions);\n }\n }\n if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {\n for (const part of Object.values(result[i].annotations)) {\n for (const connected of part) curves(ctx, connected, localOptions);\n }\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { HandResult } from '../result';\nimport type { AnyCanvas, DrawOptions, Point } from '../exports';\n\n/** draw detected hands */\nexport function hand(inCanvas: AnyCanvas, result: HandResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.handLabels?.length > 0)) {\n let l = localOptions.handLabels.slice();\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n if (localOptions.drawPoints) {\n if (h.keypoints && h.keypoints.length > 0) {\n for (const pt of h.keypoints) {\n ctx.fillStyle = colorDepth(pt[2], localOptions);\n point(ctx, pt[0], pt[1], 0, localOptions);\n }\n }\n }\n if (localOptions.drawLabels && h.annotations && (localOptions.fingerLabels?.length > 0)) {\n for (const [part, pt] of Object.entries(h.annotations)) {\n let l = localOptions.fingerLabels.slice();\n l = replace(l, '[label]', part);\n labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions);\n }\n }\n if (localOptions.drawPolygons && h.annotations) {\n const addHandLine = (part: Point[]) => {\n if (!part || part.length === 0 || !part[0]) return;\n for (let i = 0; i < part.length; i++) {\n ctx.beginPath();\n const z = part[i][2] || 0;\n ctx.strokeStyle = colorDepth(i * z, localOptions);\n ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]);\n ctx.lineTo(part[i][0], part[i][1]);\n ctx.stroke();\n }\n };\n ctx.lineWidth = localOptions.lineWidth;\n addHandLine(h.annotations.index);\n addHandLine(h.annotations.middle);\n addHandLine(h.annotations.ring);\n addHandLine(h.annotations.pinky);\n addHandLine(h.annotations.thumb);\n // addPart(h.annotations.palm);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { ObjectResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected objects */\nexport function object(inCanvas: AnyCanvas, result: ObjectResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.objectLabels?.length > 0)) {\n let l = localOptions.objectLabels.slice();\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { GestureResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected gestures */\nexport function gesture(inCanvas: AnyCanvas, result: GestureResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n if (localOptions.drawGestures && (localOptions.gestureLabels?.length > 0)) {\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.fillStyle = localOptions.color;\n let i = 1;\n for (let j = 0; j < result.length; j++) {\n const [where, what] = Object.entries(result[j]);\n if ((what.length > 1) && ((what[1] as string).length > 0)) {\n const who = where[1] as number > 0 ? `#${where[1]}` : '';\n let l = localOptions.gestureLabels.slice();\n l = replace(l, '[where]', where[0]);\n l = replace(l, '[who]', who);\n l = replace(l, '[what]', what[1]);\n labels(ctx, l, 8, 2 + (i * localOptions.lineHeight), localOptions);\n i += 1;\n }\n }\n }\n}\n", "export const defaultLabels = {\n face: `face\n confidence: [score]%\n [gender] [genderScore]%\n age: [age] years\n distance: [distance]cm\n real: [real]%\n live: [live]%\n [emotions]\n roll: [roll]\u00B0 yaw:[yaw]\u00B0 pitch:[pitch]\u00B0\n gaze: [gaze]\u00B0`,\n body: 'body [score]%',\n bodyPart: '[label] [score]%',\n object: '[label] [score]%',\n hand: '[label] [score]%',\n finger: '[label]',\n gesture: '[where] [who]: [what]',\n};\n", "/* eslint-disable no-multi-spaces */\n\nexport const kpt: string[] = [\n 'nose', // 0\n 'leftEyeInside', // 1\n 'leftEye', // 2\n 'leftEyeOutside', // 3\n 'rightEyeInside', // 4\n 'rightEye', // 5\n 'rightEyeOutside', // 6\n 'leftEar', // 7\n 'rightEar', // 8\n 'leftMouth', // 9\n 'rightMouth', // 10\n 'leftShoulder', // 11\n 'rightShoulder', // 12\n 'leftElbow', // 13\n 'rightElbow', // 14\n 'leftWrist', // 15\n 'rightWrist', // 16\n 'leftPinky', // 17\n 'rightPinky', // 18\n 'leftIndex', // 19\n 'rightIndex', // 20\n 'leftThumb', // 21\n 'rightThumb', // 22\n 'leftHip', // 23\n 'rightHip', // 24\n 'leftKnee', // 25\n 'rightKnee', // 26\n 'leftAnkle', // 27\n 'rightAnkle', // 28\n 'leftHeel', // 29\n 'rightHeel', // 30\n 'leftFoot', // 31\n 'rightFoot', // 32\n 'bodyCenter', // 33\n 'bodyTop', // 34\n 'leftPalm', // 35 // z-coord not ok\n 'leftHand', // 36 // similar to wrist but z-coord not ok\n 'rightPalm', // 37 // z-coord not ok\n 'rightHand', // 38 // similar to wrist but z-coord not ok\n];\n\nexport const connected: Record = {\n shoulders: ['leftShoulder', 'rightShoulder'],\n hips: ['rightHip', 'leftHip'],\n mouth: ['leftMouth', 'rightMouth'],\n leftLegUpper: ['leftHip', 'leftKnee'],\n leftLegLower: ['leftKnee', 'leftAnkle'],\n leftFoot: ['leftAnkle', 'leftHeel', 'leftFoot'],\n leftTorso: ['leftShoulder', 'leftHip'],\n leftArmUpper: ['leftShoulder', 'leftElbow'],\n leftArmLower: ['leftElbow', 'leftWrist'],\n leftHand: ['leftWrist', 'leftPalm'],\n leftHandPinky: ['leftPalm', 'leftPinky'],\n leftHandIndex: ['leftPalm', 'leftIndex'],\n leftHandThumb: ['leftPalm', 'leftThumb'],\n leftEyeOutline: ['leftEyeInside', 'leftEyeOutside'],\n rightLegUpper: ['rightHip', 'rightKnee'],\n rightLegLower: ['rightKnee', 'rightAnkle'],\n rightFoot: ['rightAnkle', 'rightHeel', 'rightFoot'],\n rightTorso: ['rightShoulder', 'rightHip'],\n rightArmUpper: ['rightShoulder', 'rightElbow'],\n rightArmLower: ['rightElbow', 'rightWrist'],\n rightHand: ['rightWrist', 'rightPalm'],\n rightHandPinky: ['rightPalm', 'rightPinky'],\n rightHandIndex: ['rightPalm', 'rightIndex'],\n rightHandThumb: ['rightPalm', 'rightThumb'],\n rightEyeOutline: ['rightEyeInside', 'rightEyeOutside'],\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport type { Box } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D } from '../tfjs/types';\n\nexport interface DetectedBox { box: Box, boxRaw: Box, score: number }\n\nlet model: GraphModel | null;\nlet inputSize = 224;\nlet anchorTensor: { x, y };\nconst numLayers = 5;\nconst strides = [8, 16, 32, 32, 32];\n\nexport function createAnchors() {\n const anchors: { x: number, y: number }[] = [];\n let layerId = 0;\n while (layerId < numLayers) {\n let anchorCount = 0;\n let lastSameStrideLayer = layerId;\n while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) {\n anchorCount += 2;\n lastSameStrideLayer++;\n }\n const stride = strides[layerId];\n const featureMapHeight = Math.ceil(inputSize / stride);\n const featureMapWidth = Math.ceil(inputSize / stride);\n for (let y = 0; y < featureMapHeight; ++y) {\n for (let x = 0; x < featureMapWidth; ++x) {\n for (let anchorId = 0; anchorId < anchorCount; ++anchorId) {\n anchors.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight });\n }\n }\n }\n layerId = lastSameStrideLayer;\n }\n anchorTensor = { x: tf.tensor1d(anchors.map((a) => a.x)), y: tf.tensor1d(anchors.map((a) => a.y)) };\n}\n\nexport async function loadDetector(config: Config): Promise {\n if (env.initial) model = null;\n if (!model && config.body['detector'] && config.body['detector'].modelPath || '') {\n model = await loadModel(config.body['detector'].modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug && model) log('cached model:', model['modelUrl']);\n createAnchors();\n return model as GraphModel;\n}\n\nconst cropFactor = [5.0, 5.0];\nexport function decodeBoxes(boxesTensor, anchor) {\n return tf.tidy(() => {\n const split = tf.split(boxesTensor, 12, 1); // first 4 are box data [x,y,w,h] and 4 are keypoints data [x,y] for total of 12\n let xCenter = tf.squeeze(split[0]);\n let yCenter = tf.squeeze(split[1]);\n let width = tf.squeeze(split[2]);\n let height = tf.squeeze(split[3]);\n xCenter = tf.add(tf.div(xCenter, inputSize), anchor.x);\n yCenter = tf.add(tf.div(yCenter, inputSize), anchor.y);\n width = tf.mul(tf.div(width, inputSize), cropFactor[0]);\n height = tf.mul(tf.div(height, inputSize), cropFactor[1]);\n const xMin = tf.sub(xCenter, tf.div(width, 2));\n const yMin = tf.sub(yCenter, tf.div(height, 2));\n const xMax = tf.add(xMin, width);\n const yMax = tf.add(yMin, height);\n const boxes = tf.stack([xMin, yMin, xMax, yMax], 1);\n return boxes;\n });\n}\n\nasync function decodeResults(boxesTensor: Tensor, logitsTensor: Tensor, config: Config, outputSize: [number, number]): Promise {\n const detectedBoxes: DetectedBox[] = [];\n const t: Record = {};\n t.boxes = decodeBoxes(boxesTensor, anchorTensor);\n t.scores = tf.sigmoid(logitsTensor);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, 1, config.body['detector']?.minConfidence || 0.1, config.body['detector']?.iouThreshold || 0.1);\n const nms = await t.nms.data();\n const scores = await t.scores.data();\n const boxes = await t.boxes.array();\n for (const i of Array.from(nms)) {\n const score = scores[i];\n const boxRaw: Box = boxes[i];\n const box: Box = [Math.round(boxRaw[0] * outputSize[0]), Math.round(boxRaw[1] * outputSize[1]), Math.round(boxRaw[2] * outputSize[0]), Math.round(boxRaw[3] * outputSize[1])];\n const detectedBox: DetectedBox = { score, boxRaw, box };\n detectedBoxes.push(detectedBox);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return detectedBoxes;\n}\n\nexport async function detectBoxes(input: Tensor, config: Config, outputSize: [number, number]) {\n const t: Record = {};\n t.res = model?.execute(input, ['Identity']) as Tensor; //\n t.logitsRaw = tf.slice(t.res, [0, 0, 0], [1, -1, 1]);\n t.boxesRaw = tf.slice(t.res, [0, 0, 1], [1, -1, -1]);\n t.logits = tf.squeeze(t.logitsRaw);\n t.boxes = tf.squeeze(t.boxesRaw);\n const boxes = await decodeResults(t.boxes, t.logits, config, outputSize);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import type { Point, Box } from '../result';\n\nexport function calc(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const box: Box = [min[0], min[1], max[0] - min[0], max[1] - min[1]];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function square(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const center = [(min[0] + max[0]) / 2, (min[1] + max[1]) / 2]; // find center x and y coord of all fingers\n const dist = Math.max(center[0] - min[0], center[1] - min[1], -center[0] + max[0], -center[1] + max[1]); // largest distance from center in any direction\n const box: Box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function scale(box: Box, scaleFact: number) {\n const dist = [box[2] * scaleFact, box[3] * scaleFact];\n const newBox: Box = [\n box[0] - (dist[0] - box[2]) / 2,\n box[1] - (dist[1] - box[3]) / 2,\n dist[0],\n dist[1],\n ];\n return newBox;\n}\n\nexport function crop(box: Box) { // [y1, x1, y2, x2] clamped to 0..1\n const yxBox: Box = [Math.max(0, box[1]), Math.max(0, box[0]), Math.min(1, box[3] + box[1]), Math.min(1, box[2] + box[0])];\n return yxBox;\n}\n", "/**\n * BlazePose model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { log, now } from '../util/util';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, Box, Point, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport * as coords from './blazeposecoords';\nimport { loadDetector, detectBoxes, DetectedBox } from './blazeposedetector';\nimport * as box from '../util/box';\nimport { env } from '../util/env';\n\n// const models: [GraphModel | null, GraphModel | null] = [null, null];\nlet model: GraphModel | null;\nlet inputSize = 256;\nlet skipped = Number.MAX_SAFE_INTEGER;\nconst outputNodes: { detector: string[], landmarks: string[] } = {\n landmarks: ['ld_3d', 'activation_segmentation', 'activation_heatmap', 'world_3d', 'output_poseflag'],\n detector: [],\n};\n\nconst cache: BodyResult[] = [];\nlet padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];\nlet lastTime = 0;\n\nconst sigmoid = (x) => (1 - (1 / (1 + Math.exp(x))));\n\nexport const loadDetect = (config: Config): Promise => loadDetector(config);\n\nexport async function loadPose(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.body.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nfunction prepareImage(input: Tensor4D, size: number, cropBox?: Box): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n let final: Tensor;\n if (cropBox) {\n t.cropped = tf.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); // if we have cached box use it to crop input\n }\n if (input.shape[1] !== input.shape[2]) { // only pad if width different than height\n const height: [number, number] = [\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n ];\n const width: [number, number] = [\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n ];\n padding = [\n [0, 0], // dont touch batch\n height, // height before&after\n width, // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(t.cropped || input, padding); // use cropped box if it exists\n t.resize = tf.image.resizeBilinear(t.pad as Tensor4D, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else if (input.shape[1] !== size) { // if input needs resizing\n t.resize = tf.image.resizeBilinear(t.cropped as Tensor4D || input, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else { // if input is already in a correct resolution just normalize it\n final = tf.div(t.cropped || input, constants.tf255);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nfunction rescaleKeypoints(keypoints: BodyKeypoint[], outputSize: [number, number], cropBox?: Box): BodyKeypoint[] {\n for (const kpt of keypoints) { // first rescale due to padding\n kpt.position = [\n Math.trunc(kpt.position[0] * (outputSize[0] + padding[2][0] + padding[2][1]) / outputSize[0] - padding[2][0]),\n Math.trunc(kpt.position[1] * (outputSize[1] + padding[1][0] + padding[1][1]) / outputSize[1] - padding[1][0]),\n kpt.position[2] as number,\n ];\n kpt.positionRaw = [kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1], 2 * (kpt.position[2] as number) / (outputSize[0] + outputSize[1])];\n }\n if (cropBox) { // second rescale due to cropping\n const width = cropBox[2] - cropBox[0];\n const height = cropBox[3] - cropBox[1];\n for (const kpt of keypoints) {\n kpt.positionRaw = [\n kpt.positionRaw[0] / height + cropBox[1], // correct offset due to crop\n kpt.positionRaw[1] / width + cropBox[0], // correct offset due to crop\n kpt.positionRaw[2] as number,\n ];\n kpt.position = [\n Math.trunc(kpt.positionRaw[0] * outputSize[0]),\n Math.trunc(kpt.positionRaw[1] * outputSize[1]),\n kpt.positionRaw[2] as number,\n ];\n }\n }\n return keypoints;\n}\n\nfunction fixKeypoints(keypoints: BodyKeypoint[]) {\n // palm z-coord is incorrect around near-zero so we approximate it\n const leftPalm = keypoints.find((k) => k.part === 'leftPalm') as BodyKeypoint;\n const leftWrist = keypoints.find((k) => k.part === 'leftWrist') as BodyKeypoint;\n const leftIndex = keypoints.find((k) => k.part === 'leftIndex') as BodyKeypoint;\n leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2;\n const rightPalm = keypoints.find((k) => k.part === 'rightPalm') as BodyKeypoint;\n const rightWrist = keypoints.find((k) => k.part === 'rightWrist') as BodyKeypoint;\n const rightIndex = keypoints.find((k) => k.part === 'rightIndex') as BodyKeypoint;\n rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2;\n}\n\nasync function detectLandmarks(input: Tensor, config: Config, outputSize: [number, number]): Promise {\n /**\n * t.ld: 39 keypoints [x,y,z,score,presence] normalized to input size\n * t.segmentation:\n * t.heatmap:\n * t.world: 39 keypoints [x,y,z] normalized to -1..1\n * t.poseflag: body score\n */\n if (!model?.['executor']) return null;\n const t: Record = {};\n [t.ld/* 1,195(39*5) */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117(39*3) */, t.poseflag/* 1,1 */] = model?.execute(input, outputNodes.landmarks) as Tensor[]; // run model\n const poseScore = (await t.poseflag.data())[0];\n const points = await t.ld.data();\n const distances = await t.world.data();\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor])); // dont need tensors after this\n const keypointsRelative: BodyKeypoint[] = [];\n const depth = 5; // each points has x,y,z,visibility,presence\n for (let i = 0; i < points.length / depth; i++) {\n const score = sigmoid(points[depth * i + 3]);\n const presence = sigmoid(points[depth * i + 4]);\n const adjScore = Math.trunc(100 * score * presence * poseScore) / 100;\n const positionRaw: Point = [points[depth * i + 0] / inputSize, points[depth * i + 1] / inputSize, points[depth * i + 2] + 0];\n const position: Point = [Math.trunc(outputSize[0] * positionRaw[0]), Math.trunc(outputSize[1] * positionRaw[1]), positionRaw[2] as number];\n const distance: Point = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0];\n keypointsRelative.push({ part: coords.kpt[i] as BodyLandmark, positionRaw, position, distance, score: adjScore });\n }\n if (poseScore < (config.body.minConfidence || 0)) return null;\n fixKeypoints(keypointsRelative);\n const keypoints: BodyKeypoint[] = rescaleKeypoints(keypointsRelative, outputSize); // keypoints were relative to input image which is padded\n const kpts = keypoints.map((k) => k.position);\n const boxes = box.calc(kpts, [outputSize[0], outputSize[1]]); // now find boxes based on rescaled keypoints\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations };\n return body;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && cache !== null) {\n skipped++;\n } else {\n let boxes: DetectedBox[] = [];\n if (config.body?.['detector']?.['enabled']) {\n const preparedImage = prepareImage(input, 224);\n boxes = await detectBoxes(preparedImage, config, outputSize);\n tf.dispose(preparedImage);\n } else {\n boxes = [{ box: [0, 0, 0, 0] as Box, boxRaw: [0, 0, 1, 1], score: 0 }]; // running without detector\n }\n for (let i = 0; i < boxes.length; i++) {\n const preparedBox = prepareImage(input, 256, boxes[i]?.boxRaw); // padded and resized\n cache.length = 0;\n const bodyResult = await detectLandmarks(preparedBox, config, outputSize);\n tf.dispose(preparedBox);\n if (!bodyResult) continue;\n bodyResult.id = i;\n // bodyResult.score = 0; // TBD\n cache.push(bodyResult);\n }\n /*\n cropBox = [0, 0, 1, 1]; // reset crop coordinates\n if (cache?.boxRaw && config.skipAllowed) {\n const cx = (2.0 * cache.boxRaw[0] + cache.boxRaw[2]) / 2;\n const cy = (2.0 * cache.boxRaw[1] + cache.boxRaw[3]) / 2;\n let size = cache.boxRaw[2] > cache.boxRaw[3] ? cache.boxRaw[2] : cache.boxRaw[3];\n size = (size * 1.0) / 2; // enlarge and half it\n if (cx > 0.1 && cx < 0.9 && cy > 0.1 && cy < 0.9 && size > 0.1) { // only update if box is sane\n const y = 0; // cy - size;\n const x = cx - size;\n cropBox = [y, x, y + 1, x + 1]; // [y0,x0,y1,x1] used for cropping but width/height are not yet implemented so we only reposition image to center of body\n }\n }\n */\n lastTime = now();\n skipped = 0;\n }\n return cache;\n}\n", "/**\n * CoCo Labels used by object detection implementations\n */\nexport const labels = [\n { class: 1, label: 'person' },\n { class: 2, label: 'bicycle' },\n { class: 3, label: 'car' },\n { class: 4, label: 'motorcycle' },\n { class: 5, label: 'airplane' },\n { class: 6, label: 'bus' },\n { class: 7, label: 'train' },\n { class: 8, label: 'truck' },\n { class: 9, label: 'boat' },\n { class: 10, label: 'traffic light' },\n { class: 11, label: 'fire hydrant' },\n { class: 12, label: 'stop sign' },\n { class: 13, label: 'parking meter' },\n { class: 14, label: 'bench' },\n { class: 15, label: 'bird' },\n { class: 16, label: 'cat' },\n { class: 17, label: 'dog' },\n { class: 18, label: 'horse' },\n { class: 19, label: 'sheep' },\n { class: 20, label: 'cow' },\n { class: 21, label: 'elephant' },\n { class: 22, label: 'bear' },\n { class: 23, label: 'zebra' },\n { class: 24, label: 'giraffe' },\n { class: 25, label: 'backpack' },\n { class: 26, label: 'umbrella' },\n { class: 27, label: 'handbag' },\n { class: 28, label: 'tie' },\n { class: 29, label: 'suitcase' },\n { class: 30, label: 'frisbee' },\n { class: 31, label: 'skis' },\n { class: 32, label: 'snowboard' },\n { class: 33, label: 'sports ball' },\n { class: 34, label: 'kite' },\n { class: 35, label: 'baseball bat' },\n { class: 36, label: 'baseball glove' },\n { class: 37, label: 'skateboard' },\n { class: 38, label: 'surfboard' },\n { class: 39, label: 'tennis racket' },\n { class: 40, label: 'bottle' },\n { class: 41, label: 'wine glass' },\n { class: 42, label: 'cup' },\n { class: 43, label: 'fork' },\n { class: 44, label: 'knife' },\n { class: 45, label: 'spoon' },\n { class: 46, label: 'bowl' },\n { class: 47, label: 'banana' },\n { class: 48, label: 'apple' },\n { class: 49, label: 'sandwich' },\n { class: 50, label: 'orange' },\n { class: 51, label: 'broccoli' },\n { class: 52, label: 'carrot' },\n { class: 53, label: 'hot dog' },\n { class: 54, label: 'pizza' },\n { class: 55, label: 'donut' },\n { class: 56, label: 'cake' },\n { class: 57, label: 'chair' },\n { class: 58, label: 'couch' },\n { class: 59, label: 'potted plant' },\n { class: 60, label: 'bed' },\n { class: 61, label: 'dining table' },\n { class: 62, label: 'toilet' },\n { class: 63, label: 'tv' },\n { class: 64, label: 'laptop' },\n { class: 65, label: 'mouse' },\n { class: 66, label: 'remote' },\n { class: 67, label: 'keyboard' },\n { class: 68, label: 'cell phone' },\n { class: 69, label: 'microwave' },\n { class: 70, label: 'oven' },\n { class: 71, label: 'toaster' },\n { class: 72, label: 'sink' },\n { class: 73, label: 'refrigerator' },\n { class: 74, label: 'book' },\n { class: 75, label: 'clock' },\n { class: 76, label: 'vase' },\n { class: 77, label: 'scissors' },\n { class: 78, label: 'teddy bear' },\n { class: 79, label: 'hair drier' },\n { class: 80, label: 'toothbrush' },\n];\n", "/**\n * CenterNet object detection model implementation\n *\n * Based on: [**MB3-CenterNet**](https://github.com/610265158/mobilenetv3_centernet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n // fakeOps(['floormod'], config);\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor | null, outputShape: [number, number], config: Config) {\n if (!res) return [];\n const t: Record = {};\n const results: ObjectResult[] = [];\n const detections = await res.array() as number[][][];\n t.squeeze = tf.squeeze(res);\n const arr = tf.split(t.squeeze, 6, 1); // x1, y1, x2, y2, score, class\n t.stack = tf.stack([arr[1], arr[0], arr[3], arr[2]], 1); // reorder dims as tf.nms expects y, x\n t.boxes = tf.squeeze(t.stack);\n t.scores = tf.squeeze(arr[4]);\n t.classes = tf.squeeze(arr[5]);\n tf.dispose([res, ...arr]);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, config.object.maxDetected || 0, config.object.iouThreshold, (config.object.minConfidence || 0));\n const nms = await t.nms.data();\n let i = 0;\n for (const id of Array.from(nms)) {\n const score = Math.trunc(100 * detections[0][id][4]) / 100;\n const classVal = detections[0][id][5];\n if (Number.isNaN(classVal)) continue;\n const label = labels[classVal].label as ObjectType;\n const [x, y] = [\n detections[0][id][0] / inputSize,\n detections[0][id][1] / inputSize,\n ];\n const boxRaw: Box = [\n x,\n y,\n detections[0][id][2] / inputSize - x,\n detections[0][id][3] / inputSize - y,\n ];\n const box: Box = [\n Math.trunc(boxRaw[0] * outputShape[0]),\n Math.trunc(boxRaw[1] * outputShape[1]),\n Math.trunc(boxRaw[2] * outputShape[0]),\n Math.trunc(boxRaw[3] * outputShape[1]),\n ];\n results.push({ id: i++, score, class: classVal, label, box, boxRaw });\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return results;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const outputSize = [input.shape[2] || 0, input.shape[1] || 0] as [number, number];\n const resize = tf.image.resizeBilinear(input, [inputSize, inputSize]);\n const objectT = config.object.enabled ? model?.execute(resize, ['tower_0/detections']) as Tensor : null;\n lastTime = now();\n tf.dispose(resize);\n\n const obj = await process(objectT, outputSize, config);\n last = obj;\n\n resolve(obj);\n });\n}\n", "export const kpt: string[] = [\n 'head',\n 'neck',\n 'rightShoulder',\n 'rightElbow',\n 'rightWrist',\n 'chest',\n 'leftShoulder',\n 'leftElbow',\n 'leftWrist',\n 'bodyCenter',\n 'rightHip',\n 'rightKnee',\n 'rightAnkle',\n 'leftHip',\n 'leftKnee',\n 'leftAnkle',\n];\n\nexport const connected: Record = {\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * EfficientPose model implementation\n *\n * Based on: [**EfficientPose**](https://github.com/daniegr/EfficientPose)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as coords from './efficientposecoords';\nimport { constants } from '../tfjs/constants';\nimport type { BodyResult, Point, BodyLandmark, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet lastTime = 0;\nconst cache: BodyResult = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} as Record };\n\n// const keypoints: Array = [];\n// let box: Box = [0, 0, 0, 0];\n// let boxRaw: Box = [0, 0, 0, 0];\n// let score = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n// performs argmax and max functions on a 2d tensor\nasync function max2d(inputs, minScore): Promise<[number, number, number]> {\n const [width, height] = inputs.shape;\n const reshaped = tf.reshape(inputs, [height * width]); // combine all data\n const max = tf.max(reshaped, 0);\n const newScore: number = (await max.data())[0]; // get highest score\n if (newScore > minScore) { // skip coordinate calculation is score is too low\n const coordinates = tf.argMax(reshaped, 0);\n const mod = tf.mod(coordinates, width);\n const x = (await mod.data())[0];\n const div = tf.div(coordinates, width);\n const y: number = (await div.data())[0];\n tf.dispose([reshaped, max, coordinates, mod, div]);\n return [x, y, newScore];\n }\n tf.dispose([reshaped, max]);\n return [0, 0, newScore];\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs[0].shape) return [];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && Object.keys(cache.keypoints).length > 0) {\n skipped++;\n return [cache];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const tensor = tf.tidy(() => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape?.[2] || 0, model?.inputs[0].shape?.[1] || 0], false);\n const enhance = tf.mul(resize, constants.tf2);\n const norm = tf.sub(enhance, constants.tf1);\n return norm;\n });\n let resT;\n if (config.body.enabled) resT = model?.execute(tensor);\n lastTime = now();\n tf.dispose(tensor);\n\n if (resT) {\n cache.keypoints.length = 0;\n const squeeze = tf.squeeze(resT);\n tf.dispose(resT);\n // body parts are basically just a stack of 2d tensors\n const stack = tf.unstack(squeeze, 2);\n tf.dispose(squeeze);\n\n // process each unstacked tensor as a separate body part\n for (let id = 0; id < stack.length; id++) {\n // actual processing to get coordinates and score\n const [x, y, partScore] = await max2d(stack[id], config.body.minConfidence);\n if (partScore > (config.body.minConfidence || 0)) {\n cache.keypoints.push({\n score: Math.round(100 * partScore) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw: [ // normalized to 0..1\n // @ts-ignore model is not undefined here\n x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],\n ],\n position: [ // normalized to input image size\n // @ts-ignore model is not undefined here\n Math.round(image.shape[2] * x / model.inputs[0].shape[2]), Math.round(image.shape[1] * y / model.inputs[0].shape[1]),\n ],\n });\n }\n }\n stack.forEach((s) => tf.dispose(s));\n }\n cache.score = cache.keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const x = cache.keypoints.map((a) => a.position[0]);\n const y = cache.keypoints.map((a) => a.position[1]);\n cache.box = [\n Math.min(...x),\n Math.min(...y),\n Math.max(...x) - Math.min(...x),\n Math.max(...y) - Math.min(...y),\n ];\n const xRaw = cache.keypoints.map((a) => a.positionRaw[0]);\n const yRaw = cache.keypoints.map((a) => a.positionRaw[1]);\n cache.boxRaw = [\n Math.min(...xRaw),\n Math.min(...yRaw),\n Math.max(...xRaw) - Math.min(...xRaw),\n Math.max(...yRaw) - Math.min(...yRaw),\n ];\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = cache.keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = cache.keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n cache.annotations[name] = pt;\n }\n resolve([cache]);\n });\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport { constants } from '../tfjs/constants';\nimport type { Box, Point } from '../result';\nimport { env } from '../util/env';\n\nexport const createBox = (startEndTensor) => ({ startPoint: tf.slice(startEndTensor, [0, 0], [-1, 2]), endPoint: tf.slice(startEndTensor, [0, 2], [-1, 2]) });\n\nexport const disposeBox = (t) => tf.dispose([t.startPoint, t.endPoint]);\n\nexport const getBoxSize = (box): [number, number] => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])];\n\nexport const getBoxCenter = (box): [number, number, number] => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1];\n\nexport const clampBox = (box, input): Box => (box ? [\n Math.trunc(Math.max(0, box.startPoint[0])),\n Math.trunc(Math.max(0, box.startPoint[1])),\n Math.trunc(Math.min((input.shape[2] || 0), box.endPoint[0]) - Math.max(0, box.startPoint[0])),\n Math.trunc(Math.min((input.shape[1] || 0), box.endPoint[1]) - Math.max(0, box.startPoint[1])),\n] : [0, 0, 0, 0]);\n\nexport const getRawBox = (box, input): Box => (box ? [\n box.startPoint[0] / (input.shape[2] || 0),\n box.startPoint[1] / (input.shape[1] || 0),\n (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0),\n (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0),\n] : [0, 0, 0, 0]);\n\nexport const scaleBoxCoordinates = (box, factor) => {\n const startPoint: Point = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]];\n const endPoint: Point = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]];\n return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const cutAndResize = (box, image, cropSize) => {\n const h = image.shape[1];\n const w = image.shape[2];\n const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w];\n const crop = tf.image.cropAndResize(image, [cutBox], [0], cropSize);\n const norm = tf.div(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n};\n\nexport const enlargeBox = (box, factor) => {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize: [number, number] = [factor * size[0] / 2, factor * size[1] / 2];\n return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point, endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const squarifyBox = (box) => {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize = Math.max(...size) / 2;\n return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point, endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point, landmarks: box.landmarks, confidence: box.confidence };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return { startPoint: [Math.min(...x), Math.min(...y)] as Point, endPoint: [Math.max(...x), Math.max(...y)] as Point, landmarks };\n};\n\nexport const fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];\n\nexport const normalizeRadians = (angle: number) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n\nexport const computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]));\n\nexport const radToDegrees = (rad) => rad * 180 / Math.PI;\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport const dot = (v1: number[], v2: number[]) => {\n let product = 0;\n for (let i = 0; i < v1.length; i++) product += v1[i] * v2[i];\n return product;\n};\n\nexport const getColumnFrom2DArr = (arr, columnIndex) => {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) column.push(arr[i][columnIndex]);\n return column;\n};\n\nexport const multiplyTransformMatrices = (mat1, mat2) => {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n return product;\n};\n\nexport const buildRotationMatrix = (rotation, center) => {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n};\n\nexport const invertTransformMatrix = (matrix) => {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)];\n return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]];\n};\n\nexport const rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])];\n\nexport const xyDistanceBetweenPoints = (a, b) => Math.sqrt(((a[0] - b[0]) ** 2) + ((a[1] - b[1]) ** 2));\n\nexport function generateAnchors(inputSize: number) {\n const spec = inputSize === 192\n ? { strides: [4], anchors: [1] } // facemesh-detector\n : { strides: [inputSize / 16, inputSize / 8], anchors: [2, 6] }; // blazeface\n const anchors: [number, number][] = [];\n for (let i = 0; i < spec.strides.length; i++) {\n const stride = spec.strides[i];\n const gridRows = Math.floor((inputSize + stride - 1) / stride);\n const gridCols = Math.floor((inputSize + stride - 1) / stride);\n const anchorsNum = spec.anchors[i];\n for (let gridY = 0; gridY < gridRows; gridY++) {\n const anchorY = stride * (gridY + 0.5);\n for (let gridX = 0; gridX < gridCols; gridX++) {\n const anchorX = stride * (gridX + 0.5);\n for (let n = 0; n < anchorsNum; n++) anchors.push([anchorX, anchorY]);\n }\n }\n }\n return anchors;\n}\n\nexport function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize) {\n const boxSize = getBoxSize(box);\n const coordsScaled = coordsRaw.map((coord) => ([ // scaled around zero-point\n (boxSize[0] / inputSize) * (coord[0] - (inputSize / 2)),\n (boxSize[1] / inputSize) * (coord[1] - (inputSize / 2)),\n (coord[2] || 0),\n ]));\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix;\n const coordsRotated = largeAngle ? coordsScaled.map((coord) => ([...rotatePoint(coord, coordsRotationMatrix), coord[2]])) : coordsScaled;\n const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix;\n const boxCenter = getBoxCenter(box);\n const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])];\n return coordsRotated.map((coord) => ([\n Math.trunc(coord[0] + offsets[0]),\n Math.trunc(coord[1] + offsets[1]),\n Math.trunc(coord[2] || 0),\n ]));\n}\n\nexport function correctFaceRotation(rotate, box, input, inputSize) {\n const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count)\n ? coords.meshLandmarks.symmetryLine\n : coords.blazeFaceLandmarks.symmetryLine;\n let angle = 0; // default\n let rotationMatrix = fixedRotationMatrix; // default\n let face; // default\n\n if (rotate && env.kernels.includes('rotatewithoffset')) {\n angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n if (largeAngle) { // perform rotation only if angle is sufficiently high\n const center: Point = getBoxCenter(box);\n const centerRaw: Point = [center[0] / input.shape[2], center[1] / input.shape[1]];\n const rotated = tf.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]);\n rotationMatrix = buildRotationMatrix(-angle, center);\n face = cutAndResize(box, rotated, [inputSize, inputSize]);\n tf.dispose(rotated);\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n return [angle, rotationMatrix, face];\n}\n\nexport const findFaceCenter = (mesh) => {\n const x = mesh.map((m) => m[0]);\n const y = mesh.map((m) => m[1]);\n // weighted center\n /*\n const sum = (arr: number[]) => arr.reduce((prev, curr) => prev + curr, 0);\n return [sum(x) / mesh.length, sum(y) / mesh.length];\n */\n // absolute center\n return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2];\n};\n\nexport const calculateFaceBox = (mesh, previousBox) => {\n const center = findFaceCenter(mesh);\n const boxSize = getBoxSize(previousBox);\n const calculatedBox = {\n startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2] as Point,\n endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] as Point,\n };\n return calculatedBox;\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport * as util from './facemeshutil';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { Tensor, GraphModel, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport type { Point } from '../result';\n\nconst keypointsCount = 6;\nconst faceBoxScaleFactor = 1.4;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\ninterface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number }\n\nexport const size = () => inputSize;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.detector?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model['executor'] && model.inputs[0].shape) ? model.inputs[0].shape[2] : 256;\n inputSizeT = tf.scalar(inputSize, 'int32') as Tensor;\n anchors = tf.tensor2d(util.generateAnchors(inputSize)) as Tensor;\n return model;\n}\n\nfunction decodeBoxes(boxOutputs: Tensor) {\n if (!anchors || !inputSizeT) return tf.zeros([0, 0]);\n const t: Record = {};\n t.boxStarts = tf.slice(boxOutputs, [0, 1], [-1, 2]);\n t.centers = tf.add(t.boxStarts, anchors);\n t.boxSizes = tf.slice(boxOutputs, [0, 3], [-1, 2]);\n t.boxSizesNormalized = tf.div(t.boxSizes, inputSizeT);\n t.centersNormalized = tf.div(t.centers, inputSizeT);\n t.halfBoxSize = tf.div(t.boxSizesNormalized, constants.tf2);\n t.starts = tf.sub(t.centersNormalized, t.halfBoxSize);\n t.ends = tf.add(t.centersNormalized, t.halfBoxSize);\n t.startNormalized = tf.mul(t.starts, inputSizeT);\n t.endNormalized = tf.mul(t.ends, inputSizeT);\n const boxes = tf.concat2d([t.startNormalized as Tensor2D, t.endNormalized as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n\nexport async function getBoxes(inputImage: Tensor4D, config: Config) {\n // sanity check on input\n if ((!inputImage) || (inputImage['isDisposedInternal']) || (inputImage.shape.length !== 4) || (inputImage.shape[1] < 1) || (inputImage.shape[2] < 1)) return [];\n const t: Record = {};\n t.resized = tf.image.resizeBilinear(inputImage, [inputSize, inputSize]);\n t.div = tf.div(t.resized, constants.tf127);\n t.normalized = tf.sub(t.div, constants.tf05);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n if (confidence > (config.face.detector?.minConfidence || 0)) {\n const b: Record = {};\n b.bbox = tf.slice(t.boxes, [nms[i], 0], [1, -1]);\n b.slice = tf.slice(t.batch, [nms[i], keypointsCount - 1], [1, -1]);\n b.squeeze = tf.squeeze(b.slice);\n b.landmarks = tf.reshape(b.squeeze, [keypointsCount, -1]);\n const points = await b.bbox.data();\n const rawBox = {\n startPoint: [points[0], points[1]] as Point,\n endPoint: [points[2], points[3]] as Point,\n landmarks: (await b.landmarks.array()) as Point[],\n confidence,\n };\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize]);\n const enlargedBox = util.enlargeBox(scaledBox, config.face['scale'] || faceBoxScaleFactor);\n const squaredBox = util.squarifyBox(enlargedBox);\n boxes.push(squaredBox);\n Object.keys(b).forEach((tensor) => tf.dispose(b[tensor]));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport * as util from './facemeshutil';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { Point } from '../result';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\n\nconst irisEnlarge = 2.3;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\n\ninterface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number }\n\nconst cache = {\n boxes: [] as DetectBox[],\n skipped: Number.MAX_SAFE_INTEGER,\n timestamp: 0,\n};\n\nlet model: GraphModel | null = null;\nlet inputSize = 0;\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n // reset cached boxes\n const skipTime = (config.face.detector?.skipTime || 0) > (now() - cache.timestamp);\n const skipFrame = cache.skipped < (config.face.detector?.skipFrames || 0);\n if (!config.skipAllowed || !skipTime || !skipFrame || cache.boxes.length === 0) {\n cache.boxes = await blazeface.getBoxes(input, config); // get results from blazeface detector\n cache.timestamp = now();\n cache.skipped = 0;\n } else {\n cache.skipped++;\n }\n const faces: FaceResult[] = [];\n const newCache: DetectBox[] = [];\n let id = 0;\n const size = inputSize;\n for (let i = 0; i < cache.boxes.length; i++) {\n const box = cache.boxes[i];\n let angle = 0;\n let rotationMatrix;\n const face: FaceResult = { // init face result\n id: id++,\n mesh: [],\n meshRaw: [],\n box: [0, 0, 0, 0],\n boxRaw: [0, 0, 0, 0],\n score: 0,\n boxScore: 0,\n faceScore: 0,\n // contoursRaw: [],\n // contours: [],\n annotations: {} as Record,\n };\n\n // optional rotation correction based on detector data only if mesh is disabled otherwise perform it later when we have more accurate mesh data. if no rotation correction this function performs crop\n [angle, rotationMatrix, face.tensor] = util.correctFaceRotation(config.face.detector?.rotation, box, input, config.face.mesh?.enabled ? inputSize : blazeface.size());\n if (config.filter.equalization) {\n const equilized = face.tensor ? await histogramEqualization(face.tensor) : undefined;\n tf.dispose(face.tensor);\n if (equilized) face.tensor = equilized;\n }\n face.boxScore = Math.round(100 * box.confidence) / 100;\n if (!config.face.mesh?.enabled) { // mesh not enabled, return resuts from detector only\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0])) / 2 + ((box.endPoint[0] + box.startPoint[0]) * pt[0] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()),\n ]);\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n } else if (!model) { // mesh enabled, but not loaded\n if (config.debug) log('face mesh detection requested, but model is not loaded');\n } else { // mesh enabled\n if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {\n config.face.attention.enabled = false;\n tf.dispose(face.tensor);\n return faces;\n }\n const results = model.execute(face.tensor as Tensor) as Tensor[];\n const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;\n const faceConfidence = await confidenceT.data();\n face.faceScore = Math.round(100 * faceConfidence[0]) / 100;\n if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh\n box.confidence = face.faceScore; // reset confidence of cached box\n if (config.face.mesh.keepInvalid) {\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0])) / 2 + ((box.endPoint[0] + box.startPoint[0]) * pt[0] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1])) / 2 + ((box.endPoint[1] + box.startPoint[1]) * pt[1] / blazeface.size()),\n ]);\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n }\n } else {\n const meshT = results.find((t) => t.shape[t.shape.length - 1] === 1404) as Tensor;\n const coordsReshaped = tf.reshape(meshT, [-1, 3]);\n let rawCoords = await coordsReshaped.array();\n tf.dispose(coordsReshaped);\n if (config.face.attention?.enabled) {\n rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results\n } else if (config.face.iris?.enabled) {\n rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize); // run iris model and augment results\n }\n face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.meshAnnotations)) face.annotations[key] = coords.meshAnnotations[key].map((index) => face.mesh[index]); // add annotations\n face.score = face.faceScore;\n const calculatedBox = { ...util.calculateFaceBox(face.mesh, box), confidence: box.confidence, landmarks: box.landmarks };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n /*\n const contoursT = results.find((t) => t.shape[t.shape.length - 1] === 266) as Tensor;\n const contoursData = contoursT && await contoursT.data(); // 133 x 2d points\n face.contoursRaw = [];\n for (let j = 0; j < contoursData.length / 2; j++) face.contoursRaw.push([contoursData[2 * j + 0] / inputSize, contoursData[2 * j + 1] / inputSize]);\n face.contours = face.contoursRaw.map((c) => [Math.trunc((input.shape[2] || 1) * c[0]), Math.trunc((input.shape[1] || 1) * c[1])]);\n */\n newCache.push(calculatedBox);\n }\n tf.dispose(results);\n }\n if (face.score > (config.face.detector?.minConfidence || 1)) faces.push(face);\n else tf.dispose(face.tensor);\n }\n cache.boxes = newCache; // reset cache\n return faces;\n}\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (config.face.attention?.enabled && model?.['signature']) {\n if (Object.keys(model?.['signature']?.outputs || {}).length < 6) model = null;\n }\n if (!model) {\n if (config.face.attention?.enabled) model = await loadModel(config.face.attention.modelPath);\n else model = await loadModel(config.face.mesh?.modelPath);\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n inputSize = (model['executor'] && model?.inputs?.[0].shape) ? model?.inputs?.[0].shape[2] : 256;\n return model;\n}\n\nexport const triangulation = coords.TRI468;\nexport const uvmap = coords.UV468;\n", "/**\n * Emotion model implementation\n *\n * [**Oarriaga**](https://github.com/oarriaga/face_classification)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Emotion } from '../result';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\n\nconst annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral'];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.emotion?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ score: number, emotion: Emotion }[]> {\n if (!model) return [];\n const skipFrame = skipped < (config.face.emotion?.skipFrames || 0);\n const skipTime = (config.face.emotion?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx] && (last[idx].length > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const obj: { score: number, emotion: Emotion }[] = [];\n if (config.face.emotion?.enabled) {\n const t: Record = {};\n const inputSize = model?.inputs[0].shape ? model.inputs[0].shape[2] : 0;\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n // const box = [[0.15, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // const resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n // [t.red, t.green, t.blue] = tf.split(t.resize, 3, 3);\n // weighted rgb to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n // t.redNorm = tf.mul(t.red, rgb[0]);\n // t.greenNorm = tf.mul(t.green, rgb[1]);\n // t.blueNorm = tf.mul(t.blue, rgb[2]);\n // t.grayscale = tf.addN([t.redNorm, t.greenNorm, t.blueNorm]);\n t.channels = tf.mul(t.resize, constants.rgb);\n t.grayscale = tf.sum(t.channels, 3, true);\n t.grayscaleSub = tf.sub(t.grayscale, constants.tf05);\n t.grayscaleMul = tf.mul(t.grayscaleSub, constants.tf2);\n t.emotion = model?.execute(t.grayscaleMul) as Tensor; // result is already in range 0..1, no need for additional activation\n lastTime = now();\n const data = await t.emotion.data();\n for (let i = 0; i < data.length; i++) {\n if (data[i] > (config.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] as Emotion });\n }\n obj.sort((a, b) => b.score - a.score);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "/**\n * FaceRes model implementation\n *\n * Returns Age, Gender, Descriptor\n * Implements Face similarity function\n *\n * Based on: [**HSE-FaceRes**](https://github.com/HSE-asavchenko/HSE_FaceRec_tf)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel, Tensor4D, Tensor1D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport type { Gender, Race } from '../result';\n\nexport interface FaceRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nlet model: GraphModel | null;\nconst last: FaceRes[] = [];\n\nlet lastTime = 0;\nlet lastCount = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.description?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport function enhance(input): Tensor {\n const tensor = (input.image || input.tensor || input) as Tensor4D; // input received from detector is already normalized to 0..1, input is also assumed to be straightened\n if (!model?.inputs[0].shape) return tensor; // model has no shape so no point continuing\n const crop: Tensor = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n const norm: Tensor = tf.mul(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n /*\n // do a tight crop of image and resize it to fit the model\n const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n const crop = (tensor.shape.length === 3)\n ? tf.image.cropAndResize(tf.expandDims(tensor, 0), box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]) // add batch dimension if missing\n : tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n */\n /*\n // convert to black&white to avoid colorization impact\n const rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n const [red, green, blue] = tf.split(crop, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n */\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n const obj: FaceRes = {\n age: 0 as number,\n gender: 'unknown' as Gender,\n genderScore: 0 as number,\n descriptor: [] as number[],\n };\n if (!model?.['executor']) return obj;\n const skipFrame = skipped < (config.face.description?.skipFrames || 0);\n const skipTime = (config.face.description?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && (last?.[idx]?.age > 0) && (last?.[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (config.face.description?.enabled) {\n const enhanced = enhance(image);\n const resT = model?.execute(enhanced) as Tensor[];\n lastTime = now();\n tf.dispose(enhanced);\n const genderT = resT.find((t) => t.shape[1] === 1) as Tensor;\n const gender = await genderT.data();\n const confidence = Math.trunc(200 * Math.abs((gender[0] - 0.5))) / 100;\n if (confidence > (config.face.description.minConfidence || 0)) {\n obj.gender = gender[0] <= 0.5 ? 'female' : 'male';\n obj.genderScore = Math.min(0.99, confidence);\n }\n const argmax = tf.argMax(resT.find((t) => t.shape[1] === 100) as Tensor1D, 1);\n const ageIdx: number = (await argmax.data())[0];\n tf.dispose(argmax);\n const ageT = resT.find((t) => t.shape[1] === 100) as Tensor;\n const all = await ageT.data();\n obj.age = Math.round(all[ageIdx - 1] > all[ageIdx + 1] ? 10 * ageIdx - 100 * all[ageIdx - 1] : 10 * ageIdx + 100 * all[ageIdx + 1]) / 10;\n\n if (Number.isNaN(gender[0]) || Number.isNaN(all[0])) log('faceres error:', { model, result: resT });\n\n const desc = resT.find((t) => t.shape[1] === 1024);\n // const reshape = desc.reshape([128, 8]); // reshape large 1024-element descriptor to 128 x 8\n // const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it which leaves us with 128-element descriptor\n const descriptor = desc ? await desc.data() : [] as number[];\n obj.descriptor = Array.from(descriptor);\n resT.forEach((t) => tf.dispose(t));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "import type { Tensor } from '../tfjs/types';\nimport type { FaceResult } from '../result';\n// import * as tf from 'dist/tfjs.esm.js';\nimport { meshAnnotations } from './facemeshcoords';\n\nconst expandFact = 0.1;\nconst alpha = 0.5;\n\n// point inclusion in polygon based on https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\nfunction insidePoly(x: number, y: number, polygon: { x: number, y: number }[]): boolean {\n let inside = false;\n let j = polygon.length - 1;\n for (let i = 0; i < polygon.length; j = i++) {\n if (((polygon[i].y > y) !== (polygon[j].y > y)) && (x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) inside = !inside;\n }\n return inside;\n}\n\nexport async function mask(face: FaceResult): Promise {\n if (!face.tensor) return face.tensor;\n if (!face.mesh || face.mesh.length < 100) return face.tensor;\n const width = face.tensor.shape[2] || 0;\n const height = face.tensor.shape[1] || 0;\n const buffer = await face.tensor.buffer();\n let silhouette: { x: number, y: number }[] = [];\n for (const pt of meshAnnotations.silhouette) silhouette.push({ x: (face.mesh[pt][0] - face.box[0]) / face.box[2], y: (face.mesh[pt][1] - face.box[1]) / face.box[3] }); // add all silhouette points scaled to local box\n if (expandFact && expandFact > 0) silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); // expand silhouette\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const inside = insidePoly(x / width, y / width, silhouette);\n if (!inside) {\n buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0);\n buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1);\n buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2);\n }\n }\n }\n const output = buffer.toTensor();\n // tf.dispose(buffer);\n return output;\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.antispoof?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.antispoof?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.antispoof?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.liveness?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.liveness?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.liveness?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * GEAR [gender/emotion/age/race] model implementation\n *\n * Based on: [**GEAR Predictor**](https://github.com/Udolf15/GEAR-Predictor)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Gender, Race } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nexport interface GearType { age: number, gender: Gender, genderScore: number, race: { score: number, race: Race }[] }\nlet model: GraphModel | null;\nconst last: GearType[] = [];\nconst raceNames = ['white', 'black', 'asian', 'indian', 'other'];\nconst ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.gear?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model) return { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n const skipFrame = skipped < (config.face.gear?.skipFrames || 0);\n const skipTime = (config.face.gear?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n // t.resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape[2], model?.inputs[0].shape[1]], false);\n const box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const obj: GearType = { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n if (config.face.gear?.enabled) [t.age, t.gender, t.race] = model.execute(t.resize, ['age_output', 'gender_output', 'race_output']) as Tensor[];\n const gender = await t.gender.data();\n obj.gender = gender[0] > gender[1] ? 'male' : 'female';\n obj.genderScore = Math.round(100 * (gender[0] > gender[1] ? gender[0] : gender[1])) / 100;\n const race = await t.race.data();\n for (let i = 0; i < race.length; i++) {\n if (race[i] > (config.face.gear?.minConfidence || 0.2)) obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] as Race });\n }\n obj.race.sort((a, b) => b.score - a.score);\n // {0: 'Below20', 1: '21-25', 2: '26-30', 3: '31-40',4: '41-50', 5: '51-60', 6: 'Above60'}\n const ageDistribution = Array.from(await t.age.data());\n const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]);\n let age = ageSorted[0][0]; // pick best starting point\n for (let i = 1; i < ageSorted.length; i++) age += ageSorted[i][1] * (ageSorted[i][0] - age); // adjust with each other choice by weight\n obj.age = Math.round(10 * age) / 10;\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Age model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\n\nlet model: GraphModel | null;\nconst last: { age: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet'].modelPathAge);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ age: number }> {\n if (!model) return { age: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.age && (last[idx]?.age > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs || !model.inputs[0] || !model.inputs[0].shape) return;\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n t.enhance = tf.mul(t.resize, constants.tf255);\n const obj = { age: 0 };\n if (config.face['ssrnet']?.enabled) t.age = model.execute(t.enhance) as Tensor;\n if (t.age) {\n const data = await t.age.data();\n obj.age = Math.trunc(10 * data[0]) / 10;\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Gender model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Gender } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: { gender: Gender, genderScore: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\n// tuning values\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet']?.modelPathGender);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx, count): Promise<{ gender: Gender, genderScore: number }> {\n if (!model) return { gender: 'unknown', genderScore: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.gender && (last[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n t.enhance = tf.tidy(() => {\n const [red, green, blue] = tf.split(t.resize, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n return normalize;\n });\n const obj: { gender: Gender, genderScore: number } = { gender: 'unknown', genderScore: 0 };\n if (config.face['ssrnet']?.enabled) t.gender = model.execute(t.enhance) as Tensor;\n const data = await t.gender.data();\n obj.gender = data[0] > data[1] ? 'female' : 'male'; // returns two values 0..1, bigger one is prediction\n obj.genderScore = data[0] > data[1] ? (Math.trunc(100 * data[0]) / 100) : (Math.trunc(100 * data[1]) / 100);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * MobileFaceNet model implementation\n *\n * Based on: [**BecauseofAI MobileFace**](https://github.com/becauseofAI/MobileFace)\n *\n * Obsolete and replaced by `faceres` that performs age/gender/descriptor analysis\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['mobilefacenet']?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n/*\n// convert to black&white to avoid colorization impact\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\nconst [red, green, blue] = tf.split(crop, 3, 3);\nconst redNorm = tf.mul(red, rgb[0]);\nconst greenNorm = tf.mul(green, rgb[1]);\nconst blueNorm = tf.mul(blue, rgb[2]);\nconst grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\nconst merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n\n// optional increase image contrast\n// or do it per-channel so mean is done on each channel\n// or do it based on histogram\nconst mean = merge.mean();\nconst factor = 5;\nconst contrast = merge.sub(mean).mul(factor).add(mean);\n*/\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['mobilefacenet']?.skipFrames || 0);\n const skipTime = (config.face['mobilefacenet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['mobilefacenet']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n /*\n // optional normalize outputs with l2 normalization\n const scaled = tf.tidy(() => {\n const l2 = res.norm('euclidean');\n const scale = res.div(l2);\n return scale;\n });\n\n // optional reduce feature vector complexity\n const reshape = tf.reshape(res, [128, 2]); // split 256 vectors into 128 x 2\n const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it\n */\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "/**\n * InsightFace model implementation\n *\n * Based on: [**DeepInsight InsightFace**](https://github.com/deepinsight/insightface)\n *\n * Alternative face embedding detection\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['insightface'].modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['insightface']?.skipFrames || 0);\n const skipTime = (config.face['insightface']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['insightface']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "import type { Point, FaceResult } from '../result';\n\ntype Vector = [number, number, number];\n\nconst calculateGaze = (face: FaceResult): { bearing: number, strength: number } => {\n const radians = (pt1: Point, pt2: Point) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); // function to calculate angle between any two points\n if (!face.annotations.rightEyeIris || !face.annotations.leftEyeIris) return { bearing: 0, strength: 0 };\n\n const offsetIris = [0, -0.1]; // iris center may not align with average of eye extremes\n const eyeRatio = 1; // factor to normalize changes x vs y\n\n const left = (face.mesh[33][2] || 0) > (face.mesh[263][2] || 0); // pick left or right eye depending which one is closer bazed on outsize point z axis\n const irisCenter = left ? face.mesh[473] : face.mesh[468];\n const eyeCenter = left // eye center is average of extreme points on x axis for both x and y, ignoring y extreme points as eyelids naturally open/close more when gazing up/down so relative point is less precise\n ? [(face.mesh[133][0] + face.mesh[33][0]) / 2, (face.mesh[133][1] + face.mesh[33][1]) / 2]\n : [(face.mesh[263][0] + face.mesh[362][0]) / 2, (face.mesh[263][1] + face.mesh[362][1]) / 2];\n const eyeSize = left // eye size is difference between extreme points for both x and y, used to normalize & squarify eye dimensions\n ? [face.mesh[133][0] - face.mesh[33][0], face.mesh[23][1] - face.mesh[27][1]]\n : [face.mesh[263][0] - face.mesh[362][0], face.mesh[253][1] - face.mesh[257][1]];\n const eyeDiff: Point = [ // x distance between extreme point and center point normalized with eye size\n (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0],\n eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1],\n ];\n let strength = Math.sqrt((eyeDiff[0] * eyeDiff[0]) + (eyeDiff[1] * eyeDiff[1])); // vector length is a diagonal between two differences\n strength = Math.min(strength, face.boxRaw[2] / 2, face.boxRaw[3] / 2); // limit strength to half of box size to avoid clipping due to low precision\n const bearing = (radians([0, 0], eyeDiff) + (Math.PI / 2)) % Math.PI; // using eyeDiff instead eyeCenter/irisCenter combo due to manual adjustments and rotate clockwise 90degrees\n return { bearing, strength };\n};\n\nexport const calculateFaceAngle = (face: FaceResult, imageSize: [number, number]): {\n angle: { pitch: number, yaw: number, roll: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n} => {\n // const degrees = (theta) => Math.abs(((theta * 180) / Math.PI) % 360);\n const normalize = (v: Vector): Vector => { // normalize vector\n const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n v[0] /= length;\n v[1] /= length;\n v[2] /= length;\n return v;\n };\n const subVectors = (a: Vector, b: Vector): Vector => { // vector subtraction (a - b)\n const x = a[0] - b[0];\n const y = a[1] - b[1];\n const z = a[2] - b[2];\n return [x, y, z];\n };\n const crossVectors = (a: Vector, b: Vector): Vector => { // vector cross product (a x b)\n const x = a[1] * b[2] - a[2] * b[1];\n const y = a[2] * b[0] - a[0] * b[2];\n const z = a[0] * b[1] - a[1] * b[0];\n return [x, y, z];\n };\n // 3x3 rotation matrix to Euler angles based on https://www.geometrictools.com/Documentation/EulerAngles.pdf\n const rotationMatrixToEulerAngle = (r: number[]): { pitch: number, yaw: number, roll: number } => {\n const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; // eslint-disable-line @typescript-eslint/no-unused-vars\n let thetaX: number;\n let thetaY: number;\n let thetaZ: number;\n if (r10 < 1) { // YZX calculation\n if (r10 > -1) {\n thetaZ = Math.asin(r10);\n thetaY = Math.atan2(-r20, r00);\n thetaX = Math.atan2(-r12, r11);\n } else {\n thetaZ = -Math.PI / 2;\n thetaY = -Math.atan2(r21, r22);\n thetaX = 0;\n }\n } else {\n thetaZ = Math.PI / 2;\n thetaY = Math.atan2(r21, r22);\n thetaX = 0;\n }\n if (Number.isNaN(thetaX)) thetaX = 0;\n if (Number.isNaN(thetaY)) thetaY = 0;\n if (Number.isNaN(thetaZ)) thetaZ = 0;\n return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ };\n };\n\n /*\n const meshToEulerAngle = (mesh) => { // simple Euler angle calculation based existing 3D mesh\n const radians = (a1, a2, b1, b2) => Math.atan2(b2 - a2, b1 - a1);\n return { // values are in radians in range of -pi/2 to pi/2 which is -90 to +90 degrees, value of 0 means center\n pitch: radians(mesh[10][1], mesh[10][2], mesh[152][1], mesh[152][2]), // looking at y,z of top and bottom points of the face // pitch is face move up/down\n yaw: radians(mesh[33][0], mesh[33][2], mesh[263][0], mesh[263][2]), // looking at x,z of outside corners of leftEye and rightEye // yaw is face turn left/right\n roll: radians(mesh[33][0], mesh[33][1], mesh[263][0], mesh[263][1]), // looking at x,y of outside corners of leftEye and rightEye // roll is face lean left/right\n };\n };\n */\n\n // initialize gaze and mesh\n const mesh = face.meshRaw;\n if (!mesh || mesh.length < 300) return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } };\n\n const size = Math.max(face.boxRaw[2] * imageSize[0], face.boxRaw[3] * imageSize[1]) / 1.5;\n // top, bottom, left, right\n const pts: Point[] = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size, pt[1] * imageSize[1] / size, pt[2]] as Point); // make the xyz coordinates proportional, independent of the image/box size\n\n const yAxis = normalize(subVectors(pts[1] as Vector, pts[0] as Vector));\n let xAxis = normalize(subVectors(pts[3] as Vector, pts[2] as Vector));\n const zAxis = normalize(crossVectors(xAxis, yAxis));\n // adjust xAxis to make sure that all axes are perpendicular to each other\n xAxis = crossVectors(yAxis, zAxis);\n\n // Rotation Matrix from Axis Vectors - http://renderdan.blogspot.com/2006/05/rotation-matrix-from-axis-vectors.html\n // 3x3 rotation matrix is flatten to array in row-major order. Note that the rotation represented by this matrix is inverted.\n const matrix: [number, number, number, number, number, number, number, number, number] = [\n xAxis[0], xAxis[1], xAxis[2],\n yAxis[0], yAxis[1], yAxis[2],\n zAxis[0], zAxis[1], zAxis[2],\n ];\n const angle = rotationMatrixToEulerAngle(matrix);\n // const angle = meshToEulerAngle(mesh);\n\n // we have iris keypoints so we can calculate gaze direction\n const gaze = mesh.length === 478 ? calculateGaze(face) : { bearing: 0, strength: 0 };\n\n return { angle, matrix, gaze };\n};\n", "import type { FaceResult } from '../result';\n\nexport function calculateCameraDistance(face: FaceResult, width: number): number {\n // iris points are [center, left, top, right, bottom]\n // average size of human iris is 11.7mm - fairly constant for all ages/genders/races\n const f = face?.annotations;\n if (!f) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // distance of eye from camera in meters\n const cameraDistance = Math.round(1.17 / irisSize) / 100;\n return cameraDistance;\n}\n\nexport function calculateEyesDistance(face: FaceResult, width: number): number {\n // average distance between eyes is 65mm - fairly constant for typical adult male, but varies otherwise\n const f = face?.annotations;\n if (!f) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // pixel x and y distance of centers of left and right iris, you can use edges instead\n const irisDistanceXY = [f.leftEyeIris[0][0] - f.rightEyeIris[0][0], f.leftEyeIris[0][1] - f.rightEyeIris[0][1]];\n // absolute distance bewtween eyes in 0..1 range to account for head pitch (we can ignore yaw)\n const irisDistance = Math.sqrt((irisDistanceXY[0] * irisDistanceXY[0]) + (irisDistanceXY[1] * irisDistanceXY[1])) / width;\n // distance between eyes in meters\n const eyesDistance = Math.round(1.17 * irisDistance / irisSize) / 100;\n return eyesDistance;\n}\n", "/**\n * Face algorithm implementation\n * Uses FaceMesh, Emotion and FaceRes models to create a unified pipeline\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as facemesh from './facemesh';\nimport * as emotion from '../gear/emotion';\nimport * as faceres from './faceres';\nimport * as mask from './mask';\nimport * as antispoof from './antispoof';\nimport * as liveness from './liveness';\nimport * as gear from '../gear/gear';\nimport * as ssrnetAge from '../gear/ssrnet-age';\nimport * as ssrnetGender from '../gear/ssrnet-gender';\nimport * as mobilefacenet from './mobilefacenet';\nimport * as insightface from './insightface';\nimport type { FaceResult, Emotion, Gender, Race } from '../result';\nimport type { Tensor4D } from '../tfjs/types';\nimport type { Human } from '../human';\nimport { calculateFaceAngle } from './angles';\nimport { calculateCameraDistance } from './anthropometry';\n\ninterface DescRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nexport const detectFace = async (instance: Human /* instance of human */, input: Tensor4D): Promise => {\n // run facemesh, includes blazeface and iris\n let timeStamp: number = now();\n let ageRes: { age: number } | Promise<{ age: number }> | null;\n let gearRes: gear.GearType | Promise | null;\n let genderRes: { gender: string, genderScore: number } | Promise<{ gender: string, genderScore: number }> | null;\n let emotionRes: { score: number, emotion: Emotion }[] | Promise<{ score: number, emotion: Emotion }[]>;\n let mobilefacenetRes: number[] | Promise | null;\n let insightfaceRes: number[] | Promise | null;\n let antispoofRes: number | Promise | null;\n let livenessRes: number | Promise | null;\n let descRes: DescRes | Promise | null;\n\n const faceRes: FaceResult[] = [];\n instance.state = 'run:face';\n\n const faces: FaceResult[] = await facemesh.predict(input, instance.config);\n instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n if (!input.shape || input.shape.length !== 4) return [];\n if (!faces) return [];\n // for (const face of faces) {\n for (let i = 0; i < faces.length; i++) {\n instance.analyze('Get Face');\n\n // is something went wrong, skip the face\n // @ts-ignore possibly undefied\n if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) {\n log('Face object is disposed:', faces[i].tensor);\n continue;\n }\n\n // optional face mask\n if (instance.config.face.detector?.mask) {\n const masked = await mask.mask(faces[i]);\n tf.dispose(faces[i].tensor);\n if (masked) faces[i].tensor = masked;\n }\n\n // calculate face angles\n const rotation = faces[i].mesh && (faces[i].mesh.length > 200) ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null;\n\n // run emotion, inherits face from blazeface\n instance.analyze('Start Emotion:');\n if (instance.config.async) {\n emotionRes = instance.config.face.emotion?.enabled ? emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n } else {\n instance.state = 'run:emotion';\n timeStamp = now();\n emotionRes = instance.config.face.emotion?.enabled ? await emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Emotion:');\n\n // run antispoof, inherits face from blazeface\n instance.analyze('Start AntiSpoof:');\n if (instance.config.async) {\n antispoofRes = instance.config.face.antispoof?.enabled ? antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:antispoof';\n timeStamp = now();\n antispoofRes = instance.config.face.antispoof?.enabled ? await antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End AntiSpoof:');\n\n // run liveness, inherits face from blazeface\n instance.analyze('Start Liveness:');\n if (instance.config.async) {\n livenessRes = instance.config.face.liveness?.enabled ? liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:liveness';\n timeStamp = now();\n livenessRes = instance.config.face.liveness?.enabled ? await liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Liveness:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start GEAR:');\n if (instance.config.async) {\n gearRes = instance.config.face.gear?.enabled ? gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:gear';\n timeStamp = now();\n gearRes = instance.config.face.gear?.enabled ? await gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.gear = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End GEAR:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start SSRNet:');\n if (instance.config.async) {\n ageRes = instance.config.face['ssrnet']?.enabled ? ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:ssrnet';\n timeStamp = now();\n ageRes = instance.config.face['ssrnet']?.enabled ? await ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? await ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.ssrnet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End SSRNet:');\n\n // run mobilefacenet alternative, inherits face from blazeface\n instance.analyze('Start MobileFaceNet:');\n if (instance.config.async) {\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? await mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End MobileFaceNet:');\n\n // run insightface alternative, inherits face from blazeface\n instance.analyze('Start InsightFace:');\n if (instance.config.async) {\n insightfaceRes = instance.config.face['insightface']?.enabled ? insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n insightfaceRes = instance.config.face['insightface']?.enabled ? await insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End InsightFace:');\n\n // run faceres, inherits face from blazeface\n instance.analyze('Start Description:');\n if (instance.config.async) {\n descRes = faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n } else {\n instance.state = 'run:description';\n timeStamp = now();\n descRes = await faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Description:');\n\n // if async wait for results\n if (instance.config.async) {\n [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]);\n }\n instance.analyze('Finish Face:');\n\n if (instance.config.face['ssrnet']?.enabled && ageRes && genderRes) { // override age/gender if ssrnet model is used\n descRes = {\n ...(descRes as DescRes),\n age: (ageRes as { age: number}).age,\n gender: (genderRes as { gender: Gender, genderScore: number }).gender,\n genderScore: (genderRes as { gender: Gender, genderScore: number }).genderScore,\n };\n }\n if (instance.config.face.gear?.enabled && gearRes) { // override age/gender/race if gear model is used\n descRes = {\n ...(descRes as DescRes),\n age: (gearRes as gear.GearType).age,\n gender: (gearRes as gear.GearType).gender,\n genderScore: (gearRes as gear.GearType).genderScore,\n race: (gearRes as gear.GearType).race,\n };\n }\n if (instance.config.face['mobilefacenet']?.enabled && mobilefacenetRes) { // override descriptor if mobilefacenet model is used\n (descRes as DescRes).descriptor = mobilefacenetRes as number[];\n }\n\n if (instance.config.face['insightface']?.enabled && insightfaceRes) { // override descriptor if insightface model is used\n (descRes as DescRes).descriptor = insightfaceRes as number[];\n }\n\n const irisSize = instance.config.face.iris?.enabled ? calculateCameraDistance(faces[i], input.shape[2]) : 0;\n\n // optionally return tensor\n const tensor = instance.config.face.detector?.return ? tf.squeeze(faces[i].tensor as Tensor4D) : null;\n // dispose original face tensor\n tf.dispose(faces[i].tensor);\n // delete temp face image\n if (faces[i].tensor) delete faces[i].tensor;\n // combine results\n const res: FaceResult = {\n ...faces[i],\n id: i,\n };\n if ((descRes as DescRes).age) res.age = (descRes as DescRes).age;\n if ((descRes as DescRes).gender) res.gender = (descRes as DescRes).gender;\n if ((descRes as DescRes).genderScore) res.genderScore = (descRes as DescRes).genderScore;\n if ((descRes as DescRes).descriptor) res.embedding = (descRes as DescRes).descriptor;\n if ((descRes as DescRes).race) res.race = (descRes as DescRes).race as { score: number, race: Race }[];\n if (emotionRes) res.emotion = emotionRes as { score: number, emotion: Emotion }[];\n if (antispoofRes) res.real = antispoofRes as number;\n if (livenessRes) res.live = livenessRes as number;\n if (irisSize > 0) res.distance = irisSize;\n if (rotation) res.rotation = rotation;\n if (tensor) res.tensor = tensor;\n faceRes.push(res);\n instance.analyze('End Face');\n }\n instance.analyze('End FaceMesh:');\n if (instance.config.async) {\n if (instance.performance.face) delete instance.performance.face;\n if (instance.performance.age) delete instance.performance.age;\n if (instance.performance.gender) delete instance.performance.gender;\n if (instance.performance.emotion) delete instance.performance.emotion;\n }\n return faceRes;\n};\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nexport const Finger = {\n thumb: 0,\n index: 1,\n middle: 2,\n ring: 3,\n pinky: 4,\n all: [0, 1, 2, 3, 4], // just for convenience\n nameMapping: { 0: 'thumb', 1: 'index', 2: 'middle', 3: 'ring', 4: 'pinky' },\n // Describes mapping of joints based on the 21 points returned by handpose.\n // [0] Palm\n // [1-4] Thumb\n // [5-8] Index\n // [9-12] Middle\n // [13-16] Ring\n // [17-20] Pinky\n pointsMapping: {\n 0: [[0, 1], [1, 2], [2, 3], [3, 4]],\n 1: [[0, 5], [5, 6], [6, 7], [7, 8]],\n 2: [[0, 9], [9, 10], [10, 11], [11, 12]],\n 3: [[0, 13], [13, 14], [14, 15], [15, 16]],\n 4: [[0, 17], [17, 18], [18, 19], [19, 20]],\n },\n getName: (value) => Finger.nameMapping[value],\n getPoints: (value) => Finger.pointsMapping[value],\n};\n\nexport const FingerCurl = {\n none: 0,\n half: 1,\n full: 2,\n nameMapping: { 0: 'none', 1: 'half', 2: 'full' },\n getName: (value) => FingerCurl.nameMapping[value],\n};\n\nexport const FingerDirection = {\n verticalUp: 0,\n verticalDown: 1,\n horizontalLeft: 2,\n horizontalRight: 3,\n diagonalUpRight: 4,\n diagonalUpLeft: 5,\n diagonalDownRight: 6,\n diagonalDownLeft: 7,\n nameMapping: { 0: 'verticalUp', 1: 'verticalDown', 2: 'horizontalLeft', 3: 'horizontalRight', 4: 'diagonalUpRight', 5: 'diagonalUpLeft', 6: 'diagonalDownRight', 7: 'diagonalDownLeft' },\n getName: (value) => FingerDirection.nameMapping[value],\n};\n\nexport class FingerGesture {\n name;\n curls;\n directions;\n weights;\n weightsRelative;\n\n constructor(name) {\n // name (should be unique)\n this.name = name;\n this.curls = {};\n this.directions = {};\n this.weights = [1.0, 1.0, 1.0, 1.0, 1.0];\n this.weightsRelative = [1.0, 1.0, 1.0, 1.0, 1.0];\n }\n\n curl(finger, curl, confidence) {\n if (typeof this.curls[finger] === 'undefined') this.curls[finger] = [];\n this.curls[finger].push([curl, confidence]);\n }\n\n direction(finger, position, confidence) {\n if (!this.directions[finger]) this.directions[finger] = [];\n this.directions[finger].push([position, confidence]);\n }\n\n weight(finger, weight) {\n this.weights[finger] = weight;\n // recalculate relative weights\n const total = this.weights.reduce((a, b) => a + b, 0);\n this.weightsRelative = this.weights.map((el) => el * 5 / total);\n }\n\n matchAgainst(detectedCurls, detectedDirections) {\n let confidence = 0.0;\n // look at the detected curl of each finger and compare with\n // the expected curl of this finger inside current gesture\n for (const fingerIdx in detectedCurls) {\n const detectedCurl = detectedCurls[fingerIdx];\n const expectedCurls = this.curls[fingerIdx];\n if (typeof expectedCurls === 'undefined') {\n // no curl description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible curl of this specific finger\n for (const [expectedCurl, score] of expectedCurls) {\n if (detectedCurl === expectedCurl) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n // same for detected direction of each finger\n for (const fingerIdx in detectedDirections) {\n const detectedDirection = detectedDirections[fingerIdx];\n const expectedDirections = this.directions[fingerIdx];\n if (typeof expectedDirections === 'undefined') {\n // no direction description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible direction of this specific finger\n for (const [expectedDirection, score] of expectedDirections) {\n if (detectedDirection === expectedDirection) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n return confidence / 10;\n }\n}\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nimport { Finger, FingerCurl, FingerDirection, FingerGesture } from './fingerdef';\n\nexport const { thumb, index, middle, ring, pinky } = Finger;\nexport const { none, half, full } = FingerCurl;\nexport const { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;\n\n// describe thumbs up gesture \uD83D\uDC4D\nconst ThumbsUp = new FingerGesture('thumbs up');\nThumbsUp.curl(thumb, none, 1.0);\nThumbsUp.direction(thumb, verticalUp, 1.0);\nThumbsUp.direction(thumb, diagonalUpLeft, 0.25);\nThumbsUp.direction(thumb, diagonalUpRight, 0.25);\nfor (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {\n ThumbsUp.curl(finger, full, 1.0);\n ThumbsUp.direction(finger, horizontalLeft, 1.0);\n ThumbsUp.direction(finger, horizontalRight, 1.0);\n}\n\n// describe Victory gesture \u270C\uFE0F\nconst Victory = new FingerGesture('victory');\nVictory.curl(thumb, half, 0.5);\nVictory.curl(thumb, none, 0.5);\nVictory.direction(thumb, verticalUp, 1.0);\nVictory.direction(thumb, diagonalUpLeft, 1.0);\nVictory.curl(index, none, 1.0);\nVictory.direction(index, verticalUp, 0.75);\nVictory.direction(index, diagonalUpLeft, 1.0);\nVictory.curl(middle, none, 1.0);\nVictory.direction(middle, verticalUp, 1.0);\nVictory.direction(middle, diagonalUpLeft, 0.75);\nVictory.curl(ring, full, 1.0);\nVictory.direction(ring, verticalUp, 0.2);\nVictory.direction(ring, diagonalUpLeft, 1.0);\nVictory.direction(ring, horizontalLeft, 0.2);\nVictory.curl(pinky, full, 1.0);\nVictory.direction(pinky, verticalUp, 0.2);\nVictory.direction(pinky, diagonalUpLeft, 1.0);\nVictory.direction(pinky, horizontalLeft, 0.2);\nVictory.weight(index, 2);\nVictory.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst Point = new FingerGesture('point');\nPoint.curl(thumb, full, 1.0);\nPoint.curl(index, none, 0.5);\nPoint.curl(middle, full, 0.5);\nPoint.curl(ring, full, 0.5);\nPoint.curl(pinky, full, 0.5);\nPoint.weight(index, 2);\nPoint.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst MiddleFinger = new FingerGesture('middle finger');\nMiddleFinger.curl(thumb, none, 1.0);\nMiddleFinger.curl(index, full, 0.5);\nMiddleFinger.curl(middle, full, 0.5);\nMiddleFinger.curl(ring, full, 0.5);\nMiddleFinger.curl(pinky, full, 0.5);\nMiddleFinger.weight(index, 2);\nMiddleFinger.weight(middle, 2);\n\n// describe Open Palm gesture \u270C\uFE0F\nconst OpenPalm = new FingerGesture('open palm');\nOpenPalm.curl(thumb, none, 0.75);\nOpenPalm.curl(index, none, 0.75);\nOpenPalm.curl(middle, none, 0.75);\nOpenPalm.curl(ring, none, 0.75);\nOpenPalm.curl(pinky, none, 0.75);\n\nexport default [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];\n", "/**\n * FingerPose algorithm implementation constants\n *\n * Based on: [**FingerPose***](https://github.com/andypotato/fingerpose)\n */\n\n/* eslint-disable camelcase */\n\nimport { Finger, FingerCurl, FingerDirection } from './fingerdef';\nimport Gestures from '../hand/fingergesture';\n\nconst minConfidence = 0.7;\nconst options = {\n // curl estimation\n HALF_CURL_START_LIMIT: 60.0,\n NO_CURL_START_LIMIT: 130.0,\n // direction estimation\n DISTANCE_VOTE_POWER: 1.1,\n SINGLE_ANGLE_VOTE_POWER: 0.9,\n TOTAL_ANGLE_VOTE_POWER: 1.6,\n};\n\nfunction calculateSlope(point1x, point1y, point2x, point2y) {\n const value = (point1y - point2y) / (point1x - point2x);\n let slope = Math.atan(value) * 180 / Math.PI;\n if (slope <= 0) slope = -slope;\n else if (slope > 0) slope = 180 - slope;\n return slope;\n}\n\n// point1, point2 are 2d or 3d point arrays (xy[z])\n// returns either a single scalar (2d) or array of two slopes (3d)\nfunction getSlopes(point1, point2) {\n if (!point1 || !point2) return [0, 0];\n const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);\n if (point1.length === 2) return slopeXY;\n const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]);\n return [slopeXY, slopeYZ];\n}\n\nfunction angleOrientationAt(angle, weightageAt = 1.0) {\n let isVertical = 0;\n let isDiagonal = 0;\n let isHorizontal = 0;\n if (angle >= 75.0 && angle <= 105.0) isVertical = 1 * weightageAt;\n else if (angle >= 25.0 && angle <= 155.0) isDiagonal = 1 * weightageAt;\n else isHorizontal = 1 * weightageAt;\n return [isVertical, isDiagonal, isHorizontal];\n}\n\nfunction estimateFingerCurl(startPoint, midPoint, endPoint) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const start_mid_z_dist = startPoint[2] - midPoint[2];\n const start_end_z_dist = startPoint[2] - endPoint[2];\n const mid_end_z_dist = midPoint[2] - endPoint[2];\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist);\n let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist);\n if (cos_in > 1.0) cos_in = 1.0;\n else if (cos_in < -1.0) cos_in = -1.0;\n let angleOfCurve = Math.acos(cos_in);\n angleOfCurve = (57.2958 * angleOfCurve) % 180;\n let fingerCurl;\n if (angleOfCurve > options.NO_CURL_START_LIMIT) fingerCurl = FingerCurl.none;\n else if (angleOfCurve > options.HALF_CURL_START_LIMIT) fingerCurl = FingerCurl.half;\n else fingerCurl = FingerCurl.full;\n return fingerCurl;\n}\n\nfunction estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n if (max_dist_x === Math.abs(start_end_x_dist)) {\n if (start_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else if (max_dist_x === Math.abs(start_mid_x_dist)) {\n if (start_mid_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else {\n if (mid_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n }\n return estimatedDirection;\n}\n\nfunction estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) {\n let estimatedDirection;\n if (max_dist_y === Math.abs(start_end_y_dist)) {\n if (start_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else if (max_dist_y === Math.abs(start_mid_y_dist)) {\n if (start_mid_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else {\n if (mid_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n }\n return estimatedDirection;\n}\n\nfunction estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n if (reqd_vertical_direction === FingerDirection.verticalUp) {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalUpLeft;\n else estimatedDirection = FingerDirection.diagonalUpRight;\n } else {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalDownLeft;\n else estimatedDirection = FingerDirection.diagonalDownRight;\n }\n return estimatedDirection;\n}\n\nfunction calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist));\n const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist));\n let voteVertical = 0.0;\n let voteDiagonal = 0.0;\n let voteHorizontal = 0.0;\n const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 0.00001);\n if (start_end_x_y_dist_ratio > 1.5) voteVertical += options.DISTANCE_VOTE_POWER;\n else if (start_end_x_y_dist_ratio > 0.66) voteDiagonal += options.DISTANCE_VOTE_POWER;\n else voteHorizontal += options.DISTANCE_VOTE_POWER;\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist);\n const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist);\n let calc_start_point_x = startPoint[0];\n let calc_start_point_y = startPoint[1];\n let calc_end_point_x = endPoint[0];\n let calc_end_point_y = endPoint[1];\n if (max_dist === start_mid_dist) {\n calc_end_point_x = endPoint[0];\n calc_end_point_y = endPoint[1];\n } else if (max_dist === mid_end_dist) {\n calc_start_point_x = midPoint[0];\n calc_start_point_y = midPoint[1];\n }\n const calcStartPoint = [calc_start_point_x, calc_start_point_y];\n const calcEndPoint = [calc_end_point_x, calc_end_point_y];\n const totalAngle = getSlopes(calcStartPoint, calcEndPoint);\n const votes = angleOrientationAt(totalAngle, options.TOTAL_ANGLE_VOTE_POWER);\n voteVertical += votes[0];\n voteDiagonal += votes[1];\n voteHorizontal += votes[2];\n for (const fingerSlope of fingerSlopes) {\n const fingerVotes = angleOrientationAt(fingerSlope, options.SINGLE_ANGLE_VOTE_POWER);\n voteVertical += fingerVotes[0];\n voteDiagonal += fingerVotes[1];\n voteHorizontal += fingerVotes[2];\n }\n // in case of tie, highest preference goes to Vertical,\n // followed by horizontal and then diagonal\n let estimatedDirection;\n if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n } else {\n estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n }\n return estimatedDirection;\n}\n\nfunction estimate(landmarks) {\n // step 1: calculate slopes\n const slopesXY: number[][] = [];\n const slopesYZ: number[][] = [];\n const fingerCurls: number[] = [];\n const fingerDirections: number[] = [];\n if (!landmarks) return { curls: fingerCurls, directions: fingerDirections };\n\n // step 1: calculate slopes\n for (const finger of Finger.all) {\n const points = Finger.getPoints(finger);\n const slopeAtXY: number[] = [];\n const slopeAtYZ: number[] = [];\n for (const point of points) {\n const point1 = landmarks[point[0]];\n const point2 = landmarks[point[1]];\n // calculate single slope\n const slopes = getSlopes(point1, point2);\n const slopeXY = slopes[0];\n const slopeYZ = slopes[1];\n slopeAtXY.push(slopeXY);\n slopeAtYZ.push(slopeYZ);\n }\n slopesXY.push(slopeAtXY);\n slopesYZ.push(slopeAtYZ);\n }\n\n // step 2: calculate orientations\n for (const finger of Finger.all) {\n // start finger predictions from palm - except for thumb\n const pointIndexAt = (finger === Finger.thumb) ? 1 : 0;\n const fingerPointsAt = Finger.getPoints(finger);\n const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]];\n const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]];\n const endPoint = landmarks[fingerPointsAt[3][1]];\n // check if finger is curled\n const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint);\n const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt));\n fingerCurls[finger] = fingerCurled;\n fingerDirections[finger] = fingerPosition;\n }\n return { curls: fingerCurls, directions: fingerDirections };\n}\n\nexport function analyze(keypoints) { // get estimations of curl / direction for each finger\n if (!keypoints || keypoints.length === 0) return null;\n const estimatorRes = estimate(keypoints);\n const landmarks = {};\n for (const fingerIdx of Finger.all) {\n landmarks[Finger.getName(fingerIdx)] = {\n curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]),\n direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]),\n };\n }\n return landmarks;\n}\n\nexport function match(keypoints) { // compare gesture description to each known gesture\n const poses: { name: string, confidence: number }[] = [];\n if (!keypoints || keypoints.length === 0) return poses;\n const estimatorRes = estimate(keypoints);\n for (const gesture of Gestures) {\n const confidence = gesture.matchAgainst(estimatorRes.curls, estimatorRes.directions);\n if (confidence >= minConfidence) poses.push({ name: gesture.name, confidence });\n }\n return poses;\n}\n", "/**\n * Gesture detection algorithm\n */\n\nimport type { GestureResult, BodyResult, FaceResult, HandResult, Point } from '../result';\nimport * as fingerPose from '../hand/fingerpose';\n\n/** face gesture type */\nexport type FaceGesture =\n `facing ${'left' | 'center' | 'right'}`\n | `blink ${'left' | 'right'} eye`\n | `mouth ${number}% open`\n | `head ${'up' | 'down'}`;\n\n/** iris gesture type */\nexport type IrisGesture =\n 'facing center'\n | `looking ${'left' | 'right' | 'up' | 'down'}`\n | 'looking center';\n\n/** body gesture type */\nexport type BodyGesture =\n `leaning ${'left' | 'right'}`\n | `raise ${'left' | 'right'} hand`\n | 'i give up';\n\n/** hand gesture type */\nexport type HandGesture =\n `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} forward`\n | `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} up`\n | 'victory'\n | 'thumbs up';\n\nexport const body = (res: BodyResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { body: number, gesture: BodyGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n // raising hands\n const leftWrist = res[i].keypoints.find((a) => (a.part === 'leftWrist'));\n const rightWrist = res[i].keypoints.find((a) => (a.part === 'rightWrist'));\n const nose = res[i].keypoints.find((a) => (a.part === 'nose'));\n if (nose && leftWrist && rightWrist && (leftWrist.position[1] < nose.position[1]) && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'i give up' });\n else if (nose && leftWrist && (leftWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise left hand' });\n else if (nose && rightWrist && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise right hand' });\n\n // leaning\n const leftShoulder = res[i].keypoints.find((a) => (a.part === 'leftShoulder'));\n const rightShoulder = res[i].keypoints.find((a) => (a.part === 'rightShoulder'));\n if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) {\n gestures.push({ body: i, gesture: `leaning ${(leftShoulder.position[1] > rightShoulder.position[1]) ? 'left' : 'right'}` });\n }\n }\n return gestures;\n};\n\nexport const face = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { face: number, gesture: FaceGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (res[i].mesh && res[i].mesh.length > 450) {\n const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0);\n const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0];\n if (Math.abs(zDiff / xDiff) <= 0.15) gestures.push({ face: i, gesture: 'facing center' });\n else gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? 'left' : 'right'}` });\n const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openLeft < 0.2) gestures.push({ face: i, gesture: 'blink left eye' });\n const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openRight < 0.2) gestures.push({ face: i, gesture: 'blink right eye' });\n const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1]));\n if (mouthOpen > 10) gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` });\n const chinDepth = res[i].mesh[152][2] || 0;\n if (Math.abs(chinDepth) > 10) gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? 'up' : 'down'}` });\n }\n }\n return gestures;\n};\n\nexport const iris = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { iris: number, gesture: IrisGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!res[i].annotations?.leftEyeIris?.[0] || !res[i].annotations?.rightEyeIris?.[0]) continue;\n const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0];\n const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1];\n const areaLeft = Math.abs(sizeXLeft * sizeYLeft);\n\n const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0];\n const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1];\n const areaRight = Math.abs(sizeXRight * sizeYRight);\n\n let center = false;\n const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight);\n if (difference < 0.25) {\n center = true;\n gestures.push({ iris: i, gesture: 'facing center' });\n }\n\n const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2];\n const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2];\n if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) center = false;\n if (leftIrisCenterX > rightIrisCenterX) { // check eye with bigger offset\n if (leftIrisCenterX > 0.05) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (rightIrisCenterX > 0.05) gestures.push({ iris: i, gesture: 'looking left' });\n }\n\n const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3];\n const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3];\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) center = false;\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) gestures.push({ iris: i, gesture: 'looking down' });\n if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) gestures.push({ iris: i, gesture: 'looking up' });\n\n // still center;\n if (center) gestures.push({ iris: i, gesture: 'looking center' });\n }\n return gestures;\n};\n\nexport const hand = (res: HandResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { hand: number, gesture: HandGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n const fingers: { name: string, position: Point }[] = [];\n if (res[i].annotations) {\n for (const [finger, pos] of Object.entries(res[i].annotations)) {\n if (finger !== 'palmBase' && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger\n }\n }\n if (fingers && fingers.length > 0) {\n const closest = fingers.reduce((best, a) => ((best.position[2] || 0) < (a.position[2] || 0) ? best : a));\n gestures.push({ hand: i, gesture: `${closest.name} forward` as HandGesture });\n const highest = fingers.reduce((best, a) => (best.position[1] < a.position[1] ? best : a));\n gestures.push({ hand: i, gesture: `${highest.name} up` as HandGesture });\n }\n if (res[i].keypoints) {\n const poses = fingerPose.match(res[i].keypoints);\n for (const pose of poses) gestures.push({ hand: i, gesture: pose.name as HandGesture });\n }\n }\n return gestures;\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Point } from '../result';\n\nexport function getBoxSize(box) {\n return [\n Math.abs(box.endPoint[0] - box.startPoint[0]),\n Math.abs(box.endPoint[1] - box.startPoint[1]),\n ];\n}\n\nexport function getBoxCenter(box) {\n return [\n box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2,\n box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2,\n ];\n}\n\nexport function cutBoxFromImageAndResize(box, image, cropSize) {\n const h = image.shape[1];\n const w = image.shape[2];\n const boxes = [[\n box.startPoint[1] / h,\n box.startPoint[0] / w,\n box.endPoint[1] / h,\n box.endPoint[0] / w,\n ]];\n return tf.image.cropAndResize(image, boxes, [0], cropSize);\n}\n\nexport function scaleBoxCoordinates(box, factor) {\n const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]] as Point;\n const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]] as Point;\n const palmLandmarks = box.palmLandmarks.map((coord) => {\n const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]];\n return scaledCoord;\n });\n return { startPoint, endPoint, palmLandmarks, confidence: box.confidence };\n}\n\nexport function enlargeBox(box, factor = 1.5) {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const newHalfSize = [factor * size[0] / 2, factor * size[1] / 2];\n const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]] as Point;\n const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function squarifyBox(box) {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const maxEdge = Math.max(...size);\n const halfSize = maxEdge / 2;\n const startPoint = [centers[0] - halfSize, centers[1] - halfSize] as Point;\n const endPoint = [centers[0] + halfSize, centers[1] + halfSize] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function shiftBox(box, shiftFactor) {\n const boxSize = [\n box.endPoint[0] - box.startPoint[0],\n box.endPoint[1] - box.startPoint[1],\n ];\n const shiftVector = [boxSize[0] * shiftFactor[0], boxSize[1] * shiftFactor[1]];\n const startPoint = [box.startPoint[0] + shiftVector[0], box.startPoint[1] + shiftVector[1]] as Point;\n const endPoint = [box.endPoint[0] + shiftVector[0], box.endPoint[1] + shiftVector[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function normalizeRadians(angle) {\n return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n}\n\nexport function computeRotation(point1, point2) {\n const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]);\n return normalizeRadians(radians);\n}\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport function dot(v1, v2) {\n let product = 0;\n for (let i = 0; i < v1.length; i++) {\n product += v1[i] * v2[i];\n }\n return product;\n}\n\nexport function getColumnFrom2DArr(arr, columnIndex) {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) {\n column.push(arr[i][columnIndex]);\n }\n return column;\n}\n\nexport function multiplyTransformMatrices(mat1, mat2) {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) {\n product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n }\n return product;\n}\n\nexport function buildRotationMatrix(rotation, center) {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n}\n\nexport function invertTransformMatrix(matrix) {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [\n -dot(rotationComponent[0], translationComponent),\n -dot(rotationComponent[1], translationComponent),\n ];\n return [\n rotationComponent[0].concat(invertedTranslation[0]),\n rotationComponent[1].concat(invertedTranslation[1]),\n [0, 0, 1],\n ];\n}\n\nexport function rotatePoint(homogeneousCoordinate, rotationMatrix) {\n return [\n dot(homogeneousCoordinate, rotationMatrix[0]),\n dot(homogeneousCoordinate, rotationMatrix[1]),\n ];\n}\n", "/**\n * HandPose model implementation constants\n * See `handpose.ts` for entry point\n */\n\nexport const anchors = [\n { x: 0.015625, y: 0.015625 },\n { x: 0.015625, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n];\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport * as anchors from './handposeanchors';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, Tensor1D, Tensor2D, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Point } from '../result';\nimport type { Config } from '../config';\n\nexport class HandDetector {\n model: GraphModel;\n anchors: number[][];\n anchorsTensor: Tensor;\n inputSize: number;\n inputSizeTensor: Tensor;\n doubleInputSizeTensor: Tensor;\n\n constructor(model: GraphModel) {\n this.model = model;\n this.anchors = anchors.anchors.map((anchor) => [anchor.x, anchor.y]);\n this.anchorsTensor = tf.tensor2d(this.anchors);\n this.inputSize = this?.model?.inputs?.[0]?.shape?.[2] || 0;\n this.inputSizeTensor = tf.tensor1d([this.inputSize, this.inputSize]);\n this.doubleInputSizeTensor = tf.tensor1d([this.inputSize * 2, this.inputSize * 2]);\n }\n\n normalizeBoxes(boxes) {\n const t: Record = {};\n t.boxOffsets = tf.slice(boxes, [0, 0], [-1, 2]);\n t.boxSizes = tf.slice(boxes, [0, 2], [-1, 2]);\n t.div = tf.div(t.boxOffsets, this.inputSizeTensor);\n t.boxCenterPoints = tf.add(t.div, this.anchorsTensor);\n t.halfBoxSizes = tf.div(t.boxSizes, this.doubleInputSizeTensor);\n t.sub = tf.sub(t.boxCenterPoints, t.halfBoxSizes);\n t.startPoints = tf.mul(t.sub, this.inputSizeTensor);\n t.add = tf.add(t.boxCenterPoints, t.halfBoxSizes);\n t.endPoints = tf.mul(t.add, this.inputSizeTensor);\n const res = tf.concat2d([t.startPoints as Tensor2D, t.endPoints as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res as Tensor;\n }\n\n normalizeLandmarks(rawPalmLandmarks, index: number): Tensor {\n const t: Record = {};\n t.reshape = tf.reshape(rawPalmLandmarks, [-1, 7, 2]);\n t.div = tf.div(t.reshape, this.inputSizeTensor);\n t.landmarks = tf.add(t.div, this.anchors[index] ? this.anchors[index] : 0);\n const res = tf.mul(t.landmarks, this.inputSizeTensor);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res;\n }\n\n async predict(input: Tensor4D, config: Config): Promise<{ startPoint: Point; endPoint: Point, palmLandmarks: Point[]; confidence: number }[]> {\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);\n t.div = tf.div(t.resize, constants.tf127);\n t.image = tf.sub(t.div, constants.tf1);\n t.batched = this.model.execute(t.image) as Tensor;\n t.predictions = tf.squeeze(t.batched);\n t.slice = tf.slice(t.predictions, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.slice);\n t.scores = tf.squeeze(t.sigmoid);\n const scores = await t.scores.data();\n t.boxes = tf.slice(t.predictions, [0, 1], [-1, 4]);\n t.norm = this.normalizeBoxes(t.boxes);\n // box detection is flaky so we look for 3x boxes than we need results\n t.nms = await tf.image.nonMaxSuppressionAsync(t.norm as Tensor2D, t.scores as Tensor1D, 3 * (config.hand?.maxDetected || 1), config.hand.iouThreshold, config.hand.minConfidence);\n const nms = await t.nms.array() as number[];\n const hands: { startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number }[] = [];\n for (const index of nms) {\n const p: Record = {};\n p.box = tf.slice(t.norm, [index, 0], [1, -1]);\n p.slice = tf.slice(t.predictions, [index, 5], [1, 14]);\n p.norm = this.normalizeLandmarks(p.slice, index);\n p.palmLandmarks = tf.reshape(p.norm, [-1, 2]);\n const box = await p.box.data();\n const startPoint = box.slice(0, 2) as unknown as Point;\n const endPoint = box.slice(2, 4) as unknown as Point;\n const palmLandmarks = await p.palmLandmarks.array();\n const hand = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };\n const scaled = util.scaleBoxCoordinates(hand, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]);\n hands.push(scaled);\n Object.keys(p).forEach((tensor) => tf.dispose(p[tensor]));\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport type * as detector from './handposedetector';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { now } from '../util/util';\nimport type { Point } from '../result';\n\nconst palmBoxEnlargeFactor = 5; // default 3\nconst handBoxEnlargeFactor = 1.65; // default 1.65\nconst palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2];\nconst palmLandmarksPalmBase = 0;\nconst palmLandmarksMiddleFingerBase = 2;\nlet lastTime = 0;\n\nexport class HandPipeline {\n handDetector: detector.HandDetector;\n handPoseModel: GraphModel;\n inputSize: number;\n storedBoxes: ({ startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number } | null)[];\n skipped: number;\n detectedHands: number;\n\n constructor(handDetector, handPoseModel) {\n this.handDetector = handDetector;\n this.handPoseModel = handPoseModel;\n this.inputSize = this.handPoseModel?.inputs?.[0].shape?.[2] || 0;\n this.storedBoxes = [];\n this.skipped = Number.MAX_SAFE_INTEGER;\n this.detectedHands = 0;\n }\n\n calculateLandmarksBoundingBox(landmarks) { // eslint-disable-line class-methods-use-this\n const xs = landmarks.map((d) => d[0]);\n const ys = landmarks.map((d) => d[1]);\n const startPoint = [Math.min(...xs), Math.min(...ys)];\n const endPoint = [Math.max(...xs), Math.max(...ys)];\n return { startPoint, endPoint };\n }\n\n getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) {\n const rotatedPalmLandmarks = palmLandmarks.map((coord) => util.rotatePoint([...coord, 1], rotationMatrix));\n const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks);\n return util.enlargeBox(util.squarifyBox(boxAroundPalm), palmBoxEnlargeFactor);\n }\n\n getBoxForHandLandmarks(landmarks) {\n const boundingBox = this.calculateLandmarksBoundingBox(landmarks);\n const boxAroundHand = util.enlargeBox(util.squarifyBox(boundingBox), handBoxEnlargeFactor);\n boxAroundHand.palmLandmarks = [];\n for (let i = 0; i < palmLandmarkIds.length; i++) {\n boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2));\n }\n return boxAroundHand;\n }\n\n transformRawCoords(rawCoords, box2, angle, rotationMatrix) {\n const boxSize = util.getBoxSize(box2);\n const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2];\n const coordsScaled = rawCoords.map((coord) => [\n scaleFactor[0] * (coord[0] - this.inputSize / 2),\n scaleFactor[1] * (coord[1] - this.inputSize / 2),\n scaleFactor[2] * coord[2],\n ]);\n const coordsRotationMatrix = util.buildRotationMatrix(angle, [0, 0]);\n const coordsRotated = coordsScaled.map((coord) => {\n const rotated = util.rotatePoint(coord, coordsRotationMatrix);\n return [...rotated, coord[2]];\n });\n const inverseRotationMatrix = util.invertTransformMatrix(rotationMatrix);\n const boxCenter = [...util.getBoxCenter(box2), 1];\n const originalBoxCenter = [\n util.dot(boxCenter, inverseRotationMatrix[0]),\n util.dot(boxCenter, inverseRotationMatrix[1]),\n ];\n return coordsRotated.map((coord) => [\n Math.trunc(coord[0] + originalBoxCenter[0]),\n Math.trunc(coord[1] + originalBoxCenter[1]),\n Math.trunc(coord[2]),\n ]);\n }\n\n async estimateHands(image, config) {\n let useFreshBox = false;\n\n // run new detector every skipFrames\n let boxes;\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = this.skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\n if (config.skipAllowed) this.skipped++;\n\n // if detector result count doesn't match current working set, use it to reset current working set\n if (boxes && (boxes.length > 0) && ((boxes.length !== this.detectedHands) && (this.detectedHands !== config.hand.maxDetected) || !config.hand.landmarks)) {\n this.detectedHands = 0;\n this.storedBoxes = [...boxes];\n // for (const possible of boxes) this.storedBoxes.push(possible);\n if (this.storedBoxes.length > 0) useFreshBox = true;\n }\n const hands: { landmarks: Point[], confidence: number, boxConfidence: number, fingerConfidence: number, box: { topLeft: Point, bottomRight: Point } }[] = [];\n\n // go through working set of boxes\n for (let i = 0; i < this.storedBoxes.length; i++) {\n const currentBox = this.storedBoxes[i];\n if (!currentBox) continue;\n if (config.hand.landmarks) {\n const angle = config.hand.rotation ? util.computeRotation(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0;\n const palmCenter = util.getBoxCenter(currentBox);\n const palmCenterNormalized: [number, number] = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]];\n const rotatedImage = config.hand.rotation && env.kernels.includes('rotatewithoffset') ? tf.image.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone();\n const rotationMatrix = util.buildRotationMatrix(-angle, palmCenter);\n const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox;\n const croppedInput = util.cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]);\n const handImage = tf.div(croppedInput, constants.tf255);\n tf.dispose(croppedInput);\n tf.dispose(rotatedImage);\n const [confidenceT, keypoints] = this.handPoseModel.execute(handImage) as Tensor[];\n lastTime = now();\n tf.dispose(handImage);\n const confidence = (await confidenceT.data())[0];\n tf.dispose(confidenceT);\n if (confidence >= config.hand.minConfidence / 4) {\n const keypointsReshaped = tf.reshape(keypoints, [-1, 3]);\n const rawCoords = await keypointsReshaped.array();\n tf.dispose(keypoints);\n tf.dispose(keypointsReshaped);\n const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);\n const nextBoundingBox = this.getBoxForHandLandmarks(coords);\n this.storedBoxes[i] = { ...nextBoundingBox, confidence };\n const result = {\n landmarks: coords,\n confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: confidence,\n box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint },\n };\n hands.push(result);\n } else {\n this.storedBoxes[i] = null;\n }\n tf.dispose(keypoints);\n } else {\n // const enlarged = box.enlargeBox(box.squarifyBox(box.shiftBox(currentBox, HAND_BOX_SHIFT_VECTOR)), handBoxEnlargeFactor);\n const enlarged = util.enlargeBox(util.squarifyBox(currentBox), handBoxEnlargeFactor);\n const result = {\n confidence: currentBox.confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: 0,\n box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint },\n landmarks: [],\n };\n hands.push(result);\n }\n }\n this.storedBoxes = this.storedBoxes.filter((a) => a !== null);\n this.detectedHands = hands.length;\n if (hands.length > config.hand.maxDetected) hands.length = config.hand.maxDetected;\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n *\n * Based on: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n */\n\nimport { log } from '../util/util';\nimport * as handdetector from './handposedetector';\nimport * as handpipeline from './handposepipeline';\nimport * as fingerPose from './fingerpose';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, Box, Point } from '../result';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nconst meshAnnotations = {\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n palm: [0],\n};\n\nlet handDetectorModel: GraphModel | null;\nlet handPoseModel: GraphModel | null;\nlet handPipeline: handpipeline.HandPipeline;\n\nexport async function predict(input: Tensor, config: Config): Promise {\n const predictions = await handPipeline.estimateHands(input, config);\n if (!predictions) return [];\n const hands: HandResult[] = [];\n for (let i = 0; i < predictions.length; i++) {\n const annotations = {};\n if (predictions[i].landmarks) {\n for (const key of Object.keys(meshAnnotations)) {\n annotations[key] = meshAnnotations[key].map((index) => predictions[i].landmarks[index]);\n }\n }\n const keypoints = predictions[i].landmarks as unknown as Point[];\n let box: Box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; // maximums so conditionals work\n let boxRaw: Box = [0, 0, 0, 0];\n if (keypoints && keypoints.length > 0) { // if we have landmarks, calculate box based on landmarks\n for (const pt of keypoints) {\n if (pt[0] < box[0]) box[0] = pt[0];\n if (pt[1] < box[1]) box[1] = pt[1];\n if (pt[0] > box[2]) box[2] = pt[0];\n if (pt[1] > box[3]) box[3] = pt[1];\n }\n box[2] -= box[0];\n box[3] -= box[1];\n boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)];\n } else { // otherwise use box from prediction\n box = predictions[i].box ? [\n Math.trunc(Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.max(0, predictions[i].box.topLeft[1])),\n Math.trunc(Math.min((input.shape[2] || 0), predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.min((input.shape[1] || 0), predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])),\n ] : [0, 0, 0, 0];\n boxRaw = [\n (predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n ];\n }\n const landmarks = fingerPose.analyze(keypoints);\n hands.push({\n id: i,\n score: Math.round(100 * predictions[i].confidence) / 100,\n boxScore: Math.round(100 * predictions[i].boxConfidence) / 100,\n fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100,\n label: 'hand',\n box,\n boxRaw,\n keypoints,\n annotations: annotations as HandResult['annotations'],\n landmarks: landmarks as HandResult['landmarks'],\n });\n }\n return hands;\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (env.initial) {\n handDetectorModel = null;\n handPoseModel = null;\n }\n if (!handDetectorModel || !handPoseModel) {\n [handDetectorModel, handPoseModel] = await Promise.all([\n config.hand.enabled ? loadModel(config.hand.detector?.modelPath) : null,\n config.hand.landmarks ? loadModel(config.hand.skeleton?.modelPath) : null,\n ]);\n } else {\n if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n }\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n return [handDetectorModel, handPoseModel];\n}\n", "/**\n * HandTrack model implementation\n *\n * Based on:\n * - Hand Detection & Skeleton: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n * - Hand Tracking: [**HandTracking**](https://github.com/victordibia/handtracking)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, HandType, Box, Point } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as fingerPose from './fingerpose';\nimport { fakeOps } from '../tfjs/backend';\nimport { constants } from '../tfjs/constants';\n\nconst models: [GraphModel | null, GraphModel | null] = [null, null];\nconst modelOutputNodes = ['StatefulPartitionedCall/Postprocessor/Slice', 'StatefulPartitionedCall/Postprocessor/ExpandDims_1'];\n\nconst inputSize = [[0, 0], [0, 0]];\n\nconst classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];\nconst faceIndex = 4;\n\nconst boxExpandFact = 1.6;\nconst maxDetectorResolution = 512;\nconst detectorExpandFact = 1.4;\n\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastTime = 0;\nlet outputSize: [number, number] = [0, 0];\n\ninterface HandDetectResult {\n id: number,\n score: number,\n box: Box,\n boxRaw: Box,\n label: HandType,\n}\n\nconst cache: {\n boxes: HandDetectResult[],\n hands: HandResult[];\n} = {\n boxes: [],\n hands: [],\n};\n\nconst fingerMap = {\n /*\n thumb: [0, 1, 2, 3, 4],\n index: [0, 5, 6, 7, 8],\n middle: [0, 9, 10, 11, 12],\n ring: [0, 13, 14, 15, 16],\n pinky: [0, 17, 18, 19, 20],\n palm: [0],\n */\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n base: [0],\n palm: [0, 17, 13, 9, 5, 1, 0],\n};\n\nexport async function loadDetect(config: Config): Promise {\n // HandTrack Model: Original: TFJS Port: \n if (env.initial) models[0] = null;\n if (!models[0]) {\n // handtrack model has some kernel ops defined in model but those are never referenced and non-existent in tfjs\n // ideally need to prune the model itself\n fakeOps(['tensorlistreserve', 'enter', 'tensorlistfromtensor', 'merge', 'loopcond', 'switch', 'exit', 'tensorliststack', 'nextiteration', 'tensorlistsetitem', 'tensorlistgetitem', 'reciprocal', 'shape', 'split', 'where'], config);\n models[0] = await loadModel(config.hand.detector?.modelPath);\n const inputs = models[0]['executor'] ? Object.values(models[0].modelSignature['inputs']) : undefined;\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[0]['modelUrl']);\n return models[0];\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) models[1] = null;\n if (!models[1]) {\n models[1] = await loadModel(config.hand.skeleton?.modelPath);\n const inputs = models[1]['executor'] ? Object.values(models[1].modelSignature['inputs']) : undefined;\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[1]['modelUrl']);\n return models[1];\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (!models[0]) await loadDetect(config);\n if (!models[1]) await loadSkeleton(config);\n return models;\n}\n\nasync function detectHands(input: Tensor4D, config: Config): Promise {\n const hands: HandDetectResult[] = [];\n if (!input || !models[0]) return hands;\n const t: Record = {};\n const ratio = (input.shape[2] || 1) / (input.shape[1] || 1);\n const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); // use dynamic input size but cap at 512\n const width = Math.round(height * ratio / 8) * 8;\n t.resize = tf.image.resizeBilinear(input, [height, width]); // todo: resize with padding\n t.cast = tf.cast(t.resize, 'int32');\n [t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[];\n t.boxes = tf.squeeze(t.rawBoxes, [0, 2]);\n t.scores = tf.squeeze(t.rawScores, [0]);\n const classScores: Tensor[] = tf.unstack(t.scores, 1); // unstack scores based on classes\n tf.dispose(classScores[faceIndex]);\n classScores.splice(faceIndex, 1); // remove faces\n t.filtered = tf.stack(classScores, 1); // restack\n tf.dispose(classScores);\n // t.filtered = t.scores;\n t.max = tf.max(t.filtered, 1); // max overall score\n t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score\n let id = 0;\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.max as Tensor1D, (config.hand.maxDetected || 0) + 1, config.hand.iouThreshold || 0, config.hand.minConfidence || 1);\n const nms = await t.nms.data();\n const scores = await t.max.data();\n const classNum = await t.argmax.data();\n for (const nmsIndex of Array.from(nms)) { // generates results for each class\n const boxSlice = tf.slice(t.boxes, nmsIndex, 1);\n const boxYX = await boxSlice.data();\n tf.dispose(boxSlice);\n const boxData: Box = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; // yx box reshaped to standard box\n const boxRaw: Box = box.scale(boxData, detectorExpandFact);\n const boxFull: Box = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];\n const score = scores[nmsIndex];\n const label = classes[classNum[nmsIndex]] as HandType;\n const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, label };\n hands.push(hand);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n hands.sort((a, b) => b.score - a.score);\n if (hands.length > (config.hand.maxDetected || 1)) hands.length = (config.hand.maxDetected || 1);\n return hands;\n}\n\nasync function detectFingers(input: Tensor4D, h: HandDetectResult, config: Config): Promise {\n const hand: HandResult = { // initial values inherited from hand detect\n id: h.id,\n score: Math.round(100 * h.score) / 100,\n boxScore: Math.round(100 * h.score) / 100,\n fingerScore: 0,\n box: h.box,\n boxRaw: h.boxRaw,\n label: h.label,\n keypoints: [],\n landmarks: {} as HandResult['landmarks'],\n annotations: {} as HandResult['annotations'],\n };\n if (input && models[1] && config.hand.landmarks && h.score > (config.hand.minConfidence || 0)) {\n const t: Record = {};\n const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]] as Box;\n t.crop = tf.image.cropAndResize(input, [boxCrop], [0], [inputSize[1][0], inputSize[1][1]], 'bilinear');\n t.div = tf.div(t.crop, constants.tf255);\n [t.score, t.keypoints] = models[1].execute(t.div, ['Identity_1', 'Identity']) as Tensor[];\n const rawScore = (await t.score.data())[0];\n const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; // reverse sigmoid value\n if (score >= (config.hand.minConfidence || 0)) {\n hand.fingerScore = score;\n t.reshaped = tf.reshape(t.keypoints, [-1, 3]);\n const coordsData: Point[] = await t.reshaped.array() as Point[];\n const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]);\n const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]);\n hand.keypoints = (coordsNorm).map((kpt) => [outputSize[0] * (kpt[0] + h.boxRaw[0]), outputSize[1] * (kpt[1] + h.boxRaw[1]), (kpt[2] || 0)]);\n hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger gestures\n for (const key of Object.keys(fingerMap)) { // map keypoints to per-finger annotations\n hand.annotations[key] = fingerMap[key].map((index: number) => (hand.landmarks && hand.keypoints[index] ? hand.keypoints[index] : null));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n return hand;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!models[0]?.['executor'] || !models[1]?.['executor'] || !models[0].inputs[0].shape || !models[1].inputs[0].shape) return []; // something is wrong with the model\n outputSize = [input.shape[2] || 0, input.shape[1] || 0];\n skipped++; // increment skip frames\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.hands; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const skipTimeExtended = 3 * (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrameExtended = skipped < 3 * (config.hand.skipFrames || 0);\n if (config.skipAllowed && cache.hands.length === config.hand.maxDetected) { // we have all detected hands so we're definitely skipping\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else if (config.skipAllowed && skipTimeExtended && skipFrameExtended && cache.hands.length > 0) { // we have some cached results: maybe not enough but anyhow continue for bit longer\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else { // finally rerun detector\n cache.boxes = await detectHands(input, config);\n lastTime = now();\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n skipped = 0;\n }\n\n const oldCache = [...cache.boxes];\n cache.boxes.length = 0; // reset cache\n if (config.cacheSensitivity > 0) {\n for (let i = 0; i < cache.hands.length; i++) {\n const boxKpt = box.square(cache.hands[i].keypoints, outputSize);\n if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache.hands[i].fingerScore && cache.hands[i].fingerScore > (config.hand.minConfidence || 0)) {\n const boxScale = box.scale(boxKpt.box, boxExpandFact);\n const boxScaleRaw = box.scale(boxKpt.boxRaw, boxExpandFact);\n // const boxCrop = box.crop(boxScaleRaw);\n cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw });\n }\n }\n }\n for (let i = 0; i < cache.hands.length; i++) { // replace detected boxes with calculated boxes in final output\n const bbox = box.calc(cache.hands[i].keypoints, outputSize);\n cache.hands[i].box = bbox.box;\n cache.hands[i].boxRaw = bbox.boxRaw;\n }\n resolve(cache.hands);\n });\n}\n", "/**\n * Type definitions for Human result object\n */\n\nimport type { Tensor } from './tfjs/types';\nimport type { FaceGesture, BodyGesture, HandGesture, IrisGesture } from './gesture/gesture';\nimport type { AnyCanvas } from './exports';\n\n/** generic box as [x, y, width, height] */\nexport type Box = [number, number, number, number];\n/** generic point as [x, y, z?] */\nexport type Point = [number, number, number?];\n\nexport type Emotion = 'angry' | 'disgust' | 'fear' | 'happy' | 'sad' | 'surprise' | 'neutral';\nexport type Gender = 'male' | 'female' | 'unknown';\nexport type Race = 'white' | 'black' | 'asian' | 'indian' | 'other';\nexport type FaceLandmark = 'leftEye' | 'rightEye' | 'nose' | 'mouth' | 'leftEar' | 'rightEar' | 'symmetryLine' | 'silhouette'\n | 'lipsUpperOuter' | 'lipsLowerOuter' | 'lipsUpperInner' | 'lipsLowerInner'\n | 'rightEyeUpper0' | 'rightEyeLower0' | 'rightEyeUpper1' | 'rightEyeLower1' | 'rightEyeUpper2' | 'rightEyeLower2' | 'rightEyeLower3' | 'rightEyebrowUpper' | 'rightEyebrowLower' | 'rightEyeIris'\n | 'leftEyeUpper0' | 'leftEyeLower0' | 'leftEyeUpper1' | 'leftEyeLower1' | 'leftEyeUpper2' | 'leftEyeLower2' | 'leftEyeLower3' | 'leftEyebrowUpper' | 'leftEyebrowLower' | 'leftEyeIris'\n | 'midwayBetweenEyes' | 'noseTip' | 'noseBottom' | 'noseRightCorner' | 'noseLeftCorner' | 'rightCheek' | 'leftCheek';\n\n/** Face results\n * - Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models\n * - Some values may be null if specific model is not enabled\n */\nexport interface FaceResult {\n /** face id */\n id: number\n /** overall face score */\n score: number,\n /** detection score */\n boxScore: number,\n /** mesh score */\n faceScore: number,\n /** detected face box */\n box: Box,\n /** detected face box normalized to 0..1 */\n boxRaw: Box,\n /** detected face mesh */\n mesh: Point[]\n /** detected face mesh normalized to 0..1 */\n meshRaw: Point[],\n /** face contours as array of 2d points normalized to 0..1 */\n // contoursRaw: Array<[number, number]>,\n /** face contours as array of 2d points */\n // contours: Array<[number, number]>,\n /** mesh keypoints combined into annotated results */\n annotations: Record,\n /** detected age */\n age?: number,\n /** detected gender */\n gender?: Gender,\n /** gender detection score */\n genderScore?: number,\n /** detected emotions */\n emotion?: { score: number, emotion: Emotion }[],\n /** detected race */\n race?: { score: number, race: Race }[],\n /** face descriptor */\n embedding?: number[],\n /** face distance from camera */\n distance?: number,\n /** face anti-spoofing result confidence */\n real?: number,\n /** face liveness result confidence */\n live?: number,\n /** face rotation details */\n rotation?: {\n angle: { roll: number, yaw: number, pitch: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n } | null,\n /** detected face as tensor that can be used in further pipelines */\n tensor?: Tensor,\n}\n\nexport type BodyLandmarkPoseNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkMoveNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkEfficientNet = 'head' | 'neck' | 'rightShoulder' | 'rightElbow' | 'rightWrist' | 'chest' | 'leftShoulder' | 'leftElbow' | 'leftWrist' | 'bodyCenter' | 'rightHip' | 'rightKnee' | 'rightAnkle' | 'leftHip' | 'leftKnee' | 'leftAnkle';\nexport type BodyLandmarkBlazePose = 'nose' | 'leftEyeInside' | 'leftEye' | 'leftEyeOutside' | 'rightEyeInside' | 'rightEye' | 'rightEyeOutside' | 'leftEar' | 'rightEar' | 'leftMouth' | 'rightMouth' | 'leftShoulder' | 'rightShoulder'\n | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftPinky' | 'rightPinky' | 'leftIndex' | 'rightIndex' | 'leftThumb' | 'rightThumb' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle'\n | 'leftHeel' | 'rightHeel' | 'leftFoot' | 'rightFoot' | 'bodyCenter' | 'bodyTop' | 'leftPalm' | 'leftHand' | 'rightPalm' | 'rightHand';\nexport type BodyLandmark = BodyLandmarkPoseNet | BodyLandmarkMoveNet | BodyLandmarkEfficientNet | BodyLandmarkBlazePose;\nexport type BodyAnnotationBlazePose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'leftEye' | 'rightEye' | 'mouth';\nexport type BodyAnnotationEfficientPose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'head';\nexport type BodyAnnotation = BodyAnnotationBlazePose | BodyAnnotationEfficientPose;\n\n/** Body Result keypoints */\nexport interface BodyKeypoint {\n /** body part name */\n part: BodyLandmark,\n /** body part position */\n position: Point,\n /** body part position normalized to 0..1 */\n positionRaw: Point,\n /** body part position relative to body center in meters */\n distance?: Point,\n /** body part detection score */\n score: number,\n}\n\n/** Body results */\nexport interface BodyResult {\n /** body id */\n id: number,\n /** body detection score */\n score: number,\n /** detected body box */\n box: Box,\n /** detected body box normalized to 0..1 */\n boxRaw: Box,\n /** detected body keypoints */\n keypoints: BodyKeypoint[]\n /** detected body keypoints combined into annotated parts */\n annotations: Record,\n}\n\nexport type HandType = 'hand' | 'fist' | 'pinch' | 'point' | 'face' | 'tip' | 'pinchtip';\nexport type Finger = 'index' | 'middle' | 'pinky' | 'ring' | 'thumb' | 'palm';\nexport type FingerCurl = 'none' | 'half' | 'full';\nexport type FingerDirection = 'verticalUp' | 'verticalDown' | 'horizontalLeft' | 'horizontalRight' | 'diagonalUpRight' | 'diagonalUpLeft' | 'diagonalDownRight' | 'diagonalDownLeft';\n\n/** Hand results */\nexport interface HandResult {\n /** hand id */\n id: number,\n /** hand overal score */\n score: number,\n /** hand detection score */\n boxScore: number,\n /** hand skelton score */\n fingerScore: number,\n /** detected hand box */\n box: Box,\n /** detected hand box normalized to 0..1 */\n boxRaw: Box,\n /** detected hand keypoints */\n keypoints: Point[],\n /** detected hand class */\n label: HandType,\n /** detected hand keypoints combined into annotated parts */\n annotations: Record,\n /** detected hand parts annotated with part gestures */\n landmarks: Record,\n}\n\nexport type ObjectType = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter'\n | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee'\n | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork'\n | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant'\n | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book'\n | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush';\n\n/** Object results */\nexport interface ObjectResult {\n /** object id */\n id: number,\n /** object detection score */\n score: number,\n /** detected object class id */\n class: number,\n /** detected object class name */\n label: ObjectType,\n /** detected object box */\n box: Box,\n /** detected object box normalized to 0..1 */\n boxRaw: Box,\n}\n\n/** Gesture combined results\n * Each result has:\n * - part: part name and number where gesture was detected: `face`, `iris`, `body`, `hand`\n * - gesture: gesture detected\n */\nexport type GestureResult =\n { 'face': number, gesture: FaceGesture }\n | { 'iris': number, gesture: IrisGesture }\n | { 'body': number, gesture: BodyGesture }\n | { 'hand': number, gesture: HandGesture }\n\n/** Person getter\n* - Triggers combining all individual results into a virtual person object\n*/\nexport interface PersonResult {\n /** person id */\n id: number,\n /** face result that belongs to this person */\n face: FaceResult,\n /** body result that belongs to this person */\n body: BodyResult | null,\n /** left and right hand results that belong to this person */\n hands: { left: HandResult | null, right: HandResult | null },\n /** detected gestures specific to this person */\n gestures: GestureResult[],\n /** box that defines the person */\n box: Box,\n /** box that defines the person normalized to 0..1 */\n boxRaw?: Box,\n}\n\n/**\n * Result interface definition for **Human** library\n *\n * Contains all possible detection results\n */\nexport interface Result {\n /** {@link FaceResult}: detection & analysis results */\n face: FaceResult[],\n /** {@link BodyResult}: detection & analysis results */\n body: BodyResult[],\n /** {@link HandResult}: detection & analysis results */\n hand: HandResult[],\n /** {@link GestureResult}: detection & analysis results */\n gesture: GestureResult[],\n /** {@link ObjectResult}: detection & analysis results */\n object: ObjectResult[]\n /** global performance object with timing values for each operation */\n performance: Record,\n /** optional processed canvas that can be used to draw input on screen */\n canvas?: AnyCanvas | null,\n /** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */\n readonly timestamp: number,\n /** getter property that returns unified persons object */\n persons: PersonResult[],\n /** Last known error message */\n error: string | null;\n /** Resolution width */\n width: number,\n /** Resolution height */\n height: number,\n}\n\nexport const empty = (error: string | null = null): Result => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error });\n", "export const kpt: string[] = [ // used to create part labels\n 'nose',\n 'leftEye',\n 'rightEye',\n 'leftEar',\n 'rightEar',\n 'leftShoulder',\n 'rightShoulder',\n 'leftElbow',\n 'rightElbow',\n 'leftWrist',\n 'rightWrist',\n 'leftHip',\n 'rightHip',\n 'leftKnee',\n 'rightKnee',\n 'leftAnkle',\n 'rightAnkle',\n];\n\nexport const horizontal: string[][] = [ // used to fix left vs right\n ['leftEye', 'rightEye'],\n ['leftEar', 'rightEar'],\n ['leftShoulder', 'rightShoulder'],\n ['leftElbow', 'rightElbow'],\n ['leftWrist', 'rightWrist'],\n ['leftHip', 'rightHip'],\n ['leftKnee', 'rightKnee'],\n ['leftAnkle', 'rightAnkle'],\n];\n\nexport const vertical: string[][] = [ // used to remove unlikely keypoint positions\n ['leftKnee', 'leftShoulder'],\n ['rightKnee', 'rightShoulder'],\n ['leftAnkle', 'leftKnee'],\n ['rightAnkle', 'rightKnee'],\n];\n\nexport const relative: string[][][] = [ // used to match relative body parts\n [['leftHip', 'rightHip'], ['leftShoulder', 'rightShoulder']],\n [['leftElbow', 'rightElbow'], ['leftShoulder', 'rightShoulder']],\n];\n\nexport const connected: Record = { // used to create body outline in annotations\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * Results interpolation for smoothening of video detection results inbetween detected frames\n */\n\nimport { Result, FaceResult, BodyResult, HandResult, ObjectResult, PersonResult, Box, Point, BodyLandmark, BodyAnnotation, empty } from '../result';\nimport type { Config } from '../config';\n\nimport * as moveNetCoords from '../body/movenetcoords';\nimport * as blazePoseCoords from '../body/blazeposecoords';\nimport * as efficientPoseCoords from '../body/efficientposecoords';\nimport { now } from './util';\nimport { env } from './env';\n\nconst bufferedResult: Result = empty();\nlet interpolateTime = 0;\n\nexport function calc(newResult: Result, config: Config): Result {\n const t0 = now();\n if (!newResult) return empty();\n // each record is only updated using deep clone when number of detected record changes, otherwise it will converge by itself\n // otherwise bufferedResult is a shallow clone of result plus updated local calculated values\n // thus mixing by-reference and by-value assignments to minimize memory operations\n\n const elapsed = Date.now() - newResult.timestamp;\n\n /* curve fitted: buffer = 8 - ln(delay)\n interpolation formula: current = ((buffer - 1) * previous + live) / buffer\n - at 50ms delay buffer = ~4.1 => 28% towards live data\n - at 250ms delay buffer = ~2.5 => 40% towards live data\n - at 500ms delay buffer = ~1.8 => 55% towards live data\n - at 750ms delay buffer = ~1.4 => 71% towards live data\n - at 1sec delay buffer = 1 which means live data is used\n */\n const bufferedFactor = elapsed < 1000 ? 8 - Math.log(elapsed + 1) : 1;\n\n if (newResult.canvas) bufferedResult.canvas = newResult.canvas;\n if (newResult.error) bufferedResult.error = newResult.error;\n\n // interpolate body results\n if (!bufferedResult.body || (newResult.body.length !== bufferedResult.body.length)) {\n bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)) as BodyResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.body.length; i++) {\n const box = newResult.body[i].box // update box\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor) as Box;\n const boxRaw = newResult.body[i].boxRaw // update boxRaw\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor) as Box;\n const keypoints = (newResult.body[i].keypoints // update keypoints\n .map((newKpt, j) => ({\n score: newKpt.score,\n part: newKpt.part,\n position: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2],\n ],\n positionRaw: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2],\n ],\n distance: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[0] || 0) + (newKpt.distance?.[0] || 0)) / bufferedFactor : newKpt.distance?.[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[1] || 0) + (newKpt.distance?.[1] || 0)) / bufferedFactor : newKpt.distance?.[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[2] || 0) + (newKpt.distance?.[2] || 0)) / bufferedFactor : newKpt.distance?.[2],\n ],\n }))) as { score: number, part: BodyLandmark, position: [number, number, number?], positionRaw: [number, number, number?] }[];\n\n const annotations: Record = {} as Record; // recreate annotations\n let coords = { connected: {} };\n if (config.body.modelPath?.includes('efficientpose')) coords = efficientPoseCoords;\n else if (config.body.modelPath?.includes('blazepose')) coords = blazePoseCoords;\n else if (config.body.modelPath?.includes('movenet')) coords = moveNetCoords;\n for (const [name, indexes] of Object.entries(coords.connected as Record)) {\n const pt: Point[][] = [];\n for (let j = 0; j < indexes.length - 1; j++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[j]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]);\n // if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations }; // shallow clone plus updated values\n }\n }\n\n // interpolate hand results\n if (!bufferedResult.hand || (newResult.hand.length !== bufferedResult.hand.length)) {\n bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); // deep clone once\n } else {\n for (let i = 0; i < newResult.hand.length; i++) {\n const box = (newResult.hand[i].box// update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.hand[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; // reset keypoints as previous frame did not have them\n const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints // update landmarks\n .map((landmark, j) => landmark\n .map((coord, k) => (((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) as Point)\n : [];\n let annotations = {};\n if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) {\n bufferedResult.hand[i].annotations = newResult.hand[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.hand[i].annotations;\n } else if (newResult.hand[i].annotations) {\n for (const key of Object.keys(newResult.hand[i].annotations)) { // update annotations\n annotations[key] = newResult.hand[i]?.annotations?.[key]?.[0]\n ? newResult.hand[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations as HandResult['annotations'] }; // shallow clone plus updated values\n }\n }\n\n // interpolate face results\n if (!bufferedResult.face || (newResult.face.length !== bufferedResult.face.length)) {\n bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)) as FaceResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.face.length; i++) {\n const box = (newResult.face[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.face[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (newResult.face[i].rotation) {\n const rotation: {\n matrix: [number, number, number, number, number, number, number, number, number],\n angle: { roll: number, yaw: number, pitch: number },\n gaze: { bearing: number, strength: number }\n } = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } };\n rotation.matrix = newResult.face[i].rotation?.matrix as [number, number, number, number, number, number, number, number, number];\n rotation.angle = {\n roll: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.roll || 0) + (newResult.face[i].rotation?.angle?.roll || 0)) / bufferedFactor,\n yaw: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.yaw || 0) + (newResult.face[i].rotation?.angle?.yaw || 0)) / bufferedFactor,\n pitch: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.pitch || 0) + (newResult.face[i].rotation?.angle?.pitch || 0)) / bufferedFactor,\n };\n rotation.gaze = {\n // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive\n bearing: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.bearing || 0) + (newResult.face[i].rotation?.gaze.bearing || 0)) / bufferedFactor,\n strength: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.strength || 0) + (newResult.face[i].rotation?.gaze.strength || 0)) / bufferedFactor,\n };\n bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n }\n\n // interpolate object detection results\n if (!bufferedResult.object || (newResult.object.length !== bufferedResult.object.length)) {\n bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)) as ObjectResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.object.length; i++) {\n const box = (newResult.object[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.object[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n\n // interpolate person results\n if (newResult.persons) {\n const newPersons = newResult.persons; // trigger getter function\n if (!bufferedResult.persons || (newPersons.length !== bufferedResult.persons.length)) {\n bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)) as PersonResult[];\n } else {\n for (let i = 0; i < newPersons.length; i++) { // update person box, we don't update the rest as it's updated as reference anyhow\n bufferedResult.persons[i].box = (newPersons[i].box\n .map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor)) as Box;\n }\n }\n }\n\n // copy latest gestures without interpolation\n if (newResult.gesture) bufferedResult.gesture = newResult.gesture;\n\n // copy resolution info\n bufferedResult.width = newResult.width;\n bufferedResult.height = newResult.height;\n\n // append interpolation performance data\n const t1 = now();\n interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0);\n if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime };\n\n return bufferedResult;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Meet**](https://drive.google.com/file/d/1lnP1bRi9CSqQQXUHa13159vLELYDgDu0/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]);\n // t.softmax = tf.softmax(t.squeeze); // model meet has two channels for fg and bg\n [t.bgRaw, t.fgRaw] = tf.unstack(t.squeeze, 2);\n // t.bg = tf.softmax(t.bgRaw); // we can ignore bg channel\n t.fg = tf.softmax(t.fgRaw);\n t.mul = tf.mul(t.fg, constants.tf255);\n t.expand = tf.expandDims(t.mul, 2);\n t.output = tf.image.resizeBilinear(t.expand as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.output], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.output, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/** Face descriptor type as number array */\nexport type Descriptor = number[]\nexport type MatchOptions = { order?: number, threshold?: number, multiplier?: number, min?: number, max?: number } | undefined;\n\n/** Calculates distance between two descriptors\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n */\nexport function distance(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25 }) {\n // general minkowski distance, euclidean distance is limited case where order is 2\n if (!descriptor1 || !descriptor1) return Number.MAX_SAFE_INTEGER;\n let sum = 0;\n for (let i = 0; i < descriptor1.length; i++) {\n const diff = (!options.order || options.order === 2) ? (descriptor1[i] - descriptor2[i]) : (Math.abs(descriptor1[i] - descriptor2[i]));\n sum += (!options.order || options.order === 2) ? (diff * diff) : (diff ** options.order);\n }\n return (options.multiplier || 20) * sum;\n}\n\n// invert distance to similarity, normalize to given range and clamp\nconst normalizeDistance = (dist, order, min, max) => {\n if (dist === 0) return 1; // short circuit for identical inputs\n const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); // take root of distance\n const norm = (1 - (root / 100) - min) / (max - min); // normalize to range\n const clamp = Math.max(Math.min(norm, 1), 0); // clamp to 0..1\n return clamp;\n};\n\n/** Calculates normalized similarity between two face descriptors based on their `distance`\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n * - min - normalize similarity result to a given range\n * - max - normalzie similarity resutl to a given range\n * default is 0.2...0.8\n * Returns similarity between two face descriptors normalized to 0..1 range where 0 is no similarity and 1 is perfect similarity\n */\nexport function similarity(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) {\n const dist = distance(descriptor1, descriptor2, options);\n return normalizeDistance(dist, options.order || 2, options.min || 0, options.max || 1);\n}\n\n/** Matches given descriptor to a closest entry in array of descriptors\n * @param descriptor - face descriptor\n * @param descriptors - array of face descriptors to commpare given descriptor to\n * @param options - see `similarity` method for options description\n * Returns\n * - `index` index array index where best match was found or -1 if no matches\n * - `distance` calculated `distance` of given descriptor to the best match\n * - `similarity` calculated normalized `similarity` of given descriptor to the best match\n*/\nexport function find(descriptor: Descriptor, descriptors: Descriptor[], options: MatchOptions = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) {\n if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { // validate input\n return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };\n }\n let lowestDistance = Number.MAX_SAFE_INTEGER;\n let index = -1;\n for (let i = 0; i < descriptors.length; i++) {\n const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options) : Number.MAX_SAFE_INTEGER;\n if (res < lowestDistance) {\n lowestDistance = res;\n index = i;\n }\n if (lowestDistance < (options.threshold || 0)) break;\n }\n const normalizedSimilarity = normalizeDistance(lowestDistance, options.order || 2, options.min || 0, options.max || 1);\n return { index, distance: lowestDistance, similarity: normalizedSimilarity };\n}\n", "/**\n * Loader and Validator for all models used by Human\n */\n\nimport { env } from './util/env';\nimport { log } from './util/util';\nimport * as antispoof from './face/antispoof';\nimport * as blazeface from './face/blazeface';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as emotion from './gear/emotion';\nimport * as facemesh from './face/facemesh';\nimport * as faceres from './face/faceres';\nimport * as gear from './gear/gear';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as insightface from './face/insightface';\nimport * as iris from './face/iris';\nimport * as liveness from './face/liveness';\nimport * as meet from './segmentation/meet';\nimport * as mobilefacenet from './face/mobilefacenet';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as ssrnetAge from './gear/ssrnet-age';\nimport * as ssrnetGender from './gear/ssrnet-gender';\nimport { modelStats, ModelInfo } from './tfjs/load';\nimport type { GraphModel } from './tfjs/types';\nimport type { Human } from './human';\n\nexport interface KernelOps { name: string, url: string, missing: string[], ops: string[] }\n\nexport function validateModel(instance: Human | null, model: GraphModel | null, name: string): KernelOps | null {\n if (!model) return null;\n if (!instance?.config?.validateModels) return null;\n const simpleOps = ['const', 'placeholder', 'noop', 'pad', 'squeeze', 'add', 'sub', 'mul', 'div'];\n const ignoreOps = ['biasadd', 'fusedbatchnormv3', 'matmul', 'switch', 'shape', 'merge', 'split', 'broadcastto'];\n const ops: string[] = [];\n const missing: string[] = [];\n interface Op { name: string, category: string, op: string }\n const url = model['modelUrl'] as string;\n const executor = model['executor'];\n if (executor?.graph?.nodes) {\n for (const kernel of Object.values(executor.graph.nodes)) {\n const op = (kernel as Op).op.toLowerCase();\n if (!ops.includes(op)) ops.push(op);\n }\n } else {\n if (!executor && instance.config.debug) {\n log('model not loaded', name);\n }\n }\n for (const op of ops) {\n if (!simpleOps.includes(op) // exclude simple ops\n && !ignoreOps.includes(op) // exclude specific ops\n && !instance.env.kernels.includes(op) // check actual kernel ops\n && !instance.env.kernels.includes(op.replace('_', '')) // check variation without _\n && !instance.env.kernels.includes(op.replace('native', '')) // check standard variation\n && !instance.env.kernels.includes(op.replace('v2', ''))) { // check non-versioned variation\n missing.push(op);\n }\n }\n if (instance.config.debug && missing.length > 0) log('model validation failed:', name, missing);\n return missing.length > 0 ? { name, missing, ops, url } : null;\n}\n\n/** structure that holds global stats for currently loaded models */\nexport interface ModelStats {\n numLoadedModels: number,\n numDefinedModels: number,\n percentageLoaded: number,\n totalSizeFromManifest: number,\n totalSizeWeights: number,\n totalSizeLoading: number,\n modelStats: ModelInfo[],\n}\n\n/** Models class used by Human\n * - models: record of all GraphModels\n * - list: returns list of configured models with their stats\n * - loaded: returns array of loaded models\n * - reset: unloads all models\n * - validate: checks loaded models for valid kernel ops vs current backend\n * - stats: live detailed model stats that can be checked during model load phase\n */\nexport class Models {\n private instance: Human;\n models: Record = {};\n\n constructor(currentInstance: Human) {\n this.models = {};\n this.instance = currentInstance;\n }\n\n stats(): ModelStats {\n let totalSizeFromManifest = 0;\n let totalSizeWeights = 0;\n let totalSizeLoading = 0;\n for (const m of Object.values(modelStats)) {\n totalSizeFromManifest += m.sizeFromManifest;\n totalSizeWeights += m.sizeLoadedWeights;\n totalSizeLoading += m.sizeDesired;\n }\n const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0;\n return {\n numLoadedModels: Object.values(modelStats).length,\n numDefinedModels: Object.keys(this.models).length,\n percentageLoaded,\n totalSizeFromManifest,\n totalSizeWeights,\n totalSizeLoading,\n modelStats: Object.values(modelStats),\n };\n }\n\n reset(): void {\n for (const model of Object.keys(this.models)) this.models[model] = null;\n }\n\n async load(instance?: Human): Promise {\n if (env.initial) this.reset();\n if (instance) this.instance = instance;\n const m: Record> = {};\n // face main models\n m.blazeface = (this.instance.config.face.enabled && !this.models.blazeface) ? blazeface.load(this.instance.config) : null;\n m.antispoof = (this.instance.config.face.enabled && this.instance.config.face.antispoof?.enabled && !this.models.antispoof) ? antispoof.load(this.instance.config) : null;\n m.liveness = (this.instance.config.face.enabled && this.instance.config.face.liveness?.enabled && !this.models.liveness) ? liveness.load(this.instance.config) : null;\n m.faceres = (this.instance.config.face.enabled && this.instance.config.face.description?.enabled && !this.models.faceres) ? faceres.load(this.instance.config) : null;\n m.emotion = (this.instance.config.face.enabled && this.instance.config.face.emotion?.enabled && !this.models.emotion) ? emotion.load(this.instance.config) : null;\n m.iris = (this.instance.config.face.enabled && this.instance.config.face.iris?.enabled && !this.instance.config.face.attention?.enabled && !this.models.iris) ? iris.load(this.instance.config) : null;\n m.facemesh = (this.instance.config.face.enabled && this.instance.config.face.mesh?.enabled && (!this.models.facemesh)) ? facemesh.load(this.instance.config) : null;\n // face alternatives\n m.gear = (this.instance.config.face.enabled && this.instance.config.face['gear']?.enabled && !this.models.gear) ? gear.load(this.instance.config) : null;\n m.ssrnetage = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetage) ? ssrnetAge.load(this.instance.config) : null;\n m.ssrnetgender = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetgender) ? ssrnetGender.load(this.instance.config) : null;\n m.mobilefacenet = (this.instance.config.face.enabled && this.instance.config.face['mobilefacenet']?.enabled && !this.models.mobilefacenet) ? mobilefacenet.load(this.instance.config) : null;\n m.insightface = (this.instance.config.face.enabled && this.instance.config.face['insightface']?.enabled && !this.models.insightface) ? insightface.load(this.instance.config) : null;\n // body alterinatives\n m.blazepose = (this.instance.config.body.enabled && !this.models.blazepose && this.instance.config.body.modelPath?.includes('blazepose')) ? blazepose.loadPose(this.instance.config) : null;\n m.blazeposedetect = (this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body['detector'] && this.instance.config.body['detector'].modelPath) ? blazepose.loadDetect(this.instance.config) : null;\n m.efficientpose = (this.instance.config.body.enabled && !this.models.efficientpose && this.instance.config.body.modelPath?.includes('efficientpose')) ? efficientpose.load(this.instance.config) : null;\n m.movenet = (this.instance.config.body.enabled && !this.models.movenet && this.instance.config.body.modelPath?.includes('movenet')) ? movenet.load(this.instance.config) : null;\n m.posenet = (this.instance.config.body.enabled && !this.models.posenet && this.instance.config.body.modelPath?.includes('posenet')) ? posenet.load(this.instance.config) : null;\n // hand alternatives\n m.handtrack = (this.instance.config.hand.enabled && !this.models.handtrack && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadDetect(this.instance.config) : null;\n m.handskeleton = (this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadSkeleton(this.instance.config) : null;\n if (this.instance.config.hand.detector?.modelPath?.includes('handdetect')) [m.handpose, m.handskeleton] = (!this.models.handpose) ? await handpose.load(this.instance.config) : [null, null];\n // object detection alternatives\n m.centernet = (this.instance.config.object.enabled && !this.models.centernet && this.instance.config.object.modelPath?.includes('centernet')) ? centernet.load(this.instance.config) : null;\n m.nanodet = (this.instance.config.object.enabled && !this.models.nanodet && this.instance.config.object.modelPath?.includes('nanodet')) ? nanodet.load(this.instance.config) : null;\n // segmentation alternatives\n m.selfie = (this.instance.config.segmentation.enabled && !this.models.selfie && this.instance.config.segmentation.modelPath?.includes('selfie')) ? selfie.load(this.instance.config) : null;\n m.meet = (this.instance.config.segmentation.enabled && !this.models.meet && this.instance.config.segmentation.modelPath?.includes('meet')) ? meet.load(this.instance.config) : null;\n m.rvm = (this.instance.config.segmentation.enabled && !this.models.rvm && this.instance.config.segmentation.modelPath?.includes('rvm')) ? rvm.load(this.instance.config) : null;\n\n // models are loaded in parallel asynchronously so lets wait until they are actually loaded\n await Promise.all([...Object.values(m)]);\n for (const model of Object.keys(m)) this.models[model] = m[model] as GraphModel || this.models[model] || null; // only update actually loaded models\n }\n\n list() {\n const models = Object.keys(this.models).map((model) => ({ name: model, loaded: (this.models[model] !== null), size: 0, url: this.models[model] ? this.models[model]?.['modelUrl'] : null }));\n for (const m of models) {\n const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name));\n if (!stats) continue;\n m.size = modelStats[stats].sizeLoadedWeights;\n m.url = modelStats[stats].url;\n }\n return models;\n }\n\n loaded() {\n const list = this.list();\n const loaded = list.filter((model) => model.loaded).map((model) => model.name);\n return loaded;\n }\n\n validate(): { name: string, missing: string[] }[] {\n const missing: KernelOps[] = [];\n for (const defined of Object.keys(this.models)) {\n const model: GraphModel | null = this.models[defined as keyof Models];\n if (!model) continue;\n const res = validateModel(this.instance, model, defined);\n if (res) missing.push(res);\n }\n return missing;\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { BodyKeypoint, BodyResult } from '../result';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport type { Tensor, Tensor3D } from '../tfjs/types';\n\nconst maxJitter = 0.005; // default allowed jitter is within 0.5%\n\nconst cache: {\n keypoints: BodyKeypoint[],\n padding: [number, number][];\n} = {\n keypoints: [],\n padding: [[0, 0], [0, 0], [0, 0], [0, 0]],\n};\n\nexport function bodyParts(body: BodyResult) { // model sometimes mixes up left vs right keypoints so we fix them\n for (const pair of coords.horizontal) { // fix body parts left vs right\n const left = body.keypoints.findIndex((kp) => kp.part === pair[0]);\n const right = body.keypoints.findIndex((kp) => kp.part === pair[1]);\n if (body.keypoints[left] && body.keypoints[right]) {\n if (body.keypoints[left].position[0] < body.keypoints[right].position[0]) {\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n }\n for (const pair of coords.vertical) { // remove body parts with improbable vertical position\n const lower = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const higher = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n if (body.keypoints[lower] && body.keypoints[higher]) {\n if (body.keypoints[lower].position[1] < body.keypoints[higher].position[1]) {\n body.keypoints.splice(lower, 1);\n }\n }\n }\n for (const [pair, compare] of coords.relative) { // rearrange body parts according to their relative position\n const left = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const right = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n const leftTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[0]));\n const rightTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[1]));\n if (!body.keypoints[leftTo] || !body.keypoints[rightTo]) continue; // only if we have both compare points\n const distanceLeft = body.keypoints[left] ? [\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[left].position[0]),\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[left].position[0]),\n ] : [0, 0];\n const distanceRight = body.keypoints[right] ? [\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[right].position[0]),\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[right].position[0]),\n ] : [0, 0];\n if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { // should flip keypoints\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n}\n\nexport function jitter(keypoints: BodyKeypoint[]): BodyKeypoint[] {\n for (let i = 0; i < keypoints.length; i++) {\n if (keypoints[i] && cache.keypoints[i]) {\n const diff = [Math.abs(keypoints[i].positionRaw[0] - cache.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache.keypoints[i].positionRaw[1])];\n if (diff[0] < maxJitter && diff[1] < maxJitter) {\n keypoints[i] = cache.keypoints[i]; // below jitter so replace keypoint\n } else {\n cache.keypoints[i] = keypoints[i]; // above jitter so update cache\n }\n } else {\n cache.keypoints[i] = keypoints[i]; // cache for keypoint doesnt exist so create it here\n }\n }\n return keypoints;\n}\n\nexport function padInput(input: Tensor, inputSize: number): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n cache.padding = [\n [0, 0], // dont touch batch\n [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], // height before&after\n [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(input, cache.padding);\n t.resize = tf.image.resizeBilinear(t.pad as Tensor3D, [inputSize, inputSize]);\n const final = tf.cast(t.resize, 'int32');\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nexport function rescaleBody(body: BodyResult, outputSize: [number, number]): BodyResult {\n body.keypoints = body.keypoints.filter((kpt) => kpt?.position); // filter invalid keypoints\n for (const kpt of body.keypoints) {\n kpt.position = [\n kpt.position[0] * (outputSize[0] + cache.padding[2][0] + cache.padding[2][1]) / outputSize[0] - cache.padding[2][0],\n kpt.position[1] * (outputSize[1] + cache.padding[1][0] + cache.padding[1][1]) / outputSize[1] - cache.padding[1][0],\n ];\n kpt.positionRaw = [\n kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1],\n ];\n }\n const rescaledBoxes = box.calc(body.keypoints.map((pt) => pt.position), outputSize);\n body.box = rescaledBoxes.box;\n body.boxRaw = rescaledBoxes.boxRaw;\n return body;\n}\n", "/**\n * MoveNet model implementation\n *\n * Based on: [**MoveNet**](https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport * as fix from './movenetfix';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, BodyAnnotation, Box, Point } from '../result';\nimport type { GraphModel, Tensor } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { fakeOps } from '../tfjs/backend';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n// const boxExpandFact = 1.5; // increase to 150%\n\nconst cache: {\n boxes: Box[], // unused\n bodies: BodyResult[];\n last: number,\n} = {\n boxes: [],\n bodies: [],\n last: 0,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n fakeOps(['size'], config);\n model = await loadModel(config.body.modelPath);\n } else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model?.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize < 64) inputSize = 256;\n return model;\n}\n\nfunction parseSinglePose(res, config, image) {\n const kpt = res[0][0];\n const keypoints: BodyKeypoint[] = [];\n let score = 0;\n for (let id = 0; id < kpt.length; id++) {\n score = kpt[id][2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[id][1], kpt[id][0]];\n keypoints.push({\n score: Math.round(100 * score) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw,\n position: [ // normalized to input image size\n Math.round((image.shape[2] || 0) * positionRaw[0]),\n Math.round((image.shape[1] || 0) * positionRaw[1]),\n ],\n });\n }\n }\n score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const bodies: BodyResult[] = [];\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n const annotations: Record = {};\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations };\n fix.bodyParts(body);\n bodies.push(body);\n return bodies;\n}\n\nfunction parseMultiPose(res, config, image) {\n const bodies: BodyResult[] = [];\n for (let id = 0; id < res[0].length; id++) {\n const kpt = res[0][id];\n const totalScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (totalScore > config.body.minConfidence) {\n const keypoints: BodyKeypoint[] = [];\n for (let i = 0; i < 17; i++) {\n const score = kpt[3 * i + 2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[3 * i + 1], kpt[3 * i + 0]];\n keypoints.push({\n part: coords.kpt[i] as BodyLandmark,\n score: Math.round(100 * score) / 100,\n positionRaw,\n position: [Math.round((image.shape[2] || 0) * positionRaw[0]), Math.round((image.shape[1] || 0) * positionRaw[1])],\n });\n }\n }\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n // movenet-multipose has built-in box details\n // const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];\n // const box: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations };\n fix.bodyParts(body);\n bodies.push(body);\n }\n }\n bodies.sort((a, b) => b.score - a.score);\n if (bodies.length > config.body.maxDetected) bodies.length = config.body.maxDetected;\n return bodies;\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return []; // something is wrong with the model\n if (!config.skipAllowed) cache.boxes.length = 0; // allowed to use cache or not\n skipped++; // increment skip frames\n const skipTime = (config.body.skipTime || 0) > (now() - cache.last);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.bodies; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const t: Record = {};\n skipped = 0;\n // run detection on squared input and cached boxes\n /*\n cache.bodies = []; // reset bodies result\n if (cache.boxes.length >= (config.body.maxDetected || 0)) { // if we have enough cached boxes run detection using cache\n for (let i = 0; i < cache.boxes.length; i++) { // run detection based on cached boxes\n t.crop = tf.image.cropAndResize(input, [cache.boxes[i]], [0], [inputSize, inputSize], 'bilinear');\n t.cast = tf.cast(t.crop, 'int32');\n // t.input = prepareImage(input);\n t.res = model?.execute(t.cast) as Tensor;\n const res = await t.res.array();\n const newBodies = (t.res.shape[2] === 17) ? await parseSinglePose(res, config, input, cache.boxes[i]) : await parseMultiPose(res, config, input, cache.boxes[i]);\n cache.bodies = cache.bodies.concat(newBodies);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n }\n if (cache.bodies.length !== config.body.maxDetected) { // did not find enough bodies based on cached boxes so run detection on full frame\n t.input = prepareImage(input);\n t.res = model?.execute(t.input) as Tensor;\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17) ? await parseSinglePose(res, config, input, [0, 0, 1, 1]) : await parseMultiPose(res, config, input, [0, 0, 1, 1]);\n for (const body of cache.bodies) rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n cache.boxes.length = 0; // reset cache\n for (let i = 0; i < cache.bodies.length; i++) {\n if (cache.bodies[i].keypoints.length > (coords.kpt.length / 2)) { // only update cache if we detected at least half keypoints\n const scaledBox = box.scale(cache.bodies[i].boxRaw, boxExpandFact);\n const cropBox = box.crop(scaledBox);\n cache.boxes.push(cropBox);\n }\n }\n */\n\n // run detection on squared input and no cached boxes\n t.input = fix.padInput(input, inputSize);\n t.res = model?.execute(t.input) as Tensor;\n cache.last = now();\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17)\n ? parseSinglePose(res, config, input)\n : parseMultiPose(res, config, input);\n for (const body of cache.bodies) {\n fix.rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n fix.jitter(body.keypoints);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n\n resolve(cache.bodies);\n });\n}\n", "/**\n * NanoDet object detection model implementation\n *\n * Based on: [**NanoDet**](https://github.com/RangiLyu/nanodet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet inputSize = 0;\n\nconst scaleBox = 2.5; // increase box size\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) {\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor[], outputShape: [number, number], config: Config) {\n let id = 0;\n let results: ObjectResult[] = [];\n const size = inputSize;\n for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects\n // find scores, boxes, classes\n const baseSize = strideSize * 13; // 13x13=169, 26x26=676, 52x52=2704\n // find boxes and scores output depending on stride\n const scoresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) === labels.length)) as Tensor2D);\n const scores = await scoresT.array(); // optionally use exponential scores or just as-is\n const featuresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) < labels.length)) as Tensor2D);\n const boxesMaxT = tf.reshape(featuresT, [-1, 4, (featuresT.shape?.[1] || 0) / 4]); // reshape [output] to [4, output / 4] where number is number of different features inside each stride\n const boxIdxT = tf.argMax(boxesMaxT, 2); // what we need is indexes of features with highest scores, not values itself\n const boxIdx = await boxIdxT.array(); // what we need is indexes of features with highest scores, not values itself\n for (let i = 0; i < scoresT.shape[0]; i++) { // total strides (x * y matrix)\n for (let j = 0; j < (scoresT.shape?.[1] || 0); j++) { // one score for each class\n const score = scores[i][j]; // get score for current position\n if (score > (config.object.minConfidence || 0) && j !== 61) {\n const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; // center.x normalized to range 0..1\n const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; // center.y normalized to range 0..1\n const boxOffset = boxIdx[i].map((a: number) => a * (baseSize / strideSize / (size))); // just grab indexes of features with highest scores\n const [x, y] = [\n cx - (scaleBox / strideSize * boxOffset[0]),\n cy - (scaleBox / strideSize * boxOffset[1]),\n ];\n const [w, h] = [\n cx + (scaleBox / strideSize * boxOffset[2]) - x,\n cy + (scaleBox / strideSize * boxOffset[3]) - y,\n ];\n let boxRaw: Box = [x, y, w, h]; // results normalized to range 0..1\n boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))) as Box; // fix out-of-bounds coords\n const box = [ // results normalized to input image pixels\n boxRaw[0] * outputShape[0],\n boxRaw[1] * outputShape[1],\n boxRaw[2] * outputShape[0],\n boxRaw[3] * outputShape[1],\n ];\n const result = {\n id: id++,\n // strideSize,\n score: Math.round(100 * score) / 100,\n class: j + 1,\n label: labels[j].label as ObjectType,\n // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)],\n // centerRaw: [cx, cy],\n box: box.map((a) => Math.trunc(a)) as Box,\n boxRaw,\n };\n results.push(result);\n }\n }\n }\n tf.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]);\n }\n\n // normally nms is run on raw results, but since boxes need to be calculated this way we skip calulcation of\n // unnecessary boxes and run nms only on good candidates (basically it just does IOU analysis as scores are already filtered)\n const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); // switches coordinates from x,y to y,x as expected by tf.nms\n const nmsScores = results.map((a) => a.score);\n let nmsIdx: number[] = [];\n if (nmsBoxes && nmsBoxes.length > 0) {\n const nms = await tf.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config.object.maxDetected || 0, config.object.iouThreshold, config.object.minConfidence);\n nmsIdx = Array.from(await nms.data());\n tf.dispose(nms);\n }\n\n // filter & sort results\n results = results\n .filter((_val, idx) => nmsIdx.includes(idx))\n .sort((a, b) => (b.score - a.score));\n\n return results;\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n if (!env.kernels.includes('mod') || !env.kernels.includes('sparsetodense')) return last;\n return new Promise(async (resolve) => {\n const outputSize = [image.shape[2] || 0, image.shape[1] || 0];\n const resizeT = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n const normT = tf.div(resizeT, constants.tf255);\n const transposeT = tf.transpose(normT, [0, 3, 1, 2]);\n\n let objectT;\n if (config.object.enabled) objectT = model.execute(transposeT);\n lastTime = now();\n\n const obj = await process(objectT as Tensor[], outputSize as [number, number], config);\n last = obj;\n tf.dispose([resizeT, normT, transposeT, ...objectT]);\n resolve(obj);\n });\n}\n", "/**\n * PoseNet body detection model implementation constants\n * See `posenet.ts` for entry point\n */\n\nimport type { Point, BodyResult, BodyAnnotation, BodyLandmark } from '../result';\n\nexport const partNames = [\n 'nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder',\n 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist',\n 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle',\n];\n\nexport const count = partNames.length; // 17 keypoints\n\nexport const partIds = partNames.reduce((result, jointName, i) => {\n result[jointName] = i;\n return result;\n}, {});\n\nconst connectedPartNames = [\n ['leftHip', 'leftShoulder'], ['leftElbow', 'leftShoulder'],\n ['leftElbow', 'leftWrist'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['rightHip', 'rightShoulder'],\n ['rightElbow', 'rightShoulder'], ['rightElbow', 'rightWrist'],\n ['rightHip', 'rightKnee'], ['rightKnee', 'rightAnkle'],\n ['leftShoulder', 'rightShoulder'], ['leftHip', 'rightHip'],\n];\nexport const connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => ([partIds[jointNameA], partIds[jointNameB]]));\n\nexport const poseChain = [\n ['nose', 'leftEye'], ['leftEye', 'leftEar'], ['nose', 'rightEye'],\n ['rightEye', 'rightEar'], ['nose', 'leftShoulder'],\n ['leftShoulder', 'leftElbow'], ['leftElbow', 'leftWrist'],\n ['leftShoulder', 'leftHip'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['nose', 'rightShoulder'],\n ['rightShoulder', 'rightElbow'], ['rightElbow', 'rightWrist'],\n ['rightShoulder', 'rightHip'], ['rightHip', 'rightKnee'],\n ['rightKnee', 'rightAnkle'],\n];\n\nexport function eitherPointDoesntMeetConfidence(a: number, b: number, minConfidence: number) {\n return (a < minConfidence || b < minConfidence);\n}\n\nexport function getAdjacentKeyPoints(keypoints, minConfidence: number) {\n return connectedPartIndices.reduce((result, [leftJoint, rightJoint]) => {\n if (eitherPointDoesntMeetConfidence(keypoints[leftJoint].score, keypoints[rightJoint].score, minConfidence)) {\n return result;\n }\n result.push([keypoints[leftJoint], keypoints[rightJoint]]);\n return result;\n }, []);\n}\n\nexport function getBoundingBox(keypoints): [number, number, number, number] {\n const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({\n maxX: Math.max(maxX, x),\n maxY: Math.max(maxY, y),\n minX: Math.min(minX, x),\n minY: Math.min(minY, y),\n }), {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY];\n}\n\nexport function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]): BodyResult[] {\n const scaleY = height / inputResolutionHeight;\n const scaleX = width / inputResolutionWidth;\n const scalePose = (pose, i): BodyResult => ({\n id: i,\n score: pose.score,\n boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight],\n box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)],\n keypoints: pose.keypoints.map(({ score, part, position }) => ({\n score: score as number,\n part: part as BodyLandmark,\n position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)] as Point,\n positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] as Point,\n })),\n annotations: {} as Record,\n });\n const scaledPoses = poses.map((pose, i) => scalePose(pose, i));\n return scaledPoses;\n}\n\n// algorithm based on Coursera Lecture from Algorithms, Part 1: https://www.coursera.org/learn/algorithms-part1/lecture/ZjoSM/heapsort\nexport class MaxHeap {\n priorityQueue: unknown[]; // don't touch\n numberOfElements: number;\n getElementValue: unknown; // function call\n\n constructor(maxSize, getElementValue) {\n this.priorityQueue = new Array(maxSize);\n this.numberOfElements = -1;\n this.getElementValue = getElementValue;\n }\n\n enqueue(x) {\n this.priorityQueue[++this.numberOfElements] = x;\n this.swim(this.numberOfElements);\n }\n\n dequeue() {\n const max = this.priorityQueue[0];\n this.exchange(0, this.numberOfElements--);\n this.sink(0);\n this.priorityQueue[this.numberOfElements + 1] = null;\n return max;\n }\n\n empty() { return this.numberOfElements === -1; }\n\n size() { return this.numberOfElements + 1; }\n\n all() { return this.priorityQueue.slice(0, this.numberOfElements + 1); }\n\n max() { return this.priorityQueue[0]; }\n\n swim(k) {\n while (k > 0 && this.less(Math.floor(k / 2), k)) {\n this.exchange(k, Math.floor(k / 2));\n k = Math.floor(k / 2);\n }\n }\n\n sink(k) {\n while (2 * k <= this.numberOfElements) {\n let j = 2 * k;\n if (j < this.numberOfElements && this.less(j, j + 1)) j++;\n if (!this.less(k, j)) break;\n this.exchange(k, j);\n k = j;\n }\n }\n\n getValueAt(i) {\n // @ts-ignore getter is of unknown type\n return this.getElementValue(this.priorityQueue[i]);\n }\n\n less(i, j) {\n return this.getValueAt(i) < this.getValueAt(j);\n }\n\n exchange(i, j) {\n const t = this.priorityQueue[i];\n this.priorityQueue[i] = this.priorityQueue[j];\n this.priorityQueue[j] = t;\n }\n}\n\nexport function getOffsetPoint(y, x, keypoint: number, offsets) {\n return {\n y: offsets.get(y, x, keypoint),\n x: offsets.get(y, x, keypoint + count),\n };\n}\n\nexport function getImageCoords(part, outputStride: number, offsets) {\n const { heatmapY, heatmapX, id: keypoint } = part;\n const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets);\n return {\n x: part.heatmapX * outputStride + x,\n y: part.heatmapY * outputStride + y,\n };\n}\n\nexport function fillArray(element, size) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = element;\n }\n return result;\n}\n\nexport function clamp(a, min, max) {\n if (a < min) return min;\n if (a > max) return max;\n return a;\n}\n\nexport function squaredDistance(y1, x1, y2, x2) {\n const dy = y2 - y1;\n const dx = x2 - x1;\n return dy * dy + dx * dx;\n}\n\nexport function addVectors(a: { x: number, y: number }, b: { x: number, y: number }) {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\nexport function clampVector(a, min, max) {\n return { y: clamp(a.y, min, max), x: clamp(a.x, min, max) };\n}\n", "/**\n * PoseNet body detection model implementation\n *\n * Based on: [**PoseNet**](https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyResult, BodyLandmark, Box } from '../result';\nimport type { Tensor, GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as utils from './posenetutils';\n\nlet model: GraphModel;\nconst poseNetOutputs = ['MobilenetV1/offset_2/BiasAdd'/* offsets */, 'MobilenetV1/heatmap_2/BiasAdd'/* heatmapScores */, 'MobilenetV1/displacement_fwd_2/BiasAdd'/* displacementFwd */, 'MobilenetV1/displacement_bwd_2/BiasAdd'/* displacementBwd */];\nconst localMaximumRadius = 1;\nconst outputStride = 16;\nconst squaredNmsRadius = 50 ** 2;\n\nfunction traverse(edgeId: number, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) {\n const getDisplacement = (point) => ({\n y: displacements.get(point.y, point.x, edgeId),\n x: displacements.get(point.y, point.x, (displacements.shape[2] / 2) + edgeId),\n });\n const getStridedIndexNearPoint = (point, height, width) => ({\n y: utils.clamp(Math.round(point.y / outputStride), 0, height - 1),\n x: utils.clamp(Math.round(point.x / outputStride), 0, width - 1),\n });\n\n const [height, width] = scores.shape;\n // Nearest neighbor interpolation for the source->target displacements.\n const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width);\n const displacement = getDisplacement(sourceKeypointIndices);\n const displacedPoint = utils.addVectors(sourceKeypoint.position, displacement);\n let targetKeypoint = displacedPoint;\n for (let i = 0; i < offsetRefineStep; i++) {\n const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const offsetPoint = utils.getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets);\n targetKeypoint = utils.addVectors(\n { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride },\n { x: offsetPoint.x, y: offsetPoint.y },\n );\n }\n const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId);\n return { position: targetKeypoint, part: utils.partNames[targetId], score };\n}\n\nexport function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) {\n const tuples = utils.poseChain.map(([parentJoinName, childJoinName]) => ([utils.partIds[parentJoinName], utils.partIds[childJoinName]]));\n const edgesFwd = tuples.map(([, childJointId]) => childJointId);\n const edgesBwd = tuples.map(([parentJointId]) => parentJointId);\n const numParts = scores.shape[2]; // [21,21,17]\n const numEdges = edgesFwd.length;\n const keypoints = new Array(numParts);\n // Start a new detection instance at the position of the root.\n const rootPoint = utils.getImageCoords(root.part, outputStride, offsets);\n keypoints[root.part.id] = {\n score: root.score,\n part: utils.partNames[root.part.id] as BodyLandmark,\n position: rootPoint,\n };\n // Decode the part positions upwards in the tree, following the backward displacements.\n for (let edge = numEdges - 1; edge >= 0; --edge) {\n const sourceId = edgesFwd[edge];\n const targetId = edgesBwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd);\n }\n }\n // Decode the part positions downwards in the tree, following the forward displacements.\n for (let edge = 0; edge < numEdges; ++edge) {\n const sourceId = edgesBwd[edge];\n const targetId = edgesFwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd);\n }\n }\n return keypoints;\n}\n\nfunction scoreIsMaximumInLocalWindow(keypointId, score: number, heatmapY: number, heatmapX: number, scores) {\n const [height, width]: [number, number] = scores.shape;\n let localMaximum = true;\n const yStart = Math.max(heatmapY - localMaximumRadius, 0);\n const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height);\n for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) {\n const xStart = Math.max(heatmapX - localMaximumRadius, 0);\n const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width);\n for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) {\n if (scores.get(yCurrent, xCurrent, keypointId) > score) {\n localMaximum = false;\n break;\n }\n }\n if (!localMaximum) break;\n }\n return localMaximum;\n}\n\nexport function buildPartWithScoreQueue(minConfidence, scores) {\n const [height, width, numKeypoints] = scores.shape;\n const queue = new utils.MaxHeap(height * width * numKeypoints, ({ score }) => score);\n for (let heatmapY = 0; heatmapY < height; ++heatmapY) {\n for (let heatmapX = 0; heatmapX < width; ++heatmapX) {\n for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) {\n const score = scores.get(heatmapY, heatmapX, keypointId);\n // Only consider parts with score greater or equal to threshold as root candidates.\n if (score < minConfidence) continue;\n // Only consider keypoints whose score is maximum in a local window.\n if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } });\n }\n }\n }\n return queue;\n}\n\nfunction withinRadius(poses, { x, y }, keypointId) {\n return poses.some(({ keypoints }) => {\n const correspondingKeypoint = keypoints[keypointId]?.position;\n if (!correspondingKeypoint) return false;\n return utils.squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius;\n });\n}\n\nfunction getInstanceScore(existingPoses, keypoints) {\n const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => {\n if (!withinRadius(existingPoses, position, keypointId)) result += score;\n return result;\n }, 0.0);\n return notOverlappedKeypointScores / keypoints.length;\n}\n\nexport function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence) {\n const poses: { keypoints, box: Box, score: number }[] = [];\n const queue = buildPartWithScoreQueue(minConfidence, scores);\n // Generate at most maxDetected object instances per image in decreasing root part score order.\n while (poses.length < maxDetected && !queue.empty()) {\n // The top element in the queue is the next root candidate.\n const root = queue.dequeue();\n // Part-based non-maximum suppression: We reject a root candidate if it is within a disk of `nmsRadius` pixels from the corresponding part of a previously detected instance.\n // @ts-ignore this one is tree walk\n const rootImageCoords = utils.getImageCoords(root.part, outputStride, offsets);\n // @ts-ignore this one is tree walk\n if (withinRadius(poses, rootImageCoords, root.part.id)) continue;\n // Else start a new detection instance at the position of the root.\n let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd);\n keypoints = keypoints.filter((a) => a.score > minConfidence);\n const score = getInstanceScore(poses, keypoints);\n const box = utils.getBoundingBox(keypoints);\n if (score > minConfidence) poses.push({ keypoints, box, score: Math.round(100 * score) / 100 });\n }\n return poses;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n /** posenet is mostly obsolete\n * caching is not implemented\n */\n if (!model?.['executor']) return [];\n const res = tf.tidy(() => {\n if (!model.inputs[0].shape) return [];\n const resized = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const normalized = tf.sub(tf.div(tf.cast(resized, 'float32'), 127.5), 1.0);\n const results: Tensor[] = model.execute(normalized, poseNetOutputs) as Tensor[];\n const results3d = results.map((y) => tf.squeeze(y, [0]));\n results3d[1] = tf.sigmoid(results3d[1]); // apply sigmoid on scores\n return results3d;\n });\n\n const buffers = await Promise.all(res.map((tensor: Tensor) => tensor.buffer()));\n for (const t of res) tf.dispose(t);\n\n const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config.body.maxDetected, config.body.minConfidence);\n if (!model.inputs[0].shape) return [];\n const scaled = utils.scalePoses(decoded, [input.shape[1], input.shape[2]], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n return scaled;\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**Robust Video Matting**](https://github.com/PeterL1n/RobustVideoMatting)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\n// internal state varaibles\nconst outputNodes = ['fgr', 'pha', 'r1o', 'r2o', 'r3o', 'r4o'];\nconst t: Record = {}; // contains input tensor and recurrent states\nlet ratio = 0;\n\nfunction init(config: Config) {\n tf.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]);\n t.r1i = tf.tensor(0.0);\n t.r2i = tf.tensor(0.0);\n t.r3i = tf.tensor(0.0);\n t.r4i = tf.tensor(0.0);\n ratio = config.segmentation.ratio || 0.5;\n t.downsample_ratio = tf.tensor(ratio); // initialize downsample ratio\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n init(config);\n return model;\n}\n\nconst normalize = (r: Tensor): Tensor => tf.tidy(() => {\n const squeeze = tf.squeeze(r, ([0]));\n const mul = tf.mul(squeeze, constants.tf255);\n const cast = tf.cast(mul, 'int32');\n return cast;\n});\n\nfunction getRGBA(fgr: Tensor | null, pha: Tensor | null): Tensor { // gets rgba // either fgr or pha must be present\n const rgb = fgr\n ? normalize(fgr) // normalize and use value\n : tf.fill([pha!.shape[1] || 0, pha!.shape[2] || 0, 3], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const a = pha\n ? normalize(pha) // normalize and use value\n : tf.fill([fgr!.shape[1] || 0, fgr!.shape[2] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const rgba = tf.concat([rgb, a], -1);\n tf.dispose([rgb, a]);\n return rgba;\n}\n\nfunction getState(state: Tensor): Tensor { // gets internal recurrent states\n return tf.tidy(() => {\n const r: Record = {};\n r.unstack = tf.unstack(state, -1);\n r.concat = tf.concat(r.unstack, 1);\n r.split = tf.split(r.concat, 4, 1);\n r.stack = tf.concat(r.split, 2);\n r.squeeze = tf.squeeze(r.stack, [0]);\n r.expand = tf.expandDims(r.squeeze, -1);\n r.add = tf.add(r.expand, 1);\n r.mul = tf.mul(r.add, 127.5);\n r.cast = tf.cast(r.mul, 'int32');\n r.tile = tf.tile(r.cast, [1, 1, 3]);\n r.alpha = tf.fill([(r.tile as Tensor).shape[0] || 0, (r.tile as Tensor).shape[1] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\n return tf.concat([r.tile, r.alpha], -1);\n });\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor']) return null;\n // const expand = tf.expandDims(input, 0);\n t.src = tf.div(input, 255);\n if (ratio !== config.segmentation.ratio) init(config); // reinitialize recurrent states if requested downsample ratio changed\n const [fgr, pha, r1o, r2o, r3o, r4o] = await model.executeAsync(t, outputNodes) as Tensor[]; // execute model\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n rgba = getRGBA(fgr, pha);\n break;\n case 'alpha':\n rgba = getRGBA(null, pha);\n break;\n case 'foreground':\n rgba = getRGBA(fgr, null);\n break;\n case 'state':\n rgba = getState(r1o); // can view any internal recurrent state r10, r20, r3o, r4o\n break;\n default:\n rgba = tf.tensor(0);\n }\n tf.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]);\n [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; // update recurrent states\n return rgba;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Selfie**](https://drive.google.com/file/d/1dCfozqknMa068vVsO2j_1FgZkW_e3VWv/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]); // meet.shape:[1,256,256,1], selfie.shape:[1,144,256,2]\n t.alpha = tf.image.resizeBilinear(t.squeeze as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]); // model selfie has a single channel that we can use directly\n t.mul = tf.mul(t.alpha, constants.tf255);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.mul], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.mul, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/**\n * Analyze detection Results and sort&combine them into per-person view\n */\n\nimport type { FaceResult, BodyResult, HandResult, GestureResult, PersonResult, Box } from '../result';\n\nexport function join(faces: FaceResult[], bodies: BodyResult[], hands: HandResult[], gestures: GestureResult[], shape: number[] | undefined): PersonResult[] {\n let id = 0;\n const persons: PersonResult[] = [];\n for (const face of faces) { // person is defined primarily by face and then we append other objects as found\n const person: PersonResult = { id: id++, face, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] };\n for (const body of bodies) {\n if (face.box[0] > body.box[0] // x within body\n && face.box[0] < body.box[0] + body.box[2]\n && face.box[1] + face.box[3] > body.box[1] // y within body\n && face.box[1] + face.box[3] < body.box[1] + body.box[3]) {\n person.body = body;\n }\n }\n if (person.body) { // only try to join hands if body is found\n for (const hand of hands) {\n if (hand.box[0] + hand.box[2] > person.body.box[0] // x within body for left hand\n && hand.box[0] + hand.box[2] < person.body.box[0] + person.body.box[2]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for left hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.left = hand;\n }\n if (hand.box[0] < person.body.box[0] + person.body.box[2] // x within body for right hand\n && hand.box[0] > person.body.box[0]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for right hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.right = hand;\n }\n }\n }\n for (const gesture of gestures) { // append all gestures according to ids\n if (gesture['face'] !== undefined && gesture['face'] === face.id) person.gestures.push(gesture);\n else if (gesture['iris'] !== undefined && gesture['iris'] === face.id) person.gestures.push(gesture);\n else if (gesture['body'] !== undefined && gesture['body'] === person.body?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.left?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.right?.id) person.gestures.push(gesture);\n }\n\n // create new overarching box from all boxes belonging to person\n const x: number[] = [];\n const y: number[] = [];\n const extractXY = (box: Box | undefined) => { // extract all [x, y] coordinates from boxes [x, y, width, height]\n if (box && box.length === 4) {\n x.push(box[0], box[0] + box[2]);\n y.push(box[1], box[1] + box[3]);\n }\n };\n extractXY(person.face.box);\n extractXY(person.body?.box);\n extractXY(person.hands.left?.box);\n extractXY(person.hands.right?.box);\n const minX = Math.min(...x);\n const minY = Math.min(...y);\n person.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; // create new overarching box\n\n // shape is known so we calculate boxRaw as well\n if (shape?.[1] && shape?.[2]) person.boxRaw = [person.box[0] / shape[2], person.box[1] / shape[1], person.box[2] / shape[2], person.box[3] / shape[1]];\n\n persons.push(person);\n }\n return persons;\n}\n", "/**\n * Embedded sample images used during warmup in dataURL format\n */\n\n// data:image/jpeg;base64,\nexport const face = `\n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`;\n\n// data:image/jpeg;base64,\nexport const body = `\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N\nmtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm\n9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N\nIpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W\nMYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2\n+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql\no+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37\nO99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE\nTE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1\nL7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4\nizsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt\n1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb\nV5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum\nL37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12\n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\nAOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM\nd8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5\n6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP\nbFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu\nLJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy\nwt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX\n0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK\n3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn\nKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0\nvobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t\nzya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps\nuOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi\nFdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAB5n2q03LfDqqx39y39npmlxbS/TOG5se29tuavzgWzeV4mtui2\nO3RRSY2hdVhqO2MvI36iu9lUsrSrvDHn6spnmSiq5jooyV6tq1VV69RC32byTh43h8otMx+r6I+Z\naK/g8TwX7bXh9Mid4iW+fjl8n1ICWb57xLBOm4zqse20Tbmj8+qKdnS9q8PhcTw5tumSm0/OHMxz\n0Za+uzx3sX1t0Zxurr1ZxvspWiZYWZbsbT0QK7KLrZVZJFaqt5vbezNOTg9J/FaZeJns93wCvLwb\nT/GJn92uGHldIBowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuAPA67F9H4l\nqMW20VvO3yRWW97T4fC4rXJHSMtI/WGhVlue3b473K2KzMML4+62tujG9pnozXaOSOVFMnVbmq1t\ntrJRW5E7wwvUxTvCyY6CHOt7moxz6Wh9PxTzYaT61h8x1MbZK/OH0zTf+Fxf6I/htj45vL9WgLMn\nmvbPFvocGWO9L7fq85p5maw9d7VYvE4JkmPu2if3eW0+PasdFNOnxfF1Y2hlykRsmY+LJ0MZjZXa\neq2eyi8oQTO0KLdZWzPRjWu6VaqtHR73g0bcI0sf0Q8Nkq93wqNuFaWP+XDTDDytwBowAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAef9q8HNpcGaI60vtPyl56k9Iew49j8ThGe\nPwxFv0l4zH2U26fDfTYiyJljvsjf4sm6vJ1hrXjq2MkqLdZEVbgbMx0auGdmzNt6iHN1Ub5af6of\nTdPG2nxx6Vj+HzaaTm1+nx/iyVj930ysbViPRrj45vL9SAuyc7j1efguqj+jd4/T33rD3HEcPj8O\n1GP8WOY/Z4TTT7sKadHhbcsZnaCJ3TPZk6VdrKbTutmP0U2nqgrGOsr8deiuI2X09EqKM1dt3uuG\nf/jdN/06/wAPE546S9rwud+Gaaf+XH8NMMPK2wGjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABrcRp4nDtRWPPHP8PCYusPoWSvNjtX1iYfPuWaXtX8MzCuvjfw32siu8ptXoxi\n0wy5t4YulReqmazu2skbquURWFInddM7VYRGyL291KFnCcfj8e0le/Lbmn8n0N4b2Ur4nHLWmPsY\n5e5a5+OXyXugBZmiY3iY9Xz7NjnTa3Ph/BeYj5PoTxftFg8Hjk2iOmWkW/Psrr418V5WrWd2faFc\nV2jdnEMXWxntupmN7NiYU27iWML6dVMVnddjgVqMsdHr+CW5uE6f4Rt+7yuSsTDv+zWXn0WTHP3L\n/tK+GHl+O0A1c4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Dn93W56/wDM\nt/L3z59qp24jn+OS38lnpr4r7ZxHQ2TEstt3PXUrt27K57rr1VT0BjKnJPRbMqMs7QlV2fYvHvrd\nVknyrEfu9m8f7FZI8fVU85iJewbT45NfQBKo817W4eulzxHaZrL0rje09ItwqbfhtBVs3leai8RD\nKLw1sduesL606dWFdsZT1jdhNeq6K9DlhCVUU6s4jZnt1YzAhnM71dH2bycmszY/K1d/0c6OzY4R\nfwuK4p8rTstn6z8k7HrwGzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHz3\nVxvr80/8y38voTwGpj/F5/8AqT/JfjTx/WVeyY6FPspc9dZPVXaOq2WEwIUTVRmjo2rNfLHRI3vZ\nDJycXtX8dZh7t879nsnhcbwz23tt+r6I2nxyb+gCVBzuPY/E4PqI9K7ui19fTxNBnp60n+Aj5/pJ\n3jZu1aOnnltMNussdfXbm+l3ZM9URHREdZVXTuT1Nk7boQiOkJw28PU47/htEp5eivJPLMTCZ9Vv\nx7mJ3iJ9UqNHk8XR4b+tIXuhxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD\nweqjbWZ4/wCZP8vePCaz/wDIaiP+Zb+UX408f0r9lOxWOifJhXWjfyYWllPRXYQxnrCrJHRd3YZI\n6A1NJecHEsN/S0T+76bE7xE+r5dk93LW3pL6ZpMni6PDf8VIn9m2fjm8s9rgFmQxvHNS0esbMiew\nPnHLyai9fS0w2aNfUTtrs3+uf5bGPqy068fF227KtSsdFlKqNGMV6myyY6sbdIQI8tlOWOi6Jhhk\nj3RD0vA8nicMx9etZmHRcT2Zyb6XNT8N9/2dt0T449T2AJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAHhdfG3E9TH9cvdPEcXjk4zqI/q3L8aeP6xr2TsxpLOekMK6mFo6qpXSrm\nOqBixvHSVmzC4OfqK7S9/wAByeLwbTW9K7fo8Fqo6Paeyl+fglI/Da0NcMPK7QC7AAB8313TiOf/\nAKk/y2MHWrX4jG3E9R/1Lfyv0/aFNOrHxuU7LI7MMayGTVlHWUXhNe6Z6wIUsb9d1m20q7dkDpez\nN9tRqKT5xEvRvKez9+Xis1/FSYerb5+OTyf6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAB43j9eXjN/jWJ/Z7J5L2mry8Upb8VIF8f6aGOey2eynHvOy7bowrrYSxZSwQJ2YXZ\n92N4BoanrEvVexmTm4blr+HJ/aHltRHSXofYm/1Wrp5RaJaYY+X49WA0c4AD51xONuKan/qW/lbp\n+0MOLRtxbU/9SU4J7KadWPjep2WQrr2WRPRk1TvsndXMpiRCb9FNu0rbTuqvKBscCjfi9PhWZeue\nV9n434rafTHL1TfPxy+T/QAszAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmv\navHtfTZfnV6VxPajHzcNrf8ABeJFs/XnMcr4no18c+6vr2YadkY2YM57sEDLyY37Mo7MMnYGlqO0\nvQ+xNfqNVb1tEfs87qZ2rL0/sVX/AHdnt65P7Q0wx8vx6UBo5wAHz/jUbcX1PT78qtO2vaCnJxjP\n8Zif2amnnspp04+OjWejKJ6MKdmcMmyJn4m5ZHzEVPMwtJv0VZLbQDqezcb8RzT6Y/7vUPM+ytZt\nn1OTyiIh6Ztn45N/6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABocbxeLw\nnUR5xXm/Rvq8+OMuDJjntaswEeBxT0bNZ6NatZpNqz3rO0rqsdO3PxlaWEMpY+aqWXkryT0ZT2V3\n7A0dVPuy9f7G124NM/iyT/Z4zWT7sw957MYfB4Fp4/FE2/WWmGHldcBowAAeM9qKcvFeb8VIly9P\n0nq7ntbTbVYL+tJj93CwT76unR4/jo0nozhhTsy3Y1sWljM9Ce7HyQIm3RRlttVbaWrnt0Sh6n2U\nx8vD8mSfv3/h3XN4Bi8Lg2nj8Uc36y6TeOPXugCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAPD8RxeBxXUU26Tbmj8+quro+02Lw+I4ssdslNvzhzazvDPbq8d7GW7Dfqz2VzG\n0s2qd+iu/Zn5Ksk9BVztX1mI8930zh2LwOHabH+HHWP2fNYp4+vwYvxXiP3fUqxtWIjyjZtj45/L\nfaQFmQADzftfj3w6fJ6WmHmsP23rvaqnNwqLfhvEvIYZ+sV038bo0noy36MK9oZQxrdMyrlnMbMZ\nQKrS1M07zEestq/RRjr4utwY/wAV4j91p9V18fQdJj8LR4ccfdpEfsuREbREJbuMAAAAAAAAAAAA\nBAJAAAAEAJEAJQAJQAJEAJQAJQAJEACUJAQlAJEAJQAJQJAAAEAJEAJBAAAJAABAJEJAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwvanDzaPFmjvjv8A\ntLztJ3h7HjGHx+FainnFeaPnHV4vFbeIU038VbHeGF+kso7Mb9mTdhKnLK3dRm7SIrHhGPxeP6Sv\n9cT/AHfSnz72Zx+J7Q45/BWZ/Z9BbZ+OXyfQBZQABzeP4/E4NqI9Ii36S8Ng/wAx9C4jTxOH6ivr\njn+Hz3B/mQi/GvjdCnWNlsdI2V07LIlg6USrt2ZzZXMoFV+zPhGLxeOaavpbm/RVltEN72Yx+Jxm\nb7dKUmf7L5+s9/HtRA2cqRACRACRACRACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCQQCRACRACRCQBCQBCQB\nACRACRACRACRACL1i9LVntMbPATTwdRkxT3pea/u+gPE8Xx+DxrPHlaYt+qNfGvjvtXXsi0dOrKk\ndEXjZg6VMtbP2bMtXUdpEV0/Y2nNxbNf8OP+727xvsXH+N1U/wBEfy9k3nxyb+gCVQAGOWvNivX1\nrMPnGGOXNNfOJ2fSZ6w+dZKeHxDPX8N7R+6L8a+L63KdoZ7q6zvEMpnowdKJ6ywmWUyqvIKM0vQ+\nx+D6rU55+9aKx+TzWa36vbezmDwODYenW+95/Nphj5L6dQBo5wAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEiAAAEoA\nAAAAAAAAAAAAAEAkEAkRuAkQbgkQAkQAkQAkQAl5T2nx8nEMOT8dNv0l6pwfarHvpcGWPu32/WCr\nYvK4mOem6b9mGKd4Z3idmFdka0y1c892zfpMtLPaNpEV6D2Kj/Eauf6YeweQ9ieuTVz8K/3evbT4\n5NfQBKoAA8FxCvJxrUx/XMvevD8Zry8fz/Haf2RfjTx/6RSOnRMyypHu9kXjowrqVSrvPRnZVl6V\nkK0775MsUjvadn0nT4ow6bFijtSsVfPuFYvpPGtNTy54mfy6vorXDm8l9pEC7JIgBIgBIgBIgBIg\nBIgBIhIAgBIhIAgBIgBIIBIAAhIAhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAA\nAAAAAAAAABAJQkAEAAAAAAAAAAjc3BIjdG4Mkbo5kcwMjdhzHMDPc3V8xzAs3N1fMjmBZubq+Y5g\nWbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmTzAz3N2HMnmBlu5ftFTx\nOEZJ/DMW/d0t2rxKni8N1FPWkiZ9eS08e7Cy8dGGn6UhZaJljXZGnmc3UT3dPP2cnUT78xCIV6j2\nH/8A9c/6f7vXPI+w8bU1U+vL/d63du5NfUiDcVSIAS8b7RV5eOb/AIqRL2TyXtNX/e2KfXH/AHlF\n+NPH/pr4+2xcxx0hFpY11K7R16KM32ZWz3UaidqSgrc9kcPicWyZJjfw6T+727y3sXh2xarN+K0V\nh6lvPjj3e0ASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAkQAkQAkAAAAAAAAAAAAAAA\nEgAAAAAAAAAAAAAAAAAAAAAgAAABKDcAN0bgkY8xzAyRux5kcwM9zdXNkTcFm6OZXzMeYFvMibKu\nZHMC2bo51U2RuC2bom6rc3BZzom6sBZzI52ADPnOdggFnMc6skFnMc6rc3BbznOp3RzAv50c6nml\nHMC/nOf4qOY5wX85zqOc5wbHOc7X5znBsc6edr85zg2ec52vzpi4NjmY5bROG+/bllVzsNTk5dLl\nn0pP8BHmMHWNmzt0aum8obm08vVjfrtnxztR0mXHzTvaZdjVRMTLkZo6yiFen9iZ2pqY/wBP93rN\n3kPY+/LfPX1rE/u9XzN3HfqzdO6vmTuIZ7m7Hc3Bnu8t7TR/vHBP9E/y9Pu837SV31umn+if5Rfi\n/j/01MMb1hjkrtKzBG0bMsmOZY11tOYamr6Und0LUc7XT7u3rJPqL8er9lcPhcFpbzyWm39v7O00\n+FYvA4Zpsc94xxu227jv1IAgAAAAAAAAABKAAAASgASgBIgBIgBIgBIhIAAAAAAAAAAAAAAAAAAC\nUACUJAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAg3AEbomQZbo3YzLGbAz3RNlc3YzcFs2YzdVN2\nM2Bdzom6nmNwW86JurTAMuY3REJ2BB1ZRVMVBhsbSsiqeUFXLucq3lTygp5TlXcpygp5TlXcpygp\n5TlXcqOUFXKjlXcrGYBXysdlswiYBVMdUTCyY6sZBWxlnMMZgGLGZZSwkDdHMiWO4MuY5mEyjcFn\nN1OdVzHMC3nTzqeY5gX85zqOZPMC+Lqdbk20eb/RKOZr8QybaK/XvtH7iZ9aGlp2luzT3fg19NHS\nOjbmPcYX67XH1XSZ9XIzRvMuzrK7zLkZYmYnciunb9lZ5dTk+OP+71cXeP8AZnJ/ip2nf3J/l6iL\n/Fu5L9bMWZczXi6YuIbEWTzKIuyiwLt3nuO25uI4a/hx7/rLuczg8TicvFLbfdpEK6+NPH/phhjo\nstLGkctUWnoxrrU3j1cnWTzZq1jzl1clo5Zcu8c+txR63iP3Tn6pv4+g4o5cVI9IiGe7CJ2iE7t3\nGyN2O6dwSINwSISAlAAlACRAAlAAlACRACRCQAAAAAAAAAASgASISAAAAAAAAAAAAACQAAAAAAAA\nAAAAAASAAAAAAAAAAAAAAAAIAAAQCAJljuljsCJlhMs9mOwMJYys5TkBVsjZdyHICrZPKt5E8oK4\nqmKrOVOwMIqyirPY2Bjyp2ZbAI2NmSARsbMgEbI2ZAMdjZICNkbMkSCNmOzJEgx2YyzljMAwlhKy\nWEwCuWErJhhMArlhLOWEgxljMpljIImWMyTKJA3N0IBO5vux3NwZbnMx3NwZczT4jf3MdPW27a3a\nfJOq1XNP2KdIRfi+J2trSYfcjeF+Wm1OicVeWIiN9kai8xjY12ORqultnI1Ecsujq79XP1FovWYI\nrTgeq+j8QrWZ+3Mx+r2UXeC0WG2Ti2kiN5mL807eUREvbzbaejefHJv62Iv8WUXa0WTFhVtRdlF2\nrz9WUXBtc7jR9dqc2T1ttHyhvZMvJitb0jdq6XHNcNenWVN3028U99WRj6Kb02be3Tq18/SN2Lpc\n3UdN9nOmZrqKX/DaJ/d0svvTLRzV3jomK6+Pd1vvWJj0ZczT0mXxNJht60hfFnQ4qu3N1cWTEgs3\nTur5k7gz3N2O5uDM3Y7m4MtxBuCQASIASIASAAAAAAACRCQAAAAAAAAEoSAAAAAAAAAAAlAAlCQA\nAAAAAAAAAAASAAAAAAAAAAAAIASgAAAEJAQJQCNkbMgGOyOVnsAw5TlZ7GwMOVPKy2NgY7GzIBGx\nskA2AAAAAAAAAAQkBAEghEskAxYzDPZGwK5hjMLJhjMAqmGEwumrCagomFcw2JqqtUFEsLLrV82F\no7gqljKyYYTGwMZRKUSCAQAboJnaN5Bjkneu0d5W4ccViIiOzHFWbTzNumP1Zarr8eeRMbxDW1Mx\nNO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h\n2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te\npSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7\ncvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7\nmZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA\nAAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA\nhGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J\nqx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI\nXRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy\nRHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX\nqNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX\nkaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P\nya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC\nExKJgBnEpiyvdlEgsizKLKollFgWxLKJVRLKJBbEp3VxLKJBnuMWQJEbpBIAAAJAAAABIAAAAAAA\nlAJAAAAAAAAAAAAAASAAAAAAAAAAAAAJAAAABAJABAlAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA\nAAABAJQAAAAgAABAAI2EoBGyJhkgGPKxmqxAKpownHC+YRMdN5BrTj67R3bOn01o7p01Iv71u89o\n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\n2Q==`;\n", "/**\n * Warmup algorithm that uses embedded images to exercise loaded models for faster future inference\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep } from './util/util';\nimport * as sample from './sample';\nimport * as image from './image/image';\nimport * as backend from './tfjs/backend';\nimport { env } from './util/env';\nimport { empty, Result } from './result';\nimport type { Config } from './config';\nimport type { Human } from './human';\nimport type { Tensor, DataType } from './tfjs/types';\n\nasync function warmupBitmap(instance: Human): Promise {\n const b64toBlob = (base64: string, type = 'application/octet-stream') => fetch(`data:${type};base64,${base64}`).then((res) => res.blob());\n let blob: Blob | null;\n let res: Result | undefined;\n switch (instance.config.warmup) {\n case 'face': blob = await b64toBlob(sample.face); break;\n case 'body':\n case 'full': blob = await b64toBlob(sample.body); break;\n default: blob = null;\n }\n if (blob) {\n const bitmap = await createImageBitmap(blob);\n res = await instance.detect(bitmap, instance.config);\n bitmap.close();\n }\n return res;\n}\n\nasync function warmupCanvas(instance: Human): Promise {\n return new Promise((resolve) => {\n let src: string;\n // let size = 0;\n switch (instance.config.warmup) {\n case 'face':\n // size = 256;\n src = 'data:image/jpeg;base64,' + sample.face;\n break;\n case 'full':\n case 'body':\n // size = 1200;\n src = 'data:image/jpeg;base64,' + sample.body;\n break;\n default:\n src = '';\n }\n // src = encodeURI('../assets/human-sample-upper.jpg');\n let img: HTMLImageElement;\n if (typeof Image !== 'undefined') img = new Image();\n // @ts-ignore env.image is an external monkey-patch\n else if (env.Image) img = new env.Image();\n else return;\n img.onload = async () => {\n const canvas = image.canvas(img.naturalWidth, img.naturalHeight);\n if (!canvas) {\n log('Warmup: Canvas not found');\n resolve(undefined);\n } else {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (ctx) ctx.drawImage(img, 0, 0);\n // const data = ctx?.getImageData(0, 0, canvas.height, canvas.width);\n const tensor = await instance.image(canvas, true);\n const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : undefined;\n resolve(res);\n }\n };\n if (src) img.src = src;\n else resolve(undefined);\n });\n}\n\nasync function warmupNode(instance: Human): Promise {\n const atob = (str: string) => Buffer.from(str, 'base64');\n let img;\n if (instance.config.warmup === 'face') img = atob(sample.face);\n else img = atob(sample.body);\n let res: Result;\n if (('node' in tf) && (tf.getBackend() === 'tensorflow')) {\n // @ts-ignore\n const data: Tensor = tf['node'].decodeJpeg(img); // eslint-disable-line import/namespace\n const expanded: Tensor = tf.expandDims(data, 0);\n instance.tf.dispose(data);\n // log('Input:', expanded);\n res = await instance.detect(expanded, instance.config);\n instance.tf.dispose(expanded);\n } else {\n if (instance.config.debug) log('Warmup tfjs-node not loaded');\n /*\n const input = await canvasJS.loadImage(img);\n const canvas = canvasJS.createCanvas(input.width, input.height);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, input.width, input.height);\n res = await instance.detect(input, instance.config);\n */\n }\n // @ts-ignore\n return res;\n}\n\nasync function runInference(instance: Human) {\n let res: Result | undefined;\n if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);\n else if (typeof Image !== 'undefined' || env.Canvas !== undefined) res = await warmupCanvas(instance);\n else res = await warmupNode(instance);\n return res;\n}\n\n/** Runs pre-compile on all loaded models */\nexport async function runCompile(instance: Human) {\n // @ts-ignore private property\n if (!tf.env().flagRegistry.ENGINE_COMPILE_ONLY) return; // tfjs does not support compile-only inference\n const backendType = tf.getBackend();\n const webGLBackend = tf.backend();\n if ((backendType !== 'webgl' && backendType !== 'humangl') || !webGLBackend?.['checkCompileCompletion']) {\n // log('compile pass: skip');\n return;\n }\n tf.env().set('ENGINE_COMPILE_ONLY', true);\n const numTensorsStart = tf.engine().state.numTensors;\n const compiledModels: string[] = [];\n for (const [modelName, model] of Object.entries(instance.models).filter(([key, val]) => (key !== null && val !== null))) {\n const shape = (model?.modelSignature && model?.inputs?.[0]?.shape) ? [...model.inputs[0].shape] : [1, 64, 64, 3];\n const dtype: DataType = (model?.modelSignature && model?.inputs?.[0]?.dtype) ? model.inputs[0].dtype : 'float32';\n for (let dim = 0; dim < shape.length; dim++) {\n if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; // override batch number and any dynamic dimensions\n }\n const tensor = tf.zeros(shape, dtype);\n try {\n const res = model.execute(tensor);\n compiledModels.push(modelName);\n if (Array.isArray(res)) res.forEach((t) => tf.dispose(t));\n else tf.dispose(res);\n } catch {\n if (instance.config.debug) log('compile fail model:', modelName);\n }\n tf.dispose(tensor);\n }\n const kernels = await webGLBackend['checkCompileCompletionAsync']();\n webGLBackend['getUniformLocations']();\n if (instance.config.debug) log('compile pass:', { models: compiledModels, kernels: kernels.length });\n tf.env().set('ENGINE_COMPILE_ONLY', false);\n const numTensorsEnd = tf.engine().state.numTensors;\n if ((numTensorsEnd - numTensorsStart) > 0) log('tensor leak:', numTensorsEnd - numTensorsStart);\n}\n\n/** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used in browser environments for `webgl` and `humangl` backends\n * @param userConfig?: Config\n*/\nexport async function warmup(instance: Human, userConfig?: Partial): Promise {\n await backend.check(instance, false);\n const t0 = now();\n instance.state = 'warmup';\n if (userConfig) instance.config = mergeDeep(instance.config, userConfig) as Config;\n if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === 'none') {\n return empty();\n }\n return new Promise(async (resolve) => {\n await instance.models.load();\n await runCompile(instance);\n const res = await runInference(instance);\n const t1 = now();\n if (instance.config.debug) log('warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');\n instance.emit('warmup');\n resolve(res);\n });\n}\n", "/**\n * Human main module\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\n// module imports\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep, validate } from './util/util';\nimport { defaults } from './config';\nimport { env, Env } from './util/env';\nimport { WebCam } from './util/webcam';\nimport { setModelLoadOptions } from './tfjs/load';\nimport * as app from '../package.json';\nimport * as backend from './tfjs/backend';\nimport * as draw from './draw/draw';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as face from './face/face';\nimport * as facemesh from './face/facemesh';\nimport * as gesture from './gesture/gesture';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as image from './image/image';\nimport * as interpolate from './util/interpolate';\nimport * as meet from './segmentation/meet';\nimport * as match from './face/match';\nimport * as models from './models';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as persons from './util/persons';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as warmups from './warmup';\n\n// type definitions\nimport { Input, Config, Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, AnyCanvas, empty } from './exports';\nimport type { Tensor, Tensor4D } from './tfjs/types';\n// type exports\nexport * from './exports';\n\n/** **Human** library main class\n *\n * All methods and properties are available only as members of Human class\n *\n * - Configuration object definition: {@link Config}\n * - Results object definition: {@link Result}\n * - Possible inputs: {@link Input}\n *\n * @param userConfig - {@link Config}\n * @returns instance of {@link Human}\n */\nexport class Human {\n /** Current version of Human library in *semver* format */\n version: string;\n\n /** Current configuration\n * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\n config: Config;\n\n /** Last known result of detect run\n * - Can be accessed anytime after initial detection\n */\n result: Result;\n\n /** Current state of Human library\n * - Can be polled to determine operations that are currently executed\n * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'\n */\n state: string;\n\n /** currenty processed image tensor and canvas */\n process: { tensor: Tensor | null, canvas: AnyCanvas | null };\n\n /** Instance of TensorFlow/JS used by Human\n * - Can be embedded or externally provided\n * [TFJS API](https://js.tensorflow.org/api/latest/)\n */\n tf;\n\n /** Object containing environment information used for diagnostics */\n env: Env = env;\n\n /** Draw helper classes that can draw detected objects on canvas using specified draw\n * - canvas: draws input to canvas\n * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions}\n * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas\n */\n // draw: { canvas: typeof draw.canvas, face: typeof draw.face, body: typeof draw.body, hand: typeof draw.hand, gesture: typeof draw.gesture, object: typeof draw.object, person: typeof draw.person, all: typeof draw.all, options: DrawOptions };\n draw: typeof draw = draw;\n\n /** Face Matching\n * - similarity: compare two face descriptors and return similarity index\n * - distance: compare two face descriptors and return raw calculated differences\n * - find: compare face descriptor to array of face descriptors and return best match\n */\n match: typeof match = match;\n\n /** Currently loaded models\n * @internal\n * {@link models#Models}\n */\n models: models.Models;\n\n /** Container for events dispatched by Human\n * Possible events:\n * - `create`: triggered when Human object is instantiated\n * - `load`: triggered when models are loaded (explicitly or on-demand)\n * - `image`: triggered when input image is processed\n * - `result`: triggered when detection is complete\n * - `warmup`: triggered when warmup is complete\n * - `error`: triggered on some errors\n */\n events: EventTarget | undefined;\n /** Reference face triangualtion array of 468 points, used for triangle references between points */\n faceTriangulation: number[];\n /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */\n faceUVMap: [number, number][];\n /** Performance object that contains values for all recently performed operations */\n performance: Record; // perf members are dynamically defined as needed\n #numTensors: number;\n #analyzeMemoryLeaks: boolean;\n #checkSanity: boolean;\n // definition end\n\n /** Constructor for **Human** library that is futher used for all operations\n * @param userConfig - user configuration object {@link Config}\n */\n constructor(userConfig?: Partial) {\n /*\n defaults.wasmPath = tf.version['tfjs-core'].includes('-') // custom build or official build\n ? 'https://vladmandic.github.io/tfjs/dist/'\n : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`;\n */\n const tfVersion = (tf.version.tfjs || tf.version_core).replace(/-(.*)/, '');\n defaults.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`;\n defaults.modelBasePath = env.browser ? '../models/' : 'file://models/';\n this.version = app.version; // expose version property on instance of class\n Object.defineProperty(this, 'version', { value: app.version }); // expose version property directly on class itself\n this.config = JSON.parse(JSON.stringify(defaults));\n Object.seal(this.config);\n this.config.cacheModels = typeof indexedDB !== 'undefined';\n if (userConfig) this.config = mergeDeep(this.config, userConfig);\n setModelLoadOptions(this.config);\n this.tf = tf;\n this.state = 'idle';\n this.#numTensors = 0;\n this.#analyzeMemoryLeaks = false;\n this.#checkSanity = false;\n this.performance = {};\n this.events = (typeof EventTarget !== 'undefined') ? new EventTarget() : undefined;\n // object that contains all initialized models\n this.models = new models.Models(this);\n // reexport draw methods\n draw.init();\n this.result = empty();\n // export access to image processing\n this.process = { tensor: null, canvas: null };\n // export raw access to underlying models\n this.faceTriangulation = facemesh.triangulation;\n this.faceUVMap = facemesh.uvmap;\n // init model validation\n models.validateModel(this, null, '');\n // include platform info\n this.emit('create');\n if (this.config.debug || this.env.browser) log(`version: ${this.version}`);\n if (this.config.debug) log(`tfjs version: ${this.tf.version['tfjs-core']}`);\n const envTemp = JSON.parse(JSON.stringify(this.env));\n delete envTemp.kernels;\n delete envTemp.initial;\n delete envTemp.perfadd;\n if (this.config.debug) log('environment:', envTemp);\n }\n\n /** internal function to measure tensor leaks */\n analyze = (...msg: string[]) => {\n if (!this.#analyzeMemoryLeaks) return;\n const currentTensors = this.tf.engine().state.numTensors;\n const previousTensors = this.#numTensors;\n this.#numTensors = currentTensors;\n const leaked = currentTensors - previousTensors;\n if (leaked !== 0) log(...msg, leaked);\n };\n\n /** internal function for quick sanity check on inputs @hidden */\n #sanity = (input: Input): null | string => {\n if (!this.#checkSanity) return null;\n if (!input) return 'input is not defined';\n if (this.env.node && !(input instanceof tf.Tensor)) return 'input must be a tensor';\n try {\n this.tf.getBackend();\n } catch {\n return 'backend not loaded';\n }\n return null;\n };\n\n /** Reset configuration to default values */\n reset(): void {\n const currentBackend = this.config.backend; // save backend;\n this.config = JSON.parse(JSON.stringify(defaults));\n this.config.backend = currentBackend;\n image.reset();\n env.initial = true;\n }\n\n /** Validate current configuration schema */\n validate(userConfig?: Partial) {\n const msgs = validate(defaults, userConfig || this.config);\n if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig) as Config;\n return msgs;\n }\n\n /** Utility wrapper for performance.now() */\n now(): number { // eslint-disable-line class-methods-use-this\n return now();\n }\n\n /** Process input as return canvas and tensor\n *\n * @param input - any input {@link Input}\n * @param getTensor - should image processing also return tensor or just canvas\n * Returns object with `tensor` and `canvas`\n */\n image(input: Input, getTensor: boolean = false) {\n return image.process(input, this.config, getTensor);\n }\n\n /** Segmentation method takes any input and returns RGBA tensor\n * Note: Segmentation is not triggered as part of detect process\n *\n * @param input - {@link Input}\n * Returns tensor which contains image data in RGBA format\n */\n async segmentation(input: Input, userConfig?: Partial): Promise {\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (!this.config.segmentation.enabled) return null;\n const processed = await image.process(input, this.config);\n if (!processed.tensor) return null;\n let tensor: Tensor | null = null;\n if (this.config.segmentation.modelPath?.includes('rvm')) tensor = await rvm.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('meet')) tensor = await meet.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('selfie')) tensor = await selfie.predict(processed.tensor, this.config);\n tf.dispose(processed.tensor);\n return tensor;\n }\n\n /** Compare two input tensors for pixel similarity\n * - use `human.image` to process any valid input and get a tensor that can be used for compare\n * - when passing manually generated tensors:\n * - both input tensors must be in format [1, height, width, 3]\n * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor\n * - return value is pixel similarity score normalized by input resolution and rgb channels\n */\n compare(firstImageTensor: Tensor, secondImageTensor: Tensor): Promise {\n return image.compare(this.config, firstImageTensor, secondImageTensor);\n }\n\n /** Explicit backend initialization\n * - Normally done implicitly during initial load phase\n * - Call to explictly register and initialize TFJS backend without any other operations\n * - Use when changing backend during runtime\n */\n async init(): Promise {\n await backend.check(this, true);\n await this.tf.ready();\n image.reset();\n }\n\n /** WebCam helper methods\n *\n */\n public webcam = new WebCam();\n\n /** Load method preloads all configured models on-demand\n * - Not explicitly required as any required model is load implicitly on it's first run\n *\n * @param userConfig - {@link Config}\n */\n async load(userConfig?: Partial): Promise {\n this.state = 'load';\n const timeStamp = now();\n const count = Object.values(this.models.models).filter((model) => model).length;\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n\n if (this.env.initial) { // print version info on first run and check for correct backend setup\n if (!await backend.check(this, false)) log('error: backend check failed');\n await tf.ready();\n if (this.env.browser) {\n if (this.config.debug) log('configuration:', this.config);\n if (this.config.debug) log('tf flags:', this.tf.ENV.flags);\n }\n }\n\n await this.models.load(this); // actually loads models\n if (this.env.initial && this.config.debug) log('tf engine state:', this.tf.engine().state.numBytes, 'bytes', this.tf.engine().state.numTensors, 'tensors'); // print memory stats on first run\n this.env.initial = false;\n\n const loaded = Object.values(this.models.models).filter((model) => model).length;\n if (loaded !== count) { // number of loaded models changed\n this.models.validate(); // validate kernel ops used by model against current backend\n this.emit('load');\n }\n\n const current = Math.trunc(now() - timeStamp);\n if (current > (this.performance.loadModels || 0)) this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current;\n }\n\n /** emit event */\n emit = (event: string) => {\n if (this.events?.dispatchEvent) this.events.dispatchEvent(new Event(event));\n };\n\n /** Runs interpolation using last known result and returns smoothened result\n * Interpolation is based on time since last known result so can be called independently\n *\n * @param result - {@link Result} optional use specific result set to run interpolation on\n * @returns result - {@link Result}\n */\n next(result: Result = this.result): Result {\n return interpolate.calc(result, this.config);\n }\n\n /** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used for `webgl` and `humangl` backends\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async warmup(userConfig?: Partial) {\n const t0 = now();\n const res = await warmups.warmup(this, userConfig);\n const t1 = now();\n this.performance.warmup = Math.trunc(t1 - t0);\n return res;\n }\n\n /** Run detect with tensorflow profiling\n * - result object will contain total exeuction time information for top-20 kernels\n * - actual detection object can be accessed via `human.result`\n */\n async profile(input: Input, userConfig?: Partial): Promise<{ kernel: string, time: number, perc: number }[]> {\n // @ts-ignore profile wraps method return values\n const profile = await this.tf.profile(() => this.detect(input, userConfig));\n const kernels: Record = {};\n let total = 0;\n for (const kernel of profile.kernels) { // sum kernel time values per kernel\n const ms = Number(kernel.kernelTimeMs) || 0;\n if (kernels[kernel.name]) kernels[kernel.name] += ms;\n else kernels[kernel.name] = ms;\n total += ms;\n }\n const kernelArr: { kernel: string, time: number, perc: number }[] = [];\n Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1] as unknown as number, perc: 0 })); // convert to array\n for (const kernel of kernelArr) {\n kernel.perc = Math.round(1000 * kernel.time / total) / 1000;\n kernel.time = Math.round(1000 * kernel.time) / 1000;\n }\n kernelArr.sort((a, b) => b.time - a.time); // sort\n kernelArr.length = 20; // crop\n return kernelArr;\n }\n\n /** Main detection method\n * - Analyze configuration: {@link Config}\n * - Pre-process input: {@link Input}\n * - Run inference for all configured models\n * - Process and return result: {@link Result}\n *\n * @param input - {@link Input}\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async detect(input: Input, userConfig?: Partial): Promise {\n // detection happens inside a promise\n this.state = 'detect';\n return new Promise(async (resolve) => {\n this.state = 'config';\n let timeStamp;\n\n // update configuration\n this.config = mergeDeep(this.config, userConfig) as Config;\n\n // sanity checks\n this.state = 'check';\n const error = this.#sanity(input);\n if (error) {\n log(error, input);\n this.emit('error');\n resolve(empty(error));\n }\n\n const timeStart = now();\n\n // load models if enabled\n await this.load();\n\n timeStamp = now();\n this.state = 'image';\n const img = await image.process(input, this.config) as { canvas: AnyCanvas, tensor: Tensor4D };\n this.process = img;\n this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Get Image:');\n\n if (!img.tensor) {\n if (this.config.debug) log('could not convert input to tensor');\n this.emit('error');\n resolve(empty('could not convert input to tensor'));\n return;\n }\n this.emit('image');\n\n timeStamp = now();\n this.config.skipAllowed = await image.skip(this.config, img.tensor);\n this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; // disable autoBrightness on scene change\n if (!this.performance.totalFrames) this.performance.totalFrames = 0;\n if (!this.performance.cachedFrames) this.performance.cachedFrames = 0;\n (this.performance.totalFrames)++;\n if (this.config.skipAllowed) this.performance.cachedFrames++;\n this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Check Changed:');\n\n // prepare where to store model results\n // keep them with weak typing as it can be promise or not\n let faceRes: FaceResult[] | Promise | never[] = [];\n let bodyRes: BodyResult[] | Promise | never[] = [];\n let handRes: HandResult[] | Promise | never[] = [];\n let objectRes: ObjectResult[] | Promise | never[] = [];\n\n // run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion\n this.state = 'detect:face';\n if (this.config.async) {\n faceRes = this.config.face.enabled ? face.detectFace(this, img.tensor) : [];\n if (this.performance.face) delete this.performance.face;\n } else {\n timeStamp = now();\n faceRes = this.config.face.enabled ? await face.detectFace(this, img.tensor) : [];\n this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n\n if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) faceRes = await faceRes; // need face result for auto-detect number of hands or bodies\n\n // run body: can be posenet, blazepose, efficientpose, movenet\n this.analyze('Start Body:');\n this.state = 'detect:body';\n const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of bodies\n if (this.config.async) {\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(img.tensor, bodyConfig) : [];\n if (this.performance.body) delete this.performance.body;\n } else {\n timeStamp = now();\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(img.tensor, bodyConfig) : [];\n this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Body:');\n\n // run handpose\n this.analyze('Start Hand:');\n this.state = 'detect:hand';\n const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of hands\n if (this.config.async) {\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? handtrack.predict(img.tensor, handConfig) : [];\n if (this.performance.hand) delete this.performance.hand;\n } else {\n timeStamp = now();\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? await handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? await handtrack.predict(img.tensor, handConfig) : [];\n this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Hand:');\n\n // run object detection\n this.analyze('Start Object:');\n this.state = 'detect:object';\n if (this.config.async) {\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(img.tensor, this.config) : [];\n if (this.performance.object) delete this.performance.object;\n } else {\n timeStamp = now();\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(img.tensor, this.config) : [];\n this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Object:');\n\n // if async wait for results\n this.state = 'detect:await';\n if (this.config.async) [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);\n\n // run gesture analysis last\n this.state = 'detect:gesture';\n let gestureRes: GestureResult[] = [];\n if (this.config.gesture.enabled) {\n timeStamp = now();\n gestureRes = [...gesture.face(faceRes as FaceResult[]), ...gesture.body(bodyRes as BodyResult[]), ...gesture.hand(handRes as HandResult[]), ...gesture.iris(faceRes as FaceResult[])];\n if (!this.config.async) this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n else if (this.performance.gesture) delete this.performance.gesture;\n }\n\n this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart);\n const shape = this.process.tensor?.shape || [0, 0, 0, 0];\n this.result = {\n face: faceRes as FaceResult[],\n body: bodyRes as BodyResult[],\n hand: handRes as HandResult[],\n gesture: gestureRes,\n object: objectRes as ObjectResult[],\n performance: this.performance,\n canvas: this.process.canvas,\n timestamp: Date.now(),\n error: null,\n width: shape[2],\n height: shape[1],\n get persons() { return persons.join(faceRes as FaceResult[], bodyRes as BodyResult[], handRes as HandResult[], gestureRes, shape); },\n };\n\n // finally dispose input tensor\n tf.dispose(img.tensor);\n\n // log('Result:', result);\n this.emit('detect');\n this.state = 'idle';\n resolve(this.result);\n });\n }\n\n /** Helper function\n * @param ms - sleep time in miliseconds\n */\n async sleep(ms: number): Promise { // eslint-disable-line class-methods-use-this\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n }\n\n /** internal structure that keeps track of processed videos @hidden */\n #loops: Record = {};\n /** Continously detect video frames\n * @param element - HTMLVideoElement input\n * @param run - boolean run continously or stop if already running, default true\n * @param delay - number delay detection between frames for number of miliseconds, default 0\n */\n async video(element: HTMLVideoElement, run: boolean = true, delay: number = 0) {\n if (run) {\n if (!this.#loops[element.id]) {\n if (this.config.debug) log('video start', element.id);\n this.#loops[element.id] = true;\n }\n if (!element.paused && this.#loops[element.id] && (element.readyState >= 2)) await this.detect(element);\n if (delay > 0) await this.sleep(delay);\n if (this.#loops[element.id]) requestAnimationFrame(() => this.video(element, run, delay));\n } else {\n if (this.config.debug) log('video stop', element.id);\n this.#loops[element.id] = false;\n }\n }\n}\n\n/** Class Human as default export */\n/* eslint no-restricted-exports: [\"off\", { \"restrictedNamedExports\": [\"default\"] }] */\nexport { Human as default, match, draw, models };\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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BAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,i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BAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,gBAAgB;AAAA,EAClC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,gBAAgB,iBAAiB;AAAA,EAClC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AACvC;AAEO,IAAM,SAAmB;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACtJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACtJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACnJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAA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ACF;;;ACpIO,IAAMS,WAAU;AAAA,EACrB,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Jb,IAAMC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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", + "names": ["t", "dt", "config", "match", "gl", "index", "y", "v", "size", "rgb", "fx", "process", "config", "_a", "_b", "_c", "tensor", "rgb", "t", "gl", "el", "_a", "init", "config", "_a", "_b", "_c", "_d", "model", "config", "gl", "_a", "config", "op", "t", "_a", "canvas", "init", "options", "z", "rgb", "localOptions", "y", "cx", "xc", "yc", "to", "options", "connectionsToIndices", "index", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "emotion", "index", "inCanvas", "options", "inCanvas", "_a", "_b", "localOptions", "options", "connected", "inCanvas", "_a", "_b", "localOptions", "options", "z", "inCanvas", "_a", "localOptions", "options", "inCanvas", "_a", "localOptions", "options", "inCanvas", "localOptions", "options", "canvas", "init", "anchors", "y", "config", "outputSize", "_a", "_b", "t", "outputSize", "model", "inputSize", "config", "size", "_a", "_b", "t", "outputSize", "kpt", "distance", "annotations", "body", "_c", "labels", "model", "inputSize", "last", "lastTime", "skipped", "config", "process", "t", "id", "labels", "y", "predict", "outputSize", "connected", "kpt", "model", "lastTime", "cache", "skipped", "load", "config", "y", "predict", "_a", "_b", "enhance", "id", "x", "kpt", "connected", "size", "y", "y", "v1", "v2", "size", "inputSize", "anchors", "face", "y", "model", "inputSize", "load", "config", "_a", "decodeBoxes", "t", "_b", "_c", "_d", "model", "inputSize", "load", "config", "_a", "_b", "index", "face", "y", "z", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "t", "cache", "model", "inputSize", "predict", "config", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "id", "size", "face", "t", "index", "load", "model", "last", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "t", "inputSize", "model", "last", "lastTime", "lastCount", "skipped", "load", "config", "_a", "predict", "count", "_b", "_c", "_d", "t", "gender", "all", "y", "face", "model", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "_b", "model", "cached", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "_b", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "t", "gender", "age", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_b", "_c", "_d", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "_c", "_d", "t", "normalize", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_b", "t", "face", "normalize", "v", "y", "z", "size", "face", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_q", "_r", "_s", "_u", "_v", "_w", "predict", "el", "options", "point", "point2", "gesture", "body", "face", "iris", "_a", "_b", "_c", "_d", "hand", "getBoxSize", "getBoxCenter", "scaleBoxCoordinates", "enlargeBox", "size", "squarifyBox", "normalizeRadians", "computeRotation", "buildTranslationMatrix", "y", "dot", "v1", "v2", "getColumnFrom2DArr", "multiplyTransformMatrices", "size", "buildRotationMatrix", "invertTransformMatrix", "rotatePoint", "anchors", "model", "_a", "_b", "_c", "_d", "anchors", "t", "index", "config", "hand", "scaleBoxCoordinates", "lastTime", "handPoseModel", "_a", "_b", "_c", "xs", "ys", "rotatePoint", "enlargeBox", "squarifyBox", "getBoxSize", "buildRotationMatrix", "invertTransformMatrix", "getBoxCenter", "dot", "config", "computeRotation", "meshAnnotations", "predict", "config", "annotations", "index", "load", "_a", "_b", "models", "inputSize", "skipped", "lastTime", "cache", "loadDetect", "config", "_a", "config", "models", "t", "ratio", "id", "hand", "inputSize", "kpt", "index", "predict", "_a", "_b", "skipped", "lastTime", "cache", "connected", "kpt", "calc", "config", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_q", "_r", "_s", "_u", "_v", "_w", "t0", "annotations", "kp", "t1", "model", "load", "config", "predict", "_a", "t", "options", "clamp", "index", "models_exports", "cache", "body", "kp", "compare", "inputSize", "_a", "_b", "t", "outputSize", "kpt", "model", "inputSize", "skipped", "cache", "load", "config", "_a", "kpt", "id", "annotations", "connected", "kp", "body", "predict", "t", "model", "last", "lastTime", "skipped", "inputSize", "load", "config", "process", "_a", "_b", "id", "size", "labels", "cx", "y", "predict", "outputSize", "y", "maxSize", "t", "outputStride", "y1", "x1", "y2", "x2", "dx", "model", "point", "height", "width", "minConfidence", "y", "_a", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "rgb", "predict", "model", "load", "config", "predict", "_a", "t", "model", "_a", "_b", "op", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_q", "_r", "_s", "_u", "_v", "_w", "_z", "_A", "load", "loadDetect", "models", "join", "_a", "_b", "_c", "_d", "_e", "_f", "id", "face", "person", "body", "hand", "gesture", "y", "face", "body", "res", "face", "body", "canvas", "atob", "_a", "_b", "_c", "_d", "model", "t", "t0", "t1", "_a", "init", "process", "_b", "_c", "predict", "count", "model", "calc", "t0", "t1", "ms", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_q", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] } diff --git a/dist/human.js b/dist/human.js index bad22056..dcf3226f 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4,57 +4,57 @@ author: ' */ -"use strict";var Human=(()=>{var nc=Object.defineProperty;var sS=Object.getOwnPropertyDescriptor;var iS=Object.getOwnPropertyNames;var oS=Object.prototype.hasOwnProperty;var lS=(e,t,a)=>t in e?nc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var Gs=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,a)=>(typeof require!="undefined"?require:t)[a]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var hr=(e,t)=>{for(var a in t)nc(e,a,{get:t[a],enumerable:!0})},uS=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of iS(t))!oS.call(e,r)&&r!==a&&nc(e,r,{get:()=>t[r],enumerable:!(n=sS(t,r))||n.enumerable});return e};var dS=e=>uS(nc({},"__esModule",{value:!0}),e);var le=(e,t,a)=>(lS(e,typeof t!="symbol"?t+"":t,a),a),G5=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var Gn=(e,t,a)=>(G5(e,t,"read from private field"),a?a.call(e):t.get(e)),Go=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a)},$u=(e,t,a,n)=>(G5(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var C0e={};hr(C0e,{Env:()=>xp,Human:()=>S5,default:()=>S5,defaults:()=>yo,draw:()=>i0,empty:()=>or,env:()=>ne,match:()=>_0,models:()=>I5});var Ve={};hr(Ve,{Abs:()=>gl,Acos:()=>yd,Acosh:()=>Ad,AdadeltaOptimizer:()=>Eh,AdagradOptimizer:()=>Rh,AdamOptimizer:()=>Mh,AdamaxOptimizer:()=>$h,Add:()=>vr,AddN:()=>hi,All:()=>yl,Any:()=>Al,ArgMax:()=>fi,ArgMin:()=>xd,Asin:()=>bd,Asinh:()=>vd,Atan:()=>wd,Atan2:()=>xl,Atanh:()=>kd,AvgPool:()=>mi,AvgPool3D:()=>Gc,AvgPool3DGrad:()=>H1,AvgPoolGrad:()=>j1,BackendWasm:()=>_v,BatchMatMul:()=>gi,BatchToSpaceND:()=>bl,Bincount:()=>Uc,BroadcastArgs:()=>jc,BroadcastTo:()=>eT,Cast:()=>yi,Ceil:()=>Qr,ClipByValue:()=>es,Complex:()=>Id,ComplexAbs:()=>Hc,Concat:()=>vl,Conv2D:()=>Ai,Conv2DBackpropFilter:()=>qc,Conv2DBackpropInput:()=>xi,Conv3D:()=>Xc,Conv3DBackpropFilterV2:()=>q1,Conv3DBackpropInputV2:()=>Kc,Cos:()=>bi,Cosh:()=>vi,CropAndResize:()=>Ii,Cumprod:()=>wi,Cumsum:()=>ki,DataStorage:()=>md,DenseBincount:()=>Zc,DepthToSpace:()=>Si,DepthwiseConv2dNative:()=>Ti,DepthwiseConv2dNativeBackpropFilter:()=>Yc,DepthwiseConv2dNativeBackpropInput:()=>Jc,Diag:()=>Qc,Dilation2D:()=>eh,Dilation2DBackpropFilter:()=>Gm,Dilation2DBackpropInput:()=>Vm,ENV:()=>G1,Einsum:()=>Sd,Elu:()=>Ni,EluGrad:()=>X1,Environment:()=>IA,Equal:()=>ts,Erf:()=>Td,Exp:()=>as,ExpandDims:()=>wl,Expm1:()=>Ei,FFT:()=>th,Fill:()=>kl,FlipLeftRight:()=>Ri,Floor:()=>ns,FloorDiv:()=>Mi,FromPixels:()=>Yu,FusedBatchNorm:()=>$i,FusedConv2D:()=>jr,FusedDepthwiseConv2D:()=>Hr,GPGPUContext:()=>el,GatherNd:()=>_i,GatherV2:()=>Il,GraphModel:()=>op,Greater:()=>rs,GreaterEqual:()=>ss,IFFT:()=>ah,Identity:()=>Fi,Imag:()=>Cd,IsFinite:()=>Nd,IsInf:()=>Ed,IsNan:()=>Sl,KernelBackend:()=>fl,LRN:()=>rh,LRNGrad:()=>K1,LeakyRelu:()=>Pi,Less:()=>is,LessEqual:()=>os,LinSpace:()=>nh,Log:()=>ls,Log1p:()=>Rd,LogSoftmax:()=>tT,LogicalAnd:()=>Oi,LogicalNot:()=>Di,LogicalOr:()=>Tl,LogicalXor:()=>TA,LowerBound:()=>aT,MathBackendCPU:()=>Ph,MathBackendWebGL:()=>nu,Max:()=>zi,MaxPool:()=>Li,MaxPool3D:()=>sh,MaxPool3DGrad:()=>Y1,MaxPoolGrad:()=>Z1,MaxPoolWithArgmax:()=>ih,Maximum:()=>us,Mean:()=>Bi,Min:()=>Wi,Minimum:()=>ds,MirrorPad:()=>Vi,Mod:()=>Md,MomentumOptimizer:()=>_h,Multinomial:()=>oh,Multiply:()=>ps,Neg:()=>Cl,NonMaxSuppressionV3:()=>Gi,NonMaxSuppressionV4:()=>Nl,NonMaxSuppressionV5:()=>Ui,NotEqual:()=>cs,OP_SCOPE_SUFFIX:()=>a2,OneHot:()=>Rl,OnesLike:()=>El,Optimizer:()=>vs,OptimizerConstructors:()=>Or,Pack:()=>Ml,PadV2:()=>ji,Pool:()=>nT,Pow:()=>Hi,Prelu:()=>qi,Prod:()=>Xi,RMSPropOptimizer:()=>Fh,RaggedGather:()=>lh,RaggedRange:()=>uh,RaggedTensorToTensor:()=>dh,Range:()=>$l,Rank:()=>Hm,Real:()=>$d,RealDiv:()=>Ci,Reciprocal:()=>_l,Reduction:()=>xa,Relu:()=>Ki,Relu6:()=>Ji,Reshape:()=>Fl,ResizeBilinear:()=>Yi,ResizeBilinearGrad:()=>Q1,ResizeNearestNeighbor:()=>Zi,ResizeNearestNeighborGrad:()=>J1,Reverse:()=>Pl,RotateWithOffset:()=>lo,Round:()=>Ol,Rsqrt:()=>hs,SGDOptimizer:()=>ip,ScatterNd:()=>Qi,SearchSorted:()=>ph,Select:()=>Dl,Selu:()=>_d,Sigmoid:()=>fs,Sign:()=>Fd,Sin:()=>eo,Sinh:()=>Ll,Slice:()=>zl,Softmax:()=>ao,Softplus:()=>Pd,SpaceToBatchND:()=>Bl,SparseFillEmptyRows:()=>Od,SparseReshape:()=>Vl,SparseSegmentMean:()=>Dd,SparseSegmentSum:()=>zd,SparseToDense:()=>Ld,SplitV:()=>Wl,Sqrt:()=>ms,Square:()=>Bd,SquaredDifference:()=>gs,Step:()=>oo,StridedSlice:()=>no,StringNGrams:()=>Gl,StringSplit:()=>Wd,StringToHashBucketFast:()=>Vd,Sub:()=>ys,Sum:()=>to,Tan:()=>Ul,Tanh:()=>ro,Tensor:()=>dt,TensorBuffer:()=>Mt,Tile:()=>As,TopK:()=>so,Transform:()=>io,Transpose:()=>yr,Unique:()=>ch,Unpack:()=>jl,UnsortedSegmentSum:()=>hh,UpperBound:()=>rT,Variable:()=>ed,WebGPUBackend:()=>Uh,ZerosLike:()=>Hl,_FusedMatMul:()=>Ur,abs:()=>Ha,acos:()=>gx,acosh:()=>yx,add:()=>xe,addN:()=>mh,all:()=>Ax,any:()=>xx,argMax:()=>ar,argMin:()=>bx,asin:()=>vx,asinh:()=>wx,atan:()=>kx,atan2:()=>Ix,atanh:()=>Sx,avgPool:()=>w2,avgPool3d:()=>Ex,backend:()=>tr,backend_util:()=>T,basicLSTMCell:()=>Rx,batchNorm:()=>Qd,batchNorm2d:()=>Mx,batchNorm3d:()=>$x,batchNorm4d:()=>_x,batchToSpaceND:()=>k2,bincount:()=>I2,booleanMaskAsync:()=>p4,broadcastArgs:()=>Fx,broadcastTo:()=>ei,broadcast_util:()=>po,browser:()=>wr,buffer:()=>ve,cast:()=>Ue,ceil:()=>Px,clipByValue:()=>Ox,clone:()=>wa,complex:()=>xr,concat:()=>at,concat1d:()=>Dx,concat2d:()=>ql,concat3d:()=>zx,concat4d:()=>Lx,conv1d:()=>Bx,conv2d:()=>ep,conv2dTranspose:()=>Vx,conv3d:()=>Gx,conv3dTranspose:()=>Ux,copyRegisteredKernels:()=>uT,cos:()=>jx,cosh:()=>Hx,cosineWindow:()=>Ih,cumprod:()=>qx,cumsum:()=>Xx,customGrad:()=>Qn,denseBincount:()=>Kx,deprecationWarn:()=>d2,depthToSpace:()=>Zx,depthwiseConv2d:()=>gh,deregisterOp:()=>qF,device_util:()=>Hd,diag:()=>Yx,dilation2d:()=>Jx,disableDeprecationWarnings:()=>DC,dispose:()=>Y,disposeVariables:()=>zC,div:()=>fe,divNoNan:()=>Qx,dot:()=>eb,dropout:()=>g4,einsum:()=>tb,elu:()=>T2,enableDebugMode:()=>OC,enableProdMode:()=>u2,enclosingPowerOfTwo:()=>e3,engine:()=>kt,env:()=>V,equal:()=>S2,erf:()=>ab,euclideanNorm:()=>sb,exp:()=>Xr,expandDims:()=>Gt,expm1:()=>ib,eye:()=>N2,fft:()=>wh,fill:()=>nr,findBackend:()=>p2,findBackendFactory:()=>GC,floor:()=>E2,floorDiv:()=>Yd,forceHalfFloat:()=>Q6,fused:()=>t3,gather:()=>R2,gatherND:()=>m4,gather_util:()=>f2,getBackend:()=>ia,getGradient:()=>Um,getKernel:()=>kc,getKernelsForBackend:()=>Zn,getThreadsCount:()=>ere,gpgpu_util:()=>M6,grad:()=>yR,grads:()=>AR,greater:()=>np,greaterEqual:()=>M2,ifft:()=>id,imag:()=>Zd,image:()=>me,inTopKAsync:()=>y4,io:()=>Hn,irfft:()=>Z2,isFinite:()=>ob,isInf:()=>lb,isNaN:()=>ub,keep:()=>qn,kernel_impls:()=>Tn,leakyRelu:()=>$2,less:()=>db,lessEqual:()=>yh,linalg:()=>S4,linspace:()=>pb,loadGraphModel:()=>i3,loadGraphModelSync:()=>ZP,localResponseNormalization:()=>cb,log:()=>il,log1p:()=>_2,logSigmoid:()=>fb,logSoftmax:()=>mb,logSumExp:()=>P2,logicalAnd:()=>rd,logicalNot:()=>O2,logicalOr:()=>D2,logicalXor:()=>gb,losses:()=>T4,lowerBound:()=>yb,matMul:()=>st,math:()=>JA,max:()=>pa,maxPool:()=>z2,maxPool3d:()=>Ab,maxPoolWithArgmax:()=>xb,maximum:()=>L2,mean:()=>sd,memory:()=>LC,meshgrid:()=>bb,min:()=>qr,minimum:()=>B2,mirrorPad:()=>vb,mod:()=>Xl,moments:()=>wb,movingAverage:()=>c4,mul:()=>ae,multiRNNCell:()=>kb,multinomial:()=>Ib,neg:()=>Xn,nextFrame:()=>E4,norm:()=>ap,notEqual:()=>W2,oneHot:()=>Tc,ones:()=>Br,onesLike:()=>Sb,op:()=>D,outerProduct:()=>Tb,pad:()=>rr,pad1d:()=>Cb,pad2d:()=>Nb,pad3d:()=>Eb,pad4d:()=>Rb,pool:()=>Mb,pow:()=>sl,prelu:()=>G2,print:()=>i2,prod:()=>$b,profile:()=>BC,raggedGather:()=>_b,raggedRange:()=>Fb,raggedTensorToTensor:()=>Pb,rand:()=>Ob,randomGamma:()=>Db,randomNormal:()=>H2,randomStandardNormal:()=>zb,randomUniform:()=>q2,range:()=>ol,ready:()=>Kd,real:()=>rl,reciprocal:()=>Lb,registerBackend:()=>uo,registerGradient:()=>iT,registerKernel:()=>hn,registerOp:()=>HF,relu:()=>rp,relu6:()=>X2,removeBackend:()=>VC,reshape:()=>J,reverse:()=>Kr,reverse1d:()=>Bb,reverse2d:()=>Wb,reverse3d:()=>Vb,reverse4d:()=>Gb,rfft:()=>kh,round:()=>K2,rsqrt:()=>Ub,scalar:()=>Fe,scatterND:()=>h4,scatter_util:()=>m2,searchSorted:()=>xh,selu:()=>jb,separableConv2d:()=>Hb,serialization:()=>px,setBackend:()=>Xd,setPlatform:()=>UC,setThreadsCount:()=>Qne,setWasmPath:()=>Jne,setWasmPaths:()=>Gh,setWebGLContext:()=>Dh,setdiff1dAsync:()=>qb,shared:()=>o3,sigmoid:()=>Da,sign:()=>Xb,signal:()=>I4,sin:()=>Kb,sinh:()=>Zb,slice:()=>_e,slice1d:()=>Yb,slice2d:()=>Jb,slice3d:()=>sp,slice4d:()=>bh,slice_util:()=>At,softmax:()=>vh,softplus:()=>F2,spaceToBatchND:()=>V2,sparse:()=>C4,sparseToDense:()=>f4,spectral:()=>k4,split:()=>ka,sqrt:()=>Jn,square:()=>In,squaredDifference:()=>Y2,squeeze:()=>$e,stack:()=>sa,step:()=>J2,stridedSlice:()=>Qb,string:()=>N4,sub:()=>he,sum:()=>tt,sumOutType:()=>jd,tan:()=>e4,tanh:()=>Nc,tensor:()=>ze,tensor1d:()=>Ut,tensor2d:()=>Kn,tensor3d:()=>h2,tensor4d:()=>t4,tensor5d:()=>a4,tensor6d:()=>n4,tensor_util:()=>RA,test_util:()=>hx,tidy:()=>Ee,tile:()=>Vr,time:()=>WC,topk:()=>r4,train:()=>G_,transpose:()=>si,truncatedNormal:()=>s4,unique:()=>i4,unregisterGradient:()=>lT,unregisterKernel:()=>oT,unsortedSegmentSum:()=>o4,unstack:()=>Ta,upcastType:()=>ra,upperBound:()=>l4,util:()=>v,valueAndGrad:()=>xR,valueAndGrads:()=>bR,variable:()=>u4,variableGrads:()=>hb,version:()=>Ap,version_converter:()=>JP,version_core:()=>b2,version_cpu:()=>sD,version_wasm:()=>tre,version_webgl:()=>jU,webgl:()=>HU,webgl_util:()=>t6,webgpu_util:()=>Ov,where:()=>ii,whereAsync:()=>Q2,zeros:()=>pn,zerosLike:()=>Xa});var pS=Object.create,L1=Object.defineProperty,cS=Object.getOwnPropertyDescriptor,hS=Object.getOwnPropertyNames,fS=Object.getPrototypeOf,mS=Object.prototype.hasOwnProperty,pA=(e=>typeof Gs!="undefined"?Gs:typeof Proxy!="undefined"?new Proxy(e,{get:(t,a)=>(typeof Gs!="undefined"?Gs:t)[a]}):e)(function(e){if(typeof Gs!="undefined")return Gs.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),jt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),He=(e,t)=>{for(var a in t)L1(e,a,{get:t[a],enumerable:!0})},gS=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of hS(t))!mS.call(e,r)&&r!==a&&L1(e,r,{get:()=>t[r],enumerable:!(n=cS(t,r))||n.enumerable});return e},hl=(e,t,a)=>(a=e!=null?pS(fS(e)):{},gS(t||!e||!e.__esModule?L1(a,"default",{value:e,enumerable:!0}):a,e)),yS=jt((e,t)=>{t.exports=n;var a=null;try{a=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(I){}function n(I,E,O){this.low=I|0,this.high=E|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(I){return(I&&I.__isLong__)===!0}n.isLong=r;var s={},i={};function o(I,E){var O,L,B;return E?(I>>>=0,(B=0<=I&&I<256)&&(L=i[I],L)?L:(O=u(I,(I|0)<0?-1:0,!0),B&&(i[I]=O),O)):(I|=0,(B=-128<=I&&I<128)&&(L=s[I],L)?L:(O=u(I,I<0?-1:0,!1),B&&(s[I]=O),O))}n.fromInt=o;function l(I,E){if(isNaN(I))return E?b:x;if(E){if(I<0)return b;if(I>=g)return _}else{if(I<=-y)return $;if(I+1>=y)return N}return I<0?l(-I,E).neg():u(I%m|0,I/m|0,E)}n.fromNumber=l;function u(I,E,O){return new n(I,E,O)}n.fromBits=u;var d=Math.pow;function c(I,E,O){if(I.length===0)throw Error("empty string");if(I==="NaN"||I==="Infinity"||I==="+Infinity"||I==="-Infinity")return x;if(typeof E=="number"?(O=E,E=!1):E=!!E,O=O||10,O<2||360)throw Error("interior hyphen");if(L===0)return c(I.substring(1),E,O).neg();for(var B=l(d(O,8)),G=x,j=0;j>>0:this.low},M.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},M.toString=function(I){if(I=I||10,I<2||36>>0,W=H.toString(I);if(G=U,G.isZero())return W+j;for(;W.length<6;)W="0"+W;j=""+W+j}},M.getHighBits=function(){return this.high},M.getHighBitsUnsigned=function(){return this.high>>>0},M.getLowBits=function(){return this.low},M.getLowBitsUnsigned=function(){return this.low>>>0},M.getNumBitsAbs=function(){if(this.isNegative())return this.eq($)?64:this.neg().getNumBitsAbs();for(var I=this.high!=0?this.high:this.low,E=31;E>0&&(I&1<=0},M.isOdd=function(){return(this.low&1)===1},M.isEven=function(){return(this.low&1)===0},M.equals=function(I){return r(I)||(I=p(I)),this.unsigned!==I.unsigned&&this.high>>>31===1&&I.high>>>31===1?!1:this.high===I.high&&this.low===I.low},M.eq=M.equals,M.notEquals=function(I){return!this.eq(I)},M.neq=M.notEquals,M.ne=M.notEquals,M.lessThan=function(I){return this.comp(I)<0},M.lt=M.lessThan,M.lessThanOrEqual=function(I){return this.comp(I)<=0},M.lte=M.lessThanOrEqual,M.le=M.lessThanOrEqual,M.greaterThan=function(I){return this.comp(I)>0},M.gt=M.greaterThan,M.greaterThanOrEqual=function(I){return this.comp(I)>=0},M.gte=M.greaterThanOrEqual,M.ge=M.greaterThanOrEqual,M.compare=function(I){if(r(I)||(I=p(I)),this.eq(I))return 0;var E=this.isNegative(),O=I.isNegative();return E&&!O?-1:!E&&O?1:this.unsigned?I.high>>>0>this.high>>>0||I.high===this.high&&I.low>>>0>this.low>>>0?-1:1:this.sub(I).isNegative()?-1:1},M.comp=M.compare,M.negate=function(){return!this.unsigned&&this.eq($)?$:this.not().add(w)},M.neg=M.negate,M.add=function(I){r(I)||(I=p(I));var E=this.high>>>16,O=this.high&65535,L=this.low>>>16,B=this.low&65535,G=I.high>>>16,j=I.high&65535,U=I.low>>>16,H=I.low&65535,W=0,Q=0,Z=0,re=0;return re+=B+H,Z+=re>>>16,re&=65535,Z+=L+U,Q+=Z>>>16,Z&=65535,Q+=O+j,W+=Q>>>16,Q&=65535,W+=E+G,W&=65535,u(Z<<16|re,W<<16|Q,this.unsigned)},M.subtract=function(I){return r(I)||(I=p(I)),this.add(I.neg())},M.sub=M.subtract,M.multiply=function(I){if(this.isZero())return x;if(r(I)||(I=p(I)),a){var E=a.mul(this.low,this.high,I.low,I.high);return u(E,a.get_high(),this.unsigned)}if(I.isZero())return x;if(this.eq($))return I.isOdd()?$:x;if(I.eq($))return this.isOdd()?$:x;if(this.isNegative())return I.isNegative()?this.neg().mul(I.neg()):this.neg().mul(I).neg();if(I.isNegative())return this.mul(I.neg()).neg();if(this.lt(A)&&I.lt(A))return l(this.toNumber()*I.toNumber(),this.unsigned);var O=this.high>>>16,L=this.high&65535,B=this.low>>>16,G=this.low&65535,j=I.high>>>16,U=I.high&65535,H=I.low>>>16,W=I.low&65535,Q=0,Z=0,re=0,ee=0;return ee+=G*W,re+=ee>>>16,ee&=65535,re+=B*W,Z+=re>>>16,re&=65535,re+=G*H,Z+=re>>>16,re&=65535,Z+=L*W,Q+=Z>>>16,Z&=65535,Z+=B*H,Q+=Z>>>16,Z&=65535,Z+=G*U,Q+=Z>>>16,Z&=65535,Q+=O*W+L*H+B*U+G*j,Q&=65535,u(re<<16|ee,Q<<16|Z,this.unsigned)},M.mul=M.multiply,M.divide=function(I){if(r(I)||(I=p(I)),I.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&I.low===-1&&I.high===-1)return this;var E=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,I.low,I.high);return u(E,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:x;var O,L,B;if(this.unsigned){if(I.unsigned||(I=I.toUnsigned()),I.gt(this))return b;if(I.gt(this.shru(1)))return S;B=b}else{if(this.eq($)){if(I.eq(w)||I.eq(C))return $;if(I.eq($))return w;var G=this.shr(1);return O=G.div(I).shl(1),O.eq(x)?I.isNegative()?w:C:(L=this.sub(I.mul(O)),B=O.add(L.div(I)),B)}else if(I.eq($))return this.unsigned?b:x;if(this.isNegative())return I.isNegative()?this.neg().div(I.neg()):this.neg().div(I).neg();if(I.isNegative())return this.div(I.neg()).neg();B=x}for(L=this;L.gte(I);){O=Math.max(1,Math.floor(L.toNumber()/I.toNumber()));for(var j=Math.ceil(Math.log(O)/Math.LN2),U=j<=48?1:d(2,j-48),H=l(O),W=H.mul(I);W.isNegative()||W.gt(L);)O-=U,H=l(O,this.unsigned),W=H.mul(I);H.isZero()&&(H=w),B=B.add(H),L=L.sub(W)}return B},M.div=M.divide,M.modulo=function(I){if(r(I)||(I=p(I)),a){var E=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,I.low,I.high);return u(E,a.get_high(),this.unsigned)}return this.sub(this.div(I).mul(I))},M.mod=M.modulo,M.rem=M.modulo,M.not=function(){return u(~this.low,~this.high,this.unsigned)},M.and=function(I){return r(I)||(I=p(I)),u(this.low&I.low,this.high&I.high,this.unsigned)},M.or=function(I){return r(I)||(I=p(I)),u(this.low|I.low,this.high|I.high,this.unsigned)},M.xor=function(I){return r(I)||(I=p(I)),u(this.low^I.low,this.high^I.high,this.unsigned)},M.shiftLeft=function(I){return r(I)&&(I=I.toInt()),(I&=63)===0?this:I<32?u(this.low<>>32-I,this.unsigned):u(0,this.low<>>I|this.high<<32-I,this.high>>I,this.unsigned):u(this.high>>I-32,this.high>=0?0:-1,this.unsigned)},M.shr=M.shiftRight,M.shiftRightUnsigned=function(I){if(r(I)&&(I=I.toInt()),I&=63,I===0)return this;var E=this.high;if(I<32){var O=this.low;return u(O>>>I|E<<32-I,E>>>I,this.unsigned)}else return I===32?u(E,0,this.unsigned):u(E>>>I-32,0,this.unsigned)},M.shru=M.shiftRightUnsigned,M.shr_u=M.shiftRightUnsigned,M.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},M.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},M.toBytes=function(I){return I?this.toBytesLE():this.toBytesBE()},M.toBytesLE=function(){var I=this.high,E=this.low;return[E&255,E>>>8&255,E>>>16&255,E>>>24,I&255,I>>>8&255,I>>>16&255,I>>>24]},M.toBytesBE=function(){var I=this.high,E=this.low;return[I>>>24,I>>>16&255,I>>>8&255,I&255,E>>>24,E>>>16&255,E>>>8&255,E&255]},n.fromBytes=function(I,E,O){return O?n.fromBytesLE(I,E):n.fromBytesBE(I,E)},n.fromBytesLE=function(I,E){return new n(I[0]|I[1]<<8|I[2]<<16|I[3]<<24,I[4]|I[5]<<8|I[6]<<16|I[7]<<24,E)},n.fromBytesBE=function(I,E){return new n(I[4]<<24|I[5]<<16|I[6]<<8|I[7],I[0]<<24|I[1]<<16|I[2]<<8|I[3],E)}}),AS=jt(()=>{}),xS=jt(()=>{}),bS=jt((e,t)=>{(function(a,n,r){function s(u){var d=this,c=l();d.next=function(){var p=2091639*d.s0+d.c*23283064365386963e-26;return d.s0=d.s1,d.s1=d.s2,d.s2=p-(d.c=p|0)},d.c=1,d.s0=c(" "),d.s1=c(" "),d.s2=c(" "),d.s0-=c(u),d.s0<0&&(d.s0+=1),d.s1-=c(u),d.s1<0&&(d.s1+=1),d.s2-=c(u),d.s2<0&&(d.s2+=1),c=null}function i(u,d){return d.c=u.c,d.s0=u.s0,d.s1=u.s1,d.s2=u.s2,d}function o(u,d){var c=new s(u),p=d&&d.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,p&&(typeof p=="object"&&i(p,c),h.state=function(){return i(c,{})}),h}function l(){var u=4022871197,d=function(c){c=String(c);for(var p=0;p>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),vS=jt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var p=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^p^p>>>8},l===(l|0)?u.x=l:d+=l;for(var c=0;c>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,f=(d.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),wS=jt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.next=function(){var p=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(p^p<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:d+=l;for(var c=0;c>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,f=(d.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),kS=jt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,p=u.i,h,f,m;return h=c[p],h^=h>>>7,f=h^h<<24,h=c[p+1&7],f^=h^h>>>10,h=c[p+3&7],f^=h^h>>>3,h=c[p+4&7],f^=h^h<<7,h=c[p+7&7],h=h^h<<13,f^=h^h<<9,c[p]=f,u.i=p+1&7,f};function d(c,p){var h,f,m=[];if(p===(p|0))f=m[0]=p;else for(p=""+p,h=0;h0;--h)c.next()}d(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,f=(d.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},p.int32=d.next,p.quick=p,c&&(c.x&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),IS=jt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.w,p=u.X,h=u.i,f,m;return u.w=c=c+1640531527|0,m=p[h+34&127],f=p[h=h+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=p[h]=m^f,u.i=h,m+(c^c>>>16)|0};function d(c,p){var h,f,m,g,y,A=[],x=128;for(p===(p|0)?(f=p,p=null):(p=p+"\0",f=0,x=Math.max(x,p.length)),m=0,g=-32;g>>15,f^=f<<4,f^=f>>>13,g>=0&&(y=y+1640531527|0,h=A[g&127]^=f+y,m=h==0?m+1:0);for(m>=128&&(A[(p&&p.length||0)&127]=-1),m=127,g=4*128;g>0;--g)f=A[m+34&127],h=A[m=m+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,A[m]=f^h;c.w=y,c.X=A,c.i=m}d(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,f=(d.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},p.int32=d.next,p.quick=p,c&&(c.X&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),SS=jt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.next=function(){var p=u.b,h=u.c,f=u.d,m=u.a;return p=p<<25^p>>>7^h,h=h-f|0,f=f<<24^f>>>8^m,m=m-p|0,u.b=p=p<<20^p>>>12^h,u.c=h=h-f|0,u.d=f<<16^h>>>16^m,u.a=m-p|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):d+=l;for(var c=0;c>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,f=(d.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),TS=jt(()=>{}),CS=jt((e,t)=>{(function(a,n,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),d=r.pow(2,o),c=d*2,p=s-1,h;function f(w,S,C){var N=[];S=S==!0?{entropy:!0}:S||{};var _=A(y(S.entropy?[w,b(n)]:w==null?x():w,3),N),$=new m(N),M=function(){for(var I=$.g(i),E=u,O=0;I=c;)I/=2,E/=2,O>>>=1;return(I+O)/E};return M.int32=function(){return $.g(4)|0},M.quick=function(){return $.g(4)/4294967296},M.double=M,A(b($.S),n),(S.pass||C||function(I,E,O,L){return L&&(L.S&&g(L,$),I.state=function(){return g($,{})}),O?(r[l]=I,E):I})(M,_,"global"in S?S.global:this==r,S.state)}function m(w){var S,C=w.length,N=this,_=0,$=N.i=N.j=0,M=N.S=[];for(C||(w=[C++]);_{var a=bS(),n=vS(),r=wS(),s=kS(),i=IS(),o=SS(),l=CS();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),bc=jt(()=>{}),hA=jt(()=>{}),NS=jt(()=>{}),ES=jt(()=>{}),RS=jt(()=>{}),MS=jt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};function s(){return oe.buffer!=je&&ut(oe.buffer),ct}function i(){return oe.buffer!=je&&ut(oe.buffer),Va}function o(){return oe.buffer!=je&&ut(oe.buffer),Pt}function l(){return oe.buffer!=je&&ut(oe.buffer),ta}function u(){return oe.buffer!=je&&ut(oe.buffer),$a}function d(){return oe.buffer!=je&&ut(oe.buffer),rn}function c(){return oe.buffer!=je&&ut(oe.buffer),_a}var p=typeof r!="undefined"?r:{},h,f;p.ready=new Promise(function(P,q){h=P,f=q});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},p),y=[],A="./this.program",x=(P,q)=>{throw q},b=typeof window=="object",w=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=p.ENVIRONMENT_IS_PTHREAD||!1,N="";function _(P){return p.locateFile?p.locateFile(P,N):N+P}var $,M,I,E;function O(P){P instanceof Ws||H("exiting due to exception: "+P)}if(S){w?N=bc().dirname(N)+"/":N=__dirname+"/";var L,B;typeof pA=="function"&&(L=hA(),B=bc()),$=(q,se)=>(q=B.normalize(q),L.readFileSync(q,se?void 0:"utf8")),I=q=>{var se=$(q,!0);return se.buffer||(se=new Uint8Array(se)),se},M=(q,se,ue)=>{q=B.normalize(q),L.readFile(q,function(Te,Je){Te?ue(Te):se(Je.buffer)})},process.argv.length>1&&(A=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(q){if(!(q instanceof Ws))throw q}),process.on("unhandledRejection",function(q){throw q}),x=(q,se)=>{if(xn())throw process.exitCode=q,se;O(se),process.exit(q)},p.inspect=function(){return"[Emscripten Module object]"};let P;try{P=NS()}catch(q){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),q}global.Worker=P.Worker}else(b||w)&&(w?N=self.location.href:typeof document!="undefined"&&document.currentScript&&(N=document.currentScript.src),typeof n!="undefined"&&n&&(N=n),N.indexOf("blob:")!==0?N=N.substr(0,N.replace(/[?#].*/,"").lastIndexOf("/")+1):N="",S||($=P=>{var q=new XMLHttpRequest;return q.open("GET",P,!1),q.send(null),q.responseText},w&&(I=P=>{var q=new XMLHttpRequest;return q.open("GET",P,!1),q.responseType="arraybuffer",q.send(null),new Uint8Array(q.response)}),M=(P,q,se)=>{var ue=new XMLHttpRequest;ue.open("GET",P,!0),ue.responseType="arraybuffer",ue.onload=()=>{if(ue.status==200||ue.status==0&&ue.response){q(ue.response);return}se()},ue.onerror=se,ue.send(null)}),E=P=>document.title=P);S&&typeof performance=="undefined"&&(global.performance=ES().performance);var G=console.log.bind(console),j=console.warn.bind(console);S&&(G=P=>L.writeSync(1,P+` -`),j=P=>L.writeSync(2,P+` -`));var U=p.print||G,H=p.printErr||j;Object.assign(p,g),g=null,p.arguments&&(y=p.arguments),p.thisProgram&&(A=p.thisProgram),p.quit&&(x=p.quit);var W=4,Q=Atomics.load,Z=Atomics.store,re=Atomics.compareExchange,ee;p.wasmBinary&&(ee=p.wasmBinary);var pe=p.noExitRuntime||!0;typeof WebAssembly!="object"&&Oo("no native wasm support detected");var oe,ye,we=!1,Ne;function Ge(P,q){P||Oo(q)}var Xe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function nt(P,q,se){for(var ue=q+se,Te=q;P[Te]&&!(Te>=ue);)++Te;if(Te-q>16&&P.buffer&&Xe)return Xe.decode(P.buffer instanceof SharedArrayBuffer?P.slice(q,Te):P.subarray(q,Te));for(var Je="";q>10,56320|on&1023)}}return Je}function lt(P,q){return P?nt(i(),P,q):""}function et(P,q,se,ue){if(!(ue>0))return 0;for(var Te=se,Je=se+ue-1,Pe=0;Pe=55296&&Le<=57343){var Dt=P.charCodeAt(++Pe);Le=65536+((Le&1023)<<10)|Dt&1023}if(Le<=127){if(se>=Je)break;q[se++]=Le}else if(Le<=2047){if(se+1>=Je)break;q[se++]=192|Le>>6,q[se++]=128|Le&63}else if(Le<=65535){if(se+2>=Je)break;q[se++]=224|Le>>12,q[se++]=128|Le>>6&63,q[se++]=128|Le&63}else{if(se+3>=Je)break;q[se++]=240|Le>>18,q[se++]=128|Le>>12&63,q[se++]=128|Le>>6&63,q[se++]=128|Le&63}}return q[se]=0,se-Te}function rt(P,q,se){return et(P,i(),q,se)}var je,ct,Va,Pt,nn,ta,$a,rn,_a;C&&(je=p.buffer);function ut(P){je=P,p.HEAP8=ct=new Int8Array(P),p.HEAP16=Pt=new Int16Array(P),p.HEAP32=ta=new Int32Array(P),p.HEAPU8=Va=new Uint8Array(P),p.HEAPU16=nn=new Uint16Array(P),p.HEAPU32=$a=new Uint32Array(P),p.HEAPF32=rn=new Float32Array(P),p.HEAPF64=_a=new Float64Array(P)}var Fa=p.INITIAL_MEMORY||16777216;if(C)oe=p.wasmMemory,je=p.buffer;else if(p.wasmMemory)oe=p.wasmMemory;else if(oe=new WebAssembly.Memory({initial:Fa/65536,maximum:32768,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw H("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"),S&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");oe&&(je=oe.buffer),Fa=je.byteLength,ut(je);var Ga,ur=[],_o=[],Vn=[],ku=!1;function xn(){return pe}function Fo(){if(p.preRun)for(typeof p.preRun=="function"&&(p.preRun=[p.preRun]);p.preRun.length;)U0(p.preRun.shift());Cu(ur)}function qt(){ku=!0,!C&&Cu(_o)}function Mp(){if(!C){if(p.postRun)for(typeof p.postRun=="function"&&(p.postRun=[p.postRun]);p.postRun.length;)T5(p.postRun.shift());Cu(Vn)}}function U0(P){ur.unshift(P)}function j0(P){_o.unshift(P)}function T5(P){Vn.unshift(P)}var _r=0,Po=null,dr=null;function C5(P){_r++,p.monitorRunDependencies&&p.monitorRunDependencies(_r)}function N5(P){if(_r--,p.monitorRunDependencies&&p.monitorRunDependencies(_r),_r==0&&(Po!==null&&(clearInterval(Po),Po=null),dr)){var q=dr;dr=null,q()}}function Oo(P){C?postMessage({cmd:"onAbort",arg:P}):p.onAbort&&p.onAbort(P),P="Aborted("+P+")",H(P),we=!0,Ne=1,P+=". Build with -sASSERTIONS for more info.";var q=new WebAssembly.RuntimeError(P);throw f(q),q}var H0="data:application/octet-stream;base64,";function $p(P){return P.startsWith(H0)}function Iu(P){return P.startsWith("file://")}var ya;ya="tfjs-backend-wasm-threaded-simd.wasm",$p(ya)||(ya=_(ya));function _p(P){try{if(P==ya&&ee)return new Uint8Array(ee);if(I)return I(P);throw"both async and sync fetching of the wasm failed"}catch(q){Oo(q)}}function q0(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Iu(ya))return fetch(ya,{credentials:"same-origin"}).then(function(P){if(!P.ok)throw"failed to load wasm binary file at '"+ya+"'";return P.arrayBuffer()}).catch(function(){return _p(ya)});if(M)return new Promise(function(P,q){M(ya,function(se){P(new Uint8Array(se))},q)})}return Promise.resolve().then(function(){return _p(ya)})}function X0(){var P={env:jp,wasi_snapshot_preview1:jp};function q(Pe,Le){var Dt=Pe.exports;if(p.asm=Dt,rf(p.asm._emscripten_tls_init),Ga=p.asm.__indirect_function_table,j0(p.asm.__wasm_call_ctors),ye=Le,!C){var on=De.unusedWorkers.length;De.unusedWorkers.forEach(function(cr){De.loadWasmModuleToWorker(cr,function(){--on||N5("wasm-instantiate")})})}}C||C5("wasm-instantiate");function se(Pe){q(Pe.instance,Pe.module)}function ue(Pe){return q0().then(function(Le){return WebAssembly.instantiate(Le,P)}).then(function(Le){return Le}).then(Pe,function(Le){H("failed to asynchronously prepare wasm: "+Le),Oo(Le)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!$p(ya)&&!Iu(ya)&&!S&&typeof fetch=="function"?fetch(ya,{credentials:"same-origin"}).then(function(Pe){var Le=WebAssembly.instantiateStreaming(Pe,P);return Le.then(se,function(Dt){return H("wasm streaming compile failed: "+Dt),H("falling back to ArrayBuffer instantiation"),ue(se)})}):ue(se)}if(p.instantiateWasm)try{var Je=p.instantiateWasm(P,q);return Je}catch(Pe){H("Module.instantiateWasm callback failed with error: "+Pe),f(Pe)}return Te().catch(f),{}}var K0,E5,Z0={};function Ws(P){this.name="ExitStatus",this.message="Program terminated with exit("+P+")",this.status=P}function Y0(P){var q=De.pthreads[P];delete De.pthreads[P],q.terminate(),Cm(P),De.runningWorkers.splice(De.runningWorkers.indexOf(q),1),q.pthread_ptr=0}function J0(P){var q=De.pthreads[P];q.postMessage({cmd:"cancel"})}function Su(P){var q=De.pthreads[P];Ge(q),De.returnWorkerToPool(q)}function Fp(P){var q=De.getNewWorker();if(!q)return 6;De.runningWorkers.push(q),De.pthreads[P.pthread_ptr]=q,q.pthread_ptr=P.pthread_ptr;var se={cmd:"run",start_routine:P.startRoutine,arg:P.arg,pthread_ptr:P.pthread_ptr};return q.runPthread=()=>{se.time=performance.now(),q.postMessage(se,P.transferList)},q.loaded&&(q.runPthread(),delete q.runPthread),0}var Pp={varargs:void 0,get:function(){Pp.varargs+=4;var P=l()[Pp.varargs-4>>2];return P},getStr:function(P){var q=lt(P);return q}};function Tu(P){if(C)return Fr(1,1,P);Ne=P,xn()||(De.terminateAllThreads(),p.onExit&&p.onExit(P),we=!0),x(P,new Ws(P))}function R5(P,q){if(Ne=P,!q&&C)throw Dp(P),"unwind";Tu(P)}var Op=R5;function Q0(P){if(P instanceof Ws||P=="unwind")return Ne;x(1,P)}var De={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?De.initWorker():De.initMainThread()},initMainThread:function(){for(var P=8;P--;)De.allocateUnusedWorker()},initWorker:function(){pe=!1},setExitStatus:function(P){Ne=P},terminateAllThreads:function(){for(var P of Object.values(De.pthreads))De.returnWorkerToPool(P);for(var P of De.unusedWorkers)P.terminate();De.unusedWorkers=[]},returnWorkerToPool:function(P){var q=P.pthread_ptr;delete De.pthreads[q],De.unusedWorkers.push(P),De.runningWorkers.splice(De.runningWorkers.indexOf(P),1),P.pthread_ptr=0,Cm(q)},receiveObjectTransfer:function(P){},threadInitTLS:function(){De.tlsInitFunctions.forEach(P=>P())},loadWasmModuleToWorker:function(P,q){P.onmessage=se=>{var ue=se.data,Te=ue.cmd;if(P.pthread_ptr&&(De.currentProxiedOperationCallerThread=P.pthread_ptr),ue.targetThread&&ue.targetThread!=Yp()){var Je=De.pthreads[ue.targetThread];Je?Je.postMessage(ue,ue.transferList):H('Internal error! Worker sent a message "'+Te+'" to target pthread '+ue.targetThread+", but that thread no longer exists!"),De.currentProxiedOperationCallerThread=void 0;return}Te==="processProxyingQueue"?Nu(ue.queue):Te==="spawnThread"?Fp(ue):Te==="cleanupThread"?Su(ue.thread):Te==="killThread"?Y0(ue.thread):Te==="cancelThread"?J0(ue.thread):Te==="loaded"?(P.loaded=!0,q&&q(P),P.runPthread&&(P.runPthread(),delete P.runPthread)):Te==="print"?U("Thread "+ue.threadId+": "+ue.text):Te==="printErr"?H("Thread "+ue.threadId+": "+ue.text):Te==="alert"?alert("Thread "+ue.threadId+": "+ue.text):ue.target==="setimmediate"?P.postMessage(ue):Te==="onAbort"?p.onAbort&&p.onAbort(ue.arg):Te&&H("worker sent an unknown command "+Te),De.currentProxiedOperationCallerThread=void 0},P.onerror=se=>{var ue="worker sent an error!";throw H(ue+" "+se.filename+":"+se.lineno+": "+se.message),se},S&&(P.on("message",function(se){P.onmessage({data:se})}),P.on("error",function(se){P.onerror(se)}),P.on("detachedExit",function(){})),P.postMessage({cmd:"load",urlOrBlob:p.mainScriptUrlOrBlob||n,wasmMemory:oe,wasmModule:ye})},allocateUnusedWorker:function(){var P=_("tfjs-backend-wasm-threaded-simd.worker.js");De.unusedWorkers.push(new Worker(P))},getNewWorker:function(){return De.unusedWorkers.length==0&&(De.allocateUnusedWorker(),De.loadWasmModuleToWorker(De.unusedWorkers[0])),De.unusedWorkers.pop()}};p.PThread=De;function Cu(P){for(;P.length>0;)P.shift()(p)}function ef(P){var q=Nm(),se=P();return Jp(q),se}function M5(P){return P}function $5(P){var q=/\b_Z[\w\d_]+/g;return P.replace(q,function(se){var ue=se;return se===ue?se:ue+" ["+se+"]"})}function tf(){var P=Yp(),q=l()[P+44>>2],se=l()[P+48>>2],ue=q-se;L5(q,ue),Jp(q)}p.establishStackSpace=tf;function Dp(P){if(C)return Fr(2,0,P);try{Op(P)}catch(q){Q0(q)}}var Do=[];function af(P){var q=Do[P];return q||(P>=Do.length&&(Do.length=P+1),Do[P]=q=Ga.get(P)),q}function nf(P,q){var se=af(P)(q);xn()?De.setExitStatus(se):z5(se)}p.invokeEntryPoint=nf;function _5(){var P=new Error;if(!P.stack){try{throw new Error}catch(q){P=q}if(!P.stack)return"(no stack trace available)"}return P.stack.toString()}function rf(P){De.tlsInitFunctions.push(P)}function sf(P,q){s().set(P,q)}function of(P){P5(P,!w,1,!b),De.threadInitTLS()}function lf(P){C?postMessage({cmd:"cleanupThread",thread:P}):Su(P)}function zp(P,q,se,ue){return C?Fr(3,1,P,q,se,ue):Lp(P,q,se,ue)}function Lp(P,q,se,ue){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Te=[],Je=0;if(C&&(Te.length===0||Je))return zp(P,q,se,ue);if(Je)return Je;var Pe={startRoutine:se,pthread_ptr:P,arg:ue,transferList:Te};return C?(Pe.cmd="spawnThread",postMessage(Pe,Te),0):Fp(Pe)}function uf(){return 2097152}var df=!0;function pf(){return df}function Nu(P){Atomics.store(l(),P>>2,1),Yp()&&D5(P),Atomics.compareExchange(l(),P>>2,1,0)}p.executeNotifiedProxyingQueue=Nu;function cf(P,q,se,ue){if(P==q)setTimeout(()=>Nu(ue));else if(C)postMessage({targetThread:P,cmd:"processProxyingQueue",queue:ue});else{var Te=De.pthreads[P];if(!Te)return;Te.postMessage({cmd:"processProxyingQueue",queue:ue})}return 1}function hf(P,q,se){return-1}function ff(){Oo("")}function Vs(P){Vs.shown||(Vs.shown={}),Vs.shown[P]||(Vs.shown[P]=1,S&&(P="warning: "+P),H(P))}function mf(){S||w||Vs("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function gf(){return Date.now()}function Bp(){return 2147483648}function yf(){return Bp()}var zo;S?zo=()=>{var P=process.hrtime();return P[0]*1e3+P[1]/1e6}:C?zo=()=>performance.now()-p.__performance_now_clock_drift:zo=()=>performance.now();function Af(P,q,se){i().copyWithin(P,q,q+se)}function xf(){return S?RS().cpus().length:navigator.hardwareConcurrency}function Fr(P,q){var se=arguments.length-2,ue=arguments;return ef(()=>{for(var Te=se,Je=Qp(Te*8),Pe=Je>>3,Le=0;Le>3,Te=0;Te>>16),ut(oe.buffer),1}catch(q){}}function wf(P){var q=i().length;if(P=P>>>0,P<=q)return!1;var se=Bp();if(P>se)return!1;let ue=(Dt,on)=>Dt+(on-Dt%on)%on;for(var Te=1;Te<=4;Te*=2){var Je=q*(1+.2/Te);Je=Math.min(Je,P+100663296);var Pe=Math.min(se,ue(Math.max(P,Je),65536)),Le=vf(Pe);if(Le)return!0}return!1}function kf(){throw"unwind"}function Wp(P){return C?Fr(4,1,P):52}function Vp(P,q,se,ue,Te){return C?Fr(5,1,P,q,se,ue,Te):70}var If=[null,[],[]];function Sf(P,q){var se=If[P];q===0||q===10?((P===1?U:H)(nt(se,0)),se.length=0):se.push(q)}function Gp(P,q,se,ue){if(C)return Fr(6,1,P,q,se,ue);for(var Te=0,Je=0;Je>2],Le=u()[q+4>>2];q+=8;for(var Dt=0;Dt>2]=Te,0}function Up(P){var q=p["_"+P];return q}function Tf(P,q,se,ue,Te){var Je={string:ln=>{var Vo=0;if(ln!=null&&ln!==0){var V5=(ln.length<<2)+1;Vo=Qp(V5),rt(ln,Vo,V5)}return Vo},array:ln=>{var Vo=Qp(ln.length);return sf(ln,Vo),Vo}};function Pe(ln){return q==="string"?lt(ln):q==="boolean"?Boolean(ln):ln}var Le=Up(P),Dt=[],on=0;if(ue)for(var cr=0;crPe==="number"||Pe==="boolean"),Je=q!=="string";return Je&&Te&&!ue?Up(P):function(){return Tf(P,q,se,arguments,ue)}}De.init();var Nf=[null,Tu,Dp,zp,Wp,Vp,Gp],jp={__emscripten_init_main_thread_js:of,__emscripten_thread_cleanup:lf,__pthread_create_js:Lp,_emscripten_default_pthread_stack_size:uf,_emscripten_get_now_is_monotonic:pf,_emscripten_notify_task_queue:cf,_emscripten_set_offscreencanvas_size:hf,abort:ff,emscripten_check_blocking_allowed:mf,emscripten_date_now:gf,emscripten_get_heap_max:yf,emscripten_get_now:zo,emscripten_memcpy_big:Af,emscripten_num_logical_cores:xf,emscripten_receive_on_main_thread_js:bf,emscripten_resize_heap:wf,emscripten_unwind_to_js_event_loop:kf,exit:Op,fd_close:Wp,fd_seek:Vp,fd_write:Gp,memory:oe||p.wasmMemory},F5=X0(),Ef=p.___wasm_call_ctors=function(){return(Ef=p.___wasm_call_ctors=p.asm.__wasm_call_ctors).apply(null,arguments)},Rf=p._init=function(){return(Rf=p._init=p.asm.init).apply(null,arguments)},Mf=p._init_with_threads_count=function(){return(Mf=p._init_with_threads_count=p.asm.init_with_threads_count).apply(null,arguments)},$f=p._get_threads_count=function(){return($f=p._get_threads_count=p.asm.get_threads_count).apply(null,arguments)},_f=p._register_tensor=function(){return(_f=p._register_tensor=p.asm.register_tensor).apply(null,arguments)},Ff=p._dispose_data=function(){return(Ff=p._dispose_data=p.asm.dispose_data).apply(null,arguments)},Pf=p._dispose=function(){return(Pf=p._dispose=p.asm.dispose).apply(null,arguments)},Of=p._Abs=function(){return(Of=p._Abs=p.asm.Abs).apply(null,arguments)},Df=p._Add=function(){return(Df=p._Add=p.asm.Add).apply(null,arguments)},zf=p._AddN=function(){return(zf=p._AddN=p.asm.AddN).apply(null,arguments)},Lf=p._All=function(){return(Lf=p._All=p.asm.All).apply(null,arguments)},Bf=p._Any=function(){return(Bf=p._Any=p.asm.Any).apply(null,arguments)},Wf=p._ArgMax=function(){return(Wf=p._ArgMax=p.asm.ArgMax).apply(null,arguments)},Vf=p._AvgPool=function(){return(Vf=p._AvgPool=p.asm.AvgPool).apply(null,arguments)},Gf=p._BatchMatMul=function(){return(Gf=p._BatchMatMul=p.asm.BatchMatMul).apply(null,arguments)},Uf=p._Ceil=function(){return(Uf=p._Ceil=p.asm.Ceil).apply(null,arguments)},jf=p._ClipByValue=function(){return(jf=p._ClipByValue=p.asm.ClipByValue).apply(null,arguments)},Hf=p._Conv2D=function(){return(Hf=p._Conv2D=p.asm.Conv2D).apply(null,arguments)},qf=p._Conv2DBackpropInput=function(){return(qf=p._Conv2DBackpropInput=p.asm.Conv2DBackpropInput).apply(null,arguments)},Xf=p._Cos=function(){return(Xf=p._Cos=p.asm.Cos).apply(null,arguments)},Kf=p._Cosh=function(){return(Kf=p._Cosh=p.asm.Cosh).apply(null,arguments)},Zf=p._CropAndResize=function(){return(Zf=p._CropAndResize=p.asm.CropAndResize).apply(null,arguments)},Yf=p._Cumprod=function(){return(Yf=p._Cumprod=p.asm.Cumprod).apply(null,arguments)},Jf=p._Cumsum=function(){return(Jf=p._Cumsum=p.asm.Cumsum).apply(null,arguments)},Qf=p._DepthToSpace=function(){return(Qf=p._DepthToSpace=p.asm.DepthToSpace).apply(null,arguments)},em=p._DepthwiseConv2dNative=function(){return(em=p._DepthwiseConv2dNative=p.asm.DepthwiseConv2dNative).apply(null,arguments)},tm=p._Elu=function(){return(tm=p._Elu=p.asm.Elu).apply(null,arguments)},am=p._Equal=function(){return(am=p._Equal=p.asm.Equal).apply(null,arguments)},nm=p._Exp=function(){return(nm=p._Exp=p.asm.Exp).apply(null,arguments)},rm=p._FlipLeftRight=function(){return(rm=p._FlipLeftRight=p.asm.FlipLeftRight).apply(null,arguments)},sm=p._Floor=function(){return(sm=p._Floor=p.asm.Floor).apply(null,arguments)},im=p._FloorDiv=function(){return(im=p._FloorDiv=p.asm.FloorDiv).apply(null,arguments)},om=p._FusedBatchNorm=function(){return(om=p._FusedBatchNorm=p.asm.FusedBatchNorm).apply(null,arguments)},lm=p._FusedConv2D=function(){return(lm=p._FusedConv2D=p.asm.FusedConv2D).apply(null,arguments)},um=p._FusedDepthwiseConv2D=function(){return(um=p._FusedDepthwiseConv2D=p.asm.FusedDepthwiseConv2D).apply(null,arguments)},dm=p._Gather=function(){return(dm=p._Gather=p.asm.Gather).apply(null,arguments)},pm=p._GatherNd=function(){return(pm=p._GatherNd=p.asm.GatherNd).apply(null,arguments)},cm=p._Greater=function(){return(cm=p._Greater=p.asm.Greater).apply(null,arguments)},hm=p._GreaterEqual=function(){return(hm=p._GreaterEqual=p.asm.GreaterEqual).apply(null,arguments)},fm=p._LeakyRelu=function(){return(fm=p._LeakyRelu=p.asm.LeakyRelu).apply(null,arguments)},mm=p._Less=function(){return(mm=p._Less=p.asm.Less).apply(null,arguments)},gm=p._LessEqual=function(){return(gm=p._LessEqual=p.asm.LessEqual).apply(null,arguments)},ym=p._Log=function(){return(ym=p._Log=p.asm.Log).apply(null,arguments)},Am=p._LogicalAnd=function(){return(Am=p._LogicalAnd=p.asm.LogicalAnd).apply(null,arguments)},xm=p._LogicalNot=function(){return(xm=p._LogicalNot=p.asm.LogicalNot).apply(null,arguments)},bm=p._LogicalOr=function(){return(bm=p._LogicalOr=p.asm.LogicalOr).apply(null,arguments)},vm=p._LogicalXor=function(){return(vm=p._LogicalXor=p.asm.LogicalXor).apply(null,arguments)},wm=p._Max=function(){return(wm=p._Max=p.asm.Max).apply(null,arguments)},Hp=p._MaxPool=function(){return(Hp=p._MaxPool=p.asm.MaxPool).apply(null,arguments)},qp=p._Maximum=function(){return(qp=p._Maximum=p.asm.Maximum).apply(null,arguments)},Ru=p._Mean=function(){return(Ru=p._Mean=p.asm.Mean).apply(null,arguments)},km=p._Min=function(){return(km=p._Min=p.asm.Min).apply(null,arguments)},Im=p._Minimum=function(){return(Im=p._Minimum=p.asm.Minimum).apply(null,arguments)},Lo=p._MirrorPad=function(){return(Lo=p._MirrorPad=p.asm.MirrorPad).apply(null,arguments)},Xp=p._Multiply=function(){return(Xp=p._Multiply=p.asm.Multiply).apply(null,arguments)},Bo=p._Neg=function(){return(Bo=p._Neg=p.asm.Neg).apply(null,arguments)},Wo=p._NonMaxSuppressionV3=function(){return(Wo=p._NonMaxSuppressionV3=p.asm.NonMaxSuppressionV3).apply(null,arguments)},Sm=p._NonMaxSuppressionV4=function(){return(Sm=p._NonMaxSuppressionV4=p.asm.NonMaxSuppressionV4).apply(null,arguments)},X=p._NonMaxSuppressionV5=function(){return(X=p._NonMaxSuppressionV5=p.asm.NonMaxSuppressionV5).apply(null,arguments)},ie=p._NotEqual=function(){return(ie=p._NotEqual=p.asm.NotEqual).apply(null,arguments)},ke=p._OneHot=function(){return(ke=p._OneHot=p.asm.OneHot).apply(null,arguments)},Ze=p._PadV2=function(){return(Ze=p._PadV2=p.asm.PadV2).apply(null,arguments)},xt=p._Pow=function(){return(xt=p._Pow=p.asm.Pow).apply(null,arguments)},bt=p._Prelu=function(){return(bt=p._Prelu=p.asm.Prelu).apply(null,arguments)},Ke=p._Prod=function(){return(Ke=p._Prod=p.asm.Prod).apply(null,arguments)},qe=p._RealDiv=function(){return(qe=p._RealDiv=p.asm.RealDiv).apply(null,arguments)},Ot=p._Relu=function(){return(Ot=p._Relu=p.asm.Relu).apply(null,arguments)},sn=p._Relu6=function(){return(sn=p._Relu6=p.asm.Relu6).apply(null,arguments)},pr=p._ResizeBilinear=function(){return(pr=p._ResizeBilinear=p.asm.ResizeBilinear).apply(null,arguments)},Kp=p._ResizeNearestNeighbor=function(){return(Kp=p._ResizeNearestNeighbor=p.asm.ResizeNearestNeighbor).apply(null,arguments)},Mu=p._Reverse=function(){return(Mu=p._Reverse=p.asm.Reverse).apply(null,arguments)},Tm=p._RotateWithOffset=function(){return(Tm=p._RotateWithOffset=p.asm.RotateWithOffset).apply(null,arguments)},Pa=p._Round=function(){return(Pa=p._Round=p.asm.Round).apply(null,arguments)},Pr=p._Rsqrt=function(){return(Pr=p._Rsqrt=p.asm.Rsqrt).apply(null,arguments)},Zp=p._ScatterNd=function(){return(Zp=p._ScatterNd=p.asm.ScatterNd).apply(null,arguments)},TI=p._SelectV2=function(){return(TI=p._SelectV2=p.asm.SelectV2).apply(null,arguments)},CI=p._Sigmoid=function(){return(CI=p._Sigmoid=p.asm.Sigmoid).apply(null,arguments)},NI=p._Sin=function(){return(NI=p._Sin=p.asm.Sin).apply(null,arguments)},EI=p._Softmax=function(){return(EI=p._Softmax=p.asm.Softmax).apply(null,arguments)},RI=p._SparseFillEmptyRows=function(){return(RI=p._SparseFillEmptyRows=p.asm.SparseFillEmptyRows).apply(null,arguments)},MI=p._SparseReshape=function(){return(MI=p._SparseReshape=p.asm.SparseReshape).apply(null,arguments)},$I=p._SparseSegmentReduction=function(){return($I=p._SparseSegmentReduction=p.asm.SparseSegmentReduction).apply(null,arguments)},_I=p._Sqrt=function(){return(_I=p._Sqrt=p.asm.Sqrt).apply(null,arguments)},FI=p._Square=function(){return(FI=p._Square=p.asm.Square).apply(null,arguments)},PI=p._SquaredDifference=function(){return(PI=p._SquaredDifference=p.asm.SquaredDifference).apply(null,arguments)},OI=p._Step=function(){return(OI=p._Step=p.asm.Step).apply(null,arguments)},DI=p._StridedSlice=function(){return(DI=p._StridedSlice=p.asm.StridedSlice).apply(null,arguments)},zI=p._Sub=function(){return(zI=p._Sub=p.asm.Sub).apply(null,arguments)},LI=p._Sum=function(){return(LI=p._Sum=p.asm.Sum).apply(null,arguments)},BI=p._Tan=function(){return(BI=p._Tan=p.asm.Tan).apply(null,arguments)},WI=p._Tanh=function(){return(WI=p._Tanh=p.asm.Tanh).apply(null,arguments)},VI=p._Tile=function(){return(VI=p._Tile=p.asm.Tile).apply(null,arguments)},GI=p._TopK=function(){return(GI=p._TopK=p.asm.TopK).apply(null,arguments)},UI=p._Transform=function(){return(UI=p._Transform=p.asm.Transform).apply(null,arguments)},jI=p._Transpose=function(){return(jI=p._Transpose=p.asm.Transpose).apply(null,arguments)},HI=p.__FusedMatMul=function(){return(HI=p.__FusedMatMul=p.asm._FusedMatMul).apply(null,arguments)},qI=p._malloc=function(){return(qI=p._malloc=p.asm.malloc).apply(null,arguments)},XI=p._free=function(){return(XI=p._free=p.asm.free).apply(null,arguments)},KI=p.__emscripten_tls_init=function(){return(KI=p.__emscripten_tls_init=p.asm._emscripten_tls_init).apply(null,arguments)},Yp=p._pthread_self=function(){return(Yp=p._pthread_self=p.asm.pthread_self).apply(null,arguments)},ZI=p.___errno_location=function(){return(ZI=p.___errno_location=p.asm.__errno_location).apply(null,arguments)},P5=p.__emscripten_thread_init=function(){return(P5=p.__emscripten_thread_init=p.asm._emscripten_thread_init).apply(null,arguments)},YI=p.__emscripten_thread_crashed=function(){return(YI=p.__emscripten_thread_crashed=p.asm._emscripten_thread_crashed).apply(null,arguments)},JI=p._emscripten_main_thread_process_queued_calls=function(){return(JI=p._emscripten_main_thread_process_queued_calls=p.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},QI=p._emscripten_main_browser_thread_id=function(){return(QI=p._emscripten_main_browser_thread_id=p.asm.emscripten_main_browser_thread_id).apply(null,arguments)},O5=p._emscripten_run_in_main_runtime_thread_js=function(){return(O5=p._emscripten_run_in_main_runtime_thread_js=p.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},eS=p._emscripten_dispatch_to_thread_=function(){return(eS=p._emscripten_dispatch_to_thread_=p.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},D5=p.__emscripten_proxy_execute_task_queue=function(){return(D5=p.__emscripten_proxy_execute_task_queue=p.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},Cm=p.__emscripten_thread_free_data=function(){return(Cm=p.__emscripten_thread_free_data=p.asm._emscripten_thread_free_data).apply(null,arguments)},z5=p.__emscripten_thread_exit=function(){return(z5=p.__emscripten_thread_exit=p.asm._emscripten_thread_exit).apply(null,arguments)},L5=p._emscripten_stack_set_limits=function(){return(L5=p._emscripten_stack_set_limits=p.asm.emscripten_stack_set_limits).apply(null,arguments)},Nm=p.stackSave=function(){return(Nm=p.stackSave=p.asm.stackSave).apply(null,arguments)},Jp=p.stackRestore=function(){return(Jp=p.stackRestore=p.asm.stackRestore).apply(null,arguments)},Qp=p.stackAlloc=function(){return(Qp=p.stackAlloc=p.asm.stackAlloc).apply(null,arguments)},tS=p.dynCall_iijjiiii=function(){return(tS=p.dynCall_iijjiiii=p.asm.dynCall_iijjiiii).apply(null,arguments)},aS=p.dynCall_jiji=function(){return(aS=p.dynCall_jiji=p.asm.dynCall_jiji).apply(null,arguments)};p.keepRuntimeAlive=xn,p.wasmMemory=oe,p.cwrap=Cf,p.ExitStatus=Ws,p.PThread=De;var ec;dr=function P(){ec||B5(),ec||(dr=P)};function B5(P){if(P=P||y,_r>0)return;if(C){h(p),qt(),postMessage({cmd:"loaded"});return}if(Fo(),_r>0)return;function q(){ec||(ec=!0,p.calledRun=!0,!we&&(qt(),h(p),p.onRuntimeInitialized&&p.onRuntimeInitialized(),Mp()))}p.setStatus?(p.setStatus("Running..."),setTimeout(function(){setTimeout(function(){p.setStatus("")},1),q()},1)):q()}if(p.preInit)for(typeof p.preInit=="function"&&(p.preInit=[p.preInit]);p.preInit.length>0;)p.preInit.pop()();B5();var tc;m&&(tc={uncaughtException:process.listeners("uncaughtException").filter(function(P){return!m.uncaughtException.indexOf(P)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(P){return!m.unhandledRejection.indexOf(P)>-1})});var ac;if(typeof WasmBackendModule!="undefined")ac=WasmBackendModule;else if(typeof r!="undefined")ac=r;else throw new Error("Could not find wasm module in post.js");if(tc){var nS=ac._dispose;ac._dispose=function(){nS(),tc.uncaughtException.forEach(function(P){process.removeListener("uncaughtException",P)}),tc.unhandledRejection.forEach(function(P){process.removeListener("unhandledRejection",P)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=a)}),$S=jt((e,t)=>{t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" -");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}),_S=jt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(X,ie){i=X,o=ie});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),d=[],c="./this.program",p=(X,ie)=>{throw ie},h=typeof window=="object",f=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(X){return s.locateFile?s.locateFile(X,g):g+X}var A,x,b,w;function S(X){X instanceof Po||$("exiting due to exception: "+X)}if(m){f?g=bc().dirname(g)+"/":g=__dirname+"/";var C,N;typeof pA=="function"&&(C=hA(),N=bc()),A=(X,ie)=>(X=N.normalize(X),C.readFileSync(X,ie?void 0:"utf8")),b=X=>{var ie=A(X,!0);return ie.buffer||(ie=new Uint8Array(ie)),ie},x=(X,ie,ke)=>{X=N.normalize(X),C.readFile(X,function(Ze,xt){Ze?ke(Ze):ie(xt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),d=process.argv.slice(2),process.on("uncaughtException",function(X){if(!(X instanceof Po))throw X}),process.on("unhandledRejection",function(X){throw X}),p=(X,ie)=>{if(Va())throw process.exitCode=X,ie;S(ie),process.exit(X)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||f)&&(f?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",A=X=>{var ie=new XMLHttpRequest;return ie.open("GET",X,!1),ie.send(null),ie.responseText},f&&(b=X=>{var ie=new XMLHttpRequest;return ie.open("GET",X,!1),ie.responseType="arraybuffer",ie.send(null),new Uint8Array(ie.response)}),x=(X,ie,ke)=>{var Ze=new XMLHttpRequest;Ze.open("GET",X,!0),Ze.responseType="arraybuffer",Ze.onload=()=>{if(Ze.status==200||Ze.status==0&&Ze.response){ie(Ze.response);return}ke()},Ze.onerror=ke,Ze.send(null)},w=X=>document.title=X);var _=s.print||console.log.bind(console),$=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(d=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(p=s.quit);var M=4,I;s.wasmBinary&&(I=s.wasmBinary);var E=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Vn("no native wasm support detected");var O,L=!1,B;function G(X,ie){X||Vn(ie)}var j=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(X,ie,ke){for(var Ze=ie+ke,xt=ie;X[xt]&&!(xt>=Ze);)++xt;if(xt-ie>16&&X.buffer&&j)return j.decode(X.subarray(ie,xt));for(var bt="";ie>10,56320|sn&1023)}}return bt}function H(X,ie){return X?U(ee,X,ie):""}function W(X,ie,ke,Ze){if(!(Ze>0))return 0;for(var xt=ke,bt=ke+Ze-1,Ke=0;Ke=55296&&qe<=57343){var Ot=X.charCodeAt(++Ke);qe=65536+((qe&1023)<<10)|Ot&1023}if(qe<=127){if(ke>=bt)break;ie[ke++]=qe}else if(qe<=2047){if(ke+1>=bt)break;ie[ke++]=192|qe>>6,ie[ke++]=128|qe&63}else if(qe<=65535){if(ke+2>=bt)break;ie[ke++]=224|qe>>12,ie[ke++]=128|qe>>6&63,ie[ke++]=128|qe&63}else{if(ke+3>=bt)break;ie[ke++]=240|qe>>18,ie[ke++]=128|qe>>12&63,ie[ke++]=128|qe>>6&63,ie[ke++]=128|qe&63}}return ie[ke]=0,ke-xt}function Q(X,ie,ke){return W(X,ee,ie,ke)}var Z,re,ee,pe,oe,ye,we,Ne,Ge;function Xe(X){Z=X,s.HEAP8=re=new Int8Array(X),s.HEAP16=pe=new Int16Array(X),s.HEAP32=ye=new Int32Array(X),s.HEAPU8=ee=new Uint8Array(X),s.HEAPU16=oe=new Uint16Array(X),s.HEAPU32=we=new Uint32Array(X),s.HEAPF32=Ne=new Float32Array(X),s.HEAPF64=Ge=new Float64Array(X)}var nt=s.INITIAL_MEMORY||16777216,lt,et=[],rt=[],je=[],ct=!1;function Va(){return E}function Pt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)$a(s.preRun.shift());dr(et)}function nn(){ct=!0,dr(rt)}function ta(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)_a(s.postRun.shift());dr(je)}function $a(X){et.unshift(X)}function rn(X){rt.unshift(X)}function _a(X){je.unshift(X)}var ut=0,Fa=null,Ga=null;function ur(X){ut++,s.monitorRunDependencies&&s.monitorRunDependencies(ut)}function _o(X){if(ut--,s.monitorRunDependencies&&s.monitorRunDependencies(ut),ut==0&&(Fa!==null&&(clearInterval(Fa),Fa=null),Ga)){var ie=Ga;Ga=null,ie()}}function Vn(X){s.onAbort&&s.onAbort(X),X="Aborted("+X+")",$(X),L=!0,B=1,X+=". Build with -sASSERTIONS for more info.";var ie=new WebAssembly.RuntimeError(X);throw o(ie),ie}var ku="data:application/octet-stream;base64,";function xn(X){return X.startsWith(ku)}function Fo(X){return X.startsWith("file://")}var qt;qt="tfjs-backend-wasm.wasm",xn(qt)||(qt=y(qt));function Mp(X){try{if(X==qt&&I)return new Uint8Array(I);if(b)return b(X);throw"both async and sync fetching of the wasm failed"}catch(ie){Vn(ie)}}function U0(){if(!I&&(h||f)){if(typeof fetch=="function"&&!Fo(qt))return fetch(qt,{credentials:"same-origin"}).then(function(X){if(!X.ok)throw"failed to load wasm binary file at '"+qt+"'";return X.arrayBuffer()}).catch(function(){return Mp(qt)});if(x)return new Promise(function(X,ie){x(qt,function(ke){X(new Uint8Array(ke))},ie)})}return Promise.resolve().then(function(){return Mp(qt)})}function j0(){var X={env:Tu,wasi_snapshot_preview1:Tu};function ie(Ke,qe){var Ot=Ke.exports;s.asm=Ot,O=s.asm.memory,Xe(O.buffer),lt=s.asm.__indirect_function_table,rn(s.asm.__wasm_call_ctors),_o("wasm-instantiate")}ur("wasm-instantiate");function ke(Ke){ie(Ke.instance)}function Ze(Ke){return U0().then(function(qe){return WebAssembly.instantiate(qe,X)}).then(function(qe){return qe}).then(Ke,function(qe){$("failed to asynchronously prepare wasm: "+qe),Vn(qe)})}function xt(){return!I&&typeof WebAssembly.instantiateStreaming=="function"&&!xn(qt)&&!Fo(qt)&&!m&&typeof fetch=="function"?fetch(qt,{credentials:"same-origin"}).then(function(Ke){var qe=WebAssembly.instantiateStreaming(Ke,X);return qe.then(ke,function(Ot){return $("wasm streaming compile failed: "+Ot),$("falling back to ArrayBuffer instantiation"),Ze(ke)})}):Ze(ke)}if(s.instantiateWasm)try{var bt=s.instantiateWasm(X,ie);return bt}catch(Ke){$("Module.instantiateWasm callback failed with error: "+Ke),o(Ke)}return xt().catch(o),{}}var T5,_r;function Po(X){this.name="ExitStatus",this.message="Program terminated with exit("+X+")",this.status=X}function dr(X){for(;X.length>0;)X.shift()(s)}function C5(X){return X}function N5(X){var ie=/\b_Z[\w\d_]+/g;return X.replace(ie,function(ke){var Ze=ke;return ke===Ze?ke:Ze+" ["+ke+"]"})}function Oo(){var X=new Error;if(!X.stack){try{throw new Error}catch(ie){X=ie}if(!X.stack)return"(no stack trace available)"}return X.stack.toString()}function H0(X,ie){re.set(X,ie)}function $p(){Vn("")}function Iu(){return 2147483648}function ya(){return Iu()}function _p(X,ie,ke){ee.copyWithin(X,ie,ie+ke)}function q0(X){try{return O.grow(X-Z.byteLength+65535>>>16),Xe(O.buffer),1}catch(ie){}}function X0(X){var ie=ee.length;X=X>>>0;var ke=Iu();if(X>ke)return!1;let Ze=(Ot,sn)=>Ot+(sn-Ot%sn)%sn;for(var xt=1;xt<=4;xt*=2){var bt=ie*(1+.2/xt);bt=Math.min(bt,X+100663296);var Ke=Math.min(ke,Ze(Math.max(X,bt),65536)),qe=q0(Ke);if(qe)return!0}return!1}var K0={varargs:void 0,get:function(){K0.varargs+=4;var X=ye[K0.varargs-4>>2];return X},getStr:function(X){var ie=H(X);return ie}};function E5(X){return 52}function Z0(X,ie,ke,Ze,xt){return 70}var Ws=[null,[],[]];function Y0(X,ie){var ke=Ws[X];ie===0||ie===10?((X===1?_:$)(U(ke,0)),ke.length=0):ke.push(ie)}function J0(X,ie,ke,Ze){for(var xt=0,bt=0;bt>2],qe=we[ie+4>>2];ie+=8;for(var Ot=0;Ot>2]=xt,0}function Su(X){var ie=s["_"+X];return ie}function Fp(X,ie,ke,Ze,xt){var bt={string:Pa=>{var Pr=0;if(Pa!=null&&Pa!==0){var Zp=(Pa.length<<2)+1;Pr=Ru(Zp),Q(Pa,Pr,Zp)}return Pr},array:Pa=>{var Pr=Ru(Pa.length);return H0(Pa,Pr),Pr}};function Ke(Pa){return ie==="string"?H(Pa):ie==="boolean"?Boolean(Pa):Pa}var qe=Su(X),Ot=[],sn=0;if(Ze)for(var pr=0;prKe==="number"||Ke==="boolean"),bt=ie!=="string";return bt&&xt&&!Ze?Su(X):function(){return Fp(X,ie,ke,arguments,Ze)}}var Tu={abort:$p,emscripten_get_heap_max:ya,emscripten_memcpy_big:_p,emscripten_resize_heap:X0,fd_close:E5,fd_seek:Z0,fd_write:J0},R5=j0(),Op=s.___wasm_call_ctors=function(){return(Op=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Q0=s._init=function(){return(Q0=s._init=s.asm.init).apply(null,arguments)},De=s._init_with_threads_count=function(){return(De=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Cu=s._get_threads_count=function(){return(Cu=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},ef=s._register_tensor=function(){return(ef=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},M5=s._dispose_data=function(){return(M5=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},$5=s._dispose=function(){return($5=s._dispose=s.asm.dispose).apply(null,arguments)},tf=s._Abs=function(){return(tf=s._Abs=s.asm.Abs).apply(null,arguments)},Dp=s._Add=function(){return(Dp=s._Add=s.asm.Add).apply(null,arguments)},Do=s._AddN=function(){return(Do=s._AddN=s.asm.AddN).apply(null,arguments)},af=s._All=function(){return(af=s._All=s.asm.All).apply(null,arguments)},nf=s._Any=function(){return(nf=s._Any=s.asm.Any).apply(null,arguments)},_5=s._ArgMax=function(){return(_5=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},rf=s._AvgPool=function(){return(rf=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},sf=s._BatchMatMul=function(){return(sf=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},of=s._Ceil=function(){return(of=s._Ceil=s.asm.Ceil).apply(null,arguments)},lf=s._ClipByValue=function(){return(lf=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},zp=s._Conv2D=function(){return(zp=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Lp=s._Conv2DBackpropInput=function(){return(Lp=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},uf=s._Cos=function(){return(uf=s._Cos=s.asm.Cos).apply(null,arguments)},df=s._Cosh=function(){return(df=s._Cosh=s.asm.Cosh).apply(null,arguments)},pf=s._CropAndResize=function(){return(pf=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Nu=s._Cumprod=function(){return(Nu=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},cf=s._Cumsum=function(){return(cf=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},hf=s._DepthToSpace=function(){return(hf=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},ff=s._DepthwiseConv2dNative=function(){return(ff=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Vs=s._Elu=function(){return(Vs=s._Elu=s.asm.Elu).apply(null,arguments)},mf=s._Equal=function(){return(mf=s._Equal=s.asm.Equal).apply(null,arguments)},gf=s._Exp=function(){return(gf=s._Exp=s.asm.Exp).apply(null,arguments)},Bp=s._FlipLeftRight=function(){return(Bp=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},yf=s._Floor=function(){return(yf=s._Floor=s.asm.Floor).apply(null,arguments)},zo=s._FloorDiv=function(){return(zo=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},Af=s._FusedBatchNorm=function(){return(Af=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},xf=s._FusedConv2D=function(){return(xf=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},Fr=s._FusedDepthwiseConv2D=function(){return(Fr=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},Eu=s._Gather=function(){return(Eu=s._Gather=s.asm.Gather).apply(null,arguments)},bf=s._GatherNd=function(){return(bf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},vf=s._Greater=function(){return(vf=s._Greater=s.asm.Greater).apply(null,arguments)},wf=s._GreaterEqual=function(){return(wf=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},kf=s._LeakyRelu=function(){return(kf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},Wp=s._Less=function(){return(Wp=s._Less=s.asm.Less).apply(null,arguments)},Vp=s._LessEqual=function(){return(Vp=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},If=s._Log=function(){return(If=s._Log=s.asm.Log).apply(null,arguments)},Sf=s._LogicalAnd=function(){return(Sf=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},Gp=s._LogicalNot=function(){return(Gp=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},Up=s._LogicalOr=function(){return(Up=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},Tf=s._LogicalXor=function(){return(Tf=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},Cf=s._Max=function(){return(Cf=s._Max=s.asm.Max).apply(null,arguments)},Nf=s._MaxPool=function(){return(Nf=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},jp=s._Maximum=function(){return(jp=s._Maximum=s.asm.Maximum).apply(null,arguments)},F5=s._Mean=function(){return(F5=s._Mean=s.asm.Mean).apply(null,arguments)},Ef=s._Min=function(){return(Ef=s._Min=s.asm.Min).apply(null,arguments)},Rf=s._Minimum=function(){return(Rf=s._Minimum=s.asm.Minimum).apply(null,arguments)},Mf=s._MirrorPad=function(){return(Mf=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},$f=s._Multiply=function(){return($f=s._Multiply=s.asm.Multiply).apply(null,arguments)},_f=s._Neg=function(){return(_f=s._Neg=s.asm.Neg).apply(null,arguments)},Ff=s._NonMaxSuppressionV3=function(){return(Ff=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Pf=s._NonMaxSuppressionV4=function(){return(Pf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Of=s._NonMaxSuppressionV5=function(){return(Of=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Df=s._NotEqual=function(){return(Df=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},zf=s._OneHot=function(){return(zf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Lf=s._PadV2=function(){return(Lf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Bf=s._Pow=function(){return(Bf=s._Pow=s.asm.Pow).apply(null,arguments)},Wf=s._Prelu=function(){return(Wf=s._Prelu=s.asm.Prelu).apply(null,arguments)},Vf=s._Prod=function(){return(Vf=s._Prod=s.asm.Prod).apply(null,arguments)},Gf=s._RealDiv=function(){return(Gf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Uf=s._Relu=function(){return(Uf=s._Relu=s.asm.Relu).apply(null,arguments)},jf=s._Relu6=function(){return(jf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Hf=s._ResizeBilinear=function(){return(Hf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},qf=s._ResizeNearestNeighbor=function(){return(qf=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},Xf=s._Reverse=function(){return(Xf=s._Reverse=s.asm.Reverse).apply(null,arguments)},Kf=s._RotateWithOffset=function(){return(Kf=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Zf=s._Round=function(){return(Zf=s._Round=s.asm.Round).apply(null,arguments)},Yf=s._Rsqrt=function(){return(Yf=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Jf=s._ScatterNd=function(){return(Jf=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},Qf=s._SelectV2=function(){return(Qf=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},em=s._Sigmoid=function(){return(em=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},tm=s._Sin=function(){return(tm=s._Sin=s.asm.Sin).apply(null,arguments)},am=s._Softmax=function(){return(am=s._Softmax=s.asm.Softmax).apply(null,arguments)},nm=s._SparseFillEmptyRows=function(){return(nm=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},rm=s._SparseReshape=function(){return(rm=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},sm=s._SparseSegmentReduction=function(){return(sm=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},im=s._Sqrt=function(){return(im=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},om=s._Square=function(){return(om=s._Square=s.asm.Square).apply(null,arguments)},lm=s._SquaredDifference=function(){return(lm=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},um=s._Step=function(){return(um=s._Step=s.asm.Step).apply(null,arguments)},dm=s._StridedSlice=function(){return(dm=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},pm=s._Sub=function(){return(pm=s._Sub=s.asm.Sub).apply(null,arguments)},cm=s._Sum=function(){return(cm=s._Sum=s.asm.Sum).apply(null,arguments)},hm=s._Tan=function(){return(hm=s._Tan=s.asm.Tan).apply(null,arguments)},fm=s._Tanh=function(){return(fm=s._Tanh=s.asm.Tanh).apply(null,arguments)},mm=s._Tile=function(){return(mm=s._Tile=s.asm.Tile).apply(null,arguments)},gm=s._TopK=function(){return(gm=s._TopK=s.asm.TopK).apply(null,arguments)},ym=s._Transform=function(){return(ym=s._Transform=s.asm.Transform).apply(null,arguments)},Am=s._Transpose=function(){return(Am=s._Transpose=s.asm.Transpose).apply(null,arguments)},xm=s.__FusedMatMul=function(){return(xm=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},bm=s._malloc=function(){return(bm=s._malloc=s.asm.malloc).apply(null,arguments)},vm=s._free=function(){return(vm=s._free=s.asm.free).apply(null,arguments)},wm=s.___errno_location=function(){return(wm=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Hp=s.stackSave=function(){return(Hp=s.stackSave=s.asm.stackSave).apply(null,arguments)},qp=s.stackRestore=function(){return(qp=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},Ru=s.stackAlloc=function(){return(Ru=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},km=s.dynCall_iijjiiii=function(){return(km=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},Im=s.dynCall_jiji=function(){return(Im=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Pp;var Lo;Ga=function X(){Lo||Xp(),Lo||(Ga=X)};function Xp(X){if(X=X||d,ut>0||(Pt(),ut>0))return;function ie(){Lo||(Lo=!0,s.calledRun=!0,!L&&(nn(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),ta()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),ie()},1)):ie()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Xp();var Bo;l&&(Bo={uncaughtException:process.listeners("uncaughtException").filter(function(X){return!l.uncaughtException.indexOf(X)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(X){return!l.unhandledRejection.indexOf(X)>-1})});var Wo;if(typeof r!="undefined")Wo=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Wo=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Bo){var Sm=Wo._dispose;Wo._dispose=function(){Sm(),Bo.uncaughtException.forEach(function(X){process.removeListener("uncaughtException",X)}),Bo.unhandledRejection.forEach(function(X){process.removeListener("unhandledRejection",X)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModule=a)}),md=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},fl=class{refCount(e){return Ua("refCount")}incRef(e){return Ua("incRef")}timerAvailable(){return!0}time(e){return Ua("time")}read(e){return Ua("read")}readSync(e){return Ua("readSync")}readToGPU(e,t){return Ua("readToGPU")}numDataIds(){return Ua("numDataIds")}disposeData(e,t){return Ua("disposeData")}write(e,t,a){return Ua("write")}move(e,t,a,n,r){return Ua("move")}createTensorFromTexture(e,t,a){return Ua("createTensorFromTexture")}memory(){return Ua("memory")}floatPrecision(){return Ua("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Ua("dispose")}};function Ua(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function fA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,vc(e,t,a)}function FS(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let a=e.length,n=0;for(;a>0;)n=Math.random()*a|0,a--,vc(e,a,n),vc(t,a,n)}function Zu(e,t,a){return Math.max(e,Math.min(t,a))}function PS(e){return e%2===0?e:e+1}function vc(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function OS(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ci(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ai(e,t=[],a=!1){if(t==null&&(t=[]),Array.isArray(e)||da(e)&&!a)for(let n=0;n0,a,n){return new Promise((r,s)=>{let i=0,o=()=>{if(e()){r();return}i++;let l=t(i);if(a!=null&&i>=a){s();return}n!=null?n(o,l):setTimeout(o,l)};o()})}function US(e,t){let a=1,n=-1;for(let s=0;s=0)a*=e[s];else if(e[s]===-1){if(n!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${n} and dim ${s}`);n=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==a)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(a===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%a!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${a}`);let r=e.slice();return r[n]=t/a,r}function gd(e,t){let a=t.length;return e=e==null?t.map((n,r)=>r):[].concat(e),F(e.every(n=>n>=-a&&n`All values in axis param must be in range [-${a}, ${a}) but got axis ${e}`),F(e.every(n=>tl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function mA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:gd(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(a.push(e[o]),n.push(o)),s[i]<=o&&i++}e[o]!==1&&(a.push(e[o]),n.push(o))}return{newShape:a,keptDims:n}}function gA(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return a}function yA(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else if(e==="string")a=new Array(t);else throw new Error(`Unknown data type ${e}`);return a}function AA(e,t){for(let a=0;at+=a.length),t}function zr(e){return typeof e=="string"||e instanceof String}function vA(e){return typeof e=="boolean"}function wA(e){return typeof e=="number"}function Wc(e){return Array.isArray(e)?Wc(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":wA(e)?"float32":zr(e)?"string":vA(e)?"bool":"float32"}function Gr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function wc(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function kA(e,t,a,n=!1){let r=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;il*u)*(n?2:1);for(let l=0;lr*s)*(a?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${a?" for a complex tensor":""}.`);return kA(0,e,t,a)}function B1(e,t){let a=Vc(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return Yo(e,new Float32Array(a));if(t==="int32")return Yo(e,new Int32Array(a));if(t==="bool")return Yo(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function W1(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function qS(e,t,a){if(t===0)return 0;if(t===1)return e[0];let n=e[e.length-1];for(let r=0;r{let[a,n]=t.split(":");this.urlFlags[a]=YS(a,n)})}};function KS(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(ZS(t,n[0],n[1]),n.join("="))),t}function ZS(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function YS(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function V(){return G1}var G1=null;function JS(e){G1=e}var Rm;function SA(){if(Rm==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");Rm=e}return Rm}function QS(){let e=SA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function U1(e,t){let a=QS();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var gl="Abs",yd="Acos",Ad="Acosh",vr="Add",hi="AddN",yl="All",Al="Any",fi="ArgMax",xd="ArgMin",bd="Asin",vd="Asinh",wd="Atan",kd="Atanh",xl="Atan2",mi="AvgPool",j1="AvgPoolGrad",Gc="AvgPool3D",H1="AvgPool3DGrad",gi="BatchMatMul",bl="BatchToSpaceND",Uc="Bincount",eT="BroadcastTo",jc="BroadcastArgs",yi="Cast",Qr="Ceil",es="ClipByValue",Id="Complex",Hc="ComplexAbs",vl="Concat",Ai="Conv2D",qc="Conv2DBackpropFilter",xi="Conv2DBackpropInput",Xc="Conv3D",q1="Conv3DBackpropFilterV2",Kc="Conv3DBackpropInputV2",bi="Cos",vi="Cosh",wi="Cumprod",ki="Cumsum",Ii="CropAndResize",Zc="DenseBincount",Si="DepthToSpace",Ti="DepthwiseConv2dNative",Yc="DepthwiseConv2dNativeBackpropFilter",Jc="DepthwiseConv2dNativeBackpropInput",Qc="Diag",eh="Dilation2D",Vm="Dilation2DBackpropInput",Gm="Dilation2DBackpropFilter",Ci="RealDiv",Sd="Einsum",Ni="Elu",X1="EluGrad",Td="Erf",ts="Equal",as="Exp",wl="ExpandDims",Ei="Expm1",th="FFT",kl="Fill",Ri="FlipLeftRight",ns="Floor",Mi="FloorDiv",$i="FusedBatchNorm",Il="GatherV2",_i="GatherNd",rs="Greater",ss="GreaterEqual",Fi="Identity",ah="IFFT",Cd="Imag",Nd="IsFinite",Ed="IsInf",Sl="IsNan",Pi="LeakyRelu",is="Less",os="LessEqual",nh="LinSpace",ls="Log",Rd="Log1p",Oi="LogicalAnd",Di="LogicalNot",Tl="LogicalOr",TA="LogicalXor",tT="LogSoftmax",aT="LowerBound",rh="LRN",K1="LRNGrad",zi="Max",us="Maximum",Li="MaxPool",Z1="MaxPoolGrad",sh="MaxPool3D",Y1="MaxPool3DGrad",ih="MaxPoolWithArgmax",Bi="Mean",Wi="Min",ds="Minimum",Vi="MirrorPad",Md="Mod",oh="Multinomial",ps="Multiply",Cl="Neg",cs="NotEqual",Gi="NonMaxSuppressionV3",Nl="NonMaxSuppressionV4",Ui="NonMaxSuppressionV5",El="OnesLike",Rl="OneHot",Ml="Pack",ji="PadV2",nT="Pool",Hi="Pow",qi="Prelu",Xi="Prod",lh="RaggedGather",uh="RaggedRange",dh="RaggedTensorToTensor",$l="Range",$d="Real",_l="Reciprocal",Ki="Relu",Fl="Reshape",Zi="ResizeNearestNeighbor",J1="ResizeNearestNeighborGrad",Yi="ResizeBilinear",Q1="ResizeBilinearGrad",Ji="Relu6",Pl="Reverse",Ol="Round",hs="Rsqrt",Qi="ScatterNd",ph="SearchSorted",Dl="Select",_d="Selu",zl="Slice",eo="Sin",Ll="Sinh",Fd="Sign",fs="Sigmoid",Pd="Softplus",ms="Sqrt",to="Sum",Bl="SpaceToBatchND",Wl="SplitV",ao="Softmax",Od="SparseFillEmptyRows",Vl="SparseReshape",Dd="SparseSegmentMean",zd="SparseSegmentSum",Ld="SparseToDense",gs="SquaredDifference",Bd="Square",no="StridedSlice",Gl="StringNGrams",Wd="StringSplit",Vd="StringToHashBucketFast",ys="Sub",Ul="Tan",ro="Tanh",As="Tile",so="TopK",io="Transform",yr="Transpose",ch="Unique",jl="Unpack",hh="UnsortedSegmentSum",rT="UpperBound",Hl="ZerosLike",oo="Step",Yu="FromPixels",lo="RotateWithOffset",Ur="_FusedMatMul",jr="FusedConv2D",Hr="FusedDepthwiseConv2D";function Dr(...e){V().getBool("IS_TEST")||V().getBool("PROD")||console.warn(...e)}function sT(...e){V().getBool("IS_TEST")||V().getBool("PROD")||console.log(...e)}var al=U1("kernelRegistry",()=>new Map),Ju=U1("gradRegistry",()=>new Map);function kc(e,t){let a=e2(e,t);return al.get(a)}function Um(e){return Ju.get(e)}function Zn(e){let t=al.entries(),a=[];for(;;){let{done:n,value:r}=t.next();if(n)break;let[s,i]=r,[o]=s.split("_");o===e&&a.push(i)}return a}function hn(e){let{kernelName:t,backendName:a}=e,n=e2(t,a);al.has(n)&&Dr(`The kernel '${t}' for backend '${a}' is already registered`),al.set(n,e)}function iT(e){let{kernelName:t}=e;Ju.has(t)&&V().getBool("DEBUG")&&Dr(`Overriding the gradient for '${t}'`),Ju.set(t,e)}function oT(e,t){let a=e2(e,t);if(!al.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);al.delete(a)}function lT(e){if(!Ju.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Ju.delete(e)}function uT(e,t){Zn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});hn(n)})}function e2(e,t){return`${t}_${e}`}var v={};He(v,{arraysEqual:()=>Jr,assert:()=>F,assertNonNegativeIntegerDimensions:()=>W1,assertNonNull:()=>ci,assertShapesMatch:()=>Sa,bytesFromStringArray:()=>bA,bytesPerElement:()=>Wm,checkConversionForErrors:()=>AA,clamp:()=>Zu,computeStrides:()=>ml,createScalarValue:()=>mT,createShuffledIndices:()=>VS,decodeString:()=>Ic,distSquared:()=>zS,encodeString:()=>Ud,fetch:()=>yT,fingerPrint64:()=>fT,flatten:()=>ai,getArrayFromDType:()=>yA,getTypedArrayFromDType:()=>gA,hasEncodingLoss:()=>jS,hexToLong:()=>Gd,indexToLoc:()=>XS,inferDtype:()=>Wc,inferFromImplicitShape:()=>US,isBoolean:()=>vA,isFunction:()=>Gr,isInt:()=>tl,isNumber:()=>wA,isPromise:()=>V1,isScalarShape:()=>LS,isString:()=>zr,isTypedArray:()=>da,isValidDtype:()=>xA,locToIndex:()=>qS,makeOnesTypedArray:()=>B1,makeZerosNestedTypedArray:()=>HS,makeZerosTypedArray:()=>Vc,nearestDivisor:()=>wc,nearestLargerEven:()=>PS,now:()=>Qu,parseAxisParam:()=>gd,randUniform:()=>DS,repeatedTry:()=>GS,rightPad:()=>Hu,shuffle:()=>fA,shuffleCombo:()=>FS,sizeFromShape:()=>yt,sizeToSquarishShape:()=>WS,squeezeShape:()=>mA,sum:()=>OS,swap:()=>vc,tanh:()=>BS,toNestedArray:()=>Yo,toTypedArray:()=>fh});var j5=hl(yS()),Xs=j5.default||j5;function Gd(e){return Xs.fromString(e,!0,16)}var CA=Gd("c3a5c85c97cb3127"),Hs=Gd("b492b66fbe98f273"),Aa=Gd("9ae16a3b2f90404f");function jm(e){return e.xor(e.shru(47))}function NA(e,t,a){let n=e.slice(t,t+a);return Xs.fromBytes(Array.from(n),!0,!0)}function ht(e,t){return NA(e,t,8)}function H5(e,t){return NA(e,t,4)}function Xt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Wr(e,t,a=Gd("9ddfea08eb382d69")){let n=e.xor(t).mul(a);n=n.xor(n.shru(47));let r=t.xor(n).mul(a);return r=r.xor(r.shru(47)),r=r.mul(a),r}function dT(e,t,a,n,r,s){r=r.add(e),s=Xt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Xt(r,44)),[r.add(n),s.add(i)]}function rc(e,t,a,n){return dT(ht(e,t),ht(e,t+8),ht(e,t+16),ht(e,t+24),a,n)}function pT(e,t=e.length){if(t>=8){let a=Aa.add(t*2),n=ht(e,0).add(Aa),r=ht(e,t-8),s=Xt(r,37).mul(a).add(n),i=Xt(n,25).add(r).mul(a);return Wr(s,i,a)}if(t>=4){let a=Aa.add(t*2),n=H5(e,0);return Wr(n.shl(3).add(t),H5(e,t-4),a)}if(t>0){let a=e[0],n=e[t>>1],r=e[t-1],s=a+(n<<8),i=t+(r<<2);return jm(Aa.mul(s).xor(CA.mul(i))).mul(Aa)}return Aa}function cT(e,t=e.length){let a=Aa.add(t*2),n=ht(e,0).mul(Hs),r=ht(e,8),s=ht(e,t-8).mul(a),i=ht(e,t-16).mul(Aa);return Wr(Xt(n.add(r),43).add(Xt(s,30)).add(i),n.add(Xt(r.add(Aa),18)).add(s),a)}function hT(e,t=e.length){let a=Aa.add(t*2),n=ht(e,0).mul(Aa),r=ht(e,8),s=ht(e,t-8).mul(a),i=ht(e,t-16).mul(Aa),o=Xt(n.add(r),43).add(Xt(s,30)).add(i),l=Wr(o,n.add(Xt(r.add(Aa),18)).add(s),a),u=ht(e,16).mul(a),d=ht(e,24),c=o.add(ht(e,t-32)).mul(a),p=l.add(ht(e,t-24)).mul(a);return Wr(Xt(u.add(d),43).add(Xt(c,30)).add(p),u.add(Xt(d.add(n),18)).add(c),a)}function fT(e,t=e.length){let a=Xs.fromNumber(81,!0);if(t<=32)return t<=16?pT(e,t):cT(e,t);if(t<=64)return hT(e,t);let n=a,r=a.mul(Hs).add(113),s=jm(r.mul(Aa).add(113)).mul(Aa),i=[Xs.UZERO,Xs.UZERO],o=[Xs.UZERO,Xs.UZERO];n=n.mul(Aa).add(ht(e,0));let l=0,u=(t-1>>6)*64,d=u+(t-1&63)-63;do n=Xt(n.add(r).add(i[0]).add(ht(e,l+8)),37).mul(Hs),r=Xt(r.add(i[1]).add(ht(e,l+48)),42).mul(Hs),n=n.xor(o[1]),r=r.add(i[0]).add(ht(e,l+40)),s=Xt(s.add(o[0]),33).mul(Hs),i=rc(e,l,i[1].mul(Hs),n.add(o[0])),o=rc(e,l+32,s.add(o[1]),r.add(ht(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Hs.add(s.and(255).shl(1));return l=d,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),n=Xt(n.add(r).add(i[0]).add(ht(e,l+8)),37).mul(c),r=Xt(r.add(i[1]).add(ht(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(ht(e,l+40))),s=Xt(s.add(o[0]),33).mul(c),i=rc(e,l,i[1].mul(c),n.add(o[0])),o=rc(e,l+32,s.add(o[1]),r.add(ht(e,l+16))),[s,n]=[n,s],Wr(Wr(i[0],o[0],c).add(jm(r).mul(CA)).add(s),Wr(i[1],o[1],c).add(n),c)}function mT(e,t){return t==="string"?Ud(e):fh([e],t)}function gT(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function fh(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=ai(e)),V().getBool("DEBUG")&&AA(e,t),gT(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let a=new Uint8Array(e.length);for(let n=0;n{n=a()},s,i=Qu();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Qu()-i})}if(V().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{xT(u,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:a,timeMs:n,inputs:r,extraInfo:s}=e;a.forEach(i=>{Promise.all([i.data(),n,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function xT(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?f:""} `}}console.log(`%c${o} %c${i} %c${l}D ${d} %c${u} %c${c} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function vT(e,t,a){let n={},r={};for(let l=0;ln[m.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[a.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],d=u.inputs;for(let c=0;c=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=a(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let d=s.inputs[l];if(!Jr(u.shape,d.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${d.shape}'`);if(e[d.id]==null)e[d.id]=u;else{let c=e[d.id];e[d.id]=n(c,u),c.dispose()}}}}var q5=20,_u=3,Mm=7;function kT(e,t,a,n){let r=ml(t),s=IT(e,t,a,r),i=t.length,o=pc(e,t,a,r,s),l=["Tensor"];return n&&(l.push(` dtype: ${a}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` +"use strict";var Human=(()=>{var ac=Object.defineProperty;var NI=Object.getOwnPropertyDescriptor;var EI=Object.getOwnPropertyNames;var RI=Object.prototype.hasOwnProperty;var MI=(e,t,a)=>t in e?ac(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var Ss=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,a)=>(typeof require!="undefined"?require:t)[a]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var cr=(e,t)=>{for(var a in t)ac(e,a,{get:t[a],enumerable:!0})},$I=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of EI(t))!RI.call(e,r)&&r!==a&&ac(e,r,{get:()=>t[r],enumerable:!(n=NI(t,r))||n.enumerable});return e};var _I=e=>$I(ac({},"__esModule",{value:!0}),e);var le=(e,t,a)=>(MI(e,typeof t!="symbol"?t+"":t,a),a),_g=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var Un=(e,t,a)=>(_g(e,t,"read from private field"),a?a.call(e):t.get(e)),Xo=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a)},Bu=(e,t,a,n)=>(_g(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var w0e={};cr(w0e,{Env:()=>Ap,Human:()=>mg,default:()=>mg,defaults:()=>wo,draw:()=>a0,empty:()=>ir,env:()=>ne,match:()=>E0,models:()=>fg});var Ue={};cr(Ue,{Abs:()=>vl,Acos:()=>wl,Acosh:()=>kl,AdadeltaOptimizer:()=>kh,AdagradOptimizer:()=>Ih,AdamOptimizer:()=>Sh,AdamaxOptimizer:()=>Th,Add:()=>Qr,AddN:()=>qs,All:()=>Xs,Any:()=>Ks,ArgMax:()=>Zs,ArgMin:()=>kd,Asin:()=>Il,Asinh:()=>Sl,Atan:()=>Tl,Atan2:()=>Nl,Atanh:()=>Cl,AvgPool:()=>Ys,AvgPool3D:()=>Vc,AvgPool3DGrad:()=>W1,AvgPoolGrad:()=>B1,BackendWasm:()=>v8,BatchMatMul:()=>Js,BatchToSpaceND:()=>El,Bincount:()=>Id,BroadcastArgs:()=>Uc,BroadcastTo:()=>kS,Cast:()=>Qs,Ceil:()=>ei,ClipByValue:()=>es,Complex:()=>Sd,ComplexAbs:()=>Gc,Concat:()=>Rl,Conv2D:()=>ti,Conv2DBackpropFilter:()=>Hc,Conv2DBackpropInput:()=>ai,Conv3D:()=>jc,Conv3DBackpropFilterV2:()=>V1,Conv3DBackpropInputV2:()=>qc,Cos:()=>ni,Cosh:()=>ri,CropAndResize:()=>oi,Cumprod:()=>si,Cumsum:()=>ii,DataStorage:()=>vd,DenseBincount:()=>Td,DepthToSpace:()=>li,DepthwiseConv2dNative:()=>ui,DepthwiseConv2dNativeBackpropFilter:()=>Xc,DepthwiseConv2dNativeBackpropInput:()=>Kc,Diag:()=>Zc,Dilation2D:()=>Yc,Dilation2DBackpropFilter:()=>Wm,Dilation2DBackpropInput:()=>Bm,ENV:()=>z1,Einsum:()=>Cd,Elu:()=>pi,EluGrad:()=>U1,Environment:()=>cA,Equal:()=>ci,Erf:()=>Ml,Exp:()=>hi,ExpandDims:()=>$l,Expm1:()=>_l,FFT:()=>Nd,Fill:()=>Pl,FlipLeftRight:()=>fi,Floor:()=>mi,FloorDiv:()=>gi,FromPixels:()=>rd,FusedBatchNorm:()=>xi,FusedConv2D:()=>Hr,FusedDepthwiseConv2D:()=>jr,GPGPUContext:()=>sl,GatherNd:()=>Ai,GatherV2:()=>Fl,GraphModel:()=>op,Greater:()=>yi,GreaterEqual:()=>bi,IFFT:()=>Ed,Identity:()=>vi,Imag:()=>Rd,IsFinite:()=>Ol,IsInf:()=>Dl,IsNan:()=>wi,KernelBackend:()=>yl,LRN:()=>Qc,LRNGrad:()=>G1,LeakyRelu:()=>ki,Less:()=>Ii,LessEqual:()=>Si,LinSpace:()=>Jc,Log:()=>Ti,Log1p:()=>zl,LogSoftmax:()=>IS,LogicalAnd:()=>Ci,LogicalNot:()=>Ni,LogicalOr:()=>Ll,LogicalXor:()=>fA,LowerBound:()=>SS,MathBackendCPU:()=>Eh,MathBackendWebGL:()=>hu,Max:()=>Ei,MaxPool:()=>Mi,MaxPool3D:()=>eh,MaxPool3DGrad:()=>j1,MaxPoolGrad:()=>H1,MaxPoolWithArgmax:()=>th,Maximum:()=>Ri,Mean:()=>$i,Min:()=>_i,Minimum:()=>Pi,MirrorPad:()=>Fi,Mod:()=>Bl,MomentumOptimizer:()=>Ch,Multinomial:()=>ah,Multiply:()=>Oi,Neg:()=>Wl,NonMaxSuppressionV3:()=>zi,NonMaxSuppressionV4:()=>Vl,NonMaxSuppressionV5:()=>Li,NotEqual:()=>Di,OP_SCOPE_SUFFIX:()=>Y1,OneHot:()=>Bi,OnesLike:()=>Ul,Optimizer:()=>rs,OptimizerConstructors:()=>Pr,Pack:()=>Gl,PadV2:()=>Wi,Pool:()=>TS,Pow:()=>Vi,Prelu:()=>Ui,Prod:()=>Gi,RMSPropOptimizer:()=>Nh,RaggedGather:()=>nh,RaggedRange:()=>rh,RaggedTensorToTensor:()=>sh,Range:()=>Hl,Rank:()=>Gm,Real:()=>Md,RealDiv:()=>di,Reciprocal:()=>Hi,Reduction:()=>ya,Relu:()=>ji,Relu6:()=>Ki,Reshape:()=>jl,ResizeBilinear:()=>Xi,ResizeBilinearGrad:()=>X1,ResizeNearestNeighbor:()=>qi,ResizeNearestNeighborGrad:()=>q1,Reverse:()=>Zi,RotateWithOffset:()=>ho,Round:()=>ql,Rsqrt:()=>Yi,SGDOptimizer:()=>ip,ScatterNd:()=>Ji,SearchSorted:()=>$d,Select:()=>Xl,Selu:()=>_d,Sigmoid:()=>eo,Sign:()=>Pd,Sin:()=>Qi,Sinh:()=>Zl,Slice:()=>Kl,Softmax:()=>no,Softplus:()=>Fd,SpaceToBatchND:()=>Yl,SparseFillEmptyRows:()=>Od,SparseReshape:()=>Ql,SparseSegmentMean:()=>Dd,SparseSegmentSum:()=>zd,SparseToDense:()=>Ld,SplitV:()=>Jl,Sqrt:()=>to,Square:()=>Bd,SquaredDifference:()=>ro,Step:()=>co,StridedSlice:()=>so,StringNGrams:()=>eu,StringSplit:()=>Wd,StringToHashBucketFast:()=>Vd,Sub:()=>io,Sum:()=>ao,Tan:()=>oo,Tanh:()=>lo,Tensor:()=>pt,TensorBuffer:()=>jt,Tile:()=>ts,TopK:()=>uo,Transform:()=>po,Transpose:()=>gr,Unique:()=>ih,Unpack:()=>tu,UnsortedSegmentSum:()=>oh,UpperBound:()=>CS,Variable:()=>od,WebGPUBackend:()=>Lh,ZerosLike:()=>au,_FusedMatMul:()=>Gr,abs:()=>ja,acos:()=>ry,acosh:()=>sy,add:()=>be,addN:()=>uh,all:()=>iy,any:()=>oy,argMax:()=>tr,argMin:()=>ly,asin:()=>uy,asinh:()=>dy,atan:()=>py,atan2:()=>cy,atanh:()=>hy,avgPool:()=>x2,avgPool3d:()=>xy,backend:()=>er,backend_util:()=>T,basicLSTMCell:()=>Ay,batchNorm:()=>Qd,batchNorm2d:()=>yy,batchNorm3d:()=>by,batchNorm4d:()=>vy,batchToSpaceND:()=>A2,bincount:()=>y2,booleanMaskAsync:()=>Qb,broadcastArgs:()=>wy,broadcastTo:()=>rl,broadcast_util:()=>mo,browser:()=>br,buffer:()=>Me,cast:()=>He,ceil:()=>ky,clipByValue:()=>Iy,clone:()=>wa,complex:()=>Ar,concat:()=>at,concat1d:()=>Sy,concat2d:()=>nu,concat3d:()=>Ty,concat4d:()=>Cy,conv1d:()=>Ny,conv2d:()=>ep,conv2dTranspose:()=>Ry,conv3d:()=>My,conv3dTranspose:()=>$y,copyRegisteredKernels:()=>$S,cos:()=>_y,cosh:()=>Py,cosineWindow:()=>Ah,cumprod:()=>Fy,cumsum:()=>Oy,customGrad:()=>Jn,denseBincount:()=>Dy,deprecationWarn:()=>s2,depthToSpace:()=>zy,depthwiseConv2d:()=>dh,deregisterOp:()=>gP,device_util:()=>jd,diag:()=>Ly,dilation2d:()=>By,disableDeprecationWarnings:()=>iC,dispose:()=>Y,disposeVariables:()=>oC,div:()=>me,divNoNan:()=>Wy,dot:()=>Vy,dropout:()=>r4,einsum:()=>Uy,elu:()=>v2,enableDebugMode:()=>sC,enableProdMode:()=>r2,enclosingPowerOfTwo:()=>K2,engine:()=>kt,env:()=>W,equal:()=>b2,erf:()=>Gy,euclideanNorm:()=>qy,exp:()=>Xr,expandDims:()=>Gt,expm1:()=>Xy,eye:()=>k2,fft:()=>gh,fill:()=>ar,findBackend:()=>i2,findBackendFactory:()=>cC,floor:()=>I2,floorDiv:()=>Yd,forceHalfFloat:()=>W6,fused:()=>Z2,gather:()=>S2,gatherND:()=>n4,gather_util:()=>u2,getBackend:()=>ia,getGradient:()=>Vm,getKernel:()=>wc,getKernelsForBackend:()=>Kn,getThreadsCount:()=>Tne,gpgpu_util:()=>y6,grad:()=>BE,grads:()=>WE,greater:()=>np,greaterEqual:()=>T2,ifft:()=>hd,imag:()=>Zd,image:()=>ge,inTopKAsync:()=>s4,io:()=>Hn,irfft:()=>H2,isFinite:()=>Ky,isInf:()=>Zy,isNaN:()=>Yy,keep:()=>Fn,kernel_impls:()=>Sn,leakyRelu:()=>C2,less:()=>Jy,lessEqual:()=>ph,linalg:()=>h4,linspace:()=>Qy,loadGraphModel:()=>t3,loadGraphModelSync:()=>bF,localResponseNormalization:()=>eb,log:()=>pl,log1p:()=>N2,logSigmoid:()=>ab,logSoftmax:()=>nb,logSumExp:()=>R2,logicalAnd:()=>pd,logicalNot:()=>M2,logicalOr:()=>$2,logicalXor:()=>rb,losses:()=>f4,lowerBound:()=>sb,matMul:()=>st,math:()=>BA,max:()=>pa,maxPool:()=>_2,maxPool3d:()=>ib,maxPoolWithArgmax:()=>ob,maximum:()=>P2,mean:()=>cd,memory:()=>lC,meshgrid:()=>lb,min:()=>qr,minimum:()=>F2,mirrorPad:()=>ub,mod:()=>ru,moments:()=>db,movingAverage:()=>e4,mul:()=>ae,multiRNNCell:()=>pb,multinomial:()=>cb,neg:()=>qn,nextFrame:()=>x4,norm:()=>ap,notEqual:()=>O2,oneHot:()=>Sc,ones:()=>Lr,onesLike:()=>hb,op:()=>D,outerProduct:()=>fb,pad:()=>nr,pad1d:()=>mb,pad2d:()=>gb,pad3d:()=>xb,pad4d:()=>Ab,pool:()=>yb,pow:()=>dl,prelu:()=>z2,print:()=>t2,prod:()=>bb,profile:()=>uC,raggedGather:()=>vb,raggedRange:()=>wb,raggedTensorToTensor:()=>kb,rand:()=>Ib,randomGamma:()=>Sb,randomNormal:()=>W2,randomStandardNormal:()=>Tb,randomUniform:()=>V2,range:()=>cl,ready:()=>Kd,real:()=>ul,reciprocal:()=>Cb,registerBackend:()=>fo,registerGradient:()=>ES,registerKernel:()=>fn,registerOp:()=>mP,relu:()=>rp,relu6:()=>U2,removeBackend:()=>pC,reshape:()=>J,reverse:()=>Kr,reverse1d:()=>Nb,reverse2d:()=>Eb,reverse3d:()=>Rb,reverse4d:()=>Mb,rfft:()=>xh,round:()=>G2,rsqrt:()=>$b,scalar:()=>Fe,scatterND:()=>t4,scatter_util:()=>d2,searchSorted:()=>hh,selu:()=>_b,separableConv2d:()=>Pb,serialization:()=>QA,setBackend:()=>Xd,setPlatform:()=>hC,setThreadsCount:()=>Sne,setWasmPath:()=>Ine,setWasmPaths:()=>zh,setWebGLContext:()=>$h,setdiff1dAsync:()=>Fb,shared:()=>Rh,sigmoid:()=>Da,sign:()=>Ob,signal:()=>c4,sin:()=>Db,sinh:()=>zb,slice:()=>Pe,slice1d:()=>Lb,slice2d:()=>Bb,slice3d:()=>sp,slice4d:()=>fh,slice_util:()=>It,softmax:()=>mh,softplus:()=>E2,spaceToBatchND:()=>D2,sparse:()=>m4,sparseToDense:()=>a4,spectral:()=>p4,split:()=>ka,sqrt:()=>Yn,square:()=>kn,squaredDifference:()=>j2,squeeze:()=>_e,stack:()=>sa,step:()=>q2,stridedSlice:()=>Wb,string:()=>g4,sub:()=>fe,sum:()=>tt,sumOutType:()=>Hd,tan:()=>Vb,tanh:()=>Cc,tensor:()=>Be,tensor1d:()=>Ht,tensor2d:()=>Xn,tensor3d:()=>l2,tensor4d:()=>Ub,tensor5d:()=>Gb,tensor6d:()=>Hb,tensor_util:()=>AA,test_util:()=>ty,tidy:()=>$e,tile:()=>Vr,time:()=>dC,topk:()=>jb,train:()=>c_,transpose:()=>Ls,truncatedNormal:()=>qb,unique:()=>Xb,unregisterGradient:()=>MS,unregisterKernel:()=>RS,unsortedSegmentSum:()=>Kb,unstack:()=>Ta,upcastType:()=>ca,upperBound:()=>Zb,util:()=>v,valueAndGrad:()=>VE,valueAndGrads:()=>UE,variable:()=>Yb,variableGrads:()=>tb,version:()=>xp,version_converter:()=>wF,version_core:()=>m2,version_cpu:()=>EO,version_wasm:()=>Cne,version_webgl:()=>mG,webgl:()=>gG,webgl_util:()=>U7,webgpu_util:()=>I8,where:()=>Bs,whereAsync:()=>X2,zeros:()=>hn,zerosLike:()=>Xa});var PI=Object.create,F1=Object.defineProperty,FI=Object.getOwnPropertyDescriptor,OI=Object.getOwnPropertyNames,DI=Object.getPrototypeOf,zI=Object.prototype.hasOwnProperty,Qx=(e=>typeof Ss!="undefined"?Ss:typeof Proxy!="undefined"?new Proxy(e,{get:(t,a)=>(typeof Ss!="undefined"?Ss:t)[a]}):e)(function(e){if(typeof Ss!="undefined")return Ss.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),qt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Xe=(e,t)=>{for(var a in t)F1(e,a,{get:t[a],enumerable:!0})},LI=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of OI(t))!zI.call(e,r)&&r!==a&&F1(e,r,{get:()=>t[r],enumerable:!(n=FI(t,r))||n.enumerable});return e},Al=(e,t,a)=>(a=e!=null?PI(DI(e)):{},LI(t||!e||!e.__esModule?F1(a,"default",{value:e,enumerable:!0}):a,e)),BI=qt((e,t)=>{t.exports=n;var a=null;try{a=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(I){}function n(I,N,O){this.low=I|0,this.high=N|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(I){return(I&&I.__isLong__)===!0}n.isLong=r;var s={},i={};function o(I,N){var O,L,B;return N?(I>>>=0,(B=0<=I&&I<256)&&(L=i[I],L)?L:(O=u(I,(I|0)<0?-1:0,!0),B&&(i[I]=O),O)):(I|=0,(B=-128<=I&&I<128)&&(L=s[I],L)?L:(O=u(I,I<0?-1:0,!1),B&&(s[I]=O),O))}n.fromInt=o;function l(I,N){if(isNaN(I))return N?b:y;if(N){if(I<0)return b;if(I>=g)return _}else{if(I<=-x)return $;if(I+1>=x)return E}return I<0?l(-I,N).neg():u(I%m|0,I/m|0,N)}n.fromNumber=l;function u(I,N,O){return new n(I,N,O)}n.fromBits=u;var p=Math.pow;function c(I,N,O){if(I.length===0)throw Error("empty string");if(I==="NaN"||I==="Infinity"||I==="+Infinity"||I==="-Infinity")return y;if(typeof N=="number"?(O=N,N=!1):N=!!N,O=O||10,O<2||360)throw Error("interior hyphen");if(L===0)return c(I.substring(1),N,O).neg();for(var B=l(p(O,8)),G=y,j=0;j>>0:this.low},M.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},M.toString=function(I){if(I=I||10,I<2||36>>0,V=H.toString(I);if(G=U,G.isZero())return V+j;for(;V.length<6;)V="0"+V;j=""+V+j}},M.getHighBits=function(){return this.high},M.getHighBitsUnsigned=function(){return this.high>>>0},M.getLowBits=function(){return this.low},M.getLowBitsUnsigned=function(){return this.low>>>0},M.getNumBitsAbs=function(){if(this.isNegative())return this.eq($)?64:this.neg().getNumBitsAbs();for(var I=this.high!=0?this.high:this.low,N=31;N>0&&(I&1<=0},M.isOdd=function(){return(this.low&1)===1},M.isEven=function(){return(this.low&1)===0},M.equals=function(I){return r(I)||(I=d(I)),this.unsigned!==I.unsigned&&this.high>>>31===1&&I.high>>>31===1?!1:this.high===I.high&&this.low===I.low},M.eq=M.equals,M.notEquals=function(I){return!this.eq(I)},M.neq=M.notEquals,M.ne=M.notEquals,M.lessThan=function(I){return this.comp(I)<0},M.lt=M.lessThan,M.lessThanOrEqual=function(I){return this.comp(I)<=0},M.lte=M.lessThanOrEqual,M.le=M.lessThanOrEqual,M.greaterThan=function(I){return this.comp(I)>0},M.gt=M.greaterThan,M.greaterThanOrEqual=function(I){return this.comp(I)>=0},M.gte=M.greaterThanOrEqual,M.ge=M.greaterThanOrEqual,M.compare=function(I){if(r(I)||(I=d(I)),this.eq(I))return 0;var N=this.isNegative(),O=I.isNegative();return N&&!O?-1:!N&&O?1:this.unsigned?I.high>>>0>this.high>>>0||I.high===this.high&&I.low>>>0>this.low>>>0?-1:1:this.sub(I).isNegative()?-1:1},M.comp=M.compare,M.negate=function(){return!this.unsigned&&this.eq($)?$:this.not().add(w)},M.neg=M.negate,M.add=function(I){r(I)||(I=d(I));var N=this.high>>>16,O=this.high&65535,L=this.low>>>16,B=this.low&65535,G=I.high>>>16,j=I.high&65535,U=I.low>>>16,H=I.low&65535,V=0,Q=0,Z=0,re=0;return re+=B+H,Z+=re>>>16,re&=65535,Z+=L+U,Q+=Z>>>16,Z&=65535,Q+=O+j,V+=Q>>>16,Q&=65535,V+=N+G,V&=65535,u(Z<<16|re,V<<16|Q,this.unsigned)},M.subtract=function(I){return r(I)||(I=d(I)),this.add(I.neg())},M.sub=M.subtract,M.multiply=function(I){if(this.isZero())return y;if(r(I)||(I=d(I)),a){var N=a.mul(this.low,this.high,I.low,I.high);return u(N,a.get_high(),this.unsigned)}if(I.isZero())return y;if(this.eq($))return I.isOdd()?$:y;if(I.eq($))return this.isOdd()?$:y;if(this.isNegative())return I.isNegative()?this.neg().mul(I.neg()):this.neg().mul(I).neg();if(I.isNegative())return this.mul(I.neg()).neg();if(this.lt(A)&&I.lt(A))return l(this.toNumber()*I.toNumber(),this.unsigned);var O=this.high>>>16,L=this.high&65535,B=this.low>>>16,G=this.low&65535,j=I.high>>>16,U=I.high&65535,H=I.low>>>16,V=I.low&65535,Q=0,Z=0,re=0,ee=0;return ee+=G*V,re+=ee>>>16,ee&=65535,re+=B*V,Z+=re>>>16,re&=65535,re+=G*H,Z+=re>>>16,re&=65535,Z+=L*V,Q+=Z>>>16,Z&=65535,Z+=B*H,Q+=Z>>>16,Z&=65535,Z+=G*U,Q+=Z>>>16,Z&=65535,Q+=O*V+L*H+B*U+G*j,Q&=65535,u(re<<16|ee,Q<<16|Z,this.unsigned)},M.mul=M.multiply,M.divide=function(I){if(r(I)||(I=d(I)),I.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&I.low===-1&&I.high===-1)return this;var N=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,I.low,I.high);return u(N,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:y;var O,L,B;if(this.unsigned){if(I.unsigned||(I=I.toUnsigned()),I.gt(this))return b;if(I.gt(this.shru(1)))return S;B=b}else{if(this.eq($)){if(I.eq(w)||I.eq(C))return $;if(I.eq($))return w;var G=this.shr(1);return O=G.div(I).shl(1),O.eq(y)?I.isNegative()?w:C:(L=this.sub(I.mul(O)),B=O.add(L.div(I)),B)}else if(I.eq($))return this.unsigned?b:y;if(this.isNegative())return I.isNegative()?this.neg().div(I.neg()):this.neg().div(I).neg();if(I.isNegative())return this.div(I.neg()).neg();B=y}for(L=this;L.gte(I);){O=Math.max(1,Math.floor(L.toNumber()/I.toNumber()));for(var j=Math.ceil(Math.log(O)/Math.LN2),U=j<=48?1:p(2,j-48),H=l(O),V=H.mul(I);V.isNegative()||V.gt(L);)O-=U,H=l(O,this.unsigned),V=H.mul(I);H.isZero()&&(H=w),B=B.add(H),L=L.sub(V)}return B},M.div=M.divide,M.modulo=function(I){if(r(I)||(I=d(I)),a){var N=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,I.low,I.high);return u(N,a.get_high(),this.unsigned)}return this.sub(this.div(I).mul(I))},M.mod=M.modulo,M.rem=M.modulo,M.not=function(){return u(~this.low,~this.high,this.unsigned)},M.and=function(I){return r(I)||(I=d(I)),u(this.low&I.low,this.high&I.high,this.unsigned)},M.or=function(I){return r(I)||(I=d(I)),u(this.low|I.low,this.high|I.high,this.unsigned)},M.xor=function(I){return r(I)||(I=d(I)),u(this.low^I.low,this.high^I.high,this.unsigned)},M.shiftLeft=function(I){return r(I)&&(I=I.toInt()),(I&=63)===0?this:I<32?u(this.low<>>32-I,this.unsigned):u(0,this.low<>>I|this.high<<32-I,this.high>>I,this.unsigned):u(this.high>>I-32,this.high>=0?0:-1,this.unsigned)},M.shr=M.shiftRight,M.shiftRightUnsigned=function(I){if(r(I)&&(I=I.toInt()),I&=63,I===0)return this;var N=this.high;if(I<32){var O=this.low;return u(O>>>I|N<<32-I,N>>>I,this.unsigned)}else return I===32?u(N,0,this.unsigned):u(N>>>I-32,0,this.unsigned)},M.shru=M.shiftRightUnsigned,M.shr_u=M.shiftRightUnsigned,M.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},M.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},M.toBytes=function(I){return I?this.toBytesLE():this.toBytesBE()},M.toBytesLE=function(){var I=this.high,N=this.low;return[N&255,N>>>8&255,N>>>16&255,N>>>24,I&255,I>>>8&255,I>>>16&255,I>>>24]},M.toBytesBE=function(){var I=this.high,N=this.low;return[I>>>24,I>>>16&255,I>>>8&255,I&255,N>>>24,N>>>16&255,N>>>8&255,N&255]},n.fromBytes=function(I,N,O){return O?n.fromBytesLE(I,N):n.fromBytesBE(I,N)},n.fromBytesLE=function(I,N){return new n(I[0]|I[1]<<8|I[2]<<16|I[3]<<24,I[4]|I[5]<<8|I[6]<<16|I[7]<<24,N)},n.fromBytesBE=function(I,N){return new n(I[4]<<24|I[5]<<16|I[6]<<8|I[7],I[0]<<24|I[1]<<16|I[2]<<8|I[3],N)}}),WI=qt(()=>{}),VI=qt(()=>{}),UI=qt((e,t)=>{(function(a,n,r){function s(u){var p=this,c=l();p.next=function(){var d=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=d-(p.c=d|0)},p.c=1,p.s0=c(" "),p.s1=c(" "),p.s2=c(" "),p.s0-=c(u),p.s0<0&&(p.s0+=1),p.s1-=c(u),p.s1<0&&(p.s1+=1),p.s2-=c(u),p.s2<0&&(p.s2+=1),c=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var c=new s(u),d=p&&p.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,d&&(typeof d=="object"&&i(d,c),h.state=function(){return i(c,{})}),h}function l(){var u=4022871197,p=function(c){c=String(c);for(var d=0;d>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),GI=qt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:p+=l;for(var c=0;c>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,f=(p.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),HI=qt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var c=0;c>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,f=(p.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),jI=qt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,d=u.i,h,f,m;return h=c[d],h^=h>>>7,f=h^h<<24,h=c[d+1&7],f^=h^h>>>10,h=c[d+3&7],f^=h^h>>>3,h=c[d+4&7],f^=h^h<<7,h=c[d+7&7],h=h^h<<13,f^=h^h<<9,c[d]=f,u.i=d+1&7,f};function p(c,d){var h,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,h=0;h0;--h)c.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,f=(p.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=p.next,d.quick=d,c&&(c.x&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),qI=qt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.w,d=u.X,h=u.i,f,m;return u.w=c=c+1640531527|0,m=d[h+34&127],f=d[h=h+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[h]=m^f,u.i=h,m+(c^c>>>16)|0};function p(c,d){var h,f,m,g,x,A=[],y=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,y=Math.max(y,d.length)),m=0,g=-32;g>>15,f^=f<<4,f^=f>>>13,g>=0&&(x=x+1640531527|0,h=A[g&127]^=f+x,m=h==0?m+1:0);for(m>=128&&(A[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)f=A[m+34&127],h=A[m=m+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,A[m]=f^h;c.w=x,c.X=A,c.i=m}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,f=(p.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=p.next,d.quick=d,c&&(c.X&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),XI=qt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.b,h=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^h,h=h-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-f|0,u.d=f<<16^h>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var c=0;c>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,f=(p.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),KI=qt(()=>{}),ZI=qt((e,t)=>{(function(a,n,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),c=p*2,d=s-1,h;function f(w,S,C){var E=[];S=S==!0?{entropy:!0}:S||{};var _=A(x(S.entropy?[w,b(n)]:w==null?y():w,3),E),$=new m(E),M=function(){for(var I=$.g(i),N=u,O=0;I=c;)I/=2,N/=2,O>>>=1;return(I+O)/N};return M.int32=function(){return $.g(4)|0},M.quick=function(){return $.g(4)/4294967296},M.double=M,A(b($.S),n),(S.pass||C||function(I,N,O,L){return L&&(L.S&&g(L,$),I.state=function(){return g($,{})}),O?(r[l]=I,N):I})(M,_,"global"in S?S.global:this==r,S.state)}function m(w){var S,C=w.length,E=this,_=0,$=E.i=E.j=0,M=E.S=[];for(C||(w=[C++]);_{var a=UI(),n=GI(),r=HI(),s=jI(),i=qI(),o=XI(),l=ZI();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),yc=qt(()=>{}),tA=qt(()=>{}),YI=qt(()=>{}),JI=qt(()=>{}),QI=qt(()=>{}),eS=qt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};function s(){return oe.buffer!=je&&dt(oe.buffer),ht}function i(){return oe.buffer!=je&&dt(oe.buffer),Va}function o(){return oe.buffer!=je&&dt(oe.buffer),Ft}function l(){return oe.buffer!=je&&dt(oe.buffer),aa}function u(){return oe.buffer!=je&&dt(oe.buffer),$a}function p(){return oe.buffer!=je&&dt(oe.buffer),sn}function c(){return oe.buffer!=je&&dt(oe.buffer),_a}var d=typeof r!="undefined"?r:{},h,f;d.ready=new Promise(function(F,q){h=F,f=q});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),x=[],A="./this.program",y=(F,q)=>{throw q},b=typeof window=="object",w=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=d.ENVIRONMENT_IS_PTHREAD||!1,E="";function _(F){return d.locateFile?d.locateFile(F,E):E+F}var $,M,I,N;function O(F){F instanceof ks||H("exiting due to exception: "+F)}if(S){w?E=yc().dirname(E)+"/":E=__dirname+"/";var L,B;typeof Qx=="function"&&(L=tA(),B=yc()),$=(q,se)=>(q=B.normalize(q),L.readFileSync(q,se?void 0:"utf8")),I=q=>{var se=$(q,!0);return se.buffer||(se=new Uint8Array(se)),se},M=(q,se,pe)=>{q=B.normalize(q),L.readFile(q,function(Te,Je){Te?pe(Te):se(Je.buffer)})},process.argv.length>1&&(A=process.argv[1].replace(/\\/g,"/")),x=process.argv.slice(2),process.on("uncaughtException",function(q){if(!(q instanceof ks))throw q}),process.on("unhandledRejection",function(q){throw q}),y=(q,se)=>{if(yn())throw process.exitCode=q,se;O(se),process.exit(q)},d.inspect=function(){return"[Emscripten Module object]"};let F;try{F=YI()}catch(q){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),q}global.Worker=F.Worker}else(b||w)&&(w?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof n!="undefined"&&n&&(E=n),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",S||($=F=>{var q=new XMLHttpRequest;return q.open("GET",F,!1),q.send(null),q.responseText},w&&(I=F=>{var q=new XMLHttpRequest;return q.open("GET",F,!1),q.responseType="arraybuffer",q.send(null),new Uint8Array(q.response)}),M=(F,q,se)=>{var pe=new XMLHttpRequest;pe.open("GET",F,!0),pe.responseType="arraybuffer",pe.onload=()=>{if(pe.status==200||pe.status==0&&pe.response){q(pe.response);return}se()},pe.onerror=se,pe.send(null)}),N=F=>document.title=F);S&&typeof performance=="undefined"&&(global.performance=JI().performance);var G=console.log.bind(console),j=console.warn.bind(console);S&&(G=F=>L.writeSync(1,F+` +`),j=F=>L.writeSync(2,F+` +`));var U=d.print||G,H=d.printErr||j;Object.assign(d,g),g=null,d.arguments&&(x=d.arguments),d.thisProgram&&(A=d.thisProgram),d.quit&&(y=d.quit);var V=4,Q=Atomics.load,Z=Atomics.store,re=Atomics.compareExchange,ee;d.wasmBinary&&(ee=d.wasmBinary);var he=d.noExitRuntime||!0;typeof WebAssembly!="object"&&Wo("no native wasm support detected");var oe,Ae,we=!1,Re;function Ge(F,q){F||Wo(q)}var Ke=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function nt(F,q,se){for(var pe=q+se,Te=q;F[Te]&&!(Te>=pe);)++Te;if(Te-q>16&&F.buffer&&Ke)return Ke.decode(F.buffer instanceof SharedArrayBuffer?F.slice(q,Te):F.subarray(q,Te));for(var Je="";q>10,56320|ln&1023)}}return Je}function ut(F,q){return F?nt(i(),F,q):""}function et(F,q,se,pe){if(!(pe>0))return 0;for(var Te=se,Je=se+pe-1,Oe=0;Oe=55296&&We<=57343){var Dt=F.charCodeAt(++Oe);We=65536+((We&1023)<<10)|Dt&1023}if(We<=127){if(se>=Je)break;q[se++]=We}else if(We<=2047){if(se+1>=Je)break;q[se++]=192|We>>6,q[se++]=128|We&63}else if(We<=65535){if(se+2>=Je)break;q[se++]=224|We>>12,q[se++]=128|We>>6&63,q[se++]=128|We&63}else{if(se+3>=Je)break;q[se++]=240|We>>18,q[se++]=128|We>>12&63,q[se++]=128|We>>6&63,q[se++]=128|We&63}}return q[se]=0,se-Te}function rt(F,q,se){return et(F,i(),q,se)}var je,ht,Va,Ft,rn,aa,$a,sn,_a;C&&(je=d.buffer);function dt(F){je=F,d.HEAP8=ht=new Int8Array(F),d.HEAP16=Ft=new Int16Array(F),d.HEAP32=aa=new Int32Array(F),d.HEAPU8=Va=new Uint8Array(F),d.HEAPU16=rn=new Uint16Array(F),d.HEAPU32=$a=new Uint32Array(F),d.HEAPF32=sn=new Float32Array(F),d.HEAPF64=_a=new Float64Array(F)}var Pa=d.INITIAL_MEMORY||16777216;if(C)oe=d.wasmMemory,je=d.buffer;else if(d.wasmMemory)oe=d.wasmMemory;else if(oe=new WebAssembly.Memory({initial:Pa/65536,maximum:32768,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw H("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"),S&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");oe&&(je=oe.buffer),Pa=je.byteLength,dt(je);var Ua,lr=[],zo=[],Vn=[],Mu=!1;function yn(){return he}function Lo(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)B0(d.preRun.shift());Fu(lr)}function Xt(){Mu=!0,!C&&Fu(zo)}function Rp(){if(!C){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)gg(d.postRun.shift());Fu(Vn)}}function B0(F){lr.unshift(F)}function W0(F){zo.unshift(F)}function gg(F){Vn.unshift(F)}var Mr=0,Bo=null,ur=null;function xg(F){Mr++,d.monitorRunDependencies&&d.monitorRunDependencies(Mr)}function Ag(F){if(Mr--,d.monitorRunDependencies&&d.monitorRunDependencies(Mr),Mr==0&&(Bo!==null&&(clearInterval(Bo),Bo=null),ur)){var q=ur;ur=null,q()}}function Wo(F){C?postMessage({cmd:"onAbort",arg:F}):d.onAbort&&d.onAbort(F),F="Aborted("+F+")",H(F),we=!0,Re=1,F+=". Build with -sASSERTIONS for more info.";var q=new WebAssembly.RuntimeError(F);throw f(q),q}var V0="data:application/octet-stream;base64,";function Mp(F){return F.startsWith(V0)}function $u(F){return F.startsWith("file://")}var xa;xa="tfjs-backend-wasm-threaded-simd.wasm",Mp(xa)||(xa=_(xa));function $p(F){try{if(F==xa&&ee)return new Uint8Array(ee);if(I)return I(F);throw"both async and sync fetching of the wasm failed"}catch(q){Wo(q)}}function U0(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!$u(xa))return fetch(xa,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+xa+"'";return F.arrayBuffer()}).catch(function(){return $p(xa)});if(M)return new Promise(function(F,q){M(xa,function(se){F(new Uint8Array(se))},q)})}return Promise.resolve().then(function(){return $p(xa)})}function G0(){var F={env:Gp,wasi_snapshot_preview1:Gp};function q(Oe,We){var Dt=Oe.exports;if(d.asm=Dt,ef(d.asm._emscripten_tls_init),Ua=d.asm.__indirect_function_table,W0(d.asm.__wasm_call_ctors),Ae=We,!C){var ln=Le.unusedWorkers.length;Le.unusedWorkers.forEach(function(pr){Le.loadWasmModuleToWorker(pr,function(){--ln||Ag("wasm-instantiate")})})}}C||xg("wasm-instantiate");function se(Oe){q(Oe.instance,Oe.module)}function pe(Oe){return U0().then(function(We){return WebAssembly.instantiate(We,F)}).then(function(We){return We}).then(Oe,function(We){H("failed to asynchronously prepare wasm: "+We),Wo(We)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!Mp(xa)&&!$u(xa)&&!S&&typeof fetch=="function"?fetch(xa,{credentials:"same-origin"}).then(function(Oe){var We=WebAssembly.instantiateStreaming(Oe,F);return We.then(se,function(Dt){return H("wasm streaming compile failed: "+Dt),H("falling back to ArrayBuffer instantiation"),pe(se)})}):pe(se)}if(d.instantiateWasm)try{var Je=d.instantiateWasm(F,q);return Je}catch(Oe){H("Module.instantiateWasm callback failed with error: "+Oe),f(Oe)}return Te().catch(f),{}}var H0,yg,j0={};function ks(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function q0(F){var q=Le.pthreads[F];delete Le.pthreads[F],q.terminate(),Sm(F),Le.runningWorkers.splice(Le.runningWorkers.indexOf(q),1),q.pthread_ptr=0}function X0(F){var q=Le.pthreads[F];q.postMessage({cmd:"cancel"})}function _u(F){var q=Le.pthreads[F];Ge(q),Le.returnWorkerToPool(q)}function _p(F){var q=Le.getNewWorker();if(!q)return 6;Le.runningWorkers.push(q),Le.pthreads[F.pthread_ptr]=q,q.pthread_ptr=F.pthread_ptr;var se={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return q.runPthread=()=>{se.time=performance.now(),q.postMessage(se,F.transferList)},q.loaded&&(q.runPthread(),delete q.runPthread),0}var Pp={varargs:void 0,get:function(){Pp.varargs+=4;var F=l()[Pp.varargs-4>>2];return F},getStr:function(F){var q=ut(F);return q}};function Pu(F){if(C)return $r(1,1,F);Re=F,yn()||(Le.terminateAllThreads(),d.onExit&&d.onExit(F),we=!0),y(F,new ks(F))}function bg(F,q){if(Re=F,!q&&C)throw Op(F),"unwind";Pu(F)}var Fp=bg;function K0(F){if(F instanceof ks||F=="unwind")return Re;y(1,F)}var Le={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?Le.initWorker():Le.initMainThread()},initMainThread:function(){for(var F=8;F--;)Le.allocateUnusedWorker()},initWorker:function(){he=!1},setExitStatus:function(F){Re=F},terminateAllThreads:function(){for(var F of Object.values(Le.pthreads))Le.returnWorkerToPool(F);for(var F of Le.unusedWorkers)F.terminate();Le.unusedWorkers=[]},returnWorkerToPool:function(F){var q=F.pthread_ptr;delete Le.pthreads[q],Le.unusedWorkers.push(F),Le.runningWorkers.splice(Le.runningWorkers.indexOf(F),1),F.pthread_ptr=0,Sm(q)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Le.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,q){F.onmessage=se=>{var pe=se.data,Te=pe.cmd;if(F.pthread_ptr&&(Le.currentProxiedOperationCallerThread=F.pthread_ptr),pe.targetThread&&pe.targetThread!=Zp()){var Je=Le.pthreads[pe.targetThread];Je?Je.postMessage(pe,pe.transferList):H('Internal error! Worker sent a message "'+Te+'" to target pthread '+pe.targetThread+", but that thread no longer exists!"),Le.currentProxiedOperationCallerThread=void 0;return}Te==="processProxyingQueue"?Ou(pe.queue):Te==="spawnThread"?_p(pe):Te==="cleanupThread"?_u(pe.thread):Te==="killThread"?q0(pe.thread):Te==="cancelThread"?X0(pe.thread):Te==="loaded"?(F.loaded=!0,q&&q(F),F.runPthread&&(F.runPthread(),delete F.runPthread)):Te==="print"?U("Thread "+pe.threadId+": "+pe.text):Te==="printErr"?H("Thread "+pe.threadId+": "+pe.text):Te==="alert"?alert("Thread "+pe.threadId+": "+pe.text):pe.target==="setimmediate"?F.postMessage(pe):Te==="onAbort"?d.onAbort&&d.onAbort(pe.arg):Te&&H("worker sent an unknown command "+Te),Le.currentProxiedOperationCallerThread=void 0},F.onerror=se=>{var pe="worker sent an error!";throw H(pe+" "+se.filename+":"+se.lineno+": "+se.message),se},S&&(F.on("message",function(se){F.onmessage({data:se})}),F.on("error",function(se){F.onerror(se)}),F.on("detachedExit",function(){})),F.postMessage({cmd:"load",urlOrBlob:d.mainScriptUrlOrBlob||n,wasmMemory:oe,wasmModule:Ae})},allocateUnusedWorker:function(){var F=_("tfjs-backend-wasm-threaded-simd.worker.js");Le.unusedWorkers.push(new Worker(F))},getNewWorker:function(){return Le.unusedWorkers.length==0&&(Le.allocateUnusedWorker(),Le.loadWasmModuleToWorker(Le.unusedWorkers[0])),Le.unusedWorkers.pop()}};d.PThread=Le;function Fu(F){for(;F.length>0;)F.shift()(d)}function Z0(F){var q=Tm(),se=F();return Yp(q),se}function vg(F){return F}function wg(F){var q=/\b_Z[\w\d_]+/g;return F.replace(q,function(se){var pe=se;return se===pe?se:pe+" ["+se+"]"})}function Y0(){var F=Zp(),q=l()[F+44>>2],se=l()[F+48>>2],pe=q-se;Eg(q,pe),Yp(q)}d.establishStackSpace=Y0;function Op(F){if(C)return $r(2,0,F);try{Fp(F)}catch(q){K0(q)}}var Vo=[];function J0(F){var q=Vo[F];return q||(F>=Vo.length&&(Vo.length=F+1),Vo[F]=q=Ua.get(F)),q}function Q0(F,q){var se=J0(F)(q);yn()?Le.setExitStatus(se):Ng(se)}d.invokeEntryPoint=Q0;function kg(){var F=new Error;if(!F.stack){try{throw new Error}catch(q){F=q}if(!F.stack)return"(no stack trace available)"}return F.stack.toString()}function ef(F){Le.tlsInitFunctions.push(F)}function tf(F,q){s().set(F,q)}function af(F){Sg(F,!w,1,!b),Le.threadInitTLS()}function nf(F){C?postMessage({cmd:"cleanupThread",thread:F}):_u(F)}function Dp(F,q,se,pe){return C?$r(3,1,F,q,se,pe):zp(F,q,se,pe)}function zp(F,q,se,pe){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Te=[],Je=0;if(C&&(Te.length===0||Je))return Dp(F,q,se,pe);if(Je)return Je;var Oe={startRoutine:se,pthread_ptr:F,arg:pe,transferList:Te};return C?(Oe.cmd="spawnThread",postMessage(Oe,Te),0):_p(Oe)}function rf(){return 2097152}var sf=!0;function of(){return sf}function Ou(F){Atomics.store(l(),F>>2,1),Zp()&&Cg(F),Atomics.compareExchange(l(),F>>2,1,0)}d.executeNotifiedProxyingQueue=Ou;function lf(F,q,se,pe){if(F==q)setTimeout(()=>Ou(pe));else if(C)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:pe});else{var Te=Le.pthreads[F];if(!Te)return;Te.postMessage({cmd:"processProxyingQueue",queue:pe})}return 1}function uf(F,q,se){return-1}function df(){Wo("")}function Is(F){Is.shown||(Is.shown={}),Is.shown[F]||(Is.shown[F]=1,S&&(F="warning: "+F),H(F))}function pf(){S||w||Is("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function cf(){return Date.now()}function Lp(){return 2147483648}function hf(){return Lp()}var Uo;S?Uo=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:C?Uo=()=>performance.now()-d.__performance_now_clock_drift:Uo=()=>performance.now();function ff(F,q,se){i().copyWithin(F,q,q+se)}function mf(){return S?QI().cpus().length:navigator.hardwareConcurrency}function $r(F,q){var se=arguments.length-2,pe=arguments;return Z0(()=>{for(var Te=se,Je=Jp(Te*8),Oe=Je>>3,We=0;We>3,Te=0;Te>>16),dt(oe.buffer),1}catch(q){}}function Af(F){var q=i().length;if(F=F>>>0,F<=q)return!1;var se=Lp();if(F>se)return!1;let pe=(Dt,ln)=>Dt+(ln-Dt%ln)%ln;for(var Te=1;Te<=4;Te*=2){var Je=q*(1+.2/Te);Je=Math.min(Je,F+100663296);var Oe=Math.min(se,pe(Math.max(F,Je),65536)),We=xf(Oe);if(We)return!0}return!1}function yf(){throw"unwind"}function Bp(F){return C?$r(4,1,F):52}function Wp(F,q,se,pe,Te){return C?$r(5,1,F,q,se,pe,Te):70}var bf=[null,[],[]];function vf(F,q){var se=bf[F];q===0||q===10?((F===1?U:H)(nt(se,0)),se.length=0):se.push(q)}function Vp(F,q,se,pe){if(C)return $r(6,1,F,q,se,pe);for(var Te=0,Je=0;Je>2],We=u()[q+4>>2];q+=8;for(var Dt=0;Dt>2]=Te,0}function Up(F){var q=d["_"+F];return q}function wf(F,q,se,pe,Te){var Je={string:un=>{var qo=0;if(un!=null&&un!==0){var $g=(un.length<<2)+1;qo=Jp($g),rt(un,qo,$g)}return qo},array:un=>{var qo=Jp(un.length);return tf(un,qo),qo}};function Oe(un){return q==="string"?ut(un):q==="boolean"?Boolean(un):un}var We=Up(F),Dt=[],ln=0;if(pe)for(var pr=0;prOe==="number"||Oe==="boolean"),Je=q!=="string";return Je&&Te&&!pe?Up(F):function(){return wf(F,q,se,arguments,pe)}}Le.init();var If=[null,Pu,Op,Dp,Bp,Wp,Vp],Gp={__emscripten_init_main_thread_js:af,__emscripten_thread_cleanup:nf,__pthread_create_js:zp,_emscripten_default_pthread_stack_size:rf,_emscripten_get_now_is_monotonic:of,_emscripten_notify_task_queue:lf,_emscripten_set_offscreencanvas_size:uf,abort:df,emscripten_check_blocking_allowed:pf,emscripten_date_now:cf,emscripten_get_heap_max:hf,emscripten_get_now:Uo,emscripten_memcpy_big:ff,emscripten_num_logical_cores:mf,emscripten_receive_on_main_thread_js:gf,emscripten_resize_heap:Af,emscripten_unwind_to_js_event_loop:yf,exit:Fp,fd_close:Bp,fd_seek:Wp,fd_write:Vp,memory:oe||d.wasmMemory},Ig=G0(),Sf=d.___wasm_call_ctors=function(){return(Sf=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},Tf=d._init=function(){return(Tf=d._init=d.asm.init).apply(null,arguments)},Cf=d._init_with_threads_count=function(){return(Cf=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Nf=d._get_threads_count=function(){return(Nf=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},Ef=d._register_tensor=function(){return(Ef=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},Rf=d._dispose_data=function(){return(Rf=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},Mf=d._dispose=function(){return(Mf=d._dispose=d.asm.dispose).apply(null,arguments)},$f=d._Abs=function(){return($f=d._Abs=d.asm.Abs).apply(null,arguments)},_f=d._Add=function(){return(_f=d._Add=d.asm.Add).apply(null,arguments)},Pf=d._AddN=function(){return(Pf=d._AddN=d.asm.AddN).apply(null,arguments)},Ff=d._All=function(){return(Ff=d._All=d.asm.All).apply(null,arguments)},Of=d._Any=function(){return(Of=d._Any=d.asm.Any).apply(null,arguments)},Df=d._ArgMax=function(){return(Df=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},zf=d._AvgPool=function(){return(zf=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Lf=d._BatchMatMul=function(){return(Lf=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},Bf=d._Ceil=function(){return(Bf=d._Ceil=d.asm.Ceil).apply(null,arguments)},Wf=d._ClipByValue=function(){return(Wf=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Vf=d._Conv2D=function(){return(Vf=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Uf=d._Conv2DBackpropInput=function(){return(Uf=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Gf=d._Cos=function(){return(Gf=d._Cos=d.asm.Cos).apply(null,arguments)},Hf=d._Cosh=function(){return(Hf=d._Cosh=d.asm.Cosh).apply(null,arguments)},jf=d._CropAndResize=function(){return(jf=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},qf=d._Cumprod=function(){return(qf=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Xf=d._Cumsum=function(){return(Xf=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Kf=d._DepthToSpace=function(){return(Kf=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Zf=d._DepthwiseConv2dNative=function(){return(Zf=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Yf=d._Elu=function(){return(Yf=d._Elu=d.asm.Elu).apply(null,arguments)},Jf=d._Equal=function(){return(Jf=d._Equal=d.asm.Equal).apply(null,arguments)},Qf=d._Exp=function(){return(Qf=d._Exp=d.asm.Exp).apply(null,arguments)},em=d._FlipLeftRight=function(){return(em=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},tm=d._Floor=function(){return(tm=d._Floor=d.asm.Floor).apply(null,arguments)},am=d._FloorDiv=function(){return(am=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},nm=d._FusedBatchNorm=function(){return(nm=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},rm=d._FusedConv2D=function(){return(rm=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},sm=d._FusedDepthwiseConv2D=function(){return(sm=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},im=d._Gather=function(){return(im=d._Gather=d.asm.Gather).apply(null,arguments)},om=d._GatherNd=function(){return(om=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},lm=d._Greater=function(){return(lm=d._Greater=d.asm.Greater).apply(null,arguments)},um=d._GreaterEqual=function(){return(um=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},dm=d._IsNan=function(){return(dm=d._IsNan=d.asm.IsNan).apply(null,arguments)},pm=d._LeakyRelu=function(){return(pm=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},cm=d._Less=function(){return(cm=d._Less=d.asm.Less).apply(null,arguments)},hm=d._LessEqual=function(){return(hm=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},fm=d._Log=function(){return(fm=d._Log=d.asm.Log).apply(null,arguments)},mm=d._LogicalAnd=function(){return(mm=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},gm=d._LogicalNot=function(){return(gm=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},xm=d._LogicalOr=function(){return(xm=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},Am=d._LogicalXor=function(){return(Am=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},ym=d._Max=function(){return(ym=d._Max=d.asm.Max).apply(null,arguments)},bm=d._MaxPool=function(){return(bm=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},Hp=d._Maximum=function(){return(Hp=d._Maximum=d.asm.Maximum).apply(null,arguments)},jp=d._Mean=function(){return(jp=d._Mean=d.asm.Mean).apply(null,arguments)},zu=d._Min=function(){return(zu=d._Min=d.asm.Min).apply(null,arguments)},vm=d._Minimum=function(){return(vm=d._Minimum=d.asm.Minimum).apply(null,arguments)},wm=d._MirrorPad=function(){return(wm=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},Go=d._Multiply=function(){return(Go=d._Multiply=d.asm.Multiply).apply(null,arguments)},qp=d._Neg=function(){return(qp=d._Neg=d.asm.Neg).apply(null,arguments)},Ho=d._NonMaxSuppressionV3=function(){return(Ho=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},jo=d._NonMaxSuppressionV4=function(){return(jo=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},km=d._NonMaxSuppressionV5=function(){return(km=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},X=d._NotEqual=function(){return(X=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},ie=d._OneHot=function(){return(ie=d._OneHot=d.asm.OneHot).apply(null,arguments)},ke=d._PadV2=function(){return(ke=d._PadV2=d.asm.PadV2).apply(null,arguments)},Ye=d._Pow=function(){return(Ye=d._Pow=d.asm.Pow).apply(null,arguments)},yt=d._Prelu=function(){return(yt=d._Prelu=d.asm.Prelu).apply(null,arguments)},bt=d._Prod=function(){return(bt=d._Prod=d.asm.Prod).apply(null,arguments)},Ze=d._RealDiv=function(){return(Ze=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},qe=d._Reciprocal=function(){return(qe=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},Ot=d._Relu=function(){return(Ot=d._Relu=d.asm.Relu).apply(null,arguments)},on=d._Relu6=function(){return(on=d._Relu6=d.asm.Relu6).apply(null,arguments)},dr=d._ResizeBilinear=function(){return(dr=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},Xp=d._ResizeNearestNeighbor=function(){return(Xp=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},Lu=d._Reverse=function(){return(Lu=d._Reverse=d.asm.Reverse).apply(null,arguments)},Im=d._RotateWithOffset=function(){return(Im=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},Fa=d._Round=function(){return(Fa=d._Round=d.asm.Round).apply(null,arguments)},_r=d._Rsqrt=function(){return(_r=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},Kp=d._ScatterNd=function(){return(Kp=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},Kk=d._SelectV2=function(){return(Kk=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},Zk=d._Sigmoid=function(){return(Zk=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},Yk=d._Sin=function(){return(Yk=d._Sin=d.asm.Sin).apply(null,arguments)},Jk=d._Softmax=function(){return(Jk=d._Softmax=d.asm.Softmax).apply(null,arguments)},Qk=d._SparseFillEmptyRows=function(){return(Qk=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},eI=d._SparseReshape=function(){return(eI=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},tI=d._SparseSegmentReduction=function(){return(tI=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},aI=d._Sqrt=function(){return(aI=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},nI=d._Square=function(){return(nI=d._Square=d.asm.Square).apply(null,arguments)},rI=d._SquaredDifference=function(){return(rI=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},sI=d._Step=function(){return(sI=d._Step=d.asm.Step).apply(null,arguments)},iI=d._StridedSlice=function(){return(iI=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},oI=d._Sub=function(){return(oI=d._Sub=d.asm.Sub).apply(null,arguments)},lI=d._Sum=function(){return(lI=d._Sum=d.asm.Sum).apply(null,arguments)},uI=d._Tan=function(){return(uI=d._Tan=d.asm.Tan).apply(null,arguments)},dI=d._Tanh=function(){return(dI=d._Tanh=d.asm.Tanh).apply(null,arguments)},pI=d._Tile=function(){return(pI=d._Tile=d.asm.Tile).apply(null,arguments)},cI=d._TopK=function(){return(cI=d._TopK=d.asm.TopK).apply(null,arguments)},hI=d._Transform=function(){return(hI=d._Transform=d.asm.Transform).apply(null,arguments)},fI=d._Transpose=function(){return(fI=d._Transpose=d.asm.Transpose).apply(null,arguments)},mI=d.__FusedMatMul=function(){return(mI=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},gI=d._malloc=function(){return(gI=d._malloc=d.asm.malloc).apply(null,arguments)},xI=d._free=function(){return(xI=d._free=d.asm.free).apply(null,arguments)},AI=d.__emscripten_tls_init=function(){return(AI=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Zp=d._pthread_self=function(){return(Zp=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},yI=d.___errno_location=function(){return(yI=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Sg=d.__emscripten_thread_init=function(){return(Sg=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},bI=d.__emscripten_thread_crashed=function(){return(bI=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},vI=d._emscripten_main_thread_process_queued_calls=function(){return(vI=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},wI=d._emscripten_main_browser_thread_id=function(){return(wI=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Tg=d._emscripten_run_in_main_runtime_thread_js=function(){return(Tg=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},kI=d._emscripten_dispatch_to_thread_=function(){return(kI=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},Cg=d.__emscripten_proxy_execute_task_queue=function(){return(Cg=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},Sm=d.__emscripten_thread_free_data=function(){return(Sm=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},Ng=d.__emscripten_thread_exit=function(){return(Ng=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Eg=d._emscripten_stack_set_limits=function(){return(Eg=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},Tm=d.stackSave=function(){return(Tm=d.stackSave=d.asm.stackSave).apply(null,arguments)},Yp=d.stackRestore=function(){return(Yp=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Jp=d.stackAlloc=function(){return(Jp=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},II=d.dynCall_iijjiiii=function(){return(II=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},SI=d.dynCall_jiji=function(){return(SI=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=yn,d.wasmMemory=oe,d.cwrap=kf,d.ExitStatus=ks,d.PThread=Le;var Qp;ur=function F(){Qp||Rg(),Qp||(ur=F)};function Rg(F){if(F=F||x,Mr>0)return;if(C){h(d),Xt(),postMessage({cmd:"loaded"});return}if(Lo(),Mr>0)return;function q(){Qp||(Qp=!0,d.calledRun=!0,!we&&(Xt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),Rp()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),q()},1)):q()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();Rg();var ec;m&&(ec={uncaughtException:process.listeners("uncaughtException").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var tc;if(typeof WasmBackendModule!="undefined")tc=WasmBackendModule;else if(typeof r!="undefined")tc=r;else throw new Error("Could not find wasm module in post.js");if(ec){var TI=tc._dispose;tc._dispose=function(){TI(),ec.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),ec.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=a)}),tS=qt((e,t)=>{t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}),aS=qt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(X,ie){i=X,o=ie});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],c="./this.program",d=(X,ie)=>{throw ie},h=typeof window=="object",f=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function x(X){return s.locateFile?s.locateFile(X,g):g+X}var A,y,b,w;function S(X){X instanceof Bo||$("exiting due to exception: "+X)}if(m){f?g=yc().dirname(g)+"/":g=__dirname+"/";var C,E;typeof Qx=="function"&&(C=tA(),E=yc()),A=(X,ie)=>(X=E.normalize(X),C.readFileSync(X,ie?void 0:"utf8")),b=X=>{var ie=A(X,!0);return ie.buffer||(ie=new Uint8Array(ie)),ie},y=(X,ie,ke)=>{X=E.normalize(X),C.readFile(X,function(Ye,yt){Ye?ke(Ye):ie(yt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(X){if(!(X instanceof Bo))throw X}),process.on("unhandledRejection",function(X){throw X}),d=(X,ie)=>{if(Va())throw process.exitCode=X,ie;S(ie),process.exit(X)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||f)&&(f?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",A=X=>{var ie=new XMLHttpRequest;return ie.open("GET",X,!1),ie.send(null),ie.responseText},f&&(b=X=>{var ie=new XMLHttpRequest;return ie.open("GET",X,!1),ie.responseType="arraybuffer",ie.send(null),new Uint8Array(ie.response)}),y=(X,ie,ke)=>{var Ye=new XMLHttpRequest;Ye.open("GET",X,!0),Ye.responseType="arraybuffer",Ye.onload=()=>{if(Ye.status==200||Ye.status==0&&Ye.response){ie(Ye.response);return}ke()},Ye.onerror=ke,Ye.send(null)},w=X=>document.title=X);var _=s.print||console.log.bind(console),$=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(d=s.quit);var M=4,I;s.wasmBinary&&(I=s.wasmBinary);var N=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Vn("no native wasm support detected");var O,L=!1,B;function G(X,ie){X||Vn(ie)}var j=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(X,ie,ke){for(var Ye=ie+ke,yt=ie;X[yt]&&!(yt>=Ye);)++yt;if(yt-ie>16&&X.buffer&&j)return j.decode(X.subarray(ie,yt));for(var bt="";ie>10,56320|on&1023)}}return bt}function H(X,ie){return X?U(ee,X,ie):""}function V(X,ie,ke,Ye){if(!(Ye>0))return 0;for(var yt=ke,bt=ke+Ye-1,Ze=0;Ze=55296&&qe<=57343){var Ot=X.charCodeAt(++Ze);qe=65536+((qe&1023)<<10)|Ot&1023}if(qe<=127){if(ke>=bt)break;ie[ke++]=qe}else if(qe<=2047){if(ke+1>=bt)break;ie[ke++]=192|qe>>6,ie[ke++]=128|qe&63}else if(qe<=65535){if(ke+2>=bt)break;ie[ke++]=224|qe>>12,ie[ke++]=128|qe>>6&63,ie[ke++]=128|qe&63}else{if(ke+3>=bt)break;ie[ke++]=240|qe>>18,ie[ke++]=128|qe>>12&63,ie[ke++]=128|qe>>6&63,ie[ke++]=128|qe&63}}return ie[ke]=0,ke-yt}function Q(X,ie,ke){return V(X,ee,ie,ke)}var Z,re,ee,he,oe,Ae,we,Re,Ge;function Ke(X){Z=X,s.HEAP8=re=new Int8Array(X),s.HEAP16=he=new Int16Array(X),s.HEAP32=Ae=new Int32Array(X),s.HEAPU8=ee=new Uint8Array(X),s.HEAPU16=oe=new Uint16Array(X),s.HEAPU32=we=new Uint32Array(X),s.HEAPF32=Re=new Float32Array(X),s.HEAPF64=Ge=new Float64Array(X)}var nt=s.INITIAL_MEMORY||16777216,ut,et=[],rt=[],je=[],ht=!1;function Va(){return N}function Ft(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)$a(s.preRun.shift());ur(et)}function rn(){ht=!0,ur(rt)}function aa(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)_a(s.postRun.shift());ur(je)}function $a(X){et.unshift(X)}function sn(X){rt.unshift(X)}function _a(X){je.unshift(X)}var dt=0,Pa=null,Ua=null;function lr(X){dt++,s.monitorRunDependencies&&s.monitorRunDependencies(dt)}function zo(X){if(dt--,s.monitorRunDependencies&&s.monitorRunDependencies(dt),dt==0&&(Pa!==null&&(clearInterval(Pa),Pa=null),Ua)){var ie=Ua;Ua=null,ie()}}function Vn(X){s.onAbort&&s.onAbort(X),X="Aborted("+X+")",$(X),L=!0,B=1,X+=". Build with -sASSERTIONS for more info.";var ie=new WebAssembly.RuntimeError(X);throw o(ie),ie}var Mu="data:application/octet-stream;base64,";function yn(X){return X.startsWith(Mu)}function Lo(X){return X.startsWith("file://")}var Xt;Xt="tfjs-backend-wasm.wasm",yn(Xt)||(Xt=x(Xt));function Rp(X){try{if(X==Xt&&I)return new Uint8Array(I);if(b)return b(X);throw"both async and sync fetching of the wasm failed"}catch(ie){Vn(ie)}}function B0(){if(!I&&(h||f)){if(typeof fetch=="function"&&!Lo(Xt))return fetch(Xt,{credentials:"same-origin"}).then(function(X){if(!X.ok)throw"failed to load wasm binary file at '"+Xt+"'";return X.arrayBuffer()}).catch(function(){return Rp(Xt)});if(y)return new Promise(function(X,ie){y(Xt,function(ke){X(new Uint8Array(ke))},ie)})}return Promise.resolve().then(function(){return Rp(Xt)})}function W0(){var X={env:Pu,wasi_snapshot_preview1:Pu};function ie(Ze,qe){var Ot=Ze.exports;s.asm=Ot,O=s.asm.memory,Ke(O.buffer),ut=s.asm.__indirect_function_table,sn(s.asm.__wasm_call_ctors),zo("wasm-instantiate")}lr("wasm-instantiate");function ke(Ze){ie(Ze.instance)}function Ye(Ze){return B0().then(function(qe){return WebAssembly.instantiate(qe,X)}).then(function(qe){return qe}).then(Ze,function(qe){$("failed to asynchronously prepare wasm: "+qe),Vn(qe)})}function yt(){return!I&&typeof WebAssembly.instantiateStreaming=="function"&&!yn(Xt)&&!Lo(Xt)&&!m&&typeof fetch=="function"?fetch(Xt,{credentials:"same-origin"}).then(function(Ze){var qe=WebAssembly.instantiateStreaming(Ze,X);return qe.then(ke,function(Ot){return $("wasm streaming compile failed: "+Ot),$("falling back to ArrayBuffer instantiation"),Ye(ke)})}):Ye(ke)}if(s.instantiateWasm)try{var bt=s.instantiateWasm(X,ie);return bt}catch(Ze){$("Module.instantiateWasm callback failed with error: "+Ze),o(Ze)}return yt().catch(o),{}}var gg,Mr;function Bo(X){this.name="ExitStatus",this.message="Program terminated with exit("+X+")",this.status=X}function ur(X){for(;X.length>0;)X.shift()(s)}function xg(X){return X}function Ag(X){var ie=/\b_Z[\w\d_]+/g;return X.replace(ie,function(ke){var Ye=ke;return ke===Ye?ke:Ye+" ["+ke+"]"})}function Wo(){var X=new Error;if(!X.stack){try{throw new Error}catch(ie){X=ie}if(!X.stack)return"(no stack trace available)"}return X.stack.toString()}function V0(X,ie){re.set(X,ie)}function Mp(){Vn("")}function $u(){return 2147483648}function xa(){return $u()}function $p(X,ie,ke){ee.copyWithin(X,ie,ie+ke)}function U0(X){try{return O.grow(X-Z.byteLength+65535>>>16),Ke(O.buffer),1}catch(ie){}}function G0(X){var ie=ee.length;X=X>>>0;var ke=$u();if(X>ke)return!1;let Ye=(Ot,on)=>Ot+(on-Ot%on)%on;for(var yt=1;yt<=4;yt*=2){var bt=ie*(1+.2/yt);bt=Math.min(bt,X+100663296);var Ze=Math.min(ke,Ye(Math.max(X,bt),65536)),qe=U0(Ze);if(qe)return!0}return!1}var H0={varargs:void 0,get:function(){H0.varargs+=4;var X=Ae[H0.varargs-4>>2];return X},getStr:function(X){var ie=H(X);return ie}};function yg(X){return 52}function j0(X,ie,ke,Ye,yt){return 70}var ks=[null,[],[]];function q0(X,ie){var ke=ks[X];ie===0||ie===10?((X===1?_:$)(U(ke,0)),ke.length=0):ke.push(ie)}function X0(X,ie,ke,Ye){for(var yt=0,bt=0;bt>2],qe=we[ie+4>>2];ie+=8;for(var Ot=0;Ot>2]=yt,0}function _u(X){var ie=s["_"+X];return ie}function _p(X,ie,ke,Ye,yt){var bt={string:Fa=>{var _r=0;if(Fa!=null&&Fa!==0){var Kp=(Fa.length<<2)+1;_r=zu(Kp),Q(Fa,_r,Kp)}return _r},array:Fa=>{var _r=zu(Fa.length);return V0(Fa,_r),_r}};function Ze(Fa){return ie==="string"?H(Fa):ie==="boolean"?Boolean(Fa):Fa}var qe=_u(X),Ot=[],on=0;if(Ye)for(var dr=0;drZe==="number"||Ze==="boolean"),bt=ie!=="string";return bt&&yt&&!Ye?_u(X):function(){return _p(X,ie,ke,arguments,Ye)}}var Pu={abort:Mp,emscripten_get_heap_max:xa,emscripten_memcpy_big:$p,emscripten_resize_heap:G0,fd_close:yg,fd_seek:j0,fd_write:X0},bg=W0(),Fp=s.___wasm_call_ctors=function(){return(Fp=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},K0=s._init=function(){return(K0=s._init=s.asm.init).apply(null,arguments)},Le=s._init_with_threads_count=function(){return(Le=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Fu=s._get_threads_count=function(){return(Fu=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},Z0=s._register_tensor=function(){return(Z0=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},vg=s._dispose_data=function(){return(vg=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},wg=s._dispose=function(){return(wg=s._dispose=s.asm.dispose).apply(null,arguments)},Y0=s._Abs=function(){return(Y0=s._Abs=s.asm.Abs).apply(null,arguments)},Op=s._Add=function(){return(Op=s._Add=s.asm.Add).apply(null,arguments)},Vo=s._AddN=function(){return(Vo=s._AddN=s.asm.AddN).apply(null,arguments)},J0=s._All=function(){return(J0=s._All=s.asm.All).apply(null,arguments)},Q0=s._Any=function(){return(Q0=s._Any=s.asm.Any).apply(null,arguments)},kg=s._ArgMax=function(){return(kg=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},ef=s._AvgPool=function(){return(ef=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},tf=s._BatchMatMul=function(){return(tf=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},af=s._Ceil=function(){return(af=s._Ceil=s.asm.Ceil).apply(null,arguments)},nf=s._ClipByValue=function(){return(nf=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Dp=s._Conv2D=function(){return(Dp=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},zp=s._Conv2DBackpropInput=function(){return(zp=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},rf=s._Cos=function(){return(rf=s._Cos=s.asm.Cos).apply(null,arguments)},sf=s._Cosh=function(){return(sf=s._Cosh=s.asm.Cosh).apply(null,arguments)},of=s._CropAndResize=function(){return(of=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Ou=s._Cumprod=function(){return(Ou=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},lf=s._Cumsum=function(){return(lf=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},uf=s._DepthToSpace=function(){return(uf=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},df=s._DepthwiseConv2dNative=function(){return(df=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Is=s._Elu=function(){return(Is=s._Elu=s.asm.Elu).apply(null,arguments)},pf=s._Equal=function(){return(pf=s._Equal=s.asm.Equal).apply(null,arguments)},cf=s._Exp=function(){return(cf=s._Exp=s.asm.Exp).apply(null,arguments)},Lp=s._FlipLeftRight=function(){return(Lp=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},hf=s._Floor=function(){return(hf=s._Floor=s.asm.Floor).apply(null,arguments)},Uo=s._FloorDiv=function(){return(Uo=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},ff=s._FusedBatchNorm=function(){return(ff=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},mf=s._FusedConv2D=function(){return(mf=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},$r=s._FusedDepthwiseConv2D=function(){return($r=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},Du=s._Gather=function(){return(Du=s._Gather=s.asm.Gather).apply(null,arguments)},gf=s._GatherNd=function(){return(gf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},xf=s._Greater=function(){return(xf=s._Greater=s.asm.Greater).apply(null,arguments)},Af=s._GreaterEqual=function(){return(Af=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},yf=s._IsNan=function(){return(yf=s._IsNan=s.asm.IsNan).apply(null,arguments)},Bp=s._LeakyRelu=function(){return(Bp=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},Wp=s._Less=function(){return(Wp=s._Less=s.asm.Less).apply(null,arguments)},bf=s._LessEqual=function(){return(bf=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},vf=s._Log=function(){return(vf=s._Log=s.asm.Log).apply(null,arguments)},Vp=s._LogicalAnd=function(){return(Vp=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},Up=s._LogicalNot=function(){return(Up=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},wf=s._LogicalOr=function(){return(wf=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},kf=s._LogicalXor=function(){return(kf=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},If=s._Max=function(){return(If=s._Max=s.asm.Max).apply(null,arguments)},Gp=s._MaxPool=function(){return(Gp=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Ig=s._Maximum=function(){return(Ig=s._Maximum=s.asm.Maximum).apply(null,arguments)},Sf=s._Mean=function(){return(Sf=s._Mean=s.asm.Mean).apply(null,arguments)},Tf=s._Min=function(){return(Tf=s._Min=s.asm.Min).apply(null,arguments)},Cf=s._Minimum=function(){return(Cf=s._Minimum=s.asm.Minimum).apply(null,arguments)},Nf=s._MirrorPad=function(){return(Nf=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Ef=s._Multiply=function(){return(Ef=s._Multiply=s.asm.Multiply).apply(null,arguments)},Rf=s._Neg=function(){return(Rf=s._Neg=s.asm.Neg).apply(null,arguments)},Mf=s._NonMaxSuppressionV3=function(){return(Mf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},$f=s._NonMaxSuppressionV4=function(){return($f=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},_f=s._NonMaxSuppressionV5=function(){return(_f=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Pf=s._NotEqual=function(){return(Pf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Ff=s._OneHot=function(){return(Ff=s._OneHot=s.asm.OneHot).apply(null,arguments)},Of=s._PadV2=function(){return(Of=s._PadV2=s.asm.PadV2).apply(null,arguments)},Df=s._Pow=function(){return(Df=s._Pow=s.asm.Pow).apply(null,arguments)},zf=s._Prelu=function(){return(zf=s._Prelu=s.asm.Prelu).apply(null,arguments)},Lf=s._Prod=function(){return(Lf=s._Prod=s.asm.Prod).apply(null,arguments)},Bf=s._RealDiv=function(){return(Bf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Wf=s._Reciprocal=function(){return(Wf=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},Vf=s._Relu=function(){return(Vf=s._Relu=s.asm.Relu).apply(null,arguments)},Uf=s._Relu6=function(){return(Uf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Gf=s._ResizeBilinear=function(){return(Gf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Hf=s._ResizeNearestNeighbor=function(){return(Hf=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},jf=s._Reverse=function(){return(jf=s._Reverse=s.asm.Reverse).apply(null,arguments)},qf=s._RotateWithOffset=function(){return(qf=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Xf=s._Round=function(){return(Xf=s._Round=s.asm.Round).apply(null,arguments)},Kf=s._Rsqrt=function(){return(Kf=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Zf=s._ScatterNd=function(){return(Zf=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},Yf=s._SelectV2=function(){return(Yf=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},Jf=s._Sigmoid=function(){return(Jf=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},Qf=s._Sin=function(){return(Qf=s._Sin=s.asm.Sin).apply(null,arguments)},em=s._Softmax=function(){return(em=s._Softmax=s.asm.Softmax).apply(null,arguments)},tm=s._SparseFillEmptyRows=function(){return(tm=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},am=s._SparseReshape=function(){return(am=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},nm=s._SparseSegmentReduction=function(){return(nm=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},rm=s._Sqrt=function(){return(rm=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},sm=s._Square=function(){return(sm=s._Square=s.asm.Square).apply(null,arguments)},im=s._SquaredDifference=function(){return(im=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},om=s._Step=function(){return(om=s._Step=s.asm.Step).apply(null,arguments)},lm=s._StridedSlice=function(){return(lm=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},um=s._Sub=function(){return(um=s._Sub=s.asm.Sub).apply(null,arguments)},dm=s._Sum=function(){return(dm=s._Sum=s.asm.Sum).apply(null,arguments)},pm=s._Tan=function(){return(pm=s._Tan=s.asm.Tan).apply(null,arguments)},cm=s._Tanh=function(){return(cm=s._Tanh=s.asm.Tanh).apply(null,arguments)},hm=s._Tile=function(){return(hm=s._Tile=s.asm.Tile).apply(null,arguments)},fm=s._TopK=function(){return(fm=s._TopK=s.asm.TopK).apply(null,arguments)},mm=s._Transform=function(){return(mm=s._Transform=s.asm.Transform).apply(null,arguments)},gm=s._Transpose=function(){return(gm=s._Transpose=s.asm.Transpose).apply(null,arguments)},xm=s.__FusedMatMul=function(){return(xm=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},Am=s._malloc=function(){return(Am=s._malloc=s.asm.malloc).apply(null,arguments)},ym=s._free=function(){return(ym=s._free=s.asm.free).apply(null,arguments)},bm=s.___errno_location=function(){return(bm=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Hp=s.stackSave=function(){return(Hp=s.stackSave=s.asm.stackSave).apply(null,arguments)},jp=s.stackRestore=function(){return(jp=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},zu=s.stackAlloc=function(){return(zu=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},vm=s.dynCall_iijjiiii=function(){return(vm=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},wm=s.dynCall_jiji=function(){return(wm=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Pp;var Go;Ua=function X(){Go||qp(),Go||(Ua=X)};function qp(X){if(X=X||p,dt>0||(Ft(),dt>0))return;function ie(){Go||(Go=!0,s.calledRun=!0,!L&&(rn(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),aa()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),ie()},1)):ie()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();qp();var Ho;l&&(Ho={uncaughtException:process.listeners("uncaughtException").filter(function(X){return!l.uncaughtException.indexOf(X)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(X){return!l.unhandledRejection.indexOf(X)>-1})});var jo;if(typeof r!="undefined")jo=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")jo=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ho){var km=jo._dispose;jo._dispose=function(){km(),Ho.uncaughtException.forEach(function(X){process.removeListener("uncaughtException",X)}),Ho.unhandledRejection.forEach(function(X){process.removeListener("unhandledRejection",X)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModule=a)}),vd=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},yl=class{refCount(e){return Ga("refCount")}incRef(e){return Ga("incRef")}timerAvailable(){return!0}time(e){return Ga("time")}read(e){return Ga("read")}readSync(e){return Ga("readSync")}readToGPU(e,t){return Ga("readToGPU")}numDataIds(){return Ga("numDataIds")}disposeData(e,t){return Ga("disposeData")}write(e,t,a){return Ga("write")}move(e,t,a,n,r){return Ga("move")}createTensorFromTexture(e,t,a){return Ga("createTensorFromTexture")}memory(){return Ga("memory")}floatPrecision(){return Ga("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Ga("dispose")}};function Ga(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function aA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,bc(e,t,a)}function nS(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let a=e.length,n=0;for(;a>0;)n=Math.random()*a|0,a--,bc(e,a,n),bc(t,a,n)}function nd(e,t,a){return Math.max(e,Math.min(t,a))}function rS(e){return e%2===0?e:e+1}function bc(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function sS(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function js(e){P(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Os(e,t=[],a=!1){if(t==null&&(t=[]),Array.isArray(e)||da(e)&&!a)for(let n=0;n0,a,n){return new Promise((r,s)=>{let i=0,o=()=>{if(e()){r();return}i++;let l=t(i);if(a!=null&&i>=a){s();return}n!=null?n(o,l):setTimeout(o,l)};o()})}function hS(e,t){let a=1,n=-1;for(let s=0;s=0)a*=e[s];else if(e[s]===-1){if(n!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${n} and dim ${s}`);n=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==a)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(a===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%a!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${a}`);let r=e.slice();return r[n]=t/a,r}function wd(e,t){let a=t.length;return e=e==null?t.map((n,r)=>r):[].concat(e),P(e.every(n=>n>=-a&&n`All values in axis param must be in range [-${a}, ${a}) but got axis ${e}`),P(e.every(n=>il(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function nA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:wd(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(a.push(e[o]),n.push(o)),s[i]<=o&&i++}e[o]!==1&&(a.push(e[o]),n.push(o))}return{newShape:a,keptDims:n}}function rA(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return a}function sA(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else if(e==="string")a=new Array(t);else throw new Error(`Unknown data type ${e}`);return a}function iA(e,t){for(let a=0;at+=a.length),t}function Dr(e){return typeof e=="string"||e instanceof String}function uA(e){return typeof e=="boolean"}function dA(e){return typeof e=="number"}function Bc(e){return Array.isArray(e)?Bc(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":dA(e)?"float32":Dr(e)?"string":uA(e)?"bool":"float32"}function Ur(e){return!!(e&&e.constructor&&e.call&&e.apply)}function vc(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function pA(e,t,a,n=!1){let r=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;il*u)*(n?2:1);for(let l=0;lr*s)*(a?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${a?" for a complex tensor":""}.`);return pA(0,e,t,a)}function O1(e,t){let a=Wc(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return tl(e,new Float32Array(a));if(t==="int32")return tl(e,new Int32Array(a));if(t==="bool")return tl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function Ya(e){e.forEach(t=>{P(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function gS(e,t,a){if(t===0)return 0;if(t===1)return e[0];let n=e[e.length-1];for(let r=0;r{let[a,n]=t.split(":");this.urlFlags[a]=bS(a,n)})}};function AS(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(yS(t,n[0],n[1]),n.join("="))),t}function yS(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function bS(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function W(){return z1}var z1=null;function vS(e){z1=e}var Nm;function hA(){if(Nm==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");Nm=e}return Nm}function wS(){let e=hA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function L1(e,t){let a=wS();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var vl="Abs",wl="Acos",kl="Acosh",Qr="Add",qs="AddN",Xs="All",Ks="Any",Zs="ArgMax",kd="ArgMin",Il="Asin",Sl="Asinh",Tl="Atan",Cl="Atanh",Nl="Atan2",Ys="AvgPool",B1="AvgPoolGrad",Vc="AvgPool3D",W1="AvgPool3DGrad",Js="BatchMatMul",El="BatchToSpaceND",Id="Bincount",kS="BroadcastTo",Uc="BroadcastArgs",Qs="Cast",ei="Ceil",es="ClipByValue",Sd="Complex",Gc="ComplexAbs",Rl="Concat",ti="Conv2D",Hc="Conv2DBackpropFilter",ai="Conv2DBackpropInput",jc="Conv3D",V1="Conv3DBackpropFilterV2",qc="Conv3DBackpropInputV2",ni="Cos",ri="Cosh",si="Cumprod",ii="Cumsum",oi="CropAndResize",Td="DenseBincount",li="DepthToSpace",ui="DepthwiseConv2dNative",Xc="DepthwiseConv2dNativeBackpropFilter",Kc="DepthwiseConv2dNativeBackpropInput",Zc="Diag",Yc="Dilation2D",Bm="Dilation2DBackpropInput",Wm="Dilation2DBackpropFilter",di="RealDiv",Cd="Einsum",pi="Elu",U1="EluGrad",Ml="Erf",ci="Equal",hi="Exp",$l="ExpandDims",_l="Expm1",Nd="FFT",Pl="Fill",fi="FlipLeftRight",mi="Floor",gi="FloorDiv",xi="FusedBatchNorm",Fl="GatherV2",Ai="GatherNd",yi="Greater",bi="GreaterEqual",vi="Identity",Ed="IFFT",Rd="Imag",Ol="IsFinite",Dl="IsInf",wi="IsNan",ki="LeakyRelu",Ii="Less",Si="LessEqual",Jc="LinSpace",Ti="Log",zl="Log1p",Ci="LogicalAnd",Ni="LogicalNot",Ll="LogicalOr",fA="LogicalXor",IS="LogSoftmax",SS="LowerBound",Qc="LRN",G1="LRNGrad",Ei="Max",Ri="Maximum",Mi="MaxPool",H1="MaxPoolGrad",eh="MaxPool3D",j1="MaxPool3DGrad",th="MaxPoolWithArgmax",$i="Mean",_i="Min",Pi="Minimum",Fi="MirrorPad",Bl="Mod",ah="Multinomial",Oi="Multiply",Wl="Neg",Di="NotEqual",zi="NonMaxSuppressionV3",Vl="NonMaxSuppressionV4",Li="NonMaxSuppressionV5",Ul="OnesLike",Bi="OneHot",Gl="Pack",Wi="PadV2",TS="Pool",Vi="Pow",Ui="Prelu",Gi="Prod",nh="RaggedGather",rh="RaggedRange",sh="RaggedTensorToTensor",Hl="Range",Md="Real",Hi="Reciprocal",ji="Relu",jl="Reshape",qi="ResizeNearestNeighbor",q1="ResizeNearestNeighborGrad",Xi="ResizeBilinear",X1="ResizeBilinearGrad",Ki="Relu6",Zi="Reverse",ql="Round",Yi="Rsqrt",Ji="ScatterNd",$d="SearchSorted",Xl="Select",_d="Selu",Kl="Slice",Qi="Sin",Zl="Sinh",Pd="Sign",eo="Sigmoid",Fd="Softplus",to="Sqrt",ao="Sum",Yl="SpaceToBatchND",Jl="SplitV",no="Softmax",Od="SparseFillEmptyRows",Ql="SparseReshape",Dd="SparseSegmentMean",zd="SparseSegmentSum",Ld="SparseToDense",ro="SquaredDifference",Bd="Square",so="StridedSlice",eu="StringNGrams",Wd="StringSplit",Vd="StringToHashBucketFast",io="Sub",oo="Tan",lo="Tanh",ts="Tile",uo="TopK",po="Transform",gr="Transpose",ih="Unique",tu="Unpack",oh="UnsortedSegmentSum",CS="UpperBound",au="ZerosLike",co="Step",rd="FromPixels",ho="RotateWithOffset",Gr="_FusedMatMul",Hr="FusedConv2D",jr="FusedDepthwiseConv2D";function Or(...e){W().getBool("IS_TEST")||W().getBool("PROD")||console.warn(...e)}function NS(...e){W().getBool("IS_TEST")||W().getBool("PROD")||console.log(...e)}var ol=L1("kernelRegistry",()=>new Map),sd=L1("gradRegistry",()=>new Map);function wc(e,t){let a=K1(e,t);return ol.get(a)}function Vm(e){return sd.get(e)}function Kn(e){let t=ol.entries(),a=[];for(;;){let{done:n,value:r}=t.next();if(n)break;let[s,i]=r,[o]=s.split("_");o===e&&a.push(i)}return a}function fn(e){let{kernelName:t,backendName:a}=e,n=K1(t,a);ol.has(n)&&Or(`The kernel '${t}' for backend '${a}' is already registered`),ol.set(n,e)}function ES(e){let{kernelName:t}=e;sd.has(t)&&W().getBool("DEBUG")&&Or(`Overriding the gradient for '${t}'`),sd.set(t,e)}function RS(e,t){let a=K1(e,t);if(!ol.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);ol.delete(a)}function MS(e){if(!sd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);sd.delete(e)}function $S(e,t){Kn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});fn(n)})}function K1(e,t){return`${t}_${e}`}var v={};Xe(v,{arraysEqual:()=>Jr,assert:()=>P,assertNonNegativeIntegerDimensions:()=>Ya,assertNonNull:()=>js,assertShapesMatch:()=>Sa,bytesFromStringArray:()=>lA,bytesPerElement:()=>Lm,checkConversionForErrors:()=>iA,clamp:()=>nd,computeStrides:()=>bl,createScalarValue:()=>zS,createShuffledIndices:()=>pS,decodeString:()=>kc,distSquared:()=>oS,encodeString:()=>Gd,fetch:()=>BS,fingerPrint64:()=>DS,flatten:()=>Os,getArrayFromDType:()=>sA,getTypedArrayFromDType:()=>rA,hasEncodingLoss:()=>fS,hexToLong:()=>Ud,indexToLoc:()=>xS,inferDtype:()=>Bc,inferFromImplicitShape:()=>hS,isBoolean:()=>uA,isFunction:()=>Ur,isInt:()=>il,isNumber:()=>dA,isPromise:()=>D1,isScalarShape:()=>lS,isString:()=>Dr,isTypedArray:()=>da,isValidDtype:()=>oA,locToIndex:()=>gS,makeOnesTypedArray:()=>O1,makeZerosNestedTypedArray:()=>mS,makeZerosTypedArray:()=>Wc,nearestDivisor:()=>vc,nearestLargerEven:()=>rS,now:()=>id,parseAxisParam:()=>wd,randUniform:()=>iS,repeatedTry:()=>cS,rightPad:()=>Qu,shuffle:()=>aA,shuffleCombo:()=>nS,sizeFromShape:()=>At,sizeToSquarishShape:()=>dS,squeezeShape:()=>nA,sum:()=>sS,swap:()=>bc,tanh:()=>uS,toNestedArray:()=>tl,toTypedArray:()=>lh});var Fg=Al(BI()),Rs=Fg.default||Fg;function Ud(e){return Rs.fromString(e,!0,16)}var mA=Ud("c3a5c85c97cb3127"),Ns=Ud("b492b66fbe98f273"),Aa=Ud("9ae16a3b2f90404f");function Um(e){return e.xor(e.shru(47))}function gA(e,t,a){let n=e.slice(t,t+a);return Rs.fromBytes(Array.from(n),!0,!0)}function ft(e,t){return gA(e,t,8)}function Og(e,t){return gA(e,t,4)}function Kt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Wr(e,t,a=Ud("9ddfea08eb382d69")){let n=e.xor(t).mul(a);n=n.xor(n.shru(47));let r=t.xor(n).mul(a);return r=r.xor(r.shru(47)),r=r.mul(a),r}function _S(e,t,a,n,r,s){r=r.add(e),s=Kt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Kt(r,44)),[r.add(n),s.add(i)]}function nc(e,t,a,n){return _S(ft(e,t),ft(e,t+8),ft(e,t+16),ft(e,t+24),a,n)}function PS(e,t=e.length){if(t>=8){let a=Aa.add(t*2),n=ft(e,0).add(Aa),r=ft(e,t-8),s=Kt(r,37).mul(a).add(n),i=Kt(n,25).add(r).mul(a);return Wr(s,i,a)}if(t>=4){let a=Aa.add(t*2),n=Og(e,0);return Wr(n.shl(3).add(t),Og(e,t-4),a)}if(t>0){let a=e[0],n=e[t>>1],r=e[t-1],s=a+(n<<8),i=t+(r<<2);return Um(Aa.mul(s).xor(mA.mul(i))).mul(Aa)}return Aa}function FS(e,t=e.length){let a=Aa.add(t*2),n=ft(e,0).mul(Ns),r=ft(e,8),s=ft(e,t-8).mul(a),i=ft(e,t-16).mul(Aa);return Wr(Kt(n.add(r),43).add(Kt(s,30)).add(i),n.add(Kt(r.add(Aa),18)).add(s),a)}function OS(e,t=e.length){let a=Aa.add(t*2),n=ft(e,0).mul(Aa),r=ft(e,8),s=ft(e,t-8).mul(a),i=ft(e,t-16).mul(Aa),o=Kt(n.add(r),43).add(Kt(s,30)).add(i),l=Wr(o,n.add(Kt(r.add(Aa),18)).add(s),a),u=ft(e,16).mul(a),p=ft(e,24),c=o.add(ft(e,t-32)).mul(a),d=l.add(ft(e,t-24)).mul(a);return Wr(Kt(u.add(p),43).add(Kt(c,30)).add(d),u.add(Kt(p.add(n),18)).add(c),a)}function DS(e,t=e.length){let a=Rs.fromNumber(81,!0);if(t<=32)return t<=16?PS(e,t):FS(e,t);if(t<=64)return OS(e,t);let n=a,r=a.mul(Ns).add(113),s=Um(r.mul(Aa).add(113)).mul(Aa),i=[Rs.UZERO,Rs.UZERO],o=[Rs.UZERO,Rs.UZERO];n=n.mul(Aa).add(ft(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do n=Kt(n.add(r).add(i[0]).add(ft(e,l+8)),37).mul(Ns),r=Kt(r.add(i[1]).add(ft(e,l+48)),42).mul(Ns),n=n.xor(o[1]),r=r.add(i[0]).add(ft(e,l+40)),s=Kt(s.add(o[0]),33).mul(Ns),i=nc(e,l,i[1].mul(Ns),n.add(o[0])),o=nc(e,l+32,s.add(o[1]),r.add(ft(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Ns.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),n=Kt(n.add(r).add(i[0]).add(ft(e,l+8)),37).mul(c),r=Kt(r.add(i[1]).add(ft(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(ft(e,l+40))),s=Kt(s.add(o[0]),33).mul(c),i=nc(e,l,i[1].mul(c),n.add(o[0])),o=nc(e,l+32,s.add(o[1]),r.add(ft(e,l+16))),[s,n]=[n,s],Wr(Wr(i[0],o[0],c).add(Um(r).mul(mA)).add(s),Wr(i[1],o[1],c).add(n),c)}function zS(e,t){return t==="string"?Gd(e):lh([e],t)}function LS(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function lh(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Os(e)),W().getBool("DEBUG")&&iA(e,t),LS(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let a=new Uint8Array(e.length);for(let n=0;n{n=a()},s,i=id();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:id()-i})}if(W().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{VS(u,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:a,timeMs:n,inputs:r,extraInfo:s}=e;a.forEach(i=>{Promise.all([i.data(),n,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function VS(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?f:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${c} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function GS(e,t,a){let n={},r={};for(let l=0;ln[m.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[a.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let c=0;c=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=a(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!Jr(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let c=e[p.id];e[p.id]=n(c,u),c.dispose()}}}}var Dg=20,Wu=3,Em=7;function jS(e,t,a,n){let r=bl(t),s=qS(e,t,a,r),i=t.length,o=dc(e,t,a,r,s),l=["Tensor"];return n&&(l.push(` dtype: ${a}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` `)),l.join(` -`)}function IT(e,t,a,n){let r=yt(t),s=n[n.length-1],i=new Array(s).fill(0),o=t.length,l=a==="complex64"?Ou(e):e;if(o>1)for(let u=0;uq5){let m=_u*i,g=Array.from(e.slice(0,m)),y=Array.from(e.slice((o-_u)*i,o*i));return a==="complex64"&&(g=Ou(g),y=Ou(y)),["["+g.map((A,x)=>Pu(A,r[x],a)).join(", ")+", ..., "+y.map((A,x)=>Pu(A,r[o-_u+x],a)).join(", ")+"]"]}return["["+(a==="complex64"?Ou(e):Array.from(e)).map((m,g)=>Pu(m,r[g],a)).join(", ")+"]"]}let u=t.slice(1),d=n.slice(1),c=n[0]*i,p=[];if(o>q5){for(let m=0;m<_u;m++){let g=m*c,y=g+c;p.push(...pc(e.slice(g,y),u,a,d,r,!1))}p.push("...");for(let m=o-_u;m1)for(let u=0;uDg){let m=Wu*i,g=Array.from(e.slice(0,m)),x=Array.from(e.slice((o-Wu)*i,o*i));return a==="complex64"&&(g=Gu(g),x=Gu(x)),["["+g.map((A,y)=>Uu(A,r[y],a)).join(", ")+", ..., "+x.map((A,y)=>Uu(A,r[o-Wu+y],a)).join(", ")+"]"]}return["["+(a==="complex64"?Gu(e):Array.from(e)).map((m,g)=>Uu(m,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>Dg){for(let m=0;m`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=a||yA(t,this.size),this.strides=ml(e)}set(e,...t){t.length===0&&(t=[0]),F(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let a=this.locToIndex(t);this.values[a]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let a=e[e.length-1];for(let n=0;nIc(a))}catch(a){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),On().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=On().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Ic(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await On().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(On().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Xo.print(this,e)}clone(){return this.throwIfDisposed(),Xo.clone(this)}toString(e=!1){let t=this.dataSync();return kT(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Xo.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(dt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function ET(){return U1("Tensor",()=>dt)}ET();var ed=class extends dt{constructor(e,t,a,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=a}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Jr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);On().disposeTensor(this),this.dataId=e.dataId,On().incRef(this,null)}dispose(){On().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ed,Symbol.hasInstance,{value:e=>e instanceof dt&&e.assign!=null&&e.assign instanceof Function});var RA={};He(RA,{assertTypesMatch:()=>MA,getTensorsInContainer:()=>t2,isTensorInList:()=>MT,makeTypesMatch:()=>It});var Hm;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Hm||(Hm={}));var qm;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(qm||(qm={}));var Xm;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(Xm||(Xm={}));var Km;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Km||(Km={}));var Zm;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Zm||(Zm={}));var RT={float32:Km,int32:qm,bool:Xm,complex64:Zm};function ra(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return RT[e][t]}function jd(e){return ra(e,"int32")}function It(e,t){if(e.dtype===t.dtype)return[e,t];let a=ra(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function MA(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function MT(e,t){return t.some(a=>a.id===e.id)}function t2(e){let t=[];return $A(e,t,new Set),t}function $A(e,t,a){if(e==null)return;if(e instanceof dt){t.push(e);return}if(!$T(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),$A(s,t,a))}}function $T(e){return Array.isArray(e)||typeof e=="object"}function $m(e){return e.kernelName!=null}var X5=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},td=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new X5}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Zn(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let a=t.factory();if(a&&!(a instanceof fl)&&typeof a.then=="function"){let n=++this.pendingBackendInitId,r=a.then(s=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(a),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,a){e();try{let n=a();return t(),n}catch(n){throw t(),n}}nextTensorId(){return td.nextTensorId++}nextVariableId(){return td.nextVariableId++}clone(e){let t=z.runKernel(Fi,{x:e}),a={x:e},n=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return z.runKernel(yi,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,a,[t],n,r,{}),t}runKernel(e,t,a){if(this.backendName==null&&this.backend,kc(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:a})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,a){let n=this.backend.numDataIds(),r=0;a.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,a=[],n=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=$m(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if($m(e)){let{kernelName:h,inputs:f,attrs:m}=e;this.backendName==null&&this.backend;let g=kc(h,this.backendName);F(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=g.kernelFunc({inputs:f,attrs:m,backend:this.backend});let A=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,A);let x=A.map(b=>b.rank!=null?b:this.makeTensorFromTensorInfo(b));if(n){let b=this.getTensorsForGradient(h,f,x);a=this.saveTensorsForBackwardMode(b)}return x}}else{let{forwardFunc:h}=e,f=m=>{!n||(a=m.map(g=>this.keep(this.clone(g))))};i=()=>{let m=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,f));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,m,g),g}}let{inputs:u,attrs:d}=e,c=$m(e)?null:e.backwardsFunc,p;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(p=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(p),t=p.outputs)}),n&&this.addTapeNode(l,u,t,c,a,d),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:p.timeMs,extraInfo:p.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,a){let n=Um(e);if(n!=null){let r=n.inputsToSave||[],s=n.outputsToSave||[],i;n.saveAllInputs?(F(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=a.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,a,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");a=a||"float32",n=n||this.backend;let r=e;a==="string"&&zr(e[0])&&(r=e.map(o=>Ud(o)));let s=n.write(r,t,a),i=new dt(t,a,s,this.nextTensorId());if(this.trackTensor(i,n),a==="string"){let o=this.state.tensorInfo.get(s),l=bA(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,a,n){a=a||"float32";let r={dataId:e,shape:t,dtype:a};return this.makeTensorFromTensorInfo(r,n)}makeTensorFromTensorInfo(e,t){let{dataId:a,shape:n,dtype:r}=e,s=new dt(n,r,a,this.nextTensorId());return this.trackTensor(s,t),s}makeVariable(e,t=!0,a,n){a=a||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let r=new ed(e,t,a,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let a=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(a=e.size*Wm(e.dtype)),this.state.numBytes+=a,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:a})),e instanceof ed||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let a=e.size*Wm(e.dtype);this.state.numBytes-=a}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,a=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-a;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,a,n,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:a,saved:r},o=Um(e);o!=null&&(n=o.gradFunc),n!=null&&(i.gradient=l=>(l=l.map((u,d)=>{if(u==null){let c=a[d],p=Vc(c.size,c.dtype);return this.makeTensor(p,c.shape,c.dtype)}return u}),n(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=t2(e),a=new Set(t.map(r=>r.id));for(let r=0;r{!r.kept&&r.scopeId===n.id&&this.track(r)})}gradients(e,t,a,n=!1){if(F(t.length>0,()=>"gradients() received an empty list of xs."),a!=null&&a.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${a.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));F(r instanceof dt,()=>"The result y returned by f() must be a tensor.");let s=vT(this.state.activeTape,t,r);if(!n&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=a==null?_T(r.shape):a,wT(i,s,l=>this.tidy(l),FT);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return F(Gr(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{F(t.every(i=>i instanceof dt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let a,n={};t.forEach((i,o)=>{n[o]=i});let r=(i,o)=>(a=e(...t,o),F(a.value instanceof dt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),F(Gr(a.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),a.value),s=(i,o)=>{let l=a.gradFunc(i,o),u=Array.isArray(l)?l:[l];F(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),F(u.every(c=>c instanceof dt),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let d={};return u.forEach((c,p)=>{d[p]=()=>c}),d};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Qu(),a=await this.backend.time(e);return a.wallMs=Qu()-t,a}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new X5;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};td.nextTensorId=0;td.nextVariableId=0;function _T(e){let t=B1(yt(e),"float32");return z.makeTensor(t,e,"float32")}function _A(){let e=SA();if(e._tfengine==null){let t=new IA(e);e._tfengine=new td(t)}return JS(e._tfengine.ENV),TT(()=>e._tfengine),e._tfengine}var z=_A();function FT(e,t){let a={a:e,b:t};return z.runKernel(vr,a)}var Hd={};He(Hd,{isBrowser:()=>FA,isMobile:()=>DT,mockIsMobile:()=>OT});function PT(){return typeof navigator!="undefined"&&navigator!=null}var Ym;function OT(e){Ym=e}function DT(e){if(Ym!==void 0)return Ym;if(e||PT()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let a=e;return a.userAgentData&&a.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function FA(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ka=V();Ka.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Ka.registerFlag("IS_BROWSER",()=>FA());Ka.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ka.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ka.registerFlag("PROD",()=>!1);Ka.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ka.getBool("DEBUG"));Ka.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ka.registerFlag("IS_TEST",()=>!1);Ka.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);Ka.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ka.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);Ka.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ka.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Yn(e,t){let a=e;if(da(e))return t==="string"?[]:[e.length];if(typeof e=="object"&&"texture"in e){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||da(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&V().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&PA(e,n,[]),n}function PA(e,t,a){if(a=a||[],!Array.isArray(e)&&!da(e)){F(t.length===0,()=>`Element arr[${a.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}F(t.length>0,()=>`Element arr[${a.join("][")}] should be a primitive, but is an array of ${e.length} elements`),F(e.length===t[0],()=>`Element arr[${a.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let n=t.slice(1);for(let r=0;r=0&&(r=n),K5(n,r,t,a),e==null||!da(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${a}' must be a Tensor or TensorLike, but got '${o}'`)}let s=Yn(e,r);!da(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?fh(e,r):ai(e,[],!0);return z.makeTensor(i,s,r)}function ad(e,t,a,n="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${a} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>R(r,`${t}[${s}]`,a,n))}var a2="__op";function D(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let a=t[0],n=e[a];a.endsWith("_")&&(a=a.substring(0,a.length-1)),a=a+a2;let r=(...s)=>{z.startScope(a);try{let i=n(...s);return V1(i)&&console.error("Cannot return a Promise inside of tidy."),z.endScope(i),i}catch(i){throw z.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function zT(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Sa(a.shape,n.shape,`real and imag shapes, ${a.shape} and ${n.shape}, must match in call to tf.complex().`);let r={real:a,imag:n};return z.runKernel(Id,r)}var xr=D({complex_:zT});function xs(e,t,a,n){if(n==null&&(n=Wc(e)),n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof e=="object"&&"texture"in e){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return e.channels=e.channels||"RGBA",z.backend.createTensorFromTexture(e,t||a,n)}if(!da(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){W1(t);let r=yt(t),s=yt(a);F(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${a}) does not match the provided shape (${t}). `)}}return!da(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?fh(e,n):ai(e,[],!0),z.makeTensor(e,t,n)}function ze(e,t,a){let n=Yn(e,a);return xs(e,t,n,a)}var Jm={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Sc=4;async function LT(e,t){let a=[],n=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let p=await l.bytes(),h=p.reduce((g,y)=>g+y.length,0)+Sc*p.length,f=new Uint8Array(h),m=0;for(let g=0;g{if(t+=s.byteLength,a.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var n2=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Z5(e){return n2?Buffer.byteLength(e):new Blob([e]).size}function WT(e){if(n2)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{t+=r.byteLength});let a=new Uint8Array(t),n=0;return e.forEach(r=>{a.set(new Uint8Array(r),n),n+=r.byteLength}),a.buffer}function Y5(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let a=e.split(t);return a[a.length-1]}function DA(e,t){let a={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(a.initializerSignature=e.initializerSignature),e.trainingConfig!=null&&(a.trainingConfig=e.trainingConfig),a}function zA(e,t,a){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!a)throw new Error("modelJSON has weightsManifest but weightData is null");n.weightSpecs=t,n.weightData=a}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(n.initializerSignature=e.initializerSignature),n}async function s2(e,t){let a,n;return e.weightsManifest!=null&&([a,n]=await t(e.weightsManifest)),zA(e,a,n)}function qd(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:Z5(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:Z5(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function LA(e){let t=[];for(let a of e)t.push(...a.weights);return t}function GT(){let e=a=>{let n=a<<13,r=0;for(;(n&8388608)===0;)r-=8388608,n<<=1;return n&=-8388609,r+=947912704,n|r},t=new Uint32Array(2048);t[0]=0;for(let a=1;a<1024;a++)t[a]=e(a);for(let a=1024;a<2048;a++)t[a]=939524096+(a-1024<<13);return t}function UT(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function jT(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function HT(){let e=GT(),t=UT(),a=jT();return n=>{let r=new ArrayBuffer(4*n.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var Et=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Et.instance==null&&(Et.instance=new Et),Et.instance}static registerSaveRouter(e){Et.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Et.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Et.getHandlers(e,"save")}static getLoadHandlers(e,t){return Et.getHandlers(e,"load",t)}static getHandlers(e,t,a){let n=[];return(t==="load"?Et.getInstance().loadRouters:Et.getInstance().saveRouters).forEach(r=>{let s=r(e,a);s!==null&&n.push(s)}),n}},qT=e=>Et.registerSaveRouter(e),XT=e=>Et.registerLoadRouter(e),KT=e=>Et.getSaveHandlers(e),ZT=(e,t)=>Et.getLoadHandlers(e,t),Qm="tensorflowjs",e1=1,Ys="models_store",Lr="model_info_store";function BA(){if(!V().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function t1(e){let t=e.result;t.createObjectStore(Ys,{keyPath:"modelPath"}),t.createObjectStore(Lr,{keyPath:"modelPath"})}var ni=class{constructor(e){if(this.indexedDB=BA(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((a,n)=>{let r=this.indexedDB.open(Qm,e1);r.onupgradeneeded=()=>t1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(Ys,"readonly"),o=i.objectStore(Ys).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));a(o.result.modelArtifacts)},o.onerror=l=>(s.close(),n(o.error)),i.oncomplete=()=>s.close()}else{let i=qd(t),o=s.transaction(Lr,"readwrite"),l=o.objectStore(Lr),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),d;u.onsuccess=()=>{d=s.transaction(Ys,"readwrite");let c=d.objectStore(Ys).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});c.onsuccess=()=>a({modelArtifactsInfo:i}),c.onerror=p=>{l=o.objectStore(Lr);let h=l.delete(this.modelPath);h.onsuccess=()=>(s.close(),n(c.error)),h.onerror=f=>(s.close(),n(c.error))}},u.onerror=c=>(s.close(),n(u.error)),o.oncomplete=()=>{d==null?s.close():d.oncomplete=()=>s.close()}}},r.onerror=s=>n(r.error)})}};ni.URL_SCHEME="indexeddb://";var WA=e=>V().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ni.URL_SCHEME)?YT(e.slice(ni.URL_SCHEME.length)):null;Et.registerSaveRouter(WA);Et.registerLoadRouter(WA);function YT(e){return new ni(e)}function JT(e){return e.startsWith(ni.URL_SCHEME)?e.slice(ni.URL_SCHEME.length):e}var QT=class{constructor(){this.indexedDB=BA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(Qm,e1);a.onupgradeneeded=()=>t1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Lr,"readonly"),s=r.objectStore(Lr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(n.close(),t(s.error)),r.oncomplete=()=>n.close()},a.onerror=n=>t(a.error)})}async removeModel(e){return e=JT(e),new Promise((t,a)=>{let n=this.indexedDB.open(Qm,e1);n.onupgradeneeded=()=>t1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Lr,"readwrite"),i=s.objectStore(Lr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),a(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),d=()=>{l=r.transaction(Ys,"readwrite");let c=l.objectStore(Ys).delete(e);c.onsuccess=()=>t(o.result.modelArtifactsInfo),c.onerror=p=>a(o.error)};u.onsuccess=d,u.onerror=c=>(d(),r.close(),a(o.error))}},o.onerror=u=>(r.close(),a(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},n.onerror=r=>a(n.error)})}},mr="/",Ko="tensorflowjs_models",VA="info",eC="model_topology",tC="weight_specs",aC="weight_data",nC="model_metadata";function GA(e){return{info:[Ko,e,VA].join(mr),topology:[Ko,e,eC].join(mr),weightSpecs:[Ko,e,tC].join(mr),weightData:[Ko,e,aC].join(mr),modelMetadata:[Ko,e,nC].join(mr)}}function UA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function rC(e){let t=e.split(mr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(mr)}function sC(e){return e.startsWith(ri.URL_SCHEME)?e.slice(ri.URL_SCHEME.length):e}var ri=class{constructor(e){if(!V().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=GA(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),a=JSON.stringify(e.weightSpecs),n=qd(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,a),this.LS.setItem(this.keys.weightData,WT(e.weightData));let r={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:n}}catch(r){throw UA(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},a=JSON.parse(this.LS.getItem(this.keys.topology));if(a==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=a;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=VT(s),t}};ri.URL_SCHEME="localstorage://";var jA=e=>V().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ri.URL_SCHEME)?iC(e.slice(ri.URL_SCHEME.length)):null;Et.registerSaveRouter(jA);Et.registerLoadRouter(jA);function iC(e){return new ri(e)}var oC=class{constructor(){F(V().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),F(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Ko+mr,a=mr+VA;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(Jo)&&(e=e.slice(0,e.indexOf(Jo))),F(e.length>0,()=>"scheme must not be an empty string.");let a=Oa.getInstance();F(a.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),a.managers[e]=t}static getManager(e){let t=Oa.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Oa.getInstance().managers)}};function cc(e){if(e.indexOf(Jo)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Oa.getSchemes().join(",")}`);return{scheme:e.split(Jo)[0],path:e.split(Jo)[1]}}async function HA(e,t,a=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=Et.getLoadHandlers(e);F(n.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),F(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${e}.`);let r=n[0],s=Et.getSaveHandlers(t);F(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),F(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],o=cc(e).scheme,l=cc(e).path,u=o===cc(e).scheme,d=await r.load();a&&u&&await Oa.getManager(o).removeModel(l);let c=await i.save(d);return a&&!u&&await Oa.getManager(o).removeModel(l),c.modelArtifactsInfo}async function lC(){let e=Oa.getSchemes(),t={};for(let a of e){let n=await Oa.getManager(a).listModels();for(let r in n){let s=a+Jo+r;t[s]=n[r]}}return t}async function uC(e){let t=cc(e);return Oa.getManager(t.scheme).removeModel(t.path)}async function dC(e,t){return HA(e,t,!1)}async function pC(e,t){return HA(e,t,!0)}var cC=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!V().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",a=>{if(a.source===window&&a.data.name===this.messageName){a.stopPropagation();let n=this.functionRefs[a.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(V().get("IS_BROWSER")){V().setPlatform("browser",new cC);try{Oa.registerManager(ri.URL_SCHEME,new oC)}catch(e){}try{Oa.registerManager(ni.URL_SCHEME,new QT)}catch(e){}}var hC={importFetch:()=>AS()},_m,fC=class{constructor(){this.util=xS(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return V().global.fetch!=null?V().global.fetch(e,t):(_m==null&&(_m=hC.importFetch()),_m(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};V().get("IS_NODE")&&!V().get("IS_BROWSER")&&V().setPlatform("node",new fC);function ve(e,t="float32",a){return t=t||"float32",W1(e),new Mt(e,t,a)}function mC(e,t){let a=R(e,"x","cast");if(!xA(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&a.dtype!=="string"||t!=="string"&&a.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:a},r={dtype:t};return z.runKernel(yi,n,r)}var Ue=D({cast_:mC});function gC(e){let t={x:R(e,"x","clone","string_or_numeric")};return z.runKernel(Fi,t)}var wa=D({clone_:gC});function i2(e,t=!1){console.log(e.toString(t))}_A();var yC={buffer:ve,cast:Ue,clone:wa,print:i2};CT(yC);var Hn={};He(Hn,{browserFiles:()=>IC,browserHTTPRequest:()=>EC,concatenateArrayBuffers:()=>r2,copyModel:()=>dC,decodeWeights:()=>OA,encodeWeights:()=>LT,fromMemory:()=>MC,fromMemorySync:()=>YA,getLoadHandlers:()=>ZT,getModelArtifactsForJSON:()=>s2,getModelArtifactsForJSONSync:()=>zA,getModelArtifactsInfoForJSON:()=>qd,getSaveHandlers:()=>KT,getWeightSpecs:()=>LA,http:()=>l2,isHTTPScheme:()=>a1,listModels:()=>lC,loadWeights:()=>SC,moveModel:()=>pC,registerLoadRouter:()=>XT,registerSaveRouter:()=>qT,removeModel:()=>uC,weightsLoaderFactory:()=>XA,withSaveHandler:()=>$C,withSaveHandlerSync:()=>_C});var AC="model",xC=".json",bC=".weights.bin";function J5(e){return new Promise(t=>setTimeout(t)).then(e)}var nl=class{constructor(e){if(!V().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(nl.URL_SCHEME)&&(e=e.slice(nl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=AC),this.modelJsonFileName=e+xC,this.weightDataFileName=e+bC}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let a=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],n=DA(e,a),r=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:"application/json"})),s=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(s.download=this.modelJsonFileName,s.href=r,await J5(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await J5(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:qd(e)}}}};nl.URL_SCHEME="downloads://";var vC=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let a=new FileReader;a.onload=n=>{let r=JSON.parse(n.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=s2(r,o=>this.loadWeights(o));e(i)},a.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(this.jsonFile)})}loadWeights(e){let t=[],a=[];for(let s of e)t.push(...s.weights),a.push(...s.paths);let n=this.checkManifestAndWeightFiles(e),r=a.map(s=>this.loadWeightsFile(s,n[s]));return Promise.all(r).then(s=>[t,r2(s)])}loadWeightsFile(e,t){return new Promise((a,n)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;a(i)},r.onerror=s=>n(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],a=this.weightsFiles.map(r=>Y5(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=Y5(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),a.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[s]=this.weightsFiles[a.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},wC=e=>V().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(nl.URL_SCHEME)?kC(e.slice(nl.URL_SCHEME.length)):null;Et.registerSaveRouter(wC);function kC(e="model"){return new nl(e)}function IC(e){return new vC(e)}function Q5(e,t,a,n){i(e),a=a==null?0:a,n=n==null?1:n,o(a,n);let r=0,s=l=>(l.then(u=>{let d=a+ ++r/e.length*(n-a);return t(d),u}),l);function i(l){F(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){F(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),F(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),F(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function qA(e,t){t==null&&(t={});let a=t.fetchFunc==null?V().platform.fetch:t.fetchFunc,n=e.map(u=>a(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(n):await Q5(n,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await Q5(i,t.onProgress,o,l)}async function SC(e,t="",a,n){return XA(r=>qA(r,{requestInit:n}))(e,t,a)}function XA(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,f)=>{let m=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,A=Jm[y]*yt(g.shape),x=()=>{r[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:m,sizeBytes:A})};n!=null?n.forEach((b,w)=>{b===g.name&&(x(),i[w]=!0)}):x(),o.push(g.name),m+=A})}),!i.every(h=>h)){let h=n.filter((f,m)=>!i[m]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. -Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,f,m)=>(f&&h.push(m),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(f=>{let m=a+(a.endsWith("/")?"":"/")+f;u.push(m)})});let d=await e(u),c={},p=0;return l.forEach(h=>{let f=t[h].paths.length,m=0;for(let x=0;x{let b=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),w=OA(b,[x.manifestEntry]);for(let S in w)c[S]=w[S]}),p+=f}),c}}var TC="application/octet-stream",CC="application/json",o2=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(F(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=V().platform.fetch,F(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&F(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let a=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=DA(e,a);t.body.append("model.json",new Blob([JSON.stringify(n)],{type:CC}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:TC}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:qd(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return s2(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=NC(t),r=this.weightPathPrefix||a,s=LA(e),i=[],o=[];for(let u of e)for(let d of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(d)):i.push(r+d+n);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await qA(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,r2(l)]}};o2.URL_SCHEME_REGEX=/^https?:\/\//;function NC(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function a1(e){return e.match(o2.URL_SCHEME_REGEX)!=null}var KA=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>a1(n)):a=a1(e),a)return l2(e,t)}return null};Et.registerSaveRouter(KA);Et.registerLoadRouter(KA);function l2(e,t){return new o2(e,t)}function EC(e,t){return l2(e,t)}var Fm=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},ZA=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},RC=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function MC(e,t,a,n){let r=arguments;return new RC(YA(...r))}function YA(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new Fm(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Fm({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Fm({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function $C(e){return new ZA(e)}function _C(e){return new ZA(e)}var JA={};He(JA,{confusionMatrix:()=>ZC});function FC(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=It(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return z.runKernel(gi,i,o)}var st=D({matMul_:FC});function PC(e,t,a=1,n=0,r="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:R(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:a,offValue:n};return z.runKernel(Rl,s,i)}var Tc=D({oneHot_:PC});function u2(){V().set("PROD",!0)}function OC(){V().set("DEBUG",!0)}function DC(){V().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function d2(e){V().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}NT(d2);function zC(){z.disposeVariables()}function kt(){return z}function LC(){return z.memory()}function BC(e){return z.profile(e)}function Ee(e,t){return z.tidy(e,t)}function Y(e){t2(e).forEach(t=>t.dispose())}function qn(e){return z.keep(e)}function WC(e){return z.time(e)}function Xd(e){return z.setBackend(e)}function Kd(){return z.ready()}function ia(){return z.backendName}function VC(e){z.removeBackend(e)}function p2(e){return z.findBackend(e)}function GC(e){return z.findBackendFactory(e)}function uo(e,t,a=1){return z.registerBackend(e,t,a)}function tr(){return z.backend}function UC(e,t){V().setPlatform(e,t)}function jC(e){let t={input:R(e,"input","imag")};return z.runKernel(Cd,t)}var Zd=D({imag_:jC});function HC(e){let t={x:R(e,"x","neg")};return z.runKernel(Cl,t)}var Xn=D({neg_:HC});function qC(e){let t={input:R(e,"input","real")};return z.runKernel($d,t)}var rl=D({real_:qC});function XC(e,t,a){let n=R(e,"x","transpose");if(t==null&&(t=n.shape.map((i,o)=>o).reverse()),F(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{F(i>=0&&i`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},s={perm:t};return n.dtype==="complex64"?Ee(()=>{let i=rl(n),o=Zd(n);return i=z.runKernel(yr,{x:i},s),o=z.runKernel(yr,{x:o},s),a&&(o=Xn(o)),xr(i,o)}):z.runKernel(yr,r,s)}var si=D({transpose_:XC});function KC(e,t,a){let n=R(e,"labels","confusionMatrix"),r=R(t,"predictions","confusionMatrix");F(a==null||a>0&&Number.isInteger(a),()=>`If provided, numClasses must be a positive integer, but got ${a}`),F(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),F(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),F(n.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),F(a>0&&Number.isInteger(a),()=>`numClasses is required to be a positive integer, but got ${a}`);let s=Tc(Ue(n,"int32"),a),i=Tc(Ue(r,"int32"),a),o=si(s),l=st(o,i);return Ue(l,"int32")}var ZC=D({confusionMatrix_:KC}),po={};He(po,{assertAndGetBroadcastShape:()=>zt,getBroadcastDims:()=>QA,getReductionAxes:()=>c2});function QA(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function c2(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function zt(e,t){let a=[],n=Math.max(e.length,t.length);for(let r=0;rnN,fromPixelsAsync:()=>tN,toPixels:()=>aN});function h2(e,t,a){if(ci(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Yn(e,a);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return xs(e,t,n,a)}var Us;function ex(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let a=!1,n=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)a=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(kc(Yu,z.backendName)!=null){let p={pixels:e},h={numChannels:t};return z.runKernel(Yu,p,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],d;if(i)d=e.getContext("2d").getImageData(0,0,l,u).data;else if(n||a)d=e.data;else if(s||r||o){if(Us==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Us=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Us=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Us.canvas.width=l,Us.canvas.height=u,Us.drawImage(e,0,0,l,u),d=Us.getImageData(0,0,l,u).data}let c;if(t===4)c=new Int32Array(d);else{let p=l*u;c=new Int32Array(p*t);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(a.dtype!=="float32"&&a.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${a.dtype}. Please use float32 or int32 tensors.`);let i=await a.data(),o=a.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*n*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(a.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(d[0]=h*o,d[1]=h*o,d[2]=h*o):d[p]=h*o}let c=u*4;l[c+0]=Math.round(d[0]),l[c+1]=Math.round(d[1]),l[c+2]=Math.round(d[2]),l[c+3]=Math.round(d[3])}if(t!=null){t.width=r,t.height=n;let u=t.getContext("2d"),d=new ImageData(l,r,n);u.putImageData(d,0,0)}return a!==e&&a.dispose(),l}var nN=D({fromPixels_:ex}),f2={};He(f2,{prepareAndValidate:()=>tx});function tx(e,t){let a=e.shape.length,n=t.shape.length;if(a<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${a}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[n-1]>a)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[n-1]} vs. ${a}`);if(yt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let c=0;cc/u),1].slice(0,s);return[l,i,u,d]}var m2={};He(m2,{calculateShapes:()=>ax,validateInput:()=>y2,validateUpdateShape:()=>g2});function g2(e,t,a){let n=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${a.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${n}, and batchDim: ${r}.`;if(a.rank1?t.shape[n-1]:1,s=a.length,i=1;for(let c=r;csN,computeFlatOffset:()=>dN,computeOutShape:()=>oN,getNormalizedAxes:()=>lN,isSliceContinous:()=>uN,maskToAxes:()=>iN,parseSliceParams:()=>pN,sliceInfo:()=>cN,startForAxis:()=>ux,startIndicesWithElidedDims:()=>ix,stopForAxis:()=>dx,stopIndicesWithElidedDims:()=>ox,stridesForAxis:()=>lx,stridesWithElidedDims:()=>nx});var n1=-2,rN=-1;function sN(e,t,a){let n=e.shape.length;F(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),F(n===a.length,()=>`Error in slice${n}D: Length of size ${a} must match the rank of the array (${n}).`);for(let r=0;r`Error in slice${n}D: begin[${r}] + size[${r}] (${t[r]+a[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function iN(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function oN(e,t,a){let n=[];for(let r=0;r0){let h=t[0],f=a+1;d=ix(i,h,f,n,e),c=ox(o,h,f,r,e),p=nx(s,h,f,e)}else for(let h=0;h-1)s[o]=0;else{let l=rx(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=rx(t,a,o),u=n[l];e&1<0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),i=Zu(0,i,l-1),i}function dx(e,t,a,n,r,s){let i=t[r],o=a[r]||1;(e&1<0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),o>0?i=Zu(0,i,l):i=Zu(-1,i,l-1),i}function uN(e,t,a){let n=a.length;for(let r=0;r1){n=r;break}for(let r=n+1;r0||a[r]!==e[r])return!1;return!0}function dN(e,t){let a=e.length>0?e[e.length-1]:1;for(let n=0;n{F(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return a==null?s=new Array(r).fill(-1):typeof a=="number"?s=[a,...new Array(r-1).fill(-1)]:a.lengthi>=0?i:(F(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-n[o])),[n,s]}function cN(e,t,a,n,r,s,i,o,l){let u;if(n==null?(u=new Array(t.length),u.fill(1)):u=n,i!=null&&(i&i-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let d=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:a.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let A=0;A0?0:-1,p.strides[A]>0?b:b-1];if(x&&p.strides[A]<=0)throw Error("only stride 1 allowed on non-range indexing.");m=m&&p.strides[A]===1;let C=!!(p.beginMask&1<=b)throw Error(`slice index ${p.begin[A]} of dimension ${A} out of bounds.`)}else p.begin[A]=ey(p.begin[A],0,p.strides[A],b,w,S),p.end[A]=ey(p.end[A],1,p.strides[A],b,w,S);let $=p.strides[A]===1&&p.begin[A]===0&&p.end[A]===b;h=h&&$,f=f&&(A===0&&p.strides[A]===1||$)}else h=h&&p.strides[A]===1&&C,f=f&&(A===0&&p.strides[A]===1||C);let N,_=!1;if(p.beginValid&&p.endValid?(N=p.end[A]-p.begin[A],_=!0):x?(N=1,_=!0):C&&b>=0&&(p.strides[A]<0?N=-b:N=b,_=!0),_){let $;N===0||N<0!=p.strides[A]<0?$=0:$=Math.trunc(N/p.strides[A])+(N%p.strides[A]!==0?1:0),g.push($)}else g.push(-1)}for(let A=0;A=0?y.push(g[x]):x===n1&&y.push(1)}return{finalShapeSparse:y.filter((A,x)=>p.finalShapeGatherIndices[x]!==n1),finalShape:y,isIdentity:h,sliceDim0:f,isSimpleSlice:m,begin:p.begin,end:p.end,strides:p.strides}}function hN(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let a=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let n=0;n0?s[t]:s[t+1&1];{let i=e<0?n+e:e;return is[1]?s[1]:i}}var px={};He(px,{Serializable:()=>cx,SerializationMap:()=>Ks,registerClass:()=>bs});var cx=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ks=class{constructor(){this.classNameMap={}}static getMap(){return Ks.instance==null&&(Ks.instance=new Ks),Ks.instance}static register(e){Ks.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function bs(e){F(e.className!=null,()=>"Class being registered does not have the static className property defined."),F(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),F(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Ks.register(e)}var hx={};He(hx,{TEST_EPSILON_FLOAT16:()=>fx,createVideoElement:()=>vN,encodeStrings:()=>mx,expectArrayBuffersEqual:()=>bN,expectArraysClose:()=>mN,expectArraysEqual:()=>yN,expectNumbersClose:()=>AN,expectPromiseToFail:()=>gN,expectValuesInRange:()=>xN,play:()=>wN,testEpsilon:()=>A2});var fN=.001,fx=.1;function mN(e,t,a){return a==null&&(a=A2()),r1(e,t,(n,r)=>x2(n,r,a))}function A2(){return z.backend.floatPrecision()===32?fN:fx}function r1(e,t,a){let n=!0;if((da(e)||da(t))&&(n=!1),da(e)&&da(t)&&(n=!0),n){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=Yn(e),o=Yn(t);if(!Jr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=da(e)?e:ai(e),s=da(t)?t:ai(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}. +`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":f),d}function Gu(e){let t=[];for(let a=0;a`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=a||sA(t,this.size),this.strides=bl(e)}set(e,...t){t.length===0&&(t=[0]),P(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let a=this.locToIndex(t);this.values[a]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let a=e[e.length-1];for(let n=0;nkc(a))}catch(a){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Pn().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Pn().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>kc(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Pn().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Pn().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Jo.print(this,e)}clone(){return this.throwIfDisposed(),Jo.clone(this)}toString(e=!1){let t=this.dataSync();return jS(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Jo.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),Pn().makeVariable(this,e,t,a)}};Object.defineProperty(pt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function JS(){return L1("Tensor",()=>pt)}JS();var od=class extends pt{constructor(e,t,a,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=a}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Jr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Pn().disposeTensor(this),this.dataId=e.dataId,Pn().incRef(this,null)}dispose(){Pn().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(od,Symbol.hasInstance,{value:e=>e instanceof pt&&e.assign!=null&&e.assign instanceof Function});var AA={};Xe(AA,{assertTypesMatch:()=>yA,getTensorsInContainer:()=>Z1,isTensorInList:()=>eT,makeTypesMatch:()=>St});var Gm;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Gm||(Gm={}));var Hm;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Hm||(Hm={}));var jm;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(jm||(jm={}));var qm;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(qm||(qm={}));var Xm;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Xm||(Xm={}));var QS={float32:qm,int32:Hm,bool:jm,complex64:Xm};function ca(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return QS[e][t]}function Hd(e){return ca(e,"int32")}function St(e,t){if(e.dtype===t.dtype)return[e,t];let a=ca(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function yA(e,t){P(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function eT(e,t){return t.some(a=>a.id===e.id)}function Z1(e){let t=[];return bA(e,t,new Set),t}function bA(e,t,a){if(e==null)return;if(e instanceof pt){t.push(e);return}if(!tT(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),bA(s,t,a))}}function tT(e){return Array.isArray(e)||typeof e=="object"}function Rm(e){return e.kernelName!=null}var zg=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},ld=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new zg}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Kn(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let a=t.factory();if(a&&!(a instanceof yl)&&typeof a.then=="function"){let n=++this.pendingBackendInitId,r=a.then(s=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(a),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,a){e();try{let n=a();return t(),n}catch(n){throw t(),n}}nextTensorId(){return ld.nextTensorId++}nextVariableId(){return ld.nextVariableId++}clone(e){let t=z.runKernel(vi,{x:e}),a={x:e},n=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return z.runKernel(Qs,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,a,[t],n,r,{}),t}runKernel(e,t,a){if(this.backendName==null&&this.backend,wc(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:a})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,a){let n=this.backend.numDataIds(),r=0;a.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,a=[],n=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=Rm(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Rm(e)){let{kernelName:h,inputs:f,attrs:m}=e;this.backendName==null&&this.backend;let g=wc(h,this.backendName);P(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let x=this.backend.numDataIds();o=g.kernelFunc({inputs:f,attrs:m,backend:this.backend});let A=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,x,A);let y=A.map(b=>b.rank!=null?b:this.makeTensorFromTensorInfo(b));if(n){let b=this.getTensorsForGradient(h,f,y);a=this.saveTensorsForBackwardMode(b)}return y}}else{let{forwardFunc:h}=e,f=m=>{!n||(a=m.map(g=>this.keep(this.clone(g))))};i=()=>{let m=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,f));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,m,g),g}}let{inputs:u,attrs:p}=e,c=Rm(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(l,u,t,c,a,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,a){let n=Vm(e);if(n!=null){let r=n.inputsToSave||[],s=n.outputsToSave||[],i;n.saveAllInputs?(P(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=a.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,a,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");a=a||"float32",n=n||this.backend;let r=e;a==="string"&&Dr(e[0])&&(r=e.map(o=>Gd(o)));let s=n.write(r,t,a),i=new pt(t,a,s,this.nextTensorId());if(this.trackTensor(i,n),a==="string"){let o=this.state.tensorInfo.get(s),l=lA(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,a,n){a=a||"float32";let r={dataId:e,shape:t,dtype:a};return this.makeTensorFromTensorInfo(r,n)}makeTensorFromTensorInfo(e,t){let{dataId:a,shape:n,dtype:r}=e,s=new pt(n,r,a,this.nextTensorId());return this.trackTensor(s,t),s}makeVariable(e,t=!0,a,n){a=a||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let r=new od(e,t,a,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let a=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(a=e.size*Lm(e.dtype)),this.state.numBytes+=a,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:a})),e instanceof od||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let a=e.size*Lm(e.dtype);this.state.numBytes-=a}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,a=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-a;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,a,n,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:a,saved:r},o=Vm(e);o!=null&&(n=o.gradFunc),n!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let c=a[p],d=Wc(c.size,c.dtype);return this.makeTensor(d,c.shape,c.dtype)}return u}),n(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Z1(e),a=new Set(t.map(r=>r.id));for(let r=0;r{!r.kept&&r.scopeId===n.id&&this.track(r)})}gradients(e,t,a,n=!1){if(P(t.length>0,()=>"gradients() received an empty list of xs."),a!=null&&a.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${a.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));P(r instanceof pt,()=>"The result y returned by f() must be a tensor.");let s=GS(this.state.activeTape,t,r);if(!n&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=a==null?aT(r.shape):a,HS(i,s,l=>this.tidy(l),nT);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return P(Ur(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{P(t.every(i=>i instanceof pt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let a,n={};t.forEach((i,o)=>{n[o]=i});let r=(i,o)=>(a=e(...t,o),P(a.value instanceof pt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),P(Ur(a.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),a.value),s=(i,o)=>{let l=a.gradFunc(i,o),u=Array.isArray(l)?l:[l];P(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),P(u.every(c=>c instanceof pt),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return u.forEach((c,d)=>{p[d]=()=>c}),p};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=id(),a=await this.backend.time(e);return a.wallMs=id()-t,a}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new zg;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};ld.nextTensorId=0;ld.nextVariableId=0;function aT(e){let t=O1(At(e),"float32");return z.makeTensor(t,e,"float32")}function vA(){let e=hA();if(e._tfengine==null){let t=new cA(e);e._tfengine=new ld(t)}return vS(e._tfengine.ENV),KS(()=>e._tfengine),e._tfengine}var z=vA();function nT(e,t){let a={a:e,b:t};return z.runKernel(Qr,a)}var jd={};Xe(jd,{isBrowser:()=>wA,isMobile:()=>iT,mockIsMobile:()=>sT});function rT(){return typeof navigator!="undefined"&&navigator!=null}var Km;function sT(e){Km=e}function iT(e){if(Km!==void 0)return Km;if(e||rT()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let a=e;return a.userAgentData&&a.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function wA(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var cn=W();cn.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});cn.registerFlag("IS_BROWSER",()=>wA());cn.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");cn.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));cn.registerFlag("PROD",()=>!1);cn.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>cn.getBool("DEBUG"));cn.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);cn.registerFlag("IS_TEST",()=>!1);cn.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);cn.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);cn.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);cn.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Zn(e,t){let a=e;if(da(e))return t==="string"?[]:[e.length];if(typeof e=="object"&&"texture"in e){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||da(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&W().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&kA(e,n,[]),n}function kA(e,t,a){if(a=a||[],!Array.isArray(e)&&!da(e)){P(t.length===0,()=>`Element arr[${a.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}P(t.length>0,()=>`Element arr[${a.join("][")}] should be a primitive, but is an array of ${e.length} elements`),P(e.length===t[0],()=>`Element arr[${a.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let n=t.slice(1);for(let r=0;r=0&&(r=n),Lg(n,r,t,a),e==null||!da(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${a}' must be a Tensor or TensorLike, but got '${o}'`)}let s=Zn(e,r);!da(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?lh(e,r):Os(e,[],!0);return z.makeTensor(i,s,r)}function ud(e,t,a,n="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${a} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>R(r,`${t}[${s}]`,a,n))}var Y1="__op";function D(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let a=t[0],n=e[a];a.endsWith("_")&&(a=a.substring(0,a.length-1)),a=a+Y1;let r=(...s)=>{z.startScope(a);try{let i=n(...s);return D1(i)&&console.error("Cannot return a Promise inside of tidy."),z.endScope(i),i}catch(i){throw z.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function oT(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Sa(a.shape,n.shape,`real and imag shapes, ${a.shape} and ${n.shape}, must match in call to tf.complex().`);let r={real:a,imag:n};return z.runKernel(Sd,r)}var Ar=D({complex_:oT});function as(e,t,a,n){if(n==null&&(n=Bc(e)),n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof e=="object"&&"texture"in e){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return e.channels=e.channels||"RGBA",z.backend.createTensorFromTexture(e,t||a,n)}if(!da(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){Ya(t);let r=At(t),s=At(a);P(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${a}) does not match the provided shape (${t}). `)}}return!da(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?lh(e,n):Os(e,[],!0),z.makeTensor(e,t,n)}function Be(e,t,a){let n=Zn(e,a);return as(e,t,n,a)}var Zm={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Ic=4;async function lT(e,t){let a=[],n=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let d=await l.bytes(),h=d.reduce((g,x)=>g+x.length,0)+Ic*d.length,f=new Uint8Array(h),m=0;for(let g=0;g{if(t+=s.byteLength,a.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var J1=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Bg(e){return J1?Buffer.byteLength(e):new Blob([e]).size}function dT(e){if(J1)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{t+=r.byteLength});let a=new Uint8Array(t),n=0;return e.forEach(r=>{a.set(new Uint8Array(r),n),n+=r.byteLength}),a.buffer}function Wg(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let a=e.split(t);return a[a.length-1]}function SA(e,t){let a={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(a.initializerSignature=e.initializerSignature),e.trainingConfig!=null&&(a.trainingConfig=e.trainingConfig),a}function TA(e,t,a){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!a)throw new Error("modelJSON has weightsManifest but weightData is null");n.weightSpecs=t,n.weightData=a}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(n.initializerSignature=e.initializerSignature),n}async function e2(e,t){let a,n;return e.weightsManifest!=null&&([a,n]=await t(e.weightsManifest)),TA(e,a,n)}function qd(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:Bg(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:Bg(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function CA(e){let t=[];for(let a of e)t.push(...a.weights);return t}function cT(){let e=a=>{let n=a<<13,r=0;for(;(n&8388608)===0;)r-=8388608,n<<=1;return n&=-8388609,r+=947912704,n|r},t=new Uint32Array(2048);t[0]=0;for(let a=1;a<1024;a++)t[a]=e(a);for(let a=1024;a<2048;a++)t[a]=939524096+(a-1024<<13);return t}function hT(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function fT(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function mT(){let e=cT(),t=hT(),a=fT();return n=>{let r=new ArrayBuffer(4*n.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var Rt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Rt.instance==null&&(Rt.instance=new Rt),Rt.instance}static registerSaveRouter(e){Rt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Rt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Rt.getHandlers(e,"save")}static getLoadHandlers(e,t){return Rt.getHandlers(e,"load",t)}static getHandlers(e,t,a){let n=[];return(t==="load"?Rt.getInstance().loadRouters:Rt.getInstance().saveRouters).forEach(r=>{let s=r(e,a);s!==null&&n.push(s)}),n}},gT=e=>Rt.registerSaveRouter(e),xT=e=>Rt.registerLoadRouter(e),AT=e=>Rt.getSaveHandlers(e),yT=(e,t)=>Rt.getLoadHandlers(e,t),Ym="tensorflowjs",Jm=1,_s="models_store",zr="model_info_store";function NA(){if(!W().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Qm(e){let t=e.result;t.createObjectStore(_s,{keyPath:"modelPath"}),t.createObjectStore(zr,{keyPath:"modelPath"})}var Ds=class{constructor(e){if(this.indexedDB=NA(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((a,n)=>{let r=this.indexedDB.open(Ym,Jm);r.onupgradeneeded=()=>Qm(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(_s,"readonly"),o=i.objectStore(_s).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));a(o.result.modelArtifacts)},o.onerror=l=>(s.close(),n(o.error)),i.oncomplete=()=>s.close()}else{let i=qd(t),o=s.transaction(zr,"readwrite"),l=o.objectStore(zr),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;u.onsuccess=()=>{p=s.transaction(_s,"readwrite");let c=p.objectStore(_s).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});c.onsuccess=()=>a({modelArtifactsInfo:i}),c.onerror=d=>{l=o.objectStore(zr);let h=l.delete(this.modelPath);h.onsuccess=()=>(s.close(),n(c.error)),h.onerror=f=>(s.close(),n(c.error))}},u.onerror=c=>(s.close(),n(u.error)),o.oncomplete=()=>{p==null?s.close():p.oncomplete=()=>s.close()}}},r.onerror=s=>n(r.error)})}};Ds.URL_SCHEME="indexeddb://";var EA=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ds.URL_SCHEME)?bT(e.slice(Ds.URL_SCHEME.length)):null;Rt.registerSaveRouter(EA);Rt.registerLoadRouter(EA);function bT(e){return new Ds(e)}function vT(e){return e.startsWith(Ds.URL_SCHEME)?e.slice(Ds.URL_SCHEME.length):e}var wT=class{constructor(){this.indexedDB=NA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(Ym,Jm);a.onupgradeneeded=()=>Qm(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(zr,"readonly"),s=r.objectStore(zr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(n.close(),t(s.error)),r.oncomplete=()=>n.close()},a.onerror=n=>t(a.error)})}async removeModel(e){return e=vT(e),new Promise((t,a)=>{let n=this.indexedDB.open(Ym,Jm);n.onupgradeneeded=()=>Qm(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(zr,"readwrite"),i=s.objectStore(zr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),a(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),p=()=>{l=r.transaction(_s,"readwrite");let c=l.objectStore(_s).delete(e);c.onsuccess=()=>t(o.result.modelArtifactsInfo),c.onerror=d=>a(o.error)};u.onsuccess=p,u.onerror=c=>(p(),r.close(),a(o.error))}},o.onerror=u=>(r.close(),a(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},n.onerror=r=>a(n.error)})}},mr="/",Qo="tensorflowjs_models",RA="info",kT="model_topology",IT="weight_specs",ST="weight_data",TT="model_metadata";function MA(e){return{info:[Qo,e,RA].join(mr),topology:[Qo,e,kT].join(mr),weightSpecs:[Qo,e,IT].join(mr),weightData:[Qo,e,ST].join(mr),modelMetadata:[Qo,e,TT].join(mr)}}function $A(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function CT(e){let t=e.split(mr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(mr)}function NT(e){return e.startsWith(zs.URL_SCHEME)?e.slice(zs.URL_SCHEME.length):e}var zs=class{constructor(e){if(!W().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=MA(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),a=JSON.stringify(e.weightSpecs),n=qd(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,a),this.LS.setItem(this.keys.weightData,dT(e.weightData));let r={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:n}}catch(r){throw $A(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},a=JSON.parse(this.LS.getItem(this.keys.topology));if(a==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=a;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=pT(s),t}};zs.URL_SCHEME="localstorage://";var _A=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(zs.URL_SCHEME)?ET(e.slice(zs.URL_SCHEME.length)):null;Rt.registerSaveRouter(_A);Rt.registerLoadRouter(_A);function ET(e){return new zs(e)}var RT=class{constructor(){P(W().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),P(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Qo+mr,a=mr+RA;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(al)&&(e=e.slice(0,e.indexOf(al))),P(e.length>0,()=>"scheme must not be an empty string.");let a=Oa.getInstance();P(a.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),a.managers[e]=t}static getManager(e){let t=Oa.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Oa.getInstance().managers)}};function pc(e){if(e.indexOf(al)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Oa.getSchemes().join(",")}`);return{scheme:e.split(al)[0],path:e.split(al)[1]}}async function PA(e,t,a=!1){P(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=Rt.getLoadHandlers(e);P(n.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),P(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${e}.`);let r=n[0],s=Rt.getSaveHandlers(t);P(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),P(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],o=pc(e).scheme,l=pc(e).path,u=o===pc(e).scheme,p=await r.load();a&&u&&await Oa.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await Oa.getManager(o).removeModel(l),c.modelArtifactsInfo}async function MT(){let e=Oa.getSchemes(),t={};for(let a of e){let n=await Oa.getManager(a).listModels();for(let r in n){let s=a+al+r;t[s]=n[r]}}return t}async function $T(e){let t=pc(e);return Oa.getManager(t.scheme).removeModel(t.path)}async function _T(e,t){return PA(e,t,!1)}async function PT(e,t){return PA(e,t,!0)}var FT=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!W().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",a=>{if(a.source===window&&a.data.name===this.messageName){a.stopPropagation();let n=this.functionRefs[a.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(W().get("IS_BROWSER")){W().setPlatform("browser",new FT);try{Oa.registerManager(zs.URL_SCHEME,new RT)}catch(e){}try{Oa.registerManager(Ds.URL_SCHEME,new wT)}catch(e){}}var OT={importFetch:()=>WI()},Mm,DT=class{constructor(){this.util=VI(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return W().global.fetch!=null?W().global.fetch(e,t):(Mm==null&&(Mm=OT.importFetch()),Mm(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};W().get("IS_NODE")&&!W().get("IS_BROWSER")&&W().setPlatform("node",new DT);function Me(e,t="float32",a){return t=t||"float32",Ya(e),new jt(e,t,a)}function zT(e,t){let a=R(e,"x","cast");if(!oA(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&a.dtype!=="string"||t!=="string"&&a.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:a},r={dtype:t};return z.runKernel(Qs,n,r)}var He=D({cast_:zT});function LT(e){let t={x:R(e,"x","clone","string_or_numeric")};return z.runKernel(vi,t)}var wa=D({clone_:LT});function t2(e,t=!1){console.log(e.toString(t))}vA();var BT={buffer:Me,cast:He,clone:wa,print:t2};ZS(BT);var Hn={};Xe(Hn,{browserFiles:()=>qT,browserHTTPRequest:()=>JT,concatenateArrayBuffers:()=>Q1,copyModel:()=>_T,decodeWeights:()=>IA,encodeWeights:()=>lT,fromMemory:()=>eC,fromMemorySync:()=>LA,getLoadHandlers:()=>yT,getModelArtifactsForJSON:()=>e2,getModelArtifactsForJSONSync:()=>TA,getModelArtifactsInfoForJSON:()=>qd,getSaveHandlers:()=>AT,getWeightSpecs:()=>CA,http:()=>n2,isHTTPScheme:()=>e1,listModels:()=>MT,loadWeights:()=>XT,moveModel:()=>PT,registerLoadRouter:()=>xT,registerSaveRouter:()=>gT,removeModel:()=>$T,weightsLoaderFactory:()=>OA,withSaveHandler:()=>tC,withSaveHandlerSync:()=>aC});var WT="model",VT=".json",UT=".weights.bin";function Vg(e){return new Promise(t=>setTimeout(t)).then(e)}var ll=class{constructor(e){if(!W().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(ll.URL_SCHEME)&&(e=e.slice(ll.URL_SCHEME.length)),(e==null||e.length===0)&&(e=WT),this.modelJsonFileName=e+VT,this.weightDataFileName=e+UT}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let a=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],n=SA(e,a),r=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:"application/json"})),s=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(s.download=this.modelJsonFileName,s.href=r,await Vg(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await Vg(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:qd(e)}}}};ll.URL_SCHEME="downloads://";var GT=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let a=new FileReader;a.onload=n=>{let r=JSON.parse(n.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=e2(r,o=>this.loadWeights(o));e(i)},a.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(this.jsonFile)})}loadWeights(e){let t=[],a=[];for(let s of e)t.push(...s.weights),a.push(...s.paths);let n=this.checkManifestAndWeightFiles(e),r=a.map(s=>this.loadWeightsFile(s,n[s]));return Promise.all(r).then(s=>[t,Q1(s)])}loadWeightsFile(e,t){return new Promise((a,n)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;a(i)},r.onerror=s=>n(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],a=this.weightsFiles.map(r=>Wg(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=Wg(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),a.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[s]=this.weightsFiles[a.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},HT=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ll.URL_SCHEME)?jT(e.slice(ll.URL_SCHEME.length)):null;Rt.registerSaveRouter(HT);function jT(e="model"){return new ll(e)}function qT(e){return new GT(e)}function Ug(e,t,a,n){i(e),a=a==null?0:a,n=n==null?1:n,o(a,n);let r=0,s=l=>(l.then(u=>{let p=a+ ++r/e.length*(n-a);return t(p),u}),l);function i(l){P(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){P(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),P(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),P(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function FA(e,t){t==null&&(t={});let a=t.fetchFunc==null?W().platform.fetch:t.fetchFunc,n=e.map(u=>a(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(n):await Ug(n,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await Ug(i,t.onProgress,o,l)}async function XT(e,t="",a,n){return OA(r=>FA(r,{requestInit:n}))(e,t,a)}function OA(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,f)=>{let m=0;h.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,A=Zm[x]*At(g.shape),y=()=>{r[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:m,sizeBytes:A})};n!=null?n.forEach((b,w)=>{b===g.name&&(y(),i[w]=!0)}):y(),o.push(g.name),m+=A})}),!i.every(h=>h)){let h=n.filter((f,m)=>!i[m]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. +Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,f,m)=>(f&&h.push(m),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(f=>{let m=a+(a.endsWith("/")?"":"/")+f;u.push(m)})});let p=await e(u),c={},d=0;return l.forEach(h=>{let f=t[h].paths.length,m=0;for(let y=0;y{let b=g.slice(y.groupOffset,y.groupOffset+y.sizeBytes),w=IA(b,[y.manifestEntry]);for(let S in w)c[S]=w[S]}),d+=f}),c}}var KT="application/octet-stream",ZT="application/json",a2=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(P(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=W().platform.fetch,P(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&P(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let a=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=SA(e,a);t.body.append("model.json",new Blob([JSON.stringify(n)],{type:ZT}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:KT}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:qd(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return e2(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=YT(t),r=this.weightPathPrefix||a,s=CA(e),i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+n);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await FA(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,Q1(l)]}};a2.URL_SCHEME_REGEX=/^https?:\/\//;function YT(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function e1(e){return e.match(a2.URL_SCHEME_REGEX)!=null}var DA=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>e1(n)):a=e1(e),a)return n2(e,t)}return null};Rt.registerSaveRouter(DA);Rt.registerLoadRouter(DA);function n2(e,t){return new a2(e,t)}function JT(e,t){return n2(e,t)}var $m=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},zA=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},QT=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function eC(e,t,a,n){let r=arguments;return new QT(LA(...r))}function LA(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new $m(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new $m({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new $m({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function tC(e){return new zA(e)}function aC(e){return new zA(e)}var BA={};Xe(BA,{confusionMatrix:()=>yC});function nC(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=St(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return z.runKernel(Js,i,o)}var st=D({matMul_:nC});function rC(e,t,a=1,n=0,r="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:R(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:a,offValue:n};return z.runKernel(Bi,s,i)}var Sc=D({oneHot_:rC});function r2(){W().set("PROD",!0)}function sC(){W().set("DEBUG",!0)}function iC(){W().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function s2(e){W().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}YS(s2);function oC(){z.disposeVariables()}function kt(){return z}function lC(){return z.memory()}function uC(e){return z.profile(e)}function $e(e,t){return z.tidy(e,t)}function Y(e){Z1(e).forEach(t=>t.dispose())}function Fn(e){return z.keep(e)}function dC(e){return z.time(e)}function Xd(e){return z.setBackend(e)}function Kd(){return z.ready()}function ia(){return z.backendName}function pC(e){z.removeBackend(e)}function i2(e){return z.findBackend(e)}function cC(e){return z.findBackendFactory(e)}function fo(e,t,a=1){return z.registerBackend(e,t,a)}function er(){return z.backend}function hC(e,t){W().setPlatform(e,t)}function fC(e){let t={input:R(e,"input","imag")};return z.runKernel(Rd,t)}var Zd=D({imag_:fC});function mC(e){let t={x:R(e,"x","neg")};return z.runKernel(Wl,t)}var qn=D({neg_:mC});function gC(e){let t={input:R(e,"input","real")};return z.runKernel(Md,t)}var ul=D({real_:gC});function xC(e,t,a){let n=R(e,"x","transpose");if(t==null&&(t=n.shape.map((i,o)=>o).reverse()),P(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{P(i>=0&&i`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},s={perm:t};return n.dtype==="complex64"?$e(()=>{let i=ul(n),o=Zd(n);return i=z.runKernel(gr,{x:i},s),o=z.runKernel(gr,{x:o},s),a&&(o=qn(o)),Ar(i,o)}):z.runKernel(gr,r,s)}var Ls=D({transpose_:xC});function AC(e,t,a){let n=R(e,"labels","confusionMatrix"),r=R(t,"predictions","confusionMatrix");P(a==null||a>0&&Number.isInteger(a),()=>`If provided, numClasses must be a positive integer, but got ${a}`),P(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),P(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),P(n.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),P(a>0&&Number.isInteger(a),()=>`numClasses is required to be a positive integer, but got ${a}`);let s=Sc(He(n,"int32"),a),i=Sc(He(r,"int32"),a),o=Ls(s),l=st(o,i);return He(l,"int32")}var yC=D({confusionMatrix_:AC}),mo={};Xe(mo,{assertAndGetBroadcastShape:()=>zt,getBroadcastDims:()=>WA,getReductionAxes:()=>o2});function WA(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function o2(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function zt(e,t){let a=[],n=Math.max(e.length,t.length);for(let r=0;rTC,fromPixelsAsync:()=>IC,toPixels:()=>SC});function l2(e,t,a){if(js(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Zn(e,a);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return as(e,t,n,a)}var Ts;function VA(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let a=!1,n=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)a=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(wc(rd,z.backendName)!=null){let d={pixels:e},h={numChannels:t};return z.runKernel(rd,d,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(i)p=e.getContext("2d").getImageData(0,0,l,u).data;else if(n||a)p=e.data;else if(s||r||o){if(Ts==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Ts=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Ts=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Ts.canvas.width=l,Ts.canvas.height=u,Ts.drawImage(e,0,0,l,u),p=Ts.getImageData(0,0,l,u).data}let c;if(t===4)c=new Int32Array(p);else{let d=l*u;c=new Int32Array(d*t);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(a.dtype!=="float32"&&a.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${a.dtype}. Please use float32 or int32 tensors.`);let i=await a.data(),o=a.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*n*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(a.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(p[0]=h*o,p[1]=h*o,p[2]=h*o):p[d]=h*o}let c=u*4;l[c+0]=Math.round(p[0]),l[c+1]=Math.round(p[1]),l[c+2]=Math.round(p[2]),l[c+3]=Math.round(p[3])}if(t!=null){t.width=r,t.height=n;let u=t.getContext("2d"),p=new ImageData(l,r,n);u.putImageData(p,0,0)}return a!==e&&a.dispose(),l}var TC=D({fromPixels_:VA}),u2={};Xe(u2,{prepareAndValidate:()=>UA});function UA(e,t){let a=e.shape.length,n=t.shape.length;if(a<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${a}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[n-1]>a)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[n-1]} vs. ${a}`);if(At(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let c=0;cc/u),1].slice(0,s);return[l,i,u,p]}var d2={};Xe(d2,{calculateShapes:()=>GA,validateInput:()=>c2,validateUpdateShape:()=>p2});function p2(e,t,a){let n=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${a.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${n}, and batchDim: ${r}.`;if(a.rank1?t.shape[n-1]:1,s=a.length,i=1;for(let c=r;cNC,computeFlatOffset:()=>_C,computeOutShape:()=>RC,getNormalizedAxes:()=>MC,isSliceContinous:()=>$C,maskToAxes:()=>EC,parseSliceParams:()=>PC,sliceInfo:()=>FC,startForAxis:()=>YA,startIndicesWithElidedDims:()=>XA,stopForAxis:()=>JA,stopIndicesWithElidedDims:()=>KA,stridesForAxis:()=>ZA,stridesWithElidedDims:()=>HA});var t1=-2,CC=-1;function NC(e,t,a){let n=e.shape.length;P(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),P(n===a.length,()=>`Error in slice${n}D: Length of size ${a} must match the rank of the array (${n}).`);for(let r=0;r`Error in slice${n}D: begin[${r}] + size[${r}] (${t[r]+a[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function EC(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function RC(e,t,a){let n=[];for(let r=0;r0){let h=t[0],f=a+1;p=XA(i,h,f,n,e),c=KA(o,h,f,r,e),d=HA(s,h,f,e)}else for(let h=0;h-1)s[o]=0;else{let l=jA(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=jA(t,a,o),u=n[l];e&1<0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),i=nd(0,i,l-1),i}function JA(e,t,a,n,r,s){let i=t[r],o=a[r]||1;(e&1<0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),o>0?i=nd(0,i,l):i=nd(-1,i,l-1),i}function $C(e,t,a){let n=a.length;for(let r=0;r1){n=r;break}for(let r=n+1;r0||a[r]!==e[r])return!1;return!0}function _C(e,t){let a=e.length>0?e[e.length-1]:1;for(let n=0;n{P(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return a==null?s=new Array(r).fill(-1):typeof a=="number"?s=[a,...new Array(r-1).fill(-1)]:a.lengthi>=0?i:(P(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-n[o])),[n,s]}function FC(e,t,a,n,r,s,i,o,l){let u;if(n==null?(u=new Array(t.length),u.fill(1)):u=n,i!=null&&(i&i-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let p=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:a.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let A=0;A0?0:-1,d.strides[A]>0?b:b-1];if(y&&d.strides[A]<=0)throw Error("only stride 1 allowed on non-range indexing.");m=m&&d.strides[A]===1;let C=!!(d.beginMask&1<=b)throw Error(`slice index ${d.begin[A]} of dimension ${A} out of bounds.`)}else d.begin[A]=Gg(d.begin[A],0,d.strides[A],b,w,S),d.end[A]=Gg(d.end[A],1,d.strides[A],b,w,S);let $=d.strides[A]===1&&d.begin[A]===0&&d.end[A]===b;h=h&&$,f=f&&(A===0&&d.strides[A]===1||$)}else h=h&&d.strides[A]===1&&C,f=f&&(A===0&&d.strides[A]===1||C);let E,_=!1;if(d.beginValid&&d.endValid?(E=d.end[A]-d.begin[A],_=!0):y?(E=1,_=!0):C&&b>=0&&(d.strides[A]<0?E=-b:E=b,_=!0),_){let $;E===0||E<0!=d.strides[A]<0?$=0:$=Math.trunc(E/d.strides[A])+(E%d.strides[A]!==0?1:0),g.push($)}else g.push(-1)}for(let A=0;A=0?x.push(g[y]):y===t1&&x.push(1)}return{finalShapeSparse:x.filter((A,y)=>d.finalShapeGatherIndices[y]!==t1),finalShape:x,isIdentity:h,sliceDim0:f,isSimpleSlice:m,begin:d.begin,end:d.end,strides:d.strides}}function OC(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let a=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let n=0;n0?s[t]:s[t+1&1];{let i=e<0?n+e:e;return is[1]?s[1]:i}}var QA={};Xe(QA,{Serializable:()=>ey,SerializationMap:()=>Ms,registerClass:()=>ns});var ey=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ms=class{constructor(){this.classNameMap={}}static getMap(){return Ms.instance==null&&(Ms.instance=new Ms),Ms.instance}static register(e){Ms.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function ns(e){P(e.className!=null,()=>"Class being registered does not have the static className property defined."),P(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),P(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Ms.register(e)}var ty={};Xe(ty,{TEST_EPSILON_FLOAT16:()=>ay,createVideoElement:()=>GC,encodeStrings:()=>ny,expectArrayBuffersEqual:()=>UC,expectArraysClose:()=>zC,expectArraysEqual:()=>BC,expectNumbersClose:()=>WC,expectPromiseToFail:()=>LC,expectValuesInRange:()=>VC,play:()=>HC,testEpsilon:()=>h2});var DC=.001,ay=.1;function zC(e,t,a){return a==null&&(a=h2()),a1(e,t,(n,r)=>f2(n,r,a))}function h2(){return z.backend.floatPrecision()===32?DC:ay}function a1(e,t,a){let n=!0;if((da(e)||da(t))&&(n=!1),da(e)&&da(t)&&(n=!0),n){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=Zn(e),o=Zn(t);if(!Jr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=da(e)?e:Os(e),s=da(t)?t:Os(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}. Actual: ${r}. Expected: ${s}.`);for(let i=0;it.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function yN(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return zr(e)||zr(e[0])||zr(t)||zr(t[0])?r1(e,a,(n,r)=>n==r):r1(e,t,(n,r)=>x2(n,r,0))}function AN(e,t,a){if(a==null&&(a=A2()),!x2(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function x2(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function xN(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function bN(e,t){let a=new Float32Array(e),n=new Float32Array(t);if(a.length!==n.length)throw new Error(`Expected ArrayBuffer to be of length ${n.length}, but it was ${a.length}`);for(let r=0;r{t.addEventListener("loadeddata",n=>a(t)),t.load()})}async function wN(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var b2="4.0.0";function kN(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(vr,r)}var xe=D({add_:kN});function IN(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(Mi,r)}var Yd=D({floorDiv_:IN});function SN(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=It(a,n),a.dtype==="int32"&&n.dtype==="int32")return Yd(a,n);let r={a,b:n},s={};return z.runKernel(Ci,r,s)}var fe=D({div_:SN});function TN(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(ps,r)}var ae=D({mul_:TN});function CN(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return z.runKernel(Hc,a)}else{let a={x:t};return z.runKernel(gl,a)}}var Ha=D({abs_:CN});function NN(e){let t={x:R(e,"x","acos")};return z.runKernel(yd,t)}var gx=D({acos_:NN});function EN(e){let t={x:R(e,"x","acosh")};return z.runKernel(Ad,t)}var yx=D({acosh_:EN});function RN(e){F(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),F(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>R(r,`tensors${s}`,"addN")),a=t[0];t.forEach(r=>{if(r.dtype!==a.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!Jr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return z.runKernel(hi,n)}var mh=D({addN_:RN});function MN(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return z.runKernel(yl,n,r)}var Ax=D({all_:MN});function $N(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return z.runKernel(Al,n,r)}var xx=D({any_:$N});function _N(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return z.runKernel(fi,a,n)}var ar=D({argMax_:_N});function FN(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return z.runKernel(xd,a,n)}var bx=D({argMin_:FN});function PN(e){let t={x:R(e,"x","asin")};return z.runKernel(bd,t)}var vx=D({asin_:PN});function ON(e){let t={x:R(e,"x","asinh")};return z.runKernel(vd,t)}var wx=D({asinh_:ON});function DN(e){let t={x:R(e,"x","atan")};return z.runKernel(wd,t)}var kx=D({atan_:DN});function zN(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(xl,r)}var Ix=D({atan2_:zN});function LN(e){let t={x:R(e,"x","atanh")};return z.runKernel(kd,t)}var Sx=D({atanh_:LN});function BN(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=Nx(r);return Jd(e,o,a,s,n,null,null,l)}function Tx(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Cc(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Jd(e,u,a,n,r,s,!1,i)}function WN(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=s1(t),d,c;if(i==="NDHWC")c="channelsLast",d=[o,l,u,e[4],e[4]];else if(i==="NCDHW")c="channelsFirst",d=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Cx(e,d,a,n,r,!1,c,s)}function Jd(e,t,a,n,r,s,i=!1,o="channelsLast"){let[l,u,d,c]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,d,c]=e;else if(o==="channelsFirst")[l,c,u,d]=e;else throw new Error(`Unknown dataFormat ${o}`);let[p,h,,f]=t,[m,g]=Cc(a),[y,A]=Cc(n),x=Qo(p,y),b=Qo(h,A),{padInfo:w,outHeight:S,outWidth:C}=UN(r,u,d,m,g,x,b,s,o),N=i?f*c:f,_;return o==="channelsFirst"?_=[l,N,S,C]:o==="channelsLast"&&(_=[l,S,C,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:d,inChannels:c,outHeight:S,outWidth:C,outChannels:N,padInfo:w,strideHeight:m,strideWidth:g,filterHeight:p,filterWidth:h,effectiveFilterHeight:x,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:A,inShape:e,outShape:_,filterShape:t}}function Cx(e,t,a,n,r,s=!1,i="channelsLast",o){let[l,u,d,c,p]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,d,c,p]=e;else if(i==="channelsFirst")[l,p,u,d,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,f,m,,g]=t,[y,A,x]=s1(a),[b,w,S]=s1(n),C=Qo(h,b),N=Qo(f,w),_=Qo(m,S),{padInfo:$,outDepth:M,outHeight:I,outWidth:E}=jN(r,u,d,c,y,A,x,C,N,_,o),O=s?g*p:g,L;return i==="channelsFirst"?L=[l,O,M,I,E]:i==="channelsLast"&&(L=[l,M,I,E,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:d,inWidth:c,inChannels:p,outDepth:M,outHeight:I,outWidth:E,outChannels:O,padInfo:$,strideDepth:y,strideHeight:A,strideWidth:x,filterDepth:h,filterHeight:f,filterWidth:m,effectiveFilterDepth:C,effectiveFilterHeight:N,effectiveFilterWidth:_,dilationDepth:b,dilationHeight:w,dilationWidth:S,inShape:e,outShape:L,filterShape:t}}function VN(e,t,a,n,r){n==null&&(n=v2(e,t,a));let s=e[0],i=e[1],o=Qs((s-t+2*n)/a+1,r),l=Qs((i-t+2*n)/a+1,r);return[o,l]}function GN(e,t,a,n,r,s){r==null&&(r=v2(e,t,n));let i=e[0],o=e[1],l=e[2],u=Qs((i-t+2*r)/n+1,s),d=Qs((o-t+2*r)/n+1,s),c=Qs((l-t+2*r)/n+1,s);return[u,d,c,a]}function v2(e,t,a,n=1){let r=Qo(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Cc(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function s1(e){return typeof e=="number"?[e,e,e]:e}function Qo(e,t){return t<=1?e:e+(e-1)*(t-1)}function UN(e,t,a,n,r,s,i,o,l){let u,d,c;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let p=VN([t,a],s,n,e,o);d=p[0],c=p[1]}else if(e==="same"){d=Math.ceil(t/n),c=Math.ceil(a/r);let p=Math.max(0,(d-1)*n+s-t),h=Math.max(0,(c-1)*r+i-a),f=Math.floor(p/2),m=p-f,g=Math.floor(h/2),y=h-g;u={top:f,bottom:m,left:g,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},d=Math.ceil((t-s+1)/n),c=Math.ceil((a-i+1)/r);else if(typeof e=="object"){let p=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],f=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];u={top:p,bottom:h,left:f,right:m,type:p===0&&h===0&&f===0&&m===0?"VALID":"EXPLICIT"},d=Qs((t-s+p+h)/n+1,o),c=Qs((a-i+f+m)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:d,outWidth:c}}function jN(e,t,a,n,r,s,i,o,l,u,d){let c,p,h,f;if(typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=GN([t,a,n,1],o,1,r,e,d);p=m[0],h=m[1],f=m[2]}else if(e==="same"){p=Math.ceil(t/r),h=Math.ceil(a/s),f=Math.ceil(n/i);let m=(p-1)*r+o-t,g=(h-1)*s+l-a,y=(f-1)*i+u-n,A=Math.floor(m/2),x=m-A,b=Math.floor(g/2),w=g-b,S=Math.floor(y/2),C=y-S;c={top:b,bottom:w,left:S,right:C,front:A,back:x,type:"SAME"}}else if(e==="valid")c={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},p=Math.ceil((t-o+1)/r),h=Math.ceil((a-l+1)/s),f=Math.ceil((n-u+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:p,outHeight:h,outWidth:f}}function Qs(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function nd(e){let[t,a,n]=Cc(e);return t===1&&a===1&&n===1}function kr(e,t){return nd(e)||nd(t)}function Nx(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Sn(e,t,a){if(a!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);if(typeof t=="number")F(tl(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);else if(typeof t=="object")t.forEach(n=>{n.forEach(r=>{F(tl(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function HN(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return z.runKernel(Fl,a,n)}var J=D({reshape_:HN});function qN(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;F(kr(a,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=J(s,[1,s.shape[0],s.shape[1],s.shape[2]])),F(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),Sn("avgPool",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=z.runKernel(mi,u,d);return c=Ue(c,s.dtype),l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var w2=D({avgPool_:qN});function XN(e,t,a,n,r,s="NDHWC"){let i=R(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),F(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Sn("avgPool3d",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=z.runKernel(Gc,u,d);return c=Ue(c,o.dtype),l?J(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var Ex=D({avgPool3d_:XN});function KN(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let a=ad(e,"tensors","concat","string_or_numeric");if(a[0].dtype==="complex64"&&a.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${s.dtype}. `)}),a.length===1)return wa(a[0]);let n=a,r={axis:t};return z.runKernel(vl,n,r)}var at=D({concat_:KN});function ZN(e){let t={x:R(e,"x","sigmoid","float32")};return z.runKernel(fs,t)}var Da=D({sigmoid_:ZN});function YN(e,t,a){let n=R(e,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let r={x:n},s={begin:t,size:a};return z.runKernel(zl,r,s)}var _e=D({slice_:YN});function JN(e){let t={x:R(e,"x","tanh","float32")};return z.runKernel(ro,t)}var Nc=D({tanh_:JN});function QN(e,t,a,n,r,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(a,"lstmBias","basicLSTMCell"),u=R(n,"data","basicLSTMCell"),d=R(r,"c","basicLSTMCell"),c=R(s,"h","basicLSTMCell"),p=at([u,c],1),h=st(p,o),f=xe(h,l),m=f.shape[0],g=f.shape[1]/4,y=[m,g],A=_e(f,[0,0],y),x=_e(f,[0,g],y),b=_e(f,[0,g*2],y),w=_e(f,[0,g*3],y),S=xe(ae(Da(A),Nc(x)),ae(d,Da(xe(i,b)))),C=ae(Nc(S),Da(w));return[S,C]}var Rx=D({basicLSTMCell_:QN});function eE(e,t,a){let n=R(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);F(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),F(a.length===t.length,()=>`crops.length is ${a.length} but should be equal to blockShape.length ${t.length}`),F(n.shape[0]%r===0,()=>`input tensor batch is ${n.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:n},i={blockShape:t,crops:a};return z.runKernel(bl,s,i)}var k2=D({batchToSpaceND_:eE});function tE(e){let t;return e.rank===0||e.rank===1?t=J(e,[1,1,1,e.size]):e.rank===2?t=J(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function aE(e,t,a,n,r,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;n!=null&&(d=R(n,"offset","batchNorm")),F(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),F(d==null||o.rank===d.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),F(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let c={x:tE(i),scale:u,offset:d,mean:o,variance:l},p={varianceEpsilon:s},h=z.runKernel($i,c,p);return J(h,i.shape)}var Qd=D({batchNorm_:aE});function nE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),F(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),F(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),F(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&F(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),d!=null&&F(d.rank===2||d.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${d.rank}.`),Qd(i,o,l,d,u,s)}var Mx=D({batchNorm2d_:nE});function rE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),F(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),F(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),F(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&F(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),d!=null&&F(d.rank===3||d.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${d.rank}.`),Qd(i,o,l,d,u,s)}var $x=D({batchNorm3d_:rE});function sE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),F(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),F(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),F(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&F(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),d!=null&&F(d.rank===4||d.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${d.rank}.`),Qd(i,o,l,d,u,s)}var _x=D({batchNorm4d_:sE});function iE(e,t,a){let n=R(e,"x","bincount"),r=R(t,"weights","bincount");F(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),F(a>=0,()=>`size must be non-negative, but got ${a}.`),F(r.size===n.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${n.shape}, weights shape: ${r.shape}.`);let s={x:n,weights:r},i={size:a};return z.runKernel(Uc,s,i)}var I2=D({bincount_:iE});function oE(e,t){let a=R(e,"s0","broadcastArgs","int32"),n=R(t,"s1","broadcastArgs","int32");if(a.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${a.rank}`);if(n.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${n.rank}`);let r={s0:a,s1:n};return z.runKernel(jc,r)}var Fx=D({broadcastArgs_:oE});function lE(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(t.some(l=>!(l>0)||l%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.lengtha.rank){let l=a.shape.slice();for(;l.length=0;l--)if(r[l]===t[l])s[l]=1;else if(a.shape[l]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return wa(a);let i={x:a},o={reps:s};return z.runKernel(As,i,o)}var ei=D({broadcastTo_:lE});function uE(e){let t={x:R(e,"x","ceil","float32")};return z.runKernel(Qr,t)}var Px=D({ceil_:uE});function nr(e,t,a){let n={shape:e,value:t,dtype:a};return z.runKernel(kl,{},n)}function dE(e,t,a){let n=R(e,"x","clipByValue");if(F(t<=a,()=>`Error in clip: min (${t}) must be less than or equal to max (${a}).`),t===a)return nr(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return z.runKernel(es,r,s)}var Ox=D({clipByValue_:dE});function pE(e){return at(e,0)}var Dx=D({concat1d_:pE});function cE(e,t){return at(e,t)}var ql=D({concat2d_:cE});function hE(e,t){return at(e,t)}var zx=D({concat3d_:hE});function fE(e,t){return at(e,t)}var Lx=D({concat4d_:fE});function mE(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","conv2d","float32"),l=R(t,"filter","conv2d","float32"),u=o,d=!1;o.rank===3&&(d=!0,u=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),F(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Sn("conv2d",n,i);let c=r==="NHWC"?u.shape[3]:u.shape[1];F(c===l.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${l.shape[2]}.`),F(kr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let p={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},f=z.runKernel(Ai,p,h);return d?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var ep=D({conv2d_:mE});function gE(e,t,a,n,r="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),u=o,d=!1;o.rank===2&&(d=!0,u=J(o,[1,o.shape[0],o.shape[1]])),F(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),F(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Sn("conv1d",n,i),F(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),F(kr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),F(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=J(l,[1,l.shape[0],l.shape[1],l.shape[2]]),p=J(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=ep(p,c,[1,a],n,"NHWC",[1,s],i);return d?J(h,[h.shape[2],h.shape[3]]):J(h,[h.shape[0],h.shape[2],h.shape[3]])}var Bx=D({conv1d_:gE});function yE(e,t,a,n,r,s="NHWC",i){F(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),F(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),F(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),F(a.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${a.rank}`);let d=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];F(d===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${d}) must match input depth for filter ${a.shape[2]}.`),F(c===a.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${a.shape[3]}.`),Sn("conv2dDerInput",r,i);let p={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},f=z.runKernel(xi,p,h);return u?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Wx=D({conv2DBackpropInput_:yE});function AE(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Wx(a,i,o,n,r,"NHWC",s)}var Vx=D({conv2dTranspose_:AE});function xE(e,t,a,n,r="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),F(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),F(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),F(kr(a,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),F(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`);let d={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},p=z.runKernel(Xc,d,c);return u?J(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Gx=D({conv3d_:xE});function bE(e,t,a,n,r){F(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=J(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];F(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),F(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),F(a.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${a.rank}`),F(l===a.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${a.shape[3]}.`),F(u===a.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${a.shape[4]}.`);let d={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},p=z.runKernel(Kc,d,c);return o?J(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var vE=D({conv3DBackpropInput_:bE});function wE(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return vE(a,s,i,n,r)}var Ux=D({conv3dTranspose_:wE});function kE(e){let t={x:R(e,"x","cos","float32")};return z.runKernel(bi,t)}var jx=D({cos_:kE});function IE(e){let t={x:R(e,"x","cosh","float32")};return z.runKernel(vi,t)}var Hx=D({cosh_:IE});function SE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return z.runKernel(wi,r,s)}var qx=D({cumprod_:SE});function TE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return z.runKernel(ki,r,s)}var Xx=D({cumsum_:TE});function CE(e,t,a,n=!1){let r=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");F(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),F(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),F(a>=0,()=>`size must be non-negative, but got ${a}.`),F(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:a,binaryOutput:n};return z.runKernel(Zc,i,o)}var Kx=D({denseBincount_:CE});function NE(e,t,a="NHWC"){let n=R(e,"x","depthToSpace","float32"),r=a==="NHWC"?n.shape[1]:n.shape[2],s=a==="NHWC"?n.shape[2]:n.shape[3],i=a==="NHWC"?n.shape[3]:n.shape[1];F(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),F(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function LC(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function BC(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Dr(e)||Dr(e[0])||Dr(t)||Dr(t[0])?a1(e,a,(n,r)=>n==r):a1(e,t,(n,r)=>f2(n,r,0))}function WC(e,t,a){if(a==null&&(a=h2()),!f2(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function f2(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function VC(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function UC(e,t){let a=new Float32Array(e),n=new Float32Array(t);if(a.length!==n.length)throw new Error(`Expected ArrayBuffer to be of length ${n.length}, but it was ${a.length}`);for(let r=0;r{t.addEventListener("loadeddata",n=>a(t)),t.load()})}async function HC(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var m2="4.1.0";function jC(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(Qr,r)}var be=D({add_:jC});function qC(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(gi,r)}var Yd=D({floorDiv_:qC});function XC(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=St(a,n),a.dtype==="int32"&&n.dtype==="int32")return Yd(a,n);let r={a,b:n},s={};return z.runKernel(di,r,s)}var me=D({div_:XC});function KC(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(Oi,r)}var ae=D({mul_:KC});function ZC(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return z.runKernel(Gc,a)}else{let a={x:t};return z.runKernel(vl,a)}}var ja=D({abs_:ZC});function YC(e){let t={x:R(e,"x","acos")};return z.runKernel(wl,t)}var ry=D({acos_:YC});function JC(e){let t={x:R(e,"x","acosh")};return z.runKernel(kl,t)}var sy=D({acosh_:JC});function QC(e){P(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),P(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>R(r,`tensors${s}`,"addN")),a=t[0];t.forEach(r=>{if(r.dtype!==a.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!Jr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return z.runKernel(qs,n)}var uh=D({addN_:QC});function eN(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return z.runKernel(Xs,n,r)}var iy=D({all_:eN});function tN(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return z.runKernel(Ks,n,r)}var oy=D({any_:tN});function aN(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return z.runKernel(Zs,a,n)}var tr=D({argMax_:aN});function nN(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return z.runKernel(kd,a,n)}var ly=D({argMin_:nN});function rN(e){let t={x:R(e,"x","asin")};return z.runKernel(Il,t)}var uy=D({asin_:rN});function sN(e){let t={x:R(e,"x","asinh")};return z.runKernel(Sl,t)}var dy=D({asinh_:sN});function iN(e){let t={x:R(e,"x","atan")};return z.runKernel(Tl,t)}var py=D({atan_:iN});function oN(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(Nl,r)}var cy=D({atan2_:oN});function lN(e){let t={x:R(e,"x","atanh")};return z.runKernel(Cl,t)}var hy=D({atanh_:lN});function uN(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=gy(r);return Jd(e,o,a,s,n,null,null,l)}function fy(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Tc(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Jd(e,u,a,n,r,s,!1,i)}function dN(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=n1(t),p,c;if(i==="NDHWC")c="channelsLast",p=[o,l,u,e[4],e[4]];else if(i==="NCDHW")c="channelsFirst",p=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return my(e,p,a,n,r,!1,c,s)}function Jd(e,t,a,n,r,s,i=!1,o="channelsLast"){let[l,u,p,c]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,p,c]=e;else if(o==="channelsFirst")[l,c,u,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[d,h,,f]=t,[m,g]=Tc(a),[x,A]=Tc(n),y=nl(d,x),b=nl(h,A),{padInfo:w,outHeight:S,outWidth:C}=hN(r,u,p,m,g,y,b,s,o),E=i?f*c:f,_;return o==="channelsFirst"?_=[l,E,S,C]:o==="channelsLast"&&(_=[l,S,C,E]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:c,outHeight:S,outWidth:C,outChannels:E,padInfo:w,strideHeight:m,strideWidth:g,filterHeight:d,filterWidth:h,effectiveFilterHeight:y,effectiveFilterWidth:b,dilationHeight:x,dilationWidth:A,inShape:e,outShape:_,filterShape:t}}function my(e,t,a,n,r,s=!1,i="channelsLast",o){let[l,u,p,c,d]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,p,c,d]=e;else if(i==="channelsFirst")[l,d,u,p,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,f,m,,g]=t,[x,A,y]=n1(a),[b,w,S]=n1(n),C=nl(h,b),E=nl(f,w),_=nl(m,S),{padInfo:$,outDepth:M,outHeight:I,outWidth:N}=fN(r,u,p,c,x,A,y,C,E,_,o),O=s?g*d:g,L;return i==="channelsFirst"?L=[l,O,M,I,N]:i==="channelsLast"&&(L=[l,M,I,N,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:c,inChannels:d,outDepth:M,outHeight:I,outWidth:N,outChannels:O,padInfo:$,strideDepth:x,strideHeight:A,strideWidth:y,filterDepth:h,filterHeight:f,filterWidth:m,effectiveFilterDepth:C,effectiveFilterHeight:E,effectiveFilterWidth:_,dilationDepth:b,dilationHeight:w,dilationWidth:S,inShape:e,outShape:L,filterShape:t}}function pN(e,t,a,n,r){n==null&&(n=g2(e,t,a));let s=e[0],i=e[1],o=Ps((s-t+2*n)/a+1,r),l=Ps((i-t+2*n)/a+1,r);return[o,l]}function cN(e,t,a,n,r,s){r==null&&(r=g2(e,t,n));let i=e[0],o=e[1],l=e[2],u=Ps((i-t+2*r)/n+1,s),p=Ps((o-t+2*r)/n+1,s),c=Ps((l-t+2*r)/n+1,s);return[u,p,c,a]}function g2(e,t,a,n=1){let r=nl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Tc(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function n1(e){return typeof e=="number"?[e,e,e]:e}function nl(e,t){return t<=1?e:e+(e-1)*(t-1)}function hN(e,t,a,n,r,s,i,o,l){let u,p,c;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let d=pN([t,a],s,n,e,o);p=d[0],c=d[1]}else if(e==="same"){p=Math.ceil(t/n),c=Math.ceil(a/r);let d=Math.max(0,(p-1)*n+s-t),h=Math.max(0,(c-1)*r+i-a),f=Math.floor(d/2),m=d-f,g=Math.floor(h/2),x=h-g;u={top:f,bottom:m,left:g,right:x,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},p=Math.ceil((t-s+1)/n),c=Math.ceil((a-i+1)/r);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],f=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:h,left:f,right:m,type:d===0&&h===0&&f===0&&m===0?"VALID":"EXPLICIT"},p=Ps((t-s+d+h)/n+1,o),c=Ps((a-i+f+m)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:c}}function fN(e,t,a,n,r,s,i,o,l,u,p){let c,d,h,f;if(typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=cN([t,a,n,1],o,1,r,e,p);d=m[0],h=m[1],f=m[2]}else if(e==="same"){d=Math.ceil(t/r),h=Math.ceil(a/s),f=Math.ceil(n/i);let m=(d-1)*r+o-t,g=(h-1)*s+l-a,x=(f-1)*i+u-n,A=Math.floor(m/2),y=m-A,b=Math.floor(g/2),w=g-b,S=Math.floor(x/2),C=x-S;c={top:b,bottom:w,left:S,right:C,front:A,back:y,type:"SAME"}}else if(e==="valid")c={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-o+1)/r),h=Math.ceil((a-l+1)/s),f=Math.ceil((n-u+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:d,outHeight:h,outWidth:f}}function Ps(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function dd(e){let[t,a,n]=Tc(e);return t===1&&a===1&&n===1}function vr(e,t){return dd(e)||dd(t)}function gy(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function In(e,t,a){if(a!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);if(typeof t=="number")P(il(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);else if(typeof t=="object")t.forEach(n=>{n.forEach(r=>{P(il(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function mN(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return z.runKernel(jl,a,n)}var J=D({reshape_:mN});function gN(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;P(vr(a,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=J(s,[1,s.shape[0],s.shape[1],s.shape[2]])),P(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),In("avgPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=z.runKernel(Ys,u,p);return c=He(c,s.dtype),l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var x2=D({avgPool_:gN});function xN(e,t,a,n,r,s="NDHWC"){let i=R(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),P(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),P(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),In("avgPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=z.runKernel(Vc,u,p);return c=He(c,o.dtype),l?J(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var xy=D({avgPool3d_:xN});function AN(e,t=0){P(e.length>=1,()=>"Pass at least one tensor to concat");let a=ud(e,"tensors","concat","string_or_numeric");if(a[0].dtype==="complex64"&&a.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${s.dtype}. `)}),a.length===1)return wa(a[0]);let n=a,r={axis:t};return z.runKernel(Rl,n,r)}var at=D({concat_:AN});function yN(e){let t={x:R(e,"x","sigmoid","float32")};return z.runKernel(eo,t)}var Da=D({sigmoid_:yN});function bN(e,t,a){let n=R(e,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let r={x:n},s={begin:t,size:a};return z.runKernel(Kl,r,s)}var Pe=D({slice_:bN});function vN(e){let t={x:R(e,"x","tanh","float32")};return z.runKernel(lo,t)}var Cc=D({tanh_:vN});function wN(e,t,a,n,r,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(a,"lstmBias","basicLSTMCell"),u=R(n,"data","basicLSTMCell"),p=R(r,"c","basicLSTMCell"),c=R(s,"h","basicLSTMCell"),d=at([u,c],1),h=st(d,o),f=be(h,l),m=f.shape[0],g=f.shape[1]/4,x=[m,g],A=Pe(f,[0,0],x),y=Pe(f,[0,g],x),b=Pe(f,[0,g*2],x),w=Pe(f,[0,g*3],x),S=be(ae(Da(A),Cc(y)),ae(p,Da(be(i,b)))),C=ae(Cc(S),Da(w));return[S,C]}var Ay=D({basicLSTMCell_:wN});function kN(e,t,a){let n=R(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);P(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),P(a.length===t.length,()=>`crops.length is ${a.length} but should be equal to blockShape.length ${t.length}`),P(n.shape[0]%r===0,()=>`input tensor batch is ${n.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:n},i={blockShape:t,crops:a};return z.runKernel(El,s,i)}var A2=D({batchToSpaceND_:kN});function IN(e){let t;return e.rank===0||e.rank===1?t=J(e,[1,1,1,e.size]):e.rank===2?t=J(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function SN(e,t,a,n,r,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;n!=null&&(p=R(n,"offset","batchNorm")),P(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),P(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),P(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let c={x:IN(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=z.runKernel(xi,c,d);return J(h,i.shape)}var Qd=D({batchNorm_:SN});function TN(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"offset","batchNorm")),P(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),P(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),P(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&P(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Qd(i,o,l,p,u,s)}var yy=D({batchNorm2d_:TN});function CN(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"offset","batchNorm")),P(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),P(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),P(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&P(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Qd(i,o,l,p,u,s)}var by=D({batchNorm3d_:CN});function NN(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"offset","batchNorm")),P(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),P(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),P(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&P(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Qd(i,o,l,p,u,s)}var vy=D({batchNorm4d_:NN});function EN(e,t,a){let n=R(e,"x","bincount"),r=R(t,"weights","bincount");P(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),P(a>=0,()=>`size must be non-negative, but got ${a}.`),P(r.size===n.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${n.shape}, weights shape: ${r.shape}.`);let s={x:n,weights:r},i={size:a};return z.runKernel(Id,s,i)}var y2=D({bincount_:EN});function RN(e,t){let a=R(e,"s0","broadcastArgs","int32"),n=R(t,"s1","broadcastArgs","int32");if(a.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${a.rank}`);if(n.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${n.rank}`);let r={s0:a,s1:n};return z.runKernel(Uc,r)}var wy=D({broadcastArgs_:RN});function MN(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(Ya(t),t.lengtha.rank){let l=a.shape.slice();for(;l.length=0;l--)if(r[l]===t[l])s[l]=1;else if(a.shape[l]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return wa(a);let i={x:a},o={reps:s};return z.runKernel(ts,i,o)}var rl=D({broadcastTo_:MN});function $N(e){let t={x:R(e,"x","ceil","float32")};return z.runKernel(ei,t)}var ky=D({ceil_:$N});function ar(e,t,a){Ya(e);let n={shape:e,value:t,dtype:a};return z.runKernel(Pl,{},n)}function _N(e,t,a){let n=R(e,"x","clipByValue");if(P(t<=a,()=>`Error in clip: min (${t}) must be less than or equal to max (${a}).`),t===a)return ar(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return z.runKernel(es,r,s)}var Iy=D({clipByValue_:_N});function PN(e){return at(e,0)}var Sy=D({concat1d_:PN});function FN(e,t){return at(e,t)}var nu=D({concat2d_:FN});function ON(e,t){return at(e,t)}var Ty=D({concat3d_:ON});function DN(e,t){return at(e,t)}var Cy=D({concat4d_:DN});function zN(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","conv2d","float32"),l=R(t,"filter","conv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),P(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),In("conv2d",n,i);let c=r==="NHWC"?u.shape[3]:u.shape[1];P(c===l.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${l.shape[2]}.`),P(vr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},f=z.runKernel(ti,d,h);return p?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var ep=D({conv2d_:zN});function LN(e,t,a,n,r="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),u=o,p=!1;o.rank===2&&(p=!0,u=J(o,[1,o.shape[0],o.shape[1]])),P(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),P(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),In("conv1d",n,i),P(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),P(vr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),P(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=J(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=J(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=ep(d,c,[1,a],n,"NHWC",[1,s],i);return p?J(h,[h.shape[2],h.shape[3]]):J(h,[h.shape[0],h.shape[2],h.shape[3]])}var Ny=D({conv1d_:LN});function BN(e,t,a,n,r,s="NHWC",i){P(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),P(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),P(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),P(a.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${a.rank}`);let p=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];P(p===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${a.shape[2]}.`),P(c===a.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${a.shape[3]}.`),In("conv2dDerInput",r,i);let d={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},f=z.runKernel(ai,d,h);return u?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Ey=D({conv2DBackpropInput_:BN});function WN(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Ey(a,i,o,n,r,"NHWC",s)}var Ry=D({conv2dTranspose_:WN});function VN(e,t,a,n,r="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),P(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),P(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),P(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),P(vr(a,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),P(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`);let p={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},d=z.runKernel(jc,p,c);return u?J(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var My=D({conv3d_:VN});function UN(e,t,a,n,r){P(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=J(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];P(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),P(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),P(a.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${a.rank}`),P(l===a.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${a.shape[3]}.`),P(u===a.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${a.shape[4]}.`);let p={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},d=z.runKernel(qc,p,c);return o?J(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var GN=D({conv3DBackpropInput_:UN});function HN(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return GN(a,s,i,n,r)}var $y=D({conv3dTranspose_:HN});function jN(e){let t={x:R(e,"x","cos","float32")};return z.runKernel(ni,t)}var _y=D({cos_:jN});function qN(e){let t={x:R(e,"x","cosh","float32")};return z.runKernel(ri,t)}var Py=D({cosh_:qN});function XN(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return z.runKernel(si,r,s)}var Fy=D({cumprod_:XN});function KN(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return z.runKernel(ii,r,s)}var Oy=D({cumsum_:KN});function ZN(e,t,a,n=!1){let r=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");P(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),P(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),P(a>=0,()=>`size must be non-negative, but got ${a}.`),P(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:a,binaryOutput:n};return z.runKernel(Td,i,o)}var Dy=D({denseBincount_:ZN});function YN(e,t,a="NHWC"){let n=R(e,"x","depthToSpace","float32"),r=a==="NHWC"?n.shape[1]:n.shape[2],s=a==="NHWC"?n.shape[2]:n.shape[3],i=a==="NHWC"?n.shape[3]:n.shape[1];P(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),P(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${r} and ${t} for depthToSpace with input shape - ${n.shape}`),F(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying + ${n.shape}`),P(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape - ${n.shape}`),F(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${n.shape}`);let o={x:n},l={blockSize:t,dataFormat:a};return z.runKernel(Si,o,l)}var Zx=D({depthToSpace_:NE});function EE(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d","float32"),l=R(t,"filter","depthwiseConv2d","float32"),u=o,d=!1;o.rank===3&&(d=!0,u=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),F(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`);let c=r==="NHWC"?u.shape[3]:u.shape[1];F(c===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${l.shape[2]}.`),Sn("depthwiseConv2d",n,i);let p={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},f=z.runKernel(Ti,p,h);return d?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var gh=D({depthwiseConv2d_:EE});function RE(e){let t={x:R(e,"x","diag")};return z.runKernel(Qc,t)}var Yx=D({diag_:RE});function ME(e,t,a,n,r=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");F(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),F(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),F(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=J(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);let d={x:l,filter:o},c={strides:a,pad:n,dilations:r},p=z.runKernel(eh,d,c);return u?J(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Jx=D({dilation2d_:ME});function $E(e,t){let a=R(e,"a","equal","string_or_numeric"),n=R(t,"b","equal","string_or_numeric");[a,n]=It(a,n),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(ts,r)}var S2=D({equal_:$E});function _E(e,t,a){let n=R(t,"a","where"),r=R(a,"b","where"),s=R(e,"condition","where","bool"),i=zt(zt(s.shape,n.shape),r.shape),o=ei(s,i),l=ei(n,i),u=ei(r,i),d={condition:o,t:l,e:u};return z.runKernel(Dl,d)}var ii=D({where_:_E});function FE(e){let t={x:R(e,"x","zerosLike")};return z.runKernel(Hl,t)}var Xa=D({zerosLike_:FE});function PE(e,t){let a=R(e,"a","div"),n=R(t,"b","div");[a,n]=It(a,n);let r=fe(a,n),s=Xa(r),i=S2(n,s);return ii(i,s,r)}var Qx=D({divNoNan_:PE});function OE(e,t){let a=R(e,"t1","dot"),n=R(t,"t2","dot");F((a.rank===1||a.rank===2)&&(n.rank===1||n.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${a.rank} and ${n.rank}.`);let r=a.rank===1?a.size:a.shape[1],s=n.rank===1?n.size:n.shape[0];if(F(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),a.rank===1&&n.rank===1){let i=J(a,[1,-1]),o=J(n,[-1,1]),l=st(i,o);return J(l,[])}else if(a.rank===1&&n.rank===2){let i=J(a,[1,-1]),o=J(n,[n.shape[0],n.shape[1]]),l=st(i,o);return J(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=J(n,[-1,1]),o=st(a,i);return J(o,[o.size])}else{let i=J(n,[n.shape[0],n.shape[1]]);return st(a,i)}}var eb=D({dot_:OE});function DE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return z.runKernel(Sd,a,n)}var tb=D({einsum_:DE});function zE(e){let t={x:R(e,"x","elu","float32")};return z.runKernel(Ni,t)}var T2=D({elu_:zE});function LE(e){let t=R(e,"x","erf");F(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=Ue(t,"float32"));let a={x:t};return z.runKernel(Td,a)}var ab=D({erf_:LE});function C2(e,t){for(let a=0;ae[s]);return[a,r]}function tp(e,t){let a=t.map(n=>1);return nb(e,a,t)}function WE(e,t,a){F(C2(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function VE(e,t){if(C2(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function GE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function UE(e,t){let a=[];for(let n=t-e;n"Axis must be <= rank of the tensor");let n={input:a},r={dim:t};return z.runKernel(wl,n,r)}var Gt=D({expandDims_:eR});function tR(e){let t={x:R(e,"x","expm1")};return z.runKernel(Ei,t)}var ib=D({expm1_:tR});function aR(e,t){let a=R(e,"x","tile","string_or_numeric");F(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of reps ${t}.`);let n={x:a},r={reps:t};return z.runKernel(As,n,r)}var Vr=D({tile_:aR});function nR(e,t,a,n="float32"){t==null&&(t=e);let r=ve([e,t],n),s=e<=t?e:t;for(let o=0;o`Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`),F(tl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=J(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:a,alpha:n,beta:r},d=z.runKernel(rh,l,u);return o?J(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var cb=D({localResponseNormalization_:fR});function mR(e){let t={x:R(e,"x","log","float32")};return z.runKernel(ls,t)}var il=D({log_:mR});function gR(e){let t={x:R(e,"x","log1p")};return z.runKernel(Rd,t)}var _2=D({log1p_:gR});function yR(e){return F(Gr(e),()=>"The f passed in grad(f) must be a function"),(t,a)=>{let n=R(t,"x","tf.grad","string_or_numeric"),r=a!=null?R(a,"dy","tf.grad"):null;return z.tidy(()=>{let{value:s,grads:i}=z.gradients(()=>e(n),[n],r);return r!=null&&Sa(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Ah(i),i[0]})}}function AR(e){return F(Gr(e),()=>"The f passed in grads(f) must be a function"),(t,a)=>{F(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=ad(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return z.tidy(()=>{let{value:s,grads:i}=z.gradients(()=>e(...n),n,r);return r!=null&&Sa(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Ah(i),i})}}function xR(e){return F(Gr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{F(t instanceof dt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(a==null||a instanceof dt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=z.gradients(()=>e(t),[t],a);return Ah(n),{grad:n[0],value:r}}}function bR(e){return F(Gr(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{F(Array.isArray(t)&&t.every(r=>r instanceof dt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(a==null||a instanceof dt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=z.gradients(()=>e(...t),t,a);return a!=null&&Sa(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Ah(n.grads),n}}function hb(e,t){F(Gr(e),()=>"The f passed in variableGrads(f) must be a function"),F(t==null||Array.isArray(t)&&t.every(u=>u instanceof ed),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in z.registeredVariables)t.push(z.registeredVariables[u])}let n=a?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),F(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=z.gradients(e,t,null,s);F(o.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),F(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((u,d)=>{o[d]!=null&&(l[u.name]=o[d])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function Qn(e){return z.customGrad(e)}function Ah(e){if(e.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that - the f you passed encloses all operations that lead from x to y.`)}function vR(e){let t={x:R(e,"x","softplus")};return z.runKernel(Pd,t)}var F2=D({softplus_:vR});function wR(e){let t=R(e,"x","logSigmoid");return Qn(a=>({value:Xn(F2(Xn(a))),gradFunc:n=>ae(n,Da(Xn(a)))}))(t)}var fb=D({logSigmoid_:wR});function kR(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(ys,r)}var he=D({sub_:kR});function IR(e,t=-1){let a=R(e,"logits","logSoftmax");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and axis was ${t}`);return Qn((n,r)=>{let s=pa(n,t,!0),i=he(n,s),o=he(Ue(i,"float32"),il(tt(Xr(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[d]=u,c=!0,p=Xr(d);return he(l,ae(tt(l,t,c),p))}}})(a)}var mb=D({logSoftmax_:IR});function SR(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=gd(t,n.shape),s=pa(n,r,!0),i=he(n,s),o=Xr(i),l=tt(o,r),u=il(l),d=xe(J(s,u.shape),u);if(a){let c=tp(d.shape,r);return J(d,c)}return d}var P2=D({logSumExp_:SR});function TR(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Oi,r)}var rd=D({logicalAnd_:TR});function CR(e){let t={x:R(e,"x","logicalNot","bool")};return z.runKernel(Di,t)}var O2=D({logicalNot_:CR});function NR(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Tl,r)}var D2=D({logicalOr_:NR});function ER(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return zt(a.shape,n.shape),rd(D2(e,t),O2(rd(e,t)))}var gb=D({logicalXor_:ER}),sc=2147483648;function RR(e,t,a="left"){let n=R(e,"sortedSequence","searchSorted"),r=R(t,"values","searchSorted"),s=n.shape[n.shape.length-1],i=r.shape[r.shape.length-1],o=J(n,[-1,s]),l=J(r,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(yt(l.shape)>=sc)throw new Error(`values tensor size must less than ${sc}`);if(o.shape[1]>=sc)throw new Error(`trailing dim_size must less than ${sc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},d={side:a};return z.runKernel(ph,u,d)}var xh=D({searchSorted_:RR});function yb(e,t){return xh(e,t,"left")}function MR(e,t,a,n,r){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=J(s,[1,s.shape[0],s.shape[1],s.shape[2]])),F(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),F(kr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Sn("maxPool",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=z.runKernel(Li,u,d);return l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var z2=D({maxPool_:MR});function $R(e,t=[1,1,1],a,n,r,s="NDHWC"){let i=R(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),F(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Sn("maxPool3d",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=z.runKernel(sh,u,d);return l?J(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var Ab=D({maxPool3d_:$R});function _R(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=z.runKernel(ih,s,i);return{result:o[0],indexes:o[1]}}var xb=D({maxPoolWithArgmax_:_R});function FR(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=It(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(us,r)}var L2=D({maximum_:FR});function PR(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return z.runKernel(Bi,n,r)}var sd=D({mean_:PR});function pn(e,t="float32"){if(t==="complex64"){let n=pn(e,"float32"),r=pn(e,"float32");return xr(n,r)}let a=Vc(yt(e),t);return z.makeTensor(a,e,t)}function Br(e,t="float32"){if(t==="complex64"){let n=Br(e,"float32"),r=pn(e,"float32");return xr(n,r)}let a=B1(yt(e),t);return z.makeTensor(a,e,t)}function bb(e,t,{indexing:a="xy"}={}){if(a!=="xy"&&a!=="ij")throw new TypeError(`${a} is not a valid third argument to meshgrid`);if(e===void 0)return[];let n=R(e,"x","meshgrid",e instanceof dt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof dt?t.dtype:"float32"),s=yt(n.shape),i=yt(r.shape);return a==="xy"?(n=J(n,[1,-1]),r=J(r,[-1,1]),[st(Br([i,1],n.dtype),n),st(r,Br([1,s],r.dtype))]):(n=J(n,[-1,1]),r=J(r,[1,-1]),[st(n,Br([1,i],n.dtype)),st(Br([s,1],r.dtype),r)])}function OR(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=It(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(ds,r)}var B2=D({minimum_:OR});function DR(e,t,a){F(a==="reflect"||a==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${a}.`);let n=R(e,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");F(t.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${t.length}.`);let r=a==="reflect"?1:0;for(let o=0;o"Invalid number of paddings. Must be length of 2 each."),F(t[o][0]>=0&&t[o][0]<=n.shape[o]-r&&t[o][1]>=0&&t[o][1]<=n.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${n.shape[o]-r} or less than 0 for input of shape ${n.shape}`);let s={paddings:t,mode:a},i={x:n};return z.runKernel(Vi,i,s)}var vb=D({mirrorPad_:DR});function zR(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=It(a,n);let r={a,b:n};return z.runKernel(Md,r)}var Xl=D({mod_:zR});function LR(e,t=null,a=!1){e=R(e,"x","moments");let n=gd(t,e.shape),r=sd(e,n,a),s=r.shape;a||(s=tp(r.shape,n));let i=In(he(Ue(e,"float32"),J(r,s))),o=sd(i,n,a);return{mean:r,variance:o}}var wb=D({moments_:LR});function BR(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=ad(a,"c","multiRNNCell"),i=ad(n,"h","multiRNNCell"),o=r,l=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);a=a||Math.random();let o={logits:i===1?J(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=z.runKernel(oh,o,l);return i===1?J(u,[u.size]):u}var Ib=D({multinomial_:WR});function VR(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=It(a,n),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(cs,r)}var W2=D({notEqual_:VR});function GR(e){let t={x:R(e,"x","onesLike")};return z.runKernel(El,t)}var Sb=D({onesLike_:GR});function UR(e,t){let a=R(e,"v1","outerProduct"),n=R(t,"v2","outerProduct");F(a.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${a.rank} and ${n.rank}.`);let r=J(a,[-1,1]),s=J(n,[1,-1]);return st(r,s)}var Tb=D({outerProduct_:UR});function jR(e,t,a=0){let n=R(e,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:a},s={x:n};return z.runKernel(ji,s,r)}var rr=D({pad_:jR});function HR(e,t,a=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),rr(e,[t],a)}var Cb=D({pad1d_:HR});function qR(e,t,a=0){return F(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),rr(e,t,a)}var Nb=D({pad2d_:qR});function XR(e,t,a=0){return F(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),rr(e,t,a)}var Eb=D({pad3d_:XR});function KR(e,t,a=0){return F(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),rr(e,t,a)}var Rb=D({pad4d_:KR});function ZR(e,t,a){let n=R(e,"x","spaceToBatchND");F(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),F(a.length===t.length,()=>`paddings.shape[0] ${a.length} must be equal to [blockShape] ${t.length}`),F(n.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+a[l-1][0]+a[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${a.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:n},s={blockShape:t,paddings:a};return z.runKernel(Bl,r,s)}var V2=D({spaceToBatchND_:ZR});function YR(e,t,a,n,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),n===0&&(n="valid");let o=R(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(kr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let d=Tx(l.shape,t,s,r,n),c=[d.dilationHeight,d.dilationWidth],p;n==="same"?p=QR([d.filterHeight,d.filterWidth],c):p=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[f,m]=JR([d.inHeight,d.inWidth],c,p),g=h?n:"valid",y=h?l:V2(l,c,f),A=(a==="avg"?()=>w2(y,t,s,g,i):()=>z2(y,t,s,g,i))(),x=h?A:k2(A,c,m);return u?J(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function JR(e,t,a){let n=a.map(d=>d[0]),r=a.map(d=>d[1]),s=e.concat(n,r),i=t.map((d,c)=>(d-s[c]%d)%d),o=r.map((d,c)=>d+i[c]),l=t.map((d,c)=>[n[c],o[c]]),u=t.map((d,c)=>[0,i[c]]);return[l,u]}function QR(e,t){let a=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),n=a.map(s=>Math.floor(s/2)),r=a.map((s,i)=>s-n[i]);return a.map((s,i)=>[n[i],r[i]])}var Mb=D({pool_:YR});function eM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return z.runKernel(qi,r)}var G2=D({prelu_:eM});function tM(e,t=null,a=!1){let n=R(e,"x","prod");n.dtype==="bool"&&(n=Ue(n,"int32"));let r={x:n},s={axis:t,keepDims:a};return z.runKernel(Xi,r,s)}var $b=D({prod_:tM});function aM(e,t,a,n){let r=e.map((d,c)=>R(d,`tensors${c}`,"raggedGather","int32")),s=R(t,"paramsDenseValues","raggedGather"),i=R(a,"indices","raggedGather","int32"),o={paramsNestedSplits:r,paramsDenseValues:s,indices:i},l={outputRaggedRank:n},u=z.runKernel(lh,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var _b=D({raggedGather_:aM});function nM(e,t,a){let n=R(e,"starts","raggedRange"),r=R(t,"limits","raggedRange",n.dtype),s=R(a,"deltas","raggedRange",n.dtype),i={starts:n,limits:r,deltas:s},o=z.runKernel(uh,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var Fb=D({raggedRange_:nM});function rM(e,t,a,n,r){let s=R(e,"shape","raggedTensorToTensor","int32"),i=R(t,"values","raggedTensorToTensor"),o=R(a,"defaultValue","raggedTensorToTensor",i.dtype),l=n.map((c,p)=>R(c,`tensors${p}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},d={rowPartitionTypes:r};return z.runKernel(dh,u,d)}var Pb=D({raggedTensorToTensor_:rM});function sM(e,t,a){let n=yt(e),r=null;if(a==null||a==="float32")r=new Float32Array(n);else if(a==="int32")r=new Int32Array(n);else if(a==="bool")r=new Uint8Array(n);else throw new Error(`Unknown data type ${a}`);for(let s=0;s=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(a=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},iM=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=U2.alea(r.toString()),this.randn=new j2(0,1,a,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,a,n,r,s;for(;;){do n=this.randn.nextValue(),s=1+this.c*n;while(s<=0);if(s*=s*s,e=n*n,t=1-.331*e*e,a=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),rthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=a,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=U2.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function lM(e,t,a=1,n="float32",r){if(a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new iM(t,a,n,r),i=ve(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),Kr(t,0)}var Bb=D({reverse1d_:gM});function yM(e,t){let a=R(e,"x","reverse");return F(a.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${a.rank}.`),Kr(a,t)}var Wb=D({reverse2d_:yM});function AM(e,t){let a=R(e,"x","reverse");return F(a.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${a.rank}.`),Kr(a,t)}var Vb=D({reverse3d_:AM});function xM(e,t){let a=R(e,"x","reverse");return F(a.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${a.rank}.`),Kr(a,t)}var Gb=D({reverse4d_:xM});function bM(e){let t={x:R(e,"x","round")};return z.runKernel(Ol,t)}var K2=D({round_:bM});function vM(e){let t={x:R(e,"x","rsqrt","float32")};return z.runKernel(hs,t)}var Ub=D({rsqrt_:vM});function wM(e){let t={x:R(e,"x","selu")};return z.runKernel(_d,t)}var jb=D({selu_:wM});function kM(e,t,a,n,r,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),u=R(a,"pointwiseFilter","separableConv2d"),d=o,c=!1;if(o.rank===3&&(c=!0,d=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");F(d.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${d.rank}.`),F(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),F(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),F(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),F(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let p=l.shape[2],h=l.shape[3];F(u.shape[2]===p*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${p*h}, but got ${u.shape[2]}.`);let f=gh(d,l,n,r,i,s),m=ep(f,u,1,"valid",i);return c?J(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Hb=D({separableConv2d_:kM});async function IM(e,t){let a=R(e,"x","setdiff1d"),n=R(t,"y","setdiff1d");F(a.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${a.dtype}) and y (${n.dtype}).`),F(a.rank===1,()=>`x should be 1D tensor, but got x (${a.shape}).`),F(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let r=await a.data(),s=await n.data(),i=new Set(s),o=0;for(let d=0;d`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),_e(n,[t],[a])}var Yb=D({slice1d_:NM});function EM(e,t,a){let n=R(e,"x","slice2d");return F(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var Jb=D({slice2d_:EM});function RM(e,t,a){let n=R(e,"x","slice3d");return F(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var sp=D({slice3d_:RM});function MM(e,t,a){let n=R(e,"x","slice4d");return F(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var bh=D({slice4d_:MM});function $M(e,t=-1){let a=R(e,"logits","softmax","float32");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and dim was ${t}`);let n={logits:a},r={dim:t};return z.runKernel(ao,n,r)}var vh=D({softmax_:$M});function _M(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(th,t)}var wh=D({fft_:_M});function FM(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(ah,t)}var id=D({ifft_:FM});function PM(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=J(e,[a,t]);n=id(r)}else{let r=[a,2*(t-1)],s=J(rl(e),[a,t]),i=J(Zd(e),[a,t]),o=Kr(_e(s,[0,1],[a,t-2]),1),l=ae(Kr(_e(i,[0,1],[a,t-2]),1),Fe(-1)),u=at([s,o],1),d=at([i,l],1),c=J(xr(u,d),[r[0],r[1]]);n=id(c)}if(n=rl(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=J(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var Z2=D({irfft_:PM});function OM(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return z.runKernel(Wl,n,r)}var ka=D({split_:OM});function DM(e,t){F(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let a=e.shape[e.shape.length-1],n=e.size/a,r;if(t!=null&&t0),m=e.shape.map(g=>g);m[e.shape.length-1]=t,r=_e(e,f,m),a=t}else if(t!=null&&t>a){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-a,r=at([e,pn(f)],e.shape.length-1),a=t}else r=e;let s=Xa(r),i=J(xr(r,s),[n,a]),o=wh(i),l=Math.floor(a/2)+1,u=rl(o),d=Zd(o),c=ka(u,[l,a-l],u.shape.length-1),p=ka(d,[l,a-l],d.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,J(xr(c[0],p[0]),h)}var kh=D({rfft_:DM});function zM(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=It(a,n),zt(a.shape,n.shape);let r={a,b:n},s={};return z.runKernel(gs,r,s)}var Y2=D({squaredDifference_:zM});function LM(e,t){let a=R(e,"x","squeeze","string_or_numeric");return J(a,mA(a.shape,t).newShape)}var $e=D({squeeze_:LM});function BM(e,t=0){let a=ad(e,"tensors","stack","string_or_numeric");F(a.length>=1,()=>"Pass at least one tensor to tf.stack"),a.length>0&&F(t<=a[0].rank,()=>"Axis must be <= rank of the tensor");let n=a,r={axis:t};return z.runKernel(Ml,n,r)}var sa=D({stack_:BM});function WM(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return z.runKernel(oo,a,n)}var J2=D({step_:WM});function VM(e,t,a,n,r=0,s=0,i=0,o=0,l=0){let u={x:R(e,"x","stridedSlice","string_or_numeric")},d={begin:t,end:a,strides:n,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return z.runKernel(no,u,d)}var Qb=D({stridedSlice_:VM});function GM(e){let t={x:R(e,"x","tan","float32")};return z.runKernel(Ul,t)}var e4=D({tan_:GM});function Ut(e,t){ci(e);let a=Yn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return xs(e,null,a,t)}function Kn(e,t,a){if(ci(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Yn(e,a);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return xs(e,t,n,a)}function t4(e,t,a){if(ci(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Yn(e,a);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return xs(e,t,n,a)}function a4(e,t,a){if(ci(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Yn(e,a);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return xs(e,t,n,a)}function n4(e,t,a){if(ci(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Yn(e,a);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||n,xs(e,t,n,a)}function UM(e,t=1,a=!0){let n=R(e,"x","topk");if(n.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let r=n.shape[n.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:n},i={k:t,sorted:a},[o,l]=z.runKernel(so,s,i);return{values:o,indices:l}}var r4=D({topk_:UM});function jM(e,t=0,a=1,n,r){if(n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new j2(t,a,n,!0,r),i=ve(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=z.runKernel(ch,n,r);return{values:s,indices:i}}var i4=D({unique_:HM});function qM(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");F(tl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return z.runKernel(hh,s,i)}var o4=D({unsortedSegmentSum_:qM});function XM(e,t=0){let a=R(e,"x","unstack","string_or_numeric");F(t>=-a.shape.length&&t`Axis = ${t} is not in [-${a.shape.length}, ${a.shape.length})`);let n={value:a},r={axis:t};return z.runKernel(jl,n,r)}var Ta=D({unstack_:XM});function l4(e,t){return xh(e,t,"right")}function u4(e,t=!0,a,n){return z.makeVariable(e,t,a,n)}function d4(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Sa(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=s;m"Shape mismatch in v and x");let l=Fe(1),u=he(l,o),d=ae(he(i,s),u);if(r){F(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");d=fe(d,he(l,sl(o,c)))}return xe(s,d)}var c4=D({movingAverage_:YM});function JM(e,t,a){let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");y2(r,n,a);let s={indices:n,updates:r},i={shape:a};return z.runKernel(Qi,s,i)}var h4=D({scatterND_:JM});function QM(e,t,a,n){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(a.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${a.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function e$(e,t,a,n=0){let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);QM(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return z.runKernel(Ld,o,l)}var f4=D({sparseToDense_:e$});function t$(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return z.runKernel(_i,n)}var m4=D({gatherND_:t$});function a$(e,t){if(t==null)return e.shape.slice();if(Jr(e.shape,t))return t;if(e.shape.length===t.length){let a=[];for(let n=0;n`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),F(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof dt?r.clone():r;let s=a$(r,a),i=1-t,o=fe(E2(xe(q2(s,0,1,"float32",n),i)),i);return ae(r,o)}var g4=D({dropout_:n$});function e3(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Ih(e,t,a){let n=1-e%2,r=new Float32Array(e);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${n.rank}`),F(n.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${n.rank} and targets rank ${r.rank}`),Sa(n.shape.slice(0,n.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=n.shape[n.shape.length-1];F(a>0&&a<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${a}`);let i=await n.data(),o=await r.data(),[l,u]=[i.length/s,s],d=gA("bool",l);for(let c=0;cg.value-m.value),d[c]=0;for(let m=0;ml$,depthwiseConv2d:()=>f$,matMul:()=>g$});function s$(e,t,a,n,r,s="NHWC",i){let o=e;e.rank===3&&(o=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]])),F(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),F(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),F(a.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${a}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],d=s==="NHWC"?l.shape[3]:l.shape[1];F(u===a[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${a[2]}.`),F(d===a[3],()=>`Error in conv2dDerFilter: depth of dy (${d}) must match output depth for filter (${a[3]}).`),Sn("conv2dDerFilter",r,i);let c={x:o,dy:l},p={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return z.runKernel(qc,c,p)}var i$=D({conv2DBackpropFilter_:s$});function Sh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return ae(e,J2(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Th(e,t){let a=t,n=c2(e.shape,t.shape);return n.length>0&&(a=tt(a,n)),J(a,e.shape)}function Ch(e,t,a,n){if(t==="linear")return e;if(t==="relu")return rp(e);if(t==="elu")return T2(e);if(t==="relu6")return X2(e);if(t==="prelu")return G2(e,a);if(t==="leakyrelu")return $2(e,n);if(t==="sigmoid")return Da(e);throw new Error(`Unknown fused activation ${t}.`)}var Nh=(e,t)=>!(e>0)||t==="linear";function o$({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(l=l||"linear",Nh(z.state.gradientDepth,l)===!1){F(r==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${r} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let S=ep(e,t,a,n,r,s,i);return o!=null&&(S=xe(S,o)),Ch(S,l,u,d)}let c=R(e,"x","conv2d","float32"),p=R(t,"filter","conv2d","float32"),h=c,f=!1;c.rank===3&&(f=!0,h=J(c,[1,c.shape[0],c.shape[1],c.shape[2]])),F(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),F(p.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${p.rank}.`),Sn("fused conv2d",n,i);let m=r==="NHWC"?h.shape[3]:h.shape[1];F(p.shape[2]===m,()=>`Error in conv2d: depth of input (${m}) must match input depth for filter ${p.shape[2]}.`),F(kr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Jd(h.shape,p.shape,a,s,n,i),y;o!=null&&(y=R(o,"bias","fused conv2d"),[y]=It(y,c),r==="NHWC"?zt(g.outShape,y.shape):(F(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),F(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let A;if(u!=null){let S=u.shape;if(F(S.length<=1||S.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${S.length}.`),S.length===1)F(S[0]===1||S[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the number of output channels (${g.outChannels}).`);else if(S.length===3)try{zt(S,g.outShape)}catch(C){let N=`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(N)}A=R(u,"prelu weights","fused conv2d")}let x=(S,C)=>{F(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,_,$,M]=C,I=Sh(S,$,l);F(nd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let E=Wx(_.shape,I,N,a,n),O=i$(_,I,N.shape,a,n),L=[E,O];if(M!=null){let B=Th(M,I);L.push(B)}return L},b={x:h,filter:p,bias:y,preluActivationWeights:A},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return o==null?Qn((S,C,N)=>{let _=z.runKernel(jr,b,w);return N([C,S,_]),f&&(_=J(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:x}})(h,p):Qn((S,C,N,_)=>{let $=z.runKernel(jr,b,w);return _([C,S,$,N]),f&&($=J($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:x}})(h,p,y)}var l$=D({fusedConv2d_:o$});function u$(e,t,a,n,r,s=[1,1],i){let o=e;e.rank===3&&(o=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},d={strides:n,pad:r,dimRoundingMode:i,dilations:s,filterShape:a};return z.runKernel(Yc,u,d)}var d$=D({depthwiseConv2dNativeBackpropFilter_:u$});function p$(e,t,a,n,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:a},d={strides:n,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},c=z.runKernel(Jc,u,d);return l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var c$=D({depthwiseConv2dNativeBackpropInput_:p$});function h$({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(Nh(z.state.gradientDepth,l)===!1){let w=gh(e,t,a,n,r,s,i);return o!=null&&(w=xe(w,o)),Ch(w,l,u,d)}let c=R(e,"x","depthwiseConv2d","float32"),p=R(t,"filter","depthwiseConv2d","float32"),h=c,f=!1;c.rank===3&&(f=!0,h=J(c,[1,c.shape[0],c.shape[1],c.shape[2]])),F(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),F(p.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`),F(h.shape[3]===p.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${p.shape[2]}.`),s==null&&(s=[1,1]),F(kr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Sn("fused depthwiseConv2d",n,i);let m=Jd(h.shape,p.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=It(g,c),zt(m.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let A=(w,S)=>{F(nd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[C,N,_,$]=S,M=Sh(w,_,l),I=c$(N.shape,M,C,a,n,s,i),E=d$(N,M,C.shape,a,n,s,i);if($!=null){let O=Th(g,M);return[I,E,O]}return[I,E]},x={x:h,filter:p,bias:g,preluActivationWeights:y},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return o==null?Qn((w,S,C)=>{let N=z.runKernel(Hr,x,b);return C([S,w,N]),f&&(N=J(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:A}})(h,p):Qn((w,S,C,N)=>{let _=z.runKernel(Hr,x,b);return N([S,w,_,C]),f&&(_=J(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:A}})(h,p,g)}var f$=D({fusedDepthwiseConv2d_:h$});function m$({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Nh(z.state.gradientDepth,s)===!1){let $=st(e,t,a,n);return r!=null&&($=xe($,r)),Ch($,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=It(l,u);let d=a?l.shape[l.rank-2]:l.shape[l.rank-1],c=n?u.shape[u.rank-1]:u.shape[u.rank-2],p=a?l.shape[l.rank-1]:l.shape[l.rank-2],h=n?u.shape[u.rank-2]:u.shape[u.rank-1],f=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=yt(f),y=yt(m);F(d===c,()=>`Error in fused matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${a} and transposeB=${n} must match.`);let A=zt(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([p,h]),x=a?J(l,[g,d,p]):J(l,[g,p,d]),b=n?J(u,[y,h,c]):J(u,[y,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=It(w,l),zt(A,w.shape));let S;i!=null&&(S=R(i,"prelu weights","fused matMul"));let C=($,M)=>{let[I,E,O,L]=M,B=Sh(J($,O.shape),O,s),G,j;if(!a&&!n?(G=st(B,E,!1,!0),j=st(I,B,!0,!1)):!a&&n?(G=st(B,E,!1,!1),j=st(B,I,!0,!1)):a&&!n?(G=st(E,B,!1,!0),j=st(I,B,!1,!1)):(G=st(E,B,!0,!0),j=st(B,I,!0,!0)),r!=null){let U=Th(L,B);return[G,j,U]}else return[G,j]},N={a:x,b,bias:w,preluActivationWeights:S},_={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?Qn(($,M,I)=>{let E=z.runKernel(Ur,N,_);return I([$,M,E]),{value:J(E,A),gradFunc:C}})(x,b):Qn(($,M,I,E)=>{let O=z.runKernel(Ur,N,_);return E([$,M,O,I]),{value:J(O,A),gradFunc:C}})(x,b,w)}var g$=D({fusedMatMul_:m$});function y$(e){return Ih(e,.54,.46)}var A$=D({hammingWindow_:y$});function x$(e){return Ih(e,.5,.5)}var A4=D({hannWindow_:x$});function b$(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(_e(e,s,t)),s+=a;if(n)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),F(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),F(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),F(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),F(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),F(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let d={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return z.runKernel(Ii,d,c)}var I$=D({cropAndResize_:k$});function S$(e){let t=R(e,"image","flipLeftRight","float32");F(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let a={image:t};return z.runKernel(Ri,a,{})}var T$=D({flipLeftRight_:S$});function C$(e){let t=R(e,"image","grayscaleToRGB"),a=t.rank-1,n=t.shape[a];F(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),F(n===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${n}.`);let r=new Array(t.rank);return r.fill(1,0,a),r[a]=3,Vr(t,r)}var N$=D({grayscaleToRGB_:C$});function E$(e,t,a=0,n=.5){let r=R(e,"image","rotateWithOffset","float32");F(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:a,center:n};return z.runKernel(lo,s,i)}var R$=D({rotateWithOffset_:E$});function Kl(e,t,a,n,r,s){n==null&&(n=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return a=Math.min(a,i),F(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),F(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),F(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),F(t.rank===1,()=>"scores must be a 1D tensor"),F(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),F(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s}}function M$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Kl(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return z.runKernel(Gi,{boxes:s,scores:i},l)}var $$=D({nonMaxSuppression_:M$});function _$(e,t,a){let n=F$(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function F$(e,t,a){return O$(e,t,a||P$)}function P$(e,t){return e>t?1:e>>1);let o=a(t,e[s]);o>0?n=s+1:(r=s,i=!o)}return i?n:-n-1}function b4(e,t,a,n,r){return a3(e,t,a,n,r,0)}function v4(e,t,a,n,r,s){return a3(e,t,a,n,r,0,!1,s,!0)}function w4(e,t,a,n,r,s){return a3(e,t,a,n,r,s,!0)}function a3(e,t,a,n,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;gr&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(ty);let d=s>0?-.5/s:0,c=[],p=[];for(;c.length0;){let g=u.pop(),{score:y,boxIndex:A,suppressBeginIndex:x}=g;if(y=x;--w){let S=D$(e,A,c[w]);if(S>=n){b=!0;break}if(g.score=g.score*z$(n,d,S),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===y?(c.push(A),p.push(g.score)):g.score>r&&_$(u,g,ty))}let h=c.length,f=a-h;o&&f>0&&(c.push(...new Array(f).fill(0)),p.push(...new Array(f).fill(0)));let m={selectedIndices:c};return i&&(m.selectedScores=p),l&&(m.validOutputs=h),m}function D$(e,t,a){let n=e.subarray(t*4,t*4+4),r=e.subarray(a*4,a*4+4),s=Math.min(n[0],n[2]),i=Math.min(n[1],n[3]),o=Math.max(n[0],n[2]),l=Math.max(n[1],n[3]),u=Math.min(r[0],r[2]),d=Math.min(r[1],r[3]),c=Math.max(r[0],r[2]),p=Math.max(r[1],r[3]),h=(o-s)*(l-i),f=(c-u)*(p-d);if(h<=0||f<=0)return 0;let m=Math.max(s,u),g=Math.max(i,d),y=Math.min(o,c),A=Math.min(l,p),x=Math.max(y-m,0)*Math.max(A-g,0);return x/(h+f-x)}function z$(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function ty(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function L$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Kl(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],d=l[1],{selectedIndices:c}=b4(u,d,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Ut(c,"int32")}var B$=L$;function W$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Kl(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},d={maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s},c=z.runKernel(Ui,u,d);return{selectedIndices:c[0],selectedScores:c[1]}}var V$=D({nonMaxSuppressionWithScore_:W$});async function G$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Kl(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),d=u[0],c=u[1],{selectedIndices:p,selectedScores:h}=w4(d,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ut(p,"int32"),selectedScores:Ut(h)}}var U$=G$;function j$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Kl(i,o,a,n,r,null),u=l.maxOutputSize,d=l.iouThreshold,c=l.scoreThreshold,p={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:d,scoreThreshold:c,padToMaxOutputSize:s},f=z.runKernel(Nl,p,h);return{selectedIndices:f[0],validOutputs:f[1]}}var H$=D({nonMaxSuppressionPadded_:j$});async function q$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Kl(i,o,a,n,r,null),u=l.maxOutputSize,d=l.iouThreshold,c=l.scoreThreshold,[p,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=v4(p,h,u,d,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ut(f,"int32"),validOutputs:Fe(m,"int32")}}var X$=q$;function K$(e,t,a=!1,n=!1){let r=R(e,"images","resizeBilinear");F(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),F(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),F(n===!1||a===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=J(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=z.runKernel(Yi,o,l);return i?J(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var Z$=D({resizeBilinear_:K$});function Y$(e,t,a=!1,n=!1){let r=R(e,"images","resizeNearestNeighbor");F(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),F(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),F(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),F(n===!1||a===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=J(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=z.runKernel(Zi,o,l);return i?J(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var J$=D({resizeNearestNeighbor_:Y$});function Q$(e,t="binary",a=!1,n=.5){let r=R(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=ae(Ut([n]),255),d,c,p,h;if(F(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),F(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),F(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),F(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[d,c,p]=ka(r,[1,1,1],-1);let m=ae(d,s),g=ae(c,i),y=ae(p,o);h=xe(xe(m,g),y)}else h=e;if(t==="otsu"){let m=I2(Ue(K2(h),"int32"),ze([]),256);u=e_(m,l)}let f=a?yh(h,u):np(h,u);return Ue(ae(f,255),"int32")}function e_(e,t){let a=Ut([-1]),n=Ut([0]),r=Ut([0]),s,i,o,l,u,d;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${i.rank}.`),F(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),F(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:a,fillMode:n,fillValue:r,outputShape:s};return z.runKernel(io,l,u)}var n_=D({transform_:a_});function r_(e,t,a){F(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),F(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`);let n=R(e,"a","bandPart");F(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let r=n.shape,[s,i]=n.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(a<=i))throw new Error(`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),a<0&&(a=i);let o=J(ol(0,s,1,"int32"),[-1,1]),l=ol(0,i,1,"int32"),u=he(o,l),d=rd(yh(u,Fe(+t,"int32")),M2(u,Fe(-a,"int32"))),c=pn([s,i],n.dtype);return J(sa(Ta(J(n,[-1,s,i])).map(p=>ii(d,p,c))),r)}var s_=D({bandPart_:r_});function i_(e){let t;if(Array.isArray(e)){t=!1,F(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let r=e[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=ka(e,e.shape[0],0).map(r=>$e(r,[0]));F(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let a=[],n=e;for(let r=0;r{let s=n[r];if(r>0)for(let i=0;i=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return ay(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Ta(J(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,d]=ay(l,t);r.push(u),s.push(d)});let i=J(sa(r,0),e.shape),o=J(sa(s,0),e.shape);return[i,o]}}function ay(e,t=!1){return z.tidy(()=>{F(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let a=e.shape[0],n=e.shape[1],r=N2(a),s=wa(e),i=Kn([[1]],[1,1]),o=wa(i),l=a>=n?n:a;for(let u=0;u{let h=_e(s,[u,u],[a-u,1]),f=ap(h),m=_e(s,[u,u],[1,1]),g=ii(np(m,0),Kn([[-1]]),Kn([[1]])),y=he(m,ae(g,f)),A=fe(h,y);A.shape[0]===1?o=wa(i):o=at([i,_e(A,[1,0],[A.shape[0]-1,A.shape[1]])],0);let x=Xn(fe(st(g,y),f)),b=_e(s,[u,0],[a-u,n]),w=ae(x,o),S=si(o);if(u===0)s=he(b,st(w,st(S,b)));else{let _=he(b,st(w,st(S,b)));s=at([_e(s,[0,0],[u,n]),_],0)}let C=si(w),N=_e(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=he(N,st(st(N,o),C));else{let _=he(N,st(st(N,o),C));r=at([_e(r,[0,0],[a,u]),_],1)}return[o,s,r]}),Y([d,c,p])}return!t&&a>n&&(r=_e(r,[0,0],[a,n]),s=_e(s,[0,0],[n,n])),[r,s]})}var u_=D({qr_:l_}),xa;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(xa||(xa={}));function d_(e,t,a=xa.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:ae(n,r);if(a===xa.NONE)return s;if(a===xa.SUM)return tt(s);if(a===xa.MEAN){if(r==null)return sd(s);{let i=n.size/r.size,o=fe(tt(s),tt(r));return i>1?fe(o,Fe(i)):o}}if(a===xa.SUM_BY_NONZERO_WEIGHTS){if(r==null)return fe(tt(s),Fe(n.size));{let i=ae(r,Br(n.shape)),o=Ue(tt(W2(i,Fe(0))),"float32");return fe(tt(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Ir=D({computeWeightedLoss_:d_});function p_(e,t,a,n=xa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Sa(r.shape,s.shape,"Error in absoluteDifference: ");let o=Ha(he(r,s));return Ir(o,i,n)}var c_=D({absoluteDifference_:p_});function h_(e,t,a,n,r=xa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Sa(s.shape,i.shape,"Error in cosineDistance: ");let l=Fe(1),u=he(l,tt(ae(s,i),a,!0));return Ir(u,o,r)}var f_=D({cosineDistance_:h_});function m_(e,t,a,n=xa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Sa(r.shape,s.shape,"Error in hingeLoss: ");let o=Fe(1);r=he(ae(Fe(2),r),o);let l=rp(he(o,ae(r,s)));return Ir(l,i,n)}var g_=D({hingeLoss_:m_});function y_(e,t,a,n=1,r=xa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Sa(s.shape,i.shape,"Error in huberLoss: ");let l=Fe(n),u=Ha(he(i,s)),d=B2(u,l),c=he(u,d),p=xe(ae(Fe(.5),In(d)),ae(l,c));return Ir(p,o,r)}var A_=D({huberLoss_:y_});function x_(e,t,a,n=1e-7,r=xa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Sa(s.shape,i.shape,"Error in logLoss: ");let l=Fe(1),u=Fe(n),d=Xn(ae(s,il(xe(i,u)))),c=ae(he(l,s),il(xe(he(l,i),u))),p=he(d,c);return Ir(p,o,r)}var b_=D({logLoss_:x_});function v_(e,t,a,n=xa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Sa(r.shape,s.shape,"Error in meanSquaredError: ");let o=Y2(r,s);return Ir(o,i,n)}var w_=D({meanSquaredError_:v_});function k_(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Sa(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=rp(n),s=ae(n,a),i=_2(Xr(Xn(Ha(n))));return xe(he(r,s),i)}function I_(e,t,a,n=0,r=xa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","sigmoidCrossEntropy")),Sa(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Fe(n),d=Fe(1),c=Fe(.5);s=xe(ae(s,he(d,u)),ae(c,u))}let l=k_(s,i);return Ir(l,o,r)}var S_=D({sigmoidCrossEntropy_:I_});function T_(e,t,a=-1){if(a===-1&&(a=t.rank-1),a!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${a}`);return Qn((n,r,s)=>{let i=P2(r,[a],!0),o=he(Ue(r,"float32"),i);s([n,o]);let l=Xn(ae(o,n));return{value:tt(l,[a]),gradFunc:(u,d)=>{let[c,p]=d,h=tp(u.shape,[a]);return[ae(J(u,h),he(Ue(c,"float32"),Xr(p))),ae(J(u,h),he(Xr(p),Ue(c,"float32")))]}}})(e,t)}function C_(e,t,a,n=0,r=xa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","softmaxCrossEntropy")),Sa(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Fe(n),d=Fe(1),c=Fe(s.shape[1]);s=xe(ae(s,he(d,u)),fe(u,c))}let l=T_(s,i);return Ir(l,o,r)}var N_=D({softmaxCrossEntropy_:C_});function E_(e,t,a,n){let r=R(e,"indices","sparseFillEmptyRows","int32"),s=R(t,"values","sparseFillEmptyRows"),i=R(a,"denseShape","sparseFillEmptyRows","int32"),o=R(n,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape - ${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=z.runKernel(Od,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var R_=D({sparseFillEmptyRows_:E_});function M_(e,t,a){let n=R(e,"inputIndices","sparseReshape","int32"),r=R(t,"inputShape","sparseReshape","int32"),s=R(a,"newShape","sparseReshape","int32");if(n.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape - ${n.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:n,inputShape:r,newShape:s},o=z.runKernel(Vl,i);return{outputIndices:o[0],outputShape:o[1]}}var $_=D({sparseReshape_:M_});function __(e,t,a){let n=R(e,"data","sparseSegmentMean"),r=R(t,"indices","sparseSegmentMean","int32"),s=R(a,"segmentIds","sparseSegmentMean","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${n.shape}`),P(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${n.shape}`);let o={x:n},l={blockSize:t,dataFormat:a};return z.runKernel(li,o,l)}var zy=D({depthToSpace_:YN});function JN(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d","float32"),l=R(t,"filter","depthwiseConv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),P(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`);let c=r==="NHWC"?u.shape[3]:u.shape[1];P(c===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${l.shape[2]}.`),In("depthwiseConv2d",n,i);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},f=z.runKernel(ui,d,h);return p?J(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var dh=D({depthwiseConv2d_:JN});function QN(e){let t={x:R(e,"x","diag")};return z.runKernel(Zc,t)}var Ly=D({diag_:QN});function eE(e,t,a,n,r=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");P(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),P(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),P(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=J(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);let p={x:l,filter:o},c={strides:a,pad:n,dilations:r},d=z.runKernel(Yc,p,c);return u?J(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var By=D({dilation2d_:eE});function tE(e,t){let a=R(e,"a","equal","string_or_numeric"),n=R(t,"b","equal","string_or_numeric");[a,n]=St(a,n),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(ci,r)}var b2=D({equal_:tE});function aE(e,t,a){let n=R(t,"a","where"),r=R(a,"b","where"),s=R(e,"condition","where","bool"),i=zt(zt(s.shape,n.shape),r.shape),o=rl(s,i),l=rl(n,i),u=rl(r,i),p={condition:o,t:l,e:u};return z.runKernel(Xl,p)}var Bs=D({where_:aE});function nE(e){let t={x:R(e,"x","zerosLike")};return z.runKernel(au,t)}var Xa=D({zerosLike_:nE});function rE(e,t){let a=R(e,"a","div"),n=R(t,"b","div");[a,n]=St(a,n);let r=me(a,n),s=Xa(r),i=b2(n,s);return Bs(i,s,r)}var Wy=D({divNoNan_:rE});function sE(e,t){let a=R(e,"t1","dot"),n=R(t,"t2","dot");P((a.rank===1||a.rank===2)&&(n.rank===1||n.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${a.rank} and ${n.rank}.`);let r=a.rank===1?a.size:a.shape[1],s=n.rank===1?n.size:n.shape[0];if(P(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),a.rank===1&&n.rank===1){let i=J(a,[1,-1]),o=J(n,[-1,1]),l=st(i,o);return J(l,[])}else if(a.rank===1&&n.rank===2){let i=J(a,[1,-1]),o=J(n,[n.shape[0],n.shape[1]]),l=st(i,o);return J(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=J(n,[-1,1]),o=st(a,i);return J(o,[o.size])}else{let i=J(n,[n.shape[0],n.shape[1]]);return st(a,i)}}var Vy=D({dot_:sE});function iE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return z.runKernel(Cd,a,n)}var Uy=D({einsum_:iE});function oE(e){let t={x:R(e,"x","elu","float32")};return z.runKernel(pi,t)}var v2=D({elu_:oE});function lE(e){let t=R(e,"x","erf");P(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=He(t,"float32"));let a={x:t};return z.runKernel(Ml,a)}var Gy=D({erf_:lE});function w2(e,t){for(let a=0;ae[s]);return[a,r]}function tp(e,t){let a=t.map(n=>1);return Hy(e,a,t)}function dE(e,t,a){P(w2(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function pE(e,t){if(w2(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function cE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function hE(e,t){let a=[];for(let n=t-e;n"Axis must be <= rank of the tensor");let n={input:a},r={dim:t};return z.runKernel($l,n,r)}var Gt=D({expandDims_:kE});function IE(e){let t={x:R(e,"x","expm1")};return z.runKernel(_l,t)}var Xy=D({expm1_:IE});function SE(e,t){let a=R(e,"x","tile","string_or_numeric");P(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of reps ${t}.`);let n={x:a},r={reps:t};return z.runKernel(ts,n,r)}var Vr=D({tile_:SE});function TE(e,t,a,n="float32"){t==null&&(t=e);let r=Me([e,t],n),s=e<=t?e:t;for(let o=0;o`Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`),P(il(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=J(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:a,alpha:n,beta:r},p=z.runKernel(Qc,l,u);return o?J(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var eb=D({localResponseNormalization_:DE});function zE(e){let t={x:R(e,"x","log","float32")};return z.runKernel(Ti,t)}var pl=D({log_:zE});function LE(e){let t={x:R(e,"x","log1p")};return z.runKernel(zl,t)}var N2=D({log1p_:LE});function BE(e){return P(Ur(e),()=>"The f passed in grad(f) must be a function"),(t,a)=>{let n=R(t,"x","tf.grad","string_or_numeric"),r=a!=null?R(a,"dy","tf.grad"):null;return z.tidy(()=>{let{value:s,grads:i}=z.gradients(()=>e(n),[n],r);return r!=null&&Sa(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),ch(i),i[0]})}}function WE(e){return P(Ur(e),()=>"The f passed in grads(f) must be a function"),(t,a)=>{P(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=ud(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return z.tidy(()=>{let{value:s,grads:i}=z.gradients(()=>e(...n),n,r);return r!=null&&Sa(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ch(i),i})}}function VE(e){return P(Ur(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{P(t instanceof pt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),P(a==null||a instanceof pt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=z.gradients(()=>e(t),[t],a);return ch(n),{grad:n[0],value:r}}}function UE(e){return P(Ur(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{P(Array.isArray(t)&&t.every(r=>r instanceof pt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),P(a==null||a instanceof pt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=z.gradients(()=>e(...t),t,a);return a!=null&&Sa(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ch(n.grads),n}}function tb(e,t){P(Ur(e),()=>"The f passed in variableGrads(f) must be a function"),P(t==null||Array.isArray(t)&&t.every(u=>u instanceof od),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in z.registeredVariables)t.push(z.registeredVariables[u])}let n=a?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),P(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=z.gradients(e,t,null,s);P(o.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),P(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((u,p)=>{o[p]!=null&&(l[u.name]=o[p])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function Jn(e){return z.customGrad(e)}function ch(e){if(e.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that + the f you passed encloses all operations that lead from x to y.`)}function GE(e){let t={x:R(e,"x","softplus")};return z.runKernel(Fd,t)}var E2=D({softplus_:GE});function HE(e){let t=R(e,"x","logSigmoid");return Jn(a=>({value:qn(E2(qn(a))),gradFunc:n=>ae(n,Da(qn(a)))}))(t)}var ab=D({logSigmoid_:HE});function jE(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(io,r)}var fe=D({sub_:jE});function qE(e,t=-1){let a=R(e,"logits","logSoftmax");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and axis was ${t}`);return Jn((n,r)=>{let s=pa(n,t,!0),i=fe(n,s),o=fe(He(i,"float32"),pl(tt(Xr(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=Xr(p);return fe(l,ae(tt(l,t,c),d))}}})(a)}var nb=D({logSoftmax_:qE});function XE(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=wd(t,n.shape),s=pa(n,r,!0),i=fe(n,s),o=Xr(i),l=tt(o,r),u=pl(l),p=be(J(s,u.shape),u);if(a){let c=tp(p.shape,r);return J(p,c)}return p}var R2=D({logSumExp_:XE});function KE(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Ci,r)}var pd=D({logicalAnd_:KE});function ZE(e){let t={x:R(e,"x","logicalNot","bool")};return z.runKernel(Ni,t)}var M2=D({logicalNot_:ZE});function YE(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Ll,r)}var $2=D({logicalOr_:YE});function JE(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return zt(a.shape,n.shape),pd($2(e,t),M2(pd(e,t)))}var rb=D({logicalXor_:JE}),rc=2147483648;function QE(e,t,a="left"){let n=R(e,"sortedSequence","searchSorted"),r=R(t,"values","searchSorted"),s=n.shape[n.shape.length-1],i=r.shape[r.shape.length-1],o=J(n,[-1,s]),l=J(r,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(At(l.shape)>=rc)throw new Error(`values tensor size must less than ${rc}`);if(o.shape[1]>=rc)throw new Error(`trailing dim_size must less than ${rc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return z.runKernel($d,u,p)}var hh=D({searchSorted_:QE});function sb(e,t){return hh(e,t,"left")}function eR(e,t,a,n,r){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=J(s,[1,s.shape[0],s.shape[1],s.shape[2]])),P(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),P(vr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),In("maxPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=z.runKernel(Mi,u,p);return l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var _2=D({maxPool_:eR});function tR(e,t=[1,1,1],a,n,r,s="NDHWC"){let i=R(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=J(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),P(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),P(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),In("maxPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=z.runKernel(eh,u,p);return l?J(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var ib=D({maxPool3d_:tR});function aR(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=z.runKernel(th,s,i);return{result:o[0],indexes:o[1]}}var ob=D({maxPoolWithArgmax_:aR});function nR(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=St(a,n),a.dtype==="bool"&&(a=He(a,"int32"),n=He(n,"int32")),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Ri,r)}var P2=D({maximum_:nR});function rR(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return z.runKernel($i,n,r)}var cd=D({mean_:rR});function hn(e,t="float32"){if(Ya(e),t==="complex64"){let n=hn(e,"float32"),r=hn(e,"float32");return Ar(n,r)}let a=Wc(At(e),t);return z.makeTensor(a,e,t)}function Lr(e,t="float32"){if(Ya(e),t==="complex64"){let n=Lr(e,"float32"),r=hn(e,"float32");return Ar(n,r)}let a=O1(At(e),t);return z.makeTensor(a,e,t)}function lb(e,t,{indexing:a="xy"}={}){if(a!=="xy"&&a!=="ij")throw new TypeError(`${a} is not a valid third argument to meshgrid`);if(e===void 0)return[];let n=R(e,"x","meshgrid",e instanceof pt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof pt?t.dtype:"float32"),s=At(n.shape),i=At(r.shape);return a==="xy"?(n=J(n,[1,-1]),r=J(r,[-1,1]),[st(Lr([i,1],n.dtype),n),st(r,Lr([1,s],r.dtype))]):(n=J(n,[-1,1]),r=J(r,[1,-1]),[st(n,Lr([1,i],n.dtype)),st(Lr([s,1],r.dtype),r)])}function sR(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=St(a,n),a.dtype==="bool"&&(a=He(a,"int32"),n=He(n,"int32")),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Pi,r)}var F2=D({minimum_:sR});function iR(e,t,a){P(a==="reflect"||a==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${a}.`);let n=R(e,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");P(t.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${t.length}.`);let r=a==="reflect"?1:0;for(let o=0;o"Invalid number of paddings. Must be length of 2 each."),P(t[o][0]>=0&&t[o][0]<=n.shape[o]-r&&t[o][1]>=0&&t[o][1]<=n.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${n.shape[o]-r} or less than 0 for input of shape ${n.shape}`);let s={paddings:t,mode:a},i={x:n};return z.runKernel(Fi,i,s)}var ub=D({mirrorPad_:iR});function oR(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=St(a,n);let r={a,b:n};return z.runKernel(Bl,r)}var ru=D({mod_:oR});function lR(e,t=null,a=!1){e=R(e,"x","moments");let n=wd(t,e.shape),r=cd(e,n,a),s=r.shape;a||(s=tp(r.shape,n));let i=kn(fe(He(e,"float32"),J(r,s))),o=cd(i,n,a);return{mean:r,variance:o}}var db=D({moments_:lR});function uR(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=ud(a,"c","multiRNNCell"),i=ud(n,"h","multiRNNCell"),o=r,l=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);a=a||Math.random();let o={logits:i===1?J(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=z.runKernel(ah,o,l);return i===1?J(u,[u.size]):u}var cb=D({multinomial_:dR});function pR(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=St(a,n),zt(a.shape,n.shape);let r={a,b:n};return z.runKernel(Di,r)}var O2=D({notEqual_:pR});function cR(e){let t={x:R(e,"x","onesLike")};return z.runKernel(Ul,t)}var hb=D({onesLike_:cR});function hR(e,t){let a=R(e,"v1","outerProduct"),n=R(t,"v2","outerProduct");P(a.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${a.rank} and ${n.rank}.`);let r=J(a,[-1,1]),s=J(n,[1,-1]);return st(r,s)}var fb=D({outerProduct_:hR});function fR(e,t,a=0){let n=R(e,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:a},s={x:n};return z.runKernel(Wi,s,r)}var nr=D({pad_:fR});function mR(e,t,a=0){return P(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),nr(e,[t],a)}var mb=D({pad1d_:mR});function gR(e,t,a=0){return P(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),nr(e,t,a)}var gb=D({pad2d_:gR});function xR(e,t,a=0){return P(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),nr(e,t,a)}var xb=D({pad3d_:xR});function AR(e,t,a=0){return P(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),nr(e,t,a)}var Ab=D({pad4d_:AR});function yR(e,t,a){let n=R(e,"x","spaceToBatchND");P(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),P(a.length===t.length,()=>`paddings.shape[0] ${a.length} must be equal to [blockShape] ${t.length}`),P(n.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+a[l-1][0]+a[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${a.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:n},s={blockShape:t,paddings:a};return z.runKernel(Yl,r,s)}var D2=D({spaceToBatchND_:yR});function bR(e,t,a,n,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),n===0&&(n="valid");let o=R(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P(vr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=fy(l.shape,t,s,r,n),c=[p.dilationHeight,p.dilationWidth],d;n==="same"?d=wR([p.filterHeight,p.filterWidth],c):d=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[f,m]=vR([p.inHeight,p.inWidth],c,d),g=h?n:"valid",x=h?l:D2(l,c,f),A=(a==="avg"?()=>x2(x,t,s,g,i):()=>_2(x,t,s,g,i))(),y=h?A:A2(A,c,m);return u?J(y,[y.shape[1],y.shape[2],y.shape[3]]):y}function vR(e,t,a){let n=a.map(p=>p[0]),r=a.map(p=>p[1]),s=e.concat(n,r),i=t.map((p,c)=>(p-s[c]%p)%p),o=r.map((p,c)=>p+i[c]),l=t.map((p,c)=>[n[c],o[c]]),u=t.map((p,c)=>[0,i[c]]);return[l,u]}function wR(e,t){let a=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),n=a.map(s=>Math.floor(s/2)),r=a.map((s,i)=>s-n[i]);return a.map((s,i)=>[n[i],r[i]])}var yb=D({pool_:bR});function kR(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return z.runKernel(Ui,r)}var z2=D({prelu_:kR});function IR(e,t=null,a=!1){let n=R(e,"x","prod");n.dtype==="bool"&&(n=He(n,"int32"));let r={x:n},s={axis:t,keepDims:a};return z.runKernel(Gi,r,s)}var bb=D({prod_:IR});function SR(e,t,a,n){let r=e.map((p,c)=>R(p,`tensors${c}`,"raggedGather","int32")),s=R(t,"paramsDenseValues","raggedGather"),i=R(a,"indices","raggedGather","int32"),o={paramsNestedSplits:r,paramsDenseValues:s,indices:i},l={outputRaggedRank:n},u=z.runKernel(nh,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var vb=D({raggedGather_:SR});function TR(e,t,a){let n=R(e,"starts","raggedRange"),r=R(t,"limits","raggedRange",n.dtype),s=R(a,"deltas","raggedRange",n.dtype),i={starts:n,limits:r,deltas:s},o=z.runKernel(rh,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var wb=D({raggedRange_:TR});function CR(e,t,a,n,r){let s=R(e,"shape","raggedTensorToTensor","int32"),i=R(t,"values","raggedTensorToTensor"),o=R(a,"defaultValue","raggedTensorToTensor",i.dtype),l=n.map((c,d)=>R(c,`tensors${d}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},p={rowPartitionTypes:r};return z.runKernel(sh,u,p)}var kb=D({raggedTensorToTensor_:CR});function NR(e,t,a){Ya(e);let n=At(e),r=null;if(a==null||a==="float32")r=new Float32Array(n);else if(a==="int32")r=new Int32Array(n);else if(a==="bool")r=new Uint8Array(n);else throw new Error(`Unknown data type ${a}`);for(let s=0;s=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(a=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},ER=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=L2.alea(r.toString()),this.randn=new B2(0,1,a,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,a,n,r,s;for(;;){do n=this.randn.nextValue(),s=1+this.c*n;while(s<=0);if(s*=s*s,e=n*n,t=1-.331*e*e,a=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),rthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=a,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=L2.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function MR(e,t,a=1,n="float32",r){if(Ya(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new ER(t,a,n,r),i=Me(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),Kr(t,0)}var Nb=D({reverse1d_:LR});function BR(e,t){let a=R(e,"x","reverse");return P(a.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${a.rank}.`),Kr(a,t)}var Eb=D({reverse2d_:BR});function WR(e,t){let a=R(e,"x","reverse");return P(a.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${a.rank}.`),Kr(a,t)}var Rb=D({reverse3d_:WR});function VR(e,t){let a=R(e,"x","reverse");return P(a.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${a.rank}.`),Kr(a,t)}var Mb=D({reverse4d_:VR});function UR(e){let t={x:R(e,"x","round")};return z.runKernel(ql,t)}var G2=D({round_:UR});function GR(e){let t={x:R(e,"x","rsqrt","float32")};return z.runKernel(Yi,t)}var $b=D({rsqrt_:GR});function HR(e){let t={x:R(e,"x","selu")};return z.runKernel(_d,t)}var _b=D({selu_:HR});function jR(e,t,a,n,r,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),u=R(a,"pointwiseFilter","separableConv2d"),p=o,c=!1;if(o.rank===3&&(c=!0,p=J(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");P(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),P(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),P(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),P(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),P(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],h=l.shape[3];P(u.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${u.shape[2]}.`);let f=dh(p,l,n,r,i,s),m=ep(f,u,1,"valid",i);return c?J(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Pb=D({separableConv2d_:jR});async function qR(e,t){let a=R(e,"x","setdiff1d"),n=R(t,"y","setdiff1d");P(a.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${a.dtype}) and y (${n.dtype}).`),P(a.rank===1,()=>`x should be 1D tensor, but got x (${a.shape}).`),P(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let r=await a.data(),s=await n.data(),i=new Set(s),o=0;for(let p=0;p`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Pe(n,[t],[a])}var Lb=D({slice1d_:YR});function JR(e,t,a){let n=R(e,"x","slice2d");return P(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),Pe(n,t,a)}var Bb=D({slice2d_:JR});function QR(e,t,a){let n=R(e,"x","slice3d");return P(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),Pe(n,t,a)}var sp=D({slice3d_:QR});function eM(e,t,a){let n=R(e,"x","slice4d");return P(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),Pe(n,t,a)}var fh=D({slice4d_:eM});function tM(e,t=-1){let a=R(e,"logits","softmax","float32");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and dim was ${t}`);let n={logits:a},r={dim:t};return z.runKernel(no,n,r)}var mh=D({softmax_:tM});function aM(e){P(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(Nd,t)}var gh=D({fft_:aM});function nM(e){P(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return z.runKernel(Ed,t)}var hd=D({ifft_:nM});function rM(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=J(e,[a,t]);n=hd(r)}else{let r=[a,2*(t-1)],s=J(ul(e),[a,t]),i=J(Zd(e),[a,t]),o=Kr(Pe(s,[0,1],[a,t-2]),1),l=ae(Kr(Pe(i,[0,1],[a,t-2]),1),Fe(-1)),u=at([s,o],1),p=at([i,l],1),c=J(Ar(u,p),[r[0],r[1]]);n=hd(c)}if(n=ul(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=J(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var H2=D({irfft_:rM});function sM(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return z.runKernel(Jl,n,r)}var ka=D({split_:sM});function iM(e,t){P(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let a=e.shape[e.shape.length-1],n=e.size/a,r;if(t!=null&&t0),m=e.shape.map(g=>g);m[e.shape.length-1]=t,r=Pe(e,f,m),a=t}else if(t!=null&&t>a){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-a,r=at([e,hn(f)],e.shape.length-1),a=t}else r=e;let s=Xa(r),i=J(Ar(r,s),[n,a]),o=gh(i),l=Math.floor(a/2)+1,u=ul(o),p=Zd(o),c=ka(u,[l,a-l],u.shape.length-1),d=ka(p,[l,a-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,J(Ar(c[0],d[0]),h)}var xh=D({rfft_:iM});function oM(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=St(a,n),zt(a.shape,n.shape);let r={a,b:n},s={};return z.runKernel(ro,r,s)}var j2=D({squaredDifference_:oM});function lM(e,t){let a=R(e,"x","squeeze","string_or_numeric");return J(a,nA(a.shape,t).newShape)}var _e=D({squeeze_:lM});function uM(e,t=0){let a=ud(e,"tensors","stack","string_or_numeric");P(a.length>=1,()=>"Pass at least one tensor to tf.stack"),a.length>0&&P(t<=a[0].rank,()=>"Axis must be <= rank of the tensor");let n=a,r={axis:t};return z.runKernel(Gl,n,r)}var sa=D({stack_:uM});function dM(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return z.runKernel(co,a,n)}var q2=D({step_:dM});function pM(e,t,a,n,r=0,s=0,i=0,o=0,l=0){let u={x:R(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:a,strides:n,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return z.runKernel(so,u,p)}var Wb=D({stridedSlice_:pM});function cM(e){let t={x:R(e,"x","tan","float32")};return z.runKernel(oo,t)}var Vb=D({tan_:cM});function Ht(e,t){js(e);let a=Zn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return as(e,null,a,t)}function Xn(e,t,a){if(js(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Zn(e,a);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return as(e,t,n,a)}function Ub(e,t,a){if(js(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Zn(e,a);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return as(e,t,n,a)}function Gb(e,t,a){if(js(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Zn(e,a);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return as(e,t,n,a)}function Hb(e,t,a){if(js(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Zn(e,a);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||n,as(e,t,n,a)}function hM(e,t=1,a=!0){let n=R(e,"x","topk");if(n.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let r=n.shape[n.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:n},i={k:t,sorted:a},[o,l]=z.runKernel(uo,s,i);return{values:o,indices:l}}var jb=D({topk_:hM});function fM(e,t=0,a=1,n,r){if(Ya(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new B2(t,a,n,!0,r),i=Me(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=z.runKernel(ih,n,r);return{values:s,indices:i}}var Xb=D({unique_:mM});function gM(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");P(il(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return z.runKernel(oh,s,i)}var Kb=D({unsortedSegmentSum_:gM});function xM(e,t=0){let a=R(e,"x","unstack","string_or_numeric");P(t>=-a.shape.length&&t`Axis = ${t} is not in [-${a.shape.length}, ${a.shape.length})`);let n={value:a},r={axis:t};return z.runKernel(tu,n,r)}var Ta=D({unstack_:xM});function Zb(e,t){return hh(e,t,"right")}function Yb(e,t=!0,a,n){return z.makeVariable(e,t,a,n)}function Jb(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Sa(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=s;m"Shape mismatch in v and x");let l=Fe(1),u=fe(l,o),p=ae(fe(i,s),u);if(r){P(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");p=me(p,fe(l,dl(o,c)))}return be(s,p)}var e4=D({movingAverage_:bM});function vM(e,t,a){Ya(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");c2(r,n,a);let s={indices:n,updates:r},i={shape:a};return z.runKernel(Ji,s,i)}var t4=D({scatterND_:vM});function wM(e,t,a,n){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(a.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${a.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function kM(e,t,a,n=0){Ya(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);wM(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return z.runKernel(Ld,o,l)}var a4=D({sparseToDense_:kM});function IM(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return z.runKernel(Ai,n)}var n4=D({gatherND_:IM});function SM(e,t){if(t==null)return e.shape.slice();if(Jr(e.shape,t))return t;if(e.shape.length===t.length){let a=[];for(let n=0;n`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),P(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof pt?r.clone():r;let s=SM(r,a),i=1-t,o=me(I2(be(V2(s,0,1,"float32",n),i)),i);return ae(r,o)}var r4=D({dropout_:TM});function K2(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Ah(e,t,a){let n=1-e%2,r=new Float32Array(e);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${n.rank}`),P(n.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${n.rank} and targets rank ${r.rank}`),Sa(n.shape.slice(0,n.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=n.shape[n.shape.length-1];P(a>0&&a<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${a}`);let i=await n.data(),o=await r.data(),[l,u]=[i.length/s,s],p=rA("bool",l);for(let c=0;cg.value-m.value),p[c]=0;for(let m=0;mMM,depthwiseConv2d:()=>DM,matMul:()=>LM});function NM(e,t,a,n,r,s="NHWC",i){let o=e;e.rank===3&&(o=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]])),P(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),P(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),P(a.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${a}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],p=s==="NHWC"?l.shape[3]:l.shape[1];P(u===a[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${a[2]}.`),P(p===a[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${a[3]}).`),In("conv2dDerFilter",r,i);let c={x:o,dy:l},d={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return z.runKernel(Hc,c,d)}var EM=D({conv2DBackpropFilter_:NM});function yh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return ae(e,q2(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function bh(e,t){let a=t,n=o2(e.shape,t.shape);return n.length>0&&(a=tt(a,n)),J(a,e.shape)}function vh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return rp(e);if(t==="elu")return v2(e);if(t==="relu6")return U2(e);if(t==="prelu")return z2(e,a);if(t==="leakyrelu")return C2(e,n);if(t==="sigmoid")return Da(e);throw new Error(`Unknown fused activation ${t}.`)}var wh=(e,t)=>!(e>0)||t==="linear";function RM({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(l=l||"linear",wh(z.state.gradientDepth,l)===!1){P(r==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${r} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let S=ep(e,t,a,n,r,s,i);return o!=null&&(S=be(S,o)),vh(S,l,u,p)}let c=R(e,"x","conv2d","float32"),d=R(t,"filter","conv2d","float32"),h=c,f=!1;c.rank===3&&(f=!0,h=J(c,[1,c.shape[0],c.shape[1],c.shape[2]])),P(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),P(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),In("fused conv2d",n,i);let m=r==="NHWC"?h.shape[3]:h.shape[1];P(d.shape[2]===m,()=>`Error in conv2d: depth of input (${m}) must match input depth for filter ${d.shape[2]}.`),P(vr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Jd(h.shape,d.shape,a,s,n,i),x;o!=null&&(x=R(o,"bias","fused conv2d"),[x]=St(x,c),r==="NHWC"?zt(g.outShape,x.shape):(P(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),P(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let A;if(u!=null){let S=u.shape;if(P(S.length<=1||S.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${S.length}.`),S.length===1)P(S[0]===1||S[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the number of output channels (${g.outChannels}).`);else if(S.length===3)try{zt(S,g.outShape)}catch(C){let E=`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(E)}A=R(u,"prelu weights","fused conv2d")}let y=(S,C)=>{P(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[E,_,$,M]=C,I=yh(S,$,l);P(dd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let N=Ey(_.shape,I,E,a,n),O=EM(_,I,E.shape,a,n),L=[N,O];if(M!=null){let B=bh(M,I);L.push(B)}return L},b={x:h,filter:d,bias:x,preluActivationWeights:A},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?Jn((S,C,E)=>{let _=z.runKernel(Hr,b,w);return E([C,S,_]),f&&(_=J(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:y}})(h,d):Jn((S,C,E,_)=>{let $=z.runKernel(Hr,b,w);return _([C,S,$,E]),f&&($=J($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:y}})(h,d,x)}var MM=D({fusedConv2d_:RM});function $M(e,t,a,n,r,s=[1,1],i){let o=e;e.rank===3&&(o=J(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},p={strides:n,pad:r,dimRoundingMode:i,dilations:s,filterShape:a};return z.runKernel(Xc,u,p)}var _M=D({depthwiseConv2dNativeBackpropFilter_:$M});function PM(e,t,a,n,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=J(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:a},p={strides:n,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},c=z.runKernel(Kc,u,p);return l?J(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var FM=D({depthwiseConv2dNativeBackpropInput_:PM});function OM({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(wh(z.state.gradientDepth,l)===!1){let w=dh(e,t,a,n,r,s,i);return o!=null&&(w=be(w,o)),vh(w,l,u,p)}let c=R(e,"x","depthwiseConv2d","float32"),d=R(t,"filter","depthwiseConv2d","float32"),h=c,f=!1;c.rank===3&&(f=!0,h=J(c,[1,c.shape[0],c.shape[1],c.shape[2]])),P(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),P(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),P(h.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),s==null&&(s=[1,1]),P(vr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),In("fused depthwiseConv2d",n,i);let m=Jd(h.shape,d.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=St(g,c),zt(m.outShape,g.shape));let x;u!=null&&(x=R(u,"prelu weights","fused depthwiseConv2d"));let A=(w,S)=>{P(dd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[C,E,_,$]=S,M=yh(w,_,l),I=FM(E.shape,M,C,a,n,s,i),N=_M(E,M,C.shape,a,n,s,i);if($!=null){let O=bh(g,M);return[I,N,O]}return[I,N]},y={x:h,filter:d,bias:g,preluActivationWeights:x},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?Jn((w,S,C)=>{let E=z.runKernel(jr,y,b);return C([S,w,E]),f&&(E=J(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:A}})(h,d):Jn((w,S,C,E)=>{let _=z.runKernel(jr,y,b);return E([S,w,_,C]),f&&(_=J(_,[_.shape[1],_.shape[2],_.shape[3]])),{value:_,gradFunc:A}})(h,d,g)}var DM=D({fusedDepthwiseConv2d_:OM});function zM({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(wh(z.state.gradientDepth,s)===!1){let $=st(e,t,a,n);return r!=null&&($=be($,r)),vh($,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=St(l,u);let p=a?l.shape[l.rank-2]:l.shape[l.rank-1],c=n?u.shape[u.rank-1]:u.shape[u.rank-2],d=a?l.shape[l.rank-1]:l.shape[l.rank-2],h=n?u.shape[u.rank-2]:u.shape[u.rank-1],f=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=At(f),x=At(m);P(p===c,()=>`Error in fused matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${a} and transposeB=${n} must match.`);let A=zt(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([d,h]),y=a?J(l,[g,p,d]):J(l,[g,d,p]),b=n?J(u,[x,h,c]):J(u,[x,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=St(w,l),zt(A,w.shape));let S;i!=null&&(S=R(i,"prelu weights","fused matMul"));let C=($,M)=>{let[I,N,O,L]=M,B=yh(J($,O.shape),O,s),G,j;if(!a&&!n?(G=st(B,N,!1,!0),j=st(I,B,!0,!1)):!a&&n?(G=st(B,N,!1,!1),j=st(B,I,!0,!1)):a&&!n?(G=st(N,B,!1,!0),j=st(I,B,!1,!1)):(G=st(N,B,!0,!0),j=st(B,I,!0,!0)),r!=null){let U=bh(L,B);return[G,j,U]}else return[G,j]},E={a:y,b,bias:w,preluActivationWeights:S},_={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?Jn(($,M,I)=>{let N=z.runKernel(Gr,E,_);return I([$,M,N]),{value:J(N,A),gradFunc:C}})(y,b):Jn(($,M,I,N)=>{let O=z.runKernel(Gr,E,_);return N([$,M,O,I]),{value:J(O,A),gradFunc:C}})(y,b,w)}var LM=D({fusedMatMul_:zM});function BM(e){return Ah(e,.54,.46)}var WM=D({hammingWindow_:BM});function VM(e){return Ah(e,.5,.5)}var i4=D({hannWindow_:VM});function UM(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Pe(e,s,t)),s+=a;if(n)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),P(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),P(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),P(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),P(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),P(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let p={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return z.runKernel(oi,p,c)}var qM=D({cropAndResize_:jM});function XM(e){let t=R(e,"image","flipLeftRight","float32");P(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let a={image:t};return z.runKernel(fi,a,{})}var KM=D({flipLeftRight_:XM});function ZM(e){let t=R(e,"image","grayscaleToRGB"),a=t.rank-1,n=t.shape[a];P(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),P(n===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${n}.`);let r=new Array(t.rank);return r.fill(1,0,a),r[a]=3,Vr(t,r)}var YM=D({grayscaleToRGB_:ZM});function JM(e,t,a=0,n=.5){let r=R(e,"image","rotateWithOffset","float32");P(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:a,center:n};return z.runKernel(ho,s,i)}var QM=D({rotateWithOffset_:JM});function su(e,t,a,n,r,s){n==null&&(n=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return a=Math.min(a,i),P(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),P(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),P(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),P(t.rank===1,()=>"scores must be a 1D tensor"),P(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),P(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s}}function e$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=su(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return z.runKernel(zi,{boxes:s,scores:i},l)}var t$=D({nonMaxSuppression_:e$});function a$(e,t,a){let n=n$(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function n$(e,t,a){return s$(e,t,a||r$)}function r$(e,t){return e>t?1:e>>1);let o=a(t,e[s]);o>0?n=s+1:(r=s,i=!o)}return i?n:-n-1}function l4(e,t,a,n,r){return Y2(e,t,a,n,r,0)}function u4(e,t,a,n,r,s){return Y2(e,t,a,n,r,0,!1,s,!0)}function d4(e,t,a,n,r,s){return Y2(e,t,a,n,r,s,!0)}function Y2(e,t,a,n,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;gr&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(Hg);let p=s>0?-.5/s:0,c=[],d=[];for(;c.length0;){let g=u.pop(),{score:x,boxIndex:A,suppressBeginIndex:y}=g;if(x=y;--w){let S=i$(e,A,c[w]);if(S>=n){b=!0;break}if(g.score=g.score*o$(n,p,S),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===x?(c.push(A),d.push(g.score)):g.score>r&&a$(u,g,Hg))}let h=c.length,f=a-h;o&&f>0&&(c.push(...new Array(f).fill(0)),d.push(...new Array(f).fill(0)));let m={selectedIndices:c};return i&&(m.selectedScores=d),l&&(m.validOutputs=h),m}function i$(e,t,a){let n=e.subarray(t*4,t*4+4),r=e.subarray(a*4,a*4+4),s=Math.min(n[0],n[2]),i=Math.min(n[1],n[3]),o=Math.max(n[0],n[2]),l=Math.max(n[1],n[3]),u=Math.min(r[0],r[2]),p=Math.min(r[1],r[3]),c=Math.max(r[0],r[2]),d=Math.max(r[1],r[3]),h=(o-s)*(l-i),f=(c-u)*(d-p);if(h<=0||f<=0)return 0;let m=Math.max(s,u),g=Math.max(i,p),x=Math.min(o,c),A=Math.min(l,d),y=Math.max(x-m,0)*Math.max(A-g,0);return y/(h+f-y)}function o$(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function Hg(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function l$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=su(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],p=l[1],{selectedIndices:c}=l4(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Ht(c,"int32")}var u$=l$;function d$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=su(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},p={maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s},c=z.runKernel(Li,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var p$=D({nonMaxSuppressionWithScore_:d$});async function c$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=su(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),p=u[0],c=u[1],{selectedIndices:d,selectedScores:h}=d4(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ht(d,"int32"),selectedScores:Ht(h)}}var h$=c$;function f$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=su(i,o,a,n,r,null),u=l.maxOutputSize,p=l.iouThreshold,c=l.scoreThreshold,d={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:p,scoreThreshold:c,padToMaxOutputSize:s},f=z.runKernel(Vl,d,h);return{selectedIndices:f[0],validOutputs:f[1]}}var m$=D({nonMaxSuppressionPadded_:f$});async function g$(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=su(i,o,a,n,r,null),u=l.maxOutputSize,p=l.iouThreshold,c=l.scoreThreshold,[d,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=u4(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ht(f,"int32"),validOutputs:Fe(m,"int32")}}var x$=g$;function A$(e,t,a=!1,n=!1){let r=R(e,"images","resizeBilinear");P(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),P(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),P(n===!1||a===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=J(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=z.runKernel(Xi,o,l);return i?J(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var y$=D({resizeBilinear_:A$});function b$(e,t,a=!1,n=!1){let r=R(e,"images","resizeNearestNeighbor");P(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),P(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),P(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),P(n===!1||a===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=J(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=z.runKernel(qi,o,l);return i?J(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var v$=D({resizeNearestNeighbor_:b$});function w$(e,t="binary",a=!1,n=.5){let r=R(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=ae(Ht([n]),255),p,c,d,h;if(P(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),P(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),P(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),P(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,c,d]=ka(r,[1,1,1],-1);let m=ae(p,s),g=ae(c,i),x=ae(d,o);h=be(be(m,g),x)}else h=e;if(t==="otsu"){let m=y2(He(G2(h),"int32"),Be([]),256);u=k$(m,l)}let f=a?ph(h,u):np(h,u);return He(ae(f,255),"int32")}function k$(e,t){let a=Ht([-1]),n=Ht([0]),r=Ht([0]),s,i,o,l,u,p;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${i.rank}.`),P(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),P(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:a,fillMode:n,fillValue:r,outputShape:s};return z.runKernel(po,l,u)}var T$=D({transform_:S$});function C$(e,t,a){P(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),P(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`);let n=R(e,"a","bandPart");P(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let r=n.shape,[s,i]=n.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(a<=i))throw new Error(`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),a<0&&(a=i);let o=J(cl(0,s,1,"int32"),[-1,1]),l=cl(0,i,1,"int32"),u=fe(o,l),p=pd(ph(u,Fe(+t,"int32")),T2(u,Fe(-a,"int32"))),c=hn([s,i],n.dtype);return J(sa(Ta(J(n,[-1,s,i])).map(d=>Bs(p,d,c))),r)}var N$=D({bandPart_:C$});function E$(e){let t;if(Array.isArray(e)){t=!1,P(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let r=e[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=ka(e,e.shape[0],0).map(r=>_e(r,[0]));P(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let a=[],n=e;for(let r=0;r{let s=n[r];if(r>0)for(let i=0;i=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return jg(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Ta(J(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,p]=jg(l,t);r.push(u),s.push(p)});let i=J(sa(r,0),e.shape),o=J(sa(s,0),e.shape);return[i,o]}}function jg(e,t=!1){return z.tidy(()=>{P(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let a=e.shape[0],n=e.shape[1],r=k2(a),s=wa(e),i=Xn([[1]],[1,1]),o=wa(i),l=a>=n?n:a;for(let u=0;u{let h=Pe(s,[u,u],[a-u,1]),f=ap(h),m=Pe(s,[u,u],[1,1]),g=Bs(np(m,0),Xn([[-1]]),Xn([[1]])),x=fe(m,ae(g,f)),A=me(h,x);A.shape[0]===1?o=wa(i):o=at([i,Pe(A,[1,0],[A.shape[0]-1,A.shape[1]])],0);let y=qn(me(st(g,x),f)),b=Pe(s,[u,0],[a-u,n]),w=ae(y,o),S=Ls(o);if(u===0)s=fe(b,st(w,st(S,b)));else{let _=fe(b,st(w,st(S,b)));s=at([Pe(s,[0,0],[u,n]),_],0)}let C=Ls(w),E=Pe(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=fe(E,st(st(E,o),C));else{let _=fe(E,st(st(E,o),C));r=at([Pe(r,[0,0],[a,u]),_],1)}return[o,s,r]}),Y([p,c,d])}return!t&&a>n&&(r=Pe(r,[0,0],[a,n]),s=Pe(s,[0,0],[n,n])),[r,s]})}var $$=D({qr_:M$}),ya;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(ya||(ya={}));function _$(e,t,a=ya.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:ae(n,r);if(a===ya.NONE)return s;if(a===ya.SUM)return tt(s);if(a===ya.MEAN){if(r==null)return cd(s);{let i=n.size/r.size,o=me(tt(s),tt(r));return i>1?me(o,Fe(i)):o}}if(a===ya.SUM_BY_NONZERO_WEIGHTS){if(r==null)return me(tt(s),Fe(n.size));{let i=ae(r,Lr(n.shape)),o=He(tt(O2(i,Fe(0))),"float32");return me(tt(s),o)}}throw Error(`Unknown reduction: ${a}`)}var wr=D({computeWeightedLoss_:_$});function P$(e,t,a,n=ya.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Sa(r.shape,s.shape,"Error in absoluteDifference: ");let o=ja(fe(r,s));return wr(o,i,n)}var F$=D({absoluteDifference_:P$});function O$(e,t,a,n,r=ya.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Sa(s.shape,i.shape,"Error in cosineDistance: ");let l=Fe(1),u=fe(l,tt(ae(s,i),a,!0));return wr(u,o,r)}var D$=D({cosineDistance_:O$});function z$(e,t,a,n=ya.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Sa(r.shape,s.shape,"Error in hingeLoss: ");let o=Fe(1);r=fe(ae(Fe(2),r),o);let l=rp(fe(o,ae(r,s)));return wr(l,i,n)}var L$=D({hingeLoss_:z$});function B$(e,t,a,n=1,r=ya.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Sa(s.shape,i.shape,"Error in huberLoss: ");let l=Fe(n),u=ja(fe(i,s)),p=F2(u,l),c=fe(u,p),d=be(ae(Fe(.5),kn(p)),ae(l,c));return wr(d,o,r)}var W$=D({huberLoss_:B$});function V$(e,t,a,n=1e-7,r=ya.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Sa(s.shape,i.shape,"Error in logLoss: ");let l=Fe(1),u=Fe(n),p=qn(ae(s,pl(be(i,u)))),c=ae(fe(l,s),pl(be(fe(l,i),u))),d=fe(p,c);return wr(d,o,r)}var U$=D({logLoss_:V$});function G$(e,t,a,n=ya.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Sa(r.shape,s.shape,"Error in meanSquaredError: ");let o=j2(r,s);return wr(o,i,n)}var H$=D({meanSquaredError_:G$});function j$(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Sa(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=rp(n),s=ae(n,a),i=N2(Xr(qn(ja(n))));return be(fe(r,s),i)}function q$(e,t,a,n=0,r=ya.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","sigmoidCrossEntropy")),Sa(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Fe(n),p=Fe(1),c=Fe(.5);s=be(ae(s,fe(p,u)),ae(c,u))}let l=j$(s,i);return wr(l,o,r)}var X$=D({sigmoidCrossEntropy_:q$});function K$(e,t,a=-1){if(a===-1&&(a=t.rank-1),a!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${a}`);return Jn((n,r,s)=>{let i=R2(r,[a],!0),o=fe(He(r,"float32"),i);s([n,o]);let l=qn(ae(o,n));return{value:tt(l,[a]),gradFunc:(u,p)=>{let[c,d]=p,h=tp(u.shape,[a]);return[ae(J(u,h),fe(He(c,"float32"),Xr(d))),ae(J(u,h),fe(Xr(d),He(c,"float32")))]}}})(e,t)}function Z$(e,t,a,n=0,r=ya.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","softmaxCrossEntropy")),Sa(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Fe(n),p=Fe(1),c=Fe(s.shape[1]);s=be(ae(s,fe(p,u)),me(u,c))}let l=K$(s,i);return wr(l,o,r)}var Y$=D({softmaxCrossEntropy_:Z$});function J$(e,t,a,n){let r=R(e,"indices","sparseFillEmptyRows","int32"),s=R(t,"values","sparseFillEmptyRows"),i=R(a,"denseShape","sparseFillEmptyRows","int32"),o=R(n,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape + ${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=z.runKernel(Od,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var Q$=D({sparseFillEmptyRows_:J$});function e_(e,t,a){let n=R(e,"inputIndices","sparseReshape","int32"),r=R(t,"inputShape","sparseReshape","int32"),s=R(a,"newShape","sparseReshape","int32");if(n.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape + ${n.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:n,inputShape:r,newShape:s},o=z.runKernel(Ql,i);return{outputIndices:o[0],outputShape:o[1]}}var t_=D({sparseReshape_:e_});function a_(e,t,a){let n=R(e,"data","sparseSegmentMean"),r=R(t,"indices","sparseSegmentMean","int32"),s=R(a,"segmentIds","sparseSegmentMean","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return z.runKernel(Dd,i)}var F_=D({sparseSegmentMean_:__});function P_(e,t,a){let n=R(e,"data","sparseSegmentSum"),r=R(t,"indices","sparseSegmentSum","int32"),s=R(a,"segmentIds","sparseSegmentSum","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return z.runKernel(Dd,i)}var n_=D({sparseSegmentMean_:a_});function r_(e,t,a){let n=R(e,"data","sparseSegmentSum"),r=R(t,"indices","sparseSegmentSum","int32"),s=R(a,"segmentIds","sparseSegmentSum","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return z.runKernel(zd,i)}var O_=D({sparseSegmentSum_:P_});function D_(e,t,a,n,r,s,i,o){let l=R(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=R(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let d={separator:a,nGramWidths:n,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},c={data:l,dataSplits:u},p=z.runKernel(Gl,c,d);return{nGrams:p[0],nGramsSplits:p[1]}}var z_=D({stringNGrams_:D_});function L_(e,t,a=!0){let n=R(e,"input","stringSplit","string"),r=R(t,"delimiter","stringSplit","string");if(n.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${n.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:a},i={input:n,delimiter:r},o=z.runKernel(Wd,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var B_=D({stringSplit_:L_});function W_(e,t){let a=R(e,"input","stringToHashBucketFast","string"),n={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:a};return z.runKernel(Vd,r,n)}var V_=D({stringToHashBucketFast_:W_}),k4={fft:wh,ifft:id,rfft:kh,irfft:Z2},I4={hammingWindow:A$,hannWindow:A4,frame:x4,stft:w$},me={flipLeftRight:T$,grayscaleToRGB:N$,resizeNearestNeighbor:J$,resizeBilinear:Z$,rotateWithOffset:R$,cropAndResize:I$,nonMaxSuppression:$$,nonMaxSuppressionAsync:B$,nonMaxSuppressionWithScore:V$,nonMaxSuppressionWithScoreAsync:U$,nonMaxSuppressionPadded:H$,nonMaxSuppressionPaddedAsync:X$,threshold:t_,transform:n_},S4={bandPart:s_,gramSchmidt:o_,qr:u_},T4={absoluteDifference:c_,computeWeightedLoss:Ir,cosineDistance:f_,hingeLoss:g_,huberLoss:A_,logLoss:b_,meanSquaredError:w_,sigmoidCrossEntropy:S_,softmaxCrossEntropy:N_},C4={sparseFillEmptyRows:R_,sparseReshape:$_,sparseSegmentMean:F_,sparseSegmentSum:O_},N4={stringNGrams:z_,stringSplit:B_,stringToHashBucketFast:V_},vs=class extends cx{minimize(e,t=!1,a){let{value:n,grads:r}=this.computeGradients(e,a);if(a!=null){let s=a.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return Y(r),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return hb(e,t)}dispose(){this.iterations_!=null&&Y(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Fe(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(vs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Eh=class extends vs{constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:Ee(()=>Xa(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:Ee(()=>Xa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[a].variable,o=this.accumulatedUpdates[a].variable;Ee(()=>{let l=xe(ae(i,this.rho),ae(In(s),1-this.rho)),u=ae(fe(Jn(xe(o,this.epsilon)),Jn(xe(i,this.epsilon))),s),d=xe(ae(o,this.rho),ae(In(u),1-this.rho));i.assign(l),o.assign(d);let c=xe(ae(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Y(this.accumulatedGrads.map(e=>e.variable)),Y(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,a=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};Eh.className="Adadelta";bs(Eh);var Rh=class extends vs{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:Ee(()=>nr(n.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[a].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[a].variable;Ee(()=>{let i=xe(s,In(r));s.assign(i);let o=xe(ae(fe(r,Jn(xe(i,z.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Y(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};Rh.className="Adagrad";bs(Rh);var Mh=class extends vs{constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ee(()=>{this.accBeta1=Fe(t).variable(),this.accBeta2=Fe(a).variable()}),n==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);Ee(()=>{let a=he(1,this.accBeta1),n=he(1,this.accBeta2);t.forEach((r,s)=>{let i=z.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Ee(()=>Xa(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:Ee(()=>Xa(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,d=this.accumulatedSecondMoment[s].variable,c=xe(ae(u,this.beta1),ae(l,1-this.beta1)),p=xe(ae(d,this.beta2),ae(In(l),1-this.beta2)),h=fe(c,a),f=fe(p,n);u.assign(c),d.assign(p);let m=xe(ae(fe(h,xe(Jn(f),this.epsilon)),-this.learningRate),i);i.assign(m)}),this.accBeta1.assign(ae(this.accBeta1,this.beta1)),this.accBeta2.assign(ae(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Y(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Y(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),Ee(()=>{this.accBeta1.assign(sl(this.beta1,this.iterations_+1)),this.accBeta2.assign(sl(this.beta2,this.iterations_+1))});let t=e.length/2,a=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Mh.className="Adam";bs(Mh);var $h=class extends vs{constructor(e,t,a,n=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ee(()=>{this.iteration=Fe(0).variable(),this.accBeta1=Fe(t).variable()}),n==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);Ee(()=>{let a=he(1,this.accBeta1),n=fe(-this.learningRate,xe(ae(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=z.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Xa(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Xa(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,d=this.accumulatedWeightedInfNorm[s].variable,c=xe(ae(u,this.beta1),ae(l,1-this.beta1)),p=ae(d,this.beta2),h=Ha(l),f=L2(p,h);u.assign(c),d.assign(f);let m=xe(ae(fe(n,a),fe(c,xe(f,this.epsilon))),i);i.assign(m)}),this.iteration.assign(xe(this.iteration,1)),this.accBeta1.assign(ae(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Y(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Y(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};$h.className="Adamax";bs($h);var ip=class extends vs{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=Array.isArray(e)?e[a].tensor:e[t];if(n==null)return;let r=z.registeredVariables[t];Ee(()=>{let s=xe(ae(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=qn(Fe(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};ip.className="SGD";bs(ip);var _h=class extends ip{constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Fe(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:Ee(()=>Xa(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&Ee(()=>{let i,o=xe(ae(this.m,r),s);this.useNesterov?i=xe(ae(this.c,xe(s,ae(o,this.m))),n):i=xe(ae(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Y(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};_h.className="Momentum";bs(_h);var Fh=class extends vs{constructor(e,t=.9,a=0,n=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=a,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,n==null&&(this.epsilon=z.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:Ee(()=>Xa(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:Ee(()=>Xa(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:Ee(()=>Xa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[a].variable,o=this.accumulatedMoments[a].variable;Ee(()=>{let l=xe(ae(i,this.decay),ae(In(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,d=xe(ae(u,this.decay),ae(s,1-this.decay)),c=fe(ae(s,this.learningRate),Jn(he(l,xe(In(d),this.epsilon)))),p=xe(ae(o,this.momentum),c);i.assign(l),u.assign(d),o.assign(p);let h=he(n,p);n.assign(h)}else{let u=xe(ae(i,this.decay),ae(In(s),1-this.decay)),d=xe(ae(o,this.momentum),fe(ae(s,this.learningRate),Jn(xe(u,this.epsilon))));i.assign(u),o.assign(d);let c=he(n,d);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Y(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Y(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Y(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,a=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Fh.className="RMSProp";bs(Fh);var Or=class{static sgd(e){return new ip(e)}static momentum(e,t,a=!1){return new _h(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new Fh(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Mh(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Eh(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new $h(e,t,a,n,r)}static adagrad(e,t=.1){return new Rh(e,t)}},G_={sgd:Or.sgd,momentum:Or.momentum,adadelta:Or.adadelta,adagrad:Or.adagrad,rmsprop:Or.rmsprop,adamax:Or.adamax,adam:Or.adam},U_=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function E4(){return new Promise(e=>U_(()=>e()))}var T={};He(T,{ERF_A1:()=>oF,ERF_A2:()=>lF,ERF_A3:()=>uF,ERF_A4:()=>dF,ERF_A5:()=>pF,ERF_P:()=>iF,PARALLELIZE_THRESHOLD:()=>n3,RowPartitionType:()=>Un,SELU_SCALE:()=>sF,SELU_SCALEALPHA:()=>rF,applyActivation:()=>Ch,assertAndGetBroadcastShape:()=>zt,assertAxesAreInnerMostDims:()=>WE,assertParamsConsistent:()=>j_,assignToTypedArray:()=>yF,axesAreInnerMostDims:()=>C2,calculateShapes:()=>ax,checkEinsumDimSizes:()=>kF,checkPadOnDimRoundingMode:()=>Sn,combineLocations:()=>nb,combineRaggedTensorToTensorShapes:()=>q_,complexWithEvenIndex:()=>fF,complexWithOddIndex:()=>mF,computeConv2DInfo:()=>Jd,computeConv3DInfo:()=>Cx,computeDefaultPad:()=>v2,computeDilation2DInfo:()=>BN,computeOptimalWindowSize:()=>Y_,computeOutAndReduceShapes:()=>BE,computeOutShape:()=>H_,computePool2DInfo:()=>Tx,computePool3DInfo:()=>WN,convertConv2DDataFormat:()=>Nx,decodeEinsumEquation:()=>vF,eitherStridesOrDilationsAreOne:()=>kr,expandShapeToKeepDim:()=>tp,exponent:()=>xF,exponents:()=>AF,fromStringArrayToUint8:()=>UF,fromUint8ToStringArray:()=>GF,getAxesPermutation:()=>VE,getBroadcastDims:()=>QA,getComplexWithIndex:()=>gF,getEinsumComputePath:()=>IF,getEinsumPermutation:()=>wF,getFusedBiasGradient:()=>Th,getFusedDyActivation:()=>Sh,getImageCenter:()=>J_,getInnerMostAxes:()=>UE,getPermuted:()=>eF,getRaggedRank:()=>K_,getReductionAxes:()=>c2,getReshaped:()=>Q_,getReshapedPermuted:()=>tF,getRowPartitionTypesHelper:()=>X_,getSliceBeginCoords:()=>aF,getSliceSize:()=>nF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>NF,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>EF,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>RF,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>_F,getSparseReshapeInputOutputMismatchErrorMessage:()=>PF,getSparseReshapeInputOutputMultipleErrorMessage:()=>FF,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>MF,getSparseReshapeNegativeOutputDimErrorMessage:()=>$F,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>LF,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>OF,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>DF,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>zF,getUndoAxesPermutation:()=>GE,isIdentityPermutation:()=>SF,log:()=>sT,mergeRealAndImagArrays:()=>cF,prepareAndValidate:()=>tx,prepareSplitSize:()=>CF,segment_util:()=>R4,shouldFuse:()=>Nh,slice_util:()=>At,splitRealAndImagArrays:()=>hF,tupleValuesAreOne:()=>nd,upcastType:()=>ra,validateDefaultValueShape:()=>Z_,validateInput:()=>y2,validateUpdateShape:()=>g2,warn:()=>Dr});function j_(e,t){let a=e[0].length;e.forEach((r,s)=>{F(r.length===a,()=>`Error in concat${a}D: rank of tensors[${s}] must be the same as the rank of the rest (${a})`)}),F(t>=0&&t`Error in concat${a}D: axis must be between 0 and ${a-1}.`);let n=e[0];e.forEach((r,s)=>{for(let i=0;i`Error in concat${a}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function H_(e,t){let a=e[0].slice();for(let n=1;n=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${r+e}] = ${s} but shape[${r+e}] = ${o}`)}else n[i]=s}return n}function X_(e){let t={FIRST_DIM_SIZE:Un.FIRST_DIM_SIZE,VALUE_ROWIDS:Un.VALUE_ROWIDS,ROW_LENGTHS:Un.ROW_LENGTHS,ROW_SPLITS:Un.ROW_SPLITS,ROW_LIMITS:Un.ROW_LIMITS,ROW_STARTS:Un.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function K_(e){return e.length===0?0:e[0]===Un.FIRST_DIM_SIZE?e.length-1:e.length}function Z_(e,t){if(e==null||t==null)return;let a=e.length,n=t.length;if(a>=n)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${a} must be less than ragged tensor input flatValues.rank = ${n})`);for(let r=0;r=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${r-e.length}] = ${s} but ragged tensor input.flatValues.shape[${r-e.length}] = ${i}`)}}var n3=30;function Y_(e){return e<=n3?e:wc(e,Math.floor(Math.sqrt(e)))}function J_(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function Q_(e,t,a,n=!0){let r=[];if(n)r=r.concat(t.slice(0)),r.push(e[0]/a),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i=t*2+1||i%2===1?s.push(i):r.push(i);n.push(...r),n.push(0),n.push(...s)}return n}function tF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,ny=",",ry="...";function vF(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(bF,"").length)/Pm.length;if(a<1)throw new Error("Equations without an arrow are not supported.");if(a>1)throw new Error(`Equation must contain exactly one arrow ("${Pm}").`);let[n,r]=e.split(Pm);F(n.indexOf(ry)===-1,()=>`The ellipsis notation ("${ry}") is not supported yet.`);let s=n.split(ny),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let p=0;pf.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let p=0;pr!==-1),{permutationIndices:a,expandDims:n}}function kF(e,t,a){let n=new Array(e);for(let r=0;r`Expected dimension ${n[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function IF(e,t){let a=e,n=[],r=0;e.length===0&&a.push(-1),r=e.length+1;for(let i=0;it===a)}function TF(e,t){let a=[];for(let n=0;n"Number of splits must evenly divide the axis."),n=new Array(t).fill(e.shape[a]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);F(r<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[a]-i}F(e.shape[a]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),n=t}return n}function NF(e){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${e}`}function EF(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function RF(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function MF(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function $F(e,t){return`size ${e} must be non-negative, not ${t}`}function _F(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function FF(e,t){let a=yt(e),n=yt(t);return`Input to reshape is a SparseTensor with ${a} - dense values, but the requested shape requires a multiple of ${n}. inputShape=${e} outputShape= ${t}`}function PF(e,t){let a=yt(e),n=yt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function OF(){return"segment ids must be >= 0"}function DF(){return"segment ids are not increasing"}function zF(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function LF(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var R4={};He(R4,{collectGatherOpShapeInfo:()=>VF,computeOutShape:()=>WF,segOpComputeOptimalWindowSize:()=>BF});function BF(e,t){let a=!1,n;for(e<=n3?(n=e,a=!0):n=wc(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=wc(e,n+1);return n}function WF(e,t,a){let n=[],r=e.length;for(let s=0;sr))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${n}`);if(n<0&&(n+=r),n>s)throw new Error(`batchDims (${n}) must be less than rank(x) ( - ${s}).`);if(aIc(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function UF(e){return e.map(t=>Ud(t))}var Tn={};He(Tn,{nonMaxSuppressionV3Impl:()=>b4,nonMaxSuppressionV4Impl:()=>v4,nonMaxSuppressionV5Impl:()=>w4,whereImpl:()=>d4});var jF=V();jF.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var wn;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"})(wn||(wn={}));var sy;(function(e){let t;(function(a){a[a.LEGACY=0]="LEGACY",a[a.V1=1]="V1",a[a.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(sy||(sy={}));var r3={};function HF(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};r3[e]=a}function M4(e){return r3[e]}function qF(e){delete r3[e]}function k(e,t,a,n,r){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return ba(t.inputNames[s.inputIndexStart],a,n,r);if(s.type==="tensors")return t.inputNames.slice(o,l).map(c=>ba(c,a,n,r));let u=ba(t.inputNames.slice(o)[0],a,n,r),d=u.dataSync();return s.type==="number"?d[0]:v.toNestedArray(u.shape,d)}let i=t.attrParams[e];return i&&i.value}function ba(e,t,a,n){let[r,s]=ja(e);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[Ec(r,o)]);return i!==void 0?t[Ec(r,i)][s]:void 0}function XF(e,t,a){return t[Ec(e,a.currentContextId)]}function jn(e,t){let[a,n,r]=ja(e);return[Ec(a,t&&t.currentContextId),n,r]}function Ec(e,t){return t?`${e}-${t}`:e}function ja(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let a=t[0],n=t.length===3?t[1]:void 0,r=Number(t[t.length-1]);return[a,r,n]}function hc(e,t,a){let n=k("pad",e,t,a);if(n==="explicit"){n=k("explicitPaddings",e,t,a);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=n[s*2],r[s][1]=n[s*2+1];return r}return n}function fr(e){return e.kept?e:wa(e)}var $4={};He($4,{json:()=>KF});var KF=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],_4={};He(_4,{json:()=>ZF});var ZF=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],F4={};He(F4,{json:()=>YF});var YF=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],P4={};He(P4,{json:()=>JF});var JF=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],O4={};He(O4,{json:()=>QF});var QF=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],D4={};He(D4,{json:()=>eP});var eP=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],z4={};He(z4,{json:()=>tP});var tP=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],L4={};He(L4,{json:()=>aP});var aP=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],B4={};He(B4,{json:()=>nP});var nP=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}],W4={};He(W4,{json:()=>rP});var rP=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],V4={};He(V4,{json:()=>sP});var sP=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],G4={};He(G4,{json:()=>iP});var iP=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}],U4={};He(U4,{json:()=>oP});var oP=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],j4={};He(j4,{json:()=>lP});var lP=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],H4={};He(H4,{json:()=>uP});var uP=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],q4={};He(q4,{json:()=>dP});var dP=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],X4={};He(X4,{json:()=>pP});var pP=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],K4={};He(K4,{json:()=>cP});var cP=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],Z4={};He(Z4,{json:()=>hP});var hP=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],iy=class{constructor(){let e=[$4,_4,F4,P4,O4,D4,z4,L4,B4,W4,V4,G4,U4,j4,H4,q4,X4,K4,Z4],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?n.push(f[m.name]):m.op==="Const"?r.push(f[m.name]):(m.input==null||m.input.length===0)&&s.push(f[m.name]),f),{}),o=[],l=[],u={},d={};t!=null&&(u=this.mapSignatureEntries(t.inputs),d=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(f=>{let m=i[f];m.inputNames.forEach((g,y)=>{let[A,,x]=jn(g),b=i[A];if(b.outputs!=null){let w=b.outputs.indexOf(x);if(w!==-1){let S=`${A}:${w}`;m.inputNames[y]=S}}m.inputs.push(b),b.children.push(m)})}),Object.keys(d).length===0?c.forEach(f=>{let m=i[f];m.children.length===0&&l.push(m)}):Object.keys(d).forEach(f=>{let[m]=jn(f),g=i[m];g!=null&&(g.signatureKey=d[f],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(f=>{let[m]=jn(f),g=i[m];g&&(g.signatureKey=u[f],o.push(g))}):o=n;let p={};e.library!=null&&e.library.function!=null&&(p=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:n,signature:t,functions:p};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,a)=>(t[e[a].name]=a,t),{})}mapNode(e){let t=M4(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let a={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(a.inputParams=t.inputs.reduce((n,r)=>(n[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},n),{})),t.attrs!=null&&(a.attrParams=t.attrs.reduce((n,r)=>{let s=r.type,i;switch(r.type){case"string":i=i1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=i1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=h1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=h1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=l1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&!!r.tfDeprecatedName&&(i=l1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=c1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=c1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=o1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=o1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=m1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=m1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=p1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=p1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=f1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=f1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=u1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=u1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=d1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=d1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=oy(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=oy(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return n[r.name]={value:i,type:s},n},{})),a}mapFunction(e){let t=e.nodeDef,a=[],n=[],r={};t!=null&&(r=t.reduce((u,d)=>(u[d.name]=this.mapNode(d),d.op==="Const"&&n.push(u[d.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[d]=jn(u.name),c={name:d,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:s3(u.type),type:"dtype"}},children:[]};c.signatureKey=u.name,s.push(c),r[d]=c}),Object.keys(r).forEach(u=>{let d=r[u];d.inputNames.forEach((c,p)=>{let[h,,f]=jn(c),m=r[h];if(m.outputs!=null){let g=m.outputs.indexOf(f);if(g!==-1){let y=`${h}:${g}`;d.inputNames[p]=y}}d.inputs.push(m),m.children.push(d)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[d,c]=jn(o[u.name]),p=r[d];p!=null&&(p.defaultOutput=c,i.push(p))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:n,placeholders:a,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a),t),{}),outputs:e.signature.outputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a,e.ret),t),{})}}mapArgToTensorInfo(e,t){let a=e.name;return t!=null&&(a=t[a]),{name:a,dtype:e.type}}};function fP(e){let t=V().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function Y4(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):fP(e);return t?a:a.toLowerCase()}function i1(e,t,a,n=!1){let r=e[t];return r!=null?Y4(r.s,n):a}function o1(e,t,a){let n=e[t];return n?n.b:a}function l1(e,t,a){let n=e[t]||{},r=n.i!=null?n.i:n.f!=null?n.f:a;return typeof r=="number"?r:parseInt(r,10)}function s3(e){switch(typeof e=="string"&&(e=wn[e]),e){case wn.DT_FLOAT:case wn.DT_HALF:return"float32";case wn.DT_INT32:case wn.DT_INT64:case wn.DT_INT8:case wn.DT_UINT8:return"int32";case wn.DT_BOOL:return"bool";case wn.DT_DOUBLE:return"float32";case wn.DT_STRING:return"string";default:return null}}function oy(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function u1(e,t,a){let n=e[t];return n&&n.type?s3(n.type):a}function d1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>s3(r)):a}function J4(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function p1(e,t,a){let n=e[t];return n&&n.shape?J4(n.shape):a}function c1(e,t,a){let n=e[t];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):a}function h1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>Y4(s,n)):a}function f1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>J4(r)):a}function m1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var mP=class{constructor(e,t,a){this.node=e,this.tensorMap=t,this.context=a,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,r)=>(n[r]=this.getAttr(r),n),{}))}getInput(e){return ba(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return ba(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return l1(this.node.rawAttrs,e,t);if(a.s!=null)return i1(this.node.rawAttrs,e,t);if(a.b!=null)return o1(this.node.rawAttrs,e,t);if(a.shape!=null)return p1(this.node.rawAttrs,e,t);if(a.type!=null)return u1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return c1(this.node.rawAttrs,e,t);if(a.list.s!=null)return h1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return f1(this.node.rawAttrs,e,t);if(a.list.b!=null)return m1(this.node.rawAttrs,e,t);if(a.list.type!=null)return d1(this.node.rawAttrs,e,t)}return t}},oa={};He(oa,{OP_SCOPE_SUFFIX:()=>a2,abs:()=>Ha,acos:()=>gx,acosh:()=>yx,add:()=>xe,addN:()=>mh,all:()=>Ax,any:()=>xx,argMax:()=>ar,argMin:()=>bx,asin:()=>vx,asinh:()=>wx,atan:()=>kx,atan2:()=>Ix,atanh:()=>Sx,avgPool:()=>w2,avgPool3d:()=>Ex,basicLSTMCell:()=>Rx,batchNorm:()=>Qd,batchNorm2d:()=>Mx,batchNorm3d:()=>$x,batchNorm4d:()=>_x,batchToSpaceND:()=>k2,bincount:()=>I2,booleanMaskAsync:()=>p4,broadcastArgs:()=>Fx,broadcastTo:()=>ei,buffer:()=>ve,cast:()=>Ue,ceil:()=>Px,clipByValue:()=>Ox,clone:()=>wa,complex:()=>xr,concat:()=>at,concat1d:()=>Dx,concat2d:()=>ql,concat3d:()=>zx,concat4d:()=>Lx,conv1d:()=>Bx,conv2d:()=>ep,conv2dTranspose:()=>Vx,conv3d:()=>Gx,conv3dTranspose:()=>Ux,cos:()=>jx,cosh:()=>Hx,cosineWindow:()=>Ih,cumprod:()=>qx,cumsum:()=>Xx,denseBincount:()=>Kx,depthToSpace:()=>Zx,depthwiseConv2d:()=>gh,diag:()=>Yx,dilation2d:()=>Jx,div:()=>fe,divNoNan:()=>Qx,dot:()=>eb,dropout:()=>g4,einsum:()=>tb,elu:()=>T2,enclosingPowerOfTwo:()=>e3,equal:()=>S2,erf:()=>ab,euclideanNorm:()=>sb,exp:()=>Xr,expandDims:()=>Gt,expm1:()=>ib,eye:()=>N2,fft:()=>wh,fill:()=>nr,floor:()=>E2,floorDiv:()=>Yd,fused:()=>t3,gather:()=>R2,gatherND:()=>m4,greater:()=>np,greaterEqual:()=>M2,ifft:()=>id,imag:()=>Zd,image:()=>me,inTopKAsync:()=>y4,irfft:()=>Z2,isFinite:()=>ob,isInf:()=>lb,isNaN:()=>ub,leakyRelu:()=>$2,less:()=>db,lessEqual:()=>yh,linalg:()=>S4,linspace:()=>pb,localResponseNormalization:()=>cb,log:()=>il,log1p:()=>_2,logSigmoid:()=>fb,logSoftmax:()=>mb,logSumExp:()=>P2,logicalAnd:()=>rd,logicalNot:()=>O2,logicalOr:()=>D2,logicalXor:()=>gb,losses:()=>T4,lowerBound:()=>yb,matMul:()=>st,max:()=>pa,maxPool:()=>z2,maxPool3d:()=>Ab,maxPoolWithArgmax:()=>xb,maximum:()=>L2,mean:()=>sd,meshgrid:()=>bb,min:()=>qr,minimum:()=>B2,mirrorPad:()=>vb,mod:()=>Xl,moments:()=>wb,movingAverage:()=>c4,mul:()=>ae,multiRNNCell:()=>kb,multinomial:()=>Ib,neg:()=>Xn,norm:()=>ap,notEqual:()=>W2,oneHot:()=>Tc,ones:()=>Br,onesLike:()=>Sb,op:()=>D,outerProduct:()=>Tb,pad:()=>rr,pad1d:()=>Cb,pad2d:()=>Nb,pad3d:()=>Eb,pad4d:()=>Rb,pool:()=>Mb,pow:()=>sl,prelu:()=>G2,print:()=>i2,prod:()=>$b,raggedGather:()=>_b,raggedRange:()=>Fb,raggedTensorToTensor:()=>Pb,rand:()=>Ob,randomGamma:()=>Db,randomNormal:()=>H2,randomStandardNormal:()=>zb,randomUniform:()=>q2,range:()=>ol,real:()=>rl,reciprocal:()=>Lb,relu:()=>rp,relu6:()=>X2,reshape:()=>J,reverse:()=>Kr,reverse1d:()=>Bb,reverse2d:()=>Wb,reverse3d:()=>Vb,reverse4d:()=>Gb,rfft:()=>kh,round:()=>K2,rsqrt:()=>Ub,scalar:()=>Fe,scatterND:()=>h4,searchSorted:()=>xh,selu:()=>jb,separableConv2d:()=>Hb,setdiff1dAsync:()=>qb,sigmoid:()=>Da,sign:()=>Xb,signal:()=>I4,sin:()=>Kb,sinh:()=>Zb,slice:()=>_e,slice1d:()=>Yb,slice2d:()=>Jb,slice3d:()=>sp,slice4d:()=>bh,softmax:()=>vh,softplus:()=>F2,spaceToBatchND:()=>V2,sparse:()=>C4,sparseToDense:()=>f4,spectral:()=>k4,split:()=>ka,sqrt:()=>Jn,square:()=>In,squaredDifference:()=>Y2,squeeze:()=>$e,stack:()=>sa,step:()=>J2,stridedSlice:()=>Qb,string:()=>N4,sub:()=>he,sum:()=>tt,tan:()=>e4,tanh:()=>Nc,tensor:()=>ze,tensor1d:()=>Ut,tensor2d:()=>Kn,tensor3d:()=>h2,tensor4d:()=>t4,tensor5d:()=>a4,tensor6d:()=>n4,tile:()=>Vr,topk:()=>r4,transpose:()=>si,truncatedNormal:()=>s4,unique:()=>i4,unsortedSegmentSum:()=>o4,unstack:()=>Ta,upperBound:()=>l4,variable:()=>u4,where:()=>ii,whereAsync:()=>Q2,zeros:()=>pn,zerosLike:()=>Xa});var gP=(e,t,a,n=oa)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[n.add(k("a",e,t,a),k("b",e,t,a))];case"AddN":return[n.addN(k("tensors",e,t,a))];case"FloorMod":case"Mod":return[n.mod(k("a",e,t,a),k("b",e,t,a))];case"Mul":return[n.mul(k("a",e,t,a),k("b",e,t,a))];case"RealDiv":case"Div":return[n.div(k("a",e,t,a),k("b",e,t,a))];case"DivNoNan":return[n.divNoNan(k("a",e,t,a),k("b",e,t,a))];case"FloorDiv":return[n.floorDiv(k("a",e,t,a),k("b",e,t,a))];case"Sub":return[n.sub(k("a",e,t,a),k("b",e,t,a))];case"Minimum":return[n.minimum(k("a",e,t,a),k("b",e,t,a))];case"Maximum":return[n.maximum(k("a",e,t,a),k("b",e,t,a))];case"Pow":return[n.pow(k("a",e,t,a),k("b",e,t,a))];case"SquaredDifference":return[n.squaredDifference(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},yP=(e,t,a,n=oa)=>{switch(e.op){case"Abs":case"ComplexAbs":return[n.abs(k("x",e,t,a))];case"Acos":return[n.acos(k("x",e,t,a))];case"Acosh":return[n.acosh(k("x",e,t,a))];case"Asin":return[n.asin(k("x",e,t,a))];case"Asinh":return[n.asinh(k("x",e,t,a))];case"Atan":return[n.atan(k("x",e,t,a))];case"Atan2":return[n.atan2(k("x",e,t,a),k("y",e,t,a))];case"Atanh":return[n.atanh(k("x",e,t,a))];case"Ceil":return[n.ceil(k("x",e,t,a))];case"Complex":return[n.complex(k("real",e,t,a),k("imag",e,t,a))];case"Cos":return[n.cos(k("x",e,t,a))];case"Cosh":return[n.cosh(k("x",e,t,a))];case"Elu":return[n.elu(k("x",e,t,a))];case"Erf":return[n.erf(k("x",e,t,a))];case"Exp":return[n.exp(k("x",e,t,a))];case"Expm1":return[n.expm1(k("x",e,t,a))];case"Floor":return[n.floor(k("x",e,t,a))];case"Log":return[n.log(k("x",e,t,a))];case"Log1p":return[n.log1p(k("x",e,t,a))];case"Imag":return[n.imag(k("x",e,t,a))];case"Neg":return[n.neg(k("x",e,t,a))];case"Reciprocal":return[n.reciprocal(k("x",e,t,a))];case"Real":return[n.real(k("x",e,t,a))];case"Relu":return[n.relu(k("x",e,t,a))];case"Round":return[n.round(k("x",e,t,a))];case"Selu":return[n.selu(k("x",e,t,a))];case"Sigmoid":return[n.sigmoid(k("x",e,t,a))];case"Sin":return[n.sin(k("x",e,t,a))];case"Sign":return[n.sign(k("x",e,t,a))];case"Sinh":return[n.sinh(k("x",e,t,a))];case"Softplus":return[n.softplus(k("x",e,t,a))];case"Sqrt":return[n.sqrt(k("x",e,t,a))];case"Square":return[n.square(k("x",e,t,a))];case"Tanh":return[n.tanh(k("x",e,t,a))];case"Tan":return[n.tan(k("x",e,t,a))];case"ClipByValue":return[n.clipByValue(k("x",e,t,a),k("clipValueMin",e,t,a),k("clipValueMax",e,t,a))];case"Relu6":return[n.relu6(k("x",e,t,a))];case"Rsqrt":return[n.rsqrt(ba(e.inputNames[0],t,a))];case"Prod":return[n.prod(k("x",e,t,a),k("axes",e,t,a))];case"LeakyRelu":return[n.leakyRelu(k("x",e,t,a),k("alpha",e,t,a))];case"Prelu":return[n.prelu(k("x",e,t,a),k("alpha",e,t,a))];case"IsNan":return[n.isNaN(ba(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function kn(e,t,a=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>a+` Shapes ${e} and ${t} must match`);for(let n=0;na+` Shapes ${e} and ${t} must match`)}}}function ly(e){return!(typeof e=="number"||e.some(t=>t<0))}function Fu(e,t,a){let n=g1(e,a),r=!ly(n);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(r&&t.forEach(s=>{n=g1(s.shape,n)}),!ly(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function g1(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let a=[];for(let n=0;n=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);a[n]=r>=0?r:s}return a}var AP=class{constructor(e,t,a,n,r,s,i){this.name=e,this.dtype=t,this.maxSize=a,this.elementShape=n,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Fe(0),qn(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let a=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, - because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),kn(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),a.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(a.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);a.tensor=t,qn(t),a.written=!0,this.tensors[e]=a}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((a,n)=>this.write(a,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${a} vs. ${this.maxSize})`);this.writeMany(e,Ta(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let a=0,n=e.map(o=>(a+=o,a));if(a!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return z.runKernel(zd,i)}var s_=D({sparseSegmentSum_:r_});function i_(e,t,a,n,r,s,i,o){let l=R(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=R(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let p={separator:a,nGramWidths:n,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},c={data:l,dataSplits:u},d=z.runKernel(eu,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var o_=D({stringNGrams_:i_});function l_(e,t,a=!0){let n=R(e,"input","stringSplit","string"),r=R(t,"delimiter","stringSplit","string");if(n.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${n.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:a},i={input:n,delimiter:r},o=z.runKernel(Wd,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var u_=D({stringSplit_:l_});function d_(e,t){let a=R(e,"input","stringToHashBucketFast","string"),n={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:a};return z.runKernel(Vd,r,n)}var p_=D({stringToHashBucketFast_:d_}),p4={fft:gh,ifft:hd,rfft:xh,irfft:H2},c4={hammingWindow:WM,hannWindow:i4,frame:o4,stft:HM},ge={flipLeftRight:KM,grayscaleToRGB:YM,resizeNearestNeighbor:v$,resizeBilinear:y$,rotateWithOffset:QM,cropAndResize:qM,nonMaxSuppression:t$,nonMaxSuppressionAsync:u$,nonMaxSuppressionWithScore:p$,nonMaxSuppressionWithScoreAsync:h$,nonMaxSuppressionPadded:m$,nonMaxSuppressionPaddedAsync:x$,threshold:I$,transform:T$},h4={bandPart:N$,gramSchmidt:R$,qr:$$},f4={absoluteDifference:F$,computeWeightedLoss:wr,cosineDistance:D$,hingeLoss:L$,huberLoss:W$,logLoss:U$,meanSquaredError:H$,sigmoidCrossEntropy:X$,softmaxCrossEntropy:Y$},m4={sparseFillEmptyRows:Q$,sparseReshape:t_,sparseSegmentMean:n_,sparseSegmentSum:s_},g4={stringNGrams:o_,stringSplit:u_,stringToHashBucketFast:p_},rs=class extends ey{minimize(e,t=!1,a){let{value:n,grads:r}=this.computeGradients(e,a);if(a!=null){let s=a.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return Y(r),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return tb(e,t)}dispose(){this.iterations_!=null&&Y(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Fe(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(rs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var kh=class extends rs{constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:$e(()=>Xa(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:$e(()=>Xa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[a].variable,o=this.accumulatedUpdates[a].variable;$e(()=>{let l=be(ae(i,this.rho),ae(kn(s),1-this.rho)),u=ae(me(Yn(be(o,this.epsilon)),Yn(be(i,this.epsilon))),s),p=be(ae(o,this.rho),ae(kn(u),1-this.rho));i.assign(l),o.assign(p);let c=be(ae(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Y(this.accumulatedGrads.map(e=>e.variable)),Y(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,a=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};kh.className="Adadelta";ns(kh);var Ih=class extends rs{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:$e(()=>ar(n.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[a].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[a].variable;$e(()=>{let i=be(s,kn(r));s.assign(i);let o=be(ae(me(r,Yn(be(i,z.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Y(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};Ih.className="Adagrad";ns(Ih);var Sh=class extends rs{constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],$e(()=>{this.accBeta1=Fe(t).variable(),this.accBeta2=Fe(a).variable()}),n==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);$e(()=>{let a=fe(1,this.accBeta1),n=fe(1,this.accBeta2);t.forEach((r,s)=>{let i=z.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:$e(()=>Xa(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:$e(()=>Xa(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedSecondMoment[s].variable,c=be(ae(u,this.beta1),ae(l,1-this.beta1)),d=be(ae(p,this.beta2),ae(kn(l),1-this.beta2)),h=me(c,a),f=me(d,n);u.assign(c),p.assign(d);let m=be(ae(me(h,be(Yn(f),this.epsilon)),-this.learningRate),i);i.assign(m)}),this.accBeta1.assign(ae(this.accBeta1,this.beta1)),this.accBeta2.assign(ae(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Y(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Y(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),$e(()=>{this.accBeta1.assign(dl(this.beta1,this.iterations_+1)),this.accBeta2.assign(dl(this.beta2,this.iterations_+1))});let t=e.length/2,a=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Sh.className="Adam";ns(Sh);var Th=class extends rs{constructor(e,t,a,n=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],$e(()=>{this.iteration=Fe(0).variable(),this.accBeta1=Fe(t).variable()}),n==null&&(this.epsilon=z.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);$e(()=>{let a=fe(1,this.accBeta1),n=me(-this.learningRate,be(ae(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=z.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Xa(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Xa(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedWeightedInfNorm[s].variable,c=be(ae(u,this.beta1),ae(l,1-this.beta1)),d=ae(p,this.beta2),h=ja(l),f=P2(d,h);u.assign(c),p.assign(f);let m=be(ae(me(n,a),me(c,be(f,this.epsilon))),i);i.assign(m)}),this.iteration.assign(be(this.iteration,1)),this.accBeta1.assign(ae(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Y(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Y(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Th.className="Adamax";ns(Th);var ip=class extends rs{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=Array.isArray(e)?e[a].tensor:e[t];if(n==null)return;let r=z.registeredVariables[t];$e(()=>{let s=be(ae(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Fn(Fe(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};ip.className="SGD";ns(ip);var Ch=class extends ip{constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Fe(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:$e(()=>Xa(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&$e(()=>{let i,o=be(ae(this.m,r),s);this.useNesterov?i=be(ae(this.c,be(s,ae(o,this.m))),n):i=be(ae(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Y(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Ch.className="Momentum";ns(Ch);var Nh=class extends rs{constructor(e,t=.9,a=0,n=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=a,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,n==null&&(this.epsilon=z.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=z.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:$e(()=>Xa(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:$e(()=>Xa(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:$e(()=>Xa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[a].variable,o=this.accumulatedMoments[a].variable;$e(()=>{let l=be(ae(i,this.decay),ae(kn(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,p=be(ae(u,this.decay),ae(s,1-this.decay)),c=me(ae(s,this.learningRate),Yn(fe(l,be(kn(p),this.epsilon)))),d=be(ae(o,this.momentum),c);i.assign(l),u.assign(p),o.assign(d);let h=fe(n,d);n.assign(h)}else{let u=be(ae(i,this.decay),ae(kn(s),1-this.decay)),p=be(ae(o,this.momentum),me(ae(s,this.learningRate),Yn(be(u,this.epsilon))));i.assign(u),o.assign(p);let c=fe(n,p);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Y(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Y(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Y(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,a=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Nh.className="RMSProp";ns(Nh);var Pr=class{static sgd(e){return new ip(e)}static momentum(e,t,a=!1){return new Ch(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new Nh(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Sh(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new kh(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new Th(e,t,a,n,r)}static adagrad(e,t=.1){return new Ih(e,t)}},c_={sgd:Pr.sgd,momentum:Pr.momentum,adadelta:Pr.adadelta,adagrad:Pr.adagrad,rmsprop:Pr.rmsprop,adamax:Pr.adamax,adam:Pr.adam},h_=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function x4(){return new Promise(e=>h_(()=>e()))}var T={};Xe(T,{ERF_A1:()=>R_,ERF_A2:()=>M_,ERF_A3:()=>$_,ERF_A4:()=>__,ERF_A5:()=>P_,ERF_P:()=>E_,PARALLELIZE_THRESHOLD:()=>J2,RowPartitionType:()=>Gn,SELU_SCALE:()=>N_,SELU_SCALEALPHA:()=>C_,applyActivation:()=>vh,assertAndGetBroadcastShape:()=>zt,assertAxesAreInnerMostDims:()=>dE,assertParamsConsistent:()=>f_,assignToTypedArray:()=>B_,axesAreInnerMostDims:()=>w2,calculateShapes:()=>GA,checkEinsumDimSizes:()=>j_,checkPadOnDimRoundingMode:()=>In,combineLocations:()=>Hy,combineRaggedTensorToTensorShapes:()=>g_,complexWithEvenIndex:()=>D_,complexWithOddIndex:()=>z_,computeConv2DInfo:()=>Jd,computeConv3DInfo:()=>my,computeDefaultPad:()=>g2,computeDilation2DInfo:()=>uN,computeOptimalWindowSize:()=>b_,computeOutAndReduceShapes:()=>uE,computeOutShape:()=>m_,computePool2DInfo:()=>fy,computePool3DInfo:()=>dN,convertConv2DDataFormat:()=>gy,decodeEinsumEquation:()=>G_,eitherStridesOrDilationsAreOne:()=>vr,expandShapeToKeepDim:()=>tp,exponent:()=>V_,exponents:()=>W_,fromStringArrayToUint8:()=>hP,fromUint8ToStringArray:()=>cP,getAxesPermutation:()=>pE,getBroadcastDims:()=>WA,getComplexWithIndex:()=>L_,getEinsumComputePath:()=>q_,getEinsumPermutation:()=>H_,getFusedBiasGradient:()=>bh,getFusedDyActivation:()=>yh,getImageCenter:()=>v_,getInnerMostAxes:()=>hE,getPermuted:()=>k_,getRaggedRank:()=>A_,getReductionAxes:()=>o2,getReshaped:()=>w_,getReshapedPermuted:()=>I_,getRowPartitionTypesHelper:()=>x_,getSliceBeginCoords:()=>S_,getSliceSize:()=>T_,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>Y_,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>J_,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>Q_,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>aP,getSparseReshapeInputOutputMismatchErrorMessage:()=>rP,getSparseReshapeInputOutputMultipleErrorMessage:()=>nP,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>eP,getSparseReshapeNegativeOutputDimErrorMessage:()=>tP,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>lP,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>sP,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>iP,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>oP,getUndoAxesPermutation:()=>cE,isIdentityPermutation:()=>X_,log:()=>NS,mergeRealAndImagArrays:()=>F_,prepareAndValidate:()=>UA,prepareSplitSize:()=>Z_,segment_util:()=>A4,shouldFuse:()=>wh,slice_util:()=>It,splitRealAndImagArrays:()=>O_,tupleValuesAreOne:()=>dd,upcastType:()=>ca,validateDefaultValueShape:()=>y_,validateInput:()=>c2,validateUpdateShape:()=>p2,warn:()=>Or});function f_(e,t){let a=e[0].length;e.forEach((r,s)=>{P(r.length===a,()=>`Error in concat${a}D: rank of tensors[${s}] must be the same as the rank of the rest (${a})`)}),P(t>=0&&t`Error in concat${a}D: axis must be between 0 and ${a-1}.`);let n=e[0];e.forEach((r,s)=>{for(let i=0;i`Error in concat${a}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function m_(e,t){let a=e[0].slice();for(let n=1;n=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${r+e}] = ${s} but shape[${r+e}] = ${o}`)}else n[i]=s}return n}function x_(e){let t={FIRST_DIM_SIZE:Gn.FIRST_DIM_SIZE,VALUE_ROWIDS:Gn.VALUE_ROWIDS,ROW_LENGTHS:Gn.ROW_LENGTHS,ROW_SPLITS:Gn.ROW_SPLITS,ROW_LIMITS:Gn.ROW_LIMITS,ROW_STARTS:Gn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function A_(e){return e.length===0?0:e[0]===Gn.FIRST_DIM_SIZE?e.length-1:e.length}function y_(e,t){if(e==null||t==null)return;let a=e.length,n=t.length;if(a>=n)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${a} must be less than ragged tensor input flatValues.rank = ${n})`);for(let r=0;r=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${r-e.length}] = ${s} but ragged tensor input.flatValues.shape[${r-e.length}] = ${i}`)}}var J2=30;function b_(e){return e<=J2?e:vc(e,Math.floor(Math.sqrt(e)))}function v_(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function w_(e,t,a,n=!0){let r=[];if(n)r=r.concat(t.slice(0)),r.push(e[0]/a),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i=t*2+1||i%2===1?s.push(i):r.push(i);n.push(...r),n.push(0),n.push(...s)}return n}function I_(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,qg=",",Xg="...";function G_(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(U_,"").length)/_m.length;if(a<1)throw new Error("Equations without an arrow are not supported.");if(a>1)throw new Error(`Equation must contain exactly one arrow ("${_m}").`);let[n,r]=e.split(_m);P(n.indexOf(Xg)===-1,()=>`The ellipsis notation ("${Xg}") is not supported yet.`);let s=n.split(qg),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let d=0;df.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let d=0;dr!==-1),{permutationIndices:a,expandDims:n}}function j_(e,t,a){let n=new Array(e);for(let r=0;r`Expected dimension ${n[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function q_(e,t){let a=e,n=[],r=0;e.length===0&&a.push(-1),r=e.length+1;for(let i=0;it===a)}function K_(e,t){let a=[];for(let n=0;n"Number of splits must evenly divide the axis."),n=new Array(t).fill(e.shape[a]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);P(r<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[a]-i}P(e.shape[a]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),n=t}return n}function Y_(e){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${e}`}function J_(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function Q_(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function eP(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function tP(e,t){return`size ${e} must be non-negative, not ${t}`}function aP(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function nP(e,t){let a=At(e),n=At(t);return`Input to reshape is a SparseTensor with ${a} + dense values, but the requested shape requires a multiple of ${n}. inputShape=${e} outputShape= ${t}`}function rP(e,t){let a=At(e),n=At(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function sP(){return"segment ids must be >= 0"}function iP(){return"segment ids are not increasing"}function oP(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function lP(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var A4={};Xe(A4,{collectGatherOpShapeInfo:()=>pP,computeOutShape:()=>dP,segOpComputeOptimalWindowSize:()=>uP});function uP(e,t){let a=!1,n;for(e<=J2?(n=e,a=!0):n=vc(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=vc(e,n+1);return n}function dP(e,t,a){let n=[],r=e.length;for(let s=0;sr))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${n}`);if(n<0&&(n+=r),n>s)throw new Error(`batchDims (${n}) must be less than rank(x) ( + ${s}).`);if(akc(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function hP(e){return e.map(t=>Gd(t))}var Sn={};Xe(Sn,{nonMaxSuppressionV3Impl:()=>l4,nonMaxSuppressionV4Impl:()=>u4,nonMaxSuppressionV5Impl:()=>d4,whereImpl:()=>Jb});var fP=W();fP.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var vn;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"})(vn||(vn={}));var Kg;(function(e){let t;(function(a){a[a.LEGACY=0]="LEGACY",a[a.V1=1]="V1",a[a.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(Kg||(Kg={}));var Q2={};function mP(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};Q2[e]=a}function y4(e){return Q2[e]}function gP(e){delete Q2[e]}function k(e,t,a,n,r){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return ba(t.inputNames[s.inputIndexStart],a,n,r);if(s.type==="tensors")return t.inputNames.slice(o,l).map(c=>ba(c,a,n,r));let u=ba(t.inputNames.slice(o)[0],a,n,r),p=u.dataSync();return s.type==="number"?p[0]:v.toNestedArray(u.shape,p)}let i=t.attrParams[e];return i&&i.value}function ba(e,t,a,n){let[r,s]=Ha(e);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[Nc(r,o)]);return i!==void 0?t[Nc(r,i)][s]:void 0}function xP(e,t,a){return t[Nc(e,a.currentContextId)]}function hr(e,t){let[a,n,r]=Ha(e);return[Nc(a,t&&t.currentContextId),n,r]}function Nc(e,t){return t?`${e}-${t}`:e}function Ha(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let a=t[0],n=t.length===3?t[1]:void 0,r=Number(t[t.length-1]);return[a,r,n]}function cc(e,t,a){let n=k("pad",e,t,a);if(n==="explicit"){n=k("explicitPaddings",e,t,a);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=n[s*2],r[s][1]=n[s*2+1];return r}return n}function fr(e){return e.kept?e:wa(e)}var b4={};Xe(b4,{json:()=>AP});var AP=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],v4={};Xe(v4,{json:()=>yP});var yP=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],w4={};Xe(w4,{json:()=>bP});var bP=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],k4={};Xe(k4,{json:()=>vP});var vP=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],I4={};Xe(I4,{json:()=>wP});var wP=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],S4={};Xe(S4,{json:()=>kP});var kP=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],T4={};Xe(T4,{json:()=>IP});var IP=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],C4={};Xe(C4,{json:()=>SP});var SP=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],N4={};Xe(N4,{json:()=>TP});var TP=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],E4={};Xe(E4,{json:()=>CP});var CP=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],R4={};Xe(R4,{json:()=>NP});var NP=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],M4={};Xe(M4,{json:()=>EP});var EP=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}],$4={};Xe($4,{json:()=>RP});var RP=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],_4={};Xe(_4,{json:()=>MP});var MP=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],P4={};Xe(P4,{json:()=>$P});var $P=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],F4={};Xe(F4,{json:()=>_P});var _P=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],O4={};Xe(O4,{json:()=>PP});var PP=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],D4={};Xe(D4,{json:()=>FP});var FP=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],z4={};Xe(z4,{json:()=>OP});var OP=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],Zg=class{constructor(){let e=[b4,v4,w4,k4,I4,S4,T4,C4,N4,E4,R4,M4,$4,_4,P4,F4,O4,D4,z4],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?n.push(f[m.name]):m.op==="Const"?r.push(f[m.name]):(m.input==null||m.input.length===0)&&s.push(f[m.name]),f),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(f=>{let m=i[f];m.inputNames.forEach((g,x)=>{let[A,,y]=hr(g),b=i[A];if(b.outputs!=null){let w=b.outputs.indexOf(y);if(w!==-1){let S=`${A}:${w}`;m.inputNames[x]=S}}m.inputs.push(b),b.children.push(m)})}),Object.keys(p).length===0?c.forEach(f=>{let m=i[f];m.children.length===0&&l.push(m)}):Object.keys(p).forEach(f=>{let[m]=hr(f),g=i[m];g!=null&&(g.signatureKey=p[f],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(f=>{let[m]=hr(f),g=i[m];g&&(g.signatureKey=u[f],o.push(g))}):o=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:n,signature:t,functions:d};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,a)=>(t[e[a].name]=a,t),{})}mapNode(e){let t=y4(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let a={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(a.inputParams=t.inputs.reduce((n,r)=>(n[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},n),{})),t.attrs!=null&&(a.attrParams=t.attrs.reduce((n,r)=>{let s=r.type,i;switch(r.type){case"string":i=r1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=r1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=p1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=p1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=i1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&!!r.tfDeprecatedName&&(i=i1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=d1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=d1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=s1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=s1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=h1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=h1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=u1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=u1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=c1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=c1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=o1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=o1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=l1(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=l1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=Yg(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Yg(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return n[r.name]={value:i,type:s},n},{})),a}mapFunction(e){let t=e.nodeDef,a=[],n=[],r={};t!=null&&(r=t.reduce((u,p)=>(u[p.name]=this.mapNode(p),p.op==="Const"&&n.push(u[p.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[p]=hr(u.name),c={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:e3(u.type),type:"dtype"}},children:[]};c.signatureKey=u.name,s.push(c),r[p]=c}),Object.keys(r).forEach(u=>{let p=r[u];p.inputNames.forEach((c,d)=>{let[h,,f]=hr(c),m=r[h];if(m.outputs!=null){let g=m.outputs.indexOf(f);if(g!==-1){let x=`${h}:${g}`;p.inputNames[d]=x}}p.inputs.push(m),m.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,c]=hr(o[u.name]),d=r[p];d!=null&&(d.defaultOutput=c,i.push(d))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:n,placeholders:a,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a),t),{}),outputs:e.signature.outputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a,e.ret),t),{})}}mapArgToTensorInfo(e,t){let a=e.name;return t!=null&&(a=t[a]),{name:a,dtype:e.type}}};function DP(e){let t=W().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function L4(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):DP(e);return t?a:a.toLowerCase()}function r1(e,t,a,n=!1){let r=e[t];return r!=null?L4(r.s,n):a}function s1(e,t,a){let n=e[t];return n?n.b:a}function i1(e,t,a){let n=e[t]||{},r=n.i!=null?n.i:n.f!=null?n.f:a;return typeof r=="number"?r:parseInt(r,10)}function e3(e){switch(typeof e=="string"&&(e=vn[e]),e){case vn.DT_FLOAT:case vn.DT_HALF:return"float32";case vn.DT_INT32:case vn.DT_INT64:case vn.DT_INT8:case vn.DT_UINT8:return"int32";case vn.DT_BOOL:return"bool";case vn.DT_DOUBLE:return"float32";case vn.DT_STRING:return"string";default:return null}}function Yg(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function o1(e,t,a){let n=e[t];return n&&n.type?e3(n.type):a}function l1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>e3(r)):a}function B4(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function u1(e,t,a){let n=e[t];return n&&n.shape?B4(n.shape):a}function d1(e,t,a){let n=e[t];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):a}function p1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>L4(s,n)):a}function c1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>B4(r)):a}function h1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var zP=class{constructor(e,t,a){this.node=e,this.tensorMap=t,this.context=a,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,r)=>(n[r]=this.getAttr(r),n),{}))}getInput(e){return ba(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return ba(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return i1(this.node.rawAttrs,e,t);if(a.s!=null)return r1(this.node.rawAttrs,e,t);if(a.b!=null)return s1(this.node.rawAttrs,e,t);if(a.shape!=null)return u1(this.node.rawAttrs,e,t);if(a.type!=null)return o1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return d1(this.node.rawAttrs,e,t);if(a.list.s!=null)return p1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return c1(this.node.rawAttrs,e,t);if(a.list.b!=null)return h1(this.node.rawAttrs,e,t);if(a.list.type!=null)return l1(this.node.rawAttrs,e,t)}return t}},Zt={};Xe(Zt,{OP_SCOPE_SUFFIX:()=>Y1,abs:()=>ja,acos:()=>ry,acosh:()=>sy,add:()=>be,addN:()=>uh,all:()=>iy,any:()=>oy,argMax:()=>tr,argMin:()=>ly,asin:()=>uy,asinh:()=>dy,atan:()=>py,atan2:()=>cy,atanh:()=>hy,avgPool:()=>x2,avgPool3d:()=>xy,basicLSTMCell:()=>Ay,batchNorm:()=>Qd,batchNorm2d:()=>yy,batchNorm3d:()=>by,batchNorm4d:()=>vy,batchToSpaceND:()=>A2,bincount:()=>y2,booleanMaskAsync:()=>Qb,broadcastArgs:()=>wy,broadcastTo:()=>rl,buffer:()=>Me,cast:()=>He,ceil:()=>ky,clipByValue:()=>Iy,clone:()=>wa,complex:()=>Ar,concat:()=>at,concat1d:()=>Sy,concat2d:()=>nu,concat3d:()=>Ty,concat4d:()=>Cy,conv1d:()=>Ny,conv2d:()=>ep,conv2dTranspose:()=>Ry,conv3d:()=>My,conv3dTranspose:()=>$y,cos:()=>_y,cosh:()=>Py,cosineWindow:()=>Ah,cumprod:()=>Fy,cumsum:()=>Oy,denseBincount:()=>Dy,depthToSpace:()=>zy,depthwiseConv2d:()=>dh,diag:()=>Ly,dilation2d:()=>By,div:()=>me,divNoNan:()=>Wy,dot:()=>Vy,dropout:()=>r4,einsum:()=>Uy,elu:()=>v2,enclosingPowerOfTwo:()=>K2,equal:()=>b2,erf:()=>Gy,euclideanNorm:()=>qy,exp:()=>Xr,expandDims:()=>Gt,expm1:()=>Xy,eye:()=>k2,fft:()=>gh,fill:()=>ar,floor:()=>I2,floorDiv:()=>Yd,fused:()=>Z2,gather:()=>S2,gatherND:()=>n4,greater:()=>np,greaterEqual:()=>T2,ifft:()=>hd,imag:()=>Zd,image:()=>ge,inTopKAsync:()=>s4,irfft:()=>H2,isFinite:()=>Ky,isInf:()=>Zy,isNaN:()=>Yy,leakyRelu:()=>C2,less:()=>Jy,lessEqual:()=>ph,linalg:()=>h4,linspace:()=>Qy,localResponseNormalization:()=>eb,log:()=>pl,log1p:()=>N2,logSigmoid:()=>ab,logSoftmax:()=>nb,logSumExp:()=>R2,logicalAnd:()=>pd,logicalNot:()=>M2,logicalOr:()=>$2,logicalXor:()=>rb,losses:()=>f4,lowerBound:()=>sb,matMul:()=>st,max:()=>pa,maxPool:()=>_2,maxPool3d:()=>ib,maxPoolWithArgmax:()=>ob,maximum:()=>P2,mean:()=>cd,meshgrid:()=>lb,min:()=>qr,minimum:()=>F2,mirrorPad:()=>ub,mod:()=>ru,moments:()=>db,movingAverage:()=>e4,mul:()=>ae,multiRNNCell:()=>pb,multinomial:()=>cb,neg:()=>qn,norm:()=>ap,notEqual:()=>O2,oneHot:()=>Sc,ones:()=>Lr,onesLike:()=>hb,op:()=>D,outerProduct:()=>fb,pad:()=>nr,pad1d:()=>mb,pad2d:()=>gb,pad3d:()=>xb,pad4d:()=>Ab,pool:()=>yb,pow:()=>dl,prelu:()=>z2,print:()=>t2,prod:()=>bb,raggedGather:()=>vb,raggedRange:()=>wb,raggedTensorToTensor:()=>kb,rand:()=>Ib,randomGamma:()=>Sb,randomNormal:()=>W2,randomStandardNormal:()=>Tb,randomUniform:()=>V2,range:()=>cl,real:()=>ul,reciprocal:()=>Cb,relu:()=>rp,relu6:()=>U2,reshape:()=>J,reverse:()=>Kr,reverse1d:()=>Nb,reverse2d:()=>Eb,reverse3d:()=>Rb,reverse4d:()=>Mb,rfft:()=>xh,round:()=>G2,rsqrt:()=>$b,scalar:()=>Fe,scatterND:()=>t4,searchSorted:()=>hh,selu:()=>_b,separableConv2d:()=>Pb,setdiff1dAsync:()=>Fb,sigmoid:()=>Da,sign:()=>Ob,signal:()=>c4,sin:()=>Db,sinh:()=>zb,slice:()=>Pe,slice1d:()=>Lb,slice2d:()=>Bb,slice3d:()=>sp,slice4d:()=>fh,softmax:()=>mh,softplus:()=>E2,spaceToBatchND:()=>D2,sparse:()=>m4,sparseToDense:()=>a4,spectral:()=>p4,split:()=>ka,sqrt:()=>Yn,square:()=>kn,squaredDifference:()=>j2,squeeze:()=>_e,stack:()=>sa,step:()=>q2,stridedSlice:()=>Wb,string:()=>g4,sub:()=>fe,sum:()=>tt,tan:()=>Vb,tanh:()=>Cc,tensor:()=>Be,tensor1d:()=>Ht,tensor2d:()=>Xn,tensor3d:()=>l2,tensor4d:()=>Ub,tensor5d:()=>Gb,tensor6d:()=>Hb,tile:()=>Vr,topk:()=>jb,transpose:()=>Ls,truncatedNormal:()=>qb,unique:()=>Xb,unsortedSegmentSum:()=>Kb,unstack:()=>Ta,upperBound:()=>Zb,variable:()=>Yb,where:()=>Bs,whereAsync:()=>X2,zeros:()=>hn,zerosLike:()=>Xa});var LP=(e,t,a,n=Zt)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[n.add(k("a",e,t,a),k("b",e,t,a))];case"AddN":return[n.addN(k("tensors",e,t,a))];case"FloorMod":case"Mod":return[n.mod(k("a",e,t,a),k("b",e,t,a))];case"Mul":return[n.mul(k("a",e,t,a),k("b",e,t,a))];case"RealDiv":case"Div":return[n.div(k("a",e,t,a),k("b",e,t,a))];case"DivNoNan":return[n.divNoNan(k("a",e,t,a),k("b",e,t,a))];case"FloorDiv":return[n.floorDiv(k("a",e,t,a),k("b",e,t,a))];case"Sub":return[n.sub(k("a",e,t,a),k("b",e,t,a))];case"Minimum":return[n.minimum(k("a",e,t,a),k("b",e,t,a))];case"Maximum":return[n.maximum(k("a",e,t,a),k("b",e,t,a))];case"Pow":return[n.pow(k("a",e,t,a),k("b",e,t,a))];case"SquaredDifference":return[n.squaredDifference(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},BP=(e,t,a,n=Zt)=>{switch(e.op){case"Abs":case"ComplexAbs":return[n.abs(k("x",e,t,a))];case"Acos":return[n.acos(k("x",e,t,a))];case"Acosh":return[n.acosh(k("x",e,t,a))];case"Asin":return[n.asin(k("x",e,t,a))];case"Asinh":return[n.asinh(k("x",e,t,a))];case"Atan":return[n.atan(k("x",e,t,a))];case"Atan2":return[n.atan2(k("x",e,t,a),k("y",e,t,a))];case"Atanh":return[n.atanh(k("x",e,t,a))];case"Ceil":return[n.ceil(k("x",e,t,a))];case"Complex":return[n.complex(k("real",e,t,a),k("imag",e,t,a))];case"Cos":return[n.cos(k("x",e,t,a))];case"Cosh":return[n.cosh(k("x",e,t,a))];case"Elu":return[n.elu(k("x",e,t,a))];case"Erf":return[n.erf(k("x",e,t,a))];case"Exp":return[n.exp(k("x",e,t,a))];case"Expm1":return[n.expm1(k("x",e,t,a))];case"Floor":return[n.floor(k("x",e,t,a))];case"Log":return[n.log(k("x",e,t,a))];case"Log1p":return[n.log1p(k("x",e,t,a))];case"Imag":return[n.imag(k("x",e,t,a))];case"Neg":return[n.neg(k("x",e,t,a))];case"Reciprocal":return[n.reciprocal(k("x",e,t,a))];case"Real":return[n.real(k("x",e,t,a))];case"Relu":return[n.relu(k("x",e,t,a))];case"Round":return[n.round(k("x",e,t,a))];case"Selu":return[n.selu(k("x",e,t,a))];case"Sigmoid":return[n.sigmoid(k("x",e,t,a))];case"Sin":return[n.sin(k("x",e,t,a))];case"Sign":return[n.sign(k("x",e,t,a))];case"Sinh":return[n.sinh(k("x",e,t,a))];case"Softplus":return[n.softplus(k("x",e,t,a))];case"Sqrt":return[n.sqrt(k("x",e,t,a))];case"Square":return[n.square(k("x",e,t,a))];case"Tanh":return[n.tanh(k("x",e,t,a))];case"Tan":return[n.tan(k("x",e,t,a))];case"ClipByValue":return[n.clipByValue(k("x",e,t,a),k("clipValueMin",e,t,a),k("clipValueMax",e,t,a))];case"Relu6":return[n.relu6(k("x",e,t,a))];case"Rsqrt":return[n.rsqrt(ba(e.inputNames[0],t,a))];case"Prod":return[n.prod(k("x",e,t,a),k("axes",e,t,a))];case"LeakyRelu":return[n.leakyRelu(k("x",e,t,a),k("alpha",e,t,a))];case"Prelu":return[n.prelu(k("x",e,t,a),k("alpha",e,t,a))];case"IsNan":return[n.isNaN(ba(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function wn(e,t,a=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>a+` Shapes ${e} and ${t} must match`);for(let n=0;na+` Shapes ${e} and ${t} must match`)}}}function Jg(e){return!(typeof e=="number"||e.some(t=>t<0))}function Vu(e,t,a){let n=f1(e,a),r=!Jg(n);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(r&&t.forEach(s=>{n=f1(s.shape,n)}),!Jg(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function f1(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let a=[];for(let n=0;n=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);a[n]=r>=0?r:s}return a}var WP=class{constructor(e,t,a,n,r,s,i){this.name=e,this.dtype=t,this.maxSize=a,this.elementShape=n,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Fe(0),Fn(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let a=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, + because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),wn(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),a.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(a.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);a.tensor=t,Fn(t),a.written=!0,this.tensors[e]=a}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((a,n)=>this.write(a,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${a} vs. ${this.maxSize})`);this.writeMany(e,Ta(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let a=0,n=e.map(o=>(a+=o,a));if(a!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${a}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let r=a===0?0:t.size/a,s=[];Ee(()=>{t=J(t,[1,a,r]);for(let o=0;o{if(a!==r.dtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${r.dtype}`);kn(t,r.shape,"TensorList shape mismatch: "),qn(r)}),this.idTensor=Fe(0),this.maxNumElements=n,qn(this.idTensor)}get id(){return this.idTensor.id}copy(){return new ll([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,a=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(a!==-1&&this.tensors.length!==a)throw new Error(`Operation expected a list with ${a} elements but got a list with ${this.tensors.length} elements.`);kn(e,this.elementShape,"TensorList shape mismatch: ");let n=Fu(this.elementShape,this.tensors,e);return Ee(()=>{let r=this.tensors.map(s=>J(s,n));return sa(r,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let a=Fu(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,kn(n.shape,e,"TensorList shape mismatch: "),J(n,a)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(kn(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");qn(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new ll([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let a=0;athis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);kn(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=Fu(this.elementShape,this.tensors,t);return J(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);kn(this.elementShape,t.shape,"TensorList shape mismatch: "),qn(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,a){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);kn(this.elementShape,a,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=Fu(this.elementShape,this.tensors,a);return e.length===0?ze([],[0].concat(n)):Ee(()=>{let r=e.map(s=>J(this.tensors[s],n));return sa(r,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);kn(this.elementShape,t,"TensorList shape mismatch: ");let a=Fu(this.elementShape,this.tensors,t);return this.size()===0?ze([],[0].concat(a)):Ee(()=>{let n=this.tensors.map(r=>J(r,a));return at(n,0)})}};function xP(e,t,a){let n=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==a)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${a}`);let r=e.shape.slice(1);kn(r,t,"TensorList shape mismatch: ");let s=Ta(e);return new ll(s,t,n)}function bP(e,t,a,n){return new ll([],e,t,n)}function vP(e,t,a,n){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(n!=null&&n!==-1&&r>=n)throw new Error(`Max index must be < array size (${r} vs. ${n})`);let s=new ll([],a,e.dtype,n),i=Ta(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function wP(e,t,a){let n=0,r=t.map(d=>(n+=d,n));if(n!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${a}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let r=a===0?0:t.size/a,s=[];$e(()=>{t=J(t,[1,a,r]);for(let o=0;o{if(a!==r.dtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${r.dtype}`);wn(t,r.shape,"TensorList shape mismatch: "),Fn(r)}),this.idTensor=Fe(0),this.maxNumElements=n,Fn(this.idTensor)}get id(){return this.idTensor.id}copy(){return new hl([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,a=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(a!==-1&&this.tensors.length!==a)throw new Error(`Operation expected a list with ${a} elements but got a list with ${this.tensors.length} elements.`);wn(e,this.elementShape,"TensorList shape mismatch: ");let n=Vu(this.elementShape,this.tensors,e);return $e(()=>{let r=this.tensors.map(s=>J(s,n));return sa(r,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let a=Vu(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,wn(n.shape,e,"TensorList shape mismatch: "),J(n,a)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(wn(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Fn(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new hl([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let a=0;athis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);wn(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=Vu(this.elementShape,this.tensors,t);return J(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);wn(this.elementShape,t.shape,"TensorList shape mismatch: "),Fn(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,a){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);wn(this.elementShape,a,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=Vu(this.elementShape,this.tensors,a);return e.length===0?Be([],[0].concat(n)):$e(()=>{let r=e.map(s=>J(this.tensors[s],n));return sa(r,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);wn(this.elementShape,t,"TensorList shape mismatch: ");let a=Vu(this.elementShape,this.tensors,t);return this.size()===0?Be([],[0].concat(a)):$e(()=>{let n=this.tensors.map(r=>J(r,a));return at(n,0)})}};function VP(e,t,a){let n=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==a)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${a}`);let r=e.shape.slice(1);wn(r,t,"TensorList shape mismatch: ");let s=Ta(e);return new hl(s,t,n)}function UP(e,t,a,n){return new hl([],e,t,n)}function GP(e,t,a,n){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(n!=null&&n!==-1&&r>=n)throw new Error(`Max index must be < array size (${r} vs. ${n})`);let s=new hl([],a,e.dtype,n),i=Ta(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function HP(e,t,a){let n=0,r=t.map(p=>(n+=p,n));if(n!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${n}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=g1(s,a),o=n===0?0:e.size/n,l=Ee(()=>{let d=[];e=J(e,[1,n,o]);for(let c=0;c{switch(e.op){case"If":case"StatelessIf":{let n=k("thenBranch",e,t,a),r=k("elseBranch",e,t,a),s=k("cond",e,t,a),i=k("args",e,t,a);return(await s.data())[0]?a.functionMap[n].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap):a.functionMap[r].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap)}case"While":case"StatelessWhile":{let n=k("body",e,t,a),r=k("cond",e,t,a),s=k("args",e,t,a),i=await a.functionMap[r].executeFunctionAsync(s,a.tensorArrayMap,a.tensorListMap),o=s.map(d=>d.id),l=await i[0].data();i.forEach(d=>{!d.kept&&o.indexOf(d.id)===-1&&d.dispose()});let u=s;for(;l[0];){let d=u;u=await a.functionMap[n].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);let c=u.map(h=>h.id);d.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()});let p=await a.functionMap[r].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);l=await p[0].data(),p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let n=k("pred",e,t,a);return[fr(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=fr(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>ba(r,t,a)!==void 0);if(n){let r=ba(n,t,a);return[fr(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[fr(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[fr(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[fr(n)]}case"TensorArrayV3":{let n=k("size",e,t,a),r=k("dtype",e,t,a),s=k("elementShape",e,t,a),i=k("dynamicSize",e,t,a),o=k("clearAfterRead",e,t,a),l=k("identicalElementShapes",e,t,a),u=k("name",e,t,a),d=new AP(u,r,n,s,l,i,o);return a.addTensorArray(d),[d.idTensor,Fe(1)]}case"TensorArrayWriteV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a);return[a.getTensorArray(n.id).read(r)]}case"TensorArrayGatherV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("dtype",e,t,a);return[a.getTensorArray(n.id).gather(r,s)]}case"TensorArrayScatterV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id),s=k("dtype",e,t,a);return[r.concat(s)]}case"TensorArraySplitV3":{let n=k("tensorArrayId",e,t,a),r=k("tensor",e,t,a),s=k("lengths",e,t,a),i=a.getTensorArray(n.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return[Fe(r.size(),"int32")]}case"TensorArrayCloseV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorList(n.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let n=k("indices",e,t,a),r=k("tensor",e,t,a),s=k("elementShape",e,t,a),i=k("numElements",e,t,a),o=vP(r,n,s,i);return a.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=k("elementShape",e,t,a),r=k("elementDType",e,t,a),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,a),o=e.op==="TensorListReserve"?-1:i,l=bP(n,r,i,o);return a.addTensorList(l),[l.idTensor]}case"TensorListGather":{let n=k("tensorListId",e,t,a),r=k("indices",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).gather(r,i,s)]}case"TensorListStack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=k("numElements",e,t,a);return[a.getTensorList(n.id).stack(r,s,i)]}case"TensorListFromTensor":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=xP(n,r,s);return a.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id),s=k("dtype",e,t,a),i=k("elementShape",e,t,a);return[r.concat(s,i)]}case"TensorListPushBack":{let n=k("tensorListId",e,t,a),r=k("tensor",e,t,a),s=a.getTensorList(n.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a);return[a.getTensorList(n.id).popBack(r,s)]}case"TensorListSplit":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("lengths",e,t,a),i=wP(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Fe(r.size(),"int32")]}case"TensorListResize":{let n=k("tensorListId",e,t,a),r=k("size",e,t,a),s=a.getTensorList(n.id).resize(r);return a.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function uy(e,t,a){let[n,r]=k("fusedOps",e,t,a),s=n==="biasadd",i=!s,o=r==="prelu",l=n==="fusedbatchnorm",u=k("numArgs",e,t,a);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let d=k("strides",e,t,a),c=hc(e,t,a),p=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[f,m]=k("args",e,t,a);i&&(m=f,f=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:d,pad:c,dataFormat:p,dilations:h,biasArg:f,preluArg:m,activationFunc:r,leakyreluAlpha:g}}var IP=(e,t,a,n=oa)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilation",e,t,a);return[n.conv1d(k("x",e,t,a),k("filter",e,t,a),r,s,i,o)]}case"Conv2D":{let r=k("strides",e,t,a),s=hc(e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv2d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:c}=uy(e,t,a);return[n.fused.conv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:c}=uy(e,t,a);return[n.fused.depthwiseConv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,a),s=k("strides",e,t,a),i=hc(e,t,a);return[n.conv2dTranspose(k("x",e,t,a),k("filter",e,t,a),r,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,a),s=hc(e,t,a),i=k("dilations",e,t,a),o=k("dataFormat",e,t,a).toUpperCase();return[n.depthwiseConv2d(k("input",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv3d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2],r[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a),o=k("includeBatchInIndex",e,t,a),{result:l,indexes:u}=n.maxPoolWithArgmax(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s,o);return[l,u]}case"AvgPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dilations",e,t,a),o=r[1],l=r[2],u=i[1],d=i[2];return[n.dilation2d(k("x",e,t,a),k("filter",e,t,a),[o,l],s,[u,d],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},SP=(e,t,a,n=oa)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,a),s=k("dtype",e,t,a),i=k("value",e,t,a);return[n.fill(r,i,s)]}case"LinSpace":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("num",e,t,a);return[n.linspace(r,s,i)]}case"Multinomial":{let r=k("logits",e,t,a),s=k("numSamples",e,t,a),i=k("seed",e,t,a);return[n.multinomial(r,s,i)]}case"OneHot":{let r=k("indices",e,t,a),s=k("depth",e,t,a),i=k("onValue",e,t,a),o=k("offValue",e,t,a),l=k("dtype",e,t,a);return[n.oneHot(r,s,i,o,l)]}case"Ones":return[n.ones(k("shape",e,t,a),k("dtype",e,t,a))];case"OnesLike":return[n.onesLike(k("x",e,t,a))];case"RandomStandardNormal":return[n.randomStandardNormal(k("shape",e,t,a),k("dtype",e,t,a),k("seed",e,t,a))];case"RandomUniform":return[n.randomUniform(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("dtype",e,t,a))];case"Range":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("step",e,t,a);return[n.range(r,s,i,k("dtype",e,t,a))]}case"TruncatedNormal":{let r=k("shape",e,t,a),s=k("mean",e,t,a),i=k("stdDev",e,t,a),o=k("seed",e,t,a);return[n.truncatedNormal(r,s,i,k("dtype",e,t,a),o)]}case"Zeros":return[n.zeros(k("shape",e,t,a),k("dtype",e,t,a))];case"ZerosLike":return[n.zerosLike(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Om(e,t,a){let n=k("boxes",e,t,a),r=k("scores",e,t,a),s=k("maxOutputSize",e,t,a),i=k("iouThreshold",e,t,a),o=k("scoreThreshold",e,t,a),l=k("softNmsSigma",e,t,a);return{boxes:n,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var TP=async(e,t,a,n,r=oa)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:d}=Om(e,t,a),c=await r.image.nonMaxSuppressionWithScoreAsync(s,i,o,l,u,d);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Om(e,t,a),d=k("padToMaxOutputSize",e,t,a),c=await r.image.nonMaxSuppressionPaddedAsync(s,i,o,l,u,d);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Om(e,t,a);return[await r.image.nonMaxSuppressionAsync(s,i,o,l,u)]}case"Where":{let s=r.cast(k("condition",e,t,a),"bool"),i=[await r.whereAsync(s)];return s.dispose(),i}case"ListDiff":return r.setdiff1dAsync(k("x",e,t,a),k("y",e,t,a));default:throw TypeError(`Node type ${e.op} is not implemented`)}},CP=(e,t,a,n=oa)=>{switch(e.op){case"LowerBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.lowerBound(r,s)]}case"TopKV2":{let r=k("x",e,t,a),s=k("k",e,t,a),i=k("sorted",e,t,a),o=n.topk(r,s,i);return[o.values,o.indices]}case"UpperBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.upperBound(r,s)]}case"Unique":{let r=k("x",e,t,a),s=n.unique(r);return[s.values,s.indices]}case"UniqueV2":{let r=k("x",e,t,a),s=k("axis",e,t,a),i=n.unique(r,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},NP=(e,t,a,n=oa)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[ba(e.name,t,a)||r];case"Placeholder":return[ba(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let d=k("x",e,t,a);return[fr(d)]}case"IdentityN":return k("x",e,t,a).map(d=>fr(d));case"Snapshot":let s=k("x",e,t,a);return[fr(s)];case"Shape":return[n.tensor1d(k("x",e,t,a).shape,"int32")];case"ShapeN":return k("x",e,t,a).map(d=>n.tensor1d(d.shape));case"Size":return[n.scalar(k("x",e,t,a).size,"int32")];case"Rank":return[n.scalar(k("x",e,t,a).rank,"int32")];case"NoOp":return[n.scalar(1)];case"Print":let i=k("x",e,t,a),o=k("data",e,t,a),l=k("message",e,t,a),u=k("summarize",e,t,a);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(l);for(let d=0;de.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Fe(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let a=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Ee(()=>{let n=Ta(t),r=a.length,s=n.length;v.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i{let n=[];for(let r=0;r{switch(e.op){case"HashTable":case"HashTableV2":{let r=n.getHashTableHandleByName(e.name);if(r!=null)return[r];{let s=k("keyDType",e,t,a),i=k("valueDType",e,t,a),o=new EP(s,i);return n.addHashTable(e.name,o),[o.handle]}}case"LookupTableImport":case"LookupTableImportV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("values",e,t,a);return[await n.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("defaultValue",e,t,a);return[await n.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=k("tableHandle",e,t,a,n);return[n.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},MP=(e,t,a,n=oa)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeBilinear(r,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeNearestNeighbor(r,[s[0],s[1]],i,o)]}case"CropAndResize":{let r=k("image",e,t,a),s=k("boxes",e,t,a),i=k("boxInd",e,t,a),o=k("cropSize",e,t,a),l=k("method",e,t,a),u=k("extrapolationValue",e,t,a);return[n.image.cropAndResize(r,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let r=k("images",e,t,a),s=k("transforms",e,t,a),i=k("outputShape",e,t,a),o=k("fillValue",e,t,a),l=k("interpolation",e,t,a),u=k("fillMode",e,t,a);return[n.image.transform(r,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},$P=(e,t,a,n=oa)=>{switch(e.op){case"Equal":return[n.equal(k("a",e,t,a),k("b",e,t,a))];case"NotEqual":return[n.notEqual(k("a",e,t,a),k("b",e,t,a))];case"Greater":return[n.greater(k("a",e,t,a),k("b",e,t,a))];case"GreaterEqual":return[n.greaterEqual(k("a",e,t,a),k("b",e,t,a))];case"Less":return[n.less(k("a",e,t,a),k("b",e,t,a))];case"LessEqual":return[n.lessEqual(k("a",e,t,a),k("b",e,t,a))];case"LogicalAnd":return[n.logicalAnd(k("a",e,t,a),k("b",e,t,a))];case"LogicalNot":return[n.logicalNot(k("a",e,t,a))];case"LogicalOr":return[n.logicalOr(k("a",e,t,a),k("b",e,t,a))];case"Select":case"SelectV2":return[n.where(k("condition",e,t,a),k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},_P=(e,t,a,n=oa)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[n.matMul(k("a",e,t,a),k("b",e,t,a),k("transposeA",e,t,a),k("transposeB",e,t,a))];case"Einsum":return[n.einsum(k("equation",e,t,a),...k("tensors",e,t,a))];case"Transpose":return[n.transpose(k("x",e,t,a),k("perm",e,t,a))];case"_FusedMatMul":let[r,s]=k("fusedOps",e,t,a),i=r==="biasadd",o=s==="prelu",l=k("numArgs",e,t,a),u=k("leakyreluAlpha",e,t,a);if(i){if(o&&l!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&l!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[d,c]=k("args",e,t,a);return[n.fused.matMul({a:k("a",e,t,a),b:k("b",e,t,a),transposeA:k("transposeA",e,t,a),transposeB:k("transposeB",e,t,a),bias:d,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},FP=(e,t,a,n=oa)=>{switch(e.op){case"EuclideanNorm":return[n.euclideanNorm(k("x",e,t,a),k("axis",e,t,a),k("keepDims",e,t,a))];case"FusedBatchNorm":case"FusedBatchNormV2":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"FusedBatchNormV3":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"LRN":return[n.localResponseNormalization(k("x",e,t,a),k("radius",e,t,a),k("bias",e,t,a),k("alpha",e,t,a),k("beta",e,t,a))];case"Softmax":return[n.softmax(k("x",e,t,a))];case"LogSoftmax":return[n.logSoftmax(k("x",e,t,a))];case"SparseToDense":return[n.sparseToDense(k("sparseIndices",e,t,a),k("outputShape",e,t,a),k("sparseValues",e,t,a),k("defaultValue",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},PP=(e,t,a,n=oa)=>{switch(e.op){case"Max":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.max(k("x",e,t,a),o,l)]}case"Mean":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.mean(k("x",e,t,a),o,l)]}case"Min":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.min(k("x",e,t,a),o,l)]}case"Sum":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.sum(k("x",e,t,a),o,l)]}case"All":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.all(k("x",e,t,a),o,l)]}case"Any":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.any(k("x",e,t,a),o,l)]}case"ArgMax":{let o=k("axis",e,t,a);return[n.argMax(k("x",e,t,a),o)]}case"ArgMin":{let o=k("axis",e,t,a);return[n.argMin(k("x",e,t,a),o)]}case"Prod":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.prod(k("x",e,t,a),o,l)]}case"Cumprod":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumprod(k("x",e,t,a),o,l,u)]}case"Cumsum":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumsum(k("x",e,t,a),o,l,u)]}case"Bincount":let r=k("x",e,t,a),s=k("weights",e,t,a),i=k("size",e,t,a);return[n.bincount(r,s,i)];case"DenseBincount":{let o=k("x",e,t,a),l=k("weights",e,t,a),u=k("size",e,t,a),d=k("binaryOutput",e,t,a);return[n.denseBincount(o,l,u,d)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},OP=(e,t,a,n=oa)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,a),s=k("axis",e,t,a),i=k("tensors",e,t,a);return i=i.slice(0,r),[n.concat(i,s)]}case"Gather":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gather(r,n.cast(s,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,a),s=k("batchDims",e,t,a),i=k("x",e,t,a),o=k("indices",e,t,a);return[n.gather(i,n.cast(o,"int32"),r,s)]}case"Reverse":{let r=k("dims",e,t,a),s=[];for(let o=0;o{let r=k("axis",e,t,a),s=k("tensors",e,t,a),i=s[0].shape,o=n.squeeze(s[0]).shape,l=s.map(u=>{let d=v.arraysEqual(u.shape,i);if(!d&&!v.arraysEqual(n.squeeze(u).shape,o))throw new Error("the input tensors shape does not match");return d?u:n.reshape(u,i)});return[n.stack(l,r)]});case"Unpack":{let r=k("axis",e,t,a),s=k("tensor",e,t,a);return n.unstack(s,r)}case"Tile":{let r=k("reps",e,t,a);return[n.tile(k("x",e,t,a),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,a),s=k("numOrSizeSplits",e,t,a),i=k("x",e,t,a);return n.split(i,s,r)}case"ScatterNd":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("shape",e,t,a);return[n.scatterND(r,s,i)]}case"GatherNd":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gatherND(r,s)]}case"SparseToDense":{let r=k("sparseIndices",e,t,a),s=k("outputShape",e,t,a),i=k("sparseValues",e,t,a),o=k("defaultValue",e,t,a);return[n.sparseToDense(r,i,s,i.dtype===o.dtype?o:n.cast(o,i.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},DP=(e,t,a,n=oa)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=n.sparse.sparseFillEmptyRows(k("indices",e,t,a),k("values",e,t,a),k("denseShape",e,t,a),k("defaultValue",e,t,a));return[r,s,i,o]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=n.sparse.sparseReshape(k("inputIndices",e,t,a),k("inputShape",e,t,a),k("newShape",e,t,a));return[r,s]}case"SparseSegmentMean":return[n.sparse.sparseSegmentMean(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];case"SparseSegmentSum":return[n.sparse.sparseSegmentSum(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},zP=(e,t,a,n=oa)=>{switch(e.op){case"FFT":return[n.fft(k("x",e,t,a))];case"IFFT":return[n.ifft(k("x",e,t,a))];case"RFFT":return[n.rfft(k("x",e,t,a))];case"IRFFT":return[n.irfft(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},LP=(e,t,a,n=oa)=>{switch(e.op){case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=n.string.stringNGrams(k("data",e,t,a),k("dataSplits",e,t,a),k("separator",e,t,a),k("nGramWidths",e,t,a),k("leftPad",e,t,a),k("rightPad",e,t,a),k("padWidth",e,t,a),k("preserveShortSequences",e,t,a));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:i}=n.string.stringSplit(k("input",e,t,a),k("delimiter",e,t,a),k("skipEmpty",e,t,a));return[r,s,i]}case"StringToHashBucketFast":return[n.string.stringToHashBucketFast(k("input",e,t,a),k("numBuckets",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},BP=(e,t,a,n=oa)=>{switch(e.op){case"Cast":return[n.cast(k("x",e,t,a),k("dtype",e,t,a))];case"ExpandDims":{let r=k("axis",e,t,a);return[n.expandDims(k("x",e,t,a),r)]}case"Squeeze":{let r=k("axis",e,t,a);return[n.squeeze(k("x",e,t,a),r)]}case"Reshape":return[n.reshape(k("x",e,t,a),k("shape",e,t,a))];case"MirrorPad":return[n.mirrorPad(k("x",e,t,a),k("padding",e,t,a),k("mode",e,t,a))];case"PadV2":case"Pad":return[n.pad(k("x",e,t,a),k("padding",e,t,a),k("constantValue",e,t,a))];case"SpaceToBatchND":{let r=k("blockShape",e,t,a),s=k("paddings",e,t,a);return[n.spaceToBatchND(k("x",e,t,a),r,s)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,a),s=k("crops",e,t,a);return[n.batchToSpaceND(k("x",e,t,a),r,s)]}case"DepthToSpace":{let r=k("blockSize",e,t,a),s=k("dataFormat",e,t,a).toUpperCase();return[n.depthToSpace(k("x",e,t,a),r,s)]}case"BroadcastTo":return[n.broadcastTo(k("x",e,t,a),k("shape",e,t,a))];case"BroadcastArgs":return[n.broadcastArgs(k("s0",e,t,a),k("s1",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function dy(e,t,a,n,r=Ee){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>gP(i,o,l));case"basic_math":return r(()=>yP(i,o,l));case"control":return kP(i,o,l);case"convolution":return r(()=>IP(i,o,l));case"creation":return r(()=>SP(i,o,l));case"dynamic":return TP(i,o,l);case"evaluation":return r(()=>CP(i,o,l));case"image":return r(()=>MP(i,o,l));case"graph":return r(()=>NP(i,o,l));case"logical":return r(()=>$P(i,o,l));case"matrices":return r(()=>_P(i,o,l));case"normalization":return r(()=>FP(i,o,l));case"reduction":return r(()=>PP(i,o,l));case"slice_join":return r(()=>OP(i,o,l));case"sparse":return r(()=>DP(i,o,l));case"spectral":return r(()=>zP(i,o,l));case"string":return r(()=>LP(i,o,l));case"transformation":return r(()=>BP(i,o,l));case"hash_table":return RP(i,o,l,n);case"custom":let u=M4(i.op);if(u&&u.customExecutor)return u.customExecutor(new mP(i,o,l));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,a);return v.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var py=class{constructor(e={},t={},a={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function cy(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(p=>ja(p)[0]),d=[];n!=null&&(d=n.map(p=>ja(p.name)[0]));let c=[...t];for(;c.length>0;){let p=c.pop();if((Q4(p)||jP(p)||HP(p))&&i==null&&(i=p,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(p.name),a[p.name]==null&&u.indexOf(p.name)===-1&&d.indexOf(p.name)===-1){if(p.inputs.length===0){s.push(p.name);continue}p.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),c.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function WP(e,t,a){let{usedNodes:n,inputs:r}=a,s=[],i=Object.keys(r).map(d=>ja(d)[0]).map(d=>e.nodes[d]),o=e.initNodes;i.forEach(d=>{n.has(d.name)&&s.push(d)}),e.weights.forEach(d=>{n.has(d.name)&&s.push(d)}),o!=null&&o.forEach(d=>{n.has(d.name)&&s.push(d)});let l=new Set,u=[];for(;s.length>0;){let d=s.pop();l.add(d.name),t[d.name]||u.push(d),d.children.forEach(c=>{!l.has(c.name)&&n.has(c.name)&&c.inputs.every(p=>l.has(p.name))&&s.push(c)})}return u}var VP=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],GP=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],UP=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function Q4(e){return VP.indexOf(e.op)>=0}function jP(e){return GP.indexOf(e.op)>=0}function HP(e){return UP.indexOf(e.op)>=0}var y1=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(a=>{this._functionExecutorMap[a]=new y1(e.functions[a],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(a=>e[a].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let a=e.map(r=>r.name).sort(),n=t.map(r=>r.name).sort();return a.join(this.SEPERATOR)+"--"+n.join(this.SEPERATOR)}compile(e,t){let a=cy(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:r,syncInputs:s}=a;if(r!=null)throw new Error(`This execution contains the node '${r.name}', which has the dynamic op '${r.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(n.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${n}]`)}return WP(this.graph,this.weightMap,a)}execute(e,t){e=this.mapInputs(e);let a=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=a.map(d=>this.graph.nodes[ja(d)[0]]),r=t.map(d=>ja(d)[0]),s=r.map(d=>this.graph.nodes[d]);this.resetIntermediateTensors(),s.length===0&&(s=this._outputs);let i=this.getCompilationKey(n,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));let l={},u={};return Ee(()=>{let d=new py(this.weightMap,l,u,this.functionExecutorMap),c=Object.assign({},this.weightMap);Object.keys(e).forEach(f=>{let[m,g]=ja(f),y=[];y[g]=e[f],c[m]=y});let p=this.getFrozenTensorIds(c),h={};for(let f=0;fba(f,c,d))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(a=>e[a]).map(a=>a.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,a,n,r,s,i){t.category==="control"||s.indexOf(e)!==-1||(a[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=XF(o.name,a,n);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!r.has(u.id)){let d=i[u.id];if(d===1){if(!this.keepTensorForDebug)u.dispose();else{let[c,p]=jn(t.name,n);this.intermediateTensors[c]?this.intermediateTensors[c][p]=u:(this.intermediateTensors[c]=[],this.intermediateTensors[c][p]=u)}delete i[u.id]}else d!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(t=>{t&&!t.kept&&!t.isDisposed&&!this.keepIds.has(t.id)&&t.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,a=!1,n={},r={}){a||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=V().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(u){console.warn(u.message)}this.resetIntermediateTensors();let s=new py(this.weightMap,n,r,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,s,t,a);let i=t.map(u=>ba(u,this.tensorsMap,s)),o=i.map(u=>u.id),l=Object.keys(e).map(u=>e[u].id);return this.keepIds=new Set([...o,...l,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&s.dispose(this.keepIds),i}async executeFunctionAsync(e,t,a){let n=e.reduce((r,s,i)=>(r[this.inputs[i].name]=s,r),{});return this._executeAsync(n,this.outputNodes,!0,t,a)}async executeWithControlFlow(e,t,a,n){let r=Object.keys(e),s=r.map(A=>this.graph.nodes[ja(A)[0]]),i=a.map(A=>ja(A)[0]),o=i.map(A=>this.graph.nodes[A]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:d,syncInputs:c}=cy(e,o,this.weightMap,this._initNodes),p=[...s,...this.graph.weights,...this._initNodes||[]].map(A=>({node:A,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(A=>{let[x,b]=ja(A),w=[];w[b]=e[A],h[x]=w});let f={},m=this.getFrozenTensorIds(h),g={};for(;p.length>0;){let A=this.processStack(s,p,t,h,g,m,i,f,l);await Promise.all(A)}d==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=o.filter(A=>!Q4(A)&&!ba(A.name,h,t)).map(A=>A.name);if(y.length>0){let A="";throw d!=null&&(A=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${c}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${r}]. Consider providing the following inputs: [${u}]. ${A}`)}return h}processStack(e,t,a,n,r,s,i,o,l){let u=[];for(;t.length>0;){let d=t.pop();a.currentContext=d.contexts;let c="";if(d.node.op==="Enter"&&k("isConstant",d.node,n,a)&&([c]=jn(d.node.name,a)),n[d.node.name]==null){let p=dy(d.node,n,a,this._resourceManager);c||([c]=jn(d.node.name,a));let h=a.currentContext;v.isPromise(p)?u.push(p.then(f=>(n[c]=f,a.currentContext=h,this.checkTensorForDisposal(c,d.node,n,a,s,i,o),this.processChildNodes(d.node,t,a,n,r,l),f))):(n[c]=p,this.checkTensorForDisposal(c,d.node,n,a,s,i,o),this.processChildNodes(d.node,t,a,n,r,l))}else this.processChildNodes(d.node,t,a,n,r,l)}return u}processChildNodes(e,t,a,n,r,s){e.children.forEach(i=>{let[o]=jn(i.name,a);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!ba(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})):i.inputNames.every(l=>!!ba(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let a=e[t],[n]=ja(t),r=this.graph.nodes[n];if(r.attrParams.shape&&r.attrParams.shape.value){let s=r.attrParams.shape.value,i=s.length===a.shape.length&&a.shape.every((o,l)=>s[l]===-1||s[l]===o);v.assert(i,()=>`The shape of dict['${r.name}'] provided in model.execute(dict) must be [${s}], but was [${a.shape}]`)}r.attrParams.dtype&&r.attrParams.dtype.value&&v.assert(a.dtype===r.attrParams.dtype.value,()=>`The dtype of dict['${r.name}'] provided in model.execute(dict) must be ${r.attrParams.dtype.value}, but was ${a.dtype}`)})}mapInputs(e){let t={};for(let a in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[a]!=null){let n=this._signature.inputs[a];t[n.name]=e[a]}else t[a]=e[a];return t}checkInputs(e){let t=Object.keys(e).filter(a=>{let[n]=ja(a);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[a]=ja(t);if(!this.graph.nodes[a])throw new Error(`The output '${t}' is not found in the graph`)})}},qP=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},XP="?tfjs-format=file",KP="model.json",op=class{constructor(e,t={},a=Hn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new qP}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return v.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,a=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(a=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}this.signature=a,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new y1(iy.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=iy.Instance.transformGraph(e.modelInitializer);this.initializer=new y1(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let a=this.io.getSaveHandlers(e);if(a.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(a.length>1)throw new Error(`Found more than one (${a.length}) save handlers for URL '${e}'`);e=a[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){let a=this.execute(e,this.outputNodes);if(this.structuredOutputKeys){let n=a instanceof dt?[a]:a,r={};return n.forEach((s,i)=>r[this.structuredOutputKeys[i]]=s),r}return a}normalizeInputs(e){if(!(e instanceof dt)&&!Array.isArray(e)){if(this.signature!=null&&this.signature.inputs!=null)for(let n in this.signature.inputs){let r=this.signature.inputs[n];r.resourceId!=null&&(e[n]=this.resourceIdToCapturedInput[r.resourceId])}return e}e=Array.isArray(e)?e:[e];let t=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+t!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-t} non-resource placeholders, while there are ${e.length} input tensors provided.`);let a=0;return this.inputNodes.reduce((n,r)=>{let s=this.signature?this.signature.inputs[r]:null;return s!=null&&s.resourceId!=null?n[r]=this.resourceIdToCapturedInput[s.resourceId]:n[r]=e[a++],n},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=Object.keys(this.initializerSignature.outputs);for(let a=0;a1?a:a[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let a=await this.executor.executeAsync(e,t);return a.length>1?a:a[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,a)=>(t[a]=[e[a]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Y(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function i3(e,t={},a=Hn){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&typeof e=="string"&&(e=YP(e));let n=new op(e,t,a);return await n.load(),n}function ZP(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[n,r]=e;if(!n)throw new Error("modelJSON must be the first element of the array");if(!r||!(r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let s=Hn.getWeightSpecs(n.weightsManifest),i=Hn.getModelArtifactsForJSONSync(n,s,r);t=Hn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Hn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new op(t);return a.load(),a}function YP(e){return e.endsWith("/")||(e=e+"/"),`${e}${KP}${XP}`}var JP="4.0.0";function Ae(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var QP=Tn.whereImpl,Ph=class extends fl{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new md(this,kt())}nextDataId(){return Ph.nextDataId++}write(e,t,a){this.firstUse&&(this.firstUse=!1,V().get("IS_NODE")&&T.warn(` + ${n}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=f1(s,a),o=n===0?0:e.size/n,l=$e(()=>{let p=[];e=J(e,[1,n,o]);for(let c=0;c{switch(e.op){case"If":case"StatelessIf":{let n=k("thenBranch",e,t,a),r=k("elseBranch",e,t,a),s=k("cond",e,t,a),i=k("args",e,t,a);return(await s.data())[0]?a.functionMap[n].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap):a.functionMap[r].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap)}case"While":case"StatelessWhile":{let n=k("body",e,t,a),r=k("cond",e,t,a),s=k("args",e,t,a),i=await a.functionMap[r].executeFunctionAsync(s,a.tensorArrayMap,a.tensorListMap),o=s.map(p=>p.id),l=await i[0].data();i.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&p.dispose()});let u=s;for(;l[0];){let p=u;u=await a.functionMap[n].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);let c=u.map(h=>h.id);p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()});let d=await a.functionMap[r].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);l=await d[0].data(),d.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let n=k("pred",e,t,a);return[fr(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=fr(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>ba(r,t,a)!==void 0);if(n){let r=ba(n,t,a);return[fr(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[fr(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[fr(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[fr(n)]}case"TensorArrayV3":{let n=k("size",e,t,a),r=k("dtype",e,t,a),s=k("elementShape",e,t,a),i=k("dynamicSize",e,t,a),o=k("clearAfterRead",e,t,a),l=k("identicalElementShapes",e,t,a),u=k("name",e,t,a),p=new WP(u,r,n,s,l,i,o);return a.addTensorArray(p),[p.idTensor,Fe(1)]}case"TensorArrayWriteV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a);return[a.getTensorArray(n.id).read(r)]}case"TensorArrayGatherV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("dtype",e,t,a);return[a.getTensorArray(n.id).gather(r,s)]}case"TensorArrayScatterV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id),s=k("dtype",e,t,a);return[r.concat(s)]}case"TensorArraySplitV3":{let n=k("tensorArrayId",e,t,a),r=k("tensor",e,t,a),s=k("lengths",e,t,a),i=a.getTensorArray(n.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return[Fe(r.size(),"int32")]}case"TensorArrayCloseV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorList(n.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let n=k("indices",e,t,a),r=k("tensor",e,t,a),s=k("elementShape",e,t,a),i=k("numElements",e,t,a),o=GP(r,n,s,i);return a.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=k("elementShape",e,t,a),r=k("elementDType",e,t,a),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,a),o=e.op==="TensorListReserve"?-1:i,l=UP(n,r,i,o);return a.addTensorList(l),[l.idTensor]}case"TensorListGather":{let n=k("tensorListId",e,t,a),r=k("indices",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).gather(r,i,s)]}case"TensorListStack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=k("numElements",e,t,a);return[a.getTensorList(n.id).stack(r,s,i)]}case"TensorListFromTensor":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=VP(n,r,s);return a.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id),s=k("dtype",e,t,a),i=k("elementShape",e,t,a);return[r.concat(s,i)]}case"TensorListPushBack":{let n=k("tensorListId",e,t,a),r=k("tensor",e,t,a),s=a.getTensorList(n.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a);return[a.getTensorList(n.id).popBack(r,s)]}case"TensorListSplit":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("lengths",e,t,a),i=HP(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Fe(r.size(),"int32")]}case"TensorListResize":{let n=k("tensorListId",e,t,a),r=k("size",e,t,a),s=a.getTensorList(n.id).resize(r);return a.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Qg(e,t,a){let[n,r]=k("fusedOps",e,t,a),s=n==="biasadd",i=!s,o=r==="prelu",l=n==="fusedbatchnorm",u=k("numArgs",e,t,a);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let p=k("strides",e,t,a),c=cc(e,t,a),d=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[f,m]=k("args",e,t,a);i&&(m=f,f=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:p,pad:c,dataFormat:d,dilations:h,biasArg:f,preluArg:m,activationFunc:r,leakyreluAlpha:g}}var qP=(e,t,a,n=Zt)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilation",e,t,a);return[n.conv1d(k("x",e,t,a),k("filter",e,t,a),r,s,i,o)]}case"Conv2D":{let r=k("strides",e,t,a),s=cc(e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv2d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:c}=Qg(e,t,a);return[n.fused.conv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:c}=Qg(e,t,a);return[n.fused.depthwiseConv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,a),s=k("strides",e,t,a),i=cc(e,t,a);return[n.conv2dTranspose(k("x",e,t,a),k("filter",e,t,a),r,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,a),s=cc(e,t,a),i=k("dilations",e,t,a),o=k("dataFormat",e,t,a).toUpperCase();return[n.depthwiseConv2d(k("input",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv3d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2],r[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a),o=k("includeBatchInIndex",e,t,a),{result:l,indexes:u}=n.maxPoolWithArgmax(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s,o);return[l,u]}case"AvgPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dilations",e,t,a),o=r[1],l=r[2],u=i[1],p=i[2];return[n.dilation2d(k("x",e,t,a),k("filter",e,t,a),[o,l],s,[u,p],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},XP=(e,t,a,n=Zt)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,a),s=k("dtype",e,t,a),i=k("value",e,t,a);return[n.fill(r,i,s)]}case"LinSpace":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("num",e,t,a);return[n.linspace(r,s,i)]}case"Multinomial":{let r=k("logits",e,t,a),s=k("numSamples",e,t,a),i=k("seed",e,t,a);return[n.multinomial(r,s,i)]}case"OneHot":{let r=k("indices",e,t,a),s=k("depth",e,t,a),i=k("onValue",e,t,a),o=k("offValue",e,t,a),l=k("dtype",e,t,a);return[n.oneHot(r,s,i,o,l)]}case"Ones":return[n.ones(k("shape",e,t,a),k("dtype",e,t,a))];case"OnesLike":return[n.onesLike(k("x",e,t,a))];case"RandomStandardNormal":return[n.randomStandardNormal(k("shape",e,t,a),k("dtype",e,t,a),k("seed",e,t,a))];case"RandomUniform":return[n.randomUniform(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("dtype",e,t,a))];case"Range":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("step",e,t,a);return[n.range(r,s,i,k("dtype",e,t,a))]}case"TruncatedNormal":{let r=k("shape",e,t,a),s=k("mean",e,t,a),i=k("stdDev",e,t,a),o=k("seed",e,t,a);return[n.truncatedNormal(r,s,i,k("dtype",e,t,a),o)]}case"Zeros":return[n.zeros(k("shape",e,t,a),k("dtype",e,t,a))];case"ZerosLike":return[n.zerosLike(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Pm(e,t,a){let n=k("boxes",e,t,a),r=k("scores",e,t,a),s=k("maxOutputSize",e,t,a),i=k("iouThreshold",e,t,a),o=k("scoreThreshold",e,t,a),l=k("softNmsSigma",e,t,a);return{boxes:n,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var KP=async(e,t,a,n,r=Zt)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Pm(e,t,a),c=await r.image.nonMaxSuppressionWithScoreAsync(s,i,o,l,u,p);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Pm(e,t,a),p=k("padToMaxOutputSize",e,t,a),c=await r.image.nonMaxSuppressionPaddedAsync(s,i,o,l,u,p);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Pm(e,t,a);return[await r.image.nonMaxSuppressionAsync(s,i,o,l,u)]}case"Where":{let s=r.cast(k("condition",e,t,a),"bool"),i=[await r.whereAsync(s)];return s.dispose(),i}case"ListDiff":return r.setdiff1dAsync(k("x",e,t,a),k("y",e,t,a));default:throw TypeError(`Node type ${e.op} is not implemented`)}},ZP=(e,t,a,n=Zt)=>{switch(e.op){case"LowerBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.lowerBound(r,s)]}case"TopKV2":{let r=k("x",e,t,a),s=k("k",e,t,a),i=k("sorted",e,t,a),o=n.topk(r,s,i);return[o.values,o.indices]}case"UpperBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.upperBound(r,s)]}case"Unique":{let r=k("x",e,t,a),s=n.unique(r);return[s.values,s.indices]}case"UniqueV2":{let r=k("x",e,t,a),s=k("axis",e,t,a),i=n.unique(r,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},YP=(e,t,a,n=Zt)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[ba(e.name,t,a)||r];case"Placeholder":return[ba(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,a);return[fr(p)]}case"IdentityN":return k("x",e,t,a).map(p=>fr(p));case"Snapshot":let s=k("x",e,t,a);return[fr(s)];case"Shape":return[n.tensor1d(k("x",e,t,a).shape,"int32")];case"ShapeN":return k("x",e,t,a).map(p=>n.tensor1d(p.shape));case"Size":return[n.scalar(k("x",e,t,a).size,"int32")];case"Rank":return[n.scalar(k("x",e,t,a).rank,"int32")];case"NoOp":return[n.scalar(1)];case"Print":let i=k("x",e,t,a),o=k("data",e,t,a),l=k("message",e,t,a),u=k("summarize",e,t,a);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(l);for(let p=0;pe.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Fe(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let a=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),$e(()=>{let n=Ta(t),r=a.length,s=n.length;v.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i{let n=[];for(let r=0;r{switch(e.op){case"HashTable":case"HashTableV2":{let r=n.getHashTableHandleByName(e.name);if(r!=null)return[r];{let s=k("keyDType",e,t,a),i=k("valueDType",e,t,a),o=new JP(s,i);return n.addHashTable(e.name,o),[o.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("values",e,t,a);return[await n.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("defaultValue",e,t,a);return[await n.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=k("tableHandle",e,t,a,n);return[n.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},eF=(e,t,a,n=Zt)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeBilinear(r,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeNearestNeighbor(r,[s[0],s[1]],i,o)]}case"CropAndResize":{let r=k("image",e,t,a),s=k("boxes",e,t,a),i=k("boxInd",e,t,a),o=k("cropSize",e,t,a),l=k("method",e,t,a),u=k("extrapolationValue",e,t,a);return[n.image.cropAndResize(r,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let r=k("images",e,t,a),s=k("transforms",e,t,a),i=k("outputShape",e,t,a),o=k("fillValue",e,t,a),l=k("interpolation",e,t,a),u=k("fillMode",e,t,a);return[n.image.transform(r,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},tF=(e,t,a,n=Zt)=>{switch(e.op){case"Equal":return[n.equal(k("a",e,t,a),k("b",e,t,a))];case"NotEqual":return[n.notEqual(k("a",e,t,a),k("b",e,t,a))];case"Greater":return[n.greater(k("a",e,t,a),k("b",e,t,a))];case"GreaterEqual":return[n.greaterEqual(k("a",e,t,a),k("b",e,t,a))];case"Less":return[n.less(k("a",e,t,a),k("b",e,t,a))];case"LessEqual":return[n.lessEqual(k("a",e,t,a),k("b",e,t,a))];case"LogicalAnd":return[n.logicalAnd(k("a",e,t,a),k("b",e,t,a))];case"LogicalNot":return[n.logicalNot(k("a",e,t,a))];case"LogicalOr":return[n.logicalOr(k("a",e,t,a),k("b",e,t,a))];case"Select":case"SelectV2":return[n.where(k("condition",e,t,a),k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},aF=(e,t,a,n=Zt)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[n.matMul(k("a",e,t,a),k("b",e,t,a),k("transposeA",e,t,a),k("transposeB",e,t,a))];case"Einsum":return[n.einsum(k("equation",e,t,a),...k("tensors",e,t,a))];case"Transpose":return[n.transpose(k("x",e,t,a),k("perm",e,t,a))];case"_FusedMatMul":let[r,s]=k("fusedOps",e,t,a),i=r==="biasadd",o=s==="prelu",l=k("numArgs",e,t,a),u=k("leakyreluAlpha",e,t,a);if(i){if(o&&l!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&l!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[p,c]=k("args",e,t,a);return[n.fused.matMul({a:k("a",e,t,a),b:k("b",e,t,a),transposeA:k("transposeA",e,t,a),transposeB:k("transposeB",e,t,a),bias:p,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},nF=(e,t,a,n=Zt)=>{switch(e.op){case"EuclideanNorm":return[n.euclideanNorm(k("x",e,t,a),k("axis",e,t,a),k("keepDims",e,t,a))];case"FusedBatchNorm":case"FusedBatchNormV2":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"FusedBatchNormV3":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"LRN":return[n.localResponseNormalization(k("x",e,t,a),k("radius",e,t,a),k("bias",e,t,a),k("alpha",e,t,a),k("beta",e,t,a))];case"Softmax":return[n.softmax(k("x",e,t,a))];case"LogSoftmax":return[n.logSoftmax(k("x",e,t,a))];case"SparseToDense":return[n.sparseToDense(k("sparseIndices",e,t,a),k("outputShape",e,t,a),k("sparseValues",e,t,a),k("defaultValue",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},rF=(e,t,a,n=Zt)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:r,outputDenseValues:s}=n.raggedGather(k("paramsNestedSplits",e,t,a),k("paramsDenseValues",e,t,a),k("indices",e,t,a),k("outputRaggedRank",e,t,a));return r.concat(s)}case"RaggedRange":{let{rtNestedSplits:r,rtDenseValues:s}=n.raggedRange(k("starts",e,t,a),k("limits",e,t,a),k("splits",e,t,a));return[r,s]}case"RaggedTensorToTensor":return[n.raggedTensorToTensor(k("shape",e,t,a),k("values",e,t,a),k("defaultValue",e,t,a),k("rowPartitionTensors",e,t,a),k("rowPartitionTypes",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},sF=(e,t,a,n=Zt)=>{switch(e.op){case"Max":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.max(k("x",e,t,a),o,l)]}case"Mean":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.mean(k("x",e,t,a),o,l)]}case"Min":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.min(k("x",e,t,a),o,l)]}case"Sum":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.sum(k("x",e,t,a),o,l)]}case"All":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.all(k("x",e,t,a),o,l)]}case"Any":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.any(k("x",e,t,a),o,l)]}case"ArgMax":{let o=k("axis",e,t,a);return[n.argMax(k("x",e,t,a),o)]}case"ArgMin":{let o=k("axis",e,t,a);return[n.argMin(k("x",e,t,a),o)]}case"Prod":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.prod(k("x",e,t,a),o,l)]}case"Cumprod":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumprod(k("x",e,t,a),o,l,u)]}case"Cumsum":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumsum(k("x",e,t,a),o,l,u)]}case"Bincount":let r=k("x",e,t,a),s=k("weights",e,t,a),i=k("size",e,t,a);return[n.bincount(r,s,i)];case"DenseBincount":{let o=k("x",e,t,a),l=k("weights",e,t,a),u=k("size",e,t,a),p=k("binaryOutput",e,t,a);return[n.denseBincount(o,l,u,p)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},iF=(e,t,a,n=Zt)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,a),s=k("axis",e,t,a),i=k("tensors",e,t,a);return i=i.slice(0,r),[n.concat(i,s)]}case"Gather":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gather(r,n.cast(s,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,a),s=k("batchDims",e,t,a),i=k("x",e,t,a),o=k("indices",e,t,a);return[n.gather(i,n.cast(o,"int32"),r,s)]}case"Reverse":{let r=k("dims",e,t,a),s=[];for(let o=0;o{let r=k("axis",e,t,a),s=k("tensors",e,t,a),i=s[0].shape,o=n.squeeze(s[0]).shape,l=s.map(u=>{let p=v.arraysEqual(u.shape,i);if(!p&&!v.arraysEqual(n.squeeze(u).shape,o))throw new Error("the input tensors shape does not match");return p?u:n.reshape(u,i)});return[n.stack(l,r)]});case"Unpack":{let r=k("axis",e,t,a),s=k("tensor",e,t,a);return n.unstack(s,r)}case"Tile":{let r=k("reps",e,t,a);return[n.tile(k("x",e,t,a),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,a),s=k("numOrSizeSplits",e,t,a),i=k("x",e,t,a);return n.split(i,s,r)}case"ScatterNd":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("shape",e,t,a);return[n.scatterND(r,s,i)]}case"GatherNd":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gatherND(r,s)]}case"SparseToDense":{let r=k("sparseIndices",e,t,a),s=k("outputShape",e,t,a),i=k("sparseValues",e,t,a),o=k("defaultValue",e,t,a);return[n.sparseToDense(r,i,s,i.dtype===o.dtype?o:n.cast(o,i.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},oF=(e,t,a,n=Zt)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=n.sparse.sparseFillEmptyRows(k("indices",e,t,a),k("values",e,t,a),k("denseShape",e,t,a),k("defaultValue",e,t,a));return[r,s,i,o]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=n.sparse.sparseReshape(k("inputIndices",e,t,a),k("inputShape",e,t,a),k("newShape",e,t,a));return[r,s]}case"SparseSegmentMean":return[n.sparse.sparseSegmentMean(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];case"SparseSegmentSum":return[n.sparse.sparseSegmentSum(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},lF=(e,t,a,n=Zt)=>{switch(e.op){case"FFT":return[n.fft(k("x",e,t,a))];case"IFFT":return[n.ifft(k("x",e,t,a))];case"RFFT":return[n.rfft(k("x",e,t,a))];case"IRFFT":return[n.irfft(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},uF=(e,t,a,n=Zt)=>{switch(e.op){case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=n.string.stringNGrams(k("data",e,t,a),k("dataSplits",e,t,a),k("separator",e,t,a),k("nGramWidths",e,t,a),k("leftPad",e,t,a),k("rightPad",e,t,a),k("padWidth",e,t,a),k("preserveShortSequences",e,t,a));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:i}=n.string.stringSplit(k("input",e,t,a),k("delimiter",e,t,a),k("skipEmpty",e,t,a));return[r,s,i]}case"StringToHashBucketFast":return[n.string.stringToHashBucketFast(k("input",e,t,a),k("numBuckets",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},dF=(e,t,a,n=Zt)=>{switch(e.op){case"Cast":return[n.cast(k("x",e,t,a),k("dtype",e,t,a))];case"ExpandDims":{let r=k("axis",e,t,a);return[n.expandDims(k("x",e,t,a),r)]}case"Squeeze":{let r=k("axis",e,t,a);return[n.squeeze(k("x",e,t,a),r)]}case"Reshape":return[n.reshape(k("x",e,t,a),k("shape",e,t,a))];case"MirrorPad":return[n.mirrorPad(k("x",e,t,a),k("padding",e,t,a),k("mode",e,t,a))];case"PadV2":case"Pad":return[n.pad(k("x",e,t,a),k("padding",e,t,a),k("constantValue",e,t,a))];case"SpaceToBatchND":{let r=k("blockShape",e,t,a),s=k("paddings",e,t,a);return[n.spaceToBatchND(k("x",e,t,a),r,s)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,a),s=k("crops",e,t,a);return[n.batchToSpaceND(k("x",e,t,a),r,s)]}case"DepthToSpace":{let r=k("blockSize",e,t,a),s=k("dataFormat",e,t,a).toUpperCase();return[n.depthToSpace(k("x",e,t,a),r,s)]}case"BroadcastTo":return[n.broadcastTo(k("x",e,t,a),k("shape",e,t,a))];case"BroadcastArgs":return[n.broadcastArgs(k("s0",e,t,a),k("s1",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function ex(e,t,a,n,r=$e){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>LP(i,o,l));case"basic_math":return r(()=>BP(i,o,l));case"control":return jP(i,o,l);case"convolution":return r(()=>qP(i,o,l));case"creation":return r(()=>XP(i,o,l));case"dynamic":return KP(i,o,l);case"evaluation":return r(()=>ZP(i,o,l));case"image":return r(()=>eF(i,o,l));case"graph":return r(()=>YP(i,o,l));case"logical":return r(()=>tF(i,o,l));case"matrices":return r(()=>aF(i,o,l));case"normalization":return r(()=>nF(i,o,l));case"ragged":return r(()=>rF(i,o,l));case"reduction":return r(()=>sF(i,o,l));case"slice_join":return r(()=>iF(i,o,l));case"sparse":return r(()=>oF(i,o,l));case"spectral":return r(()=>lF(i,o,l));case"string":return r(()=>uF(i,o,l));case"transformation":return r(()=>dF(i,o,l));case"hash_table":return QP(i,o,l,n);case"custom":let u=y4(i.op);if(u&&u.customExecutor)return u.customExecutor(new zP(i,o,l));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,a);return v.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var tx=class{constructor(e={},t={},a={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function ax(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(d=>Ha(d)[0]),p=[];n!=null&&(p=n.map(d=>Ha(d.name)[0]));let c=[...t];for(;c.length>0;){let d=c.pop();if((W4(d)||mF(d)||gF(d))&&i==null&&(i=d,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(d.name),a[d.name]==null&&u.indexOf(d.name)===-1&&p.indexOf(d.name)===-1){if(d.inputs.length===0){s.push(d.name);continue}d.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),c.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function pF(e,t,a){let{usedNodes:n,inputs:r}=a,s=[],i=Object.keys(r).map(p=>Ha(p)[0]).map(p=>e.nodes[p]),o=e.initNodes;i.forEach(p=>{n.has(p.name)&&s.push(p)}),e.weights.forEach(p=>{n.has(p.name)&&s.push(p)}),o!=null&&o.forEach(p=>{n.has(p.name)&&s.push(p)});let l=new Set,u=[];for(;s.length>0;){let p=s.pop();l.add(p.name),t[p.name]||u.push(p),p.children.forEach(c=>{!l.has(c.name)&&n.has(c.name)&&c.inputs.every(d=>l.has(d.name))&&s.push(c)})}return u}var cF=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],hF=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],fF=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function W4(e){return cF.indexOf(e.op)>=0}function mF(e){return hF.indexOf(e.op)>=0}function gF(e){return fF.indexOf(e.op)>=0}var m1=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(a=>{this._functionExecutorMap[a]=new m1(e.functions[a],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(a=>e[a].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let a=e.map(r=>r.name).sort(),n=t.map(r=>r.name).sort();return a.join(this.SEPERATOR)+"--"+n.join(this.SEPERATOR)}compile(e,t){let a=ax(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:r,syncInputs:s}=a;if(r!=null)throw new Error(`This execution contains the node '${r.name}', which has the dynamic op '${r.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(n.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${n}]`)}return pF(this.graph,this.weightMap,a)}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return Fn(t),t}cloneTensorList(e){return e?e.map(t=>this.cloneAndKeepTensor(t)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,a])=>[t,this.cloneTensorList(a)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let a=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=a.map(p=>this.graph.nodes[Ha(p)[0]]),r=t.map(p=>Ha(p)[0]),s=r.map(p=>this.graph.nodes[p]);s.length===0&&(s=this._outputs);let i=this.getCompilationKey(n,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));try{this.keepIntermediateTensors=W().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(p){this.keepIntermediateTensors=!1,console.warn(p.message)}let l={},u={};return $e(()=>{let p=new tx(this.weightMap,l,u,this.functionExecutorMap),c=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(f=>{let[m,g]=Ha(f),x=[];x[g]=e[f],c[m]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(x))});let d=this.getFrozenTensorIds(c),h={};for(let f=0;fba(f,c,p))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(a=>e[a]).map(a=>a.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,a,n,r,s,i){t.category==="control"||s.indexOf(e)!==-1||(a[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=xP(o.name,a,n);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!r.has(u.id)){let p=i[u.id];p===1?(u.dispose(),delete i[u.id]):p!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.clonedTensorsMap||(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,a=!1,n={},r={}){this.disposeIntermediateTensors(),a||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=W().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(c){this.keepIntermediateTensors=!1,console.warn(c.message)}let s=new tx(this.weightMap,n,r,this.functionExecutorMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,s,t,a),o=t.map(c=>ba(c,i,s)),l=o.map(c=>c.id),u=Object.keys(e).map(c=>e[c].id),p=new Set([...l,...u,...this.weightIds]);return Object.values(i).forEach(c=>{c.forEach(d=>{d&&!d.isDisposed&&!p.has(d.id)&&d.dispose()})}),this.parent==null&&s.dispose(p),o}async executeFunctionAsync(e,t,a){let n=e.reduce((r,s,i)=>(r[this.inputs[i].name]=s,r),{});return this._executeAsync(n,this.outputNodes,!0,t,a)}async executeWithControlFlow(e,t,a,n){let r=Object.keys(e),s=r.map(A=>this.graph.nodes[Ha(A)[0]]),i=a.map(A=>Ha(A)[0]),o=i.map(A=>this.graph.nodes[A]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:p,syncInputs:c}=ax(e,o,this.weightMap,this._initNodes),d=[...s,...this.graph.weights,...this._initNodes||[]].map(A=>({node:A,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(A=>{let[y,b]=Ha(A),w=[];w[b]=e[A],h[y]=w});let f={},m=this.getFrozenTensorIds(h),g={};for(;d.length>0;){let A=this.processStack(s,d,t,h,g,m,i,f,l);await Promise.all(A)}p==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let x=o.filter(A=>!W4(A)&&!ba(A.name,h,t)).map(A=>A.name);if(x.length>0){let A="";throw p!=null&&(A=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${c}]`),new Error(`Cannot compute the outputs [${x}] from the provided inputs [${r}]. Consider providing the following inputs: [${u}]. ${A}`)}return h}processStack(e,t,a,n,r,s,i,o,l){let u=[];for(;t.length>0;){let p=t.pop();a.currentContext=p.contexts;let c="";if(p.node.op==="Enter"&&k("isConstant",p.node,n,a)&&([c]=hr(p.node.name,a)),n[p.node.name]==null){let d=ex(p.node,n,a,this._resourceManager);c||([c]=hr(p.node.name,a));let h=a.currentContext;v.isPromise(d)?u.push(d.then(f=>(n[c]=f,this.keepIntermediateTensors&&(this.clonedTensorsMap[c]=this.cloneTensorList(f)),a.currentContext=h,this.checkTensorForDisposal(c,p.node,n,a,s,i,o),this.processChildNodes(p.node,t,a,n,r,l),f))):(n[c]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[c]=this.cloneTensorList(d)),this.checkTensorForDisposal(c,p.node,n,a,s,i,o),this.processChildNodes(p.node,t,a,n,r,l))}else this.processChildNodes(p.node,t,a,n,r,l)}return u}processChildNodes(e,t,a,n,r,s){e.children.forEach(i=>{let[o]=hr(i.name,a);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!ba(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})):i.inputNames.every(l=>!!ba(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let a=e[t],[n]=Ha(t),r=this.graph.nodes[n];if(r.attrParams.shape&&r.attrParams.shape.value){let s=r.attrParams.shape.value,i=s.length===a.shape.length&&a.shape.every((o,l)=>s[l]===-1||s[l]===o);v.assert(i,()=>`The shape of dict['${r.name}'] provided in model.execute(dict) must be [${s}], but was [${a.shape}]`)}r.attrParams.dtype&&r.attrParams.dtype.value&&v.assert(a.dtype===r.attrParams.dtype.value,()=>`The dtype of dict['${r.name}'] provided in model.execute(dict) must be ${r.attrParams.dtype.value}, but was ${a.dtype}`)})}mapInputs(e){var t,a;let n={};for(let r in e){let s=(a=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||a===void 0?void 0:a[r];s!=null?n[s.name]=e[r]:n[r]=e[r]}return n}checkInputs(e){let t=Object.keys(e).filter(a=>{let[n]=Ha(a);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>{var a,n;let r=(n=(a=this._signature)===null||a===void 0?void 0:a.outputs)===null||n===void 0?void 0:n[t];return r!=null?r.name:t},{})}checkOutputs(e){e.forEach(t=>{let[a]=Ha(t);if(!this.graph.nodes[a])throw new Error(`The output '${t}' is not found in the graph`)})}},xF=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},AF="?tfjs-format=file",yF="model.json",op=class{constructor(e,t={},a=Hn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new xF}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return v.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,a=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(a=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}this.signature=a,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new m1(Zg.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=Zg.Instance.transformGraph(e.modelInitializer);this.initializer=new m1(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let a=this.io.getSaveHandlers(e);if(a.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(a.length>1)throw new Error(`Found more than one (${a.length}) save handlers for URL '${e}'`);e=a[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof pt?[e]:e,a={};return t.forEach((n,r)=>a[this.structuredOutputKeys[r]]=n),a}return e}predict(e,t){let a=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(a)}async predictAsync(e,t){let a=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(a)}normalizeInputs(e){var t;if(!(e instanceof pt)&&!Array.isArray(e)){let r=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(r!=null)for(let s in r){let i=r[s];i.resourceId!=null&&(e[s]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let a=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+a!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-a} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((r,s)=>{var i,o,l;let u=(l=(o=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||o===void 0?void 0:o[s])===null||l===void 0?void 0:l.resourceId;return u!=null?r[s]=this.resourceIdToCapturedInput[u]:r[s]=e[n++],r},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,a=Object.keys(t);for(let n=0;n1?a:a[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let a=await this.executor.executeAsync(e,t);return a.length>1?a:a[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,a)=>(t[a]=[e[a]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Y(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function t3(e,t={},a=Hn){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&typeof e=="string"&&(e=vF(e));let n=new op(e,t,a);return await n.load(),n}function bF(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[n,r]=e;if(!n)throw new Error("modelJSON must be the first element of the array");if(!r||!(r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let s=Hn.getWeightSpecs(n.weightsManifest),i=Hn.getModelArtifactsForJSONSync(n,s,r);t=Hn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Hn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new op(t);return a.load(),a}function vF(e){return e.endsWith("/")||(e=e+"/"),`${e}${yF}${AF}`}var wF="4.1.0";function ye(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var kF=Sn.whereImpl,Eh=class extends yl{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new vd(this,kt())}nextDataId(){return Eh.nextDataId++}write(e,t,a){this.firstUse&&(this.firstUse=!1,W().get("IS_NODE")&&T.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. -============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:a,refCount:1}),n}makeTensorInfo(e,t,a){let n;if(t==="string"&&a!=null&&a.length>0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,a,n,r){this.data.set(e,{values:t,dtype:n,refCount:r})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:a}=this.data.get(e);if(t==="complex64"){let n=this.readSync(a.real.dataId),r=this.readSync(a.imag.dataId);return T.mergeRealAndImagArrays(n,r)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return ve(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return ve(e.shape,e.dtype,t)}makeOutput(e,t,a){return kt().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:a}=this.data.get(e);a!=null&&(this.disposeData(a.real.dataId,!0),this.disposeData(a.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){Ae([e],"where");let t=this.readSync(e.dataId);return QP(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Ph.nextDataId=0;var o3={};He(o3,{addImpl:()=>a7,bincountImpl:()=>u3,bincountReduceImpl:()=>n7,castImpl:()=>t7,ceilImpl:()=>r7,concatImpl:()=>d3,equalImpl:()=>s7,expImpl:()=>o7,expm1Impl:()=>u7,floorImpl:()=>d7,gatherNdImpl:()=>p7,gatherV2Impl:()=>c7,greaterEqualImpl:()=>f7,greaterImpl:()=>h7,lessEqualImpl:()=>g7,lessImpl:()=>m7,linSpaceImpl:()=>y7,logImpl:()=>A7,maxImpl:()=>x7,maximumImpl:()=>b7,minimumImpl:()=>v7,multiplyImpl:()=>p3,negImpl:()=>w7,notEqualImpl:()=>k7,prodImpl:()=>I7,raggedGatherImpl:()=>S7,raggedRangeImpl:()=>T7,raggedTensorToTensorImpl:()=>C7,rangeImpl:()=>h3,rsqrtImpl:()=>N7,scatterImpl:()=>Zo,sigmoidImpl:()=>qO,simpleAbsImpl:()=>e7,sliceImpl:()=>Mc,sparseFillEmptyRowsImpl:()=>R7,sparseReshapeImpl:()=>M7,sparseSegmentReductionImpl:()=>f3,sqrtImpl:()=>ZO,squaredDifferenceImpl:()=>$7,stridedSliceImpl:()=>_7,stringNGramsImpl:()=>m3,stringSplitImpl:()=>g3,stringToHashBucketFastImpl:()=>y3,subImpl:()=>F7,tileImpl:()=>P7,topKImpl:()=>D7,transposeImpl:()=>c3,uniqueImpl:()=>z7});function e7(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;Ae(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=e7(r),a.makeOutput(n,t.shape,t.dtype)},tO={kernelName:gl,backendName:"cpu",kernelFunc:eO};function Lt(e){return(t,a,n,r,s)=>{let i=T.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),d=v.getTypedArrayFromDType(s,u),c=t.length,p=a.length,h=v.computeStrides(t),f=v.computeStrides(a),m=T.getBroadcastDims(t,i),g=T.getBroadcastDims(a,i);if(m.length+g.length===0)for(let y=0;yx[C]=0);let b=v.locToIndex(x,c,h),w=A.slice(-p);g.forEach(C=>w[C]=0);let S=v.locToIndex(w,p,f);d[y]=e(n[b],r[S])}return[d,i]}}function qa(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}var aO={kernelName:Id,backendName:"cpu",kernelFunc:qa};function Rc(e,t,a="float32"){if(a==="complex64"){let r=Rc(e,t,"float32"),s=Rc(e,t,"float32");return qa({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function er(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var nO={kernelName:Fi,backendName:"cpu",kernelFunc:er};function oi(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}var rO={kernelName:$d,backendName:"cpu",kernelFunc:oi};function t7(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=Lt((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function Zr(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return er({inputs:{x:r},backend:a});let d=Rc(a,r.shape,r.dtype),c=Zr({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),p=qa({inputs:{real:c,imag:d},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),p}if(r.dtype==="complex64"){let d=oi({inputs:{input:r},backend:a}),c=Zr({inputs:{x:d},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(d),c}if(!v.hasEncodingLoss(r.dtype,s)){let d=er({inputs:{x:r},backend:a});return{dataId:d.dataId,shape:d.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=t7(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var sO={kernelName:yi,backendName:"cpu",kernelFunc:Zr};function Kt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Ae([i,o],e);let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=i.dtype==="string"?T.fromUint8ToStringArray(u):u,p=i.dtype==="string"?T.fromUint8ToStringArray(d):d,h=n||i.dtype,[f,m]=t(i.shape,o.shape,c,p,h);return l.makeTensorInfo(m,h,f)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=Zr({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),d=l.data.get(u.dataId),c=d.complexTensorInfos.real,p=d.complexTensorInfos.imag,h=l.data.get(c.dataId).values,f=l.data.get(p.dataId).values,m=Zr({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(m.dataId),y=g.complexTensorInfos.real,A=g.complexTensorInfos.imag,x=l.data.get(y.dataId).values,b=l.data.get(A.dataId).values,[w,S,C]=a(i.shape,o.shape,h,f,x,b),N=l.makeTensorInfo(C,"float32",w),_=l.makeTensorInfo(C,"float32",S),$=qa({inputs:{real:N,imag:_},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(_),$}else{let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=n||i.dtype,[p,h]=t(i.shape,o.shape,u,d,c);return l.makeTensorInfo(h,c,p)}}}function l3(e){return(t,a,n,r,s,i)=>{let o=T.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,d=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),p=v.getTypedArrayFromDType("float32",l),h=T.getBroadcastDims(t,o),f=T.getBroadcastDims(a,o),m=T.mergeRealAndImagArrays(n,r),g=T.mergeRealAndImagArrays(s,i),y=t.length,A=v.computeStrides(t),x=a.length,b=v.computeStrides(a);if(h.length+f.length===0)for(let w=0;wC[I]=0);let N=v.locToIndex(C,y,A),_=S.slice(-x);f.forEach(I=>_[I]=0);let $=v.locToIndex(_,x,b),M=e(m[N*2],m[N*2+1],g[$*2],g[$*2+1]);c[w]=M.real,p[w]=M.imag}return[c,p,o]}}var a7=Lt((e,t)=>e+t),iO=l3((e,t,a,n)=>({real:e+a,imag:t+n})),ul=Kt(vr,a7,iO),oO={kernelName:vr,backendName:"cpu",kernelFunc:ul};function u3(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function n7(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=ve([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function ws(e){return(t,a,n)=>{let r=v.getTypedArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;if(Ae(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=v.sizeFromShape(i.shape),d=a||i.dtype,c=v.getArrayFromDType(d,u);for(let p=0;p{let{x:i}=n;if(Ae(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=a||i.dtype,d=t(l,u,r);return o.makeTensorInfo(i.shape,u,d)}}var r7=ws(e=>Math.ceil(e)),lO=Zl(Qr,r7),uO={kernelName:Qr,backendName:"cpu",kernelFunc:lO};function d3(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?T.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),i7=Kt(ts,s7,null,"bool"),dO={kernelName:ts,backendName:"cpu",kernelFunc:i7},o7=ws(e=>Math.exp(e)),l7=Zl(as,o7,"float32"),pO={kernelName:as,backendName:"cpu",kernelFunc:l7},u7=ws(e=>Math.expm1(e)),cO=Zl(Ei,u7),hO={kernelName:Ei,backendName:"cpu",kernelFunc:cO},d7=ws(e=>Math.floor(e)),fO=Zl(ns,d7),mO={kernelName:ns,backendName:"cpu",kernelFunc:fO};function p7(e,t,a,n,r,s,i,o,l){let u=ve([n,s],a);for(let d=0;d=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),gO=Kt(rs,h7,null,"bool"),yO={kernelName:rs,backendName:"cpu",kernelFunc:gO},f7=Lt((e,t)=>e>=t?1:0),AO=Kt(ss,f7,null,"bool"),xO={kernelName:ss,backendName:"cpu",kernelFunc:AO},m7=Lt((e,t)=>ee<=t?1:0),wO=Kt(os,g7,null,"bool"),kO={kernelName:os,backendName:"cpu",kernelFunc:wO};function y7(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),IO=Zl(ls,A7),SO={kernelName:ls,backendName:"cpu",kernelFunc:IO};function x7(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var b7=Lt((e,t)=>Math.max(e,t)),TO=Kt(us,b7),CO={kernelName:us,backendName:"cpu",kernelFunc:TO},v7=Lt((e,t)=>Math.min(e,t)),NO=Kt(ds,v7),EO={kernelName:ds,backendName:"cpu",kernelFunc:NO},p3=Lt((e,t)=>e*t),RO=l3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),Oh=Kt(ps,p3,RO),MO={kernelName:ps,backendName:"cpu",kernelFunc:Oh};function w7(e,t,a){let n=v.createScalarValue(-1,a);return p3([],t,n,e,a)}function $O(e){let{inputs:t,backend:a}=e,{x:n}=t;Ae(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=w7(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var _O={kernelName:Cl,backendName:"cpu",kernelFunc:$O},k7=Lt((e,t)=>e!==t?1:0),FO=Kt(cs,k7,null,"bool"),PO={kernelName:cs,backendName:"cpu",kernelFunc:FO};function c3(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let d=0;da.disposeIntermediateTensorInfo(A)),a.makeTensorInfo(y,g,f)}var zO={kernelName:Xi,backendName:"cpu",kernelFunc:DO};function LO(e,t,a){e.forEach((n,r)=>{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function BO(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function WO(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);BO(a,n);let l=1;for(let u=0;u=0){let m=o[f],g=m[m.length-1]-h[d];for(let y=d;yr[i]=s)}return t}function hy(e,t){let a=e.slice(0,t);for(;a.length1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,d=[];o||d.push(t[0]),l||d.push(r[0]),u||d.push(i[0]);for(let g=1;g0&&Ay)b=0;else if(b=Math.ceil(Math.abs((A-y)/x)),b>fy)throw new Error(`Requires ((limit - start) / delta) <= ${fy}`);p[g+1]=p[g]+b}let h=p[c],f=v.getArrayFromDType(a,h),m=0;for(let g=0;ga&&(a=r)}return a}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let a=0,n=e[0],r=0;for(let s=1;s"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,a,n){let r=e.length,s=[];for(let i=0;i0&&s.length!==e[r-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,a,n){let r=e.length,s=[];if(r===0)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${d} which is not less than ${t.length}`);l=t[d]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,a,n){let r=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case bn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,a,n);case bn.ROW_SPLITS:if(r.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${r.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(r,t,a,n);default:throw new Error(`Unsupported partition type: ${bn[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case bn.FIRST_DIM_SIZE:return e[0];case bn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case bn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${bn[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),a=new Array(this.raggedRank+1);a[a.length-1]=1;for(let s=a.length-2;s>=0;--s)a[s]=a[s+1]*t[s+1];let n=gy(t,!1),r=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(n));if(a[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,a[0],t[0]);for(let i=1;i<=this.raggedRank;++i)s=this.calculateOutputIndex(i-1,s,a[i],t[i]);this.setOutput(this.raggedRank,s,r,n)}return[n,r]}setOutput(e,t,a,n){if(a.length===0)return;let r=this.values,s=a,i=n.slice();i=i.slice(e+1);let o=v.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&u.length!==1){let h=this.defaultValueShape;Ee(()=>{let f=J(u,h);u=ei(f,i).dataSync()})}let d=0,c=0,p=0;for(let h=0;h<=l;++h){let f=h=l){let m=a.length;f=Math.floor(m/o)}if(f>p)if(this.defaultValue.length===1)s.subarray(p*o,f*o).fill(this.defaultValue[0]),p=f;else for(;f>p;){let m=s.slice(p*o);my(m,u,o),++p}f<0?(d=h+1,c=p):(d=h,c=p,p=c+1)}}};function my(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function C7(e,t,a,n,r,s,i,o,l,u){return new A1(e,t,a,n,r,s,i,o,l,u).compute()}function h3(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),jO=Zl(hs,N7),HO={kernelName:hs,backendName:"cpu",kernelFunc:jO};function Zo(e,t,a,n,r,s,i,o,l,u){let d=[n/r,r],c=e.values,p=t.values;if(n===0)return ve(a,t.dtype);let h=ve(d,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let f=0;f=n/r)throw new Error(`Invalid indices: ${m} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),E7=it(fs,e=>1/(1+Math.exp(-e))),XO={kernelName:fs,backendName:"cpu",kernelFunc:E7};function Mc(e,t,a,n,r){let s=At.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=At.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?T.fromUint8ToStringArray(e):e,u=ve(n,r,l),d=ve(a,r);for(let c=0;cf+t[m]);d.set(u.get(...h),...p)}return r==="string"?T.fromStringArrayToUint8(d.values):d.values}function li(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;Ae(r,"slice");let[o,l]=At.parseSliceParams(r,s,i);At.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,d=Mc(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}var KO={kernelName:zl,backendName:"cpu",kernelFunc:li};function R7(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),d=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(T.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,d]}let p=!0,h=0,f=new Array(l).fill(0);for(let g=0;g=l)throw new Error(T.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++f[y],p=p&&y>=h,h=y}let m=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(m&&p){let g=e,y=n;for(let A=0;A0){p[c-1]=1;for(let m=c-2;m>=0;--m)p[m]=p[m+1]*n[m+1]}let h=[];if(o>0){h[o-1]=1;for(let m=o-2;m>=0;--m)h[m]=h[m+1]*l[m+1]}let f=v.getArrayFromDType(a,i*o);for(let m=0;m0?r[o-1]+1:0;if(d<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=d;let p=c.reduce((A,x)=>A*x,1),h=v.getArrayFromDType(a,p);if(o===0)return d>0&&h.fill(i),[h,c];if(d<=0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let f=0,m=1,g=0,y=r[f];for(;;){let A=0;if(m=A)throw new Error(T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=d)throw new Error(T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,d));y>g&&h.fill(i,g*u,y*u);for(let x=f;x=l[0])throw new Error(T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,n[x],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),YO=it(ms,e=>Math.sqrt(e)),JO={kernelName:ms,backendName:"cpu",kernelFunc:YO},$7=Lt((e,t)=>{let a=e-t;return a*a}),QO=Kt(gs,$7),eD={kernelName:gs,backendName:"cpu",kernelFunc:QO};function _7(e,t,a,n){let r=ve(e,t.dtype);for(let s=0;s0?0:i-o),p=0;p+=l*this.leftPad.length;for(let y=0;yy.forEach(A=>f[m++]=A);for(let y=0;y0){g(e[c+d-1]);for(let y=0;y0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(d=>{u+=this.getNumNGrams(l,d)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],p=this.getNumNGrams(c,d);this.createNGrams(e,l,i,u,p,d),u+=p}),this.preserveShort&&u===s[o]){let d=t[o+1]-t[o];if(d===0)continue;let c=d+2*this.padWidth,p=1;this.createNGrams(e,l,i,u,p,c)}}return[i,s]}};function m3(e,t,a,n,r,s,i,o){return new tD(a,n,r,s,i,o).compute(e,t)}function aD(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),nD=l3((e,t,a,n)=>({real:e-a,imag:t-n})),A3=Kt(ys,F7,nD),rD={kernelName:ys,backendName:"cpu",kernelFunc:A3};function P7(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function O7(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),d=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*d*(o-d)/o)*Math.sign(l-o/2),p=Math.max(a,Math.floor(t-l*d/o+c)),h=Math.min(n,Math.floor(t+(o-l)*d/o+c));O7(e,t,p,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Du(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Du(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function D7(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cf[x]={value:A,index:x}),n{for(let g=0;gnew Ph,1);var L7=it(Ni,e=>e>=0?e:Math.exp(e)-1),iD={kernelName:Ni,backendName:"cpu",kernelFunc:L7};function B7(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;Ae([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=a.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;ue<0?t*e:e);function W7(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;Ae([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=lD(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var uD={kernelName:qi,backendName:"cpu",kernelFunc:W7},V7=it(Ki,e=>Math.max(0,e)),dD={kernelName:Ki,backendName:"cpu",kernelFunc:V7},G7=it(Ji,e=>Math.min(Math.max(0,e),6)),pD={kernelName:Ji,backendName:"cpu",kernelFunc:G7};function $c(e,t,a,n,r){if(a==="linear")return er({inputs:{x:t},backend:e});if(a==="relu")return V7({inputs:{x:t},backend:e});if(a==="elu")return L7({inputs:{x:t},backend:e});if(a==="relu6")return G7({inputs:{x:t},backend:e});if(a==="prelu")return W7({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return B7({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return E7({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function ft(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=v.sizeFromShape(r.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),a.incRef(r.dataId);let u=a.data.get(r.dataId);if(u.complexTensorInfos!=null){let d=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;d.shape=o,c.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var cD={kernelName:Fl,backendName:"cpu",kernelFunc:ft};function U7(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;Ae([r,s],"matMul");let l=r.shape.length,u=s.shape.length,d=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],p=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],f=r.shape.slice(0,-2),m=s.shape.slice(0,-2),g=v.sizeFromShape(f),y=v.sizeFromShape(m),A=po.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([p,h]);v.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,d,p]:[g,p,d],b=o?[y,h,c]:[y,c,h],w=ft({inputs:{x:r},backend:a,attrs:{shape:x}}),S=ft({inputs:{x:s},backend:a,attrs:{shape:b}}),C=i?w.shape[1]:w.shape[2],N=i?w.shape[2]:w.shape[1],_=o?S.shape[1]:S.shape[2],$=Math.max(g,y),M=a.data.get(w.dataId).values,I=a.data.get(S.dataId).values,E=v.computeStrides(w.shape),O=v.computeStrides(S.shape),[L,B,G]=i?[E[0],1,E[1]]:[E[0],E[1],1],[j,U,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],W=N*_,Q=ve([$,N,_],w.dtype),Z=Q.values,re=a.blockSize;for(let ee=0;ee<$;ee++)for(let pe=0;peMath.acos(e)),yD={kernelName:yd,backendName:"cpu",kernelFunc:gD},AD=it(Ad,e=>Math.acosh(e)),xD={kernelName:Ad,backendName:"cpu",kernelFunc:AD};function bD(e){let{inputs:t,backend:a}=e,n=t;Ae(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=ve(n[0].shape,n[0].dtype),i=s.values;for(let o=0;oA&&(A=w,x=b)}h[g]=x}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(d,"int32",h)}var CD={kernelName:fi,backendName:"cpu",kernelFunc:TD};function ND(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;Ae(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=La({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],T.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[d,c]=T.computeOutAndReduceShapes(l.shape,i),p=v.sizeFromShape(d),h=v.makeZerosTypedArray(p,"int32"),f=v.sizeFromShape(c),m=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(d,"int32",h)}var ED={kernelName:xd,backendName:"cpu",kernelFunc:ND},RD=it(bd,e=>Math.asin(e)),MD={kernelName:bd,backendName:"cpu",kernelFunc:RD},$D=it(vd,e=>Math.asinh(e)),_D={kernelName:vd,backendName:"cpu",kernelFunc:$D},FD=it(wd,e=>Math.atan(e)),PD={kernelName:wd,backendName:"cpu",kernelFunc:FD},OD=Lt((e,t)=>Math.atan2(e,t)),DD=Kt(xl,OD),zD={kernelName:xl,backendName:"cpu",kernelFunc:DD},LD=it(kd,e=>Math.atanh(e)),BD={kernelName:kd,backendName:"cpu",kernelFunc:LD};function x3(e,t,a,n,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,d=r.effectiveFilterHeight,c=r.effectiveFilterWidth,p=r.padInfo.top,h=r.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=ve(r.outShape,a),g=m.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],A=r.outShape[2]*r.outShape[3],x=r.outShape[3];for(let b=0;bG?G=ee:s==="avg"&&(j+=ee,U++)}if(isNaN(G))break}let H=I+E*x+C;g[H]=s==="avg"?j/U:G}}}return m}function j7(e,t,a,n,r=!1,s=!1){let i=ve(n.outShape,"int32"),o=n.strideHeight,l=n.strideWidth,u=n.dilationHeight,d=n.dilationWidth,c=n.effectiveFilterHeight,p=n.effectiveFilterWidth,h=n.padInfo.top,f=n.padInfo.left,m=ve(t,a,e);for(let g=0;g$&&($=B,r?M=s?((g*n.inHeight+I)*n.inWidth+O)*n.inChannels+y:(I*n.inWidth+O)*n.inChannels+y:M=E*p+L)}}i.set(M,g,A,S,y)}}return i}function H7(e,t,a,n,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,d=r.dilationHeight,c=r.dilationWidth,p=r.effectiveFilterDepth,h=r.effectiveFilterHeight,f=r.effectiveFilterWidth,m=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,A=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,x=ve(r.outShape,a),b=x.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],S=r.outShape[2]*r.outShape[3]*r.outShape[4],C=r.outShape[3]*r.outShape[4],N=r.outShape[4];for(let _=0;_ye?ye=ct:s==="avg"&&(we+=ct,Ne++),isNaN(ye))break}if(isNaN(ye))break}if(isNaN(ye))break}let Ge=oe+I;b[Ge]=s==="avg"?we/Ne:ye}}}}return x}function WD(e,t){let a=ve(t.outShape,"int32"),n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,d=t.effectiveFilterHeight,c=t.effectiveFilterWidth,p=t.padInfo.front,h=t.padInfo.top,f=t.padInfo.left;for(let m=0;m=E&&(E=W,O=B*d*c+j*d+H)}}}a.set(O,m,y,w,_,g)}}}return a}function VD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ae(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(T.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=T.computePool2DInfo(r.shape,s,i,u,o,l),c;if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))c=er({inputs:{x:r},backend:a});else{let p=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),f=x3(p,r.shape,r.dtype,h,d,"avg");c=a.makeTensorInfo(d.outShape,r.dtype,f.values)}return c}var GD={kernelName:mi,backendName:"cpu",kernelFunc:VD};function UD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ae(r,"avgPool3d");let d=T.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,p=H7(c,r.shape,r.dtype,v.computeStrides(r.shape),d,"avg");return a.makeTensorInfo(p.shape,"float32",p.values)}var jD={kernelName:Gc,backendName:"cpu",kernelFunc:UD};function HD(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ae([r,s],"avgPool3DGrad");let d=T.computePool3DInfo(s.shape,i,o,1,l,u),c=d.strideDepth,p=d.strideHeight,h=d.strideWidth,f=d.filterDepth,m=d.filterHeight,g=d.filterWidth,y=d.dilationDepth,A=d.dilationHeight,x=d.dilationWidth,b=d.effectiveFilterDepth,w=d.effectiveFilterHeight,S=d.effectiveFilterWidth,C=b-1-d.padInfo.front,N=S-1-d.padInfo.left,_=w-1-d.padInfo.top,$=ve(s.shape,"float32"),M=1/(f*m*g),I=a.bufferSync(r);for(let E=0;E=d.outDepth||Math.floor(Z)!==Z))for(let re=0;re=d.outHeight||Math.floor(ee)!==ee))for(let pe=0;pe=d.outWidth||Math.floor(oe)!==oe)continue;let ye=I.get(E,Z,ee,oe,O);W+=ye}}}$.set(W*M,E,L,B,G,O)}return a.makeTensorInfo($.shape,$.dtype,$.values)}var qD={kernelName:H1,backendName:"cpu",kernelFunc:HD};function XD(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ae([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,d=T.computePool2DInfo(i.shape,o,l,1,u),c=d.strideHeight,p=d.strideWidth,h=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,g=d.dilationWidth,y=d.effectiveFilterHeight,A=d.effectiveFilterWidth,x=A-1-d.padInfo.left,b=y-1-d.padInfo.top,w=ve(i.shape,"float32"),S=1/(h*f),C=a.data.get(r.dataId).values,N=ve(r.shape,"float32",C);for(let _=0;_=d.outHeight||Math.floor(G)!==G))for(let j=0;j=d.outWidth||Math.floor(U)!==U)continue;let H=N.get(_,G,U,$);L+=H}}w.set(L*S,_,M,I,$)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var KD={kernelName:j1,backendName:"cpu",kernelFunc:XD};function ZD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Ae([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=n;u==null&&(u=.001);let d=a.data.get(r.dataId).values,c=a.data.get(o.dataId).values,p=a.data.get(l.dataId).values,h=s?a.data.get(s.dataId).values:new Float32Array([1]),f=i?a.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(d.length),g=f.length,y=h.length,A=p.length,x=c.length,b=0,w=0,S=0,C=0;for(let N=0;N=g&&(b=0),w>=x&&(w=0),S>=y&&(S=0),C>=A&&(C=0);return a.makeTensorInfo(r.shape,r.dtype,m)}var YD={kernelName:$i,backendName:"cpu",kernelFunc:ZD};function JD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;Ae([r],"batchToSpaceND");let o=s.reduce((y,A)=>y*A),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),d=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),p=T.getSliceSize(d,i,s.length),h=ft({inputs:{x:r},backend:a,attrs:{shape:l}}),f=La({inputs:{x:h},backend:a,attrs:{perm:u}}),m=ft({inputs:{x:f},backend:a,attrs:{shape:d}}),g=li({inputs:{x:m},backend:a,attrs:{begin:c,size:p}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),g}var QD={kernelName:bl,backendName:"cpu",kernelFunc:JD};function ez(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,u=u3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var tz={kernelName:Uc,backendName:"cpu",kernelFunc:ez};function az(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=T.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var nz={kernelName:jc,backendName:"cpu",kernelFunc:az},rz=it(es,(e,t)=>{let a=t;return e>a.clipValueMax?a.clipValueMax:e{let{x:t}=e.inputs,a=e.backend,n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values;for(let u=0;um.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(m=>m.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(m=>v.sizeFromShape(m.shape)>0);if(l.length===1)return er({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let m=l.map(b=>oi({inputs:{input:b},backend:a})),g=l.map(b=>dl({inputs:{input:b},backend:a})),y=pl({inputs:m,backend:a,attrs:{axis:s}}),A=pl({inputs:g,backend:a,attrs:{axis:s}}),x=qa({inputs:{real:y,imag:A},backend:a});return m.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(A),x}let u=l.map(m=>{let g=[-1,v.sizeFromShape(m.shape.slice(s))];return ft({inputs:{x:m},backend:a,attrs:{shape:g}})}),d=u.map(m=>({vals:a.data.get(m.dataId).values,shape:m.shape}));o=T.computeOutShape(u.map(m=>m.shape),1);let c=u[0].shape[0]===1,p=d3(d,o,t[0].dtype,c),h=T.computeOutShape(l.map(m=>m.shape),s),f=a.makeTensorInfo(h,t[0].dtype,p);return u.forEach(m=>a.disposeIntermediateTensorInfo(m)),f}var uz={kernelName:vl,backendName:"cpu",kernelFunc:pl};function q7(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n;Ae([r,s],"conv2d");let c=T.convertConv2DDataFormat(l),p=T.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c),h=p.filterHeight,f=p.filterWidth,m=p.dilationHeight,g=p.dilationWidth,y=p.padInfo.left,A=p.padInfo.top,x=p.dataFormat==="channelsLast",b=new Mt(p.outShape,r.dtype),w=v.computeStrides(r.shape),S=v.computeStrides(s.shape),C=w[0],N=x?w[1]:w[2],_=x?w[2]:1,$=x?1:w[1],M=b.strides[0],I=x?b.strides[1]:b.strides[2],E=x?b.strides[2]:1,O=x?1:b.strides[1],L=a.data.get(r.dataId).values,B=a.data.get(s.dataId).values,G=b.values;for(let j=0;j=p.inHeight)continue;let pe=re*S[0],oe=U+ee*N;for(let ye=0;ye=p.inWidth)continue;let nt=pe+Ge*S[1],lt=oe+Xe*_,et=nt;for(let rt=0;rt=u.inDepth)continue;let j=B*_[0],U=M+G*N[1];for(let H=0;H=u.inHeight)continue;let ee=j+Z*_[1],pe=U+re*N[2];for(let oe=0;oe=u.inWidth)continue;let Xe=ee+Ne*_[2],nt=pe+Ge*u.inChannels,lt=Xe;for(let et=0;etMath.cos(e)),wz={kernelName:bi,backendName:"cpu",kernelFunc:vz},kz=it(vi,e=>Math.cosh(e)),Iz={kernelName:vi,backendName:"cpu",kernelFunc:kz};function Sz(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,[d,c,p,h]=r.shape,f=s.shape[0],[m,g]=o,y=ve([f,m,g,h],"float32"),A=a.data.get(s.dataId).values,x=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),S=v.computeStrides(y.shape);for(let C=0;C=d)continue;let O=m>1?(M-_)*(c-1)/(m-1):0,L=g>1?(I-$)*(p-1)/(g-1):0;for(let B=0;B1?_*(c-1)+B*O:.5*(_+M)*(c-1);if(G<0||G>c-1){for(let j=0;j1?$*(p-1)+W*L:.5*($+I)*(p-1);if(Q<0||Q>p-1){for(let pe=0;pe1?$*(p-1)+j*L:.5*($+I)*(p-1);if(U<0||U>p-1){for(let Q=0;Qy+f-A-1:(y,A)=>y+A;for(let y=0;yy+f-A-1:(y,A)=>y+A;for(let y=0;y`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],d=r.shape[3],c=l*s,p=u*s,h=d/(s*s),f=a.data.get(r.dataId).values,m=new Float32Array(o*c*p*h),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let h=T.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),{filterHeight:f,filterWidth:m,dilationHeight:g,dilationWidth:y,padInfo:A}=h,x=A.left,b=A.top,w=h.outChannels/h.inChannels,S=new Mt(h.outShape,r.dtype),C=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,_=S.values;for(let $=0;$=h.inHeight)continue;let j=B*c[0],U=M+G*d[1];for(let H=0;H=h.inWidth)continue;let ee=j+Z*c[1],pe=U+re*h.inChannels,oe=W,ye=ee;for(let we=0;we{let{x:n,filter:r}=e,{strides:s,pad:i,dilations:o}=a,l=t,u=l.data.get(n.dataId).values,d=n.shape.length,c=l.data.get(r.dataId).values,p=r.shape.length,{batchSize:h,inHeight:f,inWidth:m,inChannels:g,outHeight:y,outWidth:A,padInfo:x,strideHeight:b,strideWidth:w,filterHeight:S,filterWidth:C,dilationHeight:N,dilationWidth:_,outShape:$}=T.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),M=v.sizeFromShape($),I=$.length,E=v.getArrayFromDType(n.dtype,M);for(let O=0;O=0&&Z=0&&eeH&&(H=ye)}}}let W=v.locToIndex([O,L,G,U],I,v.computeStrides($));E[W]=H}}}return{dataId:l.write(v.toTypedArray(E,n.dtype),$,n.dtype),shape:$,dtype:n.dtype}}},Gz={kernelName:Gm,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,d=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:p,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:y,padInfo:A,strideHeight:x,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:N,outShape:_}=T.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===_.length,()=>`Error in ${Gm}, dy must have the same rank as output ${_.length}, but got ${s.rank}`);let $=v.toNestedArray(_,u.data.get(s.dataId).values),M=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let I=0;I=0&&Q=0&&rej&&(j=ee,U=W,H=Z)}}}M[U][H][G]+=$[I][E][L][G]}}}return{dataId:u.write(v.toTypedArray(M,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},Uz={kernelName:Vm,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,d=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:p,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:y,padInfo:A,strideHeight:x,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:N,outShape:_}=T.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===_.length,()=>`Error in ${Vm}, dy must have the same rank as output ${_.length}, but got ${s.rank}`);let $=v.toNestedArray(_,u.data.get(s.dataId).values),M=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let I=0;I=0&&Q=0&&rej&&(j=ee,U=Q,H=re)}}}M[I][U][H][G]+=$[I][E][L][G]}}}return{dataId:u.write(v.toTypedArray(M,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function lp(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ae(r,"sum");let o;r.dtype==="bool"?o=Zr({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=er({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),d=T.getAxesPermutation(u,l),c=u,p=o;d!=null&&(p=La({inputs:{x:o},backend:a,attrs:{perm:d}}),c=T.getInnerMostAxes(c.length,l)),T.assertAxesAreInnerMostDims("sum",c,p.shape.length);let[h,f]=T.computeOutAndReduceShapes(p.shape,c),m=T.upcastType(p.dtype,"int32"),g=Rc(a,h,m),y=v.sizeFromShape(f),A=a.data.get(g.dataId).values,x=a.data.get(p.dataId).values;for(let b=0;b=0&&(p=lp({inputs:{x:p},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(p)),h--)}for(let m of f)m!==p&&a.disposeIntermediateTensorInfo(m);return p}var qz={kernelName:Sd,backendName:"cpu",kernelFunc:Hz};function Xz(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;Ae([n,r],"eluGrad");let s=new Float32Array(v.sizeFromShape(r.shape)),i=a.data.get(r.dataId).values,o=a.data.get(n.dataId).values;for(let l=0;l=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var Kz={kernelName:X1,backendName:"cpu",kernelFunc:Xz},Zz=T.ERF_P,Yz=T.ERF_A1,Jz=T.ERF_A2,Qz=T.ERF_A3,eL=T.ERF_A4,tL=T.ERF_A5,aL=it(Td,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+Zz*a);return t*(1-((((tL*n+eL)*n+Qz)*n+Jz)*n+Yz)*n*Math.exp(-a*a))}),nL={kernelName:Td,backendName:"cpu",kernelFunc:aL};function _c(e){let{inputs:t,backend:a,attrs:n}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),ft({inputs:{x:r},backend:a,attrs:{shape:o}})}var rL={kernelName:wl,backendName:"cpu",kernelFunc:_c},sL=Lt((e,t)=>e/t),b3=Kt(Ci,sL),x1={kernelName:Ci,backendName:"cpu",kernelFunc:b3};function K7(e,t,a){let n=e.shape,r=n[0],s=n[1],i=a.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],d=v.sizeFromShape(u),c=v.getTypedArrayFromDType("float32",d),p=v.getTypedArrayFromDType("float32",d);for(let g=0;g{let{image:n}=e,r=a,s=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[i,o,l,u]=n.shape,d=r.data.get(n.dataId).values;for(let c=0;c=0&&AMath.floor(e/t)),mL=Kt(Mi,fL,null,"int32"),gL={kernelName:Mi,backendName:"cpu",kernelFunc:mL};function yL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=q7({inputs:{x:r,filter:s},backend:a,attrs:{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p}});if(i){let g=m;if(d==="NCHW"&&i.shape.length===1&&i.shape[0]!==1){let y=ft({inputs:{x:i},backend:a,attrs:{shape:[i.shape[0],1,1]}});m=ul({inputs:{a:m,b:y},backend:a}),a.disposeIntermediateTensorInfo(y)}else m=ul({inputs:{a:m,b:i},backend:a});a.disposeIntermediateTensorInfo(g)}if(h){let g=m;if(d==="NCHW"&&h==="prelu"&&o.shape.length===1&&o.shape[0]!==1){let y=ft({inputs:{x:o},backend:a,attrs:{shape:[o.shape[0],1,1]}});m=$c(a,m,h,y,f),a.disposeIntermediateTensorInfo(y)}else m=$c(a,m,h,o,f);a.disposeIntermediateTensorInfo(g)}return m}var AL={kernelName:jr,backendName:"cpu",kernelFunc:yL};function xL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=X7({inputs:{x:r,filter:s},backend:a,attrs:{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p}});if(i){let g=m;m=ul({inputs:{a:m,b:i},backend:a}),a.disposeIntermediateTensorInfo(g)}if(h){let g=m;m=$c(a,m,h,o,f),a.disposeIntermediateTensorInfo(g)}return m}var bL={kernelName:Hr,backendName:"cpu",kernelFunc:xL};function vL(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=v.sizeFromShape(n.shape),i=r.shape,o=i[i.length-1],[l,u,d,c]=T.prepareAndValidate(n,r);if(u===0)return a.makeTensorInfo(l,n.dtype,[]);let p=a.data.get(r.dataId).values,h=a.bufferSync(n),f=p7(p,h,n.dtype,u,o,d,c,n.shape,s);return a.makeTensorInfo(l,n.dtype,f.values)}var wL={kernelName:_i,backendName:"cpu",kernelFunc:vL};function kL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=n;Ae([r,s],"gatherV2");let l=v.parseAxisParam(i,r.shape)[0],u=a.data.get(s.dataId).values,d=r.shape[l];for(let b=0;b=0,()=>`GatherV2: the index value ${w} is not in [0, ${d-1}]`)}let c=o;o==null&&(c=0);let p=v.sizeFromShape(s.shape),h=T.segment_util.collectGatherOpShapeInfo(r,s,l,c),f=ft({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),m=ft({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,p/h.batchSize]}}),g=[h.batchSize,h.outerSize,p/h.batchSize,h.sliceSize],y=a.bufferSync(m),A=a.bufferSync(f),x=c7(A,y,g);return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),a.makeTensorInfo(h.outputShape,x.dtype,x.values)}var IL={kernelName:Il,backendName:"cpu",kernelFunc:kL};function SL(e){let{inputs:t,backend:a}=e,{input:n}=t,r=v.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=r/s,o=ft({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=K7(o,!0,a),u=ft({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var TL={kernelName:ah,backendName:"cpu",kernelFunc:SL},CL=it(Nd,e=>Number.isFinite(e)?1:0,"bool"),NL={kernelName:Nd,backendName:"cpu",kernelFunc:CL},EL=it(Ed,e=>Math.abs(e)===1/0?1:0,"bool"),RL={kernelName:Ed,backendName:"cpu",kernelFunc:EL},ML=it(Sl,e=>Number.isNaN(e)?1:0,"bool"),$L={kernelName:Sl,backendName:"cpu",kernelFunc:ML};function _L(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=y7(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var FL={kernelName:nh,backendName:"cpu",kernelFunc:_L},PL=it(Rd,e=>Math.log1p(e)),OL={kernelName:Rd,backendName:"cpu",kernelFunc:PL},DL=Lt((e,t)=>e&&t),zL=Kt(Oi,DL,null,"bool"),LL={kernelName:Oi,backendName:"cpu",kernelFunc:zL},BL=it(Di,e=>e?0:1,"bool"),WL={kernelName:Di,backendName:"cpu",kernelFunc:BL},VL=Lt((e,t)=>e||t),GL=Kt(Tl,VL,null,"bool"),UL={kernelName:Tl,backendName:"cpu",kernelFunc:GL};function jL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;Ae(r,"LRN");let u=r.shape[3],d=u-1,c=a.data.get(r.dataId).values,p=v.sizeFromShape(r.shape),h=new Float32Array(p);function f(m){let g=m%u,y=m-g+Math.max(0,g-s),A=m-g+Math.min(g+s,d),x=0;for(;y<=A;y++){let b=c[y];x+=b*b}return x}for(let m=0;m`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=T.computePool2DInfo(r.shape,s,i,u,o,l),c;if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))c=er({inputs:{x:r},backend:a});else{let p=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),f=x3(p,r.shape,r.dtype,h,d,"max");c=a.makeTensorInfo(d.outShape,r.dtype,f.values)}return c}var YL={kernelName:Li,backendName:"cpu",kernelFunc:ZL};function JL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ae(r,"maxPool3d");let d=T.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,p=H7(c,r.shape,r.dtype,v.computeStrides(r.shape),d,"max");return a.makeTensorInfo(p.shape,"float32",p.values)}var QL={kernelName:sh,backendName:"cpu",kernelFunc:JL};function eB(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ae([r,s],"maxPool3DGrad");let d=T.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),p=WD(c,d),h=d.strideDepth,f=d.strideHeight,m=d.strideWidth,g=d.dilationDepth,y=d.dilationHeight,A=d.dilationWidth,x=d.effectiveFilterDepth,b=d.effectiveFilterHeight,w=d.effectiveFilterWidth,S=x-1-d.padInfo.front,C=w-1-d.padInfo.left,N=b-1-d.padInfo.top,_=ve(s.shape,"float32"),$=a.bufferSync(r);for(let M=0;M=d.outDepth||Math.floor(W)!==W))for(let Q=0;Q=d.outHeight||Math.floor(Z)!==Z))for(let re=0;re=d.outWidth||Math.floor(ee)!==ee)continue;let pe=x*b*w-1-p.get(M,W,Z,ee,I),oe=H*b*w+Q*w+re,ye=pe===oe?1:0;if(ye===0)continue;let we=$.get(M,W,Z,ee,I);U+=we*ye}}}_.set(U,M,E,O,L,I)}return a.makeTensorInfo(_.shape,_.dtype,_.values)}var tB={kernelName:Y1,backendName:"cpu",kernelFunc:eB};function aB(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ae([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:c}=n,p=T.computePool2DInfo(o.shape,l,u,1,d,c),h=a.data.get(o.dataId).values,f=ve(p.outShape,o.dtype,j7(h,o.shape,o.dtype,p).values),m=p.strideHeight,g=p.strideWidth,y=p.dilationHeight,A=p.dilationWidth,x=p.effectiveFilterHeight,b=p.effectiveFilterWidth,w=b-1-p.padInfo.left,S=x-1-p.padInfo.top,C=ve(o.shape,"float32"),N=a.data.get(r.dataId).values,_=ve(r.shape,"float32",N);for(let $=0;$=p.outHeight||Math.floor(j)!==j))for(let U=0;U=p.outWidth||Math.floor(H)!==H)continue;let W=x*b-1-f.get($,j,H,M),Q=G*b+U,Z=W===Q?1:0;if(Z===0)continue;let re=_.get($,j,H,M);B+=re*Z}}C.set(B,$,I,E,M)}return a.makeTensorInfo(C.shape,C.dtype,C.values)}var nB={kernelName:Z1,backendName:"cpu",kernelFunc:aB};function rB(e,t,a,n,r){let s=v.computeStrides(t),i=x3(e,t,a,s,r,"max"),o=j7(e,t,a,r,!0,n);return[i.values,o.values]}var sB={kernelName:ih,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;Ae(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,d=T.computePool2DInfo(n.shape,r,s,[1,1],i),[c,p]=rB(u,n.shape,n.dtype,o,d),h=l.write(c,d.outShape,n.dtype),f=l.write(p,d.outShape,n.dtype);return[{dataId:h,shape:d.outShape,dtype:n.dtype},{dataId:f,shape:d.outShape,dtype:"int32"}]}};function iB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=T.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),d=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));d.push(c);let p=Zr({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});d.push(p);let h=b3({inputs:{a:p,b:c},backend:a});d.push(h);let f=lp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return d.forEach(m=>a.disposeIntermediateTensorInfo(m)),f}var oB={kernelName:Bi,backendName:"cpu",kernelFunc:iB};function lB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ae(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=T.getAxesPermutation(l,r.shape.length),d=r;u!=null&&(d=La({inputs:{x:r},backend:a,attrs:{perm:u}}),l=T.getInnerMostAxes(l.length,r.shape.length)),T.assertAxesAreInnerMostDims("min",l,d.shape.length);let[c,p]=T.computeOutAndReduceShapes(d.shape,l),h=v.sizeFromShape(p),f=v.makeZerosTypedArray(v.sizeFromShape(c),d.dtype),m=a.data.get(d.dataId).values;for(let y=0;yA[0]+r.shape[x]+A[1]),l=s.map(A=>A[0]),u=s.map((A,x)=>A[0]+r.shape[x]),d=i==="reflect"?0:1,c=a.data.get(r.dataId).values,p=r.shape.length,h=v.computeStrides(r.shape),f=v.sizeFromShape(o),m=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,f);for(let A=0;A=u[w]&&(x[w]=(u[w]-1)*2-x[w]+d);x=x.map((w,S)=>w-l[S]);let b=v.locToIndex(x,p,h);y[A]=c[b]}return{dataId:a.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var pB={kernelName:Vi,backendName:"cpu",kernelFunc:dB},cB=Lt((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),hB=Kt(Md,cB),fB={kernelName:Md,backendName:"cpu",kernelFunc:hB},mB=hl(cA());function Y7(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=r.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=v.parseAxisParam([o],r.shape),u=Z7({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),d=T.expandShapeToKeepDim(u.shape,l),c=ft({inputs:{x:u},backend:a,attrs:{shape:d}}),p=A3({inputs:{a:r,b:c},backend:a}),h=l7({inputs:{x:p},backend:a}),f=lp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),m=ft({inputs:{x:f},backend:a,attrs:{shape:d}}),g=b3({inputs:{a:h,b:m},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),g}var gB={kernelName:ao,backendName:"cpu",kernelFunc:Y7};function yB(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;Ae(r,"multinomial");let l=o?r:Y7({inputs:{logits:r},backend:a,attrs:{dim:-1}}),u=l.shape[0],d=l.shape[1],c=a.data.get(l.dataId).values,p=[u,s],h=v.makeZerosTypedArray(v.sizeFromShape(p),"int32");for(let f=0;f=0&&c[p]{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=_c({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=pl({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeIntermediateTensorInfo(d)),u}var $B={kernelName:Ml,backendName:"cpu",kernelFunc:Q7};function _B(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;Ae(r,"pad");let o=s.map((y,A)=>y[0]+r.shape[A]+y[1]),l=s.map(y=>y[0]),u=a.data.get(r.dataId).values,d=v.sizeFromShape(r.shape),c=r.shape.length,p=v.computeStrides(r.shape),h=v.sizeFromShape(o),f=o.length,m=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;yb+l[w]),x=v.locToIndex(A,f,m);g[x]=u[y]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var e6={kernelName:ji,backendName:"cpu",kernelFunc:_B},FB=Lt((e,t)=>Math.pow(e,t)),PB=Kt(Hi,FB),OB={kernelName:Hi,backendName:"cpu",kernelFunc:PB};function DB(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.data.get(y.dataId).values),u=r.map(y=>y.shape),d=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[p,h,f]=S7(l,u,d,s.shape,s.dtype,c,i.shape,o),m=p.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(f,s.dtype,h);return m.concat([g])}var zB={kernelName:lh,backendName:"cpu",kernelFunc:DB};function LB(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=T7(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),p=a.makeTensorInfo([d.length],n.dtype,d);return[c,p]}var BB={kernelName:uh,backendName:"cpu",kernelFunc:LB};function WB(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.data.get(r.dataId).values,d=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,p=o.map(g=>a.data.get(g.dataId).values),h=o.map(g=>g.shape),[f,m]=C7(u,r.shape,d,s.shape,s.dtype,c,i.shape,p,h,l);return a.makeTensorInfo(f,s.dtype,m)}var VB={kernelName:dh,backendName:"cpu",kernelFunc:WB};function GB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=h3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var UB={kernelName:$l,backendName:"cpu",kernelFunc:GB},jB=it(_l,e=>1/e),HB={kernelName:_l,backendName:"cpu",kernelFunc:jB};function qB(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;Ae(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,d]=o,[c,p,h,f]=r.shape,m=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,d,f])),y=[s&&u>1?p-1:p,s&&d>1?h-1:h],A=[s&&u>1?u-1:u,s&&d>1?d-1:d],x=0,b=y[0]/A[0],w=y[1]/A[1];for(let S=0;S1?u-1:u,i&&h>1?d-1:d],g=[i&&p>1?p-1:p,i&&h>1?h-1:h],y=m[0]/g[0],A=m[1]/g[1],x=a.data.get(s.dataId).values,b=0;for(let w=0;w1?p-1:p,s&&d>1?h-1:h],A=[s&&u>1?u-1:u,s&&d>1?d-1:d],x=y[0]/A[0],b=y[1]/A[1],w=0;for(let S=0;S1?d-1:d,i&&f>1?c-1:c],A=[i&&h>1?h-1:h,i&&f>1?f-1:f],x=y[0]/A[0],b=y[1]/A[1],w=1/x,S=1/b,C=Math.ceil(w)*2+2,N=Math.ceil(S)*2+2;for(let _=0;_=h)continue;let Z=$+Q*l[1],re=Q*x,ee=Math.min(d-1,i?Math.round(re):Math.floor(re));if(M===ee)for(let pe=0;pe=f)continue;let ye=Z+oe*l[2],we=oe*b,Ne=Math.min(c-1,i?Math.round(we):Math.floor(we));L===Ne&&(H+=g[ye+U])}}m[B+U]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,m)}var eW={kernelName:J1,backendName:"cpu",kernelFunc:QB};function tW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;Ae(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return er({inputs:{x:r},backend:a});let l=new Mt(r.shape,r.dtype),u=a.bufferSync(r);for(let d=0;dp[h]=r.shape[h]-1-p[h]),l.set(u.get(...p),...c)}return a.makeTensorInfo(l.shape,l.dtype,l.values)}var aW={kernelName:Pl,backendName:"cpu",kernelFunc:tW},nW={kernelName:lo,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[u,d,c,p]=n.shape,[h,f]=T.getImageCenter(i,d,c),m=255,g=Math.sin(r),y=Math.cos(r),A=o.data.get(n.dataId).values;for(let x=0;x=0&&E=0&&O{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),sW={kernelName:Ol,backendName:"cpu",kernelFunc:rW};function iW(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=T.calculateShapes(s,r,i),p=!0,h=a.bufferSync(r),f=a.bufferSync(s),m=Zo(h,f,i,c,u,l,o,d,0,p);return a.makeTensorInfo(i,m.dtype,m.values)}var oW={kernelName:Qi,backendName:"cpu",kernelFunc:iW};function lW(e,t){let a=0,n=e.length,r=0;for(;a1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let f=0;fe>=0?gW*e:mW*(Math.exp(e)-1)),AW={kernelName:_d,backendName:"cpu",kernelFunc:yW},xW=it(Fd,e=>e<0?-1:e>0?1:0),bW={kernelName:Fd,backendName:"cpu",kernelFunc:xW},vW=it(eo,e=>Math.sin(e)),wW={kernelName:eo,backendName:"cpu",kernelFunc:vW},kW=it(Ll,e=>Math.sinh(e)),IW={kernelName:Ll,backendName:"cpu",kernelFunc:kW},SW=11920928955078125e-23,yy=Math.log(SW)+2,TW=it(Pd,e=>{let t=e>-yy,a=e0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,a,n,r){this.data.set(e,{values:t,dtype:n,refCount:r})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:a}=this.data.get(e);if(t==="complex64"){let n=this.readSync(a.real.dataId),r=this.readSync(a.imag.dataId);return T.mergeRealAndImagArrays(n,r)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return Me(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(e.shape,e.dtype,t)}makeOutput(e,t,a){return kt().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:a}=this.data.get(e);a!=null&&(this.disposeData(a.real.dataId,!0),this.disposeData(a.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){ye([e],"where");let t=this.readSync(e.dataId);return kF(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Eh.nextDataId=0;var Rh={};Xe(Rh,{addImpl:()=>G4,bincountImpl:()=>n3,bincountReduceImpl:()=>H4,castImpl:()=>U4,ceilImpl:()=>j4,concatImpl:()=>r3,equalImpl:()=>q4,expImpl:()=>K4,expm1Impl:()=>Y4,floorImpl:()=>J4,gatherNdImpl:()=>Q4,gatherV2Impl:()=>e7,greaterEqualImpl:()=>a7,greaterImpl:()=>t7,lessEqualImpl:()=>r7,lessImpl:()=>n7,linSpaceImpl:()=>s7,logImpl:()=>i7,maxImpl:()=>o7,maximumImpl:()=>l7,minimumImpl:()=>u7,multiplyImpl:()=>s3,negImpl:()=>d7,notEqualImpl:()=>p7,prodImpl:()=>c7,raggedGatherImpl:()=>h7,raggedRangeImpl:()=>f7,raggedTensorToTensorImpl:()=>m7,rangeImpl:()=>o3,rsqrtImpl:()=>g7,scatterImpl:()=>el,sigmoidImpl:()=>xO,simpleAbsImpl:()=>V4,sliceImpl:()=>Rc,sparseFillEmptyRowsImpl:()=>A7,sparseReshapeImpl:()=>y7,sparseSegmentReductionImpl:()=>l3,sqrtImpl:()=>bO,squaredDifferenceImpl:()=>b7,stridedSliceImpl:()=>v7,stringNGramsImpl:()=>u3,stringSplitImpl:()=>d3,stringToHashBucketFastImpl:()=>p3,subImpl:()=>w7,tileImpl:()=>k7,topKImpl:()=>S7,transposeImpl:()=>i3,uniqueImpl:()=>T7});function V4(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;ye(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=V4(r),a.makeOutput(n,t.shape,t.dtype)},SF={kernelName:vl,backendName:"cpu",kernelFunc:IF};function Lt(e){return(t,a,n,r,s)=>{let i=T.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),p=v.getTypedArrayFromDType(s,u),c=t.length,d=a.length,h=v.computeStrides(t),f=v.computeStrides(a),m=T.getBroadcastDims(t,i),g=T.getBroadcastDims(a,i);if(m.length+g.length===0)for(let x=0;xy[C]=0);let b=v.locToIndex(y,c,h),w=A.slice(-d);g.forEach(C=>w[C]=0);let S=v.locToIndex(w,d,f);p[x]=e(n[b],r[S])}return[p,i]}}function qa(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}var TF={kernelName:Sd,backendName:"cpu",kernelFunc:qa};function Ec(e,t,a="float32"){if(a==="complex64"){let r=Ec(e,t,"float32"),s=Ec(e,t,"float32");return qa({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function Qn(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var CF={kernelName:vi,backendName:"cpu",kernelFunc:Qn};function Ws(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}var NF={kernelName:Md,backendName:"cpu",kernelFunc:Ws};function U4(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=Lt((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function Zr(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return Qn({inputs:{x:r},backend:a});let p=Ec(a,r.shape,r.dtype),c=Zr({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=qa({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=Ws({inputs:{input:r},backend:a}),c=Zr({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=Qn({inputs:{x:r},backend:a});return{dataId:p.dataId,shape:p.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=U4(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var EF={kernelName:Qs,backendName:"cpu",kernelFunc:Zr};function Yt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;ye([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=i.dtype==="string"?T.fromUint8ToStringArray(u):u,d=i.dtype==="string"?T.fromUint8ToStringArray(p):p,h=n||i.dtype,[f,m]=t(i.shape,o.shape,c,d,h);return l.makeTensorInfo(m,h,f)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=Zr({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),p=l.data.get(u.dataId),c=p.complexTensorInfos.real,d=p.complexTensorInfos.imag,h=l.data.get(c.dataId).values,f=l.data.get(d.dataId).values,m=Zr({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(m.dataId),x=g.complexTensorInfos.real,A=g.complexTensorInfos.imag,y=l.data.get(x.dataId).values,b=l.data.get(A.dataId).values,[w,S,C]=a(i.shape,o.shape,h,f,y,b),E=l.makeTensorInfo(C,"float32",w),_=l.makeTensorInfo(C,"float32",S),$=qa({inputs:{real:E,imag:_},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(E),l.disposeIntermediateTensorInfo(_),$}else{let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=n||i.dtype,[d,h]=t(i.shape,o.shape,u,p,c);return l.makeTensorInfo(h,c,d)}}}function a3(e){return(t,a,n,r,s,i)=>{let o=T.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,p=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),d=v.getTypedArrayFromDType("float32",l),h=T.getBroadcastDims(t,o),f=T.getBroadcastDims(a,o),m=T.mergeRealAndImagArrays(n,r),g=T.mergeRealAndImagArrays(s,i),x=t.length,A=v.computeStrides(t),y=a.length,b=v.computeStrides(a);if(h.length+f.length===0)for(let w=0;wC[I]=0);let E=v.locToIndex(C,x,A),_=S.slice(-y);f.forEach(I=>_[I]=0);let $=v.locToIndex(_,y,b),M=e(m[E*2],m[E*2+1],g[$*2],g[$*2+1]);c[w]=M.real,d[w]=M.imag}return[c,d,o]}}var G4=Lt((e,t)=>e+t),RF=a3((e,t,a,n)=>({real:e+a,imag:t+n})),fl=Yt(Qr,G4,RF),MF={kernelName:Qr,backendName:"cpu",kernelFunc:fl};function n3(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function H4(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=Me([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function ss(e){return(t,a,n)=>{let r=v.getTypedArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;if(ye(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=v.sizeFromShape(i.shape),p=a||i.dtype,c=v.getArrayFromDType(p,u);for(let d=0;d{let{x:i}=n;if(ye(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=a||i.dtype,p=t(l,u,r);return o.makeTensorInfo(i.shape,u,p)}}var j4=ss(e=>Math.ceil(e)),$F=iu(ei,j4),_F={kernelName:ei,backendName:"cpu",kernelFunc:$F};function r3(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?T.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),X4=Yt(ci,q4,null,"bool"),PF={kernelName:ci,backendName:"cpu",kernelFunc:X4},K4=ss(e=>Math.exp(e)),Z4=iu(hi,K4,"float32"),FF={kernelName:hi,backendName:"cpu",kernelFunc:Z4},Y4=ss(e=>Math.expm1(e)),OF=iu(_l,Y4),DF={kernelName:_l,backendName:"cpu",kernelFunc:OF},J4=ss(e=>Math.floor(e)),zF=iu(mi,J4),LF={kernelName:mi,backendName:"cpu",kernelFunc:zF};function Q4(e,t,a,n,r,s,i,o,l){let u=Me([n,s],a);for(let p=0;p=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),BF=Yt(yi,t7,null,"bool"),WF={kernelName:yi,backendName:"cpu",kernelFunc:BF},a7=Lt((e,t)=>e>=t?1:0),VF=Yt(bi,a7,null,"bool"),UF={kernelName:bi,backendName:"cpu",kernelFunc:VF},n7=Lt((e,t)=>ee<=t?1:0),jF=Yt(Si,r7,null,"bool"),qF={kernelName:Si,backendName:"cpu",kernelFunc:jF};function s7(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),XF=iu(Ti,i7),KF={kernelName:Ti,backendName:"cpu",kernelFunc:XF};function o7(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var l7=Lt((e,t)=>Math.max(e,t)),ZF=Yt(Ri,l7),YF={kernelName:Ri,backendName:"cpu",kernelFunc:ZF},u7=Lt((e,t)=>Math.min(e,t)),JF=Yt(Pi,u7),QF={kernelName:Pi,backendName:"cpu",kernelFunc:JF},s3=Lt((e,t)=>e*t),eO=a3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),Mh=Yt(Oi,s3,eO),tO={kernelName:Oi,backendName:"cpu",kernelFunc:Mh};function d7(e,t,a){let n=v.createScalarValue(-1,a);return s3([],t,n,e,a)}function aO(e){let{inputs:t,backend:a}=e,{x:n}=t;ye(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=d7(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var nO={kernelName:Wl,backendName:"cpu",kernelFunc:aO},p7=Lt((e,t)=>e!==t?1:0),rO=Yt(Di,p7,null,"bool"),sO={kernelName:Di,backendName:"cpu",kernelFunc:rO};function i3(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let p=0;pa.disposeIntermediateTensorInfo(A)),a.makeTensorInfo(x,g,f)}var lO={kernelName:Gi,backendName:"cpu",kernelFunc:oO};function uO(e,t,a){e.forEach((n,r)=>{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function dO(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function pO(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);dO(a,n);let l=1;for(let u=0;u=0){let m=o[f],g=m[m.length-1]-h[p];for(let x=p;xr[i]=s)}return t}function nx(e,t){let a=e.slice(0,t);for(;a.length1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,p=[];o||p.push(t[0]),l||p.push(r[0]),u||p.push(i[0]);for(let g=1;g0&&Ax)b=0;else if(b=Math.ceil(Math.abs((A-x)/y)),b>rx)throw new Error(`Requires ((limit - start) / delta) <= ${rx}`);d[g+1]=d[g]+b}let h=d[c],f=v.getArrayFromDType(a,h),m=0;for(let g=0;ga&&(a=r)}return a}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let a=0,n=e[0],r=0;for(let s=1;s"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,a,n){let r=e.length,s=[];for(let i=0;i0&&s.length!==e[r-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,a,n){let r=e.length,s=[];if(r===0)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${p} which is not less than ${t.length}`);l=t[p]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,a,n){let r=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case bn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,a,n);case bn.ROW_SPLITS:if(r.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${r.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(r,t,a,n);default:throw new Error(`Unsupported partition type: ${bn[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case bn.FIRST_DIM_SIZE:return e[0];case bn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case bn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${bn[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),a=new Array(this.raggedRank+1);a[a.length-1]=1;for(let s=a.length-2;s>=0;--s)a[s]=a[s+1]*t[s+1];let n=ix(t,!1),r=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(n));if(a[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,a[0],t[0]);for(let i=1;i<=this.raggedRank;++i)s=this.calculateOutputIndex(i-1,s,a[i],t[i]);this.setOutput(this.raggedRank,s,r,n)}return[n,r]}setOutput(e,t,a,n){if(a.length===0)return;let r=this.values,s=a,i=n.slice();i=i.slice(e+1);let o=v.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&u.length!==1){let h=this.defaultValueShape;$e(()=>{let f=J(u,h);u=rl(f,i).dataSync()})}let p=0,c=0,d=0;for(let h=0;h<=l;++h){let f=h=l){let m=a.length;f=Math.floor(m/o)}if(f>d)if(this.defaultValue.length===1)s.subarray(d*o,f*o).fill(this.defaultValue[0]),d=f;else for(;f>d;){let m=s.slice(d*o);sx(m,u,o),++d}f<0?(p=h+1,c=d):(p=h,c=d,d=c+1)}}};function sx(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function m7(e,t,a,n,r,s,i,o,l,u){return new g1(e,t,a,n,r,s,i,o,l,u).compute()}function o3(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),mO=iu(Yi,g7),gO={kernelName:Yi,backendName:"cpu",kernelFunc:mO};function el(e,t,a,n,r,s,i,o,l,u){let p=[n/r,r],c=e.values,d=t.values;if(n===0)return Me(a,t.dtype);let h=Me(p,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let f=0;f=n/r)throw new Error(`Invalid indices: ${m} does not index into ${a}`);for(let x=0;x1/(1+Math.exp(-e))),x7=ot(eo,e=>1/(1+Math.exp(-e))),AO={kernelName:eo,backendName:"cpu",kernelFunc:x7};function Rc(e,t,a,n,r){let s=It.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=It.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?T.fromUint8ToStringArray(e):e,u=Me(n,r,l),p=Me(a,r);for(let c=0;cf+t[m]);p.set(u.get(...h),...d)}return r==="string"?T.fromStringArrayToUint8(p.values):p.values}function Vs(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;ye(r,"slice");let[o,l]=It.parseSliceParams(r,s,i);It.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,p=Rc(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var yO={kernelName:Kl,backendName:"cpu",kernelFunc:Vs};function A7(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),p=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(T.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),x=v.getArrayFromDType(r,0);return[g,[0,c],x,u,p]}let d=!0,h=0,f=new Array(l).fill(0);for(let g=0;g=l)throw new Error(T.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,l));++f[x],d=d&&x>=h,h=x}let m=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(m&&d){let g=e,x=n;for(let A=0;A0){d[c-1]=1;for(let m=c-2;m>=0;--m)d[m]=d[m+1]*n[m+1]}let h=[];if(o>0){h[o-1]=1;for(let m=o-2;m>=0;--m)h[m]=h[m+1]*l[m+1]}let f=v.getArrayFromDType(a,i*o);for(let m=0;m0?r[o-1]+1:0;if(p<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=p;let d=c.reduce((A,y)=>A*y,1),h=v.getArrayFromDType(a,d);if(o===0)return p>0&&h.fill(i),[h,c];if(p<=0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let f=0,m=1,g=0,x=r[f];for(;;){let A=0;if(m=A)throw new Error(T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(x<0||x>=p)throw new Error(T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x,p));x>g&&h.fill(i,g*u,x*u);for(let y=f;y=l[0])throw new Error(T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(y,n[y],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),vO=ot(to,e=>Math.sqrt(e)),wO={kernelName:to,backendName:"cpu",kernelFunc:vO},b7=Lt((e,t)=>{let a=e-t;return a*a}),kO=Yt(ro,b7),IO={kernelName:ro,backendName:"cpu",kernelFunc:kO};function v7(e,t,a,n){let r=Me(e,t.dtype);for(let s=0;s0?0:i-o),d=0;d+=l*this.leftPad.length;for(let x=0;xx.forEach(A=>f[m++]=A);for(let x=0;x0){g(e[c+p-1]);for(let x=0;x0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(p=>{u+=this.getNumNGrams(l,p)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],d=this.getNumNGrams(c,p);this.createNGrams(e,l,i,u,d,p),u+=d}),this.preserveShort&&u===s[o]){let p=t[o+1]-t[o];if(p===0)continue;let c=p+2*this.padWidth,d=1;this.createNGrams(e,l,i,u,d,c)}}return[i,s]}};function u3(e,t,a,n,r,s,i,o){return new SO(a,n,r,s,i,o).compute(e,t)}function TO(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),CO=a3((e,t,a,n)=>({real:e-a,imag:t-n})),c3=Yt(io,w7,CO),NO={kernelName:io,backendName:"cpu",kernelFunc:c3};function k7(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function I7(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),p=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*p*(o-p)/o)*Math.sign(l-o/2),d=Math.max(a,Math.floor(t-l*p/o+c)),h=Math.min(n,Math.floor(t+(o-l)*p/o+c));I7(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Hu(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Hu(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function S7(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cf[y]={value:A,index:y}),n{for(let g=0;gnew Eh,1);var C7=ot(pi,e=>e>=0?e:Math.exp(e)-1),RO={kernelName:pi,backendName:"cpu",kernelFunc:C7};function N7(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;ye([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=a.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;ue<0?t*e:e);function E7(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;ye([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=$O(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var _O={kernelName:Ui,backendName:"cpu",kernelFunc:E7},R7=ot(ji,e=>Math.max(0,e)),PO={kernelName:ji,backendName:"cpu",kernelFunc:R7},M7=ot(Ki,e=>Math.min(Math.max(0,e),6)),FO={kernelName:Ki,backendName:"cpu",kernelFunc:M7};function Mc(e,t,a,n,r){if(a==="linear")return Qn({inputs:{x:t},backend:e});if(a==="relu")return R7({inputs:{x:t},backend:e});if(a==="elu")return C7({inputs:{x:t},backend:e});if(a==="relu6")return M7({inputs:{x:t},backend:e});if(a==="prelu")return E7({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return N7({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return x7({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function mt(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=v.sizeFromShape(r.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),a.incRef(r.dataId);let u=a.data.get(r.dataId);if(u.complexTensorInfos!=null){let p=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;p.shape=o,c.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var OO={kernelName:jl,backendName:"cpu",kernelFunc:mt};function $7(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;ye([r,s],"matMul");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],d=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],f=r.shape.slice(0,-2),m=s.shape.slice(0,-2),g=v.sizeFromShape(f),x=v.sizeFromShape(m),A=mo.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([d,h]);v.assert(p===c,()=>`Error in matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let y=i?[g,p,d]:[g,d,p],b=o?[x,h,c]:[x,c,h],w=mt({inputs:{x:r},backend:a,attrs:{shape:y}}),S=mt({inputs:{x:s},backend:a,attrs:{shape:b}}),C=i?w.shape[1]:w.shape[2],E=i?w.shape[2]:w.shape[1],_=o?S.shape[1]:S.shape[2],$=Math.max(g,x),M=a.data.get(w.dataId).values,I=a.data.get(S.dataId).values,N=v.computeStrides(w.shape),O=v.computeStrides(S.shape),[L,B,G]=i?[N[0],1,N[1]]:[N[0],N[1],1],[j,U,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],V=E*_,Q=Me([$,E,_],w.dtype),Z=Q.values,re=a.blockSize;for(let ee=0;ee<$;ee++)for(let he=0;heMath.acos(e)),WO={kernelName:wl,backendName:"cpu",kernelFunc:BO},VO=ot(kl,e=>Math.acosh(e)),UO={kernelName:kl,backendName:"cpu",kernelFunc:VO};function GO(e){let{inputs:t,backend:a}=e,n=t;ye(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=Me(n[0].shape,n[0].dtype),i=s.values;for(let o=0;oA&&(A=w,y=b)}h[g]=y}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var YO={kernelName:Zs,backendName:"cpu",kernelFunc:ZO};function JO(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;ye(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=La({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],T.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,c]=T.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(p),h=v.makeZerosTypedArray(d,"int32"),f=v.sizeFromShape(c),m=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var QO={kernelName:kd,backendName:"cpu",kernelFunc:JO},eD=ot(Il,e=>Math.asin(e)),tD={kernelName:Il,backendName:"cpu",kernelFunc:eD},aD=ot(Sl,e=>Math.asinh(e)),nD={kernelName:Sl,backendName:"cpu",kernelFunc:aD},rD=ot(Tl,e=>Math.atan(e)),sD={kernelName:Tl,backendName:"cpu",kernelFunc:rD},iD=Lt((e,t)=>Math.atan2(e,t)),oD=Yt(Nl,iD),lD={kernelName:Nl,backendName:"cpu",kernelFunc:oD},uD=ot(Cl,e=>Math.atanh(e)),dD={kernelName:Cl,backendName:"cpu",kernelFunc:uD};function h3(e,t,a,n,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,p=r.effectiveFilterHeight,c=r.effectiveFilterWidth,d=r.padInfo.top,h=r.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=Me(r.outShape,a),g=m.values,x=r.outShape[1]*r.outShape[2]*r.outShape[3],A=r.outShape[2]*r.outShape[3],y=r.outShape[3];for(let b=0;bG?G=ee:s==="avg"&&(j+=ee,U++)}if(isNaN(G))break}let H=I+N*y+C;g[H]=s==="avg"?j/U:G}}}return m}function _7(e,t,a,n,r=!1,s=!1){let i=Me(n.outShape,"int32"),o=n.strideHeight,l=n.strideWidth,u=n.dilationHeight,p=n.dilationWidth,c=n.effectiveFilterHeight,d=n.effectiveFilterWidth,h=n.padInfo.top,f=n.padInfo.left,m=Me(t,a,e);for(let g=0;g$&&($=B,r?M=s?((g*n.inHeight+I)*n.inWidth+O)*n.inChannels+x:(I*n.inWidth+O)*n.inChannels+x:M=N*d+L)}}i.set(M,g,A,S,x)}}return i}function P7(e,t,a,n,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,p=r.dilationHeight,c=r.dilationWidth,d=r.effectiveFilterDepth,h=r.effectiveFilterHeight,f=r.effectiveFilterWidth,m=r.padInfo.front,g=r.padInfo.top,x=r.padInfo.left,A=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,y=Me(r.outShape,a),b=y.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],S=r.outShape[2]*r.outShape[3]*r.outShape[4],C=r.outShape[3]*r.outShape[4],E=r.outShape[4];for(let _=0;_Ae?Ae=ht:s==="avg"&&(we+=ht,Re++),isNaN(Ae))break}if(isNaN(Ae))break}if(isNaN(Ae))break}let Ge=oe+I;b[Ge]=s==="avg"?we/Re:Ae}}}}return y}function pD(e,t){let a=Me(t.outShape,"int32"),n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,p=t.effectiveFilterHeight,c=t.effectiveFilterWidth,d=t.padInfo.front,h=t.padInfo.top,f=t.padInfo.left;for(let m=0;m=N&&(N=V,O=B*p*c+j*p+H)}}}a.set(O,m,x,w,_,g)}}}return a}function cD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ye(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(T.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=T.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=Qn({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),f=h3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,f.values)}return c}var hD={kernelName:Ys,backendName:"cpu",kernelFunc:cD};function fD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;ye(r,"avgPool3d");let p=T.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=P7(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var mD={kernelName:Vc,backendName:"cpu",kernelFunc:fD};function gD(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;ye([r,s],"avgPool3DGrad");let p=T.computePool3DInfo(s.shape,i,o,1,l,u),c=p.strideDepth,d=p.strideHeight,h=p.strideWidth,f=p.filterDepth,m=p.filterHeight,g=p.filterWidth,x=p.dilationDepth,A=p.dilationHeight,y=p.dilationWidth,b=p.effectiveFilterDepth,w=p.effectiveFilterHeight,S=p.effectiveFilterWidth,C=b-1-p.padInfo.front,E=S-1-p.padInfo.left,_=w-1-p.padInfo.top,$=Me(s.shape,"float32"),M=1/(f*m*g),I=a.bufferSync(r);for(let N=0;N=p.outDepth||Math.floor(Z)!==Z))for(let re=0;re=p.outHeight||Math.floor(ee)!==ee))for(let he=0;he=p.outWidth||Math.floor(oe)!==oe)continue;let Ae=I.get(N,Z,ee,oe,O);V+=Ae}}}$.set(V*M,N,L,B,G,O)}return a.makeTensorInfo($.shape,$.dtype,$.values)}var xD={kernelName:W1,backendName:"cpu",kernelFunc:gD};function AD(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;ye([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=T.computePool2DInfo(i.shape,o,l,1,u),c=p.strideHeight,d=p.strideWidth,h=p.filterHeight,f=p.filterWidth,m=p.dilationHeight,g=p.dilationWidth,x=p.effectiveFilterHeight,A=p.effectiveFilterWidth,y=A-1-p.padInfo.left,b=x-1-p.padInfo.top,w=Me(i.shape,"float32"),S=1/(h*f),C=a.data.get(r.dataId).values,E=Me(r.shape,"float32",C);for(let _=0;_=p.outHeight||Math.floor(G)!==G))for(let j=0;j=p.outWidth||Math.floor(U)!==U)continue;let H=E.get(_,G,U,$);L+=H}}w.set(L*S,_,M,I,$)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var yD={kernelName:B1,backendName:"cpu",kernelFunc:AD};function bD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),ye([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=n;u==null&&(u=.001);let p=a.data.get(r.dataId).values,c=a.data.get(o.dataId).values,d=a.data.get(l.dataId).values,h=s?a.data.get(s.dataId).values:new Float32Array([1]),f=i?a.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(p.length),g=f.length,x=h.length,A=d.length,y=c.length,b=0,w=0,S=0,C=0;for(let E=0;E=g&&(b=0),w>=y&&(w=0),S>=x&&(S=0),C>=A&&(C=0);return a.makeTensorInfo(r.shape,r.dtype,m)}var vD={kernelName:xi,backendName:"cpu",kernelFunc:bD};function wD(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;ye([r],"batchToSpaceND");let o=s.reduce((x,A)=>x*A),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),p=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),d=T.getSliceSize(p,i,s.length),h=mt({inputs:{x:r},backend:a,attrs:{shape:l}}),f=La({inputs:{x:h},backend:a,attrs:{perm:u}}),m=mt({inputs:{x:f},backend:a,attrs:{shape:p}}),g=Vs({inputs:{x:m},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),g}var kD={kernelName:El,backendName:"cpu",kernelFunc:wD};function ID(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,u=n3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var SD={kernelName:Id,backendName:"cpu",kernelFunc:ID};function TD(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=T.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var CD={kernelName:Uc,backendName:"cpu",kernelFunc:TD},ND=ot(es,(e,t)=>{let a=t;return e>a.clipValueMax?a.clipValueMax:e{let{x:t}=e.inputs,a=e.backend,n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values;for(let u=0;um.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(m=>m.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(m=>v.sizeFromShape(m.shape)>0);if(l.length===1)return Qn({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let m=l.map(b=>Ws({inputs:{input:b},backend:a})),g=l.map(b=>ml({inputs:{input:b},backend:a})),x=gl({inputs:m,backend:a,attrs:{axis:s}}),A=gl({inputs:g,backend:a,attrs:{axis:s}}),y=qa({inputs:{real:x,imag:A},backend:a});return m.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(x),a.disposeIntermediateTensorInfo(A),y}let u=l.map(m=>{let g=[-1,v.sizeFromShape(m.shape.slice(s))];return mt({inputs:{x:m},backend:a,attrs:{shape:g}})}),p=u.map(m=>({vals:a.data.get(m.dataId).values,shape:m.shape}));o=T.computeOutShape(u.map(m=>m.shape),1);let c=u[0].shape[0]===1,d=r3(p,o,t[0].dtype,c),h=T.computeOutShape(l.map(m=>m.shape),s),f=a.makeTensorInfo(h,t[0].dtype,d);return u.forEach(m=>a.disposeIntermediateTensorInfo(m)),f}var _D={kernelName:Rl,backendName:"cpu",kernelFunc:gl};function F7(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n;ye([r,s],"conv2d");let c=T.convertConv2DDataFormat(l),d=T.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,g=d.dilationWidth,x=d.padInfo.left,A=d.padInfo.top,y=d.dataFormat==="channelsLast",b=new jt(d.outShape,r.dtype),w=v.computeStrides(r.shape),S=v.computeStrides(s.shape),C=w[0],E=y?w[1]:w[2],_=y?w[2]:1,$=y?1:w[1],M=b.strides[0],I=y?b.strides[1]:b.strides[2],N=y?b.strides[2]:1,O=y?1:b.strides[1],L=a.data.get(r.dataId).values,B=a.data.get(s.dataId).values,G=b.values;for(let j=0;j=d.inHeight)continue;let he=re*S[0],oe=U+ee*E;for(let Ae=0;Ae=d.inWidth)continue;let nt=he+Ge*S[1],ut=oe+Ke*_,et=nt;for(let rt=0;rt=u.inDepth)continue;let j=B*_[0],U=M+G*E[1];for(let H=0;H=u.inHeight)continue;let ee=j+Z*_[1],he=U+re*E[2];for(let oe=0;oe=u.inWidth)continue;let Ke=ee+Re*_[2],nt=he+Ge*u.inChannels,ut=Ke;for(let et=0;etMath.cos(e)),jD={kernelName:ni,backendName:"cpu",kernelFunc:HD},qD=ot(ri,e=>Math.cosh(e)),XD={kernelName:ri,backendName:"cpu",kernelFunc:qD};function KD(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,[p,c,d,h]=r.shape,f=s.shape[0],[m,g]=o,x=Me([f,m,g,h],"float32"),A=a.data.get(s.dataId).values,y=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),S=v.computeStrides(x.shape);for(let C=0;C=p)continue;let O=m>1?(M-_)*(c-1)/(m-1):0,L=g>1?(I-$)*(d-1)/(g-1):0;for(let B=0;B1?_*(c-1)+B*O:.5*(_+M)*(c-1);if(G<0||G>c-1){for(let j=0;j1?$*(d-1)+V*L:.5*($+I)*(d-1);if(Q<0||Q>d-1){for(let he=0;he1?$*(d-1)+j*L:.5*($+I)*(d-1);if(U<0||U>d-1){for(let Q=0;Qx+f-A-1:(x,A)=>x+A;for(let x=0;xx+f-A-1:(x,A)=>x+A;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],p=r.shape[3],c=l*s,d=u*s,h=p/(s*s),f=a.data.get(r.dataId).values,m=new Float32Array(o*c*d*h),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let h=T.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),{filterHeight:f,filterWidth:m,dilationHeight:g,dilationWidth:x,padInfo:A}=h,y=A.left,b=A.top,w=h.outChannels/h.inChannels,S=new jt(h.outShape,r.dtype),C=a.data.get(r.dataId).values,E=a.data.get(s.dataId).values,_=S.values;for(let $=0;$=h.inHeight)continue;let j=B*c[0],U=M+G*p[1];for(let H=0;H=h.inWidth)continue;let ee=j+Z*c[1],he=U+re*h.inChannels,oe=V,Ae=ee;for(let we=0;we{let{x:n,filter:r}=e,{strides:s,pad:i,dilations:o}=a,l=t,u=l.data.get(n.dataId).values,p=n.shape.length,c=l.data.get(r.dataId).values,d=r.shape.length,{batchSize:h,inHeight:f,inWidth:m,inChannels:g,outHeight:x,outWidth:A,padInfo:y,strideHeight:b,strideWidth:w,filterHeight:S,filterWidth:C,dilationHeight:E,dilationWidth:_,outShape:$}=T.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),M=v.sizeFromShape($),I=$.length,N=v.getArrayFromDType(n.dtype,M);for(let O=0;O=0&&Z=0&&eeH&&(H=Ae)}}}let V=v.locToIndex([O,L,G,U],I,v.computeStrides($));N[V]=H}}}return{dataId:l.write(v.toTypedArray(N,n.dtype),$,n.dtype),shape:$,dtype:n.dtype}}},hz={kernelName:Wm,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,p=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:x,padInfo:A,strideHeight:y,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:E,outShape:_}=T.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===_.length,()=>`Error in ${Wm}, dy must have the same rank as output ${_.length}, but got ${s.rank}`);let $=v.toNestedArray(_,u.data.get(s.dataId).values),M=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let I=0;I=0&&Q=0&&rej&&(j=ee,U=V,H=Z)}}}M[U][H][G]+=$[I][N][L][G]}}}return{dataId:u.write(v.toTypedArray(M,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},fz={kernelName:Bm,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,p=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:x,padInfo:A,strideHeight:y,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:E,outShape:_}=T.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===_.length,()=>`Error in ${Bm}, dy must have the same rank as output ${_.length}, but got ${s.rank}`);let $=v.toNestedArray(_,u.data.get(s.dataId).values),M=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let I=0;I=0&&Q=0&&rej&&(j=ee,U=Q,H=re)}}}M[I][U][H][G]+=$[I][N][L][G]}}}return{dataId:u.write(v.toTypedArray(M,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function lp(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;ye(r,"sum");let o;r.dtype==="bool"?o=Zr({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=Qn({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=T.getAxesPermutation(u,l),c=u,d=o;p!=null&&(d=La({inputs:{x:o},backend:a,attrs:{perm:p}}),c=T.getInnerMostAxes(c.length,l)),T.assertAxesAreInnerMostDims("sum",c,d.shape.length);let[h,f]=T.computeOutAndReduceShapes(d.shape,c),m=T.upcastType(d.dtype,"int32"),g=Ec(a,h,m),x=v.sizeFromShape(f),A=a.data.get(g.dataId).values,y=a.data.get(d.dataId).values;for(let b=0;b=0&&(d=lp({inputs:{x:d},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(d)),h--)}for(let m of f)m!==d&&a.disposeIntermediateTensorInfo(m);return d}var xz={kernelName:Cd,backendName:"cpu",kernelFunc:gz};function Az(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;ye([n,r],"eluGrad");let s=new Float32Array(v.sizeFromShape(r.shape)),i=a.data.get(r.dataId).values,o=a.data.get(n.dataId).values;for(let l=0;l=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var yz={kernelName:U1,backendName:"cpu",kernelFunc:Az},bz=T.ERF_P,vz=T.ERF_A1,wz=T.ERF_A2,kz=T.ERF_A3,Iz=T.ERF_A4,Sz=T.ERF_A5,Tz=ot(Ml,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+bz*a);return t*(1-((((Sz*n+Iz)*n+kz)*n+wz)*n+vz)*n*Math.exp(-a*a))}),Cz={kernelName:Ml,backendName:"cpu",kernelFunc:Tz};function $c(e){let{inputs:t,backend:a,attrs:n}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),mt({inputs:{x:r},backend:a,attrs:{shape:o}})}var Nz={kernelName:$l,backendName:"cpu",kernelFunc:$c},Ez=Lt((e,t)=>e/t),f3=Yt(di,Ez),x1={kernelName:di,backendName:"cpu",kernelFunc:f3};function D7(e,t,a){let n=e.shape,r=n[0],s=n[1],i=a.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],p=v.sizeFromShape(u),c=v.getTypedArrayFromDType("float32",p),d=v.getTypedArrayFromDType("float32",p);for(let g=0;g{let{image:n}=e,r=a,s=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[i,o,l,u]=n.shape,p=r.data.get(n.dataId).values;for(let c=0;c=0&&AMath.floor(e/t)),Lz=Yt(gi,zz,null,"int32"),Bz={kernelName:gi,backendName:"cpu",kernelFunc:Lz};function Wz(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=F7({inputs:{x:r,filter:s},backend:a,attrs:{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d}});if(i){let g=m;if(p==="NCHW"&&i.shape.length===1&&i.shape[0]!==1){let x=mt({inputs:{x:i},backend:a,attrs:{shape:[i.shape[0],1,1]}});m=fl({inputs:{a:m,b:x},backend:a}),a.disposeIntermediateTensorInfo(x)}else m=fl({inputs:{a:m,b:i},backend:a});a.disposeIntermediateTensorInfo(g)}if(h){let g=m;if(p==="NCHW"&&h==="prelu"&&o.shape.length===1&&o.shape[0]!==1){let x=mt({inputs:{x:o},backend:a,attrs:{shape:[o.shape[0],1,1]}});m=Mc(a,m,h,x,f),a.disposeIntermediateTensorInfo(x)}else m=Mc(a,m,h,o,f);a.disposeIntermediateTensorInfo(g)}return m}var Vz={kernelName:Hr,backendName:"cpu",kernelFunc:Wz};function Uz(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=O7({inputs:{x:r,filter:s},backend:a,attrs:{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d}});if(i){let g=m;m=fl({inputs:{a:m,b:i},backend:a}),a.disposeIntermediateTensorInfo(g)}if(h){let g=m;m=Mc(a,m,h,o,f),a.disposeIntermediateTensorInfo(g)}return m}var Gz={kernelName:jr,backendName:"cpu",kernelFunc:Uz};function Hz(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=v.sizeFromShape(n.shape),i=r.shape,o=i[i.length-1],[l,u,p,c]=T.prepareAndValidate(n,r);if(u===0)return a.makeTensorInfo(l,n.dtype,[]);let d=a.data.get(r.dataId).values,h=a.bufferSync(n),f=Q4(d,h,n.dtype,u,o,p,c,n.shape,s);return a.makeTensorInfo(l,n.dtype,f.values)}var jz={kernelName:Ai,backendName:"cpu",kernelFunc:Hz};function qz(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=n;ye([r,s],"gatherV2");let l=v.parseAxisParam(i,r.shape)[0],u=a.data.get(s.dataId).values,p=r.shape[l];for(let b=0;b=0,()=>`GatherV2: the index value ${w} is not in [0, ${p-1}]`)}let c=o;o==null&&(c=0);let d=v.sizeFromShape(s.shape),h=T.segment_util.collectGatherOpShapeInfo(r,s,l,c),f=mt({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),m=mt({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,d/h.batchSize]}}),g=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],x=a.bufferSync(m),A=a.bufferSync(f),y=e7(A,x,g);return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),a.makeTensorInfo(h.outputShape,y.dtype,y.values)}var Xz={kernelName:Fl,backendName:"cpu",kernelFunc:qz};function Kz(e){let{inputs:t,backend:a}=e,{input:n}=t,r=v.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=r/s,o=mt({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=D7(o,!0,a),u=mt({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var Zz={kernelName:Ed,backendName:"cpu",kernelFunc:Kz},Yz=ot(Ol,e=>Number.isFinite(e)?1:0,"bool"),Jz={kernelName:Ol,backendName:"cpu",kernelFunc:Yz},Qz=ot(Dl,e=>Math.abs(e)===1/0?1:0,"bool"),eL={kernelName:Dl,backendName:"cpu",kernelFunc:Qz},tL=ot(wi,e=>Number.isNaN(e)?1:0,"bool"),aL={kernelName:wi,backendName:"cpu",kernelFunc:tL};function nL(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=s7(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var rL={kernelName:Jc,backendName:"cpu",kernelFunc:nL},sL=ot(zl,e=>Math.log1p(e)),iL={kernelName:zl,backendName:"cpu",kernelFunc:sL},oL=Lt((e,t)=>e&&t),lL=Yt(Ci,oL,null,"bool"),uL={kernelName:Ci,backendName:"cpu",kernelFunc:lL},dL=ot(Ni,e=>e?0:1,"bool"),pL={kernelName:Ni,backendName:"cpu",kernelFunc:dL},cL=Lt((e,t)=>e||t),hL=Yt(Ll,cL,null,"bool"),fL={kernelName:Ll,backendName:"cpu",kernelFunc:hL};function mL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;ye(r,"LRN");let u=r.shape[3],p=u-1,c=a.data.get(r.dataId).values,d=v.sizeFromShape(r.shape),h=new Float32Array(d);function f(m){let g=m%u,x=m-g+Math.max(0,g-s),A=m-g+Math.min(g+s,p),y=0;for(;x<=A;x++){let b=c[x];y+=b*b}return y}for(let m=0;m`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=T.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=Qn({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),f=h3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,f.values)}return c}var vL={kernelName:Mi,backendName:"cpu",kernelFunc:bL};function wL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;ye(r,"maxPool3d");let p=T.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=P7(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var kL={kernelName:eh,backendName:"cpu",kernelFunc:wL};function IL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;ye([r,s],"maxPool3DGrad");let p=T.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),d=pD(c,p),h=p.strideDepth,f=p.strideHeight,m=p.strideWidth,g=p.dilationDepth,x=p.dilationHeight,A=p.dilationWidth,y=p.effectiveFilterDepth,b=p.effectiveFilterHeight,w=p.effectiveFilterWidth,S=y-1-p.padInfo.front,C=w-1-p.padInfo.left,E=b-1-p.padInfo.top,_=Me(s.shape,"float32"),$=a.bufferSync(r);for(let M=0;M=p.outDepth||Math.floor(V)!==V))for(let Q=0;Q=p.outHeight||Math.floor(Z)!==Z))for(let re=0;re=p.outWidth||Math.floor(ee)!==ee)continue;let he=y*b*w-1-d.get(M,V,Z,ee,I),oe=H*b*w+Q*w+re,Ae=he===oe?1:0;if(Ae===0)continue;let we=$.get(M,V,Z,ee,I);U+=we*Ae}}}_.set(U,M,N,O,L,I)}return a.makeTensorInfo(_.shape,_.dtype,_.values)}var SL={kernelName:j1,backendName:"cpu",kernelFunc:IL};function TL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;ye([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=T.computePool2DInfo(o.shape,l,u,1,p,c),h=a.data.get(o.dataId).values,f=Me(d.outShape,o.dtype,_7(h,o.shape,o.dtype,d).values),m=d.strideHeight,g=d.strideWidth,x=d.dilationHeight,A=d.dilationWidth,y=d.effectiveFilterHeight,b=d.effectiveFilterWidth,w=b-1-d.padInfo.left,S=y-1-d.padInfo.top,C=Me(o.shape,"float32"),E=a.data.get(r.dataId).values,_=Me(r.shape,"float32",E);for(let $=0;$=d.outHeight||Math.floor(j)!==j))for(let U=0;U=d.outWidth||Math.floor(H)!==H)continue;let V=y*b-1-f.get($,j,H,M),Q=G*b+U,Z=V===Q?1:0;if(Z===0)continue;let re=_.get($,j,H,M);B+=re*Z}}C.set(B,$,I,N,M)}return a.makeTensorInfo(C.shape,C.dtype,C.values)}var CL={kernelName:H1,backendName:"cpu",kernelFunc:TL};function NL(e,t,a,n,r){let s=v.computeStrides(t),i=h3(e,t,a,s,r,"max"),o=_7(e,t,a,r,!0,n);return[i.values,o.values]}var EL={kernelName:th,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;ye(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,p=T.computePool2DInfo(n.shape,r,s,[1,1],i),[c,d]=NL(u,n.shape,n.dtype,o,p),h=l.write(c,p.outShape,n.dtype),f=l.write(d,p.outShape,n.dtype);return[{dataId:h,shape:p.outShape,dtype:n.dtype},{dataId:f,shape:p.outShape,dtype:"int32"}]}};function RL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=T.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));p.push(c);let d=Zr({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=f3({inputs:{a:d,b:c},backend:a});p.push(h);let f=lp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return p.forEach(m=>a.disposeIntermediateTensorInfo(m)),f}var ML={kernelName:$i,backendName:"cpu",kernelFunc:RL};function $L(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;ye(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=T.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=La({inputs:{x:r},backend:a,attrs:{perm:u}}),l=T.getInnerMostAxes(l.length,r.shape.length)),T.assertAxesAreInnerMostDims("min",l,p.shape.length);let[c,d]=T.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(d),f=v.makeZerosTypedArray(v.sizeFromShape(c),p.dtype),m=a.data.get(p.dataId).values;for(let x=0;xA[0]+r.shape[y]+A[1]),l=s.map(A=>A[0]),u=s.map((A,y)=>A[0]+r.shape[y]),p=i==="reflect"?0:1,c=a.data.get(r.dataId).values,d=r.shape.length,h=v.computeStrides(r.shape),f=v.sizeFromShape(o),m=o.length,g=v.computeStrides(o),x=v.getTypedArrayFromDType(r.dtype,f);for(let A=0;A=u[w]&&(y[w]=(u[w]-1)*2-y[w]+p);y=y.map((w,S)=>w-l[S]);let b=v.locToIndex(y,d,h);x[A]=c[b]}return{dataId:a.write(x,o,r.dtype),shape:o,dtype:r.dtype}}var FL={kernelName:Fi,backendName:"cpu",kernelFunc:PL},OL=Lt((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),DL=Yt(Bl,OL),zL={kernelName:Bl,backendName:"cpu",kernelFunc:DL},LL=Al(eA());function L7(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=r.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=v.parseAxisParam([o],r.shape),u=z7({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=T.expandShapeToKeepDim(u.shape,l),c=mt({inputs:{x:u},backend:a,attrs:{shape:p}}),d=c3({inputs:{a:r,b:c},backend:a}),h=Z4({inputs:{x:d},backend:a}),f=lp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),m=mt({inputs:{x:f},backend:a,attrs:{shape:p}}),g=f3({inputs:{a:h,b:m},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(m),g}var BL={kernelName:no,backendName:"cpu",kernelFunc:L7};function WL(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;ye(r,"multinomial");let l=o?r:L7({inputs:{logits:r},backend:a,attrs:{dim:-1}}),u=l.shape[0],p=l.shape[1],c=a.data.get(l.dataId).values,d=[u,s],h=v.makeZerosTypedArray(v.sizeFromShape(d),"int32");for(let f=0;f=0&&c[d]{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=$c({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=gl({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var aB={kernelName:Gl,backendName:"cpu",kernelFunc:W7};function nB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;ye(r,"pad");let o=s.map((x,A)=>x[0]+r.shape[A]+x[1]),l=s.map(x=>x[0]),u=a.data.get(r.dataId).values,p=v.sizeFromShape(r.shape),c=r.shape.length,d=v.computeStrides(r.shape),h=v.sizeFromShape(o),f=o.length,m=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let x=0;xb+l[w]),y=v.locToIndex(A,f,m);g[y]=u[x]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var V7={kernelName:Wi,backendName:"cpu",kernelFunc:nB},rB=Lt((e,t)=>Math.pow(e,t)),sB=Yt(Vi,rB),iB={kernelName:Vi,backendName:"cpu",kernelFunc:sB};function oB(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(x=>a.data.get(x.dataId).values),u=r.map(x=>x.shape),p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[d,h,f]=h7(l,u,p,s.shape,s.dtype,c,i.shape,o),m=d.map(x=>a.makeTensorInfo([x.length],"int32",x)),g=a.makeTensorInfo(f,s.dtype,h);return m.concat([g])}var lB={kernelName:nh,backendName:"cpu",kernelFunc:oB};function uB(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,p]=f7(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),d=a.makeTensorInfo([p.length],n.dtype,p);return[c,d]}var dB={kernelName:rh,backendName:"cpu",kernelFunc:uB};function pB(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.data.get(r.dataId).values,p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,d=o.map(g=>a.data.get(g.dataId).values),h=o.map(g=>g.shape),[f,m]=m7(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(f,s.dtype,m)}var cB={kernelName:sh,backendName:"cpu",kernelFunc:pB};function hB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=o3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var fB={kernelName:Hl,backendName:"cpu",kernelFunc:hB},mB=ot(Hi,e=>1/e),gB={kernelName:Hi,backendName:"cpu",kernelFunc:mB};function xB(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;ye(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,p]=o,[c,d,h,f]=r.shape,m=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,p,f])),x=[s&&u>1?d-1:d,s&&p>1?h-1:h],A=[s&&u>1?u-1:u,s&&p>1?p-1:p],y=0,b=x[0]/A[0],w=x[1]/A[1];for(let S=0;S1?u-1:u,i&&h>1?p-1:p],g=[i&&d>1?d-1:d,i&&h>1?h-1:h],x=m[0]/g[0],A=m[1]/g[1],y=a.data.get(s.dataId).values,b=0;for(let w=0;w1?d-1:d,s&&p>1?h-1:h],A=[s&&u>1?u-1:u,s&&p>1?p-1:p],y=x[0]/A[0],b=x[1]/A[1],w=0;for(let S=0;S1?p-1:p,i&&f>1?c-1:c],A=[i&&h>1?h-1:h,i&&f>1?f-1:f],y=x[0]/A[0],b=x[1]/A[1],w=1/y,S=1/b,C=Math.ceil(w)*2+2,E=Math.ceil(S)*2+2;for(let _=0;_=h)continue;let Z=$+Q*l[1],re=Q*y,ee=Math.min(p-1,i?Math.round(re):Math.floor(re));if(M===ee)for(let he=0;he=f)continue;let Ae=Z+oe*l[2],we=oe*b,Re=Math.min(c-1,i?Math.round(we):Math.floor(we));L===Re&&(H+=g[Ae+U])}}m[B+U]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,m)}var IB={kernelName:q1,backendName:"cpu",kernelFunc:kB};function SB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;ye(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return Qn({inputs:{x:r},backend:a});let l=new jt(r.shape,r.dtype),u=a.bufferSync(r);for(let p=0;pd[h]=r.shape[h]-1-d[h]),l.set(u.get(...d),...c)}return a.makeTensorInfo(l.shape,l.dtype,l.values)}var TB={kernelName:Zi,backendName:"cpu",kernelFunc:SB},CB={kernelName:ho,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[u,p,c,d]=n.shape,[h,f]=T.getImageCenter(i,p,c),m=255,g=Math.sin(r),x=Math.cos(r),A=o.data.get(n.dataId).values;for(let y=0;y=0&&N=0&&O{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),EB={kernelName:ql,backendName:"cpu",kernelFunc:NB};function RB(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=T.calculateShapes(s,r,i),d=!0,h=a.bufferSync(r),f=a.bufferSync(s),m=el(h,f,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,m.dtype,m.values)}var MB={kernelName:Ji,backendName:"cpu",kernelFunc:RB};function $B(e,t){let a=0,n=e.length,r=0;for(;a1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let f=0;fe>=0?BB*e:LB*(Math.exp(e)-1)),VB={kernelName:_d,backendName:"cpu",kernelFunc:WB},UB=ot(Pd,e=>e<0?-1:e>0?1:0),GB={kernelName:Pd,backendName:"cpu",kernelFunc:UB},HB=ot(Qi,e=>Math.sin(e)),jB={kernelName:Qi,backendName:"cpu",kernelFunc:HB},qB=ot(Zl,e=>Math.sinh(e)),XB={kernelName:Zl,backendName:"cpu",kernelFunc:qB},KB=11920928955078125e-23,ox=Math.log(KB)+2,ZB=ot(Fd,e=>{let t=e>-ox,a=eNumber(g)))),a.makeTensorInfo([m.length],n.dtype,new Int32Array(m))]}var MW={kernelName:Od,backendName:"cpu",kernelFunc:RW};function $W(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape + ${i.shape}`);let o=a.data.get(n.dataId).values,l=a.data.get(r.dataId).values,u=a.data.get(s.dataId).values,p=a.data.get(i.dataId).values[0],[c,d,h,f,m]=A7(o,n.shape,n.dtype,l,r.dtype,u,p);return[a.makeTensorInfo(d,n.dtype,c),a.makeTensorInfo([d[0]],r.dtype,h),a.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),a.makeTensorInfo([m.length],n.dtype,new Int32Array(m))]}var tW={kernelName:Od,backendName:"cpu",kernelFunc:eW};function aW(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape - ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.data.get(r.dataId).values),o=a.data.get(n.dataId).values,l=Array.from(a.data.get(s.dataId).values),[u,d,c]=M7(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(d,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var _W={kernelName:Vl,backendName:"cpu",kernelFunc:$W};function FW(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.data.get(r.dataId).values),o=a.data.get(n.dataId).values,l=Array.from(a.data.get(s.dataId).values),[u,p,c]=y7(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var nW={kernelName:Ql,backendName:"cpu",kernelFunc:aW};function rW(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=f3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(d,n.dtype,u)}var PW={kernelName:Dd,backendName:"cpu",kernelFunc:FW};function OW(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,p]=l3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var sW={kernelName:Dd,backendName:"cpu",kernelFunc:rW};function iW(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=f3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(d,n.dtype,u)}var DW={kernelName:zd,backendName:"cpu",kernelFunc:OW};function zW(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=T.calculateShapes(s,r,o),h=!1,f=a.bufferSync(r),m;switch(s.dtype){case"bool":{let g=a.bufferSync(s),y=Boolean(a.data.get(i.dataId).values[0]);m=Zo(f,g,o,p,d,u,l,c,y,h);break}case"float32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];m=Zo(f,g,o,p,d,u,l,c,y,h);break}case"int32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];m=Zo(f,g,o,p,d,u,l,c,y,h);break}case"string":{let g=a.bufferSync(s),y=v.decodeString(a.data.get(i.dataId).values[0]);m=Zo(f,g,o,p,d,u,l,c,y,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return a.makeTensorInfo(o,m.dtype,m.values)}var LW={kernelName:Ld,backendName:"cpu",kernelFunc:zW};function BW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),d=r.shape.slice();return l.map(c=>{let p=[...d];p[o]=c;let h=li({inputs:{x:r},backend:a,attrs:{begin:u,size:p}});return u[o]+=c,h})}var WW={kernelName:Wl,backendName:"cpu",kernelFunc:BW},VW={kernelName:Bd,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;Ae(a,"square");let r=n.data.get(a.dataId).values,s=new Float32Array(r.length);for(let i=0;i{let a=t;return isNaN(e)?NaN:e>0?1:a.alpha}),UW={kernelName:oo,backendName:"cpu",kernelFunc:GW};function jW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n;Ae(r,"stridedSlice");let{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:y,begin:A,end:x,strides:b}=At.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(m)w=ft({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=At.computeOutShape(A,x,b),C=li({inputs:{x:r},backend:a,attrs:{begin:A,size:S}});w=ft({inputs:{x:C},backend:a,attrs:{shape:f}}),a.disposeIntermediateTensorInfo(C)}else{let S=a.bufferSync(r),C=_7(h,S,b,A);w=a.makeTensorInfo(f,C.dtype,C.values)}return w}var HW={kernelName:no,backendName:"cpu",kernelFunc:jW};function qW(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.data.get(d.dataId).values,h=a.data.get(c.dataId).values,[f,m]=m3(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var XW={kernelName:Gl,backendName:"cpu",kernelFunc:qW};function KW(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values[0],[u,d,c]=g3(o,l,r),p=d.length;return[a.makeTensorInfo([p,2],"int32",u),a.makeTensorInfo([p],"string",d),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var ZW={kernelName:Wd,backendName:"cpu",kernelFunc:KW};function YW(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.data.get(s.dataId).values,o=y3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var JW={kernelName:Vd,backendName:"cpu",kernelFunc:YW},QW=it(Ul,e=>Math.tan(e)),eV={kernelName:Ul,backendName:"cpu",kernelFunc:QW},tV=it(ro,e=>Math.tanh(e)),aV={kernelName:ro,backendName:"cpu",kernelFunc:tV};function nV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ae(r,"tile");let i=P7(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var rV={kernelName:As,backendName:"cpu",kernelFunc:nV};function sV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;Ae(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=D7(o,r.shape,r.dtype,s,i);return[a.makeTensorInfo(l.shape,l.dtype,l.values),a.makeTensorInfo(u.shape,u.dtype,u.values)]}var iV={kernelName:so,backendName:"cpu",kernelFunc:sV};function oV(e){let{inputs:t,attrs:a,backend:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[d,c,p,h]=r.shape,[f,m]=u!=null?u:[c,p],g=[d,f,m,h],y=v.computeStrides(r.shape),A=y[0],x=y[1],b=y[2],w=v.computeStrides(g),S=w[0],C=w[1],N=w[2],_=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));_.fill(l);let $=n.data.get(r.dataId).values,M=n.data.get(s.dataId).values;for(let I=0;It-1)if(t<=1)a=0;else{let n=2*t;a-=n*Math.trunc(a/n),a>=t&&(a=n-a-1)}return v.clamp(0,a,t-1)}function dV(e,t){let a=e;if(a<0)if(t<=1)a=0;else{let n=t-1;a+=t*(Math.trunc(-a/n)+1)}else if(a>t-1)if(t<=1)a=0;else{let n=t-1;a-=t*Math.trunc(a/n)}return v.clamp(0,a,t-1)}function pV(e,t){return e}function cV(e,t){return v.clamp(0,e,t-1)}function zu(e,t,a,n,r,s,i,o,l,u,d){let c=i*n+o*r+l*s+u;return 0<=o&&oa.disposeIntermediateTensorInfo(f)),h}var bV={kernelName:hh,backendName:"cpu",kernelFunc:xV},vV=[mD,tO,yD,xD,oO,vD,kD,SD,CD,ED,MD,_D,PD,zD,BD,GD,jD,qD,KD,hD,YD,QD,tz,nz,sO,uO,sz,aO,oz,uz,dz,cz,fz,gz,Az,bz,wz,Iz,Tz,Nz,Rz,$z,Fz,Pz,Dz,Lz,Wz,Vz,Gz,Uz,qz,iD,Kz,dO,nL,pO,rL,hO,dL,pL,hL,mO,gL,AL,bL,wL,IL,yO,xO,nO,TL,lz,NL,RL,$L,oD,vO,kO,FL,SO,OL,LL,WL,UL,HL,XL,KL,CO,YL,QL,tB,nB,sB,oB,uB,EO,pB,fB,AB,MO,_O,vB,IB,CB,PO,EB,MB,$B,e6,OB,uD,zO,zB,BB,VB,UB,rO,x1,HB,dD,pD,cD,XB,ZB,JB,eW,aW,nW,sW,HO,oW,cW,fW,AW,XO,bW,wW,IW,KO,gB,CW,EW,MW,_W,PW,DW,LW,WW,JO,VW,eD,UW,HW,XW,ZW,JW,rD,jz,eV,aV,rV,iV,lV,OO,gV,AV,bV,RB];for(let e of vV)hn(e);var t6={};He(t6,{assertNotComplex:()=>Jl,bindCanvasToFramebuffer:()=>$V,bindColorTextureToFramebuffer:()=>mc,bindTextureToProgramUniformSampler:()=>g6,bindTextureUnit:()=>h6,bindVertexBufferToProgramAttribute:()=>v1,callAndCheck:()=>ce,canBeRepresented:()=>a6,createFragmentShader:()=>s6,createFramebuffer:()=>c6,createProgram:()=>i6,createStaticIndexBuffer:()=>u6,createStaticVertexBuffer:()=>l6,createTexture:()=>d6,createVertexShader:()=>r6,getBatchDim:()=>ui,getExtensionOrThrow:()=>Lu,getFramebufferErrorMessage:()=>y6,getMaxTexturesInShader:()=>v6,getNumChannels:()=>RV,getProgramUniformLocation:()=>m6,getProgramUniformLocationOrThrow:()=>f6,getRowsCols:()=>di,getShapeAs3D:()=>Wu,getTextureShapeFromLogicalShape:()=>x6,getWebGLDisjointQueryTimerVersion:()=>w6,getWebGLErrorMessage:()=>n6,getWebGLMaxTextureSize:()=>b6,hasExtension:()=>dn,isCapableOfRenderingToFloatTexture:()=>k6,isDownloadFloatTextureEnabled:()=>I6,isReshapeFree:()=>ld,isWebGLFenceEnabled:()=>S6,isWebGLVersionEnabled:()=>k1,linkProgram:()=>o6,logShaderSourceAndInfoLog:()=>k3,resetMaxTextureSize:()=>_V,resetMaxTexturesInShader:()=>FV,unbindColorTextureFromFramebuffer:()=>w1,unbindTextureUnit:()=>MV,validateFramebuffer:()=>Bu,validateProgram:()=>fc,validateTextureSize:()=>p6});var Zs={},ic={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function Dh(e,t){Zs[e]=t}function Dn(e,t){if(!(e in Zs)||t!=null){let n=kV(e,t);if(n!==null)Zs[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Zs[e];return a==null||a.isContextLost()?(delete Zs[e],Dn(e)):(a.disable(a.DEPTH_TEST),a.disable(a.STENCIL_TEST),a.disable(a.BLEND),a.disable(a.DITHER),a.disable(a.POLYGON_OFFSET_FILL),a.disable(a.SAMPLE_COVERAGE),a.enable(a.SCISSOR_TEST),a.enable(a.CULL_FACE),a.cullFace(a.BACK),Zs[e])}function wV(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function kV(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?wV(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Zs[e]},!1),V().getBool("SOFTWARE_WEBGL_ENABLED")&&(ic.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",ic)||a.getContext("experimental-webgl",ic):a.getContext("webgl2",ic)}var od;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(od||(od={}));var un;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(un||(un={}));var aa;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(aa||(aa={}));function up(e,t){return[t,e]}function IV(e,t){return e*t}function oc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Yl(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function SV(e,t){let[a,n]=Yl(e,t);return a*n*4}function w3(e,t){let a=e,n,r,s,i,o,l,u,d,c,p;return V().getNumber("WEBGL_VERSION")===2?(n=a.R32F,r=a.R16F,s=a.RGBA16F,i=a.RGBA32F,o=a.RED,u=4,d=1,c=a.HALF_FLOAT,p=a.FLOAT,l=a.RGBA8):(n=e.RGBA,r=e.RGBA,s=e.RGBA,i=a.RGBA,o=e.RGBA,u=4,d=4,c=t!=null?t.HALF_FLOAT_OES:null,p=e.FLOAT,l=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:d,textureTypeHalfFloat:c,textureTypeFloat:p}}function ce(e,t){let a=t();return V().getBool("DEBUG")&&TV(e),a}function TV(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+n6(e,t))}var CV=596e-10,NV=65504;function a6(e){return!!(V().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||CVe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function r6(e,t){let a=Sr(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(a)),new Error("Failed to compile vertex shader.");return a}function s6(e,t){let a=Sr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),V().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw k3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var EV=/ERROR: [0-9]+:([0-9]+):/g;function k3(e,t){let a=EV.exec(t);if(a==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let n=+a[1],r=e.split(` -`),s=r.length.toString().length+2,i=r.map((c,p)=>v.rightPad((p+1).toString(),s)+c),o=0;for(let c=0;c{let d=[...p];d[o]=c;let h=Vs({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var pW={kernelName:Jl,backendName:"cpu",kernelFunc:dW},cW={kernelName:Bd,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;ye(a,"square");let r=n.data.get(a.dataId).values,s=new Float32Array(r.length);for(let i=0;i{let a=t;return isNaN(e)?NaN:e>0?1:a.alpha}),fW={kernelName:co,backendName:"cpu",kernelFunc:hW};function mW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n;ye(r,"stridedSlice");let{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:x,begin:A,end:y,strides:b}=It.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(m)w=mt({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||x){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=It.computeOutShape(A,y,b),C=Vs({inputs:{x:r},backend:a,attrs:{begin:A,size:S}});w=mt({inputs:{x:C},backend:a,attrs:{shape:f}}),a.disposeIntermediateTensorInfo(C)}else{let S=a.bufferSync(r),C=v7(h,S,b,A);w=a.makeTensorInfo(f,C.dtype,C.values)}return w}var gW={kernelName:so,backendName:"cpu",kernelFunc:mW};function xW(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.data.get(p.dataId).values,h=a.data.get(c.dataId).values,[f,m]=u3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var AW={kernelName:eu,backendName:"cpu",kernelFunc:xW};function yW(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values[0],[u,p,c]=d3(o,l,r),d=p.length;return[a.makeTensorInfo([d,2],"int32",u),a.makeTensorInfo([d],"string",p),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var bW={kernelName:Wd,backendName:"cpu",kernelFunc:yW};function vW(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.data.get(s.dataId).values,o=p3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var wW={kernelName:Vd,backendName:"cpu",kernelFunc:vW},kW=ot(oo,e=>Math.tan(e)),IW={kernelName:oo,backendName:"cpu",kernelFunc:kW},SW=ot(lo,e=>Math.tanh(e)),TW={kernelName:lo,backendName:"cpu",kernelFunc:SW};function CW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;ye(r,"tile");let i=k7(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var NW={kernelName:ts,backendName:"cpu",kernelFunc:CW};function EW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;ye(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=S7(o,r.shape,r.dtype,s,i);return[a.makeTensorInfo(l.shape,l.dtype,l.values),a.makeTensorInfo(u.shape,u.dtype,u.values)]}var RW={kernelName:uo,backendName:"cpu",kernelFunc:EW};function MW(e){let{inputs:t,attrs:a,backend:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,c,d,h]=r.shape,[f,m]=u!=null?u:[c,d],g=[p,f,m,h],x=v.computeStrides(r.shape),A=x[0],y=x[1],b=x[2],w=v.computeStrides(g),S=w[0],C=w[1],E=w[2],_=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));_.fill(l);let $=n.data.get(r.dataId).values,M=n.data.get(s.dataId).values;for(let I=0;It-1)if(t<=1)a=0;else{let n=2*t;a-=n*Math.trunc(a/n),a>=t&&(a=n-a-1)}return v.clamp(0,a,t-1)}function PW(e,t){let a=e;if(a<0)if(t<=1)a=0;else{let n=t-1;a+=t*(Math.trunc(-a/n)+1)}else if(a>t-1)if(t<=1)a=0;else{let n=t-1;a-=t*Math.trunc(a/n)}return v.clamp(0,a,t-1)}function FW(e,t){return e}function OW(e,t){return v.clamp(0,e,t-1)}function ju(e,t,a,n,r,s,i,o,l,u,p){let c=i*n+o*r+l*s+u;return 0<=o&&oa.disposeIntermediateTensorInfo(f)),h}var GW={kernelName:oh,backendName:"cpu",kernelFunc:UW},HW=[LO,SF,WO,UO,MF,HO,qO,KO,YO,QO,tD,nD,sD,lD,dD,hD,mD,xD,yD,DO,vD,kD,SD,CD,EF,_F,ED,TF,MD,_D,PD,OD,zD,BD,VD,GD,jD,XD,ZD,JD,ez,az,rz,sz,oz,uz,pz,cz,hz,fz,xz,RO,yz,PF,Cz,FF,Nz,DF,Pz,Fz,Dz,LF,Bz,Vz,Gz,jz,Xz,WF,UF,CF,Zz,$D,Jz,eL,aL,MO,HF,qF,rL,KF,iL,uL,pL,fL,gL,AL,yL,YF,vL,kL,SL,CL,EL,ML,_L,QF,FL,zL,VL,tO,nO,HL,XL,YL,sO,QL,tB,aB,V7,iB,_O,lO,lB,dB,cB,fB,NF,x1,gB,PO,FO,OO,AB,bB,wB,IB,TB,CB,EB,gO,MB,OB,zB,VB,AO,GB,jB,XB,yO,BL,YB,QB,tW,nW,sW,oW,uW,pW,wO,cW,IO,fW,gW,AW,bW,wW,NO,mz,IW,TW,NW,RW,$W,iO,BW,VW,GW,eB];for(let e of HW)fn(e);var U7={};Xe(U7,{assertNotComplex:()=>lu,bindCanvasToFramebuffer:()=>aV,bindColorTextureToFramebuffer:()=>fc,bindTextureToProgramUniformSampler:()=>r6,bindTextureUnit:()=>t6,bindVertexBufferToProgramAttribute:()=>y1,callAndCheck:()=>ue,canBeRepresented:()=>G7,createFragmentShader:()=>q7,createFramebuffer:()=>e6,createProgram:()=>X7,createStaticIndexBuffer:()=>Y7,createStaticVertexBuffer:()=>Z7,createTexture:()=>J7,createVertexShader:()=>j7,getBatchDim:()=>Us,getExtensionOrThrow:()=>qu,getFramebufferErrorMessage:()=>s6,getMaxTexturesInShader:()=>u6,getNumChannels:()=>eV,getProgramUniformLocation:()=>n6,getProgramUniformLocationOrThrow:()=>a6,getRowsCols:()=>Gs,getShapeAs3D:()=>Ku,getTextureShapeFromLogicalShape:()=>o6,getWebGLDisjointQueryTimerVersion:()=>d6,getWebGLErrorMessage:()=>H7,getWebGLMaxTextureSize:()=>l6,hasExtension:()=>pn,isCapableOfRenderingToFloatTexture:()=>p6,isDownloadFloatTextureEnabled:()=>c6,isReshapeFree:()=>md,isWebGLFenceEnabled:()=>h6,isWebGLVersionEnabled:()=>v1,linkProgram:()=>K7,logShaderSourceAndInfoLog:()=>x3,resetMaxTextureSize:()=>nV,resetMaxTexturesInShader:()=>rV,unbindColorTextureFromFramebuffer:()=>b1,unbindTextureUnit:()=>tV,validateFramebuffer:()=>Xu,validateProgram:()=>hc,validateTextureSize:()=>Q7});var $s={},sc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function $h(e,t){$s[e]=t}function On(e,t){if(!(e in $s)||t!=null){let n=qW(e,t);if(n!==null)$s[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=$s[e];return a==null||a.isContextLost()?(delete $s[e],On(e)):(a.disable(a.DEPTH_TEST),a.disable(a.STENCIL_TEST),a.disable(a.BLEND),a.disable(a.DITHER),a.disable(a.POLYGON_OFFSET_FILL),a.disable(a.SAMPLE_COVERAGE),a.enable(a.SCISSOR_TEST),a.enable(a.CULL_FACE),a.cullFace(a.BACK),$s[e])}function jW(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function qW(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?jW(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete $s[e]},!1),W().getBool("SOFTWARE_WEBGL_ENABLED")&&(sc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",sc)||a.getContext("experimental-webgl",sc):a.getContext("webgl2",sc)}var fd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(fd||(fd={}));var dn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(dn||(dn={}));var na;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(na||(na={}));function up(e,t){return[t,e]}function XW(e,t){return e*t}function ic(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function ou(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function KW(e,t){let[a,n]=ou(e,t);return a*n*4}function g3(e,t){let a=e,n,r,s,i,o,l,u,p,c,d;return W().getNumber("WEBGL_VERSION")===2?(n=a.R32F,r=a.R16F,s=a.RGBA16F,i=a.RGBA32F,o=a.RED,u=4,p=1,c=a.HALF_FLOAT,d=a.FLOAT,l=a.RGBA8):(n=e.RGBA,r=e.RGBA,s=e.RGBA,i=a.RGBA,o=e.RGBA,u=4,p=4,c=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT,l=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:p,textureTypeHalfFloat:c,textureTypeFloat:d}}function ue(e,t){let a=t();return W().getBool("DEBUG")&&ZW(e),a}function ZW(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+H7(e,t))}var YW=596e-10,JW=65504;function G7(e){return!!(W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||YWe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function j7(e,t){let a=kr(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ue(e,()=>e.shaderSource(a,t)),ue(e,()=>e.compileShader(a)),e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(a)),new Error("Failed to compile vertex shader.");return a}function q7(e,t){let a=kr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ue(e,()=>e.shaderSource(a,t)),ue(e,()=>e.compileShader(a)),W().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw x3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var QW=/ERROR: [0-9]+:([0-9]+):/g;function x3(e,t){let a=QW.exec(t);if(a==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let n=+a[1],r=e.split(` +`),s=r.length.toString().length+2,i=r.map((c,d)=>v.rightPad((d+1).toString(),s)+c),o=0;for(let c=0;ce.createProgram(),"Unable to create WebGLProgram.")}function o6(e,t){if(ce(e,()=>e.linkProgram(t)),!V().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function fc(e,t){if(ce(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function l6(e,t){let a=Sr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function u6(e,t){let a=Sr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function RV(){return V().getNumber("WEBGL_VERSION")===2?1:4}function d6(e){return Sr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function p6(e,t){let a=V().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let n=`[${e}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(e>a||t>a){let n=`[${e}x${t}]`,r=`[${a}x${a}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+r+".")}}function c6(e){return Sr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function v1(e,t,a,n,r,s,i){let o=e.getAttribLocation(t,a);return o===-1?!1:(ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ce(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ce(e,()=>e.enableVertexAttribArray(o)),!0)}function h6(e,t,a){A6(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function MV(e,t){A6(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function f6(e,t,a){return Sr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function m6(e,t,a){return e.getUniformLocation(t,a)}function g6(e,t,a,n){ce(e,()=>h6(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function $V(e){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ce(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function mc(e,t,a){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,a)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function w1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Bu(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+y6(e,t))}function y6(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function Sr(e,t,a){let n=ce(e,()=>t());if(n==null)throw new Error(a);return n}function A6(e,t){let a=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+e.TEXTURE0;if(na){let r=`[gl.TEXTURE0, gl.TEXTURE${a}]`;throw new Error(`textureUnit must be in ${r}.`)}}function ui(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function di(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function Wu(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ui(e),...di(e)]),t}function x6(e,t=!1){let a=V().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=V().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&V().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=a/2),t&&(a=a*2,n=n*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=a?s=[1,r]:e.length===2&&e[0]<=a&&e[1]<=a?s=e:e.length===3&&e[0]*e[1]<=a&&e[2]<=a?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=a&&e[1]*e[2]<=a?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=a&&e[3]<=a?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=a&&e[1]*e[2]*e[3]<=a&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=ui(e),l=2,u=2;e.length&&([l,u]=di(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(d=>d*2)}else s=v.sizeToSquarishShape(r);return s}function lc(e){return e%2===0}function ld(e,t){if(e=e.slice(-2),t=t.slice(-2),v.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let a=e.slice(-1)[0],n=t.slice(-1)[0];if(a===n||lc(a)&&lc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&lc(e[0])&&lc(t[0])}var gc,yc;function b6(e){if(gc==null){let t=Dn(e);gc=t.getParameter(t.MAX_TEXTURE_SIZE)}return gc}function _V(){gc=null}function FV(){yc=null}function v6(e){if(yc==null){let t=Dn(e);yc=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,yc)}function w6(e){if(e===0)return 0;let t,a=Dn(e);return dn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:dn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function dn(e,t){return e.getExtension(t)!=null}function k1(e){try{if(Dn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function k6(e){if(e===0)return!1;let t=Dn(e);if(e===1){if(!dn(t,"OES_texture_float"))return!1}else if(!dn(t,"EXT_color_buffer_float"))return!1;return I1(t)}function I6(e){if(e===0)return!1;let t=Dn(e);if(e===1){if(!dn(t,"OES_texture_float")||!dn(t,"WEBGL_color_buffer_float"))return!1}else{if(dn(t,"EXT_color_buffer_float"))return I1(t);let a="EXT_color_buffer_half_float";if(dn(t,a)){let n=t.getExtension(a);return PV(t,n)}return!1}return I1(t)}function I1(e){let t=w3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let n=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,n,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(s),i}function PV(e,t){let a=w3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,r,s,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(i),o}function S6(e){return e!==2?!1:Dn(e).fenceSync!=null}function Jl(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var be=V();be.registerFlag("HAS_WEBGL",()=>be.getNumber("WEBGL_VERSION")>0);be.registerFlag("WEBGL_VERSION",()=>k1(2)?2:k1(1)?1:0);be.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);be.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>be.get("WEBGL_VERSION")===2);be.registerFlag("WEBGL_CPU_FORWARD",()=>!0);be.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);be.registerFlag("WEBGL_PACK",()=>be.getBool("HAS_WEBGL"));be.registerFlag("WEBGL_PACK_NORMALIZATION",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_CLIP",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_PACK_REDUCE",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_LAZILY_UNPACK",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_CONV_IM2COL",()=>be.getBool("WEBGL_PACK"));be.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>b6(be.getNumber("WEBGL_VERSION")));be.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>v6(be.getNumber("WEBGL_VERSION")));be.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=be.getNumber("WEBGL_VERSION");return e===0?0:w6(e)});be.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>be.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Hd.isMobile());be.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>k6(be.getNumber("WEBGL_VERSION")));be.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>be.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:be.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));be.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>I6(be.getNumber("WEBGL_VERSION")));be.registerFlag("WEBGL_FENCE_API_ENABLED",()=>S6(be.getNumber("WEBGL_VERSION")));be.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>be.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);be.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});be.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Hd.isMobile()?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});be.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);be.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);be.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);be.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);be.registerFlag("WEBGL_EXP_CONV",()=>!1);be.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>be.getBool("IS_TEST"));be.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);be.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);be.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);function Ca(){let e,t,a,n,r,s,i,o,l,u;return V().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=V().getBool("WEBGL2_ISNAN_CUSTOM")?` +`)[0]),console.log(`%c ${v.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(p.join(` +`))}function X7(e){return kr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function K7(e,t){if(ue(e,()=>e.linkProgram(t)),!W().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function hc(e,t){if(ue(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Z7(e,t){let a=kr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ue(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ue(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function Y7(e,t){let a=kr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ue(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a)),ue(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function eV(){return W().getNumber("WEBGL_VERSION")===2?1:4}function J7(e){return kr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Q7(e,t){let a=W().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let n=`[${e}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(e>a||t>a){let n=`[${e}x${t}]`,r=`[${a}x${a}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+r+".")}}function e6(e){return kr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function y1(e,t,a,n,r,s,i){let o=e.getAttribLocation(t,a);return o===-1?!1:(ue(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ue(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ue(e,()=>e.enableVertexAttribArray(o)),!0)}function t6(e,t,a){i6(e,a),ue(e,()=>e.activeTexture(e.TEXTURE0+a)),ue(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function tV(e,t){i6(e,t),ue(e,()=>e.activeTexture(e.TEXTURE0+t)),ue(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function a6(e,t,a){return kr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function n6(e,t,a){return e.getUniformLocation(t,a)}function r6(e,t,a,n){ue(e,()=>t6(e,t,n)),ue(e,()=>e.uniform1i(a,n))}function aV(e){ue(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ue(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ue(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function fc(e,t,a){ue(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,a)),ue(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function b1(e,t){ue(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ue(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Xu(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+s6(e,t))}function s6(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function kr(e,t,a){let n=ue(e,()=>t());if(n==null)throw new Error(a);return n}function i6(e,t){let a=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+e.TEXTURE0;if(na){let r=`[gl.TEXTURE0, gl.TEXTURE${a}]`;throw new Error(`textureUnit must be in ${r}.`)}}function Us(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function Gs(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function Ku(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[Us(e),...Gs(e)]),t}function o6(e,t=!1){let a=W().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=W().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&W().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=a/2),t&&(a=a*2,n=n*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=a?s=[1,r]:e.length===2&&e[0]<=a&&e[1]<=a?s=e:e.length===3&&e[0]*e[1]<=a&&e[2]<=a?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=a&&e[1]*e[2]<=a?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=a&&e[3]<=a?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=a&&e[1]*e[2]*e[3]<=a&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=Us(e),l=2,u=2;e.length&&([l,u]=Gs(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function oc(e){return e%2===0}function md(e,t){if(e=e.slice(-2),t=t.slice(-2),v.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let a=e.slice(-1)[0],n=t.slice(-1)[0];if(a===n||oc(a)&&oc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&oc(e[0])&&oc(t[0])}var mc,gc;function l6(e){if(mc==null){let t=On(e);mc=t.getParameter(t.MAX_TEXTURE_SIZE)}return mc}function nV(){mc=null}function rV(){gc=null}function u6(e){if(gc==null){let t=On(e);gc=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,gc)}function d6(e){if(e===0)return 0;let t,a=On(e);return pn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:pn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function pn(e,t){return e.getExtension(t)!=null}function v1(e){try{if(On(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function p6(e){if(e===0)return!1;let t=On(e);if(e===1){if(!pn(t,"OES_texture_float"))return!1}else if(!pn(t,"EXT_color_buffer_float"))return!1;return w1(t)}function c6(e){if(e===0)return!1;let t=On(e);if(e===1){if(!pn(t,"OES_texture_float")||!pn(t,"WEBGL_color_buffer_float"))return!1}else{if(pn(t,"EXT_color_buffer_float"))return w1(t);let a="EXT_color_buffer_half_float";if(pn(t,a)){let n=t.getExtension(a);return sV(t,n)}return!1}return w1(t)}function w1(e){let t=g3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let n=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,n,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(s),i}function sV(e,t){let a=g3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,r,s,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(i),o}function h6(e){return e!==2?!1:On(e).fenceSync!=null}function lu(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var ve=W();ve.registerFlag("HAS_WEBGL",()=>ve.getNumber("WEBGL_VERSION")>0);ve.registerFlag("WEBGL_VERSION",()=>v1(2)?2:v1(1)?1:0);ve.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);ve.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>ve.get("WEBGL_VERSION")===2);ve.registerFlag("WEBGL_CPU_FORWARD",()=>!0);ve.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);ve.registerFlag("WEBGL_PACK",()=>ve.getBool("HAS_WEBGL"));ve.registerFlag("WEBGL_PACK_NORMALIZATION",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_CLIP",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_REDUCE",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_LAZILY_UNPACK",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_CONV_IM2COL",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>l6(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>u6(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=ve.getNumber("WEBGL_VERSION");return e===0?0:d6(e)});ve.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>ve.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!jd.isMobile());ve.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>p6(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>ve.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:ve.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));ve.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>c6(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_FENCE_API_ENABLED",()=>h6(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>ve.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);ve.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});ve.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>jd.isMobile()?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});ve.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);ve.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);ve.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);ve.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);ve.registerFlag("WEBGL_EXP_CONV",()=>!1);ve.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>ve.getBool("IS_TEST"));ve.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);ve.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);ve.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);ve.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Ca(){let e,t,a,n,r,s,i,o,l,u;return W().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=W().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:e,attribute:t,varyingVs:a,varyingFs:n,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function co(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / ${r}`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function zh(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / outShapeStrides[${s}]`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function OV(e,t){let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}function DV(e,t,a="index"){let n=e.map((s,i)=>i),r=OV(n,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${a} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${a} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function I3(e){let t=v.computeStrides(e).map(a=>a.toString());return` + `),{version:e,attribute:t,varyingVs:a,varyingFs:n,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function go(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / ${r}`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function _h(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / outShapeStrides[${s}]`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function iV(e,t){let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}function oV(e,t,a="index"){let n=e.map((s,i)=>i),r=iV(n,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${a} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${a} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function A3(e){let t=v.computeStrides(e).map(a=>a.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } -`}function S3(){return` +`}function y3(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var T6=` +`}var f6=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -147,22 +147,22 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return c / 255.0; } -`,{getBroadcastDims:C6}=T;function zV(e,t,a){let n=[];if(e.forEach(p=>{let h=v.sizeFromShape(p.shapeInfo.logicalShape);if(p.shapeInfo.isUniform?n.push(`uniform float ${p.name}${h>1?`[${h}]`:""};`):(n.push(`uniform sampler2D ${p.name};`),n.push(`uniform int offset${p.name};`)),a.enableShapeUniforms){let{uniformShape:f}=T3(a.packedInputs,p.shapeInfo.logicalShape,p.shapeInfo.texShape);switch(f.length){case 1:n.push(`uniform int ${p.name}Shape;`);break;case 2:n.push(`uniform ivec2 ${p.name}Shape;`);break;case 3:n.push(`uniform ivec3 ${p.name}Shape;`);break;case 4:n.push(`uniform ivec4 ${p.name}Shape;`);break;default:break}n.push(`uniform ivec2 ${p.name}TexShape;`)}}),a.enableShapeUniforms){switch(t.logicalShape.length){case 1:n.push("uniform int outShape;");break;case 2:n.push("uniform ivec2 outShape;"),n.push("uniform int outShapeStrides;");break;case 3:n.push("uniform ivec3 outShape;"),n.push("uniform ivec2 outShapeStrides;");break;case 4:n.push("uniform ivec4 outShape;"),n.push("uniform ivec3 outShapeStrides;");break;default:break}n.push("uniform ivec2 outTexShape;")}a.customUniforms&&a.customUniforms.forEach(p=>{n.push(`uniform ${p.type} ${p.name}${p.arrayIndex?`[${p.arrayIndex}]`:""};`)});let r=n.join(` -`),s=e.map(p=>LV(p,t,a.packedInputs,a.enableShapeUniforms)).join(` -`),i=t.texShape,o=Ca(),l=VV(o),u,d,c=jV(o);return t.isPacked?(u=BV(t.logicalShape,i,a.enableShapeUniforms),d=UV(o)):(u=WV(t.logicalShape,i,a.enableShapeUniforms),d=GV(o)),a.packedInputs&&(c+=KV),[c,l,d,r,u,s,a.userCode].join(` -`)}function Ql(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return oG(e,t);case 1:return uG(e,t);case 2:return pG(e,t);case 3:return hG(e,t);case 4:return mG(e,t);case 5:return gG(e);case 6:return yG(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function N6(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return iG(e);case 1:return lG(e,t);case 2:return dG(e,t);case 3:return cG(e,t);default:return fG(e,t)}}function LV(e,t,a=!1,n){let r="";a?r+=N6(e,n):r+=Ql(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=AG(e,t):r+=xG(e,t)),r}function BV(e,t,a){switch(e.length){case 0:return E6();case 1:return ZV(e,t,a);case 2:return rG(e,t,a);case 3:return JV(e,t,a);default:return eG(e,t,a)}}function WV(e,t,a){switch(e.length){case 0:return E6();case 1:return YV(e,t,a);case 2:return sG(e,t,a);case 3:return QV(e,t,a);case 4:return tG(e,t,a);case 5:return aG(e,t);case 6:return nG(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function VV(e){return` +`,{getBroadcastDims:m6}=T;function lV(e,t,a){let n=[];if(e.forEach(d=>{let h=v.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?n.push(`uniform float ${d.name}${h>1?`[${h}]`:""};`):(n.push(`uniform sampler2D ${d.name};`),n.push(`uniform int offset${d.name};`)),a.enableShapeUniforms){let{uniformShape:f}=b3(a.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(f.length){case 1:n.push(`uniform int ${d.name}Shape;`);break;case 2:n.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:n.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:n.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}n.push(`uniform ivec2 ${d.name}TexShape;`)}}),a.enableShapeUniforms){switch(t.logicalShape.length){case 1:n.push("uniform int outShape;");break;case 2:n.push("uniform ivec2 outShape;"),n.push("uniform int outShapeStrides;");break;case 3:n.push("uniform ivec3 outShape;"),n.push("uniform ivec2 outShapeStrides;");break;case 4:n.push("uniform ivec4 outShape;"),n.push("uniform ivec3 outShapeStrides;");break;default:break}n.push("uniform ivec2 outTexShape;")}a.customUniforms&&a.customUniforms.forEach(d=>{n.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let r=n.join(` +`),s=e.map(d=>uV(d,t,a.packedInputs,a.enableShapeUniforms)).join(` +`),i=t.texShape,o=Ca(),l=cV(o),u,p,c=mV(o);return t.isPacked?(u=dV(t.logicalShape,i,a.enableShapeUniforms),p=fV(o)):(u=pV(t.logicalShape,i,a.enableShapeUniforms),p=hV(o)),a.packedInputs&&(c+=yV),[c,l,p,r,u,s,a.userCode].join(` +`)}function uu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return MV(e,t);case 1:return _V(e,t);case 2:return FV(e,t);case 3:return DV(e,t);case 4:return LV(e,t);case 5:return BV(e);case 6:return WV(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function g6(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return RV(e);case 1:return $V(e,t);case 2:return PV(e,t);case 3:return OV(e,t);default:return zV(e,t)}}function uV(e,t,a=!1,n){let r="";a?r+=g6(e,n):r+=uu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=VV(e,t):r+=UV(e,t)),r}function dV(e,t,a){switch(e.length){case 0:return x6();case 1:return bV(e,t,a);case 2:return NV(e,t,a);case 3:return wV(e,t,a);default:return IV(e,t,a)}}function pV(e,t,a){switch(e.length){case 0:return x6();case 1:return vV(e,t,a);case 2:return EV(e,t,a);case 3:return kV(e,t,a);case 4:return SV(e,t,a);case 5:return TV(e,t);case 6:return CV(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function cV(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } - `}function GV(e){return` + `}function hV(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } - `}function UV(e){return` + `}function fV(e){return` void setOutput(vec4 val) { ${e.output} = val; } - `}function jV(e){return`${e.version} + `}function mV(e){return`${e.version} precision highp float; precision highp int; precision highp sampler2D; @@ -217,10 +217,10 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return fract((p3.x + p3.y) * p3.z); } - ${HV} - ${qV} - ${XV} - `}var HV=` + ${gV} + ${xV} + ${AV} + `}var gV=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -232,7 +232,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,qV=` +`,xV=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -240,7 +240,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,XV=` +`,AV=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -249,7 +249,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,KV=` +`,yV=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -260,11 +260,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } -`;function E6(){return` +`;function x6(){return` int getOutputCoords() { return 0; } - `}function ZV(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` + `}function bV(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } @@ -293,7 +293,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${n[0]}, ${n[1]})); return 2 * (resTexRC.x * ${n[1]} + resTexRC.y); } - `}function YV(e,t,a){return t[0]===1?a?` + `}function vV(e,t,a){return t[0]===1?a?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } @@ -321,7 +321,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${t[0]}, ${t[1]})); return resTexRC.x * ${t[1]} + resTexRC.y; } - `}function JV(e,t,a){if(a)return` + `}function wV(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); @@ -352,15 +352,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec3(b, r, c); } - `}function QV(e,t,a){if(a)return` + `}function kV(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${zh(["r","c","d"],e)} + ${_h(["r","c","d"],e)} return ivec3(r, c, d); } -`;let n=co(["r","c","d"],e);return` +`;let n=go(["r","c","d"],e);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec3(r, c, d); } - `}function eG(e,t,a){if(a)return` + `}function IV(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -409,15 +409,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec${e.length}(${l}); } - `}function tG(e,t,a){if(a)return` + `}function SV(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${zh(["r","c","d","d2"],e)} + ${_h(["r","c","d","d2"],e)} return ivec4(r, c, d, d2); } - `;let n=co(["r","c","d","d2"],e);return` + `;let n=go(["r","c","d","d2"],e);return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec4(r, c, d, d2); } - `}function aG(e,t){let a=co(["r","c","d","d2","d3"],e);return` + `}function TV(e,t){let a=go(["r","c","d","d2","d3"],e);return` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -437,7 +437,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec5 outShape = ivec5(r, c, d, d2, d3); return outShape; } - `}function nG(e,t){let a=co(["r","c","d","d2","d3","d4"],e);return` + `}function CV(e,t){let a=go(["r","c","d","d2","d3","d4"],e);return` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -448,7 +448,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec6 result = ivec6(r, c, d, d2, d3, d4); return result; } - `}function rG(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` + `}function NV(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); @@ -481,7 +481,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec2(r, c); } - `}function sG(e,t,a){return v.arraysEqual(e,t)?a?` + `}function EV(e,t,a){return v.arraysEqual(e,t)?a?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,15 +535,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${e[1]}; return ivec2(r, c); } - `}function ho(e){return`offset${e}`}function iG(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ca();return` + `}function xo(e){return`offset${e}`}function RV(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ca();return` vec4 ${a}() { return ${n.texture2D}(${t}, halfCR); } - `}function oG(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${a};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return` + `}function MV(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${a};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return` float ${n}() { return sampleTexture(${a}, halfCR); } - `;let i=ho(a);if(t)return` + `;let i=xo(a);if(t)return` float ${n}() { vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], ${i}); return sampleTexture(${a}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${o}, ${l}, ${i}); return sampleTexture(${a}, uv); } - `}function lG(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ca();if(t)return` + `}function $V(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ca();if(t)return` vec4 ${n}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -566,15 +566,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i[0]}, ${i[1]}, index); return ${s.texture2D}(${a}, uv); } - `}function uG(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` + `}function _V(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` float ${n}(int index) { - ${eu(e)} + ${du(e)} } `;let r=e.shapeInfo.texShape,s=r[0],i=r[1];if(i===1&&s===1)return` float ${n}(int index) { return sampleTexture(${a}, halfCR); } - `;let o=ho(a);return i===1?t?` + `;let o=xo(a);return i===1?t?` float ${n}(int index) { vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${a}TexShape[0])); return sampleTexture(${a}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${i}, index + ${o}); return sampleTexture(${a}, uv); } - `}function dG(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=Ca();if(s!=null&&v.arraysEqual(a,s))return t?` + `}function PV(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=Ca();if(s!=null&&v.arraysEqual(a,s))return t?` vec4 ${r}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]); @@ -623,32 +623,32 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col); return ${l.texture2D}(${n}, uv); } - `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],d=Math.ceil(a[1]/2);return` + `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],p=Math.ceil(a[1]/2);return` vec4 ${r}(int row, int col) { - vec2 uv = packedUVfrom2D(${d}, ${u[0]}, ${u[1]}, row, col); + vec2 uv = packedUVfrom2D(${p}, ${u[0]}, ${u[1]}, row, col); return ${l.texture2D}(${n}, uv); } - `}function pG(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape;if(s!=null&&v.arraysEqual(a,s)){if(t)return` + `}function FV(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape;if(s!=null&&v.arraysEqual(a,s)){if(t)return` float ${r}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]); return sampleTexture(${n}, uv); } - `;let p=s[0],h=s[1];return` + `;let d=s[0],h=s[1];return` float ${r}(int row, int col) { - vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${p}.0); + vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${d}.0); return sampleTexture(${n}, uv); } - `}let{newShape:i,keptDims:o}=v.squeezeShape(a),l=i;if(l.length=1?d="coords = 0;":d=o.map(g=>`coords.${c[g+u]} = 0;`).join(` -`);let p="";i<2&&s>0?p="coords":p=e.shapeInfo.logicalShape.map((g,y)=>`coords.${c[y+u]}`).join(", ");let h="return outputValue;",f=v.sizeFromShape(e.shapeInfo.logicalShape)===1,m=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!f&&!m)h=` + `}function VV(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=m6(e.shapeInfo.logicalShape,t.logicalShape),l=gt(i),u=i-s,p,c=["x","y","z","w","u","v"];s===0?p="":i<2&&o.length>=1?p="coords = 0;":p=o.map(g=>`coords.${c[g+u]} = 0;`).join(` +`);let d="";i<2&&s>0?d="coords":d=e.shapeInfo.logicalShape.map((g,x)=>`coords.${c[x+u]}`).join(", ");let h="return outputValue;",f=v.sizeFromShape(e.shapeInfo.logicalShape)===1,m=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!f&&!m)h=` return vec4(outputValue.xy, outputValue.xy); `;else if(f&&!m)i===1?h=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:h=` return vec4(outputValue.x); - `;else if(o.length){let g=s-2,y=s-1;o.indexOf(g)>-1&&o.indexOf(y)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return` + `;else if(o.length){let g=s-2,x=s-1;o.indexOf(g)>-1&&o.indexOf(x)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(x)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${r}() { ${l} coords = getOutputCoords(); - ${d} - vec4 outputValue = get${n}(${p}); + ${p} + vec4 outputValue = get${n}(${d}); ${h} } - `}function xG(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&v.arraysEqual(i,s))return` + `}function UV(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&v.arraysEqual(i,s))return` float ${r}() { return sampleTexture(${a}, resultUV); } - `;let u=mt(l),d=C6(e.shapeInfo.logicalShape,t.logicalShape),c=l-o,p,h=["x","y","z","w","u","v"];o===0?p="":l<2&&d.length>=1?p="coords = 0;":p=d.map(m=>`coords.${h[m+c]} = 0;`).join(` + `;let u=gt(l),p=m6(e.shapeInfo.logicalShape,t.logicalShape),c=l-o,d,h=["x","y","z","w","u","v"];o===0?d="":l<2&&p.length>=1?d="coords = 0;":d=p.map(m=>`coords.${h[m+c]} = 0;`).join(` `);let f="";return l<2&&o>0?f="coords":f=e.shapeInfo.logicalShape.map((m,g)=>`coords.${h[g+c]}`).join(", "),` float ${r}() { ${u} coords = getOutputCoords(); - ${p} + ${d} return get${n}(${f}); } - `}function mt(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function T3(e,t,a){let{newShape:n,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):n,l=!e&&s>1&&!v.arraysEqual(t,a)&&n.lengthe[a]).join(", ")}function bG(e,t,a,n){let r=a.map((d,c)=>{let p={logicalShape:d.shape,texShape:d.isUniform?null:d.texData.texShape,isUniform:d.isUniform,isPacked:d.isUniform?!1:d.texData.isPacked,flatOffset:null};return d.texData!=null&&d.texData.slice!=null&&d.texData.slice.flatOffset>0&&(p.flatOffset=d.texData.slice.flatOffset),{name:t.variableNames[c],shapeInfo:p}}),s=r.map(d=>d.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},o=zV(r,i,t),l=s6(e.gl,o),u=e.createProgram(l);return V().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},R6(e,t,u))}function R6(e,t,a){let n={},r={},s={},i=[],o,l,u,d=null,c=null;c=e.getUniformLocation(a,"NAN",!1),V().getNumber("WEBGL_VERSION")===1&&(d=e.getUniformLocation(a,"INFINITY",!1));let p=!1;for(let h=0;h{i[f]=e.getUniformLocation(a,h.name,p)}),{uniformLocations:n,customUniformLocations:i,infLoc:d,nanLoc:c,inShapesLocations:r,inTexShapesLocations:s,outShapeLocation:o,outShapeStridesLocation:u,outTexShapeLocation:l}}function xy(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((a,n)=>{let r=a.logicalShape,s=t[n],i=s.shape;if(!v.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(a.isUniform&&s.isUniform)return;let o=a.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function vG(e,t,a,n,r){t.program.enableShapeUniforms||(xy(t.inShapeInfos,a),xy([t.outShapeInfo],[n]));let s=n.texData.texture,i=n.texData.texShape;n.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),V().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),a.forEach((l,u)=>{let d=t.program.variableNames[u],c=t.uniformLocations[d],p=t.uniformLocations[`offset${d}`],h=t.inShapesLocations[`${d}Shape`],f=t.inTexShapesLocations[`${d}TexShape`];if(h){let{uniformShape:m}=T3(t.program.packedInputs,l.shape,l.texData.texShape);switch(m.length){case 1:e.gl.uniform1iv(h,new Int32Array(m));break;case 2:e.gl.uniform2iv(h,new Int32Array(m));break;case 3:e.gl.uniform3iv(h,new Int32Array(m));break;case 4:e.gl.uniform4iv(h,new Int32Array(m));break;default:break}}if(f&&e.gl.uniform2i(f,l.texData.texShape[0],l.texData.texShape[1]),c!=null){if(l.isUniform){if(v.sizeFromShape(l.shape)<2)e.gl.uniform1f(c,l.uniformValues[0]);else{let m=l.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),e.gl.uniform1fv(c,m)}return}l.texData.slice!=null&&p!=null&&e.gl.uniform1i(p,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture.texture,c,u)}});let o=t.outShapeLocation;if(o)switch(n.shape.length){case 1:e.gl.uniform1iv(o,new Int32Array(n.shape));break;case 2:e.gl.uniform2iv(o,new Int32Array(n.shape));break;case 3:e.gl.uniform3iv(o,new Int32Array(n.shape));break;case 4:e.gl.uniform4iv(o,new Int32Array(n.shape));break;default:break}if(t.outShapeStridesLocation){let l=v.computeStrides(n.shape);switch(n.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,n.texData.texShape[0],n.texData.texShape[1]),t.program.customUniforms&&r&&t.program.customUniforms.forEach((l,u)=>{let d=t.customUniformLocations[u],c=r[u];if(l.type==="float")e.gl.uniform1fv(d,c);else if(l.type==="vec2")e.gl.uniform2fv(d,c);else if(l.type==="vec3")e.gl.uniform3fv(d,c);else if(l.type==="vec4")e.gl.uniform4fv(d,c);else if(l.type==="int")e.gl.uniform1iv(d,c);else if(l.type==="ivec2")e.gl.uniform2iv(d,c);else if(l.type==="ivec3")e.gl.uniform3iv(d,c);else if(l.type==="ivec4")e.gl.uniform4iv(d,c);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function wG(e,t,a){let n="";t.concat(a).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:d,keptDims:c}=T3(e.packedInputs,i.shape,l),p="",h="",f="";if(d.length===1&&e.packedInputs){let w=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];p=`${w[0]>1}_${w[1]>1}`}else if(d.length===2&&!e.packedInputs)h=`${d[0]>1}_${d[1]>1}`;else if(d.length>2&&!e.packedInputs){let w=v.computeStrides(d);f=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let m=i.shape.length,g=d.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,A=T.getBroadcastDims(i.shape,a.shape),x=!e.packedInputs&&m===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||d.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${m}_${x}_${u?c:""}_${d.length}_${y}_${A}_${g}_${p}_${h}_${f}_${b}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;n+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+n+"_"+r+`${V().getNumber("WEBGL_VERSION")}`,s}function Na(e){return V().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var kG=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=od.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ca();this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` + `}function gt(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function b3(e,t,a){let{newShape:n,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):n,l=!e&&s>1&&!v.arraysEqual(t,a)&&n.lengthe[a]).join(", ")}function GV(e,t,a,n){let r=a.map((p,c)=>{let d={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(d.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[c],shapeInfo:d}}),s=r.map(p=>p.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},o=lV(r,i,t),l=q7(e.gl,o),u=e.createProgram(l);return W().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},A6(e,t,u))}function A6(e,t,a){let n={},r={},s={},i=[],o,l,u,p=null,c=null;c=e.getUniformLocation(a,"NAN",!1),W().getNumber("WEBGL_VERSION")===1&&(p=e.getUniformLocation(a,"INFINITY",!1));let d=!1;for(let h=0;h{i[f]=e.getUniformLocation(a,h.name,d)}),{uniformLocations:n,customUniformLocations:i,infLoc:p,nanLoc:c,inShapesLocations:r,inTexShapesLocations:s,outShapeLocation:o,outShapeStridesLocation:u,outTexShapeLocation:l}}function ux(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((a,n)=>{let r=a.logicalShape,s=t[n],i=s.shape;if(!v.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(a.isUniform&&s.isUniform)return;let o=a.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function HV(e,t,a,n,r){t.program.enableShapeUniforms||(ux(t.inShapeInfos,a),ux([t.outShapeInfo],[n]));let s=n.texData.texture,i=n.texData.texShape;n.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),W().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),a.forEach((l,u)=>{let p=t.program.variableNames[u],c=t.uniformLocations[p],d=t.uniformLocations[`offset${p}`],h=t.inShapesLocations[`${p}Shape`],f=t.inTexShapesLocations[`${p}TexShape`];if(h){let{uniformShape:m}=b3(t.program.packedInputs,l.shape,l.texData.texShape);switch(m.length){case 1:e.gl.uniform1iv(h,new Int32Array(m));break;case 2:e.gl.uniform2iv(h,new Int32Array(m));break;case 3:e.gl.uniform3iv(h,new Int32Array(m));break;case 4:e.gl.uniform4iv(h,new Int32Array(m));break;default:break}}if(f&&e.gl.uniform2i(f,l.texData.texShape[0],l.texData.texShape[1]),c!=null){if(l.isUniform){if(v.sizeFromShape(l.shape)<2)e.gl.uniform1f(c,l.uniformValues[0]);else{let m=l.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),e.gl.uniform1fv(c,m)}return}l.texData.slice!=null&&d!=null&&e.gl.uniform1i(d,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture.texture,c,u)}});let o=t.outShapeLocation;if(o)switch(n.shape.length){case 1:e.gl.uniform1iv(o,new Int32Array(n.shape));break;case 2:e.gl.uniform2iv(o,new Int32Array(n.shape));break;case 3:e.gl.uniform3iv(o,new Int32Array(n.shape));break;case 4:e.gl.uniform4iv(o,new Int32Array(n.shape));break;default:break}if(t.outShapeStridesLocation){let l=v.computeStrides(n.shape);switch(n.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,n.texData.texShape[0],n.texData.texShape[1]),t.program.customUniforms&&r&&t.program.customUniforms.forEach((l,u)=>{let p=t.customUniformLocations[u],c=r[u];if(l.type==="float")e.gl.uniform1fv(p,c);else if(l.type==="vec2")e.gl.uniform2fv(p,c);else if(l.type==="vec3")e.gl.uniform3fv(p,c);else if(l.type==="vec4")e.gl.uniform4fv(p,c);else if(l.type==="int")e.gl.uniform1iv(p,c);else if(l.type==="ivec2")e.gl.uniform2iv(p,c);else if(l.type==="ivec3")e.gl.uniform3iv(p,c);else if(l.type==="ivec4")e.gl.uniform4iv(p,c);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function jV(e,t,a){let n="";t.concat(a).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:p,keptDims:c}=b3(e.packedInputs,i.shape,l),d="",h="",f="";if(p.length===1&&e.packedInputs){let w=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];d=`${w[0]>1}_${w[1]>1}`}else if(p.length===2&&!e.packedInputs)h=`${p[0]>1}_${p[1]>1}`;else if(p.length>2&&!e.packedInputs){let w=v.computeStrides(p);f=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let m=i.shape.length,g=p.length===2&&v.arraysEqual(i.shape,l),x=v.sizeFromShape(i.shape)===1,A=T.getBroadcastDims(i.shape,a.shape),y=!e.packedInputs&&m===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${m}_${y}_${u?c:""}_${p.length}_${x}_${A}_${g}_${d}_${h}_${f}_${b}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;n+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+n+"_"+r+`${W().getNumber("WEBGL_VERSION")}`,s}function Na(e){return W().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var qV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=fd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ca();this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?zh(["r","c","d"],e):co(["r","c","d"],e)} + ${this.enableShapeUniforms?_h(["r","c","d"],e):go(["r","c","d"],e)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},IG=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=od.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ca();this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` + `}},XV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=fd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ca();this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?zh(["r","c","d"],e):co(["r","c","d"],e)} + ${this.enableShapeUniforms?_h(["r","c","d"],e):go(["r","c","d"],e)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},SG=class{constructor(e){this.variableNames=["A"],this.outTexUsage=un.DOWNLOAD;let t=Ca();this.outputShape=e,this.userCode=` - ${T6} + `}},KV=class{constructor(e){this.variableNames=["A"],this.outTexUsage=dn.DOWNLOAD;let t=Ca();this.outputShape=e,this.userCode=` + ${f6} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}},TG=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=un.DOWNLOAD;let t=Ca();this.outputShape=e,this.userCode=` - ${T6} + `}},ZV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=dn.DOWNLOAD;let t=Ca();this.outputShape=e,this.userCode=` + ${f6} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}},CG={R:0,G:1,B:2,A:3},by=class{constructor(e,t=!1,a="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ca();this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)");let s="";for(let i=0;iB6,createBufferFromOutputTexture:()=>G6,createFloat16MatrixTexture:()=>O6,createFloat16PackedMatrixTexture:()=>L6,createFloat32MatrixTexture:()=>P6,createIndexBuffer:()=>F6,createPackedMatrixTexture:()=>z6,createUnsignedBytesMatrixTexture:()=>D6,createVertexBuffer:()=>_6,createVertexShader:()=>$6,downloadByteEncodedFloatMatrixFromOutputTexture:()=>j6,downloadFloat32MatrixFromBuffer:()=>U6,downloadMatrixFromPackedOutputTexture:()=>q6,downloadPackedMatrixFromBuffer:()=>H6,getInternalFormatForFloat16MatrixTexture:()=>N3,getInternalFormatForFloat16PackedMatrixTexture:()=>M3,getInternalFormatForFloat32MatrixTexture:()=>C3,getInternalFormatForPackedMatrixTexture:()=>R3,getInternalFormatForUnsignedBytesMatrixTexture:()=>E3,uploadDenseMatrixToTexture:()=>W6,uploadPixelDataToTexture:()=>V6});function $6(e){let t=Ca(),a=`${t.version} + `}},y6={};Xe(y6,{bindVertexProgramAttributeStreams:()=>N6,createBufferFromOutputTexture:()=>M6,createFloat16MatrixTexture:()=>I6,createFloat16PackedMatrixTexture:()=>C6,createFloat32MatrixTexture:()=>k6,createIndexBuffer:()=>w6,createPackedMatrixTexture:()=>T6,createUnsignedBytesMatrixTexture:()=>S6,createVertexBuffer:()=>v6,createVertexShader:()=>b6,downloadByteEncodedFloatMatrixFromOutputTexture:()=>_6,downloadFloat32MatrixFromBuffer:()=>$6,downloadMatrixFromPackedOutputTexture:()=>F6,downloadPackedMatrixFromBuffer:()=>P6,getInternalFormatForFloat16MatrixTexture:()=>w3,getInternalFormatForFloat16PackedMatrixTexture:()=>S3,getInternalFormatForFloat32MatrixTexture:()=>v3,getInternalFormatForPackedMatrixTexture:()=>I3,getInternalFormatForUnsignedBytesMatrixTexture:()=>k3,uploadDenseMatrixToTexture:()=>E6,uploadPixelDataToTexture:()=>R6});function b6(e){let t=Ca(),a=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; @@ -1107,11 +1107,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return r6(e,a)}function _6(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return l6(e,t)}function F6(e){let t=new Uint16Array([0,1,2,2,1,3]);return u6(e,t)}function dp(e,t,a,n,r,s){p6(t,a);let i=d6(e),o=e.TEXTURE_2D;return ce(e,()=>e.bindTexture(o,i)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),V().getNumber("WEBGL_VERSION")===1?ce(e,()=>e.texImage2D(o,0,n,t,a,0,r,s,null)):ce(e,()=>e.texStorage2D(o,1,n,t,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[a,t]}}function C3(e){return e.internalFormatFloat}function P6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,C3(n),n.textureFormatFloat,e.FLOAT)}function N3(e){return e.internalFormatHalfFloat}function O6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,N3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function E3(e){return e.downloadTextureFormat}function D6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,E3(n),e.RGBA,e.UNSIGNED_BYTE)}function R3(e){return e.internalFormatPackedFloat}function z6(e,t,a,n){let[r,s]=Yl(t,a);return dp(e,r,s,R3(n),e.RGBA,e.FLOAT)}function M3(e){return e.internalFormatPackedHalfFloat}function L6(e,t,a,n){let[r,s]=Yl(t,a);return dp(e,r,s,M3(n),e.RGBA,n.textureTypeHalfFloat)}function B6(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),v1(e,t,"clipSpacePos",a,3,20,0)&&v1(e,t,"uv",a,2,20,12)}function W6(e,t,a,n,r,s){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(a*n*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(a*n*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),V().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a,n,e.RGBA,o,i)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,a,n,0,e.RGBA,o,i)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function V6(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?V().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a.width,a.height,e.RGBA,e.UNSIGNED_BYTE,a.data)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,a.width,a.height,0,e.RGBA,e.UNSIGNED_BYTE,a.data)):V().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,a)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function G6(e,t,a,n){let r=e.createBuffer();ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*a;return ce(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,0)),ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function U6(e,t,a){let n=e,r=new Float32Array(a);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,r),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),r}function j6(e,t,a,n){let[r,s]=up(t,a),i=4,o=new Uint8Array(IV(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function H6(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(SV(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function q6(e,t,a){let n=new Float32Array(t*a*4);return ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,n)),n}var el=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=V().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,Dh(t,e)):this.gl=Dn(t);let a="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),V().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Lu(this.gl,r),dn(this.gl,s))this.textureHalfFloatExtension=Lu(this.gl,s);else if(V().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(a),dn(this.gl,n))this.colorBufferHalfFloatExtension=Lu(this.gl,n);else if(V().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(a="EXT_color_buffer_float",dn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(dn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=_6(this.gl),this.indexBuffer=F6(this.gl),this.framebuffer=c6(this.gl),this.textureConfig=w3(this.gl,this.textureHalfFloatExtension)}get debug(){return V().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),P6(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),O6(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),D6(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),V6(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),W6(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),L6(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),z6(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(w1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>j6(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return H6(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return U6(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=G6(this.gl,t,a,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,a;if(V().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),a=()=>{let s=n.clientWaitSync(r,0,0);return s===n.ALREADY_SIGNALED||s===n.CONDITION_SATISFIED},t=r}else V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>q6(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=$6(t));let a=i6(t);return ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),o6(t,a),this.debug&&fc(t,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=B6(t,this.program,this.vertexBuffer)),a}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&ce(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&fc(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?f6(this.gl,e,t):m6(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,a){this.throwIfDisposed(),this.throwIfNoProgram(),g6(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Yl(t,a);this.setOutputMatrixTextureDriver(e,n,r)}setOutputMatrixWriteRegion(e,t,a,n){this.setOutputMatrixWriteRegionDriver(a,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,a,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&fc(this.gl,this.program),Bu(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Lu(this.gl,V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.createQuery();return a.beginQuery(n.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,a=this.getQueryTimerExtensionWebGL2();t.endQuery(a.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let a=this.gl;return a.getQueryParameter(e,a.QUERY_RESULT)/1e6}else{let a=this.getQueryTimerExtensionWebGL1();return a.getQueryObjectEXT(e,a.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.getQueryParameter(e,a.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let a=this.getQueryTimerExtensionWebGL1(),n=a.getQueryObjectEXT(e,a.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=EG(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:a}=this.itemsToPoll[t];a()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let a;"setTimeoutCustom"in V().platform&&(a=V().platform.setTimeoutCustom.bind(V().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),mc(this.gl,e,this.framebuffer),this.debug&&Bu(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(mc(this.gl,this.outputTexture,this.framebuffer),this.debug&&Bu(this.gl)):w1(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let a=t();return this.unbindTextureToFrameBuffer(),a}setOutputMatrixTextureDriver(e,t,a){this.throwIfDisposed();let n=this.gl;mc(n,e,this.framebuffer),this.debug&&Bu(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,a)),ce(n,()=>n.scissor(0,0,t,a))}setOutputMatrixWriteRegionDriver(e,t,a,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,a,n))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function EG(e){let t=0;for(;t`${e}.${a}`)}function va(e,t){return t===1?[e]:Y6(e,t)}function xU(e,t){if(e===1)return"rc";let a="";for(let n=0;ne.bindTexture(o,i)),ue(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ue(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ue(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ue(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),W().getNumber("WEBGL_VERSION")===1?ue(e,()=>e.texImage2D(o,0,n,t,a,0,r,s,null)):ue(e,()=>e.texStorage2D(o,1,n,t,a)),ue(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[a,t]}}function v3(e){return e.internalFormatFloat}function k6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,v3(n),n.textureFormatFloat,e.FLOAT)}function w3(e){return e.internalFormatHalfFloat}function I6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,w3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function k3(e){return e.downloadTextureFormat}function S6(e,t,a,n){let[r,s]=up(t,a);return dp(e,r,s,k3(n),e.RGBA,e.UNSIGNED_BYTE)}function I3(e){return e.internalFormatPackedFloat}function T6(e,t,a,n){let[r,s]=ou(t,a);return dp(e,r,s,I3(n),e.RGBA,e.FLOAT)}function S3(e){return e.internalFormatPackedHalfFloat}function C6(e,t,a,n){let[r,s]=ou(t,a);return dp(e,r,s,S3(n),e.RGBA,n.textureTypeHalfFloat)}function N6(e,t,a){return ue(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),y1(e,t,"clipSpacePos",a,3,20,0)&&y1(e,t,"uv",a,2,20,12)}function E6(e,t,a,n,r,s){ue(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(a*n*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(a*n*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),W().getNumber("WEBGL_VERSION")===2?ue(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a,n,e.RGBA,o,i)):ue(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,a,n,0,e.RGBA,o,i)),ue(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function R6(e,t,a){ue(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?W().getNumber("WEBGL_VERSION")===2?ue(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a.width,a.height,e.RGBA,e.UNSIGNED_BYTE,a.data)):ue(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,a.width,a.height,0,e.RGBA,e.UNSIGNED_BYTE,a.data)):W().getNumber("WEBGL_VERSION")===2?ue(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,a)):ue(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a)),ue(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function M6(e,t,a,n){let r=e.createBuffer();ue(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*a;return ue(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ue(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,0)),ue(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function $6(e,t,a){let n=e,r=new Float32Array(a);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,r),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),r}function _6(e,t,a,n){let[r,s]=up(t,a),i=4,o=new Uint8Array(XW(t*a,i));return ue(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function P6(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(KW(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function F6(e,t,a){let n=new Float32Array(t*a*4);return ue(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,n)),n}var sl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=W().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,$h(t,e)):this.gl=On(t),e=this.gl,W().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ue(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ue(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ue(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ue(r,()=>r.getParameter(r.VERTEX_ARRAY_BINDING))}else if(e!=null){let r=e.getExtension("OES_vertex_array_object");if(r==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ue(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ue(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ue(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ue(e,()=>e.getParameter(r.VERTEX_ARRAY_BINDING_OES))}let a="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),W().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=qu(this.gl,r),pn(this.gl,s))this.textureHalfFloatExtension=qu(this.gl,s);else if(W().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(a),pn(this.gl,n))this.colorBufferHalfFloatExtension=qu(this.gl,n);else if(W().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(a="EXT_color_buffer_float",pn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(pn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=v6(this.gl),this.indexBuffer=w6(this.gl),this.framebuffer=e6(this.gl),this.textureConfig=g3(this.gl,this.textureHalfFloatExtension)}get debug(){return W().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ue(e,()=>e.finish()),ue(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ue(e,()=>e.deleteFramebuffer(this.framebuffer)),ue(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ue(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ue(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),k6(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),I6(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),S6(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),R6(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),E6(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),C6(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),T6(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(b1(this.gl,this.framebuffer),this.outputTexture=null),ue(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>_6(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return P6(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return $6(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=M6(this.gl,t,a,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,a;if(W().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),a=()=>{let s=n.clientWaitSync(r,0,0);return s===n.ALREADY_SIGNALED||s===n.CONDITION_SATISFIED},t=r}else W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>F6(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=b6(t));let a=X7(t);ue(t,()=>t.attachShader(a,this.vertexShader)),ue(t,()=>t.attachShader(a,e)),K7(t,a);let n;return n=Object.assign(a,{vao:this.createVertexArray()}),this.bindVertexArray(n.vao),ue(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),console.assert(N6(t,n,this.vertexBuffer),"gpgpu_util.bindVertexProgramAttributeStreams not fully successful."),this.debug&&hc(t,n),this.setProgram(n),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ue(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&(this.bindVertexArray(this.program.vao),this.debug&&hc(this.gl,this.program)),ue(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?a6(this.gl,e,t):n6(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ue(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,a){this.throwIfDisposed(),this.throwIfNoProgram(),r6(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=ou(t,a);this.setOutputMatrixTextureDriver(e,n,r)}setOutputMatrixWriteRegion(e,t,a,n){this.setOutputMatrixWriteRegionDriver(a,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,a,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&hc(this.gl,this.program),Xu(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ue(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ue(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=qu(this.gl,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.createQuery();return a.beginQuery(n.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,a=this.getQueryTimerExtensionWebGL2();t.endQuery(a.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let a=this.gl;return a.getQueryParameter(e,a.QUERY_RESULT)/1e6}else{let a=this.getQueryTimerExtensionWebGL1();return a.getQueryObjectEXT(e,a.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.getQueryParameter(e,a.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let a=this.getQueryTimerExtensionWebGL1(),n=a.getQueryObjectEXT(e,a.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=QV(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:a}=this.itemsToPoll[t];a()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let a;"setTimeoutCustom"in W().platform&&(a=W().platform.setTimeoutCustom.bind(W().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),fc(this.gl,e,this.framebuffer),this.debug&&Xu(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(fc(this.gl,this.outputTexture,this.framebuffer),this.debug&&Xu(this.gl)):b1(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let a=t();return this.unbindTextureToFrameBuffer(),a}setOutputMatrixTextureDriver(e,t,a){this.throwIfDisposed();let n=this.gl;fc(n,e,this.framebuffer),this.debug&&Xu(n),this.outputTexture=e,ue(n,()=>n.viewport(0,0,t,a)),ue(n,()=>n.scissor(0,0,t,a))}setOutputMatrixWriteRegionDriver(e,t,a,n){this.throwIfDisposed(),ue(this.gl,()=>this.gl.scissor(e,t,a,n))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function QV(e){let t=0;for(;t`${e}.${a}`)}function va(e,t){return t===1?[e]:L6(e,t)}function UU(e,t){if(e===1)return"rc";let a="";for(let n=0;n= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}), cEdge ? 0. : getA(${t[1]}), rEdge ? 0. : getA(${t[2]}), - rEdge || cEdge ? 0. : getA(${t[3]})`}},J6=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let a="";for(let n=0;n<4;n++){let r="thisRC = rc;";n%2===1&&(r+="thisRC.z += 1;"),n>1&&(r+="thisRC.y += 1;"),a+=` + rEdge || cEdge ? 0. : getA(${t[3]})`}},B6=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let a="";for(let n=0;n<4;n++){let r="thisRC = rc;";n%2===1&&(r+="thisRC.z += 1;"),n>1&&(r+="thisRC.y += 1;"),a+=` ${r} ${n>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); @@ -1146,8 +1146,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${vU(t,this.enableShapeUniforms)} - ${this.enableShapeUniforms?S3():I3(e)} + ${HU(t,this.enableShapeUniforms)} + ${this.enableShapeUniforms?y3():A3(e)} void main() { ivec3 rc = getOutputCoords(); @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function vU(e,t){return` + `}};function HU(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t?DV(["r","c","d"],"inputShape"):co(["r","c","d"],e)} + ${t?oV(["r","c","d"],"inputShape"):go(["r","c","d"],e)} return ivec3(r, c, d); } - `}var wU=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,a){let n=wy(t,a),r=ky(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=vy(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,a);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}let i;return n===aa.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===aa.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===aa.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===aa.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===aa.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,a,n){if(this.freeTextures==null)return;let r=wy(a,n),s=ky(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=vy(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=V().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function kU(e,t){let a=e;if(t===a.R32F)return 4;if(t===a.R16F)return 2;if(t===a.RGBA32F||t===e.RGBA)return 16;if(t===a.RGBA16F)return 8;if(t===a.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function vy(e,t,a,n,r){let s=IU(t,n),i;if(r){let[l,u]=Yl(e[0],e[1]);i=l*u}else{let[l,u]=up(e[0],e[1]);i=l*u}let o=kU(a,s);return i*o}function IU(e,t){switch(e){case aa.PACKED_2X2_FLOAT32:return R3(t);case aa.PACKED_2X2_FLOAT16:return M3(t);case aa.UNPACKED_FLOAT32:return C3(t);case aa.UNPACKED_FLOAT16:return N3(t);case aa.PACKED_4X1_UNSIGNED_BYTE:return E3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function SU(e){return V().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?aa.PACKED_2X2_FLOAT32:aa.UNPACKED_FLOAT32:e?aa.PACKED_2X2_FLOAT16:aa.UNPACKED_FLOAT16}function wy(e,t){if(e===un.UPLOAD)return aa.PACKED_2X2_FLOAT32;if(e===un.RENDER||e==null)return SU(t);if(e===un.DOWNLOAD||e===un.PIXELS)return aa.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function ky(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var gr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` + `}var jU=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,a){let n=cx(t,a),r=hx(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=px(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,a);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}let i;return n===na.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===na.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===na.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===na.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===na.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,a,n){if(this.freeTextures==null)return;let r=cx(a,n),s=hx(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=px(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=W().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function qU(e,t){let a=e;if(t===a.R32F)return 4;if(t===a.R16F)return 2;if(t===a.RGBA32F||t===e.RGBA)return 16;if(t===a.RGBA16F)return 8;if(t===a.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function px(e,t,a,n,r){let s=XU(t,n),i;if(r){let[l,u]=ou(e[0],e[1]);i=l*u}else{let[l,u]=up(e[0],e[1]);i=l*u}let o=qU(a,s);return i*o}function XU(e,t){switch(e){case na.PACKED_2X2_FLOAT32:return I3(t);case na.PACKED_2X2_FLOAT16:return S3(t);case na.UNPACKED_FLOAT32:return v3(t);case na.UNPACKED_FLOAT16:return w3(t);case na.PACKED_4X1_UNSIGNED_BYTE:return k3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function KU(e){return W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?na.PACKED_2X2_FLOAT32:na.UNPACKED_FLOAT32:e?na.PACKED_2X2_FLOAT16:na.UNPACKED_FLOAT16}function cx(e,t){if(e===dn.UPLOAD)return na.PACKED_2X2_FLOAT32;if(e===dn.RENDER||e==null)return KU(t);if(e===dn.DOWNLOAD||e===dn.PIXELS)return na.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function hx(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var jn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Cn="if (isnan(x)) return x;",TU="return x;",Iy="return abs(x);",CU="return (x >= 0.0) ? x : (exp(x) - 1.0);",NU=Cn+` + `}},Tn="if (isnan(x)) return x;",ZU="return x;",fx="return abs(x);",YU="return (x >= 0.0) ? x : (exp(x) - 1.0);",JU=Tn+` return (x < 0.0) ? 0.0 : x; -`,EU=Cn+` +`,QU=Tn+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Uo="return x;",RU="return 1.0 / (1.0 + exp(-1.0 * x));",MU="return x;",$U=` +`,Fr="return x;",eG="return 1.0 / (1.0 + exp(-1.0 * x));",tG="return x;",aG=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -1191,7 +1191,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,_U=` +`,nG=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1201,7 +1201,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,FU=` +`,rG=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1211,7 +1211,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,PU="return 1.0 / (1.0 + exp(-1.0 * x));",Js=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` +`,sG="return 1.0 / (1.0 + exp(-1.0 * x));",Br=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } @@ -1222,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},OU=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let t=e.length,a=va("rc",t),n=mt(t),r=xU(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` + `}},iG=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let t=e.length,a=va("rc",t),n=gt(t),r=UU(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` void main() { ${n} rc = getOutputCoords(); vec4 packedInput = getA(${r}); setOutput(getChannel(packedInput, ${i})); } - `}},DU=Tn.whereImpl,zU=1e-7,LU=1e-4,Dm={};function BU(e){return e in Dm||(Dm[e]={}),Dm[e]}var WU=V().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),VU=600;function GU(){return V().global.screen==null?1024:V().global.screen.height*V().global.screen.width*window.devicePixelRatio*VU/1024/1024}var nu=class extends fl{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!V().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof el)t=e;else{let a=Dn(V().getNumber("WEBGL_VERSION"),e);t=new el(a)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let a=Dn(V().getNumber("WEBGL_VERSION"));t=new el(a),this.binaryCache=BU(V().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new wU(this.gpgpu),this.numMBBeforeWarning=GU(),this.texData=new md(this,kt())}nextDataId(){return nu.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,a,n,r,s){let i=this.makeTensorInfo(t,a),o=this.texData.get(i.dataId);o.isPacked=!1,o.texture={texture:e,texShape:[n,r]},o.texShape=[n,r];let l=Wu(t),u=new by(l,!1,s),d=this.runWebGLProgram(u,[i],a,[[n,r]]);return d.shape=t,o.texture=null,this.disposeIntermediateTensorInfo(i),d.dataId}write(e,t,a){if((V().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||V().getBool("DEBUG"))&&this.checkNumericalProblems(e),a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:a,values:e,usage:un.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,a,n,r){if(V().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:a,dtype:n,values:t,usage:un.UPLOAD,refCount:r})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:a,dtype:n,complexTensorInfos:r,slice:s,shape:i,isPacked:o}=t;if(s!=null){let c;o?c=new Js(i,Uo):c=new gr(i,Uo);let p=this.runWebGLProgram(c,[{dataId:e,shape:i,dtype:n}],n),h=this.readSync(p.dataId);return this.disposeIntermediateTensorInfo(p),h}if(a!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return a;let l=this.activeTimers!=null,u;l&&(u=v.now());let d;if(n==="complex64"){let c=this.readSync(r.real.dataId),p=this.readSync(r.imag.dataId);d=T.mergeRealAndImagArrays(c,p)}else d=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=v.now()-u),this.convertAndCacheOnCPU(e,d)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(f=>h.push(f))}let t=this.texData.get(e),{values:a,shape:n,slice:r,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(r!=null){let h;o?h=new Js(n,Uo):h=new gr(n,Uo);let f=this.runWebGLProgram(h,[{dataId:e,shape:n,dtype:s}],s),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(a!=null)return this.convertAndCacheOnCPU(e);if(V().getBool("DEBUG")&&!V().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&V().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&V().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...oc(n))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let d;if(s==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),f=h[0],m=h[1];d=T.mergeRealAndImagArrays(f,m)}else if(l==null)d=this.getValuesFromTexture(e);else{let h=v.sizeFromShape(n);d=this.gpgpu.downloadFloat32MatrixFromBuffer(l,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let h=this.gpgpu.gl;ce(h,()=>h.deleteBuffer(l))}let c=this.convertAndCacheOnCPU(e,d),p=this.pendingRead.get(e);return this.pendingRead.delete(e),p.forEach(h=>h(c)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&kt().removeDataId(e,this),this.pendingDeletes--),c}readToGPU(e,t={}){let a=this.texData.get(e),{values:n,shape:r,slice:s,dtype:i,isPacked:o,texture:l}=a;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(s!=null){let p;o?p=new Js(r,Uo):p=new gr(r,Uo);let h=this.runWebGLProgram(p,[{dataId:e,shape:r,dtype:i}],i),f=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),f}if(l==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),d=kt().makeTensorFromTensorInfo(u),c=this.texData.get(u.dataId);return Object.assign({tensorRef:d},c.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return ve(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return ve(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=v.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(r);i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(V().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:a}=this.texData.get(e);return a!=null&&(this.disposeData(a.real.dataId,t),this.disposeData(a.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:a,texShape:n,usage:r,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,a),this.textureManager.releaseTexture(t,n,r,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=WU){return V().getBool("WEBGL_CPU_FORWARD")&&e.every(a=>this.texData.get(a.dataId).texture==null&&v.sizeFromShape(a.shape)0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,a){return kt().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,a),this)}unpackTensor(e){let t=new OU(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new bU(e.shape),a=!0;return this.runWebGLProgram(t,[e],e.dtype,null,a)}packedReshape(e,t){let a=[ui(e.shape),...di(e.shape)],n={dtype:e.dtype,shape:a,dataId:e.dataId},r=[ui(t),...di(t)],s=new J6(r,a),i=!0,o=[a],l=this.runWebGLProgram(s,[n],e.dtype,o,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e,t){let a=this.texData.get(e),{isPacked:n,shape:r,dtype:s}=a;if(t!=null){let c=v.sizeFromShape(r),p=t[0]*t[1]*4;v.assert(c<=p,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Wu(r),o;n?o=new IG(i):o=new kG(i);let l=!0,u=[t!=null?t:oc(i)],d=this.runWebGLProgram(o,[{shape:i,dtype:s,dataId:e}],s,u,l,t);return{dtype:s,shape:r,dataId:d.dataId}}runWebGLProgram(e,t,a,n,r=!1,s){let i=this.makeTensorInfo(e.outputShape,a),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===od.DENSE){let g=s!=null?s:oc(e.outputShape);o.texShape=g.map(y=>y*2)}if(e.outTexUsage!=null&&(o.usage=e.outTexUsage),v.sizeFromShape(i.shape)===0)return o.values=v.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let y=this.texData.get(g.dataId);if(y.texture==null){if(!e.packedInputs&&v.sizeFromShape(g.shape)<=V().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:y.values};e.packedInputs&&(y.isPacked=!0,y.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!y.isPacked!=!!e.packedInputs)g=y.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),y=this.texData.get(g.dataId);else if(y.isPacked&&!ld(y.shape,g.shape)){let A=g,x=g.shape;g.shape=y.shape,g=this.packedReshape(g,x),l.push(g),y=this.texData.get(g.dataId),A.shape=x}return{shape:g.shape,texData:y,isUniform:!1}});this.uploadToGPU(i.dataId);let d={shape:i.shape,texData:o,isUniform:!1},c=wG(e,u,d),p=this.getAndSaveBinary(c,()=>bG(this.gpgpu,e,u,d)),h=this.activeTimers!=null,f;h&&(f=this.startTimer()),V().get("ENGINE_COMPILE_ONLY")||vG(this.gpgpu,p,u,d,n),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(f=this.endTimer(f),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(f)}));let m=V().get("WEBGL_FLUSH_THRESHOLD");if(m>0){let g=v.now();g-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!V().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&r===!1){let g=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),g}return i}compileAndRun(e,t,a,n,r=!1){return a=a||t[0].dtype,this.runWebGLProgram(e,t,a,n,r)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(V().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Ee(()=>{if(!V().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=V().getBool("DEBUG");V().set("DEBUG",!1);let t=this.abs(Fe(1e-8)).dataSync()[0];if(V().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?zU:LU}uploadToGPU(e){let t=this.texData.get(e),{shape:a,dtype:n,values:r,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=v.now());let d=t.texShape;if(d==null&&(d=x6(a,o),t.texShape=d),r!=null){let c=Wu(a),p,h=d[1],f=d[0],m=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!m)&&([h,f]=Yl(d[0],d[1])),o?p=new NG(c,m):p=new by(c,m);let g=m?[f,h]:d,y=this.makeTensorInfo(g,n),A=this.texData.get(y.dataId);m?A.usage=un.PIXELS:A.usage=un.UPLOAD,A.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),h,f,r);let x=[[f,h]],b=!0,w=this.runWebGLProgram(p,[y],n,x,b),S=this.texData.get(w.dataId);t.texShape=S.texShape,t.isPacked=S.isPacked,t.usage=S.usage,V().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(t.texture=S.texture,t.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(y),l&&(this.uploadWaitMs+=v.now()-u)}else{let c=this.acquireTexture(d,i,n,o);t.texture=c}}convertAndCacheOnCPU(e,t){let a=this.texData.get(e),{dtype:n}=a;return this.releaseGPUData(e),t!=null&&(a.values=UU(t,n)),a.values}acquireTexture(e,t,a,n){if(this.numBytesInGPU+=this.computeBytes(e,a),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let r=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${r} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*v.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let a=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(r){throw r}});e.push(a)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await E4(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(k3(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:a,infLoc:n,nanLoc:r,inShapesLocations:s,inTexShapesLocations:i,outShapeLocation:o,outShapeStridesLocation:l,outTexShapeLocation:u}=R6(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=a,e.infLoc=n,e.nanLoc=r,e.inShapesLocations=s,e.inTexShapesLocations=i,e.outShapeLocation=o,e.outShapeStridesLocation=l,e.outTexShapeLocation=u}}createTensorFromTexture(e,t,a){let{texture:n,height:r,width:s,channels:i}=e,o=kt().backend;if(!o.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let l=o.writeTexture(n,t,a,r,s,i);return kt().makeTensorFromDataId(l,t,a,o)}};nu.nextDataId=0;function UU(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let a=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let n=0;nnew nu,2);var HU={forceHalfFloat:Q6},_3=` + `}},oG=Sn.whereImpl,lG=1e-7,uG=1e-4,Fm={};function dG(e){return e in Fm||(Fm[e]={}),Fm[e]}var pG=W().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),cG=600;function hG(){return W().global.screen==null?1024:W().global.screen.height*W().global.screen.width*window.devicePixelRatio*cG/1024/1024}var hu=class extends yl{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!W().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof sl)t=e;else{let a=On(W().getNumber("WEBGL_VERSION"),e);t=new sl(a)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let a=On(W().getNumber("WEBGL_VERSION"));t=new sl(a),this.binaryCache=dG(W().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new jU(this.gpgpu),this.numMBBeforeWarning=hG(),this.texData=new vd(this,kt())}nextDataId(){return hu.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,a,n,r,s){let i=this.makeTensorInfo(t,a),o=this.texData.get(i.dataId);o.isPacked=!1,o.texture={texture:e,texShape:[n,r]},o.texShape=[n,r];let l=Ku(t),u=new dx(l,!1,s),p=this.runWebGLProgram(u,[i],a,[[n,r]]);return p.shape=t,o.texture=null,this.disposeIntermediateTensorInfo(i),p.dataId}write(e,t,a){if((W().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||W().getBool("DEBUG"))&&this.checkNumericalProblems(e),a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:a,values:e,usage:dn.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,a,n,r){if(W().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:a,dtype:n,values:t,usage:dn.UPLOAD,refCount:r})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:a,dtype:n,complexTensorInfos:r,slice:s,shape:i,isPacked:o}=t;if(s!=null){let c;o?c=new Br(i,Fr):c=new jn(i,Fr);let d=this.runWebGLProgram(c,[{dataId:e,shape:i,dtype:n}],n),h=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),h}if(a!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return a;let l=this.activeTimers!=null,u;l&&(u=v.now());let p;if(n==="complex64"){let c=this.readSync(r.real.dataId),d=this.readSync(r.imag.dataId);p=T.mergeRealAndImagArrays(c,d)}else p=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=v.now()-u),this.convertAndCacheOnCPU(e,p)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(f=>h.push(f))}let t=this.texData.get(e),{values:a,shape:n,slice:r,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(r!=null){let h;o?h=new Br(n,Fr):h=new jn(n,Fr);let f=this.runWebGLProgram(h,[{dataId:e,shape:n,dtype:s}],s),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(a!=null)return this.convertAndCacheOnCPU(e);if(W().getBool("DEBUG")&&!W().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&W().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&W().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...ic(n))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(s==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),f=h[0],m=h[1];p=T.mergeRealAndImagArrays(f,m)}else if(l==null)p=this.getValuesFromTexture(e);else{let h=v.sizeFromShape(n);p=this.gpgpu.downloadFloat32MatrixFromBuffer(l,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let h=this.gpgpu.gl;ue(h,()=>h.deleteBuffer(l))}let c=this.convertAndCacheOnCPU(e,p),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(h=>h(c)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&kt().removeDataId(e,this),this.pendingDeletes--),c}readToGPU(e,t={}){let a=this.texData.get(e),{values:n,shape:r,slice:s,dtype:i,isPacked:o,texture:l}=a;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(s!=null){let d;o?d=new Br(r,Fr):d=new jn(r,Fr);let h=this.runWebGLProgram(d,[{dataId:e,shape:r,dtype:i}],i),f=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),f}if(l==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),p=kt().makeTensorFromTensorInfo(u),c=this.texData.get(u.dataId);return Object.assign({tensorRef:p},c.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return Me(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=v.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(r);i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:a}=this.texData.get(e);return a!=null&&(this.disposeData(a.real.dataId,t),this.disposeData(a.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:a,texShape:n,usage:r,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,a),this.textureManager.releaseTexture(t,n,r,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=pG){return W().getBool("WEBGL_CPU_FORWARD")&&e.every(a=>this.texData.get(a.dataId).texture==null&&v.sizeFromShape(a.shape)0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,a){return kt().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,a),this)}unpackTensor(e){let t=new iG(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new GU(e.shape),a=!0;return this.runWebGLProgram(t,[e],e.dtype,null,a)}packedReshape(e,t){let a=[Us(e.shape),...Gs(e.shape)],n={dtype:e.dtype,shape:a,dataId:e.dataId},r=[Us(t),...Gs(t)],s=new B6(r,a),i=!0,o=[a],l=this.runWebGLProgram(s,[n],e.dtype,o,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e,t){let a=this.texData.get(e),{isPacked:n,shape:r,dtype:s}=a;if(t!=null){let c=v.sizeFromShape(r),d=t[0]*t[1]*4;v.assert(c<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Ku(r),o;n?o=new XV(i):o=new qV(i);let l=!0,u=[t!=null?t:ic(i)],p=this.runWebGLProgram(o,[{shape:i,dtype:s,dataId:e}],s,u,l,t);return{dtype:s,shape:r,dataId:p.dataId}}runWebGLProgram(e,t,a,n,r=!1,s){let i=this.makeTensorInfo(e.outputShape,a),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===fd.DENSE){let g=s!=null?s:ic(e.outputShape);o.texShape=g.map(x=>x*2)}if(e.outTexUsage!=null&&(o.usage=e.outTexUsage),v.sizeFromShape(i.shape)===0)return o.values=v.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let x=this.texData.get(g.dataId);if(x.texture==null){if(!e.packedInputs&&v.sizeFromShape(g.shape)<=W().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:x.values};e.packedInputs&&(x.isPacked=!0,x.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!x.isPacked!=!!e.packedInputs)g=x.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),x=this.texData.get(g.dataId);else if(x.isPacked&&!md(x.shape,g.shape)){let A=g,y=g.shape;g.shape=x.shape,g=this.packedReshape(g,y),l.push(g),x=this.texData.get(g.dataId),A.shape=y}return{shape:g.shape,texData:x,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:o,isUniform:!1},c=jV(e,u,p),d=this.getAndSaveBinary(c,()=>GV(this.gpgpu,e,u,p)),h=this.activeTimers!=null,f;h&&(f=this.startTimer()),W().get("ENGINE_COMPILE_ONLY")||HV(this.gpgpu,d,u,p,n),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(f=this.endTimer(f),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(f)}));let m=W().get("WEBGL_FLUSH_THRESHOLD");if(m>0){let g=v.now();g-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!W().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&r===!1){let g=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),g}return i}compileAndRun(e,t,a,n,r=!1){return a=a||t[0].dtype,this.runWebGLProgram(e,t,a,n,r)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(W().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=$e(()=>{if(!W().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=W().getBool("DEBUG");W().set("DEBUG",!1);let t=this.abs(Fe(1e-8)).dataSync()[0];if(W().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?lG:uG}uploadToGPU(e){let t=this.texData.get(e),{shape:a,dtype:n,values:r,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=v.now());let p=t.texShape;if(p==null&&(p=o6(a,o),t.texShape=p),r!=null){let c=Ku(a),d,h=p[1],f=p[0],m=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!m)&&([h,f]=ou(p[0],p[1])),o?d=new JV(c,m):d=new dx(c,m);let g=m?[f,h]:p,x=this.makeTensorInfo(g,n),A=this.texData.get(x.dataId);m?A.usage=dn.PIXELS:A.usage=dn.UPLOAD,A.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),h,f,r);let y=[[f,h]],b=!0,w=this.runWebGLProgram(d,[x],n,y,b),S=this.texData.get(w.dataId);t.texShape=S.texShape,t.isPacked=S.isPacked,t.usage=S.usage,W().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(t.texture=S.texture,t.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(x),l&&(this.uploadWaitMs+=v.now()-u)}else{let c=this.acquireTexture(p,i,n,o);t.texture=c}}convertAndCacheOnCPU(e,t){let a=this.texData.get(e),{dtype:n}=a;return t!=null&&(a.values=fG(t,n)),a.values}acquireTexture(e,t,a,n){if(this.numBytesInGPU+=this.computeBytes(e,a),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let r=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${r} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*v.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let a=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(r){throw r}});e.push(a)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await x4(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(x3(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:a,infLoc:n,nanLoc:r,inShapesLocations:s,inTexShapesLocations:i,outShapeLocation:o,outShapeStridesLocation:l,outTexShapeLocation:u}=A6(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=a,e.infLoc=n,e.nanLoc=r,e.inShapesLocations=s,e.inTexShapesLocations=i,e.outShapeLocation=o,e.outShapeStridesLocation=l,e.outTexShapeLocation=u}}createTensorFromTexture(e,t,a){let{texture:n,height:r,width:s,channels:i}=e,o=kt().backend;if(!o.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let l=o.writeTexture(n,t,a,r,s,i);return kt().makeTensorFromDataId(l,t,a,o)}};hu.nextDataId=0;function fG(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let a=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let n=0;nnew hu,2);var gG={forceHalfFloat:W6},C3=` if (isnan(a)) return a; if (isnan(b)) return b; -`,cl=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=T.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` +`,xl=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=T.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=Na(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } @@ -1252,7 +1252,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.z = 0.; result.w = 0.; `;else if(s=` - ${mt(r)} coords = getOutputCoords(); + ${gt(r)} coords = getOutputCoords(); `,r===1)this.enableShapeUniforms?s+=` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function Za(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var qU={kernelName:Fi,backendName:"webgl",kernelFunc:Za};function ks(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.texData.get(s.dataId),o=Za({inputs:{x:n},backend:a}),l=Za({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var XU={kernelName:Id,backendName:"webgl",kernelFunc:ks},e8="return (a < 0.) ? b * a : a;",t8=` + `}};function Ka(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var xG={kernelName:vi,backendName:"webgl",kernelFunc:Ka};function is(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.texData.get(s.dataId),o=Ka({inputs:{x:n},backend:a}),l=Ka({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var AG={kernelName:Sd,backendName:"webgl",kernelFunc:is},V6="return (a < 0.) ? b * a : a;",U6=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function KU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=V().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(t8,r.shape,i.shape):new cl(e8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var ZU={kernelName:Pi,backendName:"webgl",kernelFunc:KU},a8="return (a < 0.) ? b * a : a;",n8=` +`;function yG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(U6,r.shape,i.shape):new xl(V6,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var bG={kernelName:ki,backendName:"webgl",kernelFunc:yG},G6="return (a < 0.) ? b * a : a;",H6=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function YU(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=V().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(n8,n.shape,r.shape):new cl(a8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var JU={kernelName:qi,backendName:"webgl",kernelFunc:YU},ru="if (isnan(x)) return x;";function Qe({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:a,dtype:n}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=n||i.dtype;if(o.shouldExecuteOnCPU([i])&&a!=null){let c=o.texData.get(i.dataId),p=a(c.values,l);return o.makeTensorInfo(i.shape,l,p)}let u=V().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,d;return u?d=new Js(i.shape,t):d=new gr(i.shape,e),o.runWebGLProgram(d,[i],l)}}function la({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:a=!1,supportsComplex:n=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,d=o;if(n&&l.dtype==="complex64"){let f=d.texData.get(l.dataId),m=d.texData.get(u.dataId),[g,y]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(x=>{let[b,w]=x,S={dataId:b.dataId,dtype:b.dtype,shape:l.shape},C={dataId:w.dataId,dtype:w.dtype,shape:u.shape},N=new cl(e,l.shape,u.shape);return d.runWebGLProgram(N,[S,C],ra(b.dtype,w.dtype))}),A=ks({inputs:{real:g,imag:y},backend:d});return d.disposeIntermediateTensorInfo(g),d.disposeIntermediateTensorInfo(y),A}let c=s||ra(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||d.shouldExecuteOnCPU([l,u]))&&r!=null){let f=d.texData.get(l.dataId).values,m=d.texData.get(u.dataId).values,g=l.dtype==="string"?T.fromUint8ToStringArray(f):f,y=l.dtype==="string"?T.fromUint8ToStringArray(m):m,[A,x]=r(l.shape,u.shape,g,y,c),b=d.makeTensorInfo(x,c),w=d.texData.get(b.dataId);return w.values=A,b}let p=V().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return p?h=new cp(t,l.shape,u.shape,a):h=new cl(e,l.shape,u.shape),d.runWebGLProgram(h,[l,u],c)}}function ud(e,t=!1){if(e==="linear")return t?MU:TU;if(e==="relu")return t?_U:NU;if(e==="elu")return t?$U:CU;if(e==="relu6")return t?FU:EU;if(e==="prelu")return t?n8:a8;if(e==="leakyrelu")return t?t8:e8;if(e==="sigmoid")return t?PU:RU;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var r8=class{constructor(e,t,a,n=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a,this.enableShapeUniforms=Na(this.outputShape.length);let u=n?e[1]:e[2],d=Math.ceil(u/2),c=n?"i * 2, rc.y":"rc.y, i * 2",p=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",g="";i&&(o?m=`vec4 activation(vec4 a) { +`;function vG(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(H6,n.shape,r.shape):new xl(G6,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var wG={kernelName:Ui,backendName:"webgl",kernelFunc:vG},fu="if (isnan(x)) return x;";function Qe({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:a,dtype:n}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=n||i.dtype;if(o.shouldExecuteOnCPU([i])&&a!=null){let c=o.texData.get(i.dataId),d=a(c.values,l);return o.makeTensorInfo(i.shape,l,d)}let u=W().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new Br(i.shape,t):p=new jn(i.shape,e),o.runWebGLProgram(p,[i],l)}}function oa({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:a=!1,supportsComplex:n=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,p=o;if(n&&l.dtype==="complex64"){let f=p.texData.get(l.dataId),m=p.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(y=>{let[b,w]=y,S={dataId:b.dataId,dtype:b.dtype,shape:l.shape},C={dataId:w.dataId,dtype:w.dtype,shape:u.shape},E=new xl(e,l.shape,u.shape);return p.runWebGLProgram(E,[S,C],ca(b.dtype,w.dtype))}),A=is({inputs:{real:g,imag:x},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(x),A}let c=s||ca(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let f=p.texData.get(l.dataId).values,m=p.texData.get(u.dataId).values,g=l.dtype==="string"?T.fromUint8ToStringArray(f):f,x=l.dtype==="string"?T.fromUint8ToStringArray(m):m,[A,y]=r(l.shape,u.shape,g,x,c),b=p.makeTensorInfo(y,c),w=p.texData.get(b.dataId);return w.values=A,b}let d=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new cp(t,l.shape,u.shape,a):h=new xl(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function gd(e,t=!1){if(e==="linear")return t?tG:ZU;if(e==="relu")return t?nG:JU;if(e==="elu")return t?aG:YU;if(e==="relu6")return t?rG:QU;if(e==="prelu")return t?H6:G6;if(e==="leakyrelu")return t?U6:V6;if(e==="sigmoid")return t?sG:eG;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var j6=class{constructor(e,t,a,n=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a,this.enableShapeUniforms=Na(this.outputShape.length);let u=n?e[1]:e[2],p=Math.ceil(u/2),c=n?"i * 2, rc.y":"rc.y, i * 2",d=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",g="";i&&(o?m=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:l?m=`vec4 activation(vec4 a) { @@ -1305,18 +1305,18 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i} }`:m=`vec4 activation(vec4 x) { ${i} - }`,g="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let A="rc.x",x="rc.x";e[0]`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let d=i.texData.get(r.dataId);return d.isPacked&&!ld(r.shape,l)&&!(d.texture!==null&&ld(d.shape,l))?ej(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var tj={kernelName:Fl,backendName:"webgl",kernelFunc:de},Ny=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i=Math.floor(a/4)*4,o=a%4,l="sumValue += dot(values, ones);";if(t!=null){let d=1/t;l=`sumValue += dot(values * ${v.isInt(d)?d.toPrecision(2):d}, ones);`}let u="";r%a>0&&(u=` + `}},xx="return a * b;";function N3(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=T.upcastType(n.dtype,r.dtype);if(n.dtype==="complex64"){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),u=new gx(mx.REAL,n.shape,r.shape),p=new gx(mx.IMAG,n.shape,r.shape),c=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:n.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:n.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:r.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:r.shape}],d=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(p,c,"float32"),f=is({inputs:{real:d,imag:h},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),f}if(a.shouldExecuteOnCPU([n,r])){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),[u,p]=bU(n.shape,r.shape,o.values,l.values,s),c=a.makeTensorInfo(p,s),d=a.texData.get(c.dataId);return d.values=u,c}let i;return W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new cp(xx,n.shape,r.shape):i=new xl(xx,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var kG={kernelName:Oi,backendName:"webgl",kernelFunc:N3};function IG(e,t,a){let n=[Us(e.shape),...Gs(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[Us(t),...Gs(t)],i=new B6(s,n),o=!0,l=[n],u=a.runWebGLProgram(i,[r],e.dtype,l,o);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function ce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=a,o=v.sizeFromShape(r.shape),l=v.inferFromImplicitShape(s,o),u=v.sizeFromShape(l);v.assert(o===u,()=>`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let p=i.texData.get(r.dataId);return p.isPacked&&!md(r.shape,l)&&!(p.texture!==null&&md(p.shape,l))?IG(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var SG={kernelName:jl,backendName:"webgl",kernelFunc:ce},Ax=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i=Math.floor(a/4)*4,o=a%4,l="sumValue += dot(values, ones);";if(t!=null){let p=1/t;l=`sumValue += dot(values * ${v.isInt(p)?p.toPrecision(2):p}, ones);`}let u="";r%a>0&&(u=` if (inIdx < 0 || inIdx >= ${r}) { return 0.0; } @@ -1402,7 +1402,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(sumValue); } - `}},aj=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let u=Math.floor(a/4)*4,d=a%4,c=` + `}},TG=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let u=Math.floor(a/4)*4,p=a%4,c=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { @@ -1418,15 +1418,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } } } - `,p="vec4";t==="all"?(i="1.0",c=` + `,d="vec4";t==="all"?(i="1.0",c=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); - `,p="bvec4"):t==="any"&&(i="0.0",c=` + `,d="bvec4"):t==="any"&&(i="0.0",c=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); - `,p="bvec4");let h="";r%a>0&&(h=` + `,d="bvec4");let h="";r%a>0&&(h=` if (inIdx < 0 || inIdx >= ${r}) { return initializationValue; } @@ -1453,7 +1453,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, for (int i = 0; i < ${u}; i += 4) { int inIdx = inOffset + i; - ${p} values = ${p}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1464,8 +1464,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } int inIdx = inOffset + ${u}; - if (${d===1}) { - ${p} values = ${p}( + if (${p===1}) { + ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, @@ -1473,8 +1473,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${c} - } else if (${d===2}) { - ${p} values = ${p}( + } else if (${p===2}) { + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, @@ -1482,8 +1482,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${c} - } else if (${d===3}) { - ${p} values = ${p}( + } else if (${p===3}) { + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${l}); } - `}};function nj(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let a=t.length?t[t.length-1].outSize:e[1],n=T.computeOptimalWindowSize(a);t.push({inSize:a,windowSize:n,outSize:Math.ceil(a/n)})}return t}function fo(e,t,a,n){let r=nj(e.shape),s=e;for(let i=0;i6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(t);for(let r=0;r6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=mt(this.rank),r=Y6("rc",this.rank),s=new Array(this.rank);for(let u=0;u6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(t);for(let r=0;r6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=gt(this.rank),r=L6("rc",this.rank),s=new Array(this.rank);for(let u=0;u`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[A,f,p]:[A,p,f],S=de({inputs:{x:e},backend:r,attrs:{shape:b}}),C=de({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[S,C],_=Math.max(y,A),$=a?S.shape[1]:S.shape[2],M=s!=null,I=i!=null,E=l==="leakyrelu",O=l!=null?ud(l,!0):null,L=M||I||E||O!=null,B;if((h===1||f===1)&&$>s8&&L===!1){let j=S,U=C;a&&(j=Ia({inputs:{x:S},backend:r,attrs:{perm:[0,2,1]}}),N.push(j)),n&&(U=Ia({inputs:{x:C},backend:r,attrs:{perm:[0,2,1]}}),N.push(U));let H=f!==1,W=f===1,Q=j;H&&(Q=de({inputs:{x:j},backend:r,attrs:{shape:[_,$,1]}}),N.push(Q));let Z=f===1?2:1,re=U;W&&(re=de({inputs:{x:U},backend:r,attrs:{shape:[_,1,$]}}),N.push(re));let ee=F3({inputs:{a:Q,b:re},backend:r});B=Bh({inputs:{x:ee},backend:r,attrs:{axis:Z,keepDims:!0}}),N.push(ee)}else{let j=ra(e.dtype,t.dtype),U=new r8(b,w,[_,h,f],a,n,M,O,I,E),H=[S,C];if(s!=null&&H.push(s),I&&H.push(i),E){let W=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(W),N.push(W)}B=r.runWebGLProgram(U,H,j)}let G=de({inputs:{x:B},backend:r,attrs:{shape:x}});N.push(B);for(let j of N)r.disposeIntermediateTensorInfo(j);return G}function dj(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n;return Pc({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:d})}var pj={kernelName:Ur,backendName:"webgl",kernelFunc:dj},Ey="return abs(x);";function cj(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=a.texData.get(n.dataId),i=K6(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return V().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Js(n.shape,Ey):r=new gr(n.shape,Ey),a.runWebGLProgram(r,[n],n.dtype)}var hj={kernelName:gl,backendName:"webgl",kernelFunc:cj},fj=Cn+` + `}};function Ph(e,t,a){let n=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new RG(e.shape,t):new NG(e.shape,t);return a.runWebGLProgram(n,[e],e.dtype)}function MG(e,t,a,n){let r=t,s=e.shape.length,i=v.parseAxisParam(r,e.shape),o=i,l=T.getAxesPermutation(o,s),u=l!=null,p=e;u&&(p=Ph(e,l,n),o=T.getInnerMostAxes(o.length,s)),T.assertAxesAreInnerMostDims("sum",o,s);let[c,d]=T.computeOutAndReduceShapes(p.shape,o),h=c;a&&(h=T.expandShapeToKeepDim(c,i));let f=v.sizeFromShape(d),m=v.sizeFromShape(e.shape)/f,g=ce({inputs:{x:p},attrs:{shape:[m,f]},backend:n}),x=Hd(e.dtype),A=Ao(g,x,"sum",n),y=ce({inputs:{x:A},attrs:{shape:h},backend:n});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(A),u&&n.disposeIntermediateTensorInfo(p),y}function Fh(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return MG(r,s,i,a)}var $G={kernelName:ao,backendName:"webgl",kernelFunc:Fh};function Ia(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{perm:s}=n,i=a,o=r.shape.length,l=new Array(o);for(let p=0;p`Error in matMul: inner shapes (${c}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[x,c,h]:[x,h,c],w=n?[A,f,d]:[A,d,f],S=ce({inputs:{x:e},backend:r,attrs:{shape:b}}),C=ce({inputs:{x:t},backend:r,attrs:{shape:w}}),E=[S,C],_=Math.max(x,A),$=a?S.shape[1]:S.shape[2],M=s!=null,I=i!=null,N=l==="leakyrelu",O=l!=null?gd(l,!0):null,L=M||I||N||O!=null,B;if((h===1||f===1)&&$>q6&&L===!1){let j=S,U=C;a&&(j=Ia({inputs:{x:S},backend:r,attrs:{perm:[0,2,1]}}),E.push(j)),n&&(U=Ia({inputs:{x:C},backend:r,attrs:{perm:[0,2,1]}}),E.push(U));let H=f!==1,V=f===1,Q=j;H&&(Q=ce({inputs:{x:j},backend:r,attrs:{shape:[_,$,1]}}),E.push(Q));let Z=f===1?2:1,re=U;V&&(re=ce({inputs:{x:U},backend:r,attrs:{shape:[_,1,$]}}),E.push(re));let ee=N3({inputs:{a:Q,b:re},backend:r});B=Fh({inputs:{x:ee},backend:r,attrs:{axis:Z,keepDims:!0}}),E.push(ee)}else{let j=ca(e.dtype,t.dtype),U=new j6(b,w,[_,h,f],a,n,M,O,I,N),H=[S,C];if(s!=null&&H.push(s),I&&H.push(i),N){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),E.push(V)}B=r.runWebGLProgram(U,H,j)}let G=ce({inputs:{x:B},backend:r,attrs:{shape:y}});E.push(B);for(let j of E)r.disposeIntermediateTensorInfo(j);return G}function PG(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n;return Pc({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var FG={kernelName:Gr,backendName:"webgl",kernelFunc:PG},yx="return abs(x);";function OG(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=a.texData.get(n.dataId),i=D6(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Br(n.shape,yx):r=new jn(n.shape,yx),a.runWebGLProgram(r,[n],n.dtype)}var DG={kernelName:vl,backendName:"webgl",kernelFunc:OG},zG=Tn+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,mj=Qe({opSnippet:fj}),gj={kernelName:yd,backendName:"webgl",kernelFunc:mj},yj=Cn+` +`,LG=Qe({opSnippet:zG}),BG={kernelName:wl,backendName:"webgl",kernelFunc:LG},WG=Tn+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,backendName:"webgl",kernelFunc:Aj},Ry="return a + b;",bj=la({opSnippet:Ry,packedOpSnippet:Ry,supportsComplex:!0,cpuKernelImpl:RG}),vj={kernelName:vr,backendName:"webgl",kernelFunc:bj},wj=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`float v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` +return log(x + sqrt(x * x - 1.0));`,VG=Qe({opSnippet:WG}),UG={kernelName:kl,backendName:"webgl",kernelFunc:VG},bx="return a + b;",GG=oa({opSnippet:bx,packedOpSnippet:bx,supportsComplex:!0,cpuKernelImpl:eU}),HG={kernelName:Qr,backendName:"webgl",kernelFunc:GG},jG=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`float v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` void main() { ${a.join(` `)} @@ -1531,7 +1531,7 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back float result = ${n}; setOutput(result); } - `}},kj=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`vec4 v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` + `}},qG=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`vec4 v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` void main() { ${a.join(` `)} @@ -1539,7 +1539,7 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back vec4 result = ${n}; setOutput(result); } - `}};function Ac(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return Za({inputs:{x:n[0]},backend:a});if(n.length>V().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=Ac({inputs:n.slice(0,o),backend:a}),u=Ac({inputs:n.slice(o),backend:a});return Ac({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>ra(o,l)),s=n.map(o=>o.shape),i=V().getBool("WEBGL_PACK")?new kj(n[0].shape,s):new wj(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var Ij={kernelName:hi,backendName:"webgl",kernelFunc:Ac};function Sj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=T.getAxesPermutation(u,o),c=r;d!=null&&(c=Ia({inputs:{x:r},backend:a,attrs:{perm:d}}),u=T.getInnerMostAxes(u.length,o)),T.assertAxesAreInnerMostDims("all",u,o);let[p,h]=T.computeOutAndReduceShapes(c.shape,u),f=v.sizeFromShape(h),m=de({inputs:{x:c},backend:a,attrs:{shape:[-1,f]}}),g=fo(m,m.dtype,"all",a),y;if(i){let A=T.expandShapeToKeepDim(p,l);y=de({inputs:{x:g},backend:a,attrs:{shape:A}})}else y=de({inputs:{x:g},backend:a,attrs:{shape:p}});return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(g),d!=null&&a.disposeIntermediateTensorInfo(c),y}var Tj={kernelName:yl,backendName:"webgl",kernelFunc:Sj};function Cj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=T.getAxesPermutation(u,o),c=r;d!=null&&(c=Ia({inputs:{x:r},backend:a,attrs:{perm:d}}),u=T.getInnerMostAxes(u.length,o)),T.assertAxesAreInnerMostDims("any",u,o);let[p,h]=T.computeOutAndReduceShapes(c.shape,u),f=v.sizeFromShape(h),m=de({inputs:{x:c},backend:a,attrs:{shape:[-1,f]}}),g=fo(m,m.dtype,"any",a),y;if(i){let A=T.expandShapeToKeepDim(p,l);y=de({inputs:{x:g},backend:a,attrs:{shape:A}})}else y=de({inputs:{x:g},backend:a,attrs:{shape:p}});return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(g),d!=null&&a.disposeIntermediateTensorInfo(c),y}var Nj={kernelName:Al,backendName:"webgl",kernelFunc:Cj},Ej=class{constructor(e,t,a){this.variableNames=["A"];let{windowSize:n,batchSize:r,outSize:s}=e;a||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=a?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` + `}};function xc(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return Ka({inputs:{x:n[0]},backend:a});if(n.length>W().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=xc({inputs:n.slice(0,o),backend:a}),u=xc({inputs:n.slice(o),backend:a});return xc({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>ca(o,l)),s=n.map(o=>o.shape),i=W().getBool("WEBGL_PACK")?new qG(n[0].shape,s):new jG(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var XG={kernelName:qs,backendName:"webgl",kernelFunc:xc};function KG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=T.getAxesPermutation(u,o),c=r;p!=null&&(c=Ia({inputs:{x:r},backend:a,attrs:{perm:p}}),u=T.getInnerMostAxes(u.length,o)),T.assertAxesAreInnerMostDims("all",u,o);let[d,h]=T.computeOutAndReduceShapes(c.shape,u),f=v.sizeFromShape(h),m=ce({inputs:{x:c},backend:a,attrs:{shape:[-1,f]}}),g=Ao(m,m.dtype,"all",a),x;if(i){let A=T.expandShapeToKeepDim(d,l);x=ce({inputs:{x:g},backend:a,attrs:{shape:A}})}else x=ce({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),x}var ZG={kernelName:Xs,backendName:"webgl",kernelFunc:KG};function YG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=T.getAxesPermutation(u,o),c=r;p!=null&&(c=Ia({inputs:{x:r},backend:a,attrs:{perm:p}}),u=T.getInnerMostAxes(u.length,o)),T.assertAxesAreInnerMostDims("any",u,o);let[d,h]=T.computeOutAndReduceShapes(c.shape,u),f=v.sizeFromShape(h),m=ce({inputs:{x:c},backend:a,attrs:{shape:[-1,f]}}),g=Ao(m,m.dtype,"any",a),x;if(i){let A=T.expandShapeToKeepDim(d,l);x=ce({inputs:{x:g},backend:a,attrs:{shape:A}})}else x=ce({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),x}var JG={kernelName:Ks,backendName:"webgl",kernelFunc:YG},QG=class{constructor(e,t,a){this.variableNames=["A"];let{windowSize:n,batchSize:r,outSize:s}=e;a||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=a?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -1559,7 +1559,7 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back } setOutput(float(bestIndex)); } - `}},Rj=class{constructor(e,t,a,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${a.charAt(0).toUpperCase()+a.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=mt(o),u=va("coords",o),d,c;if(s===1){c=o+1;let C=mt(c);d=` + `}},eH=class{constructor(e,t,a,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${a.charAt(0).toUpperCase()+a.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=gt(o),u=va("coords",o),p,c;if(s===1){c=o+1;let C=gt(c);p=` ${C} sourceLocR = ${C}(${u.join()}, 0); ++${u[o-1]}; ${C} sourceLocG = ${C}(${u.join()}, 0); @@ -1567,7 +1567,7 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back ${C} sourceLocA = ${C}(${u.join()}, 0); --${u[o-1]}; ${C} sourceLocB = ${C}(${u.join()}, 0); - --${u[o-2]};`}else c=o,d=` + --${u[o-2]};`}else c=o,p=` ${l} sourceLocR = coords; ++${u[o-1]}; ${l} sourceLocG = coords; @@ -1575,29 +1575,29 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back ${l} sourceLocA = coords; --${u[o-1]}; ${l} sourceLocB = coords; - --${u[o-2]};`;let p=["x","y","z","w","u","v"].slice(0,c),h="."+p[c-1],f=p.map(C=>"int "+C),m=va("sourceLocR",c-1).concat("inIdx.r"),g=va("sourceLocG",c-1).concat("inIdx.g"),y=va("sourceLocB",c-1).concat("inIdx.b"),A=va("sourceLocA",c-1).concat("inIdx.a"),x=a==="max"?"greaterThan":"lessThan",b=n?"":` + --${u[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,c),h="."+d[c-1],f=d.map(C=>"int "+C),m=va("sourceLocR",c-1).concat("inIdx.r"),g=va("sourceLocG",c-1).concat("inIdx.g"),x=va("sourceLocB",c-1).concat("inIdx.b"),A=va("sourceLocA",c-1).concat("inIdx.a"),y=a==="max"?"greaterThan":"lessThan",b=n?"":` inIdx = round(vec4(getBestIndicesAChannel(${m.join()}), getBestIndicesAChannel(${g.join()}), - getBestIndicesAChannel(${y.join()}), + getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${A.join()})));`,w=`vec4( getAChannel(${m.join()}), hasNextCol ? getAChannel(${g.join()}) : 0., - hasNextRow ? getAChannel(${y.join()}) : 0., + hasNextRow ? getAChannel(${x.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${A.join()}) : 0.)`,S=n?"":` float getBestIndicesAChannel(${f.join()}) { - return getChannel(getBestIndicesA(${p.join()}), - vec2(${p.slice(-2).join()})); + return getChannel(getBestIndicesA(${d.join()}), + vec2(${d.slice(-2).join()})); }`;this.userCode=` float getAChannel(${f.join()}) { - return getChannel(getA(${p.join()}), - vec2(${p.slice(-2).join()})); + return getChannel(getA(${d.join()}), + vec2(${d.slice(-2).join()})); } ${S} void main() { ${l} coords = getOutputCoords(); bool hasNextCol = ${u[o-1]} < ${i[o-1]-1}; bool hasNextRow = ${u[o-2]} < ${i[o-2]-1}; - ${d} + ${p} ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h}, sourceLocB${h}, sourceLocA${h}) * ${t}; ivec4 inIdx = srcIdx; @@ -1610,7 +1610,7 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back vec4 candidate = ${w}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( - vec4(${x}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); + vec4(${y}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); bestValue = vec4(replace.x ? candidate.x : bestValue.x, replace.y ? candidate.y : bestValue.y, @@ -1621,27 +1621,27 @@ return log(x + sqrt(x * x - 1.0));`,Aj=Qe({opSnippet:yj}),xj={kernelName:Ad,back } setOutput(bestIndex); } - `}};function i8(e,t,a,n=null){let r=t.shape[0],s=t.shape[1];n!=null&&(r=n.shape[0],s=n.shape[1]);let i=T.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new Ej(o,a,n==null),u=[t];n!=null&&u.push(n);let d=e.runWebGLProgram(l,u,"int32");if(d.shape[1]===1)return d;let c=i8(e,t,a,d);return e.disposeIntermediateTensorInfo(d),c}function o8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=T.computeOptimalWindowSize(s),o=new Rj(r,i,a,n==null),l=n==null?[t]:[t,n],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let d=o8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),d}return u}function l8(e,t,a,n){let r=[a];if(T.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!V().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,d]=T.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(d),p=de({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(p);let h=i8(e,p,n);s.push(h);let f=de({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(m=>e.disposeIntermediateTensorInfo(m)),f}return o8(e,t,n)}function Mj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ia({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let d=l8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),d}var $j={kernelName:fi,backendName:"webgl",kernelFunc:Mj};function _j(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ia({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let d=l8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),d}var Fj={kernelName:xd,backendName:"webgl",kernelFunc:_j},Pj=Cn+` + `}};function X6(e,t,a,n=null){let r=t.shape[0],s=t.shape[1];n!=null&&(r=n.shape[0],s=n.shape[1]);let i=T.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new QG(o,a,n==null),u=[t];n!=null&&u.push(n);let p=e.runWebGLProgram(l,u,"int32");if(p.shape[1]===1)return p;let c=X6(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function K6(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=T.computeOptimalWindowSize(s),o=new eH(r,i,a,n==null),l=n==null?[t]:[t,n],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let p=K6(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function Z6(e,t,a,n){let r=[a];if(T.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!W().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,p]=T.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(p),d=ce({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(d);let h=X6(e,d,n);s.push(h);let f=ce({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(m=>e.disposeIntermediateTensorInfo(m)),f}return K6(e,t,n)}function tH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ia({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=Z6(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var aH={kernelName:Zs,backendName:"webgl",kernelFunc:tH};function nH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ia({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=Z6(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var rH={kernelName:kd,backendName:"webgl",kernelFunc:nH},sH=Tn+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,Oj=Qe({opSnippet:Pj}),Dj={kernelName:bd,backendName:"webgl",kernelFunc:Oj},zj=Cn+"return log(x + sqrt(x * x + 1.0));",Lj=Qe({opSnippet:zj}),Bj={kernelName:vd,backendName:"webgl",kernelFunc:Lj},Wj=Cn+` +`,iH=Qe({opSnippet:sH}),oH={kernelName:Il,backendName:"webgl",kernelFunc:iH},lH=Tn+"return log(x + sqrt(x * x + 1.0));",uH=Qe({opSnippet:lH}),dH={kernelName:Sl,backendName:"webgl",kernelFunc:uH},pH=Tn+` return atan(x); -`,Vj=Qe({opSnippet:Wj}),Gj={kernelName:wd,backendName:"webgl",kernelFunc:Vj},Uj=_3+` +`,cH=Qe({opSnippet:pH}),hH={kernelName:Tl,backendName:"webgl",kernelFunc:cH},fH=C3+` return atan(a, b); -`,jj=` +`,mH=` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); `+pp+` return result; -`,Hj=la({opSnippet:Uj,packedOpSnippet:jj}),qj={kernelName:xl,backendName:"webgl",kernelFunc:Hj},Xj=Cn+` +`,gH=oa({opSnippet:fH,packedOpSnippet:mH}),xH={kernelName:Nl,backendName:"webgl",kernelFunc:gH},AH=Tn+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelName:kd,backendName:"webgl",kernelFunc:Kj},dd=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterHeight,c=e.effectiveFilterWidth,p=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(f||(y="-1.0 / 1e-20"),a){let C=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,yH=Qe({opSnippet:AH}),bH={kernelName:Cl,backendName:"webgl",kernelFunc:yH},xd=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterHeight,c=e.effectiveFilterWidth,d=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,x="0.0";if(f||(x="-1.0 / 1e-20"),a){let C=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); - const ivec2 pads = ivec2(${p}, ${h}); + const ivec2 pads = ivec2(${d}, ${h}); void main() { ivec4 coords = getOutputCoords(); @@ -1659,7 +1659,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam int minMaxPosition = 0; float avgValue = 0.0; - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${p}; wR += ${l}) { int xR = xRCorner + wR; @@ -1690,7 +1690,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(float(minMaxPosition)); } - `;return}let A="max",x=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(x="avgValue / count");let b=Math.floor(s/4)*4,w=s%4,S=` + `;return}let A="max",y=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(y="avgValue / count");let b=Math.floor(s/4)*4,w=s%4,S=` if (${f}) { avgValue += dot(values, ones); } else { @@ -1698,8 +1698,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); - const ivec2 pads = ivec2(${p}, ${h}); - const float initializationValue = ${y}; + const ivec2 pads = ivec2(${d}, ${h}); + const float initializationValue = ${x}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; @@ -1723,11 +1723,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined - vec4 minMaxValue = vec4(${y}); + vec4 minMaxValue = vec4(${x}); float avgValue = 0.0; count = 0.0; - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${p}; wR += ${l}) { int xR = xRCorner + wR; @@ -1778,12 +1778,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${S} } } - setOutput(${x}); + setOutput(${y}); } - `}},P3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,d=e.dilationHeight,c=e.dilationWidth,p=e.effectiveFilterDepth,h=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let A=t==="avg",x="0.0";if(A||(x="-1.0 / 1e-20"),a){let _=">=";this.userCode=` + `}},E3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,c=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,g=e.padInfo.top,x=e.padInfo.left;this.outputShape=e.outShape;let A=t==="avg",y="0.0";if(A||(y="-1.0 / 1e-20"),a){let _=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); - const ivec3 pads = ivec3(${m}, ${g}, ${y}); + const ivec3 pads = ivec3(${m}, ${g}, ${x}); void main() { ivec5 coords = getOutputCoords(); @@ -1801,7 +1801,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float minMaxValueFound = 0.0; int minMaxPosition = 0; - for (int wD = 0; wD < ${p}; + for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; @@ -1810,7 +1810,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } for (int wR = 0; wR < ${h}; - wR += ${d}) { + wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { @@ -1842,7 +1842,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(float(minMaxPosition)); } - `;return}let b="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let S=Math.floor(s/4)*4,C=s%4,N=` + `;return}let b="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let S=Math.floor(s/4)*4,C=s%4,E=` if (${A}) { avgValue += dot(values, ones); } else { @@ -1851,8 +1851,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam `;this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); - const ivec3 pads = ivec3(${m}, ${g}, ${y}); - const float initializationValue = ${x}; + const ivec3 pads = ivec3(${m}, ${g}, ${x}); + const float initializationValue = ${y}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; @@ -1877,11 +1877,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined - vec4 minMaxValue = vec4(${x}); + vec4 minMaxValue = vec4(${y}); float avgValue = 0.0; count = 0.0; - for (int wD = 0; wD < ${p}; + for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; @@ -1890,7 +1890,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } for (int wR = 0; wR < ${h}; - wR += ${d}) { + wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { @@ -1907,7 +1907,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam getValue(batch, xD, xR, xC + 3 * ${c}, ch) ); - ${N} + ${E} } int xC = xCCorner + ${S}; @@ -1919,7 +1919,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam initializationValue ); - ${N} + ${E} } else if (${C===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), @@ -1928,7 +1928,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam initializationValue ); - ${N} + ${E} } else if (${C===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), @@ -1937,14 +1937,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam initializationValue ); - ${N} + ${E} } } setOutput(${w}); } } - `}};function Yj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Jl(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(T.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=T.computePool2DInfo(r.shape,s,i,u,o,l);if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))return Za({inputs:{x:r},backend:a});let c=new dd(d,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var Jj={kernelName:mi,backendName:"webgl",kernelFunc:Yj};function Qj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,d=[1,1,1],c=T.computePool3DInfo(r.shape,s,i,d,o,l,u),p=new P3(c,"avg",!1);return a.runWebGLProgram(p,[r],"float32")}var eH={kernelName:Gc,backendName:"webgl",kernelFunc:Qj},tH=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,d=l-1-e.padInfo.left,c=1/(t*a);this.userCode=` - const ivec2 pads = ivec2(${u}, ${d}); + `}};function vH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;lu(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(T.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=T.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return Ka({inputs:{x:r},backend:a});let c=new xd(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var wH={kernelName:Ys,backendName:"webgl",kernelFunc:vH};function kH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=[1,1,1],c=T.computePool3DInfo(r.shape,s,i,p,o,l,u),d=new E3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var IH={kernelName:Vc,backendName:"webgl",kernelFunc:kH},SH=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,p=l-1-e.padInfo.left,c=1/(t*a);this.userCode=` + const ivec2 pads = ivec2(${u}, ${p}); const float avgMultiplier = float(${c}); void main() { @@ -1985,7 +1985,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},aH=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterDepth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,h=d-1-e.padInfo.front,f=c-1-e.padInfo.top,m=p-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` + `}},TH=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterDepth,c=e.effectiveFilterHeight,d=e.effectiveFilterWidth,h=p-1-e.padInfo.front,f=c-1-e.padInfo.top,m=d-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` const ivec3 pads = ivec3(${h}, ${f}, ${m}); const float avgMultiplier = float(${g}); @@ -2004,7 +2004,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; - for (int wD = 0; wD < ${d}; + for (int wD = 0; wD < ${p}; wD += ${o}) { float dyD = float(dyDCorner + wD) / ${r}.0; @@ -2023,7 +2023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } int idyR = int(dyR); - for (int wC = 0; wC < ${p}; + for (int wC = 0; wC < ${d}; wC += ${u}) { float dyC = float(dyCCorner + wC) / ${i}.0; @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}};function nH(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=[1,1,1],p=T.computePool3DInfo(i.shape,o,l,c,u,d),h=new aH(p);return a.runWebGLProgram(h,[r],i.dtype)}var rH={kernelName:H1,backendName:"webgl",kernelFunc:nH};function sH(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Jl([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,d=T.computePool2DInfo(i.shape,o,l,1,u),c=new tH(d);return a.runWebGLProgram(c,[r],i.dtype)}var iH={kernelName:j1,backendName:"webgl",kernelFunc:sH};function oH(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return Pc({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var lH={kernelName:gi,backendName:"webgl",kernelFunc:oH},uH=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(T.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function CH(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=n,c=[1,1,1],d=T.computePool3DInfo(i.shape,o,l,c,u,p),h=new TH(d);return a.runWebGLProgram(h,[r],i.dtype)}var NH={kernelName:W1,backendName:"webgl",kernelFunc:CH};function EH(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;lu([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=T.computePool2DInfo(i.shape,o,l,1,u),c=new SH(p);return a.runWebGLProgram(c,[r],i.dtype)}var RH={kernelName:B1,backendName:"webgl",kernelFunc:EH};function MH(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return Pc({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var $H={kernelName:Js,backendName:"webgl",kernelFunc:MH},_H=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(T.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -2051,7 +2051,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float inv = scale * inversesqrt(variance + float(${s})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}},dH=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(T.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}},PH=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(T.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${o}; @@ -2064,7 +2064,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam setOutput((x - mean) * inv + offset); } - `}},pH=({inputs:e,backend:t,attrs:a})=>{let{x:n,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=a;l==null&&(l=.001);let u=[n,r,s],d=null;i!=null&&(d=i.shape,u.push(i));let c=null;o!=null&&(c=o.shape,u.push(o));let p=V().getBool("WEBGL_PACK_NORMALIZATION")?new dH(n.shape,r.shape,s.shape,d,c,l):new uH(n.shape,r.shape,s.shape,d,c,l);return t.runWebGLProgram(p,u,u[0].dtype)},cH={kernelName:$i,backendName:"webgl",kernelFunc:pH},hH=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=mt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=fH(this.rank),n,r=e.map((s,i)=>`sourceLoc.${S1[i]} = start[${i}] + coords.${S1[i]};`);n=` + `}},FH=({inputs:e,backend:t,attrs:a})=>{let{x:n,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=a;l==null&&(l=.001);let u=[n,r,s],p=null;i!=null&&(p=i.shape,u.push(i));let c=null;o!=null&&(c=o.shape,u.push(o));let d=W().getBool("WEBGL_PACK_NORMALIZATION")?new PH(n.shape,r.shape,s.shape,p,c,l):new _H(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},OH={kernelName:xi,backendName:"webgl",kernelFunc:FH},DH=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=gt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=zH(this.rank),n,r=e.map((s,i)=>`sourceLoc.${k1[i]} = start[${i}] + coords.${k1[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${r.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${n} setOutput(getSource(${a})); } - `}},S1=["x","y","z","w","u","v"];function fH(e){if(e===1)return"sourceLoc";if(e<=6)return S1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var mH=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=mt(this.rank),a=va("coords",this.rank),n=va("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` + `}},k1=["x","y","z","w","u","v"];function zH(e){if(e===1)return"sourceLoc";if(e<=6)return k1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var LH=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=gt(this.rank),a=va("coords",this.rank),n=va("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` result.x = ${s}; if (++${a[this.rank-1]} < ${e[this.rank-1]}) { ++${n[this.rank-1]}; @@ -2092,7 +2092,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } } `,l=this.rank<=4?`sourceLoc = coords + - ${t}(${e.map((u,d)=>`start[${d}]`).join()});`:e.map((u,d)=>`${n[d]} = ${a[d]} + start[${d}];`).join(` + ${t}(${e.map((u,p)=>`start[${p}]`).join()});`:e.map((u,p)=>`${n[p]} = ${a[p]} + start[${p}];`).join(` `);this.userCode=` void main() { ${t} coords = getOutputCoords(); @@ -2103,7 +2103,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${o} setOutput(result); } - `}};function gH(e,t,a,n){let r=n.texData.get(e.dataId),s=n.makeTensorInfo(a,e.dtype),i=n.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=a,i.dtype=e.dtype;let o=At.computeFlatOffset(t,v.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=n.dataRefCount.get(i.slice.origDataId)||1;return n.dataRefCount.set(i.slice.origDataId,l+1),s}function su(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=At.parseSliceParams(r,s,i);if(At.assertParamsValid(r,o,l),v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);if(a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.texData.get(r.dataId),p=oU(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}let{isPacked:u}=a.texData.get(r.dataId),d=At.isSliceContinous(r.shape,o,l);if(u||!d){let c=V().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new mH(l):new hH(l),p=[o];return a.runWebGLProgram(c,[r],r.dtype,p)}return a.uploadToGPU(r.dataId),gH(r,o,l,a)}var yH={kernelName:zl,backendName:"webgl",kernelFunc:su},AH=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((A,x)=>A*x),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),d=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),p=T.getSliceSize(d,i,s.length),h=[],f=de({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Ia({inputs:{x:f},backend:a,attrs:{perm:u}}),g=de({inputs:{x:m},backend:a,attrs:{shape:d}}),y=su({inputs:{x:g},backend:a,attrs:{begin:c,size:p}});return h.push(f),h.push(m),h.push(g),h.forEach(A=>a.disposeIntermediateTensorInfo(A)),y},xH={kernelName:bl,backendName:"webgl",kernelFunc:AH};function bH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.readSync(r.dataId),l=a.readSync(s.dataId),u=X6(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var vH={kernelName:Uc,backendName:"webgl",kernelFunc:bH};function wH(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=T.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var kH={kernelName:jc,backendName:"webgl",kernelFunc:wH},IH="return float(a != b);",u8=la({opSnippet:IH,cpuKernelImpl:JG,dtype:"bool"}),SH={kernelName:cs,backendName:"webgl",kernelFunc:u8};function hp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Za({inputs:{x:r.complexTensorInfos.real},backend:a})}var TH={kernelName:$d,backendName:"webgl",kernelFunc:hp},CH="return float(int(x));";function NH(e,t){let a=new gr(e.shape,CH),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function T1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return Za({inputs:{x:r},backend:a});let i=pn(r.shape),o=T1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ks({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=hp({inputs:{input:r},backend:a}),o=T1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=Za({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.texData.get(r.dataId).values,[o,l,u]=$G(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return NH(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=u8({inputs:{a:r,b:i},backend:a});return a.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var EH={kernelName:yi,backendName:"webgl",kernelFunc:T1},My="return ceil(x);",RH=Qe({opSnippet:My,packedOpSnippet:My,cpuKernelImpl:_G}),MH={kernelName:Qr,backendName:"webgl",kernelFunc:RH},$H=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}};function BH(e,t,a,n){let r=n.texData.get(e.dataId),s=n.makeTensorInfo(a,e.dtype),i=n.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=a,i.dtype=e.dtype;let o=It.computeFlatOffset(t,v.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=n.dataRefCount.get(i.slice.origDataId)||1;return n.dataRefCount.set(i.slice.origDataId,l+1),s}function mu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=It.parseSliceParams(r,s,i);if(It.assertParamsValid(r,o,l),v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);if(a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.texData.get(r.dataId),d=MU(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}let{isPacked:u}=a.texData.get(r.dataId),p=It.isSliceContinous(r.shape,o,l);if(u||!p){let c=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new LH(l):new DH(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),BH(r,o,l,a)}var WH={kernelName:Kl,backendName:"webgl",kernelFunc:mu},VH=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((A,y)=>A*y),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),p=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),d=T.getSliceSize(p,i,s.length),h=[],f=ce({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Ia({inputs:{x:f},backend:a,attrs:{perm:u}}),g=ce({inputs:{x:m},backend:a,attrs:{shape:p}}),x=mu({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(f),h.push(m),h.push(g),h.forEach(A=>a.disposeIntermediateTensorInfo(A)),x},UH={kernelName:El,backendName:"webgl",kernelFunc:VH};function GH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.readSync(r.dataId),l=a.readSync(s.dataId),u=O6(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var HH={kernelName:Id,backendName:"webgl",kernelFunc:GH};function jH(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=T.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var qH={kernelName:Uc,backendName:"webgl",kernelFunc:jH},XH="return float(a != b);",Y6=oa({opSnippet:XH,cpuKernelImpl:wU,dtype:"bool"}),KH={kernelName:Di,backendName:"webgl",kernelFunc:Y6};function hp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Ka({inputs:{x:r.complexTensorInfos.real},backend:a})}var ZH={kernelName:Md,backendName:"webgl",kernelFunc:hp},YH="return float(int(x));";function JH(e,t){let a=new jn(e.shape,YH),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function I1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return Ka({inputs:{x:r},backend:a});let i=hn(r.shape),o=I1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=is({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=hp({inputs:{input:r},backend:a}),o=I1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=Ka({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.texData.get(r.dataId).values,[o,l,u]=aU(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return JH(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Y6({inputs:{a:r,b:i},backend:a});return a.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var QH={kernelName:Qs,backendName:"webgl",kernelFunc:I1},vx="return ceil(x);",ej=Qe({opSnippet:vx,packedOpSnippet:vx,cpuKernelImpl:nU}),tj={kernelName:ei,backendName:"webgl",kernelFunc:ej},aj=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { float value = getAAtOutCoords(); @@ -2114,7 +2114,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}},_H=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}},nj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { vec4 value = getAAtOutCoords(); @@ -2125,7 +2125,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function FH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;V().getBool("WEBGL_PACK_CLIP")?o=new _H(r.shape):o=new $H(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var PH={kernelName:es,backendName:"webgl",kernelFunc:FH},OH=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function rj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;W().getBool("WEBGL_PACK_CLIP")?o=new nj(r.shape):o=new aj(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var sj={kernelName:es,backendName:"webgl",kernelFunc:rj},ij=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); @@ -2138,7 +2138,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function $y(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function DH(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.texData.get(n.dataId),s=new OH(n.shape),i=[$y(n,r.complexTensorInfos.real),$y(n,r.complexTensorInfos.imag)];return a.runWebGLProgram(s,i,i[0].dtype)}var zH={kernelName:Hc,backendName:"webgl",kernelFunc:DH},LH=class{constructor(e){this.outputShape=[],this.outputShape=T.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s`T${m}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let f=1;f`T${m}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let f=1;f= ${o[f-1]}) { return getChannel( - getT${f}(${uc(i,l,m)}), - vec2(${uc(u,l,m)})); - }`}let p=o.length,h=o[o.length-1];c+=` + getT${f}(${lc(i,l,m)}), + vec2(${lc(u,l,m)})); + }`}let d=o.length,h=o[o.length-1];c+=` return getChannel( - getT${p}(${uc(i,l,h)}), - vec2(${uc(u,l,h)}));`,this.userCode=` + getT${d}(${lc(i,l,h)}), + vec2(${lc(u,l,h)}));`,this.userCode=` float getValue(${i.map(f=>"int "+f)}) { ${c} } @@ -2184,18 +2184,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(result); } - `}};function uc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function Wh(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Za({inputs:{x:r.complexTensorInfos.imag},backend:a})}var WH={kernelName:Cd,backendName:"webgl",kernelFunc:Wh};function Vu(e,t,a){let n=e[0].dtype;if(n==="complex64"){let c=e.map(g=>hp({inputs:{input:g},backend:a})),p=e.map(g=>Wh({inputs:{input:g},backend:a})),h=Vu(c,t,a),f=Vu(p,t,a),m=ks({inputs:{real:h,imag:f},backend:a});return c.forEach(g=>a.disposeIntermediateTensorInfo(g)),p.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),m}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let c=e.map(A=>{let x=[-1,v.sizeFromShape(A.shape.slice(t))];return de({inputs:{x:A},backend:a,attrs:{shape:x}})}),p=c.map(A=>({vals:a.readSync(A.dataId),shape:A.shape})),h=T.computeOutShape(c.map(A=>A.shape),1),f=c[0].shape[0]===1,m=FG(p,h,n,f),g=T.computeOutShape(e.map(A=>A.shape),t),y=a.makeTensorInfo(g,n,m);return c.forEach(A=>a.disposeIntermediateTensorInfo(A)),y}let s=V().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(e.length>s){let c=[];for(let h=0;h1){let c=new BH(e.map(p=>p.shape),t);return a.runWebGLProgram(c,e,n)}let{tensors2D:i,outShape:o}=VH(e,t,a),l=new LH(i.map(c=>c.shape)),u=a.runWebGLProgram(l,i,n);i.forEach(c=>a.disposeIntermediateTensorInfo(c));let d=de({inputs:{x:u},attrs:{shape:o},backend:a});return a.disposeIntermediateTensorInfo(u),d}function VH(e,t,a){let n=T.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>de({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function d8(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?Za({inputs:{x:l[0]},backend:a}):Vu(l,s,a)}var GH={kernelName:vl,backendName:"webgl",kernelFunc:d8},p8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,d=e.dilationWidth,c=e.filterHeight,p=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",g=m?1:2,y=m?2:3,A=m?3:1,x="",b="";a&&(n?x=`float activation(float a) { + `}};function lc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function Oh(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Ka({inputs:{x:r.complexTensorInfos.imag},backend:a})}var pj={kernelName:Rd,backendName:"webgl",kernelFunc:Oh};function Zu(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(A=>hp({inputs:{input:A},backend:a})),f=e.map(A=>Oh({inputs:{input:A},backend:a})),m=Zu(h,t,a),g=Zu(f,t,a),x=is({inputs:{real:m,imag:g},backend:a});return h.forEach(A=>a.disposeIntermediateTensorInfo(A)),f.forEach(A=>a.disposeIntermediateTensorInfo(A)),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(g),x}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let h=e.map(b=>{let w=[-1,v.sizeFromShape(b.shape.slice(t))];return ce({inputs:{x:b},backend:a,attrs:{shape:w}})}),f=h.map(b=>({vals:a.readSync(b.dataId),shape:b.shape})),m=T.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,x=rU(f,m,n,g),A=T.computeOutShape(e.map(b=>b.shape),t),y=a.makeTensorInfo(A,n,x);return h.forEach(b=>a.disposeIntermediateTensorInfo(b)),y}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new jn(e[0].shape,Fr):new Br(e[0].shape,Fr);return a.runWebGLProgram(h,e,n)}let o=W().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let m=0;mf.shape),t);return a.runWebGLProgram(h,s,n)}let{tensors2D:l,outShape:u}=cj(s,t,a),p=new uj(l.map(h=>h.shape)),c=a.runWebGLProgram(p,l,n);l.forEach(h=>a.disposeIntermediateTensorInfo(h));let d=ce({inputs:{x:c},attrs:{shape:u},backend:a});return a.disposeIntermediateTensorInfo(c),d}function cj(e,t,a){let n=T.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>ce({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function J6(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?Ka({inputs:{x:l[0]},backend:a}):Zu(l,s,a)}var hj={kernelName:Rl,backendName:"webgl",kernelFunc:J6},Q6=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,p=e.dilationWidth,c=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",g=m?1:2,x=m?2:3,A=m?3:1,y="",b="";a&&(n?y=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${a} - }`:r?x=`float activation(float a) { + }`:r?y=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${a} - }`:x=` + }`:y=` float activation(float x) { ${a} } `,b="result = activation(result);");let w=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` - ${x} + ${y} const ivec2 strides = ivec2(${o}, ${l}); const ivec2 pads = ivec2(${s}, ${i}); @@ -2206,7 +2206,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam int d2 = coords[${A}]; ivec2 xRCCorner = - ivec2(coords[${g}], coords[${y}]) * strides - pads; + ivec2(coords[${g}], coords[${x}]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; @@ -2220,8 +2220,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam continue; } - for (int wC = 0; wC < ${p}; wC++) { - int xC = xCCorner + wC * ${d}; + for (int wC = 0; wC < ${d}; wC++) { + int xC = xCCorner + wC * ${p}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -2318,7 +2318,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${b} setOutput(result); } - `}},UH=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,a=e.padInfo.top,n=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.filterDepth,c=e.filterHeight,p=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=` + `}},fj=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,a=e.padInfo.top,n=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.filterDepth,c=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${r}, ${s}, ${i}); const ivec3 pads = ivec3(${t}, ${a}, ${n}); @@ -2336,7 +2336,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; - for (int wF = 0; wF < ${d}; wF++) { + for (int wF = 0; wF < ${p}; wF++) { int xF = xFCorner + wF * ${o}; if (xF < 0 || xF >= ${e.inDepth}) { @@ -2350,7 +2350,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam continue; } - for (int wC = 0; wC < ${p}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${u}; if (xC < 0 || xC >= ${e.inWidth}) { @@ -2406,7 +2406,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},c8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,d=u,c=` + `}},ev=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,p=u,c=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let m=0;m=0 && xR < inDims[0]) { - `;for(let m=0;m<(d+1)/2;m++){let g=m*2;if(c+=` + `;for(let m=0;m<(p+1)/2;m++){let g=m*2;if(c+=` xC = xCCorner + ${g*o}; `,i===1){if(g= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) { xTexelC${g+1} = getX(batch, xR, xCOffset, d1); @@ -2489,10 +2489,10 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } `:c+=` xC${g+1} = vec4(xTexelC${g}.zw, xTexelC${g+1}.xy); - `):y===1?c+=` + `):x===1?c+=` xC${g+1} = xTexelC${g}; `:c+=` - xCOffset = xC + ${y}; + xCOffset = xC + ${x}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) { xTexelC${g+1} = getX(batch, xR, xCOffset, d1); @@ -2573,16 +2573,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } `,c+=` } - `;let p="",h="";a&&(n?p=`vec4 activation(vec4 a) { + `;let d="",h="";a&&(n?d=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${a} - }`:r?p=`vec4 activation(vec4 a) { + }`:r?d=`vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${a} - }`:p=`vec4 activation(vec4 x) { + }`:d=`vec4 activation(vec4 x) { ${a} }`,h="result = activation(result);");let f=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` - ${p} + ${d} void main() { ivec4 coords = getOutputCoords(); @@ -2602,8 +2602,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${h} setOutput(result); } - `}},jH=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let{dataFormat:a}=t,n=Ca(),r=a==="channelsLast",s=r?1:2,i=r?2:3,o=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${e[2]} && pos < ${e[1]}) {`,l="";for(let u=0;u<=1;u++)for(let d=0;d<=1;d++)l+=` - blockIndex = rc.z + ${d}; + `}},mj=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=Na(this.outputShape.length);let{dataFormat:a}=t,n=Ca(),r=a==="channelsLast",s=r?1:2,i=r?2:3,o=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${e[2]} && pos < ${e[1]}) {`,l="";for(let u=0;u<=1;u++)for(let p=0;p<=1;p++)l+=` + blockIndex = rc.z + ${p}; pos = rc.y + ${u}; ${o} @@ -2624,12 +2624,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam if (${r}) { innerDims = vec2(d1, ch); - result[${u*2+d}] = getChannel( + result[${u*2+p}] = getChannel( getA(rc.x, d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); - result[${u*2+d}] = getChannel( + result[${u*2+p}] = getChannel( getA(rc.x, ch, int(innerDims.x), int(innerDims.y)), innerDims); } @@ -2649,7 +2649,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${n.output} = result; } - `}};function Oc(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function h8({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=n.texData.get(e.dataId),d=a.inChannels,c=l[0]*l[1]*l[2],p=a.outChannels,h=a.dataFormat==="channelsLast",f=!1,m=!1,g,y=[];if(s!=null){let A=Oc(s.shape,h);A!=null&&(s=de({inputs:{x:s},backend:n,attrs:{shape:A}}),y.push(s))}if(r!=null){let A=Oc(r.shape,h);A!=null&&(r=de({inputs:{x:r},backend:n,attrs:{shape:A}}),y.push(r))}if(!((c===1||p===1)&&d>s8)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let A=l[0]*l[1]*(l[2]+1),x={dataId:e.dataId,shape:[1,A,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(ld(u.shape,x.shape),()=>`packed reshape ${u.shape} to ${x.shape} isn't free`);let w=de({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});y.push(w);let S=Pc({a:x,b:w,backend:n,transposeA:f,transposeB:m,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),C=n.texData.get(S.dataId);v.assert(C.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,C.shape=a.outShape,g=Za({inputs:{x:S},backend:n}),g.shape=a.outShape,y.push(S)}else{let A=a.outHeight*a.outWidth,x=de({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,A,a.inChannels]:[a.batchSize,a.inChannels,A]}}),b=de({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=Pc({a:h?x:b,b:h?b:x,transposeA:!h,transposeB:m,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=de({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),y.push(x),y.push(b),y.push(w)}for(let A of y)n.disposeIntermediateTensorInfo(A);return g}function f8({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:d,outWidth:c,outHeight:p,dataFormat:h}=a,f=h==="channelsLast",m=l*u*d,g=p*c,y=[a.batchSize,m,g],A=!0,x=!1,b=[];if(s!=null){let j=Oc(s.shape,f);j!=null&&(s=de({inputs:{x:s},backend:n,attrs:{shape:j}}),b.push(s))}if(r!=null){let j=Oc(r.shape,f);j!=null&&(r=de({inputs:{x:r},backend:n,attrs:{shape:j}}),b.push(r))}let w=de({inputs:{x:t},backend:n,attrs:{shape:[1,m,v.sizeFromShape(t.shape)/m]}});b.push(w);let S=new jH(y,a),C=[e.shape,[a.padInfo.top,a.padInfo.left],[a.strideHeight,a.strideWidth],[a.dilationHeight,a.dilationWidth],[a.inChannels],[a.filterWidth*a.inChannels],[a.outWidth]],N=n.runWebGLProgram(S,[e],"float32",C),_=de({inputs:{x:N},backend:n,attrs:{shape:y}});b.push(N),b.push(_);let $=r!=null,M=s!=null,I=o==="leakyrelu",E=o?ud(o,!0):null,O=new r8(f?_.shape:w.shape,f?w.shape:_.shape,f?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],A,x,$,E,M,I),L=f?[_,w]:[w,_];if(r&&L.push(r),M&&L.push(s),I){let j=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));L.push(j),b.push(j)}let B=n.runWebGLProgram(O,L,"float32"),G=de({inputs:{x:B},backend:n,attrs:{shape:a.outShape}});b.push(B);for(let j of b)n.disposeIntermediateTensorInfo(j);return G}function HH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n,c=T.convertConv2DDataFormat(l),p=T.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c),h;if(p.filterHeight===1&&p.filterWidth===1&&p.dilationHeight===1&&p.dilationWidth===1&&p.strideHeight===1&&p.strideWidth===1&&(p.padInfo.type==="SAME"||p.padInfo.type==="VALID"))h=h8({x:r,filter:s,convInfo:p,backend:a});else if(p.strideWidth<=2&&c==="channelsLast"&&V().getBool("WEBGL_EXP_CONV")){let m=new c8(p),g=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];h=a.runWebGLProgram(m,[r,s],"float32",g)}else if(V().getBool("WEBGL_CONV_IM2COL"))h=f8({x:r,filter:s,convInfo:p,backend:a});else{let m=new p8(p);h=a.runWebGLProgram(m,[r,s],"float32")}let f=de({inputs:{x:h},backend:a,attrs:{shape:p.outShape}});return a.disposeIntermediateTensorInfo(h),f}var qH={kernelName:Ai,backendName:"webgl",kernelFunc:HH},XH=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=` + `}};function Fc(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function tv({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=n.texData.get(e.dataId),p=a.inChannels,c=l[0]*l[1]*l[2],d=a.outChannels,h=a.dataFormat==="channelsLast",f=!1,m=!1,g,x=[];if(s!=null){let A=Fc(s.shape,h);A!=null&&(s=ce({inputs:{x:s},backend:n,attrs:{shape:A}}),x.push(s))}if(r!=null){let A=Fc(r.shape,h);A!=null&&(r=ce({inputs:{x:r},backend:n,attrs:{shape:A}}),x.push(r))}if(!((c===1||d===1)&&p>q6)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let A=l[0]*l[1]*(l[2]+1),y={dataId:e.dataId,shape:[1,A,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(md(u.shape,y.shape),()=>`packed reshape ${u.shape} to ${y.shape} isn't free`);let w=ce({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});x.push(w);let S=Pc({a:y,b:w,backend:n,transposeA:f,transposeB:m,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),C=n.texData.get(S.dataId);v.assert(C.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,C.shape=a.outShape,g=Ka({inputs:{x:S},backend:n}),g.shape=a.outShape,x.push(S)}else{let A=a.outHeight*a.outWidth,y=ce({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,A,a.inChannels]:[a.batchSize,a.inChannels,A]}}),b=ce({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=Pc({a:h?y:b,b:h?b:y,transposeA:!h,transposeB:m,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=ce({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),x.push(y),x.push(b),x.push(w)}for(let A of x)n.disposeIntermediateTensorInfo(A);return g}function av({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,outWidth:c,outHeight:d,dataFormat:h}=a,f=h==="channelsLast",m=l*u*p,g=d*c,x=[a.batchSize,m,g],A=!0,y=!1,b=[];if(s!=null){let j=Fc(s.shape,f);j!=null&&(s=ce({inputs:{x:s},backend:n,attrs:{shape:j}}),b.push(s))}if(r!=null){let j=Fc(r.shape,f);j!=null&&(r=ce({inputs:{x:r},backend:n,attrs:{shape:j}}),b.push(r))}let w=ce({inputs:{x:t},backend:n,attrs:{shape:[1,m,v.sizeFromShape(t.shape)/m]}});b.push(w);let S=new mj(x,a),C=[e.shape,[a.padInfo.top,a.padInfo.left],[a.strideHeight,a.strideWidth],[a.dilationHeight,a.dilationWidth],[a.inChannels],[a.filterWidth*a.inChannels],[a.outWidth]],E=n.runWebGLProgram(S,[e],"float32",C),_=ce({inputs:{x:E},backend:n,attrs:{shape:x}});b.push(E),b.push(_);let $=r!=null,M=s!=null,I=o==="leakyrelu",N=o?gd(o,!0):null,O=new j6(f?_.shape:w.shape,f?w.shape:_.shape,f?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],A,y,$,N,M,I),L=f?[_,w]:[w,_];if(r&&L.push(r),M&&L.push(s),I){let j=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));L.push(j),b.push(j)}let B=n.runWebGLProgram(O,L,"float32"),G=ce({inputs:{x:B},backend:n,attrs:{shape:a.outShape}});b.push(B);for(let j of b)n.disposeIntermediateTensorInfo(j);return G}function gj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n,c=T.convertConv2DDataFormat(l),d=T.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))h=tv({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&W().getBool("WEBGL_EXP_CONV")){let m=new ev(d),g=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=a.runWebGLProgram(m,[r,s],"float32",g)}else if(W().getBool("WEBGL_CONV_IM2COL"))h=av({x:r,filter:s,convInfo:d,backend:a});else{let m=new Q6(d);h=a.runWebGLProgram(m,[r,s],"float32")}let f=ce({inputs:{x:h},backend:a,attrs:{shape:d.outShape}});return a.disposeIntermediateTensorInfo(h),f}var xj={kernelName:ti,backendName:"webgl",kernelFunc:gj},Aj=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -2691,13 +2691,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},KH=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=a-1-e.padInfo.left,l=s?1:2,u=s?2:3,d=s?3:1;this.userCode=` + `}},yj=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=a-1-e.padInfo.left,l=s?1:2,u=s?2:3,p=s?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${o}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d1 = coords[${d}]; + int d1 = coords[${p}]; ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads; int dyRCorner = dyCorner.x; @@ -2744,7 +2744,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},ZH=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=` + `}},bj=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; @@ -2786,7 +2786,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},YH=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=a-1-e.padInfo.top,u=n-1-e.padInfo.left;this.userCode=` + `}},vj=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=a-1-e.padInfo.top,u=n-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${o}, ${l}, ${u}); void main() { @@ -2843,12 +2843,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}};function JH(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:d}=n,c=T.convertConv2DDataFormat(l),p=T.computeConv2DInfo(r.shape,d,i,1,o,u,!1,c),h=new XH(p);return a.runWebGLProgram(h,[r,s],"float32")}var QH={kernelName:qc,backendName:"webgl",kernelFunc:JH};function eq(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}=n,c=T.convertConv2DDataFormat(u),p=T.computeConv2DInfo(i,s.shape,o,1,l,d,!1,c),h=new KH(p);return a.runWebGLProgram(h,[r,s],"float32")}var tq={kernelName:xi,backendName:"webgl",kernelFunc:eq};function aq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=T.computeConv3DInfo(r.shape,s.shape,i,l,o),d=new UH(u);return a.runWebGLProgram(d,[r,s],"float32")}var nq={kernelName:Xc,backendName:"webgl",kernelFunc:aq};function rq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=T.computeConv3DInfo(r.shape,l,i,1,o),d=new ZH(u);return a.runWebGLProgram(d,[r,s],"float32")}var sq={kernelName:q1,backendName:"webgl",kernelFunc:rq};function iq(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=T.computeConv3DInfo(l,s.shape,o,1,i),d=new YH(u);return a.runWebGLProgram(d,[r,s],"float32")}var oq={kernelName:Kc,backendName:"webgl",kernelFunc:iq},lq=ru+` + `}};function wj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=n,c=T.convertConv2DDataFormat(l),d=T.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new Aj(d);return a.runWebGLProgram(h,[r,s],"float32")}var kj={kernelName:Hc,backendName:"webgl",kernelFunc:wj};function Ij(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=n,c=T.convertConv2DDataFormat(u),d=T.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c),h=new yj(d);return a.runWebGLProgram(h,[r,s],"float32")}var Sj={kernelName:ai,backendName:"webgl",kernelFunc:Ij};function Tj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=T.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new fj(u);return a.runWebGLProgram(p,[r,s],"float32")}var Cj={kernelName:jc,backendName:"webgl",kernelFunc:Tj};function Nj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=T.computeConv3DInfo(r.shape,l,i,1,o),p=new bj(u);return a.runWebGLProgram(p,[r,s],"float32")}var Ej={kernelName:V1,backendName:"webgl",kernelFunc:Nj};function Rj(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=T.computeConv3DInfo(l,s.shape,o,1,i),p=new vj(u);return a.runWebGLProgram(p,[r,s],"float32")}var Mj={kernelName:qc,backendName:"webgl",kernelFunc:Rj},$j=fu+` return cos(x); -`,uq=Qe({opSnippet:lq}),dq={kernelName:bi,backendName:"webgl",kernelFunc:uq},pq=` +`,_j=Qe({opSnippet:$j}),Pj={kernelName:ni,backendName:"webgl",kernelFunc:_j},Fj=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,cq=Qe({opSnippet:pq}),hq={kernelName:vi,backendName:"webgl",kernelFunc:cq},fq=class{constructor(e,t,a,n,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[d,c]=a;this.outputShape=[u,d,c,l];let p=n==="bilinear"?1:0,[h,f]=[`${i-1}.0`,`${o-1}.0`],[m,g,y]=d>1?[`${(i-1)/(d-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[A,x,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=` +`,Oj=Qe({opSnippet:Fj}),Dj={kernelName:ri,backendName:"webgl",kernelFunc:Oj},zj=class{constructor(e,t,a,n,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[p,c]=a;this.outputShape=[u,p,c,l];let d=n==="bilinear"?1:0,[h,f]=[`${i-1}.0`,`${o-1}.0`],[m,g,x]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[A,y,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=` const float height_ratio = float(${m}); const float width_ratio = float(${A}); void main() { @@ -2871,9 +2871,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } float height_scale = ${g}; - float width_scale = ${x}; + float width_scale = ${y}; - float in_y = ${y}; + float in_y = ${x}; if( in_y < 0.0 || in_y > ${h} ) { setOutput(float(${r})); return; @@ -2885,7 +2885,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } vec2 sourceFracIndexCR = vec2(in_x,in_y); - if(${p} == 1) { + if(${d} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); @@ -2909,20 +2909,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam setOutput(newValue); } } - `}},mq=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,d=new fq(r.shape,s.shape,o,l,u);return a.runWebGLProgram(d,[r,s,i],"float32")},gq={kernelName:Ii,backendName:"webgl",kernelFunc:mq},pd;(function(e){e.Prod="*",e.Sum="+"})(pd||(pd={}));var _y=class{constructor(e,t,a,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let r=this.outputShape.length,s=this.op===pd.Prod?"1.0":"0.0",i=a?s:`getX(${Fy(r,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";a?(l=n?`end != ${o-1}`:"end != 0",u=n?"end + 1":"end - 1"):(l=n?`end + pow2 < ${o}`:"end >= pow2",u=n?"end + pow2":"end - pow2"),this.userCode=` + `}},Lj=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,p=new zj(r.shape,s.shape,o,l,u);return a.runWebGLProgram(p,[r,s,i],"float32")},Bj={kernelName:oi,backendName:"webgl",kernelFunc:Lj},Ad;(function(e){e.Prod="*",e.Sum="+"})(Ad||(Ad={}));var kx=class{constructor(e,t,a,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let r=this.outputShape.length,s=this.op===Ad.Prod?"1.0":"0.0",i=a?s:`getX(${Ix(r,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";a?(l=n?`end != ${o-1}`:"end != 0",u=n?"end + 1":"end - 1"):(l=n?`end + pow2 < ${o}`:"end >= pow2",u=n?"end + pow2":"end - pow2"),this.userCode=` void main() { - ${mt(r)} coords = getOutputCoords(); - int end = ${Py(r,"coords",this.op)}; + ${gt(r)} coords = getOutputCoords(); + int end = ${Sx(r,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${l}) { int idx = ${u}; - ${Py(r,"coords",this.op)} = idx; - val ${this.op}= getX(${Fy(r,"coords",this.op)}); + ${Sx(r,"coords",this.op)} = idx; + val ${this.op}= getX(${Ix(r,"coords",this.op)}); } setOutput(val); } - `}};function Fy(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function Py(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function m8(e,t,a,n,r,s){let i=t.shape.length,o=T.getAxesPermutation([n],i),l=t;o!=null&&(l=Ia({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=T.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let d=l.shape[u],c=Za({inputs:{x:l},backend:a});for(let p=0;p<=Math.ceil(Math.log2(d))-1;p++){let h=new _y(e,l.shape,!1,s),f=[[p]],m=c;c=a.runWebGLProgram(h,[c],c.dtype,f),a.disposeIntermediateTensorInfo(m)}if(r){let p=new _y(e,l.shape,r,s),h=c;c=a.runWebGLProgram(p,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let p=T.getUndoAxesPermutation(o),h=Ia({inputs:{x:c},backend:a,attrs:{perm:p}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function yq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return m8(pd.Prod,r,a,s,i,o)}var Aq={kernelName:wi,backendName:"webgl",kernelFunc:yq};function xq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return m8(pd.Sum,r,a,s,i,o)}var bq={kernelName:ki,backendName:"webgl",kernelFunc:xq};function vq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n;if(r.shape.length===1){let l=a.readSync(r.dataId),u=a.readSync(s.dataId),d=X6(l,u,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,d)}else if(r.shape.length===2){let l=a.bufferSync(r),u=a.bufferSync(s),d=MG(l,u,i,o);return a.makeTensorInfo(d.shape,s.dtype,d.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var wq={kernelName:Zc,backendName:"webgl",kernelFunc:vq},kq=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` + `}};function Ix(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function Sx(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function nv(e,t,a,n,r,s){let i=t.shape.length,o=T.getAxesPermutation([n],i),l=t;o!=null&&(l=Ia({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=T.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let p=l.shape[u],c=Ka({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new kx(e,l.shape,!1,s),f=[[d]],m=c;c=a.runWebGLProgram(h,[c],c.dtype,f),a.disposeIntermediateTensorInfo(m)}if(r){let d=new kx(e,l.shape,r,s),h=c;c=a.runWebGLProgram(d,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let d=T.getUndoAxesPermutation(o),h=Ia({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function Wj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return nv(Ad.Prod,r,a,s,i,o)}var Vj={kernelName:si,backendName:"webgl",kernelFunc:Wj};function Uj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return nv(Ad.Sum,r,a,s,i,o)}var Gj={kernelName:ii,backendName:"webgl",kernelFunc:Uj};function Hj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n;if(r.shape.length===1){let l=a.readSync(r.dataId),u=a.readSync(s.dataId),p=O6(l,u,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=a.bufferSync(r),u=a.bufferSync(s),p=tU(l,u,i,o);return a.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var jj={kernelName:Td,backendName:"webgl",kernelFunc:Hj},qj=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -2941,7 +2941,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float result = ${this.getInputSamplingString()}; setOutput(result); } - `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Iq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),f=i==="NHWC"?[o,c,p,h]:[o,h,c,p],m=new kq(f,s,i);return a.runWebGLProgram(m,[r],r.dtype)}var Sq={kernelName:Si,backendName:"webgl",kernelFunc:Iq},g8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";a&&(n?l=`float activation(float a) { + `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Xj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),f=i==="NHWC"?[o,c,d,h]:[o,h,c,d],m=new qj(f,s,i);return a.runWebGLProgram(m,[r],r.dtype)}var Kj={kernelName:li,backendName:"webgl",kernelFunc:Xj},rv=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";a&&(n?l=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${a} }`:r?l=`float activation(float a) { @@ -2951,7 +2951,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float activation(float x) { ${a} } - `,u="result = activation(result);");let d=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` + `,u="result = activation(result);");let p=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${l} void main() { @@ -2990,44 +2990,44 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } float result = dotProd; - ${d} + ${p} ${u} setOutput(result); } - `}},y8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,d=e.filterWidth,c=d,p=` + `}},sv=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=Na(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,p=e.filterWidth,c=p,d=` int xR; int xC; int xCOffset; - vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) { - `;for(let g=0;g<(c+1)/2;g++){let y=g*2;if(p+=` - xC = xCCorner + ${y*l}; - `,o===1){if(y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - `,l===1&&y>0?p+=` - xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy); - `:p+=` + `,l===1&&x>0?d+=` + xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy); + `:d+=` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { @@ -3039,118 +3039,118 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam previous.zw = vec2(0.0); } - xC${y} = vec4(previous.zw, xTexelC${y}.xy); + xC${x} = vec4(previous.zw, xTexelC${x}.xy); } else { - xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy); + xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy); } - `):p+=` - if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + `):d+=` + if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - xC${y} = xTexelC${y}; - `,y+1= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - `,l>1?p+=` + `,l>1?d+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); - xC${y+1} = vec4(previous.zw, xTexelC${y+1}.xy); + xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy); } else { - xC${y+1} = vec4(0.0, 0.0, xTexelC${y+1}.xy); + xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy); } - `:p+=` - xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy); - `):A===1?p+=` - xC${y+1} = xTexelC${y}; - `:p+=` + `:d+=` + xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy); + `):A===1?d+=` + xC${x+1} = xTexelC${x}; + `:d+=` xCOffset = xC + ${A}; - if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y+1} = xTexelC${y+1}; - `}}else y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xC + 1, d1); + if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xC + 1, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xC + 2 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw); - `,y+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } - xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy); - `)):(p+=` - if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy); + `)):(d+=` + if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } xCOffset = xC + strides[1]; - if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.); + xTexelC${x+1}.zw = vec2(0.); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y} = vec4( - xTexelC${y}.xy, xTexelC${y+1}.xy); - `,y+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let c=T.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),p;V().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?p=new y8(c):p=new g8(c);let h=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return a.runWebGLProgram(p,[r,s],"float32",h)}var Cq={kernelName:Ti,backendName:"webgl",kernelFunc:Tq},Nq=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=` + `}};function Zj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=n,p=l;p==null&&(p=[1,1]),v.assert(T.eitherStridesOrDilationsAreOne(i,p),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let c=T.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),d;W().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?d=new sv(c):d=new rv(c);let h=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return a.runWebGLProgram(d,[r,s],"float32",h)}var Yj={kernelName:ui,backendName:"webgl",kernelFunc:Zj},Jj=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -3218,7 +3218,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},Eq=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=a-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=` + `}},Qj=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=a-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${s}, ${i}); void main() { @@ -3263,15 +3263,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}};function Rq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:d}=n,c=T.computeConv2DInfo(r.shape,d,i,o,l,u,!0),p=new Nq(c);return a.runWebGLProgram(p,[r,s],"float32")}var Mq={kernelName:Yc,backendName:"webgl",kernelFunc:Rq};function $q(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:d}=n,c=T.computeConv2DInfo(d,s.shape,i,o,l,u,!0),p=new Eq(c);return a.runWebGLProgram(p,[r,s],"float32")}var _q={kernelName:Jc,backendName:"webgl",kernelFunc:$q},Fq=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function eq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=n,c=T.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new Jj(c);return a.runWebGLProgram(d,[r,s],"float32")}var tq={kernelName:Xc,backendName:"webgl",kernelFunc:eq};function aq(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=n,c=T.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new Qj(c);return a.runWebGLProgram(d,[r,s],"float32")}var nq={kernelName:Kc,backendName:"webgl",kernelFunc:aq},rq=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } - `}};function Pq(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=de({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new Fq(s),l=a.runWebGLProgram(o,[i],i.dtype),u=de({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var Oq={kernelName:Qc,backendName:"webgl",kernelFunc:Pq},Dq=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:a,padInfo:n,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:d,left:c}=n;this.userCode=` + `}};function sq(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=ce({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new rq(s),l=a.runWebGLProgram(o,[i],i.dtype),u=ce({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var iq={kernelName:Zc,backendName:"webgl",kernelFunc:sq},oq=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:a,padInfo:n,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:p,left:c}=n;this.userCode=` const ivec2 strides = ivec2(${r}, ${s}); - const ivec2 pads = ivec2(${d}, ${c}); + const ivec2 pads = ivec2(${p}, ${c}); const float neg_infinity = -3.4e38; void main() { @@ -3307,7 +3307,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float result = curVal; setOutput(result); } - `}};function zq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=T.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),d,c=new Dq(u);d=a.runWebGLProgram(c,[r,s],"float32");let p=de({inputs:{x:d},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(d),p}var Lq={kernelName:eh,backendName:"webgl",kernelFunc:zq};function Bq(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=T.decodeEinsumEquation(r,s.length);T.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=T.getEinsumComputePath(o,l),c=d.length,p=null,h=i.length,f=[];for(let m=0;m=0&&(p=Bh({inputs:{x:p},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(p)),h--)}for(let m of f)m!==p&&a.disposeIntermediateTensorInfo(m);return p}var Wq={kernelName:Sd,backendName:"webgl",kernelFunc:Bq},Vq="return (x >= 0.0) ? x : (exp(x) - 1.0);",Gq=` + `}};function lq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=T.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,c=new oq(u);p=a.runWebGLProgram(c,[r,s],"float32");let d=ce({inputs:{x:p},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(p),d}var uq={kernelName:Yc,backendName:"webgl",kernelFunc:lq};function dq(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=T.decodeEinsumEquation(r,s.length);T.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=T.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,f=[];for(let m=0;m=0&&(d=Fh({inputs:{x:d},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(d)),h--)}for(let m of f)m!==d&&a.disposeIntermediateTensorInfo(m);return d}var pq={kernelName:Cd,backendName:"webgl",kernelFunc:dq},cq="return (x >= 0.0) ? x : (exp(x) - 1.0);",hq=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3316,12 +3316,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,Uq=Qe({opSnippet:Vq,packedOpSnippet:Gq}),jq={kernelName:Ni,backendName:"webgl",kernelFunc:Uq},Hq="return (b >= 1.0) ? a : a * (b + 1.0);",qq=` +`,fq=Qe({opSnippet:cq,packedOpSnippet:hq}),mq={kernelName:pi,backendName:"webgl",kernelFunc:fq},gq="return (b >= 1.0) ? a : a * (b + 1.0);",xq=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,Xq=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=V().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(qq,n.shape,r.shape):new cl(Hq,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},Kq={kernelName:X1,backendName:"webgl",kernelFunc:Xq},Zq=` +`,Aq=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cp(xq,n.shape,r.shape):new xl(gq,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},yq={kernelName:U1,backendName:"webgl",kernelFunc:Aq},bq=` return vec4(equal(a, b)); -`,Yq="return float(a == b);",Jq=la({opSnippet:Yq,packedOpSnippet:Zq,dtype:"bool",cpuKernelImpl:PG}),Qq={kernelName:ts,backendName:"webgl",kernelFunc:Jq},eX=` +`,vq="return float(a == b);",wq=oa({opSnippet:vq,packedOpSnippet:bq,dtype:"bool",cpuKernelImpl:sU}),kq={kernelName:ci,backendName:"webgl",kernelFunc:wq},Iq=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. @@ -3336,9 +3336,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); -`,tX=Qe({opSnippet:eX}),aX={kernelName:Td,backendName:"webgl",kernelFunc:tX},nX=ru+` +`,Sq=Qe({opSnippet:Iq}),Tq={kernelName:Ml,backendName:"webgl",kernelFunc:Sq},Cq=fu+` return exp(x); -`,rX=` +`,Nq=` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -3347,7 +3347,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,A8=Qe({opSnippet:nX,packedOpSnippet:rX,cpuKernelImpl:OG,dtype:"float32"}),sX={kernelName:as,backendName:"webgl",kernelFunc:A8};function C1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),de({inputs:{x:s},backend:n,attrs:{shape:o}})}var iX={kernelName:wl,backendName:"webgl",kernelFunc:C1},Oy="return exp(x) - 1.0;",oX=Qe({opSnippet:Oy,packedOpSnippet:Oy,cpuKernelImpl:DG}),lX={kernelName:Ei,backendName:"webgl",kernelFunc:oX},Dy=class{constructor(e,t,a){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let r=a?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=a?`${n}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` +`,iv=Qe({opSnippet:Cq,packedOpSnippet:Nq,cpuKernelImpl:iU,dtype:"float32"}),Eq={kernelName:hi,backendName:"webgl",kernelFunc:iv};function S1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),ce({inputs:{x:s},backend:n,attrs:{shape:o}})}var Rq={kernelName:$l,backendName:"webgl",kernelFunc:S1},Tx="return exp(x) - 1.0;",Mq=Qe({opSnippet:Tx,packedOpSnippet:Tx,cpuKernelImpl:oU}),$q={kernelName:_l,backendName:"webgl",kernelFunc:Mq},Cx=class{constructor(e,t,a){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let r=a?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=a?`${n}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` const float exponentMultiplier = ${r}; float unaryOpComplex(float real, float expR, float imag, float expI) { @@ -3380,12 +3380,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function x8(e,t,a){let n=a.texData.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=de({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new Dy("real",l,t),d=new Dy("imag",l,t),c=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:l},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:l}],p=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(d,c,"float32"),f=ks({inputs:{real:p,imag:h},backend:a});a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h);let m=de({inputs:{x:f},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(f),m}function uX(e){let{inputs:t,backend:a}=e,{input:n}=t;return x8(n,!1,a)}var dX={kernelName:th,backendName:"webgl",kernelFunc:uX},pX=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function ov(e,t,a){let n=a.texData.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=ce({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new Cx("real",l,t),p=new Cx("imag",l,t),c=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:l},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:l}],d=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(p,c,"float32"),f=is({inputs:{real:d,imag:h},backend:a});a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h);let m=ce({inputs:{x:f},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(f),m}function _q(e){let{inputs:t,backend:a}=e,{input:n}=t;return ov(n,!1,a)}var Pq={kernelName:Nd,backendName:"webgl",kernelFunc:_q},Fq=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } - `}};function fp(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new pX(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var cX={kernelName:kl,backendName:"webgl",kernelFunc:fp},hX=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function fp(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new Fq(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var Oq={kernelName:Pl,backendName:"webgl",kernelFunc:fp},Dq=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; @@ -3399,7 +3399,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(outputValue); } - `}},fX={kernelName:Ri,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new hX(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},zy="return floor(x);",mX=Qe({opSnippet:zy,packedOpSnippet:zy,cpuKernelImpl:zG}),gX={kernelName:ns,backendName:"webgl",kernelFunc:mX},yX=` + `}},zq={kernelName:fi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Dq(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},Nx="return floor(x);",Lq=Qe({opSnippet:Nx,packedOpSnippet:Nx,cpuKernelImpl:lU}),Bq={kernelName:mi,backendName:"webgl",kernelFunc:Lq},Wq=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3409,7 +3409,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } else { return NAN; } -`,AX=` +`,Vq=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -3430,7 +3430,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,xX=la({opSnippet:yX,packedOpSnippet:AX,dtype:"int32"}),bX={kernelName:Mi,backendName:"webgl",kernelFunc:xX},vX=class{constructor(e){this.variableNames=["A"];let t=Ca(),[a,n]=e;this.outputShape=e,this.userCode=` +`,Uq=oa({opSnippet:Wq,packedOpSnippet:Vq,dtype:"int32"}),Gq={kernelName:gi,backendName:"webgl",kernelFunc:Uq},Hq=class{constructor(e){this.variableNames=["A"];let t=Ca(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3452,7 +3452,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}},wX=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ca(),[a,n]=e;this.outputShape=e,this.userCode=` + `}},jq=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ca(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3486,7 +3486,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${t.output} = result; } - `}},kX={kernelName:Yu,backendName:"webgl",kernelFunc:IX},jo,zm=V().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function IX(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],d=[u,l],c=[u,l,s];if(o||i){let m=V().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(jo==null||m!==zm)&&(zm=m,jo=document.createElement("canvas").getContext("2d",{willReadFrequently:zm})),jo.canvas.width=l,jo.canvas.height=u,jo.drawImage(r,0,0,l,u),r=jo.canvas}let p=a.makeTensorInfo(d,"int32");a.texData.get(p.dataId).usage=un.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(p.dataId),r);let h=V().getBool("WEBGL_PACK")?new wX(c):new vX(c),f=a.runWebGLProgram(h,[p],"int32");return a.disposeData(p.dataId),f}function SX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=T.convertConv2DDataFormat(d),g=T.computeConv2DInfo(r.shape,s.shape,l,c,u,p,!1,m),y,A=[],x=i!=null,b=o!=null,w=h==="leakyrelu",S=()=>{let N=[r,s],_=($,M)=>{if(M==="NCHW"&&$.shape.length===1&&$.shape[0]!==1){let I=de({inputs:{x:$},backend:a,attrs:{shape:[$.shape[0],1,1]}});return A.push(I),I}return $};if(x&&N.push(_(i,d)),b&&N.push(_(o,d)),w){let $=a.makeTensorInfo([],"float32",v.createScalarValue(f,"float32"));N.push($),A.push($)}return N};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=h8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:f});else if(g.strideWidth<=2&&m==="channelsLast"&&V().getBool("WEBGL_EXP_CONV")){let N=h?ud(h,!0):null,_=new c8(g,x,N,b,w),$=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=S();y=a.runWebGLProgram(_,M,"float32",$)}else if(V().getBool("WEBGL_CONV_IM2COL"))y=f8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:f});else{let N=h?ud(h,!1):null,_=new p8(g,x,N,b,w),$=S();y=a.runWebGLProgram(_,$,"float32")}let C=de({inputs:{x:y},backend:a,attrs:{shape:g.outShape}});return A.push(y),A.forEach(N=>a.disposeIntermediateTensorInfo(N)),C}var TX={kernelName:jr,backendName:"webgl",kernelFunc:SX};function CX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dimRoundingMode:c,activation:p,leakyreluAlpha:h}=n,f=[],m=d;m==null&&(m=[1,1]),v.assert(T.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let g=T.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),y=V().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,A=p?ud(p,y):null,x=[r,s],b=i!=null,w=o!=null,S=p==="leakyrelu";if(b&&x.push(i),w&&x.push(o),S){let $=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));x.push($),f.push($)}let C;y?C=new y8(g,b,A,w,S):C=new g8(g,b,A,w,S);let N=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],_=a.runWebGLProgram(C,x,"float32",N);return f.forEach($=>a.disposeIntermediateTensorInfo($)),_}var NX={kernelName:Hr,backendName:"webgl",kernelFunc:CX},EX=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=mt(a.length),s=` + `}},qq={kernelName:rd,backendName:"webgl",kernelFunc:Xq},Ko,Om=W().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Xq(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[u,l],c=[u,l,s];if(o||i){let m=W().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ko==null||m!==Om)&&(Om=m,Ko=document.createElement("canvas").getContext("2d",{willReadFrequently:Om})),Ko.canvas.width=l,Ko.canvas.height=u,Ko.drawImage(r,0,0,l,u),r=Ko.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=dn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=W().getBool("WEBGL_PACK")?new jq(c):new Hq(c),f=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),f}function Kq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=T.convertConv2DDataFormat(p),g=T.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,m),x,A=[],y=i!=null,b=o!=null,w=h==="leakyrelu",S=()=>{let E=[r,s],_=($,M)=>{if(M==="NCHW"&&$.shape.length===1&&$.shape[0]!==1){let I=ce({inputs:{x:$},backend:a,attrs:{shape:[$.shape[0],1,1]}});return A.push(I),I}return $};if(y&&E.push(_(i,p)),b&&E.push(_(o,p)),w){let $=a.makeTensorInfo([],"float32",v.createScalarValue(f,"float32"));E.push($),A.push($)}return E};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=tv({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:f});else if(g.strideWidth<=2&&m==="channelsLast"&&W().getBool("WEBGL_EXP_CONV")){let E=h?gd(h,!0):null,_=new ev(g,y,E,b,w),$=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=S();x=a.runWebGLProgram(_,M,"float32",$)}else if(W().getBool("WEBGL_CONV_IM2COL"))x=av({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:f});else{let E=h?gd(h,!1):null,_=new Q6(g,y,E,b,w),$=S();x=a.runWebGLProgram(_,$,"float32")}let C=ce({inputs:{x},backend:a,attrs:{shape:g.outShape}});return A.push(x),A.forEach(E=>a.disposeIntermediateTensorInfo(E)),C}var Zq={kernelName:Hr,backendName:"webgl",kernelFunc:Kq};function Yq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:c,activation:d,leakyreluAlpha:h}=n,f=[],m=p;m==null&&(m=[1,1]),v.assert(T.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let g=T.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),x=W().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,A=d?gd(d,x):null,y=[r,s],b=i!=null,w=o!=null,S=d==="leakyrelu";if(b&&y.push(i),w&&y.push(o),S){let $=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));y.push($),f.push($)}let C;x?C=new sv(g,b,A,w,S):C=new rv(g,b,A,w,S);let E=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],_=a.runWebGLProgram(C,y,"float32",E);return f.forEach($=>a.disposeIntermediateTensorInfo($)),_}var Jq={kernelName:jr,backendName:"webgl",kernelFunc:Yq},Qq=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=gt(a.length),s=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function _X(e,t){let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=0,()=>`GatherV2: the index value ${w} is not in [0, ${x-1}]`)}}let u=T.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=v.sizeFromShape(s.shape),c=[],p=de({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=de({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,d/u.batchSize]}});c.push(p),c.push(h);let f=[u.batchSize,u.outerSize,d/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let A=a.bufferSync(h),x=a.bufferSync(p),b=BG(x,A,f);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let m=new $X(p.shape,f),g=a.runWebGLProgram(m,[p,h],p.dtype);c.push(g);let y=de({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(A=>a.disposeIntermediateTensorInfo(A)),y}var FX={kernelName:Il,backendName:"webgl",kernelFunc:b8},PX="return float(a > b);",OX=` + `}};function nX(e,t){let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=0,()=>`GatherV2: the index value ${w} is not in [0, ${y-1}]`)}}let u=T.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),c=[],d=ce({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=ce({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,p/u.batchSize]}});c.push(d),c.push(h);let f=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let A=a.bufferSync(h),y=a.bufferSync(d),b=dU(y,A,f);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let m=new aX(d.shape,f),g=a.runWebGLProgram(m,[d,h],d.dtype);c.push(g);let x=ce({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(A=>a.disposeIntermediateTensorInfo(A)),x}var rX={kernelName:Fl,backendName:"webgl",kernelFunc:lv},sX="return float(a > b);",iX=` return vec4(greaterThan(a, b)); -`,DX=la({opSnippet:PX,packedOpSnippet:OX,cpuKernelImpl:WG,dtype:"bool"}),zX={kernelName:rs,backendName:"webgl",kernelFunc:DX},LX="return float(a >= b);",BX=` +`,oX=oa({opSnippet:sX,packedOpSnippet:iX,cpuKernelImpl:pU,dtype:"bool"}),lX={kernelName:yi,backendName:"webgl",kernelFunc:oX},uX="return float(a >= b);",dX=` return vec4(greaterThanEqual(a, b)); -`,WX=la({opSnippet:LX,packedOpSnippet:BX,dtype:"bool",cpuKernelImpl:VG}),VX={kernelName:ss,backendName:"webgl",kernelFunc:WX};function GX(e){let{inputs:t,backend:a}=e,{input:n}=t;return x8(n,!0,a)}var UX={kernelName:ah,backendName:"webgl",kernelFunc:GX},jX="return float(!isnan(x) && !isinf(x));",HX=Qe({opSnippet:jX,dtype:"bool"}),qX={kernelName:Nd,backendName:"webgl",kernelFunc:HX},XX="return float(isinf(x));",KX=Qe({opSnippet:XX,dtype:"bool"}),ZX={kernelName:Ed,backendName:"webgl",kernelFunc:KX},YX="return float(isnan(x));",JX=Qe({opSnippet:YX,dtype:"bool"}),QX={kernelName:Sl,backendName:"webgl",kernelFunc:JX},eK="return float(a < b);",tK=` +`,pX=oa({opSnippet:uX,packedOpSnippet:dX,dtype:"bool",cpuKernelImpl:cU}),cX={kernelName:bi,backendName:"webgl",kernelFunc:pX};function hX(e){let{inputs:t,backend:a}=e,{input:n}=t;return ov(n,!0,a)}var fX={kernelName:Ed,backendName:"webgl",kernelFunc:hX},mX="return float(!isnan(x) && !isinf(x));",gX=Qe({opSnippet:mX,dtype:"bool"}),xX={kernelName:Ol,backendName:"webgl",kernelFunc:gX},AX="return float(isinf(x));",yX=Qe({opSnippet:AX,dtype:"bool"}),bX={kernelName:Dl,backendName:"webgl",kernelFunc:yX},vX="return float(isnan(x));",wX=Qe({opSnippet:vX,dtype:"bool"}),kX={kernelName:wi,backendName:"webgl",kernelFunc:wX},IX="return float(a < b);",SX=` return vec4(lessThan(a, b)); -`,aK=la({opSnippet:eK,packedOpSnippet:tK,cpuKernelImpl:GG,dtype:"bool"}),nK={kernelName:is,backendName:"webgl",kernelFunc:aK},rK="return float(a <= b);",sK=` +`,TX=oa({opSnippet:IX,packedOpSnippet:SX,cpuKernelImpl:hU,dtype:"bool"}),CX={kernelName:Ii,backendName:"webgl",kernelFunc:TX},NX="return float(a <= b);",EX=` return vec4(lessThanEqual(a, b)); -`,iK=la({opSnippet:rK,packedOpSnippet:sK,cpuKernelImpl:UG,dtype:"bool"}),oK={kernelName:os,backendName:"webgl",kernelFunc:iK};function lK(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=jG(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var uK={kernelName:nh,backendName:"webgl",kernelFunc:lK},dK=ru+` +`,RX=oa({opSnippet:NX,packedOpSnippet:EX,cpuKernelImpl:fU,dtype:"bool"}),MX={kernelName:Si,backendName:"webgl",kernelFunc:RX};function $X(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=mU(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var _X={kernelName:Jc,backendName:"webgl",kernelFunc:$X},PX=fu+` return x < 0.0 ? 0./0. : log(x); -`,pK=` +`,FX=` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -3526,18 +3526,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; -`,cK=Qe({opSnippet:dK,packedOpSnippet:pK,cpuKernelImpl:HG}),hK={kernelName:ls,backendName:"webgl",kernelFunc:cK},fK=ru+` +`,OX=Qe({opSnippet:PX,packedOpSnippet:FX,cpuKernelImpl:gU}),DX={kernelName:Ti,backendName:"webgl",kernelFunc:OX},zX=fu+` return log(1.0 + x); -`,mK=Qe({opSnippet:fK}),gK={kernelName:Rd,backendName:"webgl",kernelFunc:mK},yK="return float(a >= 1.0 && b >= 1.0);",AK=` +`,LX=Qe({opSnippet:zX}),BX={kernelName:zl,backendName:"webgl",kernelFunc:LX},WX="return float(a >= 1.0 && b >= 1.0);",VX=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,xK=la({opSnippet:yK,packedOpSnippet:AK,dtype:"bool"}),bK={kernelName:Oi,backendName:"webgl",kernelFunc:xK},vK="return float(!(x >= 1.0));",wK=Qe({opSnippet:vK}),kK={kernelName:Di,backendName:"webgl",kernelFunc:wK},IK="return float(a >= 1.0 || b >= 1.0);",SK=` +`,UX=oa({opSnippet:WX,packedOpSnippet:VX,dtype:"bool"}),GX={kernelName:Ci,backendName:"webgl",kernelFunc:UX},HX="return float(!(x >= 1.0));",jX=Qe({opSnippet:HX}),qX={kernelName:Ni,backendName:"webgl",kernelFunc:jX},XX="return float(a >= 1.0 || b >= 1.0);",KX=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,TK=la({opSnippet:IK,packedOpSnippet:SK,dtype:"bool"}),CK={kernelName:Tl,backendName:"webgl",kernelFunc:TK},NK=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` +`,ZX=oa({opSnippet:XX,packedOpSnippet:KX,dtype:"bool"}),YX={kernelName:Ll,backendName:"webgl",kernelFunc:ZX},JX=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3556,7 +3556,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam float val = x * ${o}; setOutput(val); } - `}},EK=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` + `}},QX=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; @@ -3618,7 +3618,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam vec4 result = xAtOutputCoords * ${o}; setOutput(result); } - `}},RK=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=V().getBool("WEBGL_PACK_NORMALIZATION")?new EK(r.shape,s,i,o,l):new NK(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},MK={kernelName:rh,backendName:"webgl",kernelFunc:RK},$K=class{constructor(e,t,a,n,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=a,this.alpha=n,this.beta=r,this.userCode=` + `}},eK=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=W().getBool("WEBGL_PACK_NORMALIZATION")?new QX(r.shape,s,i,o,l):new JX(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},tK={kernelName:Qc,backendName:"webgl",kernelFunc:eK},aK=class{constructor(e,t,a,n,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=a,this.alpha=n,this.beta=r,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3673,16 +3673,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(result); } - `}},_K=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=n,c=new $K(r.shape,o,l,u,d);return a.runWebGLProgram(c,[r,s,i],r.dtype)},FK={kernelName:K1,backendName:"webgl",kernelFunc:_K};function PK(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=de({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=fo(i,e.dtype,"max",n),l=de({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function v8(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=T.getAxesPermutation(u,o),c=d!=null,p=a.shouldExecuteOnCPU([r]),h=r;if(c){if(p){let A=a.texData.get(h.dataId).values,x=new Array(o);for(let S=0;S{let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n,c=new aK(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},rK={kernelName:G1,backendName:"webgl",kernelFunc:nK};function sK(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=ce({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=Ao(i,e.dtype,"max",n),l=ce({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function uv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=T.getAxesPermutation(u,o),c=p!=null,d=a.shouldExecuteOnCPU([r]),h=r;if(c){if(d){let A=a.texData.get(h.dataId).values,y=new Array(o);for(let S=0;S`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=T.computePool2DInfo(r.shape,s,i,u,o,l);if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))return Za({inputs:{x:r},backend:a});let c=new dd(d,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var VK={kernelName:Li,backendName:"webgl",kernelFunc:WK};function GK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,d=[1,1,1],c=T.computePool3DInfo(r.shape,s,i,d,o,u,l),p=new P3(c,"max",!1);return a.runWebGLProgram(p,[r],r.dtype)}var UK={kernelName:sh,backendName:"webgl",kernelFunc:GK},jK=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,a=e.strideWidth,n=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=` +`,uK=oa({opSnippet:oK,packedOpSnippet:lK,cpuKernelImpl:AU}),dK={kernelName:Ri,backendName:"webgl",kernelFunc:uK};function pK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;lu(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(T.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=T.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return Ka({inputs:{x:r},backend:a});let c=new xd(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var cK={kernelName:Mi,backendName:"webgl",kernelFunc:pK};function hK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,p=[1,1,1],c=T.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new E3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var fK={kernelName:eh,backendName:"webgl",kernelFunc:hK},mK=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,a=e.strideWidth,n=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${o}); void main() { @@ -3728,8 +3728,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}},HK=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,d=o-1-e.padInfo.front,c=l-1-e.padInfo.top,p=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=` - const ivec3 pads = ivec3(${d}, ${c}, ${p}); + `}},gK=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,p=o-1-e.padInfo.front,c=l-1-e.padInfo.top,d=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=` + const ivec3 pads = ivec3(${p}, ${c}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -3792,16 +3792,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam } setOutput(dotProd); } - `}};function qK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=[1,1,1],p=T.computePool3DInfo(i.shape,o,l,c,u,d),h=new P3(p,"max",!0),f=a.runWebGLProgram(h,[i],i.dtype),m=new HK(p),g=a.runWebGLProgram(m,[r,f],i.dtype);return a.disposeIntermediateTensorInfo(f),g}var XK={kernelName:Y1,backendName:"webgl",kernelFunc:qK};function KK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Jl([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:c}=n,p=T.computePool2DInfo(o.shape,l,u,1,d,c),h=!0,f=new dd(p,"max",h),m=a.runWebGLProgram(f,[o],o.dtype),g=new jK(p),y=a.runWebGLProgram(g,[r,m],o.dtype);return a.disposeIntermediateTensorInfo(m),y}var ZK={kernelName:Z1,backendName:"webgl",kernelFunc:KK};function YK(e,t,a,n){let r=new dd(a,"max",!1),s=n.runWebGLProgram(r,[e],"float32");r=new dd(a,"max",!0,!0,t);let i=n.runWebGLProgram(r,[e],"float32");return[s,i]}var JK={kernelName:ih,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;v.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];v.assert(T.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let d=T.computePool2DInfo(n.shape,r,s,u,i),[c,p]=YK(n,o,d,l);return[c,p]}};function QK(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=de({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=fo(i,"float32","mean",n),l=de({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var eZ={kernelName:Bi,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{keepDims:r,axis:s}=t,i=a,o=n.shape.length,l=v.parseAxisParam(s,n.shape),u=l,d=T.getAxesPermutation(u,o),c=d!=null,p=i.shouldExecuteOnCPU([n]),h=[],f=n;if(c){if(p){let x=i.texData.get(f.dataId).values,b=new Array(o);for(let C=0;C{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;v.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];v.assert(T.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=T.computePool2DInfo(n.shape,r,s,u,i),[c,d]=vK(n,o,p,l);return[c,d]}};function kK(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=ce({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=Ao(i,"float32","mean",n),l=ce({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var IK={kernelName:$i,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{keepDims:r,axis:s}=t,i=a,o=n.shape.length,l=v.parseAxisParam(s,n.shape),u=l,p=T.getAxesPermutation(u,o),c=p!=null,d=i.shouldExecuteOnCPU([n]),h=[],f=n;if(c){if(d){let y=i.texData.get(f.dataId).values,b=new Array(o);for(let C=0;Cu[0]+e[d]+u[1]);let n=e.length,r=mt(n),s=t.map(u=>u[0]).join(","),i=t.map((u,d)=>u[0]+e[d]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),l=a==="reflect"?0:1;if(n===1){this.userCode=` +`,EK=oa({opSnippet:CK,packedOpSnippet:NK,cpuKernelImpl:yU}),RK={kernelName:Pi,backendName:"webgl",kernelFunc:EK},MK=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=t.map((u,p)=>u[0]+e[p]+u[1]);let n=e.length,r=gt(n),s=t.map(u=>u[0]).join(","),i=t.map((u,p)=>u[0]+e[p]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),l=a==="reflect"?0:1;if(n===1){this.userCode=` int start = ${s}; int end = ${i}; @@ -3830,7 +3830,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam ${r} coords = outC - start; setOutput(getX(${o})); } - `}},lZ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,f)=>h[0]+e[f]+h[1]);let n=e.length,r=mt(n),s=t.map(h=>h[0]).join(","),i=t.map((h,f)=>h[0]+e[f]).join(","),o=va("rc",n),l=va("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,d=n===1?"source":`vec2(${l.slice(-2).join()})`,c=a==="reflect"?0:1,p="";if(n===1){let h=` + `}},$K=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,f)=>h[0]+e[f]+h[1]);let n=e.length,r=gt(n),s=t.map(h=>h[0]).join(","),i=t.map((h,f)=>h[0]+e[f]).join(","),o=va("rc",n),l=va("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,p=n===1?"source":`vec2(${l.slice(-2).join()})`,c=a==="reflect"?0:1,d="";if(n===1){let h=` ${r} source = rc; if (source < start) { source = start * 2 - source - ${c}; @@ -3838,14 +3838,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam source = (end - 1) * 2 - source + ${c}; } source -= start; - `;p=` + `;d=` ${r} rc = outputLoc; ${h} - result[0] = getChannel(getX(${l.join()}), ${d}); + result[0] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[1] = getChannel(getX(${l.join()}), ${d}); + result[1] = getChannel(getX(${l.join()}), ${p}); } `}else{let h=` ${r} source = rc; @@ -3856,24 +3856,24 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam lt * (start * 2 - source - ${c}) + gte * ((end - 1) * 2 - source + ${c}); source -= start; - `;p=` + `;d=` ${r} rc = outputLoc; ${h} - result[0] = getChannel(getX(${l.join()}), ${d}); + result[0] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[1] = getChannel(getX(${l.join()}), ${d}); + result[1] = getChannel(getX(${l.join()}), ${p}); } rc = outputLoc; ${o[n-2]} += 1; if(${o[n-2]} < ${this.outputShape[n-2]}) { ${h} - result[2] = getChannel(getX(${l.join()}), ${d}); + result[2] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[3] = getChannel(getX(${l.join()}), ${d}); + result[3] = getChannel(getX(${l.join()}), ${p}); } } `}this.userCode=` @@ -3883,16 +3883,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam void main() { ${r} outputLoc = getOutputCoords(); vec4 result = vec4(0.); - ${p} + ${d} setOutput(result); } - `}},uZ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=V().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new lZ(n.shape,r,s):new oZ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},dZ={kernelName:Vi,backendName:"webgl",kernelFunc:uZ},pZ=`if (b == 0.0) return NAN; - return mod(a, b);`,cZ=` + `}},_K=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new $K(n.shape,r,s):new MK(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},PK={kernelName:Fi,backendName:"webgl",kernelFunc:_K},FK=`if (b == 0.0) return NAN; + return mod(a, b);`,OK=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); `+pp+` return result; -`,hZ=la({opSnippet:pZ,packedOpSnippet:cZ}),fZ={kernelName:Md,backendName:"webgl",kernelFunc:hZ},mZ=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` +`,DK=oa({opSnippet:FK,packedOpSnippet:OK}),zK={kernelName:Bl,backendName:"webgl",kernelFunc:DK},LK=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -3912,11 +3912,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Kj=Qe({opSnippet:Xj}),Zj={kernelNam // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}},gZ=` + `}},BK=` if (a == b) { return 1.0; }; -return a / b;`,yZ=` +return a / b;`,WK=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -3934,9 +3934,9 @@ return a / b;`,yZ=` } return result; -`,w8=la({opSnippet:gZ,packedOpSnippet:yZ,checkOutOfBounds:!0}),AZ={kernelName:Ci,backendName:"webgl",kernelFunc:w8},Ly="return a - b;",k8=la({opSnippet:Ly,packedOpSnippet:Ly,supportsComplex:!0,cpuKernelImpl:mU}),xZ={kernelName:ys,backendName:"webgl",kernelFunc:k8};function I8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=v8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=T.expandShapeToKeepDim(o.shape,i),u=de({inputs:{x:o},backend:a,attrs:{shape:l}}),d=k8({inputs:{a:r,b:u},backend:a}),c=A8({inputs:{x:d},backend:a}),p=Bh({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=de({inputs:{x:p},backend:a,attrs:{shape:l}}),f=w8({inputs:{a:c,b:h},backend:a});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h),f}var bZ={kernelName:ao,backendName:"webgl",kernelFunc:I8};function vZ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:I8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],d=l.shape[1],c=new mZ(u,d,s),p=[[i]],h=a.runWebGLProgram(c,[l],"int32",p);return o||a.disposeIntermediateTensorInfo(l),h}var wZ={kernelName:oh,backendName:"webgl",kernelFunc:vZ},kZ=Cn+` +`,dv=oa({opSnippet:BK,packedOpSnippet:WK,checkOutOfBounds:!0}),VK={kernelName:di,backendName:"webgl",kernelFunc:dv},Ex="return a - b;",pv=oa({opSnippet:Ex,packedOpSnippet:Ex,supportsComplex:!0,cpuKernelImpl:LU}),UK={kernelName:io,backendName:"webgl",kernelFunc:pv};function cv(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=uv({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=T.expandShapeToKeepDim(o.shape,i),u=ce({inputs:{x:o},backend:a,attrs:{shape:l}}),p=pv({inputs:{a:r,b:u},backend:a}),c=iv({inputs:{x:p},backend:a}),d=Fh({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=ce({inputs:{x:d},backend:a,attrs:{shape:l}}),f=dv({inputs:{a:c,b:h},backend:a});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),f}var GK={kernelName:no,backendName:"webgl",kernelFunc:cv};function HK(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:cv({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new LK(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var jK={kernelName:ah,backendName:"webgl",kernelFunc:HK},qK=Tn+` return -x; -`,IZ=` +`,XK=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -3946,14 +3946,14 @@ return a / b;`,yZ=` result.a = isNaN.a ? x.a : result.a; return result; -`;function SZ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=YG(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return V().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Js(n.shape,IZ):r=new gr(n.shape,kZ),a.runWebGLProgram(r,[n],n.dtype)}var TZ={kernelName:Cl,backendName:"webgl",kernelFunc:SZ},CZ=Tn.nonMaxSuppressionV3Impl;function NZ(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),{selectedIndices:c}=CZ(u,d,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var EZ={kernelName:Gi,backendName:"webgl",kernelFunc:NZ},RZ=Tn.nonMaxSuppressionV4Impl;function MZ(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),{selectedIndices:p,validOutputs:h}=RZ(d,c,i,o,l,u);return[a.makeTensorInfo([p.length],"int32",new Int32Array(p)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var $Z={kernelName:Nl,backendName:"webgl",kernelFunc:MZ},_Z=Tn.nonMaxSuppressionV5Impl;function FZ(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),p=i,h=o,f=l,m=u,{selectedIndices:g,selectedScores:y}=_Z(d,c,p,h,f,m);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var PZ={kernelName:Ui,backendName:"webgl",kernelFunc:FZ},OZ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function KK(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=vU(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Br(n.shape,XK):r=new jn(n.shape,qK),a.runWebGLProgram(r,[n],n.dtype)}var ZK={kernelName:Wl,backendName:"webgl",kernelFunc:KK},YK=Sn.nonMaxSuppressionV3Impl;function JK(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),{selectedIndices:c}=YK(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var QK={kernelName:zi,backendName:"webgl",kernelFunc:JK},eZ=Sn.nonMaxSuppressionV4Impl;function tZ(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),{selectedIndices:d,validOutputs:h}=eZ(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var aZ={kernelName:Vl,backendName:"webgl",kernelFunc:tZ},nZ=Sn.nonMaxSuppressionV5Impl;function rZ(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),d=i,h=o,f=l,m=u,{selectedIndices:g,selectedScores:x}=nZ(p,c,d,h,f,m);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var sZ={kernelName:Li,backendName:"webgl",kernelFunc:rZ},iZ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${n}), float(${a}), float(index == coords.y))); } - `}},DZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),d=new OZ(u,i,o,l),c=de({inputs:{x:r},backend:a,attrs:{shape:[u]}}),p=a.runWebGLProgram(d,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],f=de({inputs:{x:p},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(p),f},zZ={kernelName:Rl,backendName:"webgl",kernelFunc:DZ};function Dc(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=hp({inputs:{input:n},backend:a}),s=Dc({inputs:{x:r},backend:a}),i=Wh({inputs:{input:n},backend:a}),o=Dc({inputs:{x:i},backend:a}),l=ks({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return fp({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var LZ={kernelName:Hl,backendName:"webgl",kernelFunc:Dc};function S8(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=hp({inputs:{input:n},backend:a}),s=S8({inputs:{x:r},backend:a}),i=Wh({inputs:{input:n},backend:a}),o=Dc({inputs:{x:i},backend:a}),l=ks({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return fp({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var BZ={kernelName:El,backendName:"webgl",kernelFunc:S8};function WZ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return C1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=C1({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=d8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeIntermediateTensorInfo(d)),u}var VZ={kernelName:Ml,backendName:"webgl",kernelFunc:WZ},GZ=class{constructor(e,t,a){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let n=e.length,r=mt(n),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` + `}},oZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),p=new iZ(u,i,o,l),c=ce({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=a.runWebGLProgram(p,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],f=ce({inputs:{x:d},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(d),f},lZ={kernelName:Bi,backendName:"webgl",kernelFunc:oZ};function Oc(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=hp({inputs:{input:n},backend:a}),s=Oc({inputs:{x:r},backend:a}),i=Oh({inputs:{input:n},backend:a}),o=Oc({inputs:{x:i},backend:a}),l=is({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return fp({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var uZ={kernelName:au,backendName:"webgl",kernelFunc:Oc};function hv(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=hp({inputs:{input:n},backend:a}),s=hv({inputs:{x:r},backend:a}),i=Oh({inputs:{input:n},backend:a}),o=Oc({inputs:{x:i},backend:a}),l=is({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return fp({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var dZ={kernelName:Ul,backendName:"webgl",kernelFunc:hv};function pZ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return S1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=S1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=J6({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var cZ={kernelName:Gl,backendName:"webgl",kernelFunc:pZ},hZ=class{constructor(e,t,a){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let n=e.length,r=gt(n),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${s}; int end = ${i}; @@ -3978,19 +3978,19 @@ return a / b;`,yZ=` setOutput(getX(${o})); } } - `}},UZ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((f,m)=>f[0]+e[m]+f[1]);let n=e.length,r=mt(n),s=t.map(f=>f[0]).join(","),i=t.map((f,m)=>f[0]+e[m]).join(","),o=va("rc",n),l=va("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,d=n===1?"source":`vec2(${l.slice(-2).join()})`,c=[`${r} rc = outputLoc;`,`${o[n-1]} += 1; + `}},fZ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((f,m)=>f[0]+e[m]+f[1]);let n=e.length,r=gt(n),s=t.map(f=>f[0]).join(","),i=t.map((f,m)=>f[0]+e[m]).join(","),o=va("rc",n),l=va("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,p=n===1?"source":`vec2(${l.slice(-2).join()})`,c=[`${r} rc = outputLoc;`,`${o[n-1]} += 1; if(${u}) { `,n===1?"":`} rc = outputLoc; ${o[n-2]} += 1; if(${o[n-2]} < ${this.outputShape[n-2]}) {`,n===1?"":` ${o[n-1]} += 1; - if(${u}) {`],p=n===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let f=0,m=n===1?2:4;f= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let f=0,m=n===1?2:4;f{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(v.sizeFromShape(r.shape)===0){let u=s.map((d,c)=>d[0]+r.shape[c]+d[1]);return fp({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=V().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new UZ(r.shape,s,i):new GZ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},jZ={kernelName:ji,backendName:"webgl",kernelFunc:T8},HZ=` + `}},fv=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(v.sizeFromShape(r.shape)===0){let u=s.map((p,c)=>p[0]+r.shape[c]+p[1]);return fp({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new fZ(r.shape,s,i):new hZ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},mZ={kernelName:Wi,backendName:"webgl",kernelFunc:fv},gZ=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4011,7 +4011,7 @@ return a / b;`,yZ=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,qZ=` +`,xZ=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -4029,9 +4029,9 @@ return a / b;`,yZ=` bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); `+pp+` return result; -`,XZ=la({opSnippet:HZ,packedOpSnippet:qZ}),KZ={kernelName:Hi,backendName:"webgl",kernelFunc:XZ};function ZZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=[],u=v.parseAxisParam(s,r.shape),d=u,c=T.getAxesPermutation(d,o),p=r;c!=null&&(p=Ia({inputs:{x:r},backend:a,attrs:{perm:c}}),d=T.getInnerMostAxes(d.length,o),l.push(p)),T.assertAxesAreInnerMostDims("prod",d,o);let h;if(a.shouldExecuteOnCPU([p])){let f=a.texData.get(p.dataId).values,{outVals:m,outShape:g,outDtype:y}=QG(p.shape,p.dtype,f,d);h=a.makeTensorInfo(g,y,m)}else{let[f,m]=T.computeOutAndReduceShapes(p.shape,d),g=v.sizeFromShape(m),y=de({inputs:{x:p},backend:a,attrs:{shape:[-1,g]}}),A=jd(r.dtype),x=fo(y,A,"prod",a);h=de({inputs:{x},backend:a,attrs:{shape:f}}),l.push(y),l.push(x)}if(i){l.push(h);let f=T.expandShapeToKeepDim(h.shape,u);h=de({inputs:{x:h},backend:a,attrs:{shape:f}})}return l.forEach(f=>a.disposeIntermediateTensorInfo(f)),h}var YZ={kernelName:Xi,backendName:"webgl",kernelFunc:ZZ};function JZ(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.readSync(y.dataId)),u=r.map(y=>y.shape),d=a.readSync(s.dataId),c=a.readSync(i.dataId),[p,h,f]=eU(l,u,d,s.shape,s.dtype,c,i.shape,o),m=p.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(f,s.dtype,h);return m.concat([g])}var QZ={kernelName:lh,backendName:"webgl",kernelFunc:JZ};function eY(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=tU(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),p=a.makeTensorInfo([d.length],n.dtype,d);return[c,p]}var tY={kernelName:uh,backendName:"webgl",kernelFunc:eY};function aY(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),c=a.readSync(i.dataId),p=o.map(g=>a.readSync(g.dataId)),h=o.map(g=>g.shape),[f,m]=aU(u,r.shape,d,s.shape,s.dtype,c,i.shape,p,h,l);return a.makeTensorInfo(f,s.dtype,m)}var nY={kernelName:dh,backendName:"webgl",kernelFunc:aY},C8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=nU(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},rY={kernelName:$l,backendName:"webgl",kernelFunc:C8},sY="return 1.0 / x;",iY=Qe({opSnippet:sY}),oY={kernelName:_l,backendName:"webgl",kernelFunc:iY},lY=Cn+` +`,AZ=oa({opSnippet:gZ,packedOpSnippet:xZ}),yZ={kernelName:Vi,backendName:"webgl",kernelFunc:AZ};function bZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=[],u=v.parseAxisParam(s,r.shape),p=u,c=T.getAxesPermutation(p,o),d=r;c!=null&&(d=Ia({inputs:{x:r},backend:a,attrs:{perm:c}}),p=T.getInnerMostAxes(p.length,o),l.push(d)),T.assertAxesAreInnerMostDims("prod",p,o);let h;if(a.shouldExecuteOnCPU([d])){let f=a.texData.get(d.dataId).values,{outVals:m,outShape:g,outDtype:x}=kU(d.shape,d.dtype,f,p);h=a.makeTensorInfo(g,x,m)}else{let[f,m]=T.computeOutAndReduceShapes(d.shape,p),g=v.sizeFromShape(m),x=ce({inputs:{x:d},backend:a,attrs:{shape:[-1,g]}}),A=Hd(r.dtype),y=Ao(x,A,"prod",a);h=ce({inputs:{x:y},backend:a,attrs:{shape:f}}),l.push(x),l.push(y)}if(i){l.push(h);let f=T.expandShapeToKeepDim(h.shape,u);h=ce({inputs:{x:h},backend:a,attrs:{shape:f}})}return l.forEach(f=>a.disposeIntermediateTensorInfo(f)),h}var vZ={kernelName:Gi,backendName:"webgl",kernelFunc:bZ};function wZ(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(x=>a.readSync(x.dataId)),u=r.map(x=>x.shape),p=a.readSync(s.dataId),c=a.readSync(i.dataId),[d,h,f]=IU(l,u,p,s.shape,s.dtype,c,i.shape,o),m=d.map(x=>a.makeTensorInfo([x.length],"int32",x)),g=a.makeTensorInfo(f,s.dtype,h);return m.concat([g])}var kZ={kernelName:nh,backendName:"webgl",kernelFunc:wZ};function IZ(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=SU(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),d=a.makeTensorInfo([p.length],n.dtype,p);return[c,d]}var SZ={kernelName:rh,backendName:"webgl",kernelFunc:IZ};function TZ(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),c=a.readSync(i.dataId),d=o.map(g=>a.readSync(g.dataId)),h=o.map(g=>g.shape),[f,m]=TU(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(f,s.dtype,m)}var CZ={kernelName:sh,backendName:"webgl",kernelFunc:TZ},mv=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=CU(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},NZ={kernelName:Hl,backendName:"webgl",kernelFunc:mv},EZ="return 1.0 / x;",RZ=Qe({opSnippet:EZ}),MZ={kernelName:Hi,backendName:"webgl",kernelFunc:RZ},$Z=Tn+` return (x < 0.0) ? 0.0 : x; -`,uY=` +`,_Z=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4041,9 +4041,9 @@ return a / b;`,yZ=` result.a = isNaN.a ? x.a : result.a; return result; -`,dY=Qe({opSnippet:lY,packedOpSnippet:uY}),pY={kernelName:Ki,backendName:"webgl",kernelFunc:dY},cY=Cn+` +`,PZ=Qe({opSnippet:$Z,packedOpSnippet:_Z}),FZ={kernelName:ji,backendName:"webgl",kernelFunc:PZ},OZ=Tn+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,hY=` +`,DZ=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4053,10 +4053,10 @@ return a / b;`,yZ=` result.a = isNaN.a ? x.a : result.a; return result; -`,fY=Qe({opSnippet:cY,packedOpSnippet:hY}),mY={kernelName:Ji,backendName:"webgl",kernelFunc:fY},gY=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` +`,zZ=Qe({opSnippet:OZ,packedOpSnippet:DZ}),LZ={kernelName:Ki,backendName:"webgl",kernelFunc:zZ},BZ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${u[0]/d[0]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${o}.0); void main() { @@ -4086,11 +4086,11 @@ return a / b;`,yZ=` setOutput(newValue); } - `}},yY=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}},WZ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${u[0]/d[0]}, - ${u[1]/d[1]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}, + ${u[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${o}.0, ${o}.0); @@ -4163,7 +4163,7 @@ return a / b;`,yZ=` setOutput(newValue); } - `}};function AY(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=V().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new yY(r.shape,l,u,s,i):new gY(r.shape,l,u,s,i);return a.runWebGLProgram(d,[r],"float32")}var xY={kernelName:Yi,backendName:"webgl",kernelFunc:AY},bY=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],c=1/u,p=1/d,h=Math.ceil(c)*2+2,f=Math.ceil(p)*2+2;this.userCode=` + `}};function VZ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=W().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new WZ(r.shape,l,u,s,i):new BZ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var UZ={kernelName:Xi,backendName:"webgl",kernelFunc:VZ},GZ=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],c=1/u,d=1/p,h=Math.ceil(c)*2+2,f=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4174,10 +4174,10 @@ return a / b;`,yZ=` float accumulator = 0.0; const float heightScale = float(${u}); - const float widthScale = float(${d}); + const float widthScale = float(${p}); const float invHeightScale = float(${c}); - const float invWidthScale = float(${p}); + const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${f}); @@ -4244,10 +4244,10 @@ return a / b;`,yZ=` setOutput(accumulator); } - `}};function vY(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new bY(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var wY={kernelName:Q1,backendName:"webgl",kernelFunc:vY},kY=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",p;r?p="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":p="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};function HZ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new GZ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var jZ={kernelName:X1,backendName:"webgl",kernelFunc:HZ},qZ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",d;r?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${u[0]/d[0]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${o}.0); void main() { @@ -4257,7 +4257,7 @@ return a / b;`,yZ=` ivec2 yRC = coords.yz; // Fractional source index. - vec2 sourceFracIndexRC = ${p}; + vec2 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( @@ -4266,11 +4266,11 @@ return a / b;`,yZ=` setOutput(newValue); } - `}},IY=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",p;r?p="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":p="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}},XZ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",d;r?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${u[0]/d[0]}, - ${u[1]/d[1]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}, + ${u[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${o}.0, ${o}.0); @@ -4286,7 +4286,7 @@ return a / b;`,yZ=` ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. - vec3 sourceFracIndexRC = ${p}; + vec3 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( @@ -4307,7 +4307,7 @@ return a / b;`,yZ=` setOutput(newValue); } - `}};function SY(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=V().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new IY(r.shape,l,u,s,i):new kY(r.shape,l,u,s,i);return a.runWebGLProgram(d,[r],r.dtype)}var TY={kernelName:Zi,backendName:"webgl",kernelFunc:SY},CY=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],c=1/u,p=1/d,h=Math.ceil(c)*2+2,f=Math.ceil(p)*2+2;this.userCode=` + `}};function KZ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=W().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new XZ(r.shape,l,u,s,i):new qZ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],r.dtype)}var ZZ={kernelName:qi,backendName:"webgl",kernelFunc:KZ},YZ=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],c=1/u,d=1/p,h=Math.ceil(c)*2+2,f=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4318,10 +4318,10 @@ return a / b;`,yZ=` float accumulator = 0.0; const float heightScale = float(${u}); - const float widthScale = float(${d}); + const float widthScale = float(${p}); const float invHeightScale = float(${c}); - const float invWidthScale = float(${p}); + const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${f}); @@ -4377,17 +4377,17 @@ return a / b;`,yZ=` setOutput(accumulator); } - `}};function NY(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new CY(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var EY={kernelName:J1,backendName:"webgl",kernelFunc:NY},RY=class{constructor(e,t){this.variableNames=["x"];let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);if(this.outputShape=e,a===1){this.userCode=` + `}};function JZ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new YZ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var QZ={kernelName:q1,backendName:"webgl",kernelFunc:JZ},eY=class{constructor(e,t){this.variableNames=["x"];let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);if(this.outputShape=e,a===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); } - `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>n(o)).join(","),s=mt(a);this.userCode=` + `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>n(o)).join(","),s=gt(a);this.userCode=` void main() { ${s} coords = getOutputCoords(); setOutput(getX(${r})); } - `}},MY=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);this.outputShape=e;let n=va("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=mt(a);a===1?this.userCode=` + `}},tY=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);this.outputShape=e;let n=va("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=gt(a);a===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4410,12 +4410,12 @@ return a / b;`,yZ=` if(${s}) { result.b = ${u(n.slice())}; if(${r}) { - result.a = ${d(n.slice())}; + result.a = ${p(n.slice())}; } } setOutput(result); } - `;function o(h){return c(h)}function l(h){return h[a-1]="("+h[a-1]+" + 1)",c(h)}function u(h){return h[a-2]="("+h[a-2]+" + 1)",c(h)}function d(h){return h[a-1]="("+h[a-1]+" + 1)",h[a-2]="("+h[a-2]+" + 1)",c(h)}function c(h){let f=e.map((y,A)=>p(A,h)),m=f.join(","),g=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${g}))`}function p(h,f){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${f[h]} - 1`:`${f[h]}`}}};function $Y(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return Za({inputs:{x:r},backend:a});let l=V().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new MY(r.shape,o):new RY(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var _Y={kernelName:Pl,backendName:"webgl",kernelFunc:$Y},FY=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let a=e[1],n=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=` + `;function o(h){return c(h)}function l(h){return h[a-1]="("+h[a-1]+" + 1)",c(h)}function u(h){return h[a-2]="("+h[a-2]+" + 1)",c(h)}function p(h){return h[a-1]="("+h[a-1]+" + 1)",h[a-2]="("+h[a-2]+" + 1)",c(h)}function c(h){let f=e.map((x,A)=>d(A,h)),m=f.join(","),g=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${g}))`}function d(h,f){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${f[h]} - 1`:`${f[h]}`}}};function aY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return Ka({inputs:{x:r},backend:a});let l=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new tY(r.shape,o):new eY(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var nY={kernelName:Zi,backendName:"webgl",kernelFunc:aY},rY=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let a=e[1],n=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=` vec3 fill = vec3(${t.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { @@ -4434,7 +4434,7 @@ return a / b;`,yZ=` } setOutput(outputValue); } - `}},PY={kernelName:lo,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new FY(n.shape,s),[u,d]=T.getImageCenter(i,n.shape[1],n.shape[2]),c=[[u,d,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[n],n.dtype,c)}},OY=` + `}},sY={kernelName:ho,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new rY(n.shape,s),[u,p]=T.getImageCenter(i,n.shape[1],n.shape[2]),c=[[u,p,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[n],n.dtype,c)}},iY=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -4449,7 +4449,7 @@ return a / b;`,yZ=` return base + 1.0; } } -`,DY=Qe({opSnippet:OY}),zY={kernelName:Ol,backendName:"webgl",kernelFunc:DY},LY="return inversesqrt(x);",BY=Qe({opSnippet:LY,cpuKernelImpl:rU}),WY={kernelName:hs,backendName:"webgl",kernelFunc:BY},N8=class{constructor(e,t,a,n,r,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=mt(r.length),l=mt(s.length),u="";a===1?u="i":a===2&&(u="i, j");let d=`getIndices(${u})`,c="";n===1?c="i":n===2&&(c="i, coords[1]");let p=`getUpdates(${c})`,h=t>1?"strides[j]":"strides";this.userCode=` +`,oY=Qe({opSnippet:iY}),lY={kernelName:ql,backendName:"webgl",kernelFunc:oY},uY="return inversesqrt(x);",dY=Qe({opSnippet:uY,cpuKernelImpl:NU}),pY={kernelName:Yi,backendName:"webgl",kernelFunc:dY},gv=class{constructor(e,t,a,n,r,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=gt(r.length),l=gt(s.length),u="";a===1?u="i":a===2&&(u="i, j");let p=`getIndices(${u})`,c="";n===1?c="i":n===2&&(c="i, coords[1]");let d=`getUpdates(${c})`,h=t>1?"strides[j]":"strides";this.userCode=` ${o} strides = ${o}(${r}); void main() { @@ -4459,17 +4459,17 @@ return a / b;`,yZ=` for (int i = 0; i < ${e}; i++) { int flattenedIndex = 0; for (int j = 0; j < ${t}; j++) { - int index = round(${d}); + int index = round(${p}); flattenedIndex += index * ${h}; } if (flattenedIndex == coords[0]) { - sum += ${p}; + sum += ${d}; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } - `}};function VY(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=T.calculateShapes(s,r,i),p=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=de({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),f=de({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),m=a.makeTensorInfo([],"float32",new Float32Array([0])),g=new N8(l,o,h.shape.length,f.shape.length,d,p),y=a.runWebGLProgram(g,[f,h,m],f.dtype),A=de({inputs:{x:y},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(m),A}var GY={kernelName:Qi,backendName:"webgl",kernelFunc:VY},UY=class{constructor(e,t,a,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,a];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=V().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` + `}};function cY(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=T.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=ce({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),f=ce({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),m=a.makeTensorInfo([],"float32",new Float32Array([0])),g=new gv(l,o,h.shape.length,f.shape.length,p,d),x=a.runWebGLProgram(g,[f,h,m],f.dtype),A=ce({inputs:{x},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(x),a.disposeIntermediateTensorInfo(m),A}var hY={kernelName:Ji,backendName:"webgl",kernelFunc:cY},fY=class{constructor(e,t,a,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,a];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=W().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4494,7 +4494,7 @@ return a / b;`,yZ=` setOutput(float(findBound(batch, value))); } - `}};function jY(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new UY(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return a.runWebGLProgram(o,[r,s],"int32",l)}var HY={kernelName:ph,backendName:"webgl",kernelFunc:jY},qY=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.outputShape=t;let n,r;if(a>4)throw Error(`Where for rank ${a} is not yet supported`);if(a===1)r="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u4)throw Error(`Where for rank ${a} is not yet supported`);if(a===1)r="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); -`,YY=Qe({opSnippet:ZY}),JY={kernelName:_d,backendName:"webgl",kernelFunc:YY},QY=ru+` +`,vY=Qe({opSnippet:bY}),wY={kernelName:_d,backendName:"webgl",kernelFunc:vY},kY=fu+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,eJ=` +`,IY=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4522,15 +4522,15 @@ return a / b;`,yZ=` result.a = isNaN.a ? x.a : result.a; return result; -`,tJ=Qe({opSnippet:QY,packedOpSnippet:eJ,cpuKernelImpl:iU}),aJ={kernelName:fs,backendName:"webgl",kernelFunc:tJ},nJ=` +`,SY=Qe({opSnippet:kY,packedOpSnippet:IY,cpuKernelImpl:RU}),TY={kernelName:eo,backendName:"webgl",kernelFunc:SY},CY=` if (isnan(x)) { return 0.0; } return sign(x); -`,rJ=Qe({opSnippet:nJ}),sJ={kernelName:Fd,backendName:"webgl",kernelFunc:rJ},iJ=ru+` +`,NY=Qe({opSnippet:CY}),EY={kernelName:Pd,backendName:"webgl",kernelFunc:NY},RY=fu+` return sin(x); -`,oJ=Qe({opSnippet:iJ}),lJ={kernelName:eo,backendName:"webgl",kernelFunc:oJ},uJ=` +`,MY=Qe({opSnippet:RY}),$Y={kernelName:Qi,backendName:"webgl",kernelFunc:MY},_Y=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,dJ=Qe({opSnippet:uJ}),pJ={kernelName:Ll,backendName:"webgl",kernelFunc:dJ},cJ=` +`,PY=Qe({opSnippet:_Y}),FY={kernelName:Zl,backendName:"webgl",kernelFunc:PY},OY=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4550,17 +4550,17 @@ return a / b;`,yZ=` result = log(exp_x + 1.0); } return result; -`,hJ=Qe({opSnippet:cJ}),fJ={kernelName:Pd,backendName:"webgl",kernelFunc:hJ},mJ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,A)=>y*A),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeIntermediateTensorInfo(y)),g},gJ={kernelName:Bl,backendName:"webgl",kernelFunc:mJ};function yJ(e){let{inputs:t,backend:a}=e,{indices:n,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: +`,DY=Qe({opSnippet:OY}),zY={kernelName:Fd,backendName:"webgl",kernelFunc:DY},LY=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=[[0,0]];l.push(...i);for(let x=1+s.length;xa.disposeIntermediateTensorInfo(x)),g},BY={kernelName:Yl,backendName:"webgl",kernelFunc:LY};function WY(e){let{inputs:t,backend:a}=e,{indices:n,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${s.shape}`);if(n.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${n.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw: ${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw: - ${i.shape}`);let o=a.readSync(n.dataId),l=a.readSync(r.dataId),u=a.readSync(s.dataId),d=a.readSync(i.dataId)[0],[c,p,h,f,m]=lU(o,n.shape,n.dtype,l,r.dtype,u,d);return[a.makeTensorInfo(p,n.dtype,c),a.makeTensorInfo([p[0]],r.dtype,h),a.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),a.makeTensorInfo([m.length],n.dtype,new Int32Array(m))]}var AJ={kernelName:Od,backendName:"webgl",kernelFunc:yJ};function xJ(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.readSync(r.dataId)),o=a.readSync(n.dataId),l=Array.from(a.readSync(s.dataId)),[u,d,c]=uU(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(d,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var bJ={kernelName:Vl,backendName:"webgl",kernelFunc:xJ};function vJ(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${i.shape}`);let o=a.readSync(n.dataId),l=a.readSync(r.dataId),u=a.readSync(s.dataId),p=a.readSync(i.dataId)[0],[c,d,h,f,m]=$U(o,n.shape,n.dtype,l,r.dtype,u,p);return[a.makeTensorInfo(d,n.dtype,c),a.makeTensorInfo([d[0]],r.dtype,h),a.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),a.makeTensorInfo([m.length],n.dtype,new Int32Array(m))]}var VY={kernelName:Od,backendName:"webgl",kernelFunc:WY};function UY(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.readSync(r.dataId)),o=a.readSync(n.dataId),l=Array.from(a.readSync(s.dataId)),[u,p,c]=_U(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var GY={kernelName:Ql,backendName:"webgl",kernelFunc:UY};function HY(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=Z6(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(d,n.dtype,u)}var wJ={kernelName:Dd,backendName:"webgl",kernelFunc:vJ};function kJ(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=z6(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var jY={kernelName:Dd,backendName:"webgl",kernelFunc:HY};function qY(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=Z6(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(d,n.dtype,u)}var IJ={kernelName:zd,backendName:"webgl",kernelFunc:kJ};function SJ(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=T.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=a.bufferSync(r),A=a.bufferSync(s),x=v.decodeString(a.readSync(i.dataId)[0]),b=sU(y,A,o,p,d,u,l,c,x,h);return a.makeTensorInfo(o,b.dtype,b.values)}let f=new N8(u,l,r.shape.length,s.shape.length,c,[p,1],h),m=a.runWebGLProgram(f,[s,r,i],s.dtype),g=de({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(m),g}var TJ={kernelName:Ld,backendName:"webgl",kernelFunc:SJ};function CJ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=r.shape.length,d=new Array(u).fill(0),c=r.shape.slice();return l.map(p=>{let h=[...c];h[o]=p;let f=su({inputs:{x:r},backend:a,attrs:{begin:d,size:h}});return d[o]+=p,f})}var NJ={kernelName:Wl,backendName:"webgl",kernelFunc:CJ},By="return sqrt(x);",EJ=Qe({opSnippet:By,packedOpSnippet:By,cpuKernelImpl:dU}),RJ={kernelName:ms,backendName:"webgl",kernelFunc:EJ},MJ="return x * x;",$J=Qe({opSnippet:MJ}),_J={kernelName:Bd,backendName:"webgl",kernelFunc:$J},Wy="return (a - b) * (a - b);",FJ=la({opSnippet:Wy,packedOpSnippet:Wy}),PJ={kernelName:gs,backendName:"webgl",kernelFunc:FJ};function OJ({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=Cn+` + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=z6(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var XY={kernelName:zd,backendName:"webgl",kernelFunc:qY};function KY(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=T.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let x=a.bufferSync(r),A=a.bufferSync(s),y=v.decodeString(a.readSync(i.dataId)[0]),b=EU(x,A,o,d,p,u,l,c,y,h);return a.makeTensorInfo(o,b.dtype,b.values)}let f=new gv(u,l,r.shape.length,s.shape.length,c,[d,1],h),m=a.runWebGLProgram(f,[s,r,i],s.dtype),g=ce({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(m),g}var ZY={kernelName:Ld,backendName:"webgl",kernelFunc:KY};function YY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),c=r.shape.slice();return l.map(d=>{let h=[...c];h[o]=d;let f=mu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,f})}var JY={kernelName:Jl,backendName:"webgl",kernelFunc:YY},Rx="return sqrt(x);",QY=Qe({opSnippet:Rx,packedOpSnippet:Rx,cpuKernelImpl:PU}),eJ={kernelName:to,backendName:"webgl",kernelFunc:QY},tJ="return x * x;",aJ=Qe({opSnippet:tJ}),nJ={kernelName:Bd,backendName:"webgl",kernelFunc:aJ},Mx="return (a - b) * (a - b);",rJ=oa({opSnippet:Mx,packedOpSnippet:Mx}),sJ={kernelName:ro,backendName:"webgl",kernelFunc:rJ};function iJ({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=Tn+` return x > 0.0 ? 1.0 : float(${t.alpha}); - `,s=new gr(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var DJ={kernelName:oo,backendName:"webgl",kernelFunc:OJ},zJ=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=mt(a.length),s=mt(a.length),i="";if(n===1)i="coords * strides + begin";else{let o=0;i=a.map((l,u)=>(o++,a.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` + `,s=new jn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var oJ={kernelName:co,backendName:"webgl",kernelFunc:iJ},lJ=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=gt(a.length),s=gt(a.length),i="";if(n===1)i="coords * strides + begin";else{let o=0;i=a.map((l,u)=>(o++,a.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` ${r} begin = ${r}(${e}); ${r} strides = ${r}(${t}); @@ -4568,15 +4568,15 @@ return a / b;`,yZ=` ${s} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function LJ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:y,begin:A,end:x,strides:b}=At.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(m)w=de({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let C=At.computeOutShape(A,x,b),N=su({inputs:{x:r},backend:a,attrs:{begin:A,size:C}});w=de({inputs:{x:N},backend:a,attrs:{shape:f}}),a.disposeIntermediateTensorInfo(N)}else if(a.shouldExecuteOnCPU([r])){let C=a.readSync(r.dataId),N=ve(r.shape,r.dtype,C),_=pU(h,N,b,A);w=a.makeTensorInfo(f,r.dtype,_.values)}else{let C=new zJ(A,b,h);w=a.runWebGLProgram(C,[r],r.dtype)}let S=de({inputs:{x:w},backend:a,attrs:{shape:f}});return a.disposeIntermediateTensorInfo(w),S}var BJ={kernelName:no,backendName:"webgl",kernelFunc:LJ};function WJ(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.readSync(d.dataId),h=a.readSync(c.dataId),[f,m]=cU(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var VJ={kernelName:Gl,backendName:"webgl",kernelFunc:WJ};function GJ(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.readSync(s.dataId),l=a.readSync(i.dataId)[0],[u,d,c]=hU(o,l,r),p=d.length;return[a.makeTensorInfo([p,2],"int32",u),a.makeTensorInfo([p],"string",d),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var UJ={kernelName:Wd,backendName:"webgl",kernelFunc:GJ};function jJ(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.readSync(s.dataId),o=fU(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var HJ={kernelName:Vd,backendName:"webgl",kernelFunc:jJ},qJ="return tan(x);",XJ=Qe({opSnippet:qJ}),KJ={kernelName:Ul,backendName:"webgl",kernelFunc:XJ},ZJ=` + `}};function uJ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:x,begin:A,end:y,strides:b}=It.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(m)w=ce({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||x){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let C=It.computeOutShape(A,y,b),E=mu({inputs:{x:r},backend:a,attrs:{begin:A,size:C}});w=ce({inputs:{x:E},backend:a,attrs:{shape:f}}),a.disposeIntermediateTensorInfo(E)}else if(a.shouldExecuteOnCPU([r])){let C=a.readSync(r.dataId),E=Me(r.shape,r.dtype,C),_=FU(h,E,b,A);w=a.makeTensorInfo(f,r.dtype,_.values)}else{let C=new lJ(A,b,h);w=a.runWebGLProgram(C,[r],r.dtype)}let S=ce({inputs:{x:w},backend:a,attrs:{shape:f}});return a.disposeIntermediateTensorInfo(w),S}var dJ={kernelName:so,backendName:"webgl",kernelFunc:uJ};function pJ(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.readSync(p.dataId),h=a.readSync(c.dataId),[f,m]=OU(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var cJ={kernelName:eu,backendName:"webgl",kernelFunc:pJ};function hJ(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.readSync(s.dataId),l=a.readSync(i.dataId)[0],[u,p,c]=DU(o,l,r),d=p.length;return[a.makeTensorInfo([d,2],"int32",u),a.makeTensorInfo([d],"string",p),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var fJ={kernelName:Wd,backendName:"webgl",kernelFunc:hJ};function mJ(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.readSync(s.dataId),o=zU(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var gJ={kernelName:Vd,backendName:"webgl",kernelFunc:mJ},xJ="return tan(x);",AJ=Qe({opSnippet:xJ}),yJ={kernelName:oo,backendName:"webgl",kernelFunc:AJ},bJ=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,YJ=Qe({opSnippet:ZJ}),JJ={kernelName:ro,backendName:"webgl",kernelFunc:YJ},QJ=class{constructor(e,t){this.variableNames=["A"];let a=new Array(e.length);for(let s=0;s5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let r=0;r5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=ve(r.shape,r.dtype,l),d=gU(u,s);return a.makeTensorInfo(d.shape,d.dtype,d.values)}let i=new QJ(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var tQ={kernelName:As,backendName:"webgl",kernelFunc:E8},aQ=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` + `}};function IJ(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let r=0;r5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=Me(r.shape,r.dtype,l),p=BU(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new kJ(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var SJ={kernelName:ts,backendName:"webgl",kernelFunc:xv},TJ=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4616,7 +4616,7 @@ return a / b;`,yZ=` setOutput(float(i1)); } } - `}},nQ=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` + `}},CJ=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); @@ -4650,7 +4650,7 @@ return a / b;`,yZ=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function js(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function Vy(e){let t=1;for(;tl){let _=a.readSync(r.dataId),[$,M]=yU(_,u,r.dtype,s,i);return[a.makeTensorInfo($.shape,$.dtype,$.values),a.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(d===1)return[r,fp({attrs:{shape:u,dtype:"int32",value:0},backend:a})];let c=a.texData.get(r.dataId),p=c!==null&&c.isPacked,h=p?a.unpackTensor(r):r,f=v.sizeFromShape(u)/d,m=de({inputs:{x:h},attrs:{shape:[f,d]},backend:a});p&&js(a,h);let g=Vy(s),y=Vy(d),A=null,x=()=>A===null?[m,m]:[m,A],b=(_,$,M)=>{let I=x(),E=new aQ(M),O=[[d],[A===null?1:0],[Number.NEGATIVE_INFINITY],[_],[$]],L=A;A=a.runWebGLProgram(E,I,"int32",O),js(a,L)};for(let _=1;_=1;M/=2)b($,M,[f,y])}for(let _=y;_>g;_/=2){let $=x(),M=new nQ([f,_/2]),I=[[d],[A===null?1:0],[g]],E=A;A=a.runWebGLProgram(M,$,"int32",I),js(a,E);let O=g/2,L=O*2;for(let B=O;B>=1;B/=2)b(L,B,A.shape)}let w=A;A=su({inputs:{x:A},backend:a,attrs:{begin:0,size:[f,s]}}),js(a,w);let S=b8({inputs:{x:m,indices:A},backend:a,attrs:{axis:1,batchDims:1}});js(a,m);let C=u.slice(0,-1);C.push(s),w=A,A=de({inputs:{x:A},attrs:{shape:C},backend:a}),js(a,w);let N=S;return S=de({inputs:{x:S},attrs:{shape:C},backend:a}),js(a,N),[S,A]}var sQ={kernelName:so,backendName:"webgl",kernelFunc:rQ},iQ=class{constructor(e,t,a,n,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=a==="nearest"?1:2,o;switch(n){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=` + `}};function Cs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function $x(e){let t=1;for(;tl){let _=a.readSync(r.dataId),[$,M]=WU(_,u,r.dtype,s,i);return[a.makeTensorInfo($.shape,$.dtype,$.values),a.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(p===1)return[r,fp({attrs:{shape:u,dtype:"int32",value:0},backend:a})];let c=a.texData.get(r.dataId),d=c!==null&&c.isPacked,h=d?a.unpackTensor(r):r,f=v.sizeFromShape(u)/p,m=ce({inputs:{x:h},attrs:{shape:[f,p]},backend:a});d&&Cs(a,h);let g=$x(s),x=$x(p),A=null,y=()=>A===null?[m,m]:[m,A],b=(_,$,M)=>{let I=y(),N=new TJ(M),O=[[p],[A===null?1:0],[Number.NEGATIVE_INFINITY],[_],[$]],L=A;A=a.runWebGLProgram(N,I,"int32",O),Cs(a,L)};for(let _=1;_=1;M/=2)b($,M,[f,x])}for(let _=x;_>g;_/=2){let $=y(),M=new CJ([f,_/2]),I=[[p],[A===null?1:0],[g]],N=A;A=a.runWebGLProgram(M,$,"int32",I),Cs(a,N);let O=g/2,L=O*2;for(let B=O;B>=1;B/=2)b(L,B,A.shape)}let w=A;A=mu({inputs:{x:A},backend:a,attrs:{begin:0,size:[f,s]}}),Cs(a,w);let S=lv({inputs:{x:m,indices:A},backend:a,attrs:{axis:1,batchDims:1}});Cs(a,m);let C=u.slice(0,-1);C.push(s),w=A,A=ce({inputs:{x:A},attrs:{shape:C},backend:a}),Cs(a,w);let E=S;return S=ce({inputs:{x:S},attrs:{shape:C},backend:a}),Cs(a,E),[S,A]}var EJ={kernelName:uo,backendName:"webgl",kernelFunc:NJ},RJ=class{constructor(e,t,a,n,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=a==="nearest"?1:2,o;switch(n){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${o} == 2) { @@ -4762,9 +4762,9 @@ return a / b;`,yZ=` } setOutput(outputValue); } - `}};function oQ(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[f,m]=u!=null?u:[c,p],g=[d,f,m,h],y=new iQ(c,p,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var lQ={kernelName:io,backendName:"webgl",kernelFunc:oQ};function uQ(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;Jl(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=n.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=AU(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var dQ={kernelName:ch,backendName:"webgl",kernelFunc:uQ};function pQ(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),d=0;for(let m=0;ma.disposeIntermediateTensorInfo(m)),f}var cQ={kernelName:jl,backendName:"webgl",kernelFunc:pQ},hQ=class{constructor(e,t){this.variableNames=["x","segmentIds"];let a=e.windowSize,n=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/a);this.outputShape=[n,i];let o="0.0",l="sumValue",u=Math.floor(a/4)*4,d=a%4,c=` + `}};function MJ(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[f,m]=u!=null?u:[c,d],g=[p,f,m,h],x=new RJ(c,d,i,o,l,g);return a.runWebGLProgram(x,[r,s],"float32")}var $J={kernelName:po,backendName:"webgl",kernelFunc:MJ};function _J(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;lu(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=n.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=VU(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var PJ={kernelName:ih,backendName:"webgl",kernelFunc:_J};function FJ(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let m=0;ma.disposeIntermediateTensorInfo(m)),f}var OJ={kernelName:tu,backendName:"webgl",kernelFunc:FJ},DJ=class{constructor(e,t){this.variableNames=["x","segmentIds"];let a=e.windowSize,n=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/a);this.outputShape=[n,i];let o="0.0",l="sumValue",u=Math.floor(a/4)*4,p=a%4,c=` sumValue += dot(values, segFilter); - `,p="";r%a>0&&(p=` + `,d="";r%a>0&&(d=` if (inIdx < 0 || inIdx >= ${r}) { return initializationValue; } @@ -4776,7 +4776,7 @@ return a / b;`,yZ=` const float initializationValue = ${o}; float getValue(int batch, int inIdx) { - ${p} + ${d} return getX(batch, inIdx); } @@ -4815,7 +4815,7 @@ return a / b;`,yZ=` } int inIdx = inOffset + ${u}; - if (${d===1}) { + if (${p===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, @@ -4833,7 +4833,7 @@ return a / b;`,yZ=` ); ${c} - } else if (${d===2}) { + } else if (${p===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4849,7 +4849,7 @@ return a / b;`,yZ=` ); ${c} - } else if (${d===3}) { + } else if (${p===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4868,80 +4868,70 @@ return a / b;`,yZ=` } setOutput(${l}); } - `}};function fQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,d=T.getAxesPermutation([u],o),c=r;d!=null&&(c=Ia({inputs:{x:r},backend:a,attrs:{perm:d}}),l.push(c),u=T.getInnerMostAxes(1,o)[0]);let p=T.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),f=de({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(f);let m=jd(r.dtype),g=(b,w,S,C,N)=>{let _=b.shape[0],$=b.shape[1],M=T.segment_util.segOpComputeOptimalWindowSize($,N),I={windowSize:M,inSize:$,batchSize:_,numSegments:N},E=new hQ(I,w),O=a.compileAndRun(E,[b,S],C);if(l.push(O),O.shape[1]===N)return O;let L=C8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),B=E8({inputs:{x:L},backend:a,attrs:{reps:[$/M]}});return l.push(L),l.push(B),g(O,w,B,C,N)},y=g(f,"unsortedSegmentSum",s,m,i),A=de({inputs:{x:y},backend:a,attrs:{shape:p}}),x=A;if(d!=null){l.push(A);let b=T.getUndoAxesPermutation(d);x=Ia({inputs:{x},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),x}var mQ={kernelName:hh,backendName:"webgl",kernelFunc:fQ},gQ=[pj,hj,gj,xj,vj,Ij,Tj,Nj,$j,Fj,Dj,Bj,Gj,qj,Zj,Jj,eH,rH,iH,lH,cH,xH,vH,kH,EH,MH,PH,XU,zH,GH,qH,QH,tq,nq,sq,oq,dq,hq,gq,Aq,bq,wq,Sq,Cq,Mq,_q,Oq,Lq,Wq,jq,Kq,Qq,aX,sX,iX,lX,dX,cX,fX,gX,bX,kX,TX,NX,MX,FX,zX,VX,qU,UX,WH,qX,ZX,QX,ZU,nK,oK,uK,hK,gK,bK,kK,CK,MK,FK,OK,BK,VK,UK,XK,ZK,JK,eZ,aZ,iZ,dZ,fZ,wZ,QU,TZ,EZ,$Z,PZ,SH,zZ,BZ,VZ,jZ,KZ,JU,YZ,QZ,tY,nY,rY,TH,AZ,oY,pY,mY,tj,xY,wY,TY,EY,_Y,PY,zY,WY,GY,HY,KY,JY,aJ,sJ,lJ,pJ,yH,bZ,fJ,gJ,AJ,bJ,wJ,IJ,TJ,NJ,RJ,_J,PJ,DJ,BJ,VJ,UJ,HJ,xZ,lj,KJ,JJ,tQ,sQ,lQ,uj,dQ,cQ,mQ,LZ];for(let e of gQ)hn(e);var St;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(St||(St={}));var cd;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(cd||(cd={}));var R8;function yQ(e){R8=e.wasm.cwrap(Ur,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function AQ(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n,p=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(s.dataId).id,f=0;if(i!=null){let N=a.dataIdMap.get(i.dataId);if(N.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${N.shape.length}.`);f=N.id}let m=o==null?0:a.dataIdMap.get(o.dataId).id,g=cd[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],A=u?s.shape[1]:s.shape[2],x=po.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...x,y,A],r.dtype),w=a.dataIdMap.get(b.dataId).id,S=new Uint8Array(new Int32Array(r.shape).buffer),C=new Uint8Array(new Int32Array(s.shape).buffer);return R8(p,S,r.shape.length,h,C,s.shape.length,l,u,g,f,m,c||0,w),b}var xQ={kernelName:Ur,backendName:"wasm",setupFunc:yQ,kernelFunc:AQ};function Zt(e,t){let a;function n(s){a=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),d=i.dataIdMap.get(u.dataId).id;return v.sizeFromShape(u.shape)===0||a(l,St[o.dtype],d),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var bQ=Zt(gl);function ua(e,t,a){let n;function r(i){n=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:d}=l,c=o.dataIdMap.get(u.dataId).id,p=o.dataIdMap.get(d.dataId).id,h=a!=null?a:u.dtype,f=T.assertAndGetBroadcastShape(u.shape,d.shape),m=o.makeOutput(f,h);if(v.sizeFromShape(f)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(d.shape).buffer),A=o.dataIdMap.get(m.dataId).id;return n(c,g,u.shape.length,p,y,d.shape.length,St[u.dtype],A),m}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var vQ=!0,wQ=ua(vr,vQ),M8;function kQ(e){M8=e.wasm.cwrap(hi,null,["array","number","number","number"])}function IQ(e){let{inputs:t,backend:a}=e,n=a.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(n.shape)===0)return n;let r=t.map(o=>a.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=a.dataIdMap.get(n.dataId).id;return M8(s,r.length,St[n.dtype],i),n}var SQ={kernelName:hi,backendName:"wasm",setupFunc:kQ,kernelFunc:IQ};function Vh(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return ze(a.readSync(t.dataId),t.shape,t.dtype);let n=a.makeOutput(t.shape,t.dtype),r=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(n).set(r),n}var TQ={kernelName:Fi,backendName:"wasm",kernelFunc:Vh},$8;function CQ(e){$8=e.wasm.cwrap(yr,null,["number","array","number","number","number","array","number"])}function Yr(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=EQ(t.x.shape,n.perm),i=!0;for(let f=0;f=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var RQ={kernelName:yr,backendName:"wasm",kernelFunc:Yr,setupFunc:CQ};function Is(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=T.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let d=new Array(r);for(let p=0;p`new shape: ${i}, old shape: ${n.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var GQ={kernelName:Fl,backendName:"wasm",kernelFunc:za},D8;function UQ(e){D8=e.wasm.cwrap(gi,null,["number","array","number","number","array","number","number","number","number"])}function jQ(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,d=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],p=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],f=r.shape.slice(0,-2),m=s.shape.slice(0,-2),g=v.sizeFromShape(f),y=v.sizeFromShape(m),A=po.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([p,h]);v.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,d,p]:[g,p,d],b=o?[y,h,c]:[y,c,h],w=za({inputs:{x:r},backend:a,attrs:{shape:x}}),S=za({inputs:{x:s},backend:a,attrs:{shape:b}}),C=a.dataIdMap.get(w.dataId).id,N=a.dataIdMap.get(S.dataId).id,_=i?w.shape[2]:w.shape[1],$=o?S.shape[1]:S.shape[2],M=Math.max(g,y),I=a.makeOutput([M,_,$],w.dtype),E=a.dataIdMap.get(I.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),L=new Uint8Array(new Int32Array(S.shape).buffer);return D8(C,O,w.shape.length,N,L,S.shape.length,i,o,E),a.disposeData(w.dataId),a.disposeData(S.dataId),I.shape=A,I}var HQ={kernelName:gi,backendName:"wasm",setupFunc:UQ,kernelFunc:jQ};function pi(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=At.parseSliceParams(t,a,n),o=At.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),d=v.computeStrides(t.shape),c=r.dataIdMap.get(u.dataId);if(o){let f=At.computeFlatOffset(s,d);return t.dtype==="string"?c.stringBytes=l.slice(f,f+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(f,f+v.sizeFromShape(i))),u}if(t.dtype==="string"){let f=Mc(l,s,i,t.shape,t.dtype);return c.stringBytes=f,u}let p=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)qQ(l,d[0],p,s,i);else if(h===3)XQ(l,d[0],d[1],p,s,i);else if(h===4)KQ(l,d[0],d[1],d[2],p,s,i);else{let f=Mc(l,s,i,t.shape,t.dtype);p.set(f)}return u}function qQ(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;uy*A),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),d=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),p=T.getSliceSize(d,i,s.length),h=za({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Yr({inputs:{x:h},backend:a,attrs:{perm:u}}),m=za({inputs:{x:f},backend:a,attrs:{shape:d}}),g=pi({inputs:{x:m},backend:a,attrs:{begin:c,size:p}});return a.disposeData(h.dataId),a.disposeData(f.dataId),a.disposeData(h.dataId),g}var JQ={kernelName:bl,backendName:"wasm",kernelFunc:YQ};function iu(e){let{inputs:{x:t},attrs:{dtype:a},backend:n}=e,r=n.makeOutput(t.shape,a),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var QQ={kernelName:yi,backendName:"wasm",kernelFunc:iu},eee=Zt(Qr),z8;function tee(e){z8=e.wasm.cwrap(es,null,["number","number","number","number"])}function aee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o=a.dataIdMap.get(r.dataId).id,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(l.dataId).id;return z8(o,s,i,u),l}var nee={kernelName:es,backendName:"wasm",setupFunc:tee,kernelFunc:aee};function L8(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);T.assertParamsConsistent(r,n);let s=T.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return Vh({inputs:{x:i[0]},backend:a});let o=a.makeOutput(s,t[0].dtype);if(v.sizeFromShape(s)===0)return o;if(i[0].dtype==="string"){let h=i.map(x=>{let b=[-1,v.sizeFromShape(x.shape.slice(n))];return za({inputs:{x},backend:a,attrs:{shape:b}})}),f=h.map(x=>({vals:a.readSync(x.dataId),shape:x.shape}));s=T.computeOutShape(h.map(x=>x.shape),1);let m=h[0].shape[0]===1,g=d3(f,s,t[0].dtype,m),y=T.computeOutShape(i.map(x=>x.shape),n);o.shape=y;let A=a.dataIdMap.get(o.dataId);return A.stringBytes=T.fromStringArrayToUint8(g),h.forEach(x=>a.disposeData(x.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,d=i.map(h=>{let f=v.sizeFromShape(h.shape.slice(n));return u+=f,f}),c=i.map(h=>a.typedArrayFromHeap(h)),p=a.typedArrayFromHeap(o);for(let h=0;h`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=T.getAxesPermutation([s],l),d=r;u!==null&&(d=Yr({inputs:{x:r},attrs:{perm:u},backend:a}));let c=T.getInnerMostAxes(1,l)[0];T.assertAxesAreInnerMostDims("cumprod",[c],l);let p=a.makeOutput(d.shape,d.dtype),h=d.shape[c],f=a.dataIdMap.get(d.dataId).id,m=a.dataIdMap.get(p.dataId).id;G8(f,i?1:0,o?1:0,h,m,St[r.dtype]);let g=p;if(u!==null){let y=T.getUndoAxesPermutation(u);g=Yr({inputs:{x:p},attrs:{perm:y},backend:a}),a.disposeData(d.dataId),a.disposeData(p.dataId)}return g}var Aee={kernelName:wi,backendName:"wasm",setupFunc:gee,kernelFunc:yee},U8;function xee(e){U8=e.wasm.cwrap(ki,null,["number","number","number","number","number","number"])}function bee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=T.getAxesPermutation([s],l),d=r;u!==null&&(d=Yr({inputs:{x:r},attrs:{perm:u},backend:a}));let c=T.getInnerMostAxes(1,l)[0];T.assertAxesAreInnerMostDims("cumsum",[c],l);let p=a.makeOutput(d.shape,d.dtype),h=d.shape[c],f=a.dataIdMap.get(d.dataId).id,m=a.dataIdMap.get(p.dataId).id;U8(f,i?1:0,o?1:0,h,m,St[r.dtype]);let g=p;if(u!==null){let y=T.getUndoAxesPermutation(u);g=Yr({inputs:{x:p},attrs:{perm:y},backend:a}),a.disposeData(d.dataId),a.disposeData(p.dataId)}return g}var vee={kernelName:ki,backendName:"wasm",setupFunc:xee,kernelFunc:bee},j8;function wee(e){j8=e.wasm.cwrap(Si,null,["number","number","number","array","number","array","array","number","number"])}function kee(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),f=i==="NHWC"?[o,c,p,h]:[o,h,c,p],m=t.makeOutput(f,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(f).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer),b=t.dataIdMap.get(m.dataId).id;return j8(g,s,i==="NHWC"?1:0,y,r.shape.length-1,A,x,f.length,b),m}var Iee={kernelName:Si,backendName:"wasm",setupFunc:wee,kernelFunc:kee},H8;function See(e){H8=e.wasm.cwrap(Ti,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Tee(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:d,dimRoundingMode:c}=a,p=u==null?[1,1]:u,h=T.computeConv2DInfo(r.shape,s.shape,l,p,d,c,!0),f=h.filterHeight,m=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,A=h.padInfo.bottom,x=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,S=h.strideHeight,C=h.strideWidth,N=h.inChannels,_=h.outChannels,$=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let M=n.makeOutput(h.outShape,"float32"),I=n.dataIdMap.get(M.dataId).id;return H8(i,r.shape[0],r.shape[1],r.shape[2],o,f,m,g,y,A,x,$,b,w,S,C,N,_,I),M}var Cee={kernelName:Ti,backendName:"wasm",setupFunc:See,kernelFunc:Tee},Nee=Zt(Ni),Eee=!1,Ree=ua(ts,Eee,"bool"),Mee=Zt(as,"float32");function E1(e){let{inputs:t,attrs:a,backend:n}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),za({inputs:{x:r},backend:n,attrs:{shape:o}})}var $ee={kernelName:wl,backendName:"wasm",kernelFunc:E1};function q8(e){let{attrs:{shape:t,value:a,dtype:n},backend:r}=e,s=r.makeOutput(t,n);return r.typedArrayFromHeap(s).fill(a),s}var _ee={kernelName:kl,backendName:"wasm",kernelFunc:q8},X8;function Fee(e){X8=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number"])}function Pee(e){let{inputs:t,backend:a}=e,{image:n}=t,r=a.makeOutput(n.shape,n.dtype),s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,[o,l,u,d]=n.shape;return X8(s,o,l,u,d,i),r}var Oee={kernelName:Ri,backendName:"wasm",kernelFunc:Pee,setupFunc:Fee},Dee=Zt(ns),zee=!1,Lee=ua(Mi,zee),K8;function Bee(e){K8=e.wasm.cwrap($i,null,["number","number","number","number","number","number","number"])}function Wee(e){let{backend:t,inputs:a,attrs:n}=e,{varianceEpsilon:r}=n,{x:s,mean:i,variance:o,offset:l,scale:u}=a,d=t.dataIdMap.get(s.dataId).id,c=t.dataIdMap.get(i.dataId).id,p=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return K8(d,c,p,h,f,r,g),m}var Vee={kernelName:$i,backendName:"wasm",setupFunc:Bee,kernelFunc:Wee},Z8;function Gee(e){Z8=e.wasm.cwrap(jr,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Uee(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=a,m=T.computeConv2DInfo(r.shape,s.shape,l,d,u,p),g=cd[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,A=n.dataIdMap.get(s.dataId).id,x=m.outChannels,b=0;if(i!=null){let Z=n.dataIdMap.get(i.dataId);if(Z.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Z.shape.length}.`);if(Z.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${Z.shape}) does not match the number of output channels (${x})`);b=Z.id}let w=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,N=m.padInfo.right,_=m.padInfo.bottom,$=m.padInfo.left,M=m.dilationHeight,I=m.dilationWidth,E=m.strideHeight,O=m.strideWidth,L=m.inChannels,B=m.padInfo.type==="SAME"?1:0,G=m.batchSize,j=m.inHeight,U=m.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(m.outShape,"float32"),W=n.dataIdMap.get(H.dataId).id,Q=o==null?0:n.dataIdMap.get(o.dataId).id;return Z8(y,G,j,U,A,w,S,b,C,N,_,$,B,M,I,E,O,L,x,g,Q,f||0,W),H}var jee={kernelName:jr,backendName:"wasm",setupFunc:Gee,kernelFunc:Uee},Y8;function Hee(e){Y8=e.wasm.cwrap(Hr,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function qee(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=a,m=T.computeConv2DInfo(r.shape,s.shape,l,d,u,p,!0),g=cd[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,A=n.dataIdMap.get(s.dataId).id,x=m.outChannels,b=0;if(i!=null){let Z=n.dataIdMap.get(i.dataId);if(Z.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Z.shape.length}.`);if(Z.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${Z.shape}) does not match the number of output channels (${x})`);b=Z.id}let w=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,N=m.padInfo.right,_=m.padInfo.bottom,$=m.padInfo.left,M=m.dilationHeight,I=m.dilationWidth,E=m.strideHeight,O=m.strideWidth,L=m.inChannels,B=m.padInfo.type==="SAME"?1:0,G=m.batchSize,j=m.inHeight,U=m.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(m.outShape,"float32"),W=n.dataIdMap.get(H.dataId).id,Q=o==null?0:n.dataIdMap.get(o.dataId).id;return Y8(y,G,j,U,A,w,S,b,C,N,_,$,B,M,I,E,O,L,x,g,Q,f||0,W),H}var Xee={kernelName:Hr,backendName:"wasm",setupFunc:Hee,kernelFunc:qee},J8;function Kee(e){J8=e.wasm.cwrap(_i,null,["number","number","number","number","number","number","array","number"])}function Zee(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=f2.prepareAndValidate(n,r),u=t.makeOutput(s,n.dtype);if(i===0)return u;let d=r.shape,c=d[d.length-1],p=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(r.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(u.dataId).id;return J8(p,St[n.dtype],h,i,c,o,f,m),u}var Yee={kernelName:_i,backendName:"wasm",setupFunc:Kee,kernelFunc:Zee},Q8;function Jee(e){Q8=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Qee(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,indices:s}=a,{axis:i,batchDims:o}=n,l=v.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),d=r.shape[l];for(let C=0;C=0,()=>`GatherV2: the index value ${N} is not in [0, ${d-1}]`)}let c=T.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=za({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),f=za({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),m=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(m,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=p.shape.length-1,A=t.dataIdMap.get(p.dataId).id,x=t.dataIdMap.get(f.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(p.shape)).buffer),S=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer);return Q8(A,St[r.dtype],w,y,x,c.batchSize,S,b),t.disposeData(p.dataId),t.disposeData(f.dataId),g.shape=c.outputShape,g}var ete={kernelName:Il,backendName:"wasm",setupFunc:Jee,kernelFunc:Qee},tte=!1,ate=ua(rs,tte,"bool"),nte=!1,rte=ua(ss,nte,"bool"),ev;function ste(e){ev=e.wasm.cwrap(Pi,null,["number","number","number","number"])}function ite(e){let{inputs:{x:t},attrs:{alpha:a},backend:n}=e,r=n.dataIdMap.get(t.dataId).id,s=n.makeOutput(t.shape,"float32");if(v.sizeFromShape(t.shape)!==0){let i=n.dataIdMap.get(s.dataId).id;ev(r,St[t.dtype],a,i)}return s}var ote={kernelName:Pi,backendName:"wasm",setupFunc:ste,kernelFunc:ite},lte=!1,ute=ua(is,lte,"bool"),dte=!1,pte=ua(os,dte,"bool"),cte=Zt(ls),hte=!1,fte=ua(Oi,hte,"bool"),mte=Zt(Di),gte=!1,yte=ua(Tl,gte,"bool"),Ate=!1,xte=ua(TA,Ate,"bool"),tv;function bte(e){tv=e.wasm.cwrap(zi,null,["number","number","number","number"])}function vte(e){let{backend:t,inputs:a,attrs:n}=e,{reductionIndices:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:d,originalAxes:c,inputWasTransposed:p}=Is(i,r,t);if(p){let A=t.dataIdMap.get(u.dataId).id;l=u,o=A}let h=l.shape.length;T.assertAxesAreInnerMostDims("max",d,h);let[f,m]=T.computeOutAndReduceShapes(l.shape,d),g=v.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(v.sizeFromShape(l.shape)!==0){let A=t.dataIdMap.get(y.dataId).id;tv(o,St[i.dtype],g,A)}if(p&&t.disposeData(u.dataId),s){let A=T.expandShapeToKeepDim(y.shape,c);y.shape=A}return y}var wte={kernelName:zi,backendName:"wasm",setupFunc:bte,kernelFunc:vte},kte=!1,Ite=ua(us,kte),av;function Ste(e){av=e.wasm.cwrap(Li,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Tte(e){let{inputs:t,attrs:a,backend:n}=e,r=t.x,s=n.dataIdMap.get(r.dataId).id;v.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a,d=T.computePool2DInfo(r.shape,i,o,1,l,u),c=d.filterHeight,p=d.filterWidth,h=d.padInfo.top,f=d.padInfo.right,m=d.padInfo.bottom,g=d.padInfo.left,y=d.dilationHeight,A=d.dilationWidth,x=d.strideHeight,b=d.strideWidth,w=d.inChannels,S=d.outChannels;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let C=n.makeOutput(d.outShape,"float32"),N=n.dataIdMap.get(C.dataId).id;return av(s,r.shape[0],r.shape[1],r.shape[2],c,p,h,f,m,g,y,A,x,b,w,S,N),C}var Cte={kernelName:Li,backendName:"wasm",setupFunc:Ste,kernelFunc:Tte},nv;function Nte(e){nv=e.wasm.cwrap(Bi,null,["number, number, number"])}function Ete(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Is(i,r,t),f=c;if(h){let b=t.dataIdMap.get(d.dataId).id;b!==o&&(u=d,l=b,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(g),A=u;u.dtype!=="float32"&&(A=iu({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(A.dataId).id);let x=t.makeOutput(m,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(x.dataId).id;nv(l,y,b)}if(h&&t.disposeData(d.dataId),s){let b=T.expandShapeToKeepDim(x.shape,p);x.shape=b}return u.dtype!=="float32"&&t.disposeData(A.dataId),x}var Rte={kernelName:Bi,backendName:"wasm",setupFunc:Nte,kernelFunc:Ete},rv;function Mte(e){rv=e.wasm.cwrap(Wi,null,["number","number","number","number"])}function $te(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Is(i,r,t);if(h){let x=t.dataIdMap.get(d.dataId).id;x!==o&&(u=d,l=x)}let f=u.shape.length;T.assertAxesAreInnerMostDims("min",c,f);let[m,g]=T.computeOutAndReduceShapes(u.shape,c),y=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(A.dataId).id;rv(l,St[i.dtype],y,x)}if(h&&t.disposeData(d.dataId),s){let x=T.expandShapeToKeepDim(A.shape,p);A.shape=x}return A}var _te={kernelName:Wi,backendName:"wasm",setupFunc:Mte,kernelFunc:$te},Fte=!1,Pte=ua(ds,Fte),R1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(R1||(R1={}));var sv;function Ote(e){sv=e.wasm.cwrap(Vi,null,["number","array","number","number","array","array","number","number"])}function Dte(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((f,m)=>f[0]+t.shape[m]+f[1]),i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=n.map(f=>f[0]),c=n.map(f=>f[1]),p=new Uint8Array(new Int32Array(d).buffer),h=new Uint8Array(new Int32Array(c).buffer);return sv(i,u,t.shape.length,St[t.dtype],p,h,R1[r],l),o}var zte={kernelName:Vi,backendName:"wasm",kernelFunc:Dte,setupFunc:Ote},Lte=!0,Bte=ua(ps,Lte),Wte=Zt(Cl);function O3(e,t){let a=new Int32Array(e.wasm.HEAPU8.buffer,t,4),n=a[0],r=a[1],s=a[2],i=a[3];return e.wasm._free(t),{pSelectedIndices:n,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var iv;function Vte(e){iv=e.wasm.cwrap(Gi,"number",["number","number","number","number","number"])}function Gte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=n,{boxes:o,scores:l}=a,u=t.dataIdMap.get(o.dataId).id,d=t.dataIdMap.get(l.dataId).id,c=iv(u,d,s,r,i),{pSelectedIndices:p,selectedSize:h,pSelectedScores:f,pValidOutputs:m}=O3(t,c);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([h],"int32",p)}var Ute={kernelName:Gi,backendName:"wasm",setupFunc:Vte,kernelFunc:Gte},ov;function jte(e){ov=e.wasm.cwrap(Nl,"number",["number","number","number","number","number","bool"])}function Hte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=n,{boxes:l,scores:u}=a,d=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,p=ov(d,c,s,r,i,o),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=O3(t,p);t.wasm._free(m);let y=t.makeOutput([f],"int32",h),A=t.makeOutput([],"int32",g);return[y,A]}var qte={kernelName:Nl,backendName:"wasm",setupFunc:jte,kernelFunc:Hte},lv;function Xte(e){lv=e.wasm.cwrap(Ui,"number",["number","number","number","number","number","number"])}function Kte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=n,{boxes:l,scores:u}=a,d=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,p=lv(d,c,s,r,i,o),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=O3(t,p);t.wasm._free(g);let y=t.makeOutput([f],"int32",h),A=t.makeOutput([f],"float32",m);return[y,A]}var Zte={kernelName:Ui,backendName:"wasm",setupFunc:Xte,kernelFunc:Kte},Yte=!1,Jte=ua(cs,Yte,"bool"),uv;function Qte(e){uv=e.wasm.cwrap(Rl,null,["number","number","number","number","number"])}function eae(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=a.makeOutput([...r.shape,i],s),d=a.dataIdMap.get(u.dataId).id,c=a.dataIdMap.get(r.dataId).id;return uv(c,i,o,l,d),u}var tae={kernelName:Rl,backendName:"wasm",setupFunc:Qte,kernelFunc:eae};function aae(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var nae={kernelName:El,backendName:"wasm",kernelFunc:aae};function rae(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return E1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=E1({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=L8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeData(d.dataId)),u}var sae={kernelName:Ml,backendName:"wasm",kernelFunc:rae},dv;function iae(e){dv=e.wasm.cwrap(ji,null,["number","array","number","number","array","array","number","number"])}function oae(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((f,m)=>f[0]+t.shape[m]+f[1]);if(v.sizeFromShape(t.shape)===0)return q8({backend:a,attrs:{shape:s,value:r,dtype:t.dtype}});let i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=n.map(f=>f[0]),c=n.map(f=>f[1]),p=new Uint8Array(new Int32Array(d).buffer),h=new Uint8Array(new Int32Array(c).buffer);return dv(i,u,t.shape.length,St[t.dtype],p,h,r,l),o}var pv={kernelName:ji,backendName:"wasm",kernelFunc:oae,setupFunc:iae},lae=!1,uae=ua(Hi,lae),cv;function dae(e){cv=e.wasm.cwrap(qi,null,["number","number","number"])}function pae(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,o=s,l=n,u=l;l.dtype!=="float32"&&(u=iu({backend:a,inputs:{x:n},attrs:{dtype:"float32"}}),o=a.dataIdMap.get(u.dataId).id);let d=a.makeOutput(n.shape,"float32"),c=a.dataIdMap.get(d.dataId).id;return cv(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),d}var cae={kernelName:qi,backendName:"wasm",setupFunc:dae,kernelFunc:pae},hv;function hae(e){hv=e.wasm.cwrap(Xi,null,["number","number","number","number"])}function fae(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Is(i,r,t),f=c;if(h){let x=t.dataIdMap.get(d.dataId).id;x!==o&&(u=d,l=x,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(A.dataId).id;hv(l,y,St[A.dtype],x)}if(h&&t.disposeData(d.dataId),s){let x=T.expandShapeToKeepDim(A.shape,p);A.shape=x}return A}var mae={kernelName:Xi,backendName:"wasm",setupFunc:hae,kernelFunc:fae},gae=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=h3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},yae={kernelName:$l,backendName:"wasm",kernelFunc:gae},Aae=!0,xae=ua(Ci,Aae),bae=Zt(Ki),vae=Zt(Ji),fv;function wae(e){fv=e.wasm.cwrap(Yi,null,["number","number","number","number","number","number","number","number","number","number"])}function kae(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[d,c,p,h]=r.shape,f=[d,l,u,h],m=t.dataIdMap.get(r.dataId),g;m.dtype!=="float32"&&(g=iu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let y=m.id,A=t.makeOutput(f,"float32");if(v.sizeFromShape(r.shape)===0)return A;let x=t.dataIdMap.get(A.dataId).id;return fv(y,d,c,p,h,l,u,s?1:0,i?1:0,x),g!=null&&t.disposeData(g.dataId),A}var Iae={kernelName:Yi,backendName:"wasm",setupFunc:wae,kernelFunc:kae},mv;function Sae(e){mv=e.wasm.cwrap(Zi,null,["number","number","number","number","number","number","number","number","number","number"])}function Tae(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[d,c,p,h]=r.shape,f=[d,l,u,h],m=t.makeOutput(f,"float32");if(v.sizeFromShape(r.shape)===0)return m;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=iu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let A=g.id,x=t.dataIdMap.get(m.dataId).id;return mv(A,d,c,p,h,l,u,s?1:0,i?1:0,x),y!=null&&t.disposeData(y.dataId),m}var Cae={kernelName:Zi,backendName:"wasm",setupFunc:Sae,kernelFunc:Tae},gv;function Nae(e){gv=e.wasm.cwrap(Pl,null,["number","array","number","array","number","number"])}function Eae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=v.parseAxisParam(s,r.shape);if(r.shape.length===0)return Vh({inputs:{x:r},backend:a});let o=a.makeOutput(r.shape,r.dtype),l=a.dataIdMap.get(r.dataId).id,u=a.dataIdMap.get(o.dataId).id,d=new Uint8Array(new Int32Array(i).buffer),c=new Uint8Array(new Int32Array(r.shape).buffer);gv(l,d,i.length,c,r.shape.length,u);let p=za({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),p}var Rae={kernelName:Pl,backendName:"wasm",kernelFunc:Eae,setupFunc:Nae},yv;function Mae(e){yv=e.wasm.cwrap(lo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function $ae(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=n,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(r.dataId).id,d=a.dataIdMap.get(l.dataId).id,[c,p,h,f]=r.shape,[m,g]=T.getImageCenter(o,p,h),y=i===0,A=255,x=typeof i=="number"?[i,i,i,y?0:A]:[...i,A],b=new Uint8Array(new Int32Array(x).buffer);return yv(u,c,p,h,f,s,m,g,b,x.length,d),l}var _ae={kernelName:lo,backendName:"wasm",kernelFunc:$ae,setupFunc:Mae},Fae=Zt(Ol),Pae=Zt(hs),Av;function Oae(e){Av=e.wasm.cwrap(Qi,null,["number","number","number","number","number","number","array","number","number"])}function Dae(e){let{backend:t,inputs:a,attrs:n}=e,{indices:r,updates:s}=a,{shape:i}=n,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=m2.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return Av(h,f,St[s.dtype],l,u,d,m,p,g),o}var zae={kernelName:Qi,backendName:"wasm",setupFunc:Oae,kernelFunc:Dae},xv;function Lae(e){xv=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Bae(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=a.dataIdMap.get(n.dataId).id,o=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(s.dataId).id,u=a.makeOutput(r.shape,r.dtype),d=a.dataIdMap.get(u.dataId).id,c=n.shape.length,p=r.shape.length,h=c===0||c>1||p===1?1:v.sizeFromShape(r.shape.slice(1));return xv(i,o,l,h,d),u}var Wae={kernelName:Dl,backendName:"wasm",kernelFunc:Bae,setupFunc:Lae},bv;function Vae(e){bv=e.wasm.cwrap(fs,null,["number","number"])}function Gae(e){let{backend:t,inputs:{x:a}}=e,n=t.dataIdMap.get(a.dataId).id,r=t.makeOutput(a.shape,a.dtype),s=t.dataIdMap.get(r.dataId).id;return v.sizeFromShape(r.shape)===0||bv(n,s),r}var Uae={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Vae,kernelFunc:Gae},jae=Zt(eo),vv;function Hae(e){vv=e.wasm.cwrap(ao,null,["number","number","number","number"])}function qae(e){let{backend:t,inputs:{logits:a},attrs:{dim:n}}=e,r=t.dataIdMap.get(a.dataId).id,s=t.makeOutput(a.shape,a.dtype),i=t.dataIdMap.get(s.dataId).id,o=a.shape[n],l=v.sizeFromShape(a.shape)/o;return v.sizeFromShape(s.shape)===0||vv(r,i,o,l),s}var Xae={kernelName:ao,backendName:"wasm",setupFunc:Hae,kernelFunc:qae};function Kae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n,o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g{let _=b.shape[0],$=b.shape[1],M=T.segment_util.segOpComputeOptimalWindowSize($,E),I={windowSize:M,inSize:$,batchSize:_,numSegments:E},N=new DJ(I,w),O=a.compileAndRun(N,[b,S],C);if(l.push(O),O.shape[1]===E)return O;let L=mv({backend:a,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),B=xv({inputs:{x:L},backend:a,attrs:{reps:[$/M]}});return l.push(L),l.push(B),g(O,w,B,C,E)},x=g(f,"unsortedSegmentSum",s,m,i),A=ce({inputs:{x},backend:a,attrs:{shape:d}}),y=A;if(p!=null){l.push(A);let b=T.getUndoAxesPermutation(p);y=Ia({inputs:{x:y},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),y}var LJ={kernelName:oh,backendName:"webgl",kernelFunc:zJ},BJ=[FG,DG,BG,UG,HG,XG,ZG,JG,aH,rH,oH,dH,hH,xH,bH,wH,IH,NH,RH,$H,OH,UH,HH,qH,QH,tj,sj,AG,lj,hj,xj,kj,Sj,Cj,Ej,Mj,Pj,Dj,Bj,Vj,Gj,jj,Kj,Yj,tq,nq,iq,uq,pq,mq,yq,kq,Tq,Eq,Rq,$q,Pq,Oq,zq,Bq,Gq,qq,Zq,Jq,tX,rX,lX,cX,xG,fX,pj,xX,bX,kX,bG,CX,MX,_X,DX,BX,GX,qX,YX,tK,rK,iK,dK,cK,fK,AK,bK,wK,IK,TK,RK,PK,zK,jK,kG,ZK,QK,aZ,sZ,KH,lZ,dZ,cZ,mZ,yZ,wG,vZ,kZ,SZ,CZ,NZ,ZH,VK,MZ,FZ,LZ,SG,UZ,jZ,ZZ,QZ,nY,sY,lY,pY,hY,gY,yY,wY,TY,EY,$Y,FY,WH,GK,zY,BY,VY,GY,jY,XY,ZY,JY,eJ,nJ,sJ,oJ,dJ,cJ,fJ,gJ,UK,$G,yJ,wJ,SJ,EJ,$J,_G,PJ,OJ,LJ,uZ];for(let e of BJ)fn(e);var Tt;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(Tt||(Tt={}));var yd;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(yd||(yd={}));var Av;function WJ(e){Av=e.wasm.cwrap(Gr,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function VJ(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n,d=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(s.dataId).id,f=0;if(i!=null){let E=a.dataIdMap.get(i.dataId);if(E.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${E.shape.length}.`);f=E.id}let m=o==null?0:a.dataIdMap.get(o.dataId).id,g=yd[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let x=l?r.shape[2]:r.shape[1],A=u?s.shape[1]:s.shape[2],y=mo.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...y,x,A],r.dtype),w=a.dataIdMap.get(b.dataId).id,S=new Uint8Array(new Int32Array(r.shape).buffer),C=new Uint8Array(new Int32Array(s.shape).buffer);return Av(d,S,r.shape.length,h,C,s.shape.length,l,u,g,f,m,c||0,w),b}var UJ={kernelName:Gr,backendName:"wasm",setupFunc:WJ,kernelFunc:VJ};function Bt(e,t){let a;function n(s){a=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),p=i.dataIdMap.get(u.dataId).id;return v.sizeFromShape(u.shape)===0||a(l,Tt[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var GJ=Bt(vl);function la(e,t,a){let n;function r(i){n=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:p}=l,c=o.dataIdMap.get(u.dataId).id,d=o.dataIdMap.get(p.dataId).id,h=a!=null?a:u.dtype,f=T.assertAndGetBroadcastShape(u.shape,p.shape),m=o.makeOutput(f,h);if(v.sizeFromShape(f)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(p.shape).buffer),A=o.dataIdMap.get(m.dataId).id;return n(c,g,u.shape.length,d,x,p.shape.length,Tt[u.dtype],A),m}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var HJ=!0,jJ=la(Qr,HJ),yv;function qJ(e){yv=e.wasm.cwrap(qs,null,["array","number","number","number"])}function XJ(e){let{inputs:t,backend:a}=e,n=a.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(n.shape)===0)return n;let r=t.map(o=>a.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=a.dataIdMap.get(n.dataId).id;return yv(s,r.length,Tt[n.dtype],i),n}var KJ={kernelName:qs,backendName:"wasm",setupFunc:qJ,kernelFunc:XJ};function Dh(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return Be(a.readSync(t.dataId),t.shape,t.dtype);let n=a.makeOutput(t.shape,t.dtype),r=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(n).set(r),n}var ZJ={kernelName:vi,backendName:"wasm",kernelFunc:Dh},bv;function YJ(e){bv=e.wasm.cwrap(gr,null,["number","array","number","number","number","array","number"])}function Yr(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=QJ(t.x.shape,n.perm),i=!0;for(let f=0;f=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var eQ={kernelName:gr,backendName:"wasm",kernelFunc:Yr,setupFunc:YJ};function os(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=T.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let d=0;d`new shape: ${i}, old shape: ${n.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var hQ={kernelName:jl,backendName:"wasm",kernelFunc:za},Sv;function fQ(e){Sv=e.wasm.cwrap(Js,null,["number","array","number","number","array","number","number","number","number"])}function mQ(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],d=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],f=r.shape.slice(0,-2),m=s.shape.slice(0,-2),g=v.sizeFromShape(f),x=v.sizeFromShape(m),A=mo.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([d,h]);v.assert(p===c,()=>`Error in matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let y=i?[g,p,d]:[g,d,p],b=o?[x,h,c]:[x,c,h],w=za({inputs:{x:r},backend:a,attrs:{shape:y}}),S=za({inputs:{x:s},backend:a,attrs:{shape:b}}),C=a.dataIdMap.get(w.dataId).id,E=a.dataIdMap.get(S.dataId).id,_=i?w.shape[2]:w.shape[1],$=o?S.shape[1]:S.shape[2],M=Math.max(g,x),I=a.makeOutput([M,_,$],w.dtype),N=a.dataIdMap.get(I.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),L=new Uint8Array(new Int32Array(S.shape).buffer);return Sv(C,O,w.shape.length,E,L,S.shape.length,i,o,N),a.disposeData(w.dataId),a.disposeData(S.dataId),I.shape=A,I}var gQ={kernelName:Js,backendName:"wasm",setupFunc:fQ,kernelFunc:mQ};function Hs(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=It.parseSliceParams(t,a,n),o=It.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),p=v.computeStrides(t.shape),c=r.dataIdMap.get(u.dataId);if(o){let f=It.computeFlatOffset(s,p);return t.dtype==="string"?c.stringBytes=l.slice(f,f+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(f,f+v.sizeFromShape(i))),u}if(t.dtype==="string"){let f=Rc(l,s,i,t.shape,t.dtype);return c.stringBytes=f,u}let d=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)xQ(l,p[0],d,s,i);else if(h===3)AQ(l,p[0],p[1],d,s,i);else if(h===4)yQ(l,p[0],p[1],p[2],d,s,i);else{let f=Rc(l,s,i,t.shape,t.dtype);d.set(f)}return u}function xQ(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;ux*A),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),p=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),d=T.getSliceSize(p,i,s.length),h=za({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Yr({inputs:{x:h},backend:a,attrs:{perm:u}}),m=za({inputs:{x:f},backend:a,attrs:{shape:p}}),g=Hs({inputs:{x:m},backend:a,attrs:{begin:c,size:d}});return a.disposeData(h.dataId),a.disposeData(f.dataId),a.disposeData(h.dataId),g}var wQ={kernelName:El,backendName:"wasm",kernelFunc:vQ};function gu(e){let{inputs:{x:t},attrs:{dtype:a},backend:n}=e,r=n.makeOutput(t.shape,a),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var kQ={kernelName:Qs,backendName:"wasm",kernelFunc:gu},IQ=Bt(ei),Tv;function SQ(e){Tv=e.wasm.cwrap(es,null,["number","number","number","number"])}function TQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o=a.dataIdMap.get(r.dataId).id,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(l.dataId).id;return Tv(o,s,i,u),l}var CQ={kernelName:es,backendName:"wasm",setupFunc:SQ,kernelFunc:TQ};function Cv(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);T.assertParamsConsistent(r,n);let s=T.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return Dh({inputs:{x:i[0]},backend:a});let o=a.makeOutput(s,t[0].dtype);if(v.sizeFromShape(s)===0)return o;if(i[0].dtype==="string"){let h=i.map(y=>{let b=[-1,v.sizeFromShape(y.shape.slice(n))];return za({inputs:{x:y},backend:a,attrs:{shape:b}})}),f=h.map(y=>({vals:a.readSync(y.dataId),shape:y.shape}));s=T.computeOutShape(h.map(y=>y.shape),1);let m=h[0].shape[0]===1,g=r3(f,s,t[0].dtype,m),x=T.computeOutShape(i.map(y=>y.shape),n);o.shape=x;let A=a.dataIdMap.get(o.dataId);return A.stringBytes=T.fromStringArrayToUint8(g),h.forEach(y=>a.disposeData(y.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,p=i.map(h=>{let f=v.sizeFromShape(h.shape.slice(n));return u+=f,f}),c=i.map(h=>a.typedArrayFromHeap(h)),d=a.typedArrayFromHeap(o);for(let h=0;h`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=T.getAxesPermutation([s],l),p=r;u!==null&&(p=Yr({inputs:{x:r},attrs:{perm:u},backend:a}));let c=T.getInnerMostAxes(1,l)[0];T.assertAxesAreInnerMostDims("cumprod",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],f=a.dataIdMap.get(p.dataId).id,m=a.dataIdMap.get(d.dataId).id;Mv(f,i?1:0,o?1:0,h,m,Tt[r.dtype]);let g=d;if(u!==null){let x=T.getUndoAxesPermutation(u);g=Yr({inputs:{x:d},attrs:{perm:x},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var VQ={kernelName:si,backendName:"wasm",setupFunc:BQ,kernelFunc:WQ},$v;function UQ(e){$v=e.wasm.cwrap(ii,null,["number","number","number","number","number","number"])}function GQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=T.getAxesPermutation([s],l),p=r;u!==null&&(p=Yr({inputs:{x:r},attrs:{perm:u},backend:a}));let c=T.getInnerMostAxes(1,l)[0];T.assertAxesAreInnerMostDims("cumsum",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],f=a.dataIdMap.get(p.dataId).id,m=a.dataIdMap.get(d.dataId).id;$v(f,i?1:0,o?1:0,h,m,Tt[r.dtype]);let g=d;if(u!==null){let x=T.getUndoAxesPermutation(u);g=Yr({inputs:{x:d},attrs:{perm:x},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var HQ={kernelName:ii,backendName:"wasm",setupFunc:UQ,kernelFunc:GQ},_v;function jQ(e){_v=e.wasm.cwrap(li,null,["number","number","number","array","number","array","array","number","number"])}function qQ(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),f=i==="NHWC"?[o,c,d,h]:[o,h,c,d],m=t.makeOutput(f,"float32"),g=t.dataIdMap.get(r.dataId).id,x=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(f).buffer),y=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer),b=t.dataIdMap.get(m.dataId).id;return _v(g,s,i==="NHWC"?1:0,x,r.shape.length-1,A,y,f.length,b),m}var XQ={kernelName:li,backendName:"wasm",setupFunc:jQ,kernelFunc:qQ},Pv;function KQ(e){Pv=e.wasm.cwrap(ui,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ZQ(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:c}=a,d=u==null?[1,1]:u,h=T.computeConv2DInfo(r.shape,s.shape,l,d,p,c,!0),f=h.filterHeight,m=h.filterWidth,g=h.padInfo.top,x=h.padInfo.right,A=h.padInfo.bottom,y=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,S=h.strideHeight,C=h.strideWidth,E=h.inChannels,_=h.outChannels,$=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let M=n.makeOutput(h.outShape,"float32"),I=n.dataIdMap.get(M.dataId).id;return Pv(i,r.shape[0],r.shape[1],r.shape[2],o,f,m,g,x,A,y,$,b,w,S,C,E,_,I),M}var YQ={kernelName:ui,backendName:"wasm",setupFunc:KQ,kernelFunc:ZQ},JQ=Bt(pi),QQ=!1,eee=la(ci,QQ,"bool"),tee=Bt(hi,"float32");function C1(e){let{inputs:t,attrs:a,backend:n}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),za({inputs:{x:r},backend:n,attrs:{shape:o}})}var aee={kernelName:$l,backendName:"wasm",kernelFunc:C1};function Fv(e){let{attrs:{shape:t,value:a,dtype:n},backend:r}=e,s=r.makeOutput(t,n);return r.typedArrayFromHeap(s).fill(a),s}var nee={kernelName:Pl,backendName:"wasm",kernelFunc:Fv},Ov;function ree(e){Ov=e.wasm.cwrap(fi,null,["number","number","number","number","number","number"])}function see(e){let{inputs:t,backend:a}=e,{image:n}=t,r=a.makeOutput(n.shape,n.dtype),s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,[o,l,u,p]=n.shape;return Ov(s,o,l,u,p,i),r}var iee={kernelName:fi,backendName:"wasm",kernelFunc:see,setupFunc:ree},oee=Bt(mi),lee=!1,uee=la(gi,lee),Dv;function dee(e){Dv=e.wasm.cwrap(xi,null,["number","number","number","number","number","number","number"])}function pee(e){let{backend:t,inputs:a,attrs:n}=e,{varianceEpsilon:r}=n,{x:s,mean:i,variance:o,offset:l,scale:u}=a,p=t.dataIdMap.get(s.dataId).id,c=t.dataIdMap.get(i.dataId).id,d=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return Dv(p,c,d,h,f,r,g),m}var cee={kernelName:xi,backendName:"wasm",setupFunc:dee,kernelFunc:pee},zv;function hee(e){zv=e.wasm.cwrap(Hr,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function fee(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=a,m=T.computeConv2DInfo(r.shape,s.shape,l,p,u,d),g=yd[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let x=n.dataIdMap.get(r.dataId).id,A=n.dataIdMap.get(s.dataId).id,y=m.outChannels,b=0;if(i!=null){let Z=n.dataIdMap.get(i.dataId);if(Z.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Z.shape.length}.`);if(Z.shape[0]!==y)throw new Error(`FusedConv2D bias shape (${Z.shape}) does not match the number of output channels (${y})`);b=Z.id}let w=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,E=m.padInfo.right,_=m.padInfo.bottom,$=m.padInfo.left,M=m.dilationHeight,I=m.dilationWidth,N=m.strideHeight,O=m.strideWidth,L=m.inChannels,B=m.padInfo.type==="SAME"?1:0,G=m.batchSize,j=m.inHeight,U=m.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(m.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Q=o==null?0:n.dataIdMap.get(o.dataId).id;return zv(x,G,j,U,A,w,S,b,C,E,_,$,B,M,I,N,O,L,y,g,Q,f||0,V),H}var mee={kernelName:Hr,backendName:"wasm",setupFunc:hee,kernelFunc:fee},Lv;function gee(e){Lv=e.wasm.cwrap(jr,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function xee(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=a,m=T.computeConv2DInfo(r.shape,s.shape,l,p,u,d,!0),g=yd[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=n.dataIdMap.get(r.dataId).id,A=n.dataIdMap.get(s.dataId).id,y=m.outChannels,b=0;if(i!=null){let Z=n.dataIdMap.get(i.dataId);if(Z.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Z.shape.length}.`);if(Z.shape[0]!==y)throw new Error(`FusedDepthwiseConv2D bias shape (${Z.shape}) does not match the number of output channels (${y})`);b=Z.id}let w=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,E=m.padInfo.right,_=m.padInfo.bottom,$=m.padInfo.left,M=m.dilationHeight,I=m.dilationWidth,N=m.strideHeight,O=m.strideWidth,L=m.inChannels,B=m.padInfo.type==="SAME"?1:0,G=m.batchSize,j=m.inHeight,U=m.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(m.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Q=o==null?0:n.dataIdMap.get(o.dataId).id;return Lv(x,G,j,U,A,w,S,b,C,E,_,$,B,M,I,N,O,L,y,g,Q,f||0,V),H}var Aee={kernelName:jr,backendName:"wasm",setupFunc:gee,kernelFunc:xee},Bv;function yee(e){Bv=e.wasm.cwrap(Ai,null,["number","number","number","number","number","number","array","number"])}function bee(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=u2.prepareAndValidate(n,r),u=t.makeOutput(s,n.dtype);if(i===0)return u;let p=r.shape,c=p[p.length-1],d=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(r.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(u.dataId).id;return Bv(d,Tt[n.dtype],h,i,c,o,f,m),u}var vee={kernelName:Ai,backendName:"wasm",setupFunc:yee,kernelFunc:bee},Wv;function wee(e){Wv=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function kee(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,indices:s}=a,{axis:i,batchDims:o}=n,l=v.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),p=r.shape[l];for(let C=0;C=0,()=>`GatherV2: the index value ${E} is not in [0, ${p-1}]`)}let c=T.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=za({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),f=za({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),m=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(m,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let x=d.shape.length-1,A=t.dataIdMap.get(d.dataId).id,y=t.dataIdMap.get(f.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(d.shape)).buffer),S=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer);return Wv(A,Tt[r.dtype],w,x,y,c.batchSize,S,b),t.disposeData(d.dataId),t.disposeData(f.dataId),g.shape=c.outputShape,g}var Iee={kernelName:Fl,backendName:"wasm",setupFunc:wee,kernelFunc:kee},See=!1,Tee=la(yi,See,"bool"),Cee=!1,Nee=la(bi,Cee,"bool"),Eee=Bt(wi,"bool"),Vv;function Ree(e){Vv=e.wasm.cwrap(ki,null,["number","number","number","number"])}function Mee(e){let{inputs:{x:t},attrs:{alpha:a},backend:n}=e,r=n.dataIdMap.get(t.dataId).id,s=n.makeOutput(t.shape,"float32");if(v.sizeFromShape(t.shape)!==0){let i=n.dataIdMap.get(s.dataId).id;Vv(r,Tt[t.dtype],a,i)}return s}var $ee={kernelName:ki,backendName:"wasm",setupFunc:Ree,kernelFunc:Mee},_ee=!1,Pee=la(Ii,_ee,"bool"),Fee=!1,Oee=la(Si,Fee,"bool"),Dee=Bt(Ti),zee=!1,Lee=la(Ci,zee,"bool"),Bee=Bt(Ni),Wee=!1,Vee=la(Ll,Wee,"bool"),Uee=!1,Gee=la(fA,Uee,"bool"),Uv;function Hee(e){Uv=e.wasm.cwrap(Ei,null,["number","number","number","number"])}function jee(e){let{backend:t,inputs:a,attrs:n}=e,{reductionIndices:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:c,inputWasTransposed:d}=os(i,r,t);if(d){let A=t.dataIdMap.get(u.dataId).id;l=u,o=A}let h=l.shape.length;T.assertAxesAreInnerMostDims("max",p,h);let[f,m]=T.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(m),x=t.makeOutput(f,i.dtype);if(v.sizeFromShape(l.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Uv(o,Tt[i.dtype],g,A)}if(d&&t.disposeData(u.dataId),s){let A=T.expandShapeToKeepDim(x.shape,c);x.shape=A}return x}var qee={kernelName:Ei,backendName:"wasm",setupFunc:Hee,kernelFunc:jee},Xee=!1,Kee=la(Ri,Xee),Gv;function Zee(e){Gv=e.wasm.cwrap(Mi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Yee(e){let{inputs:t,attrs:a,backend:n}=e,r=t.x,s=n.dataIdMap.get(r.dataId).id;v.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a,p=T.computePool2DInfo(r.shape,i,o,1,l,u),c=p.filterHeight,d=p.filterWidth,h=p.padInfo.top,f=p.padInfo.right,m=p.padInfo.bottom,g=p.padInfo.left,x=p.dilationHeight,A=p.dilationWidth,y=p.strideHeight,b=p.strideWidth,w=p.inChannels,S=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let C=n.makeOutput(p.outShape,"float32"),E=n.dataIdMap.get(C.dataId).id;return Gv(s,r.shape[0],r.shape[1],r.shape[2],c,d,h,f,m,g,x,A,y,b,w,S,E),C}var Jee={kernelName:Mi,backendName:"wasm",setupFunc:Zee,kernelFunc:Yee},Hv;function Qee(e){Hv=e.wasm.cwrap($i,null,["number, number, number"])}function ete(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=os(i,r,t),f=c;if(h){let b=t.dataIdMap.get(p.dataId).id;b!==o&&(u=p,l=b,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),x=v.sizeFromShape(g),A=u;u.dtype!=="float32"&&(A=gu({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(A.dataId).id);let y=t.makeOutput(m,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;Hv(l,x,b)}if(h&&t.disposeData(p.dataId),s){let b=T.expandShapeToKeepDim(y.shape,d);y.shape=b}return u.dtype!=="float32"&&t.disposeData(A.dataId),y}var tte={kernelName:$i,backendName:"wasm",setupFunc:Qee,kernelFunc:ete},jv;function ate(e){jv=e.wasm.cwrap(_i,null,["number","number","number","number"])}function nte(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=os(i,r,t);if(h){let y=t.dataIdMap.get(p.dataId).id;y!==o&&(u=p,l=y)}let f=u.shape.length;T.assertAxesAreInnerMostDims("min",c,f);let[m,g]=T.computeOutAndReduceShapes(u.shape,c),x=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let y=t.dataIdMap.get(A.dataId).id;jv(l,Tt[i.dtype],x,y)}if(h&&t.disposeData(p.dataId),s){let y=T.expandShapeToKeepDim(A.shape,d);A.shape=y}return A}var rte={kernelName:_i,backendName:"wasm",setupFunc:ate,kernelFunc:nte},ste=!1,ite=la(Pi,ste),N1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(N1||(N1={}));var qv;function ote(e){qv=e.wasm.cwrap(Fi,null,["number","array","number","number","array","array","number","number"])}function lte(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((f,m)=>f[0]+t.shape[m]+f[1]),i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=n.map(f=>f[0]),c=n.map(f=>f[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return qv(i,u,t.shape.length,Tt[t.dtype],d,h,N1[r],l),o}var ute={kernelName:Fi,backendName:"wasm",kernelFunc:lte,setupFunc:ote},dte=!0,pte=la(Oi,dte),cte=Bt(Wl);function R3(e,t){let a=new Int32Array(e.wasm.HEAPU8.buffer,t,4),n=a[0],r=a[1],s=a[2],i=a[3];return e.wasm._free(t),{pSelectedIndices:n,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var Xv;function hte(e){Xv=e.wasm.cwrap(zi,"number",["number","number","number","number","number"])}function fte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=n,{boxes:o,scores:l}=a,u=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(l.dataId).id,c=Xv(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:f,pValidOutputs:m}=R3(t,c);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([h],"int32",d)}var mte={kernelName:zi,backendName:"wasm",setupFunc:hte,kernelFunc:fte},Kv;function gte(e){Kv=e.wasm.cwrap(Vl,"number",["number","number","number","number","number","bool"])}function xte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=n,{boxes:l,scores:u}=a,p=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,d=Kv(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=R3(t,d);t.wasm._free(m);let x=t.makeOutput([f],"int32",h),A=t.makeOutput([],"int32",g);return[x,A]}var Ate={kernelName:Vl,backendName:"wasm",setupFunc:gte,kernelFunc:xte},Zv;function yte(e){Zv=e.wasm.cwrap(Li,"number",["number","number","number","number","number","number"])}function bte(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=n,{boxes:l,scores:u}=a,p=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,d=Zv(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=R3(t,d);t.wasm._free(g);let x=t.makeOutput([f],"int32",h),A=t.makeOutput([f],"float32",m);return[x,A]}var vte={kernelName:Li,backendName:"wasm",setupFunc:yte,kernelFunc:bte},wte=!1,kte=la(Di,wte,"bool"),Yv;function Ite(e){Yv=e.wasm.cwrap(Bi,null,["number","number","number","number","number"])}function Ste(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=a.makeOutput([...r.shape,i],s),p=a.dataIdMap.get(u.dataId).id,c=a.dataIdMap.get(r.dataId).id;return Yv(c,i,o,l,p),u}var Tte={kernelName:Bi,backendName:"wasm",setupFunc:Ite,kernelFunc:Ste};function Cte(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var Nte={kernelName:Ul,backendName:"wasm",kernelFunc:Cte};function Ete(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return C1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=C1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Cv({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Rte={kernelName:Gl,backendName:"wasm",kernelFunc:Ete},Jv;function Mte(e){Jv=e.wasm.cwrap(Wi,null,["number","array","number","number","array","array","number","number"])}function $te(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((f,m)=>f[0]+t.shape[m]+f[1]);if(v.sizeFromShape(t.shape)===0)return Fv({backend:a,attrs:{shape:s,value:r,dtype:t.dtype}});let i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=n.map(f=>f[0]),c=n.map(f=>f[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Jv(i,u,t.shape.length,Tt[t.dtype],d,h,r,l),o}var Qv={kernelName:Wi,backendName:"wasm",kernelFunc:$te,setupFunc:Mte},_te=!1,Pte=la(Vi,_te),e8;function Fte(e){e8=e.wasm.cwrap(Ui,null,["number","number","number"])}function Ote(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,o=s,l=n,u=l;l.dtype!=="float32"&&(u=gu({backend:a,inputs:{x:n},attrs:{dtype:"float32"}}),o=a.dataIdMap.get(u.dataId).id);let p=a.makeOutput(n.shape,"float32"),c=a.dataIdMap.get(p.dataId).id;return e8(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var Dte={kernelName:Ui,backendName:"wasm",setupFunc:Fte,kernelFunc:Ote},t8;function zte(e){t8=e.wasm.cwrap(Gi,null,["number","number","number","number"])}function Lte(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=os(i,r,t),f=c;if(h){let y=t.dataIdMap.get(p.dataId).id;y!==o&&(u=p,l=y,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),x=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let y=t.dataIdMap.get(A.dataId).id;t8(l,x,Tt[A.dtype],y)}if(h&&t.disposeData(p.dataId),s){let y=T.expandShapeToKeepDim(A.shape,d);A.shape=y}return A}var Bte={kernelName:Gi,backendName:"wasm",setupFunc:zte,kernelFunc:Lte},Wte=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=o3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Vte={kernelName:Hl,backendName:"wasm",kernelFunc:Wte},Ute=!0,Gte=la(di,Ute),Hte=Bt(Hi),jte=Bt(ji),qte=Bt(Ki),a8;function Xte(e){a8=e.wasm.cwrap(Xi,null,["number","number","number","number","number","number","number","number","number","number"])}function Kte(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[p,c,d,h]=r.shape,f=[p,l,u,h],m=t.dataIdMap.get(r.dataId),g;m.dtype!=="float32"&&(g=gu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let x=m.id,A=t.makeOutput(f,"float32");if(v.sizeFromShape(r.shape)===0)return A;let y=t.dataIdMap.get(A.dataId).id;return a8(x,p,c,d,h,l,u,s?1:0,i?1:0,y),g!=null&&t.disposeData(g.dataId),A}var Zte={kernelName:Xi,backendName:"wasm",setupFunc:Xte,kernelFunc:Kte},n8;function Yte(e){n8=e.wasm.cwrap(qi,null,["number","number","number","number","number","number","number","number","number","number"])}function Jte(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[p,c,d,h]=r.shape,f=[p,l,u,h],m=t.makeOutput(f,"float32");if(v.sizeFromShape(r.shape)===0)return m;let g=t.dataIdMap.get(r.dataId),x;g.dtype!=="float32"&&(x=gu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(x.dataId));let A=g.id,y=t.dataIdMap.get(m.dataId).id;return n8(A,p,c,d,h,l,u,s?1:0,i?1:0,y),x!=null&&t.disposeData(x.dataId),m}var Qte={kernelName:qi,backendName:"wasm",setupFunc:Yte,kernelFunc:Jte},r8;function eae(e){r8=e.wasm.cwrap(Zi,null,["number","array","number","array","number","number"])}function tae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=v.parseAxisParam(s,r.shape);if(r.shape.length===0)return Dh({inputs:{x:r},backend:a});let o=a.makeOutput(r.shape,r.dtype),l=a.dataIdMap.get(r.dataId).id,u=a.dataIdMap.get(o.dataId).id,p=new Uint8Array(new Int32Array(i).buffer),c=new Uint8Array(new Int32Array(r.shape).buffer);r8(l,p,i.length,c,r.shape.length,u);let d=za({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),d}var aae={kernelName:Zi,backendName:"wasm",kernelFunc:tae,setupFunc:eae},s8;function nae(e){s8=e.wasm.cwrap(ho,null,["number","number","number","number","number","number","number","number","array","number","number"])}function rae(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=n,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(r.dataId).id,p=a.dataIdMap.get(l.dataId).id,[c,d,h,f]=r.shape,[m,g]=T.getImageCenter(o,d,h),x=i===0,A=255,y=typeof i=="number"?[i,i,i,x?0:A]:[...i,A],b=new Uint8Array(new Int32Array(y).buffer);return s8(u,c,d,h,f,s,m,g,b,y.length,p),l}var sae={kernelName:ho,backendName:"wasm",kernelFunc:rae,setupFunc:nae},iae=Bt(ql),oae=Bt(Yi),i8;function lae(e){i8=e.wasm.cwrap(Ji,null,["number","number","number","number","number","number","array","number","number"])}function uae(e){let{backend:t,inputs:a,attrs:n}=e,{indices:r,updates:s}=a,{shape:i}=n,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=d2.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return i8(h,f,Tt[s.dtype],l,u,p,m,d,g),o}var dae={kernelName:Ji,backendName:"wasm",setupFunc:lae,kernelFunc:uae},o8;function pae(e){o8=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function cae(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=a.dataIdMap.get(n.dataId).id,o=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(s.dataId).id,u=a.makeOutput(r.shape,r.dtype),p=a.dataIdMap.get(u.dataId).id,c=n.shape.length,d=r.shape.length,h=c===0||c>1||d===1?1:v.sizeFromShape(r.shape.slice(1));return o8(i,o,l,h,p),u}var hae={kernelName:Xl,backendName:"wasm",kernelFunc:cae,setupFunc:pae},l8;function fae(e){l8=e.wasm.cwrap(eo,null,["number","number"])}function mae(e){let{backend:t,inputs:{x:a}}=e,n=t.dataIdMap.get(a.dataId).id,r=t.makeOutput(a.shape,a.dtype),s=t.dataIdMap.get(r.dataId).id;return v.sizeFromShape(r.shape)===0||l8(n,s),r}var gae={kernelName:"Sigmoid",backendName:"wasm",setupFunc:fae,kernelFunc:mae},xae=Bt(Qi),u8;function Aae(e){u8=e.wasm.cwrap(no,null,["number","number","number","number"])}function yae(e){let{backend:t,inputs:{logits:a},attrs:{dim:n}}=e,r=t.dataIdMap.get(a.dataId).id,s=t.makeOutput(a.shape,a.dtype),i=t.dataIdMap.get(s.dataId).id,o=a.shape[n],l=v.sizeFromShape(a.shape)/o;return v.sizeFromShape(s.shape)===0||u8(r,i,o,l),s}var bae={kernelName:no,backendName:"wasm",setupFunc:Aae,kernelFunc:yae};function vae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n,o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g0?l+1:0;if(u<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=r.shape.slice();d[0]=u;let c=a.dataIdMap.get(r.dataId).id,p=a.dataIdMap.get(s.dataId).id,h=a.dataIdMap.get(i.dataId).id,f=a.makeOutput(d,r.dtype),m=a.dataIdMap.get(f.dataId).id,g=a.makeOutput([4],"int32"),y=a.dataIdMap.get(g.dataId).id;Iv(c,St[r.dtype],r.shape[0],p,h,m,y,t,0);let A=a.readSync(g.dataId),x;switch(A[0]){case 0:{x=T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(A[1],A[2]);break;case 3:x=T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A[1],A[2],A[3]);break;default:x=""}if(a.disposeData(g.dataId),x)throw a.disposeData(f.dataId),new Error(x);return f}function nne(e){return Tv(e,!0)}var rne={kernelName:Dd,backendName:"wasm",setupFunc:Sv,kernelFunc:nne};function sne(e){return Tv(e,!1)}var ine={kernelName:zd,backendName:"wasm",setupFunc:Sv,kernelFunc:sne};function one(e){let{inputs:t,attrs:a,backend:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),d=r.shape.slice();return l.map(c=>{let p=[...d];p[o]=c;let h=pi({inputs:{x:r},attrs:{begin:u,size:p},backend:n});return u[o]+=c,h})}var lne={kernelName:Wl,backendName:"wasm",kernelFunc:one},une=Zt(ms),dne=Zt(Bd),pne=!0,cne=ua(gs,pne),Cv;function hne(e){Cv=e.wasm.cwrap(oo,null,["number","number","number","number"])}function fne(e){let{backend:t,inputs:a,attrs:n}=e,{alpha:r}=n,{x:s}=a,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return Cv(i,r,St[s.dtype],l),o}var mne={kernelName:oo,backendName:"wasm",setupFunc:hne,kernelFunc:fne},Nv;function gne(e){Nv=e.wasm.cwrap(no,null,["number","array","number","array","array","array","array","array","number","number"])}function yne(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:y,begin:A,end:x,strides:b}=At.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(m)w=za({inputs:{x:r},backend:t,attrs:{shape:f}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=At.computeOutShape(A,x,b),C=pi({inputs:{x:r},backend:t,attrs:{begin:A,size:S}});w=za({inputs:{x:C},backend:t,attrs:{shape:f}}),t.disposeData(C.dataId)}else{let S=t.makeOutput(h,"float32"),C=t.dataIdMap.get(r.dataId).id,N=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),_=new Uint8Array(new Int32Array(A).buffer),$=new Uint8Array(new Int32Array(x).buffer),M=new Uint8Array(new Int32Array(b).buffer),I=new Uint8Array(new Int32Array(h).buffer),E=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(S.dataId).id;Nv(C,N,r.shape.length,_,$,M,I,E,h.length,O),w=za({inputs:{x:S},backend:t,attrs:{shape:f}}),t.disposeData(S.dataId)}return w}var Ane={kernelName:no,backendName:"wasm",setupFunc:gne,kernelFunc:yne};function xne(e){let{backend:t,inputs:a,attrs:n}=e,{data:r,dataSplits:s}=a,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:d,preserveShortSequences:c}=n,p=t.readSync(r.dataId),h=t.readSync(s.dataId),[f,m]=m3(p,h,i,o,l,u,d,c),g=t.makeOutput([f.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=f;let A=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(A).set(m),[g,A]}var bne={kernelName:Gl,backendName:"wasm",kernelFunc:xne};function vne(e){let{backend:t,inputs:a,attrs:n}=e,{input:r,delimiter:s}=a,{skipEmpty:i}=n,o=t.readSync(r.dataId),l=t.readSync(s.dataId),[u,d,c]=g3(o,l[0],i),p=d.length,h=t.makeOutput([p,2],"int32");t.typedArrayFromHeap(h).set(u);let f=t.makeOutput([p],"string"),m=t.dataIdMap.get(f.dataId);m.stringBytes=d;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,f,g]}var wne={kernelName:Wd,backendName:"wasm",kernelFunc:vne};function kne(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=y3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Ine={kernelName:Vd,backendName:"wasm",kernelFunc:kne},Sne=!0,Tne=ua(ys,Sne),Ev;function Cne(e){Ev=e.wasm.cwrap(to,null,["number","number","number","number"])}function Nne(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Is(i,r,t),f=c;if(h){let x=t.dataIdMap.get(d.dataId).id;x!==o&&(u=d,l=x,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),y=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(A.dataId).id;Ev(l,y,St[A.dtype],x)}if(h&&t.disposeData(d.dataId),s){let x=T.expandShapeToKeepDim(A.shape,p);A.shape=x}return A}var Ene={kernelName:to,backendName:"wasm",setupFunc:Cne,kernelFunc:Nne},Rne=Zt(Ul),Mne=Zt(ro),Rv;function $ne(e){Rv=e.wasm.cwrap(As,null,["number","array","number","array","number","number"])}function _ne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,s=a.dataIdMap.get(r.dataId).id,{reps:i}=n,o=new Array(r.shape.length);for(let p=0;p{let{x:n}=e,{k:r,sorted:s}=a,i=t.dataIdMap.get(n.dataId).id,o=new Uint8Array(new Int32Array(n.shape).buffer),l=n.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,n.dtype),d=t.dataIdMap.get(u.dataId).id,c=t.makeOutput(l,"int32"),p=t.dataIdMap.get(c.dataId).id;return Mv(i,o,n.shape.length,St[n.dtype],r,s,d,p),[u,c]},Dne={kernelName:so,backendName:"wasm",setupFunc:Pne,kernelFunc:One},$v;function zne(e){$v=e.wasm.cwrap(io,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Lne(e){let{backend:t,inputs:a,attrs:n}=e,{image:r,transforms:s}=a,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[f,m]=u!=null?u:[c,p],g=[d,f,m,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),x=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(x.dataId).id,w=t.dataIdMap.get(r.dataId).id,S=t.dataIdMap.get(s.dataId).id,C=i==="nearest"?1:2,N;switch(o){case"constant":N=1;break;case"reflect":N=2;break;case"wrap":N=3;break;case"nearest":N=4;break;default:N=1;break}return $v(w,S,s.shape[0]>1,d,f,m,h,p,c,y,r.shape.length-1,A,g.length-1,C,N,l,b),x}var Bne={kernelName:io,backendName:"wasm",setupFunc:zne,kernelFunc:Lne};function Wne(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h({dataId:h,dtype:f,shape:l}))}var Vne={kernelName:jl,backendName:"wasm",kernelFunc:Wne};function Gne(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var Une={kernelName:Hl,backendName:"wasm",kernelFunc:Gne},jne=[xQ,bQ,wQ,SQ,_Q,OQ,LQ,VQ,HQ,JQ,QQ,eee,nee,ree,oee,dee,pee,cee,mee,Aee,vee,Iee,Cee,Nee,Ree,Mee,$ee,_ee,Oee,Dee,Lee,Vee,jee,Xee,Yee,ete,ate,rte,TQ,ote,ute,pte,cte,fte,mte,yte,xte,wte,Ite,Cte,Rte,_te,Pte,zte,Bte,Wte,Ute,qte,Zte,Jte,tae,nae,sae,pv,uae,cae,mae,yae,xae,bae,vae,GQ,Iae,Cae,Rae,_ae,Fae,Pae,zae,Wae,Uae,jae,ZQ,Xae,Zae,Qae,ane,rne,ine,lne,une,dne,cne,mne,Ane,bne,wne,Ine,Tne,Ene,Rne,Mne,Fne,Dne,Bne,RQ,Vne,Une];for(let e of jne)hn(e);var M1=V();M1.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(e){return!1}});M1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(M1.get("IS_NODE"))return!1;try{return 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(e){return!1}});var Gy=hl(MS()),Hne=hl($S()),Uy=hl(_S()),jy=Gy.default||Gy,qne=Uy.default||Uy,_v=class extends fl{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Fv),$1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new md(this,kt())}write(e,t,a){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,a,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,a,n,r){let s=this.dataIdNextNumber++;if(n==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:a,dtype:n,memoryOffset:null,refCount:r});return}let i=v.sizeFromShape(a),o=i*v.bytesPerElement(n),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:a,dtype:n,refCount:r}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e,t,a){let{memoryOffset:n,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(a==null||a>=i.length)?i:i.slice(t,a);t=t||0,a=a||v.sizeFromShape(s);let o=v.bytesPerElement(r),l=this.wasm.HEAPU8.slice(n+t*o,n+a*o);return Zne(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let a=this.dataIdMap.get(e);if(a.refCount--,!t&&a.refCount>0)return!1;this.wasm._free(a.memoryOffset),this.wasm.tfjs.disposeData(a.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,a){let n;if(a==null)n=this.write(null,e,t);else{let r=this.dataIdNextNumber++;n={id:r},this.dataIdMap.set(n,{id:r,memoryOffset:a,shape:e,dtype:t,refCount:1});let s=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,a)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:a}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(a),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,r,s);case"int32":return new Int32Array(n,r,s);case"bool":return new Uint8Array(n,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function Xne(e){return(t,a)=>(v.fetch(e,{credentials:"same-origin"}).then(n=>{n.ok||t.env.a(`failed to load wasm binary file at '${e}'`),n.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{a(s.instance,s.module)})})}),{})}function Hy(e,t,a){if(zc!=null)return zc;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),qu!=null&&qu[n]!=null?qu[n]:a+n}async function Kne(){let[e,t]=await Promise.all([V().getAsync("WASM_HAS_SIMD_SUPPORT"),V().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=Hne.wasmWorkerContents.replace(/\n/g,"\\n"),d=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(d)}return o.endsWith(".wasm")?Hy(e,t,Gu!=null?Gu:l):l+o},D3&&(r.instantiateWasm=Xne(Hy(e,t,Gu!=null?Gu:"")));let s=!1;r.onAbort=()=>{s||Xu||(Xu=!0,n({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))};let i;t&&e&&zc==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+jy.toString()],{type:"text/javascript"}),i=jy(r)):i=qne(r),i.then(o=>{s=!0,Xu=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},a({wasm:o})}).catch(n)})}function Zne(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var Yne=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],zc=null,Gu=null,qu={},Xu=!1,D3=!1;function Jne(e,t=!1){if(d2("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Xu)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");zc=e,D3=t}function Gh(e,t=!1){if(Xu)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Gu=e;else{qu=e;let a=Yne.filter(n=>qu[n]==null);if(a.length>0)throw new Error(`There were no entries found for the following binaries: ${a.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}D3=t}var Fv=-1,$1=-1;function Qne(e){Fv=e}function ere(){if($1===-1)throw new Error("WASM backend not initialized.");return $1}var tre="4.0.0",are=2;uo("wasm",async()=>{let{wasm:e}=await Kne();return new _v(e)},are);var Tr=V();Tr.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);Tr.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);Tr.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);Tr.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!1);Tr.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);Tr.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);Tr.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);Tr.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);Tr.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);var nre=class{constructor(e){e&&(this.vendor=e.vendor)}isIntel(){return this.vendor==="intel"}},rre=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,a=!1){let n=qy(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let s=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(s),s}this.numBytesAllocated+=e;let r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a});return this.usedBuffers.get(n).push(r),r}releaseBuffer(e,t,a){if(this.freeBuffers.size===0)return;let n=qy(t,a);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let r=this.usedBuffers.get(n),s=r.indexOf(e);if(s<0)throw new Error("Cannot release a buffer that was never provided by this buffer manager");r.splice(s,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,a){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,a)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function qy(e,t){return`${e}_${t}`}var sre=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,a,n){let r=Ky(a),s=e*t*r,i=Xy(e,t,a,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=s,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let l=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(l),l}this.numBytesAllocated+=s;let o=this.device.createTexture({size:[e,t],format:a,usage:n});return this.usedTextures.get(i).push(o),o}releaseTexture(e,t,a,n,r){if(this.freeTextures.size===0)return;let s=Xy(t,a,n,r);this.freeTextures.has(s)||this.freeTextures.set(s,[]),this.freeTextures.get(s).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(s),o=i.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(o,1);let l=Ky(n),u=t*a*l;this.numBytesUsed-=u}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Xy(e,t,a,n){return`${e}_${t}_${a}_${n}`}function Ky(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function ire(e,t){if(Math.max(...e)>3)throw new Error("Cannot symbolically compute strides for rank > 4 tensor.");let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}var ore=(e,t,a,n)=>{let r={dtype:n.dtype,shape:n.shape},s=lre(a,r,t),i=e.createShaderModule({code:s,label:t.constructor.name});return e.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})};function na(e){if(e<=1)return"i32";if(e===2)return"vec2";if(e===3)return"vec3";if(e===4)return"vec4";if(e===5)return"vec5";if(e===6)return"vec6";throw Error(`GPU for rank ${e} is not yet supported`)}function Ar(e){if(e===0)return"x";if(e===1)return"y";if(e===2)return"z";if(e===3)return"w";if(e===4)return"u";if(e===5)return"v";throw Error(`Index ${e} is not yet supported`)}function We(...e){let t;switch(e.length){case 0:t=` - ${hd()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(); - } - + ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(n.dataId).id,o=t.dataIdMap.get(r.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=n.shape[0],p=v.sizeFromShape(s.shape),c=t.makeOutput([u,p],n.dtype),d=t.dataIdMap.get(c.dataId).id,h=t.makeOutput([p],s.dtype),f=t.dataIdMap.get(h.dataId).id,m=t.makeOutput([3],"int32"),g=t.dataIdMap.get(m.dataId).id;p8(i,o,l,u,d,f,g);let x=t.readSync(m.dataId),A;switch(x[0]){case 0:{A=T.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1],x[2]);break}case 1:{A=T.getSparseReshapeNegativeOutputDimErrorMessage(x[1],x[2]);break}case 2:A=T.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let y=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));A=T.getSparseReshapeInputOutputMultipleErrorMessage(y,b);break}case 4:{let y=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));A=T.getSparseReshapeInputOutputMismatchErrorMessage(y,b);break}default:A=""}if(t.disposeData(m.dataId),A)throw t.disposeData(c.dataId),t.disposeData(h.dataId),new Error(A);return[c,h]}var Nae={kernelName:Ql,backendName:"wasm",setupFunc:Tae,kernelFunc:Cae},c8;function h8(e){c8=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function f8(e,t){let{backend:a,inputs:n}=e,{data:r,indices:s,segmentIds:i}=n,o=s.shape[0],l=a.readSync(i.dataId,o-1,o)[0],u=o>0?l+1:0;if(u<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=r.shape.slice();p[0]=u;let c=a.dataIdMap.get(r.dataId).id,d=a.dataIdMap.get(s.dataId).id,h=a.dataIdMap.get(i.dataId).id,f=a.makeOutput(p,r.dtype),m=a.dataIdMap.get(f.dataId).id,g=a.makeOutput([4],"int32"),x=a.dataIdMap.get(g.dataId).id;c8(c,Tt[r.dtype],r.shape[0],d,h,m,x,t,0);let A=a.readSync(g.dataId),y;switch(A[0]){case 0:{y=T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{y=T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:y=T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(A[1],A[2]);break;case 3:y=T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A[1],A[2],A[3]);break;default:y=""}if(a.disposeData(g.dataId),y)throw a.disposeData(f.dataId),new Error(y);return f}function Eae(e){return f8(e,!0)}var Rae={kernelName:Dd,backendName:"wasm",setupFunc:h8,kernelFunc:Eae};function Mae(e){return f8(e,!1)}var $ae={kernelName:zd,backendName:"wasm",setupFunc:h8,kernelFunc:Mae};function _ae(e){let{inputs:t,attrs:a,backend:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(c=>{let d=[...p];d[o]=c;let h=Hs({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var Pae={kernelName:Jl,backendName:"wasm",kernelFunc:_ae},Fae=Bt(to),Oae=Bt(Bd),Dae=!0,zae=la(ro,Dae),m8;function Lae(e){m8=e.wasm.cwrap(co,null,["number","number","number","number"])}function Bae(e){let{backend:t,inputs:a,attrs:n}=e,{alpha:r}=n,{x:s}=a,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return m8(i,r,Tt[s.dtype],l),o}var Wae={kernelName:co,backendName:"wasm",setupFunc:Lae,kernelFunc:Bae},g8;function Vae(e){g8=e.wasm.cwrap(so,null,["number","array","number","array","array","array","array","array","number","number"])}function Uae(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:x,begin:A,end:y,strides:b}=It.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(m)w=za({inputs:{x:r},backend:t,attrs:{shape:f}});else if(g||x){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=It.computeOutShape(A,y,b),C=Hs({inputs:{x:r},backend:t,attrs:{begin:A,size:S}});w=za({inputs:{x:C},backend:t,attrs:{shape:f}}),t.disposeData(C.dataId)}else{let S=t.makeOutput(h,"float32"),C=t.dataIdMap.get(r.dataId).id,E=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),_=new Uint8Array(new Int32Array(A).buffer),$=new Uint8Array(new Int32Array(y).buffer),M=new Uint8Array(new Int32Array(b).buffer),I=new Uint8Array(new Int32Array(h).buffer),N=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(S.dataId).id;g8(C,E,r.shape.length,_,$,M,I,N,h.length,O),w=za({inputs:{x:S},backend:t,attrs:{shape:f}}),t.disposeData(S.dataId)}return w}var Gae={kernelName:so,backendName:"wasm",setupFunc:Vae,kernelFunc:Uae};function Hae(e){let{backend:t,inputs:a,attrs:n}=e,{data:r,dataSplits:s}=a,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:p,preserveShortSequences:c}=n,d=t.readSync(r.dataId),h=t.readSync(s.dataId),[f,m]=u3(d,h,i,o,l,u,p,c),g=t.makeOutput([f.length],"string"),x=t.dataIdMap.get(g.dataId);x.stringBytes=f;let A=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(A).set(m),[g,A]}var jae={kernelName:eu,backendName:"wasm",kernelFunc:Hae};function qae(e){let{backend:t,inputs:a,attrs:n}=e,{input:r,delimiter:s}=a,{skipEmpty:i}=n,o=t.readSync(r.dataId),l=t.readSync(s.dataId),[u,p,c]=d3(o,l[0],i),d=p.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(u);let f=t.makeOutput([d],"string"),m=t.dataIdMap.get(f.dataId);m.stringBytes=p;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,f,g]}var Xae={kernelName:Wd,backendName:"wasm",kernelFunc:qae};function Kae(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=p3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Zae={kernelName:Vd,backendName:"wasm",kernelFunc:Kae},Yae=!0,Jae=la(io,Yae),x8;function Qae(e){x8=e.wasm.cwrap(ao,null,["number","number","number","number"])}function ene(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=os(i,r,t),f=c;if(h){let y=t.dataIdMap.get(p.dataId).id;y!==o&&(u=p,l=y,f=T.getInnerMostAxes(f.length,u.shape.length))}T.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=T.computeOutAndReduceShapes(u.shape,f),x=v.sizeFromShape(g),A=t.makeOutput(m,u.dtype);if(v.sizeFromShape(u.shape)!==0){let y=t.dataIdMap.get(A.dataId).id;x8(l,x,Tt[A.dtype],y)}if(h&&t.disposeData(p.dataId),s){let y=T.expandShapeToKeepDim(A.shape,d);A.shape=y}return A}var tne={kernelName:ao,backendName:"wasm",setupFunc:Qae,kernelFunc:ene},ane=Bt(oo),nne=Bt(lo),A8;function rne(e){A8=e.wasm.cwrap(ts,null,["number","array","number","array","number","number"])}function sne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,s=a.dataIdMap.get(r.dataId).id,{reps:i}=n,o=new Array(r.shape.length);for(let d=0;d{let{x:n}=e,{k:r,sorted:s}=a,i=t.dataIdMap.get(n.dataId).id,o=new Uint8Array(new Int32Array(n.shape).buffer),l=n.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,n.dtype),p=t.dataIdMap.get(u.dataId).id,c=t.makeOutput(l,"int32"),d=t.dataIdMap.get(c.dataId).id;return y8(i,o,n.shape.length,Tt[n.dtype],r,s,p,d),[u,c]},une={kernelName:uo,backendName:"wasm",setupFunc:one,kernelFunc:lne},b8;function dne(e){b8=e.wasm.cwrap(po,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function pne(e){let{backend:t,inputs:a,attrs:n}=e,{image:r,transforms:s}=a,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[f,m]=u!=null?u:[c,d],g=[p,f,m,h],x=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),y=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(y.dataId).id,w=t.dataIdMap.get(r.dataId).id,S=t.dataIdMap.get(s.dataId).id,C=i==="nearest"?1:2,E;switch(o){case"constant":E=1;break;case"reflect":E=2;break;case"wrap":E=3;break;case"nearest":E=4;break;default:E=1;break}return b8(w,S,s.shape[0]>1,p,f,m,h,d,c,x,r.shape.length-1,A,g.length-1,C,E,l,b),y}var cne={kernelName:po,backendName:"wasm",setupFunc:dne,kernelFunc:pne};function hne(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h({dataId:h,dtype:f,shape:l}))}var fne={kernelName:tu,backendName:"wasm",kernelFunc:hne};function mne(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var gne={kernelName:au,backendName:"wasm",kernelFunc:mne},xne=[UJ,GJ,jJ,KJ,nQ,iQ,uQ,cQ,gQ,wQ,kQ,IQ,CQ,NQ,MQ,PQ,FQ,OQ,LQ,VQ,HQ,XQ,YQ,JQ,eee,tee,aee,nee,iee,oee,uee,cee,mee,Aee,vee,Iee,Tee,Nee,ZJ,Eee,$ee,Pee,Oee,Dee,Lee,Bee,Vee,Gee,qee,Kee,Jee,tte,rte,ite,ute,pte,cte,mte,Ate,vte,kte,Tte,Nte,Rte,Qv,Pte,Dte,Bte,Vte,Gte,Hte,jte,qte,hQ,Zte,Qte,aae,sae,iae,oae,dae,hae,gae,xae,bQ,bae,wae,Sae,Nae,Rae,$ae,Pae,Fae,Oae,zae,Wae,Gae,jae,Xae,Zae,Jae,tne,ane,nne,ine,une,cne,eQ,fne,gne];for(let e of xne)fn(e);var E1=W();E1.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(e){return!1}});E1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(E1.get("IS_NODE"))return!1;try{return 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(e){return!1}});var _x=Al(eS()),Ane=Al(tS()),Px=Al(aS()),Fx=_x.default||_x,yne=Px.default||Px,v8=class extends yl{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(w8),R1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new vd(this,kt())}write(e,t,a){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,a,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,a,n,r){let s=this.dataIdNextNumber++;if(n==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:a,dtype:n,memoryOffset:null,refCount:r});return}let i=v.sizeFromShape(a),o=i*v.bytesPerElement(n),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:a,dtype:n,refCount:r}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e,t,a){let{memoryOffset:n,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(a==null||a>=i.length)?i:i.slice(t,a);t=t||0,a=a||v.sizeFromShape(s);let o=v.bytesPerElement(r),l=this.wasm.HEAPU8.slice(n+t*o,n+a*o);return wne(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let a=this.dataIdMap.get(e);if(a.refCount--,!t&&a.refCount>0)return!1;this.wasm._free(a.memoryOffset),this.wasm.tfjs.disposeData(a.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,a){let n;if(a==null)n=this.write(null,e,t);else{let r=this.dataIdNextNumber++;n={id:r},this.dataIdMap.set(n,{id:r,memoryOffset:a,shape:e,dtype:t,refCount:1});let s=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,a)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:a}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(a),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,r,s);case"int32":return new Int32Array(n,r,s);case"bool":return new Uint8Array(n,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function bne(e){return(t,a)=>(v.fetch(e,{credentials:"same-origin"}).then(n=>{n.ok||t.env.a(`failed to load wasm binary file at '${e}'`),n.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{a(s.instance,s.module)})})}),{})}function Ox(e,t,a){if(Dc!=null)return Dc;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),ed!=null&&ed[n]!=null?ed[n]:a+n}async function vne(){let[e,t]=await Promise.all([W().getAsync("WASM_HAS_SIMD_SUPPORT"),W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=Ane.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?Ox(e,t,Yu!=null?Yu:l):l+o},M3&&(r.instantiateWasm=bne(Ox(e,t,Yu!=null?Yu:"")));let s=!1;r.onAbort=()=>{s||td||(td=!0,n({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))};let i;t&&e&&Dc==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Fx.toString()],{type:"text/javascript"}),i=Fx(r)):i=yne(r),i.then(o=>{s=!0,td=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},a({wasm:o})}).catch(n)})}function wne(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var kne=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Dc=null,Yu=null,ed={},td=!1,M3=!1;function Ine(e,t=!1){if(s2("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),td)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Dc=e,M3=t}function zh(e,t=!1){if(td)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Yu=e;else{ed=e;let a=kne.filter(n=>ed[n]==null);if(a.length>0)throw new Error(`There were no entries found for the following binaries: ${a.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}M3=t}var w8=-1,R1=-1;function Sne(e){w8=e}function Tne(){if(R1===-1)throw new Error("WASM backend not initialized.");return R1}var Cne="4.1.0",Nne=2;fo("wasm",async()=>{let{wasm:e}=await vne();return new v8(e)},Nne);var Dn=W();Dn.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);Dn.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);Dn.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);Dn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!1);Dn.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);Dn.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);Dn.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);Dn.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);Dn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);Dn.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>0);Dn.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);var Ene=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}},Rne=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,a=!1){let n=Dx(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let s=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(s),s}this.numBytesAllocated+=e;let r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a});return this.usedBuffers.get(n).push(r),r}releaseBuffer(e,t,a){if(this.freeBuffers.size===0)return;let n=Dx(t,a);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let r=this.usedBuffers.get(n),s=r.indexOf(e);if(s<0)throw new Error("Cannot release a buffer that was never provided by this buffer manager");r.splice(s,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,a){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,a)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Dx(e,t){return`${e}_${t}`}var Mne=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,a,n){let r=Lx(a),s=e*t*r,i=zx(e,t,a,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=s,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let l=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(l),l}this.numBytesAllocated+=s;let o=this.device.createTexture({size:[e,t],format:a,usage:n});return this.usedTextures.get(i).push(o),o}releaseTexture(e,t,a,n,r){if(this.freeTextures.size===0)return;let s=zx(t,a,n,r);this.freeTextures.has(s)||this.freeTextures.set(s,[]),this.freeTextures.get(s).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(s),o=i.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(o,1);let l=Lx(n),u=t*a*l;this.numBytesUsed-=u}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function zx(e,t,a,n){return`${e}_${t}_${a}_${n}`}function Lx(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function $ne(e,t){if(Math.max(...e)>3)throw new Error("Cannot symbolically compute strides for rank > 4 tensor.");let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}var _ne=(e,t,a,n)=>{let r={dtype:n.dtype,shape:n.shape},s=Fne(a,r,t),i=e.createShaderModule({code:s,label:t.constructor.name});return e.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})};function ra(e){if(e<=1)return"i32";if(e===2)return"vec2";if(e===3)return"vec3";if(e===4)return"vec4";if(e===5)return"vec5";if(e===6)return"vec6";throw Error(`GPU for rank ${e} is not yet supported`)}function xr(e){if(e===0)return"x";if(e===1)return"y";if(e===2)return"z";if(e===3)return"w";if(e===4)return"u";if(e===5)return"v";throw Error(`Index ${e} is not yet supported`)}function Ce(...e){let t;switch(e.length){case 0:t=` fn main() `;break;case 1:t=` - ${hd()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(getGlobalIndex()); - } - fn main(${e[0]} : i32) - `;break;default:throw Error("Unreachable")}return t}function hd(){return` - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) -`}function lre(e,t,a){let n=[];if(n.push(` - const workGroupSizeX = ${a.workGroupSize[0]}u; - const workGroupSizeY = ${a.workGroupSize[1]}u; - const workGroupSizeZ = ${a.workGroupSize[2]}u; + `;break;default:throw Error("Unreachable")}return t}function Bx(e){let t;return t=` + ${Pne()} + fn _start(@builtin(local_invocation_id) LocalId : vec3, + @builtin(global_invocation_id) GlobalId : vec3, + @builtin(local_invocation_index) LocalIndex: u32, + @builtin(workgroup_id) WorkgroupId : vec3, + @builtin(num_workgroups) NumWorkgroups : vec3) { + localId = LocalId; + localIndex = LocalIndex; + globalId = GlobalId; + numWorkgroups = NumWorkgroups; + workgroupId = WorkgroupId; + ${e?"main(getGlobalIndex());":"main();"}; + } + `,t}function Pne(){return` + @compute @workgroup_size(workgroupSizeX, workgroupSizeY, workgroupSizeZ) +`}function Fne(e,t,a){let n=[],r=a.workgroupSize[0]*a.workgroupSize[1]*a.workgroupSize[2];if(n.push(` + const workgroupSizeX = ${a.workgroupSize[0]}u; + const workgroupSizeY = ${a.workgroupSize[1]}u; + const workgroupSizeZ = ${a.workgroupSize[2]}u; var localId: vec3; + var localIndex: u32; var globalId: vec3; var numWorkgroups: vec3; + var workgroupId: vec3; // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${Pv(a)?" return i32(globalId.x);":` let localInvocationIndex = localId.z * workGroupSizeX * workGroupSizeY + - localId.y * workGroupSizeX + localId.x; - let workGroupID = (globalId - localId)/vec3( - workGroupSizeX, workGroupSizeY, workGroupSizeZ); - - return i32((workGroupID.z * numWorkgroups.x * numWorkgroups.y + - workGroupID.y * numWorkgroups.x + workGroupID.x) * - (workGroupSizeX * workGroupSizeY * workGroupSizeZ) + - localInvocationIndex); + ${k8(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${r} + + localIndex); `} } - `),a.isFromPixels)return n.push(` + `),a.isFromPixels){n.push(` struct Uniform { size : i32, numChannels : i32, outShapeStrides : vec2, }; - @group(0) @binding(0) var result: array<${Ku(t.dtype,a.isVec4)}>; + @group(0) @binding(0) var result: array<${ad(t.dtype,a.isVec4)}>; @group(0) @binding(2) var uniforms: Uniform; - `),[Zy,n.join(` -`),Yy(t.shape),a.getUserCode()].join(` -`);let r="struct Uniforms { NAN : f32, ";a.variableNames.forEach((c,p)=>{let h=na(e[p].shape.length);r+=`${c.charAt(0).toLowerCase()+c.slice(1)}Shape : ${h}, `});let s=na(t.shape.length);r+=`outShape : ${s}, `;let i=t.shape.length-1,o=na(i);r+=` - outShapeStrides: ${o}, `,a.size&&(r+="size : i32, "),a.uniforms&&(r+=a.uniforms),r+="};",r=gre(r),n.push(r),a.atomic?n.push(` + `);let h=Ux(a);return[Wx,n.join(` +`),Vx(t.shape),a.getUserCode(),Bx(h)].join(` +`)}let s="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,f)=>{let m=ra(e[f].shape.length);s+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${m}, `});let i=ra(t.shape.length);s+=`outShape : ${i}, `;let o=t.shape.length-1,l=ra(o);s+=` + outShapeStrides: ${l}, `,a.size&&(s+="size : i32, "),a.uniforms&&(s+=a.uniforms),s+="};",s=Gne(s),n.push(s),a.atomic?n.push(` @group(0) @binding(0) var result: array>; `):n.push(` - @group(0) @binding(0) var result: array<${Ku(t.dtype,a.isVec4)}>; - `),a.variableNames.forEach((c,p)=>{n.push(` - @group(0) @binding(${1+p}) var ${c}: array<${a.variableTypes?a.variableTypes[p]:Ku(e[p].dtype,a.isVec4)}>; - `)}),r!==""&&n.push(` + @group(0) @binding(0) var result: array<${ad(t.dtype,a.isVec4)}>; + `),a.variableNames.forEach((h,f)=>{n.push(` + @group(0) @binding(${1+f}) var ${h}: array<${a.variableTypes?a.variableTypes[f]:ad(e[f].dtype,a.isVec4)}>; + `)}),s!==""&&n.push(` @group(0) @binding(${1+a.variableNames.length}) var uniforms: Uniforms; - `);let l=hre(t.shape,a.dispatchLayout),u=[Zy,n.join(` -`),Yy(t.shape),l,fre(t.shape.length)];a.atomic||u.push(mre(t.shape,t.dtype,a.isVec4));let d=e.map((c,p)=>cre(c,t.shape,a.variableTypes?a.variableTypes[p]==="vec4":a.isVec4,a.dispatchLayout.x.length===t.shape.length)).join(` -`);return u.push(d),u.push(a.getUserCode()),u.join(` -`)}function ure(e,t,a,n){let r=e.shaderKey;if(e.isFromPixels)return r;let s=a.map(d=>d.dtype).concat(n.dtype),i=a.map(d=>T.getBroadcastDims(d.shape,n.shape)),o=a.map(d=>v.arraysEqual(d.shape,n.shape)).join("_"),l=i.map(d=>d.join("_")).join(";"),u=Pv(e)?"flatDispatch":"";return r+="_"+(e.workGroupSize?e.workGroupSize.join(","):"")+t.map(d=>d.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,r}var Zy=` + `);let u=Wne(t.shape,a.dispatchLayout),p=[Wx+Dne,n.join(` +`),Vx(t.shape),u,Vne(t.shape.length)];a.atomic||p.push(Une(t.shape,t.dtype,a.isVec4));let c=e.map((h,f)=>Bne(h,t.shape,a.variableTypes?a.variableTypes[f]==="vec4":a.isVec4,a.dispatchLayout.x.length===t.shape.length)).join(` +`);p.push(c),p.push(a.getUserCode());let d=Ux(a);return p.push(Bx(d)),p.join(` +`)}function One(e,t,a,n){let r=e.shaderKey;if(e.isFromPixels)return r;let s=a.map(p=>p.dtype).concat(n.dtype),i=a.map(p=>T.getBroadcastDims(p.shape,n.shape)),o=a.map(p=>v.arraysEqual(p.shape,n.shape)).join("_"),l=i.map(p=>p.join("_")).join(";"),u=k8(e)?"flatDispatch":"";return r+="_"+(e.workgroupSize?e.workgroupSize.join(","):"")+t.map(p=>p.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,r}var Wx=` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -4999,15 +4989,19 @@ return a / b;`,yZ=` fn isnanVec4(val : vec4) -> vec4 { return vec4(isnan(val[0]), isnan(val[1]), isnan(val[2]), isnan(val[3])); } -`;function Yy(e){let t=e.length;if(t<=1)return"fn getCoordsFromIndex(index : i32) -> i32 { return index; }";let a=v.computeStrides(e),n=na(t),r=[];for(let i=0;i vec2 { +`,Dne=` + fn isinf(val: f32) -> bool { + return abs(val) == uniforms.INFINITY; + } +`;function Vx(e){let t=e.length;if(t<=1)return"fn getCoordsFromIndex(index : i32) -> i32 { return index; }";let a=v.computeStrides(e),n=ra(t),r=[];for(let i=0;i vec2 { let d0 = index / uniforms.outShapeStrides; let d1 = index - d0 * uniforms.outShapeStrides; return vec2(d0, d1); - }`;let s;return s="var index2 = index;"+a.map((i,o)=>{let l=`let ${r[o]} = index2 / uniforms.outShapeStrides.${Ar(o)}`,u=o===a.length-1?`let ${r[o+1]} = index2 - ${r[o]} * uniforms.outShapeStrides.${Ar(o)}`:`index2 = index2 - ${r[o]} * uniforms.outShapeStrides.${Ar(o)}`;return`${l}; ${u};`}).join(""),` + }`;let s;return s="var index2 = index;"+a.map((i,o)=>{let l=`let ${r[o]} = index2 / uniforms.outShapeStrides.${xr(o)}`,u=o===a.length-1?`let ${r[o+1]} = index2 - ${r[o]} * uniforms.outShapeStrides.${xr(o)}`:`index2 = index2 - ${r[o]} * uniforms.outShapeStrides.${xr(o)}`;return`${l}; ${u};`}).join(""),` fn getCoordsFromIndex(index : i32) -> ${n} { ${s} return ${n}(${r.join(",")}); } - `}function dre(e,t){let a=e.name,n=e.shape.length,r=na(n),s="get"+a.charAt(0).toUpperCase()+a.slice(1),i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=i.map(d=>`${d} : i32`).join(", ");if(n<1)return t?` + `}function zne(e,t){let a=e.name,n=e.shape.length,r=ra(n),s="get"+a.charAt(0).toUpperCase()+a.slice(1),i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=i.map(p=>`${p} : i32`).join(", ");if(n<1)return t?` fn ${s}() -> vec4 { return vec4(${a}[0]); } @@ -5025,7 +5019,7 @@ return a / b;`,yZ=` return f32(${a}[getIndexFromCoords${u}(${r}(${i.join(",")}), ${l})]); } - `}function pre(e,t,a,n){let r=e.name,s=r.charAt(0).toUpperCase()+r.slice(1),i="get"+s+"ByOutput",o=e.shape.length,l=t.length,u=na(l);if(v.arraysEqual(e.shape,t)&&n)return a?` + `}function Lne(e,t,a,n){let r=e.name,s=r.charAt(0).toUpperCase()+r.slice(1),i="get"+s+"ByOutput",o=e.shape.length,l=t.length,u=ra(l);if(v.arraysEqual(e.shape,t)&&n)return a?` fn ${i}Index(globalIndex : i32) -> vec4 { return vec4(${r}[globalIndex]); } @@ -5041,7 +5035,7 @@ return a / b;`,yZ=` fn ${i}Coords(coords : ${u}) -> f32 { return f32(${r}[${l>1?"getOutputIndexFromCoords(coords)":"coords"}]); } - `;let d=T.getBroadcastDims(e.shape,t),c=l-o,p="";if(o===0)return a?` + `;let p=T.getBroadcastDims(e.shape,t),c=l-o,d="";if(o===0)return a?` fn ${i}Index(globalIndex : i32) -> vec4 { return get${s}(); } @@ -5057,38 +5051,38 @@ return a / b;`,yZ=` fn ${i}Coords(coords : ${u}) -> f32{ return get${s}(); } - `;l<2&&d.length>=1?p="coords = 0;":p=d.map(g=>`coords.${Ar(g+c)} = 0;`).join(` -`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=na(o),y=e.shape.map((A,x)=>`coords.${Ar(x+c)}`).join(", ");h=`${g}(${y})`}else h="coords";let f=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,m=`${o}D`;return a?` + `;l<2&&p.length>=1?d="coords = 0;":d=p.map(g=>`coords.${xr(g+c)} = 0;`).join(` +`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=ra(o),x=e.shape.map((A,y)=>`coords.${xr(y+c)}`).join(", ");h=`${g}(${x})`}else h="coords";let f=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,m=`${o}D`;return a?` fn ${i}Index(globalIndex : i32) -> vec4 { var coords = getCoordsFromIndex(globalIndex); - ${p} + ${d} return ${r}[getIndexFromCoords${m}(${h}, ${f}) / 4]; } fn ${i}Coords(coordsIn : ${u}) -> vec4 { var coords = coordsIn; - ${p} + ${d} return ${r}[getIndexFromCoords${m}(${h}, ${f}) / 4]; } `:` fn ${i}Index(globalIndex : i32) -> f32 { var coords = getCoordsFromIndex(globalIndex); - ${p} + ${d} return f32(${r}[getIndexFromCoords${m}(${h}, ${f})]); } fn ${i}Coords(coordsIn : ${u}) -> f32 { var coords = coordsIn; - ${p} + ${d} return f32(${r}[getIndexFromCoords${m}(${h}, ${f})]); } -`}function cre(e,t,a,n){let r=dre(e,a);return e.shape.length<=t.length&&(r+=pre(e,t,a,n)),r}function hre(e,t){let{x:a,y:n=[],z:r=[]}=t,s=e.length,i=a.length+n.length+r.length;if(i!==s)return"";if(a.length===s)return`fn getOutputCoords() -> ${na(s)}{ +`}function Bne(e,t,a,n){let r=zne(e,a);return e.shape.length<=t.length&&(r+=Lne(e,t,a,n)),r}function Wne(e,t){let{x:a,y:n=[],z:r=[]}=t,s=e.length,i=a.length+n.length+r.length;if(i!==s)return"";if(a.length===s)return`fn getOutputCoords() -> ${ra(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let o="",l=[a,n,r];for(let p=0;p ${d} { + `;let o="",l=[a,n,r];for(let d=0;d ${p} { ${o} -`;return u.length===0?c+=`return ${d}(0); }`:c+=`return ${d}(${u.join(",")}); }`,c}function fre(e){let t="";switch(e){case 0:case 1:t+=` +`;return u.length===0?c+=`return ${p}(0); }`:c+=`return ${p}(${u.join(",")}); }`,c}function Vne(e){let t="";switch(e){case 0:case 1:t+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5122,7 +5116,7 @@ return a / b;`,yZ=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function Pv(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Ku(e,t){return e==="float32"?t?"vec4":"f32":e==="int32"||e==="bool"?t?"vec4":"i32":e}function mre(e,t,a){let n=e.length,r=Ku(t,a),s;if(a?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) { + `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function k8(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function ad(e,t){return e==="float32"?t?"vec4":"f32":e==="int32"||e==="bool"?t?"vec4":"i32":e}function Une(e,t,a){let n=e.length,r=ad(t,a),s;if(a?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) { result[flatIndex] = ${r}(value); } fn setOutputAtIndexI32(flatIndex : i32, value : vec4) { @@ -5132,7 +5126,7 @@ return a / b;`,yZ=` } fn setOutputAtIndexI32(flatIndex : i32, value : i32) { result[flatIndex] = ${r}(value); - }`,n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=na(n);a?s+=` + }`,n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=ra(n);a?s+=` fn setOutputAtCoords(${i.map(l=>`${l} : i32`).join(", ")}, value : vec4) { let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndex(flatIndex / 4, value); @@ -5150,10 +5144,10 @@ return a / b;`,yZ=` let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndexI32(flatIndex, value); } - `}return s}function gre(e){let t=/(\w+)\s*:\s*vec(5|6)/g;e=e.replace(t,n=>"@align(16) "+n);let a=/vec(5|6)\s*,\s*(\w+)/g;return e=e.replace(a,(n,r,s)=>`vec${r}, @align(16) ${s}`),e}var Ov={};He(Ov,{ArrayBufferToTypedArray:()=>Lv,GPUBytesPerElement:()=>zv,MatMulProgramType:()=>Pn,computeDispatch:()=>Me,computeWorkGroupInfoForMatMul:()=>Dv,computeWorkGroupSizeForConv2d:()=>z3,computeWorkPerThreadForConv2d:()=>L3,flatDispatchLayout:()=>Ye,isWebGPUSupported:()=>B3,tilesFitEvenlyIntoShape:()=>yre});var ti=e=>{let t=1;for(let a=0;aa%e[n]===0)}function Me(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(ti(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(ti(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(ti(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Dv(e,t,a,n=!1){let r=[8,8,1],s=[4,4,1];return n||(e<=8&&(s[1]=1),t<=16&&a<=16&&(r[0]=4)),{workGroupSize:r,elementsPerThread:s}}function z3(e,t,a=!1){if(a)return[8,8,1];let n=ti(e.x.map(s=>t[s])),r=ti(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function L3(e,t,a=!1){if(a)return[4,4,1];let n=ti(e.x.map(s=>t[s])),r=ti(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function Ye(e){return{x:e.map((t,a)=>a)}}function zv(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function Lv(e,t){if(t==="float32")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function B3(){return(typeof window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}var Pn;(function(e){e[e.MatMulReduceProgram=0]="MatMulReduceProgram",e[e.MatMulSplitKProgram=1]="MatMulSplitKProgram",e[e.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",e[e.MatMulPackedProgram=3]="MatMulPackedProgram",e[e.MatMulMax=4]="MatMulMax"})(Pn||(Pn={}));var Are=V().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),xre=(e,t)=>{let a=e.limits.maxComputeWorkgroupsPerDimension,n=t.dispatchLayout,r=t.dispatch;if(r.every(i=>i<=a))return r;v.assert(r[0]>a&&n.y===void 0&&n.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(r[0]));return s>a?(s=Math.ceil(Math.cbrt(r[0])),v.assert(s<=a,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Uh=class extends fl{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!B3())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has("timestamp-query"),this.adapterInfo=new nre(t),this.bufferManager=new rre(this.device),this.textureManager=new sre(this.device),this.tensorMap=new md(this,kt()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:2})),V().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Uh.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let a=this.tensorMap.get(e);if(this.decRef(e),!t&&a.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if("texture"in t.resourceInfo){let a=t.resourceInfo;a.texture instanceof GPUTexture&&this.textureManager.releaseTexture(a.texture,a.width,a.height,a.format,a.usage),a.texture=null}else{let a=t.resourceInfo;this.bufferManager.releaseBuffer(a.buffer,a.size,a.usage),a.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,a){if(a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:a,shape:t,values:e,refCount:1}),n}move(e,t,a,n,r){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:a,values:t,refCount:r})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,a,0,t),this.submitQueue(),await a.mapAsync(GPUMapMode.READ);let n=a.getMappedRange().slice(0);return a.unmap(),a!=null&&this.bufferManager.releaseBuffer(a,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),V().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let a=this.tensorMap.get(e);return this.releaseResource(e),a.values=t,a.values}readSync(e){let t=this.tensorMap.get(e),{values:a}=t;if(a==null)throw new Error("WebGPU readSync is only available for CPU-resident tensors.");return a}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:a}=t;if(a!=null)return this.convertAndCacheOnCPU(e,a);let n;if(t.dtype==="complex64"){let r=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),s=r[0],i=r[1];n=T.mergeRealAndImagArrays(s,i)}else{let r=t.resourceInfo,s=await this.getBufferData(r.buffer,r.size);n=Lv(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:a,dtype:n,shape:r,resourceInfo:s}=t;if(n==="complex64")throw new Error("Does not support reading buffer for complex64 dtype.");if(s==null)throw a!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let i=s.size,o=this.bufferManager.acquireBuffer(i,s.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s.buffer,0,o,0,i),this.submitQueue();let l=this.makeTensorInfo(r,n),u=kt().makeTensorFromTensorInfo(l),d=this.tensorMap.get(l.dataId);return d.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:o},{tensorRef:u,buffer:o,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return ve(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return ve(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.");let t=this.activeTimers,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),s=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},o=await Promise.all(r);return i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,a){return t==="string"&&a!=null&&a.length>0&&v.isString(a[0])&&(a=a.map(n=>v.encodeString(n))),{dataId:this.write(a,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if("texture"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let a=t.resourceInfo;return{offset:0,size:a.size,buffer:a.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let a=zv(t.dtype)*v.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(a,this.defaultGpuBufferUsage());if(t.resourceInfo={size:a,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let r=this.bufferManager.acquireUploadBuffer(a,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),s=r.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(s).set(t.values):new Float32Array(s).set(t.values),r.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(r,0,n,0,a);let i={size:a,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:r};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,a=0,n=[];e.forEach(o=>{o.data.length===0&&(o.data=[1]);let l;switch(o.data.length){case 1:l=4;break;case 2:l=8;break;case 3:l=16;break;case 4:l=16;break;case 5:l=16;break;case 6:l=16;break;default:v.assert(!1,()=>`Unsupported ${o.data.length}D shape`)}(a===5||a===6)&&(l=16),t=Math.ceil(t/l)*l,a=o.data.length,n.push(t),t+=o.data.length*4});let r=new ArrayBuffer(t);e.forEach((o,l)=>{let u=n[l];o.type==="int32"?new Int32Array(r,u,o.data.length).set(o.data):o.type==="uint32"?new Uint32Array(r,u,o.data.length).set(o.data):new Float32Array(r,u,o.data.length).set(o.data)});let s=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(s,0,r,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:s};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:s}}runWebGPUProgram(e,t,a,n,r){if(r||(r=this.makeTensorInfo(e.outputShape,a)),v.sizeFromShape(r.shape)===0)return this.tensorMap.get(r.dataId).values=v.getTypedArrayFromDType(r.dtype,0),r;this.uploadToGPU(r.dataId),e.dispatch=xre(this.device,e);let s=[],i=[];if(!e.isFromPixels){s.push({type:"float32",data:[NaN]}),i=t.concat(r).map(g=>g.shape);let f="int32";i.map(g=>{s.push({type:f,data:g})});let m=v.computeStrides(r.shape);if(s.push({type:f,data:m}),e.size){let g=v.sizeFromShape(e.outputShape);s.push({type:f,data:[e.isVec4?g/4:g]})}}let o=t.map((f,m)=>{if(f.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(f.dataId),{dtype:this.tensorMap.get(f.dataId).dtype,shape:f.shape,name:e.variableNames[m]}}),l=ure(e,i,o,r),u;l in this.pipelineCache?u=this.pipelineCache[l]:(u=ore(this.device,e,o,r),this.pipelineCache[l]=u),n&&(s=[...s,...n]);let d=[this.tensorToBinding(r),...t.map(f=>this.tensorToBinding(f)),this.makeUniforms(s)],c=this.device.createBindGroup({layout:u.getBindGroupLayout(0),entries:d.map((f,m)=>({binding:m,resource:f}))});this.ensureCommandEncoderReady();let p=this.getComputePass(),h=this.activeTimers!=null;return h&&this.supportTimeQuery&&p.writeTimestamp(this.querySet,0),p.setPipeline(u),p.setBindGroup(0,c),p.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),h&&this.supportTimeQuery&&p.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(f=>{this.commandQueueOwnedIds.add(f.dataId)}),this.commandQueueOwnedIds.add(r.dataId),V().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchNumberInEncoder&&this.submitQueue(),h&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),r}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),a=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,a,0,16),this.submitQueue(),await a.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(a.getMappedRange()),r=Number(n[1]-n[0]);return a.unmap(),this.bufferManager.releaseBuffer(a,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),r/1e6}shouldExecuteOnCPU(e,t=Are){return V().getBool("WEBGPU_CPU_FORWARD")&&e.every(a=>this.tensorMap.get(a.dataId).resourceInfo==null&&v.sizeFromShape(a.shape){V().set("CHECK_COMPUTATION_FOR_ERRORS",!1);let e={powerPreference:V().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a=t.limits,n={},r=t.features.has("timestamp-query");n.requiredLimits={maxComputeWorkgroupStorageSize:a.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:a.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:a.maxStorageBufferBindingSize},r&&(n.requiredFeatures=["timestamp-query"]);let s=await t.requestDevice(n),i=await t.requestAdapterInfo();return new Uh(s,i)},3);var Be;(function(e){e[e.MUL=0]="MUL",e[e.ADD=1]="ADD",e[e.ATAN2=2]="ATAN2",e[e.SUB=3]="SUB",e[e.DIV=4]="DIV",e[e.EQUAL=5]="EQUAL",e[e.GREATER=6]="GREATER",e[e.GREATER_EQUAL=7]="GREATER_EQUAL",e[e.LESS=8]="LESS",e[e.LESS_EQUAL=9]="LESS_EQUAL",e[e.LOGICAL_AND=10]="LOGICAL_AND",e[e.NOT_EQUAL=11]="NOT_EQUAL",e[e.SQUARED_DIFFERENCE=12]="SQUARED_DIFFERENCE",e[e.INT_DIV=13]="INT_DIV",e[e.POW=14]="POW",e[e.PRELU=15]="PRELU",e[e.MAX=16]="MAX",e[e.MIN=17]="MIN",e[e.COMPLEX_MULTIPLY_REAL=18]="COMPLEX_MULTIPLY_REAL",e[e.COMPLEX_MULTIPLY_IMAG=19]="COMPLEX_MULTIPLY_IMAG"})(Be||(Be={}));var bre=` + `}return s}function Gne(e){let t=/(\w+)\s*:\s*vec(5|6)/g;e=e.replace(t,n=>"@align(16) "+n);let a=/vec(5|6)\s*,\s*(\w+)/g;return e=e.replace(a,(n,r,s)=>`vec${r}, @align(16) ${s}`),e}function Ux(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var I8={};Xe(I8,{ArrayBufferToTypedArray:()=>C8,GPUBytesPerElement:()=>T8,MatMulProgramType:()=>_n,computeDispatch:()=>Ne,computeWorkPerThreadForConv2d:()=>_3,computeWorkgroupInfoForMatMul:()=>S8,computeWorkgroupSizeForConv2d:()=>$3,flatDispatchLayout:()=>Ve,isWebGPUSupported:()=>P3,tilesFitEvenlyIntoShape:()=>Hne});var Fs=e=>{let t=1;for(let a=0;aa%e[n]===0)}function Ne(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(Fs(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(Fs(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(Fs(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function S8(e,t,a,n=!1){let r=[8,8,1],s=[4,4,1];return n||(e<=8&&(s[1]=1),t<=16&&a<=16&&(r[0]=4)),{workgroupSize:r,elementsPerThread:s}}function $3(e,t,a=!1){if(a)return[8,8,1];let n=Fs(e.x.map(s=>t[s])),r=Fs(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function _3(e,t,a=!1){if(a)return[4,4,1];let n=Fs(e.x.map(s=>t[s])),r=Fs(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function Ve(e){return{x:e.map((t,a)=>a)}}function T8(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function C8(e,t){if(t==="float32")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function P3(){return(typeof window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}var _n;(function(e){e[e.MatMulReduceProgram=0]="MatMulReduceProgram",e[e.MatMulSplitKProgram=1]="MatMulSplitKProgram",e[e.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",e[e.MatMulPackedProgram=3]="MatMulPackedProgram",e[e.MatMulMax=4]="MatMulMax"})(_n||(_n={}));var jne=W().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),qne=(e,t)=>{let a=e.limits.maxComputeWorkgroupsPerDimension,n=t.dispatchLayout,r=t.dispatch;if(r.every(i=>i<=a))return r;v.assert(r[0]>a&&n.y===void 0&&n.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(r[0]));return s>a?(s=Math.ceil(Math.cbrt(r[0])),v.assert(s<=a,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Lh=class extends yl{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!P3())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has("timestamp-query-inside-passes"),this.adapterInfo=new Ene(t),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Rne(this.device),this.textureManager=new Mne(this.device),this.tensorMap=new vd(this,kt()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:2})),W().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Lh.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let a=this.tensorMap.get(e);if(this.decRef(e),!t&&a.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if("texture"in t.resourceInfo){let a=t.resourceInfo;a.texture instanceof GPUTexture&&this.textureManager.releaseTexture(a.texture,a.width,a.height,a.format,a.usage),a.texture=null}else{let a=t.resourceInfo;this.bufferManager.releaseBuffer(a.buffer,a.size,a.usage),a.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,a){if(a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:a,shape:t,values:e,refCount:1}),n}move(e,t,a,n,r){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:a,values:t,refCount:r})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,a,0,t),this.submitQueue(),await a.mapAsync(GPUMapMode.READ);let n=a.getMappedRange().slice(0);return a.unmap(),a!=null&&this.bufferManager.releaseBuffer(a,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),W().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let a=this.tensorMap.get(e);return this.releaseResource(e),a.values=t,a.values}readSync(e){let t=this.tensorMap.get(e),{values:a}=t;if(a==null)throw new Error("WebGPU readSync is only available for CPU-resident tensors.");return a}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:a}=t;if(a!=null)return this.convertAndCacheOnCPU(e,a);let n;if(t.dtype==="complex64"){let r=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),s=r[0],i=r[1];n=T.mergeRealAndImagArrays(s,i)}else{let r=t.resourceInfo,s=await this.getBufferData(r.buffer,r.size);n=C8(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:a,dtype:n,shape:r,resourceInfo:s}=t;if(n==="complex64")throw new Error("Does not support reading buffer for complex64 dtype.");if(s==null)throw a!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let i=s.size,o=this.bufferManager.acquireBuffer(i,s.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s.buffer,0,o,0,i),this.submitQueue();let l=this.makeTensorInfo(r,n),u=kt().makeTensorFromTensorInfo(l),p=this.tensorMap.get(l.dataId);return p.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:o},{tensorRef:u,buffer:o,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return Me(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn("This device doesn't support timestamp-query-inside-passes extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.");let t=this.activeTimers,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),s=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},o=await Promise.all(r);return i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,a){return t==="string"&&a!=null&&a.length>0&&v.isString(a[0])&&(a=a.map(n=>v.encodeString(n))),{dataId:this.write(a,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if("texture"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let a=t.resourceInfo;return{offset:0,size:a.size,buffer:a.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let a=T8(t.dtype)*v.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(a,this.defaultGpuBufferUsage());if(t.resourceInfo={size:a,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let r=this.bufferManager.acquireUploadBuffer(a,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),s=r.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(s).set(t.values):new Float32Array(s).set(t.values),r.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(r,0,n,0,a);let i={size:a,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:r};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,a=0,n=[];e.forEach(o=>{o.data.length===0&&(o.data=[1]);let l;switch(o.data.length){case 1:l=4;break;case 2:l=8;break;case 3:l=16;break;case 4:l=16;break;case 5:l=16;break;case 6:l=16;break;default:v.assert(!1,()=>`Unsupported ${o.data.length}D shape`)}(a===5||a===6)&&(l=16),t=Math.ceil(t/l)*l,a=o.data.length,n.push(t),t+=o.data.length*4});let r=new ArrayBuffer(t);e.forEach((o,l)=>{let u=n[l];o.type==="int32"?new Int32Array(r,u,o.data.length).set(o.data):o.type==="uint32"?new Uint32Array(r,u,o.data.length).set(o.data):new Float32Array(r,u,o.data.length).set(o.data)});let s=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(s,0,r,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:s};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:s}}runWebGPUProgram(e,t,a,n,r){if(r||(r=this.makeTensorInfo(e.outputShape,a)),v.sizeFromShape(r.shape)===0)return this.tensorMap.get(r.dataId).values=v.getTypedArrayFromDType(r.dtype,0),r;this.uploadToGPU(r.dataId),e.dispatch=qne(this.device,e);let s=[],i=[];if(!e.isFromPixels){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=t.concat(r).map(g=>g.shape);let f="int32";i.map(g=>{s.push({type:f,data:g})});let m=v.computeStrides(r.shape);if(s.push({type:f,data:m}),e.size){let g=v.sizeFromShape(e.outputShape);s.push({type:f,data:[e.isVec4?g/4:g]})}}let o=t.map((f,m)=>{if(f.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(f.dataId),{dtype:this.tensorMap.get(f.dataId).dtype,shape:f.shape,name:e.variableNames[m]}}),l=One(e,i,o,r),u;l in this.pipelineCache?u=this.pipelineCache[l]:(u=_ne(this.device,e,o,r),this.pipelineCache[l]=u),n&&(s=[...s,...n]);let p=[this.tensorToBinding(r),...t.map(f=>this.tensorToBinding(f)),this.makeUniforms(s)],c=this.device.createBindGroup({layout:u.getBindGroupLayout(0),entries:p.map((f,m)=>({binding:m,resource:f}))});this.ensureCommandEncoderReady();let d=this.getComputePass(),h=this.activeTimers!=null;return h&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,0),d.setPipeline(u),d.setBindGroup(0,c),d.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),h&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(f=>{this.commandQueueOwnedIds.add(f.dataId)}),this.commandQueueOwnedIds.add(r.dataId),W().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchNumberInEncoder&&this.submitQueue(),h&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),r}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),a=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,a,0,16),this.submitQueue(),await a.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(a.getMappedRange()),r=Number(n[1]-n[0]);return a.unmap(),this.bufferManager.releaseBuffer(a,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),r/1e6}shouldExecuteOnCPU(e,t=jne){return W().getBool("WEBGPU_CPU_FORWARD")&&e.every(a=>this.tensorMap.get(a.dataId).resourceInfo==null&&v.sizeFromShape(a.shape){W().set("CHECK_COMPUTATION_FOR_ERRORS",!1);let e={powerPreference:W().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a={};t.features.has("timestamp-query-inside-passes")&&(a.requiredFeatures=["timestamp-query-inside-passes"]);let n=t.limits;a.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize};let r=await t.requestDevice(a),s=await t.requestAdapterInfo();return new Lh(r,s)},3);var De;(function(e){e[e.ADD=0]="ADD",e[e.ATAN2=1]="ATAN2",e[e.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",e[e.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",e[e.DIV=4]="DIV",e[e.EQUAL=5]="EQUAL",e[e.GREATER=6]="GREATER",e[e.GREATER_EQUAL=7]="GREATER_EQUAL",e[e.INT_DIV=8]="INT_DIV",e[e.LESS=9]="LESS",e[e.LESS_EQUAL=10]="LESS_EQUAL",e[e.LOGICAL_AND=11]="LOGICAL_AND",e[e.MAX=12]="MAX",e[e.MIN=13]="MIN",e[e.MOD=14]="MOD",e[e.MUL=15]="MUL",e[e.NOT_EQUAL=16]="NOT_EQUAL",e[e.POW=17]="POW",e[e.PRELU=18]="PRELU",e[e.SQUARED_DIFFERENCE=19]="SQUARED_DIFFERENCE",e[e.SUB=20]="SUB"})(De||(De={}));var N8=` if (isnan(a)) { return a; } if (isnan(b)) { return b; } - `,Bv=` + `,E8=` if (isNaN.r) { resultTemp.r = valueForNaN; } @@ -5166,16 +5160,15 @@ return a / b;`,yZ=` if (isNaN.a) { resultTemp.a = valueForNaN; } - `,Wv=` + `,F3=` let isNaN = isnanVec4(a) | isnanVec4(b); - ${Bv} - `,vre="return a + b;",wre="return areal * breal - aimag * bimag;",kre="return areal * bimag + aimag * breal;",Ire="return a / b;",Sre="return a * b;",Tre="return (a - b) * (a - b);",Cre="return a - b;",Nre="return f32(a == b);",Ere="return vec4(a == b);",Rre="return f32(a > b);",Mre="return vec4(a > b);",$re="return f32(a >= b);",_re="return vec4(a >= b);",Fre="return f32(a < b);",Pre="return vec4(a < b);",Ore="return f32(a <= b);",Dre="return vec4(a <= b);",zre="return f32(f32(a) >= 1.0 && f32(b) >= 1.0);",Lre=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,Bre=` + ${E8} + `,Xne="return a + b;",Kne="return areal * breal - aimag * bimag;",Zne="return areal * bimag + aimag * breal;",Yne="return a / b;",Jne="return f32(a == b);",Qne="return vec4(a == b);",ere="return f32(a > b);",tre="return vec4(a > b);",are="return f32(a >= b);",nre="return vec4(a >= b);",rre=` let s = sign(a) * sign(b); let ia = i32(round(a)); let ib = i32(round(b)); return f32(idiv(ia, ib, s)); - `,Wre=` +`,sre=` let ia = vec4(round(a)); let ib = vec4(round(b)); let cond = ib != vec4(0); @@ -5196,18 +5189,62 @@ return a / b;`,yZ=` resultTemp[3] = idiv(ia[3], ib[3], s[3]); } return vec4(resultTemp); - `,Vre=` +`,ire="return f32(a < b);",ore="return vec4(a < b);",lre="return f32(a <= b);",ure="return vec4(a <= b);",dre="return f32(f32(a) >= 1.0 && f32(b) >= 1.0);",pre=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,cre=` + ${N8} + if (b == 0.) { + return uniforms.NAN; + } + var resultTemp = a % b; + if ((a < 0. && b < 0.) || (a >= 0. && b > 0.)) { + return resultTemp; + } else { + return (resultTemp + b) % b; + } +`,hre=` + let valueForNaN = uniforms.NAN; + var resultTemp = vec4(a % b); + ${F3} + + if (b[0] == 0.) { + resultTemp[0] = uniforms.NAN; + } + if (b[1] == 0.) { + resultTemp[1] = uniforms.NAN; + } + if (b[2] == 0.) { + resultTemp[2] = uniforms.NAN; + } + if (b[3] == 0.) { + resultTemp[3] = uniforms.NAN; + } + + if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { + resultTemp[0] = (resultTemp[0] + b[0]) % b[0]; + } + if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) { + resultTemp[1] = (resultTemp[1] + b[1]) % b[1]; + } + if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) { + resultTemp[2] = (resultTemp[2] + b[2]) % b[2]; + } + if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { + resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; + } + + return resultTemp; +`,fre="return a * b;",mre=` if (isnan(a) || isnan(b)) { return 1.0; } return f32(a != b); -`,Gre=` +`,gre=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; - ${Wv} + ${F3} return resultTemp; -`,Ure=` +`,xre=` if(a < 0.0 && floor(b) < b) { return uniforms.NAN; } @@ -5218,7 +5255,7 @@ return a / b;`,yZ=` return pow(abs(a), b); } return sign(a) * pow(abs(a), b); - `,jre=` +`,Are=` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -5240,22 +5277,53 @@ return a / b;`,yZ=` } let isNaN = (a < vec4(0.0)) & (floor(b) < b); let valueForNaN = uniforms.NAN; - ${Bv} + ${E8} return resultTemp; - `,Hre="if (a < 0.0) { return b * a; } return a;",qre=` +`,yre="if (a < 0.0) { return b * a; } return a;",bre=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); - `;function Lm(e,t,a="uniforms.NAN"){let n=t?Wv:bre;return t?` +`,vre="return (a - b) * (a - b);",wre="return a - b;";function Dm(e,t,a="uniforms.NAN"){let n=t?F3:N8;return t?` let valueForNaN = ${a}; var resultTemp = vec4(${e}(a, b)); `+n+` return resultTemp; `:n+` return ${e}(a, b); - `}function W3(e,t){switch(e){case Be.MUL:return Sre;case Be.ADD:return vre;case Be.ATAN2:return Lm("atan2",t);case Be.SUB:return Cre;case Be.DIV:return Ire;case Be.EQUAL:return t?Ere:Nre;case Be.GREATER:return t?Mre:Rre;case Be.GREATER_EQUAL:return t?_re:$re;case Be.LESS:return t?Pre:Fre;case Be.LESS_EQUAL:return t?Dre:Ore;case Be.LOGICAL_AND:return t?Lre:zre;case Be.NOT_EQUAL:return t?Gre:Vre;case Be.SQUARED_DIFFERENCE:return Tre;case Be.INT_DIV:return t?Wre:Bre;case Be.PRELU:return t?qre:Hre;case Be.MAX:return Lm("max",t);case Be.MIN:return Lm("min",t);case Be.POW:return t?jre:Ure;case Be.COMPLEX_MULTIPLY_REAL:return wre;case Be.COMPLEX_MULTIPLY_IMAG:return kre;default:throw new Error(`BinaryType ${e} is not implemented!`)}}var Se;(function(e){e[e.ABS=0]="ABS",e[e.CEIL=1]="CEIL",e[e.COS=2]="COS",e[e.COSH=3]="COSH",e[e.ELU=4]="ELU",e[e.EXP=5]="EXP",e[e.EXPM1=6]="EXPM1",e[e.FLOOR=7]="FLOOR",e[e.IS_NAN=8]="IS_NAN",e[e.LINEAR=9]="LINEAR",e[e.LOG=10]="LOG",e[e.LOGICAL_NOT=11]="LOGICAL_NOT",e[e.NEG=12]="NEG",e[e.RELU=13]="RELU",e[e.RELU6=14]="RELU6",e[e.LEAKYRELU=15]="LEAKYRELU",e[e.RECIPROCAL=16]="RECIPROCAL",e[e.RSQRT=17]="RSQRT",e[e.SIN=18]="SIN",e[e.SINH=19]="SINH",e[e.SIGMOID=20]="SIGMOID",e[e.SQRT=21]="SQRT",e[e.SQUARE=22]="SQUARE",e[e.TANH=23]="TANH",e[e.TO_INT=24]="TO_INT"})(Se||(Se={}));var Xre="return abs(a);",Kre="return ceil(a);",Zre="return cos(a);",Yre=` + `}function O3(e,t){switch(e){case De.ADD:return Xne;case De.ATAN2:return Dm("atan2",t);case De.COMPLEX_MULTIPLY_IMAG:return Zne;case De.COMPLEX_MULTIPLY_REAL:return Kne;case De.DIV:return Yne;case De.EQUAL:return t?Qne:Jne;case De.GREATER:return t?tre:ere;case De.GREATER_EQUAL:return t?nre:are;case De.INT_DIV:return t?sre:rre;case De.LESS:return t?ore:ire;case De.LESS_EQUAL:return t?ure:lre;case De.LOGICAL_AND:return t?pre:dre;case De.MAX:return Dm("max",t);case De.MIN:return Dm("min",t);case De.MOD:return t?hre:cre;case De.MUL:return fre;case De.NOT_EQUAL:return t?gre:mre;case De.POW:return t?Are:xre;case De.PRELU:return t?bre:yre;case De.SQUARED_DIFFERENCE:return vre;case De.SUB:return wre;default:throw new Error(`BinaryType ${e} is not implemented!`)}}var de;(function(e){e[e.ABS=0]="ABS",e[e.ACOS=1]="ACOS",e[e.ACOSH=2]="ACOSH",e[e.ASIN=3]="ASIN",e[e.ASINH=4]="ASINH",e[e.ATAN=5]="ATAN",e[e.ATANH=6]="ATANH",e[e.CEIL=7]="CEIL",e[e.COS=8]="COS",e[e.COSH=9]="COSH",e[e.ELU=10]="ELU",e[e.ERF=11]="ERF",e[e.EXP=12]="EXP",e[e.EXPM1=13]="EXPM1",e[e.FLOOR=14]="FLOOR",e[e.IS_FINITE=15]="IS_FINITE",e[e.IS_INF=16]="IS_INF",e[e.IS_NAN=17]="IS_NAN",e[e.LINEAR=18]="LINEAR",e[e.LOG=19]="LOG",e[e.LOG1P=20]="LOG1P",e[e.LOGICAL_NOT=21]="LOGICAL_NOT",e[e.NEG=22]="NEG",e[e.RELU=23]="RELU",e[e.RELU6=24]="RELU6",e[e.LEAKYRELU=25]="LEAKYRELU",e[e.RECIPROCAL=26]="RECIPROCAL",e[e.RSQRT=27]="RSQRT",e[e.SIN=28]="SIN",e[e.SINH=29]="SINH",e[e.SIGMOID=30]="SIGMOID",e[e.SQRT=31]="SQRT",e[e.SQUARE=32]="SQUARE",e[e.TAN=33]="TAN",e[e.TANH=34]="TANH",e[e.TO_INT=35]="TO_INT"})(de||(de={}));var kre="return abs(a);",Ire=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return acos(a); +`,Sre=` + if (a < 1.) { + return uniforms.NAN; + } + return acosh(a); +`,Tre=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return asin(a); +`,Cre="return asinh(a);",Nre=` + if (isnan(a)) { + return uniforms.NAN; + } + return atan(a); +`,Ere=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + if (a == 1.) { + return uniforms.INFINITY; + } + if (a == -1.) { + return -uniforms.INFINITY; + } + return atanh(a); +`,Rre="return ceil(a);",Mre="return cos(a);",$re=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,Jre="return exp(a) - 1.0;",Qre="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",ese=` +`,_re="return exp(a) - 1.0;",Pre="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",Fre=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5270,35 +5338,53 @@ return a / b;`,yZ=` resFloat.a = a.a; } return resFloat; -`,tse="return exp(a);",ase="return floor(a);",nse="return f32(isnan(a));",rse="return a;",sse=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,ise="return f32(!(a >= 1.0));",ose="return -a;",lse="if (a < 0.0) { return uniforms.alpha * a; } return a;",use=` +`,Ore=` + // Error function is calculated approximately with elementary function. + // See "Handbook of Mathematical Functions with Formulas, + // Graphs, and Mathematical Tables", Abramowitz and Stegun. + let p = ${T.ERF_P}; + let a1 = ${T.ERF_A1}; + let a2 = ${T.ERF_A2}; + let a3 = ${T.ERF_A3}; + let a4 = ${T.ERF_A4}; + let a5 = ${T.ERF_A5}; + + let sign = sign(a); + let absA = abs(a); + let t = 1.0 / (1.0 + p * absA); + return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); +`,Dre="return exp(a);",zre="return floor(a);",Lre="return f32(!isnan(a) && !isinf(a));",Bre="return f32(isinf(a));",Wre="return f32(isnan(a));",Vre="return a;",Ure=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,Gre=` + if (isnan(a)) { return a; } + return log(1.0 + a); +`,Hre="return f32(!(a >= 1.0));",jre="return -a;",qre="if (a < 0.0) { return uniforms.alpha * a; } return a;",Xre=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,dse="return 1.0 / a;",pse="return select(a, 0.0, a < 0.0);",cse="return clamp(a, 0.0, 6.0);",hse="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",fse=` +`,Kre="return 1.0 / a;",Zre="return select(a, 0.0, a < 0.0);",Yre="return clamp(a, 0.0, 6.0);",Jre="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Qre=` return select(a, vec4(0.0), a < vec4(0.0)); -`,mse="return 1.0/sqrt(a);",gse="return 1.0 / (1.0 + exp(-1.0 * a));",yse="return sin(a);",Ase=` +`,ese="return inverseSqrt(a);",tse="return 1.0 / (1.0 + exp(-1.0 * a));",ase="return sin(a);",nse=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,xse="return sqrt(a);",bse="return a * a;",vse=` +`,rse="return sqrt(a);",sse="return a * a;",ise="return tan(a);",ose=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,wse="return f32(i32((a)));";function qs(e,t){switch(e){case Se.ABS:return Xre;case Se.COS:return Zre;case Se.COSH:return Yre;case Se.CEIL:return Kre;case Se.ELU:return t?ese:Qre;case Se.EXP:return tse;case Se.EXPM1:return Jre;case Se.FLOOR:return ase;case Se.IS_NAN:return nse;case Se.LINEAR:return rse;case Se.LOG:return sse;case Se.LOGICAL_NOT:return ise;case Se.NEG:return ose;case Se.LEAKYRELU:return t?use:lse;case Se.RECIPROCAL:return dse;case Se.RELU:return t?fse:pse;case Se.RELU6:return t?hse:cse;case Se.RSQRT:return mse;case Se.SIGMOID:return gse;case Se.SIN:return yse;case Se.SINH:return Ase;case Se.SQRT:return xse;case Se.SQUARE:return bse;case Se.TANH:return vse;case Se.TO_INT:return wse;default:throw new Error(`BinaryType ${e} is not implemented!`)}}var Rt=e=>{switch(e){case 1:return"f32";case 2:return"vec2";case 3:return"vec3";case 4:return"vec4";default:throw new Error(`${e}-component is not supported.`)}};function Cr(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=qs(Se.LINEAR);else if(e==="relu")r=qs(Se.RELU,a);else if(e==="elu")r=qs(Se.ELU,a);else if(e==="relu6")r=qs(Se.RELU6,a);else if(e==="prelu")r=W3(Be.PRELU,a);else if(e==="sigmoid")r=qs(Se.SIGMOID,a);else if(e==="leakyrelu")r=qs(Se.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Rt(a?4:1),i="";return t?i=` +`,lse="return f32(i32((a)));";function Es(e,t){switch(e){case de.ABS:return kre;case de.ACOS:return Ire;case de.ACOSH:return Sre;case de.ASIN:return Tre;case de.ASINH:return Cre;case de.ATAN:return Nre;case de.ATANH:return Ere;case de.COS:return Mre;case de.COSH:return $re;case de.CEIL:return Rre;case de.ELU:return t?Fre:Pre;case de.ERF:return Ore;case de.EXP:return Dre;case de.EXPM1:return _re;case de.FLOOR:return zre;case de.IS_FINITE:return Lre;case de.IS_INF:return Bre;case de.IS_NAN:return Wre;case de.LINEAR:return Vre;case de.LOG:return Ure;case de.LOG1P:return Gre;case de.LOGICAL_NOT:return Hre;case de.NEG:return jre;case de.LEAKYRELU:return t?Xre:qre;case de.RECIPROCAL:return Kre;case de.RELU:return t?Qre:Zre;case de.RELU6:return t?Jre:Yre;case de.RSQRT:return ese;case de.SIGMOID:return tse;case de.SIN:return ase;case de.SINH:return nse;case de.SQRT:return rse;case de.SQUARE:return sse;case de.TAN:return ise;case de.TANH:return ose;case de.TO_INT:return lse;default:throw new Error(`BinaryType ${e} is not implemented!`)}}var Mt=e=>{switch(e){case 1:return"f32";case 2:return"vec2";case 3:return"vec3";case 4:return"vec4";default:throw new Error(`${e}-component is not supported.`)}};function Ir(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=Es(de.LINEAR);else if(e==="relu")r=Es(de.RELU,a);else if(e==="elu")r=Es(de.ELU,a);else if(e==="relu6")r=Es(de.RELU6,a);else if(e==="prelu")r=O3(De.PRELU,a);else if(e==="sigmoid")r=Es(de.SIGMOID,a);else if(e==="leakyrelu")r=Es(de.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Mt(a?4:1),i="";return t?i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { let b = getPreluActivationWeightsByOutputCoords(coords); ${r} }`:i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { ${r} - }`,i}function mo(e,t){return` + }`,i}function yo(e,t){return` ${e?"value = value + getBiasByOutputCoords(coords);":""} ${t?"value = activation(value, coords);":""} - `}function Vv(e,t,a,n,r=!1,s=!1,i=!1,o=1){v.assert(a&&o===1||!a,()=>`transposeA ${a} is not compatible with component size ${o}`);let l=` + `}function R8(e,t,a,n,r=!1,s=!1,i=!1,o=1){v.assert(a&&o===1||!a,()=>`transposeA ${a} is not compatible with component size ${o}`);let l=` let batch = ${e?"0":"batchIn"}; ${a?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,u=n?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` - fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${Rt(o)} { - var value = ${Rt(o)}(0.0); + fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${Mt(o)} { + var value = ${Mt(o)}(0.0); let col = colIn * ${o}; ${r&&i?l:` ${a?"if(row < uniforms.dimAOuter && col < uniforms.dimInner)":"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} @@ -5309,120 +5395,112 @@ return a / b;`,yZ=` return value; } - fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${Rt(o)} { + fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${Mt(o)} { let col = colIn * ${o}; let batch = ${t?"0":"batchIn"}; - var value = ${Rt(o)}(0.0); + var value = ${Mt(o)}(0.0); ${u} return value; } - `}function V3(e,t,a,n,r,s,i=!1,o=!1,l=!1,u=1){return` - ${Vv(a,n,r,s,i,o,l,u)} - fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${Rt(u)}) { + `}function D3(e,t,a,n,r,s,i=!1,o=!1,l=!1,u=1){return` + ${R8(a,n,r,s,i,o,l,u)} + fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${Mt(u)}) { let col = colIn * ${u}; ${i&&o?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${mo(e,t)} + ${yo(e,t)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var kse=e=>e?` + `}var use=e=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, - globalRowStart / InnerElementSize + inputCol); + globalRowStart / innerElementSize + inputCol); `:` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRow + innerRow, - kStart / InnerElementSize + inputCol); - `,Ise=(e,t)=>e?` - let ACached0 = mm_Asub[k * InnerElementSize][localRow]; - let ACached1 = mm_Asub[k * InnerElementSize + 1][localRow]; - let ACached2 = mm_Asub[k * InnerElementSize + 2][localRow]; - ${t===3?"":"let ACached3 = mm_Asub[k * InnerElementSize + 3][localRow];"} - for (var i = 0; i < RowPerThread; i = i + 1) { + kStart / innerElementSize + inputCol); + `,dse=(e,t)=>e?` + let ACached0 = mm_Asub[k * innerElementSize][localRow]; + let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; + let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; + ${t===3?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} + for (var i = 0; i < rowPerThread; i = i + 1) { acc[i] = BCached0 * ACached0[i] + acc[i]; acc[i] = BCached1 * ACached1[i] + acc[i]; acc[i] = BCached2 * ACached2[i] + acc[i]; ${t===3?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"} }`:` - for (var i = 0; i < RowPerThread; i = i + 1) { + for (var i = 0; i < rowPerThread; i = i + 1) { let ACached = mm_Asub[tileRow + i][k]; acc[i] = BCached0 * ACached.x + acc[i]; acc[i] = BCached1 * ACached.y + acc[i]; acc[i] = BCached2 * ACached.z + acc[i]; ${t===3?"":"acc[i] = BCached3 * ACached.w + acc[i];"} - }`;function jh(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,d=a?n:o,c=u/t[0],p=n/t[1];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. + }`;function Bh(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,p=a?n:o,c=u/t[0],d=n/t[1];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. Otherwise, innerElementSize ${c} must be 3 or 4. - tileAWidth ${u} must be divisible by workGroupSize[0]${t[0]}. tileInner ${n} must be divisible by workGroupSize[1] ${t[1]}. ColPerThread ${e[0]} must be 4.`),` - var mm_Asub : array, ${u/c}>, ${d}>; + tileAWidth ${u} must be divisible by workgroupSize[0]${t[0]}. tileInner ${n} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${e[0]} must be 4.`),` + var mm_Asub : array, ${u/c}>, ${p}>; var mm_Bsub : array, ${l/e[0]}>, ${n}>; - const RowPerThread = ${e[1]}; - const ColPerThread = ${e[0]}; - const InnerElementSize = ${c}; - const TileInner = ${n}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${e[1]}; + const colPerThread = ${e[0]}; + const innerElementSize = ${c}; + const tileInner = ${n}; + ${Ce()} { let localRow = i32(localId.y); - let tileRow = ${i?"0":"localRow * RowPerThread"}; + let tileRow = ${i?"0":"localRow * rowPerThread"}; let tileCol = i32(localId.x); - let globalRow = ${i?"0":"i32(globalId.y) * RowPerThread"}; + let globalRow = ${i?"0":"i32(globalId.y) * rowPerThread"}; let globalCol = i32(globalId.x); let batch = ${r?"0":"i32(globalId.z)"}; let globalRowStart = i32(workgroupId.y) * ${o}; - let numTiles = ${r?`${Math.ceil(s/n)}`:"(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${r?`${Math.ceil(s/n)}`:"(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${r?`i32(globalId.z) * ${s}`:"0"}; - var acc: array, RowPerThread>; + var acc: array, rowPerThread>; // Loop over shared dimension. - let tileRowB = localRow * ${p}; + let tileRowB = localRow * ${d}; for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${kse(a)} + ${use(a)} } // Load one tile of B into local memory. - for (var innerRow = 0; innerRow < ${p}; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol); } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileInner / InnerElementSize; k = k + 1) { - let BCached0 = mm_Bsub[k * InnerElementSize][tileCol]; - let BCached1 = mm_Bsub[k * InnerElementSize + 1][tileCol]; - let BCached2 = mm_Bsub[k * InnerElementSize + 2][tileCol]; - ${c===3?"":"let BCached3 = mm_Bsub[k * InnerElementSize + 3][tileCol];"} + for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { + let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; + let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; + let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; + ${c===3?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} - ${Ise(a,c)} + ${dse(a,c)} } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var Jy=e=>e?` + }`}var Gx=e=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, globalRowStart + inputCol); @@ -5430,7 +5508,7 @@ return a / b;`,yZ=` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRowStart + inputRow, kStart + inputCol); - `,Sse=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Hh(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=e[1]*t[1],l=e[0]*t[0],u=a?o:n,d=a?n:o;v.assert(d%t[1]===0&&u%t[0]===0&&n%t[1]===0,()=>`tileAHight ${d} must be divisible by workGroupSize[1]${t[1]}, tileAWidth ${u} must be divisible by workGroupSize[0]${t[0]}, tileInner ${n} must be divisible by workGroupSize[1]${t[1]}`);let c=d/t[1],p=u/t[0],h=n/t[1],f=i?` + `,pse=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Wh(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=e[1]*t[1],l=e[0]*t[0],u=a?o:n,p=a?n:o;v.assert(p%t[1]===0&&u%t[0]===0&&n%t[1]===0,()=>`tileAHight ${p} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${u} must be divisible by workgroupSize[0]${t[0]}, tileInner ${n} must be divisible by workgroupSize[1]${t[1]}`);let c=p/t[1],d=u/t[0],h=n/t[1],f=i?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${o}; @@ -5439,9 +5517,9 @@ return a / b;`,yZ=` // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - for (var inputRow = localRow; inputRow < ${d}; inputRow = inputRow + ${t[1]}) { + for (var inputRow = localRow; inputRow < ${p}; inputRow = inputRow + ${t[1]}) { for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${t[0]}) { - ${Jy(a)} + ${Gx(a)} } } // Load one tile of B into local memory. @@ -5452,18 +5530,18 @@ return a / b;`,yZ=` globalColStart + inputCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][localCol + inner * ${t[0]}]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let ACached = ${a?`mm_Asub[k][localRow + innerRow * ${t[1]}];`:`mm_Asub[localRow + innerRow * ${t[1]}][k];`} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } @@ -5471,38 +5549,38 @@ return a / b;`,yZ=` } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let gRow = globalRowStart + localRow + innerRow * ${t[1]}; - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let gCol = globalColStart + localCol + innerCol * ${t[0]}; mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); } } `:` - let tileRow = i32(localId.y) * RowPerThread; - let tileCol = i32(localId.x) * ColPerThread; + let tileRow = i32(localId.y) * rowPerThread; + let tileCol = i32(localId.x) * colPerThread; - let globalRow = i32(globalId.y) * RowPerThread; - let globalCol = i32(globalId.x) * ColPerThread; + let globalRow = i32(globalId.y) * rowPerThread; + let globalCol = i32(globalId.x) * colPerThread; let globalRowStart = i32(workgroupId.y) * ${o}; let tileRowA = i32(localId.y) * ${c}; - let tileColA = i32(localId.x) * ${p}; + let tileColA = i32(localId.x) * ${d}; let tileRowB = i32(localId.y) * ${h}; // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. for (var innerRow = 0; innerRow < ${c}; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ${p}; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < ${d}; innerCol = innerCol + 1) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${Jy(a)} + ${Gx(a)} } } // Load one tile of B into local memory. for (var innerRow = 0; innerRow < ${h}; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol + innerCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, @@ -5510,19 +5588,19 @@ return a / b;`,yZ=` globalCol + innerCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][tileCol + inner]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - ${Sse(a)} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + ${pse(a)} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } } @@ -5531,43 +5609,35 @@ return a / b;`,yZ=` workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { mm_write(batch, globalRow + innerRow, globalCol + innerCol, acc[innerRow][innerCol]); } } `;return` - var mm_Asub : array, ${d}>; + var mm_Asub : array, ${p}>; var mm_Bsub : array, ${n}>; - const RowPerThread = ${e[1]}; - const ColPerThread = ${e[0]}; - const TileInner = ${n}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${e[1]}; + const colPerThread = ${e[0]}; + const tileInner = ${n}; + ${Ce()} { let batch = ${r?"0":"i32(globalId.z)"}; - let numTiles = ${r?`${Math.ceil(s/n)}`:"(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${r?`${Math.ceil(s/n)}`:"(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${r?`i32(globalId.z) * ${s}`:"0"}; - var acc : array, RowPerThread>; + var acc : array, rowPerThread>; // Without this initialization strange values show up in acc. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = 0.0; } } ${f} } - `}var Tse=e=>e?` + `}var cse=e=>e?` mm_readA(batch, colA, globalRow), mm_readA(batch, colA + 1, globalRow), mm_readA(batch, colA + 2, globalRow), @@ -5577,16 +5647,16 @@ return a / b;`,yZ=` mm_readA(batch, globalRow, colA + 1), mm_readA(batch, globalRow, colA + 2), mm_readA(batch, globalRow, colA + 3) - `;function Cse(e,t=!1){return v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`),` - const TileSize = ${e[0]*4}; + `;function hse(e,t=!1){return v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`),` + const tileSize = ${e[0]*4}; var mm_Asub : array, ${e[0]}>; - ${We()} { + ${Ce()} { let tileCol = i32(localId.x); let globalCol = i32(globalId.x); let globalRow = i32(globalId.y); - let numTiles = (uniforms.dimInner - 1) / TileSize + 1; + let numTiles = (uniforms.dimInner - 1) / tileSize + 1; let batch = i32(globalId.z); // Without this initialization strange values show up in acc. var acc = 0.0; @@ -5594,13 +5664,13 @@ return a / b;`,yZ=` // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - let colA = t * TileSize + tileCol * 4; - mm_Asub[tileCol] = vec4(${Tse(t)}); + let colA = t * tileSize + tileCol * 4; + mm_Asub[tileCol] = vec4(${cse(t)}); workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileSize / 4; k = k + 1) { - let rowB = t * TileSize + k * 4; + for (var k = 0; k < tileSize / 4; k = k + 1) { + let rowB = t * tileSize + k * 4; let BCached = vec4(mm_readB(batch, rowB, globalCol), mm_readB(batch, rowB + 1, globalCol), mm_readB(batch, rowB + 2, globalCol), @@ -5615,20 +5685,20 @@ return a / b;`,yZ=` mm_write(batch, globalRow, globalCol, acc); } - `}var Nse=class{constructor(e,t,a,n,r=!1,s=!1,i=null,o=null,l=null,u=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let d=r?e[1]:e[2];if(this.isVec4=(d%4===0&&!r||t[1]%4===0&&r)&&t[2]%4===0&&!s,this.isVectorA=t[1]===1&&!r,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workGroupSize=[32,1,1];else{let h=Dv(t[1],d,t[2],r);this.workGroupSize=h.workGroupSize,this.elementsPerThread=h.elementsPerThread}this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread);let c=i!=null,p=l!=null;c&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=u,this.transposeA=r,this.transposeB=s,this.addBias=c,this.activation=o,this.hasPreluActivationWeights=p,this.batchAEqualOne=a,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],d),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${r}_${s}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,a){let n=this.workGroupSize[1]*this.elementsPerThread[1],r=this.workGroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workGroupSize[0]*4:this.tileInner=r;let s=e%n===0,i=t%r===0,o=a%this.tileInner===0;return[s,i,o]}getUserCode(){return` - ${Cr(this.activation,this.hasPreluActivationWeights,this.isVec4)} - ${V3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?jh(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?Cse(this.workGroupSize,this.transposeA):Hh(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)} - `}};function Ese(){return` - var sumValues : array; - ${We()} { + `}var fse=class{constructor(e,t,a,n,r=!1,s=!1,i=null,o=null,l=null,u=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let p=r?e[1]:e[2];if(this.isVec4=(p%4===0&&!r||t[1]%4===0&&r)&&t[2]%4===0&&!s,this.isVectorA=t[1]===1&&!r,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let h=S8(t[1],p,t[2],r);this.workgroupSize=h.workgroupSize,this.elementsPerThread=h.elementsPerThread}this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let c=i!=null,d=l!=null;c&&this.variableNames.push("bias"),d&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=u,this.transposeA=r,this.transposeB=s,this.addBias=c,this.activation=o,this.hasPreluActivationWeights=d,this.batchAEqualOne=a,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],p),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${r}_${s}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,a){let n=this.workgroupSize[1]*this.elementsPerThread[1],r=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=r;let s=e%n===0,i=t%r===0,o=a%this.tileInner===0;return[s,i,o]}getUserCode(){return` + ${Ir(this.activation,this.hasPreluActivationWeights,this.isVec4)} + ${D3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?Bh(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?hse(this.workgroupSize,this.transposeA):Wh(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)} + `}};function mse(){return` + var sumValues : array; + ${Ce()} { let coords = getOutputCoords(); let batch = coords[0]; let row = coords[1]; let col = coords[2]; var sum = 0.0; let Length = uniforms.dimInner; - for (var k = i32(localId.x); k < Length; k = k + i32(workGroupSizeX)) { + for (var k = i32(localId.x); k < Length; k = k + i32(workgroupSizeX)) { let dataA = mm_readA(batch, row, k); let dataB = mm_readB(batch, k, col); sum = sum + dataA * dataB; @@ -5636,7 +5706,7 @@ return a / b;`,yZ=` sumValues[localId.x] = sum; workgroupBarrier(); - for(var currentSize = workGroupSizeX / 2u; currentSize > 1u; + for(var currentSize = workgroupSizeX / 2u; currentSize > 1u; currentSize = currentSize / 2u) { if (localId.x < currentSize) { @@ -5650,11 +5720,11 @@ return a / b;`,yZ=` mm_write(batch, row, col, sum); } } - `}var Rse=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize);let l=s!=null,u=o!=null;l&&this.variableNames.push("bias"),u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.batchAEqualOne=t,this.batchBEqualOne=a,this.shaderKey=`matMulReduce_${this.activation}_${n}_${r}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` - ${Cr(this.activation,this.hasPreluActivationWeights)} - ${V3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} - ${Ese()} - `}};function Mse(e){let t=e[1],a=e[0],n=t>a?t:a;return` + `}var gse=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize);let l=s!=null,u=o!=null;l&&this.variableNames.push("bias"),u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.batchAEqualOne=t,this.batchBEqualOne=a,this.shaderKey=`matMulReduce_${this.activation}_${n}_${r}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` + ${Ir(this.activation,this.hasPreluActivationWeights)} + ${D3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} + ${mse()} + `}};function xse(e){let t=e[1],a=e[0],n=t>a?t:a;return` var mm_Asub : array, ${t}>; var mm_Bsub : array, ${n}>; @@ -5664,7 +5734,7 @@ return a / b;`,yZ=` // shared memory, so it is instruction-Level parallelism for arithmetic // operations and others handle IO operations between barrier api, makes ALU // and load/store units work simultaneously, could improves the performance. - ${We()} { + ${Ce()} { let tileRow = i32(localId.y); let tileCol = i32(localId.x); let globalRow = i32(globalId.y); @@ -5704,11 +5774,11 @@ return a / b;`,yZ=` mm_write(batch, globalRow, globalCol, acc); } - `}var $se=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[16,8,1],this.outputShape=a,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(a[2]/this.workGroupSize[0]),Math.ceil(a[1]/this.workGroupSize[1]),a[0]];let l=s!=null;l&&this.variableNames.push("bias");let u=o!=null;u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` - ${Cr(this.activation,this.hasPreluActivationWeights)} - ${V3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} - ${Mse(this.workGroupSize)} - `}},_se=class{constructor(e,t,a,n,r=!1,s=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,v.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(r&&this.outputShape[1]%4===0||!r&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=Me(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workGroupSize,this.elementsPerThread),this.transposeA=r,this.transposeB=s,this.batchAEqualOne=a,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${r}_${s}_${a}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=a=>` + `}var Ase=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=a,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(a[2]/this.workgroupSize[0]),Math.ceil(a[1]/this.workgroupSize[1]),a[0]];let l=s!=null;l&&this.variableNames.push("bias");let u=o!=null;u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` + ${Ir(this.activation,this.hasPreluActivationWeights)} + ${D3(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} + ${xse(this.workgroupSize)} + `}},yse=class{constructor(e,t,a,n,r=!1,s=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,v.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(r&&this.outputShape[1]%4===0||!r&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=Ne(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=r,this.transposeB=s,this.batchAEqualOne=a,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${r}_${s}_${a}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=a=>` for (var i = 0; i < ${a}; i = i + 1) { var oldValue = atomicLoad(&(result[flatIndex + i])); @@ -5722,8 +5792,8 @@ return a / b;`,yZ=` } } `,t=this.isVec4?4:1;return` - ${Vv(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)} - fn mm_write(batch: i32, row : i32, colIn : i32, value : ${Rt(t)}) { + ${R8(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)} + fn mm_write(batch: i32, row : i32, colIn : i32, value : ${Mt(t)}) { let col = colIn * ${t}; if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5733,30 +5803,30 @@ return a / b;`,yZ=` ${e(t)} } } - ${this.isVec4?jh(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner):Hh(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},Fse=class{constructor(e,t=null,a=null,n=null){this.uniforms="",this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=a,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${a}`}getUserCode(){return` - ${Cr(this.activation,this.hasPreluActivationWeights)} - ${We("index")} { + ${this.isVec4?Bh(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Wh(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},bse=class{constructor(e,t=null,a=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=a,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${a}`}getUserCode(){return` + ${Ir(this.activation,this.hasPreluActivationWeights)} + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${mo(this.addBias,this.activation)} + ${yo(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}},Pse=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="fill"}getUserCode(){return` - ${We("index")} { + `}},vse=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function go(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new Pse(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var Ose={kernelName:kl,backendName:"webgpu",kernelFunc:go};function Re(e){let{inputs:t,attrs:a}=e,{x:n}=t,{shape:r}=a,s=v.sizeFromShape(n.shape),i=v.inferFromImplicitShape(r,s),o=v.sizeFromShape(i);return v.assert(s===o,()=>`The new shape (${i}) has ${o} elements and the old shape (${n.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var Dse={kernelName:Fl,backendName:"webgpu",kernelFunc:Re};function G3({a:e,b:t,transposeA:a,transposeB:n,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,d=t.shape.length,c=a?e.shape[u-2]:e.shape[u-1],p=n?t.shape[d-1]:t.shape[d-2],h=a?e.shape[u-1]:e.shape[u-2],f=n?t.shape[d-2]:t.shape[d-1],m=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(m),A=v.sizeFromShape(g),x=po.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,f]);v.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[A,f,p]:[A,p,f],S=Re({inputs:{x:e},backend:r,attrs:{shape:b}}),C=Re({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[S,C],_=Math.max(y,A),$=y===1,M=A===1,I=[S,C],E=[{type:"int32",data:[h]},{type:"int32",data:[f]},{type:"int32",data:[c]}],O,L,B=[_,h,f],G=V().get("WEBGPU_MATMUL_PROGRAM_TYPE");switch(G<0&&(h*f<=128?G=Pn.MatMulReduceProgram:_===1&&h<=128&&f<=48&&p>=2e3?G=Pn.MatMulSplitKProgram:h<=16&&(f<=512||p>=2*f)||f<=16&&(h<=512||c>=2*h)?G=Pn.MatMulSmallOutputSizeProgram:G=Pn.MatMulPackedProgram),G){case Pn.MatMulReduceProgram:O=new Rse(B,$,M,a,n,s,l,i);break;case Pn.MatMulSplitKProgram:{if(L=go({backend:r,attrs:{shape:B,value:0,dtype:e.dtype}}),O=new _se(B,p,$,M,a,n),s||l){L=r.runWebGPUProgram(O,I,e.dtype,E,L);let H=new Fse(L.shape,s,l,i),W=null,Q=[L];s&&Q.push(s),i&&Q.push(i),l==="leakyrelu"&&(W=[{type:"float32",data:[o]}],H.uniforms+=" alpha : f32,");let Z=r.runWebGPUProgram(H,Q,L.dtype,W);N.push(L);let re=Re({inputs:{x:Z},backend:r,attrs:{shape:x}});N.push(Z);for(let ee of N)r.disposeData(ee.dataId);return re}break}case Pn.MatMulSmallOutputSizeProgram:O=new $se(b,w,B,a,n,s,l,i);break;case Pn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();O=new Nse(b,B,$,M,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${G}.`)}s&&I.push(s),i&&I.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),O.uniforms+=" alpha : f32,"),L=r.runWebGPUProgram(O,I,e.dtype,E,L);let j=Re({inputs:{x:L},backend:r,attrs:{shape:x}});N.push(L);for(let U of N)r.disposeData(U.dataId);return j}function zse(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n;return G3({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:d})}var Lse={kernelName:Ur,backendName:"webgpu",kernelFunc:zse},Qy=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=T.assertAndGetBroadcastShape(t,a),this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` + `}};function Sr(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new vse(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var wse={kernelName:Pl,backendName:"webgpu",kernelFunc:Sr};function Se(e){let{inputs:t,attrs:a}=e,{x:n}=t,{shape:r}=a,s=v.sizeFromShape(n.shape),i=v.inferFromImplicitShape(r,s),o=v.sizeFromShape(i);return v.assert(s===o,()=>`The new shape (${i}) has ${o} elements and the old shape (${n.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var kse={kernelName:jl,backendName:"webgpu",kernelFunc:Se};function Vh({a:e,b:t,transposeA:a,transposeB:n,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,p=t.shape.length,c=a?e.shape[u-2]:e.shape[u-1],d=n?t.shape[p-1]:t.shape[p-2],h=a?e.shape[u-1]:e.shape[u-2],f=n?t.shape[p-2]:t.shape[p-1],m=e.shape.slice(0,-2),g=t.shape.slice(0,-2),x=v.sizeFromShape(m),A=v.sizeFromShape(g),y=mo.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,f]);v.assert(c===d,()=>`Error in matMul: inner shapes (${c}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[x,c,h]:[x,h,c],w=n?[A,f,d]:[A,d,f],S=Se({inputs:{x:e},backend:r,attrs:{shape:b}}),C=Se({inputs:{x:t},backend:r,attrs:{shape:w}}),E=[S,C],_=Math.max(x,A),$=x===1,M=A===1,I=[S,C],N=[{type:"int32",data:[h]},{type:"int32",data:[f]},{type:"int32",data:[c]}],O,L,B=[_,h,f],G=W().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(G<0){let U=W().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),H=U>0?U:r.thresholdToIncreaseWorkgroups,V=_*Math.ceil(h/32)*Math.ceil(f/32);V<=H||h<=8&&V<=H*2?_*h*f<=128?G=_n.MatMulReduceProgram:_===1&&d>=2e3?G=_n.MatMulSplitKProgram:G=_n.MatMulSmallOutputSizeProgram:G=_n.MatMulPackedProgram}switch(G){case _n.MatMulReduceProgram:O=new gse(B,$,M,a,n,s,l,i);break;case _n.MatMulSplitKProgram:{if(L=Sr({backend:r,attrs:{shape:B,value:0,dtype:e.dtype}}),O=new yse(B,d,$,M,a,n),s||l){L=r.runWebGPUProgram(O,I,e.dtype,N,L);let H=new bse(L.shape,s,l,i),V=null,Q=[L];s&&Q.push(s),i&&Q.push(i),l==="leakyrelu"&&(V=[{type:"float32",data:[o]}],H.uniforms+=" alpha : f32,");let Z=r.runWebGPUProgram(H,Q,L.dtype,V);E.push(L);let re=Se({inputs:{x:Z},backend:r,attrs:{shape:y}});E.push(Z);for(let ee of E)r.disposeData(ee.dataId);return re}break}case _n.MatMulSmallOutputSizeProgram:O=new Ase(b,w,B,a,n,s,l,i);break;case _n.MatMulPackedProgram:let U=r.adapterInfo.isIntel();O=new fse(b,B,$,M,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${G}.`)}s&&I.push(s),i&&I.push(i),l==="leakyrelu"&&(N.push({type:"float32",data:[o]}),O.uniforms+=" alpha : f32,"),L=r.runWebGPUProgram(O,I,e.dtype,N,L);let j=Se({inputs:{x:L},backend:r,attrs:{shape:y}});E.push(L);for(let U of E)r.disposeData(U.dataId);return j}function Ise(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n;return Vh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var Sse={kernelName:Gr,backendName:"webgpu",kernelFunc:Ise},Hx=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=T.assertAndGetBroadcastShape(t,a),this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${W3(this.op,!1)} + ${O3(this.op,!1)} } - ${We("index")} { + ${Ce("index")} { if(index < uniforms.size) { let areal = getARealByOutputIndex(index); let aimag = getAImagByOutputIndex(index); @@ -5765,16 +5835,16 @@ return a / b;`,yZ=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}},_1=class{constructor(e,t,a){this.size=!0,this.variableNames=["A","B"],this.outputShape=T.assertAndGetBroadcastShape(t,a),this.dispatchLayout=Ye(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?a[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type="shared",this.workGroupSize=[256,1,1],this.workPerThread=1):(v.arraysEqual(t,a)&&v.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type="vec4",this.workPerThread=4):(this.isVec4=!1,this.type="plain",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workGroupSize=[128,1,1]),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?"vec4":"f32",a=` + `}},M1=class{constructor(e,t,a){this.size=!0,this.variableNames=["A","B"],this.outputShape=T.assertAndGetBroadcastShape(t,a),this.dispatchLayout=Ve(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?a[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type="shared",this.workgroupSize=[256,1,1],this.workPerThread=1):(v.arraysEqual(t,a)&&v.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type="vec4",this.workPerThread=4):(this.isVec4=!1,this.type="plain",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workgroupSize=[128,1,1]),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?"vec4":"f32",a=` fn binaryOperation(a : ${t}, b : ${t}) -> ${t} { - ${W3(this.op,this.isVec4)} + ${O3(this.op,this.isVec4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",r=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; let b = getBByOutputIndex(index);`;e=` ${a} var sharedBuf : array; - ${We("index")} { + ${Ce("index")} { // Fill in the shared memory buffer. let localIndex = i32(localId.x); if(localIndex < ${this.lastDimensionSize}) { @@ -5790,25 +5860,25 @@ return a / b;`,yZ=` } `}else e=` ${a} - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); let b = getBByOutputIndex(index); setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function cn(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var Bse={kernelName:Fi,backendName:"webgpu",kernelFunc:cn};function ou(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.tensorMap.get(s.dataId),o=cn({inputs:{x:n},backend:a}),l=cn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Wse={kernelName:Id,backendName:"webgpu",kernelFunc:ou},mp=class{constructor(e,t){this.variableNames=["A"],this.size=!0;let a=128;this.workGroupSize=[a,1,1],this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return` + `;return e}};function Za(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var Tse={kernelName:vi,backendName:"webgpu",kernelFunc:Za};function bo(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.tensorMap.get(s.dataId),o=Za({inputs:{x:n},backend:a}),l=Za({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Cse={kernelName:Sd,backendName:"webgpu",kernelFunc:bo},mp=class{constructor(e,t){this.variableNames=["A"],this.size=!0;let a=128;this.workgroupSize=[a,1,1],this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { - ${qs(this.op,!1)} + ${Es(this.op,!1)} } - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); setOutputAtIndex(index, unaryOperation(a)); } } - `}};function Ht({opType:e,cpuKernelImpl:t,dtype:a}){return({inputs:n,backend:r})=>{let{x:s}=n,i=r,o=a||s.dtype;if(i.shouldExecuteOnCPU([s])&&t!=null){let u=i.tensorMap.get(s.dataId),d=t(u.values,o);return i.makeTensorInfo(s.shape,o,d)}let l=new mp(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ca({opType:e,cpuKernelImpl:t,supportsComplex:a=!1,dtype:n}){return({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(a&&i.dtype==="complex64"){let c=l.tensorMap.get(i.dataId),p=l.tensorMap.get(o.dataId),h,f;if(e!==Be.MUL)[h,f]=[[c.complexTensorInfos.real,p.complexTensorInfos.real],[c.complexTensorInfos.imag,p.complexTensorInfos.imag]].map(g=>{let[y,A]=g,x={dataId:y.dataId,dtype:y.dtype,shape:i.shape},b={dataId:A.dataId,dtype:A.dtype,shape:o.shape},w=new _1(e,i.shape,o.shape);return l.runWebGPUProgram(w,[x,b],ra(y.dtype,A.dtype))});else{let g=new Qy(Be.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new Qy(Be.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),A=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:i.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:i.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:o.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:o.shape}];h=l.runWebGPUProgram(g,A,"float32"),f=l.runWebGPUProgram(y,A,"float32")}let m=ou({inputs:{real:h,imag:f},backend:l});return l.disposeData(h.dataId),l.disposeData(f.dataId),m}let u=n||ra(i.dtype,o.dtype);if((i.dtype==="string"||o.dtype==="string"||l.shouldExecuteOnCPU([i,o]))&&t!=null){let c=l.tensorMap.get(i.dataId).values,p=l.tensorMap.get(o.dataId).values,h=i.dtype==="string"?T.fromUint8ToStringArray(c):c,f=i.dtype==="string"?T.fromUint8ToStringArray(p):p,[m,g]=t(i.shape,o.shape,h,f,u);return l.makeTensorInfo(g,u,m)}let d=new _1(e,i.shape,o.shape);return l.runWebGPUProgram(d,[i,o],u)}}var Gv={};He(Gv,{addImpl:()=>jv,bincountImpl:()=>jse,bincountReduceImpl:()=>Hse,castImpl:()=>Uv,ceilImpl:()=>qv,concatImpl:()=>qse,equalImpl:()=>Xv,expImpl:()=>Kv,expm1Impl:()=>Zv,floorImpl:()=>Yv,gatherNdImpl:()=>Xse,gatherV2Impl:()=>Kse,greaterEqualImpl:()=>Qv,greaterImpl:()=>Jv,lessEqualImpl:()=>t9,lessImpl:()=>e9,linSpaceImpl:()=>Zse,logImpl:()=>a9,maxImpl:()=>Yse,maximumImpl:()=>n9,minimumImpl:()=>r9,multiplyImpl:()=>q3,negImpl:()=>Qse,notEqualImpl:()=>s9,prodImpl:()=>tie,raggedGatherImpl:()=>lie,raggedTensorToTensorImpl:()=>uie,rangeImpl:()=>die,rsqrtImpl:()=>i9,scatterImpl:()=>pie,sigmoidImpl:()=>cie,simpleAbsImpl:()=>Vse,sliceImpl:()=>hie,sparseFillEmptyRowsImpl:()=>fie,sparseReshapeImpl:()=>mie,sparseSegmentReductionImpl:()=>gie,sqrtImpl:()=>yie,squaredDifferenceImpl:()=>o9,stridedSliceImpl:()=>Aie,stringNGramsImpl:()=>bie,stringSplitImpl:()=>wie,stringToHashBucketFastImpl:()=>kie,subImpl:()=>l9,tileImpl:()=>Sie,topKImpl:()=>Tie,transposeImpl:()=>eie,uniqueImpl:()=>Cie});function U3(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}function Vse(e){let t=new Float32Array(e.length);for(let a=0;a{let i=T.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),d=v.getTypedArrayFromDType(s,u),c=t.length,p=a.length,h=v.computeStrides(t),f=v.computeStrides(a),m=T.getBroadcastDims(t,i),g=T.getBroadcastDims(a,i);if(m.length+g.length===0)for(let y=0;yx[C]=0);let b=v.locToIndex(x,c,h),w=A.slice(-p);g.forEach(C=>w[C]=0);let S=v.locToIndex(w,p,f);d[y]=e(n[b],r[S])}return[d,i]}}function j3(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}function F1(e,t,a="float32"){if(a==="complex64"){let r=F1(e,t,"float32"),s=F1(e,t,"float32");return j3({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function eA(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function Gse(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}function Uv(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=fn((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function Lc(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return eA({inputs:{x:r},backend:a});let d=F1(a,r.shape,r.dtype),c=Lc({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),p=j3({inputs:{real:c,imag:d},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),p}if(r.dtype==="complex64"){let d=Gse({inputs:{input:r},backend:a}),c=Lc({inputs:{x:d},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(d),c}if(!v.hasEncodingLoss(r.dtype,s)){let d=eA({inputs:{x:r},backend:a});return{dataId:d.dataId,shape:d.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=Uv(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}function Nn(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;U3([i,o],e);let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=i.dtype==="string"?T.fromUint8ToStringArray(u):u,p=i.dtype==="string"?T.fromUint8ToStringArray(d):d,h=n||i.dtype,[f,m]=t(i.shape,o.shape,c,p,h);return l.makeTensorInfo(m,h,f)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=Lc({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),d=l.data.get(u.dataId),c=d.complexTensorInfos.real,p=d.complexTensorInfos.imag,h=l.data.get(c.dataId).values,f=l.data.get(p.dataId).values,m=Lc({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(m.dataId),y=g.complexTensorInfos.real,A=g.complexTensorInfos.imag,x=l.data.get(y.dataId).values,b=l.data.get(A.dataId).values,[w,S,C]=a(i.shape,o.shape,h,f,x,b),N=l.makeTensorInfo(C,"float32",w),_=l.makeTensorInfo(C,"float32",S),$=j3({inputs:{real:N,imag:_},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(_),$}else{let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=n||i.dtype,[p,h]=t(i.shape,o.shape,u,d,c);return l.makeTensorInfo(h,c,p)}}}function H3(e){return(t,a,n,r,s,i)=>{let o=T.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,d=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),p=v.getTypedArrayFromDType("float32",l),h=T.getBroadcastDims(t,o),f=T.getBroadcastDims(a,o),m=T.mergeRealAndImagArrays(n,r),g=T.mergeRealAndImagArrays(s,i),y=t.length,A=v.computeStrides(t),x=a.length,b=v.computeStrides(a);if(h.length+f.length===0)for(let w=0;wC[I]=0);let N=v.locToIndex(C,y,A),_=S.slice(-x);f.forEach(I=>_[I]=0);let $=v.locToIndex(_,x,b),M=e(m[N*2],m[N*2+1],g[$*2],g[$*2+1]);c[w]=M.real,p[w]=M.imag}return[c,p,o]}}var jv=fn((e,t)=>e+t),Use=H3((e,t,a,n)=>({real:e+a,imag:t+n})),E0e=Nn(vr,jv,Use);function jse(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function Hse(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=ve([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function Ss(e){return(t,a,n)=>{let r=v.getTypedArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;if(U3(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=v.sizeFromShape(i.shape),d=a||i.dtype,c=v.getArrayFromDType(d,u);for(let p=0;p{let{x:i}=n;if(U3(i,e),i.dtype==="string"||a==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=a||i.dtype,d=t(l,u,r);return o.makeTensorInfo(i.shape,u,d)}}var qv=Ss(e=>Math.ceil(e)),R0e=lu(Qr,qv);function qse(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?T.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),M0e=Nn(ts,Xv,null,"bool"),Kv=Ss(e=>Math.exp(e)),$0e=lu(as,Kv,"float32"),Zv=Ss(e=>Math.expm1(e)),_0e=lu(Ei,Zv),Yv=Ss(e=>Math.floor(e)),F0e=lu(ns,Yv);function Xse(e,t,a,n,r,s,i,o,l){let u=ve([n,s],a);for(let d=0;d=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),P0e=Nn(rs,Jv,null,"bool"),Qv=fn((e,t)=>e>=t?1:0),O0e=Nn(ss,Qv,null,"bool"),e9=fn((e,t)=>ee<=t?1:0),z0e=Nn(os,t9,null,"bool");function Zse(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),L0e=lu(ls,a9);function Yse(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var n9=fn((e,t)=>Math.max(e,t)),B0e=Nn(us,n9),r9=fn((e,t)=>Math.min(e,t)),W0e=Nn(ds,r9),q3=fn((e,t)=>e*t),Jse=H3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),V0e=Nn(ps,q3,Jse);function Qse(e,t,a){let n=v.createScalarValue(-1,a);return q3([],t,n,e,a)}var s9=fn((e,t)=>e!==t?1:0),G0e=Nn(cs,s9,null,"bool");function eie(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let d=0;d{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function nie(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function rie(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);nie(a,n);let l=1;for(let u=0;u=0){let m=o[f],g=m[m.length-1]-h[d];for(let y=d;yr[i]=s)}return t}function tA(e,t){let a=e.slice(0,t);for(;a.lengtha&&(a=r)}return a}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let a=0,n=e[0],r=0;for(let s=1;s"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,a,n){let r=e.length,s=[];for(let i=0;i0&&s.length!==e[r-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,a,n){let r=e.length,s=[];if(r===0)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${d} which is not less than ${t.length}`);l=t[d]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,a,n){let r=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case vn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,a,n);case vn.ROW_SPLITS:if(r.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${r.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(r,t,a,n);default:throw new Error(`Unsupported partition type: ${vn[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case vn.FIRST_DIM_SIZE:return e[0];case vn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case vn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${vn[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),a=new Array(this.raggedRank+1);a[a.length-1]=1;for(let s=a.length-2;s>=0;--s)a[s]=a[s+1]*t[s+1];let n=nA(t,!1),r=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(n));if(a[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,a[0],t[0]);for(let i=1;i<=this.raggedRank;++i)s=this.calculateOutputIndex(i-1,s,a[i],t[i]);this.setOutput(this.raggedRank,s,r,n)}return[n,r]}setOutput(e,t,a,n){if(a.length===0)return;let r=this.values,s=a,i=n.slice();i=i.slice(e+1);let o=v.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&u.length!==1){let h=this.defaultValueShape;Ee(()=>{let f=J(u,h);u=ei(f,i).dataSync()})}let d=0,c=0,p=0;for(let h=0;h<=l;++h){let f=h=l){let m=a.length;f=Math.floor(m/o)}if(f>p)if(this.defaultValue.length===1)s.subarray(p*o,f*o).fill(this.defaultValue[0]),p=f;else for(;f>p;){let m=s.slice(p*o);aA(m,u,o),++p}f<0?(d=h+1,c=p):(d=h,c=p,p=c+1)}}};function aA(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function uie(e,t,a,n,r,s,i,o,l,u){return new P1(e,t,a,n,r,s,i,o,l,u).compute()}function die(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),U0e=lu(hs,i9);function pie(e,t,a,n,r,s,i,o,l,u){let d=[n/r,r],c=e.values,p=t.values;if(n===0)return ve(a,t.dtype);let h=ve(d,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let f=0;f=n/r)throw new Error(`Invalid indices: ${m} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),j0e=Hv(fs,e=>1/(1+Math.exp(-e)));function hie(e,t,a,n,r){let s=At.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=At.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?T.fromUint8ToStringArray(e):e,u=ve(n,r,l),d=ve(a,r);for(let c=0;cf+t[m]);d.set(u.get(...h),...p)}return r==="string"?T.fromStringArrayToUint8(d.values):d.values}function fie(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),d=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(T.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,d]}let p=!0,h=0,f=new Array(l).fill(0);for(let g=0;g=l)throw new Error(T.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++f[y],p=p&&y>=h,h=y}let m=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(m&&p){let g=e,y=n;for(let A=0;A0){p[c-1]=1;for(let m=c-2;m>=0;--m)p[m]=p[m+1]*n[m+1]}let h=[];if(o>0){h[o-1]=1;for(let m=o-2;m>=0;--m)h[m]=h[m+1]*l[m+1]}let f=v.getArrayFromDType(a,i*o);for(let m=0;m0?r[o-1]+1:0;if(d<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=d;let p=c.reduce((A,x)=>A*x,1),h=v.getArrayFromDType(a,p);if(o===0)return d>0&&h.fill(i),[h,c];if(d<=0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let f=0,m=1,g=0,y=r[f];for(;;){let A=0;if(m=A)throw new Error(T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=d)throw new Error(T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,d));y>g&&h.fill(i,g*u,y*u);for(let x=f;x=l[0])throw new Error(T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,n[x],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),H0e=Hv(ms,e=>Math.sqrt(e)),o9=fn((e,t)=>{let a=e-t;return a*a}),q0e=Nn(gs,o9);function Aie(e,t,a,n){let r=ve(e,t.dtype);for(let s=0;s0?0:i-o),p=0;p+=l*this.leftPad.length;for(let y=0;yy.forEach(A=>f[m++]=A);for(let y=0;y0){g(e[c+d-1]);for(let y=0;y0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(d=>{u+=this.getNumNGrams(l,d)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],p=this.getNumNGrams(c,d);this.createNGrams(e,l,i,u,p,d),u+=p}),this.preserveShort&&u===s[o]){let d=t[o+1]-t[o];if(d===0)continue;let c=d+2*this.padWidth,p=1;this.createNGrams(e,l,i,u,p,c)}}return[i,s]}};function bie(e,t,a,n,r,s,i,o){return new xie(a,n,r,s,i,o).compute(e,t)}function vie(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),Iie=H3((e,t,a,n)=>({real:e-a,imag:t-n})),X0e=Nn(ys,l9,Iie);function Sie(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function u9(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),d=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*d*(o-d)/o)*Math.sign(l-o/2),p=Math.max(a,Math.floor(t-l*d/o+c)),h=Math.min(n,Math.floor(t+(o-l)*d/o+c));u9(e,t,p,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Uu(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Uu(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function Tie(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cf[x]={value:A,index:x}),n{for(let g=0;g`T${a}`),this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(a=>{e.push(`let v${a} = get${a}ByOutputCoords(coords);`)});let t=this.variableNames.map(a=>`v${a}`).join(" + ");return` - ${We("index")} { + `}};function it({opType:e,cpuKernelImpl:t,dtype:a}){return({inputs:n,backend:r})=>{let{x:s}=n,i=r,o=a||s.dtype;if(i.shouldExecuteOnCPU([s])&&t!=null){let u=i.tensorMap.get(s.dataId),p=t(u.values,o);return i.makeTensorInfo(s.shape,o,p)}let l=new mp(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ua({opType:e,cpuKernelImpl:t,supportsComplex:a=!1,dtype:n}){return({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(a&&i.dtype==="complex64"){let c=l.tensorMap.get(i.dataId),d=l.tensorMap.get(o.dataId),h,f;if(e!==De.MUL)[h,f]=[[c.complexTensorInfos.real,d.complexTensorInfos.real],[c.complexTensorInfos.imag,d.complexTensorInfos.imag]].map(g=>{let[x,A]=g,y={dataId:x.dataId,dtype:x.dtype,shape:i.shape},b={dataId:A.dataId,dtype:A.dtype,shape:o.shape},w=new M1(e,i.shape,o.shape);return l.runWebGPUProgram(w,[y,b],ca(x.dtype,A.dtype))});else{let g=new Hx(De.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),x=new Hx(De.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),A=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:i.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:i.shape},{dataId:d.complexTensorInfos.real.dataId,dtype:d.complexTensorInfos.real.dtype,shape:o.shape},{dataId:d.complexTensorInfos.imag.dataId,dtype:d.complexTensorInfos.imag.dtype,shape:o.shape}];h=l.runWebGPUProgram(g,A,"float32"),f=l.runWebGPUProgram(x,A,"float32")}let m=bo({inputs:{real:h,imag:f},backend:l});return l.disposeData(h.dataId),l.disposeData(f.dataId),m}let u=n||ca(i.dtype,o.dtype);if((i.dtype==="string"||o.dtype==="string"||l.shouldExecuteOnCPU([i,o]))&&t!=null){let c=l.tensorMap.get(i.dataId).values,d=l.tensorMap.get(o.dataId).values,h=i.dtype==="string"?T.fromUint8ToStringArray(c):c,f=i.dtype==="string"?T.fromUint8ToStringArray(d):d,[m,g]=t(i.shape,o.shape,h,f,u);return l.makeTensorInfo(g,u,m)}let p=new M1(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:Nse,castImpl:Ese,ceilImpl:Rse,concatImpl:Mse,equalImpl:$se,expImpl:_se,expm1Impl:Pse,floorImpl:Fse,gatherNdImpl:Ose,gatherV2Impl:Dse,greaterEqualImpl:zse,greaterImpl:Lse,lessEqualImpl:Bse,lessImpl:Wse,logImpl:Vse,maxImpl:Use,maximumImpl:Gse,minimumImpl:Hse,multiplyImpl:jse,negImpl:qse,notEqualImpl:Xse,prodImpl:Kse,rangeImpl:Zse,rsqrtImpl:Yse,scatterImpl:Jse,simpleAbsImpl:Qse,sliceImpl:eie,stridedSliceImpl:tie,stringNGramsImpl:aie,subImpl:nie,tileImpl:rie,topKImpl:sie,transposeImpl:iie,uniqueImpl:I0e}=Rh,oie=it({opType:de.ABS,cpuKernelImpl:Qse}),lie={kernelName:vl,backendName:"webgpu",kernelFunc:oie},uie=it({opType:de.ACOS}),die={kernelName:wl,backendName:"webgpu",kernelFunc:uie},pie=it({opType:de.ACOSH}),cie={kernelName:kl,backendName:"webgpu",kernelFunc:pie},hie=ua({opType:De.ADD,cpuKernelImpl:Nse,supportsComplex:!0}),fie={kernelName:Qr,backendName:"webgpu",kernelFunc:hie},mie=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,a)=>`T${a}`),this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(a=>{e.push(`let v${a} = get${a}ByOutputCoords(coords);`)});let t=this.variableNames.map(a=>`v${a}`).join(" + ");return` + ${Ce("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; if (flatIndex < uniforms.size) { @@ -5819,25 +5889,104 @@ return a / b;`,yZ=` } } } - `}};function coe(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return cn({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>ra(o,l)),s=n.map(o=>o.shape),i=new poe(s);return a.runWebGPUProgram(i,n,r)}var hoe={kernelName:hi,backendName:"webgpu",kernelFunc:coe},d9=class{constructor(e,t,a){this.workGroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=a==="min"?"<":">";let[r,s]=T.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=Ye(this.outputShape),v.sizeFromShape(s)<32||v.sizeFromShape(r)>1e3?(this.type="plain",this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize)):(this.type="shared",this.dispatch=Me(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Ar(this.inputShape.length-1)}`,t=()=>{let a="";if(this.outputShape.length===1)this.inputShape.length!==1&&(a+="outputCoords,");else for(let n=0;no.dtype).reduce((o,l)=>ca(o,l)),s=n.map(o=>o.shape),i=new mie(s);return a.runWebGPUProgram(i,n,r)}var xie={kernelName:qs,backendName:"webgpu",kernelFunc:gie},Aie=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let a=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`),` + const tileSize = ${this.workgroupSize[0]}; + var tile : array, ${this.workgroupSize[0]}>; + ${Ce()} { + var x = i32(workgroupId.x) * tileSize + i32(localId.x); + var y = i32(workgroupId.y) * tileSize + i32(localId.y); + let width = uniforms.outShape[0]; + let height = uniforms.outShape[1]; + if (x < width && y < height) { + tile[localId.y][localId.x] = f32(A[y * width + x]); + } + workgroupBarrier(); + + x = i32(workgroupId.y) * tileSize + i32(localId.x); + y = i32(workgroupId.x) * tileSize + i32(localId.y); + if (x < height && y < width) { + setOutputAtIndex((y * height + x), tile[localId.x] + [localId.y]); + } + } + `}},yie=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=new Array(t);for(let n=0;n"} bestValue) + { bestValue = candidate; }`,t="f32(x[offset])"):this.reduceType==="sum"||this.reduceType==="mean"?e=" bestValue = bestValue + candidate; ":this.reduceType==="prod"?(e=" bestValue = bestValue * candidate; ",t="1.0"):this.reduceType==="all"?(e=" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); ",t="1.0"):this.reduceType==="any"&&(e=" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); ",t="0.0");let a=this.reduceType==="mean"?"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));":"setOutputAtIndex(outputIndex, bestValue);";return` + fn DIV_CEIL(a : u32, b : u32) -> u32 { + return ((a - 1u) / b + 1u); + } + + ${` + var xBestValues : array; + `} + fn getOffset(outputIndex : i32) -> i32 { + let outputCoords = getCoordsFromIndex(outputIndex); + let offset = ${this.outputShape.length===1?"outputCoords":"outputCoords[0]"} * uniforms.reduceSize; + return offset; + } + ${Ce("index")} { + let outputIndex = index / i32(workgroupSizeX); + let offset = getOffset(outputIndex); + var bestValue = ${t}; + let Length = uniforms.reduceSize; + let WorkPerThread = DIV_CEIL(u32(Length), workgroupSizeX); + for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; + k = k + i32(workgroupSizeX)) { + let candidate = f32(x[offset + k]); + ${e} + } + xBestValues[localId.x] = bestValue; + workgroupBarrier(); + + var reduceSize = min(u32(Length), workgroupSizeX); + for (var currentSize = reduceSize / 2u; reduceSize > 1u; + currentSize = reduceSize / 2u) { + let interval = DIV_CEIL(reduceSize, 2u); + if (localId.x < currentSize) { + let candidate = xBestValues[localId.x + interval]; + ${e} + xBestValues[localId.x] = bestValue; + } + reduceSize = interval; + workgroupBarrier(); + } + + if (localId.x == 0u && outputIndex < uniforms.size) { + ${a} + } + } + `}};function vo(e,t,a,n,r){let s=e.shape.length,i=[],o=v.parseAxisParam(t,e.shape),l=o,u=T.getAxesPermutation(l,s),p=e;u!=null&&(p=yr({inputs:{x:e},attrs:{perm:u},backend:r}),l=T.getInnerMostAxes(l.length,s),i.push(p)),T.assertAxesAreInnerMostDims(n,l,s);let[c,d]=T.computeOutAndReduceShapes(p.shape,l),h=c;a&&(h=T.expandShapeToKeepDim(c,o));let f;if((n==="max"||n==="prod")&&r.shouldExecuteOnCPU([p])){let m=r.tensorMap.get(p.dataId).values;switch(n){case"max":let g=Use(m,v.sizeFromShape(d),h,e.dtype);f=r.makeTensorInfo(h,e.dtype,g);break;case"prod":let{outVals:x,outShape:A,outDtype:y}=Kse(p.shape,p.dtype,m,l);f=r.makeTensorInfo(A,y,x);break;default:throw new Error(`${n} CPU implementation is not yet supported.`)}}else{let m=v.sizeFromShape(d),g=v.sizeFromShape(p.shape)/m,x={windowSize:m,inSize:m,batchSize:g,outSize:1},A=n==="mean"?"float32":Hd(e.dtype),y=[{type:"int32",data:[m]}],b=new wie(x,n),w=r.runWebGPUProgram(b,[p],A,y);i.push(w),f=Se({inputs:{x:w},attrs:{shape:h},backend:r})}return i.forEach(m=>r.disposeData(m.dataId)),f}function kie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return vo(r,i,s,"all",a)}var Iie={kernelName:Xs,backendName:"webgpu",kernelFunc:kie};function Sie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return vo(r,i,s,"any",a)}var Tie={kernelName:Ks,backendName:"webgpu",kernelFunc:Sie},M8=class{constructor(e,t,a){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=a==="min"?"<":">";let[r,s]=T.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=Ve(this.outputShape),v.sizeFromShape(s)<32||v.sizeFromShape(r)>1e3?(this.type="plain",this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=Ne(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${xr(this.inputShape.length-1)}`,t=()=>{let a="";if(this.outputShape.length===1)this.inputShape.length!==1&&(a+="outputCoords,");else for(let n=0;n u32 { return ((a - 1u) / b + 1u); } ${` - var xBestIndices : array; - var xBestValues : array; + var xBestIndices : array; + var xBestValues : array; `} - ${We("index")} { - let outputIndex = index / i32(workGroupSizeX); + ${Ce("index")} { + let outputIndex = index / i32(workgroupSizeX); let reduceLength = ${e()}; var bestIndex = i32(localId.x); var bestValue = uniforms.infinityValue; let outputCoords = getCoordsFromIndex(outputIndex); for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { + k = k + i32(workgroupSizeX)) { let candidate = getX(${t()} k); if (!isnan(candidate) && candidate ${this.op} bestValue) { bestValue = candidate; @@ -5848,7 +5997,7 @@ return a / b;`,yZ=` xBestIndices[localId.x] = bestIndex; workgroupBarrier(); - var reduceSize = min(u32(reduceLength), workGroupSizeX); + var reduceSize = min(u32(reduceLength), workgroupSizeX); for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) { let interval = DIV_CEIL(reduceSize, 2u); @@ -5869,7 +6018,7 @@ return a / b;`,yZ=` } } `:` - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let outputCoords = getCoordsFromIndex(index); var bestIndex = 0; @@ -5885,41 +6034,8 @@ return a / b;`,yZ=` setOutputAtIndexI32(index, bestIndex); } } - `}},foe=class{constructor(e,t){this.variableNames=["A"],this.workGroupSize=[16,16,1];let a=new Array(e.length);for(let n=0;n tile : array, ${this.workGroupSize[0]}>; - ${hd()} - fn _start(@builtin(local_invocation_id) localId : vec3, - @builtin(workgroup_id) workgroupId : vec3) { - var x = i32(workgroupId.x) * TILE_DIM + i32(localId.x); - var y = i32(workgroupId.y) * TILE_DIM + i32(localId.y); - let width = uniforms.outShape[0]; - let height = uniforms.outShape[1]; - if (x < width && y < height) { - tile[localId.y][localId.x] = A[y * width + x]; - } - workgroupBarrier(); - - x = i32(workgroupId.y) * TILE_DIM + i32(localId.x); - y = i32(workgroupId.x) * TILE_DIM + i32(localId.y); - if (x < height && y < width) { - setOutputAtIndex((y * height + x), tile[localId.x] - [localId.y]); - } - } - `}},moe=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=new Array(t);for(let n=0;na.disposeData(h.dataId)),p}var xoe={kernelName:fi,backendName:"webgpu",kernelFunc:Aoe};function boe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=br({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let d=new d9(l.shape,i[0],"min"),c=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],p=a.runWebGPUProgram(d,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),p}var voe={kernelName:xd,backendName:"webgpu",kernelFunc:boe},woe=ca({opType:Be.ATAN2}),koe={kernelName:xl,backendName:"webgpu",kernelFunc:woe},rA=class{constructor(e,t){this.variableNames=["x"],this.uniforms="stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,",this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e="resultValue = max(value, resultValue);";this.poolType==="avg"&&(e="resultValue = resultValue + value; count = count + 1.0;");let t="resultValue";return this.poolType==="avg"&&(t="resultValue / count"),` - ${We("index")} { + `}};function Cie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=yr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=new M8(l.shape,i[0],"max"),c=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],d=a.runWebGPUProgram(p,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),d}var Nie={kernelName:Zs,backendName:"webgpu",kernelFunc:Cie};function Eie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=T.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=yr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=T.getInnerMostAxes(i.length,l.shape.length)),T.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=new M8(l.shape,i[0],"min"),c=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],d=a.runWebGPUProgram(p,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),d}var Rie={kernelName:kd,backendName:"webgpu",kernelFunc:Eie},Mie=it({opType:de.ASIN}),$ie={kernelName:Il,backendName:"webgpu",kernelFunc:Mie},_ie=it({opType:de.ASINH}),Pie={kernelName:Sl,backendName:"webgpu",kernelFunc:_ie},Fie=it({opType:de.ATAN}),Oie={kernelName:Tl,backendName:"webgpu",kernelFunc:Fie},Die=ua({opType:De.ATAN2}),zie={kernelName:Nl,backendName:"webgpu",kernelFunc:Die},Lie=it({opType:de.ATANH}),Bie={kernelName:Cl,backendName:"webgpu",kernelFunc:Lie},jx=class{constructor(e,t){this.variableNames=["x"],this.uniforms="stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e="resultValue = max(value, resultValue);";this.poolType==="avg"&&(e="resultValue = resultValue + value; count = count + 1.0;");let t="resultValue";return this.poolType==="avg"&&(t="resultValue / count"),` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -5951,8 +6067,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, ${t}); } } - `}},Ioe=class{constructor(e){this.variableNames=["x"],this.uniforms="stride : vec2,",this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` - ${We("index")} { + `}},Wie=class{constructor(e){this.variableNames=["x"],this.uniforms="stride : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -5966,56 +6082,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, value); } } - `}},Soe=class{constructor(e,t){this.workGroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="reduceSize : i32,",this.size=!0,this.inputShape=[e.batchSize,e.inSize];let[a]=T.computeOutAndReduceShapes(this.inputShape,[1]);this.outputShape=a.length===0?[1]:a,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0";this.reduceType==="min"||this.reduceType==="max"?(e=` - if (isnan(candidate)) { - bestValue = uniforms.NAN; - } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) - { bestValue = candidate; }`,t="f32(x[offset])"):this.reduceType==="sum"||this.reduceType==="mean"?e=" bestValue = bestValue + candidate; ":this.reduceType==="prod"&&(e=" bestValue = bestValue * candidate; ",t="1.0");let a=this.reduceType==="mean"?"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));":"setOutputAtIndex(outputIndex, bestValue);";return` - fn DIV_CEIL(a : u32, b : u32) -> u32 { - return ((a - 1u) / b + 1u); - } - - ${` - var xBestValues : array; - `} - fn getOffset(outputIndex : i32) -> i32 { - let outputCoords = getCoordsFromIndex(outputIndex); - let offset = ${this.outputShape.length===1?"outputCoords":"outputCoords[0]"} * uniforms.reduceSize; - return offset; - } - ${We("index")} { - let outputIndex = index / i32(workGroupSizeX); - let offset = getOffset(outputIndex); - var bestValue = ${t}; - let Length = uniforms.reduceSize; - let WorkPerThread = DIV_CEIL(u32(Length), workGroupSizeX); - for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { - let candidate = f32(x[offset + k]); - ${e} - } - xBestValues[localId.x] = bestValue; - workgroupBarrier(); - - var reduceSize = min(u32(Length), workGroupSizeX); - for (var currentSize = reduceSize / 2u; reduceSize > 1u; - currentSize = reduceSize / 2u) { - let interval = DIV_CEIL(reduceSize, 2u); - if (localId.x < currentSize) { - let candidate = xBestValues[localId.x + interval]; - ${e} - xBestValues[localId.x] = bestValue; - } - reduceSize = interval; - workgroupBarrier(); - } - - if (localId.x == 0u && outputIndex < uniforms.size) { - ${a} - } - } - `}};function gp(e,t,a,n,r){let s=e.shape.length,i=[],o=v.parseAxisParam(t,e.shape),l=o,u=T.getAxesPermutation(l,s),d=e;u!=null&&(d=br({inputs:{x:e},attrs:{perm:u},backend:r}),l=T.getInnerMostAxes(l.length,s),i.push(d)),T.assertAxesAreInnerMostDims(n,l,s);let[c,p]=T.computeOutAndReduceShapes(d.shape,l),h=c;a&&(h=T.expandShapeToKeepDim(c,o));let f;if((n==="max"||n==="prod")&&r.shouldExecuteOnCPU([d])){let m=r.tensorMap.get(d.dataId).values;switch(n){case"max":let g=Gie(m,v.sizeFromShape(p),h,e.dtype);f=r.makeTensorInfo(h,e.dtype,g);break;case"prod":let{outVals:y,outShape:A,outDtype:x}=Kie(d.shape,d.dtype,m,l);f=r.makeTensorInfo(A,x,y);break;default:throw new Error(`${n} CPU implementation is not yet supported.`)}}else{let m=v.sizeFromShape(p),g=v.sizeFromShape(d.shape)/m,y={windowSize:m,inSize:m,batchSize:g,outSize:1},A=n==="mean"?"float32":jd(e.dtype),x=[{type:"int32",data:[m]}],b=new Soe(y,n),w=r.runWebGPUProgram(b,[d],A,x);i.push(w),f=Re({inputs:{x:w},attrs:{shape:h},backend:r})}return i.forEach(m=>r.disposeData(m.dataId)),f}function X3(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return gp(r,s,i,"max",a)}var Toe={kernelName:zi,backendName:"webgpu",kernelFunc:X3};function p9(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return gp(r,i,s,"mean",a)}var Coe={kernelName:Bi,backendName:"webgpu",kernelFunc:p9};function c9(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return cn({inputs:{x:e},backend:n});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.padInfo.type==="VALID"){let i=e.shape.length,o=Re({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=p9({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=X3({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=Re({inputs:{x:l},backend:n,attrs:{shape:t.outShape}});return n.disposeData(o.dataId),n.disposeData(l.dataId),u}let r,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?r=new Ioe(t):(a==="avg"?r=new rA(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new rA(t,"max")),s.push({type:"int32",data:[t.padInfo.top,t.padInfo.left]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]},{type:"int32",data:[t.inHeight,t.inWidth]},{type:"int32",data:[t.effectiveFilterHeight,t.effectiveFilterWidth]})),n.runWebGPUProgram(r,[e],e.dtype,s)}function Noe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,d=T.computePool2DInfo(r.shape,s,i,u,o,l);return c9(r,d,"avg",a)}var Eoe={kernelName:mi,backendName:"webgpu",kernelFunc:Noe};function Roe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return G3({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var Moe={kernelName:gi,backendName:"webgpu",kernelFunc:Roe},$oe=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${na(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=na(this.rank),t=_oe(this.rank),a;return this.start.length===1?a=this.outputShape.map((n,r)=>"sourceLoc = uniforms.start + coords;"):a=this.outputShape.map((n,r)=>`sourceLoc.${O1[r]} = uniforms.start.${Ar(r)} + coords.${O1[r]};`),` - ${We("index")} { + `}};function z3(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return vo(r,s,i,"max",a)}var Vie={kernelName:Ei,backendName:"webgpu",kernelFunc:z3};function $8(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return vo(r,i,s,"mean",a)}var Uie={kernelName:$i,backendName:"webgpu",kernelFunc:$8};function _8(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return Za({inputs:{x:e},backend:n});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.padInfo.type==="VALID"){let i=e.shape.length,o=Se({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=$8({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=z3({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=Se({inputs:{x:l},backend:n,attrs:{shape:t.outShape}});return n.disposeData(o.dataId),n.disposeData(l.dataId),u}let r,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?r=new Wie(t):(a==="avg"?r=new jx(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new jx(t,"max")),s.push({type:"int32",data:[t.padInfo.top,t.padInfo.left]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]},{type:"int32",data:[t.inHeight,t.inWidth]},{type:"int32",data:[t.effectiveFilterHeight,t.effectiveFilterWidth]})),n.runWebGPUProgram(r,[e],e.dtype,s)}function Gie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=T.computePool2DInfo(r.shape,s,i,u,o,l);return _8(r,p,"avg",a)}var Hie={kernelName:Ys,backendName:"webgpu",kernelFunc:Gie};function jie(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return Vh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var qie={kernelName:Js,backendName:"webgpu",kernelFunc:jie},Xie=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ra(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=ra(this.rank),t=Kie(this.rank),a;return this.start.length===1?a=this.outputShape.map((n,r)=>"sourceLoc = uniforms.start + coords;"):a=this.outputShape.map((n,r)=>`sourceLoc.${$1[r]} = uniforms.start.${xr(r)} + coords.${$1[r]};`),` + ${Ce("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; let coords = getCoordsFromIndex(index); @@ -6024,8 +6092,43 @@ return a / b;`,yZ=` setOutputAtIndex(index, getSource(${t})); } } - `}},O1=["x","y","z","w","u","v"];function _oe(e){if(e===1)return"sourceLoc";if(e<=6)return O1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function uu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=At.parseSliceParams(r,s,i);if(At.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),p=eoe(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}if(v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);let u=new $oe(o,l),d=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,d)}var Foe={kernelName:zl,backendName:"webgpu",kernelFunc:uu},Poe=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((A,x)=>A*x),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),d=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),p=T.getSliceSize(d,i,s.length),h=[],f=Re({inputs:{x:r},backend:a,attrs:{shape:l}}),m=br({inputs:{x:f},backend:a,attrs:{perm:u}}),g=Re({inputs:{x:m},backend:a,attrs:{shape:d}}),y=uu({inputs:{x:g},backend:a,attrs:{begin:c,size:p}});return h.push(f),h.push(m),h.push(g),h.forEach(A=>a.disposeData(A.dataId)),y},Ooe={kernelName:bl,backendName:"webgpu",kernelFunc:Poe},h9=ca({opType:Be.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Xie}),Doe={kernelName:cs,backendName:"webgpu",kernelFunc:h9};function yp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return cn({inputs:{x:r.complexTensorInfos.real},backend:a})}var zoe={kernelName:$d,backendName:"webgpu",kernelFunc:yp};function Loe(e,t){let a=new mp(e.shape,Se.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function D1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return cn({inputs:{x:r},backend:a});let i=pn(r.shape),o=D1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ou({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=yp({inputs:{input:r},backend:a}),o=D1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=cn({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.tensorMap.get(r.dataId).values,[o,l,u]=Eie(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return Loe(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=h9({inputs:{a:r,b:i},backend:a});return a.disposeData(i.dataId),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var Boe={kernelName:yi,backendName:"webgpu",kernelFunc:D1},Woe=Ht({opType:Se.CEIL,cpuKernelImpl:Rie}),Voe={kernelName:Qr,backendName:"webgpu",kernelFunc:Woe},Goe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workGroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` - ${We("index")} { + `}},$1=["x","y","z","w","u","v"];function Kie(e){if(e===1)return"sourceLoc";if(e<=6)return $1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function xu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=It.parseSliceParams(r,s,i);if(It.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),d=eie(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}if(v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);let u=new Xie(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Zie={kernelName:Kl,backendName:"webgpu",kernelFunc:xu},Yie=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((A,y)=>A*y),l=T.getReshaped(r.shape,s,o),u=T.getPermuted(l.length,s.length),p=T.getReshapedPermuted(r.shape,s,o),c=T.getSliceBeginCoords(i,s.length),d=T.getSliceSize(p,i,s.length),h=[],f=Se({inputs:{x:r},backend:a,attrs:{shape:l}}),m=yr({inputs:{x:f},backend:a,attrs:{perm:u}}),g=Se({inputs:{x:m},backend:a,attrs:{shape:p}}),x=xu({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(f),h.push(m),h.push(g),h.forEach(A=>a.disposeData(A.dataId)),x},Jie={kernelName:El,backendName:"webgpu",kernelFunc:Yie},Qie=` + fn bincount_write(index: i32, value: f32) { + var oldValue = atomicLoad(& (result[index])); + var exchanged = false; + for (; !exchanged;) { + let newValueF32 = bitcast(oldValue) + value; + let newValue = bitcast(newValueF32); + let res = atomicCompareExchangeWeak( + &(result[index]), oldValue, newValue); + oldValue = res.old_value; + exchanged = res.exchanged; + } + } +`,eoe=` + fn bincount_write(index: i32, value: f32) { + result[index] = value; + } +`,P8=class{constructor(e,t,a=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=a,a&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` + ${this.binaryOutput?eoe:Qie} + ${Ce("index")} { + ${this.rank===1?`if (index < uniforms.xShape) { + let indexVal = i32(getX(index)); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput?1:this.hasWeights?"f32(getW(index))":"1."}; + bincount_write(indexVal, value); + } + }`:`let coord = getCoordsFromIndex(index); + if (coordsInBounds2D(coord, uniforms.xShape)) { + let indexVal = i32(getX(coord[0], coord[1])); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput?1:this.hasWeights?"f32(getW(coord[0], coord[1]))":"1."}; + bincount_write(coord.x * uniforms.binCountSize + indexVal, value); + } + }`} + } + `}};function toe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=v.sizeFromShape(r.shape),l=v.sizeFromShape(s.shape)>0,u=[i],p=s.dtype,c=Sr({backend:a,attrs:{shape:u,value:0,dtype:p}}),d=new P8([o],l),h=[{type:"int32",data:[i]}],f=l?[r,s]:[r];return a.runWebGPUProgram(d,f,p,h,c)}var aoe={kernelName:Id,backendName:"webgpu",kernelFunc:toe},F8=ua({opType:De.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Xse}),noe={kernelName:Di,backendName:"webgpu",kernelFunc:F8};function gp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return Za({inputs:{x:r.complexTensorInfos.real},backend:a})}var roe={kernelName:Md,backendName:"webgpu",kernelFunc:gp};function soe(e,t){let a=new mp(e.shape,de.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function _1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return Za({inputs:{x:r},backend:a});let i=hn(r.shape),o=_1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=bo({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=gp({inputs:{input:r},backend:a}),o=_1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=Za({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.tensorMap.get(r.dataId).values,[o,l,u]=Ese(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return soe(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=F8({inputs:{a:r,b:i},backend:a});return a.disposeData(i.dataId),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var ioe={kernelName:Qs,backendName:"webgpu",kernelFunc:_1},ooe=it({opType:de.CEIL,cpuKernelImpl:Rse}),loe={kernelName:ei,backendName:"webgpu",kernelFunc:ooe},uoe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + ${Ce("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); var clampedValue : vec4; @@ -6040,8 +6143,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, clampedValue); } } - `}},Uoe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="clip"}getUserCode(){return` - ${We("index")} { + `}},doe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` + ${Ce("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); if (isnan(value)) { @@ -6051,8 +6154,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function joe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o,l=[{type:"float32",data:[s]},{type:"float32",data:[i]}];return v.sizeFromShape(r.shape)%4===0?o=new Goe(r.shape):o=new Uoe(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var Hoe={kernelName:es,backendName:"webgpu",kernelFunc:joe},qoe=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=T.computeOutShape(e,1),this.variableNames=e.map((t,a)=>`T${a}`),this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let n=1;n`T${a}`),this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let n=1;nyp({inputs:{input:x},backend:a})),m=e.map(x=>qh({inputs:{input:x},backend:a})),g=ju(f,t,a),y=ju(m,t,a),A=ou({inputs:{real:g,imag:y},backend:a});return f.forEach(x=>a.disposeData(x.dataId)),m.forEach(x=>a.disposeData(x.dataId)),a.disposeData(g.dataId),a.disposeData(y.dataId),A}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let f=e.map(w=>{let S=[-1,v.sizeFromShape(w.shape.slice(t))];return Re({inputs:{x:w},backend:a,attrs:{shape:S}})}),m=f.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=T.computeOutShape(f.map(w=>w.shape),1),y=f[0].shape[0]===1,A=Mie(m,g,n,y),x=T.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(x,n,A);return f.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let f=[];for(let g=0;gf.shape),u=new qoe(l),d=[],c=new Array(l.length-1);if(c.length>0){c[0]=l[0][1],d.push({type:"int32",data:[c[0]]});for(let f=1;fa.disposeData(f.dataId));let h=Re({inputs:{x:p},backend:a,attrs:{shape:o}});return a.disposeData(p.dataId),h}function Koe(e,t,a){let n=T.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>Re({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function f9(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?cn({inputs:{x:l[0]},backend:a}):ju(l,s,a)}var Zoe={kernelName:vl,backendName:"webgpu",kernelFunc:f9};function Yoe(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let d=N=>{switch(N){case 1:return"resData = x[xIndex];";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${N} is not supported.`)}},c=N=>{switch(N){case 1:return"return W[row * uniforms.wShape[3] + colIn];";case 4:return"return W[row * uniforms.wShape[3] / 4 + colIn];";default:throw new Error(`innerElementSize ${N} is not supported.`)}},p=e?` + `}};function Uh(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return Za({inputs:{x:r.complexTensorInfos.imag},backend:a})}var foe={kernelName:Rd,backendName:"webgpu",kernelFunc:Uh};function Ju(e,t,a){let n=e[0].dtype;if(n==="complex64"){let f=e.map(y=>gp({inputs:{input:y},backend:a})),m=e.map(y=>Uh({inputs:{input:y},backend:a})),g=Ju(f,t,a),x=Ju(m,t,a),A=bo({inputs:{real:g,imag:x},backend:a});return f.forEach(y=>a.disposeData(y.dataId)),m.forEach(y=>a.disposeData(y.dataId)),a.disposeData(g.dataId),a.disposeData(x.dataId),A}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let f=e.map(w=>{let S=[-1,v.sizeFromShape(w.shape.slice(t))];return Se({inputs:{x:w},backend:a,attrs:{shape:S}})}),m=f.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=T.computeOutShape(f.map(w=>w.shape),1),x=f[0].shape[0]===1,A=Mse(m,g,n,x),y=T.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(y,n,A);return f.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let f=[];for(let g=0;gf.shape),u=new hoe(l),p=[],c=new Array(l.length-1);if(c.length>0){c[0]=l[0][1],p.push({type:"int32",data:[c[0]]});for(let f=1;fa.disposeData(f.dataId));let h=Se({inputs:{x:d},backend:a,attrs:{shape:o}});return a.disposeData(d.dataId),h}function moe(e,t,a){let n=T.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>Se({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function O8(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);T.assertParamsConsistent(i,s);let o=T.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?Za({inputs:{x:l[0]},backend:a}):Ju(l,s,a)}var goe={kernelName:Rl,backendName:"webgpu",kernelFunc:O8};function xoe(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let p=E=>{switch(E){case 1:return"resData = x[xIndex];";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${E} is not supported.`)}},c=E=>{switch(E){case 1:return"return W[row * uniforms.wShape[3] + colIn];";case 4:return"return W[row * uniforms.wShape[3] / 4 + colIn];";default:throw new Error(`innerElementSize ${E} is not supported.`)}},d=e?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); @@ -6081,47 +6184,47 @@ return a / b;`,yZ=` row, col / outWidth, col % outWidth); - `,f=e?"uniforms.xShape[1]":"uniforms.xShape[2]",m=e?"uniforms.xShape[2]":"uniforms.xShape[3]",g=e?"row":"col",y=e?"col":"row",A=` + `,f=e?"uniforms.xShape[1]":"uniforms.xShape[2]",m=e?"uniforms.xShape[2]":"uniforms.xShape[3]",g=e?"row":"col",x=e?"col":"row",A=` let inChannels = uniforms.wShape[2]; let outWidth = ${e?"uniforms.outShape[2]":"uniforms.outShape[3]"}; let outRow = ${g} / outWidth; let outCol = ${g} % outWidth; - let WRow = ${y} / (uniforms.filterDims[1] * inChannels); - let WCol = ${y} / inChannels % uniforms.filterDims[1]; + let WRow = ${x} / (uniforms.filterDims[1] * inChannels); + let WCol = ${x} / inChannels % uniforms.filterDims[1]; let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; - let xCh = ${y} % inChannels; - var resData = ${Rt(o)}(0.0); + let xCh = ${x} % inChannels; + var resData = ${Mt(o)}(0.0); // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${m}) { - ${p} + ${d} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); - ${d(o)} + ${p(o)} } - return resData;`,x=e?t&&n?` + return resData;`,y=e?t&&n?` let col = colIn * ${o}; ${A}`:` let col = colIn * ${o}; if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${A} } - return ${Rt(o)}(0.0);`:n&&a?` + return ${Mt(o)}(0.0);`:n&&a?` let col = colIn * ${o}; ${A}`:` let col = colIn * ${o}; if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${A} } - return ${Rt(o)}(0.0);`,b=`${c(l)}`,w=Rt(u),S=Rt(e?o:l),C=Rt(e?l:o);return` - ${Cr(s,i,u===4,4)} + return ${Mt(o)}(0.0);`,b=`${c(l)}`,w=Mt(u),S=Mt(e?o:l),C=Mt(e?l:o);return` + ${Ir(s,i,u===4,4)} fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${S} { - ${e?x:b} + ${e?y:b} } fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${C} { - ${e?b:x} + ${e?b:y} } fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${w}) { @@ -6131,14 +6234,14 @@ return a / b;`,yZ=` var value = valueIn; let outWidth = ${e?"uniforms.outShape[2]":"uniforms.outShape[3]"}; ${h} - ${mo(r,s)} + ${yo(r,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var Joe=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workGroupSize=z3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=L3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=["f32","vec4"]):(this.innerElementSize=4,this.variableTypes=["vec4","vec4"]),r&&(this.variableNames.push("bias"),this.variableTypes.push("vec4")),i&&(this.variableNames.push("preluActivationWeights"),this.variableTypes.push("vec4"))):(this.innerElementSize=this.elementsPerThread[0],r&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=o,this.addBias=r,this.activation=s,this.hasPreluActivationWeights=i,this.tileAOuter=this.workGroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workGroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workGroupSize[0]*this.innerElementSize,this.workGroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=a%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?jh(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner):Hh(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` - ${Yoe(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var Aoe=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=$3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=_3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=["f32","vec4"]):(this.innerElementSize=4,this.variableTypes=["vec4","vec4"]),r&&(this.variableNames.push("bias"),this.variableTypes.push("vec4")),i&&(this.variableNames.push("preluActivationWeights"),this.variableTypes.push("vec4"))):(this.innerElementSize=this.elementsPerThread[0],r&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=o,this.addBias=r,this.activation=s,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=a%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Bh(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Wh(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${xoe(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}},Qoe=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,",this.workGroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t,this.activation=a,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` - ${Cr(this.activation,this.hasPreluActivationWeights,!1,4)} + `}},yoe=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=a,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` + ${Ir(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -6159,11 +6262,11 @@ return a / b;`,yZ=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${mo(this.addBias,this.activation)} + ${yo(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } - ${We("index")} { + ${Ce("index")} { let coords = getOutputCoords(); let batch = coords[0]; let outChannel = ${this.isChannelsLast?"coords[3];":"coords[1];"} @@ -6183,7 +6286,31 @@ return a / b;`,yZ=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}};function sA(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function ele({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=a.dataFormat==="channelsLast",u=!l,d=!1,c=l&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",p=[],h,f;if(c){let y=a.inHeight*a.inWidth*a.inChannels;h=Re({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,y]}}),f=Re({inputs:{x:t},backend:n,attrs:{shape:[1,y,a.outChannels]}})}else h=Re({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),f=Re({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(p.push(h),p.push(f),s!=null){let y=sA(s.shape,l);y!=null&&(s=Re({inputs:{x:s},backend:n,attrs:{shape:y}}),p.push(s))}if(r!=null){let y=sA(r.shape,l);y!=null&&(r=Re({inputs:{x:r},backend:n,attrs:{shape:y}}),p.push(r))}let m=G3({a:l?h:f,b:l?f:h,transposeA:u,transposeB:d,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=Re({inputs:{x:m},backend:n,attrs:{shape:a.outShape}});p.push(m);for(let y of p)n.disposeData(y.dataId);return g}function m9({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=r!=null,u=s!=null,d=a.dataFormat==="channelsLast",c=d&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",p=V().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!p&&(c||a.filterHeight===1&&a.filterWidth===1&&a.dilationHeight===1&&a.dilationWidth===1&&a.strideHeight===1&&a.strideWidth===1&&(a.padInfo.type==="SAME"||a.padInfo.type==="VALID")))return ele({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h,f=[a.padInfo.top,a.padInfo.left],m=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...f]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(p)h=new Qoe(a,l,o,u);else{let x=d?a.outHeight*a.outWidth:a.outChannels,b=d?a.outChannels:a.outHeight*a.outWidth,w=a.filterHeight*a.filterWidth*a.inChannels;m.push({type:"int32",data:[x]},{type:"int32",data:[b]},{type:"int32",data:[w]});let S=n.adapterInfo.isIntel();h=new Joe(a,x,b,w,l,o,u,S)}let g=[],y=[e,t];l&&(!d&&r.shape.length===1&&(r=Re({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),g.push(r)),y.push(r)),u&&(!d&&s.shape.length===1&&(s=Re({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),g.push(s)),y.push(s)),o==="leakyrelu"&&(m.push({type:"float32",data:[i]}),h.uniforms+=" alpha : f32,");let A=n.runWebGPUProgram(h,y,e.dtype,m);for(let x of g)n.disposeData(x.dataId);return A}function tle(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=a,c=T.convertConv2DDataFormat(l),p=T.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c);return m9({x:r,filter:s,convInfo:p,backend:n})}var ale={kernelName:Ai,backendName:"webgpu",kernelFunc:tle};function nle(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}},boe=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pad : vec2, stride : vec2, dilation : vec2, outWidth : i32, itemsPerBlockRow : i32, + inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?"coords[1]":"coords[2]",n=this.isChannelsLast?"coords[2]":"coords[1]",r=this.isChannelsLast?"getX(batch, xRow, xCol, ch)":"getX(batch, ch, xRow, xCol)";return` + ${Ce("index")} { + let coords = getCoordsFromIndex(index); + if(index < uniforms.size) { + let batch = coords[0]; + let row = ${a}; + let col = ${n}; + let offsetY = (row / uniforms.outWidth) * uniforms.stride[0] - uniforms.pad[0]; + let xRow = offsetY + uniforms.dilation[0] * (col / uniforms.itemsPerBlockRow); + var value = 0.0; + if(xRow < uniforms.xShape[${e}] && xRow >= 0) { + let offsetX = (row % uniforms.outWidth) * uniforms.stride[1] - + uniforms.pad[1]; + let xCol = offsetX + uniforms.dilation[1] * ((col % + uniforms.itemsPerBlockRow) / uniforms.inChannels); + let ch = col % uniforms.inChannels; + if(xCol < uniforms.xShape[${t}] && xCol >= 0) { + value = ${r}; + } + } + setOutputAtIndex(index, value); + } + } + `}};function zc(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function voe({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=a.dataFormat==="channelsLast",u=!l,p=!1,c=l&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",d=[],h,f;if(c){let x=a.inHeight*a.inWidth*a.inChannels;h=Se({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,x]}}),f=Se({inputs:{x:t},backend:n,attrs:{shape:[1,x,a.outChannels]}})}else h=Se({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),f=Se({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(d.push(h),d.push(f),s!=null){let x=zc(s.shape,l);x!=null&&(s=Se({inputs:{x:s},backend:n,attrs:{shape:x}}),d.push(s))}if(r!=null){let x=zc(r.shape,l);x!=null&&(r=Se({inputs:{x:r},backend:n,attrs:{shape:x}}),d.push(r))}let m=Vh({a:l?h:f,b:l?f:h,transposeA:u,transposeB:p,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=Se({inputs:{x:m},backend:n,attrs:{shape:a.outShape}});d.push(m);for(let x of d)n.disposeData(x.dataId);return g}function woe({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,strideWidth:c,strideHeight:d,padInfo:h,outWidth:f,outHeight:m,dilationWidth:g,dilationHeight:x,dataFormat:A}=a,y=A==="channelsLast",b=l*u*p,w=m*f,S=y?[a.batchSize,w,b]:[a.batchSize,b,w],C=new boe(S,y),E=[{type:"int32",data:[h.top,h.left]},{type:"int32",data:[d,c]},{type:"int32",data:[x,g]},{type:"int32",data:[f]},{type:"int32",data:[p*l]},{type:"int32",data:[p]}],_=n.runWebGPUProgram(C,[e],e.dtype,E),$=[];$.push(_);let M=Se({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if($.push(M),s!=null){let O=zc(s.shape,y);O!=null&&(s=Se({inputs:{x:s},backend:n,attrs:{shape:O}}),$.push(s))}if(r!=null){let O=zc(r.shape,y);O!=null&&(r=Se({inputs:{x:r},backend:n,attrs:{shape:O}}),$.push(r))}let I=Vh({a:y?_:M,b:y?M:_,transposeA:!y,transposeB:!1,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),N=Se({inputs:{x:I},backend:n,attrs:{shape:a.outShape}});$.push(I);for(let O of $)n.disposeData(O.dataId);return N}function D8({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=r!=null,u=s!=null,p=a.dataFormat==="channelsLast",c=p&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",d=W().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!d&&(c||a.filterHeight===1&&a.filterWidth===1&&a.dilationHeight===1&&a.dilationWidth===1&&a.strideHeight===1&&a.strideWidth===1&&(a.padInfo.type==="SAME"||a.padInfo.type==="VALID")))return voe({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=W().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),f=h>0?h:n.thresholdToIncreaseWorkgroups,m=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(W().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||m<=f)return woe({x:e,filter:t,convInfo:a,backend:n,bias:r,preluActivationWeights:s,leakyreluAlpha:i,activation:o});let g,x=[a.padInfo.top,a.padInfo.left],A=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(d)g=new yoe(a,l,o,u);else{let S=p?a.outHeight*a.outWidth:a.outChannels,C=p?a.outChannels:a.outHeight*a.outWidth,E=a.filterHeight*a.filterWidth*a.inChannels;A.push({type:"int32",data:[S]},{type:"int32",data:[C]},{type:"int32",data:[E]});let _=n.adapterInfo.isIntel();g=new Aoe(a,S,C,E,l,o,u,_)}let y=[],b=[e,t];l&&(!p&&r.shape.length===1&&(r=Se({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),y.push(r)),b.push(r)),u&&(!p&&s.shape.length===1&&(s=Se({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),y.push(s)),b.push(s)),o==="leakyrelu"&&(A.push({type:"float32",data:[i]}),g.uniforms+=" alpha : f32,");let w=n.runWebGPUProgram(g,b,e.dtype,A);for(let S of y)n.disposeData(S.dataId);return w}function koe(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a,c=T.convertConv2DDataFormat(l),d=T.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c);return D8({x:r,filter:s,convInfo:d,backend:n})}var Ioe={kernelName:ti,backendName:"webgpu",kernelFunc:koe};function Soe(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` let coord1 = vec4(coordX, coordY, col + 1, rowInner); let coord2 = vec4(coordX, coordY, col + 2, rowInner); let coord3 = vec4(coordX, coordY, col + 3, rowInner); @@ -6202,10 +6329,10 @@ return a / b;`,yZ=` let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.stride[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.stride[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${Rt(e)}(0.0); + return ${Mt(e)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${Rt(e)}(0.0); + return ${Mt(e)}(0.0); } let coord = vec4( batch, @@ -6214,13 +6341,13 @@ return a / b;`,yZ=` col % uniforms.outBackprop[3]); return x[getIndexFromCoords4D(coord, uniforms.xShape)/${e}];`} } - return ${Rt(e)}(0.0);`;return` - fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${Rt(e)} { + return ${Mt(e)}(0.0);`;return` + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${Mt(e)} { let col = colIn * ${e}; ${a} } - fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${Rt(e)} { + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${Mt(e)} { let col = colIn * ${e}; let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); @@ -6232,10 +6359,10 @@ return a / b;`,yZ=` let coord = vec4(coordX, coordY, col, rowInner); ${t(e)} } - return ${Rt(e)}(0.0); + return ${Mt(e)}(0.0); } - fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${Rt(e)}) { + fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${Mt(e)}) { let col = colIn * ${e}; if (row < uniforms.dimAOuter && (col + ${e-1}) < uniforms.dimBOuter) { var value = valueInput; @@ -6246,11 +6373,11 @@ return a / b;`,yZ=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${e}] = value; } - }`}var rle=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workGroupSize=z3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=L3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=["vec4","f32"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?jh(this.elementsPerThread,this.workGroupSize):Hh(this.elementsPerThread,this.workGroupSize);return` - ${nle(this.isVec4?4:1)} + }`}var Toe=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=$3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=_3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=["vec4","f32"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Bh(this.elementsPerThread,this.workgroupSize):Wh(this.elementsPerThread,this.workgroupSize);return` + ${Soe(this.isVec4?4:1)} ${e} - `}},sle=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1;return` - ${We("index")} { + `}},Coe=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1;return` + ${Ce("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -6298,8 +6425,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, dotProd); } } - `}};function ile(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}=n,c=T.convertConv2DDataFormat(u),p=T.computeConv2DInfo(i,s.shape,o,1,l,d,!1,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.filterHeight-1-p.padInfo.top,p.filterWidth-1-p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.batchSize,p.outHeight,p.outWidth,p.outChannels]}],f;if(V().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||p.filterHeight<=2&&p.filterWidth<=2&&p.outChannels<=16&&p.inChannels===1)f=new sle(p);else{f=new rle(p);let m=p.inHeight*p.inWidth,g=p.inChannels,y=p.filterHeight*p.filterWidth*p.outChannels;h.push({type:"uint32",data:[m]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return a.runWebGPUProgram(f,[r,s],"float32",h)}var ole={kernelName:xi,backendName:"webgpu",kernelFunc:ile},lle=Ht({opType:Se.COS}),ule={kernelName:bi,backendName:"webgpu",kernelFunc:lle},dle=Ht({opType:Se.COSH}),ple={kernelName:vi,backendName:"webgpu",kernelFunc:dle},cle=class{constructor(e,t,a,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workGroupSize=[64,1,1],this.size=!0;let[r]=t;this.outputShape=[r,a[0],a[1],e],this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[a,n,r]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[s,i,o]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` - ${We("index")} { + `}};function Noe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=n,c=T.convertConv2DDataFormat(u),d=T.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c),h=[{type:"int32",data:[d.filterHeight,d.filterWidth]},{type:"int32",data:[d.filterHeight-1-d.padInfo.top,d.filterWidth-1-d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.batchSize,d.outHeight,d.outWidth,d.outChannels]}],f;if(W().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||d.filterHeight<=2&&d.filterWidth<=2&&d.outChannels<=16&&d.inChannels===1)f=new Coe(d);else{f=new Toe(d);let m=d.inHeight*d.inWidth,g=d.inChannels,x=d.filterHeight*d.filterWidth*d.outChannels;h.push({type:"uint32",data:[m]},{type:"uint32",data:[g]},{type:"uint32",data:[x]})}return a.runWebGPUProgram(f,[r,s],"float32",h)}var Eoe={kernelName:ai,backendName:"webgpu",kernelFunc:Noe},Roe=it({opType:de.COS}),Moe={kernelName:ni,backendName:"webgpu",kernelFunc:Roe},$oe=it({opType:de.COSH}),_oe={kernelName:ri,backendName:"webgpu",kernelFunc:$oe},Poe=class{constructor(e,t,a,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[r]=t;this.outputShape=[r,a[0],a[1],e],this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[a,n,r]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[s,i,o]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let height_ratio = f32(${a}); @@ -6354,24 +6481,24 @@ return a / b;`,yZ=` } } } - `}},hle=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,d=new cle(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(d,[r,s,i],"float32",c)},fle={kernelName:Ii,backendName:"webgpu",kernelFunc:hle},fd;(function(e){e.Prod="*",e.Sum="+"})(fd||(fd={}));var iA=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0;let r=128;this.workGroupSize=[r,1,1],this.outputShape=t,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.exclusive=a,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===fd.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${oA(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],r="",s="";return this.exclusive?(r=this.reverse?`end != ${n-1}`:"end != 0",s=this.reverse?"end + 1":"end - 1"):(r=this.reverse?`end + pow2 < ${n}`:"end >= pow2",s=this.reverse?"end + pow2":"end - pow2"),` - ${We("index")} { + `}},Foe=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,p=new Poe(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},Ooe={kernelName:oi,backendName:"webgpu",kernelFunc:Foe},bd;(function(e){e.Prod="*",e.Sum="+"})(bd||(bd={}));var qx=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=a,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===bd.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${Xx(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],r="",s="";return this.exclusive?(r=this.reverse?`end != ${n-1}`:"end != 0",s=this.reverse?"end + 1":"end - 1"):(r=this.reverse?`end + pow2 < ${n}`:"end >= pow2",s=this.reverse?"end + pow2":"end - pow2"),` + ${Ce("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${lA(e,"coords",this.op)}; + let end = ${Kx(e,"coords",this.op)}; var val = ${a}; let pow2 = i32(pow(2.0, uniforms.index)); if (${r}) { let idx = ${s}; - ${lA(e,"coords",this.op)} = idx; - val ${this.op}= getX(${oA(e,"coords",this.op)}); + ${Kx(e,"coords",this.op)} = idx; + val ${this.op}= getX(${Xx(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function oA(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function lA(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function g9(e,t,a,n,r,s){let i=t.shape.length,o=T.getAxesPermutation([n],i),l=t;o!=null&&(l=br({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=T.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let d=l.shape[u],c=cn({inputs:{x:l},backend:a});for(let p=0;p<=Math.ceil(Math.log2(d))-1;p++){let h=new iA(e,l.shape,!1,s),f=c,m=[{type:"float32",data:[p]}];c=a.runWebGPUProgram(h,[c],c.dtype,m),a.disposeData(f.dataId)}if(r){let p=new iA(e,l.shape,r,s),h=c,f=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(p,[c],c.dtype,f),a.disposeData(h.dataId)}if(o!=null){let p=T.getUndoAxesPermutation(o),h=br({inputs:{x:c},backend:a,attrs:{perm:p}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function mle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return g9(fd.Prod,r,a,s,i,o)}var gle={kernelName:wi,backendName:"webgpu",kernelFunc:mle};function yle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return g9(fd.Sum,r,a,s,i,o)}var Ale={kernelName:ki,backendName:"webgpu",kernelFunc:yle},xle=class{constructor(e,t){this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` - ${We("index")} { + `}};function Xx(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function Kx(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function z8(e,t,a,n,r,s){let i=t.shape.length,o=T.getAxesPermutation([n],i),l=t;o!=null&&(l=yr({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=T.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let p=l.shape[u],c=Za({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new qx(e,l.shape,!1,s),f=c,m=[{type:"float32",data:[d]}];c=a.runWebGPUProgram(h,[c],c.dtype,m),a.disposeData(f.dataId)}if(r){let d=new qx(e,l.shape,r,s),h=c,f=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(d,[c],c.dtype,f),a.disposeData(h.dataId)}if(o!=null){let d=T.getUndoAxesPermutation(o),h=yr({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function Doe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return z8(bd.Prod,r,a,s,i,o)}var zoe={kernelName:si,backendName:"webgpu",kernelFunc:Doe};function Loe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return z8(bd.Sum,r,a,s,i,o)}var Boe={kernelName:ii,backendName:"webgpu",kernelFunc:Loe};function Woe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n,l=r.shape.length===1,u=v.sizeFromShape(s.shape)>0,p=s.dtype,c=l?[r.shape[0]]:[r.shape[0],r.shape[1]],d=l?[i]:[r.shape[0],i],h=Sr({backend:a,attrs:{shape:d,value:0,dtype:p}}),f=new P8(c,u,o),m=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(f,g,p,m,h)}var Voe={kernelName:Td,backendName:"webgpu",kernelFunc:Woe},Uoe=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6390,8 +6517,8 @@ return a / b;`,yZ=` let rlt = ${this.getInputSamplingString()}; setOutputAtIndex(index, rlt); } - }`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function ble(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),f=i==="NHWC"?[o,c,p,h]:[o,h,c,p],m=[{type:"int32",data:[s]}],g=new xle(f,i);return a.runWebGPUProgram(g,[r],r.dtype,m)}var vle={kernelName:Si,backendName:"webgpu",kernelFunc:ble},wle=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workGroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=r,this.hasPreluActivation=s,this.filterHeight=t,this.filterWidth=a,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workGroupSize[0]*this.workGroupSize[1]*this.workGroupSize[2],a=this.workGroupSize[1]+this.filterHeight-1,n=this.workGroupSize[0]+this.filterWidth-1;return` - ${Cr(this.activation,this.hasPreluActivation,!1,4)} + }`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Goe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),f=i==="NHWC"?[o,c,d,h]:[o,h,c,d],m=[{type:"int32",data:[s]}],g=new Uoe(f,i);return a.runWebGPUProgram(g,[r],r.dtype,m)}var Hoe={kernelName:li,backendName:"webgpu",kernelFunc:Goe},joe=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=r,this.hasPreluActivation=s,this.filterHeight=t,this.filterWidth=a,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],a=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` + ${Ir(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${a}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -6404,15 +6531,7 @@ return a / b;`,yZ=` return value; } - ${hd()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(local_invocation_index) LocalIndex: u32, - @builtin(num_workgroups) NumWorkgroups: vec3) { - localId = LocalId; - globalId = GlobalId; - let localIndex = i32(LocalIndex); - numWorkgroups = NumWorkgroups; + ${Ce()} { let coords = getOutputCoords(); let batch = coords[0]; let xRCCorner = vec2(coords.zw) - uniforms.pad; @@ -6427,8 +6546,8 @@ return a / b;`,yZ=` let localCol = i32(localId.x); // Load one tile of X into local memory. - for (var inputRow = localRow; inputRow < ${a}; inputRow = inputRow + ${this.workGroupSize[1]}) { - for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workGroupSize[0]}) { + for (var inputRow = localRow; inputRow < ${a}; inputRow = inputRow + ${this.workgroupSize[1]}) { + for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) { let rowOffset = inputRow - localRow; let colOffset = inputCol - localCol; mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset); @@ -6436,7 +6555,7 @@ return a / b;`,yZ=` } // Load one tile of W into local memory. - var wIndex = localIndex; + var wIndex = i32(localIndex); ${e, inDims : vec2,",this.workGroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[4,this.workPerThread,1]),v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${a}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return` - ${Cr(this.activation,this.hasPreluActivation,!0,4)} + `}},L8=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workgroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1]),v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${a}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return` + ${Ir(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -6472,8 +6591,7 @@ return a / b;`,yZ=` const strideHeight = ${this.convInfo.strideHeight}; const strideWidth = ${this.convInfo.strideWidth}; - ${hd()} - fn _start(@builtin(global_invocation_id) globalId: vec3) { + ${Ce()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; let c = i32(globalId.y) * ${this.workPerThread}; @@ -6508,80 +6626,113 @@ return a / b;`,yZ=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${mo(this.addBias,this.activation)} + ${yo(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}},A9=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32, - filterWidth : i32, stride : vec2, dilation : vec2,`,this.workGroupSize=[256,1,1],this.outputShape=e.outShape,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` - ${Cr(this.activation,this.hasPreluActivation,!1,4)} + `}},B8=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32, + filterWidth : i32, stride : vec2, dilation : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` + ${Ir(this.activation,this.hasPreluActivation,!1,4)} - ${We()} { - let coords = getOutputCoords(); - let batch = coords[0]; - let xRCCorner = vec2(coords.${this.isChannelsLast?"yz":"zw"}) * uniforms.stride - uniforms.pad; - let d2 = coords[${this.isChannelsLast?3:1}]; - let channelMul = uniforms.wShape[3]; - let d1 = d2 / channelMul; - let q = d2 % channelMul; + ${Ce("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + let batch = coords[0]; + let xRCCorner = vec2(coords.${this.isChannelsLast?"yz":"zw"}) * uniforms.stride - uniforms.pad; + let d2 = coords[${this.isChannelsLast?3:1}]; + let channelMul = uniforms.wShape[3]; + let d1 = d2 / channelMul; + let q = d2 % channelMul; - let inputRowStart = xRCCorner.x; - let inputColStart = xRCCorner.y; - let inputRowEnd = inputRowStart + uniforms.filterHeight * - uniforms.dilation[0]; - let inputColEnd = inputColStart + uniforms.filterWidth * - uniforms.dilation[1]; + let inputRowStart = xRCCorner.x; + let inputColStart = xRCCorner.y; + let inputRowEnd = inputRowStart + uniforms.filterHeight * + uniforms.dilation[0]; + let inputColEnd = inputColStart + uniforms.filterWidth * + uniforms.dilation[1]; - // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get - // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all - // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. - // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. - var value = 0.0; + // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get + // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all + // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. + // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. + var value = 0.0; - // Extract if checking out of for loop for performance. - if (inputRowStart >= 0 && inputColStart >= 0 && - inputRowEnd < uniforms.inDims[0] && - inputColEnd < uniforms.inDims[1]) { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + // Extract if checking out of for loop for performance. + if (inputRowStart >= 0 && inputColStart >= 0 && + inputRowEnd < uniforms.inDims[0] && + inputColEnd < uniforms.inDims[1]) { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } - } - } else { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + } else { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - if (xR < 0 || xR >= uniforms.inDims[0]) { - continue; - } - - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; - - if (xC < 0 || xC >= uniforms.inDims[1]) { + if (xR < 0 || xR >= uniforms.inDims[0]) { continue; } - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; + + if (xC < 0 || xC >= uniforms.inDims[1]) { + continue; + } + + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } } - } - ${mo(this.addBias,this.activation)} - if (coordsInBounds4D(coords, uniforms.outShape)) { + ${yo(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function kle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n,c=T.convertConv2DDataFormat(l),p=u;p==null&&(p=[1,1]);let h=T.computeConv2DInfo(r.shape,s.shape,i,p,o,d,!0,c),f=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],m=h.dataFormat==="channelsLast",g;return!m&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new wle(h.outShape,h.filterHeight,h.filterWidth):m&&h.inHeight>4&&h.inWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?g=new y9(h):(g=new A9(h),f.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),a.runWebGPUProgram(g,[r,s],r.dtype,f)}var Ile={kernelName:Ti,backendName:"webgpu",kernelFunc:kle},x9=ca({opType:Be.MUL,cpuKernelImpl:Hie,supportsComplex:!0}),Sle={kernelName:ps,backendName:"webgpu",kernelFunc:x9};function K3(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gp(r,s,i,"sum",a)}var Tle={kernelName:to,backendName:"webgpu",kernelFunc:K3};function Cle(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=T.decodeEinsumEquation(r,s.length);T.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=T.getEinsumComputePath(o,l),c=d.length,p=null,h=i.length,f=[];for(let m=0;m=0&&(p=K3({inputs:{x:p},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(p)),h--)}for(let m of f)m!==p&&a.disposeData(m.dataId);return p}var Nle={kernelName:Sd,backendName:"webgpu",kernelFunc:Cle},Ele=Ht({opType:Se.ELU}),Rle={kernelName:Ni,backendName:"webgpu",kernelFunc:Ele},Mle=ca({opType:Be.EQUAL,dtype:"bool",cpuKernelImpl:$ie}),$le={kernelName:ts,backendName:"webgpu",kernelFunc:Mle},b9=Ht({opType:Se.EXP,cpuKernelImpl:_ie,dtype:"float32"}),_le={kernelName:as,backendName:"webgpu",kernelFunc:b9};function z1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),Re({inputs:{x:s},backend:n,attrs:{shape:o}})}var Fle={kernelName:wl,backendName:"webgpu",kernelFunc:z1},Ple=Ht({opType:Se.EXPM1,cpuKernelImpl:Fie}),Ole={kernelName:Ei,backendName:"webgpu",kernelFunc:Ple},Dle=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` - ${We("index")} { + `}};function qoe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n,c=T.convertConv2DDataFormat(l),d=u;d==null&&(d=[1,1]);let h=T.computeConv2DInfo(r.shape,s.shape,i,d,o,p,!0,c),f=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],m=h.dataFormat==="channelsLast",g;return!m&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new joe(h.outShape,h.filterHeight,h.filterWidth):m&&h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?g=new L8(h):(g=new B8(h),f.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),a.runWebGPUProgram(g,[r,s],r.dtype,f)}var Xoe={kernelName:ui,backendName:"webgpu",kernelFunc:qoe},W8=ua({opType:De.MUL,cpuKernelImpl:jse,supportsComplex:!0}),Koe={kernelName:Oi,backendName:"webgpu",kernelFunc:W8};function L3(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return vo(r,s,i,"sum",a)}var Zoe={kernelName:ao,backendName:"webgpu",kernelFunc:L3};function Yoe(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=T.decodeEinsumEquation(r,s.length);T.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=T.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,f=[];for(let m=0;m=0&&(d=L3({inputs:{x:d},backend:a,attrs:{axis:u[m]-(i.length-h),keepDims:!1}}),f.push(d)),h--)}for(let m of f)m!==d&&a.disposeData(m.dataId);return d}var Joe={kernelName:Cd,backendName:"webgpu",kernelFunc:Yoe},Qoe=it({opType:de.ELU}),ele={kernelName:pi,backendName:"webgpu",kernelFunc:Qoe},tle=ua({opType:De.EQUAL,dtype:"bool",cpuKernelImpl:$se}),ale={kernelName:ci,backendName:"webgpu",kernelFunc:tle},nle=it({opType:de.ERF}),rle={kernelName:Ml,backendName:"webgpu",kernelFunc:nle},V8=it({opType:de.EXP,cpuKernelImpl:_se,dtype:"float32"}),sle={kernelName:hi,backendName:"webgpu",kernelFunc:V8};function P1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),Se({inputs:{x:s},backend:n,attrs:{shape:o}})}var ile={kernelName:$l,backendName:"webgpu",kernelFunc:P1},ole=it({opType:de.EXPM1,cpuKernelImpl:Pse}),lle={kernelName:_l,backendName:"webgpu",kernelFunc:ole},Zx=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` + fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 { + ${this.component==="real"?"return real * expR - imag * expI;":"return real * expI + imag * expR;"} + } + + fn mulMatDFT(batch: i32, index: i32) -> f32 { + let indexRatio = f32(index) / f32(uniforms.realShape[1]); + let exponentMultiplierTimesIndexRatio = + uniforms.exponentMultiplier * indexRatio; + + var result = 0.0; + + for (var i = 0; i < uniforms.realShape[1]; i = i + 1) { + // x = (-2|2 * PI / N) * index * i; + let x = exponentMultiplierTimesIndexRatio * f32(i); + let expR = cos(x); + let expI = sin(x); + let real = getReal(batch, i); + let imag = getImag(batch, i); + + result = result + + unaryOpComplex(real, expR, imag, expI) / uniforms.denominator; + } + + return result; + } + + ${Ce("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); + } + } + `}};function U8(e,t,a){let n=a.tensorMap.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=[],l=Se({inputs:{x:e},backend:a,attrs:{shape:[i,s]}});o.push(l);let u=l.shape,p=new Zx("real",u),c=new Zx("imag",u),d=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:u},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:u}],h=t?2*Math.PI:-2*Math.PI,f=t?u[1]:1,m=[{type:"float32",data:[h]},{type:"float32",data:[f]}],g=a.runWebGPUProgram(p,d,"float32",m);o.push(g);let x=a.runWebGPUProgram(c,d,"float32",m);o.push(x);let A=bo({inputs:{real:g,imag:x},backend:a});o.push(A);let y=Se({inputs:{x:A},backend:a,attrs:{shape:e.shape}});return o.forEach(b=>a.disposeData(b.dataId)),y}function ule(e){let{inputs:t,backend:a}=e,{input:n}=t;return U8(n,!1,a)}var dle={kernelName:Nd,backendName:"webgpu",kernelFunc:ule},ple=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordX = uniforms.xShape[2] - coords[2] - 1; @@ -6589,9 +6740,9 @@ return a / b;`,yZ=` setOutputAtIndex(index, outputValue); } } - `}},zle={kernelName:Ri,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Dle(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Lle=Ht({opType:Se.FLOOR,cpuKernelImpl:Pie}),Ble={kernelName:ns,backendName:"webgpu",kernelFunc:Lle},Wle=ca({opType:Be.INT_DIV,dtype:"int32"}),Vle={kernelName:Mi,backendName:"webgpu",kernelFunc:Wle},Gle=class{constructor(e,t,a=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[t,1,1]),this.importVideo=a,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` + `}},cle={kernelName:fi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new ple(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},hle=it({opType:de.FLOOR,cpuKernelImpl:Fse}),fle={kernelName:mi,backendName:"webgpu",kernelFunc:hle},mle=ua({opType:De.INT_DIV,dtype:"int32"}),gle={kernelName:gi,backendName:"webgpu",kernelFunc:mle},xle=class{constructor(e,t,a=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=a,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` @binding(1) @group(0) var src: ${this.importVideo?"texture_external":"texture_2d"}; - ${We("index")} { + ${Ce("index")} { let flatIndex = index * uniforms.numChannels; if (flatIndex < uniforms.size) { let coords = getCoordsFromIndex(flatIndex); @@ -6601,8 +6752,8 @@ return a / b;`,yZ=` } } } - `}},Ule={kernelName:Yu,backendName:"webgpu",kernelFunc:jle},Ho,Bm=V().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"),dc=new Map;function jle(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n;if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,l=typeof HTMLCanvasElement!="undefined"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas!="undefined"&&r instanceof OffscreenCanvas,u=typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap,[d,c]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[c,d,s],h=!1,f=i||o;if(u||l||f){let A;if(h){let $=r;if(!dc.has($)||dc.get($).expired){let M={source:$};dc.set($,a.device.importExternalTexture(M))}A={width:d,height:c,format:null,usage:null,texture:dc.get($)}}else{if(f){let E=V().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ho==null||E!==Bm)&&(Bm=E,Ho=document.createElement("canvas").getContext("2d",{willReadFrequently:Bm})),Ho.canvas.width=d,Ho.canvas.height=c,Ho.drawImage(r,0,0,d,c),r=Ho.canvas}let $=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M="rgba8unorm",I=a.textureManager.acquireTexture(p[1],p[0],M,$);a.queue.copyExternalImageToTexture({source:r},{texture:I},[p[1],p[0]]),A={width:d,height:c,format:M,usage:$,texture:I}}let x=v.sizeFromShape(p),b=v.computeStrides(p),w=new Gle(p,s,h),S=[{type:"uint32",data:[x]},{type:"uint32",data:[s]},{type:"uint32",data:[...b]}],C=a.makeTensorInfo([c,d],"int32"),N=a.tensorMap.get(C.dataId);N.resourceInfo=A;let _=a.runWebGPUProgram(w,[C],"int32",S);return a.disposeData(C.dataId),_}let m=r.data,g=m;if(s!=null&&s!==4){g=new Uint8Array(r.width*r.height*s);let A=m.length,x=0;for(let b=0;b(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } } - `}},qle={kernelName:$i,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n,scale:r,offset:s,mean:i,variance:o}=e,{varianceEpsilon:l}=t,u=a,d=[n,i,o],c=null;s!=null&&(c=s.shape,d.push(s));let p=null;r!=null&&(p=r.shape,d.push(r));let h=new Hle(n.shape,i.shape,o.shape,c,p),f=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,d,n.dtype,f)}};function Xle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:f}=n,m=T.convertConv2DDataFormat(d),g=T.computeConv2DInfo(r.shape,s.shape,l,c,u,p,!1,m);return m9({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:f,activation:h})}var Kle={kernelName:jr,backendName:"webgpu",kernelFunc:Xle};function Zle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dimRoundingMode:c,activation:p,leakyreluAlpha:h}=n,f=d;f==null&&(f=[1,1]),v.assert(T.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let m=T.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),g=[r,s],y=i!=null,A=o!=null;y&&g.push(i),A&&g.push(o);let x=[{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.inHeight,m.inWidth]}],b;return m.inHeight>4&&m.inWidth>4&&m.strideWidth<=2&&m.inChannels===m.outChannels&&m.dilationHeight===1&&m.dilationWidth===1&&m.inChannels%4===0?b=new y9(m,y,p,A):(b=new A9(m,y,p,A),x.push({type:"int32",data:[m.filterHeight]},{type:"int32",data:[m.filterWidth]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]})),p==="leakyrelu"&&(x.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",x)}var Yle={kernelName:Hr,backendName:"webgpu",kernelFunc:Zle},Jle=class{constructor(e,t){this.variableNames=["A","indices"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${na(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` - ${We("index")} { + `}},vle={kernelName:xi,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n,scale:r,offset:s,mean:i,variance:o}=e,{varianceEpsilon:l}=t,u=a,p=[n,i,o],c=null;s!=null&&(c=s.shape,p.push(s));let d=null;r!=null&&(d=r.shape,p.push(r));let h=new ble(n.shape,i.shape,o.shape,c,d),f=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,f)}};function wle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=T.convertConv2DDataFormat(p),g=T.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,m);return D8({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:f,activation:h})}var kle={kernelName:Hr,backendName:"webgpu",kernelFunc:wle};function Ile(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:c,activation:d,leakyreluAlpha:h}=n,f=p;f==null&&(f=[1,1]),v.assert(T.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let m=T.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),g=[r,s],x=i!=null,A=o!=null;x&&g.push(i),A&&g.push(o);let y=[{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.inHeight,m.inWidth]}],b;return m.outHeight>4&&m.outWidth>4&&m.strideWidth<=2&&m.inChannels===m.outChannels&&m.dilationHeight===1&&m.dilationWidth===1&&m.inChannels%4===0?b=new L8(m,x,d,A):(b=new B8(m,x,d,A),y.push({type:"int32",data:[m.filterHeight]},{type:"int32",data:[m.filterWidth]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]})),d==="leakyrelu"&&(y.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",y)}var Sle={kernelName:jr,backendName:"webgpu",kernelFunc:Ile},Tle=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ra(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var flattenIndex = 0; @@ -6628,8 +6779,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function Qle(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=r.shape,i=s[s.length-1],o=v.sizeFromShape(n.shape),[l,u,d,c]=T.prepareAndValidate(n,r),p=Re({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=Re({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/d,d]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let A=a.readSync(r.dataId),x=a.bufferSync(n),b=Oie(A,x,n.dtype,u,i,d,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let f=new Jle(i,[u,d]),m=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(f,[h,p],h.dtype,m),y=Re({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(p.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),y}var eue={kernelName:_i,backendName:"webgpu",kernelFunc:Qle},tue=class{constructor(e,t){this.variableNames=["A","indices"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="gather"}getUserCode(){let e=aue(this.aShape);return` - ${We("index")} { + `}};function Cle(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=r.shape,i=s[s.length-1],o=v.sizeFromShape(n.shape),[l,u,p,c]=T.prepareAndValidate(n,r),d=Se({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=Se({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/p,p]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let A=a.readSync(r.dataId),y=a.bufferSync(n),b=Ose(A,y,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let f=new Tle(i,[u,p]),m=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(f,[h,d],h.dtype,m),x=Se({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(d.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),x}var Nle={kernelName:Ai,backendName:"webgpu",kernelFunc:Cle},Ele=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=Rle(this.aShape);return` + ${Ce("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); let indexZ = i32(getIndices(resRC.x, resRC.z)); @@ -6637,8 +6788,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function aue(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(C.dataId)),a.makeTensorInfo(u.outputShape,S.dtype,S.values)}let m=new tue(p.shape,f),g=a.runWebGPUProgram(m,[p,h],p.dtype);c.push(g);let y=Re({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(A=>a.disposeData(A.dataId)),y}var nue={kernelName:Il,backendName:"webgpu",kernelFunc:v9},rue=ca({opType:Be.GREATER,cpuKernelImpl:Lie,dtype:"bool"}),sue={kernelName:rs,backendName:"webgpu",kernelFunc:rue},iue=ca({opType:Be.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:zie}),oue={kernelName:ss,backendName:"webgpu",kernelFunc:iue},lue=Ht({opType:Se.IS_NAN,dtype:"bool"}),uue={kernelName:Sl,backendName:"webgpu",kernelFunc:lue};function due(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new mp(r.shape,Se.LEAKYRELU);return o.uniforms="alpha : f32,",a.runWebGPUProgram(o,[r],"float32",i)}var pue={kernelName:Pi,backendName:"webgpu",kernelFunc:due},cue=ca({opType:Be.LESS,dtype:"bool",cpuKernelImpl:Wie}),hue={kernelName:is,backendName:"webgpu",kernelFunc:cue},fue=ca({opType:Be.LESS_EQUAL,dtype:"bool",cpuKernelImpl:Bie}),mue={kernelName:os,backendName:"webgpu",kernelFunc:fue},gue=Ht({opType:Se.LOG,cpuKernelImpl:Vie}),yue={kernelName:ls,backendName:"webgpu",kernelFunc:gue},Aue=ca({opType:Be.LOGICAL_AND,dtype:"bool"}),xue={kernelName:Oi,backendName:"webgpu",kernelFunc:Aue},bue=Ht({opType:Se.LOGICAL_NOT}),vue={kernelName:Di,backendName:"webgpu",kernelFunc:bue},wue=ca({opType:Be.MAX,cpuKernelImpl:Uie}),kue={kernelName:us,backendName:"webgpu",kernelFunc:wue};function Iue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,d=T.computePool2DInfo(r.shape,s,i,u,o,l);return c9(r,d,"max",a)}var Sue={kernelName:Li,backendName:"webgpu",kernelFunc:Iue};function Tue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gp(r,s,i,"min",a)}var Cue={kernelName:Wi,backendName:"webgpu",kernelFunc:Tue},Nue=ca({opType:Be.MIN,cpuKernelImpl:jie}),Eue={kernelName:ds,backendName:"webgpu",kernelFunc:Nue},Rue=class{constructor(e,t,a){this.uniforms="",this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,r)=>n[0]+e[r]+n[1]),this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.xShape=e,t.map((n,r)=>{this.uniforms+=` pad${r} : vec2,`}),this.offset=a==="reflect"?0:1,this.shaderKey=`mirrorPad_${a}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((l,u)=>`uniforms.pad${u}[0]`).join(","),a=this.xShape.map((l,u)=>`uniforms.pad${u}[0] + uniforms.xShape${e>1?`[${u}]`:""}`).join(","),n=e===1?"start":"start[i]",r=e===1?"end":"end[i]",s=e===1?"outC":"outC[i]",i=na(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` - ${We("index")} { + `}};function Rle(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(C.dataId)),a.makeTensorInfo(u.outputShape,S.dtype,S.values)}let m=new Ele(d.shape,f),g=a.runWebGPUProgram(m,[d,h],d.dtype);c.push(g);let x=Se({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(A=>a.disposeData(A.dataId)),x}var Mle={kernelName:Fl,backendName:"webgpu",kernelFunc:G8},$le=ua({opType:De.GREATER,cpuKernelImpl:Lse,dtype:"bool"}),_le={kernelName:yi,backendName:"webgpu",kernelFunc:$le},Ple=ua({opType:De.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:zse}),Fle={kernelName:bi,backendName:"webgpu",kernelFunc:Ple};function Ole(e){let{inputs:t,backend:a}=e,{input:n}=t;return U8(n,!0,a)}var Dle={kernelName:Ed,backendName:"webgpu",kernelFunc:Ole},zle=it({opType:de.IS_FINITE,dtype:"bool"}),Lle={kernelName:Ol,backendName:"webgpu",kernelFunc:zle},Ble=it({opType:de.IS_INF,dtype:"bool"}),Wle={kernelName:Dl,backendName:"webgpu",kernelFunc:Ble},Vle=it({opType:de.IS_NAN,dtype:"bool"}),Ule={kernelName:wi,backendName:"webgpu",kernelFunc:Vle};function Gle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new mp(r.shape,de.LEAKYRELU);return o.uniforms="alpha : f32,",a.runWebGPUProgram(o,[r],"float32",i)}var Hle={kernelName:ki,backendName:"webgpu",kernelFunc:Gle},jle=ua({opType:De.LESS,dtype:"bool",cpuKernelImpl:Wse}),qle={kernelName:Ii,backendName:"webgpu",kernelFunc:jle},Xle=ua({opType:De.LESS_EQUAL,dtype:"bool",cpuKernelImpl:Bse}),Kle={kernelName:Si,backendName:"webgpu",kernelFunc:Xle},Zle=it({opType:de.LOG,cpuKernelImpl:Vse}),Yle={kernelName:Ti,backendName:"webgpu",kernelFunc:Zle},Jle=it({opType:de.LOG1P}),Qle={kernelName:zl,backendName:"webgpu",kernelFunc:Jle},eue=ua({opType:De.LOGICAL_AND,dtype:"bool"}),tue={kernelName:Ci,backendName:"webgpu",kernelFunc:eue},aue=it({opType:de.LOGICAL_NOT}),nue={kernelName:Ni,backendName:"webgpu",kernelFunc:aue},rue=ua({opType:De.MAX,cpuKernelImpl:Gse}),sue={kernelName:Ri,backendName:"webgpu",kernelFunc:rue};function iue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=T.computePool2DInfo(r.shape,s,i,u,o,l);return _8(r,p,"max",a)}var oue={kernelName:Mi,backendName:"webgpu",kernelFunc:iue};function lue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return vo(r,s,i,"min",a)}var uue={kernelName:_i,backendName:"webgpu",kernelFunc:lue},due=ua({opType:De.MIN,cpuKernelImpl:Hse}),pue={kernelName:Pi,backendName:"webgpu",kernelFunc:due},cue=class{constructor(e,t,a){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,r)=>n[0]+e[r]+n[1]),this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,r)=>{this.uniforms+=` pad${r} : vec2,`}),this.offset=a==="reflect"?0:1,this.shaderKey=`mirrorPad_${a}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((l,u)=>`uniforms.pad${u}[0]`).join(","),a=this.xShape.map((l,u)=>`uniforms.pad${u}[0] + uniforms.xShape${e>1?`[${u}]`:""}`).join(","),n=e===1?"start":"start[i]",r=e===1?"end":"end[i]",s=e===1?"outC":"outC[i]",i=ra(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + ${Ce("index")} { if (index < uniforms.size) { let start = ${i}(${t}); let end = ${i}(${a}); @@ -6654,8 +6805,16 @@ return a / b;`,yZ=` setOutputAtIndex(index, getX(${o})); } } - `}},Mue={kernelName:Vi,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{paddings:r,mode:s}=t,i=a,o=r.map(u=>({type:"int32",data:[u[0],u[1]]})),l=new Rue(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}};function $ue(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=qie(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new mp(n.shape,Se.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var _ue={kernelName:Cl,backendName:"webgpu",kernelFunc:$ue};function Fue(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),{selectedIndices:c}=Tn.nonMaxSuppressionV3Impl(u,d,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var Pue={kernelName:Gi,backendName:"webgpu",kernelFunc:Fue};function Oue(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),p=i,h=o,f=l,m=u,{selectedIndices:g,selectedScores:y}=Tn.nonMaxSuppressionV5Impl(d,c,p,h,f,m);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Due={kernelName:Ui,backendName:"webgpu",kernelFunc:Oue};function Bc(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=yp({inputs:{input:n},backend:a}),s=Bc({inputs:{x:r},backend:a}),i=qh({inputs:{input:n},backend:a}),o=Bc({inputs:{x:i},backend:a}),l=ou({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return go({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var zue={kernelName:Hl,backendName:"webgpu",kernelFunc:Bc};function w9(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=yp({inputs:{input:n},backend:a}),s=w9({inputs:{x:r},backend:a}),i=qh({inputs:{input:n},backend:a}),o=Bc({inputs:{x:i},backend:a}),l=ou({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return go({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var Lue={kernelName:El,backendName:"webgpu",kernelFunc:w9};function Bue(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return z1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=z1({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=f9({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeData(d.dataId)),u}var Wue={kernelName:Ml,backendName:"webgpu",kernelFunc:Bue},Vue=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((a,n)=>a[0]+e[n]+a[1]),this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){let e=this.xShape.length,t=na(e),a=this.xShape.map((u,d)=>`uniforms.pad${d}[0]`).join(","),n=this.xShape.map((u,d)=>`uniforms.pad${d}[0] + uniforms.xShape${e>1?`[${d}]`:""}`).join(","),r=e>1?`${t}(${a})`:`${a}`,s=e>1?`${t}(${n})`:`${n}`,i=e>1?"any(outC < start)":"outC < start",o=e>1?"any(outC >= end)":"outC >= end",l=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` - ${We("index")} { + `}},hue={kernelName:Fi,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{paddings:r,mode:s}=t,i=a,o=r.map(u=>({type:"int32",data:[u[0],u[1]]})),l=new cue(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},fue=ua({opType:De.MOD}),mue={kernelName:Bl,backendName:"webgpu",kernelFunc:fue};function gue(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=qse(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new mp(n.shape,de.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var xue={kernelName:Wl,backendName:"webgpu",kernelFunc:gue};function Aue(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),{selectedIndices:c}=Sn.nonMaxSuppressionV3Impl(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var yue={kernelName:zi,backendName:"webgpu",kernelFunc:Aue};function bue(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),d=i,h=o,f=l,m=u,{selectedIndices:g,selectedScores:x}=Sn.nonMaxSuppressionV5Impl(p,c,d,h,f,m);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var vue={kernelName:Li,backendName:"webgpu",kernelFunc:bue},wue=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + ${Ce("index")} { + if(index < uniforms.size) { + let coords = getCoordsFromIndex(index); + setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue, + f32(i32(round(getX(coords.x))) == coords.y))); + } + } + `}};function kue(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),p=new wue(u,i),c=Se({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=[{type:"float32",data:[o]},{type:"float32",data:[l]}],h=a.runWebGPUProgram(p,[c],s,d);a.disposeData(c.dataId);let f=[...r.shape,i],m=Se({inputs:{x:h},backend:a,attrs:{shape:f}});return a.disposeData(h.dataId),m}var Iue={kernelName:Bi,backendName:"webgpu",kernelFunc:kue};function Lc(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=gp({inputs:{input:n},backend:a}),s=Lc({inputs:{x:r},backend:a}),i=Uh({inputs:{input:n},backend:a}),o=Lc({inputs:{x:i},backend:a}),l=bo({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Sr({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var Sue={kernelName:au,backendName:"webgpu",kernelFunc:Lc};function H8(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=gp({inputs:{input:n},backend:a}),s=H8({inputs:{x:r},backend:a}),i=Uh({inputs:{input:n},backend:a}),o=Lc({inputs:{x:i},backend:a}),l=bo({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Sr({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var Tue={kernelName:Ul,backendName:"webgpu",kernelFunc:H8};function Cue(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return P1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=P1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=O8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Nue={kernelName:Gl,backendName:"webgpu",kernelFunc:Cue},Eue=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((a,n)=>a[0]+e[n]+a[1]),this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){let e=this.xShape.length,t=ra(e),a=this.xShape.map((u,p)=>`uniforms.pad${p}[0]`).join(","),n=this.xShape.map((u,p)=>`uniforms.pad${p}[0] + uniforms.xShape${e>1?`[${p}]`:""}`).join(","),r=e>1?`${t}(${a})`:`${a}`,s=e>1?`${t}(${n})`:`${n}`,i=e>1?"any(outC < start)":"outC < start",o=e>1?"any(outC >= end)":"outC >= end",l=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + ${Ce("index")} { if (index < uniforms.size) { let start = ${r}; let end = ${s}; @@ -6669,8 +6828,8 @@ return a / b;`,yZ=` } } } - `}},k9=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(s.every(u=>v.arraysEqual(u,[0,0])))return cn({inputs:{x:r},backend:a});if(v.sizeFromShape(r.shape)===0){let u=s.map((d,c)=>d[0]+r.shape[c]+d[1]);return go({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=[{type:"float32",data:[i]}];s.map(u=>o.push({type:"int32",data:[u[0],u[1]]}));let l=new Vue(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Gue={kernelName:ji,backendName:"webgpu",kernelFunc:k9},Uue=ca({opType:Be.POW}),jue={kernelName:Hi,backendName:"webgpu",kernelFunc:Uue};function Hue(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new _1(Be.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var que={kernelName:qi,backendName:"webgpu",kernelFunc:Hue};function Xue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gp(r,s,i,"prod",a)}var Kue={kernelName:Xi,backendName:"webgpu",kernelFunc:Xue},Zue=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Zie(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},Yue={kernelName:$l,backendName:"webgpu",kernelFunc:Zue},I9=ca({opType:Be.DIV}),Jue={kernelName:Ci,backendName:"webgpu",kernelFunc:I9},Que=Ht({opType:Se.RECIPROCAL}),ede={kernelName:_l,backendName:"webgpu",kernelFunc:Que},tde=Ht({opType:Se.RELU}),ade={kernelName:Ki,backendName:"webgpu",kernelFunc:tde},nde=Ht({opType:Se.RELU6}),rde={kernelName:Ji,backendName:"webgpu",kernelFunc:nde},sde=class{constructor(e,t,a){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` - ${We("index")} { + `}},j8=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(s.every(u=>v.arraysEqual(u,[0,0])))return Za({inputs:{x:r},backend:a});if(v.sizeFromShape(r.shape)===0){let u=s.map((p,c)=>p[0]+r.shape[c]+p[1]);return Sr({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=[{type:"float32",data:[i]}];s.map(u=>o.push({type:"int32",data:[u[0],u[1]]}));let l=new Eue(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Rue={kernelName:Wi,backendName:"webgpu",kernelFunc:j8},Mue=ua({opType:De.POW}),$ue={kernelName:Vi,backendName:"webgpu",kernelFunc:Mue};function _ue(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new M1(De.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var Pue={kernelName:Ui,backendName:"webgpu",kernelFunc:_ue};function Fue(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return vo(r,s,i,"prod",a)}var Oue={kernelName:Gi,backendName:"webgpu",kernelFunc:Fue},Due=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Zse(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},zue={kernelName:Hl,backendName:"webgpu",kernelFunc:Due},q8=ua({opType:De.DIV}),Lue={kernelName:di,backendName:"webgpu",kernelFunc:q8},Bue=it({opType:de.RECIPROCAL}),Wue={kernelName:Hi,backendName:"webgpu",kernelFunc:Bue},Vue=it({opType:de.RELU}),Uue={kernelName:ji,backendName:"webgpu",kernelFunc:Vue},Gue=it({opType:de.RELU6}),Hue={kernelName:Ki,backendName:"webgpu",kernelFunc:Gue},jue=class{constructor(e,t,a){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6712,8 +6871,8 @@ return a / b;`,yZ=` setOutputAtIndex(index, newValue); } } - `}};function ide(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,size:i,halfPixelCenters:o}=n,[l,u]=i,d=s&&l>1?1:0,c=s&&u>1?1:0,p=[{type:"float32",data:[d,c]},{type:"float32",data:[o?.5:0]}],h=new sde(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",p)}var ode={kernelName:Yi,backendName:"webgpu",kernelFunc:ide},lde=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` - ${We("index")} { + `}};function que(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,size:i,halfPixelCenters:o}=n,[l,u]=i,p=s&&l>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[p,c]},{type:"float32",data:[o?.5:0]}],h=new jue(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var Xue={kernelName:Xi,backendName:"webgpu",kernelFunc:que},Kue=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6743,9 +6902,39 @@ return a / b;`,yZ=` setOutputAtIndex(index, newValue); } } - `}};function ude(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=s&&l>1?1:0,c=s&&u>1?1:0,p=[{type:"float32",data:[d,c]},{type:"float32",data:[s?.5:0]}],h=new lde(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,p)}var dde={kernelName:Zi,backendName:"webgpu",kernelFunc:ude},pde=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function Zue(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=s&&l>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[p,c]},{type:"float32",data:[s?.5:0]}],h=new Kue(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var Yue={kernelName:qi,backendName:"webgpu",kernelFunc:Zue},Jue=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + + // Using uniform variables as judging conditions, so the function has + // coherent execution within all threads. + fn getReverseCoords(coords : vec4) -> vec4 { + var reverseCoords = coords; + if (uniforms.axis[0] == 1) { + reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1; + } + if (uniforms.axis[1] == 1) { + reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1; + } + if (uniforms.axis[2] == 1) { + reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1; + } + if (uniforms.axis[3] == 1) { + reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1; + } + + return reverseCoords; + } + + ${Ce("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let reverseCoords = getReverseCoords(coords); + setOutputAtIndex(index, getX(reverseCoords[0], + reverseCoords[1], reverseCoords[2], reverseCoords[3])); + } + } + `}};function Que(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return Za({inputs:{x:r},backend:a});let o=r.shape,l=[1,1,1,1];o.forEach((g,x)=>{let A=x+4-i;l[A]=g});let u=v.parseAxisParam(s,r.shape),p=[0,0,0,0];u.forEach(g=>{let x=g+4-i;p[x]=1});let c=[{type:"int32",data:p}],d=Se({inputs:{x:r},backend:a,attrs:{shape:l}}),h=new Jue(l),f=a.runWebGPUProgram(h,[d],d.dtype,c);a.disposeData(d.dataId);let m=Se({inputs:{x:f},backend:a,attrs:{shape:o}});return a.disposeData(f.dataId),m}var ede={kernelName:Zi,backendName:"webgpu",kernelFunc:Que},tde=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`,this.shaderKey="rotate",this.outputShape=e,typeof t=="number"?(this.uniforms+=" fillValue : f32,",this.fillSnippet="var outputValue = uniforms.fillValue;",this.shaderKey+="_float"):(this.uniforms+=" fillValue : vec3,",this.fillSnippet="var outputValue = uniforms.fillValue[coords[3]];",this.shaderKey+="_vec3")}getUserCode(){return` - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordXFloat = (f32(coords[2]) - uniforms.centerX) * @@ -6764,7 +6953,7 @@ return a / b;`,yZ=` setOutputAtIndex(index, outputValue); } } - `}},cde={kernelName:lo,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new pde(n.shape,s),[u,d]=T.getImageCenter(i,n.shape[1],n.shape[2]),c=[{type:"float32",data:[u]},{type:"float32",data:[d]},{type:"float32",data:[Math.sin(r)]},{type:"float32",data:[Math.cos(r)]}];return typeof s=="number"?c.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:"float32",data:s}),o.runWebGPUProgram(l,[n],n.dtype,c)}},hde=Ht({opType:Se.RSQRT,cpuKernelImpl:Yie}),fde={kernelName:hs,backendName:"webgpu",kernelFunc:hde},xc=class{constructor(e,t,a,n,r,s,i,o=!0){this.variableNames=["updates","indices"],this.workGroupSize=[64,1,1],this.atomic=!0,this.outputShape=s,this.type=i,this.sumDupeIndices=o,this.dispatchLayout=Ye(e),this.dispatch=Me(this.dispatchLayout,e,this.workGroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}`;let l=na(r.length);this.uniforms=`sliceDim : i32, strides: ${l}, size: i32,`,this.updatesRank=n,this.indicesRank=a}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,a=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",r="";this.dispatchLayout.x.length===1?(n="flattenedIndex",r=` + `}},ade={kernelName:ho,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new tde(n.shape,s),[u,p]=T.getImageCenter(i,n.shape[1],n.shape[2]),c=[{type:"float32",data:[u]},{type:"float32",data:[p]},{type:"float32",data:[Math.sin(r)]},{type:"float32",data:[Math.cos(r)]}];return typeof s=="number"?c.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:"float32",data:s}),o.runWebGPUProgram(l,[n],n.dtype,c)}},nde=it({opType:de.RSQRT,cpuKernelImpl:Yse}),rde={kernelName:Yi,backendName:"webgpu",kernelFunc:nde},Ac=class{constructor(e,t,a,n,r,s,i,o=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=s,this.type=i,this.sumDupeIndices=o,this.dispatchLayout=Ve(e),this.dispatch=Ne(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}`;let l=ra(r.length);this.uniforms=`sliceDim : i32, strides: ${l}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=a}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,a=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",r="";this.dispatchLayout.x.length===1?(n="flattenedIndex",r=` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; } @@ -6794,11 +6983,11 @@ return a / b;`,yZ=` newBits = bitcast(newValue); } } - `);let d=`atomicStore(${o}, bitcast(${l}));`;return this.sumDupeIndices?u:d};return` + `);let p=`atomicStore(${o}, bitcast(${l}));`;return this.sumDupeIndices?u:p};return` ${r} - ${We("index")} { - if (index < uniforms.size) { + ${Ce("index")} { + if (index < uniforms.updatesSize) { let coords = getUpdatesCoordsFromFlatIndex(index); var flattenedIndex = 0; for (var j = 0; j < uniforms.sliceDim; j = j + 1) { @@ -6806,13 +6995,35 @@ return a / b;`,yZ=` flattenedIndex = flattenedIndex + indexInside * ${a}; } let updateValue = - ${Ku(this.type,!1)}(${s}); + ${ad(this.type,!1)}(${s}); let flatIndex = getOutputIndexFromCoords(${n}); ${i("&result[flatIndex]","updateValue")}; } - }`}};function mde(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=T.calculateShapes(s,r,i),p=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=Re({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),f=Re({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),m=f.dtype,g=go({backend:a,attrs:{shape:p,value:0,dtype:m}}),y=v.sizeFromShape(f.shape),A=[{type:"int32",data:[o]},{type:"int32",data:d},{type:"int32",data:[y]}],x=new xc(f.shape,o,h.shape.length,f.shape.length,d,p,m),b=a.runWebGPUProgram(x,[f,h],m,A,g),w=Re({inputs:{x:b},backend:a,attrs:{shape:i}});return a.disposeData(h.dataId),a.disposeData(f.dataId),a.disposeData(b.dataId),w}var gde={kernelName:Qi,backendName:"webgpu",kernelFunc:mde},yde=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.cRank=e,this.rank=a,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[],r=[];for(let s=0;s i32 { + var left = i32(0); + var right = uniforms.numInputs; + while (left < right) { + var mid = (left + right) / 2; + if (getSortedSequence(batch, mid) ${this.side==="left"?"<":"<="} value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + ${Ce("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let value = getValuesByOutputIndex(index); + setOutputAtIndexI32(index, findBound(coords[0], value)); + } + } + `}};function lde(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new ode([s.shape[0],s.shape[1]],i),l=[{type:"int32",data:[r.shape[1]]}];return a.runWebGPUProgram(o,[r,s],"int32",l)}var ude={kernelName:$d,backendName:"webgpu",kernelFunc:lde},dde=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=a,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[],r=[];for(let s=0;s{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((y,A)=>y*A),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeData(y.dataId)),g},Rde={kernelName:Bl,backendName:"webgpu",kernelFunc:Ede},Mde=class{constructor(e,t){this.variableNames=["A"],this.workGroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=[[0,0]];l.push(...i);for(let x=1+s.length;xa.disposeData(x.dataId)),g},kde={kernelName:Yl,backendName:"webgpu",kernelFunc:wde},Ide=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`(resRC % ${t}aShape)`;let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=ve(r.shape,r.dtype,l),d=roe(u,s);return a.makeTensorInfo(d.shape,d.dtype,d.values)}let i=new Mde(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var _de={kernelName:As,backendName:"webgpu",kernelFunc:T9};function Fde(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=T.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),_=a.bufferSync(s),$=v.decodeString(a.readSync(i.dataId)[0]),M=Jie(N,_,o,p,d,u,l,c,$,h);return a.makeTensorInfo(o,M.dtype,M.values)}let f=[p/d,d],m=Re({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?Re({inputs:{x:s},backend:a,attrs:{shape:[u,d]}}):cn({inputs:{x:s},backend:a}),y=g.dtype,A=a.makeTensorInfo([],y,v.makeZerosTypedArray(1,y)),x=Re({inputs:{x:i},backend:a,attrs:{shape:Array(f.length).fill(1)}}),b=T9({inputs:{x},backend:a,attrs:{reps:f}}),w=v.sizeFromShape([u,d]),S=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let N=new xc([u,d],l,m.shape.length,g.shape.length,c,f,y,h);a.runWebGPUProgram(N,[g,m],y,S,b)}break;default:{let N=new xc([u,d],l,m.shape.length,A.shape.length,c,f,y,h);a.runWebGPUProgram(N,[A,m],y,S,b)}{let N=new xc([u,d],l,m.shape.length,g.shape.length,c,f,y);a.runWebGPUProgram(N,[g,m],y,S,b)}}let C=Re({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),a.disposeData(g.dataId),a.disposeData(x.dataId),a.disposeData(A.dataId),a.disposeData(b.dataId),C}var Pde={kernelName:Ld,backendName:"webgpu",kernelFunc:Fde};function Ode(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=r.shape.length,d=new Array(u).fill(0),c=r.shape.slice();return l.map(p=>{let h=[...c];h[o]=p;let f=uu({inputs:{x:r},backend:a,attrs:{begin:d,size:h}});return d[o]+=p,f})}var Dde={kernelName:Wl,backendName:"webgpu",kernelFunc:Ode},zde=Ht({opType:Se.SQRT}),Lde={kernelName:ms,backendName:"webgpu",kernelFunc:zde},Bde={kernelName:Bd,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new mp(a.shape,Se.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},Wde=ca({opType:Be.SQUARED_DIFFERENCE}),Vde={kernelName:gs,backendName:"webgpu",kernelFunc:Wde},Gde=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]);let t=na(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let a=0;t=this.outputShape.map((n,r)=>(a++,this.outputShape.length===1?`coords * uniforms.strides[${r}] + uniforms.begin[${r}]`:`coords[${a-1}] * uniforms.strides[${r}] + uniforms.begin[${r}]`)).join(",")}return` - ${We("index")} { + `}};function Sde(e,t=""){if(e>=5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`(resRC % ${t}aShape)`;let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=Me(r.shape,r.dtype,l),p=rie(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new Ide(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var Tde={kernelName:ts,backendName:"webgpu",kernelFunc:K8};function Cde(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=T.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let E=a.bufferSync(r),_=a.bufferSync(s),$=v.decodeString(a.readSync(i.dataId)[0]),M=Jse(E,_,o,d,p,u,l,c,$,h);return a.makeTensorInfo(o,M.dtype,M.values)}let f=[d/p,p],m=Se({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?Se({inputs:{x:s},backend:a,attrs:{shape:[u,p]}}):Za({inputs:{x:s},backend:a}),x=g.dtype,A=a.makeTensorInfo([],x,v.makeZerosTypedArray(1,x)),y=Se({inputs:{x:i},backend:a,attrs:{shape:Array(f.length).fill(1)}}),b=K8({inputs:{x:y},backend:a,attrs:{reps:f}}),w=v.sizeFromShape([u,p]),S=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let E=new Ac([u,p],l,m.shape.length,g.shape.length,c,f,x,h);a.runWebGPUProgram(E,[g,m],x,S,b)}break;default:{let E=new Ac([u,p],l,m.shape.length,A.shape.length,c,f,x,h);a.runWebGPUProgram(E,[A,m],x,S,b)}{let E=new Ac([u,p],l,m.shape.length,g.shape.length,c,f,x);a.runWebGPUProgram(E,[g,m],x,S,b)}}let C=Se({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),a.disposeData(g.dataId),a.disposeData(y.dataId),a.disposeData(A.dataId),a.disposeData(b.dataId),C}var Nde={kernelName:Ld,backendName:"webgpu",kernelFunc:Cde};function Ede(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=T.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),c=r.shape.slice();return l.map(d=>{let h=[...c];h[o]=d;let f=xu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,f})}var Rde={kernelName:Jl,backendName:"webgpu",kernelFunc:Ede},Mde=it({opType:de.SQRT}),$de={kernelName:to,backendName:"webgpu",kernelFunc:Mde},_de={kernelName:Bd,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new mp(a.shape,de.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},Pde=ua({opType:De.SQUARED_DIFFERENCE}),Fde={kernelName:ro,backendName:"webgpu",kernelFunc:Pde},Ode=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ra(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let a=0;t=this.outputShape.map((n,r)=>(a++,this.outputShape.length===1?`coords * uniforms.strides[${r}] + uniforms.begin[${r}]`:`coords[${a-1}] * uniforms.strides[${r}] + uniforms.begin[${r}]`)).join(",")}return` + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${t})); } } - `}};function Ude(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:y,begin:A,end:x,strides:b}=At.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(m)w=Re({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=At.computeOutShape(A,x,b),C=uu({inputs:{x:r},backend:a,attrs:{begin:A,size:S}});w=Re({inputs:{x:C},backend:a,attrs:{shape:f}}),a.disposeData(C.dataId)}else if(a.shouldExecuteOnCPU([r])){let S=a.readSync(r.dataId),C=ve(r.shape,r.dtype,S),N=toe(h,C,b,A);w=a.makeTensorInfo(f,r.dtype,N.values)}else{let S=new Gde(h),C=[{type:"int32",data:A},{type:"int32",data:b}],N=a.runWebGPUProgram(S,[r],r.dtype,C);w=Re({inputs:{x:N},backend:a,attrs:{shape:f}}),a.disposeData(N.dataId)}return w}var jde={kernelName:no,backendName:"webgpu",kernelFunc:Ude};function Hde(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.readSync(d.dataId),h=a.readSync(c.dataId),[f,m]=aoe(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var qde={kernelName:Gl,backendName:"webgpu",kernelFunc:Hde},Xde=Ht({opType:Se.TANH}),Kde={kernelName:ro,backendName:"webgpu",kernelFunc:Xde},Zde=class{constructor(e){this.variableNames=["x","indices"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function Dde(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:x,begin:A,end:y,strides:b}=It.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(m)w=Se({inputs:{x:r},backend:a,attrs:{shape:f}});else if(g||x){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=It.computeOutShape(A,y,b),C=xu({inputs:{x:r},backend:a,attrs:{begin:A,size:S}});w=Se({inputs:{x:C},backend:a,attrs:{shape:f}}),a.disposeData(C.dataId)}else if(a.shouldExecuteOnCPU([r])){let S=a.readSync(r.dataId),C=Me(r.shape,r.dtype,S),E=tie(h,C,b,A);w=a.makeTensorInfo(f,r.dtype,E.values)}else{let S=new Ode(h),C=[{type:"int32",data:A},{type:"int32",data:b}],E=a.runWebGPUProgram(S,[r],r.dtype,C);w=Se({inputs:{x:E},backend:a,attrs:{shape:f}}),a.disposeData(E.dataId)}return w}var zde={kernelName:so,backendName:"webgpu",kernelFunc:Dde};function Lde(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.readSync(p.dataId),h=a.readSync(c.dataId),[f,m]=aie(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([f.length],"string",f),a.makeTensorInfo(c.shape,"int32",m)]}var Bde={kernelName:eu,backendName:"webgpu",kernelFunc:Lde},Wde=it({opType:de.TAN}),Vde={kernelName:oo,backendName:"webgpu",kernelFunc:Wde},Ude=it({opType:de.TANH}),Gde={kernelName:lo,backendName:"webgpu",kernelFunc:Ude},Hde=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`,this.shaderKey="swap"}getUserCode(){return` - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -6905,8 +7116,8 @@ return a / b;`,yZ=` } } } - `}},Yde=class{constructor(e){this.variableNames=["x","indices"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` - ${We("index")} { + `}},jde=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` + ${Ce("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -6964,7 +7175,7 @@ return a / b;`,yZ=` } } } - `}};function qo(e,t){t!==null&&e.disposeData(t.dataId)}function uA(e){let t=1;for(;th===null?[d,d]:[d,h],m=(b,w,S)=>{let C=f(),N=new Zde(S),_=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[b]},{type:"int32",data:[w]}],$=h;h=a.runWebGPUProgram(N,C,"int32",_),qo(a,$)};for(let b=1;b=1;S/=2)m(w,S,[u,p])}for(let b=p;b>c;b/=2){let w=f(),S=new Yde([u,b/2]),C=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],N=h;h=a.runWebGPUProgram(S,w,"int32",C),qo(a,N);let _=c/2,$=_*2;for(let M=_;M>=1;M/=2)m($,M,h.shape)}let g=h;h=uu({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),qo(a,g);let y=v9({inputs:{x:d,indices:h},backend:a,attrs:{axis:1,batchDims:1}});qo(a,d);let A=o.slice(0,-1);A.push(s),g=h,h=Re({inputs:{x:h},attrs:{shape:A},backend:a}),qo(a,g);let x=y;return y=Re({inputs:{x:y},attrs:{shape:A},backend:a}),qo(a,x),[y,h]}var Qde={kernelName:so,backendName:"webgpu",kernelFunc:Jde},epe=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ye(this.outputShape),this.dispatch=Me(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="transform"}getUserCode(){return` + `}};function Yo(e,t){t!==null&&e.disposeData(t.dataId)}function Yx(e){let t=1;for(;th===null?[p,p]:[p,h],m=(b,w,S)=>{let C=f(),E=new Hde(S),_=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[b]},{type:"int32",data:[w]}],$=h;h=a.runWebGPUProgram(E,C,"int32",_),Yo(a,$)};for(let b=1;b=1;S/=2)m(w,S,[u,d])}for(let b=d;b>c;b/=2){let w=f(),S=new jde([u,b/2]),C=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],E=h;h=a.runWebGPUProgram(S,w,"int32",C),Yo(a,E);let _=c/2,$=_*2;for(let M=_;M>=1;M/=2)m($,M,h.shape)}let g=h;h=xu({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Yo(a,g);let x=G8({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Yo(a,p);let A=o.slice(0,-1);A.push(s),g=h,h=Se({inputs:{x:h},attrs:{shape:A},backend:a}),Yo(a,g);let y=x;return x=Se({inputs:{x},attrs:{shape:A},backend:a}),Yo(a,y),[x,h]}var Xde={kernelName:uo,backendName:"webgpu",kernelFunc:qde},Kde=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=Ve(this.outputShape),this.dispatch=Ne(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` fn mapCoord(outCoord : f32, len : f32) -> f32{ var inCoord = outCoord; if(uniforms.fillModeId == 2) { @@ -7028,7 +7239,7 @@ return a / b;`,yZ=` return outputValue; } - ${We("index")} { + ${Ce("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var outputValue : f32; @@ -7080,7 +7291,7 @@ return a / b;`,yZ=` setOutputAtIndex(index, outputValue); } } - `}};function tpe(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[f,m]=u!=null?u:[c,p],g=[d,f,m,h],y=new epe(g),A=i==="nearest"?1:2,x;switch(o){case"constant":x=1;break;case"reflect":x=2;break;case"wrap":x=3;break;case"nearest":x=4;break;default:x=1;break}let b=[{type:"int32",data:[A]},{type:"int32",data:[x]},{type:"float32",data:[l]}];return a.runWebGPUProgram(y,[r,s],"float32",b)}var ape={kernelName:io,backendName:"webgpu",kernelFunc:tpe};function npe(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),d=0;for(let m=0;ma.disposeData(m.dataId)),f}var rpe={kernelName:jl,backendName:"webgpu",kernelFunc:npe},spe=[Lse,loe,doe,hoe,xoe,voe,koe,Eoe,Moe,Ooe,Boe,Voe,Hoe,Wse,Zoe,ale,ole,ule,ple,fle,gle,Ale,vle,Ile,Nle,Rle,$le,_le,Fle,Ole,Ose,zle,Ule,Ble,Vle,qle,Kle,Yle,eue,nue,sue,oue,Bse,Xoe,uue,pue,hue,mue,yue,xue,vue,Toe,kue,Sue,Coe,Cue,Eue,Mue,Sle,_ue,Pue,Due,Doe,Lue,Wue,Gue,jue,que,Kue,Yue,zoe,Jue,ede,ade,rde,Dse,ode,dde,cde,fde,gde,xde,vde,kde,Sde,Foe,jde,qde,Nde,Rde,Pde,Dde,Lde,Bde,Vde,Tde,Tle,Kde,_de,Qde,ape,yoe,rpe,zue];for(let e of spe)hn(e);var dA="4.0.0",ipe="4.0.0",ope="4.0.0",lpe="4.0.0",upe="4.0.0",dpe="0.0.1-alpha.14",Ap={tfjs:dA,"tfjs-core":dA,"tfjs-converter":ipe,"tfjs-backend-cpu":ope,"tfjs-backend-webgl":lpe,"tfjs-backend-wasm":upe,"tfjs-backend-webgpu":dpe};function K(...e){let t=new Date,a=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(a,"Human:",...e)}function C9(e,t){let a=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${a}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var te=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Z3(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Z3(e[r],t[r],r,n);else{let s=e&&typeof e[r]!="undefined";s||n.push({reason:"unknown property",where:`${a}.${r} = ${t[r]}`});let i=e&&typeof e[r]==typeof t[r];s&&!i&&n.push({reason:"property type mismatch",where:`${a}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&a==="config"&&n.length>0&&K("invalid configuration",n),n}function Tt(...e){let t=a=>a&&typeof a=="object";return e.reduce((a,n)=>(Object.keys(n||{}).forEach(r=>{let s=a[r],i=n[r];Array.isArray(s)&&Array.isArray(i)?a[r]=s.concat(...i):t(s)&&t(i)?a[r]=Tt(s,i):a[r]=i}),a),{})}var yo={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var N9=` + `}};function Zde(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[f,m]=u!=null?u:[c,d],g=[p,f,m,h],x=new Kde(g),A=i==="nearest"?1:2,y;switch(o){case"constant":y=1;break;case"reflect":y=2;break;case"wrap":y=3;break;case"nearest":y=4;break;default:y=1;break}let b=[{type:"int32",data:[A]},{type:"int32",data:[y]},{type:"float32",data:[l]}];return a.runWebGPUProgram(x,[r,s],"float32",b)}var Yde={kernelName:po,backendName:"webgpu",kernelFunc:Zde};function Jde(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let m=0;ma.disposeData(m.dataId)),f}var Qde={kernelName:tu,backendName:"webgpu",kernelFunc:Jde},epe=[Sse,lie,die,cie,fie,xie,Iie,Tie,Nie,Rie,$ie,Pie,Oie,zie,Bie,Hie,qie,Jie,aoe,ioe,loe,coe,Cse,goe,Ioe,Eoe,Moe,_oe,Ooe,zoe,Boe,Voe,Hoe,Xoe,Joe,ele,ale,rle,sle,ile,lle,dle,wse,cle,Ale,fle,gle,vle,kle,Sle,Nle,Mle,_le,Fle,Tse,Dle,foe,Lle,Wle,Ule,Hle,qle,Kle,Qle,Yle,tue,nue,Vie,sue,oue,Uie,uue,pue,hue,mue,Koe,xue,yue,vue,noe,Iue,Tue,Nue,Rue,$ue,Pue,Oue,zue,roe,Lue,Wue,Uue,Hue,kse,Xue,Yue,ede,ade,rde,ide,ude,cde,fde,gde,Ade,Zie,zde,Bde,vde,kde,Nde,Rde,$de,_de,Fde,yde,Zoe,Vde,Gde,Tde,Xde,Yde,vie,Qde,Sue];for(let e of epe)fn(e);var Jx="4.1.0",tpe="4.1.0",ape="4.1.0",npe="4.1.0",rpe="4.1.0",spe="0.0.1-alpha.16",xp={tfjs:Jx,"tfjs-core":Jx,"tfjs-converter":tpe,"tfjs-backend-cpu":ape,"tfjs-backend-webgl":npe,"tfjs-backend-wasm":rpe,"tfjs-backend-webgpu":spe};function K(...e){let t=new Date,a=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(a,"Human:",...e)}function Z8(e,t){let a=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${a}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var te=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function B3(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")B3(e[r],t[r],r,n);else{let s=e&&typeof e[r]!="undefined";s||n.push({reason:"unknown property",where:`${a}.${r} = ${t[r]}`});let i=e&&typeof e[r]==typeof t[r];s&&!i&&n.push({reason:"property type mismatch",where:`${a}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&a==="config"&&n.length>0&&K("invalid configuration",n),n}function Ct(...e){let t=a=>a&&typeof a=="object";return e.reduce((a,n)=>(Object.keys(n||{}).forEach(r=>{let s=a[r],i=n[r];Array.isArray(s)&&Array.isArray(i)?a[r]=s.concat(...i):t(s)&&t(i)?a[r]=Ct(s,i):a[r]=i}),a),{})}var wo={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var Y8=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -7090,7 +7301,7 @@ return a / b;`,yZ=` vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var E9=` +`;var J8=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -7102,7 +7313,7 @@ return a / b;`,yZ=` gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14]; gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19]; } -`,R9=` +`,Q8=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -7114,7 +7325,7 @@ return a / b;`,yZ=` gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,M9=` +`,e9=` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -7127,7 +7338,7 @@ return a / b;`,yZ=` vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,$9=` +`,t9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -7150,7 +7361,7 @@ return a / b;`,yZ=` gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794; gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265; } -`,_9=` +`,a9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -7172,8 +7383,8 @@ return a / b;`,yZ=` c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var Y3=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},J3=class{constructor(t,a,n){le(this,"uniform",{});le(this,"attribute",{});le(this,"gl");le(this,"id");le(this,"compile",(t,a)=>{let n=this.gl.createShader(a);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(K(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)||"unknown"}`),null)):(K("filter: could not create shader"),null)});this.gl=t;let r=this.compile(a,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){K("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){K(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Y3(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);Y3(a,"uniform",this.uniform),Y3(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function F9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=En(100,100),u={},d={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function p(A,x){if(!(A===l.width&&x===l.height)){if(l.width=A,l.height=x,!i){let b=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);i=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,i),c.bufferData(c.ARRAY_BUFFER,b,c.STATIC_DRAW),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}c.viewport(0,0,l.width,l.height),r=[null,null]}}function h(A,x){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let S=c.createTexture();return c.bindTexture(c.TEXTURE_2D,S),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,A,x,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,S,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:S}}function f(A){return r[A]=r[A]||h(l.width,l.height),r[A]}function m(A=0){if(!o)return;let x=null,b=null,w=!1;e===0?x=t:x=f(n).texture||null,e++,a&&!(A&d.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=f(n).fbo||null),c.bindTexture(c.TEXTURE_2D,x),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(A){if(u[A])return o=u[A],c.useProgram((o?o.id:null)||null),o;if(o=new J3(c,N9,A),!o)return K("filter: could not get webgl program"),null;let x=Float32Array.BYTES_PER_ELEMENT,b=4*x;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*x),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*x),u[A]=o,o}let y={colorMatrix:A=>{let x=new Float32Array(A);x[4]/=255,x[9]/=255,x[14]/=255,x[19]/=255;let b=x[18]===1&&x[3]===0&&x[8]===0&&x[13]===0&&x[15]===0&&x[16]===0&&x[17]===0&&x[19]===0?R9:E9,w=g(b);!w||(c.uniform1fv(w.uniform.m,x),m())},brightness:A=>{let x=(A||0)+1;y.colorMatrix([x,0,0,0,0,0,x,0,0,0,0,0,x,0,0,0,0,0,1,0])},saturation:A=>{let x=(A||0)*2/3+1,b=(x-1)*-.5;y.colorMatrix([x,b,b,0,0,b,x,b,0,0,b,b,x,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:A=>{let x=(A||0)+1,b=-128*(x-1);y.colorMatrix([x,0,0,0,b,0,x,0,0,b,0,0,x,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:A=>{A=(A||0)/180*Math.PI;let x=Math.cos(A),b=Math.sin(A),w=.213,S=.715,C=.072;y.colorMatrix([w+x*(1-w)+b*-w,S+x*-S+b*-S,C+x*-C+b*(1-C),0,0,w+x*-w+b*.143,S+x*(1-S)+b*.14,C+x*-C+b*-.283,0,0,w+x*-w+b*-(1-w),S+x*-S+b*S,C+x*(1-C)+b*C,0,0,0,0,0,1,0])},desaturateLuminance:()=>{y.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{y.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{y.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{y.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{y.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{y.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{y.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{y.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:A=>{let x=new Float32Array(A),b=1/l.width,w=1/l.height,S=g(_9);!S||(c.uniform1fv(S.uniform.m,x),c.uniform2f(S.uniform.px,b,w),m())},detectEdges:()=>{y.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{y.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{y.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:A=>{let x=A||1;y.convolution.call(this,[0,-1*x,0,-1*x,1+4*x,-1*x,0,-1*x,0])},emboss:A=>{let x=A||1;y.convolution.call(this,[-2*x,-1*x,0,-1*x,1,1*x,0,1*x,2*x])},blur:A=>{let x=A/7/l.width,b=A/7/l.height,w=g($9);!w||(c.uniform2f(w.uniform.px,0,b),m(d.INTERMEDIATE),c.uniform2f(w.uniform.px,x,0),m())},pixelate:A=>{let x=A/l.width,b=A/l.height,w=g(M9);!w||(c.uniform2f(w.uniform.size,x,b),m())}};this.add=function(A){let x=Array.prototype.slice.call(arguments,1),b=y[A];s.push({func:b,args:x})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(A){p(A.width,A.height),e=0,t||(t=c.createTexture()),c.bindTexture(c.TEXTURE_2D,t),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,A);for(let x=0;xd.data())),i=Math.max(s[0][0],s[1][0],s[2][0]),l=(i>1?255:1)/i,u;if(l>1){let d=[he(a[0],n[0]),he(a[1],n[1]),he(a[2],n[2])],c=[he(r[0],n[0]),he(r[1],n[1]),he(r[2],n[2])],p=[ae(d[0],l),ae(d[1],l),ae(d[2],l)],h=sa([p[0],p[1],p[2]],2);u=J(h,[1,t.shape[0]||0,t.shape[1]||0,3]),Y([...d,...c,...p])}else u=Gt(t,0);return Y([...a,...n,...r,a,t,e]),u}var Kh=3840,Yt=null,Jt=null,du=null,gt,mn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function Q3(){mn.inputSum=0,mn.cacheDiff=1,mn.sumMethod=0,mn.inputTensor=void 0}function En(e,t){let a;if(ne.browser)if(ne.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");a=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");a=document.createElement("canvas"),a.width=e,a.height=t}else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function Zh(e,t){let a=t||En(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function Yh(e,t,a=!0){var p,h,f;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof dt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof ne.Canvas!="undefined"&&e instanceof ne.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof dt){let m=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)m=Gt(e,0);else if(e.shape[2]===4){let g=sp(e,[0,0,0],[-1,-1,3]);m=Gt(g,0),Y(g)}}else e.shape.length===4&&(e.shape[3]===3?m=wa(e):e.shape[3]===4&&(m=bh(e,[0,0,0,0],[-1,-1,-1,3])));if(m==null||m.shape.length!==4||m.shape[0]!==1||m.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(m.dtype==="int32"){let g=Ue(m,"float32");Y(m),m=g}return{tensor:m,canvas:t.filter.return?Jt:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:Yt};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&K("cannot determine input dimensions"),{tensor:null,canvas:Yt};let s=n,i=r;if(s>Kh&&(s=Kh,i=Math.trunc(s*r/n)),i>Kh&&(i=Kh,s=Math.trunc(i*n/r)),(((p=t.filter)==null?void 0:p.width)||0)>0?s=t.filter.width:(((h=t.filter)==null?void 0:h.height)||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?i=t.filter.height:(t.filter.width||0)>0&&(i=r*((t.filter.width||0)/n)),!s||!i)throw new Error("input error: cannot determine dimension");(!Yt||Yt.width!==s||Yt.height!==i)&&(Yt=En(s,i));let o=Yt.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?o.putImageData(e,0,0):t.filter.flip&&typeof o.translate!="undefined"?(o.translate(n,0),o.scale(-1,1),o.drawImage(e,0,0,n,r,0,0,Yt.width,Yt.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,Yt.width,Yt.height),(!Jt||Yt.width!==Jt.width||Yt.height!==Jt.height)&&(Jt=En(Yt.width,Yt.height)),t.filter.enabled&&ne.webgl.supported?(gt||(gt=ne.browser?new F9:null),ne.filter=!!gt,gt!=null&>.add?(gt.reset(),t.filter.brightness!==0&>.add("brightness",t.filter.brightness),t.filter.contrast!==0&>.add("contrast",t.filter.contrast),t.filter.sharpness!==0&>.add("sharpen",t.filter.sharpness),t.filter.blur!==0&>.add("blur",t.filter.blur),t.filter.saturation!==0&>.add("saturation",t.filter.saturation),t.filter.hue!==0&>.add("hue",t.filter.hue),t.filter.negative&>.add("negative"),t.filter.sepia&>.add("sepia"),t.filter.vintage&>.add("brownie"),t.filter.sepia&>.add("sepia"),t.filter.kodachrome&>.add("kodachrome"),t.filter.technicolor&>.add("technicolor"),t.filter.polaroid&>.add("polaroid"),t.filter.pixelate!==0&>.add("pixelate",t.filter.pixelate),((f=gt.get())==null?void 0:f.length)>1?Jt=gt.apply(Yt):Jt=gt.draw(Yt)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,Zh(Yt,Jt))):(Zh(Yt,Jt),gt&&(gt=null),ne.filter=!!gt),!a)return{tensor:null,canvas:Jt};if(!Jt)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ne.browser&&wr)l=wr?wr.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);l=ze(m,[e.height,e.width,u],"int32")}else if((!du||Jt.width!==du.width||Jt.height!==du.height)&&(du=En(Jt.width,Jt.height)),wr&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=wr.fromPixels(Jt):(du=Zh(Jt),l=wr.fromPixels(du));else{let y=Zh(Jt).getContext("2d").getImageData(0,0,s,i);u=y.data.length/s/i;let A=new Uint8Array(y.data.buffer);l=ze(A,[s,i,u])}if(u===4){let m=sp(l,[0,0,0],[-1,-1,3]);Y(l),l=m}if(!l)throw new Error("input error: cannot create tensor");let d=Ue(l,"float32"),c=t.filter.equalization?await Xh(d):Gt(d,0);if(Y([l,d]),t.filter.autoBrightness){let m=pa(c),g=await m.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],Y(m)}return{tensor:c,canvas:t.filter.return?Jt:null}}async function P9(e,t){let a=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return a;if(!mn.inputTensor)mn.inputTensor=wa(t);else if(mn.inputTensor.shape[1]!==t.shape[1]||mn.inputTensor.shape[2]!==t.shape[2])Y(mn.inputTensor),mn.inputTensor=wa(t);else{let n={};n.diff=he(t,mn.inputTensor),n.squared=ae(n.diff,n.diff),n.sum=tt(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;Y([mn.inputTensor,n.diff,n.squared,n.sum]),mn.inputTensor=wa(t),a=s<=(e.cacheSensitivity||0)}return a}async function O9(e,t,a){let n={};if(!t||!a||t.shape.length!==4||t.shape.length!==a.shape.length)return e.debug||K("invalid input tensor or tensor shapes do not match:",t.shape,a.shape),0;if(t.shape[0]!==1||a.shape[0]!==1||t.shape[3]!==3||a.shape[3]!==3)return e.debug||K("input tensors must be of shape [1, height, width, 3]:",t.shape,a.shape),0;n.input1=wa(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?me.resizeBilinear(a,[t.shape[1],t.shape[2]]):wa(a),n.diff=he(n.input1,n.input2),n.squared=ae(n.diff,n.diff),n.sum=tt(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return Y([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var xp=class{constructor(){le(this,"browser");le(this,"node");le(this,"worker");le(this,"platform","");le(this,"agent","");le(this,"backends",[]);le(this,"initial");le(this,"filter");le(this,"tfjs");le(this,"offscreen");le(this,"perfadd",!1);le(this,"tensorflow",{version:void 0,gpu:void 0});le(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});le(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});le(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});le(this,"cpu",{model:void 0,flags:[]});le(this,"kernels",[]);le(this,"Canvas");le(this,"Image");le(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Ap["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let a=t[0].match(/\(([^()]+)\)/g);this.platform=a!=null&&a[0]?a[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(kt().registryFactory);try{this.tensorflow={version:tr().binding?tr().binding.TF_Version:void 0,gpu:tr().binding?tr().binding.isUsingGpuDevice():void 0}}catch(n){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await V().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await V().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=En(100,100),a=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof a!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&a&&(this.webgl.version=a.getParameter(a.VERSION),this.webgl.vendor=a.getParameter(a.VENDOR),this.webgl.renderer=a.getParameter(a.RENDERER),this.webgl.shader=a.getParameter(a.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let n=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(n==null?void 0:n.requestAdapterInfo())}}catch(n){this.webgpu.supported=!1}try{this.kernels=Zn(ia()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ne=new xp;var Qh=class{constructor(){le(this,"config");le(this,"element");le(this,"stream");le(this,"devices",[]);le(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(a=>a.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});le(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let r=document.getElementById(t.element);if(r&&r instanceof HTMLVideoElement)this.element=r;else{this.config.debug&&K("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&K("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let a={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(a.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&K("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&K("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&K("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(r){K("webcam",r);return}if(!this.stream){this.config.debug&&K("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(r=>{this.element?this.element.onloadeddata=()=>r(!0):r(!1)}),await this.element.play(),this.config.debug&&K("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});le(this,"pause",()=>{this.element&&this.element.pause()});le(this,"play",async()=>{this.element&&await this.element.play()});le(this,"stop",()=>{this.config.debug&&K("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var eg={};hr(eg,{age:()=>Tpe,"anti-spoofing":()=>sce,antispoof:()=>fpe,blazeface:()=>mpe,"blazeface-back":()=>Cpe,"blazeface-front":()=>Npe,"blazepose-detect":()=>rce,"blazepose-detector2d":()=>Epe,"blazepose-detector3d":()=>Rpe,"blazepose-full":()=>Mpe,"blazepose-heavy":()=>$pe,"blazepose-lite":()=>_pe,centernet:()=>gpe,default:()=>Ace,efficientpose:()=>Fpe,"efficientpose-i-lite":()=>ice,"efficientpose-ii-lite":()=>oce,"efficientpose-iv":()=>lce,emotion:()=>ype,faceboxes:()=>Ppe,facemesh:()=>Ape,"facemesh-attention":()=>Dpe,"facemesh-attention-alt":()=>Ope,"facemesh-detection-full":()=>zpe,"facemesh-detection-short":()=>Lpe,"facemesh-orig":()=>Bpe,faceres:()=>xpe,"faceres-deep":()=>Wpe,gear:()=>Vpe,gender:()=>Upe,"gender-ssrnet-imdb":()=>Gpe,handdetect:()=>jpe,"handlandmark-full":()=>bpe,"handlandmark-lite":()=>Hpe,"handlandmark-sparse":()=>qpe,handskeleton:()=>Xpe,handtrack:()=>vpe,"insightface-efficientnet-b0":()=>uce,"insightface-ghostnet-strides1":()=>dce,"insightface-ghostnet-strides2":()=>pce,"insightface-mobilenet-emore":()=>cce,"insightface-mobilenet-swish":()=>hce,iris:()=>wpe,liveness:()=>kpe,meet:()=>Kpe,mobileface:()=>Zpe,mobilefacenet:()=>Ype,models:()=>Ipe,"movenet-lightning":()=>Spe,"movenet-multipose":()=>Jpe,"movenet-thunder":()=>Qpe,nanodet:()=>ece,"nanodet-e":()=>fce,"nanodet-g":()=>mce,"nanodet-m":()=>gce,"nanodet-t":()=>yce,posenet:()=>tce,rvm:()=>ace,selfie:()=>nce});var fpe=853098,mpe=538928,gpe=4030290,ype=820516,Ape=1477958,xpe=6978814,bpe=5431368,vpe=2964837,wpe=2599092,kpe=592976,Ipe=0,Spe=4650216,Tpe=161240,Cpe=538928,Npe=402048,Epe=7499400,Rpe=5928856,Mpe=6338290,$pe=27501554,_pe=2725490,Fpe=5651240,Ppe=2013002,Ope=2387598,Dpe=2382414,zpe=1026192,Lpe=201268,Bpe=2955780,Wpe=13957620,Vpe=1498916,Gpe=161236,Upe=201808,jpe=3515612,Hpe=2023432,qpe=5286322,Xpe=5502280,Kpe=372228,Zpe=2183192,Ype=5171976,Jpe=9448838,Qpe=12477112,ece=7574558,tce=5032780,ace=3739355,nce=212886,rce=5928804,sce=853098,ice=2269064,oce=5651240,lce=25643252,uce=13013224,dce=8093408,pce=8049584,cce=6938536,hce=12168584,fce=12319156,mce=7574558,gce=1887474,yce=5294216,Ace={antispoof:fpe,blazeface:mpe,centernet:gpe,emotion:ype,facemesh:Ape,faceres:xpe,"handlandmark-full":bpe,handtrack:vpe,iris:wpe,liveness:kpe,models:Ipe,"movenet-lightning":Spe,age:Tpe,"blazeface-back":Cpe,"blazeface-front":Npe,"blazepose-detector2d":Epe,"blazepose-detector3d":Rpe,"blazepose-full":Mpe,"blazepose-heavy":$pe,"blazepose-lite":_pe,efficientpose:Fpe,faceboxes:Ppe,"facemesh-attention-alt":Ope,"facemesh-attention":Dpe,"facemesh-detection-full":zpe,"facemesh-detection-short":Lpe,"facemesh-orig":Bpe,"faceres-deep":Wpe,gear:Vpe,"gender-ssrnet-imdb":Gpe,gender:Upe,handdetect:jpe,"handlandmark-lite":Hpe,"handlandmark-sparse":qpe,handskeleton:Xpe,meet:Kpe,mobileface:Zpe,mobilefacenet:Ype,"movenet-multipose":Jpe,"movenet-thunder":Qpe,nanodet:ece,posenet:tce,rvm:ace,selfie:nce,"blazepose-detect":rce,"anti-spoofing":sce,"efficientpose-i-lite":ice,"efficientpose-ii-lite":oce,"efficientpose-iv":lce,"insightface-efficientnet-b0":uce,"insightface-ghostnet-strides1":dce,"insightface-ghostnet-strides2":pce,"insightface-mobilenet-emore":cce,"insightface-mobilenet-swish":hce,"nanodet-e":fce,"nanodet-g":mce,"nanodet-m":gce,"nanodet-t":yce};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ha={};async function xce(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function D9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function Ce(e){var u,d,c,p;let t=C9(Ea.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let a=t.includes("/")?t.split("/"):t.split("\\"),n=a[a.length-1].replace(".json",""),r="indexeddb://"+n;ha[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:eg[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Hn.listModels():{}}catch(h){Ea.cacheSupported=!1}ha[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ha[n].url=ha[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,f)=>xce(h,f)},o=new op(ha[n].url,i),l=!1;try{o.findIOHandler(),Ea.debug&&K("model load handler:",o.handler)}catch(h){K("error finding model i/o handler:",t,h)}try{let h=await((u=o.handler)==null?void 0:u.load())||null;ha[n].sizeFromManifest=((d=h==null?void 0:h.weightData)==null?void 0:d.byteLength)||0,h?o.loadSync(h):o=await i3(ha[n].inCache?r:t,i),ha[n].sizeLoadedWeights=((p=(c=o.artifacts)==null?void 0:c.weightData)==null?void 0:p.byteLength)||0,Ea.verbose&&K("load:",{model:n,url:o.modelUrl,bytes:ha[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ha[n].inCache)try{let h=await o.save(r);Ea.debug&&K("model saved:",r,h)}catch(h){K("error saving model:",t,h)}return o}var tg="3.0.0";var vt={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function wce(){let e=vt.gl;!e||(vt.extensions=e.getSupportedExtensions())}function z9(e){var t;if(e.config.backend==="humangl"&&(vt.name in kt().registry&&!((t=vt==null?void 0:vt.gl)!=null&&t.getParameter(vt.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!p2(vt.name))){try{vt.canvas=En(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(vt.gl=vt.canvas.getContext("webgl2",vt.webGLattr),!vt.gl){K("humangl error: cannot get webgl context");return}if(!vt.gl.getParameter(vt.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}vt.canvas&&(vt.canvas.addEventListener("webglcontextlost",s=>{throw K("humangl error:",s.type),K("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),vt.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),vt.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{Dh(2,vt.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new el(vt.gl);uo(vt.name,()=>new nu(r),vt.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Zn("webgl").forEach(s=>{let i={...s,backendName:vt.name};hn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{V().flagRegistry.WEBGL_VERSION&&V().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}wce();let a=tr(),n=typeof a.gpgpu!="undefined"?a.getGPGPUContext().gl:null;n?e.config.debug&&K("humangl backend registered:",{webgl:n.getParameter(n.VERSION),renderer:n.getParameter(n.RENDERER)}):K("humangl error: no current gl context:",n,vt.gl)}}var Oe={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function L9(){Oe.tf255=Fe(255,"float32"),Oe.tf1=Fe(1,"float32"),Oe.tf2=Fe(2,"float32"),Oe.tf05=Fe(.5,"float32"),Oe.tf127=Fe(127.5,"float32"),Oe.rgb=Ut([.2989,.587,.114],"float32")}async function Sce(){return await ne.updateBackend(),ne.browser?ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu":"tensorflow"}function Tce(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:ia(),kernelFunc:n=>Ee(()=>he(n.inputs.a,ae(fe(n.inputs.a,n.inputs.b),n.inputs.b)))};hn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:ia(),kernelFunc:n=>Ee(()=>xe(ae(Yd(n.inputs.a,n.inputs.b),n.inputs.b),Xl(n.inputs.a,n.inputs.b)))};hn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:ia(),kernelFunc:n=>Ee(()=>{let r=ia();Xd("cpu");let s=me.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Xd(r),s})};hn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var B9={};async function bp(e,t=!1){var a;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await Sce()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&ia()!==e.config.backend){let n=te();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),ne.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&K(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ne.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")K("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let s=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",s),!s)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let i="requestAdapterInfo"in s?await s.requestAdapterInfo():void 0;K("webgpu adapter info:",i)}}let r=Object.keys(kt().registryFactory);if(e.config.backend==="humangl"&&!r.includes("humangl")&&(z9(e),r=Object.keys(kt().registryFactory)),e.config.debug&&K("available backends:",r),r.includes(e.config.backend)||(K(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ne.node?"tensorflow":"webgl",e.config.debug&&K(`override: setting backend ${e.config.backend}`)),e.config.debug&&K("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(V().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&V().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof Gh!="undefined")Gh(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let s=!1,i=!1;try{s=await V().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await V().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${i?"simd":"no simd"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!i&&K("warning: wasm simd support is not enabled")}catch(o){K("wasm detection failed")}}try{await Xd(e.config.backend),await Kd()}catch(s){return K("error: cannot set backend:",e.config.backend,s),!1}e.config.debug&&(B9=JSON.parse(JSON.stringify(V().flags)))}if((ia()==="humangl"||ia()==="webgl")&&(V().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&V().set("WEBGL_USE_SHAPES_UNIFORMS",!0),V().flagRegistry.WEBGL_EXP_CONV&&V().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),V().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),ia(),e.config.debug){let r=V().flags,s={};for(let i of Object.keys(r))B9[i]!==r[i]&&(s[i]=r[i]);e.config.debug&&Object.keys(s).length>0&&K("backend:",ia(),"flags:",s)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[r,s]of Object.entries(e.config.flags))V().set(r,s)}u2(),L9(),e.performance.initBackend=Math.trunc(te()-n),e.config.backend=ia(),await ne.updateBackend(),Tce(e.config),ne.initial=!1}return!0}function e0(e,t){for(let a of e){let n={kernelName:a,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&K("kernelFunc",a,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};hn(n)}ne.kernels=Zn(ia()).map(a=>a.kernelName.toLowerCase())}var i0={};hr(i0,{all:()=>nhe,body:()=>a0,canvas:()=>ahe,face:()=>t0,gesture:()=>s0,hand:()=>n0,init:()=>lg,object:()=>r0,options:()=>$t,person:()=>the});var gn=e=>{if(!e)K("draw error: invalid canvas");else if(!e.getContext)K("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)K("draw error: cannot get canvas context");else return t}return null},Ao=e=>Math.round(e*180/Math.PI),pt=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),xo=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let a=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${a[0]}, ${a[1]}, ${a[2]}, ${t.alpha})`};function Rn(e,t,a,n,r){let s=t.replace(/\[.*\]/g,"").split(` -`).map(o=>o.trim()),i=Math.max(0,a);for(let o=s.length-1;o>=0;o--){let l=o*r.lineHeight+n;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[o],i+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[o],i+4,l+15)}}function Nr(e,t,a,n,r){e.fillStyle=xo(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function sr(e,t,a,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let i=(t+t+n)/2,o=(a+a+r)/2;e.ellipse(i,o,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,a),e.lineTo(t+n-s.roundRect,a),e.quadraticCurveTo(t+n,a,t+n,a+s.roundRect),e.lineTo(t+n,a+r-s.roundRect),e.quadraticCurveTo(t+n,a+r,t+n-s.roundRect,a+r),e.lineTo(t+s.roundRect,a+r),e.quadraticCurveTo(t,a+r,t,a+r-s.roundRect),e.lineTo(t,a+s.roundRect),e.quadraticCurveTo(t,a,t+s.roundRect,a),e.closePath();e.stroke()}function ag(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=xo(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function V9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){ag(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nvp[e]),J2e=Nce.map(e=>vp[e]),Q2e=Ece.map(e=>vp[e]);function Ts(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Rce=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Mce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],$ce=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],_ce=[[474,475],[475,476],[476,477],[477,474]],Fce=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Pce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Oce=[[469,470],[470,471],[471,472],[472,469]],Dce=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],e3e={lips:Ts(Rce),leftEye:Ts(Mce),leftEyebrow:Ts($ce),leftIris:Ts(_ce),rightEye:Ts(Fce),rightEyebrow:Ts(Pce),rightIris:Ts(Oce),faceOval:Ts(Dce)};var zce=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Lce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Bce=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Wce=[[474,475],[475,476],[476,477],[477,474]],Vce=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Gce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Uce=[[469,470],[470,471],[471,472],[472,469]],jce=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Cs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Hce={lips:Cs(zce),leftEye:Cs(Lce),leftEyebrow:Cs(Bce),leftIris:Cs(Wce),rightEye:Cs(Vce),rightEyebrow:Cs(Gce),rightIris:Cs(Uce),faceOval:Cs(jce)},qce=Object.entries(Hce).map(([e,t])=>t.map(a=>[a,e])).flat(),t3e=new Map(qce),wp=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],wo=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],ko=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var ot;function Xce(e,t){var n,r,s,i,o,l,u,d,c;if(!ot.drawLabels||((n=ot.faceLabels)==null?void 0:n.length)===0)return;let a=ot.faceLabels.slice();if(e.score&&(a=pt(a,"[score]",100*e.score)),e.gender&&(a=pt(a,"[gender]",e.gender)),e.genderScore&&(a=pt(a,"[genderScore]",100*e.genderScore)),e.age&&(a=pt(a,"[age]",e.age)),e.distance&&(a=pt(a,"[distance]",100*e.distance)),e.real&&(a=pt(a,"[real]",100*e.real)),e.live&&(a=pt(a,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let p=e.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);p.length>3&&(p.length=3),a=pt(a,"[emotions]",p.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=pt(a,"[roll]",Ao(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=pt(a,"[yaw]",Ao(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=pt(a,"[pitch]",Ao(e.rotation.angle.pitch))),(c=(d=e.rotation)==null?void 0:d.gaze)!=null&&c.bearing&&(a=pt(a,"[gaze]",Ao(e.rotation.gaze.bearing))),Rn(t,a,e.box[0],e.box[1],ot)}function Kce(e,t){var a,n,r,s;if(((a=e.annotations)==null?void 0:a.leftEyeIris)&&((n=e.annotations)==null?void 0:n.leftEyeIris[0])){t.strokeStyle=ot.useDepth?"rgba(255, 200, 255, 0.3)":ot.color,t.beginPath();let i=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,o=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),ot.fillPolygons&&(t.fillStyle=ot.useDepth?"rgba(255, 255, 200, 0.3)":ot.color,t.fill())}if(((r=e.annotations)==null?void 0:r.rightEyeIris)&&((s=e.annotations)==null?void 0:s.rightEyeIris[0])){t.strokeStyle=ot.useDepth?"rgba(255, 200, 255, 0.3)":ot.color,t.beginPath();let i=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,o=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),ot.fillPolygons&&(t.fillStyle=ot.useDepth?"rgba(255, 255, 200, 0.3)":ot.color,t.fill())}}function Zce(e,t){var a;if(ot.drawGaze&&((a=e.rotation)==null?void 0:a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*Ao(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ao(e.rotation.angle.pitch)/90,s=new Path2D(` +`;var W3=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},V3=class{constructor(t,a,n){le(this,"uniform",{});le(this,"attribute",{});le(this,"gl");le(this,"id");le(this,"compile",(t,a)=>{let n=this.gl.createShader(a);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(K(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)||"unknown"}`),null)):(K("filter: could not create shader"),null)});this.gl=t;let r=this.compile(a,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){K("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){K(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),W3(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);W3(a,"uniform",this.uniform),W3(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function n9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=Cn(100,100),u={},p={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function d(A,y){if(!(A===l.width&&y===l.height)){if(l.width=A,l.height=y,!i){let b=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);i=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,i),c.bufferData(c.ARRAY_BUFFER,b,c.STATIC_DRAW),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}c.viewport(0,0,l.width,l.height),r=[null,null]}}function h(A,y){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let S=c.createTexture();return c.bindTexture(c.TEXTURE_2D,S),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,A,y,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,S,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:S}}function f(A){return r[A]=r[A]||h(l.width,l.height),r[A]}function m(A=0){if(!o)return;let y=null,b=null,w=!1;e===0?y=t:y=f(n).texture||null,e++,a&&!(A&p.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=f(n).fbo||null),c.bindTexture(c.TEXTURE_2D,y),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(A){if(u[A])return o=u[A],c.useProgram((o?o.id:null)||null),o;if(o=new V3(c,Y8,A),!o)return K("filter: could not get webgl program"),null;let y=Float32Array.BYTES_PER_ELEMENT,b=4*y;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*y),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*y),u[A]=o,o}let x={colorMatrix:A=>{let y=new Float32Array(A);y[4]/=255,y[9]/=255,y[14]/=255,y[19]/=255;let b=y[18]===1&&y[3]===0&&y[8]===0&&y[13]===0&&y[15]===0&&y[16]===0&&y[17]===0&&y[19]===0?Q8:J8,w=g(b);!w||(c.uniform1fv(w.uniform.m,y),m())},brightness:A=>{let y=(A||0)+1;x.colorMatrix([y,0,0,0,0,0,y,0,0,0,0,0,y,0,0,0,0,0,1,0])},saturation:A=>{let y=(A||0)*2/3+1,b=(y-1)*-.5;x.colorMatrix([y,b,b,0,0,b,y,b,0,0,b,b,y,0,0,0,0,0,1,0])},desaturate:()=>{x.saturation(-1)},contrast:A=>{let y=(A||0)+1,b=-128*(y-1);x.colorMatrix([y,0,0,0,b,0,y,0,0,b,0,0,y,0,b,0,0,0,1,0])},negative:()=>{x.contrast(-2)},hue:A=>{A=(A||0)/180*Math.PI;let y=Math.cos(A),b=Math.sin(A),w=.213,S=.715,C=.072;x.colorMatrix([w+y*(1-w)+b*-w,S+y*-S+b*-S,C+y*-C+b*(1-C),0,0,w+y*-w+b*.143,S+y*(1-S)+b*.14,C+y*-C+b*-.283,0,0,w+y*-w+b*-(1-w),S+y*-S+b*S,C+y*(1-C)+b*C,0,0,0,0,0,1,0])},desaturateLuminance:()=>{x.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{x.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{x.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{x.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{x.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{x.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{x.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{x.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:A=>{let y=new Float32Array(A),b=1/l.width,w=1/l.height,S=g(a9);!S||(c.uniform1fv(S.uniform.m,y),c.uniform2f(S.uniform.px,b,w),m())},detectEdges:()=>{x.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{x.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{x.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:A=>{let y=A||1;x.convolution.call(this,[0,-1*y,0,-1*y,1+4*y,-1*y,0,-1*y,0])},emboss:A=>{let y=A||1;x.convolution.call(this,[-2*y,-1*y,0,-1*y,1,1*y,0,1*y,2*y])},blur:A=>{let y=A/7/l.width,b=A/7/l.height,w=g(t9);!w||(c.uniform2f(w.uniform.px,0,b),m(p.INTERMEDIATE),c.uniform2f(w.uniform.px,y,0),m())},pixelate:A=>{let y=A/l.width,b=A/l.height,w=g(e9);!w||(c.uniform2f(w.uniform.size,y,b),m())}};this.add=function(A){let y=Array.prototype.slice.call(arguments,1),b=x[A];s.push({func:b,args:y})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(A){d(A.width,A.height),e=0,t||(t=c.createTexture()),c.bindTexture(c.TEXTURE_2D,t),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,A);for(let y=0;yp.data())),i=Math.max(s[0][0],s[1][0],s[2][0]),l=(i>1?255:1)/i,u;if(l>1){let p=[fe(a[0],n[0]),fe(a[1],n[1]),fe(a[2],n[2])],c=[fe(r[0],n[0]),fe(r[1],n[1]),fe(r[2],n[2])],d=[ae(p[0],l),ae(p[1],l),ae(p[2],l)],h=sa([d[0],d[1],d[2]],2);u=J(h,[1,t.shape[0]||0,t.shape[1]||0,3]),Y([...p,...c,...d])}else u=Gt(t,0);return Y([...a,...n,...r,a,t,e]),u}var Hh=3840,Jt=null,Qt=null,Au=null,xt,mn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function U3(){mn.inputSum=0,mn.cacheDiff=1,mn.sumMethod=0,mn.inputTensor=void 0}function Cn(e,t){let a;if(ne.browser)if(ne.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");a=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");a=document.createElement("canvas"),a.width=e,a.height=t}else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function jh(e,t){let a=t||Cn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function qh(e,t,a=!0){var d,h,f;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof pt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof ne.Canvas!="undefined"&&e instanceof ne.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof pt){let m=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)m=Gt(e,0);else if(e.shape[2]===4){let g=sp(e,[0,0,0],[-1,-1,3]);m=Gt(g,0),Y(g)}}else e.shape.length===4&&(e.shape[3]===3?m=wa(e):e.shape[3]===4&&(m=fh(e,[0,0,0,0],[-1,-1,-1,3])));if(m==null||m.shape.length!==4||m.shape[0]!==1||m.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(m.dtype==="int32"){let g=He(m,"float32");Y(m),m=g}return{tensor:m,canvas:t.filter.return?Qt:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:Jt};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&K("cannot determine input dimensions"),{tensor:null,canvas:Jt};let s=n,i=r;if(s>Hh&&(s=Hh,i=Math.trunc(s*r/n)),i>Hh&&(i=Hh,s=Math.trunc(i*n/r)),(((d=t.filter)==null?void 0:d.width)||0)>0?s=t.filter.width:(((h=t.filter)==null?void 0:h.height)||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?i=t.filter.height:(t.filter.width||0)>0&&(i=r*((t.filter.width||0)/n)),!s||!i)throw new Error("input error: cannot determine dimension");(!Jt||Jt.width!==s||Jt.height!==i)&&(Jt=Cn(s,i));let o=Jt.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?o.putImageData(e,0,0):t.filter.flip&&typeof o.translate!="undefined"?(o.translate(n,0),o.scale(-1,1),o.drawImage(e,0,0,n,r,0,0,Jt.width,Jt.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,Jt.width,Jt.height),(!Qt||Jt.width!==Qt.width||Jt.height!==Qt.height)&&(Qt=Cn(Jt.width,Jt.height)),t.filter.enabled&&ne.webgl.supported?(xt||(xt=ne.browser?new n9:null),ne.filter=!!xt,xt!=null&&xt.add?(xt.reset(),t.filter.brightness!==0&&xt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&xt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&xt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&xt.add("blur",t.filter.blur),t.filter.saturation!==0&&xt.add("saturation",t.filter.saturation),t.filter.hue!==0&&xt.add("hue",t.filter.hue),t.filter.negative&&xt.add("negative"),t.filter.sepia&&xt.add("sepia"),t.filter.vintage&&xt.add("brownie"),t.filter.sepia&&xt.add("sepia"),t.filter.kodachrome&&xt.add("kodachrome"),t.filter.technicolor&&xt.add("technicolor"),t.filter.polaroid&&xt.add("polaroid"),t.filter.pixelate!==0&&xt.add("pixelate",t.filter.pixelate),((f=xt.get())==null?void 0:f.length)>1?Qt=xt.apply(Jt):Qt=xt.draw(Jt)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,jh(Jt,Qt))):(jh(Jt,Qt),xt&&(xt=null),ne.filter=!!xt),!a)return{tensor:null,canvas:Qt};if(!Qt)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ne.browser&&br)l=br?br.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);l=Be(m,[e.height,e.width,u],"int32")}else if((!Au||Qt.width!==Au.width||Qt.height!==Au.height)&&(Au=Cn(Qt.width,Qt.height)),br&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=br.fromPixels(Qt):(Au=jh(Qt),l=br.fromPixels(Au));else{let x=jh(Qt).getContext("2d").getImageData(0,0,s,i);u=x.data.length/s/i;let A=new Uint8Array(x.data.buffer);l=Be(A,[s,i,u])}if(u===4){let m=sp(l,[0,0,0],[-1,-1,3]);Y(l),l=m}if(!l)throw new Error("input error: cannot create tensor");let p=He(l,"float32"),c=t.filter.equalization?await Gh(p):Gt(p,0);if(Y([l,p]),t.filter.autoBrightness){let m=pa(c),g=await m.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],Y(m)}return{tensor:c,canvas:t.filter.return?Qt:null}}async function r9(e,t){let a=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return a;if(!mn.inputTensor)mn.inputTensor=wa(t);else if(mn.inputTensor.shape[1]!==t.shape[1]||mn.inputTensor.shape[2]!==t.shape[2])Y(mn.inputTensor),mn.inputTensor=wa(t);else{let n={};n.diff=fe(t,mn.inputTensor),n.squared=ae(n.diff,n.diff),n.sum=tt(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;Y([mn.inputTensor,n.diff,n.squared,n.sum]),mn.inputTensor=wa(t),a=s<=(e.cacheSensitivity||0)}return a}async function s9(e,t,a){let n={};if(!t||!a||t.shape.length!==4||t.shape.length!==a.shape.length)return e.debug||K("invalid input tensor or tensor shapes do not match:",t.shape,a.shape),0;if(t.shape[0]!==1||a.shape[0]!==1||t.shape[3]!==3||a.shape[3]!==3)return e.debug||K("input tensors must be of shape [1, height, width, 3]:",t.shape,a.shape),0;n.input1=wa(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?ge.resizeBilinear(a,[t.shape[1],t.shape[2]]):wa(a),n.diff=fe(n.input1,n.input2),n.squared=ae(n.diff,n.diff),n.sum=tt(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return Y([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var Ap=class{constructor(){le(this,"browser");le(this,"node");le(this,"worker");le(this,"platform","");le(this,"agent","");le(this,"backends",[]);le(this,"initial");le(this,"filter");le(this,"tfjs");le(this,"offscreen");le(this,"perfadd",!1);le(this,"tensorflow",{version:void 0,gpu:void 0});le(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});le(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});le(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});le(this,"cpu",{model:void 0,flags:[]});le(this,"kernels",[]);le(this,"Canvas");le(this,"Image");le(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:xp["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let a=t[0].match(/\(([^()]+)\)/g);this.platform=a!=null&&a[0]?a[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(kt().registryFactory);try{this.tensorflow={version:er().binding?er().binding.TF_Version:void 0,gpu:er().binding?er().binding.isUsingGpuDevice():void 0}}catch(n){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Cn(100,100),a=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof a!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&a&&(this.webgl.version=a.getParameter(a.VERSION),this.webgl.vendor=a.getParameter(a.VENDOR),this.webgl.renderer=a.getParameter(a.RENDERER),this.webgl.shader=a.getParameter(a.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let n=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(n==null?void 0:n.requestAdapterInfo())}}catch(n){this.webgpu.supported=!1}try{this.kernels=Kn(ia()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},ne=new Ap;var Kh=class{constructor(){le(this,"config");le(this,"element");le(this,"stream");le(this,"devices",[]);le(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(a=>a.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});le(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let r=document.getElementById(t.element);if(r&&r instanceof HTMLVideoElement)this.element=r;else{this.config.debug&&K("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&K("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let a={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(a.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&K("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&K("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&K("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(r){K("webcam",r);return}if(!this.stream){this.config.debug&&K("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(r=>{this.element?this.element.onloadeddata=()=>r(!0):r(!1)}),await this.element.play(),this.config.debug&&K("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});le(this,"pause",()=>{this.element&&this.element.pause()});le(this,"play",async()=>{this.element&&await this.element.play()});le(this,"stop",()=>{this.config.debug&&K("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var G3={};cr(G3,{age:()=>vpe,"anti-spoofing":()=>ece,antispoof:()=>upe,blazeface:()=>dpe,"blazeface-back":()=>wpe,"blazeface-front":()=>kpe,"blazepose-detector":()=>Qpe,"blazepose-detector2d":()=>Ipe,"blazepose-detector3d":()=>Spe,"blazepose-full":()=>Tpe,"blazepose-heavy":()=>Cpe,"blazepose-lite":()=>Npe,centernet:()=>ppe,default:()=>hce,efficientpose:()=>Epe,"efficientpose-i-lite":()=>tce,"efficientpose-ii-lite":()=>ace,"efficientpose-iv":()=>nce,emotion:()=>cpe,faceboxes:()=>Rpe,facemesh:()=>hpe,"facemesh-attention":()=>$pe,"facemesh-attention-alt":()=>Mpe,"facemesh-detection-full":()=>_pe,"facemesh-detection-short":()=>Ppe,"facemesh-orig":()=>Fpe,faceres:()=>fpe,"faceres-deep":()=>Ope,gear:()=>Dpe,gender:()=>Lpe,"gender-ssrnet-imdb":()=>zpe,handdetect:()=>Bpe,"handlandmark-full":()=>mpe,"handlandmark-lite":()=>Wpe,"handlandmark-sparse":()=>Vpe,handskeleton:()=>Upe,handtrack:()=>gpe,"insightface-efficientnet-b0":()=>rce,"insightface-ghostnet-strides1":()=>sce,"insightface-ghostnet-strides2":()=>ice,"insightface-mobilenet-emore":()=>oce,"insightface-mobilenet-swish":()=>lce,iris:()=>xpe,liveness:()=>Ape,meet:()=>Gpe,mobileface:()=>Hpe,mobilefacenet:()=>jpe,models:()=>ype,"movenet-lightning":()=>bpe,"movenet-multipose":()=>qpe,"movenet-thunder":()=>Xpe,nanodet:()=>Kpe,"nanodet-e":()=>uce,"nanodet-g":()=>dce,"nanodet-m":()=>pce,"nanodet-t":()=>cce,posenet:()=>Zpe,rvm:()=>Ype,selfie:()=>Jpe});var upe=853098,dpe=538928,ppe=4030290,cpe=820516,hpe=1477958,fpe=6978814,mpe=5431368,gpe=2964837,xpe=2599092,Ape=592976,ype=0,bpe=4650216,vpe=161240,wpe=538928,kpe=402048,Ipe=7499400,Spe=5928856,Tpe=6338290,Cpe=27501554,Npe=2725490,Epe=5651240,Rpe=2013002,Mpe=2387598,$pe=2382414,_pe=1026192,Ppe=201268,Fpe=2955780,Ope=13957620,Dpe=1498916,zpe=161236,Lpe=201808,Bpe=3515612,Wpe=2023432,Vpe=5286322,Upe=5502280,Gpe=372228,Hpe=2183192,jpe=5171976,qpe=9448838,Xpe=12477112,Kpe=7574558,Zpe=5032780,Ype=3739355,Jpe=212886,Qpe=5928856,ece=853098,tce=2269064,ace=5651240,nce=25643252,rce=13013224,sce=8093408,ice=8049584,oce=6938536,lce=12168584,uce=12319156,dce=7574558,pce=1887474,cce=5294216,hce={antispoof:upe,blazeface:dpe,centernet:ppe,emotion:cpe,facemesh:hpe,faceres:fpe,"handlandmark-full":mpe,handtrack:gpe,iris:xpe,liveness:Ape,models:ype,"movenet-lightning":bpe,age:vpe,"blazeface-back":wpe,"blazeface-front":kpe,"blazepose-detector2d":Ipe,"blazepose-detector3d":Spe,"blazepose-full":Tpe,"blazepose-heavy":Cpe,"blazepose-lite":Npe,efficientpose:Epe,faceboxes:Rpe,"facemesh-attention-alt":Mpe,"facemesh-attention":$pe,"facemesh-detection-full":_pe,"facemesh-detection-short":Ppe,"facemesh-orig":Fpe,"faceres-deep":Ope,gear:Dpe,"gender-ssrnet-imdb":zpe,gender:Lpe,handdetect:Bpe,"handlandmark-lite":Wpe,"handlandmark-sparse":Vpe,handskeleton:Upe,meet:Gpe,mobileface:Hpe,mobilefacenet:jpe,"movenet-multipose":qpe,"movenet-thunder":Xpe,nanodet:Kpe,posenet:Zpe,rvm:Ype,selfie:Jpe,"blazepose-detector":Qpe,"anti-spoofing":ece,"efficientpose-i-lite":tce,"efficientpose-ii-lite":ace,"efficientpose-iv":nce,"insightface-efficientnet-b0":rce,"insightface-ghostnet-strides1":sce,"insightface-ghostnet-strides2":ice,"insightface-mobilenet-emore":oce,"insightface-mobilenet-swish":lce,"nanodet-e":uce,"nanodet-g":dce,"nanodet-m":pce,"nanodet-t":cce};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ha={};async function fce(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function i9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function Ee(e){var u,p,c,d;let t=Z8(Ea.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let a=t.includes("/")?t.split("/"):t.split("\\"),n=a[a.length-1].replace(".json",""),r="indexeddb://"+n;ha[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:G3[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Hn.listModels():{}}catch(h){Ea.cacheSupported=!1}ha[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ha[n].url=ha[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,f)=>fce(h,f)},o=new op(ha[n].url,i),l=!1;try{o.findIOHandler(),Ea.debug&&K("model load handler:",o.handler)}catch(h){K("error finding model i/o handler:",t,h)}try{let h=await((u=o.handler)==null?void 0:u.load())||null;ha[n].sizeFromManifest=((p=h==null?void 0:h.weightData)==null?void 0:p.byteLength)||0,h?o.loadSync(h):o=await t3(ha[n].inCache?r:t,i),ha[n].sizeLoadedWeights=((d=(c=o.artifacts)==null?void 0:c.weightData)==null?void 0:d.byteLength)||0,Ea.verbose&&K("load:",{model:n,url:o.modelUrl,bytes:ha[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ha[n].inCache)try{let h=await o.save(r);Ea.debug&&K("model saved:",r,h)}catch(h){K("error saving model:",t,h)}return o}var H3="3.0.0";var vt={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function xce(){let e=vt.gl;!e||(vt.extensions=e.getSupportedExtensions())}function o9(e){var t;if(e.config.backend==="humangl"&&(vt.name in kt().registry&&!((t=vt==null?void 0:vt.gl)!=null&&t.getParameter(vt.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!i2(vt.name))){try{vt.canvas=Cn(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(vt.gl=vt.canvas.getContext("webgl2",vt.webGLattr),!vt.gl){K("humangl error: cannot get webgl context");return}if(!vt.gl.getParameter(vt.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}vt.canvas&&(vt.canvas.addEventListener("webglcontextlost",s=>{throw K("humangl error:",s.type),K("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),vt.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),vt.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{$h(2,vt.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new sl(vt.gl);fo(vt.name,()=>new hu(r),vt.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Kn("webgl").forEach(s=>{let i={...s,backendName:vt.name};fn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{W().flagRegistry.WEBGL_VERSION&&W().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}xce();let a=er(),n=typeof a.gpgpu!="undefined"?a.getGPGPUContext().gl:null;n?e.config.debug&&K("humangl backend registered:",{webgl:n.getParameter(n.VERSION),renderer:n.getParameter(n.RENDERER)}):K("humangl error: no current gl context:",n,vt.gl)}}var ze={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function l9(){ze.tf255=Fe(255,"float32"),ze.tf1=Fe(1,"float32"),ze.tf2=Fe(2,"float32"),ze.tf05=Fe(.5,"float32"),ze.tf127=Fe(127.5,"float32"),ze.rgb=Ht([.2989,.587,.114],"float32")}async function bce(){return await ne.updateBackend(),ne.browser?ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu":"tensorflow"}function vce(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:ia(),kernelFunc:n=>$e(()=>fe(n.inputs.a,ae(me(n.inputs.a,n.inputs.b),n.inputs.b)))};fn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:ia(),kernelFunc:n=>$e(()=>be(ae(Yd(n.inputs.a,n.inputs.b),n.inputs.b),ru(n.inputs.a,n.inputs.b)))};fn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:ia(),kernelFunc:n=>$e(()=>{let r=ia();Xd("cpu");let s=ge.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Xd(r),s})};fn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var u9={};async function yp(e,t=!1){var a;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await bce()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&ia()!==e.config.backend){let n=te();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),ne.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&K(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ne.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")K("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let s=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",s),!s)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let i="requestAdapterInfo"in s?await s.requestAdapterInfo():void 0;K("webgpu adapter info:",i)}}let r=Object.keys(kt().registryFactory);if(e.config.backend==="humangl"&&!r.includes("humangl")&&(o9(e),r=Object.keys(kt().registryFactory)),e.config.debug&&K("available backends:",r),r.includes(e.config.backend)||(K(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ne.node?"tensorflow":"webgl",e.config.debug&&K(`override: setting backend ${e.config.backend}`)),e.config.debug&&K("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(W().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&W().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof zh!="undefined")zh(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let s=!1,i=!1;try{s=await W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await W().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${i?"simd":"no simd"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!i&&K("warning: wasm simd support is not enabled")}catch(o){K("wasm detection failed")}}try{await Xd(e.config.backend),await Kd()}catch(s){return K("error: cannot set backend:",e.config.backend,s),!1}e.config.debug&&(u9=JSON.parse(JSON.stringify(W().flags)))}if((ia()==="humangl"||ia()==="webgl")&&(W().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&W().set("WEBGL_USE_SHAPES_UNIFORMS",!0),W().flagRegistry.WEBGL_EXP_CONV&&W().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),W().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),ia(),e.config.debug){let r=W().flags,s={};for(let i of Object.keys(r))u9[i]!==r[i]&&(s[i]=r[i]);e.config.debug&&Object.keys(s).length>0&&K("backend:",ia(),"flags:",s)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[r,s]of Object.entries(e.config.flags))W().set(r,s)}r2(),l9(),e.performance.initBackend=Math.trunc(te()-n),e.config.backend=ia(),await ne.updateBackend(),vce(e.config),ne.initial=!1}return!0}function Zh(e,t){for(let a of e){let n={kernelName:a,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&K("kernelFunc",a,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};fn(n)}ne.kernels=Kn(ia()).map(a=>a.kernelName.toLowerCase())}var a0={};cr(a0,{all:()=>Jce,body:()=>Jh,canvas:()=>Yce,face:()=>Yh,gesture:()=>t0,hand:()=>Qh,init:()=>J3,object:()=>e0,options:()=>$t,person:()=>Zce});var gn=e=>{if(!e)K("draw error: invalid canvas");else if(!e.getContext)K("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)K("draw error: cannot get canvas context");else return t}return null},ko=e=>Math.round(e*180/Math.PI),ct=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),Io=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let a=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${a[0]}, ${a[1]}, ${a[2]}, ${t.alpha})`};function Nn(e,t,a,n,r){let s=t.replace(/\[.*\]/g,"").split(` +`).map(o=>o.trim()),i=Math.max(0,a);for(let o=s.length-1;o>=0;o--){let l=o*r.lineHeight+n;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[o],i+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[o],i+4,l+15)}}function Tr(e,t,a,n,r){e.fillStyle=Io(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function rr(e,t,a,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let i=(t+t+n)/2,o=(a+a+r)/2;e.ellipse(i,o,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,a),e.lineTo(t+n-s.roundRect,a),e.quadraticCurveTo(t+n,a,t+n,a+s.roundRect),e.lineTo(t+n,a+r-s.roundRect),e.quadraticCurveTo(t+n,a+r,t+n-s.roundRect,a+r),e.lineTo(t+s.roundRect,a+r),e.quadraticCurveTo(t,a+r,t,a+r-s.roundRect),e.lineTo(t,a+s.roundRect),e.quadraticCurveTo(t,a,t+s.roundRect,a),e.closePath();e.stroke()}function j3(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=Io(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function p9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){j3(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nbp[e]),M2e=kce.map(e=>bp[e]),$2e=Ice.map(e=>bp[e]);function ls(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Sce=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Cce=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Nce=[[474,475],[475,476],[476,477],[477,474]],Ece=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Rce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Mce=[[469,470],[470,471],[471,472],[472,469]],$ce=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],_2e={lips:ls(Sce),leftEye:ls(Tce),leftEyebrow:ls(Cce),leftIris:ls(Nce),rightEye:ls(Ece),rightEyebrow:ls(Rce),rightIris:ls(Mce),faceOval:ls($ce)};var _ce=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Pce=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Fce=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Oce=[[474,475],[475,476],[476,477],[477,474]],Dce=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],zce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Lce=[[469,470],[470,471],[471,472],[472,469]],Bce=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function us(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Wce={lips:us(_ce),leftEye:us(Pce),leftEyebrow:us(Fce),leftIris:us(Oce),rightEye:us(Dce),rightEyebrow:us(zce),rightIris:us(Lce),faceOval:us(Bce)},Vce=Object.entries(Wce).map(([e,t])=>t.map(a=>[a,e])).flat(),P2e=new Map(Vce),vp=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Co=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],No=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var lt;function Uce(e,t){var n,r,s,i,o,l,u,p,c;if(!lt.drawLabels||((n=lt.faceLabels)==null?void 0:n.length)===0)return;let a=lt.faceLabels.slice();if(e.score&&(a=ct(a,"[score]",100*e.score)),e.gender&&(a=ct(a,"[gender]",e.gender)),e.genderScore&&(a=ct(a,"[genderScore]",100*e.genderScore)),e.age&&(a=ct(a,"[age]",e.age)),e.distance&&(a=ct(a,"[distance]",100*e.distance)),e.real&&(a=ct(a,"[real]",100*e.real)),e.live&&(a=ct(a,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let d=e.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);d.length>3&&(d.length=3),a=ct(a,"[emotions]",d.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=ct(a,"[roll]",ko(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ct(a,"[yaw]",ko(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ct(a,"[pitch]",ko(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ct(a,"[gaze]",ko(e.rotation.gaze.bearing))),Nn(t,a,e.box[0],e.box[1],lt)}function Gce(e,t){var a,n,r,s;if(((a=e.annotations)==null?void 0:a.leftEyeIris)&&((n=e.annotations)==null?void 0:n.leftEyeIris[0])){t.strokeStyle=lt.useDepth?"rgba(255, 200, 255, 0.3)":lt.color,t.beginPath();let i=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,o=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),lt.fillPolygons&&(t.fillStyle=lt.useDepth?"rgba(255, 255, 200, 0.3)":lt.color,t.fill())}if(((r=e.annotations)==null?void 0:r.rightEyeIris)&&((s=e.annotations)==null?void 0:s.rightEyeIris[0])){t.strokeStyle=lt.useDepth?"rgba(255, 200, 255, 0.3)":lt.color,t.beginPath();let i=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,o=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),lt.fillPolygons&&(t.fillStyle=lt.useDepth?"rgba(255, 255, 200, 0.3)":lt.color,t.fill())}}function Hce(e,t){var a;if(lt.drawGaze&&((a=e.rotation)==null?void 0:a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*ko(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*ko(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, @@ -7185,7 +7396,7 @@ return a / b;`,yZ=` ${e.box[0]} ${r}, ${e.box[0]+e.box[2]} ${r}, ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(i),t.stroke(s)}}function Yce(e,t){var a;if(ot.drawGaze&&((a=e.rotation)==null?void 0:a.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let n=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];ng(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[n[0],n[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];ng(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Jce(e,t){if(ot.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);ag(t,n,ot)}Kce(e,t)}}function Qce(e,t){if(ot.drawPoints&&e.mesh.length>=468)for(let a=0;a0&&(Qce(r,n),Jce(r,n),Zce(r,n),Yce(r,n))}}function a0(e,t,a){var s,i;let n=Tt($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=pt(l,"[score]",100*t[o].score),Rn(r,l,t[o].box[0],t[o].box[1],n)}if(n.drawPoints&&t[o].keypoints)for(let l=0;l0&&t[o].keypoints){r.font=n.font;for(let l of t[o].keypoints){if(!l.score||l.score===0)continue;let u=n.bodyPartLabels.slice();u=pt(u,"[label]",l.part),u=pt(u,"[score]",100*l.score),Rn(r,u,l.position[0],l.position[1],n)}}if(n.drawPolygons&&t[o].keypoints&&t[o].annotations)for(let l of Object.values(t[o].annotations))for(let u of l)V9(r,u,n)}}}function n0(e,t,a){var s,i;let n=Tt($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let o of t){if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,sr(r,o.box[0],o.box[1],o.box[2],o.box[3],n),n.drawLabels&&((s=n.handLabels)==null?void 0:s.length)>0){let l=n.handLabels.slice();l=pt(l,"[label]",o.label),l=pt(l,"[score]",100*o.score),Rn(r,l,o.box[0],o.box[1],n)}r.stroke()}if(n.drawPoints&&o.keypoints&&o.keypoints.length>0)for(let l of o.keypoints)r.fillStyle=xo(l[2],n),Nr(r,l[0],l[1],0,n);if(n.drawLabels&&o.annotations&&((i=n.fingerLabels)==null?void 0:i.length)>0)for(let[l,u]of Object.entries(o.annotations)){let d=n.fingerLabels.slice();d=pt(d,"[label]",l),Rn(r,d,u[u.length-1][0],u[u.length-1][1],n)}if(n.drawPolygons&&o.annotations){let l=u=>{if(!(!u||u.length===0||!u[0]))for(let d=0;d0?d-1:0][0],u[d>0?d-1:0][1]),r.lineTo(u[d][0],u[d][1]),r.stroke()}};r.lineWidth=n.lineWidth,l(o.annotations.index),l(o.annotations.middle),l(o.annotations.ring),l(o.annotations.pinky),l(o.annotations.thumb)}}}}function r0(e,t,a){var s;let n=Tt($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let i of t)if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,sr(r,i.box[0],i.box[1],i.box[2],i.box[3],n),n.drawLabels&&((s=n.objectLabels)==null?void 0:s.length)>0){let o=n.objectLabels.slice();o=pt(o,"[label]",i.label),o=pt(o,"[score]",100*i.score),Rn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function s0(e,t,a){var r;let n=Tt($t,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=gn(e);if(!s)return;s.font=n.font,s.fillStyle=n.color;let i=1;for(let o=0;o1&&u[1].length>0){let d=l[1]>0?`#${l[1]}`:"",c=n.gestureLabels.slice();c=pt(c,"[where]",l[0]),c=pt(c,"[who]",d),c=pt(c,"[what]",u[1]),Rn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var Ns={face:`face + `);t.stroke(i),t.stroke(s)}}function jce(e,t){var a;if(lt.drawGaze&&((a=e.rotation)==null?void 0:a.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let n=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];q3(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[n[0],n[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];q3(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function qce(e,t){if(lt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);j3(t,n,lt)}Gce(e,t)}}function Xce(e,t){if(lt.drawPoints&&e.mesh.length>=468)for(let a=0;a0&&(Xce(r,n),qce(r,n),Hce(r,n),jce(r,n))}}function Jh(e,t,a){var s,i;let n=Ct($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=ct(l,"[score]",100*t[o].score),Nn(r,l,t[o].box[0],t[o].box[1],n)}if(n.drawPoints&&t[o].keypoints)for(let l=0;l0&&t[o].keypoints){r.font=n.font;for(let l of t[o].keypoints){if(!l.score||l.score===0)continue;let u=n.bodyPartLabels.slice();u=ct(u,"[label]",l.part),u=ct(u,"[score]",100*l.score),Nn(r,u,l.position[0],l.position[1],n)}}if(n.drawPolygons&&t[o].keypoints&&t[o].annotations)for(let l of Object.values(t[o].annotations))for(let u of l)p9(r,u,n)}}}function Qh(e,t,a){var s,i;let n=Ct($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let o of t){if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,rr(r,o.box[0],o.box[1],o.box[2],o.box[3],n),n.drawLabels&&((s=n.handLabels)==null?void 0:s.length)>0){let l=n.handLabels.slice();l=ct(l,"[label]",o.label),l=ct(l,"[score]",100*o.score),Nn(r,l,o.box[0],o.box[1],n)}r.stroke()}if(n.drawPoints&&o.keypoints&&o.keypoints.length>0)for(let l of o.keypoints)r.fillStyle=Io(l[2],n),Tr(r,l[0],l[1],0,n);if(n.drawLabels&&o.annotations&&((i=n.fingerLabels)==null?void 0:i.length)>0)for(let[l,u]of Object.entries(o.annotations)){let p=n.fingerLabels.slice();p=ct(p,"[label]",l),Nn(r,p,u[u.length-1][0],u[u.length-1][1],n)}if(n.drawPolygons&&o.annotations){let l=u=>{if(!(!u||u.length===0||!u[0]))for(let p=0;p0?p-1:0][0],u[p>0?p-1:0][1]),r.lineTo(u[p][0],u[p][1]),r.stroke()}};r.lineWidth=n.lineWidth,l(o.annotations.index),l(o.annotations.middle),l(o.annotations.ring),l(o.annotations.pinky),l(o.annotations.thumb)}}}}function e0(e,t,a){var s;let n=Ct($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let i of t)if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,rr(r,i.box[0],i.box[1],i.box[2],i.box[3],n),n.drawLabels&&((s=n.objectLabels)==null?void 0:s.length)>0){let o=n.objectLabels.slice();o=ct(o,"[label]",i.label),o=ct(o,"[score]",100*i.score),Nn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function t0(e,t,a){var r;let n=Ct($t,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=gn(e);if(!s)return;s.font=n.font,s.fillStyle=n.color;let i=1;for(let o=0;o1&&u[1].length>0){let p=l[1]>0?`#${l[1]}`:"",c=n.gestureLabels.slice();c=ct(c,"[where]",l[0]),c=ct(c,"[who]",p),c=ct(c,"[what]",u[1]),Nn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var ds={face:`face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -7194,7 +7405,7 @@ return a / b;`,yZ=` live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var og=0;function the(e,t,a){let n=Tt($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let s=0;sdg,kpt:()=>ug});var ug=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],dg={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var yn,Io=224,j9,rhe=5,l0=[8,16,32,32,32];function she(){let e=[],t=0;for(;ta.x)),y:Ut(e.map(a=>a.y))}}async function H9(e){if(ne.initial&&(yn=null),!yn&&e.body.detector&&e.body.detector.modelPath){yn=await Ce(e.body.detector.modelPath);let t=yn!=null&&yn.executor?Object.values(yn.modelSignature.inputs):void 0;Io=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&yn&&K("cached model:",yn.modelUrl);return she(),yn}var U9=[5,5];function ihe(e,t){return Ee(()=>{let a=ka(e,12,1),n=$e(a[0]),r=$e(a[1]),s=$e(a[2]),i=$e(a[3]);n=xe(fe(n,Io),t.x),r=xe(fe(r,Io),t.y),s=ae(fe(s,Io),U9[0]),i=ae(fe(i,Io),U9[1]);let o=he(n,fe(s,2)),l=he(r,fe(i,2)),u=xe(o,s),d=xe(l,i);return sa([o,l,u,d],1)})}async function ohe(e,t,a,n){var u,d;let r=[],s={};s.boxes=ihe(e,j9),s.scores=Da(t),s.nms=await me.nonMaxSuppressionAsync(s.boxes,s.scores,1,((u=a.body.detector)==null?void 0:u.minConfidence)||.1,((d=a.body.detector)==null?void 0:d.iouThreshold)||.1);let i=await s.nms.data(),o=await s.scores.data(),l=await s.boxes.array();for(let c of Array.from(i)){let p=o[c],h=l[c],f=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],m={score:p,boxRaw:h,box:f};r.push(m)}return Object.keys(s).forEach(c=>Y(s[c])),r}async function q9(e,t,a){let n={};n.res=yn==null?void 0:yn.execute(e,["Identity"]),n.logitsRaw=_e(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=_e(n.res,[0,0,1],[1,-1,-1]),n.logits=$e(n.logitsRaw),n.boxes=$e(n.boxesRaw);let r=await ohe(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>Y(n[s])),r}function Er(e,t=[1,1]){let a=[e.map(o=>o[0]),e.map(o=>o[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function X9(e,t=[1,1]){let a=[e.map(u=>u[0]),e.map(u=>u[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],i=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function u0(e,t){let a=[e[2]*t,e[3]*t];return[e[0]-(a[0]-e[2])/2,e[1]-(a[1]-e[3])/2,a[0],a[1]]}var Ba,cg=256,pg=Number.MAX_SAFE_INTEGER,lhe={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},p0=[],Es=[[0,0],[0,0],[0,0],[0,0]],K9=0,Z9=e=>1-1/(1+Math.exp(e)),J9=e=>H9(e);async function Q9(e){if(ne.initial&&(Ba=null),Ba)e.debug&&K("cached model:",Ba.modelUrl);else{Ba=await Ce(e.body.modelPath);let t=Ba!=null&&Ba.executor?Object.values(Ba.modelSignature.inputs):void 0;cg=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ba}function Y9(e,t,a){var s,i;let n={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((i=e==null?void 0:e.shape)!=null&&i[2]))return e;let r;if(a&&(n.cropped=me.cropAndResize(e,[a],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let o=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Es=[[0,0],o,l,[0,0]],n.pad=rr(n.cropped||e,Es),n.resize=me.resizeBilinear(n.pad,[t,t]),r=fe(n.resize,Oe.tf255)}else e.shape[1]!==t?(n.resize=me.resizeBilinear(n.cropped||e,[t,t]),r=fe(n.resize,Oe.tf255)):r=fe(n.cropped||e,Oe.tf255);return Object.keys(n).forEach(o=>Y(n[o])),r}function uhe(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+Es[2][0]+Es[2][1])/t[0]-Es[2][0]),Math.trunc(n.position[1]*(t[1]+Es[1][0]+Es[1][1])/t[1]-Es[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(a){let n=a[2]-a[0],r=a[3]-a[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+a[1],s.positionRaw[1]/n+a[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function dhe(e){let t=e.find(o=>o.part==="leftPalm"),a=e.find(o=>o.part==="leftWrist"),n=e.find(o=>o.part==="leftIndex");t.position[2]=((a.position[2]||0)+(n.position[2]||0))/2;let r=e.find(o=>o.part==="rightPalm"),s=e.find(o=>o.part==="rightWrist"),i=e.find(o=>o.part==="rightIndex");r.position[2]=((s.position[2]||0)+(i.position[2]||0))/2}async function phe(e,t,a){if(!(Ba!=null&&Ba.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ba==null?void 0:Ba.execute(e,lhe.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(f=>Y(n[f]));let o=[],l=5;for(let f=0;ff.position),c=Er(d,[a[0],a[1]]),p={};for(let[f,m]of Object.entries(dg)){let g=[];for(let y=0;yb.part===m[y]),x=u.find(b=>b.part===m[y+1]);A&&x&&g.push([A.position,x.position])}p[f]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:p}}async function hg(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>te()-K9,r=pg<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&p0!==null)pg++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=Y9(e,224);l=await q9(u,t,a),Y(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uY(n[u])),r}async function gg(e,t){if(!(Wa!=null&&Wa.executor))return[];let a=(t.object.skipTime||0)>te()-tw,n=mg<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&fg.length>0?(mg++,fg):(mg=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=me.resizeBilinear(e,[So,So]),o=t.object.enabled?Wa==null?void 0:Wa.execute(i,["tower_0/detections"]):null;tw=te(),Y(i);let l=await che(o,s,t);fg=l,r(l)}))}var c0={};hr(c0,{connected:()=>Ag,kpt:()=>yg});var yg=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Ag={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ct,rw=0,Ra={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},xg=Number.MAX_SAFE_INTEGER;async function sw(e){return ne.initial&&(Ct=null),Ct?e.debug&&K("cached model:",Ct.modelUrl):Ct=await Ce(e.body.modelPath),Ct}async function hhe(e,t){let[a,n]=e.shape,r=J(e,[n*a]),s=pa(r,0),i=(await s.data())[0];if(i>t){let o=ar(r,0),l=Xl(o,a),u=(await l.data())[0],d=fe(o,a),c=(await d.data())[0];return Y([r,s,o,l,d]),[u,c,i]}return Y([r,s]),[0,0,i]}async function bg(e,t){if(!(Ct!=null&&Ct.executor)||!(Ct!=null&&Ct.inputs[0].shape))return[];let a=(t.body.skipTime||0)>te()-rw,n=xg<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ra.keypoints).length>0?(xg++,[Ra]):(xg=0,new Promise(async r=>{let s=Ee(()=>{var f,m;let c=me.resizeBilinear(e,[((f=Ct==null?void 0:Ct.inputs[0].shape)==null?void 0:f[2])||0,((m=Ct==null?void 0:Ct.inputs[0].shape)==null?void 0:m[1])||0],!1),p=ae(c,Oe.tf2);return he(p,Oe.tf1)}),i;if(t.body.enabled&&(i=Ct==null?void 0:Ct.execute(s)),rw=te(),Y(s),i){Ra.keypoints.length=0;let c=$e(i);Y(i);let p=Ta(c,2);Y(c);for(let h=0;h(t.body.minConfidence||0)&&Ra.keypoints.push({score:Math.round(100*g)/100,part:yg[h],positionRaw:[f/Ct.inputs[0].shape[2],m/Ct.inputs[0].shape[1]],position:[Math.round(e.shape[2]*f/Ct.inputs[0].shape[2]),Math.round(e.shape[1]*m/Ct.inputs[0].shape[1])]})}p.forEach(h=>Y(h))}Ra.score=Ra.keypoints.reduce((c,p)=>p.score>c?p.score:c,0);let o=Ra.keypoints.map(c=>c.position[0]),l=Ra.keypoints.map(c=>c.position[1]);Ra.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ra.keypoints.map(c=>c.positionRaw[0]),d=Ra.keypoints.map(c=>c.positionRaw[1]);Ra.boxRaw=[Math.min(...u),Math.min(...d),Math.max(...u)-Math.min(...u),Math.max(...d)-Math.min(...d)];for(let[c,p]of Object.entries(Ag)){let h=[];for(let f=0;fy.part===p[f]),g=Ra.keypoints.find(y=>y.part===p[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}Ra.annotations[c]=h}r([Ra])}))}var cu=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],h0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],f0=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],m0=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],uw=(e,t)=>{let a=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:a,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},vg=(e,t,a)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],i=me.cropAndResize(t,[s],[0],a),o=fe(i,Oe.tf255);return Y(i),o},g0=(e,t)=>{let a=h0(e),n=cu(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[a[0]-r[0],a[1]-r[1]],endPoint:[a[0]+r[0],a[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},y0=e=>{let t=h0(e),a=cu(e),n=Math.max(...a)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},dw=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...a)],endPoint:[Math.max(...t),Math.max(...a)],landmarks:e}},wg=[[1,0,0],[0,1,0],[0,0,1]],fhe=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),mhe=(e,t)=>fhe(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var ow=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],To=(e,t)=>{let a=0;for(let n=0;n{let a=[];for(let n=0;n{let a=[],n=e.length;for(let r=0;r{let a=Math.cos(e),n=Math.sin(e),r=[[a,-n,0],[n,a,0],[0,0,1]],s=ow(t[0],t[1]),i=lw(s,r),o=ow(-t[0],-t[1]);return lw(i,o)},yhe=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-To(t[0],a),-To(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},Ahe=(e,t)=>[To(e,t[0]),To(e,t[1])];function cw(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},a=[];for(let n=0;n[s[0]/r*(h[0]-r/2),s[1]/r*(h[1]-r/2),h[2]||0]),o=a&&a!==0&&Math.abs(a)>.2,l=o?pw(a,[0,0]):wg,u=o?i.map(h=>[...Ahe(h,l),h[2]]):i,d=o?yhe(n):wg,c=h0(t),p=[To(c,d[0]),To(c,d[1])];return u.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2]||0)])}function fw(e,t,a,n){let r=t.landmarks.length>=rg.count?rg.symmetryLine:bo.symmetryLine,s=0,i=wg,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=mhe(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=h0(t),d=[u[0]/a.shape[2],u[1]/a.shape[1]],c=me.rotateWithOffset(a,s,0,[d[0],d[1]]);i=pw(-s,u),o=vg(t,c,[n,n]),Y(c)}else o=vg(t,a,[n,n]);else o=vg(t,a,[n,n]);return[s,i,o]}var xhe=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...a)+(Math.max(...a)-Math.min(...a))/2]},mw=(e,t)=>{let a=xhe(e),n=cu(t);return{startPoint:[a[0]-n[0]/2,a[1]-n[1]/2],endPoint:[a[0]+n[0]/2,a[1]+n[1]/2]}};var gw=6,bhe=1.4,zn,Ig=null,Rs=0,hu=null,fu=()=>Rs;async function yw(e){var t;return ne.initial&&(zn=null),zn?e.debug&&K("cached model:",zn.modelUrl):zn=await Ce((t=e.face.detector)==null?void 0:t.modelPath),Rs=zn.executor&&zn.inputs[0].shape?zn.inputs[0].shape[2]:256,hu=Fe(Rs,"int32"),Ig=Kn(cw(Rs)),zn}function vhe(e){if(!Ig||!hu)return pn([0,0]);let t={};t.boxStarts=_e(e,[0,1],[-1,2]),t.centers=xe(t.boxStarts,Ig),t.boxSizes=_e(e,[0,3],[-1,2]),t.boxSizesNormalized=fe(t.boxSizes,hu),t.centersNormalized=fe(t.centers,hu),t.halfBoxSize=fe(t.boxSizesNormalized,Oe.tf2),t.starts=he(t.centersNormalized,t.halfBoxSize),t.ends=xe(t.centersNormalized,t.halfBoxSize),t.startNormalized=ae(t.starts,hu),t.endNormalized=ae(t.ends,hu);let a=ql([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>Y(t[n])),a}async function Aw(e,t){var o,l,u,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=me.resizeBilinear(e,[Rs,Rs]),a.div=fe(a.resized,Oe.tf127),a.normalized=he(a.div,Oe.tf05);let n=zn==null?void 0:zn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let c=n.sort((p,h)=>p.size-h.size);a.concat384=at([c[0],c[2]],2),a.concat512=at([c[1],c[3]],2),a.concat=at([a.concat512,a.concat384],1),a.batch=$e(a.concat,[0])}else Array.isArray(n)?a.batch=$e(n[0]):a.batch=$e(n);Y(n),a.boxes=vhe(a.batch),a.logits=_e(a.batch,[0,0],[-1,1]),a.sigmoid=Da(a.logits),a.scores=$e(a.sigmoid),a.nms=await me.nonMaxSuppressionAsync(a.boxes,a.scores,((o=t.face.detector)==null?void 0:o.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await a.nms.array(),s=[],i=await a.scores.data();for(let c=0;c(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let h={};h.bbox=_e(a.boxes,[r[c],0],[1,-1]),h.slice=_e(a.batch,[r[c],gw-1],[1,-1]),h.squeeze=$e(h.slice),h.landmarks=J(h.squeeze,[gw,-1]);let f=await h.bbox.data(),m={startPoint:[f[0],f[1]],endPoint:[f[2],f[3]],landmarks:await h.landmarks.array(),confidence:p},g=uw(m,[(e.shape[2]||0)/Rs,(e.shape[1]||0)/Rs]),y=g0(g,t.face.scale||bhe),A=y0(y);s.push(A),Object.keys(h).forEach(x=>Y(h[x]))}}return Object.keys(a).forEach(c=>Y(a[c])),s}var Ya,Ms=0,whe=2.3,Sg=Mn.leftEyeLower0,Tg=Mn.rightEyeLower0,mu={leftBounds:[Sg[0],Sg[Sg.length-1]],rightBounds:[Tg[0],Tg[Tg.length-1]]},gu={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function kw(e){var t,a;return ne.initial&&(Ya=null),Ya?e.debug&&K("cached model:",Ya.modelUrl):Ya=await Ce((t=e.face.iris)==null?void 0:t.modelPath),Ms=(Ya==null?void 0:Ya.executor)&&((a=Ya.inputs)==null?void 0:a[0].shape)?Ya.inputs[0].shape[2]:0,Ms===-1&&(Ms=64),Ya}function A0(e,t,a,n){for(let r=0;r{let t=e[mu.leftBounds[0]][2],a=e[mu.rightBounds[0]][2];return t-a},bw=(e,t,a,n,r,s=!1)=>{let i=y0(g0(dw([e[a],e[n]]),whe)),o=cu(i),l=me.cropAndResize(t,[[i.startPoint[1]/r,i.startPoint[0]/r,i.endPoint[1]/r,i.endPoint[0]/r]],[0],[Ms,Ms]);if(s&&ne.kernels.includes("flipleftright")){let u=me.flipLeftRight(l);Y(l),l=u}return{box:i,boxSize:o,crop:l}},vw=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[Mn[`${a}EyeUpper0`][gu.upperCenter]][2],r=e[Mn[`${a}EyeLower0`][gu.lowerCenter]][2],s=(n+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=n:o===4&&(l=r),[i[0],i[1],l]})};async function Iw(e,t,a){if(!(Ya!=null&&Ya.executor))return e;let{box:n,boxSize:r,crop:s}=bw(e,t,mu.leftBounds[0],mu.leftBounds[1],a,!0),{box:i,boxSize:o,crop:l}=bw(e,t,mu.rightBounds[0],mu.rightBounds[1],a,!0),u=at([s,l]);Y(s),Y(l);let d=Ya.execute(u);Y(u);let c=await d.data();Y(d);let p=c.slice(0,gu.numCoordinates*3),{rawCoords:h,iris:f}=vw(p,n,r,!0),m=c.slice(gu.numCoordinates*3),{rawCoords:g,iris:y}=vw(m,i,o,!1),A=khe(e);Math.abs(A)<30?(A0(e,h,"left",null),A0(e,g,"right",null)):A<1?A0(e,h,"left",["EyeUpper0","EyeLower0"]):A0(e,g,"right",["EyeUpper0","EyeLower0"]);let x=ww(e,f,"left"),b=ww(e,y,"right");return e.concat(x).concat(b)}async function Tw(e,t){var s,i,o,l,u,d,c,p,h,f;let a={lips:await((i=(s=t.filter(m=>m.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(m=>m.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((d=(u=t.filter(m=>m.size===142))==null?void 0:u[0])==null?void 0:d.data()),irisR:await((p=(c=t.filter(m=>m.size===10))==null?void 0:c[1])==null?void 0:p.data()),eyeR:await((f=(h=t.filter(m=>m.size===142))==null?void 0:h[1])==null?void 0:f.data())};for(let m of Object.values(a))if(!m)return e;let n=wo.reduce((m,g)=>m+=e[g][2],0)/wo.length;for(let m=0;mm+=e[g][2],0)/ko.length;for(let m=0;mte()-ir.timestamp,n=ir.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||ir.boxes.length===0?(ir.boxes=await Aw(e,t),ir.timestamp=te(),ir.skipped=0):ir.skipped++;let r=[],s=[],i=0,o=kp;for(let A=0;A$.shape[$.shape.length-1]===1).data();if(S.faceScore=Math.round(100*_[0])/100,S.faceScore<(((f=t.face.detector)==null?void 0:f.minConfidence)||1)){if(x.confidence=S.faceScore,t.face.mesh.keepInvalid){S.box=f0(x,e),S.boxRaw=m0(x,e),S.score=S.boxScore,S.mesh=x.landmarks.map($=>[(x.startPoint[0]+x.endPoint[0])/2+(x.endPoint[0]+x.startPoint[0])*$[0]/fu(),(x.startPoint[1]+x.endPoint[1])/2+(x.endPoint[1]+x.startPoint[1])*$[1]/fu()]),S.meshRaw=S.mesh.map($=>[$[0]/(e.shape[2]||1),$[1]/(e.shape[1]||1),($[2]||0)/o]);for(let $ of Object.keys(bo))S.annotations[$]=[S.mesh[bo[$]]]}}else{let $=C.find(O=>O.shape[O.shape.length-1]===1404),M=J($,[-1,3]),I=await M.array();Y(M),(m=t.face.attention)!=null&&m.enabled?I=await Tw(I,C):(g=t.face.iris)!=null&&g.enabled&&(I=await Iw(I,S.tensor,kp)),S.mesh=hw(I,x,b,w,kp),S.meshRaw=S.mesh.map(O=>[O[0]/(e.shape[2]||0),O[1]/(e.shape[1]||0),(O[2]||0)/o]);for(let O of Object.keys(Mn))S.annotations[O]=Mn[O].map(L=>S.mesh[L]);S.score=S.faceScore;let E={...mw(S.mesh,x),confidence:x.confidence,landmarks:x.landmarks};S.box=f0(E,e),S.boxRaw=m0(E,e),s.push(E)}Y(C)}else{S.box=f0(x,e),S.boxRaw=m0(x,e),S.score=S.boxScore,S.mesh=x.landmarks.map(C=>[(x.startPoint[0]+x.endPoint[0])/2+(x.endPoint[0]+x.startPoint[0])*C[0]/fu(),(x.startPoint[1]+x.endPoint[1])/2+(x.endPoint[1]+x.startPoint[1])*C[1]/fu()]),S.meshRaw=S.mesh.map(C=>[C[0]/(e.shape[2]||0),C[1]/(e.shape[1]||0),(C[2]||0)/o]);for(let C of Object.keys(bo))S.annotations[C]=[S.mesh[bo[C]]]}S.score>(((y=t.face.detector)==null?void 0:y.minConfidence)||1)?r.push(S):Y(S.tensor)}return ir.boxes=s,r}async function Nw(e){var t,a,n,r,s,i;return ne.initial&&(wt=null),((t=e.face.attention)==null?void 0:t.enabled)&&(wt==null?void 0:wt.signature)&&Object.keys(((a=wt==null?void 0:wt.signature)==null?void 0:a.outputs)||{}).length<6&&(wt=null),wt?e.debug&&K("cached model:",wt.modelUrl):(n=e.face.attention)!=null&&n.enabled?wt=await Ce(e.face.attention.modelPath):wt=await Ce((r=e.face.mesh)==null?void 0:r.modelPath),kp=wt.executor&&((s=wt==null?void 0:wt.inputs)==null?void 0:s[0].shape)?(i=wt==null?void 0:wt.inputs)==null?void 0:i[0].shape[2]:256,wt}var Ew=vo,Rw=vp;var She=["angry","disgust","fear","happy","sad","surprise","neutral"],An,x0=[],Mw=0,$w=0,Ng=Number.MAX_SAFE_INTEGER;async function _w(e){var t;return ne.initial&&(An=null),An?e.debug&&K("cached model:",An.modelUrl):An=await Ce((t=e.face.emotion)==null?void 0:t.modelPath),An}async function Eg(e,t,a,n){var i,o;if(!An)return[];let r=Ng<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>te()-$w;return t.skipAllowed&&s&&r&&Mw===n&&x0[a]&&x0[a].length>0?(Ng++,x0[a]):(Ng=0,new Promise(async l=>{var d;let u=[];if((d=t.face.emotion)!=null&&d.enabled){let c={},p=An!=null&&An.inputs[0].shape?An.inputs[0].shape[2]:0;c.resize=me.resizeBilinear(e,[p,p],!1),c.channels=ae(c.resize,Oe.rgb),c.grayscale=tt(c.channels,3,!0),c.grayscaleSub=he(c.grayscale,Oe.tf05),c.grayscaleMul=ae(c.grayscaleSub,Oe.tf2),c.emotion=An==null?void 0:An.execute(c.grayscaleMul),$w=te();let h=await c.emotion.data();for(let f=0;f(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*h[f])/100),emotion:She[f]});u.sort((f,m)=>m.score-f.score),Object.keys(c).forEach(f=>Y(c[f]))}x0[a]=u,Mw=n,l(u)}))}var fa,$s=[],Pw=0,Ow=0,Rg=Number.MAX_SAFE_INTEGER;async function Dw(e){var t;return ne.initial&&(fa=null),fa?e.debug&&K("cached model:",fa.modelUrl):fa=await Ce((t=e.face.description)==null?void 0:t.modelPath),fa}function The(e){let t=e.image||e.tensor||e;if(!(fa!=null&&fa.inputs[0].shape))return t;let a=me.resizeBilinear(t,[fa.inputs[0].shape[2],fa.inputs[0].shape[1]],!1),n=ae(a,Oe.tf255);return Y(a),n}async function Mg(e,t,a,n){var o,l,u,d;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(fa!=null&&fa.executor))return r;let s=Rg<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>te()-Pw;return t.skipAllowed&&s&&i&&Ow===n&&((u=$s==null?void 0:$s[a])==null?void 0:u.age)>0&&((d=$s==null?void 0:$s[a])==null?void 0:d.genderScore)>0?(Rg++,$s[a]):(Rg=0,new Promise(async c=>{var p;if((p=t.face.description)!=null&&p.enabled){let h=The(e),f=fa==null?void 0:fa.execute(h);Pw=te(),Y(h);let g=await f.find(N=>N.shape[1]===1).data(),y=Math.trunc(200*Math.abs(g[0]-.5))/100;y>(t.face.description.minConfidence||0)&&(r.gender=g[0]<=.5?"female":"male",r.genderScore=Math.min(.99,y));let A=ar(f.find(N=>N.shape[1]===100),1),x=(await A.data())[0];Y(A);let w=await f.find(N=>N.shape[1]===100).data();r.age=Math.round(w[x-1]>w[x+1]?10*x-100*w[x-1]:10*x+100*w[x+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:fa,result:f});let S=f.find(N=>N.shape[1]===1024),C=S?await S.data():[];r.descriptor=Array.from(C),f.forEach(N=>Y(N))}$s[a]=r,Ow=n,c(r)}))}var yu=.1,$g=.5;function Che(e,t,a){let n=!1,r=a.length-1;for(let s=0;st!=a[r].y>t&&e<(a[r].x-a[s].x)*(t-a[s].y)/(a[r].y-a[s].y)+a[s].x&&(n=!n);return n}async function Lw(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,a=e.tensor.shape[1]||0,n=await e.tensor.buffer(),r=[];for(let i of Mn.silhouette)r.push({x:(e.mesh[i][0]-e.box[0])/e.box[2],y:(e.mesh[i][1]-e.box[1])/e.box[3]});yu&&yu>0&&(r=r.map(i=>({x:i.x>.5?i.x+yu:i.x-yu,y:i.y>.5?i.y+yu:i.y-yu})));for(let i=0;ite()-Ww,s=_g<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&Bw===n&&b0[a]?(_g++,b0[a]):(_g=0,new Promise(async l=>{let u=me.resizeBilinear(e,[Qt!=null&&Qt.inputs[0].shape?Qt.inputs[0].shape[2]:0,Qt!=null&&Qt.inputs[0].shape?Qt.inputs[0].shape[1]:0],!1),d=Qt==null?void 0:Qt.execute(u),c=(await d.data())[0];b0[a]=Math.round(100*c)/100,Bw=n,Ww=te(),Y([u,d]),l(b0[a])}))}var ea,v0=[],Pg=Number.MAX_SAFE_INTEGER,Uw=0,jw=0;async function Hw(e){var t;return ne.initial&&(ea=null),ea?e.debug&&K("cached model:",ea.modelUrl):ea=await Ce((t=e.face.liveness)==null?void 0:t.modelPath),ea}async function Og(e,t,a,n){var i,o;if(!(ea!=null&&ea.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>te()-jw,s=Pg<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&Uw===n&&v0[a]?(Pg++,v0[a]):(Pg=0,new Promise(async l=>{let u=me.resizeBilinear(e,[ea!=null&&ea.inputs[0].shape?ea.inputs[0].shape[2]:0,ea!=null&&ea.inputs[0].shape?ea.inputs[0].shape[1]:0],!1),d=ea==null?void 0:ea.execute(u),c=(await d.data())[0];v0[a]=Math.round(100*c)/100,Uw=n,jw=te(),Y([u,d]),l(v0[a])}))}var $n,Dg=[],Ehe=["white","black","asian","indian","other"],Rhe=[15,23,28,35.5,45.5,55.5,65],Xw=0,Kw=0,zg=Number.MAX_SAFE_INTEGER;async function Zw(e){var t;return ne.initial&&($n=null),$n?e.debug&&K("cached model:",$n.modelUrl):$n=await Ce((t=e.face.gear)==null?void 0:t.modelPath),$n}async function Lg(e,t,a,n){var i,o;if(!$n)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=zg<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>te()-Kw;return t.skipAllowed&&s&&r&&Xw===n&&Dg[a]?(zg++,Dg[a]):(zg=0,new Promise(async l=>{var y,A;if(!($n!=null&&$n.inputs[0].shape))return;let u={},d=[[0,.1,.9,.9]];u.resize=me.cropAndResize(e,d,[0],[$n.inputs[0].shape[2],$n.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(y=t.face.gear)!=null&&y.enabled&&([u.age,u.gender,u.race]=$n.execute(u.resize,["age_output","gender_output","race_output"]));let p=await u.gender.data();c.gender=p[0]>p[1]?"male":"female",c.genderScore=Math.round(100*(p[0]>p[1]?p[0]:p[1]))/100;let h=await u.race.data();for(let x=0;x(((A=t.face.gear)==null?void 0:A.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[x])/100,race:Ehe[x]});c.race.sort((x,b)=>b.score-x.score);let m=Array.from(await u.age.data()).map((x,b)=>[Rhe[b],x]).sort((x,b)=>b[1]-x[1]),g=m[0][0];for(let x=1;xY(u[x])),Dg[a]=c,Xw=n,Kw=te(),l(c)}))}var Ja,w0=[],Jw=0,Qw=0,Bg=Number.MAX_SAFE_INTEGER;async function ek(e){return ne.initial&&(Ja=null),Ja?e.debug&&K("cached model:",Ja.modelUrl):Ja=await Ce(e.face.ssrnet.modelPathAge),Ja}async function Wg(e,t,a,n){var i,o,l,u;if(!Ja)return{age:0};let r=Bg<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>te()-Qw;return t.skipAllowed&&r&&s&&Jw===n&&((l=w0[a])==null?void 0:l.age)&&((u=w0[a])==null?void 0:u.age)>0?(Bg++,w0[a]):(Bg=0,new Promise(async d=>{var h;if(!(Ja!=null&&Ja.inputs)||!Ja.inputs[0]||!Ja.inputs[0].shape)return;let c={};c.resize=me.resizeBilinear(e,[Ja.inputs[0].shape[2],Ja.inputs[0].shape[1]],!1),c.enhance=ae(c.resize,Oe.tf255);let p={age:0};if((h=t.face.ssrnet)!=null&&h.enabled&&(c.age=Ja.execute(c.enhance)),c.age){let f=await c.age.data();p.age=Math.trunc(10*f[0])/10}Object.keys(c).forEach(f=>Y(c[f])),w0[a]=p,Jw=n,Qw=te(),d(p)}))}var _n,k0=[],ak=0,nk=0,Vg=Number.MAX_SAFE_INTEGER,Gg=[.2989,.587,.114];async function rk(e){var t;return ne.initial&&(_n=null),_n?e.debug&&K("cached model:",_n.modelUrl):_n=await Ce((t=e.face.ssrnet)==null?void 0:t.modelPathGender),_n}async function Ug(e,t,a,n){var i,o,l,u;if(!_n)return{gender:"unknown",genderScore:0};let r=Vg<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>te()-nk;return t.skipAllowed&&r&&s&&ak===n&&((l=k0[a])==null?void 0:l.gender)&&((u=k0[a])==null?void 0:u.genderScore)>0?(Vg++,k0[a]):(Vg=0,new Promise(async d=>{var f;if(!(_n!=null&&_n.inputs[0].shape))return;let c={};c.resize=me.resizeBilinear(e,[_n.inputs[0].shape[2],_n.inputs[0].shape[1]],!1),c.enhance=Ee(()=>{let[m,g,y]=ka(c.resize,3,3),A=ae(m,Gg[0]),x=ae(g,Gg[1]),b=ae(y,Gg[2]),w=mh([A,x,b]);return ae(he(w,Oe.tf05),2)});let p={gender:"unknown",genderScore:0};(f=t.face.ssrnet)!=null&&f.enabled&&(c.gender=_n.execute(c.enhance));let h=await c.gender.data();p.gender=h[0]>h[1]?"female":"male",p.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(c).forEach(m=>Y(c[m])),k0[a]=p,ak=n,nk=te(),d(p)}))}var Qa,jg=[],ik=0,ok=0,lk=Number.MAX_SAFE_INTEGER;async function uk(e){var t;return ne.initial&&(Qa=null),Qa?e.debug&&K("cached model:",Qa.modelUrl):Qa=await Ce((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Qa}async function Hg(e,t,a,n){var i,o;if(!(Qa!=null&&Qa.executor))return[];let r=lk<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>te()-ok;return t.skipAllowed&&s&&r&&ik===n&&jg[a]?(lk++,jg[a]):new Promise(async l=>{var d;let u=[];if(((d=t.face.mobilefacenet)==null?void 0:d.enabled)&&(Qa==null?void 0:Qa.inputs[0].shape)){let c={};c.crop=me.resizeBilinear(e,[Qa.inputs[0].shape[2],Qa.inputs[0].shape[1]],!1),c.data=Qa.execute(c.crop);let p=await c.data.data();u=Array.from(p),Object.keys(c).forEach(h=>Y(c[h]))}jg[a]=u,ik=n,ok=te(),l(u)})}var en,qg=[],pk=0,ck=0,hk=Number.MAX_SAFE_INTEGER;async function fk(e){return ne.initial&&(en=null),en?e.debug&&K("cached model:",en.modelUrl):en=await Ce(e.face.insightface.modelPath),en}async function Xg(e,t,a,n){var i,o;if(!(en!=null&&en.executor))return[];let r=hk<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>te()-ck;return t.skipAllowed&&s&&r&&pk===n&&qg[a]?(hk++,qg[a]):new Promise(async l=>{var d;let u=[];if(((d=t.face.insightface)==null?void 0:d.enabled)&&(en==null?void 0:en.inputs[0].shape)){let c={};c.crop=me.resizeBilinear(e,[en.inputs[0].shape[2],en.inputs[0].shape[1]],!1),c.data=en.execute(c.crop);let p=await c.data.data();u=Array.from(p),Object.keys(c).forEach(h=>Y(c[h]))}qg[a]=u,pk=n,ck=te(),l(u)})}var Mhe=e=>{let t=(c,p)=>Math.atan2(c[1]-p[1],c[0]-p[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let a=[0,-.1],n=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],i=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],o=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(i[0]-s[0])/o[0]-a[0],n*(s[1]-i[1])/o[1]-a[1]],u=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return u=Math.min(u,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:u}},gk=(e,t)=>{let a=m=>{let g=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=g,m[1]/=g,m[2]/=g,m},n=(m,g)=>{let y=m[0]-g[0],A=m[1]-g[1],x=m[2]-g[2];return[y,A,x]},r=(m,g)=>{let y=m[1]*g[2]-m[2]*g[1],A=m[2]*g[0]-m[0]*g[2],x=m[0]*g[1]-m[1]*g[0];return[y,A,x]},s=m=>{let[g,y,A,x,b,w,S,C,N]=m,_,$,M;return x<1?x>-1?(M=Math.asin(x),$=Math.atan2(-S,g),_=Math.atan2(-w,b)):(M=-Math.PI/2,$=-Math.atan2(C,N),_=0):(M=Math.PI/2,$=Math.atan2(C,N),_=0),Number.isNaN(_)&&(_=0),Number.isNaN($)&&($=0),Number.isNaN(M)&&(M=0),{pitch:2*-_,yaw:2*-$,roll:2*-M}},i=e.meshRaw;if(!i||i.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let o=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[i[10],i[152],i[234],i[454]].map(m=>[m[0]*t[0]/o,m[1]*t[1]/o,m[2]]),u=a(n(l[1],l[0])),d=a(n(l[3],l[2])),c=a(r(d,u));d=r(u,c);let p=[d[0],d[1],d[2],u[0],u[1],u[2],c[0],c[1],c[2]],h=s(p),f=i.length===478?Mhe(e):{bearing:0,strength:0};return{angle:h,matrix:p,gaze:f}};function yk(e,t){let a=e==null?void 0:e.annotations;if(!a)return 0;let n=Math.max(Math.abs(a.leftEyeIris[3][0]-a.leftEyeIris[1][0]),Math.abs(a.rightEyeIris[3][0]-a.rightEyeIris[1][0]))/t;return Math.round(1.17/n)/100}var Kg=async(e,t)=>{var f,m,g,y,A,x,b,w,S,C,N,_,$,M,I,E,O,L,B,G,j,U,H;let a=te(),n,r,s,i,o,l,u,d,c,p=[];e.state="run:face";let h=await Cw(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(te()-a):Math.trunc(te()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let W=0;W200?gk(h[W],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(m=e.config.face.emotion)!=null&&m.enabled?Eg(h[W].tensor||ze([]),e.config,W,h.length):[]:(e.state="run:emotion",a=te(),i=(g=e.config.face.emotion)!=null&&g.enabled?await Eg(h[W].tensor||ze([]),e.config,W,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(y=e.config.face.antispoof)!=null&&y.enabled?Fg(h[W].tensor||ze([]),e.config,W,h.length):0:(e.state="run:antispoof",a=te(),u=(A=e.config.face.antispoof)!=null&&A.enabled?await Fg(h[W].tensor||ze([]),e.config,W,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?d=(x=e.config.face.liveness)!=null&&x.enabled?Og(h[W].tensor||ze([]),e.config,W,h.length):0:(e.state="run:liveness",a=te(),d=(b=e.config.face.liveness)!=null&&b.enabled?await Og(h[W].tensor||ze([]),e.config,W,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?Lg(h[W].tensor||ze([]),e.config,W,h.length):null:(e.state="run:gear",a=te(),r=(S=e.config.face.gear)!=null&&S.enabled?await Lg(h[W].tensor||ze([]),e.config,W,h.length):null,e.performance.gear=Math.trunc(te()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(C=e.config.face.ssrnet)!=null&&C.enabled?Wg(h[W].tensor||ze([]),e.config,W,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Ug(h[W].tensor||ze([]),e.config,W,h.length):null):(e.state="run:ssrnet",a=te(),n=(_=e.config.face.ssrnet)!=null&&_.enabled?await Wg(h[W].tensor||ze([]),e.config,W,h.length):null,s=($=e.config.face.ssrnet)!=null&&$.enabled?await Ug(h[W].tensor||ze([]),e.config,W,h.length):null,e.performance.ssrnet=Math.trunc(te()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(M=e.config.face.mobilefacenet)!=null&&M.enabled?Hg(h[W].tensor||ze([]),e.config,W,h.length):null:(e.state="run:mobilefacenet",a=te(),o=(I=e.config.face.mobilefacenet)!=null&&I.enabled?await Hg(h[W].tensor||ze([]),e.config,W,h.length):null,e.performance.mobilefacenet=Math.trunc(te()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(E=e.config.face.insightface)!=null&&E.enabled?Xg(h[W].tensor||ze([]),e.config,W,h.length):null:(e.state="run:mobilefacenet",a=te(),l=(O=e.config.face.insightface)!=null&&O.enabled?await Xg(h[W].tensor||ze([]),e.config,W,h.length):null,e.performance.mobilefacenet=Math.trunc(te()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=Mg(h[W].tensor||ze([]),e.config,W,h.length):(e.state="run:description",a=te(),c=await Mg(h[W].tensor||ze([]),e.config,W,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Description:"),e.config.async&&([n,s,i,o,l,c,r,u,d]=await Promise.all([n,s,i,o,l,c,r,u,d])),e.analyze("Finish Face:"),((L=e.config.face.ssrnet)==null?void 0:L.enabled)&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),((B=e.config.face.gear)==null?void 0:B.enabled)&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),((G=e.config.face.mobilefacenet)==null?void 0:G.enabled)&&o&&(c.descriptor=o),((j=e.config.face.insightface)==null?void 0:j.enabled)&&l&&(c.descriptor=l);let Z=(U=e.config.face.iris)!=null&&U.enabled?yk(h[W],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?$e(h[W].tensor):null;Y(h[W].tensor),h[W].tensor&&delete h[W].tensor;let ee={...h[W],id:W};c.age&&(ee.age=c.age),c.gender&&(ee.gender=c.gender),c.genderScore&&(ee.genderScore=c.genderScore),c.descriptor&&(ee.embedding=c.descriptor),c.race&&(ee.race=c.race),i&&(ee.emotion=i),u&&(ee.real=u),d&&(ee.live=d),Z>0&&(ee.distance=Z),Q&&(ee.rotation=Q),re&&(ee.tensor=re),p.push(ee),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),p};var Ma={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>Ma.nameMapping[e],getPoints:e=>Ma.pointsMapping[e]},Fs={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Fs.nameMapping[e]},Nt={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>Nt.nameMapping[e]},_s=class{constructor(t){le(this,"name");le(this,"curls");le(this,"directions");le(this,"weights");le(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,a,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([a,n])}direction(t,a,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([a,n])}weight(t,a){this.weights[t]=a;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,a){let n=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}for(let r in a){let s=a[r],i=this.directions[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:Ln,index:Rr,middle:Mr,ring:Co,pinky:No}=Ma,{none:Bn,half:_he,full:Wn}=Fs,{verticalUp:Au,verticalDown:s5e,horizontalLeft:Zg,horizontalRight:Fhe,diagonalUpRight:Phe,diagonalUpLeft:xu,diagonalDownRight:i5e,diagonalDownLeft:o5e}=Nt,Ps=new _s("thumbs up");Ps.curl(Ln,Bn,1);Ps.direction(Ln,Au,1);Ps.direction(Ln,xu,.25);Ps.direction(Ln,Phe,.25);for(let e of[Ma.index,Ma.middle,Ma.ring,Ma.pinky])Ps.curl(e,Wn,1),Ps.direction(e,Zg,1),Ps.direction(e,Fhe,1);var Bt=new _s("victory");Bt.curl(Ln,_he,.5);Bt.curl(Ln,Bn,.5);Bt.direction(Ln,Au,1);Bt.direction(Ln,xu,1);Bt.curl(Rr,Bn,1);Bt.direction(Rr,Au,.75);Bt.direction(Rr,xu,1);Bt.curl(Mr,Bn,1);Bt.direction(Mr,Au,1);Bt.direction(Mr,xu,.75);Bt.curl(Co,Wn,1);Bt.direction(Co,Au,.2);Bt.direction(Co,xu,1);Bt.direction(Co,Zg,.2);Bt.curl(No,Wn,1);Bt.direction(No,Au,.2);Bt.direction(No,xu,1);Bt.direction(No,Zg,.2);Bt.weight(Rr,2);Bt.weight(Mr,2);var Os=new _s("point");Os.curl(Ln,Wn,1);Os.curl(Rr,Bn,.5);Os.curl(Mr,Wn,.5);Os.curl(Co,Wn,.5);Os.curl(No,Wn,.5);Os.weight(Rr,2);Os.weight(Mr,2);var Ds=new _s("middle finger");Ds.curl(Ln,Bn,1);Ds.curl(Rr,Wn,.5);Ds.curl(Mr,Wn,.5);Ds.curl(Co,Wn,.5);Ds.curl(No,Wn,.5);Ds.weight(Rr,2);Ds.weight(Mr,2);var bu=new _s("open palm");bu.curl(Ln,Bn,.75);bu.curl(Rr,Bn,.75);bu.curl(Mr,Bn,.75);bu.curl(Co,Bn,.75);bu.curl(No,Bn,.75);var Ak=[Ps,Bt,Os,Ds,bu];var Ohe=.7,Eo={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function xk(e,t,a,n){let r=(t-n)/(e-a),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function vk(e,t){if(!e||!t)return[0,0];let a=xk(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=xk(e[1],e[2],t[1],t[2]);return[a,n]}function bk(e,t=1){let a=0,n=0,r=0;return e>=75&&e<=105?a=1*t:e>=25&&e<=155?n=1*t:r=1*t,[a,n,r]}function Dhe(e,t,a){let n=e[0]-t[0],r=e[0]-a[0],s=t[0]-a[0],i=e[1]-t[1],o=e[1]-a[1],l=t[1]-a[1],u=e[2]-t[2],d=e[2]-a[2],c=t[2]-a[2],p=Math.sqrt(n*n+i*i+u*u),h=Math.sqrt(r*r+o*o+d*d),f=Math.sqrt(s*s+l*l+c*c),m=(f*f+p*p-h*h)/(2*f*p);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let y;return g>Eo.NO_CURL_START_LIMIT?y=Fs.none:g>Eo.HALF_CURL_START_LIMIT?y=Fs.half:y=Fs.full,y}function wk(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=Nt.horizontalLeft:r=Nt.horizontalRight:n===Math.abs(t)?t>0?r=Nt.horizontalLeft:r=Nt.horizontalRight:a>0?r=Nt.horizontalLeft:r=Nt.horizontalRight,r}function kk(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=Nt.verticalDown:r=Nt.verticalUp:n===Math.abs(t)?t<0?r=Nt.verticalDown:r=Nt.verticalUp:a<0?r=Nt.verticalDown:r=Nt.verticalUp,r}function zhe(e,t,a,n,r,s,i,o){let l,u=kk(e,t,a,n),d=wk(r,s,i,o);return u===Nt.verticalUp?d===Nt.horizontalLeft?l=Nt.diagonalUpLeft:l=Nt.diagonalUpRight:d===Nt.horizontalLeft?l=Nt.diagonalDownLeft:l=Nt.diagonalDownRight,l}function Lhe(e,t,a,n){let r=e[0]-t[0],s=e[0]-a[0],i=t[0]-a[0],o=e[1]-t[1],l=e[1]-a[1],u=t[1]-a[1],d=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),c=Math.max(Math.abs(o),Math.abs(l),Math.abs(u)),p=0,h=0,f=0,m=c/(d+1e-5);m>1.5?p+=Eo.DISTANCE_VOTE_POWER:m>.66?h+=Eo.DISTANCE_VOTE_POWER:f+=Eo.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),A=Math.sqrt(i*i+u*u),x=Math.max(g,y,A),b=e[0],w=e[1],S=a[0],C=a[1];x===g?(S=a[0],C=a[1]):x===A&&(b=t[0],w=t[1]);let $=vk([b,w],[S,C]),M=bk($,Eo.TOTAL_ANGLE_VOTE_POWER);p+=M[0],h+=M[1],f+=M[2];for(let E of n){let O=bk(E,Eo.SINGLE_ANGLE_VOTE_POWER);p+=O[0],h+=O[1],f+=O[2]}let I;return p===Math.max(p,h,f)?I=kk(l,o,u,c):f===Math.max(h,f)?I=wk(s,r,i,d):I=zhe(l,o,u,c,s,r,i,d),I}function Ik(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of Ma.all){let i=Ma.getPoints(s),o=[],l=[];for(let u of i){let d=e[u[0]],c=e[u[1]],p=vk(d,c),h=p[0],f=p[1];o.push(h),l.push(f)}t.push(o),a.push(l)}for(let s of Ma.all){let i=s===Ma.thumb?1:0,o=Ma.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],d=e[o[3][1]],c=Dhe(l,u,d),p=Lhe(l,u,d,t[s].slice(i));n[s]=c,r[s]=p}return{curls:n,directions:r}}function I0(e){if(!e||e.length===0)return null;let t=Ik(e),a={};for(let n of Ma.all)a[Ma.getName(n)]={curl:Fs.getName(t.curls[n]),direction:Nt.getName(t.directions[n])};return a}function Sk(e){let t=[];if(!e||e.length===0)return t;let a=Ik(e);for(let n of Ak){let r=n.matchAgainst(a.curls,a.directions);r>=Ohe&&t.push({name:n.name,confidence:r})}return t}var Tk=e=>{if(!e)return[];let t=[];for(let a=0;al.part==="leftWrist"),r=e[a].keypoints.find(l=>l.part==="rightWrist"),s=e[a].keypoints.find(l=>l.part==="nose");s&&n&&r&&n.position[1]l.part==="leftShoulder"),o=e[a].keypoints.find(l=>l.part==="rightShoulder");i&&o&&Math.abs(i.positionRaw[1]-o.positionRaw[1])>.1&&t.push({body:a,gesture:`leaning ${i.position[1]>o.position[1]?"left":"right"}`})}return t},Ck=e=>{if(!e)return[];let t=[];for(let a=0;a450){let n=(e[a].mesh[33][2]||0)-(e[a].mesh[263][2]||0),r=e[a].mesh[33][0]-e[a].mesh[263][0];Math.abs(n/r)<=.15?t.push({face:a,gesture:"facing center"}):t.push({face:a,gesture:`facing ${n<0?"left":"right"}`}),Math.abs(e[a].mesh[374][1]-e[a].mesh[386][1])/Math.abs(e[a].mesh[443][1]-e[a].mesh[450][1])<.2&&t.push({face:a,gesture:"blink left eye"}),Math.abs(e[a].mesh[145][1]-e[a].mesh[159][1])/Math.abs(e[a].mesh[223][1]-e[a].mesh[230][1])<.2&&t.push({face:a,gesture:"blink right eye"});let o=Math.min(100,500*Math.abs(e[a].mesh[13][1]-e[a].mesh[14][1])/Math.abs(e[a].mesh[10][1]-e[a].mesh[152][1]));o>10&&t.push({face:a,gesture:`mouth ${Math.trunc(o)}% open`});let l=e[a].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:a,gesture:`head ${l<0?"up":"down"}`})}return t},Nk=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),m>g?m>.05&&t.push({iris:i,gesture:"looking right"}):g>.05&&t.push({iris:i,gesture:"looking left"});let y=Math.abs(e[i].mesh[145][1]-e[i].annotations.rightEyeIris[0][1])/e[i].box[3],A=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(A<.01||y<.01||A>.022||y>.022)&&(h=!1),(A<.01||y<.01)&&t.push({iris:i,gesture:"looking down"}),(A>.022||y>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},Ek=e=>{if(!e)return[];let t=[];for(let a=0;a0){let r=n.reduce((i,o)=>(i.position[2]||0)<(o.position[2]||0)?i:o);t.push({hand:a,gesture:`${r.name} forward`});let s=n.reduce((i,o)=>i.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:a,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function T0(e,t=1.5){let a=Ip(e),n=S0(e),r=[t*n[0]/2,t*n[1]/2],s=[a[0]-r[0],a[1]-r[1]],i=[a[0]+r[0],a[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function C0(e){let t=Ip(e),a=S0(e),r=Math.max(...a)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function Whe(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Fk(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Whe(a)}var Rk=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function zs(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Kn(this.anchors),this.inputSize=((s=(r=(n=(a=this==null?void 0:this.model)==null?void 0:a.inputs)==null?void 0:n[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=Ut([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ut([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=_e(t,[0,0],[-1,2]),a.boxSizes=_e(t,[0,2],[-1,2]),a.div=fe(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=xe(a.div,this.anchorsTensor),a.halfBoxSizes=fe(a.boxSizes,this.doubleInputSizeTensor),a.sub=he(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=ae(a.sub,this.inputSizeTensor),a.add=xe(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=ae(a.add,this.inputSizeTensor);let n=ql([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>Y(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=J(t,[-1,7,2]),n.div=fe(n.reshape,this.inputSizeTensor),n.landmarks=xe(n.div,this.anchors[a]?this.anchors[a]:0);let r=ae(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>Y(n[s])),r}async predict(t,a){var o;let n={};n.resize=me.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=fe(n.resize,Oe.tf127),n.image=he(n.div,Oe.tf1),n.batched=this.model.execute(n.image),n.predictions=$e(n.batched),n.slice=_e(n.predictions,[0,0],[-1,1]),n.sigmoid=Da(n.slice),n.scores=$e(n.sigmoid);let r=await n.scores.data();n.boxes=_e(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await me.nonMaxSuppressionAsync(n.norm,n.scores,3*(((o=a.hand)==null?void 0:o.maxDetected)||1),a.hand.iouThreshold,a.hand.minConfidence);let s=await n.nms.array(),i=[];for(let l of s){let u={};u.box=_e(n.norm,[l,0],[1,-1]),u.slice=_e(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=J(u.norm,[-1,2]);let d=await u.box.data(),c=d.slice(0,2),p=d.slice(2,4),h=await u.palmLandmarks.array(),f={startPoint:c,endPoint:p,palmLandmarks:h,confidence:r[l]},m=_k(f,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(m),Object.keys(u).forEach(g=>Y(u[g]))}return Object.keys(n).forEach(l=>Y(n[l])),i}};var jhe=5,zk=1.65,Lk=[0,5,9,13,17,1,2],Hhe=0,qhe=2,Bk=0,E0=class{constructor(t,a){le(this,"handDetector");le(this,"handPoseModel");le(this,"inputSize");le(this,"storedBoxes");le(this,"skipped");le(this,"detectedHands");var n,r,s;this.handDetector=t,this.handPoseModel=a,this.inputSize=((s=(r=(n=this.handPoseModel)==null?void 0:n.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let a=t.map(i=>i[0]),n=t.map(i=>i[1]),r=[Math.min(...a),Math.min(...n)],s=[Math.max(...a),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,a){let n=t.map(s=>Qg([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return T0(C0(r),jhe)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=T0(C0(a),zk);n.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=Jg(n,[0,0]),u=o.map(h=>[...Qg(h,l),h[2]]),d=Pk(r),c=[...Ip(a),1],p=[zs(c,d[0]),zs(c,d[1])];return u.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2])])}async estimateHands(t,a){let n=!1,r,s=(a.hand.skipTime||0)>te()-Bk,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i&&(r=await this.handDetector.predict(t,a),this.skipped=0),a.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==a.hand.maxDetected||!a.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let o=[];for(let l=0;l=a.hand.minConfidence/4){let w=J(x,[-1,3]),S=await w.array();Y(x),Y(w);let C=this.transformRawCoords(S,m,d,f),N=this.getBoxForHandLandmarks(C);this.storedBoxes[l]={...N,confidence:b};let _={landmarks:C,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:N.startPoint,bottomRight:N.endPoint}};o.push(_)}else this.storedBoxes[l]=null;Y(x)}else{let d=T0(C0(u),zk),c={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:d.startPoint,bottomRight:d.endPoint},landmarks:[]};o.push(c)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>a.hand.maxDetected&&(o.length=a.hand.maxDetected),o}};var Wk={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Ro,Mo,Vk;async function e5(e,t){let a=await Vk.estimateHands(e,t);if(!a)return[];let n=[];for(let r=0;ra[r].landmarks[c]);let i=a[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let d of i)d[0]o[2]&&(o[2]=d[0]),d[1]>o[3]&&(o[3]=d[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=a[r].box?[Math.trunc(Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.max(0,a[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,a[r].box.bottomRight[0])-Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,a[r].box.bottomRight[1])-Math.max(0,a[r].box.topLeft[1]))]:[0,0,0,0],l=[a[r].box.topLeft[0]/(e.shape[2]||0),a[r].box.topLeft[1]/(e.shape[1]||0),(a[r].box.bottomRight[0]-a[r].box.topLeft[0])/(e.shape[2]||0),(a[r].box.bottomRight[1]-a[r].box.topLeft[1])/(e.shape[1]||0)];let u=I0(i);n.push({id:r,score:Math.round(100*a[r].confidence)/100,boxScore:Math.round(100*a[r].boxConfidence)/100,fingerScore:Math.round(100*a[r].fingerConfidence)/100,label:"hand",box:o,boxRaw:l,keypoints:i,annotations:s,landmarks:u})}return n}async function Gk(e){var a,n;ne.initial&&(Ro=null,Mo=null),!Ro||!Mo?[Ro,Mo]=await Promise.all([e.hand.enabled?Ce((a=e.hand.detector)==null?void 0:a.modelPath):null,e.hand.landmarks?Ce((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&K("cached model:",Ro.modelUrl),e.debug&&K("cached model:",Mo.modelUrl));let t=Ro?new N0(Ro):void 0;return t&&Mo&&(Vk=new E0(t,Mo)),[Ro,Mo]}var Ft=[null,null],Khe=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ls=[[0,0],[0,0]],Zhe=["hand","fist","pinch","point","face","tip","pinchtip"],jk=4,Hk=1.6,Yhe=512,Jhe=1.4,R0=Number.MAX_SAFE_INTEGER,t5=0,$r=[0,0],_t={boxes:[],hands:[]},qk={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Xk(e){var t;if(ne.initial&&(Ft[0]=null),Ft[0])e.debug&&K("cached model:",Ft[0].modelUrl);else{e0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Ft[0]=await Ce((t=e.hand.detector)==null?void 0:t.modelPath);let a=Ft[0].executor?Object.values(Ft[0].modelSignature.inputs):void 0;Ls[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Ls[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ft[0]}async function Kk(e){var t;if(ne.initial&&(Ft[1]=null),Ft[1])e.debug&&K("cached model:",Ft[1].modelUrl);else{Ft[1]=await Ce((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Ft[1].executor?Object.values(Ft[1].modelSignature.inputs):void 0;Ls[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Ls[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ft[1]}async function Qhe(e,t){let a=[];if(!e||!Ft[0])return a;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,Yhe),i=Math.round(s*r/8)*8;n.resize=me.resizeBilinear(e,[s,i]),n.cast=Ue(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await Ft[0].executeAsync(n.cast,Khe),n.boxes=$e(n.rawBoxes,[0,2]),n.scores=$e(n.rawScores,[0]);let o=Ta(n.scores,1);Y(o[jk]),o.splice(jk,1),n.filtered=sa(o,1),Y(o),n.max=pa(n.filtered,1),n.argmax=ar(n.filtered,1);let l=0;n.nms=await me.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await n.nms.data(),d=await n.max.data(),c=await n.argmax.data();for(let p of Array.from(u)){let h=_e(n.boxes,p,1),f=await h.data();Y(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=u0(m,Jhe),y=[Math.trunc(m[0]*$r[0]),Math.trunc(m[1]*$r[1]),Math.trunc(m[2]*$r[0]),Math.trunc(m[3]*$r[1])],A=d[p],x=Zhe[c[p]],b={id:l++,score:A,box:y,boxRaw:g,label:x};a.push(b)}return Object.keys(n).forEach(p=>Y(n[p])),a.sort((p,h)=>h.score-p.score),a.length>(t.hand.maxDetected||1)&&(a.length=t.hand.maxDetected||1),a}async function a5(e,t,a){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&Ft[1]&&a.hand.landmarks&&t.score>(a.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=me.cropAndResize(e,[s],[0],[Ls[1][0],Ls[1][1]],"bilinear"),r.div=fe(r.crop,Oe.tf255),[r.score,r.keypoints]=Ft[1].execute(r.div,["Identity_1","Identity"]);let i=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(i))))/100;if(o>=(a.hand.minConfidence||0)){n.fingerScore=o,r.reshaped=J(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(c=>[c[0]/Ls[1][1],c[1]/Ls[1][0],c[2]||0]).map(c=>[c[0]*t.boxRaw[2],c[1]*t.boxRaw[3],c[2]||0]);n.keypoints=d.map(c=>[$r[0]*(c[0]+t.boxRaw[0]),$r[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=I0(n.keypoints);for(let c of Object.keys(qk))n.annotations[c]=qk[c].map(p=>n.landmarks&&n.keypoints[p]?n.keypoints[p]:null)}Object.keys(r).forEach(l=>Y(r[l]))}return n}async function n5(e,t){var r,s;if(!((r=Ft[0])!=null&&r.executor)||!((s=Ft[1])!=null&&s.executor)||!Ft[0].inputs[0].shape||!Ft[1].inputs[0].shape)return[];$r=[e.shape[2]||0,e.shape[1]||0],R0++;let a=(t.hand.skipTime||0)>te()-t5,n=R0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?_t.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>te()-t5,l=R0<3*(t.hand.skipFrames||0);t.skipAllowed&&_t.hands.length===t.hand.maxDetected?_t.hands=await Promise.all(_t.boxes.map(d=>a5(e,d,t))):t.skipAllowed&&o&&l&&_t.hands.length>0?_t.hands=await Promise.all(_t.boxes.map(d=>a5(e,d,t))):(_t.boxes=await Qhe(e,t),t5=te(),_t.hands=await Promise.all(_t.boxes.map(d=>a5(e,d,t))),R0=0);let u=[..._t.boxes];if(_t.boxes.length=0,t.cacheSensitivity>0)for(let d=0;d<_t.hands.length;d++){let c=X9(_t.hands[d].keypoints,$r);if(c.box[2]/(e.shape[2]||1)>.05&&c.box[3]/(e.shape[1]||1)>.05&&_t.hands[d].fingerScore&&_t.hands[d].fingerScore>(t.hand.minConfidence||0)){let p=u0(c.box,Hk),h=u0(c.boxRaw,Hk);_t.boxes.push({...u[d],box:p,boxRaw:h})}}for(let d=0;d<_t.hands.length;d++){let c=Er(_t.hands[d].keypoints,$r);_t.hands[d].box=c.box,_t.hands[d].boxRaw=c.boxRaw}i(_t.hands)})}var or=(e=null)=>({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var Sp={};hr(Sp,{connected:()=>$0,horizontal:()=>r5,kpt:()=>M0,relative:()=>i5,vertical:()=>s5});var M0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],r5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],s5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],$0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var ge=or(),o5=0;function Yk(e,t){var i,o,l,u,d,c,p,h,f,m,g,y,A,x,b,w,S,C,N,_,$,M,I;let a=te();if(!e)return or();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(ge.canvas=e.canvas),e.error&&(ge.error=e.error),!ge.body||e.body.length!==ge.body.length)ge.body=JSON.parse(JSON.stringify(e.body));else for(let E=0;E((r-1)*ge.body[E].box[H]+U)/r),L=e.body[E].boxRaw.map((U,H)=>((r-1)*ge.body[E].boxRaw[H]+U)/r),B=e.body[E].keypoints.map((U,H)=>{var W,Q,Z,re,ee,pe,oe,ye,we;return{score:U.score,part:U.part,position:[ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].position[0]||0)+(U.position[0]||0))/r:U.position[0],ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].position[1]||0)+(U.position[1]||0))/r:U.position[1],ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].position[2]||0)+(U.position[2]||0))/r:U.position[2]],positionRaw:[ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].positionRaw[0]||0)+(U.positionRaw[0]||0))/r:U.positionRaw[0],ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].positionRaw[1]||0)+(U.positionRaw[1]||0))/r:U.positionRaw[1],ge.body[E].keypoints[H]?((r-1)*(ge.body[E].keypoints[H].positionRaw[2]||0)+(U.positionRaw[2]||0))/r:U.positionRaw[2]],distance:[ge.body[E].keypoints[H]?((r-1)*(((W=ge.body[E].keypoints[H].distance)==null?void 0:W[0])||0)+(((Q=U.distance)==null?void 0:Q[0])||0))/r:(Z=U.distance)==null?void 0:Z[0],ge.body[E].keypoints[H]?((r-1)*(((re=ge.body[E].keypoints[H].distance)==null?void 0:re[1])||0)+(((ee=U.distance)==null?void 0:ee[1])||0))/r:(pe=U.distance)==null?void 0:pe[1],ge.body[E].keypoints[H]?((r-1)*(((oe=ge.body[E].keypoints[H].distance)==null?void 0:oe[2])||0)+(((ye=U.distance)==null?void 0:ye[2])||0))/r:(we=U.distance)==null?void 0:we[2]]}}),G={},j={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?j=c0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?j=o0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(j=Sp);for(let[U,H]of Object.entries(j.connected)){let W=[];for(let Q=0;Qee.part===H[Q]),re=B.find(ee=>ee.part===H[Q+1]);Z&&re&&W.push([Z.position,re.position])}G[U]=W}ge.body[E]={...e.body[E],box:O,boxRaw:L,keypoints:B,annotations:G}}if(!ge.hand||e.hand.length!==ge.hand.length)ge.hand=JSON.parse(JSON.stringify(e.hand));else for(let E=0;E((r-1)*ge.hand[E].box[U]+j)/r),L=e.hand[E].boxRaw.map((j,U)=>((r-1)*ge.hand[E].boxRaw[U]+j)/r);ge.hand[E].keypoints.length!==e.hand[E].keypoints.length&&(ge.hand[E].keypoints=e.hand[E].keypoints);let B=e.hand[E].keypoints&&e.hand[E].keypoints.length>0?e.hand[E].keypoints.map((j,U)=>j.map((H,W)=>((r-1)*(ge.hand[E].keypoints[U][W]||1)+(H||0))/r)):[],G={};if(Object.keys(ge.hand[E].annotations).length!==Object.keys(e.hand[E].annotations).length)ge.hand[E].annotations=e.hand[E].annotations,G=ge.hand[E].annotations;else if(e.hand[E].annotations)for(let j of Object.keys(e.hand[E].annotations))G[j]=(c=(d=(u=e.hand[E])==null?void 0:u.annotations)==null?void 0:d[j])!=null&&c[0]?e.hand[E].annotations[j].map((U,H)=>U.map((W,Q)=>((r-1)*ge.hand[E].annotations[j][H][Q]+W)/r)):null;ge.hand[E]={...e.hand[E],box:O,boxRaw:L,keypoints:B,annotations:G}}if(!ge.face||e.face.length!==ge.face.length)ge.face=JSON.parse(JSON.stringify(e.face));else for(let E=0;E((r-1)*ge.face[E].box[G]+B)/r),L=e.face[E].boxRaw.map((B,G)=>((r-1)*ge.face[E].boxRaw[G]+B)/r);if(e.face[E].rotation){let B={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};B.matrix=(p=e.face[E].rotation)==null?void 0:p.matrix,B.angle={roll:((r-1)*(((f=(h=ge.face[E].rotation)==null?void 0:h.angle)==null?void 0:f.roll)||0)+(((g=(m=e.face[E].rotation)==null?void 0:m.angle)==null?void 0:g.roll)||0))/r,yaw:((r-1)*(((A=(y=ge.face[E].rotation)==null?void 0:y.angle)==null?void 0:A.yaw)||0)+(((b=(x=e.face[E].rotation)==null?void 0:x.angle)==null?void 0:b.yaw)||0))/r,pitch:((r-1)*(((S=(w=ge.face[E].rotation)==null?void 0:w.angle)==null?void 0:S.pitch)||0)+(((N=(C=e.face[E].rotation)==null?void 0:C.angle)==null?void 0:N.pitch)||0))/r},B.gaze={bearing:((r-1)*(((_=ge.face[E].rotation)==null?void 0:_.gaze.bearing)||0)+((($=e.face[E].rotation)==null?void 0:$.gaze.bearing)||0))/r,strength:((r-1)*(((M=ge.face[E].rotation)==null?void 0:M.gaze.strength)||0)+(((I=e.face[E].rotation)==null?void 0:I.gaze.strength)||0))/r},ge.face[E]={...e.face[E],rotation:B,box:O,boxRaw:L}}else ge.face[E]={...e.face[E],box:O,boxRaw:L}}if(!ge.object||e.object.length!==ge.object.length)ge.object=JSON.parse(JSON.stringify(e.object));else for(let E=0;E((r-1)*ge.object[E].box[G]+B)/r),L=e.object[E].boxRaw.map((B,G)=>((r-1)*ge.object[E].boxRaw[G]+B)/r);ge.object[E]={...e.object[E],box:O,boxRaw:L}}if(e.persons){let E=e.persons;if(!ge.persons||E.length!==ge.persons.length)ge.persons=JSON.parse(JSON.stringify(E));else for(let O=0;O((r-1)*ge.persons[O].box[B]+L)/r)}e.gesture&&(ge.gesture=e.gesture),ge.width=e.width,ge.height=e.height;let s=te();return o5=ne.perfadd?o5+Math.round(s-a):Math.round(s-a),e.performance&&(ge.performance={...e.performance,interpolate:o5}),ge}var ma;async function l5(e){return!ma||ne.initial?ma=await Ce(e.segmentation.modelPath):e.debug&&K("cached model:",ma.modelUrl),ma}async function Jk(e,t){var r;if(ma||(ma=await l5(t)),!(ma!=null&&ma.executor)||!((r=ma==null?void 0:ma.inputs)!=null&&r[0].shape))return null;let a={};a.resize=me.resizeBilinear(e,[ma.inputs[0].shape?ma.inputs[0].shape[1]:0,ma.inputs[0].shape?ma.inputs[0].shape[2]:0],!1),a.norm=fe(a.resize,Oe.tf255),a.res=ma.execute(a.norm),a.squeeze=$e(a.res,[0]),[a.bgRaw,a.fgRaw]=Ta(a.squeeze,2),a.fg=vh(a.fgRaw),a.mul=ae(a.fg,Oe.tf255),a.expand=Gt(a.mul,2),a.output=me.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=$e(e),a.concat=at([a.input,a.output],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.output,"int32");break;default:n=ze(0)}return Object.keys(a).forEach(s=>Y(a[s])),n}var _0={};hr(_0,{distance:()=>u5,find:()=>a0e,similarity:()=>t0e});function u5(e,t,a={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let n=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-a)/(n-a);return Math.max(Math.min(s,1),0)};function t0e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=u5(e,t,a);return eI(n,a.order||2,a.min||0,a.max||1)}function a0e(e,t,a={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let n=Number.MAX_SAFE_INTEGER,r=-1;for(let i=0;iNp,validateModel:()=>B0});var tI=.005,tn={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function d5(e){for(let t of r5){let a=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),s=e.keypoints.findIndex(u=>u&&u.part===a[0]),i=e.keypoints.findIndex(u=>u&&u.part===a[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let u=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=u}}}function aI(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],a.pad=rr(e,tn.padding),a.resize=me.resizeBilinear(a.pad,[t,t]);let n=Ue(a.resize,"int32");return Object.keys(a).forEach(i=>Y(a[i])),n}function rI(e,t){e.keypoints=e.keypoints.filter(n=>n==null?void 0:n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+tn.padding[2][0]+tn.padding[2][1])/t[0]-tn.padding[2][0],n.position[1]*(t[1]+tn.padding[1][0]+tn.padding[1][1])/t[1]-tn.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=Er(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var Wt,F0=0,p5=Number.MAX_SAFE_INTEGER,$o={boxes:[],bodies:[],last:0};async function sI(e){var t;return ne.initial&&(Wt=null),Wt?e.debug&&K("cached model:",Wt.modelUrl):(e0(["size"],e),Wt=await Ce(e.body.modelPath)),F0=(Wt==null?void 0:Wt.executor)&&((t=Wt==null?void 0:Wt.inputs)==null?void 0:t[0].shape)?Wt.inputs[0].shape[2]:0,F0<64&&(F0=256),Wt}function r0e(e,t,a){let n=e[0][0],r=[],s=0;for(let d=0;dt.body.minConfidence){let c=[n[d][1],n[d][0]];r.push({score:Math.round(100*s)/100,part:M0[d],positionRaw:c,position:[Math.round((a.shape[2]||0)*c[0]),Math.round((a.shape[1]||0)*c[1])]})}s=r.reduce((d,c)=>c.score>d?c.score:d,0);let i=[],o=Er(r.map(d=>d.position),[a.shape[2],a.shape[1]]),l={};for(let[d,c]of Object.entries($0)){let p=[];for(let h=0;hg.part===c[h]),m=r.find(g=>g.part===c[h+1]);f&&m&&f.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&p.push([f.position,m.position])}l[d]=p}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return d5(u),i.push(u),i}function s0e(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let c=0;c<17;c++){let p=s[3*c+2];if(p>t.body.minConfidence){let h=[s[3*c+1],s[3*c+0]];o.push({part:M0[c],score:Math.round(100*p)/100,positionRaw:h,position:[Math.round((a.shape[2]||0)*h[0]),Math.round((a.shape[1]||0)*h[1])]})}}let l=Er(o.map(c=>c.position),[a.shape[2],a.shape[1]]),u={};for(let[c,p]of Object.entries($0)){let h=[];for(let f=0;fy.part===p[f]),g=o.find(y=>y.part===p[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}u[c]=h}let d={id:r,score:i,box:l.box,boxRaw:l.boxRaw,keypoints:[...o],annotations:u};d5(d),n.push(d)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function c5(e,t){var r;if(!(Wt!=null&&Wt.executor)||!((r=Wt==null?void 0:Wt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||($o.boxes.length=0),p5++;let a=(t.body.skipTime||0)>te()-$o.last,n=p5<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?$o.bodies:new Promise(async s=>{let i={};p5=0,i.input=nI(e,F0),i.res=Wt==null?void 0:Wt.execute(i.input),$o.last=te();let o=await i.res.array();$o.bodies=i.res.shape[2]===17?r0e(o,t,e):s0e(o,t,e);for(let l of $o.bodies)rI(l,[e.shape[2]||1,e.shape[1]||1]),aI(l.keypoints);Object.keys(i).forEach(l=>Y(i[l])),s($o.bodies)})}var Fn,P0=[],oI=0,h5=Number.MAX_SAFE_INTEGER,D0=0,O0=2.5;async function lI(e){if(!Fn||ne.initial){Fn=await Ce(e.object.modelPath);let t=Fn!=null&&Fn.executor?Object.values(Fn.modelSignature.inputs):void 0;D0=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",Fn.modelUrl);return Fn}async function i0e(e,t,a){var u,d;let n=0,r=[],s=D0;for(let c of[1,2,4]){let p=c*13,h=$e(e.find(x=>x.shape[1]===p**2&&(x.shape[2]||0)===pu.length)),f=await h.array(),m=$e(e.find(x=>x.shape[1]===p**2&&(x.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let S=(.5+Math.trunc(x%p))/p,C=(.5+Math.trunc(x/p))/p,N=A[x].map(B=>B*(p/c/s)),[_,$]=[S-O0/c*N[0],C-O0/c*N[1]],[M,I]=[S+O0/c*N[2]-_,C+O0/c*N[3]-$],E=[_,$,M,I];E=E.map(B=>Math.max(0,Math.min(B,1)));let O=[E[0]*t[0],E[1]*t[1],E[2]*t[0],E[3]*t[1]],L={id:n++,score:Math.round(100*w)/100,class:b+1,label:pu[b].label,box:O.map(B=>Math.trunc(B)),boxRaw:E};r.push(L)}}Y([h,m,g,y])}let i=r.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),o=r.map(c=>c.score),l=[];if(i&&i.length>0){let c=await me.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),Y(c)}return r=r.filter((c,p)=>l.includes(p)).sort((c,p)=>p.score-c.score),r}async function f5(e,t){if(!(Fn!=null&&Fn.executor))return[];let a=(t.object.skipTime||0)>te()-oI,n=h5<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&P0.length>0?(h5++,P0):(h5=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?P0:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=me.resizeBilinear(e,[D0,D0],!1),o=fe(i,Oe.tf255),l=si(o,[0,3,1,2]),u;t.object.enabled&&(u=Fn.execute(l)),oI=te();let d=await i0e(u,s,t);P0=d,Y([i,o,l,...u]),r(d)}))}var Cp=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],o0e=Cp.length,Tp=Cp.reduce((e,t,a)=>(e[t]=a,e),{}),l0e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],J5e=l0e.map(([e,t])=>[Tp[e],Tp[t]]),dI=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function pI(e){let t=e.reduce(({maxX:a,maxY:n,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(a,i),maxY:Math.max(n,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function cI(e,[t,a],[n,r]){let s=t/n,i=a/r,o=(u,d)=>({id:d,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/n,u.box[2]/r,u.box[3]/n],box:[Math.trunc(u.box[0]*i),Math.trunc(u.box[1]*s),Math.trunc(u.box[2]*i),Math.trunc(u.box[3]*s)],keypoints:u.keypoints.map(({score:c,part:p,position:h})=>({score:c,part:p,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/n,h.y/n]})),annotations:{}});return e.map((u,d)=>o(u,d))}var z0=class{constructor(t,a){le(this,"priorityQueue");le(this,"numberOfElements");le(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=a}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let a=2*t;if(aa?a:e}function hI(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function A5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var an,d0e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],L0=1,vu=16,p0e=50**2;function fI(e,t,a,n,r,s,i=2){let o=y=>({y:s.get(y.y,y.x,e),x:s.get(y.y,y.x,s.shape[2]/2+e)}),l=(y,A,x)=>({y:y5(Math.round(y.y/vu),0,A-1),x:y5(Math.round(y.x/vu),0,x-1)}),[u,d]=n.shape,c=l(t.position,u,d),p=o(c),f=A5(t.position,p);for(let y=0;y[Tp[p],Tp[h]]),i=s.map(([,p])=>p),o=s.map(([p])=>p),l=t.shape[2],u=i.length,d=new Array(l),c=g5(e.part,vu,a);d[e.part.id]={score:e.score,part:Cp[e.part.id],position:c};for(let p=u-1;p>=0;--p){let h=i[p],f=o[p];d[h]&&!d[f]&&(d[f]=fI(p,d[h],f,t,a,r))}for(let p=0;pt){o=!1;break}if(!o)break}return o}function f0e(e,t){let[a,n,r]=t.shape,s=new z0(a*n*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[n])==null?void 0:i.position;return s?hI(a,t,s.y,s.x)<=p0e:!1})}function m0e(e,t){return t.reduce((n,{position:r,score:s},i)=>(mI(e,r,i)||(n+=s),n),0)/t.length}function g0e(e,t,a,n,r,s){let i=[],o=f0e(s,t);for(;i.lengthh.score>s);let c=m0e(i,d),p=pI(d);c>s&&i.push({keypoints:d,box:p,score:Math.round(100*c)/100})}return i}async function x5(e,t){if(!(an!=null&&an.executor))return[];let a=Ee(()=>{if(!an.inputs[0].shape)return[];let i=me.resizeBilinear(e,[an.inputs[0].shape[2],an.inputs[0].shape[1]]),o=he(fe(Ue(i,"float32"),127.5),1),u=an.execute(o,d0e).map(d=>$e(d,[0]));return u[1]=Da(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)Y(i);let r=g0e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return an.inputs[0].shape?cI(r,[e.shape[1],e.shape[2]],[an.inputs[0].shape[2],an.inputs[0].shape[1]]):[]}async function gI(e){return!an||ne.initial?an=await Ce(e.body.modelPath):e.debug&&K("cached model:",an.modelUrl),an}var lr,y0e=["fgr","pha","r1o","r2o","r3o","r4o"],Vt={},v5=0;function xI(e){Y([Vt.r1i,Vt.r2i,Vt.r3i,Vt.r4i,Vt.downsample_ratio]),Vt.r1i=ze(0),Vt.r2i=ze(0),Vt.r3i=ze(0),Vt.r4i=ze(0),v5=e.segmentation.ratio||.5,Vt.downsample_ratio=ze(v5)}async function w5(e){return!lr||ne.initial?lr=await Ce(e.segmentation.modelPath):e.debug&&K("cached model:",lr.modelUrl),xI(e),lr}var AI=e=>Ee(()=>{let t=$e(e,[0]),a=ae(t,Oe.tf255);return Ue(a,"int32")});function b5(e,t){let a=e?AI(e):nr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?AI(t):nr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=at([a,n],-1);return Y([a,n]),r}function A0e(e){return Ee(()=>{let t={};return t.unstack=Ta(e,-1),t.concat=at(t.unstack,1),t.split=ka(t.concat,4,1),t.stack=at(t.split,2),t.squeeze=$e(t.stack,[0]),t.expand=Gt(t.squeeze,-1),t.add=xe(t.expand,1),t.mul=ae(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=Vr(t.cast,[1,1,3]),t.alpha=nr([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),at([t.tile,t.alpha],-1)})}async function bI(e,t){if(lr||(lr=await w5(t)),!(lr!=null&&lr.executor))return null;Vt.src=fe(e,255),v5!==t.segmentation.ratio&&xI(t);let[a,n,r,s,i,o]=await lr.executeAsync(Vt,y0e),l;switch(t.segmentation.mode||"default"){case"default":l=b5(a,n);break;case"alpha":l=b5(null,n);break;case"foreground":l=b5(a,null);break;case"state":l=A0e(r);break;default:l=ze(0)}return Y([Vt.src,a,n,Vt.r1i,Vt.r2i,Vt.r3i,Vt.r4i]),[Vt.r1i,Vt.r2i,Vt.r3i,Vt.r4i]=[r,s,i,o],l}var ga;async function k5(e){return!ga||ne.initial?ga=await Ce(e.segmentation.modelPath):e.debug&&K("cached model:",ga.modelUrl),ga}async function wI(e,t){var r;if(ga||(ga=await k5(t)),!(ga!=null&&ga.executor)||!((r=ga==null?void 0:ga.inputs)!=null&&r[0].shape))return null;let a={};a.resize=me.resizeBilinear(e,[ga.inputs[0].shape?ga.inputs[0].shape[1]:0,ga.inputs[0].shape?ga.inputs[0].shape[2]:0],!1),a.norm=fe(a.resize,Oe.tf255),a.res=ga.execute(a.norm),a.squeeze=$e(a.res,[0]),a.alpha=me.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=ae(a.alpha,Oe.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=$e(e),a.concat=at([a.input,a.mul],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.mul,"int32");break;default:n=ze(0)}return Object.keys(a).forEach(s=>Y(a[s])),n}function B0(e,t,a){var u,d;if(!t||!((u=e==null?void 0:e.config)!=null&&u.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],i=[],o=t.modelUrl,l=t.executor;if((d=l==null?void 0:l.graph)!=null&&d.nodes)for(let c of Object.values(l.graph.nodes)){let p=c.op.toLowerCase();s.includes(p)||s.push(p)}else!l&&e.config.debug&&K("model not loaded",a);for(let c of s)!n.includes(c)&&!r.includes(c)&&!e.env.kernels.includes(c)&&!e.env.kernels.includes(c.replace("_",""))&&!e.env.kernels.includes(c.replace("native",""))&&!e.env.kernels.includes(c.replace("v2",""))&&i.push(c);return e.config.debug&&i.length>0&&K("model validation failed:",a,i),i.length>0?{name:a,missing:i,ops:s,url:o}:null}var Np=class{constructor(t){le(this,"instance");le(this,"models");this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ha))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ha).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ha)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(){var a,n,r,s,i,o,l,u,d,c,p,h,f,m,g,y,A,x,b,w,S,C,N,_,$,M,I;ne.initial&&this.reset();let t={};t.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?yw(this.instance.config):null,t.antispoof=this.instance.config.face.enabled&&((a=this.instance.config.face.antispoof)==null?void 0:a.enabled)&&!this.models.antispoof?Vw(this.instance.config):null,t.liveness=this.instance.config.face.enabled&&((n=this.instance.config.face.liveness)==null?void 0:n.enabled)&&!this.models.liveness?Hw(this.instance.config):null,t.faceres=this.instance.config.face.enabled&&((r=this.instance.config.face.description)==null?void 0:r.enabled)&&!this.models.faceres?Dw(this.instance.config):null,t.emotion=this.instance.config.face.enabled&&((s=this.instance.config.face.emotion)==null?void 0:s.enabled)&&!this.models.emotion?_w(this.instance.config):null,t.iris=this.instance.config.face.enabled&&((i=this.instance.config.face.iris)==null?void 0:i.enabled)&&!((o=this.instance.config.face.attention)!=null&&o.enabled)&&!this.models.iris?kw(this.instance.config):null,t.facemesh=this.instance.config.face.enabled&&((l=this.instance.config.face.mesh)==null?void 0:l.enabled)&&!this.models.facemesh?Nw(this.instance.config):null,t.gear=this.instance.config.face.enabled&&((u=this.instance.config.face.gear)==null?void 0:u.enabled)&&!this.models.gear?Zw(this.instance.config):null,t.ssrnetage=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)==null?void 0:d.enabled)&&!this.models.ssrnetage?ek(this.instance.config):null,t.ssrnetgender=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)==null?void 0:c.enabled)&&!this.models.ssrnetgender?rk(this.instance.config):null,t.mobilefacenet=this.instance.config.face.enabled&&((p=this.instance.config.face.mobilefacenet)==null?void 0:p.enabled)&&!this.models.mobilefacenet?uk(this.instance.config):null,t.insightface=this.instance.config.face.enabled&&((h=this.instance.config.face.insightface)==null?void 0:h.enabled)&&!this.models.insightface?fk(this.instance.config):null,t.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)==null?void 0:f.includes("blazepose"))?Q9(this.instance.config):null,t.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?J9(this.instance.config):null,t.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((m=this.instance.config.body.modelPath)==null?void 0:m.includes("efficientpose"))?sw(this.instance.config):null,t.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)==null?void 0:g.includes("movenet"))?sI(this.instance.config):null,t.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((y=this.instance.config.body.modelPath)==null?void 0:y.includes("posenet"))?gI(this.instance.config):null,t.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((x=(A=this.instance.config.hand.detector)==null?void 0:A.modelPath)==null?void 0:x.includes("handtrack"))?Xk(this.instance.config):null,t.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((w=(b=this.instance.config.hand.detector)==null?void 0:b.modelPath)==null?void 0:w.includes("handtrack"))?Kk(this.instance.config):null,(C=(S=this.instance.config.hand.detector)==null?void 0:S.modelPath)!=null&&C.includes("handdetect")&&([t.handpose,t.handskeleton]=this.models.handpose?[null,null]:await Gk(this.instance.config)),t.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((N=this.instance.config.object.modelPath)==null?void 0:N.includes("centernet"))?aw(this.instance.config):null,t.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((_=this.instance.config.object.modelPath)==null?void 0:_.includes("nanodet"))?lI(this.instance.config):null,t.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)==null?void 0:$.includes("selfie"))?k5(this.instance.config):null,t.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((M=this.instance.config.segmentation.modelPath)==null?void 0:M.includes("meet"))?l5(this.instance.config):null,t.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((I=this.instance.config.segmentation.modelPath)==null?void 0:I.includes("rvm"))?w5(this.instance.config):null,await Promise.all([...Object.values(t)]);for(let E of Object.keys(t))this.models[E]=t[E]||this.models[E]||null}list(){let t=Object.keys(this.models).map(a=>{var n;return{name:a,loaded:this.models[a]!==null,size:0,url:this.models[a]?(n=this.models[a])==null?void 0:n.modelUrl:null}});for(let a of t){let n=Object.keys(ha).find(r=>r.startsWith(a.name));!n||(a.size=ha[n].sizeLoadedWeights,a.url=ha[n].url)}return t}loaded(){return this.list().filter(n=>n.loaded).map(n=>n.name)}validate(){let t=[];for(let a of Object.keys(this.models)){let n=this.models[a];if(!n)continue;let r=B0(this.instance,n,a);r&&t.push(r)}return t}};function II(e,t,a,n,r){var o,l,u,d,c,p;let s=0,i=[];for(let h of e){let f={id:s++,face:h,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)h.box[0]>b.box[0]&&h.box[0]b.box[1]&&h.box[1]+h.box[3]f.body.box[0]&&b.box[0]+b.box[2]f.body.box[1]&&b.box[1]+b.box[3]f.body.box[0]&&b.box[1]+b.box[3]>f.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(m.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};y(f.face.box),y((d=f.body)==null?void 0:d.box),y((c=f.hands.left)==null?void 0:c.box),y((p=f.hands.right)==null?void 0:p.box);let A=Math.min(...m),x=Math.min(...g);f.box=[A,x,Math.max(...m)-A,Math.max(...g)-x],(r==null?void 0:r[1])&&(r==null?void 0:r[2])&&(f.boxRaw=[f.box[0]/r[2],f.box[1]/r[1],f.box[2]/r[2],f.box[3]/r[1]]),i.push(f)}return i}var W0=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var Y3=0;function Zce(e,t,a){let n=Ct($t,a);if(!t||!e)return;let r=gn(e);if(!!r){r.lineJoin="round",r.font=n.font;for(let s=0;se5,kpt:()=>Q3});var Q3=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],e5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var xn,Eo=224,f9,Qce=5,r0=[8,16,32,32,32];function ehe(){let e=[],t=0;for(;ta.x)),y:Ht(e.map(a=>a.y))}}async function m9(e){if(ne.initial&&(xn=null),!xn&&e.body.detector&&e.body.detector.modelPath){xn=await Ee(e.body.detector.modelPath);let t=xn!=null&&xn.executor?Object.values(xn.modelSignature.inputs):void 0;Eo=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&xn&&K("cached model:",xn.modelUrl);return ehe(),xn}var h9=[5,5];function the(e,t){return $e(()=>{let a=ka(e,12,1),n=_e(a[0]),r=_e(a[1]),s=_e(a[2]),i=_e(a[3]);n=be(me(n,Eo),t.x),r=be(me(r,Eo),t.y),s=ae(me(s,Eo),h9[0]),i=ae(me(i,Eo),h9[1]);let o=fe(n,me(s,2)),l=fe(r,me(i,2)),u=be(o,s),p=be(l,i);return sa([o,l,u,p],1)})}async function ahe(e,t,a,n){var u,p;let r=[],s={};s.boxes=the(e,f9),s.scores=Da(t),s.nms=await ge.nonMaxSuppressionAsync(s.boxes,s.scores,1,((u=a.body.detector)==null?void 0:u.minConfidence)||.1,((p=a.body.detector)==null?void 0:p.iouThreshold)||.1);let i=await s.nms.data(),o=await s.scores.data(),l=await s.boxes.array();for(let c of Array.from(i)){let d=o[c],h=l[c],f=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],m={score:d,boxRaw:h,box:f};r.push(m)}return Object.keys(s).forEach(c=>Y(s[c])),r}async function g9(e,t,a){let n={};n.res=xn==null?void 0:xn.execute(e,["Identity"]),n.logitsRaw=Pe(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=Pe(n.res,[0,0,1],[1,-1,-1]),n.logits=_e(n.logitsRaw),n.boxes=_e(n.boxesRaw);let r=await ahe(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>Y(n[s])),r}function Cr(e,t=[1,1]){let a=[e.map(o=>o[0]),e.map(o=>o[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function x9(e,t=[1,1]){let a=[e.map(u=>u[0]),e.map(u=>u[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],i=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function s0(e,t){let a=[e[2]*t,e[3]*t];return[e[0]-(a[0]-e[2])/2,e[1]-(a[1]-e[3])/2,a[0],a[1]]}var Ba,a5=256,t5=Number.MAX_SAFE_INTEGER,nhe={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},o0=[],ps=[[0,0],[0,0],[0,0],[0,0]],A9=0,y9=e=>1-1/(1+Math.exp(e)),v9=e=>m9(e);async function w9(e){if(ne.initial&&(Ba=null),Ba)e.debug&&K("cached model:",Ba.modelUrl);else{Ba=await Ee(e.body.modelPath);let t=Ba!=null&&Ba.executor?Object.values(Ba.modelSignature.inputs):void 0;a5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ba}function b9(e,t,a){var s,i;let n={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((i=e==null?void 0:e.shape)!=null&&i[2]))return e;let r;if(a&&(n.cropped=ge.cropAndResize(e,[a],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let o=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];ps=[[0,0],o,l,[0,0]],n.pad=nr(n.cropped||e,ps),n.resize=ge.resizeBilinear(n.pad,[t,t]),r=me(n.resize,ze.tf255)}else e.shape[1]!==t?(n.resize=ge.resizeBilinear(n.cropped||e,[t,t]),r=me(n.resize,ze.tf255)):r=me(n.cropped||e,ze.tf255);return Object.keys(n).forEach(o=>Y(n[o])),r}function rhe(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+ps[2][0]+ps[2][1])/t[0]-ps[2][0]),Math.trunc(n.position[1]*(t[1]+ps[1][0]+ps[1][1])/t[1]-ps[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(a){let n=a[2]-a[0],r=a[3]-a[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+a[1],s.positionRaw[1]/n+a[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function she(e){let t=e.find(o=>o.part==="leftPalm"),a=e.find(o=>o.part==="leftWrist"),n=e.find(o=>o.part==="leftIndex");t.position[2]=((a.position[2]||0)+(n.position[2]||0))/2;let r=e.find(o=>o.part==="rightPalm"),s=e.find(o=>o.part==="rightWrist"),i=e.find(o=>o.part==="rightIndex");r.position[2]=((s.position[2]||0)+(i.position[2]||0))/2}async function ihe(e,t,a){if(!(Ba!=null&&Ba.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ba==null?void 0:Ba.execute(e,nhe.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(f=>Y(n[f]));let o=[],l=5;for(let f=0;ff.position),c=Cr(p,[a[0],a[1]]),d={};for(let[f,m]of Object.entries(e5)){let g=[];for(let x=0;xb.part===m[x]),y=u.find(b=>b.part===m[x+1]);A&&y&&g.push([A.position,y.position])}d[f]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:d}}async function n5(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>te()-A9,r=t5<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&o0!==null)t5++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=b9(e,224);l=await g9(u,t,a),Y(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uY(n[u])),r}async function i5(e,t){if(!(Wa!=null&&Wa.executor))return[];let a=(t.object.skipTime||0)>te()-I9,n=s5<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&r5.length>0?(s5++,r5):(s5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=ge.resizeBilinear(e,[Ro,Ro]),o=t.object.enabled?Wa==null?void 0:Wa.execute(i,["tower_0/detections"]):null;I9=te(),Y(i);let l=await ohe(o,s,t);r5=l,r(l)}))}var l0={};cr(l0,{connected:()=>l5,kpt:()=>o5});var o5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],l5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Nt,C9=0,Ra={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},u5=Number.MAX_SAFE_INTEGER;async function N9(e){return ne.initial&&(Nt=null),Nt?e.debug&&K("cached model:",Nt.modelUrl):Nt=await Ee(e.body.modelPath),Nt}async function lhe(e,t){let[a,n]=e.shape,r=J(e,[n*a]),s=pa(r,0),i=(await s.data())[0];if(i>t){let o=tr(r,0),l=ru(o,a),u=(await l.data())[0],p=me(o,a),c=(await p.data())[0];return Y([r,s,o,l,p]),[u,c,i]}return Y([r,s]),[0,0,i]}async function d5(e,t){if(!(Nt!=null&&Nt.executor)||!(Nt!=null&&Nt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>te()-C9,n=u5<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ra.keypoints).length>0?(u5++,[Ra]):(u5=0,new Promise(async r=>{let s=$e(()=>{var f,m;let c=ge.resizeBilinear(e,[((f=Nt==null?void 0:Nt.inputs[0].shape)==null?void 0:f[2])||0,((m=Nt==null?void 0:Nt.inputs[0].shape)==null?void 0:m[1])||0],!1),d=ae(c,ze.tf2);return fe(d,ze.tf1)}),i;if(t.body.enabled&&(i=Nt==null?void 0:Nt.execute(s)),C9=te(),Y(s),i){Ra.keypoints.length=0;let c=_e(i);Y(i);let d=Ta(c,2);Y(c);for(let h=0;h(t.body.minConfidence||0)&&Ra.keypoints.push({score:Math.round(100*g)/100,part:o5[h],positionRaw:[f/Nt.inputs[0].shape[2],m/Nt.inputs[0].shape[1]],position:[Math.round(e.shape[2]*f/Nt.inputs[0].shape[2]),Math.round(e.shape[1]*m/Nt.inputs[0].shape[1])]})}d.forEach(h=>Y(h))}Ra.score=Ra.keypoints.reduce((c,d)=>d.score>c?d.score:c,0);let o=Ra.keypoints.map(c=>c.position[0]),l=Ra.keypoints.map(c=>c.position[1]);Ra.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ra.keypoints.map(c=>c.positionRaw[0]),p=Ra.keypoints.map(c=>c.positionRaw[1]);Ra.boxRaw=[Math.min(...u),Math.min(...p),Math.max(...u)-Math.min(...u),Math.max(...p)-Math.min(...p)];for(let[c,d]of Object.entries(l5)){let h=[];for(let f=0;fx.part===d[f]),g=Ra.keypoints.find(x=>x.part===d[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}Ra.annotations[c]=h}r([Ra])}))}var bu=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],u0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],d0=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],p0=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],$9=(e,t)=>{let a=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],n=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:a,endPoint:n,landmarks:e.landmarks,confidence:e.confidence}},p5=(e,t,a)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],i=ge.cropAndResize(t,[s],[0],a),o=me(i,ze.tf255);return Y(i),o},c0=(e,t)=>{let a=u0(e),n=bu(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[a[0]-r[0],a[1]-r[1]],endPoint:[a[0]+r[0],a[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},h0=e=>{let t=u0(e),a=bu(e),n=Math.max(...a)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence}},_9=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...a)],endPoint:[Math.max(...t),Math.max(...a)],landmarks:e}},c5=[[1,0,0],[0,1,0],[0,0,1]],uhe=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),dhe=(e,t)=>uhe(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var R9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Mo=(e,t)=>{let a=0;for(let n=0;n{let a=[];for(let n=0;n{let a=[],n=e.length;for(let r=0;r{let a=Math.cos(e),n=Math.sin(e),r=[[a,-n,0],[n,a,0],[0,0,1]],s=R9(t[0],t[1]),i=M9(s,r),o=R9(-t[0],-t[1]);return M9(i,o)},che=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-Mo(t[0],a),-Mo(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},hhe=(e,t)=>[Mo(e,t[0]),Mo(e,t[1])];function F9(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},a=[];for(let n=0;n[s[0]/r*(h[0]-r/2),s[1]/r*(h[1]-r/2),h[2]||0]),o=a&&a!==0&&Math.abs(a)>.2,l=o?P9(a,[0,0]):c5,u=o?i.map(h=>[...hhe(h,l),h[2]]):i,p=o?che(n):c5,c=u0(t),d=[Mo(c,p[0]),Mo(c,p[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2]||0)])}function D9(e,t,a,n){let r=t.landmarks.length>=X3.count?X3.symmetryLine:So.symmetryLine,s=0,i=c5,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=dhe(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=u0(t),p=[u[0]/a.shape[2],u[1]/a.shape[1]],c=ge.rotateWithOffset(a,s,0,[p[0],p[1]]);i=P9(-s,u),o=p5(t,c,[n,n]),Y(c)}else o=p5(t,a,[n,n]);else o=p5(t,a,[n,n]);return[s,i,o]}var fhe=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...a)+(Math.max(...a)-Math.min(...a))/2]},z9=(e,t)=>{let a=fhe(e),n=bu(t);return{startPoint:[a[0]-n[0]/2,a[1]-n[1]/2],endPoint:[a[0]+n[0]/2,a[1]+n[1]/2]}};var L9=6,mhe=1.4,zn,f5=null,cs=0,vu=null,wu=()=>cs;async function B9(e){var t;return ne.initial&&(zn=null),zn?e.debug&&K("cached model:",zn.modelUrl):zn=await Ee((t=e.face.detector)==null?void 0:t.modelPath),cs=zn.executor&&zn.inputs[0].shape?zn.inputs[0].shape[2]:256,vu=Fe(cs,"int32"),f5=Xn(F9(cs)),zn}function ghe(e){if(!f5||!vu)return hn([0,0]);let t={};t.boxStarts=Pe(e,[0,1],[-1,2]),t.centers=be(t.boxStarts,f5),t.boxSizes=Pe(e,[0,3],[-1,2]),t.boxSizesNormalized=me(t.boxSizes,vu),t.centersNormalized=me(t.centers,vu),t.halfBoxSize=me(t.boxSizesNormalized,ze.tf2),t.starts=fe(t.centersNormalized,t.halfBoxSize),t.ends=be(t.centersNormalized,t.halfBoxSize),t.startNormalized=ae(t.starts,vu),t.endNormalized=ae(t.ends,vu);let a=nu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>Y(t[n])),a}async function W9(e,t){var o,l,u,p;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=ge.resizeBilinear(e,[cs,cs]),a.div=me(a.resized,ze.tf127),a.normalized=fe(a.div,ze.tf05);let n=zn==null?void 0:zn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let c=n.sort((d,h)=>d.size-h.size);a.concat384=at([c[0],c[2]],2),a.concat512=at([c[1],c[3]],2),a.concat=at([a.concat512,a.concat384],1),a.batch=_e(a.concat,[0])}else Array.isArray(n)?a.batch=_e(n[0]):a.batch=_e(n);Y(n),a.boxes=ghe(a.batch),a.logits=Pe(a.batch,[0,0],[-1,1]),a.sigmoid=Da(a.logits),a.scores=_e(a.sigmoid),a.nms=await ge.nonMaxSuppressionAsync(a.boxes,a.scores,((o=t.face.detector)==null?void 0:o.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await a.nms.array(),s=[],i=await a.scores.data();for(let c=0;c(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let h={};h.bbox=Pe(a.boxes,[r[c],0],[1,-1]),h.slice=Pe(a.batch,[r[c],L9-1],[1,-1]),h.squeeze=_e(h.slice),h.landmarks=J(h.squeeze,[L9,-1]);let f=await h.bbox.data(),m={startPoint:[f[0],f[1]],endPoint:[f[2],f[3]],landmarks:await h.landmarks.array(),confidence:d},g=$9(m,[(e.shape[2]||0)/cs,(e.shape[1]||0)/cs]),x=c0(g,t.face.scale||mhe),A=h0(x);s.push(A),Object.keys(h).forEach(y=>Y(h[y]))}}return Object.keys(a).forEach(c=>Y(a[c])),s}var Ja,hs=0,xhe=2.3,m5=En.leftEyeLower0,g5=En.rightEyeLower0,ku={leftBounds:[m5[0],m5[m5.length-1]],rightBounds:[g5[0],g5[g5.length-1]]},Iu={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function j9(e){var t,a;return ne.initial&&(Ja=null),Ja?e.debug&&K("cached model:",Ja.modelUrl):Ja=await Ee((t=e.face.iris)==null?void 0:t.modelPath),hs=(Ja==null?void 0:Ja.executor)&&((a=Ja.inputs)==null?void 0:a[0].shape)?Ja.inputs[0].shape[2]:0,hs===-1&&(hs=64),Ja}function f0(e,t,a,n){for(let r=0;r{let t=e[ku.leftBounds[0]][2],a=e[ku.rightBounds[0]][2];return t-a},U9=(e,t,a,n,r,s=!1)=>{let i=h0(c0(_9([e[a],e[n]]),xhe)),o=bu(i),l=ge.cropAndResize(t,[[i.startPoint[1]/r,i.startPoint[0]/r,i.endPoint[1]/r,i.endPoint[0]/r]],[0],[hs,hs]);if(s&&ne.kernels.includes("flipleftright")){let u=ge.flipLeftRight(l);Y(l),l=u}return{box:i,boxSize:o,crop:l}},G9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[En[`${a}EyeUpper0`][Iu.upperCenter]][2],r=e[En[`${a}EyeLower0`][Iu.lowerCenter]][2],s=(n+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=n:o===4&&(l=r),[i[0],i[1],l]})};async function q9(e,t,a){if(!(Ja!=null&&Ja.executor))return e;let{box:n,boxSize:r,crop:s}=U9(e,t,ku.leftBounds[0],ku.leftBounds[1],a,!0),{box:i,boxSize:o,crop:l}=U9(e,t,ku.rightBounds[0],ku.rightBounds[1],a,!0),u=at([s,l]);Y(s),Y(l);let p=Ja.execute(u);Y(u);let c=await p.data();Y(p);let d=c.slice(0,Iu.numCoordinates*3),{rawCoords:h,iris:f}=G9(d,n,r,!0),m=c.slice(Iu.numCoordinates*3),{rawCoords:g,iris:x}=G9(m,i,o,!1),A=Ahe(e);Math.abs(A)<30?(f0(e,h,"left",null),f0(e,g,"right",null)):A<1?f0(e,h,"left",["EyeUpper0","EyeLower0"]):f0(e,g,"right",["EyeUpper0","EyeLower0"]);let y=H9(e,f,"left"),b=H9(e,x,"right");return e.concat(y).concat(b)}async function K9(e,t){var s,i,o,l,u,p,c,d,h,f;let a={lips:await((i=(s=t.filter(m=>m.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(m=>m.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((p=(u=t.filter(m=>m.size===142))==null?void 0:u[0])==null?void 0:p.data()),irisR:await((d=(c=t.filter(m=>m.size===10))==null?void 0:c[1])==null?void 0:d.data()),eyeR:await((f=(h=t.filter(m=>m.size===142))==null?void 0:h[1])==null?void 0:f.data())};for(let m of Object.values(a))if(!m)return e;let n=Co.reduce((m,g)=>m+=e[g][2],0)/Co.length;for(let m=0;mm+=e[g][2],0)/No.length;for(let m=0;mte()-sr.timestamp,n=sr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||sr.boxes.length===0?(sr.boxes=await W9(e,t),sr.timestamp=te(),sr.skipped=0):sr.skipped++;let r=[],s=[],i=0,o=wp;for(let A=0;A$.shape[$.shape.length-1]===1).data();if(S.faceScore=Math.round(100*_[0])/100,S.faceScore<(((f=t.face.detector)==null?void 0:f.minConfidence)||1)){if(y.confidence=S.faceScore,t.face.mesh.keepInvalid){S.box=d0(y,e),S.boxRaw=p0(y,e),S.score=S.boxScore,S.mesh=y.landmarks.map($=>[(y.startPoint[0]+y.endPoint[0])/2+(y.endPoint[0]+y.startPoint[0])*$[0]/wu(),(y.startPoint[1]+y.endPoint[1])/2+(y.endPoint[1]+y.startPoint[1])*$[1]/wu()]),S.meshRaw=S.mesh.map($=>[$[0]/(e.shape[2]||1),$[1]/(e.shape[1]||1),($[2]||0)/o]);for(let $ of Object.keys(So))S.annotations[$]=[S.mesh[So[$]]]}}else{let $=C.find(O=>O.shape[O.shape.length-1]===1404),M=J($,[-1,3]),I=await M.array();Y(M),(m=t.face.attention)!=null&&m.enabled?I=await K9(I,C):(g=t.face.iris)!=null&&g.enabled&&(I=await q9(I,S.tensor,wp)),S.mesh=O9(I,y,b,w,wp),S.meshRaw=S.mesh.map(O=>[O[0]/(e.shape[2]||0),O[1]/(e.shape[1]||0),(O[2]||0)/o]);for(let O of Object.keys(En))S.annotations[O]=En[O].map(L=>S.mesh[L]);S.score=S.faceScore;let N={...z9(S.mesh,y),confidence:y.confidence,landmarks:y.landmarks};S.box=d0(N,e),S.boxRaw=p0(N,e),s.push(N)}Y(C)}else{S.box=d0(y,e),S.boxRaw=p0(y,e),S.score=S.boxScore,S.mesh=y.landmarks.map(C=>[(y.startPoint[0]+y.endPoint[0])/2+(y.endPoint[0]+y.startPoint[0])*C[0]/wu(),(y.startPoint[1]+y.endPoint[1])/2+(y.endPoint[1]+y.startPoint[1])*C[1]/wu()]),S.meshRaw=S.mesh.map(C=>[C[0]/(e.shape[2]||0),C[1]/(e.shape[1]||0),(C[2]||0)/o]);for(let C of Object.keys(So))S.annotations[C]=[S.mesh[So[C]]]}S.score>(((x=t.face.detector)==null?void 0:x.minConfidence)||1)?r.push(S):Y(S.tensor)}return sr.boxes=s,r}async function Y9(e){var t,a,n,r,s,i;return ne.initial&&(wt=null),((t=e.face.attention)==null?void 0:t.enabled)&&(wt==null?void 0:wt.signature)&&Object.keys(((a=wt==null?void 0:wt.signature)==null?void 0:a.outputs)||{}).length<6&&(wt=null),wt?e.debug&&K("cached model:",wt.modelUrl):(n=e.face.attention)!=null&&n.enabled?wt=await Ee(e.face.attention.modelPath):wt=await Ee((r=e.face.mesh)==null?void 0:r.modelPath),wp=wt.executor&&((s=wt==null?void 0:wt.inputs)==null?void 0:s[0].shape)?(i=wt==null?void 0:wt.inputs)==null?void 0:i[0].shape[2]:256,wt}var J9=To,Q9=bp;var bhe=["angry","disgust","fear","happy","sad","surprise","neutral"],An,m0=[],ew=0,tw=0,A5=Number.MAX_SAFE_INTEGER;async function aw(e){var t;return ne.initial&&(An=null),An?e.debug&&K("cached model:",An.modelUrl):An=await Ee((t=e.face.emotion)==null?void 0:t.modelPath),An}async function y5(e,t,a,n){var i,o;if(!An)return[];let r=A5<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>te()-tw;return t.skipAllowed&&s&&r&&ew===n&&m0[a]&&m0[a].length>0?(A5++,m0[a]):(A5=0,new Promise(async l=>{var p;let u=[];if((p=t.face.emotion)!=null&&p.enabled){let c={},d=An!=null&&An.inputs[0].shape?An.inputs[0].shape[2]:0;c.resize=ge.resizeBilinear(e,[d,d],!1),c.channels=ae(c.resize,ze.rgb),c.grayscale=tt(c.channels,3,!0),c.grayscaleSub=fe(c.grayscale,ze.tf05),c.grayscaleMul=ae(c.grayscaleSub,ze.tf2),c.emotion=An==null?void 0:An.execute(c.grayscaleMul),tw=te();let h=await c.emotion.data();for(let f=0;f(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*h[f])/100),emotion:bhe[f]});u.sort((f,m)=>m.score-f.score),Object.keys(c).forEach(f=>Y(c[f]))}m0[a]=u,ew=n,l(u)}))}var fa,fs=[],rw=0,sw=0,b5=Number.MAX_SAFE_INTEGER;async function iw(e){var t;return ne.initial&&(fa=null),fa?e.debug&&K("cached model:",fa.modelUrl):fa=await Ee((t=e.face.description)==null?void 0:t.modelPath),fa}function vhe(e){let t=e.image||e.tensor||e;if(!(fa!=null&&fa.inputs[0].shape))return t;let a=ge.resizeBilinear(t,[fa.inputs[0].shape[2],fa.inputs[0].shape[1]],!1),n=ae(a,ze.tf255);return Y(a),n}async function v5(e,t,a,n){var o,l,u,p;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(fa!=null&&fa.executor))return r;let s=b5<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>te()-rw;return t.skipAllowed&&s&&i&&sw===n&&((u=fs==null?void 0:fs[a])==null?void 0:u.age)>0&&((p=fs==null?void 0:fs[a])==null?void 0:p.genderScore)>0?(b5++,fs[a]):(b5=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=vhe(e),f=fa==null?void 0:fa.execute(h);rw=te(),Y(h);let g=await f.find(E=>E.shape[1]===1).data(),x=Math.trunc(200*Math.abs(g[0]-.5))/100;x>(t.face.description.minConfidence||0)&&(r.gender=g[0]<=.5?"female":"male",r.genderScore=Math.min(.99,x));let A=tr(f.find(E=>E.shape[1]===100),1),y=(await A.data())[0];Y(A);let w=await f.find(E=>E.shape[1]===100).data();r.age=Math.round(w[y-1]>w[y+1]?10*y-100*w[y-1]:10*y+100*w[y+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:fa,result:f});let S=f.find(E=>E.shape[1]===1024),C=S?await S.data():[];r.descriptor=Array.from(C),f.forEach(E=>Y(E))}fs[a]=r,sw=n,c(r)}))}var Su=.1,w5=.5;function whe(e,t,a){let n=!1,r=a.length-1;for(let s=0;st!=a[r].y>t&&e<(a[r].x-a[s].x)*(t-a[s].y)/(a[r].y-a[s].y)+a[s].x&&(n=!n);return n}async function lw(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,a=e.tensor.shape[1]||0,n=await e.tensor.buffer(),r=[];for(let i of En.silhouette)r.push({x:(e.mesh[i][0]-e.box[0])/e.box[2],y:(e.mesh[i][1]-e.box[1])/e.box[3]});Su&&Su>0&&(r=r.map(i=>({x:i.x>.5?i.x+Su:i.x-Su,y:i.y>.5?i.y+Su:i.y-Su})));for(let i=0;ite()-dw,s=k5<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&uw===n&&g0[a]?(k5++,g0[a]):(k5=0,new Promise(async l=>{let u=ge.resizeBilinear(e,[ea!=null&&ea.inputs[0].shape?ea.inputs[0].shape[2]:0,ea!=null&&ea.inputs[0].shape?ea.inputs[0].shape[1]:0],!1),p=ea==null?void 0:ea.execute(u),c=(await p.data())[0];g0[a]=Math.round(100*c)/100,uw=n,dw=te(),Y([u,p]),l(g0[a])}))}var ta,x0=[],S5=Number.MAX_SAFE_INTEGER,hw=0,fw=0;async function mw(e){var t;return ne.initial&&(ta=null),ta?e.debug&&K("cached model:",ta.modelUrl):ta=await Ee((t=e.face.liveness)==null?void 0:t.modelPath),ta}async function T5(e,t,a,n){var i,o;if(!(ta!=null&&ta.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>te()-fw,s=S5<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&hw===n&&x0[a]?(S5++,x0[a]):(S5=0,new Promise(async l=>{let u=ge.resizeBilinear(e,[ta!=null&&ta.inputs[0].shape?ta.inputs[0].shape[2]:0,ta!=null&&ta.inputs[0].shape?ta.inputs[0].shape[1]:0],!1),p=ta==null?void 0:ta.execute(u),c=(await p.data())[0];x0[a]=Math.round(100*c)/100,hw=n,fw=te(),Y([u,p]),l(x0[a])}))}var Rn,C5=[],Ihe=["white","black","asian","indian","other"],She=[15,23,28,35.5,45.5,55.5,65],xw=0,Aw=0,N5=Number.MAX_SAFE_INTEGER;async function yw(e){var t;return ne.initial&&(Rn=null),Rn?e.debug&&K("cached model:",Rn.modelUrl):Rn=await Ee((t=e.face.gear)==null?void 0:t.modelPath),Rn}async function E5(e,t,a,n){var i,o;if(!Rn)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=N5<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>te()-Aw;return t.skipAllowed&&s&&r&&xw===n&&C5[a]?(N5++,C5[a]):(N5=0,new Promise(async l=>{var x,A;if(!(Rn!=null&&Rn.inputs[0].shape))return;let u={},p=[[0,.1,.9,.9]];u.resize=ge.cropAndResize(e,p,[0],[Rn.inputs[0].shape[2],Rn.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(x=t.face.gear)!=null&&x.enabled&&([u.age,u.gender,u.race]=Rn.execute(u.resize,["age_output","gender_output","race_output"]));let d=await u.gender.data();c.gender=d[0]>d[1]?"male":"female",c.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let h=await u.race.data();for(let y=0;y(((A=t.face.gear)==null?void 0:A.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[y])/100,race:Ihe[y]});c.race.sort((y,b)=>b.score-y.score);let m=Array.from(await u.age.data()).map((y,b)=>[She[b],y]).sort((y,b)=>b[1]-y[1]),g=m[0][0];for(let y=1;yY(u[y])),C5[a]=c,xw=n,Aw=te(),l(c)}))}var Qa,A0=[],vw=0,ww=0,R5=Number.MAX_SAFE_INTEGER;async function kw(e){return ne.initial&&(Qa=null),Qa?e.debug&&K("cached model:",Qa.modelUrl):Qa=await Ee(e.face.ssrnet.modelPathAge),Qa}async function M5(e,t,a,n){var i,o,l,u;if(!Qa)return{age:0};let r=R5<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>te()-ww;return t.skipAllowed&&r&&s&&vw===n&&((l=A0[a])==null?void 0:l.age)&&((u=A0[a])==null?void 0:u.age)>0?(R5++,A0[a]):(R5=0,new Promise(async p=>{var h;if(!(Qa!=null&&Qa.inputs)||!Qa.inputs[0]||!Qa.inputs[0].shape)return;let c={};c.resize=ge.resizeBilinear(e,[Qa.inputs[0].shape[2],Qa.inputs[0].shape[1]],!1),c.enhance=ae(c.resize,ze.tf255);let d={age:0};if((h=t.face.ssrnet)!=null&&h.enabled&&(c.age=Qa.execute(c.enhance)),c.age){let f=await c.age.data();d.age=Math.trunc(10*f[0])/10}Object.keys(c).forEach(f=>Y(c[f])),A0[a]=d,vw=n,ww=te(),p(d)}))}var Mn,y0=[],Sw=0,Tw=0,$5=Number.MAX_SAFE_INTEGER,_5=[.2989,.587,.114];async function Cw(e){var t;return ne.initial&&(Mn=null),Mn?e.debug&&K("cached model:",Mn.modelUrl):Mn=await Ee((t=e.face.ssrnet)==null?void 0:t.modelPathGender),Mn}async function P5(e,t,a,n){var i,o,l,u;if(!Mn)return{gender:"unknown",genderScore:0};let r=$5<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>te()-Tw;return t.skipAllowed&&r&&s&&Sw===n&&((l=y0[a])==null?void 0:l.gender)&&((u=y0[a])==null?void 0:u.genderScore)>0?($5++,y0[a]):($5=0,new Promise(async p=>{var f;if(!(Mn!=null&&Mn.inputs[0].shape))return;let c={};c.resize=ge.resizeBilinear(e,[Mn.inputs[0].shape[2],Mn.inputs[0].shape[1]],!1),c.enhance=$e(()=>{let[m,g,x]=ka(c.resize,3,3),A=ae(m,_5[0]),y=ae(g,_5[1]),b=ae(x,_5[2]),w=uh([A,y,b]);return ae(fe(w,ze.tf05),2)});let d={gender:"unknown",genderScore:0};(f=t.face.ssrnet)!=null&&f.enabled&&(c.gender=Mn.execute(c.enhance));let h=await c.gender.data();d.gender=h[0]>h[1]?"female":"male",d.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(c).forEach(m=>Y(c[m])),y0[a]=d,Sw=n,Tw=te(),p(d)}))}var en,F5=[],Ew=0,Rw=0,Mw=Number.MAX_SAFE_INTEGER;async function $w(e){var t;return ne.initial&&(en=null),en?e.debug&&K("cached model:",en.modelUrl):en=await Ee((t=e.face.mobilefacenet)==null?void 0:t.modelPath),en}async function O5(e,t,a,n){var i,o;if(!(en!=null&&en.executor))return[];let r=Mw<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>te()-Rw;return t.skipAllowed&&s&&r&&Ew===n&&F5[a]?(Mw++,F5[a]):new Promise(async l=>{var p;let u=[];if(((p=t.face.mobilefacenet)==null?void 0:p.enabled)&&(en==null?void 0:en.inputs[0].shape)){let c={};c.crop=ge.resizeBilinear(e,[en.inputs[0].shape[2],en.inputs[0].shape[1]],!1),c.data=en.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>Y(c[h]))}F5[a]=u,Ew=n,Rw=te(),l(u)})}var tn,D5=[],Pw=0,Fw=0,Ow=Number.MAX_SAFE_INTEGER;async function Dw(e){return ne.initial&&(tn=null),tn?e.debug&&K("cached model:",tn.modelUrl):tn=await Ee(e.face.insightface.modelPath),tn}async function z5(e,t,a,n){var i,o;if(!(tn!=null&&tn.executor))return[];let r=Ow<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>te()-Fw;return t.skipAllowed&&s&&r&&Pw===n&&D5[a]?(Ow++,D5[a]):new Promise(async l=>{var p;let u=[];if(((p=t.face.insightface)==null?void 0:p.enabled)&&(tn==null?void 0:tn.inputs[0].shape)){let c={};c.crop=ge.resizeBilinear(e,[tn.inputs[0].shape[2],tn.inputs[0].shape[1]],!1),c.data=tn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>Y(c[h]))}D5[a]=u,Pw=n,Fw=te(),l(u)})}var The=e=>{let t=(c,d)=>Math.atan2(c[1]-d[1],c[0]-d[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let a=[0,-.1],n=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],i=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],o=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(i[0]-s[0])/o[0]-a[0],n*(s[1]-i[1])/o[1]-a[1]],u=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return u=Math.min(u,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:u}},Lw=(e,t)=>{let a=m=>{let g=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=g,m[1]/=g,m[2]/=g,m},n=(m,g)=>{let x=m[0]-g[0],A=m[1]-g[1],y=m[2]-g[2];return[x,A,y]},r=(m,g)=>{let x=m[1]*g[2]-m[2]*g[1],A=m[2]*g[0]-m[0]*g[2],y=m[0]*g[1]-m[1]*g[0];return[x,A,y]},s=m=>{let[g,x,A,y,b,w,S,C,E]=m,_,$,M;return y<1?y>-1?(M=Math.asin(y),$=Math.atan2(-S,g),_=Math.atan2(-w,b)):(M=-Math.PI/2,$=-Math.atan2(C,E),_=0):(M=Math.PI/2,$=Math.atan2(C,E),_=0),Number.isNaN(_)&&(_=0),Number.isNaN($)&&($=0),Number.isNaN(M)&&(M=0),{pitch:2*-_,yaw:2*-$,roll:2*-M}},i=e.meshRaw;if(!i||i.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let o=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[i[10],i[152],i[234],i[454]].map(m=>[m[0]*t[0]/o,m[1]*t[1]/o,m[2]]),u=a(n(l[1],l[0])),p=a(n(l[3],l[2])),c=a(r(p,u));p=r(u,c);let d=[p[0],p[1],p[2],u[0],u[1],u[2],c[0],c[1],c[2]],h=s(d),f=i.length===478?The(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:f}};function Bw(e,t){let a=e==null?void 0:e.annotations;if(!a)return 0;let n=Math.max(Math.abs(a.leftEyeIris[3][0]-a.leftEyeIris[1][0]),Math.abs(a.rightEyeIris[3][0]-a.rightEyeIris[1][0]))/t;return Math.round(1.17/n)/100}var L5=async(e,t)=>{var f,m,g,x,A,y,b,w,S,C,E,_,$,M,I,N,O,L,B,G,j,U,H;let a=te(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await Z9(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(te()-a):Math.trunc(te()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let V=0;V200?Lw(h[V],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(m=e.config.face.emotion)!=null&&m.enabled?y5(h[V].tensor||Be([]),e.config,V,h.length):[]:(e.state="run:emotion",a=te(),i=(g=e.config.face.emotion)!=null&&g.enabled?await y5(h[V].tensor||Be([]),e.config,V,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(x=e.config.face.antispoof)!=null&&x.enabled?I5(h[V].tensor||Be([]),e.config,V,h.length):0:(e.state="run:antispoof",a=te(),u=(A=e.config.face.antispoof)!=null&&A.enabled?await I5(h[V].tensor||Be([]),e.config,V,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?p=(y=e.config.face.liveness)!=null&&y.enabled?T5(h[V].tensor||Be([]),e.config,V,h.length):0:(e.state="run:liveness",a=te(),p=(b=e.config.face.liveness)!=null&&b.enabled?await T5(h[V].tensor||Be([]),e.config,V,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?E5(h[V].tensor||Be([]),e.config,V,h.length):null:(e.state="run:gear",a=te(),r=(S=e.config.face.gear)!=null&&S.enabled?await E5(h[V].tensor||Be([]),e.config,V,h.length):null,e.performance.gear=Math.trunc(te()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(C=e.config.face.ssrnet)!=null&&C.enabled?M5(h[V].tensor||Be([]),e.config,V,h.length):null,s=(E=e.config.face.ssrnet)!=null&&E.enabled?P5(h[V].tensor||Be([]),e.config,V,h.length):null):(e.state="run:ssrnet",a=te(),n=(_=e.config.face.ssrnet)!=null&&_.enabled?await M5(h[V].tensor||Be([]),e.config,V,h.length):null,s=($=e.config.face.ssrnet)!=null&&$.enabled?await P5(h[V].tensor||Be([]),e.config,V,h.length):null,e.performance.ssrnet=Math.trunc(te()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(M=e.config.face.mobilefacenet)!=null&&M.enabled?O5(h[V].tensor||Be([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=te(),o=(I=e.config.face.mobilefacenet)!=null&&I.enabled?await O5(h[V].tensor||Be([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(te()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(N=e.config.face.insightface)!=null&&N.enabled?z5(h[V].tensor||Be([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=te(),l=(O=e.config.face.insightface)!=null&&O.enabled?await z5(h[V].tensor||Be([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(te()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=v5(h[V].tensor||Be([]),e.config,V,h.length):(e.state="run:description",a=te(),c=await v5(h[V].tensor||Be([]),e.config,V,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(te()-a):Math.trunc(te()-a)),e.analyze("End Description:"),e.config.async&&([n,s,i,o,l,c,r,u,p]=await Promise.all([n,s,i,o,l,c,r,u,p])),e.analyze("Finish Face:"),((L=e.config.face.ssrnet)==null?void 0:L.enabled)&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),((B=e.config.face.gear)==null?void 0:B.enabled)&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),((G=e.config.face.mobilefacenet)==null?void 0:G.enabled)&&o&&(c.descriptor=o),((j=e.config.face.insightface)==null?void 0:j.enabled)&&l&&(c.descriptor=l);let Z=(U=e.config.face.iris)!=null&&U.enabled?Bw(h[V],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?_e(h[V].tensor):null;Y(h[V].tensor),h[V].tensor&&delete h[V].tensor;let ee={...h[V],id:V};c.age&&(ee.age=c.age),c.gender&&(ee.gender=c.gender),c.genderScore&&(ee.genderScore=c.genderScore),c.descriptor&&(ee.embedding=c.descriptor),c.race&&(ee.race=c.race),i&&(ee.emotion=i),u&&(ee.real=u),p&&(ee.live=p),Z>0&&(ee.distance=Z),Q&&(ee.rotation=Q),re&&(ee.tensor=re),d.push(ee),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),d};var Ma={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>Ma.nameMapping[e],getPoints:e=>Ma.pointsMapping[e]},gs={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>gs.nameMapping[e]},Et={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>Et.nameMapping[e]},ms=class{constructor(t){le(this,"name");le(this,"curls");le(this,"directions");le(this,"weights");le(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,a,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([a,n])}direction(t,a,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([a,n])}weight(t,a){this.weights[t]=a;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,a){let n=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}for(let r in a){let s=a[r],i=this.directions[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:Ln,index:Nr,middle:Er,ring:$o,pinky:_o}=Ma,{none:Bn,half:Nhe,full:Wn}=gs,{verticalUp:Tu,verticalDown:z5e,horizontalLeft:B5,horizontalRight:Ehe,diagonalUpRight:Rhe,diagonalUpLeft:Cu,diagonalDownRight:L5e,diagonalDownLeft:B5e}=Et,xs=new ms("thumbs up");xs.curl(Ln,Bn,1);xs.direction(Ln,Tu,1);xs.direction(Ln,Cu,.25);xs.direction(Ln,Rhe,.25);for(let e of[Ma.index,Ma.middle,Ma.ring,Ma.pinky])xs.curl(e,Wn,1),xs.direction(e,B5,1),xs.direction(e,Ehe,1);var Wt=new ms("victory");Wt.curl(Ln,Nhe,.5);Wt.curl(Ln,Bn,.5);Wt.direction(Ln,Tu,1);Wt.direction(Ln,Cu,1);Wt.curl(Nr,Bn,1);Wt.direction(Nr,Tu,.75);Wt.direction(Nr,Cu,1);Wt.curl(Er,Bn,1);Wt.direction(Er,Tu,1);Wt.direction(Er,Cu,.75);Wt.curl($o,Wn,1);Wt.direction($o,Tu,.2);Wt.direction($o,Cu,1);Wt.direction($o,B5,.2);Wt.curl(_o,Wn,1);Wt.direction(_o,Tu,.2);Wt.direction(_o,Cu,1);Wt.direction(_o,B5,.2);Wt.weight(Nr,2);Wt.weight(Er,2);var As=new ms("point");As.curl(Ln,Wn,1);As.curl(Nr,Bn,.5);As.curl(Er,Wn,.5);As.curl($o,Wn,.5);As.curl(_o,Wn,.5);As.weight(Nr,2);As.weight(Er,2);var ys=new ms("middle finger");ys.curl(Ln,Bn,1);ys.curl(Nr,Wn,.5);ys.curl(Er,Wn,.5);ys.curl($o,Wn,.5);ys.curl(_o,Wn,.5);ys.weight(Nr,2);ys.weight(Er,2);var Nu=new ms("open palm");Nu.curl(Ln,Bn,.75);Nu.curl(Nr,Bn,.75);Nu.curl(Er,Bn,.75);Nu.curl($o,Bn,.75);Nu.curl(_o,Bn,.75);var Ww=[xs,Wt,As,ys,Nu];var Mhe=.7,Po={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function Vw(e,t,a,n){let r=(t-n)/(e-a),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function Gw(e,t){if(!e||!t)return[0,0];let a=Vw(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=Vw(e[1],e[2],t[1],t[2]);return[a,n]}function Uw(e,t=1){let a=0,n=0,r=0;return e>=75&&e<=105?a=1*t:e>=25&&e<=155?n=1*t:r=1*t,[a,n,r]}function $he(e,t,a){let n=e[0]-t[0],r=e[0]-a[0],s=t[0]-a[0],i=e[1]-t[1],o=e[1]-a[1],l=t[1]-a[1],u=e[2]-t[2],p=e[2]-a[2],c=t[2]-a[2],d=Math.sqrt(n*n+i*i+u*u),h=Math.sqrt(r*r+o*o+p*p),f=Math.sqrt(s*s+l*l+c*c),m=(f*f+d*d-h*h)/(2*f*d);m>1?m=1:m<-1&&(m=-1);let g=Math.acos(m);g=57.2958*g%180;let x;return g>Po.NO_CURL_START_LIMIT?x=gs.none:g>Po.HALF_CURL_START_LIMIT?x=gs.half:x=gs.full,x}function Hw(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=Et.horizontalLeft:r=Et.horizontalRight:n===Math.abs(t)?t>0?r=Et.horizontalLeft:r=Et.horizontalRight:a>0?r=Et.horizontalLeft:r=Et.horizontalRight,r}function jw(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=Et.verticalDown:r=Et.verticalUp:n===Math.abs(t)?t<0?r=Et.verticalDown:r=Et.verticalUp:a<0?r=Et.verticalDown:r=Et.verticalUp,r}function _he(e,t,a,n,r,s,i,o){let l,u=jw(e,t,a,n),p=Hw(r,s,i,o);return u===Et.verticalUp?p===Et.horizontalLeft?l=Et.diagonalUpLeft:l=Et.diagonalUpRight:p===Et.horizontalLeft?l=Et.diagonalDownLeft:l=Et.diagonalDownRight,l}function Phe(e,t,a,n){let r=e[0]-t[0],s=e[0]-a[0],i=t[0]-a[0],o=e[1]-t[1],l=e[1]-a[1],u=t[1]-a[1],p=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),c=Math.max(Math.abs(o),Math.abs(l),Math.abs(u)),d=0,h=0,f=0,m=c/(p+1e-5);m>1.5?d+=Po.DISTANCE_VOTE_POWER:m>.66?h+=Po.DISTANCE_VOTE_POWER:f+=Po.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),x=Math.sqrt(s*s+l*l),A=Math.sqrt(i*i+u*u),y=Math.max(g,x,A),b=e[0],w=e[1],S=a[0],C=a[1];y===g?(S=a[0],C=a[1]):y===A&&(b=t[0],w=t[1]);let $=Gw([b,w],[S,C]),M=Uw($,Po.TOTAL_ANGLE_VOTE_POWER);d+=M[0],h+=M[1],f+=M[2];for(let N of n){let O=Uw(N,Po.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],f+=O[2]}let I;return d===Math.max(d,h,f)?I=jw(l,o,u,c):f===Math.max(h,f)?I=Hw(s,r,i,p):I=_he(l,o,u,c,s,r,i,p),I}function qw(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of Ma.all){let i=Ma.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=Gw(p,c),h=d[0],f=d[1];o.push(h),l.push(f)}t.push(o),a.push(l)}for(let s of Ma.all){let i=s===Ma.thumb?1:0,o=Ma.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=$he(l,u,p),d=Phe(l,u,p,t[s].slice(i));n[s]=c,r[s]=d}return{curls:n,directions:r}}function b0(e){if(!e||e.length===0)return null;let t=qw(e),a={};for(let n of Ma.all)a[Ma.getName(n)]={curl:gs.getName(t.curls[n]),direction:Et.getName(t.directions[n])};return a}function Xw(e){let t=[];if(!e||e.length===0)return t;let a=qw(e);for(let n of Ww){let r=n.matchAgainst(a.curls,a.directions);r>=Mhe&&t.push({name:n.name,confidence:r})}return t}var Kw=e=>{if(!e)return[];let t=[];for(let a=0;al.part==="leftWrist"),r=e[a].keypoints.find(l=>l.part==="rightWrist"),s=e[a].keypoints.find(l=>l.part==="nose");s&&n&&r&&n.position[1]l.part==="leftShoulder"),o=e[a].keypoints.find(l=>l.part==="rightShoulder");i&&o&&Math.abs(i.positionRaw[1]-o.positionRaw[1])>.1&&t.push({body:a,gesture:`leaning ${i.position[1]>o.position[1]?"left":"right"}`})}return t},Zw=e=>{if(!e)return[];let t=[];for(let a=0;a450){let n=(e[a].mesh[33][2]||0)-(e[a].mesh[263][2]||0),r=e[a].mesh[33][0]-e[a].mesh[263][0];Math.abs(n/r)<=.15?t.push({face:a,gesture:"facing center"}):t.push({face:a,gesture:`facing ${n<0?"left":"right"}`}),Math.abs(e[a].mesh[374][1]-e[a].mesh[386][1])/Math.abs(e[a].mesh[443][1]-e[a].mesh[450][1])<.2&&t.push({face:a,gesture:"blink left eye"}),Math.abs(e[a].mesh[145][1]-e[a].mesh[159][1])/Math.abs(e[a].mesh[223][1]-e[a].mesh[230][1])<.2&&t.push({face:a,gesture:"blink right eye"});let o=Math.min(100,500*Math.abs(e[a].mesh[13][1]-e[a].mesh[14][1])/Math.abs(e[a].mesh[10][1]-e[a].mesh[152][1]));o>10&&t.push({face:a,gesture:`mouth ${Math.trunc(o)}% open`});let l=e[a].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:a,gesture:`head ${l<0?"up":"down"}`})}return t},Yw=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),m>g?m>.05&&t.push({iris:i,gesture:"looking right"}):g>.05&&t.push({iris:i,gesture:"looking left"});let x=Math.abs(e[i].mesh[145][1]-e[i].annotations.rightEyeIris[0][1])/e[i].box[3],A=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(A<.01||x<.01||A>.022||x>.022)&&(h=!1),(A<.01||x<.01)&&t.push({iris:i,gesture:"looking down"}),(A>.022||x>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},Jw=e=>{if(!e)return[];let t=[];for(let a=0;a0){let r=n.reduce((i,o)=>(i.position[2]||0)<(o.position[2]||0)?i:o);t.push({hand:a,gesture:`${r.name} forward`});let s=n.reduce((i,o)=>i.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:a,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function w0(e,t=1.5){let a=kp(e),n=v0(e),r=[t*n[0]/2,t*n[1]/2],s=[a[0]-r[0],a[1]-r[1]],i=[a[0]+r[0],a[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function k0(e){let t=kp(e),a=v0(e),r=Math.max(...a)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function Ohe(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function nk(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Ohe(a)}var Qw=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function bs(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Xn(this.anchors),this.inputSize=((s=(r=(n=(a=this==null?void 0:this.model)==null?void 0:a.inputs)==null?void 0:n[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=Ht([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Ht([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=Pe(t,[0,0],[-1,2]),a.boxSizes=Pe(t,[0,2],[-1,2]),a.div=me(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=be(a.div,this.anchorsTensor),a.halfBoxSizes=me(a.boxSizes,this.doubleInputSizeTensor),a.sub=fe(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=ae(a.sub,this.inputSizeTensor),a.add=be(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=ae(a.add,this.inputSizeTensor);let n=nu([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>Y(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=J(t,[-1,7,2]),n.div=me(n.reshape,this.inputSizeTensor),n.landmarks=be(n.div,this.anchors[a]?this.anchors[a]:0);let r=ae(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>Y(n[s])),r}async predict(t,a){var o;let n={};n.resize=ge.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=me(n.resize,ze.tf127),n.image=fe(n.div,ze.tf1),n.batched=this.model.execute(n.image),n.predictions=_e(n.batched),n.slice=Pe(n.predictions,[0,0],[-1,1]),n.sigmoid=Da(n.slice),n.scores=_e(n.sigmoid);let r=await n.scores.data();n.boxes=Pe(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await ge.nonMaxSuppressionAsync(n.norm,n.scores,3*(((o=a.hand)==null?void 0:o.maxDetected)||1),a.hand.iouThreshold,a.hand.minConfidence);let s=await n.nms.array(),i=[];for(let l of s){let u={};u.box=Pe(n.norm,[l,0],[1,-1]),u.slice=Pe(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=J(u.norm,[-1,2]);let p=await u.box.data(),c=p.slice(0,2),d=p.slice(2,4),h=await u.palmLandmarks.array(),f={startPoint:c,endPoint:d,palmLandmarks:h,confidence:r[l]},m=ak(f,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(m),Object.keys(u).forEach(g=>Y(u[g]))}return Object.keys(n).forEach(l=>Y(n[l])),i}};var Bhe=5,ok=1.65,lk=[0,5,9,13,17,1,2],Whe=0,Vhe=2,uk=0,S0=class{constructor(t,a){le(this,"handDetector");le(this,"handPoseModel");le(this,"inputSize");le(this,"storedBoxes");le(this,"skipped");le(this,"detectedHands");var n,r,s;this.handDetector=t,this.handPoseModel=a,this.inputSize=((s=(r=(n=this.handPoseModel)==null?void 0:n.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let a=t.map(i=>i[0]),n=t.map(i=>i[1]),r=[Math.min(...a),Math.min(...n)],s=[Math.max(...a),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,a){let n=t.map(s=>U5([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return w0(k0(r),Bhe)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=w0(k0(a),ok);n.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=V5(n,[0,0]),u=o.map(h=>[...U5(h,l),h[2]]),p=rk(r),c=[...kp(a),1],d=[bs(c,p[0]),bs(c,p[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2])])}async estimateHands(t,a){let n=!1,r,s=(a.hand.skipTime||0)>te()-uk,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i&&(r=await this.handDetector.predict(t,a),this.skipped=0),a.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==a.hand.maxDetected||!a.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let o=[];for(let l=0;l=a.hand.minConfidence/4){let w=J(y,[-1,3]),S=await w.array();Y(y),Y(w);let C=this.transformRawCoords(S,m,p,f),E=this.getBoxForHandLandmarks(C);this.storedBoxes[l]={...E,confidence:b};let _={landmarks:C,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:E.startPoint,bottomRight:E.endPoint}};o.push(_)}else this.storedBoxes[l]=null;Y(y)}else{let p=w0(k0(u),ok),c={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:p.startPoint,bottomRight:p.endPoint},landmarks:[]};o.push(c)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>a.hand.maxDetected&&(o.length=a.hand.maxDetected),o}};var dk={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Fo,Oo,pk;async function G5(e,t){let a=await pk.estimateHands(e,t);if(!a)return[];let n=[];for(let r=0;ra[r].landmarks[c]);let i=a[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let p of i)p[0]o[2]&&(o[2]=p[0]),p[1]>o[3]&&(o[3]=p[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=a[r].box?[Math.trunc(Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.max(0,a[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,a[r].box.bottomRight[0])-Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,a[r].box.bottomRight[1])-Math.max(0,a[r].box.topLeft[1]))]:[0,0,0,0],l=[a[r].box.topLeft[0]/(e.shape[2]||0),a[r].box.topLeft[1]/(e.shape[1]||0),(a[r].box.bottomRight[0]-a[r].box.topLeft[0])/(e.shape[2]||0),(a[r].box.bottomRight[1]-a[r].box.topLeft[1])/(e.shape[1]||0)];let u=b0(i);n.push({id:r,score:Math.round(100*a[r].confidence)/100,boxScore:Math.round(100*a[r].boxConfidence)/100,fingerScore:Math.round(100*a[r].fingerConfidence)/100,label:"hand",box:o,boxRaw:l,keypoints:i,annotations:s,landmarks:u})}return n}async function ck(e){var a,n;ne.initial&&(Fo=null,Oo=null),!Fo||!Oo?[Fo,Oo]=await Promise.all([e.hand.enabled?Ee((a=e.hand.detector)==null?void 0:a.modelPath):null,e.hand.landmarks?Ee((n=e.hand.skeleton)==null?void 0:n.modelPath):null]):(e.debug&&K("cached model:",Fo.modelUrl),e.debug&&K("cached model:",Oo.modelUrl));let t=Fo?new I0(Fo):void 0;return t&&Oo&&(pk=new S0(t,Oo)),[Fo,Oo]}var Pt=[null,null],Ghe=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],vs=[[0,0],[0,0]],Hhe=["hand","fist","pinch","point","face","tip","pinchtip"],fk=4,mk=1.6,jhe=512,qhe=1.4,T0=Number.MAX_SAFE_INTEGER,H5=0,Rr=[0,0],_t={boxes:[],hands:[]},gk={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function xk(e){var t;if(ne.initial&&(Pt[0]=null),Pt[0])e.debug&&K("cached model:",Pt[0].modelUrl);else{Zh(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Pt[0]=await Ee((t=e.hand.detector)==null?void 0:t.modelPath);let a=Pt[0].executor?Object.values(Pt[0].modelSignature.inputs):void 0;vs[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,vs[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Pt[0]}async function Ak(e){var t;if(ne.initial&&(Pt[1]=null),Pt[1])e.debug&&K("cached model:",Pt[1].modelUrl);else{Pt[1]=await Ee((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Pt[1].executor?Object.values(Pt[1].modelSignature.inputs):void 0;vs[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,vs[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Pt[1]}async function Xhe(e,t){let a=[];if(!e||!Pt[0])return a;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,jhe),i=Math.round(s*r/8)*8;n.resize=ge.resizeBilinear(e,[s,i]),n.cast=He(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await Pt[0].executeAsync(n.cast,Ghe),n.boxes=_e(n.rawBoxes,[0,2]),n.scores=_e(n.rawScores,[0]);let o=Ta(n.scores,1);Y(o[fk]),o.splice(fk,1),n.filtered=sa(o,1),Y(o),n.max=pa(n.filtered,1),n.argmax=tr(n.filtered,1);let l=0;n.nms=await ge.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await n.nms.data(),p=await n.max.data(),c=await n.argmax.data();for(let d of Array.from(u)){let h=Pe(n.boxes,d,1),f=await h.data();Y(h);let m=[f[1],f[0],f[3]-f[1],f[2]-f[0]],g=s0(m,qhe),x=[Math.trunc(m[0]*Rr[0]),Math.trunc(m[1]*Rr[1]),Math.trunc(m[2]*Rr[0]),Math.trunc(m[3]*Rr[1])],A=p[d],y=Hhe[c[d]],b={id:l++,score:A,box:x,boxRaw:g,label:y};a.push(b)}return Object.keys(n).forEach(d=>Y(n[d])),a.sort((d,h)=>h.score-d.score),a.length>(t.hand.maxDetected||1)&&(a.length=t.hand.maxDetected||1),a}async function j5(e,t,a){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&Pt[1]&&a.hand.landmarks&&t.score>(a.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=ge.cropAndResize(e,[s],[0],[vs[1][0],vs[1][1]],"bilinear"),r.div=me(r.crop,ze.tf255),[r.score,r.keypoints]=Pt[1].execute(r.div,["Identity_1","Identity"]);let i=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(i))))/100;if(o>=(a.hand.minConfidence||0)){n.fingerScore=o,r.reshaped=J(r.keypoints,[-1,3]);let p=(await r.reshaped.array()).map(c=>[c[0]/vs[1][1],c[1]/vs[1][0],c[2]||0]).map(c=>[c[0]*t.boxRaw[2],c[1]*t.boxRaw[3],c[2]||0]);n.keypoints=p.map(c=>[Rr[0]*(c[0]+t.boxRaw[0]),Rr[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=b0(n.keypoints);for(let c of Object.keys(gk))n.annotations[c]=gk[c].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>Y(r[l]))}return n}async function q5(e,t){var r,s;if(!((r=Pt[0])!=null&&r.executor)||!((s=Pt[1])!=null&&s.executor)||!Pt[0].inputs[0].shape||!Pt[1].inputs[0].shape)return[];Rr=[e.shape[2]||0,e.shape[1]||0],T0++;let a=(t.hand.skipTime||0)>te()-H5,n=T0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?_t.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>te()-H5,l=T0<3*(t.hand.skipFrames||0);t.skipAllowed&&_t.hands.length===t.hand.maxDetected?_t.hands=await Promise.all(_t.boxes.map(p=>j5(e,p,t))):t.skipAllowed&&o&&l&&_t.hands.length>0?_t.hands=await Promise.all(_t.boxes.map(p=>j5(e,p,t))):(_t.boxes=await Xhe(e,t),H5=te(),_t.hands=await Promise.all(_t.boxes.map(p=>j5(e,p,t))),T0=0);let u=[..._t.boxes];if(_t.boxes.length=0,t.cacheSensitivity>0)for(let p=0;p<_t.hands.length;p++){let c=x9(_t.hands[p].keypoints,Rr);if(c.box[2]/(e.shape[2]||1)>.05&&c.box[3]/(e.shape[1]||1)>.05&&_t.hands[p].fingerScore&&_t.hands[p].fingerScore>(t.hand.minConfidence||0)){let d=s0(c.box,mk),h=s0(c.boxRaw,mk);_t.boxes.push({...u[p],box:d,boxRaw:h})}}for(let p=0;p<_t.hands.length;p++){let c=Cr(_t.hands[p].keypoints,Rr);_t.hands[p].box=c.box,_t.hands[p].boxRaw=c.boxRaw}i(_t.hands)})}var ir=(e=null)=>({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var Ip={};cr(Ip,{connected:()=>N0,horizontal:()=>X5,kpt:()=>C0,relative:()=>Z5,vertical:()=>K5});var C0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],X5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],K5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],Z5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],N0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var xe=ir(),Y5=0;function bk(e,t){var i,o,l,u,p,c,d,h,f,m,g,x,A,y,b,w,S,C,E,_,$,M,I;let a=te();if(!e)return ir();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(xe.canvas=e.canvas),e.error&&(xe.error=e.error),!xe.body||e.body.length!==xe.body.length)xe.body=JSON.parse(JSON.stringify(e.body));else for(let N=0;N((r-1)*xe.body[N].box[H]+U)/r),L=e.body[N].boxRaw.map((U,H)=>((r-1)*xe.body[N].boxRaw[H]+U)/r),B=e.body[N].keypoints.map((U,H)=>{var V,Q,Z,re,ee,he,oe,Ae,we;return{score:U.score,part:U.part,position:[xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].position[0]||0)+(U.position[0]||0))/r:U.position[0],xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].position[1]||0)+(U.position[1]||0))/r:U.position[1],xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].position[2]||0)+(U.position[2]||0))/r:U.position[2]],positionRaw:[xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].positionRaw[0]||0)+(U.positionRaw[0]||0))/r:U.positionRaw[0],xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].positionRaw[1]||0)+(U.positionRaw[1]||0))/r:U.positionRaw[1],xe.body[N].keypoints[H]?((r-1)*(xe.body[N].keypoints[H].positionRaw[2]||0)+(U.positionRaw[2]||0))/r:U.positionRaw[2]],distance:[xe.body[N].keypoints[H]?((r-1)*(((V=xe.body[N].keypoints[H].distance)==null?void 0:V[0])||0)+(((Q=U.distance)==null?void 0:Q[0])||0))/r:(Z=U.distance)==null?void 0:Z[0],xe.body[N].keypoints[H]?((r-1)*(((re=xe.body[N].keypoints[H].distance)==null?void 0:re[1])||0)+(((ee=U.distance)==null?void 0:ee[1])||0))/r:(he=U.distance)==null?void 0:he[1],xe.body[N].keypoints[H]?((r-1)*(((oe=xe.body[N].keypoints[H].distance)==null?void 0:oe[2])||0)+(((Ae=U.distance)==null?void 0:Ae[2])||0))/r:(we=U.distance)==null?void 0:we[2]]}}),G={},j={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?j=l0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?j=n0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(j=Ip);for(let[U,H]of Object.entries(j.connected)){let V=[];for(let Q=0;Qee.part===H[Q]),re=B.find(ee=>ee.part===H[Q+1]);Z&&re&&V.push([Z.position,re.position])}G[U]=V}xe.body[N]={...e.body[N],box:O,boxRaw:L,keypoints:B,annotations:G}}if(!xe.hand||e.hand.length!==xe.hand.length)xe.hand=JSON.parse(JSON.stringify(e.hand));else for(let N=0;N((r-1)*xe.hand[N].box[U]+j)/r),L=e.hand[N].boxRaw.map((j,U)=>((r-1)*xe.hand[N].boxRaw[U]+j)/r);xe.hand[N].keypoints.length!==e.hand[N].keypoints.length&&(xe.hand[N].keypoints=e.hand[N].keypoints);let B=e.hand[N].keypoints&&e.hand[N].keypoints.length>0?e.hand[N].keypoints.map((j,U)=>j.map((H,V)=>((r-1)*(xe.hand[N].keypoints[U][V]||1)+(H||0))/r)):[],G={};if(Object.keys(xe.hand[N].annotations).length!==Object.keys(e.hand[N].annotations).length)xe.hand[N].annotations=e.hand[N].annotations,G=xe.hand[N].annotations;else if(e.hand[N].annotations)for(let j of Object.keys(e.hand[N].annotations))G[j]=(c=(p=(u=e.hand[N])==null?void 0:u.annotations)==null?void 0:p[j])!=null&&c[0]?e.hand[N].annotations[j].map((U,H)=>U.map((V,Q)=>((r-1)*xe.hand[N].annotations[j][H][Q]+V)/r)):null;xe.hand[N]={...e.hand[N],box:O,boxRaw:L,keypoints:B,annotations:G}}if(!xe.face||e.face.length!==xe.face.length)xe.face=JSON.parse(JSON.stringify(e.face));else for(let N=0;N((r-1)*xe.face[N].box[G]+B)/r),L=e.face[N].boxRaw.map((B,G)=>((r-1)*xe.face[N].boxRaw[G]+B)/r);if(e.face[N].rotation){let B={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};B.matrix=(d=e.face[N].rotation)==null?void 0:d.matrix,B.angle={roll:((r-1)*(((f=(h=xe.face[N].rotation)==null?void 0:h.angle)==null?void 0:f.roll)||0)+(((g=(m=e.face[N].rotation)==null?void 0:m.angle)==null?void 0:g.roll)||0))/r,yaw:((r-1)*(((A=(x=xe.face[N].rotation)==null?void 0:x.angle)==null?void 0:A.yaw)||0)+(((b=(y=e.face[N].rotation)==null?void 0:y.angle)==null?void 0:b.yaw)||0))/r,pitch:((r-1)*(((S=(w=xe.face[N].rotation)==null?void 0:w.angle)==null?void 0:S.pitch)||0)+(((E=(C=e.face[N].rotation)==null?void 0:C.angle)==null?void 0:E.pitch)||0))/r},B.gaze={bearing:((r-1)*(((_=xe.face[N].rotation)==null?void 0:_.gaze.bearing)||0)+((($=e.face[N].rotation)==null?void 0:$.gaze.bearing)||0))/r,strength:((r-1)*(((M=xe.face[N].rotation)==null?void 0:M.gaze.strength)||0)+(((I=e.face[N].rotation)==null?void 0:I.gaze.strength)||0))/r},xe.face[N]={...e.face[N],rotation:B,box:O,boxRaw:L}}else xe.face[N]={...e.face[N],box:O,boxRaw:L}}if(!xe.object||e.object.length!==xe.object.length)xe.object=JSON.parse(JSON.stringify(e.object));else for(let N=0;N((r-1)*xe.object[N].box[G]+B)/r),L=e.object[N].boxRaw.map((B,G)=>((r-1)*xe.object[N].boxRaw[G]+B)/r);xe.object[N]={...e.object[N],box:O,boxRaw:L}}if(e.persons){let N=e.persons;if(!xe.persons||N.length!==xe.persons.length)xe.persons=JSON.parse(JSON.stringify(N));else for(let O=0;O((r-1)*xe.persons[O].box[B]+L)/r)}e.gesture&&(xe.gesture=e.gesture),xe.width=e.width,xe.height=e.height;let s=te();return Y5=ne.perfadd?Y5+Math.round(s-a):Math.round(s-a),e.performance&&(xe.performance={...e.performance,interpolate:Y5}),xe}var ma;async function J5(e){return!ma||ne.initial?ma=await Ee(e.segmentation.modelPath):e.debug&&K("cached model:",ma.modelUrl),ma}async function vk(e,t){var r;if(ma||(ma=await J5(t)),!(ma!=null&&ma.executor)||!((r=ma==null?void 0:ma.inputs)!=null&&r[0].shape))return null;let a={};a.resize=ge.resizeBilinear(e,[ma.inputs[0].shape?ma.inputs[0].shape[1]:0,ma.inputs[0].shape?ma.inputs[0].shape[2]:0],!1),a.norm=me(a.resize,ze.tf255),a.res=ma.execute(a.norm),a.squeeze=_e(a.res,[0]),[a.bgRaw,a.fgRaw]=Ta(a.squeeze,2),a.fg=mh(a.fgRaw),a.mul=ae(a.fg,ze.tf255),a.expand=Gt(a.mul,2),a.output=ge.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=_e(e),a.concat=at([a.input,a.output],-1),n=He(a.concat,"int32");break;case"alpha":n=He(a.output,"int32");break;default:n=Be(0)}return Object.keys(a).forEach(s=>Y(a[s])),n}var E0={};cr(E0,{distance:()=>Q5,find:()=>Yhe,similarity:()=>Zhe});function Q5(e,t,a={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let n=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-a)/(n-a);return Math.max(Math.min(s,1),0)};function Zhe(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=Q5(e,t,a);return kk(n,a.order||2,a.min||0,a.max||1)}function Yhe(e,t,a={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let n=Number.MAX_SAFE_INTEGER,r=-1;for(let i=0;iCp,validateModel:()=>O0});var Ik=.005,an={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function eg(e){for(let t of X5){let a=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),s=e.keypoints.findIndex(u=>u&&u.part===a[0]),i=e.keypoints.findIndex(u=>u&&u.part===a[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let u=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=u}}}function Sk(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],a.pad=nr(e,an.padding),a.resize=ge.resizeBilinear(a.pad,[t,t]);let n=He(a.resize,"int32");return Object.keys(a).forEach(i=>Y(a[i])),n}function Ck(e,t){e.keypoints=e.keypoints.filter(n=>n==null?void 0:n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+an.padding[2][0]+an.padding[2][1])/t[0]-an.padding[2][0],n.position[1]*(t[1]+an.padding[1][0]+an.padding[1][1])/t[1]-an.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=Cr(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var Vt,R0=0,tg=Number.MAX_SAFE_INTEGER,Do={boxes:[],bodies:[],last:0};async function Nk(e){var t;return ne.initial&&(Vt=null),Vt?e.debug&&K("cached model:",Vt.modelUrl):(Zh(["size"],e),Vt=await Ee(e.body.modelPath)),R0=(Vt==null?void 0:Vt.executor)&&((t=Vt==null?void 0:Vt.inputs)==null?void 0:t[0].shape)?Vt.inputs[0].shape[2]:0,R0<64&&(R0=256),Vt}function Qhe(e,t,a){let n=e[0][0],r=[],s=0;for(let p=0;pt.body.minConfidence){let c=[n[p][1],n[p][0]];r.push({score:Math.round(100*s)/100,part:C0[p],positionRaw:c,position:[Math.round((a.shape[2]||0)*c[0]),Math.round((a.shape[1]||0)*c[1])]})}s=r.reduce((p,c)=>c.score>p?c.score:p,0);let i=[],o=Cr(r.map(p=>p.position),[a.shape[2],a.shape[1]]),l={};for(let[p,c]of Object.entries(N0)){let d=[];for(let h=0;hg.part===c[h]),m=r.find(g=>g.part===c[h+1]);f&&m&&f.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&d.push([f.position,m.position])}l[p]=d}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return eg(u),i.push(u),i}function e0e(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let c=0;c<17;c++){let d=s[3*c+2];if(d>t.body.minConfidence){let h=[s[3*c+1],s[3*c+0]];o.push({part:C0[c],score:Math.round(100*d)/100,positionRaw:h,position:[Math.round((a.shape[2]||0)*h[0]),Math.round((a.shape[1]||0)*h[1])]})}}let l=Cr(o.map(c=>c.position),[a.shape[2],a.shape[1]]),u={};for(let[c,d]of Object.entries(N0)){let h=[];for(let f=0;fx.part===d[f]),g=o.find(x=>x.part===d[f+1]);m&&g&&m.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([m.position,g.position])}u[c]=h}let p={id:r,score:i,box:l.box,boxRaw:l.boxRaw,keypoints:[...o],annotations:u};eg(p),n.push(p)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function ag(e,t){var r;if(!(Vt!=null&&Vt.executor)||!((r=Vt==null?void 0:Vt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(Do.boxes.length=0),tg++;let a=(t.body.skipTime||0)>te()-Do.last,n=tg<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?Do.bodies:new Promise(async s=>{let i={};tg=0,i.input=Tk(e,R0),i.res=Vt==null?void 0:Vt.execute(i.input),Do.last=te();let o=await i.res.array();Do.bodies=i.res.shape[2]===17?Qhe(o,t,e):e0e(o,t,e);for(let l of Do.bodies)Ck(l,[e.shape[2]||1,e.shape[1]||1]),Sk(l.keypoints);Object.keys(i).forEach(l=>Y(i[l])),s(Do.bodies)})}var $n,M0=[],Rk=0,ng=Number.MAX_SAFE_INTEGER,_0=0,$0=2.5;async function Mk(e){if(!$n||ne.initial){$n=await Ee(e.object.modelPath);let t=$n!=null&&$n.executor?Object.values($n.modelSignature.inputs):void 0;_0=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",$n.modelUrl);return $n}async function t0e(e,t,a){var u,p;let n=0,r=[],s=_0;for(let c of[1,2,4]){let d=c*13,h=_e(e.find(y=>y.shape[1]===d**2&&(y.shape[2]||0)===yu.length)),f=await h.array(),m=_e(e.find(y=>y.shape[1]===d**2&&(y.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let S=(.5+Math.trunc(y%d))/d,C=(.5+Math.trunc(y/d))/d,E=A[y].map(B=>B*(d/c/s)),[_,$]=[S-$0/c*E[0],C-$0/c*E[1]],[M,I]=[S+$0/c*E[2]-_,C+$0/c*E[3]-$],N=[_,$,M,I];N=N.map(B=>Math.max(0,Math.min(B,1)));let O=[N[0]*t[0],N[1]*t[1],N[2]*t[0],N[3]*t[1]],L={id:n++,score:Math.round(100*w)/100,class:b+1,label:yu[b].label,box:O.map(B=>Math.trunc(B)),boxRaw:N};r.push(L)}}Y([h,m,g,x])}let i=r.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),o=r.map(c=>c.score),l=[];if(i&&i.length>0){let c=await ge.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),Y(c)}return r=r.filter((c,d)=>l.includes(d)).sort((c,d)=>d.score-c.score),r}async function rg(e,t){if(!($n!=null&&$n.executor))return[];let a=(t.object.skipTime||0)>te()-Rk,n=ng<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&M0.length>0?(ng++,M0):(ng=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?M0:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=ge.resizeBilinear(e,[_0,_0],!1),o=me(i,ze.tf255),l=Ls(o,[0,3,1,2]),u;t.object.enabled&&(u=$n.execute(l)),Rk=te();let p=await t0e(u,s,t);M0=p,Y([i,o,l,...u]),r(p)}))}var Tp=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],a0e=Tp.length,Sp=Tp.reduce((e,t,a)=>(e[t]=a,e),{}),n0e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Mge=n0e.map(([e,t])=>[Sp[e],Sp[t]]),_k=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function Pk(e){let t=e.reduce(({maxX:a,maxY:n,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(a,i),maxY:Math.max(n,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Fk(e,[t,a],[n,r]){let s=t/n,i=a/r,o=(u,p)=>({id:p,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/n,u.box[2]/r,u.box[3]/n],box:[Math.trunc(u.box[0]*i),Math.trunc(u.box[1]*s),Math.trunc(u.box[2]*i),Math.trunc(u.box[3]*s)],keypoints:u.keypoints.map(({score:c,part:d,position:h})=>({score:c,part:d,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/n,h.y/n]})),annotations:{}});return e.map((u,p)=>o(u,p))}var P0=class{constructor(t,a){le(this,"priorityQueue");le(this,"numberOfElements");le(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=a}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let a=2*t;if(aa?a:e}function Ok(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function lg(e,t){return{x:e.x+t.x,y:e.y+t.y}}var nn,s0e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],F0=1,Eu=16,i0e=50**2;function Dk(e,t,a,n,r,s,i=2){let o=x=>({y:s.get(x.y,x.x,e),x:s.get(x.y,x.x,s.shape[2]/2+e)}),l=(x,A,y)=>({y:og(Math.round(x.y/Eu),0,A-1),x:og(Math.round(x.x/Eu),0,y-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),f=lg(t.position,d);for(let x=0;x[Sp[d],Sp[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=ig(e.part,Eu,a);p[e.part.id]={score:e.score,part:Tp[e.part.id],position:c};for(let d=u-1;d>=0;--d){let h=i[d],f=o[d];p[h]&&!p[f]&&(p[f]=Dk(d,p[h],f,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function u0e(e,t){let[a,n,r]=t.shape,s=new P0(a*n*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[n])==null?void 0:i.position;return s?Ok(a,t,s.y,s.x)<=i0e:!1})}function d0e(e,t){return t.reduce((n,{position:r,score:s},i)=>(zk(e,r,i)||(n+=s),n),0)/t.length}function p0e(e,t,a,n,r,s){let i=[],o=u0e(s,t);for(;i.lengthh.score>s);let c=d0e(i,p),d=Pk(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function ug(e,t){if(!(nn!=null&&nn.executor))return[];let a=$e(()=>{if(!nn.inputs[0].shape)return[];let i=ge.resizeBilinear(e,[nn.inputs[0].shape[2],nn.inputs[0].shape[1]]),o=fe(me(He(i,"float32"),127.5),1),u=nn.execute(o,s0e).map(p=>_e(p,[0]));return u[1]=Da(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)Y(i);let r=p0e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return nn.inputs[0].shape?Fk(r,[e.shape[1],e.shape[2]],[nn.inputs[0].shape[2],nn.inputs[0].shape[1]]):[]}async function Lk(e){return!nn||ne.initial?nn=await Ee(e.body.modelPath):e.debug&&K("cached model:",nn.modelUrl),nn}var or,c0e=["fgr","pha","r1o","r2o","r3o","r4o"],Ut={},pg=0;function Vk(e){Y([Ut.r1i,Ut.r2i,Ut.r3i,Ut.r4i,Ut.downsample_ratio]),Ut.r1i=Be(0),Ut.r2i=Be(0),Ut.r3i=Be(0),Ut.r4i=Be(0),pg=e.segmentation.ratio||.5,Ut.downsample_ratio=Be(pg)}async function cg(e){return!or||ne.initial?or=await Ee(e.segmentation.modelPath):e.debug&&K("cached model:",or.modelUrl),Vk(e),or}var Wk=e=>$e(()=>{let t=_e(e,[0]),a=ae(t,ze.tf255);return He(a,"int32")});function dg(e,t){let a=e?Wk(e):ar([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?Wk(t):ar([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=at([a,n],-1);return Y([a,n]),r}function h0e(e){return $e(()=>{let t={};return t.unstack=Ta(e,-1),t.concat=at(t.unstack,1),t.split=ka(t.concat,4,1),t.stack=at(t.split,2),t.squeeze=_e(t.stack,[0]),t.expand=Gt(t.squeeze,-1),t.add=be(t.expand,1),t.mul=ae(t.add,127.5),t.cast=He(t.mul,"int32"),t.tile=Vr(t.cast,[1,1,3]),t.alpha=ar([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),at([t.tile,t.alpha],-1)})}async function Uk(e,t){if(or||(or=await cg(t)),!(or!=null&&or.executor))return null;Ut.src=me(e,255),pg!==t.segmentation.ratio&&Vk(t);let[a,n,r,s,i,o]=await or.executeAsync(Ut,c0e),l;switch(t.segmentation.mode||"default"){case"default":l=dg(a,n);break;case"alpha":l=dg(null,n);break;case"foreground":l=dg(a,null);break;case"state":l=h0e(r);break;default:l=Be(0)}return Y([Ut.src,a,n,Ut.r1i,Ut.r2i,Ut.r3i,Ut.r4i]),[Ut.r1i,Ut.r2i,Ut.r3i,Ut.r4i]=[r,s,i,o],l}var ga;async function hg(e){return!ga||ne.initial?ga=await Ee(e.segmentation.modelPath):e.debug&&K("cached model:",ga.modelUrl),ga}async function Hk(e,t){var r;if(ga||(ga=await hg(t)),!(ga!=null&&ga.executor)||!((r=ga==null?void 0:ga.inputs)!=null&&r[0].shape))return null;let a={};a.resize=ge.resizeBilinear(e,[ga.inputs[0].shape?ga.inputs[0].shape[1]:0,ga.inputs[0].shape?ga.inputs[0].shape[2]:0],!1),a.norm=me(a.resize,ze.tf255),a.res=ga.execute(a.norm),a.squeeze=_e(a.res,[0]),a.alpha=ge.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=ae(a.alpha,ze.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=_e(e),a.concat=at([a.input,a.mul],-1),n=He(a.concat,"int32");break;case"alpha":n=He(a.mul,"int32");break;default:n=Be(0)}return Object.keys(a).forEach(s=>Y(a[s])),n}function O0(e,t,a){var u,p;if(!t||!((u=e==null?void 0:e.config)!=null&&u.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],i=[],o=t.modelUrl,l=t.executor;if((p=l==null?void 0:l.graph)!=null&&p.nodes)for(let c of Object.values(l.graph.nodes)){let d=c.op.toLowerCase();s.includes(d)||s.push(d)}else!l&&e.config.debug&&K("model not loaded",a);for(let c of s)!n.includes(c)&&!r.includes(c)&&!e.env.kernels.includes(c)&&!e.env.kernels.includes(c.replace("_",""))&&!e.env.kernels.includes(c.replace("native",""))&&!e.env.kernels.includes(c.replace("v2",""))&&i.push(c);return e.config.debug&&i.length>0&&K("model validation failed:",a,i),i.length>0?{name:a,missing:i,ops:s,url:o}:null}var Cp=class{constructor(t){le(this,"instance");le(this,"models",{});this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ha))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ha).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ha)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var n,r,s,i,o,l,u,p,c,d,h,f,m,g,x,A,y,b,w,S,C,E,_,$,M,I,N;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?B9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)==null?void 0:n.enabled)&&!this.models.antispoof?pw(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)==null?void 0:r.enabled)&&!this.models.liveness?mw(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)==null?void 0:s.enabled)&&!this.models.faceres?iw(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)==null?void 0:i.enabled)&&!this.models.emotion?aw(this.instance.config):null,a.iris=this.instance.config.face.enabled&&((o=this.instance.config.face.iris)==null?void 0:o.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?j9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)==null?void 0:u.enabled)&&!this.models.facemesh?Y9(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)==null?void 0:p.enabled)&&!this.models.gear?yw(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)==null?void 0:c.enabled)&&!this.models.ssrnetage?kw(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)==null?void 0:d.enabled)&&!this.models.ssrnetgender?Cw(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)==null?void 0:h.enabled)&&!this.models.mobilefacenet?$w(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((f=this.instance.config.face.insightface)==null?void 0:f.enabled)&&!this.models.insightface?Dw(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((m=this.instance.config.body.modelPath)==null?void 0:m.includes("blazepose"))?w9(this.instance.config):null,a.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?v9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)==null?void 0:g.includes("efficientpose"))?N9(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((x=this.instance.config.body.modelPath)==null?void 0:x.includes("movenet"))?Nk(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((A=this.instance.config.body.modelPath)==null?void 0:A.includes("posenet"))?Lk(this.instance.config):null,a.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(y=this.instance.config.hand.detector)==null?void 0:y.modelPath)==null?void 0:b.includes("handtrack"))?xk(this.instance.config):null,a.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((S=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)==null?void 0:S.includes("handtrack"))?Ak(this.instance.config):null,(E=(C=this.instance.config.hand.detector)==null?void 0:C.modelPath)!=null&&E.includes("handdetect")&&([a.handpose,a.handskeleton]=this.models.handpose?[null,null]:await ck(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)==null?void 0:_.includes("centernet"))?S9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&(($=this.instance.config.object.modelPath)==null?void 0:$.includes("nanodet"))?Mk(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((M=this.instance.config.segmentation.modelPath)==null?void 0:M.includes("selfie"))?hg(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((I=this.instance.config.segmentation.modelPath)==null?void 0:I.includes("meet"))?J5(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((N=this.instance.config.segmentation.modelPath)==null?void 0:N.includes("rvm"))?cg(this.instance.config):null,await Promise.all([...Object.values(a)]);for(let O of Object.keys(a))this.models[O]=a[O]||this.models[O]||null}list(){let t=Object.keys(this.models).map(a=>{var n;return{name:a,loaded:this.models[a]!==null,size:0,url:this.models[a]?(n=this.models[a])==null?void 0:n.modelUrl:null}});for(let a of t){let n=Object.keys(ha).find(r=>r.startsWith(a.name));!n||(a.size=ha[n].sizeLoadedWeights,a.url=ha[n].url)}return t}loaded(){return this.list().filter(n=>n.loaded).map(n=>n.name)}validate(){let t=[];for(let a of Object.keys(this.models)){let n=this.models[a];if(!n)continue;let r=O0(this.instance,n,a);r&&t.push(r)}return t}};function qk(e,t,a,n,r){var o,l,u,p,c,d;let s=0,i=[];for(let h of e){let f={id:s++,face:h,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)h.box[0]>b.box[0]&&h.box[0]b.box[1]&&h.box[1]+h.box[3]f.body.box[0]&&b.box[0]+b.box[2]f.body.box[1]&&b.box[1]+b.box[3]f.body.box[0]&&b.box[1]+b.box[3]>f.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(m.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};x(f.face.box),x((p=f.body)==null?void 0:p.box),x((c=f.hands.left)==null?void 0:c.box),x((d=f.hands.right)==null?void 0:d.box);let A=Math.min(...m),y=Math.min(...g);f.box=[A,y,Math.max(...m)-A,Math.max(...g)-y],(r==null?void 0:r[1])&&(r==null?void 0:r[2])&&(f.boxRaw=[f.box[0]/r[2],f.box[1]/r[1],f.box[2]/r[2],f.box[3]/r[1]]),i.push(f)}return i}var D0=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -7345,7 +7556,7 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,V0=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,z0=` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -7913,4 +8124,4 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function v0e(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(i=>i.blob()),a,n;switch(e.config.warmup){case"face":a=await t(W0);break;case"body":case"full":a=await t(V0);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function w0e(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+W0;break;case"full":case"body":a="data:image/jpeg;base64,"+V0;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else return;n.onload=async()=>{let r=En(n.naturalWidth,n.naturalHeight);if(!r)K("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(n,0,0);let i=await e.image(r,!0),o=i.tensor?await e.detect(i.tensor,e.config):void 0;t(o)}},a?n.src=a:t(void 0)})}async function k0e(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(W0):a=t(V0);let n;if("node"in Ve&&ia()==="tensorflow"){let r=(void 0).decodeJpeg(a),s=Gt(r,0);e.tf.dispose(r),n=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&K("Warmup tfjs-node not loaded");return n}async function I0e(e){let t;return typeof createImageBitmap=="function"?t=await v0e(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await w0e(e):t=await k0e(e),t}async function S0e(e){var o,l,u,d;if(!V().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=ia(),a=tr();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;V().set("ENGINE_COMPILE_ONLY",!0);let n=kt().state.numTensors,r=[];for(let[c,p]of Object.entries(e.models).filter(([h,f])=>h!==null&&f!==null)){let h=(p==null?void 0:p.modelSignature)&&((l=(o=p==null?void 0:p.inputs)==null?void 0:o[0])==null?void 0:l.shape)?[...p.inputs[0].shape]:[1,64,64,3],f=(p==null?void 0:p.modelSignature)&&((d=(u=p==null?void 0:p.inputs)==null?void 0:u[0])==null?void 0:d.dtype)?p.inputs[0].dtype:"float32";for(let g=0;gY(y)):Y(g)}catch(g){e.config.debug&&K("compile fail model:",c)}Y(m)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),V().set("ENGINE_COMPILE_ONLY",!1);let i=kt().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function SI(e,t){await bp(e,!1);let a=te();return e.state="warmup",t&&(e.config=Tt(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?or():new Promise(async n=>{await e.models.load(),await S0e(e);let r=await I0e(e),s=te();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var wu,Ep,Rp,G0,Bs,S5=class{constructor(t){le(this,"version");le(this,"config");le(this,"result");le(this,"state");le(this,"process");le(this,"tf");le(this,"env",ne);le(this,"draw",i0);le(this,"match",_0);le(this,"models");le(this,"events");le(this,"faceTriangulation");le(this,"faceUVMap");le(this,"performance");Go(this,wu,void 0);Go(this,Ep,void 0);Go(this,Rp,void 0);le(this,"analyze",(...t)=>{if(!Gn(this,Ep))return;let a=this.tf.engine().state.numTensors,n=Gn(this,wu);$u(this,wu,a);let r=a-n;r!==0&&K(...t,r)});Go(this,G0,t=>{if(!Gn(this,Rp))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof dt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});le(this,"webcam",new Qh);le(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});Go(this,Bs,{});let a=(Ap.tfjs||b2).replace(/-(.*)/,"");yo.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,yo.modelBasePath=ne.browser?"../models/":"file://models/",this.version=tg,Object.defineProperty(this,"version",{value:tg}),this.config=JSON.parse(JSON.stringify(yo)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Tt(this.config,t)),D9(this.config),this.tf=Ve,this.state="idle",$u(this,wu,0),$u(this,Ep,!1),$u(this,Rp,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new Np(this),lg(),this.result=or(),this.process={tensor:null,canvas:null},this.faceTriangulation=Ew,this.faceUVMap=Rw,B0(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&K(`version: ${this.version}`),this.config.debug&&K(`tfjs version: ${this.tf.version["tfjs-core"]}`);let n=JSON.parse(JSON.stringify(this.env));delete n.kernels,delete n.initial,delete n.perfadd,this.config.debug&&K("environment:",n)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(yo)),this.config.backend=t,Q3(),ne.initial=!0}validate(t){let a=Z3(yo,t||this.config);return a.length===0&&(this.config=Tt(this.config,t)),a}now(){return te()}image(t,a=!1){return Yh(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Tt(this.config,a)),!this.config.segmentation.enabled)return null;let n=await Yh(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await bI(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await Jk(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await wI(n.tensor,this.config)),Y(n.tensor),r}compare(t,a){return O9(this.config,t,a)}async init(){await bp(this,!0),await this.tf.ready(),Q3()}async load(t){this.state="load";let a=te(),n=Object.values(this.models).filter(i=>i).length;t&&(this.config=Tt(this.config,t)),this.env.initial&&(await bp(this,!1)||K("error: backend check failed"),await Kd(),this.env.browser&&(this.config.debug&&K("configuration:",this.config),this.config.debug&&K("tf flags:",this.tf.ENV.flags))),await this.models.load(),this.env.initial&&this.config.debug&&K("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models).filter(i=>i).length!==n&&(this.models.validate(),this.emit("load"));let s=Math.trunc(te()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return Yk(t,this.config)}async warmup(t){let a=te(),n=await SI(this,t),r=te();return this.performance.warmup=Math.trunc(r-a),n}async profile(t,a){let n=await this.tf.profile(()=>this.detect(t,a)),r={},s=0;for(let o of n.kernels){let l=Number(o.kernelTimeMs)||0;r[o.name]?r[o.name]+=l:r[o.name]=l,s+=l}let i=[];Object.entries(r).forEach(o=>i.push({kernel:o[0],time:o[1],perc:0}));for(let o of i)o.perc=Math.round(1e3*o.time/s)/1e3,o.time=Math.round(1e3*o.time)/1e3;return i.sort((o,l)=>l.time-o.time),i.length=20,i}async detect(t,a){return this.state="detect",new Promise(async n=>{var g,y,A,x,b,w,S,C,N,_,$,M,I,E,O,L,B,G,j,U,H;this.state="config";let r;this.config=Tt(this.config,a),this.state="check";let s=Gn(this,G0).call(this,t);s&&(K(s,t),this.emit("error"),n(or(s)));let i=te();await this.load(),r=te(),this.state="image";let o=await Yh(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(te()-r):Math.trunc(te()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(or("could not convert input to tensor"));return}this.emit("image"),r=te(),this.config.skipAllowed=await P9(this.config,o.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(te()-r):Math.trunc(te()-r),this.analyze("Check Changed:");let l=[],u=[],d=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?Kg(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=te(),l=this.config.face.enabled?await Kg(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let p=this.config.body.maxDetected===-1?Tt(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((g=this.config.body.modelPath)!=null&&g.includes("posenet")?u=this.config.body.enabled?x5(o.tensor,p):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?hg(o.tensor,p):[]:(A=this.config.body.modelPath)!=null&&A.includes("efficientpose")?u=this.config.body.enabled?bg(o.tensor,p):[]:(x=this.config.body.modelPath)!=null&&x.includes("movenet")&&(u=this.config.body.enabled?c5(o.tensor,p):[]),this.performance.body&&delete this.performance.body):(r=te(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await x5(o.tensor,p):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await hg(o.tensor,p):[]:(S=this.config.body.modelPath)!=null&&S.includes("efficientpose")?u=this.config.body.enabled?await bg(o.tensor,p):[]:(C=this.config.body.modelPath)!=null&&C.includes("movenet")&&(u=this.config.body.enabled?await c5(o.tensor,p):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Tt(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((_=(N=this.config.hand.detector)==null?void 0:N.modelPath)!=null&&_.includes("handdetect")?d=this.config.hand.enabled?e5(o.tensor,h):[]:(M=($=this.config.hand.detector)==null?void 0:$.modelPath)!=null&&M.includes("handtrack")&&(d=this.config.hand.enabled?n5(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=te(),(E=(I=this.config.hand.detector)==null?void 0:I.modelPath)!=null&&E.includes("handdetect")?d=this.config.hand.enabled?await e5(o.tensor,h):[]:(L=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&L.includes("handtrack")&&(d=this.config.hand.enabled?await n5(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((B=this.config.object.modelPath)!=null&&B.includes("nanodet")?c=this.config.object.enabled?f5(o.tensor,this.config):[]:(G=this.config.object.modelPath)!=null&&G.includes("centernet")&&(c=this.config.object.enabled?gg(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=te(),(j=this.config.object.modelPath)!=null&&j.includes("nanodet")?c=this.config.object.enabled?await f5(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?await gg(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,u,d,c]=await Promise.all([l,u,d,c])),this.state="detect:gesture";let f=[];this.config.gesture.enabled&&(r=te(),f=[...Ck(l),...Tk(u),...Ek(d),...Nk(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(te()-i):Math.trunc(te()-i);let m=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:d,gesture:f,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:m[2],height:m[1],get persons(){return II(l,u,d,f,m)}},Y(o.tensor),this.emit("detect"),this.state="idle",n(this.result)})}async sleep(t){return new Promise(a=>{setTimeout(a,t)})}async video(t,a=!0,n=0){a?(Gn(this,Bs)[t.id]||(this.config.debug&&K("video start",t.id),Gn(this,Bs)[t.id]=!0),!t.paused&&Gn(this,Bs)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),Gn(this,Bs)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),Gn(this,Bs)[t.id]=!1)}};wu=new WeakMap,Ep=new WeakMap,Rp=new WeakMap,G0=new WeakMap,Bs=new WeakMap;return dS(C0e);})(); +2Q==`;async function g0e(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(i=>i.blob()),a,n;switch(e.config.warmup){case"face":a=await t(D0);break;case"body":case"full":a=await t(z0);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function x0e(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+D0;break;case"full":case"body":a="data:image/jpeg;base64,"+z0;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else return;n.onload=async()=>{let r=Cn(n.naturalWidth,n.naturalHeight);if(!r)K("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(n,0,0);let i=await e.image(r,!0),o=i.tensor?await e.detect(i.tensor,e.config):void 0;t(o)}},a?n.src=a:t(void 0)})}async function A0e(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(D0):a=t(z0);let n;if("node"in Ue&&ia()==="tensorflow"){let r=(void 0).decodeJpeg(a),s=Gt(r,0);e.tf.dispose(r),n=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&K("Warmup tfjs-node not loaded");return n}async function y0e(e){let t;return typeof createImageBitmap=="function"?t=await g0e(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await x0e(e):t=await A0e(e),t}async function b0e(e){var o,l,u,p;if(!W().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=ia(),a=er();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;W().set("ENGINE_COMPILE_ONLY",!0);let n=kt().state.numTensors,r=[];for(let[c,d]of Object.entries(e.models).filter(([h,f])=>h!==null&&f!==null)){let h=(d==null?void 0:d.modelSignature)&&((l=(o=d==null?void 0:d.inputs)==null?void 0:o[0])==null?void 0:l.shape)?[...d.inputs[0].shape]:[1,64,64,3],f=(d==null?void 0:d.modelSignature)&&((p=(u=d==null?void 0:d.inputs)==null?void 0:u[0])==null?void 0:p.dtype)?d.inputs[0].dtype:"float32";for(let g=0;gY(x)):Y(g)}catch(g){e.config.debug&&K("compile fail model:",c)}Y(m)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),W().set("ENGINE_COMPILE_ONLY",!1);let i=kt().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function Xk(e,t){await yp(e,!1);let a=te();return e.state="warmup",t&&(e.config=Ct(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?ir():new Promise(async n=>{await e.models.load(),await b0e(e);let r=await y0e(e),s=te();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var Ru,Np,Ep,L0,ws,mg=class{constructor(t){le(this,"version");le(this,"config");le(this,"result");le(this,"state");le(this,"process");le(this,"tf");le(this,"env",ne);le(this,"draw",a0);le(this,"match",E0);le(this,"models");le(this,"events");le(this,"faceTriangulation");le(this,"faceUVMap");le(this,"performance");Xo(this,Ru,void 0);Xo(this,Np,void 0);Xo(this,Ep,void 0);le(this,"analyze",(...t)=>{if(!Un(this,Np))return;let a=this.tf.engine().state.numTensors,n=Un(this,Ru);Bu(this,Ru,a);let r=a-n;r!==0&&K(...t,r)});Xo(this,L0,t=>{if(!Un(this,Ep))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof pt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});le(this,"webcam",new Kh);le(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});Xo(this,ws,{});let a=(xp.tfjs||m2).replace(/-(.*)/,"");wo.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,wo.modelBasePath=ne.browser?"../models/":"file://models/",this.version=H3,Object.defineProperty(this,"version",{value:H3}),this.config=JSON.parse(JSON.stringify(wo)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Ct(this.config,t)),i9(this.config),this.tf=Ue,this.state="idle",Bu(this,Ru,0),Bu(this,Np,!1),Bu(this,Ep,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new Cp(this),J3(),this.result=ir(),this.process={tensor:null,canvas:null},this.faceTriangulation=J9,this.faceUVMap=Q9,O0(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&K(`version: ${this.version}`),this.config.debug&&K(`tfjs version: ${this.tf.version["tfjs-core"]}`);let n=JSON.parse(JSON.stringify(this.env));delete n.kernels,delete n.initial,delete n.perfadd,this.config.debug&&K("environment:",n)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(wo)),this.config.backend=t,U3(),ne.initial=!0}validate(t){let a=B3(wo,t||this.config);return a.length===0&&(this.config=Ct(this.config,t)),a}now(){return te()}image(t,a=!1){return qh(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Ct(this.config,a)),!this.config.segmentation.enabled)return null;let n=await qh(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Uk(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await vk(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await Hk(n.tensor,this.config)),Y(n.tensor),r}compare(t,a){return s9(this.config,t,a)}async init(){await yp(this,!0),await this.tf.ready(),U3()}async load(t){this.state="load";let a=te(),n=Object.values(this.models.models).filter(i=>i).length;t&&(this.config=Ct(this.config,t)),this.env.initial&&(await yp(this,!1)||K("error: backend check failed"),await Kd(),this.env.browser&&(this.config.debug&&K("configuration:",this.config),this.config.debug&&K("tf flags:",this.tf.ENV.flags))),await this.models.load(this),this.env.initial&&this.config.debug&&K("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models.models).filter(i=>i).length!==n&&(this.models.validate(),this.emit("load"));let s=Math.trunc(te()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return bk(t,this.config)}async warmup(t){let a=te(),n=await Xk(this,t),r=te();return this.performance.warmup=Math.trunc(r-a),n}async profile(t,a){let n=await this.tf.profile(()=>this.detect(t,a)),r={},s=0;for(let o of n.kernels){let l=Number(o.kernelTimeMs)||0;r[o.name]?r[o.name]+=l:r[o.name]=l,s+=l}let i=[];Object.entries(r).forEach(o=>i.push({kernel:o[0],time:o[1],perc:0}));for(let o of i)o.perc=Math.round(1e3*o.time/s)/1e3,o.time=Math.round(1e3*o.time)/1e3;return i.sort((o,l)=>l.time-o.time),i.length=20,i}async detect(t,a){return this.state="detect",new Promise(async n=>{var g,x,A,y,b,w,S,C,E,_,$,M,I,N,O,L,B,G,j,U,H;this.state="config";let r;this.config=Ct(this.config,a),this.state="check";let s=Un(this,L0).call(this,t);s&&(K(s,t),this.emit("error"),n(ir(s)));let i=te();await this.load(),r=te(),this.state="image";let o=await qh(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(te()-r):Math.trunc(te()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(ir("could not convert input to tensor"));return}this.emit("image"),r=te(),this.config.skipAllowed=await r9(this.config,o.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(te()-r):Math.trunc(te()-r),this.analyze("Check Changed:");let l=[],u=[],p=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?L5(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=te(),l=this.config.face.enabled?await L5(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let d=this.config.body.maxDetected===-1?Ct(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((g=this.config.body.modelPath)!=null&&g.includes("posenet")?u=this.config.body.enabled?ug(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("blazepose")?u=this.config.body.enabled?n5(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("efficientpose")?u=this.config.body.enabled?d5(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("movenet")&&(u=this.config.body.enabled?ag(o.tensor,d):[]),this.performance.body&&delete this.performance.body):(r=te(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await ug(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await n5(o.tensor,d):[]:(S=this.config.body.modelPath)!=null&&S.includes("efficientpose")?u=this.config.body.enabled?await d5(o.tensor,d):[]:(C=this.config.body.modelPath)!=null&&C.includes("movenet")&&(u=this.config.body.enabled?await ag(o.tensor,d):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Ct(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((_=(E=this.config.hand.detector)==null?void 0:E.modelPath)!=null&&_.includes("handdetect")?p=this.config.hand.enabled?G5(o.tensor,h):[]:(M=($=this.config.hand.detector)==null?void 0:$.modelPath)!=null&&M.includes("handtrack")&&(p=this.config.hand.enabled?q5(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=te(),(N=(I=this.config.hand.detector)==null?void 0:I.modelPath)!=null&&N.includes("handdetect")?p=this.config.hand.enabled?await G5(o.tensor,h):[]:(L=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&L.includes("handtrack")&&(p=this.config.hand.enabled?await q5(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((B=this.config.object.modelPath)!=null&&B.includes("nanodet")?c=this.config.object.enabled?rg(o.tensor,this.config):[]:(G=this.config.object.modelPath)!=null&&G.includes("centernet")&&(c=this.config.object.enabled?i5(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=te(),(j=this.config.object.modelPath)!=null&&j.includes("nanodet")?c=this.config.object.enabled?await rg(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?await i5(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,u,p,c]=await Promise.all([l,u,p,c])),this.state="detect:gesture";let f=[];this.config.gesture.enabled&&(r=te(),f=[...Zw(l),...Kw(u),...Jw(p),...Yw(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(te()-r):Math.trunc(te()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(te()-i):Math.trunc(te()-i);let m=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:p,gesture:f,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:m[2],height:m[1],get persons(){return qk(l,u,p,f,m)}},Y(o.tensor),this.emit("detect"),this.state="idle",n(this.result)})}async sleep(t){return new Promise(a=>{setTimeout(a,t)})}async video(t,a=!0,n=0){a?(Un(this,ws)[t.id]||(this.config.debug&&K("video start",t.id),Un(this,ws)[t.id]=!0),!t.paused&&Un(this,ws)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),Un(this,ws)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),Un(this,ws)[t.id]=!1)}};Ru=new WeakMap,Np=new WeakMap,Ep=new WeakMap,L0=new WeakMap,ws=new WeakMap;return _I(w0e);})(); diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index e7a749ef..9c7da48b 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -4,7 +4,316 @@ author: ' */ -"use strict";var zo=Object.create;var P2=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var jo=Object.getOwnPropertyNames;var No=Object.getPrototypeOf,Io=Object.prototype.hasOwnProperty;var Oo=(e,t,n)=>t in e?P2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Lo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var n in t)P2(e,n,{get:t[n],enumerable:!0})},R1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of jo(t))!Io.call(e,r)&&r!==n&&P2(e,r,{get:()=>t[r],enumerable:!(o=So(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?zo(No(e)):{},R1(t||!e||!e.__esModule?P2(n,"default",{value:e,enumerable:!0}):n,e)),Co=e=>R1(P2({},"__esModule",{value:!0}),e);var k=(e,t,n)=>(Oo(e,typeof t!="symbol"?t+"":t,n),n),M1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var fe=(e,t,n)=>(M1(e,t,"read from private field"),n?n.call(e):t.get(e)),i2=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},k2=(e,t,n,o)=>(M1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var H=Lo((y4,Vt)=>{"use strict";var Ht=Object.defineProperty,Wo=Object.getOwnPropertyDescriptor,Do=Object.getOwnPropertyNames,Fo=Object.prototype.hasOwnProperty,Bo=(e,t)=>{for(var n in t)Ht(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Do(t))!Fo.call(e,r)&&r!==n&&Ht(e,r,{get:()=>t[r],enumerable:!(o=Wo(t,r))||o.enumerable});return e},Ho=(e,t,n)=>(Bt(e,t,"default"),n&&Bt(n,t,"default")),Go=e=>Bt(Ht({},"__esModule",{value:!0}),e),Gt={};Bo(Gt,{version:()=>Yo});Vt.exports=Go(Gt);Ho(Gt,require("@tensorflow/tfjs-node-gpu"),Vt.exports);var P1="4.0.0",Vo="4.0.0",Zo="4.0.0",Xo="4.0.0",qo="4.0.0",Uo="0.0.1-alpha.14",Yo={tfjs:P1,"tfjs-core":P1,"tfjs-converter":Vo,"tfjs-backend-cpu":Zo,"tfjs-backend-webgl":Xo,"tfjs-backend-wasm":qo,"tfjs-backend-webgpu":Uo}});var d4={};we(d4,{Env:()=>w2,Human:()=>b1,default:()=>b1,defaults:()=>qe,draw:()=>Q2,empty:()=>ue,env:()=>v,match:()=>zt,models:()=>h1});module.exports=Co(d4);var Ae=V(H());function u(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function k1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var g=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Zt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Zt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&u("invalid configuration",o),o}function A0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=A0(s,A):n[r]=A}),n),{})}var qe={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var I0=V(H());var N=V(H());var w1=` +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod3) => function __require() { + return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports; +}; +var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod3, isNodeMode, target) => (target = mod3 != null ? __create(__getProtoOf(mod3)) : {}, __copyProps( + isNodeMode || !mod3 || !mod3.__esModule ? __defProp(target, "default", { value: mod3, enumerable: true }) : target, + mod3 +)); +var __toCommonJS = (mod3) => __copyProps(__defProp({}, "__esModule", { value: true }), mod3); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all2) => { + for (var name in all2) + __defProp2(target, name, { get: all2[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __reExport = (target, mod3, secondTarget) => (__copyProps2(target, mod3, "default"), secondTarget && __copyProps2(secondTarget, mod3, "default")); + var __toCommonJS2 = (mod3) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod3); + var tf_node_gpu_exports = {}; + __export2(tf_node_gpu_exports, { + version: () => version7 + }); + module2.exports = __toCommonJS2(tf_node_gpu_exports); + __reExport(tf_node_gpu_exports, require("@tensorflow/tfjs-node-gpu"), module2.exports); + var version4 = "4.1.0"; + var version22 = "4.1.0"; + var version32 = "4.1.0"; + var version42 = "4.1.0"; + var version5 = "4.1.0"; + var version6 = "0.0.1-alpha.16"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + "tfjs-converter": version22, + "tfjs-backend-cpu": version32, + "tfjs-backend-webgl": version42, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 + }; + } +}); + +// src/human.ts +var human_exports = {}; +__export(human_exports, { + Env: () => Env, + Human: () => Human, + default: () => Human, + defaults: () => config, + draw: () => draw_exports, + empty: () => empty, + env: () => env, + match: () => match_exports, + models: () => models_exports2 +}); +module.exports = __toCommonJS(human_exports); +var tf38 = __toESM(require_tfjs_esm()); + +// src/util/util.ts +function log(...msg) { + const dt = new Date(); + const ts = `${dt.getHours().toString().padStart(2, "0")}:${dt.getMinutes().toString().padStart(2, "0")}:${dt.getSeconds().toString().padStart(2, "0")}.${dt.getMilliseconds().toString().padStart(3, "0")}`; + if (msg) + console.log(ts, "Human:", ...msg); +} +function join(folder, file) { + const separator = folder.endsWith("/") ? "" : "/"; + const skipJoin = file.startsWith(".") || file.startsWith("/") || file.startsWith("http:") || file.startsWith("https:") || file.startsWith("file:"); + const path = skipJoin ? `${file}` : `${folder}${separator}${file}`; + if (!path.toLocaleLowerCase().includes(".json")) + throw new Error(`modelpath error: expecting json file: ${path}`); + return path; +} +var now = () => { + if (typeof performance !== "undefined") + return performance.now(); + return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString()); +}; +function validate(defaults, config3, parent = "config", msgs = []) { + for (const key of Object.keys(config3)) { + if (typeof config3[key] === "object") { + validate(defaults[key], config3[key], key, msgs); + } else { + const defined = defaults && typeof defaults[key] !== "undefined"; + if (!defined) + msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` }); + const same = defaults && typeof defaults[key] === typeof config3[key]; + if (defined && !same) + msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] }); + } + } + if (config3.debug && parent === "config" && msgs.length > 0) + log("invalid configuration", msgs); + return msgs; +} +function mergeDeep(...objects) { + const isObject = (obj) => obj && typeof obj === "object"; + return objects.reduce((prev, obj) => { + Object.keys(obj || {}).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + if (Array.isArray(pVal) && Array.isArray(oVal)) + prev[key] = pVal.concat(...oVal); + else if (isObject(pVal) && isObject(oVal)) + prev[key] = mergeDeep(pVal, oVal); + else + prev[key] = oVal; + }); + return prev; + }, {}); +} + +// src/config.ts +var config = { + backend: "", + modelBasePath: "", + cacheModels: true, + validateModels: true, + wasmPath: "", + wasmPlatformFetch: false, + debug: false, + async: true, + warmup: "full", + cacheSensitivity: 0.7, + skipAllowed: false, + deallocate: false, + flags: {}, + softwareKernels: false, + filter: { + enabled: true, + equalization: false, + width: 0, + height: 0, + flip: false, + return: true, + autoBrightness: true, + brightness: 0, + contrast: 0, + sharpness: 0, + blur: 0, + saturation: 0, + hue: 0, + negative: false, + sepia: false, + vintage: false, + kodachrome: false, + technicolor: false, + polaroid: false, + pixelate: 0 + }, + gesture: { + enabled: true + }, + face: { + enabled: true, + detector: { + modelPath: "blazeface.json", + rotation: true, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + iouThreshold: 0.1, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + modelPath: "iris.json" + }, + emotion: { + enabled: true, + minConfidence: 0.1, + skipFrames: 99, + skipTime: 1500, + modelPath: "emotion.json" + }, + description: { + enabled: true, + modelPath: "faceres.json", + skipFrames: 99, + skipTime: 3e3, + minConfidence: 0.1 + }, + antispoof: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "antispoof.json" + }, + liveness: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "liveness.json" + } + }, + body: { + enabled: true, + modelPath: "movenet-lightning.json", + maxDetected: -1, + minConfidence: 0.3, + skipFrames: 1, + skipTime: 200 + }, + hand: { + enabled: true, + rotation: true, + skipFrames: 99, + skipTime: 1e3, + minConfidence: 0.5, + iouThreshold: 0.2, + maxDetected: -1, + landmarks: true, + detector: { + modelPath: "handtrack.json" + }, + skeleton: { + modelPath: "handlandmark-full.json" + } + }, + object: { + enabled: false, + modelPath: "centernet.json", + minConfidence: 0.2, + iouThreshold: 0.4, + maxDetected: 10, + skipFrames: 99, + skipTime: 2e3 + }, + segmentation: { + enabled: false, + modelPath: "rvm.json", + ratio: 0.5, + mode: "default" + } +}; + +// src/util/env.ts +var tf3 = __toESM(require_tfjs_esm()); + +// src/image/image.ts +var tf2 = __toESM(require_tfjs_esm()); + +// src/image/imagefxshaders.ts +var vertexIdentity = ` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -14,7 +323,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var E1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +336,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14]; gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19]; } -`,z1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +349,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,S1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +363,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,j1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +387,8 @@ gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794; gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265; } -`,N1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +410,6035 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var Xt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},qt=class{constructor(t,n,o){k(this,"uniform",{});k(this,"attribute",{});k(this,"gl");k(this,"id");k(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(u(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(u("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){u("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){u(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Xt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Xt(n,"uniform",this.uniform),Xt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function I1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=ee(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){u("filter: cannot get webgl context");return}this.gl=i;function y(T,m){if(!(T===l.width&&m===l.height)){if(l.width=T,l.height=m,!A){let h=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,h,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,m){let h=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,h);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,m,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:h,texture:P}}function p(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let m=null,h=null,S=!1;e===0?m=t:m=p(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(h=null,S=e%2===0):(o=(o+1)%2,h=p(o).fbo||null),i.bindTexture(i.TEXTURE_2D,m),i.bindFramebuffer(i.FRAMEBUFFER,h),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function b(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new qt(i,w1,T),!a)return u("filter: could not get webgl program"),null;let m=Float32Array.BYTES_PER_ELEMENT,h=4*m;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,h,0*m),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,h,2*m),c[T]=a,a}let M={colorMatrix:T=>{let m=new Float32Array(T);m[4]/=255,m[9]/=255,m[14]/=255,m[19]/=255;let h=m[18]===1&&m[3]===0&&m[8]===0&&m[13]===0&&m[15]===0&&m[16]===0&&m[17]===0&&m[19]===0?z1:E1,S=b(h);!S||(i.uniform1fv(S.uniform.m,m),f())},brightness:T=>{let m=(T||0)+1;M.colorMatrix([m,0,0,0,0,0,m,0,0,0,0,0,m,0,0,0,0,0,1,0])},saturation:T=>{let m=(T||0)*2/3+1,h=(m-1)*-.5;M.colorMatrix([m,h,h,0,0,h,m,h,0,0,h,h,m,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:T=>{let m=(T||0)+1,h=-128*(m-1);M.colorMatrix([m,0,0,0,h,0,m,0,0,h,0,0,m,0,h,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let m=Math.cos(T),h=Math.sin(T),S=.213,P=.715,I=.072;M.colorMatrix([S+m*(1-S)+h*-S,P+m*-P+h*-P,I+m*-I+h*(1-I),0,0,S+m*-S+h*.143,P+m*(1-P)+h*.14,I+m*-I+h*-.283,0,0,S+m*-S+h*-(1-S),P+m*-P+h*P,I+m*(1-I)+h*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let m=new Float32Array(T),h=1/l.width,S=1/l.height,P=b(N1);!P||(i.uniform1fv(P.uniform.m,m),i.uniform2f(P.uniform.px,h,S),f())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let m=T||1;M.convolution.call(this,[0,-1*m,0,-1*m,1+4*m,-1*m,0,-1*m,0])},emboss:T=>{let m=T||1;M.convolution.call(this,[-2*m,-1*m,0,-1*m,1,1*m,0,1*m,2*m])},blur:T=>{let m=T/7/l.width,h=T/7/l.height,S=b(j1);!S||(i.uniform2f(S.uniform.px,0,h),f(x.INTERMEDIATE),i.uniform2f(S.uniform.px,m,0),f())},pixelate:T=>{let m=T/l.width,h=T/l.height,S=b(S1);!S||(i.uniform2f(S.uniform.size,m,h),f())}};this.add=function(T){let m=Array.prototype.slice.call(arguments,1),h=M[T];s.push({func:h,args:m})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let m=0;mx.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[Y.sub(n[0],o[0]),Y.sub(n[1],o[1]),Y.sub(n[2],o[2])],i=[Y.sub(r[0],o[0]),Y.sub(r[1],o[1]),Y.sub(r[2],o[2])],y=[Y.mul(x[0],l),Y.mul(x[1],l),Y.mul(x[2],l)],d=Y.stack([y[0],y[1],y[2]],2);c=Y.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),Y.dispose([...x,...i,...y])}else c=Y.expandDims(t,0);return Y.dispose([...n,...o,...r,n,t,e]),c}var B2=3840,v0=null,R0=null,l2=null,e0,K0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function Ut(){K0.inputSum=0,K0.cacheDiff=1,K0.sumMethod=0,K0.inputTensor=void 0}function ee(e,t){let n;if(v.browser)if(v.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof v.Canvas!="undefined"?n=new v.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function H2(e,t){let n=t||ee(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function G2(e,t,n=!0){var y,d,p;if(!e)return t.debug&&u("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof v.Canvas!="undefined"&&e instanceof v.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let b=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(b,0),N.dispose(b)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let b=N.cast(f,"float32");N.dispose(f),f=b}return{tensor:f,canvas:t.filter.return?R0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&u("input stream is not ready"),{tensor:null,canvas:v0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&u("cannot determine input dimensions"),{tensor:null,canvas:v0};let s=o,A=r;if(s>B2&&(s=B2,A=Math.trunc(s*r/o)),A>B2&&(A=B2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!v0||v0.width!==s||v0.height!==A)&&(v0=ee(s,A));let a=v0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),(!R0||v0.width!==R0.width||v0.height!==R0.height)&&(R0=ee(v0.width,v0.height)),t.filter.enabled&&v.webgl.supported?(e0||(e0=v.browser?new I1:null),v.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((p=e0.get())==null?void 0:p.length)>1?R0=e0.apply(v0):R0=e0.draw(v0)):(t.debug&&u("input process error: cannot initialize filters"),v.webgl.supported=!1,t.filter.enabled=!1,H2(v0,R0))):(H2(v0,R0),e0&&(e0=null),v.filter=!!e0),!n)return{tensor:null,canvas:R0};if(!R0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(v.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!l2||R0.width!==l2.width||R0.height!==l2.height)&&(l2=ee(R0.width,R0.height)),N.browser&&v.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(R0):(l2=H2(R0),l=N.browser.fromPixels(l2));else{let M=H2(R0).getContext("2d").getImageData(0,0,s,A);c=M.data.length/s/A;let T=new Uint8Array(M.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await F2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),b=await f.data();t.filter.brightness=b[0]>1?1-b[0]/255:1-b[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?R0:null}}async function O1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!K0.inputTensor)K0.inputTensor=N.clone(t);else if(K0.inputTensor.shape[1]!==t.shape[1]||K0.inputTensor.shape[2]!==t.shape[2])N.dispose(K0.inputTensor),K0.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,K0.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([K0.inputTensor,o.diff,o.squared,o.sum]),K0.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function L1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||u("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||u("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var w2=class{constructor(){k(this,"browser");k(this,"node");k(this,"worker");k(this,"platform","");k(this,"agent","");k(this,"backends",[]);k(this,"initial");k(this,"filter");k(this,"tfjs");k(this,"offscreen");k(this,"perfadd",!1);k(this,"tensorflow",{version:void 0,gpu:void 0});k(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});k(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});k(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});k(this,"cpu",{model:void 0,flags:[]});k(this,"kernels",[]);k(this,"Canvas");k(this,"Image");k(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:I0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(I0.engine().registryFactory);try{this.tensorflow={version:I0.backend().binding?I0.backend().binding.TF_Version:void 0,gpu:I0.backend().binding?I0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await I0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await I0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=ee(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=I0.getKernelsForBackend(I0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},v=new w2;var Z2=class{constructor(){k(this,"config");k(this,"element");k(this,"stream");k(this,"devices",[]);k(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});k(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let r=document.getElementById(t.element);if(r&&r instanceof HTMLVideoElement)this.element=r;else{this.config.debug&&u("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&u("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&u("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&u("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&u("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(r){u("webcam",r);return}if(!this.stream){this.config.debug&&u("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(r=>{this.element?this.element.onloadeddata=()=>r(!0):r(!1)}),await this.element.play(),this.config.debug&&u("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});k(this,"pause",()=>{this.element&&this.element.pause()});k(this,"play",async()=>{this.element&&await this.element.play()});k(this,"stop",()=>{this.config.debug&&u("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var c2=V(H());var Yt={};we(Yt,{age:()=>cr,"anti-spoofing":()=>Vr,antispoof:()=>_o,blazeface:()=>$o,"blazeface-back":()=>dr,"blazeface-front":()=>xr,"blazepose-detect":()=>Gr,"blazepose-detector2d":()=>yr,"blazepose-detector3d":()=>fr,"blazepose-full":()=>mr,"blazepose-heavy":()=>pr,"blazepose-lite":()=>ur,centernet:()=>er,default:()=>ns,efficientpose:()=>hr,"efficientpose-i-lite":()=>Zr,"efficientpose-ii-lite":()=>Xr,"efficientpose-iv":()=>qr,emotion:()=>tr,faceboxes:()=>br,facemesh:()=>nr,"facemesh-attention":()=>Tr,"facemesh-attention-alt":()=>gr,"facemesh-detection-full":()=>vr,"facemesh-detection-short":()=>Rr,"facemesh-orig":()=>Mr,faceres:()=>or,"faceres-deep":()=>Pr,gear:()=>kr,gender:()=>Er,"gender-ssrnet-imdb":()=>wr,handdetect:()=>zr,"handlandmark-full":()=>rr,"handlandmark-lite":()=>Sr,"handlandmark-sparse":()=>jr,handskeleton:()=>Nr,handtrack:()=>sr,"insightface-efficientnet-b0":()=>Ur,"insightface-ghostnet-strides1":()=>Yr,"insightface-ghostnet-strides2":()=>Kr,"insightface-mobilenet-emore":()=>Jr,"insightface-mobilenet-swish":()=>Qr,iris:()=>Ar,liveness:()=>ar,meet:()=>Ir,mobileface:()=>Or,mobilefacenet:()=>Lr,models:()=>ir,"movenet-lightning":()=>lr,"movenet-multipose":()=>Cr,"movenet-thunder":()=>Wr,nanodet:()=>Dr,"nanodet-e":()=>_r,"nanodet-g":()=>$r,"nanodet-m":()=>es,"nanodet-t":()=>ts,posenet:()=>Fr,rvm:()=>Br,selfie:()=>Hr});var _o=853098,$o=538928,er=4030290,tr=820516,nr=1477958,or=6978814,rr=5431368,sr=2964837,Ar=2599092,ar=592976,ir=0,lr=4650216,cr=161240,dr=538928,xr=402048,yr=7499400,fr=5928856,mr=6338290,pr=27501554,ur=2725490,hr=5651240,br=2013002,gr=2387598,Tr=2382414,vr=1026192,Rr=201268,Mr=2955780,Pr=13957620,kr=1498916,wr=161236,Er=201808,zr=3515612,Sr=2023432,jr=5286322,Nr=5502280,Ir=372228,Or=2183192,Lr=5171976,Cr=9448838,Wr=12477112,Dr=7574558,Fr=5032780,Br=3739355,Hr=212886,Gr=5928804,Vr=853098,Zr=2269064,Xr=5651240,qr=25643252,Ur=13013224,Yr=8093408,Kr=8049584,Jr=6938536,Qr=12168584,_r=12319156,$r=7574558,es=1887474,ts=5294216,ns={antispoof:_o,blazeface:$o,centernet:er,emotion:tr,facemesh:nr,faceres:or,"handlandmark-full":rr,handtrack:sr,iris:Ar,liveness:ar,models:ir,"movenet-lightning":lr,age:cr,"blazeface-back":dr,"blazeface-front":xr,"blazepose-detector2d":yr,"blazepose-detector3d":fr,"blazepose-full":mr,"blazepose-heavy":pr,"blazepose-lite":ur,efficientpose:hr,faceboxes:br,"facemesh-attention-alt":gr,"facemesh-attention":Tr,"facemesh-detection-full":vr,"facemesh-detection-short":Rr,"facemesh-orig":Mr,"faceres-deep":Pr,gear:kr,"gender-ssrnet-imdb":wr,gender:Er,handdetect:zr,"handlandmark-lite":Sr,"handlandmark-sparse":jr,handskeleton:Nr,meet:Ir,mobileface:Or,mobilefacenet:Lr,"movenet-multipose":Cr,"movenet-thunder":Wr,nanodet:Dr,posenet:Fr,rvm:Br,selfie:Hr,"blazepose-detect":Gr,"anti-spoofing":Vr,"efficientpose-i-lite":Zr,"efficientpose-ii-lite":Xr,"efficientpose-iv":qr,"insightface-efficientnet-b0":Ur,"insightface-ghostnet-strides1":Yr,"insightface-ghostnet-strides2":Kr,"insightface-mobilenet-emore":Jr,"insightface-mobilenet-swish":Qr,"nanodet-e":_r,"nanodet-g":$r,"nanodet-m":es,"nanodet-t":ts};var O0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},E0={};async function os(e,t){return O0.debug&&u("load model fetch:",e,t),fetch(e,t)}function C1(e){O0.cacheModels=e.cacheModels,O0.verbose=e.debug,O0.modelBasePath=e.modelBasePath}async function O(e){var c,x,i,y;let t=k1(O0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;E0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:Yt[o],inCache:!1,url:""},O0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=O0.cacheSupported&&O0.cacheModels?await c2.io.listModels():{}}catch(d){O0.cacheSupported=!1}E0[o].inCache=O0.cacheSupported&&O0.cacheModels&&Object.keys(s).includes(r),E0[o].url=E0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,p)=>os(d,p)},a=new c2.GraphModel(E0[o].url,A),l=!1;try{a.findIOHandler(),O0.debug&&u("model load handler:",a.handler)}catch(d){u("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;E0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await c2.loadGraphModel(E0[o].inCache?r:t,A),E0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,O0.verbose&&u("load:",{model:o,url:a.modelUrl,bytes:E0[o].sizeLoadedWeights}),l=!0}catch(d){u("error loading model:",t,d)}if(l&&O0.cacheModels&&O0.cacheSupported&&!E0[o].inCache)try{let d=await a.save(r);O0.debug&&u("model saved:",r,d)}catch(d){u("error saving model:",t,d)}return a}var Kt="3.0.0";var E=V(H());var m0=V(H());var n0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function As(){let e=n0.gl;!e||(n0.extensions=e.getSupportedExtensions())}function W1(e){var t;if(e.config.backend==="humangl"&&(n0.name in m0.engine().registry&&!((t=n0==null?void 0:n0.gl)!=null&&t.getParameter(n0.gl.VERSION))&&(u("humangl error: backend invalid context"),e.models.reset()),!m0.findBackend(n0.name))){try{n0.canvas=ee(100,100)}catch(r){u("humangl error: cannot create canvas:",r);return}try{if(n0.gl=n0.canvas.getContext("webgl2",n0.webGLattr),!n0.gl){u("humangl error: cannot get webgl context");return}if(!n0.gl.getParameter(n0.gl.VERSION).includes("2.0")){u("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}n0.canvas&&(n0.canvas.addEventListener("webglcontextlost",s=>{throw u("humangl error:",s.type),u("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),n0.canvas.addEventListener("webglcontextrestored",s=>{u("humangl error: context restored:",s)}),n0.canvas.addEventListener("webglcontextcreationerror",s=>{u("humangl error: context create:",s)}))}catch(r){u("humangl error: cannot get webgl context:",r);return}try{m0.setWebGLContext(2,n0.gl)}catch(r){u("humangl error: cannot set webgl context:",r);return}try{let r=new m0.GPGPUContext(n0.gl);m0.registerBackend(n0.name,()=>new m0.MathBackendWebGL(r),n0.priority)}catch(r){u("humangl error: cannot register webgl backend:",r);return}try{m0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:n0.name};m0.registerKernel(A)})}catch(r){u("humangl error: cannot update webgl backend registration:",r);return}try{m0.env().flagRegistry.WEBGL_VERSION&&m0.env().set("WEBGL_VERSION",2)}catch(r){u("humangl error: cannot set WebGL backend flags:",r);return}As();let n=m0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&u("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):u("humangl error: no current gl context:",o,n0.gl)}}var Ee=V(H()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function D1(){C.tf255=Ee.scalar(255,"float32"),C.tf1=Ee.scalar(1,"float32"),C.tf2=Ee.scalar(2,"float32"),C.tf05=Ee.scalar(.5,"float32"),C.tf127=Ee.scalar(127.5,"float32"),C.rgb=Ee.tensor1d([.2989,.587,.114],"float32")}async function ls(){return await v.updateBackend(),v.browser?v.webgpu.supported&&v.webgpu.backend?"webgpu":v.webgl.supported&&v.webgl.backend?"webgl":v.wasm.supported&&v.wasm.backend?"wasm":"cpu":"tensorflow"}function cs(e){let t=[];if(!v.kernels.includes("mod")){let n={kernelName:"Mod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.sub(o.inputs.a,E.mul(E.div(o.inputs.a,o.inputs.b),o.inputs.b)))};E.registerKernel(n),v.kernels.push("mod"),t.push("mod")}if(!v.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.add(E.mul(E.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),E.mod(o.inputs.a,o.inputs.b)))};E.registerKernel(n),v.kernels.push("floormod"),t.push("floormod")}if(!v.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>{let r=E.getBackend();E.setBackend("cpu");let s=E.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return E.setBackend(r),s})};E.registerKernel(n),v.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&u("registered kernels:",t)}var F1={};async function E2(e,t=!1){var n;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await ls()),t||v.initial||e.config.backend&&e.config.backend.length>0&&E.getBackend()!==e.config.backend){let o=g();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&u("running inside web worker"),v.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&u("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),v.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&u(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),v.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")u("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let s=await navigator.gpu.requestAdapter();if(e.config.debug&&u("enumerated webgpu adapter:",s),!s)u("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let A="requestAdapterInfo"in s?await s.requestAdapterInfo():void 0;u("webgpu adapter info:",A)}}let r=Object.keys(E.engine().registryFactory);if(e.config.backend==="humangl"&&!r.includes("humangl")&&(W1(e),r=Object.keys(E.engine().registryFactory)),e.config.debug&&u("available backends:",r),r.includes(e.config.backend)||(u(`error: backend ${e.config.backend} not found in registry`),e.config.backend=v.node?"tensorflow":"webgl",e.config.debug&&u(`override: setting backend ${e.config.backend}`)),e.config.debug&&u("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(E.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&E.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&u("wasm path:",e.config.wasmPath),typeof E.setWasmPaths!="undefined")E.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let s=!1,A=!1;try{s=await E.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await E.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&u(`wasm execution: ${A?"simd":"no simd"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&u("warning: wasm simd support is not enabled")}catch(a){u("wasm detection failed")}}try{await E.setBackend(e.config.backend),await E.ready()}catch(s){return u("error: cannot set backend:",e.config.backend,s),!1}e.config.debug&&(F1=JSON.parse(JSON.stringify(E.env().flags)))}if((E.getBackend()==="humangl"||E.getBackend()==="webgl")&&(E.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&E.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),E.env().flagRegistry.WEBGL_EXP_CONV&&E.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(u("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),E.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),E.getBackend(),e.config.debug){let r=E.env().flags,s={};for(let A of Object.keys(r))F1[A]!==r[A]&&(s[A]=r[A]);e.config.debug&&Object.keys(s).length>0&&u("backend:",E.getBackend(),"flags:",s)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&u("flags:",e.config.flags);for(let[r,s]of Object.entries(e.config.flags))E.env().set(r,s)}E.enableProdMode(),D1(),e.performance.initBackend=Math.trunc(g()-o),e.config.backend=E.getBackend(),await v.updateBackend(),cs(e.config),v.initial=!1}return!0}function X2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&u("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};E.registerKernel(o)}v.kernels=E.getKernelsForBackend(E.getBackend()).map(n=>n.kernelName.toLowerCase())}var Q2={};we(Q2,{all:()=>Hs,body:()=>U2,canvas:()=>Bs,face:()=>q2,gesture:()=>J2,hand:()=>Y2,init:()=>n5,object:()=>K2,options:()=>d0,person:()=>Fs});var J0=e=>{if(!e)u("draw error: invalid canvas");else if(!e.getContext)u("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)u("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),_=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Ye=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function te(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` -`).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function be(e,t,n,o,r){e.fillStyle=Ye(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function me(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function Jt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Ye(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function H1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){Jt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oz2[e]),L4=xs.map(e=>z2[e]),C4=ys.map(e=>z2[e]);function ze(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var fs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],us=[[474,475],[475,476],[476,477],[477,474]],hs=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],bs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],gs=[[469,470],[470,471],[471,472],[472,469]],Ts=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],W4={lips:ze(fs),leftEye:ze(ms),leftEyebrow:ze(ps),leftIris:ze(us),rightEye:ze(hs),rightEyebrow:ze(bs),rightIris:ze(gs),faceOval:ze(Ts)};var vs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Rs=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ms=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ps=[[474,475],[475,476],[476,477],[477,474]],ks=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ws=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Es=[[469,470],[470,471],[471,472],[472,469]],zs=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Se(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Ss={lips:Se(vs),leftEye:Se(Rs),leftEyebrow:Se(Ms),leftIris:Se(Ps),rightEye:Se(ks),rightEyebrow:Se(ws),rightIris:Se(Es),faceOval:Se(zs)},js=Object.entries(Ss).map(([e,t])=>t.map(n=>[n,e])).flat(),D4=new Map(js),S2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Qe=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],_e=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var K;function Ns(e,t){var o,r,s,A,a,l,c,x,i;if(!K.drawLabels||((o=K.faceLabels)==null?void 0:o.length)===0)return;let n=K.faceLabels.slice();if(e.score&&(n=_(n,"[score]",100*e.score)),e.gender&&(n=_(n,"[gender]",e.gender)),e.genderScore&&(n=_(n,"[genderScore]",100*e.genderScore)),e.age&&(n=_(n,"[age]",e.age)),e.distance&&(n=_(n,"[distance]",100*e.distance)),e.real&&(n=_(n,"[real]",100*e.real)),e.live&&(n=_(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);y.length>3&&(y.length=3),n=_(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=_(n,"[roll]",Ue(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=_(n,"[yaw]",Ue(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=_(n,"[pitch]",Ue(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=_(n,"[gaze]",Ue(e.rotation.gaze.bearing))),te(t,n,e.box[0],e.box[1],K)}function Is(e,t){var n,o,r,s;if(((n=e.annotations)==null?void 0:n.leftEyeIris)&&((o=e.annotations)==null?void 0:o.leftEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(((r=e.annotations)==null?void 0:r.rightEyeIris)&&((s=e.annotations)==null?void 0:s.rightEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function Os(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,s=new Path2D(` - M ${e.box[0]+e.box[2]/2} ${e.box[1]} +`; + +// src/image/imagefx.ts +var collect = (source, prefix, collection) => { + const r = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r, (match2, name) => { + collection[name] = 0; + return match2; + }); +}; +var GLProgram = class { + constructor(gl, vertexSource, fragmentSource) { + __publicField(this, "uniform", {}); + __publicField(this, "attribute", {}); + __publicField(this, "gl"); + __publicField(this, "id"); + __publicField(this, "compile", (source, type) => { + const shader = this.gl.createShader(type); + if (!shader) { + log("filter: could not create shader"); + return null; + } + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) { + log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || "unknown"}`); + return null; + } + return shader; + }); + this.gl = gl; + const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER); + const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER); + this.id = this.gl.createProgram(); + if (!vertexShader || !fragmentShader) + return; + if (!this.id) { + log("filter: could not create webgl program"); + return; + } + this.gl.attachShader(this.id, vertexShader); + this.gl.attachShader(this.id, fragmentShader); + this.gl.linkProgram(this.id); + if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) { + log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || "unknown"}`); + return; + } + this.gl.useProgram(this.id); + collect(vertexSource, "attribute", this.attribute); + for (const a in this.attribute) + this.attribute[a] = this.gl.getAttribLocation(this.id, a); + collect(vertexSource, "uniform", this.uniform); + collect(fragmentSource, "uniform", this.uniform); + for (const u in this.uniform) + this.uniform[u] = this.gl.getUniformLocation(this.id, u); + } +}; +function GLImageFilter() { + let drawCount = 0; + let sourceTexture = null; + let lastInChain = false; + let currentFramebufferIndex = -1; + let tempFramebuffers = [null, null]; + let filterChain = []; + let vertexBuffer = null; + let currentProgram = null; + const fxcanvas = canvas(100, 100); + const shaderProgramCache = {}; + const DRAW = { INTERMEDIATE: 1 }; + const gl = fxcanvas.getContext("webgl"); + if (!gl) { + log("filter: cannot get webgl context"); + return; + } + this.gl = gl; + function resize(width, height) { + if (width === fxcanvas.width && height === fxcanvas.height) + return; + fxcanvas.width = width; + fxcanvas.height = height; + if (!vertexBuffer) { + const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); + vertexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + } + gl.viewport(0, 0, fxcanvas.width, fxcanvas.height); + tempFramebuffers = [null, null]; + } + function createFramebufferTexture(width, height) { + const fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + const renderbuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return { fbo, texture }; + } + function getTempFramebuffer(index2) { + tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height); + return tempFramebuffers[index2]; + } + function draw(flags = 0) { + if (!currentProgram) + return; + let source = null; + let target = null; + let flipY = false; + if (drawCount === 0) + source = sourceTexture; + else + source = getTempFramebuffer(currentFramebufferIndex).texture || null; + drawCount++; + if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { + target = null; + flipY = drawCount % 2 === 0; + } else { + currentFramebufferIndex = (currentFramebufferIndex + 1) % 2; + target = getTempFramebuffer(currentFramebufferIndex).fbo || null; + } + gl.bindTexture(gl.TEXTURE_2D, source); + gl.bindFramebuffer(gl.FRAMEBUFFER, target); + gl.uniform1f(currentProgram.uniform["flipY"], flipY ? -1 : 1); + gl.drawArrays(gl.TRIANGLES, 0, 6); + } + function compileShader(fragmentSource) { + if (shaderProgramCache[fragmentSource]) { + currentProgram = shaderProgramCache[fragmentSource]; + gl.useProgram((currentProgram ? currentProgram.id : null) || null); + return currentProgram; + } + currentProgram = new GLProgram(gl, vertexIdentity, fragmentSource); + if (!currentProgram) { + log("filter: could not get webgl program"); + return null; + } + const floatSize = Float32Array.BYTES_PER_ELEMENT; + const vertSize = 4 * floatSize; + gl.enableVertexAttribArray(currentProgram.attribute["pos"]); + gl.vertexAttribPointer(currentProgram.attribute["pos"], 2, gl.FLOAT, false, vertSize, 0 * floatSize); + gl.enableVertexAttribArray(currentProgram.attribute["uv"]); + gl.vertexAttribPointer(currentProgram.attribute["uv"], 2, gl.FLOAT, false, vertSize, 2 * floatSize); + shaderProgramCache[fragmentSource] = currentProgram; + return currentProgram; + } + const filter = { + colorMatrix: (matrix) => { + const m = new Float32Array(matrix); + m[4] /= 255; + m[9] /= 255; + m[14] /= 255; + m[19] /= 255; + const shader = m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0 ? colorMatrixWithoutAlpha : colorMatrixWithAlpha; + const program = compileShader(shader); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + draw(); + }, + brightness: (brightness) => { + const b = (brightness || 0) + 1; + filter.colorMatrix([ + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + saturation: (amount) => { + const x = (amount || 0) * 2 / 3 + 1; + const y = (x - 1) * -0.5; + filter.colorMatrix([ + x, + y, + y, + 0, + 0, + y, + x, + y, + 0, + 0, + y, + y, + x, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturate: () => { + filter.saturation(-1); + }, + contrast: (amount) => { + const v = (amount || 0) + 1; + const o = -128 * (v - 1); + filter.colorMatrix([ + v, + 0, + 0, + 0, + o, + 0, + v, + 0, + 0, + o, + 0, + 0, + v, + 0, + o, + 0, + 0, + 0, + 1, + 0 + ]); + }, + negative: () => { + filter.contrast(-2); + }, + hue: (rotation) => { + rotation = (rotation || 0) / 180 * Math.PI; + const cos = Math.cos(rotation); + const sin = Math.sin(rotation); + const lumR = 0.213; + const lumG = 0.715; + const lumB = 0.072; + filter.colorMatrix([ + lumR + cos * (1 - lumR) + sin * -lumR, + lumG + cos * -lumG + sin * -lumG, + lumB + cos * -lumB + sin * (1 - lumB), + 0, + 0, + lumR + cos * -lumR + sin * 0.143, + lumG + cos * (1 - lumG) + sin * 0.14, + lumB + cos * -lumB + sin * -0.283, + 0, + 0, + lumR + cos * -lumR + sin * -(1 - lumR), + lumG + cos * -lumG + sin * lumG, + lumB + cos * (1 - lumB) + sin * lumB, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturateLuminance: () => { + filter.colorMatrix([ + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0, + 0, + 0, + 1, + 0 + ]); + }, + sepia: () => { + filter.colorMatrix([ + 0.393, + 0.7689999, + 0.18899999, + 0, + 0, + 0.349, + 0.6859999, + 0.16799999, + 0, + 0, + 0.272, + 0.5339999, + 0.13099999, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + brownie: () => { + filter.colorMatrix([ + 0.5997023498159715, + 0.34553243048391263, + -0.2708298674538042, + 0, + 47.43192855600873, + -0.037703249837783157, + 0.8609577587992641, + 0.15059552388459913, + 0, + -36.96841498319127, + 0.24113635128153335, + -0.07441037908422492, + 0.44972182064877153, + 0, + -7.562075277591283, + 0, + 0, + 0, + 1, + 0 + ]); + }, + vintagePinhole: () => { + filter.colorMatrix([ + 0.6279345635605994, + 0.3202183420819367, + -0.03965408211312453, + 0, + 9.651285835294123, + 0.02578397704808868, + 0.6441188644374771, + 0.03259127616149294, + 0, + 7.462829176470591, + 0.0466055556782719, + -0.0851232987247891, + 0.5241648018700465, + 0, + 5.159190588235296, + 0, + 0, + 0, + 1, + 0 + ]); + }, + kodachrome: () => { + filter.colorMatrix([ + 1.1285582396593525, + -0.3967382283601348, + -0.03992559172921793, + 0, + 63.72958762196502, + -0.16404339962244616, + 1.0835251566291304, + -0.05498805115633132, + 0, + 24.732407896706203, + -0.16786010706155763, + -0.5603416277695248, + 1.6014850761964943, + 0, + 35.62982807460946, + 0, + 0, + 0, + 1, + 0 + ]); + }, + technicolor: () => { + filter.colorMatrix([ + 1.9125277891456083, + -0.8545344976951645, + -0.09155508482755585, + 0, + 11.793603434377337, + -0.3087833385928097, + 1.7658908555458428, + -0.10601743074722245, + 0, + -70.35205161461398, + -0.231103377548616, + -0.7501899197440212, + 1.847597816108189, + 0, + 30.950940869491138, + 0, + 0, + 0, + 1, + 0 + ]); + }, + polaroid: () => { + filter.colorMatrix([ + 1.438, + -0.062, + -0.062, + 0, + 0, + -0.122, + 1.378, + -0.122, + 0, + 0, + -0.016, + -0.016, + 1.483, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + shiftToBGR: () => { + filter.colorMatrix([ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + convolution: (matrix) => { + const m = new Float32Array(matrix); + const pixelSizeX = 1 / fxcanvas.width; + const pixelSizeY = 1 / fxcanvas.height; + const program = compileShader(convolution); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + gl.uniform2f(program.uniform["px"], pixelSizeX, pixelSizeY); + draw(); + }, + detectEdges: () => { + filter.convolution.call(this, [ + 0, + 1, + 0, + 1, + -4, + 1, + 0, + 1, + 0 + ]); + }, + sobelX: () => { + filter.convolution.call(this, [ + -1, + 0, + 1, + -2, + 0, + 2, + -1, + 0, + 1 + ]); + }, + sobelY: () => { + filter.convolution.call(this, [ + -1, + -2, + -1, + 0, + 0, + 0, + 1, + 2, + 1 + ]); + }, + sharpen: (amount) => { + const a = amount || 1; + filter.convolution.call(this, [ + 0, + -1 * a, + 0, + -1 * a, + 1 + 4 * a, + -1 * a, + 0, + -1 * a, + 0 + ]); + }, + emboss: (size2) => { + const s = size2 || 1; + filter.convolution.call(this, [ + -2 * s, + -1 * s, + 0, + -1 * s, + 1, + 1 * s, + 0, + 1 * s, + 2 * s + ]); + }, + blur: (size2) => { + const blurSizeX = size2 / 7 / fxcanvas.width; + const blurSizeY = size2 / 7 / fxcanvas.height; + const program = compileShader(blur); + if (!program) + return; + gl.uniform2f(program.uniform["px"], 0, blurSizeY); + draw(DRAW.INTERMEDIATE); + gl.uniform2f(program.uniform["px"], blurSizeX, 0); + draw(); + }, + pixelate: (size2) => { + const blurSizeX = size2 / fxcanvas.width; + const blurSizeY = size2 / fxcanvas.height; + const program = compileShader(pixelate); + if (!program) + return; + gl.uniform2f(program.uniform["size"], blurSizeX, blurSizeY); + draw(); + } + }; + this.add = function(name) { + const args = Array.prototype.slice.call(arguments, 1); + const func = filter[name]; + filterChain.push({ func, args }); + }; + this.reset = function() { + filterChain = []; + }; + this.get = function() { + return filterChain; + }; + this.apply = function(image28) { + resize(image28.width, image28.height); + drawCount = 0; + if (!sourceTexture) + sourceTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, sourceTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image28); + for (let i = 0; i < filterChain.length; i++) { + lastInChain = i === filterChain.length - 1; + const f = filterChain[i]; + f.func.apply(this, f.args || []); + } + return fxcanvas; + }; + this.draw = function(image28) { + this.add("brightness", 0); + return this.apply(image28); + }; +} + +// src/image/enhance.ts +var tf = __toESM(require_tfjs_esm()); +async function histogramEqualization(inputImage) { + const squeeze14 = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage; + const rgb2 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb2[0]), tf.min(rgb2[1]), tf.min(rgb2[2])]; + const max5 = [tf.max(rgb2[0]), tf.max(rgb2[1]), tf.max(rgb2[2])]; + const absMax = await Promise.all(max5.map((channel) => channel.data())); + const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); + const maxRange = maxValue > 1 ? 255 : 1; + const factor = maxRange / maxValue; + let final; + if (factor > 1) { + const sub11 = [tf.sub(rgb2[0], min2[0]), tf.sub(rgb2[1], min2[1]), tf.sub(rgb2[2], min2[2])]; + const range = [tf.sub(max5[0], min2[0]), tf.sub(max5[1], min2[1]), tf.sub(max5[2], min2[2])]; + const enh = [tf.mul(sub11[0], factor), tf.mul(sub11[1], factor), tf.mul(sub11[2], factor)]; + const stack5 = tf.stack([enh[0], enh[1], enh[2]], 2); + final = tf.reshape(stack5, [1, squeeze14.shape[0] || 0, squeeze14.shape[1] || 0, 3]); + tf.dispose([...sub11, ...range, ...enh]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb2, ...min2, ...max5, rgb2, squeeze14, inputImage]); + return final; +} + +// src/image/image.ts +var maxSize = 3840; +var inCanvas = null; +var outCanvas = null; +var tmpCanvas = null; +var fx; +var last = { + inputSum: 0, + cacheDiff: 1, + sumMethod: 0, + inputTensor: void 0 +}; +function reset() { + last.inputSum = 0; + last.cacheDiff = 1; + last.sumMethod = 0; + last.inputTensor = void 0; +} +function canvas(width, height) { + let c; + if (env.browser) { + if (env.worker) { + if (typeof OffscreenCanvas === "undefined") + throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported"); + c = new OffscreenCanvas(width, height); + } else { + if (typeof document === "undefined") + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } + } else { + if (typeof env.Canvas !== "undefined") + c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") + c = new globalThis.Canvas(width, height); + } + return c; +} +function copy(input, output) { + const outputCanvas = output || canvas(input.width, input.height); + const ctx = outputCanvas.getContext("2d"); + ctx.drawImage(input, 0, 0); + return outputCanvas; +} +async function process2(input, config3, getTensor = true) { + var _a, _b, _c; + if (!input) { + if (config3.debug) + log("input error: input is missing"); + return { tensor: null, canvas: null }; + } + if (!(input instanceof tf2.Tensor) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + throw new Error("input error: type is not recognized"); + } + if (input instanceof tf2.Tensor) { + let tensor7 = null; + if (input["isDisposedInternal"]) + throw new Error("input error: attempted to use tensor but it is disposed"); + if (!input.shape) + throw new Error("input error: attempted to use tensor without a shape"); + if (input.shape.length === 3) { + if (input.shape[2] === 3) { + tensor7 = tf2.expandDims(input, 0); + } else if (input.shape[2] === 4) { + const rgb2 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb2, 0); + tf2.dispose(rgb2); + } + } else if (input.shape.length === 4) { + if (input.shape[3] === 3) { + tensor7 = tf2.clone(input); + } else if (input.shape[3] === 4) { + tensor7 = tf2.slice4d(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + } + } + if (tensor7 == null || tensor7.shape.length !== 4 || tensor7.shape[0] !== 1 || tensor7.shape[3] !== 3) + throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); + if (tensor7.dtype === "int32") { + const cast8 = tf2.cast(tensor7, "float32"); + tf2.dispose(tensor7); + tensor7 = cast8; + } + return { tensor: tensor7, canvas: config3.filter.return ? outCanvas : null }; + } + if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) { + if (config3.debug) + log("input stream is not ready"); + return { tensor: null, canvas: inCanvas }; + } + const originalWidth = input["naturalWidth"] || input["videoWidth"] || input["width"] || input["shape"] && input["shape"][1] > 0; + const originalHeight = input["naturalHeight"] || input["videoHeight"] || input["height"] || input["shape"] && input["shape"][2] > 0; + if (!originalWidth || !originalHeight) { + if (config3.debug) + log("cannot determine input dimensions"); + return { tensor: null, canvas: inCanvas }; + } + let targetWidth = originalWidth; + let targetHeight = originalHeight; + if (targetWidth > maxSize) { + targetWidth = maxSize; + targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth); + } + if (targetHeight > maxSize) { + targetHeight = maxSize; + targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight); + } + if ((((_a = config3.filter) == null ? void 0 : _a.width) || 0) > 0) + targetWidth = config3.filter.width; + else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) + targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); + if ((config3.filter.height || 0) > 0) + targetHeight = config3.filter.height; + else if ((config3.filter.width || 0) > 0) + targetHeight = originalHeight * ((config3.filter.width || 0) / originalWidth); + if (!targetWidth || !targetHeight) + throw new Error("input error: cannot determine dimension"); + if (!inCanvas || inCanvas.width !== targetWidth || inCanvas.height !== targetHeight) + inCanvas = canvas(targetWidth, targetHeight); + const inCtx = inCanvas.getContext("2d"); + if (typeof ImageData !== "undefined" && input instanceof ImageData) { + inCtx.putImageData(input, 0, 0); + } else { + if (config3.filter.flip && typeof inCtx.translate !== "undefined") { + inCtx.translate(originalWidth, 0); + inCtx.scale(-1, 1); + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + inCtx.setTransform(1, 0, 0, 1, 0, 0); + } else { + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + } + } + if (!outCanvas || inCanvas.width !== outCanvas.width || inCanvas.height !== outCanvas.height) + outCanvas = canvas(inCanvas.width, inCanvas.height); + if (config3.filter.enabled && env.webgl.supported) { + if (!fx) + fx = env.browser ? new GLImageFilter() : null; + env.filter = !!fx; + if (!(fx == null ? void 0 : fx.add)) { + if (config3.debug) + log("input process error: cannot initialize filters"); + env.webgl.supported = false; + config3.filter.enabled = false; + copy(inCanvas, outCanvas); + } else { + fx.reset(); + if (config3.filter.brightness !== 0) + fx.add("brightness", config3.filter.brightness); + if (config3.filter.contrast !== 0) + fx.add("contrast", config3.filter.contrast); + if (config3.filter.sharpness !== 0) + fx.add("sharpen", config3.filter.sharpness); + if (config3.filter.blur !== 0) + fx.add("blur", config3.filter.blur); + if (config3.filter.saturation !== 0) + fx.add("saturation", config3.filter.saturation); + if (config3.filter.hue !== 0) + fx.add("hue", config3.filter.hue); + if (config3.filter.negative) + fx.add("negative"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.vintage) + fx.add("brownie"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.kodachrome) + fx.add("kodachrome"); + if (config3.filter.technicolor) + fx.add("technicolor"); + if (config3.filter.polaroid) + fx.add("polaroid"); + if (config3.filter.pixelate !== 0) + fx.add("pixelate", config3.filter.pixelate); + if (((_c = fx.get()) == null ? void 0 : _c.length) > 1) + outCanvas = fx.apply(inCanvas); + else + outCanvas = fx.draw(inCanvas); + } + } else { + copy(inCanvas, outCanvas); + if (fx) + fx = null; + env.filter = !!fx; + } + if (!getTensor) + return { tensor: null, canvas: outCanvas }; + if (!outCanvas) + throw new Error("canvas error: cannot create output"); + let pixels; + let depth = 3; + if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { + if (env.browser && tf2.browser) { + pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; + } else { + depth = input.data.length / input.height / input.width; + const arr = new Uint8Array(input.data.buffer); + pixels = tf2.tensor(arr, [input.height, input.width, depth], "int32"); + } + } else { + if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) + tmpCanvas = canvas(outCanvas.width, outCanvas.height); + if (tf2.browser && env.browser) { + if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { + pixels = tf2.browser.fromPixels(outCanvas); + } else { + tmpCanvas = copy(outCanvas); + pixels = tf2.browser.fromPixels(tmpCanvas); + } + } else { + const tempCanvas = copy(outCanvas); + const tempCtx = tempCanvas.getContext("2d"); + const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); + depth = tempData.data.length / targetWidth / targetHeight; + const arr = new Uint8Array(tempData.data.buffer); + pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); + } + } + if (depth === 4) { + const rgb2 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb2; + } + if (!pixels) + throw new Error("input error: cannot create tensor"); + const casted = tf2.cast(pixels, "float32"); + const tensor6 = config3.filter.equalization ? await histogramEqualization(casted) : tf2.expandDims(casted, 0); + tf2.dispose([pixels, casted]); + if (config3.filter.autoBrightness) { + const max5 = tf2.max(tensor6); + const maxVal = await max5.data(); + config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; + tf2.dispose(max5); + } + return { tensor: tensor6, canvas: config3.filter.return ? outCanvas : null }; +} +async function skip(config3, input) { + let skipFrame = false; + if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) + return skipFrame; + if (!last.inputTensor) { + last.inputTensor = tf2.clone(input); + } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { + tf2.dispose(last.inputTensor); + last.inputTensor = tf2.clone(input); + } else { + const t2 = {}; + t2.diff = tf2.sub(input, last.inputTensor); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; + tf2.dispose([last.inputTensor, t2.diff, t2.squared, t2.sum]); + last.inputTensor = tf2.clone(input); + skipFrame = diffRelative <= (config3.cacheSensitivity || 0); + } + return skipFrame; +} +async function compare(config3, input1, input2) { + const t2 = {}; + if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) { + if (!config3.debug) + log("invalid input tensor or tensor shapes do not match:", input1.shape, input2.shape); + return 0; + } + if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) { + if (!config3.debug) + log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); + return 0; + } + t2.input1 = tf2.clone(input1); + t2.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? tf2.image.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : tf2.clone(input2); + t2.diff = tf2.sub(t2.input1, t2.input2); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; + tf2.dispose([t2.input1, t2.input2, t2.diff, t2.squared, t2.sum]); + return diffRelative; +} + +// src/util/env.ts +var Env = class { + constructor() { + __publicField(this, "browser"); + __publicField(this, "node"); + __publicField(this, "worker"); + __publicField(this, "platform", ""); + __publicField(this, "agent", ""); + __publicField(this, "backends", []); + __publicField(this, "initial"); + __publicField(this, "filter"); + __publicField(this, "tfjs"); + __publicField(this, "offscreen"); + __publicField(this, "perfadd", false); + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + __publicField(this, "kernels", []); + __publicField(this, "Canvas"); + __publicField(this, "Image"); + __publicField(this, "ImageData"); + this.browser = typeof navigator !== "undefined"; + this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; + this.tfjs = { version: tf3.version["tfjs-core"] }; + this.offscreen = typeof OffscreenCanvas !== "undefined"; + this.initial = true; + this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; + if (typeof navigator !== "undefined") { + const raw = navigator.userAgent.match(/\(([^()]+)\)/g); + if (raw == null ? void 0 : raw[0]) { + const platformMatch = raw[0].match(/\(([^()]+)\)/g); + this.platform = (platformMatch == null ? void 0 : platformMatch[0]) ? platformMatch[0].replace(/\(|\)/g, "") : ""; + this.agent = navigator.userAgent.replace(raw[0], ""); + if (this.platform[1]) + this.agent = this.agent.replace(raw[1], ""); + this.agent = this.agent.replace(/ /g, " "); + } + } else if (typeof process !== "undefined") { + this.platform = `${process.platform} ${process.arch}`; + this.agent = `NodeJS ${process.version}`; + } + } + async updateBackend() { + this.backends = Object.keys(tf3.engine().registryFactory); + try { + this.tensorflow = { + version: tf3.backend()["binding"] ? tf3.backend()["binding"].TF_Version : void 0, + gpu: tf3.backend()["binding"] ? tf3.backend()["binding"].isUsingGpuDevice() : void 0 + }; + } catch (e) { + } + this.wasm.supported = typeof WebAssembly !== "undefined"; + this.wasm.backend = this.backends.includes("wasm"); + if (this.wasm.supported && this.wasm.backend) { + this.wasm.simd = await tf3.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + this.wasm.multithread = await tf3.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + } + const c = canvas(100, 100); + const gl = c ? c.getContext("webgl2") : void 0; + this.webgl.supported = typeof gl !== "undefined"; + this.webgl.backend = this.backends.includes("webgl"); + if (this.webgl.supported && this.webgl.backend && gl) { + this.webgl.version = gl.getParameter(gl.VERSION); + this.webgl.vendor = gl.getParameter(gl.VENDOR); + this.webgl.renderer = gl.getParameter(gl.RENDERER); + this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION); + } + this.webgpu.supported = this.browser && typeof navigator.gpu !== "undefined"; + this.webgpu.backend = this.backends.includes("webgpu"); + try { + if (this.webgpu.supported) { + const adapter = await navigator.gpu.requestAdapter(); + this.webgpu.adapter = await (adapter == null ? void 0 : adapter.requestAdapterInfo()); + } + } catch (e) { + this.webgpu.supported = false; + } + try { + this.kernels = tf3.getKernelsForBackend(tf3.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); + } catch (e) { + } + } + updateCPU() { + const cpu = { model: "", flags: [] }; + if (this.node && this.platform.startsWith("linux")) { + } + if (!this.cpu) + Object.defineProperty(this, "cpu", { value: cpu }); + else + this.cpu = cpu; + } +}; +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + __publicField(this, "config"); + __publicField(this, "element"); + __publicField(this, "stream"); + __publicField(this, "devices", []); + __publicField(this, "enumerate", async () => { + try { + const devices = await navigator.mediaDevices.enumerateDevices(); + this.devices = devices.filter((device) => device.kind === "videoinput"); + } catch (e) { + this.devices = []; + } + return this.devices; + }); + __publicField(this, "start", async (webcamConfig) => { + if (webcamConfig == null ? void 0 : webcamConfig.debug) + this.config.debug = webcamConfig == null ? void 0 : webcamConfig.debug; + if (webcamConfig == null ? void 0 : webcamConfig.crop) + this.config.crop = webcamConfig == null ? void 0 : webcamConfig.crop; + if (webcamConfig == null ? void 0 : webcamConfig.mode) + this.config.mode = webcamConfig == null ? void 0 : webcamConfig.mode; + if (webcamConfig == null ? void 0 : webcamConfig.width) + this.config.width = webcamConfig == null ? void 0 : webcamConfig.width; + if (webcamConfig == null ? void 0 : webcamConfig.height) + this.config.height = webcamConfig == null ? void 0 : webcamConfig.height; + if (webcamConfig == null ? void 0 : webcamConfig.id) + this.config.id = webcamConfig == null ? void 0 : webcamConfig.id; + if (webcamConfig == null ? void 0 : webcamConfig.element) { + if (typeof webcamConfig.element === "string") { + const el = document.getElementById(webcamConfig.element); + if (el && el instanceof HTMLVideoElement) { + this.element = el; + } else { + if (this.config.debug) + log("webcam", "cannot get dom element", webcamConfig.element); + return; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) + log("webcam", "unknown dom element", webcamConfig.element); + return; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + resizeMode: this.config.crop ? "crop-and-scale" : "none", + width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth }, + height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight } + } + }; + if (this.config.id) + requestedConstraints.video.deviceId = this.config.id; + this.element.addEventListener("play", () => { + if (this.config.debug) + log("webcam", "play"); + }); + this.element.addEventListener("pause", () => { + if (this.config.debug) + log("webcam", "pause"); + }); + this.element.addEventListener("click", async () => { + if (!this.element || !this.stream) + return; + if (this.element.paused) + await this.element.play(); + else + this.element.pause(); + }); + if (!(navigator == null ? void 0 : navigator.mediaDevices)) { + if (this.config.debug) + log("webcam", "no devices"); + return; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return; + } + if (!this.stream) { + if (this.config.debug) + log("webcam", "no stream"); + return; + } + this.element.srcObject = this.stream; + const ready3 = new Promise((resolve) => { + if (!this.element) + resolve(false); + else + this.element.onloadeddata = () => resolve(true); + }); + await ready3; + await this.element.play(); + if (this.config.debug) { + log("webcam", { + width: this.width, + height: this.height, + label: this.label, + stream: this.stream, + track: this.track, + settings: this.settings, + constraints: this.constraints, + capabilities: this.capabilities + }); + } + }); + __publicField(this, "pause", () => { + if (this.element) + this.element.pause(); + }); + __publicField(this, "play", async () => { + if (this.element) + await this.element.play(); + }); + __publicField(this, "stop", () => { + if (this.config.debug) + log("webcam", "stop"); + if (this.track) + this.track.stop(); + }); + this.config = { + element: void 0, + debug: true, + mode: "front", + crop: false, + width: 0, + height: 0 + }; + } + get track() { + if (!this.stream) + return void 0; + return this.stream.getVideoTracks()[0]; + } + get capabilities() { + if (!this.track) + return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + get constraints() { + if (!this.track) + return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + get settings() { + if (!this.stream) + return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + get label() { + if (!this.track) + return ""; + return this.track.label; + } + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + get height() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; + } +}; + +// src/tfjs/load.ts +var tf4 = __toESM(require_tfjs_esm()); + +// models/models.json +var models_exports = {}; +__export(models_exports, { + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "blazepose-detector2d": () => blazepose_detector2d, + "blazepose-detector3d": () => blazepose_detector3d, + "blazepose-full": () => blazepose_full, + "blazepose-heavy": () => blazepose_heavy, + "blazepose-lite": () => blazepose_lite, + centernet: () => centernet, + default: () => models_default, + efficientpose: () => efficientpose, + "efficientpose-i-lite": () => efficientpose_i_lite, + "efficientpose-ii-lite": () => efficientpose_ii_lite, + "efficientpose-iv": () => efficientpose_iv, + emotion: () => emotion, + faceboxes: () => faceboxes, + facemesh: () => facemesh, + "facemesh-attention": () => facemesh_attention, + "facemesh-attention-alt": () => facemesh_attention_alt, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + "facemesh-orig": () => facemesh_orig, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + gender: () => gender, + "gender-ssrnet-imdb": () => gender_ssrnet_imdb, + handdetect: () => handdetect, + "handlandmark-full": () => handlandmark_full, + "handlandmark-lite": () => handlandmark_lite, + "handlandmark-sparse": () => handlandmark_sparse, + handskeleton: () => handskeleton, + handtrack: () => handtrack, + "insightface-efficientnet-b0": () => insightface_efficientnet_b0, + "insightface-ghostnet-strides1": () => insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": () => insightface_ghostnet_strides2, + "insightface-mobilenet-emore": () => insightface_mobilenet_emore, + "insightface-mobilenet-swish": () => insightface_mobilenet_swish, + iris: () => iris, + liveness: () => liveness, + meet: () => meet, + mobileface: () => mobileface, + mobilefacenet: () => mobilefacenet, + models: () => models, + "movenet-lightning": () => movenet_lightning, + "movenet-multipose": () => movenet_multipose, + "movenet-thunder": () => movenet_thunder, + nanodet: () => nanodet, + "nanodet-e": () => nanodet_e, + "nanodet-g": () => nanodet_g, + "nanodet-m": () => nanodet_m, + "nanodet-t": () => nanodet_t, + posenet: () => posenet, + rvm: () => rvm, + selfie: () => selfie +}); +var antispoof = 853098; +var blazeface = 538928; +var centernet = 4030290; +var emotion = 820516; +var facemesh = 1477958; +var faceres = 6978814; +var handlandmark_full = 5431368; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector2d = 7499400; +var blazepose_detector3d = 5928856; +var blazepose_full = 6338290; +var blazepose_heavy = 27501554; +var blazepose_lite = 2725490; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_alt = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var facemesh_orig = 2955780; +var faceres_deep = 13957620; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_lite = 2023432; +var handlandmark_sparse = 5286322; +var handskeleton = 5502280; +var meet = 372228; +var mobileface = 2183192; +var mobilefacenet = 5171976; +var movenet_multipose = 9448838; +var movenet_thunder = 12477112; +var nanodet = 7574558; +var posenet = 5032780; +var rvm = 3739355; +var selfie = 212886; +var blazepose_detector = 5928856; +var anti_spoofing = 853098; +var efficientpose_i_lite = 2269064; +var efficientpose_ii_lite = 5651240; +var efficientpose_iv = 25643252; +var insightface_efficientnet_b0 = 13013224; +var insightface_ghostnet_strides1 = 8093408; +var insightface_ghostnet_strides2 = 8049584; +var insightface_mobilenet_emore = 6938536; +var insightface_mobilenet_swish = 12168584; +var nanodet_e = 12319156; +var nanodet_g = 7574558; +var nanodet_m = 1887474; +var nanodet_t = 5294216; +var models_default = { + antispoof, + blazeface, + centernet, + emotion, + facemesh, + faceres, + "handlandmark-full": handlandmark_full, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector2d": blazepose_detector2d, + "blazepose-detector3d": blazepose_detector3d, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-alt": facemesh_attention_alt, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "facemesh-orig": facemesh_orig, + "faceres-deep": faceres_deep, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-lite": handlandmark_lite, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "blazepose-detector": blazepose_detector, + "anti-spoofing": anti_spoofing, + "efficientpose-i-lite": efficientpose_i_lite, + "efficientpose-ii-lite": efficientpose_ii_lite, + "efficientpose-iv": efficientpose_iv, + "insightface-efficientnet-b0": insightface_efficientnet_b0, + "insightface-ghostnet-strides1": insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": insightface_ghostnet_strides2, + "insightface-mobilenet-emore": insightface_mobilenet_emore, + "insightface-mobilenet-swish": insightface_mobilenet_swish, + "nanodet-e": nanodet_e, + "nanodet-g": nanodet_g, + "nanodet-m": nanodet_m, + "nanodet-t": nanodet_t +}; + +// src/tfjs/load.ts +var options = { + cacheModels: true, + cacheSupported: true, + verbose: true, + debug: false, + modelBasePath: "" +}; +var modelStats = {}; +async function httpHandler(url, init4) { + if (options.debug) + log("load model fetch:", url, init4); + return fetch(url, init4); +} +function setModelLoadOptions(config3) { + options.cacheModels = config3.cacheModels; + options.verbose = config3.debug; + options.modelBasePath = config3.modelBasePath; +} +async function loadModel(modelPath) { + var _a, _b, _c, _d; + let modelUrl = join(options.modelBasePath, modelPath || ""); + if (!modelUrl.toLowerCase().endsWith(".json")) + modelUrl += ".json"; + const modelPathSegments = modelUrl.includes("/") ? modelUrl.split("/") : modelUrl.split("\\"); + const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace(".json", ""); + const cachedModelName = "indexeddb://" + shortModelName; + modelStats[shortModelName] = { + name: shortModelName, + sizeFromManifest: 0, + sizeLoadedWeights: 0, + sizeDesired: models_exports[shortModelName], + inCache: false, + url: "" + }; + options.cacheSupported = typeof indexedDB !== "undefined"; + let cachedModels = {}; + try { + cachedModels = options.cacheSupported && options.cacheModels ? await tf4.io.listModels() : {}; + } catch (e) { + options.cacheSupported = false; + } + modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); + modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; + const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; + let model23 = new tf4.GraphModel(modelStats[shortModelName].url, tfLoadOptions); + let loaded = false; + try { + model23.findIOHandler(); + if (options.debug) + log("model load handler:", model23["handler"]); + } catch (err) { + log("error finding model i/o handler:", modelUrl, err); + } + try { + const artifacts = await ((_a = model23.handler) == null ? void 0 : _a.load()) || null; + modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; + if (artifacts) + model23.loadSync(artifacts); + else + model23 = await tf4.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + modelStats[shortModelName].sizeLoadedWeights = ((_d = (_c = model23.artifacts) == null ? void 0 : _c.weightData) == null ? void 0 : _d.byteLength) || 0; + if (options.verbose) + log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); + loaded = true; + } catch (err) { + log("error loading model:", modelUrl, err); + } + if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { + try { + const saveResult = await model23.save(cachedModelName); + if (options.debug) + log("model saved:", cachedModelName, saveResult); + } catch (err) { + log("error saving model:", modelUrl, err); + } + } + return model23; +} + +// package.json +var version2 = "3.0.0"; + +// src/tfjs/backend.ts +var tf7 = __toESM(require_tfjs_esm()); + +// src/tfjs/humangl.ts +var tf5 = __toESM(require_tfjs_esm()); +var config2 = { + name: "humangl", + priority: 999, + canvas: null, + gl: null, + extensions: [], + webGLattr: { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + desynchronized: true + } +}; +function extensions() { + const gl = config2.gl; + if (!gl) + return; + config2.extensions = gl.getSupportedExtensions(); +} +function register(instance) { + var _a; + if (instance.config.backend !== "humangl") + return; + if (config2.name in tf5.engine().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { + log("humangl error: backend invalid context"); + instance.models.reset(); + } + if (!tf5.findBackend(config2.name)) { + try { + config2.canvas = canvas(100, 100); + } catch (err) { + log("humangl error: cannot create canvas:", err); + return; + } + try { + config2.gl = config2.canvas.getContext("webgl2", config2.webGLattr); + if (!config2.gl) { + log("humangl error: cannot get webgl context"); + return; + } + const glv2 = config2.gl.getParameter(config2.gl.VERSION).includes("2.0"); + if (!glv2) { + log("backend override: using fallback webgl backend as webgl 2.0 is not detected"); + instance.config.backend = "webgl"; + return; + } + if (config2.canvas) { + config2.canvas.addEventListener("webglcontextlost", (e) => { + log("humangl error:", e.type); + log("possible browser memory leak using webgl or conflict with multiple backend registrations"); + instance.emit("error"); + throw new Error("backend error: webgl context lost"); + }); + config2.canvas.addEventListener("webglcontextrestored", (e) => { + log("humangl error: context restored:", e); + }); + config2.canvas.addEventListener("webglcontextcreationerror", (e) => { + log("humangl error: context create:", e); + }); + } + } catch (err) { + log("humangl error: cannot get webgl context:", err); + return; + } + try { + tf5.setWebGLContext(2, config2.gl); + } catch (err) { + log("humangl error: cannot set webgl context:", err); + return; + } + try { + const ctx = new tf5.GPGPUContext(config2.gl); + tf5.registerBackend(config2.name, () => new tf5.MathBackendWebGL(ctx), config2.priority); + } catch (err) { + log("humangl error: cannot register webgl backend:", err); + return; + } + try { + const kernels = tf5.getKernelsForBackend("webgl"); + kernels.forEach((kernelConfig) => { + const newKernelConfig = { ...kernelConfig, backendName: config2.name }; + tf5.registerKernel(newKernelConfig); + }); + } catch (err) { + log("humangl error: cannot update webgl backend registration:", err); + return; + } + try { + if (tf5.env().flagRegistry.WEBGL_VERSION) + tf5.env().set("WEBGL_VERSION", 2); + } catch (err) { + log("humangl error: cannot set WebGL backend flags:", err); + return; + } + extensions(); + const backend4 = tf5.backend(); + const current = typeof backend4["gpgpu"] !== "undefined" ? backend4["getGPGPUContext"]().gl : null; + if (current) { + if (instance.config.debug) + log("humangl backend registered:", { webgl: current.getParameter(current.VERSION), renderer: current.getParameter(current.RENDERER) }); + } else { + log("humangl error: no current gl context:", current, config2.gl); + } + } +} + +// src/tfjs/constants.ts +var tf6 = __toESM(require_tfjs_esm()); +var constants = { + tf255: 255, + tf1: 1, + tf2: 2, + tf05: 0.5, + tf127: 127.5, + rgb: [0.2989, 0.587, 0.114] +}; +function init() { + constants.tf255 = tf6.scalar(255, "float32"); + constants.tf1 = tf6.scalar(1, "float32"); + constants.tf2 = tf6.scalar(2, "float32"); + constants.tf05 = tf6.scalar(0.5, "float32"); + constants.tf127 = tf6.scalar(127.5, "float32"); + constants.rgb = tf6.tensor1d([0.2989, 0.587, 0.114], "float32"); +} + +// src/tfjs/backend.ts +async function getBestBackend() { + await env.updateBackend(); + if (!env.browser) + return "tensorflow"; + if (env.webgpu.supported && env.webgpu.backend) + return "webgpu"; + if (env.webgl.supported && env.webgl.backend) + return "webgl"; + if (env.wasm.supported && env.wasm.backend) + return "wasm"; + return "cpu"; +} +function registerCustomOps(config3) { + const newKernels = []; + if (!env.kernels.includes("mod")) { + const kernelMod = { + kernelName: "Mod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.sub(op.inputs.a, tf7.mul(tf7.div(op.inputs.a, op.inputs.b), op.inputs.b))) + }; + tf7.registerKernel(kernelMod); + env.kernels.push("mod"); + newKernels.push("mod"); + } + if (!env.kernels.includes("floormod")) { + const kernelFloorMod = { + kernelName: "FloorMod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.add(tf7.mul(tf7.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf7.mod(op.inputs.a, op.inputs.b))) + }; + tf7.registerKernel(kernelFloorMod); + env.kernels.push("floormod"); + newKernels.push("floormod"); + } + if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { + const kernelRotateWithOffset = { + kernelName: "RotateWithOffset", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => { + const backend4 = tf7.getBackend(); + tf7.setBackend("cpu"); + const t2 = tf7.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center); + tf7.setBackend(backend4); + return t2; + }) + }; + tf7.registerKernel(kernelRotateWithOffset); + env.kernels.push("rotatewithoffset"); + newKernels.push("rotatewithoffset"); + } + if (newKernels.length > 0 && config3.debug) + log("registered kernels:", newKernels); +} +var defaultFlags = {}; +async function check(instance, force = false) { + var _a; + instance.state = "backend"; + if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) + instance.config.backend = await getBestBackend(); + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf7.getBackend() !== instance.config.backend) { + const timeStamp = now(); + if (instance.config.backend && instance.config.backend.length > 0) { + if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { + if (instance.config.debug) + log("running inside web worker"); + } + if (env.browser && instance.config.backend === "tensorflow") { + if (instance.config.debug) + log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && (instance.config.backend === "webgl" || instance.config.backend === "humangl")) { + if (instance.config.debug) + log(`override: backend set to ${instance.config.backend} while running in nodejs`); + instance.config.backend = "tensorflow"; + } + if (env.browser && instance.config.backend === "webgpu") { + if (typeof navigator === "undefined" || typeof navigator.gpu === "undefined") { + log("override: backend set to webgpu but browser does not support webgpu"); + instance.config.backend = "webgl"; + } else { + const adapter = await navigator.gpu.requestAdapter(); + if (instance.config.debug) + log("enumerated webgpu adapter:", adapter); + if (!adapter) { + log("override: backend set to webgpu but browser reports no available gpu"); + instance.config.backend = "webgl"; + } else { + const adapterInfo = "requestAdapterInfo" in adapter ? await adapter.requestAdapterInfo() : void 0; + log("webgpu adapter info:", adapterInfo); + } + } + } + let available = Object.keys(tf7.engine().registryFactory); + if (instance.config.backend === "humangl" && !available.includes("humangl")) { + register(instance); + available = Object.keys(tf7.engine().registryFactory); + } + if (instance.config.debug) + log("available backends:", available); + if (!available.includes(instance.config.backend)) { + log(`error: backend ${instance.config.backend} not found in registry`); + instance.config.backend = env.node ? "tensorflow" : "webgl"; + if (instance.config.debug) + log(`override: setting backend ${instance.config.backend}`); + } + if (instance.config.debug) + log("setting backend:", [instance.config.backend]); + if (instance.config.backend === "wasm") { + if (tf7.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) + tf7.env().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (instance.config.debug) + log("wasm path:", instance.config.wasmPath); + if (typeof tf7.setWasmPaths !== "undefined") + tf7.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch); + else + throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); + let mt = false; + let simd = false; + try { + mt = await tf7.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + simd = await tf7.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + if (instance.config.debug) + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); + if (instance.config.debug && !simd) + log("warning: wasm simd support is not enabled"); + } catch (e) { + log("wasm detection failed"); + } + } + try { + await tf7.setBackend(instance.config.backend); + await tf7.ready(); + } catch (err) { + log("error: cannot set backend:", instance.config.backend, err); + return false; + } + if (instance.config.debug) + defaultFlags = JSON.parse(JSON.stringify(tf7.env().flags)); + } + if (tf7.getBackend() === "humangl" || tf7.getBackend() === "webgl") { + if (tf7.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) + tf7.env().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (tf7.env().flagRegistry.WEBGL_EXP_CONV) + tf7.env().set("WEBGL_EXP_CONV", true); + if (instance.config.debug && typeof instance.config.deallocate !== "undefined" && instance.config.deallocate) { + log("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:", true); + tf7.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); + } + } + if (tf7.getBackend() === "webgpu") { + } + if (instance.config.debug) { + const newFlags = tf7.env().flags; + const updatedFlags = {}; + for (const key of Object.keys(newFlags)) { + if (defaultFlags[key] === newFlags[key]) + continue; + updatedFlags[key] = newFlags[key]; + } + if (instance.config.debug && Object.keys(updatedFlags).length > 0) + log("backend:", tf7.getBackend(), "flags:", updatedFlags); + } + if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { + if (instance.config.debug) + log("flags:", instance.config["flags"]); + for (const [key, val] of Object.entries(instance.config.flags)) { + tf7.env().set(key, val); + } + } + tf7.enableProdMode(); + init(); + instance.performance.initBackend = Math.trunc(now() - timeStamp); + instance.config.backend = tf7.getBackend(); + await env.updateBackend(); + registerCustomOps(instance.config); + env.initial = false; + } + return true; +} +function fakeOps(kernelNames, config3) { + for (const kernelName of kernelNames) { + const kernelConfig = { + kernelName, + backendName: config3.backend, + kernelFunc: (param) => { + var _a; + if (config3.debug) + log("kernelFunc", kernelName, config3.backend, param); + return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; + } + }; + tf7.registerKernel(kernelConfig); + } + env.kernels = tf7.getKernelsForBackend(tf7.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); +} + +// src/draw/draw.ts +var draw_exports = {}; +__export(draw_exports, { + all: () => all, + body: () => body, + canvas: () => canvas2, + face: () => face, + gesture: () => gesture, + hand: () => hand, + init: () => init2, + object: () => object, + options: () => options2, + person: () => person +}); + +// src/draw/primitives.ts +var getCanvasContext = (input) => { + if (!input) + log("draw error: invalid canvas"); + else if (!input.getContext) + log("draw error: canvas context not defined"); + else { + const ctx = input.getContext("2d"); + if (!ctx) + log("draw error: cannot get canvas context"); + else + return ctx; + } + return null; +}; +var rad2deg = (theta) => Math.round(theta * 180 / Math.PI); +var replace = (str, source, target) => str.replace(source, typeof target === "number" ? target.toFixed(1) : target); +var colorDepth = (z, opt) => { + if (!opt.useDepth || typeof z === "undefined") + return opt.color; + const rgb2 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb2[0]}, ${rgb2[1]}, ${rgb2[2]}, ${opt.alpha})`; +}; +function labels(ctx, str, startX, startY, localOptions2) { + const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); + const x = Math.max(0, startX); + for (let i = line.length - 1; i >= 0; i--) { + const y = i * localOptions2.lineHeight + startY; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(line[i], x + 5, y + 16); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(line[i], x + 4, y + 15); + } +} +function point(ctx, x, y, z, localOptions2) { + ctx.fillStyle = colorDepth(z, localOptions2); + ctx.beginPath(); + ctx.arc(x, y, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.fill(); +} +function rect(ctx, x, y, width, height, localOptions2) { + ctx.beginPath(); + ctx.lineWidth = localOptions2.lineWidth; + if (localOptions2.useCurves) { + const cx = (x + x + width) / 2; + const cy = (y + y + height) / 2; + ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + ctx.moveTo(x + localOptions2.roundRect, y); + ctx.lineTo(x + width - localOptions2.roundRect, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions2.roundRect); + ctx.lineTo(x + width, y + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions2.roundRect, y + height); + ctx.lineTo(x + localOptions2.roundRect, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions2.roundRect); + ctx.lineTo(x, y + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y, x + localOptions2.roundRect, y); + ctx.closePath(); + } + ctx.stroke(); +} +function lines(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.beginPath(); + ctx.moveTo(points[0][0], points[0][1]); + for (const pt of points) { + ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions2); + ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1])); + } + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function curves(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.lineWidth = localOptions2.lineWidth; + if (!localOptions2.useCurves || points.length <= 2) { + lines(ctx, points, localOptions2); + return; + } + ctx.moveTo(points[0][0], points[0][1]); + for (let i = 0; i < points.length - 2; i++) { + const xc = (points[i][0] + points[i + 1][0]) / 2; + const yc = (points[i][1] + points[i + 1][1]) / 2; + ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc); + } + ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]); + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function arrow(ctx, from, to, radius = 5) { + let angle; + let x; + let y; + ctx.beginPath(); + ctx.moveTo(from[0], from[1]); + ctx.lineTo(to[0], to[1]); + angle = Math.atan2(to[1] - from[1], to[0] - from[0]); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.moveTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + ctx.closePath(); + ctx.stroke(); + ctx.fill(); +} + +// src/draw/options.ts +var options2 = { + color: "rgba(173, 216, 230, 0.6)", + labelColor: "rgba(173, 216, 230, 1)", + shadowColor: "black", + alpha: 0.5, + font: 'small-caps 16px "Segoe UI"', + lineHeight: 18, + lineWidth: 4, + pointSize: 2, + roundRect: 8, + drawPoints: false, + drawLabels: true, + drawBoxes: true, + drawAttention: true, + drawGestures: true, + drawPolygons: true, + drawGaze: true, + fillPolygons: false, + useDepth: true, + useCurves: false, + faceLabels: "", + bodyLabels: "", + bodyPartLabels: "", + objectLabels: "", + handLabels: "", + fingerLabels: "", + gestureLabels: "" +}; + +// src/face/facemeshcoords.ts +var meshAnnotations = { + silhouette: [ + 10, + 338, + 297, + 332, + 284, + 251, + 389, + 356, + 454, + 323, + 361, + 288, + 397, + 365, + 379, + 378, + 400, + 377, + 152, + 148, + 176, + 149, + 150, + 136, + 172, + 58, + 132, + 93, + 234, + 127, + 162, + 21, + 54, + 103, + 67, + 109 + ], + lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409], + lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291], + lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415], + lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], + lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306], + lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408], + lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292], + lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407], + rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + rightEyeIris: [473, 474, 475, 476, 477], + leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398], + leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362], + leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414], + leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463], + leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413], + leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464], + leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465], + leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417], + leftEyebrowLower: [265, 353, 276, 283, 282, 295], + leftEyeIris: [468, 469, 470, 471, 472], + midwayBetweenEyes: [168], + noseTip: [1], + noseBottom: [2], + noseRightCorner: [98], + noseLeftCorner: [327], + rightCheek: [205], + leftCheek: [425] +}; +var meshLandmarks = { + count: 468, + mouth: 13, + symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]] +}; +var blazeFaceLandmarks = { + leftEye: 0, + rightEye: 1, + nose: 2, + mouth: 3, + leftEar: 4, + rightEar: 5, + symmetryLine: [3, 2] +}; +var irisIndices = [ + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } +]; +var UV468 = [ + [0.499976992607117, 0.652534008026123], + [0.500025987625122, 0.547487020492554], + [0.499974012374878, 0.602371990680695], + [0.482113003730774, 0.471979022026062], + [0.500150978565216, 0.527155995368958], + [0.499909996986389, 0.498252987861633], + [0.499523013830185, 0.40106201171875], + [0.289712011814117, 0.380764007568359], + [0.499954998493195, 0.312398016452789], + [0.499987006187439, 0.269918978214264], + [0.500023007392883, 0.107050001621246], + [0.500023007392883, 0.666234016418457], + [0.5000159740448, 0.679224014282227], + [0.500023007392883, 0.692348003387451], + [0.499976992607117, 0.695277988910675], + [0.499976992607117, 0.70593398809433], + [0.499976992607117, 0.719385027885437], + [0.499976992607117, 0.737019002437592], + [0.499967992305756, 0.781370997428894], + [0.499816000461578, 0.562981009483337], + [0.473773002624512, 0.573909997940063], + [0.104906998574734, 0.254140973091125], + [0.365929991006851, 0.409575998783112], + [0.338757991790771, 0.41302502155304], + [0.311120003461838, 0.409460008144379], + [0.274657994508743, 0.389131009578705], + [0.393361985683441, 0.403706014156342], + [0.345234006643295, 0.344011008739471], + [0.370094001293182, 0.346076011657715], + [0.319321990013123, 0.347265005111694], + [0.297903001308441, 0.353591024875641], + [0.24779200553894, 0.410809993743896], + [0.396889001131058, 0.842755019664764], + [0.280097991228104, 0.375599980354309], + [0.106310002505779, 0.399955987930298], + [0.2099249958992, 0.391353011131287], + [0.355807989835739, 0.534406006336212], + [0.471751004457474, 0.65040397644043], + [0.474155008792877, 0.680191993713379], + [0.439785003662109, 0.657229006290436], + [0.414617002010345, 0.66654098033905], + [0.450374007225037, 0.680860996246338], + [0.428770989179611, 0.682690978050232], + [0.374971002340317, 0.727805018424988], + [0.486716985702515, 0.547628998756409], + [0.485300987958908, 0.527395009994507], + [0.257764995098114, 0.314490020275116], + [0.401223003864288, 0.455172002315521], + [0.429818987846375, 0.548614978790283], + [0.421351999044418, 0.533740997314453], + [0.276895999908447, 0.532056987285614], + [0.483370006084442, 0.499586999416351], + [0.33721199631691, 0.282882988452911], + [0.296391993761063, 0.293242990970612], + [0.169294998049736, 0.193813979625702], + [0.447580009698868, 0.302609980106354], + [0.392390012741089, 0.353887975215912], + [0.354490011930466, 0.696784019470215], + [0.067304998636246, 0.730105042457581], + [0.442739009857178, 0.572826027870178], + [0.457098007202148, 0.584792017936707], + [0.381974011659622, 0.694710969924927], + [0.392388999462128, 0.694203019142151], + [0.277076005935669, 0.271932005882263], + [0.422551989555359, 0.563233017921448], + [0.385919004678726, 0.281364023685455], + [0.383103013038635, 0.255840003490448], + [0.331431001424789, 0.119714021682739], + [0.229923993349075, 0.232002973556519], + [0.364500999450684, 0.189113974571228], + [0.229622006416321, 0.299540996551514], + [0.173287004232407, 0.278747975826263], + [0.472878992557526, 0.666198015213013], + [0.446828007698059, 0.668527007102966], + [0.422762006521225, 0.673889994621277], + [0.445307999849319, 0.580065965652466], + [0.388103008270264, 0.693961024284363], + [0.403039008378983, 0.706539988517761], + [0.403629004955292, 0.693953037261963], + [0.460041999816895, 0.557139039039612], + [0.431158006191254, 0.692366003990173], + [0.452181994915009, 0.692366003990173], + [0.475387006998062, 0.692366003990173], + [0.465828001499176, 0.779190003871918], + [0.472328990697861, 0.736225962638855], + [0.473087012767792, 0.717857003211975], + [0.473122000694275, 0.704625964164734], + [0.473033010959625, 0.695277988910675], + [0.427942007780075, 0.695277988910675], + [0.426479011774063, 0.703539967536926], + [0.423162013292313, 0.711845993995667], + [0.4183090031147, 0.720062971115112], + [0.390094995498657, 0.639572978019714], + [0.013953999616206, 0.560034036636353], + [0.499913990497589, 0.58014702796936], + [0.413199990987778, 0.69539999961853], + [0.409626007080078, 0.701822996139526], + [0.468080013990402, 0.601534962654114], + [0.422728985548019, 0.585985004901886], + [0.463079988956451, 0.593783974647522], + [0.37211999297142, 0.47341400384903], + [0.334562003612518, 0.496073007583618], + [0.411671012639999, 0.546965003013611], + [0.242175996303558, 0.14767599105835], + [0.290776997804642, 0.201445996761322], + [0.327338010072708, 0.256527006626129], + [0.399509996175766, 0.748921036720276], + [0.441727995872498, 0.261676013469696], + [0.429764986038208, 0.187834024429321], + [0.412198007106781, 0.108901023864746], + [0.288955003023148, 0.398952007293701], + [0.218936994671822, 0.435410976409912], + [0.41278201341629, 0.398970007896423], + [0.257135003805161, 0.355440020561218], + [0.427684992551804, 0.437960982322693], + [0.448339998722076, 0.536936044692993], + [0.178560003638268, 0.45755398273468], + [0.247308000922203, 0.457193970680237], + [0.286267012357712, 0.467674970626831], + [0.332827985286713, 0.460712015628815], + [0.368755996227264, 0.447206974029541], + [0.398963987827301, 0.432654976844788], + [0.476410001516342, 0.405806005001068], + [0.189241006970406, 0.523923993110657], + [0.228962004184723, 0.348950982093811], + [0.490725994110107, 0.562400996685028], + [0.404670000076294, 0.485132992267609], + [0.019469000399113, 0.401564002037048], + [0.426243007183075, 0.420431017875671], + [0.396993011236191, 0.548797011375427], + [0.266469985246658, 0.376977026462555], + [0.439121007919312, 0.51895797252655], + [0.032313998788595, 0.644356966018677], + [0.419054001569748, 0.387154996395111], + [0.462783008813858, 0.505746960639954], + [0.238978996872902, 0.779744982719421], + [0.198220998048782, 0.831938028335571], + [0.107550002634525, 0.540755033493042], + [0.183610007166862, 0.740257024765015], + [0.134409993886948, 0.333683013916016], + [0.385764002799988, 0.883153975009918], + [0.490967005491257, 0.579378008842468], + [0.382384985685349, 0.508572995662689], + [0.174399003386497, 0.397670984268188], + [0.318785011768341, 0.39623498916626], + [0.343364000320435, 0.400596976280212], + [0.396100014448166, 0.710216999053955], + [0.187885001301765, 0.588537991046906], + [0.430987000465393, 0.944064974784851], + [0.318993002176285, 0.898285031318665], + [0.266247987747192, 0.869701027870178], + [0.500023007392883, 0.190576016902924], + [0.499976992607117, 0.954452991485596], + [0.366169989109039, 0.398822009563446], + [0.393207013607025, 0.39553701877594], + [0.410373002290726, 0.391080021858215], + [0.194993004202843, 0.342101991176605], + [0.388664990663528, 0.362284004688263], + [0.365961998701096, 0.355970978736877], + [0.343364000320435, 0.355356991291046], + [0.318785011768341, 0.35834002494812], + [0.301414996385574, 0.363156020641327], + [0.058132998645306, 0.319076001644135], + [0.301414996385574, 0.387449026107788], + [0.499987989664078, 0.618434011936188], + [0.415838003158569, 0.624195992946625], + [0.445681989192963, 0.566076993942261], + [0.465844005346298, 0.620640993118286], + [0.49992299079895, 0.351523995399475], + [0.288718998432159, 0.819945991039276], + [0.335278987884521, 0.852819979190826], + [0.440512001514435, 0.902418971061707], + [0.128294005990028, 0.791940987110138], + [0.408771991729736, 0.373893976211548], + [0.455606997013092, 0.451801002025604], + [0.499877005815506, 0.908990025520325], + [0.375436991453171, 0.924192011356354], + [0.11421000212431, 0.615022003650665], + [0.448662012815475, 0.695277988910675], + [0.4480200111866, 0.704632043838501], + [0.447111994028091, 0.715808033943176], + [0.444831997156143, 0.730794012546539], + [0.430011987686157, 0.766808986663818], + [0.406787008047104, 0.685672998428345], + [0.400738000869751, 0.681069016456604], + [0.392399996519089, 0.677703022956848], + [0.367855995893478, 0.663918972015381], + [0.247923001646996, 0.601333022117615], + [0.452769994735718, 0.420849978923798], + [0.43639200925827, 0.359887003898621], + [0.416164010763168, 0.368713974952698], + [0.413385987281799, 0.692366003990173], + [0.228018000721931, 0.683571994304657], + [0.468268007040024, 0.352671027183533], + [0.411361992359161, 0.804327011108398], + [0.499989002943039, 0.469825029373169], + [0.479153990745544, 0.442654013633728], + [0.499974012374878, 0.439637005329132], + [0.432112008333206, 0.493588984012604], + [0.499886006116867, 0.866917014122009], + [0.49991300702095, 0.821729004383087], + [0.456548988819122, 0.819200992584229], + [0.344549000263214, 0.745438992977142], + [0.37890899181366, 0.574010014533997], + [0.374292999505997, 0.780184984207153], + [0.319687992334366, 0.570737957954407], + [0.357154995203018, 0.604269981384277], + [0.295284003019333, 0.621580958366394], + [0.447750002145767, 0.862477004528046], + [0.410986006259918, 0.508723020553589], + [0.31395098567009, 0.775308012962341], + [0.354128003120422, 0.812552988529205], + [0.324548006057739, 0.703992962837219], + [0.189096003770828, 0.646299958229065], + [0.279776990413666, 0.71465802192688], + [0.1338230073452, 0.682700991630554], + [0.336768001317978, 0.644733011722565], + [0.429883986711502, 0.466521978378296], + [0.455527991056442, 0.548622965812683], + [0.437114000320435, 0.558896005153656], + [0.467287987470627, 0.529924988746643], + [0.414712011814117, 0.335219979286194], + [0.37704598903656, 0.322777986526489], + [0.344107985496521, 0.320150971412659], + [0.312875986099243, 0.32233202457428], + [0.283526003360748, 0.333190023899078], + [0.241245999932289, 0.382785975933075], + [0.102986000478268, 0.468762993812561], + [0.267612010240555, 0.424560010433197], + [0.297879010438919, 0.433175981044769], + [0.333433985710144, 0.433878004550934], + [0.366427004337311, 0.426115989685059], + [0.396012008190155, 0.416696012020111], + [0.420121014118195, 0.41022801399231], + [0.007561000064015, 0.480777025222778], + [0.432949006557465, 0.569517970085144], + [0.458638995885849, 0.479089021682739], + [0.473466008901596, 0.545744001865387], + [0.476087987422943, 0.563830018043518], + [0.468472003936768, 0.555056989192963], + [0.433990985155106, 0.582361996173859], + [0.483518004417419, 0.562983989715576], + [0.482482999563217, 0.57784903049469], + [0.42645001411438, 0.389798998832703], + [0.438998997211456, 0.39649498462677], + [0.450067013502121, 0.400434017181396], + [0.289712011814117, 0.368252992630005], + [0.276670008897781, 0.363372981548309], + [0.517862021923065, 0.471948027610779], + [0.710287988185883, 0.380764007568359], + [0.526226997375488, 0.573909997940063], + [0.895093023777008, 0.254140973091125], + [0.634069979190826, 0.409575998783112], + [0.661242008209229, 0.41302502155304], + [0.688880026340485, 0.409460008144379], + [0.725341975688934, 0.389131009578705], + [0.606630027294159, 0.40370500087738], + [0.654766023159027, 0.344011008739471], + [0.629905998706818, 0.346076011657715], + [0.680678009986877, 0.347265005111694], + [0.702096998691559, 0.353591024875641], + [0.75221198797226, 0.410804986953735], + [0.602918028831482, 0.842862963676453], + [0.719901978969574, 0.375599980354309], + [0.893692970275879, 0.399959981441498], + [0.790081977844238, 0.391354024410248], + [0.643998026847839, 0.534487962722778], + [0.528249025344849, 0.65040397644043], + [0.525849997997284, 0.680191040039062], + [0.560214996337891, 0.657229006290436], + [0.585384011268616, 0.66654098033905], + [0.549625992774963, 0.680860996246338], + [0.57122802734375, 0.682691991329193], + [0.624852001667023, 0.72809898853302], + [0.513050019741058, 0.547281980514526], + [0.51509702205658, 0.527251958847046], + [0.742246985435486, 0.314507007598877], + [0.598631024360657, 0.454979002475739], + [0.570338010787964, 0.548575043678284], + [0.578631997108459, 0.533622980117798], + [0.723087012767792, 0.532054007053375], + [0.516445994377136, 0.499638974666595], + [0.662801027297974, 0.282917976379395], + [0.70362401008606, 0.293271005153656], + [0.830704987049103, 0.193813979625702], + [0.552385985851288, 0.302568018436432], + [0.607609987258911, 0.353887975215912], + [0.645429015159607, 0.696707010269165], + [0.932694971561432, 0.730105042457581], + [0.557260990142822, 0.572826027870178], + [0.542901992797852, 0.584792017936707], + [0.6180260181427, 0.694710969924927], + [0.607590973377228, 0.694203019142151], + [0.722943007946014, 0.271963000297546], + [0.577413976192474, 0.563166975975037], + [0.614082992076874, 0.281386971473694], + [0.616907000541687, 0.255886018276215], + [0.668509006500244, 0.119913995265961], + [0.770092010498047, 0.232020974159241], + [0.635536015033722, 0.189248979091644], + [0.77039098739624, 0.299556016921997], + [0.826722025871277, 0.278755009174347], + [0.527121007442474, 0.666198015213013], + [0.553171992301941, 0.668527007102966], + [0.577238023281097, 0.673889994621277], + [0.554691970348358, 0.580065965652466], + [0.611896991729736, 0.693961024284363], + [0.59696102142334, 0.706539988517761], + [0.596370995044708, 0.693953037261963], + [0.539958000183105, 0.557139039039612], + [0.568841993808746, 0.692366003990173], + [0.547818005084991, 0.692366003990173], + [0.52461302280426, 0.692366003990173], + [0.534089982509613, 0.779141008853912], + [0.527670979499817, 0.736225962638855], + [0.526912987232208, 0.717857003211975], + [0.526877999305725, 0.704625964164734], + [0.526966989040375, 0.695277988910675], + [0.572058022022247, 0.695277988910675], + [0.573521018028259, 0.703539967536926], + [0.57683801651001, 0.711845993995667], + [0.581691026687622, 0.720062971115112], + [0.609944999217987, 0.639909982681274], + [0.986046016216278, 0.560034036636353], + [0.5867999792099, 0.69539999961853], + [0.590372025966644, 0.701822996139526], + [0.531915009021759, 0.601536989212036], + [0.577268004417419, 0.585934996604919], + [0.536915004253387, 0.593786001205444], + [0.627542972564697, 0.473352015018463], + [0.665585994720459, 0.495950996875763], + [0.588353991508484, 0.546862006187439], + [0.757824003696442, 0.14767599105835], + [0.709249973297119, 0.201507985591888], + [0.672684013843536, 0.256581008434296], + [0.600408971309662, 0.74900496006012], + [0.55826598405838, 0.261672019958496], + [0.570303976535797, 0.187870979309082], + [0.588165998458862, 0.109044015407562], + [0.711045026779175, 0.398952007293701], + [0.781069993972778, 0.435405015945435], + [0.587247014045715, 0.398931980133057], + [0.742869973182678, 0.355445981025696], + [0.572156012058258, 0.437651991844177], + [0.55186802148819, 0.536570012569427], + [0.821442008018494, 0.457556009292603], + [0.752701997756958, 0.457181990146637], + [0.71375697851181, 0.467626988887787], + [0.66711300611496, 0.460672974586487], + [0.631101012229919, 0.447153985500336], + [0.6008620262146, 0.432473003864288], + [0.523481011390686, 0.405627012252808], + [0.810747981071472, 0.523926019668579], + [0.771045982837677, 0.348959028720856], + [0.509127020835876, 0.562718033790588], + [0.595292985439301, 0.485023975372314], + [0.980530977249146, 0.401564002037048], + [0.573499977588654, 0.420000016689301], + [0.602994978427887, 0.548687994480133], + [0.733529984951019, 0.376977026462555], + [0.560611009597778, 0.519016981124878], + [0.967685997486115, 0.644356966018677], + [0.580985009670258, 0.387160003185272], + [0.537728011608124, 0.505385041236877], + [0.760966002941132, 0.779752969741821], + [0.801778972148895, 0.831938028335571], + [0.892440974712372, 0.54076099395752], + [0.816350996494293, 0.740260004997253], + [0.865594983100891, 0.333687007427216], + [0.614073991775513, 0.883246004581451], + [0.508952975273132, 0.579437971115112], + [0.617941975593567, 0.508316040039062], + [0.825608015060425, 0.397674977779388], + [0.681214988231659, 0.39623498916626], + [0.656635999679565, 0.400596976280212], + [0.603900015354156, 0.710216999053955], + [0.81208598613739, 0.588539004325867], + [0.56801301240921, 0.944564998149872], + [0.681007981300354, 0.898285031318665], + [0.733752012252808, 0.869701027870178], + [0.633830010890961, 0.398822009563446], + [0.606792986392975, 0.39553701877594], + [0.589659988880157, 0.391062021255493], + [0.805015981197357, 0.342108011245728], + [0.611334979534149, 0.362284004688263], + [0.634037971496582, 0.355970978736877], + [0.656635999679565, 0.355356991291046], + [0.681214988231659, 0.35834002494812], + [0.698584973812103, 0.363156020641327], + [0.941866993904114, 0.319076001644135], + [0.698584973812103, 0.387449026107788], + [0.584177017211914, 0.624107003211975], + [0.554318010807037, 0.566076993942261], + [0.534153997898102, 0.62064003944397], + [0.711217999458313, 0.819975018501282], + [0.664629995822906, 0.852871000766754], + [0.559099972248077, 0.902631998062134], + [0.871706008911133, 0.791940987110138], + [0.591234028339386, 0.373893976211548], + [0.544341027736664, 0.451583981513977], + [0.624562978744507, 0.924192011356354], + [0.88577002286911, 0.615028977394104], + [0.551338016986847, 0.695277988910675], + [0.551980018615723, 0.704632043838501], + [0.552887976169586, 0.715808033943176], + [0.555167973041534, 0.730794012546539], + [0.569944024085999, 0.767035007476807], + [0.593203008174896, 0.685675978660583], + [0.599261999130249, 0.681069016456604], + [0.607599973678589, 0.677703022956848], + [0.631937980651855, 0.663500010967255], + [0.752032995223999, 0.601315021514893], + [0.547226011753082, 0.420395016670227], + [0.563543975353241, 0.359827995300293], + [0.583841025829315, 0.368713974952698], + [0.586614012718201, 0.692366003990173], + [0.771915018558502, 0.683578014373779], + [0.531597018241882, 0.352482974529266], + [0.588370978832245, 0.804440975189209], + [0.52079701423645, 0.442565023899078], + [0.567984998226166, 0.493479013442993], + [0.543282985687256, 0.819254994392395], + [0.655317008495331, 0.745514988899231], + [0.621008992195129, 0.574018001556396], + [0.625559985637665, 0.78031200170517], + [0.680198013782501, 0.570719003677368], + [0.64276397228241, 0.604337990283966], + [0.704662978649139, 0.621529996395111], + [0.552012026309967, 0.862591981887817], + [0.589071989059448, 0.508637011051178], + [0.685944974422455, 0.775357007980347], + [0.645735025405884, 0.812640011310577], + [0.675342977046967, 0.703978002071381], + [0.810858011245728, 0.646304965019226], + [0.72012197971344, 0.714666962623596], + [0.866151988506317, 0.682704985141754], + [0.663187026977539, 0.644596993923187], + [0.570082008838654, 0.466325998306274], + [0.544561982154846, 0.548375964164734], + [0.562758982181549, 0.558784961700439], + [0.531987011432648, 0.530140042304993], + [0.585271000862122, 0.335177004337311], + [0.622952997684479, 0.32277899980545], + [0.655896008014679, 0.320163011550903], + [0.687132000923157, 0.322345972061157], + [0.716481983661652, 0.333200991153717], + [0.758756995201111, 0.382786989212036], + [0.897013008594513, 0.468769013881683], + [0.732392013072968, 0.424547016620636], + [0.70211398601532, 0.433162987232208], + [0.66652500629425, 0.433866024017334], + [0.633504986763, 0.426087975502014], + [0.603875994682312, 0.416586995124817], + [0.579657971858978, 0.409945011138916], + [0.992439985275269, 0.480777025222778], + [0.567192018032074, 0.569419980049133], + [0.54136598110199, 0.478899002075195], + [0.526564002037048, 0.546118021011353], + [0.523913025856018, 0.563830018043518], + [0.531529009342194, 0.555056989192963], + [0.566035985946655, 0.582329034805298], + [0.51631098985672, 0.563053965568542], + [0.5174720287323, 0.577877044677734], + [0.573594987392426, 0.389806985855103], + [0.560697972774506, 0.395331978797913], + [0.549755990505219, 0.399751007556915], + [0.710287988185883, 0.368252992630005], + [0.723330020904541, 0.363372981548309] +]; +var TRI468 = [ + 127, + 34, + 139, + 11, + 0, + 37, + 232, + 231, + 120, + 72, + 37, + 39, + 128, + 121, + 47, + 232, + 121, + 128, + 104, + 69, + 67, + 175, + 171, + 148, + 157, + 154, + 155, + 118, + 50, + 101, + 73, + 39, + 40, + 9, + 151, + 108, + 48, + 115, + 131, + 194, + 204, + 211, + 74, + 40, + 185, + 80, + 42, + 183, + 40, + 92, + 186, + 230, + 229, + 118, + 202, + 212, + 214, + 83, + 18, + 17, + 76, + 61, + 146, + 160, + 29, + 30, + 56, + 157, + 173, + 106, + 204, + 194, + 135, + 214, + 192, + 203, + 165, + 98, + 21, + 71, + 68, + 51, + 45, + 4, + 144, + 24, + 23, + 77, + 146, + 91, + 205, + 50, + 187, + 201, + 200, + 18, + 91, + 106, + 182, + 90, + 91, + 181, + 85, + 84, + 17, + 206, + 203, + 36, + 148, + 171, + 140, + 92, + 40, + 39, + 193, + 189, + 244, + 159, + 158, + 28, + 247, + 246, + 161, + 236, + 3, + 196, + 54, + 68, + 104, + 193, + 168, + 8, + 117, + 228, + 31, + 189, + 193, + 55, + 98, + 97, + 99, + 126, + 47, + 100, + 166, + 79, + 218, + 155, + 154, + 26, + 209, + 49, + 131, + 135, + 136, + 150, + 47, + 126, + 217, + 223, + 52, + 53, + 45, + 51, + 134, + 211, + 170, + 140, + 67, + 69, + 108, + 43, + 106, + 91, + 230, + 119, + 120, + 226, + 130, + 247, + 63, + 53, + 52, + 238, + 20, + 242, + 46, + 70, + 156, + 78, + 62, + 96, + 46, + 53, + 63, + 143, + 34, + 227, + 173, + 155, + 133, + 123, + 117, + 111, + 44, + 125, + 19, + 236, + 134, + 51, + 216, + 206, + 205, + 154, + 153, + 22, + 39, + 37, + 167, + 200, + 201, + 208, + 36, + 142, + 100, + 57, + 212, + 202, + 20, + 60, + 99, + 28, + 158, + 157, + 35, + 226, + 113, + 160, + 159, + 27, + 204, + 202, + 210, + 113, + 225, + 46, + 43, + 202, + 204, + 62, + 76, + 77, + 137, + 123, + 116, + 41, + 38, + 72, + 203, + 129, + 142, + 64, + 98, + 240, + 49, + 102, + 64, + 41, + 73, + 74, + 212, + 216, + 207, + 42, + 74, + 184, + 169, + 170, + 211, + 170, + 149, + 176, + 105, + 66, + 69, + 122, + 6, + 168, + 123, + 147, + 187, + 96, + 77, + 90, + 65, + 55, + 107, + 89, + 90, + 180, + 101, + 100, + 120, + 63, + 105, + 104, + 93, + 137, + 227, + 15, + 86, + 85, + 129, + 102, + 49, + 14, + 87, + 86, + 55, + 8, + 9, + 100, + 47, + 121, + 145, + 23, + 22, + 88, + 89, + 179, + 6, + 122, + 196, + 88, + 95, + 96, + 138, + 172, + 136, + 215, + 58, + 172, + 115, + 48, + 219, + 42, + 80, + 81, + 195, + 3, + 51, + 43, + 146, + 61, + 171, + 175, + 199, + 81, + 82, + 38, + 53, + 46, + 225, + 144, + 163, + 110, + 246, + 33, + 7, + 52, + 65, + 66, + 229, + 228, + 117, + 34, + 127, + 234, + 107, + 108, + 69, + 109, + 108, + 151, + 48, + 64, + 235, + 62, + 78, + 191, + 129, + 209, + 126, + 111, + 35, + 143, + 163, + 161, + 246, + 117, + 123, + 50, + 222, + 65, + 52, + 19, + 125, + 141, + 221, + 55, + 65, + 3, + 195, + 197, + 25, + 7, + 33, + 220, + 237, + 44, + 70, + 71, + 139, + 122, + 193, + 245, + 247, + 130, + 33, + 71, + 21, + 162, + 153, + 158, + 159, + 170, + 169, + 150, + 188, + 174, + 196, + 216, + 186, + 92, + 144, + 160, + 161, + 2, + 97, + 167, + 141, + 125, + 241, + 164, + 167, + 37, + 72, + 38, + 12, + 145, + 159, + 160, + 38, + 82, + 13, + 63, + 68, + 71, + 226, + 35, + 111, + 158, + 153, + 154, + 101, + 50, + 205, + 206, + 92, + 165, + 209, + 198, + 217, + 165, + 167, + 97, + 220, + 115, + 218, + 133, + 112, + 243, + 239, + 238, + 241, + 214, + 135, + 169, + 190, + 173, + 133, + 171, + 208, + 32, + 125, + 44, + 237, + 86, + 87, + 178, + 85, + 86, + 179, + 84, + 85, + 180, + 83, + 84, + 181, + 201, + 83, + 182, + 137, + 93, + 132, + 76, + 62, + 183, + 61, + 76, + 184, + 57, + 61, + 185, + 212, + 57, + 186, + 214, + 207, + 187, + 34, + 143, + 156, + 79, + 239, + 237, + 123, + 137, + 177, + 44, + 1, + 4, + 201, + 194, + 32, + 64, + 102, + 129, + 213, + 215, + 138, + 59, + 166, + 219, + 242, + 99, + 97, + 2, + 94, + 141, + 75, + 59, + 235, + 24, + 110, + 228, + 25, + 130, + 226, + 23, + 24, + 229, + 22, + 23, + 230, + 26, + 22, + 231, + 112, + 26, + 232, + 189, + 190, + 243, + 221, + 56, + 190, + 28, + 56, + 221, + 27, + 28, + 222, + 29, + 27, + 223, + 30, + 29, + 224, + 247, + 30, + 225, + 238, + 79, + 20, + 166, + 59, + 75, + 60, + 75, + 240, + 147, + 177, + 215, + 20, + 79, + 166, + 187, + 147, + 213, + 112, + 233, + 244, + 233, + 128, + 245, + 128, + 114, + 188, + 114, + 217, + 174, + 131, + 115, + 220, + 217, + 198, + 236, + 198, + 131, + 134, + 177, + 132, + 58, + 143, + 35, + 124, + 110, + 163, + 7, + 228, + 110, + 25, + 356, + 389, + 368, + 11, + 302, + 267, + 452, + 350, + 349, + 302, + 303, + 269, + 357, + 343, + 277, + 452, + 453, + 357, + 333, + 332, + 297, + 175, + 152, + 377, + 384, + 398, + 382, + 347, + 348, + 330, + 303, + 304, + 270, + 9, + 336, + 337, + 278, + 279, + 360, + 418, + 262, + 431, + 304, + 408, + 409, + 310, + 415, + 407, + 270, + 409, + 410, + 450, + 348, + 347, + 422, + 430, + 434, + 313, + 314, + 17, + 306, + 307, + 375, + 387, + 388, + 260, + 286, + 414, + 398, + 335, + 406, + 418, + 364, + 367, + 416, + 423, + 358, + 327, + 251, + 284, + 298, + 281, + 5, + 4, + 373, + 374, + 253, + 307, + 320, + 321, + 425, + 427, + 411, + 421, + 313, + 18, + 321, + 405, + 406, + 320, + 404, + 405, + 315, + 16, + 17, + 426, + 425, + 266, + 377, + 400, + 369, + 322, + 391, + 269, + 417, + 465, + 464, + 386, + 257, + 258, + 466, + 260, + 388, + 456, + 399, + 419, + 284, + 332, + 333, + 417, + 285, + 8, + 346, + 340, + 261, + 413, + 441, + 285, + 327, + 460, + 328, + 355, + 371, + 329, + 392, + 439, + 438, + 382, + 341, + 256, + 429, + 420, + 360, + 364, + 394, + 379, + 277, + 343, + 437, + 443, + 444, + 283, + 275, + 440, + 363, + 431, + 262, + 369, + 297, + 338, + 337, + 273, + 375, + 321, + 450, + 451, + 349, + 446, + 342, + 467, + 293, + 334, + 282, + 458, + 461, + 462, + 276, + 353, + 383, + 308, + 324, + 325, + 276, + 300, + 293, + 372, + 345, + 447, + 382, + 398, + 362, + 352, + 345, + 340, + 274, + 1, + 19, + 456, + 248, + 281, + 436, + 427, + 425, + 381, + 256, + 252, + 269, + 391, + 393, + 200, + 199, + 428, + 266, + 330, + 329, + 287, + 273, + 422, + 250, + 462, + 328, + 258, + 286, + 384, + 265, + 353, + 342, + 387, + 259, + 257, + 424, + 431, + 430, + 342, + 353, + 276, + 273, + 335, + 424, + 292, + 325, + 307, + 366, + 447, + 345, + 271, + 303, + 302, + 423, + 266, + 371, + 294, + 455, + 460, + 279, + 278, + 294, + 271, + 272, + 304, + 432, + 434, + 427, + 272, + 407, + 408, + 394, + 430, + 431, + 395, + 369, + 400, + 334, + 333, + 299, + 351, + 417, + 168, + 352, + 280, + 411, + 325, + 319, + 320, + 295, + 296, + 336, + 319, + 403, + 404, + 330, + 348, + 349, + 293, + 298, + 333, + 323, + 454, + 447, + 15, + 16, + 315, + 358, + 429, + 279, + 14, + 15, + 316, + 285, + 336, + 9, + 329, + 349, + 350, + 374, + 380, + 252, + 318, + 402, + 403, + 6, + 197, + 419, + 318, + 319, + 325, + 367, + 364, + 365, + 435, + 367, + 397, + 344, + 438, + 439, + 272, + 271, + 311, + 195, + 5, + 281, + 273, + 287, + 291, + 396, + 428, + 199, + 311, + 271, + 268, + 283, + 444, + 445, + 373, + 254, + 339, + 263, + 466, + 249, + 282, + 334, + 296, + 449, + 347, + 346, + 264, + 447, + 454, + 336, + 296, + 299, + 338, + 10, + 151, + 278, + 439, + 455, + 292, + 407, + 415, + 358, + 371, + 355, + 340, + 345, + 372, + 390, + 249, + 466, + 346, + 347, + 280, + 442, + 443, + 282, + 19, + 94, + 370, + 441, + 442, + 295, + 248, + 419, + 197, + 263, + 255, + 359, + 440, + 275, + 274, + 300, + 383, + 368, + 351, + 412, + 465, + 263, + 467, + 466, + 301, + 368, + 389, + 380, + 374, + 386, + 395, + 378, + 379, + 412, + 351, + 419, + 436, + 426, + 322, + 373, + 390, + 388, + 2, + 164, + 393, + 370, + 462, + 461, + 164, + 0, + 267, + 302, + 11, + 12, + 374, + 373, + 387, + 268, + 12, + 13, + 293, + 300, + 301, + 446, + 261, + 340, + 385, + 384, + 381, + 330, + 266, + 425, + 426, + 423, + 391, + 429, + 355, + 437, + 391, + 327, + 326, + 440, + 457, + 438, + 341, + 382, + 362, + 459, + 457, + 461, + 434, + 430, + 394, + 414, + 463, + 362, + 396, + 369, + 262, + 354, + 461, + 457, + 316, + 403, + 402, + 315, + 404, + 403, + 314, + 405, + 404, + 313, + 406, + 405, + 421, + 418, + 406, + 366, + 401, + 361, + 306, + 408, + 407, + 291, + 409, + 408, + 287, + 410, + 409, + 432, + 436, + 410, + 434, + 416, + 411, + 264, + 368, + 383, + 309, + 438, + 457, + 352, + 376, + 401, + 274, + 275, + 4, + 421, + 428, + 262, + 294, + 327, + 358, + 433, + 416, + 367, + 289, + 455, + 439, + 462, + 370, + 326, + 2, + 326, + 370, + 305, + 460, + 455, + 254, + 449, + 448, + 255, + 261, + 446, + 253, + 450, + 449, + 252, + 451, + 450, + 256, + 452, + 451, + 341, + 453, + 452, + 413, + 464, + 463, + 441, + 413, + 414, + 258, + 442, + 441, + 257, + 443, + 442, + 259, + 444, + 443, + 260, + 445, + 444, + 467, + 342, + 445, + 459, + 458, + 250, + 289, + 392, + 290, + 290, + 328, + 460, + 376, + 433, + 435, + 250, + 290, + 392, + 411, + 416, + 433, + 341, + 463, + 464, + 453, + 464, + 465, + 357, + 465, + 412, + 343, + 412, + 399, + 360, + 363, + 440, + 437, + 399, + 456, + 420, + 456, + 363, + 401, + 435, + 288, + 372, + 383, + 353, + 339, + 255, + 249, + 448, + 261, + 255, + 133, + 243, + 190, + 133, + 155, + 112, + 33, + 246, + 247, + 33, + 130, + 25, + 398, + 384, + 286, + 362, + 398, + 414, + 362, + 463, + 341, + 263, + 359, + 467, + 263, + 249, + 255, + 466, + 467, + 260, + 75, + 60, + 166, + 238, + 239, + 79, + 162, + 127, + 139, + 72, + 11, + 37, + 121, + 232, + 120, + 73, + 72, + 39, + 114, + 128, + 47, + 233, + 232, + 128, + 103, + 104, + 67, + 152, + 175, + 148, + 173, + 157, + 155, + 119, + 118, + 101, + 74, + 73, + 40, + 107, + 9, + 108, + 49, + 48, + 131, + 32, + 194, + 211, + 184, + 74, + 185, + 191, + 80, + 183, + 185, + 40, + 186, + 119, + 230, + 118, + 210, + 202, + 214, + 84, + 83, + 17, + 77, + 76, + 146, + 161, + 160, + 30, + 190, + 56, + 173, + 182, + 106, + 194, + 138, + 135, + 192, + 129, + 203, + 98, + 54, + 21, + 68, + 5, + 51, + 4, + 145, + 144, + 23, + 90, + 77, + 91, + 207, + 205, + 187, + 83, + 201, + 18, + 181, + 91, + 182, + 180, + 90, + 181, + 16, + 85, + 17, + 205, + 206, + 36, + 176, + 148, + 140, + 165, + 92, + 39, + 245, + 193, + 244, + 27, + 159, + 28, + 30, + 247, + 161, + 174, + 236, + 196, + 103, + 54, + 104, + 55, + 193, + 8, + 111, + 117, + 31, + 221, + 189, + 55, + 240, + 98, + 99, + 142, + 126, + 100, + 219, + 166, + 218, + 112, + 155, + 26, + 198, + 209, + 131, + 169, + 135, + 150, + 114, + 47, + 217, + 224, + 223, + 53, + 220, + 45, + 134, + 32, + 211, + 140, + 109, + 67, + 108, + 146, + 43, + 91, + 231, + 230, + 120, + 113, + 226, + 247, + 105, + 63, + 52, + 241, + 238, + 242, + 124, + 46, + 156, + 95, + 78, + 96, + 70, + 46, + 63, + 116, + 143, + 227, + 116, + 123, + 111, + 1, + 44, + 19, + 3, + 236, + 51, + 207, + 216, + 205, + 26, + 154, + 22, + 165, + 39, + 167, + 199, + 200, + 208, + 101, + 36, + 100, + 43, + 57, + 202, + 242, + 20, + 99, + 56, + 28, + 157, + 124, + 35, + 113, + 29, + 160, + 27, + 211, + 204, + 210, + 124, + 113, + 46, + 106, + 43, + 204, + 96, + 62, + 77, + 227, + 137, + 116, + 73, + 41, + 72, + 36, + 203, + 142, + 235, + 64, + 240, + 48, + 49, + 64, + 42, + 41, + 74, + 214, + 212, + 207, + 183, + 42, + 184, + 210, + 169, + 211, + 140, + 170, + 176, + 104, + 105, + 69, + 193, + 122, + 168, + 50, + 123, + 187, + 89, + 96, + 90, + 66, + 65, + 107, + 179, + 89, + 180, + 119, + 101, + 120, + 68, + 63, + 104, + 234, + 93, + 227, + 16, + 15, + 85, + 209, + 129, + 49, + 15, + 14, + 86, + 107, + 55, + 9, + 120, + 100, + 121, + 153, + 145, + 22, + 178, + 88, + 179, + 197, + 6, + 196, + 89, + 88, + 96, + 135, + 138, + 136, + 138, + 215, + 172, + 218, + 115, + 219, + 41, + 42, + 81, + 5, + 195, + 51, + 57, + 43, + 61, + 208, + 171, + 199, + 41, + 81, + 38, + 224, + 53, + 225, + 24, + 144, + 110, + 105, + 52, + 66, + 118, + 229, + 117, + 227, + 34, + 234, + 66, + 107, + 69, + 10, + 109, + 151, + 219, + 48, + 235, + 183, + 62, + 191, + 142, + 129, + 126, + 116, + 111, + 143, + 7, + 163, + 246, + 118, + 117, + 50, + 223, + 222, + 52, + 94, + 19, + 141, + 222, + 221, + 65, + 196, + 3, + 197, + 45, + 220, + 44, + 156, + 70, + 139, + 188, + 122, + 245, + 139, + 71, + 162, + 145, + 153, + 159, + 149, + 170, + 150, + 122, + 188, + 196, + 206, + 216, + 92, + 163, + 144, + 161, + 164, + 2, + 167, + 242, + 141, + 241, + 0, + 164, + 37, + 11, + 72, + 12, + 144, + 145, + 160, + 12, + 38, + 13, + 70, + 63, + 71, + 31, + 226, + 111, + 157, + 158, + 154, + 36, + 101, + 205, + 203, + 206, + 165, + 126, + 209, + 217, + 98, + 165, + 97, + 237, + 220, + 218, + 237, + 239, + 241, + 210, + 214, + 169, + 140, + 171, + 32, + 241, + 125, + 237, + 179, + 86, + 178, + 180, + 85, + 179, + 181, + 84, + 180, + 182, + 83, + 181, + 194, + 201, + 182, + 177, + 137, + 132, + 184, + 76, + 183, + 185, + 61, + 184, + 186, + 57, + 185, + 216, + 212, + 186, + 192, + 214, + 187, + 139, + 34, + 156, + 218, + 79, + 237, + 147, + 123, + 177, + 45, + 44, + 4, + 208, + 201, + 32, + 98, + 64, + 129, + 192, + 213, + 138, + 235, + 59, + 219, + 141, + 242, + 97, + 97, + 2, + 141, + 240, + 75, + 235, + 229, + 24, + 228, + 31, + 25, + 226, + 230, + 23, + 229, + 231, + 22, + 230, + 232, + 26, + 231, + 233, + 112, + 232, + 244, + 189, + 243, + 189, + 221, + 190, + 222, + 28, + 221, + 223, + 27, + 222, + 224, + 29, + 223, + 225, + 30, + 224, + 113, + 247, + 225, + 99, + 60, + 240, + 213, + 147, + 215, + 60, + 20, + 166, + 192, + 187, + 213, + 243, + 112, + 244, + 244, + 233, + 245, + 245, + 128, + 188, + 188, + 114, + 174, + 134, + 131, + 220, + 174, + 217, + 236, + 236, + 198, + 134, + 215, + 177, + 58, + 156, + 143, + 124, + 25, + 110, + 7, + 31, + 228, + 25, + 264, + 356, + 368, + 0, + 11, + 267, + 451, + 452, + 349, + 267, + 302, + 269, + 350, + 357, + 277, + 350, + 452, + 357, + 299, + 333, + 297, + 396, + 175, + 377, + 381, + 384, + 382, + 280, + 347, + 330, + 269, + 303, + 270, + 151, + 9, + 337, + 344, + 278, + 360, + 424, + 418, + 431, + 270, + 304, + 409, + 272, + 310, + 407, + 322, + 270, + 410, + 449, + 450, + 347, + 432, + 422, + 434, + 18, + 313, + 17, + 291, + 306, + 375, + 259, + 387, + 260, + 424, + 335, + 418, + 434, + 364, + 416, + 391, + 423, + 327, + 301, + 251, + 298, + 275, + 281, + 4, + 254, + 373, + 253, + 375, + 307, + 321, + 280, + 425, + 411, + 200, + 421, + 18, + 335, + 321, + 406, + 321, + 320, + 405, + 314, + 315, + 17, + 423, + 426, + 266, + 396, + 377, + 369, + 270, + 322, + 269, + 413, + 417, + 464, + 385, + 386, + 258, + 248, + 456, + 419, + 298, + 284, + 333, + 168, + 417, + 8, + 448, + 346, + 261, + 417, + 413, + 285, + 326, + 327, + 328, + 277, + 355, + 329, + 309, + 392, + 438, + 381, + 382, + 256, + 279, + 429, + 360, + 365, + 364, + 379, + 355, + 277, + 437, + 282, + 443, + 283, + 281, + 275, + 363, + 395, + 431, + 369, + 299, + 297, + 337, + 335, + 273, + 321, + 348, + 450, + 349, + 359, + 446, + 467, + 283, + 293, + 282, + 250, + 458, + 462, + 300, + 276, + 383, + 292, + 308, + 325, + 283, + 276, + 293, + 264, + 372, + 447, + 346, + 352, + 340, + 354, + 274, + 19, + 363, + 456, + 281, + 426, + 436, + 425, + 380, + 381, + 252, + 267, + 269, + 393, + 421, + 200, + 428, + 371, + 266, + 329, + 432, + 287, + 422, + 290, + 250, + 328, + 385, + 258, + 384, + 446, + 265, + 342, + 386, + 387, + 257, + 422, + 424, + 430, + 445, + 342, + 276, + 422, + 273, + 424, + 306, + 292, + 307, + 352, + 366, + 345, + 268, + 271, + 302, + 358, + 423, + 371, + 327, + 294, + 460, + 331, + 279, + 294, + 303, + 271, + 304, + 436, + 432, + 427, + 304, + 272, + 408, + 395, + 394, + 431, + 378, + 395, + 400, + 296, + 334, + 299, + 6, + 351, + 168, + 376, + 352, + 411, + 307, + 325, + 320, + 285, + 295, + 336, + 320, + 319, + 404, + 329, + 330, + 349, + 334, + 293, + 333, + 366, + 323, + 447, + 316, + 15, + 315, + 331, + 358, + 279, + 317, + 14, + 316, + 8, + 285, + 9, + 277, + 329, + 350, + 253, + 374, + 252, + 319, + 318, + 403, + 351, + 6, + 419, + 324, + 318, + 325, + 397, + 367, + 365, + 288, + 435, + 397, + 278, + 344, + 439, + 310, + 272, + 311, + 248, + 195, + 281, + 375, + 273, + 291, + 175, + 396, + 199, + 312, + 311, + 268, + 276, + 283, + 445, + 390, + 373, + 339, + 295, + 282, + 296, + 448, + 449, + 346, + 356, + 264, + 454, + 337, + 336, + 299, + 337, + 338, + 151, + 294, + 278, + 455, + 308, + 292, + 415, + 429, + 358, + 355, + 265, + 340, + 372, + 388, + 390, + 466, + 352, + 346, + 280, + 295, + 442, + 282, + 354, + 19, + 370, + 285, + 441, + 295, + 195, + 248, + 197, + 457, + 440, + 274, + 301, + 300, + 368, + 417, + 351, + 465, + 251, + 301, + 389, + 385, + 380, + 386, + 394, + 395, + 379, + 399, + 412, + 419, + 410, + 436, + 322, + 387, + 373, + 388, + 326, + 2, + 393, + 354, + 370, + 461, + 393, + 164, + 267, + 268, + 302, + 12, + 386, + 374, + 387, + 312, + 268, + 13, + 298, + 293, + 301, + 265, + 446, + 340, + 380, + 385, + 381, + 280, + 330, + 425, + 322, + 426, + 391, + 420, + 429, + 437, + 393, + 391, + 326, + 344, + 440, + 438, + 458, + 459, + 461, + 364, + 434, + 394, + 428, + 396, + 262, + 274, + 354, + 457, + 317, + 316, + 402, + 316, + 315, + 403, + 315, + 314, + 404, + 314, + 313, + 405, + 313, + 421, + 406, + 323, + 366, + 361, + 292, + 306, + 407, + 306, + 291, + 408, + 291, + 287, + 409, + 287, + 432, + 410, + 427, + 434, + 411, + 372, + 264, + 383, + 459, + 309, + 457, + 366, + 352, + 401, + 1, + 274, + 4, + 418, + 421, + 262, + 331, + 294, + 358, + 435, + 433, + 367, + 392, + 289, + 439, + 328, + 462, + 326, + 94, + 2, + 370, + 289, + 305, + 455, + 339, + 254, + 448, + 359, + 255, + 446, + 254, + 253, + 449, + 253, + 252, + 450, + 252, + 256, + 451, + 256, + 341, + 452, + 414, + 413, + 463, + 286, + 441, + 414, + 286, + 258, + 441, + 258, + 257, + 442, + 257, + 259, + 443, + 259, + 260, + 444, + 260, + 467, + 445, + 309, + 459, + 250, + 305, + 289, + 290, + 305, + 290, + 460, + 401, + 376, + 435, + 309, + 250, + 392, + 376, + 411, + 433, + 453, + 341, + 464, + 357, + 453, + 465, + 343, + 357, + 412, + 437, + 343, + 399, + 344, + 360, + 440, + 420, + 437, + 456, + 360, + 420, + 363, + 361, + 401, + 288, + 265, + 372, + 353, + 390, + 339, + 249, + 339, + 448, + 255 +]; +var VTX68 = [ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + 78, + 81, + 13, + 311, + 308, + 402, + 14, + 178 +]; +var VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; +var VTX7 = [33, 133, 362, 263, 1, 78, 308]; +var UV68 = VTX68.map((x) => UV468[x]); +var UV33 = VTX33.map((x) => UV468[x]); +var UV7 = VTX7.map((x) => UV468[x]); +function connectionsToIndices(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var pairsLips = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var pairsLeftEye = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var pairsLeftEyebrow = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var pairsLeftIris = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var pairsRightEye = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var pairsRightEyebrow = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var pairsRightIris = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var pairsFaceContour = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +var contourKeypoints = { + lips: connectionsToIndices(pairsLips), + leftEye: connectionsToIndices(pairsLeftEye), + leftEyebrow: connectionsToIndices(pairsLeftEyebrow), + leftIris: connectionsToIndices(pairsLeftIris), + rightEye: connectionsToIndices(pairsRightEye), + rightEyebrow: connectionsToIndices(pairsRightEyebrow), + rightIris: connectionsToIndices(pairsRightIris), + faceOval: connectionsToIndices(pairsFaceContour) +}; + +// src/face/constants.ts +var LIPS_CONNECTIONS = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var LEFT_EYE_CONNECTIONS = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var LEFT_EYEBROW_CONNECTIONS = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var LEFT_IRIS_CONNECTIONS = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var RIGHT_EYE_CONNECTIONS = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var RIGHT_EYEBROW_CONNECTIONS = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var RIGHT_IRIS_CONNECTIONS = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var FACE_OVAL_CONNECTIONS = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +function connectionsToIndices2(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = { + lips: connectionsToIndices2(LIPS_CONNECTIONS), + leftEye: connectionsToIndices2(LEFT_EYE_CONNECTIONS), + leftEyebrow: connectionsToIndices2(LEFT_EYEBROW_CONNECTIONS), + leftIris: connectionsToIndices2(LEFT_IRIS_CONNECTIONS), + rightEye: connectionsToIndices2(RIGHT_EYE_CONNECTIONS), + rightEyebrow: connectionsToIndices2(RIGHT_EYEBROW_CONNECTIONS), + rightIris: connectionsToIndices2(RIGHT_IRIS_CONNECTIONS), + faceOval: connectionsToIndices2(FACE_OVAL_CONNECTIONS) +}; +var indexLabelPairs = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR).map(([label, indices]) => indices.map((index2) => [index2, label])).flat(); +var MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs); +var LANDMARKS_REFINEMENT_LIPS_CONFIG = [ + 61, + 146, + 91, + 181, + 84, + 17, + 314, + 405, + 321, + 375, + 291, + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + 246, + 161, + 160, + 159, + 158, + 157, + 173, + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + 247, + 30, + 29, + 27, + 28, + 56, + 190, + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + 113, + 225, + 224, + 223, + 222, + 221, + 189, + 35, + 124, + 46, + 53, + 52, + 65, + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + 466, + 388, + 387, + 386, + 385, + 384, + 398, + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + 467, + 260, + 259, + 257, + 258, + 286, + 414, + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + 342, + 445, + 444, + 443, + 442, + 441, + 413, + 265, + 353, + 276, + 283, + 282, + 295, + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 +]; + +// src/draw/face.ts +var localOptions; +function drawLabels(f, ctx) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) + return; + let l = localOptions.faceLabels.slice(); + if (f.score) + l = replace(l, "[score]", 100 * f.score); + if (f.gender) + l = replace(l, "[gender]", f.gender); + if (f.genderScore) + l = replace(l, "[genderScore]", 100 * f.genderScore); + if (f.age) + l = replace(l, "[age]", f.age); + if (f.distance) + l = replace(l, "[distance]", 100 * f.distance); + if (f.real) + l = replace(l, "[real]", 100 * f.real); + if (f.live) + l = replace(l, "[live]", 100 * f.live); + if (f.emotion && f.emotion.length > 0) { + const emotion2 = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`); + if (emotion2.length > 3) + emotion2.length = 3; + l = replace(l, "[emotions]", emotion2.join(" ")); + } + if ((_c = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c.roll) + l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); + if ((_e = (_d = f.rotation) == null ? void 0 : _d.angle) == null ? void 0 : _e.yaw) + l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); + if ((_g = (_f = f.rotation) == null ? void 0 : _f.angle) == null ? void 0 : _g.pitch) + l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); + if ((_i = (_h = f.rotation) == null ? void 0 : _h.gaze) == null ? void 0 : _i.bearing) + l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); + labels(ctx, l, f.box[0], f.box[1], localOptions); +} +function drawIrisElipse(f, ctx) { + var _a, _b, _c, _d; + if (((_a = f.annotations) == null ? void 0 : _a.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } + if (((_c = f.annotations) == null ? void 0 : _c.rightEyeIris) && ((_d = f.annotations) == null ? void 0 : _d.rightEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } +} +function drawGazeSpheres(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.angle) && typeof Path2D !== "undefined") { + ctx.strokeStyle = "pink"; + const valX = f.box[0] + f.box[2] / 2 - f.box[3] * rad2deg(f.rotation.angle.yaw) / 90; + const valY = f.box[1] + f.box[3] / 2 + f.box[2] * rad2deg(f.rotation.angle.pitch) / 90; + const pathV = new Path2D(` + M ${f.box[0] + f.box[2] / 2} ${f.box[1]} C - ${o} ${e.box[1]}, - ${o} ${e.box[1]+e.box[3]}, - ${e.box[0]+e.box[2]/2} ${e.box[1]+e.box[3]} - `),A=new Path2D(` - M ${e.box[0]} ${e.box[1]+e.box[3]/2} + ${valX} ${f.box[1]}, + ${valX} ${f.box[1] + f.box[3]}, + ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]} + `); + const pathH = new Path2D(` + M ${f.box[0]} ${f.box[1] + f.box[3] / 2} C - ${e.box[0]} ${r}, - ${e.box[0]+e.box[2]} ${r}, - ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(A),t.stroke(s)}}function Ls(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let o=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Qt(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[o[0],o[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Qt(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Cs(e,t){if(K.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[r]);Jt(t,o,K)}Is(e,t)}}function Ws(e,t){if(K.drawPoints&&e.mesh.length>=468)for(let n=0;n0&&(Ws(r,o),Cs(r,o),Os(r,o),Ls(r,o))}}function U2(e,t,n){var s,A;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=_(l,"[score]",100*t[a].score),te(r,l,t[a].box[0],t[a].box[1],o)}if(o.drawPoints&&t[a].keypoints)for(let l=0;l0&&t[a].keypoints){r.font=o.font;for(let l of t[a].keypoints){if(!l.score||l.score===0)continue;let c=o.bodyPartLabels.slice();c=_(c,"[label]",l.part),c=_(c,"[score]",100*l.score),te(r,c,l.position[0],l.position[1],o)}}if(o.drawPolygons&&t[a].keypoints&&t[a].annotations)for(let l of Object.values(t[a].annotations))for(let c of l)H1(r,c,o)}}}function Y2(e,t,n){var s,A;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let a of t){if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,a.box[0],a.box[1],a.box[2],a.box[3],o),o.drawLabels&&((s=o.handLabels)==null?void 0:s.length)>0){let l=o.handLabels.slice();l=_(l,"[label]",a.label),l=_(l,"[score]",100*a.score),te(r,l,a.box[0],a.box[1],o)}r.stroke()}if(o.drawPoints&&a.keypoints&&a.keypoints.length>0)for(let l of a.keypoints)r.fillStyle=Ye(l[2],o),be(r,l[0],l[1],0,o);if(o.drawLabels&&a.annotations&&((A=o.fingerLabels)==null?void 0:A.length)>0)for(let[l,c]of Object.entries(a.annotations)){let x=o.fingerLabels.slice();x=_(x,"[label]",l),te(r,x,c[c.length-1][0],c[c.length-1][1],o)}if(o.drawPolygons&&a.annotations){let l=c=>{if(!(!c||c.length===0||!c[0]))for(let x=0;x0?x-1:0][0],c[x>0?x-1:0][1]),r.lineTo(c[x][0],c[x][1]),r.stroke()}};r.lineWidth=o.lineWidth,l(a.annotations.index),l(a.annotations.middle),l(a.annotations.ring),l(a.annotations.pinky),l(a.annotations.thumb)}}}}function K2(e,t,n){var s;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let A of t)if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,A.box[0],A.box[1],A.box[2],A.box[3],o),o.drawLabels&&((s=o.objectLabels)==null?void 0:s.length)>0){let a=o.objectLabels.slice();a=_(a,"[label]",A.label),a=_(a,"[score]",100*A.score),te(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function J2(e,t,n){var r;let o=A0(d0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=J0(e);if(!s)return;s.font=o.font,s.fillStyle=o.color;let A=1;for(let a=0;a1&&c[1].length>0){let x=l[1]>0?`#${l[1]}`:"",i=o.gestureLabels.slice();i=_(i,"[where]",l[0]),i=_(i,"[who]",x),i=_(i,"[what]",c[1]),te(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var je={face:`face + ${f.box[0]} ${valY}, + ${f.box[0] + f.box[2]} ${valY}, + ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2} + `); + ctx.stroke(pathH); + ctx.stroke(pathV); + } +} +function drawGazeArrows(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { + ctx.strokeStyle = "pink"; + ctx.fillStyle = "pink"; + const leftGaze = [ + f.annotations.leftEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.leftEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4); + const rightGaze = [ + f.annotations.rightEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.rightEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4); + } +} +function drawFacePolygons(f, ctx) { + if (localOptions.drawPolygons && f.mesh.length >= 468) { + ctx.lineWidth = 1; + for (let i = 0; i < TRI468.length / 3; i++) { + const points = [TRI468[i * 3 + 0], TRI468[i * 3 + 1], TRI468[i * 3 + 2]].map((index2) => f.mesh[index2]); + lines(ctx, points, localOptions); + } + drawIrisElipse(f, ctx); + } +} +function drawFacePoints(f, ctx) { + if (localOptions.drawPoints && f.mesh.length >= 468) { + for (let i = 0; i < f.mesh.length; i++) { + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions); + if (localOptions.drawAttention) { + if (LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] + 127, localOptions); + if (LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + if (LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + } + } + } +} +function drawFaceBoxes(f, ctx) { + if (localOptions.drawBoxes) { + rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions); + } +} +function face(inCanvas2, result, drawOptions) { + localOptions = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions.font; + ctx.strokeStyle = localOptions.color; + ctx.fillStyle = localOptions.color; + for (const f of result) { + drawFaceBoxes(f, ctx); + drawLabels(f, ctx); + if (f.mesh && f.mesh.length > 0) { + drawFacePoints(f, ctx); + drawFacePolygons(f, ctx); + drawGazeSpheres(f, ctx); + drawGazeArrows(f, ctx); + } + } +} + +// src/draw/body.ts +function body(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + for (let i = 0; i < result.length; i++) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + ctx.lineWidth = localOptions2.lineWidth; + ctx.font = localOptions2.font; + if (localOptions2.drawBoxes && result[i].box && result[i].box.length === 4) { + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.bodyLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.bodyLabels.slice(); + l = replace(l, "[score]", 100 * result[i].score); + labels(ctx, l, result[i].box[0], result[i].box[1], localOptions2); + } + } + if (localOptions2.drawPoints && result[i].keypoints) { + for (let pt = 0; pt < result[i].keypoints.length; pt++) { + if (!result[i].keypoints[pt].score || result[i].keypoints[pt].score === 0) + continue; + ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions2); + point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions2); + } + } + if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { + ctx.font = localOptions2.font; + for (const pt of result[i].keypoints) { + if (!pt.score || pt.score === 0) + continue; + let l = localOptions2.bodyPartLabels.slice(); + l = replace(l, "[label]", pt.part); + l = replace(l, "[score]", 100 * pt.score); + labels(ctx, l, pt.position[0], pt.position[1], localOptions2); + } + } + if (localOptions2.drawPolygons && result[i].keypoints && result[i].annotations) { + for (const part of Object.values(result[i].annotations)) { + for (const connected4 of part) + curves(ctx, connected4, localOptions2); + } + } + } +} + +// src/draw/hand.ts +function hand(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.handLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.handLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + if (localOptions2.drawPoints) { + if (h.keypoints && h.keypoints.length > 0) { + for (const pt of h.keypoints) { + ctx.fillStyle = colorDepth(pt[2], localOptions2); + point(ctx, pt[0], pt[1], 0, localOptions2); + } + } + } + if (localOptions2.drawLabels && h.annotations && ((_b = localOptions2.fingerLabels) == null ? void 0 : _b.length) > 0) { + for (const [part, pt] of Object.entries(h.annotations)) { + let l = localOptions2.fingerLabels.slice(); + l = replace(l, "[label]", part); + labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions2); + } + } + if (localOptions2.drawPolygons && h.annotations) { + const addHandLine = (part) => { + if (!part || part.length === 0 || !part[0]) + return; + for (let i = 0; i < part.length; i++) { + ctx.beginPath(); + const z = part[i][2] || 0; + ctx.strokeStyle = colorDepth(i * z, localOptions2); + ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]); + ctx.lineTo(part[i][0], part[i][1]); + ctx.stroke(); + } + }; + ctx.lineWidth = localOptions2.lineWidth; + addHandLine(h.annotations.index); + addHandLine(h.annotations.middle); + addHandLine(h.annotations.ring); + addHandLine(h.annotations.pinky); + addHandLine(h.annotations.thumb); + } + } +} + +// src/draw/object.ts +function object(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.objectLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.objectLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + } +} + +// src/draw/gesture.ts +function gesture(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions2.font; + ctx.fillStyle = localOptions2.color; + let i = 1; + for (let j = 0; j < result.length; j++) { + const [where, what] = Object.entries(result[j]); + if (what.length > 1 && what[1].length > 0) { + const who = where[1] > 0 ? `#${where[1]}` : ""; + let l = localOptions2.gestureLabels.slice(); + l = replace(l, "[where]", where[0]); + l = replace(l, "[who]", who); + l = replace(l, "[what]", what[1]); + labels(ctx, l, 8, 2 + i * localOptions2.lineHeight, localOptions2); + i += 1; + } + } + } +} + +// src/draw/labels.ts +var defaultLabels = { + face: `face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -118,7 +6447,7521 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var t5=0;function Fs(e,t,n){let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let s=0;sr5,kpt:()=>o5});var o5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(H());var Q0,$e=224,Z1,Gs=5,$2=[8,16,32,32,32];function Vs(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function X1(e){if(v.initial&&(Q0=null),!Q0&&e.body.detector&&e.body.detector.modelPath){Q0=await O(e.body.detector.modelPath);let t=Q0!=null&&Q0.executor?Object.values(Q0.modelSignature.inputs):void 0;$e=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&Q0&&u("cached model:",Q0.modelUrl);return Vs(),Q0}var V1=[5,5];function Zs(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,$e),t.x),r=D.add(D.div(r,$e),t.y),s=D.mul(D.div(s,$e),V1[0]),A=D.mul(D.div(A,$e),V1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function Xs(e,t,n,o){var c,x;let r=[],s={};s.boxes=Zs(e,Z1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],p=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:p};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function q1(e,t,n){let o={};o.res=Q0==null?void 0:Q0.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await Xs(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function ge(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function U1(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function et(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var F0,A5=256,s5=Number.MAX_SAFE_INTEGER,qs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},nt=[],Ne=[[0,0],[0,0],[0,0],[0,0]],Y1=0,K1=e=>1-1/(1+Math.exp(e)),Q1=e=>X1(e);async function _1(e){if(v.initial&&(F0=null),F0)e.debug&&u("cached model:",F0.modelUrl);else{F0=await O(e.body.modelPath);let t=F0!=null&&F0.executor?Object.values(F0.modelSignature.inputs):void 0;A5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return F0}function J1(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=B0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Ne=[[0,0],a,l,[0,0]],o.pad=B0.pad(o.cropped||e,Ne),o.resize=B0.image.resizeBilinear(o.pad,[t,t]),r=B0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=B0.image.resizeBilinear(o.cropped||e,[t,t]),r=B0.div(o.resize,C.tf255)):r=B0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>B0.dispose(o[a])),r}function Us(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Ne[2][0]+Ne[2][1])/t[0]-Ne[2][0]),Math.trunc(o.position[1]*(t[1]+Ne[1][0]+Ne[1][1])/t[1]-Ne[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function Ys(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function Ks(e,t,n){if(!(F0!=null&&F0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=F0==null?void 0:F0.execute(e,qs.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(p=>B0.dispose(o[p]));let a=[],l=5;for(let p=0;pp.position),i=ge(x,[n[0],n[1]]),y={};for(let[p,f]of Object.entries(r5)){let b=[];for(let M=0;Mh.part===f[M]),m=c.find(h=>h.part===f[M+1]);T&&m&&b.push([T.position,m.position])}y[p]=b}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function a5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>g()-Y1,r=s5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&nt!==null)s5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=J1(e,224);l=await q1(c,t,n),B0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cL0.dispose(o[c])),r}async function c5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>g()-e3,o=l5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&i5.length>0?(l5++,i5):(l5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=L0.image.resizeBilinear(e,[e2,e2]),a=t.object.enabled?H0==null?void 0:H0.execute(A,["tower_0/detections"]):null;e3=g(),L0.dispose(A);let l=await Js(a,s,t);i5=l,r(l)}))}var J=V(H());var ot={};we(ot,{connected:()=>x5,kpt:()=>d5});var d5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],x5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var a0,o3=0,C0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},y5=Number.MAX_SAFE_INTEGER;async function r3(e){return v.initial&&(a0=null),a0?e.debug&&u("cached model:",a0.modelUrl):a0=await O(e.body.modelPath),a0}async function Qs(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function f5(e,t){if(!(a0!=null&&a0.executor)||!(a0!=null&&a0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>g()-o3,o=y5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(C0.keypoints).length>0?(y5++,[C0]):(y5=0,new Promise(async r=>{let s=J.tidy(()=>{var p,f;let i=J.image.resizeBilinear(e,[((p=a0==null?void 0:a0.inputs[0].shape)==null?void 0:p[2])||0,((f=a0==null?void 0:a0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=a0==null?void 0:a0.execute(s)),o3=g(),J.dispose(s),A){C0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&C0.keypoints.push({score:Math.round(100*b)/100,part:d5[d],positionRaw:[p/a0.inputs[0].shape[2],f/a0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/a0.inputs[0].shape[2]),Math.round(e.shape[1]*f/a0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}C0.score=C0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=C0.keypoints.map(i=>i.position[0]),l=C0.keypoints.map(i=>i.position[1]);C0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=C0.keypoints.map(i=>i.positionRaw[0]),x=C0.keypoints.map(i=>i.positionRaw[1]);C0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(x5)){let d=[];for(let p=0;pM.part===y[p]),b=C0.keypoints.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&d.push([f.position,b.position])}C0.annotations[i]=d}r([C0])}))}var i0=V(H());var Le=V(H());var L=V(H());var Te=V(H());var x2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],rt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],st=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],At=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],i3=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],o=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:o,landmarks:e.landmarks,confidence:e.confidence}},m5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Te.image.cropAndResize(t,[s],[0],n),a=Te.div(A,C.tf255);return Te.dispose(A),a},at=(e,t)=>{let n=rt(e),o=x2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},it=e=>{let t=rt(e),n=x2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence}},l3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},p5=[[1,0,0],[0,1,0],[0,0,1]],_s=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),$s=(e,t)=>_s(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var A3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],t2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=A3(t[0],t[1]),A=a3(s,r),a=A3(-t[0],-t[1]);return a3(A,a)},tA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-t2(t[0],n),-t2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},nA=(e,t)=>[t2(e,t[0]),t2(e,t[1])];function d3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?c3(n,[0,0]):p5,c=a?A.map(d=>[...nA(d,l),d[2]]):A,x=a?tA(o):p5,i=rt(t),y=[t2(i,x[0]),t2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function y3(e,t,n,o){let r=t.landmarks.length>=_t.count?_t.symmetryLine:Ke.symmetryLine,s=0,A=p5,a;if(e&&v.kernels.includes("rotatewithoffset"))if(s=$s(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=rt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Te.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=c3(-s,c),a=m5(t,i,[o,o]),Te.dispose(i)}else a=m5(t,n,[o,o]);else a=m5(t,n,[o,o]);return[s,A,a]}var oA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},f3=(e,t)=>{let n=oA(e),o=x2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var m3=6,rA=1.4,ae,h5=null,Ie=0,y2=null,f2=()=>Ie;async function p3(e){var t;return v.initial&&(ae=null),ae?e.debug&&u("cached model:",ae.modelUrl):ae=await O((t=e.face.detector)==null?void 0:t.modelPath),Ie=ae.executor&&ae.inputs[0].shape?ae.inputs[0].shape[2]:256,y2=L.scalar(Ie,"int32"),h5=L.tensor2d(d3(Ie)),ae}function sA(e){if(!h5||!y2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,h5),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,y2),t.centersNormalized=L.div(t.centers,y2),t.halfBoxSize=L.div(t.boxSizesNormalized,C.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,y2),t.endNormalized=L.mul(t.ends,y2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function u3(e,t){var a,l,c,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=L.image.resizeBilinear(e,[Ie,Ie]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf05);let o=ae==null?void 0:ae.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let i=o.sort((y,d)=>y.size-d.size);n.concat384=L.concat([i[0],i[2]],2),n.concat512=L.concat([i[1],i[3]],2),n.concat=L.concat([n.concat512,n.concat384],1),n.batch=L.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=L.squeeze(o[0]):n.batch=L.squeeze(o);L.dispose(o),n.boxes=sA(n.batch),n.logits=L.slice(n.batch,[0,0],[-1,1]),n.sigmoid=L.sigmoid(n.logits),n.scores=L.squeeze(n.sigmoid),n.nms=await L.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let d={};d.bbox=L.slice(n.boxes,[r[i],0],[1,-1]),d.slice=L.slice(n.batch,[r[i],m3-1],[1,-1]),d.squeeze=L.squeeze(d.slice),d.landmarks=L.reshape(d.squeeze,[m3,-1]);let p=await d.bbox.data(),f={startPoint:[p[0],p[1]],endPoint:[p[2],p[3]],landmarks:await d.landmarks.array(),confidence:y},b=i3(f,[(e.shape[2]||0)/Ie,(e.shape[1]||0)/Ie]),M=at(b,t.face.scale||rA),T=it(M);s.push(T),Object.keys(d).forEach(m=>L.dispose(d[m]))}}return Object.keys(n).forEach(i=>L.dispose(n[i])),s}var ie=V(H());var G0,Oe=0,AA=2.3,b5=ne.leftEyeLower0,g5=ne.rightEyeLower0,m2={leftBounds:[b5[0],b5[b5.length-1]],rightBounds:[g5[0],g5[g5.length-1]]},p2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function v3(e){var t,n;return v.initial&&(G0=null),G0?e.debug&&u("cached model:",G0.modelUrl):G0=await O((t=e.face.iris)==null?void 0:t.modelPath),Oe=(G0==null?void 0:G0.executor)&&((n=G0.inputs)==null?void 0:n[0].shape)?G0.inputs[0].shape[2]:0,Oe===-1&&(Oe=64),G0}function lt(e,t,n,o){for(let r=0;r<$t.length;r++){let{key:s,indices:A}=$t[r],a=ne[`${n}${s}`];if(!o||o.includes(s))for(let l=0;l{let t=e[m2.leftBounds[0]][2],n=e[m2.rightBounds[0]][2];return t-n},b3=(e,t,n,o,r,s=!1)=>{let A=it(at(l3([e[n],e[o]]),AA)),a=x2(A),l=ie.image.cropAndResize(t,[[A.startPoint[1]/r,A.startPoint[0]/r,A.endPoint[1]/r,A.endPoint[0]/r]],[0],[Oe,Oe]);if(s&&v.kernels.includes("flipleftright")){let c=ie.image.flipLeftRight(l);ie.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},g3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ne[`${n}EyeUpper0`][p2.upperCenter]][2],r=e[ne[`${n}EyeLower0`][p2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function R3(e,t,n){if(!(G0!=null&&G0.executor))return e;let{box:o,boxSize:r,crop:s}=b3(e,t,m2.leftBounds[0],m2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=b3(e,t,m2.rightBounds[0],m2.rightBounds[1],n,!0),c=ie.concat([s,l]);ie.dispose(s),ie.dispose(l);let x=G0.execute(c);ie.dispose(c);let i=await x.data();ie.dispose(x);let y=i.slice(0,p2.numCoordinates*3),{rawCoords:d,iris:p}=g3(y,o,r,!0),f=i.slice(p2.numCoordinates*3),{rawCoords:b,iris:M}=g3(f,A,a,!1),T=aA(e);Math.abs(T)<30?(lt(e,d,"left",null),lt(e,b,"right",null)):T<1?lt(e,d,"left",["EyeUpper0","EyeLower0"]):lt(e,b,"right",["EyeUpper0","EyeLower0"]);let m=T3(e,p,"left"),h=T3(e,M,"right");return e.concat(m).concat(h)}async function P3(e,t){var s,A,a,l,c,x,i,y,d,p;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((p=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:p.data())};for(let f of Object.values(n))if(!f)return e;let o=Qe.reduce((f,b)=>f+=e[b][2],0)/Qe.length;for(let f=0;ff+=e[b][2],0)/_e.length;for(let f=0;fg()-pe.timestamp,o=pe.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||pe.boxes.length===0?(pe.boxes=await u3(e,t),pe.timestamp=g(),pe.skipped=0):pe.skipped++;let r=[],s=[],A=0,a=j2;for(let T=0;TG.shape[G.shape.length-1]===1).data();if(P.faceScore=Math.round(100*t0[0])/100,P.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(m.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=st(m,e),P.boxRaw=At(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(G=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*G[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*G[1]/f2()]),P.meshRaw=P.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/a]);for(let G of Object.keys(Ke))P.annotations[G]=[P.mesh[Ke[G]]]}}else{let G=I.find(Z=>Z.shape[Z.shape.length-1]===1404),$=Le.reshape(G,[-1,3]),s0=await $.array();Le.dispose($),(f=t.face.attention)!=null&&f.enabled?s0=await P3(s0,I):(b=t.face.iris)!=null&&b.enabled&&(s0=await R3(s0,P.tensor,j2)),P.mesh=x3(s0,m,h,S,j2),P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||0),Z[1]/(e.shape[1]||0),(Z[2]||0)/a]);for(let Z of Object.keys(ne))P.annotations[Z]=ne[Z].map(b0=>P.mesh[b0]);P.score=P.faceScore;let R={...f3(P.mesh,m),confidence:m.confidence,landmarks:m.landmarks};P.box=st(R,e),P.boxRaw=At(R,e),s.push(R)}Le.dispose(I)}else{P.box=st(m,e),P.boxRaw=At(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(I=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*I[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*I[1]/f2()]),P.meshRaw=P.mesh.map(I=>[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(Ke))P.annotations[I]=[P.mesh[Ke[I]]]}P.score>(((M=t.face.detector)==null?void 0:M.minConfidence)||1)?r.push(P):Le.dispose(P.tensor)}return pe.boxes=s,r}async function w3(e){var t,n,o,r,s,A;return v.initial&&(o0=null),((t=e.face.attention)==null?void 0:t.enabled)&&(o0==null?void 0:o0.signature)&&Object.keys(((n=o0==null?void 0:o0.signature)==null?void 0:n.outputs)||{}).length<6&&(o0=null),o0?e.debug&&u("cached model:",o0.modelUrl):(o=e.face.attention)!=null&&o.enabled?o0=await O(e.face.attention.modelPath):o0=await O((r=e.face.mesh)==null?void 0:r.modelPath),j2=o0.executor&&((s=o0==null?void 0:o0.inputs)==null?void 0:s[0].shape)?(A=o0==null?void 0:o0.inputs)==null?void 0:A[0].shape[2]:256,o0}var E3=Je,z3=z2;var le=V(H());var lA=["angry","disgust","fear","happy","sad","surprise","neutral"],_0,ct=[],S3=0,j3=0,v5=Number.MAX_SAFE_INTEGER;async function N3(e){var t;return v.initial&&(_0=null),_0?e.debug&&u("cached model:",_0.modelUrl):_0=await O((t=e.face.emotion)==null?void 0:t.modelPath),_0}async function R5(e,t,n,o){var A,a;if(!_0)return[];let r=v5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>g()-j3;return t.skipAllowed&&s&&r&&S3===o&&ct[n]&&ct[n].length>0?(v5++,ct[n]):(v5=0,new Promise(async l=>{var x;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let i={},y=_0!=null&&_0.inputs[0].shape?_0.inputs[0].shape[2]:0;i.resize=le.image.resizeBilinear(e,[y,y],!1),i.channels=le.mul(i.resize,C.rgb),i.grayscale=le.sum(i.channels,3,!0),i.grayscaleSub=le.sub(i.grayscale,C.tf05),i.grayscaleMul=le.mul(i.grayscaleSub,C.tf2),i.emotion=_0==null?void 0:_0.execute(i.grayscaleMul),j3=g();let d=await i.emotion.data();for(let p=0;p(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*d[p])/100),emotion:lA[p]});c.sort((p,f)=>f.score-p.score),Object.keys(i).forEach(p=>le.dispose(i[p]))}ct[n]=c,S3=o,l(c)}))}var ce=V(H());var z0,Ce=[],O3=0,L3=0,M5=Number.MAX_SAFE_INTEGER;async function C3(e){var t;return v.initial&&(z0=null),z0?e.debug&&u("cached model:",z0.modelUrl):z0=await O((t=e.face.description)==null?void 0:t.modelPath),z0}function cA(e){let t=e.image||e.tensor||e;if(!(z0!=null&&z0.inputs[0].shape))return t;let n=ce.image.resizeBilinear(t,[z0.inputs[0].shape[2],z0.inputs[0].shape[1]],!1),o=ce.mul(n,C.tf255);return ce.dispose(n),o}async function P5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(z0!=null&&z0.executor))return r;let s=M5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>g()-O3;return t.skipAllowed&&s&&A&&L3===o&&((c=Ce==null?void 0:Ce[n])==null?void 0:c.age)>0&&((x=Ce==null?void 0:Ce[n])==null?void 0:x.genderScore)>0?(M5++,Ce[n]):(M5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=cA(e),p=z0==null?void 0:z0.execute(d);O3=g(),ce.dispose(d);let b=await p.find(q=>q.shape[1]===1).data(),M=Math.trunc(200*Math.abs(b[0]-.5))/100;M>(t.face.description.minConfidence||0)&&(r.gender=b[0]<=.5?"female":"male",r.genderScore=Math.min(.99,M));let T=ce.argMax(p.find(q=>q.shape[1]===100),1),m=(await T.data())[0];ce.dispose(T);let S=await p.find(q=>q.shape[1]===100).data();r.age=Math.round(S[m-1]>S[m+1]?10*m-100*S[m-1]:10*m+100*S[m+1])/10,(Number.isNaN(b[0])||Number.isNaN(S[0]))&&u("faceres error:",{model:z0,result:p});let P=p.find(q=>q.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),p.forEach(q=>ce.dispose(q))}Ce[n]=r,L3=o,i(r)}))}var u2=.1,k5=.5;function dA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function D3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ne.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});u2&&u2>0&&(r=r.map(A=>({x:A.x>.5?A.x+u2:A.x-u2,y:A.y>.5?A.y+u2:A.y-u2})));for(let A=0;Ag()-B3,s=w5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&F3===o&&dt[n]?(w5++,dt[n]):(w5=0,new Promise(async l=>{let c=xt.image.resizeBilinear(e,[M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[1]:0],!1),x=M0==null?void 0:M0.execute(c),i=(await x.data())[0];dt[n]=Math.round(100*i)/100,F3=o,B3=g(),xt.dispose([c,x]),l(dt[n])}))}var ft=V(H());var P0,yt=[],z5=Number.MAX_SAFE_INTEGER,V3=0,Z3=0;async function X3(e){var t;return v.initial&&(P0=null),P0?e.debug&&u("cached model:",P0.modelUrl):P0=await O((t=e.face.liveness)==null?void 0:t.modelPath),P0}async function S5(e,t,n,o){var A,a;if(!(P0!=null&&P0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>g()-Z3,s=z5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&V3===o&&yt[n]?(z5++,yt[n]):(z5=0,new Promise(async l=>{let c=ft.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(c),i=(await x.data())[0];yt[n]=Math.round(100*i)/100,V3=o,Z3=g(),ft.dispose([c,x]),l(yt[n])}))}var mt=V(H());var oe,j5=[],yA=["white","black","asian","indian","other"],fA=[15,23,28,35.5,45.5,55.5,65],U3=0,Y3=0,N5=Number.MAX_SAFE_INTEGER;async function K3(e){var t;return v.initial&&(oe=null),oe?e.debug&&u("cached model:",oe.modelUrl):oe=await O((t=e.face.gear)==null?void 0:t.modelPath),oe}async function I5(e,t,n,o){var A,a;if(!oe)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=N5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>g()-Y3;return t.skipAllowed&&s&&r&&U3===o&&j5[n]?(N5++,j5[n]):(N5=0,new Promise(async l=>{var M,T;if(!(oe!=null&&oe.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];c.resize=mt.image.cropAndResize(e,x,[0],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([c.age,c.gender,c.race]=oe.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let m=0;m(((T=t.face.gear)==null?void 0:T.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[m])/100,race:yA[m]});i.race.sort((m,h)=>h.score-m.score);let f=Array.from(await c.age.data()).map((m,h)=>[fA[h],m]).sort((m,h)=>h[1]-m[1]),b=f[0][0];for(let m=1;mmt.dispose(c[m])),j5[n]=i,U3=o,Y3=g(),l(i)}))}var h2=V(H());var V0,pt=[],Q3=0,_3=0,O5=Number.MAX_SAFE_INTEGER;async function $3(e){return v.initial&&(V0=null),V0?e.debug&&u("cached model:",V0.modelUrl):V0=await O(e.face.ssrnet.modelPathAge),V0}async function L5(e,t,n,o){var A,a,l,c;if(!V0)return{age:0};let r=O5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-_3;return t.skipAllowed&&r&&s&&Q3===o&&((l=pt[n])==null?void 0:l.age)&&((c=pt[n])==null?void 0:c.age)>0?(O5++,pt[n]):(O5=0,new Promise(async x=>{var d;if(!(V0!=null&&V0.inputs)||!V0.inputs[0]||!V0.inputs[0].shape)return;let i={};i.resize=h2.image.resizeBilinear(e,[V0.inputs[0].shape[2],V0.inputs[0].shape[1]],!1),i.enhance=h2.mul(i.resize,C.tf255);let y={age:0};if((d=t.face.ssrnet)!=null&&d.enabled&&(i.age=V0.execute(i.enhance)),i.age){let p=await i.age.data();y.age=Math.trunc(10*p[0])/10}Object.keys(i).forEach(p=>h2.dispose(i[p])),pt[n]=y,Q3=o,_3=g(),x(y)}))}var S0=V(H());var re,ut=[],tn=0,nn=0,C5=Number.MAX_SAFE_INTEGER,W5=[.2989,.587,.114];async function on(e){var t;return v.initial&&(re=null),re?e.debug&&u("cached model:",re.modelUrl):re=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),re}async function D5(e,t,n,o){var A,a,l,c;if(!re)return{gender:"unknown",genderScore:0};let r=C5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-nn;return t.skipAllowed&&r&&s&&tn===o&&((l=ut[n])==null?void 0:l.gender)&&((c=ut[n])==null?void 0:c.genderScore)>0?(C5++,ut[n]):(C5=0,new Promise(async x=>{var p;if(!(re!=null&&re.inputs[0].shape))return;let i={};i.resize=S0.image.resizeBilinear(e,[re.inputs[0].shape[2],re.inputs[0].shape[1]],!1),i.enhance=S0.tidy(()=>{let[f,b,M]=S0.split(i.resize,3,3),T=S0.mul(f,W5[0]),m=S0.mul(b,W5[1]),h=S0.mul(M,W5[2]),S=S0.addN([T,m,h]);return S0.mul(S0.sub(S,C.tf05),2)});let y={gender:"unknown",genderScore:0};(p=t.face.ssrnet)!=null&&p.enabled&&(i.gender=re.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(f=>S0.dispose(i[f])),ut[n]=y,tn=o,nn=g(),x(y)}))}var ht=V(H());var Z0,F5=[],sn=0,An=0,an=Number.MAX_SAFE_INTEGER;async function ln(e){var t;return v.initial&&(Z0=null),Z0?e.debug&&u("cached model:",Z0.modelUrl):Z0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Z0}async function B5(e,t,n,o){var A,a;if(!(Z0!=null&&Z0.executor))return[];let r=an<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>g()-An;return t.skipAllowed&&s&&r&&sn===o&&F5[n]?(an++,F5[n]):new Promise(async l=>{var x;let c=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(Z0==null?void 0:Z0.inputs[0].shape)){let i={};i.crop=ht.image.resizeBilinear(e,[Z0.inputs[0].shape[2],Z0.inputs[0].shape[1]],!1),i.data=Z0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>ht.dispose(i[d]))}F5[n]=c,sn=o,An=g(),l(c)})}var bt=V(H());var X0,H5=[],dn=0,xn=0,yn=Number.MAX_SAFE_INTEGER;async function fn(e){return v.initial&&(X0=null),X0?e.debug&&u("cached model:",X0.modelUrl):X0=await O(e.face.insightface.modelPath),X0}async function G5(e,t,n,o){var A,a;if(!(X0!=null&&X0.executor))return[];let r=yn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>g()-xn;return t.skipAllowed&&s&&r&&dn===o&&H5[n]?(yn++,H5[n]):new Promise(async l=>{var x;let c=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(X0==null?void 0:X0.inputs[0].shape)){let i={};i.crop=bt.image.resizeBilinear(e,[X0.inputs[0].shape[2],X0.inputs[0].shape[1]],!1),i.data=X0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>bt.dispose(i[d]))}H5[n]=c,dn=o,xn=g(),l(c)})}var mA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},pn=(e,t)=>{let n=f=>{let b=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=b,f[1]/=b,f[2]/=b,f},o=(f,b)=>{let M=f[0]-b[0],T=f[1]-b[1],m=f[2]-b[2];return[M,T,m]},r=(f,b)=>{let M=f[1]*b[2]-f[2]*b[1],T=f[2]*b[0]-f[0]*b[2],m=f[0]*b[1]-f[1]*b[0];return[M,T,m]},s=f=>{let[b,M,T,m,h,S,P,I,q]=f,t0,G,$;return m<1?m>-1?($=Math.asin(m),G=Math.atan2(-P,b),t0=Math.atan2(-S,h)):($=-Math.PI/2,G=-Math.atan2(I,q),t0=0):($=Math.PI/2,G=Math.atan2(I,q),t0=0),Number.isNaN(t0)&&(t0=0),Number.isNaN(G)&&(G=0),Number.isNaN($)&&($=0),{pitch:2*-t0,yaw:2*-G,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),p=A.length===478?mA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:p}};function un(e,t){let n=e==null?void 0:e.annotations;if(!n)return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var V5=async(e,t)=>{var p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;let n=g(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await k3(t,e.config);if(e.performance.face=v.perfadd?(e.performance.face||0)+Math.trunc(g()-n):Math.trunc(g()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let z=0;z200?pn(d[z],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?R5(d[z].tensor||i0.tensor([]),e.config,z,d.length):[]:(e.state="run:emotion",n=g(),A=(b=e.config.face.emotion)!=null&&b.enabled?await R5(d[z].tensor||i0.tensor([]),e.config,z,d.length):[],e.performance.emotion=v.perfadd?(e.performance.emotion||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(M=e.config.face.antispoof)!=null&&M.enabled?E5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0:(e.state="run:antispoof",n=g(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await E5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0,e.performance.antispoof=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(m=e.config.face.liveness)!=null&&m.enabled?S5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0:(e.state="run:liveness",n=g(),x=(h=e.config.face.liveness)!=null&&h.enabled?await S5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0,e.performance.liveness=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(S=e.config.face.gear)!=null&&S.enabled?I5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:gear",n=g(),r=(P=e.config.face.gear)!=null&&P.enabled?await I5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.gear=Math.trunc(g()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?L5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,s=(q=e.config.face.ssrnet)!=null&&q.enabled?D5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null):(e.state="run:ssrnet",n=g(),o=(t0=e.config.face.ssrnet)!=null&&t0.enabled?await L5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,s=(G=e.config.face.ssrnet)!=null&&G.enabled?await D5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.ssrnet=Math.trunc(g()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?B5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:mobilefacenet",n=g(),a=(s0=e.config.face.mobilefacenet)!=null&&s0.enabled?await B5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(R=e.config.face.insightface)!=null&&R.enabled?G5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:mobilefacenet",n=g(),l=(Z=e.config.face.insightface)!=null&&Z.enabled?await G5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=P5(d[z].tensor||i0.tensor([]),e.config,z,d.length):(e.state="run:description",n=g(),i=await P5(d[z].tensor||i0.tensor([]),e.config,z,d.length),e.performance.description=v.perfadd?(e.performance.description||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),((b0=e.config.face.ssrnet)==null?void 0:b0.enabled)&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),((U=e.config.face.gear)==null?void 0:U.enabled)&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),((g0=e.config.face.mobilefacenet)==null?void 0:g0.enabled)&&a&&(i.descriptor=a),((f0=e.config.face.insightface)==null?void 0:f0.enabled)&&l&&(i.descriptor=l);let Pe=(B=e.config.face.iris)!=null&&B.enabled?un(d[z],t.shape[2]):0,ke=(X=e.config.face.detector)!=null&&X.return?i0.squeeze(d[z].tensor):null;i0.dispose(d[z].tensor),d[z].tensor&&delete d[z].tensor;let T0={...d[z],id:z};i.age&&(T0.age=i.age),i.gender&&(T0.gender=i.gender),i.genderScore&&(T0.genderScore=i.genderScore),i.descriptor&&(T0.embedding=i.descriptor),i.race&&(T0.race=i.race),A&&(T0.emotion=A),c&&(T0.real=c),x&&(T0.live=x),Pe>0&&(T0.distance=Pe),$0&&(T0.rotation=$0),ke&&(T0.tensor=ke),y.push(T0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var W0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>W0.nameMapping[e],getPoints:e=>W0.pointsMapping[e]},De={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>De.nameMapping[e]},l0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>l0.nameMapping[e]},We=class{constructor(t){k(this,"name");k(this,"curls");k(this,"directions");k(this,"weights");k(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:de,index:ve,middle:Re,ring:n2,pinky:o2}=W0,{none:xe,half:uA,full:ye}=De,{verticalUp:b2,verticalDown:G7,horizontalLeft:Z5,horizontalRight:hA,diagonalUpRight:bA,diagonalUpLeft:g2,diagonalDownRight:V7,diagonalDownLeft:Z7}=l0,Fe=new We("thumbs up");Fe.curl(de,xe,1);Fe.direction(de,b2,1);Fe.direction(de,g2,.25);Fe.direction(de,bA,.25);for(let e of[W0.index,W0.middle,W0.ring,W0.pinky])Fe.curl(e,ye,1),Fe.direction(e,Z5,1),Fe.direction(e,hA,1);var p0=new We("victory");p0.curl(de,uA,.5);p0.curl(de,xe,.5);p0.direction(de,b2,1);p0.direction(de,g2,1);p0.curl(ve,xe,1);p0.direction(ve,b2,.75);p0.direction(ve,g2,1);p0.curl(Re,xe,1);p0.direction(Re,b2,1);p0.direction(Re,g2,.75);p0.curl(n2,ye,1);p0.direction(n2,b2,.2);p0.direction(n2,g2,1);p0.direction(n2,Z5,.2);p0.curl(o2,ye,1);p0.direction(o2,b2,.2);p0.direction(o2,g2,1);p0.direction(o2,Z5,.2);p0.weight(ve,2);p0.weight(Re,2);var Be=new We("point");Be.curl(de,ye,1);Be.curl(ve,xe,.5);Be.curl(Re,ye,.5);Be.curl(n2,ye,.5);Be.curl(o2,ye,.5);Be.weight(ve,2);Be.weight(Re,2);var He=new We("middle finger");He.curl(de,xe,1);He.curl(ve,ye,.5);He.curl(Re,ye,.5);He.curl(n2,ye,.5);He.curl(o2,ye,.5);He.weight(ve,2);He.weight(Re,2);var T2=new We("open palm");T2.curl(de,xe,.75);T2.curl(ve,xe,.75);T2.curl(Re,xe,.75);T2.curl(n2,xe,.75);T2.curl(o2,xe,.75);var hn=[Fe,p0,Be,He,T2];var gA=.7,r2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function bn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function Tn(e,t){if(!e||!t)return[0,0];let n=bn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=bn(e[1],e[2],t[1],t[2]);return[n,o]}function gn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function TA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),p=Math.sqrt(s*s+l*l+i*i),f=(p*p+y*y-d*d)/(2*p*y);f>1?f=1:f<-1&&(f=-1);let b=Math.acos(f);b=57.2958*b%180;let M;return b>r2.NO_CURL_START_LIMIT?M=De.none:b>r2.HALF_CURL_START_LIMIT?M=De.half:M=De.full,M}function vn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=l0.horizontalLeft:r=l0.horizontalRight:o===Math.abs(t)?t>0?r=l0.horizontalLeft:r=l0.horizontalRight:n>0?r=l0.horizontalLeft:r=l0.horizontalRight,r}function Rn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=l0.verticalDown:r=l0.verticalUp:o===Math.abs(t)?t<0?r=l0.verticalDown:r=l0.verticalUp:n<0?r=l0.verticalDown:r=l0.verticalUp,r}function vA(e,t,n,o,r,s,A,a){let l,c=Rn(e,t,n,o),x=vn(r,s,A,a);return c===l0.verticalUp?x===l0.horizontalLeft?l=l0.diagonalUpLeft:l=l0.diagonalUpRight:x===l0.horizontalLeft?l=l0.diagonalDownLeft:l=l0.diagonalDownRight,l}function RA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,p=0,f=i/(x+1e-5);f>1.5?y+=r2.DISTANCE_VOTE_POWER:f>.66?d+=r2.DISTANCE_VOTE_POWER:p+=r2.DISTANCE_VOTE_POWER;let b=Math.sqrt(r*r+a*a),M=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),m=Math.max(b,M,T),h=e[0],S=e[1],P=n[0],I=n[1];m===b?(P=n[0],I=n[1]):m===T&&(h=t[0],S=t[1]);let G=Tn([h,S],[P,I]),$=gn(G,r2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],p+=$[2];for(let R of o){let Z=gn(R,r2.SINGLE_ANGLE_VOTE_POWER);y+=Z[0],d+=Z[1],p+=Z[2]}let s0;return y===Math.max(y,d,p)?s0=Rn(l,a,c,i):p===Math.max(d,p)?s0=vn(s,r,A,x):s0=vA(l,a,c,i,s,r,A,x),s0}function Mn(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of W0.all){let A=W0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=Tn(x,i),d=y[0],p=y[1];a.push(d),l.push(p)}t.push(a),n.push(l)}for(let s of W0.all){let A=s===W0.thumb?1:0,a=W0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=TA(l,c,x),y=RA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function gt(e){if(!e||e.length===0)return null;let t=Mn(e),n={};for(let o of W0.all)n[W0.getName(o)]={curl:De.getName(t.curls[o]),direction:l0.getName(t.directions[o])};return n}function Pn(e){let t=[];if(!e||e.length===0)return t;let n=Mn(e);for(let o of hn){let r=o.matchAgainst(n.curls,n.directions);r>=gA&&t.push({name:o.name,confidence:r})}return t}var kn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let a=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));a>10&&t.push({face:n,gesture:`mouth ${Math.trunc(a)}% open`});let l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},En=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||b>.06)&&(d=!1),f>b?f>.05&&t.push({iris:A,gesture:"looking right"}):b>.05&&t.push({iris:A,gesture:"looking left"});let M=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||M<.01||T>.022||M>.022)&&(d=!1),(T<.01||M<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||M>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},zn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function vt(e,t=1.5){let n=N2(e),o=Tt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function Rt(e){let t=N2(e),n=Tt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function PA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Ln(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return PA(n)}var Sn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ge(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),p={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=On(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(b=>W.dispose(c[b]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var q0=V(H());var zA=5,Fn=1.65,Bn=[0,5,9,13,17,1,2],SA=0,jA=2,Hn=0,Pt=class{constructor(t,n){k(this,"handDetector");k(this,"handPoseModel");k(this,"inputSize");k(this,"storedBoxes");k(this,"skipped");k(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>U5([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return vt(Rt(r),zA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=vt(Rt(n),Fn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=q5(o,[0,0]),c=a.map(d=>[...U5(d,l),d[2]]),x=Cn(r),i=[...N2(n),1],y=[Ge(i,x[0]),Ge(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>g()-Hn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A&&(r=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let S=q0.reshape(m,[-1,3]),P=await S.array();q0.dispose(m),q0.dispose(S);let I=this.transformRawCoords(P,f,x,p),q=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...q,confidence:h};let t0={landmarks:I,confidence:h,boxConfidence:c.confidence,fingerConfidence:h,box:{topLeft:q.startPoint,bottomRight:q.endPoint}};a.push(t0)}else this.storedBoxes[l]=null;q0.dispose(m)}else{let x=vt(Rt(c),Fn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var Gn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},s2,A2,Vn;async function Y5(e,t){let n=await Vn.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=gt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function Zn(e){var n,o;v.initial&&(s2=null,A2=null),!s2||!A2?[s2,A2]=await Promise.all([e.hand.enabled?O((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?O((o=e.hand.skeleton)==null?void 0:o.modelPath):null]):(e.debug&&u("cached model:",s2.modelUrl),e.debug&&u("cached model:",A2.modelUrl));let t=s2?new Mt(s2):void 0;return t&&A2&&(Vn=new Pt(t,A2)),[s2,A2]}var Q=V(H());var y0=[null,null],IA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ve=[[0,0],[0,0]],OA=["hand","fist","pinch","point","face","tip","pinchtip"],qn=4,Un=1.6,LA=512,CA=1.4,kt=Number.MAX_SAFE_INTEGER,K5=0,Me=[0,0],x0={boxes:[],hands:[]},Yn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Kn(e){var t;if(v.initial&&(y0[0]=null),y0[0])e.debug&&u("cached model:",y0[0].modelUrl);else{X2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),y0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=y0[0].executor?Object.values(y0[0].modelSignature.inputs):void 0;Ve[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[0]}async function Jn(e){var t;if(v.initial&&(y0[1]=null),y0[1])e.debug&&u("cached model:",y0[1].modelUrl);else{y0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=y0[1].executor?Object.values(y0[1].modelSignature.inputs):void 0;Ve[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[1]}async function WA(e,t){let n=[];if(!e||!y0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,LA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await y0[0].executeAsync(o.cast,IA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[qn]),a.splice(qn,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),p=await d.data();Q.dispose(d);let f=[p[1],p[0],p[3]-p[1],p[2]-p[0]],b=et(f,CA),M=[Math.trunc(f[0]*Me[0]),Math.trunc(f[1]*Me[1]),Math.trunc(f[2]*Me[0]),Math.trunc(f[3]*Me[1])],T=x[y],m=OA[i[y]],h={id:l++,score:T,box:M,boxRaw:b,label:m};n.push(h)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function J5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&y0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[Ve[1][0],Ve[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=y0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Ve[1][1],i[1]/Ve[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[Me[0]*(i[0]+t.boxRaw[0]),Me[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=gt(o.keypoints);for(let i of Object.keys(Yn))o.annotations[i]=Yn[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function Q5(e,t){var r,s;if(!((r=y0[0])!=null&&r.executor)||!((s=y0[1])!=null&&s.executor)||!y0[0].inputs[0].shape||!y0[1].inputs[0].shape)return[];Me=[e.shape[2]||0,e.shape[1]||0],kt++;let n=(t.hand.skipTime||0)>g()-K5,o=kt<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?x0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>g()-K5,l=kt<3*(t.hand.skipFrames||0);t.skipAllowed&&x0.hands.length===t.hand.maxDetected?x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))):t.skipAllowed&&a&&l&&x0.hands.length>0?x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))):(x0.boxes=await WA(e,t),K5=g(),x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))),kt=0);let c=[...x0.boxes];if(x0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&x0.hands[x].fingerScore&&x0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=et(i.box,Un),d=et(i.boxRaw,Un);x0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var I2={};we(I2,{connected:()=>Et,horizontal:()=>_5,kpt:()=>wt,relative:()=>e1,vertical:()=>$5});var wt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],$5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],e1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Et={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var w=ue(),t1=0;function _n(e,t){var A,a,l,c,x,i,y,d,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;let n=g();if(!e)return ue();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(w.canvas=e.canvas),e.error&&(w.error=e.error),!w.body||e.body.length!==w.body.length)w.body=JSON.parse(JSON.stringify(e.body));else for(let R=0;R((r-1)*w.body[R].box[X]+B)/r),b0=e.body[R].boxRaw.map((B,X)=>((r-1)*w.body[R].boxRaw[X]+B)/r),U=e.body[R].keypoints.map((B,X)=>{var z,$0,Pe,ke,T0,M2,g1,T1,v1;return{score:B.score,part:B.part,position:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[w.body[R].keypoints[X]?((r-1)*(((z=w.body[R].keypoints[X].distance)==null?void 0:z[0])||0)+((($0=B.distance)==null?void 0:$0[0])||0))/r:(Pe=B.distance)==null?void 0:Pe[0],w.body[R].keypoints[X]?((r-1)*(((ke=w.body[R].keypoints[X].distance)==null?void 0:ke[1])||0)+(((T0=B.distance)==null?void 0:T0[1])||0))/r:(M2=B.distance)==null?void 0:M2[1],w.body[R].keypoints[X]?((r-1)*(((g1=w.body[R].keypoints[X].distance)==null?void 0:g1[2])||0)+(((T1=B.distance)==null?void 0:T1[2])||0))/r:(v1=B.distance)==null?void 0:v1[2]]}}),g0={},f0={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?f0=ot:(a=t.body.modelPath)!=null&&a.includes("blazepose")?f0=_2:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(f0=I2);for(let[B,X]of Object.entries(f0.connected)){let z=[];for(let $0=0;$0T0.part===X[$0]),ke=U.find(T0=>T0.part===X[$0+1]);Pe&&ke&&z.push([Pe.position,ke.position])}g0[B]=z}w.body[R]={...e.body[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.hand||e.hand.length!==w.hand.length)w.hand=JSON.parse(JSON.stringify(e.hand));else for(let R=0;R((r-1)*w.hand[R].box[B]+f0)/r),b0=e.hand[R].boxRaw.map((f0,B)=>((r-1)*w.hand[R].boxRaw[B]+f0)/r);w.hand[R].keypoints.length!==e.hand[R].keypoints.length&&(w.hand[R].keypoints=e.hand[R].keypoints);let U=e.hand[R].keypoints&&e.hand[R].keypoints.length>0?e.hand[R].keypoints.map((f0,B)=>f0.map((X,z)=>((r-1)*(w.hand[R].keypoints[B][z]||1)+(X||0))/r)):[],g0={};if(Object.keys(w.hand[R].annotations).length!==Object.keys(e.hand[R].annotations).length)w.hand[R].annotations=e.hand[R].annotations,g0=w.hand[R].annotations;else if(e.hand[R].annotations)for(let f0 of Object.keys(e.hand[R].annotations))g0[f0]=(i=(x=(c=e.hand[R])==null?void 0:c.annotations)==null?void 0:x[f0])!=null&&i[0]?e.hand[R].annotations[f0].map((B,X)=>B.map((z,$0)=>((r-1)*w.hand[R].annotations[f0][X][$0]+z)/r)):null;w.hand[R]={...e.hand[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.face||e.face.length!==w.face.length)w.face=JSON.parse(JSON.stringify(e.face));else for(let R=0;R((r-1)*w.face[R].box[g0]+U)/r),b0=e.face[R].boxRaw.map((U,g0)=>((r-1)*w.face[R].boxRaw[g0]+U)/r);if(e.face[R].rotation){let U={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};U.matrix=(y=e.face[R].rotation)==null?void 0:y.matrix,U.angle={roll:((r-1)*(((p=(d=w.face[R].rotation)==null?void 0:d.angle)==null?void 0:p.roll)||0)+(((b=(f=e.face[R].rotation)==null?void 0:f.angle)==null?void 0:b.roll)||0))/r,yaw:((r-1)*(((T=(M=w.face[R].rotation)==null?void 0:M.angle)==null?void 0:T.yaw)||0)+(((h=(m=e.face[R].rotation)==null?void 0:m.angle)==null?void 0:h.yaw)||0))/r,pitch:((r-1)*(((P=(S=w.face[R].rotation)==null?void 0:S.angle)==null?void 0:P.pitch)||0)+(((q=(I=e.face[R].rotation)==null?void 0:I.angle)==null?void 0:q.pitch)||0))/r},U.gaze={bearing:((r-1)*(((t0=w.face[R].rotation)==null?void 0:t0.gaze.bearing)||0)+(((G=e.face[R].rotation)==null?void 0:G.gaze.bearing)||0))/r,strength:((r-1)*((($=w.face[R].rotation)==null?void 0:$.gaze.strength)||0)+(((s0=e.face[R].rotation)==null?void 0:s0.gaze.strength)||0))/r},w.face[R]={...e.face[R],rotation:U,box:Z,boxRaw:b0}}else w.face[R]={...e.face[R],box:Z,boxRaw:b0}}if(!w.object||e.object.length!==w.object.length)w.object=JSON.parse(JSON.stringify(e.object));else for(let R=0;R((r-1)*w.object[R].box[g0]+U)/r),b0=e.object[R].boxRaw.map((U,g0)=>((r-1)*w.object[R].boxRaw[g0]+U)/r);w.object[R]={...e.object[R],box:Z,boxRaw:b0}}if(e.persons){let R=e.persons;if(!w.persons||R.length!==w.persons.length)w.persons=JSON.parse(JSON.stringify(R));else for(let Z=0;Z((r-1)*w.persons[Z].box[U]+b0)/r)}e.gesture&&(w.gesture=e.gesture),w.width=e.width,w.height=e.height;let s=g();return t1=v.perfadd?t1+Math.round(s-n):Math.round(s-n),e.performance&&(w.performance={...e.performance,interpolate:t1}),w}var r0=V(H());var j0;async function n1(e){return!j0||v.initial?j0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",j0.modelUrl),j0}async function $n(e,t){var r;if(j0||(j0=await n1(t)),!(j0!=null&&j0.executor)||!((r=j0==null?void 0:j0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=r0.image.resizeBilinear(e,[j0.inputs[0].shape?j0.inputs[0].shape[1]:0,j0.inputs[0].shape?j0.inputs[0].shape[2]:0],!1),n.norm=r0.div(n.resize,C.tf255),n.res=j0.execute(n.norm),n.squeeze=r0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r0.unstack(n.squeeze,2),n.fg=r0.softmax(n.fgRaw),n.mul=r0.mul(n.fg,C.tf255),n.expand=r0.expandDims(n.mul,2),n.output=r0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r0.squeeze(e),n.concat=r0.concat([n.input,n.output],-1),o=r0.cast(n.concat,"int32");break;case"alpha":o=r0.cast(n.output,"int32");break;default:o=r0.tensor(0)}return Object.keys(n).forEach(s=>r0.dispose(n[s])),o}var zt={};we(zt,{distance:()=>o1,find:()=>BA,similarity:()=>FA});function o1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function FA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=o1(e,t,n);return to(o,n.order||2,n.min||0,n.max||1)}function BA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AC2,validateModel:()=>Ct});var Ao=V(H());var Ze=V(H());var no=.005,U0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function r1(e){for(let t of _5){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function oo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ze.pad(e,U0.padding),n.resize=Ze.image.resizeBilinear(n.pad,[t,t]);let o=Ze.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ze.dispose(n[A])),o}function so(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+U0.padding[2][0]+U0.padding[2][1])/t[0]-U0.padding[2][0],o.position[1]*(t[1]+U0.padding[1][0]+U0.padding[1][1])/t[1]-U0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ge(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var u0,St=0,s1=Number.MAX_SAFE_INTEGER,a2={boxes:[],bodies:[],last:0};async function ao(e){var t;return v.initial&&(u0=null),u0?e.debug&&u("cached model:",u0.modelUrl):(X2(["size"],e),u0=await O(e.body.modelPath)),St=(u0==null?void 0:u0.executor)&&((t=u0==null?void 0:u0.inputs)==null?void 0:t[0].shape)?u0.inputs[0].shape[2]:0,St<64&&(St=256),u0}function GA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:wt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=ge(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Et)){let y=[];for(let d=0;db.part===i[d]),f=r.find(b=>b.part===i[d+1]);p&&f&&p.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([p.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return r1(c),A.push(c),A}function VA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let y=s[3*i+2];if(y>t.body.minConfidence){let d=[s[3*i+1],s[3*i+0]];a.push({part:wt[i],score:Math.round(100*y)/100,positionRaw:d,position:[Math.round((n.shape[2]||0)*d[0]),Math.round((n.shape[1]||0)*d[1])]})}}let l=ge(a.map(i=>i.position),[n.shape[2],n.shape[1]]),c={};for(let[i,y]of Object.entries(Et)){let d=[];for(let p=0;pM.part===y[p]),b=a.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&d.push([f.position,b.position])}c[i]=d}let x={id:r,score:A,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:c};r1(x),o.push(x)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function A1(e,t){var r;if(!(u0!=null&&u0.executor)||!((r=u0==null?void 0:u0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(a2.boxes.length=0),s1++;let n=(t.body.skipTime||0)>g()-a2.last,o=s1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?a2.bodies:new Promise(async s=>{let A={};s1=0,A.input=ro(e,St),A.res=u0==null?void 0:u0.execute(A.input),a2.last=g();let a=await A.res.array();a2.bodies=A.res.shape[2]===17?GA(a,t,e):VA(a,t,e);for(let l of a2.bodies)so(l,[e.shape[2]||1,e.shape[1]||1]),oo(l.keypoints);Object.keys(A).forEach(l=>Ao.dispose(A[l])),s(a2.bodies)})}var w0=V(H());var se,jt=[],lo=0,a1=Number.MAX_SAFE_INTEGER,It=0,Nt=2.5;async function co(e){if(!se||v.initial){se=await O(e.object.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;It=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&u("cached model:",se.modelUrl);return se}async function ZA(e,t,n){var c,x;let o=0,r=[],s=It;for(let i of[1,2,4]){let y=i*13,d=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)===d2.length)),p=await d.array(),f=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)(n.object.minConfidence||0)&&h!==61){let P=(.5+Math.trunc(m%y))/y,I=(.5+Math.trunc(m/y))/y,q=T[m].map(U=>U*(y/i/s)),[t0,G]=[P-Nt/i*q[0],I-Nt/i*q[1]],[$,s0]=[P+Nt/i*q[2]-t0,I+Nt/i*q[3]-G],R=[t0,G,$,s0];R=R.map(U=>Math.max(0,Math.min(U,1)));let Z=[R[0]*t[0],R[1]*t[1],R[2]*t[0],R[3]*t[1]],b0={id:o++,score:Math.round(100*S)/100,class:h+1,label:d2[h].label,box:Z.map(U=>Math.trunc(U)),boxRaw:R};r.push(b0)}}w0.dispose([d,f,b,M])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await w0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),w0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function i1(e,t){if(!(se!=null&&se.executor))return[];let n=(t.object.skipTime||0)>g()-lo,o=a1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&jt.length>0?(a1++,jt):(a1=0,!v.kernels.includes("mod")||!v.kernels.includes("sparsetodense")?jt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=w0.image.resizeBilinear(e,[It,It],!1),a=w0.div(A,C.tf255),l=w0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=se.execute(l)),lo=g();let x=await ZA(c,s,t);jt=x,w0.dispose([A,a,l,...c]),r(x)}))}var D0=V(H());var L2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],XA=L2.length,O2=L2.reduce((e,t,n)=>(e[t]=n,e),{}),qA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Li=qA.map(([e,t])=>[O2[e],O2[t]]),yo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function fo(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Ot=class{constructor(t,n){k(this,"priorityQueue");k(this,"numberOfElements");k(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function x1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Y0,YA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Lt=1,v2=16,KA=50**2;function uo(e,t,n,o,r,s,A=2){let a=M=>({y:s.get(M.y,M.x,e),x:s.get(M.y,M.x,s.shape[2]/2+e)}),l=(M,T,m)=>({y:d1(Math.round(M.y/v2),0,T-1),x:d1(Math.round(M.x/v2),0,m-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),p=x1(t.position,y);for(let M=0;M[O2[y],O2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=c1(e.part,v2,n);x[e.part.id]={score:e.score,part:L2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],p=a[y];x[d]&&!x[p]&&(x[p]=uo(y,x[d],p,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function _A(e,t){let[n,o,r]=t.shape,s=new Ot(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?po(n,t,s.y,s.x)<=KA:!1})}function $A(e,t){return t.reduce((o,{position:r,score:s},A)=>(ho(e,r,A)||(o+=s),o),0)/t.length}function e4(e,t,n,o,r,s){let A=[],a=_A(s,t);for(;A.lengthd.score>s);let i=$A(A,x),y=fo(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function y1(e,t){if(!(Y0!=null&&Y0.executor))return[];let n=D0.tidy(()=>{if(!Y0.inputs[0].shape)return[];let A=D0.image.resizeBilinear(e,[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]),a=D0.sub(D0.div(D0.cast(A,"float32"),127.5),1),c=Y0.execute(a,YA).map(x=>D0.squeeze(x,[0]));return c[1]=D0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)D0.dispose(A);let r=e4(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return Y0.inputs[0].shape?mo(r,[e.shape[1],e.shape[2]],[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]):[]}async function bo(e){return!Y0||v.initial?Y0=await O(e.body.modelPath):e.debug&&u("cached model:",Y0.modelUrl),Y0}var F=V(H());var he,t4=["fgr","pha","r1o","r2o","r3o","r4o"],h0={},m1=0;function vo(e){F.dispose([h0.r1i,h0.r2i,h0.r3i,h0.r4i,h0.downsample_ratio]),h0.r1i=F.tensor(0),h0.r2i=F.tensor(0),h0.r3i=F.tensor(0),h0.r4i=F.tensor(0),m1=e.segmentation.ratio||.5,h0.downsample_ratio=F.tensor(m1)}async function p1(e){return!he||v.initial?he=await O(e.segmentation.modelPath):e.debug&&u("cached model:",he.modelUrl),vo(e),he}var To=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function f1(e,t){let n=e?To(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?To(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function n4(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Ro(e,t){if(he||(he=await p1(t)),!(he!=null&&he.executor))return null;h0.src=F.div(e,255),m1!==t.segmentation.ratio&&vo(t);let[n,o,r,s,A,a]=await he.executeAsync(h0,t4),l;switch(t.segmentation.mode||"default"){case"default":l=f1(n,o);break;case"alpha":l=f1(null,o);break;case"foreground":l=f1(n,null);break;case"state":l=n4(r);break;default:l=F.tensor(0)}return F.dispose([h0.src,n,o,h0.r1i,h0.r2i,h0.r3i,h0.r4i]),[h0.r1i,h0.r2i,h0.r3i,h0.r4i]=[r,s,A,a],l}var k0=V(H());var N0;async function u1(e){return!N0||v.initial?N0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",N0.modelUrl),N0}async function Po(e,t){var r;if(N0||(N0=await u1(t)),!(N0!=null&&N0.executor)||!((r=N0==null?void 0:N0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=k0.image.resizeBilinear(e,[N0.inputs[0].shape?N0.inputs[0].shape[1]:0,N0.inputs[0].shape?N0.inputs[0].shape[2]:0],!1),n.norm=k0.div(n.resize,C.tf255),n.res=N0.execute(n.norm),n.squeeze=k0.squeeze(n.res,[0]),n.alpha=k0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=k0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=k0.squeeze(e),n.concat=k0.concat([n.input,n.mul],-1),o=k0.cast(n.concat,"int32");break;case"alpha":o=k0.cast(n.mul,"int32");break;default:o=k0.tensor(0)}return Object.keys(n).forEach(s=>k0.dispose(n[s])),o}function Ct(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&u("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&u("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var C2=class{constructor(t){k(this,"instance");k(this,"models");this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(E0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(E0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(E0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(){var n,o,r,s,A,a,l,c,x,i,y,d,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;v.initial&&this.reset();let t={};t.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?p3(this.instance.config):null,t.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)==null?void 0:n.enabled)&&!this.models.antispoof?H3(this.instance.config):null,t.liveness=this.instance.config.face.enabled&&((o=this.instance.config.face.liveness)==null?void 0:o.enabled)&&!this.models.liveness?X3(this.instance.config):null,t.faceres=this.instance.config.face.enabled&&((r=this.instance.config.face.description)==null?void 0:r.enabled)&&!this.models.faceres?C3(this.instance.config):null,t.emotion=this.instance.config.face.enabled&&((s=this.instance.config.face.emotion)==null?void 0:s.enabled)&&!this.models.emotion?N3(this.instance.config):null,t.iris=this.instance.config.face.enabled&&((A=this.instance.config.face.iris)==null?void 0:A.enabled)&&!((a=this.instance.config.face.attention)!=null&&a.enabled)&&!this.models.iris?v3(this.instance.config):null,t.facemesh=this.instance.config.face.enabled&&((l=this.instance.config.face.mesh)==null?void 0:l.enabled)&&!this.models.facemesh?w3(this.instance.config):null,t.gear=this.instance.config.face.enabled&&((c=this.instance.config.face.gear)==null?void 0:c.enabled)&&!this.models.gear?K3(this.instance.config):null,t.ssrnetage=this.instance.config.face.enabled&&((x=this.instance.config.face.ssrnet)==null?void 0:x.enabled)&&!this.models.ssrnetage?$3(this.instance.config):null,t.ssrnetgender=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)==null?void 0:i.enabled)&&!this.models.ssrnetgender?on(this.instance.config):null,t.mobilefacenet=this.instance.config.face.enabled&&((y=this.instance.config.face.mobilefacenet)==null?void 0:y.enabled)&&!this.models.mobilefacenet?ln(this.instance.config):null,t.insightface=this.instance.config.face.enabled&&((d=this.instance.config.face.insightface)==null?void 0:d.enabled)&&!this.models.insightface?fn(this.instance.config):null,t.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((p=this.instance.config.body.modelPath)==null?void 0:p.includes("blazepose"))?_1(this.instance.config):null,t.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?Q1(this.instance.config):null,t.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((f=this.instance.config.body.modelPath)==null?void 0:f.includes("efficientpose"))?r3(this.instance.config):null,t.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((b=this.instance.config.body.modelPath)==null?void 0:b.includes("movenet"))?ao(this.instance.config):null,t.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((M=this.instance.config.body.modelPath)==null?void 0:M.includes("posenet"))?bo(this.instance.config):null,t.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((m=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)==null?void 0:m.includes("handtrack"))?Kn(this.instance.config):null,t.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((S=(h=this.instance.config.hand.detector)==null?void 0:h.modelPath)==null?void 0:S.includes("handtrack"))?Jn(this.instance.config):null,(I=(P=this.instance.config.hand.detector)==null?void 0:P.modelPath)!=null&&I.includes("handdetect")&&([t.handpose,t.handskeleton]=this.models.handpose?[null,null]:await Zn(this.instance.config)),t.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((q=this.instance.config.object.modelPath)==null?void 0:q.includes("centernet"))?t3(this.instance.config):null,t.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((t0=this.instance.config.object.modelPath)==null?void 0:t0.includes("nanodet"))?co(this.instance.config):null,t.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((G=this.instance.config.segmentation.modelPath)==null?void 0:G.includes("selfie"))?u1(this.instance.config):null,t.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&(($=this.instance.config.segmentation.modelPath)==null?void 0:$.includes("meet"))?n1(this.instance.config):null,t.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((s0=this.instance.config.segmentation.modelPath)==null?void 0:s0.includes("rvm"))?p1(this.instance.config):null,await Promise.all([...Object.values(t)]);for(let R of Object.keys(t))this.models[R]=t[R]||this.models[R]||null}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(E0).find(r=>r.startsWith(n.name));!o||(n.size=E0[o].sizeLoadedWeights,n.url=E0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Ct(this.instance,o,n);r&&t.push(r)}return t}};function wo(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let p={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let h of t)d.box[0]>h.box[0]&&d.box[0]h.box[1]&&d.box[1]+d.box[3]p.body.box[0]&&h.box[0]+h.box[2]p.body.box[1]&&h.box[1]+h.box[3]p.body.box[0]&&h.box[1]+h.box[3]>p.body.box[1]&&h.box[1]+h.box[3]{h&&h.length===4&&(f.push(h[0],h[0]+h[2]),b.push(h[1],h[1]+h[3]))};M(p.face.box),M((x=p.body)==null?void 0:x.box),M((i=p.hands.left)==null?void 0:i.box),M((y=p.hands.right)==null?void 0:y.box);let T=Math.min(...f),m=Math.min(...b);p.box=[T,m,Math.max(...f)-T,Math.max(...b)-m],(r==null?void 0:r[1])&&(r==null?void 0:r[2])&&(p.boxRaw=[p.box[0]/r[2],p.box[1]/r[1],p.box[2]/r[2],p.box[3]/r[1]]),A.push(p)}return A}var c0=V(H());var Wt=` + gaze: [gaze]\xB0`, + body: "body [score]%", + bodyPart: "[label] [score]%", + object: "[label] [score]%", + hand: "[label] [score]%", + finger: "[label]", + gesture: "[where] [who]: [what]" +}; + +// src/draw/draw.ts +var drawTime = 0; +function person(inCanvas2, result, drawOptions) { + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (let i = 0; i < result.length; i++) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels) { + const label = `person #${i}`; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.stroke(); + } + } +} +function canvas2(input, output) { + if (!input || !output) + return; + const ctx = getCanvasContext(output); + if (!ctx) + return; + ctx.drawImage(input, 0, 0); +} +async function all(inCanvas2, result, drawOptions) { + if (!(result == null ? void 0 : result.performance) || !inCanvas2) + return null; + const timeStamp = now(); + const localOptions2 = mergeDeep(options2, drawOptions); + const promise = Promise.all([ + face(inCanvas2, result.face, localOptions2), + body(inCanvas2, result.body, localOptions2), + hand(inCanvas2, result.hand, localOptions2), + object(inCanvas2, result.object, localOptions2), + gesture(inCanvas2, result.gesture, localOptions2) + ]); + drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp); + result.performance.draw = drawTime; + return promise; +} +function init2() { + options2.faceLabels = defaultLabels.face; + options2.bodyLabels = defaultLabels.body; + options2.bodyPartLabels = defaultLabels.bodyPart; + options2.handLabels = defaultLabels.hand; + options2.fingerLabels = defaultLabels.finger; + options2.objectLabels = defaultLabels.object; + options2.gestureLabels = defaultLabels.gesture; +} + +// src/body/blazepose.ts +var tf9 = __toESM(require_tfjs_esm()); + +// src/body/blazeposecoords.ts +var blazeposecoords_exports = {}; +__export(blazeposecoords_exports, { + connected: () => connected, + kpt: () => kpt +}); +var kpt = [ + "nose", + "leftEyeInside", + "leftEye", + "leftEyeOutside", + "rightEyeInside", + "rightEye", + "rightEyeOutside", + "leftEar", + "rightEar", + "leftMouth", + "rightMouth", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftPinky", + "rightPinky", + "leftIndex", + "rightIndex", + "leftThumb", + "rightThumb", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle", + "leftHeel", + "rightHeel", + "leftFoot", + "rightFoot", + "bodyCenter", + "bodyTop", + "leftPalm", + "leftHand", + "rightPalm", + "rightHand" +]; +var connected = { + shoulders: ["leftShoulder", "rightShoulder"], + hips: ["rightHip", "leftHip"], + mouth: ["leftMouth", "rightMouth"], + leftLegUpper: ["leftHip", "leftKnee"], + leftLegLower: ["leftKnee", "leftAnkle"], + leftFoot: ["leftAnkle", "leftHeel", "leftFoot"], + leftTorso: ["leftShoulder", "leftHip"], + leftArmUpper: ["leftShoulder", "leftElbow"], + leftArmLower: ["leftElbow", "leftWrist"], + leftHand: ["leftWrist", "leftPalm"], + leftHandPinky: ["leftPalm", "leftPinky"], + leftHandIndex: ["leftPalm", "leftIndex"], + leftHandThumb: ["leftPalm", "leftThumb"], + leftEyeOutline: ["leftEyeInside", "leftEyeOutside"], + rightLegUpper: ["rightHip", "rightKnee"], + rightLegLower: ["rightKnee", "rightAnkle"], + rightFoot: ["rightAnkle", "rightHeel", "rightFoot"], + rightTorso: ["rightShoulder", "rightHip"], + rightArmUpper: ["rightShoulder", "rightElbow"], + rightArmLower: ["rightElbow", "rightWrist"], + rightHand: ["rightWrist", "rightPalm"], + rightHandPinky: ["rightPalm", "rightPinky"], + rightHandIndex: ["rightPalm", "rightIndex"], + rightHandThumb: ["rightPalm", "rightThumb"], + rightEyeOutline: ["rightEyeInside", "rightEyeOutside"] +}; + +// src/body/blazeposedetector.ts +var tf8 = __toESM(require_tfjs_esm()); +var model; +var inputSize = 224; +var anchorTensor; +var numLayers = 5; +var strides = [8, 16, 32, 32, 32]; +function createAnchors() { + const anchors3 = []; + let layerId = 0; + while (layerId < numLayers) { + let anchorCount = 0; + let lastSameStrideLayer = layerId; + while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) { + anchorCount += 2; + lastSameStrideLayer++; + } + const stride = strides[layerId]; + const featureMapHeight = Math.ceil(inputSize / stride); + const featureMapWidth = Math.ceil(inputSize / stride); + for (let y = 0; y < featureMapHeight; ++y) { + for (let x = 0; x < featureMapWidth; ++x) { + for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight }); + } + } + } + layerId = lastSameStrideLayer; + } + anchorTensor = { x: tf8.tensor1d(anchors3.map((a) => a.x)), y: tf8.tensor1d(anchors3.map((a) => a.y)) }; +} +async function loadDetector(config3) { + if (env.initial) + model = null; + if (!model && config3.body["detector"] && config3.body["detector"].modelPath || "") { + model = await loadModel(config3.body["detector"].modelPath); + const inputs = (model == null ? void 0 : model["executor"]) ? Object.values(model.modelSignature["inputs"]) : void 0; + inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug && model) + log("cached model:", model["modelUrl"]); + createAnchors(); + return model; +} +var cropFactor = [5, 5]; +function decodeBoxes(boxesTensor, anchor) { + return tf8.tidy(() => { + const split6 = tf8.split(boxesTensor, 12, 1); + let xCenter = tf8.squeeze(split6[0]); + let yCenter = tf8.squeeze(split6[1]); + let width = tf8.squeeze(split6[2]); + let height = tf8.squeeze(split6[3]); + xCenter = tf8.add(tf8.div(xCenter, inputSize), anchor.x); + yCenter = tf8.add(tf8.div(yCenter, inputSize), anchor.y); + width = tf8.mul(tf8.div(width, inputSize), cropFactor[0]); + height = tf8.mul(tf8.div(height, inputSize), cropFactor[1]); + const xMin = tf8.sub(xCenter, tf8.div(width, 2)); + const yMin = tf8.sub(yCenter, tf8.div(height, 2)); + const xMax = tf8.add(xMin, width); + const yMax = tf8.add(yMin, height); + const boxes = tf8.stack([xMin, yMin, xMax, yMax], 1); + return boxes; + }); +} +async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { + var _a, _b; + const detectedBoxes = []; + const t2 = {}; + t2.boxes = decodeBoxes(boxesTensor, anchorTensor); + t2.scores = tf8.sigmoid(logitsTensor); + t2.nms = await tf8.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, 1, ((_a = config3.body["detector"]) == null ? void 0 : _a.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); + const nms = await t2.nms.data(); + const scores = await t2.scores.data(); + const boxes = await t2.boxes.array(); + for (const i of Array.from(nms)) { + const score = scores[i]; + const boxRaw = boxes[i]; + const box = [Math.round(boxRaw[0] * outputSize2[0]), Math.round(boxRaw[1] * outputSize2[1]), Math.round(boxRaw[2] * outputSize2[0]), Math.round(boxRaw[3] * outputSize2[1])]; + const detectedBox = { score, boxRaw, box }; + detectedBoxes.push(detectedBox); + } + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return detectedBoxes; +} +async function detectBoxes(input, config3, outputSize2) { + const t2 = {}; + t2.res = model == null ? void 0 : model.execute(input, ["Identity"]); + t2.logitsRaw = tf8.slice(t2.res, [0, 0, 0], [1, -1, 1]); + t2.boxesRaw = tf8.slice(t2.res, [0, 0, 1], [1, -1, -1]); + t2.logits = tf8.squeeze(t2.logitsRaw); + t2.boxes = tf8.squeeze(t2.boxesRaw); + const boxes = await decodeResults(t2.boxes, t2.logits, config3, outputSize2); + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return boxes; +} + +// src/util/box.ts +function calc(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const box = [min2[0], min2[1], max5[0] - min2[0], max5[1] - min2[1]]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function square(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const center = [(min2[0] + max5[0]) / 2, (min2[1] + max5[1]) / 2]; + const dist = Math.max(center[0] - min2[0], center[1] - min2[1], -center[0] + max5[0], -center[1] + max5[1]); + const box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function scale(box, scaleFact) { + const dist = [box[2] * scaleFact, box[3] * scaleFact]; + const newBox = [ + box[0] - (dist[0] - box[2]) / 2, + box[1] - (dist[1] - box[3]) / 2, + dist[0], + dist[1] + ]; + return newBox; +} + +// src/body/blazepose.ts +var model2; +var inputSize2 = 256; +var skipped = Number.MAX_SAFE_INTEGER; +var outputNodes = { + landmarks: ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"], + detector: [] +}; +var cache = []; +var padding = [[0, 0], [0, 0], [0, 0], [0, 0]]; +var lastTime = 0; +var sigmoid2 = (x) => 1 - 1 / (1 + Math.exp(x)); +var loadDetect = (config3) => loadDetector(config3); +async function loadPose(config3) { + if (env.initial) + model2 = null; + if (!model2) { + model2 = await loadModel(config3.body.modelPath); + const inputs = (model2 == null ? void 0 : model2["executor"]) ? Object.values(model2.modelSignature["inputs"]) : void 0; + inputSize2 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug) + log("cached model:", model2["modelUrl"]); + return model2; +} +function prepareImage(input, size2, cropBox) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + let final; + if (cropBox) { + t2.cropped = tf9.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + } + if (input.shape[1] !== input.shape[2]) { + const height = [ + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0 + ]; + const width = [ + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0 + ]; + padding = [ + [0, 0], + height, + width, + [0, 0] + ]; + t2.pad = tf9.pad(t2.cropped || input, padding); + t2.resize = tf9.image.resizeBilinear(t2.pad, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else if (input.shape[1] !== size2) { + t2.resize = tf9.image.resizeBilinear(t2.cropped || input, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else { + final = tf9.div(t2.cropped || input, constants.tf255); + } + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + return final; +} +function rescaleKeypoints(keypoints, outputSize2, cropBox) { + for (const kpt4 of keypoints) { + kpt4.position = [ + Math.trunc(kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0]), + Math.trunc(kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0]), + kpt4.position[2] + ]; + kpt4.positionRaw = [kpt4.position[0] / outputSize2[0], kpt4.position[1] / outputSize2[1], 2 * kpt4.position[2] / (outputSize2[0] + outputSize2[1])]; + } + if (cropBox) { + const width = cropBox[2] - cropBox[0]; + const height = cropBox[3] - cropBox[1]; + for (const kpt4 of keypoints) { + kpt4.positionRaw = [ + kpt4.positionRaw[0] / height + cropBox[1], + kpt4.positionRaw[1] / width + cropBox[0], + kpt4.positionRaw[2] + ]; + kpt4.position = [ + Math.trunc(kpt4.positionRaw[0] * outputSize2[0]), + Math.trunc(kpt4.positionRaw[1] * outputSize2[1]), + kpt4.positionRaw[2] + ]; + } + } + return keypoints; +} +function fixKeypoints(keypoints) { + const leftPalm = keypoints.find((k) => k.part === "leftPalm"); + const leftWrist = keypoints.find((k) => k.part === "leftWrist"); + const leftIndex = keypoints.find((k) => k.part === "leftIndex"); + leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2; + const rightPalm = keypoints.find((k) => k.part === "rightPalm"); + const rightWrist = keypoints.find((k) => k.part === "rightWrist"); + const rightIndex = keypoints.find((k) => k.part === "rightIndex"); + rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2; +} +async function detectLandmarks(input, config3, outputSize2) { + if (!(model2 == null ? void 0 : model2["executor"])) + return null; + const t2 = {}; + [t2.ld, t2.segmentation, t2.heatmap, t2.world, t2.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); + const poseScore = (await t2.poseflag.data())[0]; + const points = await t2.ld.data(); + const distances = await t2.world.data(); + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + const keypointsRelative = []; + const depth = 5; + for (let i = 0; i < points.length / depth; i++) { + const score = sigmoid2(points[depth * i + 3]); + const presence = sigmoid2(points[depth * i + 4]); + const adjScore = Math.trunc(100 * score * presence * poseScore) / 100; + const positionRaw = [points[depth * i + 0] / inputSize2, points[depth * i + 1] / inputSize2, points[depth * i + 2] + 0]; + const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]]; + const distance2 = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0]; + keypointsRelative.push({ part: kpt[i], positionRaw, position, distance: distance2, score: adjScore }); + } + if (poseScore < (config3.body.minConfidence || 0)) + return null; + fixKeypoints(keypointsRelative); + const keypoints = rescaleKeypoints(keypointsRelative, outputSize2); + const kpts = keypoints.map((k) => k.position); + const boxes = calc(kpts, [outputSize2[0], outputSize2[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations: annotations2 }; + return body4; +} +async function predict(input, config3) { + var _a, _b, _c; + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime; + const skipFrame = skipped < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && cache !== null) { + skipped++; + } else { + let boxes = []; + if ((_b = (_a = config3.body) == null ? void 0 : _a["detector"]) == null ? void 0 : _b["enabled"]) { + const preparedImage = prepareImage(input, 224); + boxes = await detectBoxes(preparedImage, config3, outputSize2); + tf9.dispose(preparedImage); + } else { + boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; + } + for (let i = 0; i < boxes.length; i++) { + const preparedBox = prepareImage(input, 256, (_c = boxes[i]) == null ? void 0 : _c.boxRaw); + cache.length = 0; + const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); + tf9.dispose(preparedBox); + if (!bodyResult) + continue; + bodyResult.id = i; + cache.push(bodyResult); + } + lastTime = now(); + skipped = 0; + } + return cache; +} + +// src/object/centernet.ts +var tf10 = __toESM(require_tfjs_esm()); + +// src/object/labels.ts +var labels2 = [ + { class: 1, label: "person" }, + { class: 2, label: "bicycle" }, + { class: 3, label: "car" }, + { class: 4, label: "motorcycle" }, + { class: 5, label: "airplane" }, + { class: 6, label: "bus" }, + { class: 7, label: "train" }, + { class: 8, label: "truck" }, + { class: 9, label: "boat" }, + { class: 10, label: "traffic light" }, + { class: 11, label: "fire hydrant" }, + { class: 12, label: "stop sign" }, + { class: 13, label: "parking meter" }, + { class: 14, label: "bench" }, + { class: 15, label: "bird" }, + { class: 16, label: "cat" }, + { class: 17, label: "dog" }, + { class: 18, label: "horse" }, + { class: 19, label: "sheep" }, + { class: 20, label: "cow" }, + { class: 21, label: "elephant" }, + { class: 22, label: "bear" }, + { class: 23, label: "zebra" }, + { class: 24, label: "giraffe" }, + { class: 25, label: "backpack" }, + { class: 26, label: "umbrella" }, + { class: 27, label: "handbag" }, + { class: 28, label: "tie" }, + { class: 29, label: "suitcase" }, + { class: 30, label: "frisbee" }, + { class: 31, label: "skis" }, + { class: 32, label: "snowboard" }, + { class: 33, label: "sports ball" }, + { class: 34, label: "kite" }, + { class: 35, label: "baseball bat" }, + { class: 36, label: "baseball glove" }, + { class: 37, label: "skateboard" }, + { class: 38, label: "surfboard" }, + { class: 39, label: "tennis racket" }, + { class: 40, label: "bottle" }, + { class: 41, label: "wine glass" }, + { class: 42, label: "cup" }, + { class: 43, label: "fork" }, + { class: 44, label: "knife" }, + { class: 45, label: "spoon" }, + { class: 46, label: "bowl" }, + { class: 47, label: "banana" }, + { class: 48, label: "apple" }, + { class: 49, label: "sandwich" }, + { class: 50, label: "orange" }, + { class: 51, label: "broccoli" }, + { class: 52, label: "carrot" }, + { class: 53, label: "hot dog" }, + { class: 54, label: "pizza" }, + { class: 55, label: "donut" }, + { class: 56, label: "cake" }, + { class: 57, label: "chair" }, + { class: 58, label: "couch" }, + { class: 59, label: "potted plant" }, + { class: 60, label: "bed" }, + { class: 61, label: "dining table" }, + { class: 62, label: "toilet" }, + { class: 63, label: "tv" }, + { class: 64, label: "laptop" }, + { class: 65, label: "mouse" }, + { class: 66, label: "remote" }, + { class: 67, label: "keyboard" }, + { class: 68, label: "cell phone" }, + { class: 69, label: "microwave" }, + { class: 70, label: "oven" }, + { class: 71, label: "toaster" }, + { class: 72, label: "sink" }, + { class: 73, label: "refrigerator" }, + { class: 74, label: "book" }, + { class: 75, label: "clock" }, + { class: 76, label: "vase" }, + { class: 77, label: "scissors" }, + { class: 78, label: "teddy bear" }, + { class: 79, label: "hair drier" }, + { class: 80, label: "toothbrush" } +]; + +// src/object/centernet.ts +var model3; +var inputSize3 = 0; +var last2 = []; +var lastTime2 = 0; +var skipped2 = Number.MAX_SAFE_INTEGER; +async function load(config3) { + if (env.initial) + model3 = null; + if (!model3) { + model3 = await loadModel(config3.object.modelPath); + const inputs = (model3 == null ? void 0 : model3["executor"]) ? Object.values(model3.modelSignature["inputs"]) : void 0; + inputSize3 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", model3["modelUrl"]); + return model3; +} +async function process3(res, outputShape, config3) { + if (!res) + return []; + const t2 = {}; + const results = []; + const detections = await res.array(); + t2.squeeze = tf10.squeeze(res); + const arr = tf10.split(t2.squeeze, 6, 1); + t2.stack = tf10.stack([arr[1], arr[0], arr[3], arr[2]], 1); + t2.boxes = tf10.squeeze(t2.stack); + t2.scores = tf10.squeeze(arr[4]); + t2.classes = tf10.squeeze(arr[5]); + tf10.dispose([res, ...arr]); + t2.nms = await tf10.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + const nms = await t2.nms.data(); + let i = 0; + for (const id of Array.from(nms)) { + const score = Math.trunc(100 * detections[0][id][4]) / 100; + const classVal = detections[0][id][5]; + if (Number.isNaN(classVal)) + continue; + const label = labels2[classVal].label; + const [x, y] = [ + detections[0][id][0] / inputSize3, + detections[0][id][1] / inputSize3 + ]; + const boxRaw = [ + x, + y, + detections[0][id][2] / inputSize3 - x, + detections[0][id][3] / inputSize3 - y + ]; + const box = [ + Math.trunc(boxRaw[0] * outputShape[0]), + Math.trunc(boxRaw[1] * outputShape[1]), + Math.trunc(boxRaw[2] * outputShape[0]), + Math.trunc(boxRaw[3] * outputShape[1]) + ]; + results.push({ id: i++, score, class: classVal, label, box, boxRaw }); + } + Object.keys(t2).forEach((tensor6) => tf10.dispose(t2[tensor6])); + return results; +} +async function predict2(input, config3) { + if (!(model3 == null ? void 0 : model3["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime2; + const skipFrame = skipped2 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last2.length > 0) { + skipped2++; + return last2; + } + skipped2 = 0; + return new Promise(async (resolve) => { + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const resize = tf10.image.resizeBilinear(input, [inputSize3, inputSize3]); + const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; + lastTime2 = now(); + tf10.dispose(resize); + const obj = await process3(objectT, outputSize2, config3); + last2 = obj; + resolve(obj); + }); +} + +// src/body/efficientpose.ts +var tf11 = __toESM(require_tfjs_esm()); + +// src/body/efficientposecoords.ts +var efficientposecoords_exports = {}; +__export(efficientposecoords_exports, { + connected: () => connected2, + kpt: () => kpt2 +}); +var kpt2 = [ + "head", + "neck", + "rightShoulder", + "rightElbow", + "rightWrist", + "chest", + "leftShoulder", + "leftElbow", + "leftWrist", + "bodyCenter", + "rightHip", + "rightKnee", + "rightAnkle", + "leftHip", + "leftKnee", + "leftAnkle" +]; +var connected2 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/body/efficientpose.ts +var model4; +var lastTime3 = 0; +var cache2 = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} }; +var skipped3 = Number.MAX_SAFE_INTEGER; +async function load2(config3) { + if (env.initial) + model4 = null; + if (!model4) + model4 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model4["modelUrl"]); + return model4; +} +async function max2d(inputs, minScore) { + const [width, height] = inputs.shape; + const reshaped = tf11.reshape(inputs, [height * width]); + const max5 = tf11.max(reshaped, 0); + const newScore = (await max5.data())[0]; + if (newScore > minScore) { + const coordinates = tf11.argMax(reshaped, 0); + const mod3 = tf11.mod(coordinates, width); + const x = (await mod3.data())[0]; + const div15 = tf11.div(coordinates, width); + const y = (await div15.data())[0]; + tf11.dispose([reshaped, max5, coordinates, mod3, div15]); + return [x, y, newScore]; + } + tf11.dispose([reshaped, max5]); + return [0, 0, newScore]; +} +async function predict3(image28, config3) { + if (!(model4 == null ? void 0 : model4["executor"]) || !(model4 == null ? void 0 : model4.inputs[0].shape)) + return []; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime3; + const skipFrame = skipped3 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && Object.keys(cache2.keypoints).length > 0) { + skipped3++; + return [cache2]; + } + skipped3 = 0; + return new Promise(async (resolve) => { + const tensor6 = tf11.tidy(() => { + var _a, _b; + const resize = tf11.image.resizeBilinear(image28, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); + const enhance2 = tf11.mul(resize, constants.tf2); + const norm = tf11.sub(enhance2, constants.tf1); + return norm; + }); + let resT; + if (config3.body.enabled) + resT = model4 == null ? void 0 : model4.execute(tensor6); + lastTime3 = now(); + tf11.dispose(tensor6); + if (resT) { + cache2.keypoints.length = 0; + const squeeze14 = tf11.squeeze(resT); + tf11.dispose(resT); + const stack5 = tf11.unstack(squeeze14, 2); + tf11.dispose(squeeze14); + for (let id = 0; id < stack5.length; id++) { + const [x2, y2, partScore] = await max2d(stack5[id], config3.body.minConfidence); + if (partScore > (config3.body.minConfidence || 0)) { + cache2.keypoints.push({ + score: Math.round(100 * partScore) / 100, + part: kpt2[id], + positionRaw: [ + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + Math.round(image28.shape[2] * x2 / model4.inputs[0].shape[2]), + Math.round(image28.shape[1] * y2 / model4.inputs[0].shape[1]) + ] + }); + } + } + stack5.forEach((s) => tf11.dispose(s)); + } + cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const x = cache2.keypoints.map((a) => a.position[0]); + const y = cache2.keypoints.map((a) => a.position[1]); + cache2.box = [ + Math.min(...x), + Math.min(...y), + Math.max(...x) - Math.min(...x), + Math.max(...y) - Math.min(...y) + ]; + const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); + const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); + cache2.boxRaw = [ + Math.min(...xRaw), + Math.min(...yRaw), + Math.max(...xRaw) - Math.min(...xRaw), + Math.max(...yRaw) - Math.min(...yRaw) + ]; + for (const [name, indexes] of Object.entries(connected2)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + cache2.annotations[name] = pt; + } + resolve([cache2]); + }); +} + +// src/face/face.ts +var tf25 = __toESM(require_tfjs_esm()); + +// src/face/facemesh.ts +var tf15 = __toESM(require_tfjs_esm()); + +// src/face/blazeface.ts +var tf13 = __toESM(require_tfjs_esm()); + +// src/face/facemeshutil.ts +var tf12 = __toESM(require_tfjs_esm()); +var getBoxSize = (box) => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])]; +var getBoxCenter = (box) => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1]; +var clampBox = (box, input) => box ? [ + Math.trunc(Math.max(0, box.startPoint[0])), + Math.trunc(Math.max(0, box.startPoint[1])), + Math.trunc(Math.min(input.shape[2] || 0, box.endPoint[0]) - Math.max(0, box.startPoint[0])), + Math.trunc(Math.min(input.shape[1] || 0, box.endPoint[1]) - Math.max(0, box.startPoint[1])) +] : [0, 0, 0, 0]; +var getRawBox = (box, input) => box ? [ + box.startPoint[0] / (input.shape[2] || 0), + box.startPoint[1] / (input.shape[1] || 0), + (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0), + (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0) +] : [0, 0, 0, 0]; +var scaleBoxCoordinates = (box, factor) => { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence }; +}; +var cutAndResize = (box, image28, cropSize) => { + const h = image28.shape[1]; + const w = image28.shape[2]; + const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; + const crop = tf12.image.cropAndResize(image28, [cutBox], [0], cropSize); + const norm = tf12.div(crop, constants.tf255); + tf12.dispose(crop); + return norm; +}; +var enlargeBox = (box, factor) => { + const center = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]], endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]], landmarks: box.landmarks, confidence: box.confidence }; +}; +var squarifyBox = (box) => { + const centers = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = Math.max(...size2) / 2; + return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)], endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)], landmarks: box.landmarks, confidence: box.confidence }; +}; +var calculateLandmarksBoundingBox = (landmarks) => { + const x = landmarks.map((d) => d[0]); + const y = landmarks.map((d) => d[1]); + return { startPoint: [Math.min(...x), Math.min(...y)], endPoint: [Math.max(...x), Math.max(...y)], landmarks }; +}; +var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; +var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); +var buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +var dot = (v1, v2) => { + let product = 0; + for (let i = 0; i < v1.length; i++) + product += v1[i] * v2[i]; + return product; +}; +var getColumnFrom2DArr = (arr, columnIndex) => { + const column = []; + for (let i = 0; i < arr.length; i++) + column.push(arr[i][columnIndex]); + return column; +}; +var multiplyTransformMatrices = (mat1, mat2) => { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) + product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col))); + } + return product; +}; +var buildRotationMatrix = (rotation, center) => { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]); + return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix); +}; +var invertTransformMatrix = (matrix) => { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)]; + return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]]; +}; +var rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])]; +function generateAnchors(inputSize10) { + const spec = inputSize10 === 192 ? { strides: [4], anchors: [1] } : { strides: [inputSize10 / 16, inputSize10 / 8], anchors: [2, 6] }; + const anchors3 = []; + for (let i = 0; i < spec.strides.length; i++) { + const stride = spec.strides[i]; + const gridRows = Math.floor((inputSize10 + stride - 1) / stride); + const gridCols = Math.floor((inputSize10 + stride - 1) / stride); + const anchorsNum = spec.anchors[i]; + for (let gridY = 0; gridY < gridRows; gridY++) { + const anchorY = stride * (gridY + 0.5); + for (let gridX = 0; gridX < gridCols; gridX++) { + const anchorX = stride * (gridX + 0.5); + for (let n = 0; n < anchorsNum; n++) + anchors3.push([anchorX, anchorY]); + } + } + } + return anchors3; +} +function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize10) { + const boxSize = getBoxSize(box); + const coordsScaled = coordsRaw.map((coord) => [ + boxSize[0] / inputSize10 * (coord[0] - inputSize10 / 2), + boxSize[1] / inputSize10 * (coord[1] - inputSize10 / 2), + coord[2] || 0 + ]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix; + const coordsRotated = largeAngle ? coordsScaled.map((coord) => [...rotatePoint(coord, coordsRotationMatrix), coord[2]]) : coordsScaled; + const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix; + const boxCenter = getBoxCenter(box); + const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + offsets[0]), + Math.trunc(coord[1] + offsets[1]), + Math.trunc(coord[2] || 0) + ]); +} +function correctFaceRotation(rotate, box, input, inputSize10) { + const symmetryLine = box.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; + let angle = 0; + let rotationMatrix = fixedRotationMatrix; + let face4; + if (rotate && env.kernels.includes("rotatewithoffset")) { + angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + if (largeAngle) { + const center = getBoxCenter(box); + const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; + const rotated = tf12.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + rotationMatrix = buildRotationMatrix(-angle, center); + face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); + tf12.dispose(rotated); + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + return [angle, rotationMatrix, face4]; +} +var findFaceCenter = (mesh) => { + const x = mesh.map((m) => m[0]); + const y = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2]; +}; +var calculateFaceBox = (mesh, previousBox) => { + const center = findFaceCenter(mesh); + const boxSize = getBoxSize(previousBox); + const calculatedBox = { + startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2], + endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] + }; + return calculatedBox; +}; + +// src/face/blazeface.ts +var keypointsCount = 6; +var faceBoxScaleFactor = 1.4; +var model5; +var anchors = null; +var inputSize4 = 0; +var inputSizeT = null; +var size = () => inputSize4; +async function load3(config3) { + var _a; + if (env.initial) + model5 = null; + if (!model5) + model5 = await loadModel((_a = config3.face.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model5["modelUrl"]); + inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; + inputSizeT = tf13.scalar(inputSize4, "int32"); + anchors = tf13.tensor2d(generateAnchors(inputSize4)); + return model5; +} +function decodeBoxes2(boxOutputs) { + if (!anchors || !inputSizeT) + return tf13.zeros([0, 0]); + const t2 = {}; + t2.boxStarts = tf13.slice(boxOutputs, [0, 1], [-1, 2]); + t2.centers = tf13.add(t2.boxStarts, anchors); + t2.boxSizes = tf13.slice(boxOutputs, [0, 3], [-1, 2]); + t2.boxSizesNormalized = tf13.div(t2.boxSizes, inputSizeT); + t2.centersNormalized = tf13.div(t2.centers, inputSizeT); + t2.halfBoxSize = tf13.div(t2.boxSizesNormalized, constants.tf2); + t2.starts = tf13.sub(t2.centersNormalized, t2.halfBoxSize); + t2.ends = tf13.add(t2.centersNormalized, t2.halfBoxSize); + t2.startNormalized = tf13.mul(t2.starts, inputSizeT); + t2.endNormalized = tf13.mul(t2.ends, inputSizeT); + const boxes = tf13.concat2d([t2.startNormalized, t2.endNormalized], 1); + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} +async function getBoxes(inputImage, config3) { + var _a, _b, _c, _d; + if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) + return []; + const t2 = {}; + t2.resized = tf13.image.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t2.div = tf13.div(t2.resized, constants.tf127); + t2.normalized = tf13.sub(t2.div, constants.tf05); + const res = model5 == null ? void 0 : model5.execute(t2.normalized); + if (Array.isArray(res) && res.length > 2) { + const sorted = res.sort((a, b) => a.size - b.size); + t2.concat384 = tf13.concat([sorted[0], sorted[2]], 2); + t2.concat512 = tf13.concat([sorted[1], sorted[3]], 2); + t2.concat = tf13.concat([t2.concat512, t2.concat384], 1); + t2.batch = tf13.squeeze(t2.concat, [0]); + } else if (Array.isArray(res)) { + t2.batch = tf13.squeeze(res[0]); + } else { + t2.batch = tf13.squeeze(res); + } + tf13.dispose(res); + t2.boxes = decodeBoxes2(t2.batch); + t2.logits = tf13.slice(t2.batch, [0, 0], [-1, 1]); + t2.sigmoid = tf13.sigmoid(t2.logits); + t2.scores = tf13.squeeze(t2.sigmoid); + t2.nms = await tf13.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c = config3.face.detector) == null ? void 0 : _c.minConfidence) || 0); + const nms = await t2.nms.array(); + const boxes = []; + const scores = await t2.scores.data(); + for (let i = 0; i < nms.length; i++) { + const confidence = scores[nms[i]]; + if (confidence > (((_d = config3.face.detector) == null ? void 0 : _d.minConfidence) || 0)) { + const b = {}; + b.bbox = tf13.slice(t2.boxes, [nms[i], 0], [1, -1]); + b.slice = tf13.slice(t2.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = tf13.squeeze(b.slice); + b.landmarks = tf13.reshape(b.squeeze, [keypointsCount, -1]); + const points = await b.bbox.data(); + const rawBox = { + startPoint: [points[0], points[1]], + endPoint: [points[2], points[3]], + landmarks: await b.landmarks.array(), + confidence + }; + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4]); + const enlargedBox = enlargeBox(scaledBox, config3.face["scale"] || faceBoxScaleFactor); + const squaredBox = squarifyBox(enlargedBox); + boxes.push(squaredBox); + Object.keys(b).forEach((tensor6) => tf13.dispose(b[tensor6])); + } + } + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} + +// src/face/iris.ts +var tf14 = __toESM(require_tfjs_esm()); +var model6; +var inputSize5 = 0; +var irisEnlarge = 2.3; +var leftOutline = meshAnnotations.leftEyeLower0; +var rightOutline = meshAnnotations.rightEyeLower0; +var eyeLandmarks = { + leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]], + rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]] +}; +var irisLandmarks = { + upperCenter: 3, + lowerCenter: 4, + index: 71, + numCoordinates: 76 +}; +async function load4(config3) { + var _a, _b; + if (env.initial) + model6 = null; + if (!model6) + model6 = await loadModel((_a = config3.face.iris) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model6["modelUrl"]); + inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; + if (inputSize5 === -1) + inputSize5 = 64; + return model6; +} +function replaceIrisCoords(rawCoords, newCoords, prefix, keys) { + for (let i = 0; i < irisIndices.length; i++) { + const { key, indices } = irisIndices[i]; + const originalIndices = meshAnnotations[`${prefix}${key}`]; + if (!keys || keys.includes(key)) { + for (let j = 0; j < indices.length; j++) { + const index2 = indices[j]; + rawCoords[originalIndices[j]] = [ + newCoords[index2][0], + newCoords[index2][1], + (newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2 + ]; + } + } + } +} +var getLeftToRightEyeDepthDifference = (rawCoords) => { + const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2]; + const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2]; + return leftEyeZ - rightEyeZ; +}; +var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); + const boxSize = getBoxSize(box); + let crop = tf14.image.cropAndResize(face4, [[ + box.startPoint[1] / meshSize, + box.startPoint[0] / meshSize, + box.endPoint[1] / meshSize, + box.endPoint[0] / meshSize + ]], [0], [inputSize5, inputSize5]); + if (flip && env.kernels.includes("flipleftright")) { + const flipped = tf14.image.flipLeftRight(crop); + tf14.dispose(crop); + crop = flipped; + } + return { box, boxSize, crop }; +}; +var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { + const eyeRawCoords = []; + for (let i = 0; i < irisLandmarks.numCoordinates; i++) { + const x = eyeData[i * 3]; + const y = eyeData[i * 3 + 1]; + const z = eyeData[i * 3 + 2]; + eyeRawCoords.push([ + (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], + y / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + z + ]); + } + return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) }; +}; +var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { + const upperCenterZ = rawCoords[meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2]; + const lowerCenterZ = rawCoords[meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2]; + const averageZ = (upperCenterZ + lowerCenterZ) / 2; + return irisCoords.map((coord, i) => { + let z = averageZ; + if (i === 2) { + z = upperCenterZ; + } else if (i === 4) { + z = lowerCenterZ; + } + return [coord[0], coord[1], z]; + }); +}; +async function augmentIris(rawCoords, face4, meshSize) { + if (!(model6 == null ? void 0 : model6["executor"])) + return rawCoords; + const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); + const combined = tf14.concat([leftEyeCrop, rightEyeCrop]); + tf14.dispose(leftEyeCrop); + tf14.dispose(rightEyeCrop); + const eyePredictions = model6.execute(combined); + tf14.dispose(combined); + const eyePredictionsData = await eyePredictions.data(); + tf14.dispose(eyePredictions); + const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); + const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); + const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); + const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false); + const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords); + if (Math.abs(leftToRightEyeDepthDifference) < 30) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", null); + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", null); + } else if (leftToRightEyeDepthDifference < 1) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", ["EyeUpper0", "EyeLower0"]); + } else { + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", ["EyeUpper0", "EyeLower0"]); + } + const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, "left"); + const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, "right"); + const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords); + return newCoords; +} + +// src/face/attention.ts +async function augment(rawCoords, results) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + const t2 = { + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + }; + for (const val of Object.values(t2)) { + if (!val) + return rawCoords; + } + const irisLDepth = LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisL.length / 2; i++) + rawCoords.push([t2.irisL[2 * i + 0], t2.irisL[2 * i + 1], irisLDepth]); + const irisRDepth = LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisR.length / 2; i++) + rawCoords.push([t2.irisR[2 * i + 0], t2.irisR[2 * i + 1], irisRDepth]); + for (let i = 0; i < t2.eyeL.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t2.eyeL[2 * i + 0], t2.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.eyeR.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t2.eyeR[2 * i + 0], t2.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.lips.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t2.lips[2 * i + 0], t2.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; + return rawCoords; +} + +// src/face/facemesh.ts +var cache3 = { + boxes: [], + skipped: Number.MAX_SAFE_INTEGER, + timestamp: 0 +}; +var model7 = null; +var inputSize6 = 0; +async function predict4(input, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + if (!(model7 == null ? void 0 : model7["executor"])) + return []; + const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - cache3.timestamp; + const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); + if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { + cache3.boxes = await getBoxes(input, config3); + cache3.timestamp = now(); + cache3.skipped = 0; + } else { + cache3.skipped++; + } + const faces = []; + const newCache = []; + let id = 0; + const size2 = inputSize6; + for (let i = 0; i < cache3.boxes.length; i++) { + const box = cache3.boxes[i]; + let angle = 0; + let rotationMatrix; + const face4 = { + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + annotations: {} + }; + [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c = config3.face.detector) == null ? void 0 : _c.rotation, box, input, ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) ? inputSize6 : size()); + if (config3.filter.equalization) { + const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; + tf15.dispose(face4.tensor); + if (equilized) + face4.tensor = equilized; + } + face4.boxScore = Math.round(100 * box.confidence) / 100; + if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } else if (!model7) { + if (config3.debug) + log("face mesh detection requested, but model is not loaded"); + } else { + if (((_f = config3.face.attention) == null ? void 0 : _f.enabled) && !env.kernels.includes("atan2")) { + config3.face.attention.enabled = false; + tf15.dispose(face4.tensor); + return faces; + } + const results = model7.execute(face4.tensor); + const confidenceT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1); + const faceConfidence = await confidenceT.data(); + face4.faceScore = Math.round(100 * faceConfidence[0]) / 100; + if (face4.faceScore < (((_g = config3.face.detector) == null ? void 0 : _g.minConfidence) || 1)) { + box.confidence = face4.faceScore; + if (config3.face.mesh.keepInvalid) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } + } else { + const meshT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1404); + const coordsReshaped = tf15.reshape(meshT, [-1, 3]); + let rawCoords = await coordsReshaped.array(); + tf15.dispose(coordsReshaped); + if ((_h = config3.face.attention) == null ? void 0 : _h.enabled) { + rawCoords = await augment(rawCoords, results); + } else if ((_i = config3.face.iris) == null ? void 0 : _i.enabled) { + rawCoords = await augmentIris(rawCoords, face4.tensor, inputSize6); + } + face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(meshAnnotations)) + face4.annotations[key] = meshAnnotations[key].map((index2) => face4.mesh[index2]); + face4.score = face4.faceScore; + const calculatedBox = { ...calculateFaceBox(face4.mesh, box), confidence: box.confidence, landmarks: box.landmarks }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + newCache.push(calculatedBox); + } + tf15.dispose(results); + } + if (face4.score > (((_j = config3.face.detector) == null ? void 0 : _j.minConfidence) || 1)) + faces.push(face4); + else + tf15.dispose(face4.tensor); + } + cache3.boxes = newCache; + return faces; +} +async function load5(config3) { + var _a, _b, _c, _d, _e, _f; + if (env.initial) + model7 = null; + if (((_a = config3.face.attention) == null ? void 0 : _a.enabled) && (model7 == null ? void 0 : model7["signature"])) { + if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) + model7 = null; + } + if (!model7) { + if ((_c = config3.face.attention) == null ? void 0 : _c.enabled) + model7 = await loadModel(config3.face.attention.modelPath); + else + model7 = await loadModel((_d = config3.face.mesh) == null ? void 0 : _d.modelPath); + } else if (config3.debug) { + log("cached model:", model7["modelUrl"]); + } + inputSize6 = model7["executor"] && ((_e = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _e[0].shape) ? (_f = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _f[0].shape[2] : 256; + return model7; +} +var triangulation = TRI468; +var uvmap = UV468; + +// src/gear/emotion.ts +var tf16 = __toESM(require_tfjs_esm()); +var annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +async function load6(config3) { + var _a; + if (env.initial) + model8 = null; + if (!model8) + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model8["modelUrl"]); + return model8; +} +async function predict5(image28, config3, idx, count2) { + var _a, _b; + if (!model8) + return []; + const skipFrame = skipped4 < (((_a = config3.face.emotion) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; + if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { + skipped4++; + return last3[idx]; + } + skipped4 = 0; + return new Promise(async (resolve) => { + var _a2; + const obj = []; + if ((_a2 = config3.face.emotion) == null ? void 0 : _a2.enabled) { + const t2 = {}; + const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + t2.channels = tf16.mul(t2.resize, constants.rgb); + t2.grayscale = tf16.sum(t2.channels, 3, true); + t2.grayscaleSub = tf16.sub(t2.grayscale, constants.tf05); + t2.grayscaleMul = tf16.mul(t2.grayscaleSub, constants.tf2); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.grayscaleMul); + lastTime4 = now(); + const data = await t2.emotion.data(); + for (let i = 0; i < data.length; i++) { + if (data[i] > (config3.face.emotion.minConfidence || 0)) + obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); + } + obj.sort((a, b) => b.score - a.score); + Object.keys(t2).forEach((tensor6) => tf16.dispose(t2[tensor6])); + } + last3[idx] = obj; + lastCount = count2; + resolve(obj); + }); +} + +// src/face/faceres.ts +var tf17 = __toESM(require_tfjs_esm()); +var model9; +var last4 = []; +var lastTime5 = 0; +var lastCount2 = 0; +var skipped5 = Number.MAX_SAFE_INTEGER; +async function load7(config3) { + var _a; + if (env.initial) + model9 = null; + if (!model9) + model9 = await loadModel((_a = config3.face.description) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model9["modelUrl"]); + return model9; +} +function enhance(input) { + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) + return tensor6; + const crop = tf17.image.resizeBilinear(tensor6, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + const norm = tf17.mul(crop, constants.tf255); + tf17.dispose(crop); + return norm; +} +async function predict6(image28, config3, idx, count2) { + var _a, _b, _c, _d; + const obj = { + age: 0, + gender: "unknown", + genderScore: 0, + descriptor: [] + }; + if (!(model9 == null ? void 0 : model9["executor"])) + return obj; + const skipFrame = skipped5 < (((_a = config3.face.description) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; + if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c.age) > 0 && ((_d = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped5++; + return last4[idx]; + } + skipped5 = 0; + return new Promise(async (resolve) => { + var _a2; + if ((_a2 = config3.face.description) == null ? void 0 : _a2.enabled) { + const enhanced = enhance(image28); + const resT = model9 == null ? void 0 : model9.execute(enhanced); + lastTime5 = now(); + tf17.dispose(enhanced); + const genderT = resT.find((t2) => t2.shape[1] === 1); + const gender2 = await genderT.data(); + const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; + if (confidence > (config3.face.description.minConfidence || 0)) { + obj.gender = gender2[0] <= 0.5 ? "female" : "male"; + obj.genderScore = Math.min(0.99, confidence); + } + const argmax = tf17.argMax(resT.find((t2) => t2.shape[1] === 100), 1); + const ageIdx = (await argmax.data())[0]; + tf17.dispose(argmax); + const ageT = resT.find((t2) => t2.shape[1] === 100); + const all2 = await ageT.data(); + obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; + if (Number.isNaN(gender2[0]) || Number.isNaN(all2[0])) + log("faceres error:", { model: model9, result: resT }); + const desc = resT.find((t2) => t2.shape[1] === 1024); + const descriptor = desc ? await desc.data() : []; + obj.descriptor = Array.from(descriptor); + resT.forEach((t2) => tf17.dispose(t2)); + } + last4[idx] = obj; + lastCount2 = count2; + resolve(obj); + }); +} + +// src/face/mask.ts +var expandFact = 0.1; +var alpha = 0.5; +function insidePoly(x, y, polygon) { + let inside = false; + let j = polygon.length - 1; + for (let i = 0; i < polygon.length; j = i++) { + if (polygon[i].y > y !== polygon[j].y > y && x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + inside = !inside; + } + return inside; +} +async function mask(face4) { + if (!face4.tensor) + return face4.tensor; + if (!face4.mesh || face4.mesh.length < 100) + return face4.tensor; + const width = face4.tensor.shape[2] || 0; + const height = face4.tensor.shape[1] || 0; + const buffer = await face4.tensor.buffer(); + let silhouette = []; + for (const pt of meshAnnotations.silhouette) + silhouette.push({ x: (face4.mesh[pt][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt][1] - face4.box[1]) / face4.box[3] }); + if (expandFact && expandFact > 0) + silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const inside = insidePoly(x / width, y / width, silhouette); + if (!inside) { + buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0); + buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1); + buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2); + } + } + } + const output = buffer.toTensor(); + return output; +} + +// src/face/antispoof.ts +var tf18 = __toESM(require_tfjs_esm()); +var model10; +var cached = []; +var skipped6 = Number.MAX_SAFE_INTEGER; +var lastCount3 = 0; +var lastTime6 = 0; +async function load8(config3) { + var _a; + if (env.initial) + model10 = null; + if (!model10) + model10 = await loadModel((_a = config3.face.antispoof) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model10["modelUrl"]); + return model10; +} +async function predict7(image28, config3, idx, count2) { + var _a, _b; + if (!(model10 == null ? void 0 : model10["executor"])) + return 0; + const skipTime = (((_a = config3.face.antispoof) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6; + const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { + skipped6++; + return cached[idx]; + } + skipped6 = 0; + return new Promise(async (resolve) => { + const resize = tf18.image.resizeBilinear(image28, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const res = model10 == null ? void 0 : model10.execute(resize); + const num = (await res.data())[0]; + cached[idx] = Math.round(100 * num) / 100; + lastCount3 = count2; + lastTime6 = now(); + tf18.dispose([resize, res]); + resolve(cached[idx]); + }); +} + +// src/face/liveness.ts +var tf19 = __toESM(require_tfjs_esm()); +var model11; +var cached2 = []; +var skipped7 = Number.MAX_SAFE_INTEGER; +var lastCount4 = 0; +var lastTime7 = 0; +async function load9(config3) { + var _a; + if (env.initial) + model11 = null; + if (!model11) + model11 = await loadModel((_a = config3.face.liveness) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model11["modelUrl"]); + return model11; +} +async function predict8(image28, config3, idx, count2) { + var _a, _b; + if (!(model11 == null ? void 0 : model11["executor"])) + return 0; + const skipTime = (((_a = config3.face.liveness) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime7; + const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { + skipped7++; + return cached2[idx]; + } + skipped7 = 0; + return new Promise(async (resolve) => { + const resize = tf19.image.resizeBilinear(image28, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const res = model11 == null ? void 0 : model11.execute(resize); + const num = (await res.data())[0]; + cached2[idx] = Math.round(100 * num) / 100; + lastCount4 = count2; + lastTime7 = now(); + tf19.dispose([resize, res]); + resolve(cached2[idx]); + }); +} + +// src/gear/gear.ts +var tf20 = __toESM(require_tfjs_esm()); +var model12; +var last5 = []; +var raceNames = ["white", "black", "asian", "indian", "other"]; +var ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65]; +var lastCount5 = 0; +var lastTime8 = 0; +var skipped8 = Number.MAX_SAFE_INTEGER; +async function load10(config3) { + var _a; + if (env.initial) + model12 = null; + if (!model12) + model12 = await loadModel((_a = config3.face.gear) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model12["modelUrl"]); + return model12; +} +async function predict9(image28, config3, idx, count2) { + var _a, _b; + if (!model12) + return { age: 0, gender: "unknown", genderScore: 0, race: [] }; + const skipFrame = skipped8 < (((_a = config3.face.gear) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; + if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { + skipped8++; + return last5[idx]; + } + skipped8 = 0; + return new Promise(async (resolve) => { + var _a2, _b2; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) + return; + const t2 = {}; + const box = [[0, 0.1, 0.9, 0.9]]; + t2.resize = tf20.image.cropAndResize(image28, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; + if ((_a2 = config3.face.gear) == null ? void 0 : _a2.enabled) + [t2.age, t2.gender, t2.race] = model12.execute(t2.resize, ["age_output", "gender_output", "race_output"]); + const gender2 = await t2.gender.data(); + obj.gender = gender2[0] > gender2[1] ? "male" : "female"; + obj.genderScore = Math.round(100 * (gender2[0] > gender2[1] ? gender2[0] : gender2[1])) / 100; + const race = await t2.race.data(); + for (let i = 0; i < race.length; i++) { + if (race[i] > (((_b2 = config3.face.gear) == null ? void 0 : _b2.minConfidence) || 0.2)) + obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); + } + obj.race.sort((a, b) => b.score - a.score); + const ageDistribution = Array.from(await t2.age.data()); + const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]); + let age2 = ageSorted[0][0]; + for (let i = 1; i < ageSorted.length; i++) + age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); + obj.age = Math.round(10 * age2) / 10; + Object.keys(t2).forEach((tensor6) => tf20.dispose(t2[tensor6])); + last5[idx] = obj; + lastCount5 = count2; + lastTime8 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-age.ts +var tf21 = __toESM(require_tfjs_esm()); +var model13; +var last6 = []; +var lastCount6 = 0; +var lastTime9 = 0; +var skipped9 = Number.MAX_SAFE_INTEGER; +async function load11(config3) { + if (env.initial) + model13 = null; + if (!model13) + model13 = await loadModel(config3.face["ssrnet"].modelPathAge); + else if (config3.debug) + log("cached model:", model13["modelUrl"]); + return model13; +} +async function predict10(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model13) + return { age: 0 }; + const skipFrame = skipped9 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; + if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c = last6[idx]) == null ? void 0 : _c.age) && ((_d = last6[idx]) == null ? void 0 : _d.age) > 0) { + skipped9++; + return last6[idx]; + } + skipped9 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) + return; + const t2 = {}; + t2.resize = tf21.image.resizeBilinear(image28, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t2.enhance = tf21.mul(t2.resize, constants.tf255); + const obj = { age: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.age = model13.execute(t2.enhance); + if (t2.age) { + const data = await t2.age.data(); + obj.age = Math.trunc(10 * data[0]) / 10; + } + Object.keys(t2).forEach((tensor6) => tf21.dispose(t2[tensor6])); + last6[idx] = obj; + lastCount6 = count2; + lastTime9 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-gender.ts +var tf22 = __toESM(require_tfjs_esm()); +var model14; +var last7 = []; +var lastCount7 = 0; +var lastTime10 = 0; +var skipped10 = Number.MAX_SAFE_INTEGER; +var rgb = [0.2989, 0.587, 0.114]; +async function load12(config3) { + var _a; + if (env.initial) + model14 = null; + if (!model14) + model14 = await loadModel((_a = config3.face["ssrnet"]) == null ? void 0 : _a.modelPathGender); + else if (config3.debug) + log("cached model:", model14["modelUrl"]); + return model14; +} +async function predict11(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model14) + return { gender: "unknown", genderScore: 0 }; + const skipFrame = skipped10 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; + if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c = last7[idx]) == null ? void 0 : _c.gender) && ((_d = last7[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped10++; + return last7[idx]; + } + skipped10 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) + return; + const t2 = {}; + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t2.enhance = tf22.tidy(() => { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb[0]); + const greenNorm = tf22.mul(green, rgb[1]); + const blueNorm = tf22.mul(blue, rgb[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + const normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.gender = model14.execute(t2.enhance); + const data = await t2.gender.data(); + obj.gender = data[0] > data[1] ? "female" : "male"; + obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; + Object.keys(t2).forEach((tensor6) => tf22.dispose(t2[tensor6])); + last7[idx] = obj; + lastCount7 = count2; + lastTime10 = now(); + resolve(obj); + }); +} + +// src/face/mobilefacenet.ts +var tf23 = __toESM(require_tfjs_esm()); +var model15; +var last8 = []; +var lastCount8 = 0; +var lastTime11 = 0; +var skipped11 = Number.MAX_SAFE_INTEGER; +async function load13(config3) { + var _a; + if (env.initial) + model15 = null; + if (!model15) + model15 = await loadModel((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model15["modelUrl"]); + return model15; +} +async function predict12(input, config3, idx, count2) { + var _a, _b; + if (!(model15 == null ? void 0 : model15["executor"])) + return []; + const skipFrame = skipped11 < (((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; + if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { + skipped11++; + return last8[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf23.image.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t2.data = model15.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf23.dispose(t2[tensor6])); + } + last8[idx] = data; + lastCount8 = count2; + lastTime11 = now(); + resolve(data); + }); +} + +// src/face/insightface.ts +var tf24 = __toESM(require_tfjs_esm()); +var model16; +var last9 = []; +var lastCount9 = 0; +var lastTime12 = 0; +var skipped12 = Number.MAX_SAFE_INTEGER; +async function load14(config3) { + if (env.initial) + model16 = null; + if (!model16) + model16 = await loadModel(config3.face["insightface"].modelPath); + else if (config3.debug) + log("cached model:", model16["modelUrl"]); + return model16; +} +async function predict13(input, config3, idx, count2) { + var _a, _b; + if (!(model16 == null ? void 0 : model16["executor"])) + return []; + const skipFrame = skipped12 < (((_a = config3.face["insightface"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; + if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { + skipped12++; + return last9[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf24.image.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t2.data = model16.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf24.dispose(t2[tensor6])); + } + last9[idx] = data; + lastCount9 = count2; + lastTime12 = now(); + resolve(data); + }); +} + +// src/face/angles.ts +var calculateGaze = (face4) => { + const radians = (pt1, pt2) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); + if (!face4.annotations.rightEyeIris || !face4.annotations.leftEyeIris) + return { bearing: 0, strength: 0 }; + const offsetIris = [0, -0.1]; + const eyeRatio = 1; + const left = (face4.mesh[33][2] || 0) > (face4.mesh[263][2] || 0); + const irisCenter = left ? face4.mesh[473] : face4.mesh[468]; + const eyeCenter = left ? [(face4.mesh[133][0] + face4.mesh[33][0]) / 2, (face4.mesh[133][1] + face4.mesh[33][1]) / 2] : [(face4.mesh[263][0] + face4.mesh[362][0]) / 2, (face4.mesh[263][1] + face4.mesh[362][1]) / 2]; + const eyeSize = left ? [face4.mesh[133][0] - face4.mesh[33][0], face4.mesh[23][1] - face4.mesh[27][1]] : [face4.mesh[263][0] - face4.mesh[362][0], face4.mesh[253][1] - face4.mesh[257][1]]; + const eyeDiff = [ + (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0], + eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1] + ]; + let strength = Math.sqrt(eyeDiff[0] * eyeDiff[0] + eyeDiff[1] * eyeDiff[1]); + strength = Math.min(strength, face4.boxRaw[2] / 2, face4.boxRaw[3] / 2); + const bearing = (radians([0, 0], eyeDiff) + Math.PI / 2) % Math.PI; + return { bearing, strength }; +}; +var calculateFaceAngle = (face4, imageSize) => { + const normalize2 = (v) => { + const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + v[0] /= length; + v[1] /= length; + v[2] /= length; + return v; + }; + const subVectors = (a, b) => { + const x = a[0] - b[0]; + const y = a[1] - b[1]; + const z = a[2] - b[2]; + return [x, y, z]; + }; + const crossVectors = (a, b) => { + const x = a[1] * b[2] - a[2] * b[1]; + const y = a[2] * b[0] - a[0] * b[2]; + const z = a[0] * b[1] - a[1] * b[0]; + return [x, y, z]; + }; + const rotationMatrixToEulerAngle = (r) => { + const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; + let thetaX; + let thetaY; + let thetaZ; + if (r10 < 1) { + if (r10 > -1) { + thetaZ = Math.asin(r10); + thetaY = Math.atan2(-r20, r00); + thetaX = Math.atan2(-r12, r11); + } else { + thetaZ = -Math.PI / 2; + thetaY = -Math.atan2(r21, r22); + thetaX = 0; + } + } else { + thetaZ = Math.PI / 2; + thetaY = Math.atan2(r21, r22); + thetaX = 0; + } + if (Number.isNaN(thetaX)) + thetaX = 0; + if (Number.isNaN(thetaY)) + thetaY = 0; + if (Number.isNaN(thetaZ)) + thetaZ = 0; + return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ }; + }; + const mesh = face4.meshRaw; + if (!mesh || mesh.length < 300) + return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } }; + const size2 = Math.max(face4.boxRaw[2] * imageSize[0], face4.boxRaw[3] * imageSize[1]) / 1.5; + const pts = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size2, pt[1] * imageSize[1] / size2, pt[2]]); + const yAxis = normalize2(subVectors(pts[1], pts[0])); + let xAxis = normalize2(subVectors(pts[3], pts[2])); + const zAxis = normalize2(crossVectors(xAxis, yAxis)); + xAxis = crossVectors(yAxis, zAxis); + const matrix = [ + xAxis[0], + xAxis[1], + xAxis[2], + yAxis[0], + yAxis[1], + yAxis[2], + zAxis[0], + zAxis[1], + zAxis[2] + ]; + const angle = rotationMatrixToEulerAngle(matrix); + const gaze = mesh.length === 478 ? calculateGaze(face4) : { bearing: 0, strength: 0 }; + return { angle, matrix, gaze }; +}; + +// src/face/anthropometry.ts +function calculateCameraDistance(face4, width) { + const f = face4 == null ? void 0 : face4.annotations; + if (!f) + return 0; + const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width; + const cameraDistance = Math.round(1.17 / irisSize) / 100; + return cameraDistance; +} + +// src/face/face.ts +var detectFace = async (instance, input) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + let timeStamp = now(); + let ageRes; + let gearRes; + let genderRes; + let emotionRes; + let mobilefacenetRes; + let insightfaceRes; + let antispoofRes; + let livenessRes; + let descRes; + const faceRes = []; + instance.state = "run:face"; + const faces = await predict4(input, instance.config); + instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + if (!input.shape || input.shape.length !== 4) + return []; + if (!faces) + return []; + for (let i = 0; i < faces.length; i++) { + instance.analyze("Get Face"); + if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) { + log("Face object is disposed:", faces[i].tensor); + continue; + } + if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { + const masked = await mask(faces[i]); + tf25.dispose(faces[i].tensor); + if (masked) + faces[i].tensor = masked; + } + const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; + instance.analyze("Start Emotion:"); + if (instance.config.async) { + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + } else { + instance.state = "run:emotion"; + timeStamp = now(); + emotionRes = ((_c = instance.config.face.emotion) == null ? void 0 : _c.enabled) ? await predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Emotion:"); + instance.analyze("Start AntiSpoof:"); + if (instance.config.async) { + antispoofRes = ((_d = instance.config.face.antispoof) == null ? void 0 : _d.enabled) ? predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:antispoof"; + timeStamp = now(); + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End AntiSpoof:"); + instance.analyze("Start Liveness:"); + if (instance.config.async) { + livenessRes = ((_f = instance.config.face.liveness) == null ? void 0 : _f.enabled) ? predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:liveness"; + timeStamp = now(); + livenessRes = ((_g = instance.config.face.liveness) == null ? void 0 : _g.enabled) ? await predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Liveness:"); + instance.analyze("Start GEAR:"); + if (instance.config.async) { + gearRes = ((_h = instance.config.face.gear) == null ? void 0 : _h.enabled) ? predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:gear"; + timeStamp = now(); + gearRes = ((_i = instance.config.face.gear) == null ? void 0 : _i.enabled) ? await predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.gear = Math.trunc(now() - timeStamp); + } + instance.analyze("End GEAR:"); + instance.analyze("Start SSRNet:"); + if (instance.config.async) { + ageRes = ((_j = instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) ? predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_k = instance.config.face["ssrnet"]) == null ? void 0 : _k.enabled) ? predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:ssrnet"; + timeStamp = now(); + ageRes = ((_l = instance.config.face["ssrnet"]) == null ? void 0 : _l.enabled) ? await predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.ssrnet = Math.trunc(now() - timeStamp); + } + instance.analyze("End SSRNet:"); + instance.analyze("Start MobileFaceNet:"); + if (instance.config.async) { + mobilefacenetRes = ((_n = instance.config.face["mobilefacenet"]) == null ? void 0 : _n.enabled) ? predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + mobilefacenetRes = ((_o = instance.config.face["mobilefacenet"]) == null ? void 0 : _o.enabled) ? await predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End MobileFaceNet:"); + instance.analyze("Start InsightFace:"); + if (instance.config.async) { + insightfaceRes = ((_p = instance.config.face["insightface"]) == null ? void 0 : _p.enabled) ? predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + insightfaceRes = ((_q = instance.config.face["insightface"]) == null ? void 0 : _q.enabled) ? await predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End InsightFace:"); + instance.analyze("Start Description:"); + if (instance.config.async) { + descRes = predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + } else { + instance.state = "run:description"; + timeStamp = now(); + descRes = await predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Description:"); + if (instance.config.async) { + [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]); + } + instance.analyze("Finish Face:"); + if (((_r = instance.config.face["ssrnet"]) == null ? void 0 : _r.enabled) && ageRes && genderRes) { + descRes = { + ...descRes, + age: ageRes.age, + gender: genderRes.gender, + genderScore: genderRes.genderScore + }; + } + if (((_s = instance.config.face.gear) == null ? void 0 : _s.enabled) && gearRes) { + descRes = { + ...descRes, + age: gearRes.age, + gender: gearRes.gender, + genderScore: gearRes.genderScore, + race: gearRes.race + }; + } + if (((_t = instance.config.face["mobilefacenet"]) == null ? void 0 : _t.enabled) && mobilefacenetRes) { + descRes.descriptor = mobilefacenetRes; + } + if (((_u = instance.config.face["insightface"]) == null ? void 0 : _u.enabled) && insightfaceRes) { + descRes.descriptor = insightfaceRes; + } + const irisSize = ((_v = instance.config.face.iris) == null ? void 0 : _v.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; + const tensor6 = ((_w = instance.config.face.detector) == null ? void 0 : _w.return) ? tf25.squeeze(faces[i].tensor) : null; + tf25.dispose(faces[i].tensor); + if (faces[i].tensor) + delete faces[i].tensor; + const res = { + ...faces[i], + id: i + }; + if (descRes.age) + res.age = descRes.age; + if (descRes.gender) + res.gender = descRes.gender; + if (descRes.genderScore) + res.genderScore = descRes.genderScore; + if (descRes.descriptor) + res.embedding = descRes.descriptor; + if (descRes.race) + res.race = descRes.race; + if (emotionRes) + res.emotion = emotionRes; + if (antispoofRes) + res.real = antispoofRes; + if (livenessRes) + res.live = livenessRes; + if (irisSize > 0) + res.distance = irisSize; + if (rotation) + res.rotation = rotation; + if (tensor6) + res.tensor = tensor6; + faceRes.push(res); + instance.analyze("End Face"); + } + instance.analyze("End FaceMesh:"); + if (instance.config.async) { + if (instance.performance.face) + delete instance.performance.face; + if (instance.performance.age) + delete instance.performance.age; + if (instance.performance.gender) + delete instance.performance.gender; + if (instance.performance.emotion) + delete instance.performance.emotion; + } + return faceRes; +}; + +// src/hand/fingerdef.ts +var Finger = { + thumb: 0, + index: 1, + middle: 2, + ring: 3, + pinky: 4, + all: [0, 1, 2, 3, 4], + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + pointsMapping: { + 0: [[0, 1], [1, 2], [2, 3], [3, 4]], + 1: [[0, 5], [5, 6], [6, 7], [7, 8]], + 2: [[0, 9], [9, 10], [10, 11], [11, 12]], + 3: [[0, 13], [13, 14], [14, 15], [15, 16]], + 4: [[0, 17], [17, 18], [18, 19], [19, 20]] + }, + getName: (value) => Finger.nameMapping[value], + getPoints: (value) => Finger.pointsMapping[value] +}; +var FingerCurl = { + none: 0, + half: 1, + full: 2, + nameMapping: { 0: "none", 1: "half", 2: "full" }, + getName: (value) => FingerCurl.nameMapping[value] +}; +var FingerDirection = { + verticalUp: 0, + verticalDown: 1, + horizontalLeft: 2, + horizontalRight: 3, + diagonalUpRight: 4, + diagonalUpLeft: 5, + diagonalDownRight: 6, + diagonalDownLeft: 7, + nameMapping: { 0: "verticalUp", 1: "verticalDown", 2: "horizontalLeft", 3: "horizontalRight", 4: "diagonalUpRight", 5: "diagonalUpLeft", 6: "diagonalDownRight", 7: "diagonalDownLeft" }, + getName: (value) => FingerDirection.nameMapping[value] +}; +var FingerGesture = class { + constructor(name) { + __publicField(this, "name"); + __publicField(this, "curls"); + __publicField(this, "directions"); + __publicField(this, "weights"); + __publicField(this, "weightsRelative"); + this.name = name; + this.curls = {}; + this.directions = {}; + this.weights = [1, 1, 1, 1, 1]; + this.weightsRelative = [1, 1, 1, 1, 1]; + } + curl(finger, curl, confidence) { + if (typeof this.curls[finger] === "undefined") + this.curls[finger] = []; + this.curls[finger].push([curl, confidence]); + } + direction(finger, position, confidence) { + if (!this.directions[finger]) + this.directions[finger] = []; + this.directions[finger].push([position, confidence]); + } + weight(finger, weight) { + this.weights[finger] = weight; + const total = this.weights.reduce((a, b) => a + b, 0); + this.weightsRelative = this.weights.map((el) => el * 5 / total); + } + matchAgainst(detectedCurls, detectedDirections) { + let confidence = 0; + for (const fingerIdx in detectedCurls) { + const detectedCurl = detectedCurls[fingerIdx]; + const expectedCurls = this.curls[fingerIdx]; + if (typeof expectedCurls === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedCurl, score] of expectedCurls) { + if (detectedCurl === expectedCurl) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + for (const fingerIdx in detectedDirections) { + const detectedDirection = detectedDirections[fingerIdx]; + const expectedDirections = this.directions[fingerIdx]; + if (typeof expectedDirections === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedDirection, score] of expectedDirections) { + if (detectedDirection === expectedDirection) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + return confidence / 10; + } +}; + +// src/hand/fingergesture.ts +var { thumb, index, middle, ring, pinky } = Finger; +var { none, half, full } = FingerCurl; +var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection; +var ThumbsUp = new FingerGesture("thumbs up"); +ThumbsUp.curl(thumb, none, 1); +ThumbsUp.direction(thumb, verticalUp, 1); +ThumbsUp.direction(thumb, diagonalUpLeft, 0.25); +ThumbsUp.direction(thumb, diagonalUpRight, 0.25); +for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) { + ThumbsUp.curl(finger, full, 1); + ThumbsUp.direction(finger, horizontalLeft, 1); + ThumbsUp.direction(finger, horizontalRight, 1); +} +var Victory = new FingerGesture("victory"); +Victory.curl(thumb, half, 0.5); +Victory.curl(thumb, none, 0.5); +Victory.direction(thumb, verticalUp, 1); +Victory.direction(thumb, diagonalUpLeft, 1); +Victory.curl(index, none, 1); +Victory.direction(index, verticalUp, 0.75); +Victory.direction(index, diagonalUpLeft, 1); +Victory.curl(middle, none, 1); +Victory.direction(middle, verticalUp, 1); +Victory.direction(middle, diagonalUpLeft, 0.75); +Victory.curl(ring, full, 1); +Victory.direction(ring, verticalUp, 0.2); +Victory.direction(ring, diagonalUpLeft, 1); +Victory.direction(ring, horizontalLeft, 0.2); +Victory.curl(pinky, full, 1); +Victory.direction(pinky, verticalUp, 0.2); +Victory.direction(pinky, diagonalUpLeft, 1); +Victory.direction(pinky, horizontalLeft, 0.2); +Victory.weight(index, 2); +Victory.weight(middle, 2); +var Point = new FingerGesture("point"); +Point.curl(thumb, full, 1); +Point.curl(index, none, 0.5); +Point.curl(middle, full, 0.5); +Point.curl(ring, full, 0.5); +Point.curl(pinky, full, 0.5); +Point.weight(index, 2); +Point.weight(middle, 2); +var MiddleFinger = new FingerGesture("middle finger"); +MiddleFinger.curl(thumb, none, 1); +MiddleFinger.curl(index, full, 0.5); +MiddleFinger.curl(middle, full, 0.5); +MiddleFinger.curl(ring, full, 0.5); +MiddleFinger.curl(pinky, full, 0.5); +MiddleFinger.weight(index, 2); +MiddleFinger.weight(middle, 2); +var OpenPalm = new FingerGesture("open palm"); +OpenPalm.curl(thumb, none, 0.75); +OpenPalm.curl(index, none, 0.75); +OpenPalm.curl(middle, none, 0.75); +OpenPalm.curl(ring, none, 0.75); +OpenPalm.curl(pinky, none, 0.75); +var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm]; + +// src/hand/fingerpose.ts +var minConfidence = 0.7; +var options3 = { + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + DISTANCE_VOTE_POWER: 1.1, + SINGLE_ANGLE_VOTE_POWER: 0.9, + TOTAL_ANGLE_VOTE_POWER: 1.6 +}; +function calculateSlope(point1x, point1y, point2x, point2y) { + const value = (point1y - point2y) / (point1x - point2x); + let slope = Math.atan(value) * 180 / Math.PI; + if (slope <= 0) + slope = -slope; + else if (slope > 0) + slope = 180 - slope; + return slope; +} +function getSlopes(point1, point2) { + if (!point1 || !point2) + return [0, 0]; + const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]); + if (point1.length === 2) + return slopeXY; + const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]); + return [slopeXY, slopeYZ]; +} +function angleOrientationAt(angle, weightageAt = 1) { + let isVertical = 0; + let isDiagonal = 0; + let isHorizontal = 0; + if (angle >= 75 && angle <= 105) + isVertical = 1 * weightageAt; + else if (angle >= 25 && angle <= 155) + isDiagonal = 1 * weightageAt; + else + isHorizontal = 1 * weightageAt; + return [isVertical, isDiagonal, isHorizontal]; +} +function estimateFingerCurl(startPoint, midPoint, endPoint) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const start_mid_z_dist = startPoint[2] - midPoint[2]; + const start_end_z_dist = startPoint[2] - endPoint[2]; + const mid_end_z_dist = midPoint[2] - endPoint[2]; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist); + let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist); + if (cos_in > 1) + cos_in = 1; + else if (cos_in < -1) + cos_in = -1; + let angleOfCurve = Math.acos(cos_in); + angleOfCurve = 57.2958 * angleOfCurve % 180; + let fingerCurl; + if (angleOfCurve > options3.NO_CURL_START_LIMIT) + fingerCurl = FingerCurl.none; + else if (angleOfCurve > options3.HALF_CURL_START_LIMIT) + fingerCurl = FingerCurl.half; + else + fingerCurl = FingerCurl.full; + return fingerCurl; +} +function estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + if (max_dist_x === Math.abs(start_end_x_dist)) { + if (start_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else if (max_dist_x === Math.abs(start_mid_x_dist)) { + if (start_mid_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else { + if (mid_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } + return estimatedDirection; +} +function estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) { + let estimatedDirection; + if (max_dist_y === Math.abs(start_end_y_dist)) { + if (start_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else if (max_dist_y === Math.abs(start_mid_y_dist)) { + if (start_mid_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else { + if (mid_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } + return estimatedDirection; +} +function estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + if (reqd_vertical_direction === FingerDirection.verticalUp) { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalUpLeft; + else + estimatedDirection = FingerDirection.diagonalUpRight; + } else { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalDownLeft; + else + estimatedDirection = FingerDirection.diagonalDownRight; + } + return estimatedDirection; +} +function calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist)); + const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist)); + let voteVertical = 0; + let voteDiagonal = 0; + let voteHorizontal = 0; + const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 1e-5); + if (start_end_x_y_dist_ratio > 1.5) + voteVertical += options3.DISTANCE_VOTE_POWER; + else if (start_end_x_y_dist_ratio > 0.66) + voteDiagonal += options3.DISTANCE_VOTE_POWER; + else + voteHorizontal += options3.DISTANCE_VOTE_POWER; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist); + const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist); + let calc_start_point_x = startPoint[0]; + let calc_start_point_y = startPoint[1]; + let calc_end_point_x = endPoint[0]; + let calc_end_point_y = endPoint[1]; + if (max_dist === start_mid_dist) { + calc_end_point_x = endPoint[0]; + calc_end_point_y = endPoint[1]; + } else if (max_dist === mid_end_dist) { + calc_start_point_x = midPoint[0]; + calc_start_point_y = midPoint[1]; + } + const calcStartPoint = [calc_start_point_x, calc_start_point_y]; + const calcEndPoint = [calc_end_point_x, calc_end_point_y]; + const totalAngle = getSlopes(calcStartPoint, calcEndPoint); + const votes = angleOrientationAt(totalAngle, options3.TOTAL_ANGLE_VOTE_POWER); + voteVertical += votes[0]; + voteDiagonal += votes[1]; + voteHorizontal += votes[2]; + for (const fingerSlope of fingerSlopes) { + const fingerVotes = angleOrientationAt(fingerSlope, options3.SINGLE_ANGLE_VOTE_POWER); + voteVertical += fingerVotes[0]; + voteDiagonal += fingerVotes[1]; + voteHorizontal += fingerVotes[2]; + } + let estimatedDirection; + if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } else { + estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } + return estimatedDirection; +} +function estimate(landmarks) { + const slopesXY = []; + const slopesYZ = []; + const fingerCurls = []; + const fingerDirections = []; + if (!landmarks) + return { curls: fingerCurls, directions: fingerDirections }; + for (const finger of Finger.all) { + const points = Finger.getPoints(finger); + const slopeAtXY = []; + const slopeAtYZ = []; + for (const point2 of points) { + const point1 = landmarks[point2[0]]; + const point22 = landmarks[point2[1]]; + const slopes = getSlopes(point1, point22); + const slopeXY = slopes[0]; + const slopeYZ = slopes[1]; + slopeAtXY.push(slopeXY); + slopeAtYZ.push(slopeYZ); + } + slopesXY.push(slopeAtXY); + slopesYZ.push(slopeAtYZ); + } + for (const finger of Finger.all) { + const pointIndexAt = finger === Finger.thumb ? 1 : 0; + const fingerPointsAt = Finger.getPoints(finger); + const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]]; + const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]]; + const endPoint = landmarks[fingerPointsAt[3][1]]; + const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint); + const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt)); + fingerCurls[finger] = fingerCurled; + fingerDirections[finger] = fingerPosition; + } + return { curls: fingerCurls, directions: fingerDirections }; +} +function analyze(keypoints) { + if (!keypoints || keypoints.length === 0) + return null; + const estimatorRes = estimate(keypoints); + const landmarks = {}; + for (const fingerIdx of Finger.all) { + landmarks[Finger.getName(fingerIdx)] = { + curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]), + direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]) + }; + } + return landmarks; +} +function match(keypoints) { + const poses = []; + if (!keypoints || keypoints.length === 0) + return poses; + const estimatorRes = estimate(keypoints); + for (const gesture2 of fingergesture_default) { + const confidence = gesture2.matchAgainst(estimatorRes.curls, estimatorRes.directions); + if (confidence >= minConfidence) + poses.push({ name: gesture2.name, confidence }); + } + return poses; +} + +// src/gesture/gesture.ts +var body2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const leftWrist = res[i].keypoints.find((a) => a.part === "leftWrist"); + const rightWrist = res[i].keypoints.find((a) => a.part === "rightWrist"); + const nose = res[i].keypoints.find((a) => a.part === "nose"); + if (nose && leftWrist && rightWrist && leftWrist.position[1] < nose.position[1] && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "i give up" }); + else if (nose && leftWrist && leftWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise left hand" }); + else if (nose && rightWrist && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise right hand" }); + const leftShoulder = res[i].keypoints.find((a) => a.part === "leftShoulder"); + const rightShoulder = res[i].keypoints.find((a) => a.part === "rightShoulder"); + if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) { + gestures.push({ body: i, gesture: `leaning ${leftShoulder.position[1] > rightShoulder.position[1] ? "left" : "right"}` }); + } + } + return gestures; +}; +var face2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (res[i].mesh && res[i].mesh.length > 450) { + const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0); + const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0]; + if (Math.abs(zDiff / xDiff) <= 0.15) + gestures.push({ face: i, gesture: "facing center" }); + else + gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? "left" : "right"}` }); + const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); + if (openLeft < 0.2) + gestures.push({ face: i, gesture: "blink left eye" }); + const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); + if (openRight < 0.2) + gestures.push({ face: i, gesture: "blink right eye" }); + const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1])); + if (mouthOpen > 10) + gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` }); + const chinDepth = res[i].mesh[152][2] || 0; + if (Math.abs(chinDepth) > 10) + gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? "up" : "down"}` }); + } + } + return gestures; +}; +var iris2 = (res) => { + var _a, _b, _c, _d; + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[0]) || !((_d = (_c = res[i].annotations) == null ? void 0 : _c.rightEyeIris) == null ? void 0 : _d[0])) + continue; + const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; + const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; + const areaLeft = Math.abs(sizeXLeft * sizeYLeft); + const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0]; + const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1]; + const areaRight = Math.abs(sizeXRight * sizeYRight); + let center = false; + const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight); + if (difference < 0.25) { + center = true; + gestures.push({ iris: i, gesture: "facing center" }); + } + const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2]; + const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2]; + if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) + center = false; + if (leftIrisCenterX > rightIrisCenterX) { + if (leftIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (rightIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking left" }); + } + const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3]; + const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3]; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + center = false; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) + gestures.push({ iris: i, gesture: "looking down" }); + if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + gestures.push({ iris: i, gesture: "looking up" }); + if (center) + gestures.push({ iris: i, gesture: "looking center" }); + } + return gestures; +}; +var hand2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const fingers = []; + if (res[i].annotations) { + for (const [finger, pos] of Object.entries(res[i].annotations)) { + if (finger !== "palmBase" && Array.isArray(pos) && pos[0]) + fingers.push({ name: finger.toLowerCase(), position: pos[0] }); + } + } + if (fingers && fingers.length > 0) { + const closest = fingers.reduce((best, a) => (best.position[2] || 0) < (a.position[2] || 0) ? best : a); + gestures.push({ hand: i, gesture: `${closest.name} forward` }); + const highest = fingers.reduce((best, a) => best.position[1] < a.position[1] ? best : a); + gestures.push({ hand: i, gesture: `${highest.name} up` }); + } + if (res[i].keypoints) { + const poses = match(res[i].keypoints); + for (const pose of poses) + gestures.push({ hand: i, gesture: pose.name }); + } + } + return gestures; +}; + +// src/hand/handposedetector.ts +var tf27 = __toESM(require_tfjs_esm()); + +// src/hand/handposeutil.ts +var tf26 = __toESM(require_tfjs_esm()); +function getBoxSize2(box) { + return [ + Math.abs(box.endPoint[0] - box.startPoint[0]), + Math.abs(box.endPoint[1] - box.startPoint[1]) + ]; +} +function getBoxCenter2(box) { + return [ + box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, + box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2 + ]; +} +function cutBoxFromImageAndResize(box, image28, cropSize) { + const h = image28.shape[1]; + const w = image28.shape[2]; + const boxes = [[ + box.startPoint[1] / h, + box.startPoint[0] / w, + box.endPoint[1] / h, + box.endPoint[0] / w + ]]; + return tf26.image.cropAndResize(image28, boxes, [0], cropSize); +} +function scaleBoxCoordinates2(box, factor) { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + const palmLandmarks = box.palmLandmarks.map((coord) => { + const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]]; + return scaledCoord; + }); + return { startPoint, endPoint, palmLandmarks, confidence: box.confidence }; +} +function enlargeBox2(box, factor = 1.5) { + const center = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const newHalfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]]; + const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function squarifyBox2(box) { + const centers = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const maxEdge = Math.max(...size2); + const halfSize = maxEdge / 2; + const startPoint = [centers[0] - halfSize, centers[1] - halfSize]; + const endPoint = [centers[0] + halfSize, centers[1] + halfSize]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function normalizeRadians2(angle) { + return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +} +function computeRotation2(point1, point2) { + const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); + return normalizeRadians2(radians); +} +var buildTranslationMatrix2 = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +function dot2(v1, v2) { + let product = 0; + for (let i = 0; i < v1.length; i++) { + product += v1[i] * v2[i]; + } + return product; +} +function getColumnFrom2DArr2(arr, columnIndex) { + const column = []; + for (let i = 0; i < arr.length; i++) { + column.push(arr[i][columnIndex]); + } + return column; +} +function multiplyTransformMatrices2(mat1, mat2) { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) { + product[row].push(dot2(mat1[row], getColumnFrom2DArr2(mat2, col))); + } + } + return product; +} +function buildRotationMatrix2(rotation, center) { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix2(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices2(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix2(-center[0], -center[1]); + return multiplyTransformMatrices2(translationTimesRotation, negativeTranslationMatrix); +} +function invertTransformMatrix2(matrix) { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [ + -dot2(rotationComponent[0], translationComponent), + -dot2(rotationComponent[1], translationComponent) + ]; + return [ + rotationComponent[0].concat(invertedTranslation[0]), + rotationComponent[1].concat(invertedTranslation[1]), + [0, 0, 1] + ]; +} +function rotatePoint2(homogeneousCoordinate, rotationMatrix) { + return [ + dot2(homogeneousCoordinate, rotationMatrix[0]), + dot2(homogeneousCoordinate, rotationMatrix[1]) + ]; +} + +// src/hand/handposeanchors.ts +var anchors2 = [ + { x: 0.015625, y: 0.015625 }, + { x: 0.015625, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 } +]; + +// src/hand/handposedetector.ts +var HandDetector = class { + constructor(model23) { + __publicField(this, "model"); + __publicField(this, "anchors"); + __publicField(this, "anchorsTensor"); + __publicField(this, "inputSize"); + __publicField(this, "inputSizeTensor"); + __publicField(this, "doubleInputSizeTensor"); + var _a, _b, _c, _d; + this.model = model23; + this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); + this.anchorsTensor = tf27.tensor2d(this.anchors); + this.inputSize = ((_d = (_c = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c.shape) == null ? void 0 : _d[2]) || 0; + this.inputSizeTensor = tf27.tensor1d([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = tf27.tensor1d([this.inputSize * 2, this.inputSize * 2]); + } + normalizeBoxes(boxes) { + const t2 = {}; + t2.boxOffsets = tf27.slice(boxes, [0, 0], [-1, 2]); + t2.boxSizes = tf27.slice(boxes, [0, 2], [-1, 2]); + t2.div = tf27.div(t2.boxOffsets, this.inputSizeTensor); + t2.boxCenterPoints = tf27.add(t2.div, this.anchorsTensor); + t2.halfBoxSizes = tf27.div(t2.boxSizes, this.doubleInputSizeTensor); + t2.sub = tf27.sub(t2.boxCenterPoints, t2.halfBoxSizes); + t2.startPoints = tf27.mul(t2.sub, this.inputSizeTensor); + t2.add = tf27.add(t2.boxCenterPoints, t2.halfBoxSizes); + t2.endPoints = tf27.mul(t2.add, this.inputSizeTensor); + const res = tf27.concat2d([t2.startPoints, t2.endPoints], 1); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + normalizeLandmarks(rawPalmLandmarks, index2) { + const t2 = {}; + t2.reshape = tf27.reshape(rawPalmLandmarks, [-1, 7, 2]); + t2.div = tf27.div(t2.reshape, this.inputSizeTensor); + t2.landmarks = tf27.add(t2.div, this.anchors[index2] ? this.anchors[index2] : 0); + const res = tf27.mul(t2.landmarks, this.inputSizeTensor); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + async predict(input, config3) { + var _a; + const t2 = {}; + t2.resize = tf27.image.resizeBilinear(input, [this.inputSize, this.inputSize]); + t2.div = tf27.div(t2.resize, constants.tf127); + t2.image = tf27.sub(t2.div, constants.tf1); + t2.batched = this.model.execute(t2.image); + t2.predictions = tf27.squeeze(t2.batched); + t2.slice = tf27.slice(t2.predictions, [0, 0], [-1, 1]); + t2.sigmoid = tf27.sigmoid(t2.slice); + t2.scores = tf27.squeeze(t2.sigmoid); + const scores = await t2.scores.data(); + t2.boxes = tf27.slice(t2.predictions, [0, 1], [-1, 4]); + t2.norm = this.normalizeBoxes(t2.boxes); + t2.nms = await tf27.image.nonMaxSuppressionAsync(t2.norm, t2.scores, 3 * (((_a = config3.hand) == null ? void 0 : _a.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + const nms = await t2.nms.array(); + const hands = []; + for (const index2 of nms) { + const p = {}; + p.box = tf27.slice(t2.norm, [index2, 0], [1, -1]); + p.slice = tf27.slice(t2.predictions, [index2, 5], [1, 14]); + p.norm = this.normalizeLandmarks(p.slice, index2); + p.palmLandmarks = tf27.reshape(p.norm, [-1, 2]); + const box = await p.box.data(); + const startPoint = box.slice(0, 2); + const endPoint = box.slice(2, 4); + const palmLandmarks = await p.palmLandmarks.array(); + const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; + const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); + hands.push(scaled); + Object.keys(p).forEach((tensor6) => tf27.dispose(p[tensor6])); + } + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return hands; + } +}; + +// src/hand/handposepipeline.ts +var tf28 = __toESM(require_tfjs_esm()); +var palmBoxEnlargeFactor = 5; +var handBoxEnlargeFactor = 1.65; +var palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2]; +var palmLandmarksPalmBase = 0; +var palmLandmarksMiddleFingerBase = 2; +var lastTime13 = 0; +var HandPipeline = class { + constructor(handDetector, handPoseModel2) { + __publicField(this, "handDetector"); + __publicField(this, "handPoseModel"); + __publicField(this, "inputSize"); + __publicField(this, "storedBoxes"); + __publicField(this, "skipped"); + __publicField(this, "detectedHands"); + var _a, _b, _c; + this.handDetector = handDetector; + this.handPoseModel = handPoseModel2; + this.inputSize = ((_c = (_b = (_a = this.handPoseModel) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[2]) || 0; + this.storedBoxes = []; + this.skipped = Number.MAX_SAFE_INTEGER; + this.detectedHands = 0; + } + calculateLandmarksBoundingBox(landmarks) { + const xs = landmarks.map((d) => d[0]); + const ys = landmarks.map((d) => d[1]); + const startPoint = [Math.min(...xs), Math.min(...ys)]; + const endPoint = [Math.max(...xs), Math.max(...ys)]; + return { startPoint, endPoint }; + } + getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) { + const rotatedPalmLandmarks = palmLandmarks.map((coord) => rotatePoint2([...coord, 1], rotationMatrix)); + const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks); + return enlargeBox2(squarifyBox2(boxAroundPalm), palmBoxEnlargeFactor); + } + getBoxForHandLandmarks(landmarks) { + const boundingBox = this.calculateLandmarksBoundingBox(landmarks); + const boxAroundHand = enlargeBox2(squarifyBox2(boundingBox), handBoxEnlargeFactor); + boxAroundHand.palmLandmarks = []; + for (let i = 0; i < palmLandmarkIds.length; i++) { + boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2)); + } + return boxAroundHand; + } + transformRawCoords(rawCoords, box2, angle, rotationMatrix) { + const boxSize = getBoxSize2(box2); + const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2]; + const coordsScaled = rawCoords.map((coord) => [ + scaleFactor[0] * (coord[0] - this.inputSize / 2), + scaleFactor[1] * (coord[1] - this.inputSize / 2), + scaleFactor[2] * coord[2] + ]); + const coordsRotationMatrix = buildRotationMatrix2(angle, [0, 0]); + const coordsRotated = coordsScaled.map((coord) => { + const rotated = rotatePoint2(coord, coordsRotationMatrix); + return [...rotated, coord[2]]; + }); + const inverseRotationMatrix = invertTransformMatrix2(rotationMatrix); + const boxCenter = [...getBoxCenter2(box2), 1]; + const originalBoxCenter = [ + dot2(boxCenter, inverseRotationMatrix[0]), + dot2(boxCenter, inverseRotationMatrix[1]) + ]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + originalBoxCenter[0]), + Math.trunc(coord[1] + originalBoxCenter[1]), + Math.trunc(coord[2]) + ]); + } + async estimateHands(image28, config3) { + let useFreshBox = false; + let boxes; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime13; + const skipFrame = this.skipped < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + if (config3.skipAllowed) + this.skipped++; + if (boxes && boxes.length > 0 && (boxes.length !== this.detectedHands && this.detectedHands !== config3.hand.maxDetected || !config3.hand.landmarks)) { + this.detectedHands = 0; + this.storedBoxes = [...boxes]; + if (this.storedBoxes.length > 0) + useFreshBox = true; + } + const hands = []; + for (let i = 0; i < this.storedBoxes.length; i++) { + const currentBox = this.storedBoxes[i]; + if (!currentBox) + continue; + if (config3.hand.landmarks) { + const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; + const palmCenter = getBoxCenter2(currentBox); + const palmCenterNormalized = [palmCenter[0] / image28.shape[2], palmCenter[1] / image28.shape[1]]; + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? tf28.image.rotateWithOffset(image28, angle, 0, palmCenterNormalized) : image28.clone(); + const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); + const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; + const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); + const handImage = tf28.div(croppedInput, constants.tf255); + tf28.dispose(croppedInput); + tf28.dispose(rotatedImage); + const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); + lastTime13 = now(); + tf28.dispose(handImage); + const confidence = (await confidenceT.data())[0]; + tf28.dispose(confidenceT); + if (confidence >= config3.hand.minConfidence / 4) { + const keypointsReshaped = tf28.reshape(keypoints, [-1, 3]); + const rawCoords = await keypointsReshaped.array(); + tf28.dispose(keypoints); + tf28.dispose(keypointsReshaped); + const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); + const nextBoundingBox = this.getBoxForHandLandmarks(coords); + this.storedBoxes[i] = { ...nextBoundingBox, confidence }; + const result = { + landmarks: coords, + confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: confidence, + box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint } + }; + hands.push(result); + } else { + this.storedBoxes[i] = null; + } + tf28.dispose(keypoints); + } else { + const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); + const result = { + confidence: currentBox.confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: 0, + box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint }, + landmarks: [] + }; + hands.push(result); + } + } + this.storedBoxes = this.storedBoxes.filter((a) => a !== null); + this.detectedHands = hands.length; + if (hands.length > config3.hand.maxDetected) + hands.length = config3.hand.maxDetected; + return hands; + } +}; + +// src/hand/handpose.ts +var meshAnnotations2 = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + palm: [0] +}; +var handDetectorModel; +var handPoseModel; +var handPipeline; +async function predict14(input, config3) { + const predictions = await handPipeline.estimateHands(input, config3); + if (!predictions) + return []; + const hands = []; + for (let i = 0; i < predictions.length; i++) { + const annotations2 = {}; + if (predictions[i].landmarks) { + for (const key of Object.keys(meshAnnotations2)) { + annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]); + } + } + const keypoints = predictions[i].landmarks; + let box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; + let boxRaw = [0, 0, 0, 0]; + if (keypoints && keypoints.length > 0) { + for (const pt of keypoints) { + if (pt[0] < box[0]) + box[0] = pt[0]; + if (pt[1] < box[1]) + box[1] = pt[1]; + if (pt[0] > box[2]) + box[2] = pt[0]; + if (pt[1] > box[3]) + box[3] = pt[1]; + } + box[2] -= box[0]; + box[3] -= box[1]; + boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)]; + } else { + box = predictions[i].box ? [ + Math.trunc(Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.max(0, predictions[i].box.topLeft[1])), + Math.trunc(Math.min(input.shape[2] || 0, predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.min(input.shape[1] || 0, predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])) + ] : [0, 0, 0, 0]; + boxRaw = [ + predictions[i].box.topLeft[0] / (input.shape[2] || 0), + predictions[i].box.topLeft[1] / (input.shape[1] || 0), + (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0), + (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0) + ]; + } + const landmarks = analyze(keypoints); + hands.push({ + id: i, + score: Math.round(100 * predictions[i].confidence) / 100, + boxScore: Math.round(100 * predictions[i].boxConfidence) / 100, + fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100, + label: "hand", + box, + boxRaw, + keypoints, + annotations: annotations2, + landmarks + }); + } + return hands; +} +async function load15(config3) { + var _a, _b; + if (env.initial) { + handDetectorModel = null; + handPoseModel = null; + } + if (!handDetectorModel || !handPoseModel) { + [handDetectorModel, handPoseModel] = await Promise.all([ + config3.hand.enabled ? loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath) : null, + config3.hand.landmarks ? loadModel((_b = config3.hand.skeleton) == null ? void 0 : _b.modelPath) : null + ]); + } else { + if (config3.debug) + log("cached model:", handDetectorModel["modelUrl"]); + if (config3.debug) + log("cached model:", handPoseModel["modelUrl"]); + } + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) + handPipeline = new HandPipeline(handDetector, handPoseModel); + return [handDetectorModel, handPoseModel]; +} + +// src/hand/handtrack.ts +var tf29 = __toESM(require_tfjs_esm()); +var models2 = [null, null]; +var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; +var inputSize7 = [[0, 0], [0, 0]]; +var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; +var faceIndex = 4; +var boxExpandFact = 1.6; +var maxDetectorResolution = 512; +var detectorExpandFact = 1.4; +var skipped13 = Number.MAX_SAFE_INTEGER; +var lastTime14 = 0; +var outputSize = [0, 0]; +var cache4 = { + boxes: [], + hands: [] +}; +var fingerMap = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + base: [0], + palm: [0, 17, 13, 9, 5, 1, 0] +}; +async function loadDetect2(config3) { + var _a; + if (env.initial) + models2[0] = null; + if (!models2[0]) { + fakeOps(["tensorlistreserve", "enter", "tensorlistfromtensor", "merge", "loopcond", "switch", "exit", "tensorliststack", "nextiteration", "tensorlistsetitem", "tensorlistgetitem", "reciprocal", "shape", "split", "where"], config3); + models2[0] = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + const inputs = models2[0]["executor"] ? Object.values(models2[0].modelSignature["inputs"]) : void 0; + inputSize7[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[0]["modelUrl"]); + return models2[0]; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) + models2[1] = null; + if (!models2[1]) { + models2[1] = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + const inputs = models2[1]["executor"] ? Object.values(models2[1].modelSignature["inputs"]) : void 0; + inputSize7[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[1]["modelUrl"]); + return models2[1]; +} +async function detectHands(input, config3) { + const hands = []; + if (!input || !models2[0]) + return hands; + const t2 = {}; + const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); + const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); + const width = Math.round(height * ratio2 / 8) * 8; + t2.resize = tf29.image.resizeBilinear(input, [height, width]); + t2.cast = tf29.cast(t2.resize, "int32"); + [t2.rawScores, t2.rawBoxes] = await models2[0].executeAsync(t2.cast, modelOutputNodes); + t2.boxes = tf29.squeeze(t2.rawBoxes, [0, 2]); + t2.scores = tf29.squeeze(t2.rawScores, [0]); + const classScores = tf29.unstack(t2.scores, 1); + tf29.dispose(classScores[faceIndex]); + classScores.splice(faceIndex, 1); + t2.filtered = tf29.stack(classScores, 1); + tf29.dispose(classScores); + t2.max = tf29.max(t2.filtered, 1); + t2.argmax = tf29.argMax(t2.filtered, 1); + let id = 0; + t2.nms = await tf29.image.nonMaxSuppressionAsync(t2.boxes, t2.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + const nms = await t2.nms.data(); + const scores = await t2.max.data(); + const classNum = await t2.argmax.data(); + for (const nmsIndex of Array.from(nms)) { + const boxSlice = tf29.slice(t2.boxes, nmsIndex, 1); + const boxYX = await boxSlice.data(); + tf29.dispose(boxSlice); + const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; + const boxRaw = scale(boxData, detectorExpandFact); + const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; + const score = scores[nmsIndex]; + const label = classes[classNum[nmsIndex]]; + const hand3 = { id: id++, score, box: boxFull, boxRaw, label }; + hands.push(hand3); + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + hands.sort((a, b) => b.score - a.score); + if (hands.length > (config3.hand.maxDetected || 1)) + hands.length = config3.hand.maxDetected || 1; + return hands; +} +async function detectFingers(input, h, config3) { + const hand3 = { + id: h.id, + score: Math.round(100 * h.score) / 100, + boxScore: Math.round(100 * h.score) / 100, + fingerScore: 0, + box: h.box, + boxRaw: h.boxRaw, + label: h.label, + keypoints: [], + landmarks: {}, + annotations: {} + }; + if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { + const t2 = {}; + const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; + t2.crop = tf29.image.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t2.div = tf29.div(t2.crop, constants.tf255); + [t2.score, t2.keypoints] = models2[1].execute(t2.div, ["Identity_1", "Identity"]); + const rawScore = (await t2.score.data())[0]; + const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; + if (score >= (config3.hand.minConfidence || 0)) { + hand3.fingerScore = score; + t2.reshaped = tf29.reshape(t2.keypoints, [-1, 3]); + const coordsData = await t2.reshaped.array(); + const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize7[1][1], kpt4[1] / inputSize7[1][0], kpt4[2] || 0]); + const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); + hand3.keypoints = coordsNorm.map((kpt4) => [outputSize[0] * (kpt4[0] + h.boxRaw[0]), outputSize[1] * (kpt4[1] + h.boxRaw[1]), kpt4[2] || 0]); + hand3.landmarks = analyze(hand3.keypoints); + for (const key of Object.keys(fingerMap)) { + hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); + } + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + } + return hand3; +} +async function predict15(input, config3) { + var _a, _b; + if (!((_a = models2[0]) == null ? void 0 : _a["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + return []; + outputSize = [input.shape[2] || 0, input.shape[1] || 0]; + skipped13++; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrame = skipped13 < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache4.hands; + } + return new Promise(async (resolve) => { + const skipTimeExtended = 3 * (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrameExtended = skipped13 < 3 * (config3.hand.skipFrames || 0); + if (config3.skipAllowed && cache4.hands.length === config3.hand.maxDetected) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else if (config3.skipAllowed && skipTimeExtended && skipFrameExtended && cache4.hands.length > 0) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else { + cache4.boxes = await detectHands(input, config3); + lastTime14 = now(); + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + skipped13 = 0; + } + const oldCache = [...cache4.boxes]; + cache4.boxes.length = 0; + if (config3.cacheSensitivity > 0) { + for (let i = 0; i < cache4.hands.length; i++) { + const boxKpt = square(cache4.hands[i].keypoints, outputSize); + if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache4.hands[i].fingerScore && cache4.hands[i].fingerScore > (config3.hand.minConfidence || 0)) { + const boxScale = scale(boxKpt.box, boxExpandFact); + const boxScaleRaw = scale(boxKpt.boxRaw, boxExpandFact); + cache4.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw }); + } + } + } + for (let i = 0; i < cache4.hands.length; i++) { + const bbox = calc(cache4.hands[i].keypoints, outputSize); + cache4.hands[i].box = bbox.box; + cache4.hands[i].boxRaw = bbox.boxRaw; + } + resolve(cache4.hands); + }); +} + +// src/result.ts +var empty = (error = null) => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error }); + +// src/body/movenetcoords.ts +var movenetcoords_exports = {}; +__export(movenetcoords_exports, { + connected: () => connected3, + horizontal: () => horizontal, + kpt: () => kpt3, + relative: () => relative, + vertical: () => vertical +}); +var kpt3 = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/util/interpolate.ts +var bufferedResult = empty(); +var interpolateTime = 0; +function calc2(newResult, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + const t0 = now(); + if (!newResult) + return empty(); + const elapsed = Date.now() - newResult.timestamp; + const bufferedFactor = elapsed < 1e3 ? 8 - Math.log(elapsed + 1) : 1; + if (newResult.canvas) + bufferedResult.canvas = newResult.canvas; + if (newResult.error) + bufferedResult.error = newResult.error; + if (!bufferedResult.body || newResult.body.length !== bufferedResult.body.length) { + bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)); + } else { + for (let i = 0; i < newResult.body.length; i++) { + const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); + const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); + const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2; + return { + score: newKpt.score, + part: newKpt.part, + position: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2] + ], + positionRaw: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] + ], + distance: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a2[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c2 = newKpt.distance) == null ? void 0 : _c2[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d2[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f2 = newKpt.distance) == null ? void 0 : _f2[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g2[2]) || 0) + (((_h2 = newKpt.distance) == null ? void 0 : _h2[2]) || 0)) / bufferedFactor : (_i2 = newKpt.distance) == null ? void 0 : _i2[2] + ] + }; + }); + const annotations2 = {}; + let coords = { connected: {} }; + if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("efficientpose")) + coords = efficientposecoords_exports; + else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + coords = blazeposecoords_exports; + else if ((_c = config3.body.modelPath) == null ? void 0 : _c.includes("movenet")) + coords = movenetcoords_exports; + for (const [name, indexes] of Object.entries(coords.connected)) { + const pt = []; + for (let j = 0; j < indexes.length - 1; j++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[j]); + const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.hand || newResult.hand.length !== bufferedResult.hand.length) { + bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); + } else { + for (let i = 0; i < newResult.hand.length; i++) { + const box = newResult.hand[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.hand[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor); + if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) + bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; + const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : []; + let annotations2 = {}; + if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) { + bufferedResult.hand[i].annotations = newResult.hand[i].annotations; + annotations2 = bufferedResult.hand[i].annotations; + } else if (newResult.hand[i].annotations) { + for (const key of Object.keys(newResult.hand[i].annotations)) { + annotations2[key] = ((_f = (_e = (_d = newResult.hand[i]) == null ? void 0 : _d.annotations) == null ? void 0 : _e[key]) == null ? void 0 : _f[0]) ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) { + bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)); + } else { + for (let i = 0; i < newResult.face.length; i++) { + const box = newResult.face[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.face[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor); + if (newResult.face[i].rotation) { + const rotation = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } }; + rotation.matrix = (_g = newResult.face[i].rotation) == null ? void 0 : _g.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_i = (_h = bufferedResult.face[i].rotation) == null ? void 0 : _h.angle) == null ? void 0 : _i.roll) || 0) + (((_k = (_j = newResult.face[i].rotation) == null ? void 0 : _j.angle) == null ? void 0 : _k.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_m = (_l = bufferedResult.face[i].rotation) == null ? void 0 : _l.angle) == null ? void 0 : _m.yaw) || 0) + (((_o = (_n = newResult.face[i].rotation) == null ? void 0 : _n.angle) == null ? void 0 : _o.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_q = (_p = bufferedResult.face[i].rotation) == null ? void 0 : _p.angle) == null ? void 0 : _q.pitch) || 0) + (((_s = (_r = newResult.face[i].rotation) == null ? void 0 : _r.angle) == null ? void 0 : _s.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + bearing: ((bufferedFactor - 1) * (((_t = bufferedResult.face[i].rotation) == null ? void 0 : _t.gaze.bearing) || 0) + (((_u = newResult.face[i].rotation) == null ? void 0 : _u.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_v = bufferedResult.face[i].rotation) == null ? void 0 : _v.gaze.strength) || 0) + (((_w = newResult.face[i].rotation) == null ? void 0 : _w.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; + } + } + } + if (!bufferedResult.object || newResult.object.length !== bufferedResult.object.length) { + bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)); + } else { + for (let i = 0; i < newResult.object.length; i++) { + const box = newResult.object[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.object[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor); + bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; + } + } + if (newResult.persons) { + const newPersons = newResult.persons; + if (!bufferedResult.persons || newPersons.length !== bufferedResult.persons.length) { + bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)); + } else { + for (let i = 0; i < newPersons.length; i++) { + bufferedResult.persons[i].box = newPersons[i].box.map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor); + } + } + } + if (newResult.gesture) + bufferedResult.gesture = newResult.gesture; + bufferedResult.width = newResult.width; + bufferedResult.height = newResult.height; + const t1 = now(); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0); + if (newResult.performance) + bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; + return bufferedResult; +} + +// src/segmentation/meet.ts +var tf30 = __toESM(require_tfjs_esm()); +var model17; +async function load16(config3) { + if (!model17 || env.initial) + model17 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model17["modelUrl"]); + return model17; +} +async function predict16(input, config3) { + var _a; + if (!model17) + model17 = await load16(config3); + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf30.image.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t2.norm = tf30.div(t2.resize, constants.tf255); + t2.res = model17.execute(t2.norm); + t2.squeeze = tf30.squeeze(t2.res, [0]); + [t2.bgRaw, t2.fgRaw] = tf30.unstack(t2.squeeze, 2); + t2.fg = tf30.softmax(t2.fgRaw); + t2.mul = tf30.mul(t2.fg, constants.tf255); + t2.expand = tf30.expandDims(t2.mul, 2); + t2.output = tf30.image.resizeBilinear(t2.expand, [input.shape[1] || 0, input.shape[2] || 0]); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf30.squeeze(input); + t2.concat = tf30.concat([t2.input, t2.output], -1); + rgba = tf30.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf30.cast(t2.output, "int32"); + break; + default: + rgba = tf30.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf30.dispose(t2[tensor6])); + return rgba; +} + +// src/face/match.ts +var match_exports = {}; +__export(match_exports, { + distance: () => distance, + find: () => find, + similarity: () => similarity +}); +function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25 }) { + if (!descriptor1 || !descriptor1) + return Number.MAX_SAFE_INTEGER; + let sum3 = 0; + for (let i = 0; i < descriptor1.length; i++) { + const diff = !options4.order || options4.order === 2 ? descriptor1[i] - descriptor2[i] : Math.abs(descriptor1[i] - descriptor2[i]); + sum3 += !options4.order || options4.order === 2 ? diff * diff : diff ** options4.order; + } + return (options4.multiplier || 20) * sum3; +} +var normalizeDistance = (dist, order, min2, max5) => { + if (dist === 0) + return 1; + const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); + const norm = (1 - root / 100 - min2) / (max5 - min2); + const clamp2 = Math.max(Math.min(norm, 1), 0); + return clamp2; +}; +function similarity(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) { + const dist = distance(descriptor1, descriptor2, options4); + return normalizeDistance(dist, options4.order || 2, options4.min || 0, options4.max || 1); +} +function find(descriptor, descriptors, options4 = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) { + if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { + return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 }; + } + let lowestDistance = Number.MAX_SAFE_INTEGER; + let index2 = -1; + for (let i = 0; i < descriptors.length; i++) { + const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options4) : Number.MAX_SAFE_INTEGER; + if (res < lowestDistance) { + lowestDistance = res; + index2 = i; + } + if (lowestDistance < (options4.threshold || 0)) + break; + } + const normalizedSimilarity = normalizeDistance(lowestDistance, options4.order || 2, options4.min || 0, options4.max || 1); + return { index: index2, distance: lowestDistance, similarity: normalizedSimilarity }; +} + +// src/models.ts +var models_exports2 = {}; +__export(models_exports2, { + Models: () => Models, + validateModel: () => validateModel +}); + +// src/body/movenet.ts +var tf32 = __toESM(require_tfjs_esm()); + +// src/body/movenetfix.ts +var tf31 = __toESM(require_tfjs_esm()); +var maxJitter = 5e-3; +var cache5 = { + keypoints: [], + padding: [[0, 0], [0, 0], [0, 0], [0, 0]] +}; +function bodyParts(body4) { + for (const pair of horizontal) { + const left = body4.keypoints.findIndex((kp) => kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp.part === pair[1]); + if (body4.keypoints[left] && body4.keypoints[right]) { + if (body4.keypoints[left].position[0] < body4.keypoints[right].position[0]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } + } + for (const pair of vertical) { + const lower = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const higher = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + if (body4.keypoints[lower] && body4.keypoints[higher]) { + if (body4.keypoints[lower].position[1] < body4.keypoints[higher].position[1]) { + body4.keypoints.splice(lower, 1); + } + } + } + for (const [pair, compare2] of relative) { + const left = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + const leftTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[0]); + const rightTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[1]); + if (!body4.keypoints[leftTo] || !body4.keypoints[rightTo]) + continue; + const distanceLeft = body4.keypoints[left] ? [ + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[left].position[0]), + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[left].position[0]) + ] : [0, 0]; + const distanceRight = body4.keypoints[right] ? [ + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[right].position[0]), + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[right].position[0]) + ] : [0, 0]; + if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } +} +function jitter(keypoints) { + for (let i = 0; i < keypoints.length; i++) { + if (keypoints[i] && cache5.keypoints[i]) { + const diff = [Math.abs(keypoints[i].positionRaw[0] - cache5.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache5.keypoints[i].positionRaw[1])]; + if (diff[0] < maxJitter && diff[1] < maxJitter) { + keypoints[i] = cache5.keypoints[i]; + } else { + cache5.keypoints[i] = keypoints[i]; + } + } else { + cache5.keypoints[i] = keypoints[i]; + } + } + return keypoints; +} +function padInput(input, inputSize10) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + cache5.padding = [ + [0, 0], + [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], + [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], + [0, 0] + ]; + t2.pad = tf31.pad(input, cache5.padding); + t2.resize = tf31.image.resizeBilinear(t2.pad, [inputSize10, inputSize10]); + const final = tf31.cast(t2.resize, "int32"); + Object.keys(t2).forEach((tensor6) => tf31.dispose(t2[tensor6])); + return final; +} +function rescaleBody(body4, outputSize2) { + body4.keypoints = body4.keypoints.filter((kpt4) => kpt4 == null ? void 0 : kpt4.position); + for (const kpt4 of body4.keypoints) { + kpt4.position = [ + kpt4.position[0] * (outputSize2[0] + cache5.padding[2][0] + cache5.padding[2][1]) / outputSize2[0] - cache5.padding[2][0], + kpt4.position[1] * (outputSize2[1] + cache5.padding[1][0] + cache5.padding[1][1]) / outputSize2[1] - cache5.padding[1][0] + ]; + kpt4.positionRaw = [ + kpt4.position[0] / outputSize2[0], + kpt4.position[1] / outputSize2[1] + ]; + } + const rescaledBoxes = calc(body4.keypoints.map((pt) => pt.position), outputSize2); + body4.box = rescaledBoxes.box; + body4.boxRaw = rescaledBoxes.boxRaw; + return body4; +} + +// src/body/movenet.ts +var model18; +var inputSize8 = 0; +var skipped14 = Number.MAX_SAFE_INTEGER; +var cache6 = { + boxes: [], + bodies: [], + last: 0 +}; +async function load17(config3) { + var _a; + if (env.initial) + model18 = null; + if (!model18) { + fakeOps(["size"], config3); + model18 = await loadModel(config3.body.modelPath); + } else if (config3.debug) + log("cached model:", model18["modelUrl"]); + inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape) ? model18.inputs[0].shape[2] : 0; + if (inputSize8 < 64) + inputSize8 = 256; + return model18; +} +function parseSinglePose(res, config3, image28) { + const kpt4 = res[0][0]; + const keypoints = []; + let score = 0; + for (let id = 0; id < kpt4.length; id++) { + score = kpt4[id][2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[id][1], kpt4[id][0]]; + keypoints.push({ + score: Math.round(100 * score) / 100, + part: kpt3[id], + positionRaw, + position: [ + Math.round((image28.shape[2] || 0) * positionRaw[0]), + Math.round((image28.shape[1] || 0) * positionRaw[1]) + ] + }); + } + } + score = keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const bodies = []; + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + return bodies; +} +function parseMultiPose(res, config3, image28) { + const bodies = []; + for (let id = 0; id < res[0].length; id++) { + const kpt4 = res[0][id]; + const totalScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (totalScore > config3.body.minConfidence) { + const keypoints = []; + for (let i = 0; i < 17; i++) { + const score = kpt4[3 * i + 2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[3 * i + 1], kpt4[3 * i + 0]]; + keypoints.push({ + part: kpt3[i], + score: Math.round(100 * score) / 100, + positionRaw, + position: [Math.round((image28.shape[2] || 0) * positionRaw[0]), Math.round((image28.shape[1] || 0) * positionRaw[1])] + }); + } + } + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + } + } + bodies.sort((a, b) => b.score - a.score); + if (bodies.length > config3.body.maxDetected) + bodies.length = config3.body.maxDetected; + return bodies; +} +async function predict17(input, config3) { + var _a; + if (!(model18 == null ? void 0 : model18["executor"]) || !((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape)) + return []; + if (!config3.skipAllowed) + cache6.boxes.length = 0; + skipped14++; + const skipTime = (config3.body.skipTime || 0) > now() - cache6.last; + const skipFrame = skipped14 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache6.bodies; + } + return new Promise(async (resolve) => { + const t2 = {}; + skipped14 = 0; + t2.input = padInput(input, inputSize8); + t2.res = model18 == null ? void 0 : model18.execute(t2.input); + cache6.last = now(); + const res = await t2.res.array(); + cache6.bodies = t2.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); + for (const body4 of cache6.bodies) { + rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); + jitter(body4.keypoints); + } + Object.keys(t2).forEach((tensor6) => tf32.dispose(t2[tensor6])); + resolve(cache6.bodies); + }); +} + +// src/object/nanodet.ts +var tf33 = __toESM(require_tfjs_esm()); +var model19; +var last10 = []; +var lastTime15 = 0; +var skipped15 = Number.MAX_SAFE_INTEGER; +var inputSize9 = 0; +var scaleBox = 2.5; +async function load18(config3) { + if (!model19 || env.initial) { + model19 = await loadModel(config3.object.modelPath); + const inputs = (model19 == null ? void 0 : model19["executor"]) ? Object.values(model19.modelSignature["inputs"]) : void 0; + inputSize9 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416; + } else if (config3.debug) + log("cached model:", model19["modelUrl"]); + return model19; +} +async function process4(res, outputShape, config3) { + var _a, _b; + let id = 0; + let results = []; + const size2 = inputSize9; + for (const strideSize of [1, 2, 4]) { + const baseSize = strideSize * 13; + const scoresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scores = await scoresT.array(); + const featuresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const boxesMaxT = tf33.reshape(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); + const boxIdxT = tf33.argMax(boxesMaxT, 2); + const boxIdx = await boxIdxT.array(); + for (let i = 0; i < scoresT.shape[0]; i++) { + for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { + const score = scores[i][j]; + if (score > (config3.object.minConfidence || 0) && j !== 61) { + const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; + const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; + const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); + const [x, y] = [ + cx - scaleBox / strideSize * boxOffset[0], + cy - scaleBox / strideSize * boxOffset[1] + ]; + const [w, h] = [ + cx + scaleBox / strideSize * boxOffset[2] - x, + cy + scaleBox / strideSize * boxOffset[3] - y + ]; + let boxRaw = [x, y, w, h]; + boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); + const box = [ + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + box: box.map((a) => Math.trunc(a)), + boxRaw + }; + results.push(result); + } + } + } + tf33.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]); + } + const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); + const nmsScores = results.map((a) => a.score); + let nmsIdx = []; + if (nmsBoxes && nmsBoxes.length > 0) { + const nms = await tf33.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + nmsIdx = Array.from(await nms.data()); + tf33.dispose(nms); + } + results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); + return results; +} +async function predict18(image28, config3) { + if (!(model19 == null ? void 0 : model19["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime15; + const skipFrame = skipped15 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last10.length > 0) { + skipped15++; + return last10; + } + skipped15 = 0; + if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) + return last10; + return new Promise(async (resolve) => { + const outputSize2 = [image28.shape[2] || 0, image28.shape[1] || 0]; + const resizeT = tf33.image.resizeBilinear(image28, [inputSize9, inputSize9], false); + const normT = tf33.div(resizeT, constants.tf255); + const transposeT = tf33.transpose(normT, [0, 3, 1, 2]); + let objectT; + if (config3.object.enabled) + objectT = model19.execute(transposeT); + lastTime15 = now(); + const obj = await process4(objectT, outputSize2, config3); + last10 = obj; + tf33.dispose([resizeT, normT, transposeT, ...objectT]); + resolve(obj); + }); +} + +// src/body/posenet.ts +var tf34 = __toESM(require_tfjs_esm()); + +// src/body/posenetutils.ts +var partNames = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var count = partNames.length; +var partIds = partNames.reduce((result, jointName, i) => { + result[jointName] = i; + return result; +}, {}); +var connectedPartNames = [ + ["leftHip", "leftShoulder"], + ["leftElbow", "leftShoulder"], + ["leftElbow", "leftWrist"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["rightHip", "rightShoulder"], + ["rightElbow", "rightShoulder"], + ["rightElbow", "rightWrist"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"], + ["leftShoulder", "rightShoulder"], + ["leftHip", "rightHip"] +]; +var connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => [partIds[jointNameA], partIds[jointNameB]]); +var poseChain = [ + ["nose", "leftEye"], + ["leftEye", "leftEar"], + ["nose", "rightEye"], + ["rightEye", "rightEar"], + ["nose", "leftShoulder"], + ["leftShoulder", "leftElbow"], + ["leftElbow", "leftWrist"], + ["leftShoulder", "leftHip"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["nose", "rightShoulder"], + ["rightShoulder", "rightElbow"], + ["rightElbow", "rightWrist"], + ["rightShoulder", "rightHip"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"] +]; +function getBoundingBox(keypoints) { + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({ + maxX: Math.max(maxX, x), + maxY: Math.max(maxY, y), + minX: Math.min(minX, x), + minY: Math.min(minY, y) + }), { + maxX: Number.NEGATIVE_INFINITY, + maxY: Number.NEGATIVE_INFINITY, + minX: Number.POSITIVE_INFINITY, + minY: Number.POSITIVE_INFINITY + }); + return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY]; +} +function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]) { + const scaleY = height / inputResolutionHeight; + const scaleX = width / inputResolutionWidth; + const scalePose = (pose, i) => ({ + id: i, + score: pose.score, + boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight], + box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)], + keypoints: pose.keypoints.map(({ score, part, position }) => ({ + score, + part, + position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)], + positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] + })), + annotations: {} + }); + const scaledPoses = poses.map((pose, i) => scalePose(pose, i)); + return scaledPoses; +} +var MaxHeap = class { + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + __publicField(this, "numberOfElements"); + __publicField(this, "getElementValue"); + this.priorityQueue = new Array(maxSize2); + this.numberOfElements = -1; + this.getElementValue = getElementValue; + } + enqueue(x) { + this.priorityQueue[++this.numberOfElements] = x; + this.swim(this.numberOfElements); + } + dequeue() { + const max5 = this.priorityQueue[0]; + this.exchange(0, this.numberOfElements--); + this.sink(0); + this.priorityQueue[this.numberOfElements + 1] = null; + return max5; + } + empty() { + return this.numberOfElements === -1; + } + size() { + return this.numberOfElements + 1; + } + all() { + return this.priorityQueue.slice(0, this.numberOfElements + 1); + } + max() { + return this.priorityQueue[0]; + } + swim(k) { + while (k > 0 && this.less(Math.floor(k / 2), k)) { + this.exchange(k, Math.floor(k / 2)); + k = Math.floor(k / 2); + } + } + sink(k) { + while (2 * k <= this.numberOfElements) { + let j = 2 * k; + if (j < this.numberOfElements && this.less(j, j + 1)) + j++; + if (!this.less(k, j)) + break; + this.exchange(k, j); + k = j; + } + } + getValueAt(i) { + return this.getElementValue(this.priorityQueue[i]); + } + less(i, j) { + return this.getValueAt(i) < this.getValueAt(j); + } + exchange(i, j) { + const t2 = this.priorityQueue[i]; + this.priorityQueue[i] = this.priorityQueue[j]; + this.priorityQueue[j] = t2; + } +}; +function getOffsetPoint(y, x, keypoint, offsets) { + return { + y: offsets.get(y, x, keypoint), + x: offsets.get(y, x, keypoint + count) + }; +} +function getImageCoords(part, outputStride2, offsets) { + const { heatmapY, heatmapX, id: keypoint } = part; + const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + return { + x: part.heatmapX * outputStride2 + x, + y: part.heatmapY * outputStride2 + y + }; +} +function clamp(a, min2, max5) { + if (a < min2) + return min2; + if (a > max5) + return max5; + return a; +} +function squaredDistance(y1, x1, y2, x2) { + const dy = y2 - y1; + const dx = x2 - x1; + return dy * dy + dx * dx; +} +function addVectors(a, b) { + return { x: a.x + b.x, y: a.y + b.y }; +} + +// src/body/posenet.ts +var model20; +var poseNetOutputs = ["MobilenetV1/offset_2/BiasAdd", "MobilenetV1/heatmap_2/BiasAdd", "MobilenetV1/displacement_fwd_2/BiasAdd", "MobilenetV1/displacement_bwd_2/BiasAdd"]; +var localMaximumRadius = 1; +var outputStride = 16; +var squaredNmsRadius = 50 ** 2; +function traverse(edgeId, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) { + const getDisplacement = (point2) => ({ + y: displacements.get(point2.y, point2.x, edgeId), + x: displacements.get(point2.y, point2.x, displacements.shape[2] / 2 + edgeId) + }); + const getStridedIndexNearPoint = (point2, height2, width2) => ({ + y: clamp(Math.round(point2.y / outputStride), 0, height2 - 1), + x: clamp(Math.round(point2.x / outputStride), 0, width2 - 1) + }); + const [height, width] = scores.shape; + const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width); + const displacement = getDisplacement(sourceKeypointIndices); + const displacedPoint = addVectors(sourceKeypoint.position, displacement); + let targetKeypoint = displacedPoint; + for (let i = 0; i < offsetRefineStep; i++) { + const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const offsetPoint = getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets); + targetKeypoint = addVectors( + { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride }, + { x: offsetPoint.x, y: offsetPoint.y } + ); + } + const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId); + return { position: targetKeypoint, part: partNames[targetId], score }; +} +function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) { + const tuples = poseChain.map(([parentJoinName, childJoinName]) => [partIds[parentJoinName], partIds[childJoinName]]); + const edgesFwd = tuples.map(([, childJointId]) => childJointId); + const edgesBwd = tuples.map(([parentJointId]) => parentJointId); + const numParts = scores.shape[2]; + const numEdges = edgesFwd.length; + const keypoints = new Array(numParts); + const rootPoint = getImageCoords(root.part, outputStride, offsets); + keypoints[root.part.id] = { + score: root.score, + part: partNames[root.part.id], + position: rootPoint + }; + for (let edge = numEdges - 1; edge >= 0; --edge) { + const sourceId = edgesFwd[edge]; + const targetId = edgesBwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd); + } + } + for (let edge = 0; edge < numEdges; ++edge) { + const sourceId = edgesBwd[edge]; + const targetId = edgesFwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd); + } + } + return keypoints; +} +function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores) { + const [height, width] = scores.shape; + let localMaximum = true; + const yStart = Math.max(heatmapY - localMaximumRadius, 0); + const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height); + for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) { + const xStart = Math.max(heatmapX - localMaximumRadius, 0); + const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width); + for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) { + if (scores.get(yCurrent, xCurrent, keypointId) > score) { + localMaximum = false; + break; + } + } + if (!localMaximum) + break; + } + return localMaximum; +} +function buildPartWithScoreQueue(minConfidence2, scores) { + const [height, width, numKeypoints] = scores.shape; + const queue = new MaxHeap(height * width * numKeypoints, ({ score }) => score); + for (let heatmapY = 0; heatmapY < height; ++heatmapY) { + for (let heatmapX = 0; heatmapX < width; ++heatmapX) { + for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) { + const score = scores.get(heatmapY, heatmapX, keypointId); + if (score < minConfidence2) + continue; + if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) + queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } }); + } + } + } + return queue; +} +function withinRadius(poses, { x, y }, keypointId) { + return poses.some(({ keypoints }) => { + var _a; + const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; + if (!correspondingKeypoint) + return false; + return squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + }); +} +function getInstanceScore(existingPoses, keypoints) { + const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => { + if (!withinRadius(existingPoses, position, keypointId)) + result += score; + return result; + }, 0); + return notOverlappedKeypointScores / keypoints.length; +} +function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence2) { + const poses = []; + const queue = buildPartWithScoreQueue(minConfidence2, scores); + while (poses.length < maxDetected && !queue.empty()) { + const root = queue.dequeue(); + const rootImageCoords = getImageCoords(root.part, outputStride, offsets); + if (withinRadius(poses, rootImageCoords, root.part.id)) + continue; + let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd); + keypoints = keypoints.filter((a) => a.score > minConfidence2); + const score = getInstanceScore(poses, keypoints); + const box = getBoundingBox(keypoints); + if (score > minConfidence2) + poses.push({ keypoints, box, score: Math.round(100 * score) / 100 }); + } + return poses; +} +async function predict19(input, config3) { + if (!(model20 == null ? void 0 : model20["executor"])) + return []; + const res = tf34.tidy(() => { + if (!model20.inputs[0].shape) + return []; + const resized = tf34.image.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = tf34.sub(tf34.div(tf34.cast(resized, "float32"), 127.5), 1); + const results = model20.execute(normalized, poseNetOutputs); + const results3d = results.map((y) => tf34.squeeze(y, [0])); + results3d[1] = tf34.sigmoid(results3d[1]); + return results3d; + }); + const buffers = await Promise.all(res.map((tensor6) => tensor6.buffer())); + for (const t2 of res) + tf34.dispose(t2); + const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); + if (!model20.inputs[0].shape) + return []; + const scaled = scalePoses(decoded, [input.shape[1], input.shape[2]], [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + return scaled; +} +async function load19(config3) { + if (!model20 || env.initial) + model20 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model20["modelUrl"]); + return model20; +} + +// src/segmentation/rvm.ts +var tf35 = __toESM(require_tfjs_esm()); +var model21; +var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; +var t = {}; +var ratio = 0; +function init3(config3) { + tf35.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = tf35.tensor(0); + t.r2i = tf35.tensor(0); + t.r3i = tf35.tensor(0); + t.r4i = tf35.tensor(0); + ratio = config3.segmentation.ratio || 0.5; + t.downsample_ratio = tf35.tensor(ratio); +} +async function load20(config3) { + if (!model21 || env.initial) + model21 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model21["modelUrl"]); + init3(config3); + return model21; +} +var normalize = (r) => tf35.tidy(() => { + const squeeze14 = tf35.squeeze(r, [0]); + const mul15 = tf35.mul(squeeze14, constants.tf255); + const cast8 = tf35.cast(mul15, "int32"); + return cast8; +}); +function getRGBA(fgr, pha) { + const rgb2 = fgr ? normalize(fgr) : tf35.fill([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : tf35.fill([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgba = tf35.concat([rgb2, a], -1); + tf35.dispose([rgb2, a]); + return rgba; +} +function getState(state) { + return tf35.tidy(() => { + const r = {}; + r.unstack = tf35.unstack(state, -1); + r.concat = tf35.concat(r.unstack, 1); + r.split = tf35.split(r.concat, 4, 1); + r.stack = tf35.concat(r.split, 2); + r.squeeze = tf35.squeeze(r.stack, [0]); + r.expand = tf35.expandDims(r.squeeze, -1); + r.add = tf35.add(r.expand, 1); + r.mul = tf35.mul(r.add, 127.5); + r.cast = tf35.cast(r.mul, "int32"); + r.tile = tf35.tile(r.cast, [1, 1, 3]); + r.alpha = tf35.fill([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); + return tf35.concat([r.tile, r.alpha], -1); + }); +} +async function predict20(input, config3) { + if (!model21) + model21 = await load20(config3); + if (!(model21 == null ? void 0 : model21["executor"])) + return null; + t.src = tf35.div(input, 255); + if (ratio !== config3.segmentation.ratio) + init3(config3); + const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + rgba = getRGBA(fgr, pha); + break; + case "alpha": + rgba = getRGBA(null, pha); + break; + case "foreground": + rgba = getRGBA(fgr, null); + break; + case "state": + rgba = getState(r1o); + break; + default: + rgba = tf35.tensor(0); + } + tf35.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; + return rgba; +} + +// src/segmentation/selfie.ts +var tf36 = __toESM(require_tfjs_esm()); +var model22; +async function load21(config3) { + if (!model22 || env.initial) + model22 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model22["modelUrl"]); + return model22; +} +async function predict21(input, config3) { + var _a; + if (!model22) + model22 = await load21(config3); + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf36.image.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t2.norm = tf36.div(t2.resize, constants.tf255); + t2.res = model22.execute(t2.norm); + t2.squeeze = tf36.squeeze(t2.res, [0]); + t2.alpha = tf36.image.resizeBilinear(t2.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t2.mul = tf36.mul(t2.alpha, constants.tf255); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf36.squeeze(input); + t2.concat = tf36.concat([t2.input, t2.mul], -1); + rgba = tf36.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf36.cast(t2.mul, "int32"); + break; + default: + rgba = tf36.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf36.dispose(t2[tensor6])); + return rgba; +} + +// src/models.ts +function validateModel(instance, model23, name) { + var _a, _b; + if (!model23) + return null; + if (!((_a = instance == null ? void 0 : instance.config) == null ? void 0 : _a.validateModels)) + return null; + const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"]; + const ignoreOps = ["biasadd", "fusedbatchnormv3", "matmul", "switch", "shape", "merge", "split", "broadcastto"]; + const ops = []; + const missing = []; + const url = model23["modelUrl"]; + const executor = model23["executor"]; + if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { + for (const kernel of Object.values(executor.graph.nodes)) { + const op = kernel.op.toLowerCase(); + if (!ops.includes(op)) + ops.push(op); + } + } else { + if (!executor && instance.config.debug) { + log("model not loaded", name); + } + } + for (const op of ops) { + if (!simpleOps.includes(op) && !ignoreOps.includes(op) && !instance.env.kernels.includes(op) && !instance.env.kernels.includes(op.replace("_", "")) && !instance.env.kernels.includes(op.replace("native", "")) && !instance.env.kernels.includes(op.replace("v2", ""))) { + missing.push(op); + } + } + if (instance.config.debug && missing.length > 0) + log("model validation failed:", name, missing); + return missing.length > 0 ? { name, missing, ops, url } : null; +} +var Models = class { + constructor(currentInstance) { + __publicField(this, "instance"); + __publicField(this, "models", {}); + this.models = {}; + this.instance = currentInstance; + } + stats() { + let totalSizeFromManifest = 0; + let totalSizeWeights = 0; + let totalSizeLoading = 0; + for (const m of Object.values(modelStats)) { + totalSizeFromManifest += m.sizeFromManifest; + totalSizeWeights += m.sizeLoadedWeights; + totalSizeLoading += m.sizeDesired; + } + const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0; + return { + numLoadedModels: Object.values(modelStats).length, + numDefinedModels: Object.keys(this.models).length, + percentageLoaded, + totalSizeFromManifest, + totalSizeWeights, + totalSizeLoading, + modelStats: Object.values(modelStats) + }; + } + reset() { + for (const model23 of Object.keys(this.models)) + this.models[model23] = null; + } + async load(instance) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A; + if (env.initial) + this.reset(); + if (instance) + this.instance = instance; + const m = {}; + m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; + m.antispoof = this.instance.config.face.enabled && ((_a = this.instance.config.face.antispoof) == null ? void 0 : _a.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; + m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; + m.faceres = this.instance.config.face.enabled && ((_c = this.instance.config.face.description) == null ? void 0 : _c.enabled) && !this.models.faceres ? load7(this.instance.config) : null; + m.emotion = this.instance.config.face.enabled && ((_d = this.instance.config.face.emotion) == null ? void 0 : _d.enabled) && !this.models.emotion ? load6(this.instance.config) : null; + m.iris = this.instance.config.face.enabled && ((_e = this.instance.config.face.iris) == null ? void 0 : _e.enabled) && !((_f = this.instance.config.face.attention) == null ? void 0 : _f.enabled) && !this.models.iris ? load4(this.instance.config) : null; + m.facemesh = this.instance.config.face.enabled && ((_g = this.instance.config.face.mesh) == null ? void 0 : _g.enabled) && !this.models.facemesh ? load5(this.instance.config) : null; + m.gear = this.instance.config.face.enabled && ((_h = this.instance.config.face["gear"]) == null ? void 0 : _h.enabled) && !this.models.gear ? load10(this.instance.config) : null; + m.ssrnetage = this.instance.config.face.enabled && ((_i = this.instance.config.face["ssrnet"]) == null ? void 0 : _i.enabled) && !this.models.ssrnetage ? load11(this.instance.config) : null; + m.ssrnetgender = this.instance.config.face.enabled && ((_j = this.instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; + m.mobilefacenet = this.instance.config.face.enabled && ((_k = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; + m.insightface = this.instance.config.face.enabled && ((_l = this.instance.config.face["insightface"]) == null ? void 0 : _l.enabled) && !this.models.insightface ? load14(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; + m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n = this.instance.config.body.modelPath) == null ? void 0 : _n.includes("efficientpose")) ? load2(this.instance.config) : null; + m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o = this.instance.config.body.modelPath) == null ? void 0 : _o.includes("movenet")) ? load17(this.instance.config) : null; + m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p = this.instance.config.body.modelPath) == null ? void 0 : _p.includes("posenet")) ? load19(this.instance.config) : null; + m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r = (_q = this.instance.config.hand.detector) == null ? void 0 : _q.modelPath) == null ? void 0 : _r.includes("handtrack")) ? loadDetect2(this.instance.config) : null; + m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s = this.instance.config.hand.detector) == null ? void 0 : _s.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton(this.instance.config) : null; + if ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect")) + [m.handpose, m.handskeleton] = !this.models.handpose ? await load15(this.instance.config) : [null, null]; + m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w = this.instance.config.object.modelPath) == null ? void 0 : _w.includes("centernet")) ? load(this.instance.config) : null; + m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x = this.instance.config.object.modelPath) == null ? void 0 : _x.includes("nanodet")) ? load18(this.instance.config) : null; + m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load21(this.instance.config) : null; + m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z = this.instance.config.segmentation.modelPath) == null ? void 0 : _z.includes("meet")) ? load16(this.instance.config) : null; + m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A = this.instance.config.segmentation.modelPath) == null ? void 0 : _A.includes("rvm")) ? load20(this.instance.config) : null; + await Promise.all([...Object.values(m)]); + for (const model23 of Object.keys(m)) + this.models[model23] = m[model23] || this.models[model23] || null; + } + list() { + const models3 = Object.keys(this.models).map((model23) => { + var _a; + return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a = this.models[model23]) == null ? void 0 : _a["modelUrl"] : null }; + }); + for (const m of models3) { + const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); + if (!stats) + continue; + m.size = modelStats[stats].sizeLoadedWeights; + m.url = modelStats[stats].url; + } + return models3; + } + loaded() { + const list = this.list(); + const loaded = list.filter((model23) => model23.loaded).map((model23) => model23.name); + return loaded; + } + validate() { + const missing = []; + for (const defined of Object.keys(this.models)) { + const model23 = this.models[defined]; + if (!model23) + continue; + const res = validateModel(this.instance, model23, defined); + if (res) + missing.push(res); + } + return missing; + } +}; + +// src/util/persons.ts +function join2(faces, bodies, hands, gestures, shape) { + var _a, _b, _c, _d, _e, _f; + let id = 0; + const persons = []; + for (const face4 of faces) { + const person2 = { id: id++, face: face4, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] }; + for (const body4 of bodies) { + if (face4.box[0] > body4.box[0] && face4.box[0] < body4.box[0] + body4.box[2] && face4.box[1] + face4.box[3] > body4.box[1] && face4.box[1] + face4.box[3] < body4.box[1] + body4.box[3]) { + person2.body = body4; + } + } + if (person2.body) { + for (const hand3 of hands) { + if (hand3.box[0] + hand3.box[2] > person2.body.box[0] && hand3.box[0] + hand3.box[2] < person2.body.box[0] + person2.body.box[2] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.left = hand3; + } + if (hand3.box[0] < person2.body.box[0] + person2.body.box[2] && hand3.box[0] > person2.body.box[0] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.right = hand3; + } + } + } + for (const gesture2 of gestures) { + if (gesture2["face"] !== void 0 && gesture2["face"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["iris"] !== void 0 && gesture2["iris"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a = person2.body) == null ? void 0 : _a.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_c = person2.hands.right) == null ? void 0 : _c.id)) + person2.gestures.push(gesture2); + } + const x = []; + const y = []; + const extractXY = (box) => { + if (box && box.length === 4) { + x.push(box[0], box[0] + box[2]); + y.push(box[1], box[1] + box[3]); + } + }; + extractXY(person2.face.box); + extractXY((_d = person2.body) == null ? void 0 : _d.box); + extractXY((_e = person2.hands.left) == null ? void 0 : _e.box); + extractXY((_f = person2.hands.right) == null ? void 0 : _f.box); + const minX = Math.min(...x); + const minY = Math.min(...y); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; + if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) + person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; + persons.push(person2); + } + return persons; +} + +// src/warmup.ts +var tf37 = __toESM(require_tfjs_esm()); + +// src/sample.ts +var face3 = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -269,7 +14112,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Dt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14681,559 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function s4(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(A=>A.blob()),n,o;switch(e.config.warmup){case"face":n=await t(Wt);break;case"body":case"full":n=await t(Dt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function A4(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+Wt;break;case"full":case"body":n="data:image/jpeg;base64,"+Dt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(v.Image)o=new v.Image;else return;o.onload=async()=>{let r=ee(o.naturalWidth,o.naturalHeight);if(!r)u("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(o,0,0);let A=await e.image(r,!0),a=A.tensor?await e.detect(A.tensor,e.config):void 0;t(a)}},n?o.src=n:t(void 0)})}async function a4(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(Wt):n=t(Dt);let o;if("node"in c0&&c0.getBackend()==="tensorflow"){let r=c0.node.decodeJpeg(n),s=c0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&u("Warmup tfjs-node not loaded");return o}async function i4(e){let t;return typeof createImageBitmap=="function"?t=await s4(e):typeof Image!="undefined"||v.Canvas!==void 0?t=await A4(e):t=await a4(e),t}async function l4(e){var a,l,c,x;if(!c0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=c0.getBackend(),n=c0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;c0.env().set("ENGINE_COMPILE_ONLY",!0);let o=c0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models).filter(([d,p])=>d!==null&&p!==null)){let d=(y==null?void 0:y.modelSignature)&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])==null?void 0:l.shape)?[...y.inputs[0].shape]:[1,64,64,3],p=(y==null?void 0:y.modelSignature)&&((x=(c=y==null?void 0:y.inputs)==null?void 0:c[0])==null?void 0:x.dtype)?y.inputs[0].dtype:"float32";for(let b=0;bc0.dispose(M)):c0.dispose(b)}catch(b){e.config.debug&&u("compile fail model:",i)}c0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&u("compile pass:",{models:r,kernels:s.length}),c0.env().set("ENGINE_COMPILE_ONLY",!1);let A=c0.engine().state.numTensors;A-o>0&&u("tensor leak:",A-o)}async function Eo(e,t){await E2(e,!1);let n=g();return e.state="warmup",t&&(e.config=A0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?ue():new Promise(async o=>{await e.models.load(),await l4(e);let r=await i4(e),s=g();e.config.debug&&u("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var R2,W2,D2,Ft,Xe,b1=class{constructor(t){k(this,"version");k(this,"config");k(this,"result");k(this,"state");k(this,"process");k(this,"tf");k(this,"env",v);k(this,"draw",Q2);k(this,"match",zt);k(this,"models");k(this,"events");k(this,"faceTriangulation");k(this,"faceUVMap");k(this,"performance");i2(this,R2,void 0);i2(this,W2,void 0);i2(this,D2,void 0);k(this,"analyze",(...t)=>{if(!fe(this,W2))return;let n=this.tf.engine().state.numTensors,o=fe(this,R2);k2(this,R2,n);let r=n-o;r!==0&&u(...t,r)});i2(this,Ft,t=>{if(!fe(this,D2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof Ae.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});k(this,"webcam",new Z2);k(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});i2(this,Xe,{});let n=(Ae.version.tfjs||Ae.version_core).replace(/-(.*)/,"");qe.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,qe.modelBasePath=v.browser?"../models/":"file://models/",this.version=Kt,Object.defineProperty(this,"version",{value:Kt}),this.config=JSON.parse(JSON.stringify(qe)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=A0(this.config,t)),C1(this.config),this.tf=Ae,this.state="idle",k2(this,R2,0),k2(this,W2,!1),k2(this,D2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new C2(this),n5(),this.result=ue(),this.process={tensor:null,canvas:null},this.faceTriangulation=E3,this.faceUVMap=z3,Ct(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version["tfjs-core"]}`);let o=JSON.parse(JSON.stringify(this.env));delete o.kernels,delete o.initial,delete o.perfadd,this.config.debug&&u("environment:",o)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(qe)),this.config.backend=t,Ut(),v.initial=!0}validate(t){let n=Zt(qe,t||this.config);return n.length===0&&(this.config=A0(this.config,t)),n}now(){return g()}image(t,n=!1){return G2(t,this.config,n)}async segmentation(t,n){var s,A,a;if(n&&(this.config=A0(this.config,n)),!this.config.segmentation.enabled)return null;let o=await G2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Ro(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await $n(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await Po(o.tensor,this.config)),Ae.dispose(o.tensor),r}compare(t,n){return L1(this.config,t,n)}async init(){await E2(this,!0),await this.tf.ready(),Ut()}async load(t){this.state="load";let n=g(),o=Object.values(this.models).filter(A=>A).length;t&&(this.config=A0(this.config,t)),this.env.initial&&(await E2(this,!1)||u("error: backend check failed"),await Ae.ready(),this.env.browser&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("tf flags:",this.tf.ENV.flags))),await this.models.load(),this.env.initial&&this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(g()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return _n(t,this.config)}async warmup(t){let n=g(),o=await Eo(this,t),r=g();return this.performance.warmup=Math.trunc(r-n),o}async profile(t,n){let o=await this.tf.profile(()=>this.detect(t,n)),r={},s=0;for(let a of o.kernels){let l=Number(a.kernelTimeMs)||0;r[a.name]?r[a.name]+=l:r[a.name]=l,s+=l}let A=[];Object.entries(r).forEach(a=>A.push({kernel:a[0],time:a[1],perc:0}));for(let a of A)a.perc=Math.round(1e3*a.time/s)/1e3,a.time=Math.round(1e3*a.time)/1e3;return A.sort((a,l)=>l.time-a.time),A.length=20,A}async detect(t,n){return this.state="detect",new Promise(async o=>{var b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;this.state="config";let r;this.config=A0(this.config,n),this.state="check";let s=fe(this,Ft).call(this,t);s&&(u(s,t),this.emit("error"),o(ue(s)));let A=g();await this.load(),r=g(),this.state="image";let a=await G2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&u("could not convert input to tensor"),this.emit("error"),o(ue("could not convert input to tensor"));return}this.emit("image"),r=g(),this.config.skipAllowed=await O1(this.config,a.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Check Changed:");let l=[],c=[],x=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?V5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=g(),l=this.config.face.enabled?await V5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let y=this.config.body.maxDetected===-1?A0(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?y1(a.tensor,y):[]:(M=this.config.body.modelPath)!=null&&M.includes("blazepose")?c=this.config.body.enabled?a5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?f5(a.tensor,y):[]:(m=this.config.body.modelPath)!=null&&m.includes("movenet")&&(c=this.config.body.enabled?A1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=g(),(h=this.config.body.modelPath)!=null&&h.includes("posenet")?c=this.config.body.enabled?await y1(a.tensor,y):[]:(S=this.config.body.modelPath)!=null&&S.includes("blazepose")?c=this.config.body.enabled?await a5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await f5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await A1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let d=this.config.hand.maxDetected===-1?A0(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((t0=(q=this.config.hand.detector)==null?void 0:q.modelPath)!=null&&t0.includes("handdetect")?x=this.config.hand.enabled?Y5(a.tensor,d):[]:($=(G=this.config.hand.detector)==null?void 0:G.modelPath)!=null&&$.includes("handtrack")&&(x=this.config.hand.enabled?Q5(a.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(r=g(),(R=(s0=this.config.hand.detector)==null?void 0:s0.modelPath)!=null&&R.includes("handdetect")?x=this.config.hand.enabled?await Y5(a.tensor,d):[]:(b0=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&b0.includes("handtrack")&&(x=this.config.hand.enabled?await Q5(a.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((U=this.config.object.modelPath)!=null&&U.includes("nanodet")?i=this.config.object.enabled?i1(a.tensor,this.config):[]:(g0=this.config.object.modelPath)!=null&&g0.includes("centernet")&&(i=this.config.object.enabled?c5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=g(),(f0=this.config.object.modelPath)!=null&&f0.includes("nanodet")?i=this.config.object.enabled?await i1(a.tensor,this.config):[]:(B=this.config.object.modelPath)!=null&&B.includes("centernet")&&(i=this.config.object.enabled?await c5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,c,x,i]=await Promise.all([l,c,x,i])),this.state="detect:gesture";let p=[];this.config.gesture.enabled&&(r=g(),p=[...wn(l),...kn(c),...zn(x),...En(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(g()-A):Math.trunc(g()-A);let f=((X=this.process.tensor)==null?void 0:X.shape)||[0,0,0,0];this.result={face:l,body:c,hand:x,gesture:p,object:i,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return wo(l,c,x,p,f)}},Ae.dispose(a.tensor),this.emit("detect"),this.state="idle",o(this.result)})}async sleep(t){return new Promise(n=>{setTimeout(n,t)})}async video(t,n=!0,o=0){n?(fe(this,Xe)[t.id]||(this.config.debug&&u("video start",t.id),fe(this,Xe)[t.id]=!0),!t.paused&&fe(this,Xe)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),fe(this,Xe)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&u("video stop",t.id),fe(this,Xe)[t.id]=!1)}};R2=new WeakMap,W2=new WeakMap,D2=new WeakMap,Ft=new WeakMap,Xe=new WeakMap;0&&(module.exports={Env,Human,defaults,draw,empty,env,match,models}); +2Q==`; + +// src/warmup.ts +async function warmupBitmap(instance) { + const b64toBlob = (base64, type = "application/octet-stream") => fetch(`data:${type};base64,${base64}`).then((res2) => res2.blob()); + let blob; + let res; + switch (instance.config.warmup) { + case "face": + blob = await b64toBlob(face3); + break; + case "body": + case "full": + blob = await b64toBlob(body3); + break; + default: + blob = null; + } + if (blob) { + const bitmap = await createImageBitmap(blob); + res = await instance.detect(bitmap, instance.config); + bitmap.close(); + } + return res; +} +async function warmupCanvas(instance) { + return new Promise((resolve) => { + let src; + switch (instance.config.warmup) { + case "face": + src = "data:image/jpeg;base64," + face3; + break; + case "full": + case "body": + src = "data:image/jpeg;base64," + body3; + break; + default: + src = ""; + } + let img; + if (typeof Image !== "undefined") + img = new Image(); + else if (env.Image) + img = new env.Image(); + else + return; + img.onload = async () => { + const canvas3 = canvas(img.naturalWidth, img.naturalHeight); + if (!canvas3) { + log("Warmup: Canvas not found"); + resolve(void 0); + } else { + const ctx = canvas3.getContext("2d"); + if (ctx) + ctx.drawImage(img, 0, 0); + const tensor6 = await instance.image(canvas3, true); + const res = tensor6.tensor ? await instance.detect(tensor6.tensor, instance.config) : void 0; + resolve(res); + } + }; + if (src) + img.src = src; + else + resolve(void 0); + }); +} +async function warmupNode(instance) { + const atob = (str) => Buffer.from(str, "base64"); + let img; + if (instance.config.warmup === "face") + img = atob(face3); + else + img = atob(body3); + let res; + if ("node" in tf37 && tf37.getBackend() === "tensorflow") { + const data = tf37["node"].decodeJpeg(img); + const expanded = tf37.expandDims(data, 0); + instance.tf.dispose(data); + res = await instance.detect(expanded, instance.config); + instance.tf.dispose(expanded); + } else { + if (instance.config.debug) + log("Warmup tfjs-node not loaded"); + } + return res; +} +async function runInference(instance) { + let res; + if (typeof createImageBitmap === "function") + res = await warmupBitmap(instance); + else if (typeof Image !== "undefined" || env.Canvas !== void 0) + res = await warmupCanvas(instance); + else + res = await warmupNode(instance); + return res; +} +async function runCompile(instance) { + var _a, _b, _c, _d; + if (!tf37.env().flagRegistry.ENGINE_COMPILE_ONLY) + return; + const backendType = tf37.getBackend(); + const webGLBackend = tf37.backend(); + if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { + return; + } + tf37.env().set("ENGINE_COMPILE_ONLY", true); + const numTensorsStart = tf37.engine().state.numTensors; + const compiledModels = []; + for (const [modelName, model23] of Object.entries(instance.models).filter(([key, val]) => key !== null && val !== null)) { + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d = (_c = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c[0]) == null ? void 0 : _d.dtype) ? model23.inputs[0].dtype : "float32"; + for (let dim = 0; dim < shape.length; dim++) { + if (shape[dim] === -1) + shape[dim] = dim === 0 ? 1 : 64; + } + const tensor6 = tf37.zeros(shape, dtype); + try { + const res = model23.execute(tensor6); + compiledModels.push(modelName); + if (Array.isArray(res)) + res.forEach((t2) => tf37.dispose(t2)); + else + tf37.dispose(res); + } catch (e) { + if (instance.config.debug) + log("compile fail model:", modelName); + } + tf37.dispose(tensor6); + } + const kernels = await webGLBackend["checkCompileCompletionAsync"](); + webGLBackend["getUniformLocations"](); + if (instance.config.debug) + log("compile pass:", { models: compiledModels, kernels: kernels.length }); + tf37.env().set("ENGINE_COMPILE_ONLY", false); + const numTensorsEnd = tf37.engine().state.numTensors; + if (numTensorsEnd - numTensorsStart > 0) + log("tensor leak:", numTensorsEnd - numTensorsStart); +} +async function warmup(instance, userConfig) { + await check(instance, false); + const t0 = now(); + instance.state = "warmup"; + if (userConfig) + instance.config = mergeDeep(instance.config, userConfig); + if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === "none") { + return empty(); + } + return new Promise(async (resolve) => { + await instance.models.load(); + await runCompile(instance); + const res = await runInference(instance); + const t1 = now(); + if (instance.config.debug) + log("warmup", instance.config.warmup, Math.round(t1 - t0), "ms"); + instance.emit("warmup"); + resolve(res); + }); +} + +// src/human.ts +var _numTensors, _analyzeMemoryLeaks, _checkSanity, _sanity, _loops; +var Human = class { + constructor(userConfig) { + __publicField(this, "version"); + __publicField(this, "config"); + __publicField(this, "result"); + __publicField(this, "state"); + __publicField(this, "process"); + __publicField(this, "tf"); + __publicField(this, "env", env); + __publicField(this, "draw", draw_exports); + __publicField(this, "match", match_exports); + __publicField(this, "models"); + __publicField(this, "events"); + __publicField(this, "faceTriangulation"); + __publicField(this, "faceUVMap"); + __publicField(this, "performance"); + __privateAdd(this, _numTensors, void 0); + __privateAdd(this, _analyzeMemoryLeaks, void 0); + __privateAdd(this, _checkSanity, void 0); + __publicField(this, "analyze", (...msg) => { + if (!__privateGet(this, _analyzeMemoryLeaks)) + return; + const currentTensors = this.tf.engine().state.numTensors; + const previousTensors = __privateGet(this, _numTensors); + __privateSet(this, _numTensors, currentTensors); + const leaked = currentTensors - previousTensors; + if (leaked !== 0) + log(...msg, leaked); + }); + __privateAdd(this, _sanity, (input) => { + if (!__privateGet(this, _checkSanity)) + return null; + if (!input) + return "input is not defined"; + if (this.env.node && !(input instanceof tf38.Tensor)) + return "input must be a tensor"; + try { + this.tf.getBackend(); + } catch (e) { + return "backend not loaded"; + } + return null; + }); + __publicField(this, "webcam", new WebCam()); + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) + this.events.dispatchEvent(new Event(event)); + }); + __privateAdd(this, _loops, {}); + const tfVersion = (tf38.version.tfjs || tf38.version_core).replace(/-(.*)/, ""); + config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; + config.modelBasePath = env.browser ? "../models/" : "file://models/"; + this.version = version2; + Object.defineProperty(this, "version", { value: version2 }); + this.config = JSON.parse(JSON.stringify(config)); + Object.seal(this.config); + this.config.cacheModels = typeof indexedDB !== "undefined"; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + setModelLoadOptions(this.config); + this.tf = tf38; + this.state = "idle"; + __privateSet(this, _numTensors, 0); + __privateSet(this, _analyzeMemoryLeaks, false); + __privateSet(this, _checkSanity, false); + this.performance = {}; + this.events = typeof EventTarget !== "undefined" ? new EventTarget() : void 0; + this.models = new Models(this); + init2(); + this.result = empty(); + this.process = { tensor: null, canvas: null }; + this.faceTriangulation = triangulation; + this.faceUVMap = uvmap; + validateModel(this, null, ""); + this.emit("create"); + if (this.config.debug || this.env.browser) + log(`version: ${this.version}`); + if (this.config.debug) + log(`tfjs version: ${this.tf.version["tfjs-core"]}`); + const envTemp = JSON.parse(JSON.stringify(this.env)); + delete envTemp.kernels; + delete envTemp.initial; + delete envTemp.perfadd; + if (this.config.debug) + log("environment:", envTemp); + } + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) + this.config = mergeDeep(this.config, userConfig); + return msgs; + } + now() { + return now(); + } + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + async segmentation(input, userConfig) { + var _a, _b, _c; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (!this.config.segmentation.enabled) + return null; + const processed = await process2(input, this.config); + if (!processed.tensor) + return null; + let tensor6 = null; + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) + tensor6 = await predict20(processed.tensor, this.config); + if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) + tensor6 = await predict16(processed.tensor, this.config); + if ((_c = this.config.segmentation.modelPath) == null ? void 0 : _c.includes("selfie")) + tensor6 = await predict21(processed.tensor, this.config); + tf38.dispose(processed.tensor); + return tensor6; + } + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + async load(userConfig) { + this.state = "load"; + const timeStamp = now(); + const count2 = Object.values(this.models.models).filter((model23) => model23).length; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (this.env.initial) { + if (!await check(this, false)) + log("error: backend check failed"); + await tf38.ready(); + if (this.env.browser) { + if (this.config.debug) + log("configuration:", this.config); + if (this.config.debug) + log("tf flags:", this.tf.ENV.flags); + } + } + await this.models.load(this); + if (this.env.initial && this.config.debug) + log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); + this.env.initial = false; + const loaded = Object.values(this.models.models).filter((model23) => model23).length; + if (loaded !== count2) { + this.models.validate(); + this.emit("load"); + } + const current = Math.trunc(now() - timeStamp); + if (current > (this.performance.loadModels || 0)) + this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current; + } + next(result = this.result) { + return calc2(result, this.config); + } + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + async profile(input, userConfig) { + const profile = await this.tf.profile(() => this.detect(input, userConfig)); + const kernels = {}; + let total = 0; + for (const kernel of profile.kernels) { + const ms = Number(kernel.kernelTimeMs) || 0; + if (kernels[kernel.name]) + kernels[kernel.name] += ms; + else + kernels[kernel.name] = ms; + total += ms; + } + const kernelArr = []; + Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1], perc: 0 })); + for (const kernel of kernelArr) { + kernel.perc = Math.round(1e3 * kernel.time / total) / 1e3; + kernel.time = Math.round(1e3 * kernel.time) / 1e3; + } + kernelArr.sort((a, b) => b.time - a.time); + kernelArr.length = 20; + return kernelArr; + } + async detect(input, userConfig) { + this.state = "detect"; + return new Promise(async (resolve) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u; + this.state = "config"; + let timeStamp; + this.config = mergeDeep(this.config, userConfig); + this.state = "check"; + const error = __privateGet(this, _sanity).call(this, input); + if (error) { + log(error, input); + this.emit("error"); + resolve(empty(error)); + } + const timeStart = now(); + await this.load(); + timeStamp = now(); + this.state = "image"; + const img = await process2(input, this.config); + this.process = img; + this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Get Image:"); + if (!img.tensor) { + if (this.config.debug) + log("could not convert input to tensor"); + this.emit("error"); + resolve(empty("could not convert input to tensor")); + return; + } + this.emit("image"); + timeStamp = now(); + this.config.skipAllowed = await skip(this.config, img.tensor); + this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; + if (!this.performance.totalFrames) + this.performance.totalFrames = 0; + if (!this.performance.cachedFrames) + this.performance.cachedFrames = 0; + this.performance.totalFrames++; + if (this.config.skipAllowed) + this.performance.cachedFrames++; + this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Check Changed:"); + let faceRes = []; + let bodyRes = []; + let handRes = []; + let objectRes = []; + this.state = "detect:face"; + if (this.config.async) { + faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : []; + if (this.performance.face) + delete this.performance.face; + } else { + timeStamp = now(); + faceRes = this.config.face.enabled ? await detectFace(this, img.tensor) : []; + this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) + faceRes = await faceRes; + this.analyze("Start Body:"); + this.state = "detect:body"; + const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet")) + bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; + else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; + else if ((_c = this.config.body.modelPath) == null ? void 0 : _c.includes("efficientpose")) + bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; + else if ((_d = this.config.body.modelPath) == null ? void 0 : _d.includes("movenet")) + bodyRes = this.config.body.enabled ? predict17(img.tensor, bodyConfig) : []; + if (this.performance.body) + delete this.performance.body; + } else { + timeStamp = now(); + if ((_e = this.config.body.modelPath) == null ? void 0 : _e.includes("posenet")) + bodyRes = this.config.body.enabled ? await predict19(img.tensor, bodyConfig) : []; + else if ((_f = this.config.body.modelPath) == null ? void 0 : _f.includes("blazepose")) + bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; + else if ((_g = this.config.body.modelPath) == null ? void 0 : _g.includes("efficientpose")) + bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; + else if ((_h = this.config.body.modelPath) == null ? void 0 : _h.includes("movenet")) + bodyRes = this.config.body.enabled ? await predict17(img.tensor, bodyConfig) : []; + this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Body:"); + this.analyze("Start Hand:"); + this.state = "detect:hand"; + const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_j = (_i = this.config.hand.detector) == null ? void 0 : _i.modelPath) == null ? void 0 : _j.includes("handdetect")) + handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; + else if ((_l = (_k = this.config.hand.detector) == null ? void 0 : _k.modelPath) == null ? void 0 : _l.includes("handtrack")) + handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; + if (this.performance.hand) + delete this.performance.hand; + } else { + timeStamp = now(); + if ((_n = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n.includes("handdetect")) + handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; + else if ((_p = (_o = this.config.hand.detector) == null ? void 0 : _o.modelPath) == null ? void 0 : _p.includes("handtrack")) + handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; + this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Hand:"); + this.analyze("Start Object:"); + this.state = "detect:object"; + if (this.config.async) { + if ((_q = this.config.object.modelPath) == null ? void 0 : _q.includes("nanodet")) + objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; + else if ((_r = this.config.object.modelPath) == null ? void 0 : _r.includes("centernet")) + objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; + if (this.performance.object) + delete this.performance.object; + } else { + timeStamp = now(); + if ((_s = this.config.object.modelPath) == null ? void 0 : _s.includes("nanodet")) + objectRes = this.config.object.enabled ? await predict18(img.tensor, this.config) : []; + else if ((_t = this.config.object.modelPath) == null ? void 0 : _t.includes("centernet")) + objectRes = this.config.object.enabled ? await predict2(img.tensor, this.config) : []; + this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Object:"); + this.state = "detect:await"; + if (this.config.async) + [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]); + this.state = "detect:gesture"; + let gestureRes = []; + if (this.config.gesture.enabled) { + timeStamp = now(); + gestureRes = [...face2(faceRes), ...body2(bodyRes), ...hand2(handRes), ...iris2(faceRes)]; + if (!this.config.async) + this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + else if (this.performance.gesture) + delete this.performance.gesture; + } + this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart); + const shape = ((_u = this.process.tensor) == null ? void 0 : _u.shape) || [0, 0, 0, 0]; + this.result = { + face: faceRes, + body: bodyRes, + hand: handRes, + gesture: gestureRes, + object: objectRes, + performance: this.performance, + canvas: this.process.canvas, + timestamp: Date.now(), + error: null, + width: shape[2], + height: shape[1], + get persons() { + return join2(faceRes, bodyRes, handRes, gestureRes, shape); + } + }; + tf38.dispose(img.tensor); + this.emit("detect"); + this.state = "idle"; + resolve(this.result); + }); + } + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + async video(element, run = true, delay = 0) { + if (run) { + if (!__privateGet(this, _loops)[element.id]) { + if (this.config.debug) + log("video start", element.id); + __privateGet(this, _loops)[element.id] = true; + } + if (!element.paused && __privateGet(this, _loops)[element.id] && element.readyState >= 2) + await this.detect(element); + if (delay > 0) + await this.sleep(delay); + if (__privateGet(this, _loops)[element.id]) + requestAnimationFrame(() => this.video(element, run, delay)); + } else { + if (this.config.debug) + log("video stop", element.id); + __privateGet(this, _loops)[element.id] = false; + } + } +}; +_numTensors = new WeakMap(); +_analyzeMemoryLeaks = new WeakMap(); +_checkSanity = new WeakMap(); +_sanity = new WeakMap(); +_loops = new WeakMap(); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + Env, + Human, + defaults, + draw, + empty, + env, + match, + models +}); diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index 52df9c58..00f17911 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -4,7 +4,318 @@ author: ' */ -"use strict";var So=Object.create;var P2=Object.defineProperty;var jo=Object.getOwnPropertyDescriptor;var No=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,Oo=Object.prototype.hasOwnProperty;var Lo=(e,t,n)=>t in e?P2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Co=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var n in t)P2(e,n,{get:t[n],enumerable:!0})},M1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of No(t))!Oo.call(e,r)&&r!==n&&P2(e,r,{get:()=>t[r],enumerable:!(o=jo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?So(Io(e)):{},M1(t||!e||!e.__esModule?P2(n,"default",{value:e,enumerable:!0}):n,e)),Wo=e=>M1(P2({},"__esModule",{value:!0}),e);var k=(e,t,n)=>(Lo(e,typeof t!="symbol"?t+"":t,n),n),P1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var fe=(e,t,n)=>(P1(e,t,"read from private field"),n?n.call(e):t.get(e)),i2=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},k2=(e,t,n,o)=>(P1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var H=Co((y4,E2)=>{"use strict";var Vt=Object.defineProperty,Do=Object.getOwnPropertyDescriptor,Fo=Object.getOwnPropertyNames,Bo=Object.prototype.hasOwnProperty,Ho=(e,t)=>{for(var n in t)Vt(e,n,{get:t[n],enumerable:!0})},Gt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Fo(t))!Bo.call(e,r)&&r!==n&&Vt(e,r,{get:()=>t[r],enumerable:!(o=Do(t,r))||o.enumerable});return e},Zt=(e,t,n)=>(Gt(e,t,"default"),n&&Gt(n,t,"default")),Go=e=>Gt(Vt({},"__esModule",{value:!0}),e),w2={};Ho(w2,{version:()=>Yo});E2.exports=Go(w2);Zt(w2,require("@tensorflow/tfjs-core"),E2.exports);Zt(w2,require("@tensorflow/tfjs-converter"),E2.exports);Zt(w2,require("@tensorflow/tfjs-backend-wasm"),E2.exports);var k1="4.0.0",Vo="4.0.0",Zo="4.0.0",Xo="4.0.0",qo="4.0.0",Uo="0.0.1-alpha.14",Yo={tfjs:k1,"tfjs-core":k1,"tfjs-converter":Vo,"tfjs-backend-cpu":Zo,"tfjs-backend-webgl":Xo,"tfjs-backend-wasm":qo,"tfjs-backend-webgpu":Uo}});var x4={};we(x4,{Env:()=>z2,Human:()=>g1,default:()=>g1,defaults:()=>qe,draw:()=>$2,empty:()=>ue,env:()=>v,match:()=>jt,models:()=>b1});module.exports=Wo(x4);var Ae=V(H());function u(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function w1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var g=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Xt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Xt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&u("invalid configuration",o),o}function A0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=A0(s,A):n[r]=A}),n),{})}var qe={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var I0=V(H());var N=V(H());var E1=` +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod3) => function __require() { + return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports; +}; +var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod3, isNodeMode, target) => (target = mod3 != null ? __create(__getProtoOf(mod3)) : {}, __copyProps( + isNodeMode || !mod3 || !mod3.__esModule ? __defProp(target, "default", { value: mod3, enumerable: true }) : target, + mod3 +)); +var __toCommonJS = (mod3) => __copyProps(__defProp({}, "__esModule", { value: true }), mod3); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all2) => { + for (var name in all2) + __defProp2(target, name, { get: all2[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __reExport = (target, mod3, secondTarget) => (__copyProps2(target, mod3, "default"), secondTarget && __copyProps2(secondTarget, mod3, "default")); + var __toCommonJS2 = (mod3) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod3); + var tf_node_wasm_exports = {}; + __export2(tf_node_wasm_exports, { + version: () => version7 + }); + module2.exports = __toCommonJS2(tf_node_wasm_exports); + __reExport(tf_node_wasm_exports, require("@tensorflow/tfjs-core"), module2.exports); + __reExport(tf_node_wasm_exports, require("@tensorflow/tfjs-converter"), module2.exports); + __reExport(tf_node_wasm_exports, require("@tensorflow/tfjs-backend-wasm"), module2.exports); + var version4 = "4.1.0"; + var version22 = "4.1.0"; + var version32 = "4.1.0"; + var version42 = "4.1.0"; + var version5 = "4.1.0"; + var version6 = "0.0.1-alpha.16"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + "tfjs-converter": version22, + "tfjs-backend-cpu": version32, + "tfjs-backend-webgl": version42, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 + }; + } +}); + +// src/human.ts +var human_exports = {}; +__export(human_exports, { + Env: () => Env, + Human: () => Human, + default: () => Human, + defaults: () => config, + draw: () => draw_exports, + empty: () => empty, + env: () => env, + match: () => match_exports, + models: () => models_exports2 +}); +module.exports = __toCommonJS(human_exports); +var tf38 = __toESM(require_tfjs_esm()); + +// src/util/util.ts +function log(...msg) { + const dt = new Date(); + const ts = `${dt.getHours().toString().padStart(2, "0")}:${dt.getMinutes().toString().padStart(2, "0")}:${dt.getSeconds().toString().padStart(2, "0")}.${dt.getMilliseconds().toString().padStart(3, "0")}`; + if (msg) + console.log(ts, "Human:", ...msg); +} +function join(folder, file) { + const separator = folder.endsWith("/") ? "" : "/"; + const skipJoin = file.startsWith(".") || file.startsWith("/") || file.startsWith("http:") || file.startsWith("https:") || file.startsWith("file:"); + const path = skipJoin ? `${file}` : `${folder}${separator}${file}`; + if (!path.toLocaleLowerCase().includes(".json")) + throw new Error(`modelpath error: expecting json file: ${path}`); + return path; +} +var now = () => { + if (typeof performance !== "undefined") + return performance.now(); + return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString()); +}; +function validate(defaults, config3, parent = "config", msgs = []) { + for (const key of Object.keys(config3)) { + if (typeof config3[key] === "object") { + validate(defaults[key], config3[key], key, msgs); + } else { + const defined = defaults && typeof defaults[key] !== "undefined"; + if (!defined) + msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` }); + const same = defaults && typeof defaults[key] === typeof config3[key]; + if (defined && !same) + msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] }); + } + } + if (config3.debug && parent === "config" && msgs.length > 0) + log("invalid configuration", msgs); + return msgs; +} +function mergeDeep(...objects) { + const isObject = (obj) => obj && typeof obj === "object"; + return objects.reduce((prev, obj) => { + Object.keys(obj || {}).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + if (Array.isArray(pVal) && Array.isArray(oVal)) + prev[key] = pVal.concat(...oVal); + else if (isObject(pVal) && isObject(oVal)) + prev[key] = mergeDeep(pVal, oVal); + else + prev[key] = oVal; + }); + return prev; + }, {}); +} + +// src/config.ts +var config = { + backend: "", + modelBasePath: "", + cacheModels: true, + validateModels: true, + wasmPath: "", + wasmPlatformFetch: false, + debug: false, + async: true, + warmup: "full", + cacheSensitivity: 0.7, + skipAllowed: false, + deallocate: false, + flags: {}, + softwareKernels: false, + filter: { + enabled: true, + equalization: false, + width: 0, + height: 0, + flip: false, + return: true, + autoBrightness: true, + brightness: 0, + contrast: 0, + sharpness: 0, + blur: 0, + saturation: 0, + hue: 0, + negative: false, + sepia: false, + vintage: false, + kodachrome: false, + technicolor: false, + polaroid: false, + pixelate: 0 + }, + gesture: { + enabled: true + }, + face: { + enabled: true, + detector: { + modelPath: "blazeface.json", + rotation: true, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + iouThreshold: 0.1, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + modelPath: "iris.json" + }, + emotion: { + enabled: true, + minConfidence: 0.1, + skipFrames: 99, + skipTime: 1500, + modelPath: "emotion.json" + }, + description: { + enabled: true, + modelPath: "faceres.json", + skipFrames: 99, + skipTime: 3e3, + minConfidence: 0.1 + }, + antispoof: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "antispoof.json" + }, + liveness: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "liveness.json" + } + }, + body: { + enabled: true, + modelPath: "movenet-lightning.json", + maxDetected: -1, + minConfidence: 0.3, + skipFrames: 1, + skipTime: 200 + }, + hand: { + enabled: true, + rotation: true, + skipFrames: 99, + skipTime: 1e3, + minConfidence: 0.5, + iouThreshold: 0.2, + maxDetected: -1, + landmarks: true, + detector: { + modelPath: "handtrack.json" + }, + skeleton: { + modelPath: "handlandmark-full.json" + } + }, + object: { + enabled: false, + modelPath: "centernet.json", + minConfidence: 0.2, + iouThreshold: 0.4, + maxDetected: 10, + skipFrames: 99, + skipTime: 2e3 + }, + segmentation: { + enabled: false, + modelPath: "rvm.json", + ratio: 0.5, + mode: "default" + } +}; + +// src/util/env.ts +var tf3 = __toESM(require_tfjs_esm()); + +// src/image/image.ts +var tf2 = __toESM(require_tfjs_esm()); + +// src/image/imagefxshaders.ts +var vertexIdentity = ` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -14,7 +325,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var z1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +338,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14]; gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19]; } -`,S1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +351,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,j1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +365,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,N1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +389,8 @@ gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794; gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265; } -`,I1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +412,6035 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var qt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},Ut=class{constructor(t,n,o){k(this,"uniform",{});k(this,"attribute",{});k(this,"gl");k(this,"id");k(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(u(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(u("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){u("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){u(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),qt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);qt(n,"uniform",this.uniform),qt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function O1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=ee(100,100),c={},d={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){u("filter: cannot get webgl context");return}this.gl=i;function y(T,m){if(!(T===l.width&&m===l.height)){if(l.width=T,l.height=m,!A){let h=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,h,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function x(T,m){let h=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,h);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,m,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:h,texture:P}}function p(T){return r[T]=r[T]||x(l.width,l.height),r[T]}function f(T=0){if(!a)return;let m=null,h=null,S=!1;e===0?m=t:m=p(o).texture||null,e++,n&&!(T&d.INTERMEDIATE)?(h=null,S=e%2===0):(o=(o+1)%2,h=p(o).fbo||null),i.bindTexture(i.TEXTURE_2D,m),i.bindFramebuffer(i.FRAMEBUFFER,h),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function b(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new Ut(i,E1,T),!a)return u("filter: could not get webgl program"),null;let m=Float32Array.BYTES_PER_ELEMENT,h=4*m;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,h,0*m),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,h,2*m),c[T]=a,a}let M={colorMatrix:T=>{let m=new Float32Array(T);m[4]/=255,m[9]/=255,m[14]/=255,m[19]/=255;let h=m[18]===1&&m[3]===0&&m[8]===0&&m[13]===0&&m[15]===0&&m[16]===0&&m[17]===0&&m[19]===0?S1:z1,S=b(h);!S||(i.uniform1fv(S.uniform.m,m),f())},brightness:T=>{let m=(T||0)+1;M.colorMatrix([m,0,0,0,0,0,m,0,0,0,0,0,m,0,0,0,0,0,1,0])},saturation:T=>{let m=(T||0)*2/3+1,h=(m-1)*-.5;M.colorMatrix([m,h,h,0,0,h,m,h,0,0,h,h,m,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:T=>{let m=(T||0)+1,h=-128*(m-1);M.colorMatrix([m,0,0,0,h,0,m,0,0,h,0,0,m,0,h,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let m=Math.cos(T),h=Math.sin(T),S=.213,P=.715,I=.072;M.colorMatrix([S+m*(1-S)+h*-S,P+m*-P+h*-P,I+m*-I+h*(1-I),0,0,S+m*-S+h*.143,P+m*(1-P)+h*.14,I+m*-I+h*-.283,0,0,S+m*-S+h*-(1-S),P+m*-P+h*P,I+m*(1-I)+h*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let m=new Float32Array(T),h=1/l.width,S=1/l.height,P=b(I1);!P||(i.uniform1fv(P.uniform.m,m),i.uniform2f(P.uniform.px,h,S),f())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let m=T||1;M.convolution.call(this,[0,-1*m,0,-1*m,1+4*m,-1*m,0,-1*m,0])},emboss:T=>{let m=T||1;M.convolution.call(this,[-2*m,-1*m,0,-1*m,1,1*m,0,1*m,2*m])},blur:T=>{let m=T/7/l.width,h=T/7/l.height,S=b(N1);!S||(i.uniform2f(S.uniform.px,0,h),f(d.INTERMEDIATE),i.uniform2f(S.uniform.px,m,0),f())},pixelate:T=>{let m=T/l.width,h=T/l.height,S=b(j1);!S||(i.uniform2f(S.uniform.size,m,h),f())}};this.add=function(T){let m=Array.prototype.slice.call(arguments,1),h=M[T];s.push({func:h,args:m})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let m=0;md.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let d=[Y.sub(n[0],o[0]),Y.sub(n[1],o[1]),Y.sub(n[2],o[2])],i=[Y.sub(r[0],o[0]),Y.sub(r[1],o[1]),Y.sub(r[2],o[2])],y=[Y.mul(d[0],l),Y.mul(d[1],l),Y.mul(d[2],l)],x=Y.stack([y[0],y[1],y[2]],2);c=Y.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),Y.dispose([...d,...i,...y])}else c=Y.expandDims(t,0);return Y.dispose([...n,...o,...r,n,t,e]),c}var G2=3840,v0=null,R0=null,l2=null,e0,K0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function Yt(){K0.inputSum=0,K0.cacheDiff=1,K0.sumMethod=0,K0.inputTensor=void 0}function ee(e,t){let n;if(v.browser)if(v.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof v.Canvas!="undefined"?n=new v.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function V2(e,t){let n=t||ee(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function Z2(e,t,n=!0){var y,x,p;if(!e)return t.debug&&u("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof v.Canvas!="undefined"&&e instanceof v.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let b=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(b,0),N.dispose(b)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let b=N.cast(f,"float32");N.dispose(f),f=b}return{tensor:f,canvas:t.filter.return?R0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&u("input stream is not ready"),{tensor:null,canvas:v0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&u("cannot determine input dimensions"),{tensor:null,canvas:v0};let s=o,A=r;if(s>G2&&(s=G2,A=Math.trunc(s*r/o)),A>G2&&(A=G2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((x=t.filter)==null?void 0:x.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!v0||v0.width!==s||v0.height!==A)&&(v0=ee(s,A));let a=v0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),(!R0||v0.width!==R0.width||v0.height!==R0.height)&&(R0=ee(v0.width,v0.height)),t.filter.enabled&&v.webgl.supported?(e0||(e0=v.browser?new O1:null),v.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((p=e0.get())==null?void 0:p.length)>1?R0=e0.apply(v0):R0=e0.draw(v0)):(t.debug&&u("input process error: cannot initialize filters"),v.webgl.supported=!1,t.filter.enabled=!1,V2(v0,R0))):(V2(v0,R0),e0&&(e0=null),v.filter=!!e0),!n)return{tensor:null,canvas:R0};if(!R0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(v.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!l2||R0.width!==l2.width||R0.height!==l2.height)&&(l2=ee(R0.width,R0.height)),N.browser&&v.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(R0):(l2=V2(R0),l=N.browser.fromPixels(l2));else{let M=V2(R0).getContext("2d").getImageData(0,0,s,A);c=M.data.length/s/A;let T=new Uint8Array(M.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let d=N.cast(l,"float32"),i=t.filter.equalization?await H2(d):N.expandDims(d,0);if(N.dispose([l,d]),t.filter.autoBrightness){let f=N.max(i),b=await f.data();t.filter.brightness=b[0]>1?1-b[0]/255:1-b[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?R0:null}}async function L1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!K0.inputTensor)K0.inputTensor=N.clone(t);else if(K0.inputTensor.shape[1]!==t.shape[1]||K0.inputTensor.shape[2]!==t.shape[2])N.dispose(K0.inputTensor),K0.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,K0.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([K0.inputTensor,o.diff,o.squared,o.sum]),K0.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function C1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||u("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||u("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var z2=class{constructor(){k(this,"browser");k(this,"node");k(this,"worker");k(this,"platform","");k(this,"agent","");k(this,"backends",[]);k(this,"initial");k(this,"filter");k(this,"tfjs");k(this,"offscreen");k(this,"perfadd",!1);k(this,"tensorflow",{version:void 0,gpu:void 0});k(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});k(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});k(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});k(this,"cpu",{model:void 0,flags:[]});k(this,"kernels",[]);k(this,"Canvas");k(this,"Image");k(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:I0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(I0.engine().registryFactory);try{this.tensorflow={version:I0.backend().binding?I0.backend().binding.TF_Version:void 0,gpu:I0.backend().binding?I0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await I0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await I0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=ee(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=I0.getKernelsForBackend(I0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},v=new z2;var q2=class{constructor(){k(this,"config");k(this,"element");k(this,"stream");k(this,"devices",[]);k(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});k(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let r=document.getElementById(t.element);if(r&&r instanceof HTMLVideoElement)this.element=r;else{this.config.debug&&u("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&u("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&u("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&u("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&u("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(r){u("webcam",r);return}if(!this.stream){this.config.debug&&u("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(r=>{this.element?this.element.onloadeddata=()=>r(!0):r(!1)}),await this.element.play(),this.config.debug&&u("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});k(this,"pause",()=>{this.element&&this.element.pause()});k(this,"play",async()=>{this.element&&await this.element.play()});k(this,"stop",()=>{this.config.debug&&u("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var c2=V(H());var Kt={};we(Kt,{age:()=>cr,"anti-spoofing":()=>Vr,antispoof:()=>_o,blazeface:()=>$o,"blazeface-back":()=>xr,"blazeface-front":()=>dr,"blazepose-detect":()=>Gr,"blazepose-detector2d":()=>yr,"blazepose-detector3d":()=>fr,"blazepose-full":()=>mr,"blazepose-heavy":()=>pr,"blazepose-lite":()=>ur,centernet:()=>er,default:()=>ns,efficientpose:()=>hr,"efficientpose-i-lite":()=>Zr,"efficientpose-ii-lite":()=>Xr,"efficientpose-iv":()=>qr,emotion:()=>tr,faceboxes:()=>br,facemesh:()=>nr,"facemesh-attention":()=>Tr,"facemesh-attention-alt":()=>gr,"facemesh-detection-full":()=>vr,"facemesh-detection-short":()=>Rr,"facemesh-orig":()=>Mr,faceres:()=>or,"faceres-deep":()=>Pr,gear:()=>kr,gender:()=>Er,"gender-ssrnet-imdb":()=>wr,handdetect:()=>zr,"handlandmark-full":()=>rr,"handlandmark-lite":()=>Sr,"handlandmark-sparse":()=>jr,handskeleton:()=>Nr,handtrack:()=>sr,"insightface-efficientnet-b0":()=>Ur,"insightface-ghostnet-strides1":()=>Yr,"insightface-ghostnet-strides2":()=>Kr,"insightface-mobilenet-emore":()=>Jr,"insightface-mobilenet-swish":()=>Qr,iris:()=>Ar,liveness:()=>ar,meet:()=>Ir,mobileface:()=>Or,mobilefacenet:()=>Lr,models:()=>ir,"movenet-lightning":()=>lr,"movenet-multipose":()=>Cr,"movenet-thunder":()=>Wr,nanodet:()=>Dr,"nanodet-e":()=>_r,"nanodet-g":()=>$r,"nanodet-m":()=>es,"nanodet-t":()=>ts,posenet:()=>Fr,rvm:()=>Br,selfie:()=>Hr});var _o=853098,$o=538928,er=4030290,tr=820516,nr=1477958,or=6978814,rr=5431368,sr=2964837,Ar=2599092,ar=592976,ir=0,lr=4650216,cr=161240,xr=538928,dr=402048,yr=7499400,fr=5928856,mr=6338290,pr=27501554,ur=2725490,hr=5651240,br=2013002,gr=2387598,Tr=2382414,vr=1026192,Rr=201268,Mr=2955780,Pr=13957620,kr=1498916,wr=161236,Er=201808,zr=3515612,Sr=2023432,jr=5286322,Nr=5502280,Ir=372228,Or=2183192,Lr=5171976,Cr=9448838,Wr=12477112,Dr=7574558,Fr=5032780,Br=3739355,Hr=212886,Gr=5928804,Vr=853098,Zr=2269064,Xr=5651240,qr=25643252,Ur=13013224,Yr=8093408,Kr=8049584,Jr=6938536,Qr=12168584,_r=12319156,$r=7574558,es=1887474,ts=5294216,ns={antispoof:_o,blazeface:$o,centernet:er,emotion:tr,facemesh:nr,faceres:or,"handlandmark-full":rr,handtrack:sr,iris:Ar,liveness:ar,models:ir,"movenet-lightning":lr,age:cr,"blazeface-back":xr,"blazeface-front":dr,"blazepose-detector2d":yr,"blazepose-detector3d":fr,"blazepose-full":mr,"blazepose-heavy":pr,"blazepose-lite":ur,efficientpose:hr,faceboxes:br,"facemesh-attention-alt":gr,"facemesh-attention":Tr,"facemesh-detection-full":vr,"facemesh-detection-short":Rr,"facemesh-orig":Mr,"faceres-deep":Pr,gear:kr,"gender-ssrnet-imdb":wr,gender:Er,handdetect:zr,"handlandmark-lite":Sr,"handlandmark-sparse":jr,handskeleton:Nr,meet:Ir,mobileface:Or,mobilefacenet:Lr,"movenet-multipose":Cr,"movenet-thunder":Wr,nanodet:Dr,posenet:Fr,rvm:Br,selfie:Hr,"blazepose-detect":Gr,"anti-spoofing":Vr,"efficientpose-i-lite":Zr,"efficientpose-ii-lite":Xr,"efficientpose-iv":qr,"insightface-efficientnet-b0":Ur,"insightface-ghostnet-strides1":Yr,"insightface-ghostnet-strides2":Kr,"insightface-mobilenet-emore":Jr,"insightface-mobilenet-swish":Qr,"nanodet-e":_r,"nanodet-g":$r,"nanodet-m":es,"nanodet-t":ts};var O0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},E0={};async function os(e,t){return O0.debug&&u("load model fetch:",e,t),fetch(e,t)}function W1(e){O0.cacheModels=e.cacheModels,O0.verbose=e.debug,O0.modelBasePath=e.modelBasePath}async function O(e){var c,d,i,y;let t=w1(O0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;E0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:Kt[o],inCache:!1,url:""},O0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=O0.cacheSupported&&O0.cacheModels?await c2.io.listModels():{}}catch(x){O0.cacheSupported=!1}E0[o].inCache=O0.cacheSupported&&O0.cacheModels&&Object.keys(s).includes(r),E0[o].url=E0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(x,p)=>os(x,p)},a=new c2.GraphModel(E0[o].url,A),l=!1;try{a.findIOHandler(),O0.debug&&u("model load handler:",a.handler)}catch(x){u("error finding model i/o handler:",t,x)}try{let x=await((c=a.handler)==null?void 0:c.load())||null;E0[o].sizeFromManifest=((d=x==null?void 0:x.weightData)==null?void 0:d.byteLength)||0,x?a.loadSync(x):a=await c2.loadGraphModel(E0[o].inCache?r:t,A),E0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,O0.verbose&&u("load:",{model:o,url:a.modelUrl,bytes:E0[o].sizeLoadedWeights}),l=!0}catch(x){u("error loading model:",t,x)}if(l&&O0.cacheModels&&O0.cacheSupported&&!E0[o].inCache)try{let x=await a.save(r);O0.debug&&u("model saved:",r,x)}catch(x){u("error saving model:",t,x)}return a}var Jt="3.0.0";var E=V(H());var m0=V(H());var n0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function As(){let e=n0.gl;!e||(n0.extensions=e.getSupportedExtensions())}function D1(e){var t;if(e.config.backend==="humangl"&&(n0.name in m0.engine().registry&&!((t=n0==null?void 0:n0.gl)!=null&&t.getParameter(n0.gl.VERSION))&&(u("humangl error: backend invalid context"),e.models.reset()),!m0.findBackend(n0.name))){try{n0.canvas=ee(100,100)}catch(r){u("humangl error: cannot create canvas:",r);return}try{if(n0.gl=n0.canvas.getContext("webgl2",n0.webGLattr),!n0.gl){u("humangl error: cannot get webgl context");return}if(!n0.gl.getParameter(n0.gl.VERSION).includes("2.0")){u("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}n0.canvas&&(n0.canvas.addEventListener("webglcontextlost",s=>{throw u("humangl error:",s.type),u("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),n0.canvas.addEventListener("webglcontextrestored",s=>{u("humangl error: context restored:",s)}),n0.canvas.addEventListener("webglcontextcreationerror",s=>{u("humangl error: context create:",s)}))}catch(r){u("humangl error: cannot get webgl context:",r);return}try{m0.setWebGLContext(2,n0.gl)}catch(r){u("humangl error: cannot set webgl context:",r);return}try{let r=new m0.GPGPUContext(n0.gl);m0.registerBackend(n0.name,()=>new m0.MathBackendWebGL(r),n0.priority)}catch(r){u("humangl error: cannot register webgl backend:",r);return}try{m0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:n0.name};m0.registerKernel(A)})}catch(r){u("humangl error: cannot update webgl backend registration:",r);return}try{m0.env().flagRegistry.WEBGL_VERSION&&m0.env().set("WEBGL_VERSION",2)}catch(r){u("humangl error: cannot set WebGL backend flags:",r);return}As();let n=m0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&u("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):u("humangl error: no current gl context:",o,n0.gl)}}var Ee=V(H()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function F1(){C.tf255=Ee.scalar(255,"float32"),C.tf1=Ee.scalar(1,"float32"),C.tf2=Ee.scalar(2,"float32"),C.tf05=Ee.scalar(.5,"float32"),C.tf127=Ee.scalar(127.5,"float32"),C.rgb=Ee.tensor1d([.2989,.587,.114],"float32")}async function ls(){return await v.updateBackend(),v.browser?v.webgpu.supported&&v.webgpu.backend?"webgpu":v.webgl.supported&&v.webgl.backend?"webgl":v.wasm.supported&&v.wasm.backend?"wasm":"cpu":"tensorflow"}function cs(e){let t=[];if(!v.kernels.includes("mod")){let n={kernelName:"Mod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.sub(o.inputs.a,E.mul(E.div(o.inputs.a,o.inputs.b),o.inputs.b)))};E.registerKernel(n),v.kernels.push("mod"),t.push("mod")}if(!v.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.add(E.mul(E.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),E.mod(o.inputs.a,o.inputs.b)))};E.registerKernel(n),v.kernels.push("floormod"),t.push("floormod")}if(!v.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>{let r=E.getBackend();E.setBackend("cpu");let s=E.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return E.setBackend(r),s})};E.registerKernel(n),v.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&u("registered kernels:",t)}var B1={};async function S2(e,t=!1){var n;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await ls()),t||v.initial||e.config.backend&&e.config.backend.length>0&&E.getBackend()!==e.config.backend){let o=g();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&u("running inside web worker"),v.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&u("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),v.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&u(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),v.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")u("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let s=await navigator.gpu.requestAdapter();if(e.config.debug&&u("enumerated webgpu adapter:",s),!s)u("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let A="requestAdapterInfo"in s?await s.requestAdapterInfo():void 0;u("webgpu adapter info:",A)}}let r=Object.keys(E.engine().registryFactory);if(e.config.backend==="humangl"&&!r.includes("humangl")&&(D1(e),r=Object.keys(E.engine().registryFactory)),e.config.debug&&u("available backends:",r),r.includes(e.config.backend)||(u(`error: backend ${e.config.backend} not found in registry`),e.config.backend=v.node?"tensorflow":"webgl",e.config.debug&&u(`override: setting backend ${e.config.backend}`)),e.config.debug&&u("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(E.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&E.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&u("wasm path:",e.config.wasmPath),typeof E.setWasmPaths!="undefined")E.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let s=!1,A=!1;try{s=await E.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await E.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&u(`wasm execution: ${A?"simd":"no simd"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&u("warning: wasm simd support is not enabled")}catch(a){u("wasm detection failed")}}try{await E.setBackend(e.config.backend),await E.ready()}catch(s){return u("error: cannot set backend:",e.config.backend,s),!1}e.config.debug&&(B1=JSON.parse(JSON.stringify(E.env().flags)))}if((E.getBackend()==="humangl"||E.getBackend()==="webgl")&&(E.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&E.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),E.env().flagRegistry.WEBGL_EXP_CONV&&E.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(u("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),E.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),E.getBackend(),e.config.debug){let r=E.env().flags,s={};for(let A of Object.keys(r))B1[A]!==r[A]&&(s[A]=r[A]);e.config.debug&&Object.keys(s).length>0&&u("backend:",E.getBackend(),"flags:",s)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&u("flags:",e.config.flags);for(let[r,s]of Object.entries(e.config.flags))E.env().set(r,s)}E.enableProdMode(),F1(),e.performance.initBackend=Math.trunc(g()-o),e.config.backend=E.getBackend(),await v.updateBackend(),cs(e.config),v.initial=!1}return!0}function U2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&u("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};E.registerKernel(o)}v.kernels=E.getKernelsForBackend(E.getBackend()).map(n=>n.kernelName.toLowerCase())}var $2={};we($2,{all:()=>Hs,body:()=>K2,canvas:()=>Bs,face:()=>Y2,gesture:()=>_2,hand:()=>J2,init:()=>o5,object:()=>Q2,options:()=>x0,person:()=>Fs});var J0=e=>{if(!e)u("draw error: invalid canvas");else if(!e.getContext)u("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)u("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),_=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Ye=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function te(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` -`).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function be(e,t,n,o,r){e.fillStyle=Ye(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function me(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function Qt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Ye(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function G1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){Qt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oj2[e]),L4=ds.map(e=>j2[e]),C4=ys.map(e=>j2[e]);function ze(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var fs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],us=[[474,475],[475,476],[476,477],[477,474]],hs=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],bs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],gs=[[469,470],[470,471],[471,472],[472,469]],Ts=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],W4={lips:ze(fs),leftEye:ze(ms),leftEyebrow:ze(ps),leftIris:ze(us),rightEye:ze(hs),rightEyebrow:ze(bs),rightIris:ze(gs),faceOval:ze(Ts)};var vs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Rs=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ms=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ps=[[474,475],[475,476],[476,477],[477,474]],ks=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ws=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Es=[[469,470],[470,471],[471,472],[472,469]],zs=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Se(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Ss={lips:Se(vs),leftEye:Se(Rs),leftEyebrow:Se(Ms),leftIris:Se(Ps),rightEye:Se(ks),rightEyebrow:Se(ws),rightIris:Se(Es),faceOval:Se(zs)},js=Object.entries(Ss).map(([e,t])=>t.map(n=>[n,e])).flat(),D4=new Map(js),N2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Qe=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],_e=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var K;function Ns(e,t){var o,r,s,A,a,l,c,d,i;if(!K.drawLabels||((o=K.faceLabels)==null?void 0:o.length)===0)return;let n=K.faceLabels.slice();if(e.score&&(n=_(n,"[score]",100*e.score)),e.gender&&(n=_(n,"[gender]",e.gender)),e.genderScore&&(n=_(n,"[genderScore]",100*e.genderScore)),e.age&&(n=_(n,"[age]",e.age)),e.distance&&(n=_(n,"[distance]",100*e.distance)),e.real&&(n=_(n,"[real]",100*e.real)),e.live&&(n=_(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(x=>`${Math.trunc(100*x.score)}% ${x.emotion}`);y.length>3&&(y.length=3),n=_(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=_(n,"[roll]",Ue(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=_(n,"[yaw]",Ue(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=_(n,"[pitch]",Ue(e.rotation.angle.pitch))),(i=(d=e.rotation)==null?void 0:d.gaze)!=null&&i.bearing&&(n=_(n,"[gaze]",Ue(e.rotation.gaze.bearing))),te(t,n,e.box[0],e.box[1],K)}function Is(e,t){var n,o,r,s;if(((n=e.annotations)==null?void 0:n.leftEyeIris)&&((o=e.annotations)==null?void 0:o.leftEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(((r=e.annotations)==null?void 0:r.rightEyeIris)&&((s=e.annotations)==null?void 0:s.rightEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function Os(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,s=new Path2D(` - M ${e.box[0]+e.box[2]/2} ${e.box[1]} +`; + +// src/image/imagefx.ts +var collect = (source, prefix, collection) => { + const r = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r, (match2, name) => { + collection[name] = 0; + return match2; + }); +}; +var GLProgram = class { + constructor(gl, vertexSource, fragmentSource) { + __publicField(this, "uniform", {}); + __publicField(this, "attribute", {}); + __publicField(this, "gl"); + __publicField(this, "id"); + __publicField(this, "compile", (source, type) => { + const shader = this.gl.createShader(type); + if (!shader) { + log("filter: could not create shader"); + return null; + } + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) { + log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || "unknown"}`); + return null; + } + return shader; + }); + this.gl = gl; + const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER); + const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER); + this.id = this.gl.createProgram(); + if (!vertexShader || !fragmentShader) + return; + if (!this.id) { + log("filter: could not create webgl program"); + return; + } + this.gl.attachShader(this.id, vertexShader); + this.gl.attachShader(this.id, fragmentShader); + this.gl.linkProgram(this.id); + if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) { + log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || "unknown"}`); + return; + } + this.gl.useProgram(this.id); + collect(vertexSource, "attribute", this.attribute); + for (const a in this.attribute) + this.attribute[a] = this.gl.getAttribLocation(this.id, a); + collect(vertexSource, "uniform", this.uniform); + collect(fragmentSource, "uniform", this.uniform); + for (const u in this.uniform) + this.uniform[u] = this.gl.getUniformLocation(this.id, u); + } +}; +function GLImageFilter() { + let drawCount = 0; + let sourceTexture = null; + let lastInChain = false; + let currentFramebufferIndex = -1; + let tempFramebuffers = [null, null]; + let filterChain = []; + let vertexBuffer = null; + let currentProgram = null; + const fxcanvas = canvas(100, 100); + const shaderProgramCache = {}; + const DRAW = { INTERMEDIATE: 1 }; + const gl = fxcanvas.getContext("webgl"); + if (!gl) { + log("filter: cannot get webgl context"); + return; + } + this.gl = gl; + function resize(width, height) { + if (width === fxcanvas.width && height === fxcanvas.height) + return; + fxcanvas.width = width; + fxcanvas.height = height; + if (!vertexBuffer) { + const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); + vertexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + } + gl.viewport(0, 0, fxcanvas.width, fxcanvas.height); + tempFramebuffers = [null, null]; + } + function createFramebufferTexture(width, height) { + const fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + const renderbuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return { fbo, texture }; + } + function getTempFramebuffer(index2) { + tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height); + return tempFramebuffers[index2]; + } + function draw(flags = 0) { + if (!currentProgram) + return; + let source = null; + let target = null; + let flipY = false; + if (drawCount === 0) + source = sourceTexture; + else + source = getTempFramebuffer(currentFramebufferIndex).texture || null; + drawCount++; + if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { + target = null; + flipY = drawCount % 2 === 0; + } else { + currentFramebufferIndex = (currentFramebufferIndex + 1) % 2; + target = getTempFramebuffer(currentFramebufferIndex).fbo || null; + } + gl.bindTexture(gl.TEXTURE_2D, source); + gl.bindFramebuffer(gl.FRAMEBUFFER, target); + gl.uniform1f(currentProgram.uniform["flipY"], flipY ? -1 : 1); + gl.drawArrays(gl.TRIANGLES, 0, 6); + } + function compileShader(fragmentSource) { + if (shaderProgramCache[fragmentSource]) { + currentProgram = shaderProgramCache[fragmentSource]; + gl.useProgram((currentProgram ? currentProgram.id : null) || null); + return currentProgram; + } + currentProgram = new GLProgram(gl, vertexIdentity, fragmentSource); + if (!currentProgram) { + log("filter: could not get webgl program"); + return null; + } + const floatSize = Float32Array.BYTES_PER_ELEMENT; + const vertSize = 4 * floatSize; + gl.enableVertexAttribArray(currentProgram.attribute["pos"]); + gl.vertexAttribPointer(currentProgram.attribute["pos"], 2, gl.FLOAT, false, vertSize, 0 * floatSize); + gl.enableVertexAttribArray(currentProgram.attribute["uv"]); + gl.vertexAttribPointer(currentProgram.attribute["uv"], 2, gl.FLOAT, false, vertSize, 2 * floatSize); + shaderProgramCache[fragmentSource] = currentProgram; + return currentProgram; + } + const filter = { + colorMatrix: (matrix) => { + const m = new Float32Array(matrix); + m[4] /= 255; + m[9] /= 255; + m[14] /= 255; + m[19] /= 255; + const shader = m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0 ? colorMatrixWithoutAlpha : colorMatrixWithAlpha; + const program = compileShader(shader); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + draw(); + }, + brightness: (brightness) => { + const b = (brightness || 0) + 1; + filter.colorMatrix([ + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + saturation: (amount) => { + const x = (amount || 0) * 2 / 3 + 1; + const y = (x - 1) * -0.5; + filter.colorMatrix([ + x, + y, + y, + 0, + 0, + y, + x, + y, + 0, + 0, + y, + y, + x, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturate: () => { + filter.saturation(-1); + }, + contrast: (amount) => { + const v = (amount || 0) + 1; + const o = -128 * (v - 1); + filter.colorMatrix([ + v, + 0, + 0, + 0, + o, + 0, + v, + 0, + 0, + o, + 0, + 0, + v, + 0, + o, + 0, + 0, + 0, + 1, + 0 + ]); + }, + negative: () => { + filter.contrast(-2); + }, + hue: (rotation) => { + rotation = (rotation || 0) / 180 * Math.PI; + const cos = Math.cos(rotation); + const sin = Math.sin(rotation); + const lumR = 0.213; + const lumG = 0.715; + const lumB = 0.072; + filter.colorMatrix([ + lumR + cos * (1 - lumR) + sin * -lumR, + lumG + cos * -lumG + sin * -lumG, + lumB + cos * -lumB + sin * (1 - lumB), + 0, + 0, + lumR + cos * -lumR + sin * 0.143, + lumG + cos * (1 - lumG) + sin * 0.14, + lumB + cos * -lumB + sin * -0.283, + 0, + 0, + lumR + cos * -lumR + sin * -(1 - lumR), + lumG + cos * -lumG + sin * lumG, + lumB + cos * (1 - lumB) + sin * lumB, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturateLuminance: () => { + filter.colorMatrix([ + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0, + 0, + 0, + 1, + 0 + ]); + }, + sepia: () => { + filter.colorMatrix([ + 0.393, + 0.7689999, + 0.18899999, + 0, + 0, + 0.349, + 0.6859999, + 0.16799999, + 0, + 0, + 0.272, + 0.5339999, + 0.13099999, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + brownie: () => { + filter.colorMatrix([ + 0.5997023498159715, + 0.34553243048391263, + -0.2708298674538042, + 0, + 47.43192855600873, + -0.037703249837783157, + 0.8609577587992641, + 0.15059552388459913, + 0, + -36.96841498319127, + 0.24113635128153335, + -0.07441037908422492, + 0.44972182064877153, + 0, + -7.562075277591283, + 0, + 0, + 0, + 1, + 0 + ]); + }, + vintagePinhole: () => { + filter.colorMatrix([ + 0.6279345635605994, + 0.3202183420819367, + -0.03965408211312453, + 0, + 9.651285835294123, + 0.02578397704808868, + 0.6441188644374771, + 0.03259127616149294, + 0, + 7.462829176470591, + 0.0466055556782719, + -0.0851232987247891, + 0.5241648018700465, + 0, + 5.159190588235296, + 0, + 0, + 0, + 1, + 0 + ]); + }, + kodachrome: () => { + filter.colorMatrix([ + 1.1285582396593525, + -0.3967382283601348, + -0.03992559172921793, + 0, + 63.72958762196502, + -0.16404339962244616, + 1.0835251566291304, + -0.05498805115633132, + 0, + 24.732407896706203, + -0.16786010706155763, + -0.5603416277695248, + 1.6014850761964943, + 0, + 35.62982807460946, + 0, + 0, + 0, + 1, + 0 + ]); + }, + technicolor: () => { + filter.colorMatrix([ + 1.9125277891456083, + -0.8545344976951645, + -0.09155508482755585, + 0, + 11.793603434377337, + -0.3087833385928097, + 1.7658908555458428, + -0.10601743074722245, + 0, + -70.35205161461398, + -0.231103377548616, + -0.7501899197440212, + 1.847597816108189, + 0, + 30.950940869491138, + 0, + 0, + 0, + 1, + 0 + ]); + }, + polaroid: () => { + filter.colorMatrix([ + 1.438, + -0.062, + -0.062, + 0, + 0, + -0.122, + 1.378, + -0.122, + 0, + 0, + -0.016, + -0.016, + 1.483, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + shiftToBGR: () => { + filter.colorMatrix([ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + convolution: (matrix) => { + const m = new Float32Array(matrix); + const pixelSizeX = 1 / fxcanvas.width; + const pixelSizeY = 1 / fxcanvas.height; + const program = compileShader(convolution); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + gl.uniform2f(program.uniform["px"], pixelSizeX, pixelSizeY); + draw(); + }, + detectEdges: () => { + filter.convolution.call(this, [ + 0, + 1, + 0, + 1, + -4, + 1, + 0, + 1, + 0 + ]); + }, + sobelX: () => { + filter.convolution.call(this, [ + -1, + 0, + 1, + -2, + 0, + 2, + -1, + 0, + 1 + ]); + }, + sobelY: () => { + filter.convolution.call(this, [ + -1, + -2, + -1, + 0, + 0, + 0, + 1, + 2, + 1 + ]); + }, + sharpen: (amount) => { + const a = amount || 1; + filter.convolution.call(this, [ + 0, + -1 * a, + 0, + -1 * a, + 1 + 4 * a, + -1 * a, + 0, + -1 * a, + 0 + ]); + }, + emboss: (size2) => { + const s = size2 || 1; + filter.convolution.call(this, [ + -2 * s, + -1 * s, + 0, + -1 * s, + 1, + 1 * s, + 0, + 1 * s, + 2 * s + ]); + }, + blur: (size2) => { + const blurSizeX = size2 / 7 / fxcanvas.width; + const blurSizeY = size2 / 7 / fxcanvas.height; + const program = compileShader(blur); + if (!program) + return; + gl.uniform2f(program.uniform["px"], 0, blurSizeY); + draw(DRAW.INTERMEDIATE); + gl.uniform2f(program.uniform["px"], blurSizeX, 0); + draw(); + }, + pixelate: (size2) => { + const blurSizeX = size2 / fxcanvas.width; + const blurSizeY = size2 / fxcanvas.height; + const program = compileShader(pixelate); + if (!program) + return; + gl.uniform2f(program.uniform["size"], blurSizeX, blurSizeY); + draw(); + } + }; + this.add = function(name) { + const args = Array.prototype.slice.call(arguments, 1); + const func = filter[name]; + filterChain.push({ func, args }); + }; + this.reset = function() { + filterChain = []; + }; + this.get = function() { + return filterChain; + }; + this.apply = function(image28) { + resize(image28.width, image28.height); + drawCount = 0; + if (!sourceTexture) + sourceTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, sourceTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image28); + for (let i = 0; i < filterChain.length; i++) { + lastInChain = i === filterChain.length - 1; + const f = filterChain[i]; + f.func.apply(this, f.args || []); + } + return fxcanvas; + }; + this.draw = function(image28) { + this.add("brightness", 0); + return this.apply(image28); + }; +} + +// src/image/enhance.ts +var tf = __toESM(require_tfjs_esm()); +async function histogramEqualization(inputImage) { + const squeeze14 = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage; + const rgb2 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb2[0]), tf.min(rgb2[1]), tf.min(rgb2[2])]; + const max5 = [tf.max(rgb2[0]), tf.max(rgb2[1]), tf.max(rgb2[2])]; + const absMax = await Promise.all(max5.map((channel) => channel.data())); + const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); + const maxRange = maxValue > 1 ? 255 : 1; + const factor = maxRange / maxValue; + let final; + if (factor > 1) { + const sub11 = [tf.sub(rgb2[0], min2[0]), tf.sub(rgb2[1], min2[1]), tf.sub(rgb2[2], min2[2])]; + const range = [tf.sub(max5[0], min2[0]), tf.sub(max5[1], min2[1]), tf.sub(max5[2], min2[2])]; + const enh = [tf.mul(sub11[0], factor), tf.mul(sub11[1], factor), tf.mul(sub11[2], factor)]; + const stack5 = tf.stack([enh[0], enh[1], enh[2]], 2); + final = tf.reshape(stack5, [1, squeeze14.shape[0] || 0, squeeze14.shape[1] || 0, 3]); + tf.dispose([...sub11, ...range, ...enh]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb2, ...min2, ...max5, rgb2, squeeze14, inputImage]); + return final; +} + +// src/image/image.ts +var maxSize = 3840; +var inCanvas = null; +var outCanvas = null; +var tmpCanvas = null; +var fx; +var last = { + inputSum: 0, + cacheDiff: 1, + sumMethod: 0, + inputTensor: void 0 +}; +function reset() { + last.inputSum = 0; + last.cacheDiff = 1; + last.sumMethod = 0; + last.inputTensor = void 0; +} +function canvas(width, height) { + let c; + if (env.browser) { + if (env.worker) { + if (typeof OffscreenCanvas === "undefined") + throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported"); + c = new OffscreenCanvas(width, height); + } else { + if (typeof document === "undefined") + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } + } else { + if (typeof env.Canvas !== "undefined") + c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") + c = new globalThis.Canvas(width, height); + } + return c; +} +function copy(input, output) { + const outputCanvas = output || canvas(input.width, input.height); + const ctx = outputCanvas.getContext("2d"); + ctx.drawImage(input, 0, 0); + return outputCanvas; +} +async function process2(input, config3, getTensor = true) { + var _a, _b, _c; + if (!input) { + if (config3.debug) + log("input error: input is missing"); + return { tensor: null, canvas: null }; + } + if (!(input instanceof tf2.Tensor) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + throw new Error("input error: type is not recognized"); + } + if (input instanceof tf2.Tensor) { + let tensor7 = null; + if (input["isDisposedInternal"]) + throw new Error("input error: attempted to use tensor but it is disposed"); + if (!input.shape) + throw new Error("input error: attempted to use tensor without a shape"); + if (input.shape.length === 3) { + if (input.shape[2] === 3) { + tensor7 = tf2.expandDims(input, 0); + } else if (input.shape[2] === 4) { + const rgb2 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb2, 0); + tf2.dispose(rgb2); + } + } else if (input.shape.length === 4) { + if (input.shape[3] === 3) { + tensor7 = tf2.clone(input); + } else if (input.shape[3] === 4) { + tensor7 = tf2.slice4d(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + } + } + if (tensor7 == null || tensor7.shape.length !== 4 || tensor7.shape[0] !== 1 || tensor7.shape[3] !== 3) + throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); + if (tensor7.dtype === "int32") { + const cast8 = tf2.cast(tensor7, "float32"); + tf2.dispose(tensor7); + tensor7 = cast8; + } + return { tensor: tensor7, canvas: config3.filter.return ? outCanvas : null }; + } + if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) { + if (config3.debug) + log("input stream is not ready"); + return { tensor: null, canvas: inCanvas }; + } + const originalWidth = input["naturalWidth"] || input["videoWidth"] || input["width"] || input["shape"] && input["shape"][1] > 0; + const originalHeight = input["naturalHeight"] || input["videoHeight"] || input["height"] || input["shape"] && input["shape"][2] > 0; + if (!originalWidth || !originalHeight) { + if (config3.debug) + log("cannot determine input dimensions"); + return { tensor: null, canvas: inCanvas }; + } + let targetWidth = originalWidth; + let targetHeight = originalHeight; + if (targetWidth > maxSize) { + targetWidth = maxSize; + targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth); + } + if (targetHeight > maxSize) { + targetHeight = maxSize; + targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight); + } + if ((((_a = config3.filter) == null ? void 0 : _a.width) || 0) > 0) + targetWidth = config3.filter.width; + else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) + targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); + if ((config3.filter.height || 0) > 0) + targetHeight = config3.filter.height; + else if ((config3.filter.width || 0) > 0) + targetHeight = originalHeight * ((config3.filter.width || 0) / originalWidth); + if (!targetWidth || !targetHeight) + throw new Error("input error: cannot determine dimension"); + if (!inCanvas || inCanvas.width !== targetWidth || inCanvas.height !== targetHeight) + inCanvas = canvas(targetWidth, targetHeight); + const inCtx = inCanvas.getContext("2d"); + if (typeof ImageData !== "undefined" && input instanceof ImageData) { + inCtx.putImageData(input, 0, 0); + } else { + if (config3.filter.flip && typeof inCtx.translate !== "undefined") { + inCtx.translate(originalWidth, 0); + inCtx.scale(-1, 1); + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + inCtx.setTransform(1, 0, 0, 1, 0, 0); + } else { + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + } + } + if (!outCanvas || inCanvas.width !== outCanvas.width || inCanvas.height !== outCanvas.height) + outCanvas = canvas(inCanvas.width, inCanvas.height); + if (config3.filter.enabled && env.webgl.supported) { + if (!fx) + fx = env.browser ? new GLImageFilter() : null; + env.filter = !!fx; + if (!(fx == null ? void 0 : fx.add)) { + if (config3.debug) + log("input process error: cannot initialize filters"); + env.webgl.supported = false; + config3.filter.enabled = false; + copy(inCanvas, outCanvas); + } else { + fx.reset(); + if (config3.filter.brightness !== 0) + fx.add("brightness", config3.filter.brightness); + if (config3.filter.contrast !== 0) + fx.add("contrast", config3.filter.contrast); + if (config3.filter.sharpness !== 0) + fx.add("sharpen", config3.filter.sharpness); + if (config3.filter.blur !== 0) + fx.add("blur", config3.filter.blur); + if (config3.filter.saturation !== 0) + fx.add("saturation", config3.filter.saturation); + if (config3.filter.hue !== 0) + fx.add("hue", config3.filter.hue); + if (config3.filter.negative) + fx.add("negative"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.vintage) + fx.add("brownie"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.kodachrome) + fx.add("kodachrome"); + if (config3.filter.technicolor) + fx.add("technicolor"); + if (config3.filter.polaroid) + fx.add("polaroid"); + if (config3.filter.pixelate !== 0) + fx.add("pixelate", config3.filter.pixelate); + if (((_c = fx.get()) == null ? void 0 : _c.length) > 1) + outCanvas = fx.apply(inCanvas); + else + outCanvas = fx.draw(inCanvas); + } + } else { + copy(inCanvas, outCanvas); + if (fx) + fx = null; + env.filter = !!fx; + } + if (!getTensor) + return { tensor: null, canvas: outCanvas }; + if (!outCanvas) + throw new Error("canvas error: cannot create output"); + let pixels; + let depth = 3; + if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { + if (env.browser && tf2.browser) { + pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; + } else { + depth = input.data.length / input.height / input.width; + const arr = new Uint8Array(input.data.buffer); + pixels = tf2.tensor(arr, [input.height, input.width, depth], "int32"); + } + } else { + if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) + tmpCanvas = canvas(outCanvas.width, outCanvas.height); + if (tf2.browser && env.browser) { + if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { + pixels = tf2.browser.fromPixels(outCanvas); + } else { + tmpCanvas = copy(outCanvas); + pixels = tf2.browser.fromPixels(tmpCanvas); + } + } else { + const tempCanvas = copy(outCanvas); + const tempCtx = tempCanvas.getContext("2d"); + const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); + depth = tempData.data.length / targetWidth / targetHeight; + const arr = new Uint8Array(tempData.data.buffer); + pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); + } + } + if (depth === 4) { + const rgb2 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb2; + } + if (!pixels) + throw new Error("input error: cannot create tensor"); + const casted = tf2.cast(pixels, "float32"); + const tensor6 = config3.filter.equalization ? await histogramEqualization(casted) : tf2.expandDims(casted, 0); + tf2.dispose([pixels, casted]); + if (config3.filter.autoBrightness) { + const max5 = tf2.max(tensor6); + const maxVal = await max5.data(); + config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; + tf2.dispose(max5); + } + return { tensor: tensor6, canvas: config3.filter.return ? outCanvas : null }; +} +async function skip(config3, input) { + let skipFrame = false; + if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) + return skipFrame; + if (!last.inputTensor) { + last.inputTensor = tf2.clone(input); + } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { + tf2.dispose(last.inputTensor); + last.inputTensor = tf2.clone(input); + } else { + const t2 = {}; + t2.diff = tf2.sub(input, last.inputTensor); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; + tf2.dispose([last.inputTensor, t2.diff, t2.squared, t2.sum]); + last.inputTensor = tf2.clone(input); + skipFrame = diffRelative <= (config3.cacheSensitivity || 0); + } + return skipFrame; +} +async function compare(config3, input1, input2) { + const t2 = {}; + if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) { + if (!config3.debug) + log("invalid input tensor or tensor shapes do not match:", input1.shape, input2.shape); + return 0; + } + if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) { + if (!config3.debug) + log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); + return 0; + } + t2.input1 = tf2.clone(input1); + t2.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? tf2.image.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : tf2.clone(input2); + t2.diff = tf2.sub(t2.input1, t2.input2); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; + tf2.dispose([t2.input1, t2.input2, t2.diff, t2.squared, t2.sum]); + return diffRelative; +} + +// src/util/env.ts +var Env = class { + constructor() { + __publicField(this, "browser"); + __publicField(this, "node"); + __publicField(this, "worker"); + __publicField(this, "platform", ""); + __publicField(this, "agent", ""); + __publicField(this, "backends", []); + __publicField(this, "initial"); + __publicField(this, "filter"); + __publicField(this, "tfjs"); + __publicField(this, "offscreen"); + __publicField(this, "perfadd", false); + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + __publicField(this, "kernels", []); + __publicField(this, "Canvas"); + __publicField(this, "Image"); + __publicField(this, "ImageData"); + this.browser = typeof navigator !== "undefined"; + this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; + this.tfjs = { version: tf3.version["tfjs-core"] }; + this.offscreen = typeof OffscreenCanvas !== "undefined"; + this.initial = true; + this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; + if (typeof navigator !== "undefined") { + const raw = navigator.userAgent.match(/\(([^()]+)\)/g); + if (raw == null ? void 0 : raw[0]) { + const platformMatch = raw[0].match(/\(([^()]+)\)/g); + this.platform = (platformMatch == null ? void 0 : platformMatch[0]) ? platformMatch[0].replace(/\(|\)/g, "") : ""; + this.agent = navigator.userAgent.replace(raw[0], ""); + if (this.platform[1]) + this.agent = this.agent.replace(raw[1], ""); + this.agent = this.agent.replace(/ /g, " "); + } + } else if (typeof process !== "undefined") { + this.platform = `${process.platform} ${process.arch}`; + this.agent = `NodeJS ${process.version}`; + } + } + async updateBackend() { + this.backends = Object.keys(tf3.engine().registryFactory); + try { + this.tensorflow = { + version: tf3.backend()["binding"] ? tf3.backend()["binding"].TF_Version : void 0, + gpu: tf3.backend()["binding"] ? tf3.backend()["binding"].isUsingGpuDevice() : void 0 + }; + } catch (e) { + } + this.wasm.supported = typeof WebAssembly !== "undefined"; + this.wasm.backend = this.backends.includes("wasm"); + if (this.wasm.supported && this.wasm.backend) { + this.wasm.simd = await tf3.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + this.wasm.multithread = await tf3.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + } + const c = canvas(100, 100); + const gl = c ? c.getContext("webgl2") : void 0; + this.webgl.supported = typeof gl !== "undefined"; + this.webgl.backend = this.backends.includes("webgl"); + if (this.webgl.supported && this.webgl.backend && gl) { + this.webgl.version = gl.getParameter(gl.VERSION); + this.webgl.vendor = gl.getParameter(gl.VENDOR); + this.webgl.renderer = gl.getParameter(gl.RENDERER); + this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION); + } + this.webgpu.supported = this.browser && typeof navigator.gpu !== "undefined"; + this.webgpu.backend = this.backends.includes("webgpu"); + try { + if (this.webgpu.supported) { + const adapter = await navigator.gpu.requestAdapter(); + this.webgpu.adapter = await (adapter == null ? void 0 : adapter.requestAdapterInfo()); + } + } catch (e) { + this.webgpu.supported = false; + } + try { + this.kernels = tf3.getKernelsForBackend(tf3.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); + } catch (e) { + } + } + updateCPU() { + const cpu = { model: "", flags: [] }; + if (this.node && this.platform.startsWith("linux")) { + } + if (!this.cpu) + Object.defineProperty(this, "cpu", { value: cpu }); + else + this.cpu = cpu; + } +}; +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + __publicField(this, "config"); + __publicField(this, "element"); + __publicField(this, "stream"); + __publicField(this, "devices", []); + __publicField(this, "enumerate", async () => { + try { + const devices = await navigator.mediaDevices.enumerateDevices(); + this.devices = devices.filter((device) => device.kind === "videoinput"); + } catch (e) { + this.devices = []; + } + return this.devices; + }); + __publicField(this, "start", async (webcamConfig) => { + if (webcamConfig == null ? void 0 : webcamConfig.debug) + this.config.debug = webcamConfig == null ? void 0 : webcamConfig.debug; + if (webcamConfig == null ? void 0 : webcamConfig.crop) + this.config.crop = webcamConfig == null ? void 0 : webcamConfig.crop; + if (webcamConfig == null ? void 0 : webcamConfig.mode) + this.config.mode = webcamConfig == null ? void 0 : webcamConfig.mode; + if (webcamConfig == null ? void 0 : webcamConfig.width) + this.config.width = webcamConfig == null ? void 0 : webcamConfig.width; + if (webcamConfig == null ? void 0 : webcamConfig.height) + this.config.height = webcamConfig == null ? void 0 : webcamConfig.height; + if (webcamConfig == null ? void 0 : webcamConfig.id) + this.config.id = webcamConfig == null ? void 0 : webcamConfig.id; + if (webcamConfig == null ? void 0 : webcamConfig.element) { + if (typeof webcamConfig.element === "string") { + const el = document.getElementById(webcamConfig.element); + if (el && el instanceof HTMLVideoElement) { + this.element = el; + } else { + if (this.config.debug) + log("webcam", "cannot get dom element", webcamConfig.element); + return; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) + log("webcam", "unknown dom element", webcamConfig.element); + return; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + resizeMode: this.config.crop ? "crop-and-scale" : "none", + width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth }, + height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight } + } + }; + if (this.config.id) + requestedConstraints.video.deviceId = this.config.id; + this.element.addEventListener("play", () => { + if (this.config.debug) + log("webcam", "play"); + }); + this.element.addEventListener("pause", () => { + if (this.config.debug) + log("webcam", "pause"); + }); + this.element.addEventListener("click", async () => { + if (!this.element || !this.stream) + return; + if (this.element.paused) + await this.element.play(); + else + this.element.pause(); + }); + if (!(navigator == null ? void 0 : navigator.mediaDevices)) { + if (this.config.debug) + log("webcam", "no devices"); + return; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return; + } + if (!this.stream) { + if (this.config.debug) + log("webcam", "no stream"); + return; + } + this.element.srcObject = this.stream; + const ready3 = new Promise((resolve) => { + if (!this.element) + resolve(false); + else + this.element.onloadeddata = () => resolve(true); + }); + await ready3; + await this.element.play(); + if (this.config.debug) { + log("webcam", { + width: this.width, + height: this.height, + label: this.label, + stream: this.stream, + track: this.track, + settings: this.settings, + constraints: this.constraints, + capabilities: this.capabilities + }); + } + }); + __publicField(this, "pause", () => { + if (this.element) + this.element.pause(); + }); + __publicField(this, "play", async () => { + if (this.element) + await this.element.play(); + }); + __publicField(this, "stop", () => { + if (this.config.debug) + log("webcam", "stop"); + if (this.track) + this.track.stop(); + }); + this.config = { + element: void 0, + debug: true, + mode: "front", + crop: false, + width: 0, + height: 0 + }; + } + get track() { + if (!this.stream) + return void 0; + return this.stream.getVideoTracks()[0]; + } + get capabilities() { + if (!this.track) + return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + get constraints() { + if (!this.track) + return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + get settings() { + if (!this.stream) + return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + get label() { + if (!this.track) + return ""; + return this.track.label; + } + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + get height() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; + } +}; + +// src/tfjs/load.ts +var tf4 = __toESM(require_tfjs_esm()); + +// models/models.json +var models_exports = {}; +__export(models_exports, { + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "blazepose-detector2d": () => blazepose_detector2d, + "blazepose-detector3d": () => blazepose_detector3d, + "blazepose-full": () => blazepose_full, + "blazepose-heavy": () => blazepose_heavy, + "blazepose-lite": () => blazepose_lite, + centernet: () => centernet, + default: () => models_default, + efficientpose: () => efficientpose, + "efficientpose-i-lite": () => efficientpose_i_lite, + "efficientpose-ii-lite": () => efficientpose_ii_lite, + "efficientpose-iv": () => efficientpose_iv, + emotion: () => emotion, + faceboxes: () => faceboxes, + facemesh: () => facemesh, + "facemesh-attention": () => facemesh_attention, + "facemesh-attention-alt": () => facemesh_attention_alt, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + "facemesh-orig": () => facemesh_orig, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + gender: () => gender, + "gender-ssrnet-imdb": () => gender_ssrnet_imdb, + handdetect: () => handdetect, + "handlandmark-full": () => handlandmark_full, + "handlandmark-lite": () => handlandmark_lite, + "handlandmark-sparse": () => handlandmark_sparse, + handskeleton: () => handskeleton, + handtrack: () => handtrack, + "insightface-efficientnet-b0": () => insightface_efficientnet_b0, + "insightface-ghostnet-strides1": () => insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": () => insightface_ghostnet_strides2, + "insightface-mobilenet-emore": () => insightface_mobilenet_emore, + "insightface-mobilenet-swish": () => insightface_mobilenet_swish, + iris: () => iris, + liveness: () => liveness, + meet: () => meet, + mobileface: () => mobileface, + mobilefacenet: () => mobilefacenet, + models: () => models, + "movenet-lightning": () => movenet_lightning, + "movenet-multipose": () => movenet_multipose, + "movenet-thunder": () => movenet_thunder, + nanodet: () => nanodet, + "nanodet-e": () => nanodet_e, + "nanodet-g": () => nanodet_g, + "nanodet-m": () => nanodet_m, + "nanodet-t": () => nanodet_t, + posenet: () => posenet, + rvm: () => rvm, + selfie: () => selfie +}); +var antispoof = 853098; +var blazeface = 538928; +var centernet = 4030290; +var emotion = 820516; +var facemesh = 1477958; +var faceres = 6978814; +var handlandmark_full = 5431368; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector2d = 7499400; +var blazepose_detector3d = 5928856; +var blazepose_full = 6338290; +var blazepose_heavy = 27501554; +var blazepose_lite = 2725490; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_alt = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var facemesh_orig = 2955780; +var faceres_deep = 13957620; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_lite = 2023432; +var handlandmark_sparse = 5286322; +var handskeleton = 5502280; +var meet = 372228; +var mobileface = 2183192; +var mobilefacenet = 5171976; +var movenet_multipose = 9448838; +var movenet_thunder = 12477112; +var nanodet = 7574558; +var posenet = 5032780; +var rvm = 3739355; +var selfie = 212886; +var blazepose_detector = 5928856; +var anti_spoofing = 853098; +var efficientpose_i_lite = 2269064; +var efficientpose_ii_lite = 5651240; +var efficientpose_iv = 25643252; +var insightface_efficientnet_b0 = 13013224; +var insightface_ghostnet_strides1 = 8093408; +var insightface_ghostnet_strides2 = 8049584; +var insightface_mobilenet_emore = 6938536; +var insightface_mobilenet_swish = 12168584; +var nanodet_e = 12319156; +var nanodet_g = 7574558; +var nanodet_m = 1887474; +var nanodet_t = 5294216; +var models_default = { + antispoof, + blazeface, + centernet, + emotion, + facemesh, + faceres, + "handlandmark-full": handlandmark_full, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector2d": blazepose_detector2d, + "blazepose-detector3d": blazepose_detector3d, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-alt": facemesh_attention_alt, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "facemesh-orig": facemesh_orig, + "faceres-deep": faceres_deep, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-lite": handlandmark_lite, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "blazepose-detector": blazepose_detector, + "anti-spoofing": anti_spoofing, + "efficientpose-i-lite": efficientpose_i_lite, + "efficientpose-ii-lite": efficientpose_ii_lite, + "efficientpose-iv": efficientpose_iv, + "insightface-efficientnet-b0": insightface_efficientnet_b0, + "insightface-ghostnet-strides1": insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": insightface_ghostnet_strides2, + "insightface-mobilenet-emore": insightface_mobilenet_emore, + "insightface-mobilenet-swish": insightface_mobilenet_swish, + "nanodet-e": nanodet_e, + "nanodet-g": nanodet_g, + "nanodet-m": nanodet_m, + "nanodet-t": nanodet_t +}; + +// src/tfjs/load.ts +var options = { + cacheModels: true, + cacheSupported: true, + verbose: true, + debug: false, + modelBasePath: "" +}; +var modelStats = {}; +async function httpHandler(url, init4) { + if (options.debug) + log("load model fetch:", url, init4); + return fetch(url, init4); +} +function setModelLoadOptions(config3) { + options.cacheModels = config3.cacheModels; + options.verbose = config3.debug; + options.modelBasePath = config3.modelBasePath; +} +async function loadModel(modelPath) { + var _a, _b, _c, _d; + let modelUrl = join(options.modelBasePath, modelPath || ""); + if (!modelUrl.toLowerCase().endsWith(".json")) + modelUrl += ".json"; + const modelPathSegments = modelUrl.includes("/") ? modelUrl.split("/") : modelUrl.split("\\"); + const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace(".json", ""); + const cachedModelName = "indexeddb://" + shortModelName; + modelStats[shortModelName] = { + name: shortModelName, + sizeFromManifest: 0, + sizeLoadedWeights: 0, + sizeDesired: models_exports[shortModelName], + inCache: false, + url: "" + }; + options.cacheSupported = typeof indexedDB !== "undefined"; + let cachedModels = {}; + try { + cachedModels = options.cacheSupported && options.cacheModels ? await tf4.io.listModels() : {}; + } catch (e) { + options.cacheSupported = false; + } + modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); + modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; + const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; + let model23 = new tf4.GraphModel(modelStats[shortModelName].url, tfLoadOptions); + let loaded = false; + try { + model23.findIOHandler(); + if (options.debug) + log("model load handler:", model23["handler"]); + } catch (err) { + log("error finding model i/o handler:", modelUrl, err); + } + try { + const artifacts = await ((_a = model23.handler) == null ? void 0 : _a.load()) || null; + modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; + if (artifacts) + model23.loadSync(artifacts); + else + model23 = await tf4.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + modelStats[shortModelName].sizeLoadedWeights = ((_d = (_c = model23.artifacts) == null ? void 0 : _c.weightData) == null ? void 0 : _d.byteLength) || 0; + if (options.verbose) + log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); + loaded = true; + } catch (err) { + log("error loading model:", modelUrl, err); + } + if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { + try { + const saveResult = await model23.save(cachedModelName); + if (options.debug) + log("model saved:", cachedModelName, saveResult); + } catch (err) { + log("error saving model:", modelUrl, err); + } + } + return model23; +} + +// package.json +var version2 = "3.0.0"; + +// src/tfjs/backend.ts +var tf7 = __toESM(require_tfjs_esm()); + +// src/tfjs/humangl.ts +var tf5 = __toESM(require_tfjs_esm()); +var config2 = { + name: "humangl", + priority: 999, + canvas: null, + gl: null, + extensions: [], + webGLattr: { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + desynchronized: true + } +}; +function extensions() { + const gl = config2.gl; + if (!gl) + return; + config2.extensions = gl.getSupportedExtensions(); +} +function register(instance) { + var _a; + if (instance.config.backend !== "humangl") + return; + if (config2.name in tf5.engine().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { + log("humangl error: backend invalid context"); + instance.models.reset(); + } + if (!tf5.findBackend(config2.name)) { + try { + config2.canvas = canvas(100, 100); + } catch (err) { + log("humangl error: cannot create canvas:", err); + return; + } + try { + config2.gl = config2.canvas.getContext("webgl2", config2.webGLattr); + if (!config2.gl) { + log("humangl error: cannot get webgl context"); + return; + } + const glv2 = config2.gl.getParameter(config2.gl.VERSION).includes("2.0"); + if (!glv2) { + log("backend override: using fallback webgl backend as webgl 2.0 is not detected"); + instance.config.backend = "webgl"; + return; + } + if (config2.canvas) { + config2.canvas.addEventListener("webglcontextlost", (e) => { + log("humangl error:", e.type); + log("possible browser memory leak using webgl or conflict with multiple backend registrations"); + instance.emit("error"); + throw new Error("backend error: webgl context lost"); + }); + config2.canvas.addEventListener("webglcontextrestored", (e) => { + log("humangl error: context restored:", e); + }); + config2.canvas.addEventListener("webglcontextcreationerror", (e) => { + log("humangl error: context create:", e); + }); + } + } catch (err) { + log("humangl error: cannot get webgl context:", err); + return; + } + try { + tf5.setWebGLContext(2, config2.gl); + } catch (err) { + log("humangl error: cannot set webgl context:", err); + return; + } + try { + const ctx = new tf5.GPGPUContext(config2.gl); + tf5.registerBackend(config2.name, () => new tf5.MathBackendWebGL(ctx), config2.priority); + } catch (err) { + log("humangl error: cannot register webgl backend:", err); + return; + } + try { + const kernels = tf5.getKernelsForBackend("webgl"); + kernels.forEach((kernelConfig) => { + const newKernelConfig = { ...kernelConfig, backendName: config2.name }; + tf5.registerKernel(newKernelConfig); + }); + } catch (err) { + log("humangl error: cannot update webgl backend registration:", err); + return; + } + try { + if (tf5.env().flagRegistry.WEBGL_VERSION) + tf5.env().set("WEBGL_VERSION", 2); + } catch (err) { + log("humangl error: cannot set WebGL backend flags:", err); + return; + } + extensions(); + const backend4 = tf5.backend(); + const current = typeof backend4["gpgpu"] !== "undefined" ? backend4["getGPGPUContext"]().gl : null; + if (current) { + if (instance.config.debug) + log("humangl backend registered:", { webgl: current.getParameter(current.VERSION), renderer: current.getParameter(current.RENDERER) }); + } else { + log("humangl error: no current gl context:", current, config2.gl); + } + } +} + +// src/tfjs/constants.ts +var tf6 = __toESM(require_tfjs_esm()); +var constants = { + tf255: 255, + tf1: 1, + tf2: 2, + tf05: 0.5, + tf127: 127.5, + rgb: [0.2989, 0.587, 0.114] +}; +function init() { + constants.tf255 = tf6.scalar(255, "float32"); + constants.tf1 = tf6.scalar(1, "float32"); + constants.tf2 = tf6.scalar(2, "float32"); + constants.tf05 = tf6.scalar(0.5, "float32"); + constants.tf127 = tf6.scalar(127.5, "float32"); + constants.rgb = tf6.tensor1d([0.2989, 0.587, 0.114], "float32"); +} + +// src/tfjs/backend.ts +async function getBestBackend() { + await env.updateBackend(); + if (!env.browser) + return "tensorflow"; + if (env.webgpu.supported && env.webgpu.backend) + return "webgpu"; + if (env.webgl.supported && env.webgl.backend) + return "webgl"; + if (env.wasm.supported && env.wasm.backend) + return "wasm"; + return "cpu"; +} +function registerCustomOps(config3) { + const newKernels = []; + if (!env.kernels.includes("mod")) { + const kernelMod = { + kernelName: "Mod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.sub(op.inputs.a, tf7.mul(tf7.div(op.inputs.a, op.inputs.b), op.inputs.b))) + }; + tf7.registerKernel(kernelMod); + env.kernels.push("mod"); + newKernels.push("mod"); + } + if (!env.kernels.includes("floormod")) { + const kernelFloorMod = { + kernelName: "FloorMod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.add(tf7.mul(tf7.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf7.mod(op.inputs.a, op.inputs.b))) + }; + tf7.registerKernel(kernelFloorMod); + env.kernels.push("floormod"); + newKernels.push("floormod"); + } + if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { + const kernelRotateWithOffset = { + kernelName: "RotateWithOffset", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => { + const backend4 = tf7.getBackend(); + tf7.setBackend("cpu"); + const t2 = tf7.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center); + tf7.setBackend(backend4); + return t2; + }) + }; + tf7.registerKernel(kernelRotateWithOffset); + env.kernels.push("rotatewithoffset"); + newKernels.push("rotatewithoffset"); + } + if (newKernels.length > 0 && config3.debug) + log("registered kernels:", newKernels); +} +var defaultFlags = {}; +async function check(instance, force = false) { + var _a; + instance.state = "backend"; + if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) + instance.config.backend = await getBestBackend(); + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf7.getBackend() !== instance.config.backend) { + const timeStamp = now(); + if (instance.config.backend && instance.config.backend.length > 0) { + if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { + if (instance.config.debug) + log("running inside web worker"); + } + if (env.browser && instance.config.backend === "tensorflow") { + if (instance.config.debug) + log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && (instance.config.backend === "webgl" || instance.config.backend === "humangl")) { + if (instance.config.debug) + log(`override: backend set to ${instance.config.backend} while running in nodejs`); + instance.config.backend = "tensorflow"; + } + if (env.browser && instance.config.backend === "webgpu") { + if (typeof navigator === "undefined" || typeof navigator.gpu === "undefined") { + log("override: backend set to webgpu but browser does not support webgpu"); + instance.config.backend = "webgl"; + } else { + const adapter = await navigator.gpu.requestAdapter(); + if (instance.config.debug) + log("enumerated webgpu adapter:", adapter); + if (!adapter) { + log("override: backend set to webgpu but browser reports no available gpu"); + instance.config.backend = "webgl"; + } else { + const adapterInfo = "requestAdapterInfo" in adapter ? await adapter.requestAdapterInfo() : void 0; + log("webgpu adapter info:", adapterInfo); + } + } + } + let available = Object.keys(tf7.engine().registryFactory); + if (instance.config.backend === "humangl" && !available.includes("humangl")) { + register(instance); + available = Object.keys(tf7.engine().registryFactory); + } + if (instance.config.debug) + log("available backends:", available); + if (!available.includes(instance.config.backend)) { + log(`error: backend ${instance.config.backend} not found in registry`); + instance.config.backend = env.node ? "tensorflow" : "webgl"; + if (instance.config.debug) + log(`override: setting backend ${instance.config.backend}`); + } + if (instance.config.debug) + log("setting backend:", [instance.config.backend]); + if (instance.config.backend === "wasm") { + if (tf7.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) + tf7.env().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (instance.config.debug) + log("wasm path:", instance.config.wasmPath); + if (typeof tf7.setWasmPaths !== "undefined") + tf7.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch); + else + throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); + let mt = false; + let simd = false; + try { + mt = await tf7.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + simd = await tf7.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + if (instance.config.debug) + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); + if (instance.config.debug && !simd) + log("warning: wasm simd support is not enabled"); + } catch (e) { + log("wasm detection failed"); + } + } + try { + await tf7.setBackend(instance.config.backend); + await tf7.ready(); + } catch (err) { + log("error: cannot set backend:", instance.config.backend, err); + return false; + } + if (instance.config.debug) + defaultFlags = JSON.parse(JSON.stringify(tf7.env().flags)); + } + if (tf7.getBackend() === "humangl" || tf7.getBackend() === "webgl") { + if (tf7.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) + tf7.env().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (tf7.env().flagRegistry.WEBGL_EXP_CONV) + tf7.env().set("WEBGL_EXP_CONV", true); + if (instance.config.debug && typeof instance.config.deallocate !== "undefined" && instance.config.deallocate) { + log("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:", true); + tf7.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); + } + } + if (tf7.getBackend() === "webgpu") { + } + if (instance.config.debug) { + const newFlags = tf7.env().flags; + const updatedFlags = {}; + for (const key of Object.keys(newFlags)) { + if (defaultFlags[key] === newFlags[key]) + continue; + updatedFlags[key] = newFlags[key]; + } + if (instance.config.debug && Object.keys(updatedFlags).length > 0) + log("backend:", tf7.getBackend(), "flags:", updatedFlags); + } + if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { + if (instance.config.debug) + log("flags:", instance.config["flags"]); + for (const [key, val] of Object.entries(instance.config.flags)) { + tf7.env().set(key, val); + } + } + tf7.enableProdMode(); + init(); + instance.performance.initBackend = Math.trunc(now() - timeStamp); + instance.config.backend = tf7.getBackend(); + await env.updateBackend(); + registerCustomOps(instance.config); + env.initial = false; + } + return true; +} +function fakeOps(kernelNames, config3) { + for (const kernelName of kernelNames) { + const kernelConfig = { + kernelName, + backendName: config3.backend, + kernelFunc: (param) => { + var _a; + if (config3.debug) + log("kernelFunc", kernelName, config3.backend, param); + return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; + } + }; + tf7.registerKernel(kernelConfig); + } + env.kernels = tf7.getKernelsForBackend(tf7.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); +} + +// src/draw/draw.ts +var draw_exports = {}; +__export(draw_exports, { + all: () => all, + body: () => body, + canvas: () => canvas2, + face: () => face, + gesture: () => gesture, + hand: () => hand, + init: () => init2, + object: () => object, + options: () => options2, + person: () => person +}); + +// src/draw/primitives.ts +var getCanvasContext = (input) => { + if (!input) + log("draw error: invalid canvas"); + else if (!input.getContext) + log("draw error: canvas context not defined"); + else { + const ctx = input.getContext("2d"); + if (!ctx) + log("draw error: cannot get canvas context"); + else + return ctx; + } + return null; +}; +var rad2deg = (theta) => Math.round(theta * 180 / Math.PI); +var replace = (str, source, target) => str.replace(source, typeof target === "number" ? target.toFixed(1) : target); +var colorDepth = (z, opt) => { + if (!opt.useDepth || typeof z === "undefined") + return opt.color; + const rgb2 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb2[0]}, ${rgb2[1]}, ${rgb2[2]}, ${opt.alpha})`; +}; +function labels(ctx, str, startX, startY, localOptions2) { + const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); + const x = Math.max(0, startX); + for (let i = line.length - 1; i >= 0; i--) { + const y = i * localOptions2.lineHeight + startY; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(line[i], x + 5, y + 16); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(line[i], x + 4, y + 15); + } +} +function point(ctx, x, y, z, localOptions2) { + ctx.fillStyle = colorDepth(z, localOptions2); + ctx.beginPath(); + ctx.arc(x, y, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.fill(); +} +function rect(ctx, x, y, width, height, localOptions2) { + ctx.beginPath(); + ctx.lineWidth = localOptions2.lineWidth; + if (localOptions2.useCurves) { + const cx = (x + x + width) / 2; + const cy = (y + y + height) / 2; + ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + ctx.moveTo(x + localOptions2.roundRect, y); + ctx.lineTo(x + width - localOptions2.roundRect, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions2.roundRect); + ctx.lineTo(x + width, y + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions2.roundRect, y + height); + ctx.lineTo(x + localOptions2.roundRect, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions2.roundRect); + ctx.lineTo(x, y + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y, x + localOptions2.roundRect, y); + ctx.closePath(); + } + ctx.stroke(); +} +function lines(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.beginPath(); + ctx.moveTo(points[0][0], points[0][1]); + for (const pt of points) { + ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions2); + ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1])); + } + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function curves(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.lineWidth = localOptions2.lineWidth; + if (!localOptions2.useCurves || points.length <= 2) { + lines(ctx, points, localOptions2); + return; + } + ctx.moveTo(points[0][0], points[0][1]); + for (let i = 0; i < points.length - 2; i++) { + const xc = (points[i][0] + points[i + 1][0]) / 2; + const yc = (points[i][1] + points[i + 1][1]) / 2; + ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc); + } + ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]); + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function arrow(ctx, from, to, radius = 5) { + let angle; + let x; + let y; + ctx.beginPath(); + ctx.moveTo(from[0], from[1]); + ctx.lineTo(to[0], to[1]); + angle = Math.atan2(to[1] - from[1], to[0] - from[0]); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.moveTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + ctx.closePath(); + ctx.stroke(); + ctx.fill(); +} + +// src/draw/options.ts +var options2 = { + color: "rgba(173, 216, 230, 0.6)", + labelColor: "rgba(173, 216, 230, 1)", + shadowColor: "black", + alpha: 0.5, + font: 'small-caps 16px "Segoe UI"', + lineHeight: 18, + lineWidth: 4, + pointSize: 2, + roundRect: 8, + drawPoints: false, + drawLabels: true, + drawBoxes: true, + drawAttention: true, + drawGestures: true, + drawPolygons: true, + drawGaze: true, + fillPolygons: false, + useDepth: true, + useCurves: false, + faceLabels: "", + bodyLabels: "", + bodyPartLabels: "", + objectLabels: "", + handLabels: "", + fingerLabels: "", + gestureLabels: "" +}; + +// src/face/facemeshcoords.ts +var meshAnnotations = { + silhouette: [ + 10, + 338, + 297, + 332, + 284, + 251, + 389, + 356, + 454, + 323, + 361, + 288, + 397, + 365, + 379, + 378, + 400, + 377, + 152, + 148, + 176, + 149, + 150, + 136, + 172, + 58, + 132, + 93, + 234, + 127, + 162, + 21, + 54, + 103, + 67, + 109 + ], + lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409], + lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291], + lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415], + lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], + lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306], + lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408], + lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292], + lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407], + rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + rightEyeIris: [473, 474, 475, 476, 477], + leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398], + leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362], + leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414], + leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463], + leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413], + leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464], + leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465], + leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417], + leftEyebrowLower: [265, 353, 276, 283, 282, 295], + leftEyeIris: [468, 469, 470, 471, 472], + midwayBetweenEyes: [168], + noseTip: [1], + noseBottom: [2], + noseRightCorner: [98], + noseLeftCorner: [327], + rightCheek: [205], + leftCheek: [425] +}; +var meshLandmarks = { + count: 468, + mouth: 13, + symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]] +}; +var blazeFaceLandmarks = { + leftEye: 0, + rightEye: 1, + nose: 2, + mouth: 3, + leftEar: 4, + rightEar: 5, + symmetryLine: [3, 2] +}; +var irisIndices = [ + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } +]; +var UV468 = [ + [0.499976992607117, 0.652534008026123], + [0.500025987625122, 0.547487020492554], + [0.499974012374878, 0.602371990680695], + [0.482113003730774, 0.471979022026062], + [0.500150978565216, 0.527155995368958], + [0.499909996986389, 0.498252987861633], + [0.499523013830185, 0.40106201171875], + [0.289712011814117, 0.380764007568359], + [0.499954998493195, 0.312398016452789], + [0.499987006187439, 0.269918978214264], + [0.500023007392883, 0.107050001621246], + [0.500023007392883, 0.666234016418457], + [0.5000159740448, 0.679224014282227], + [0.500023007392883, 0.692348003387451], + [0.499976992607117, 0.695277988910675], + [0.499976992607117, 0.70593398809433], + [0.499976992607117, 0.719385027885437], + [0.499976992607117, 0.737019002437592], + [0.499967992305756, 0.781370997428894], + [0.499816000461578, 0.562981009483337], + [0.473773002624512, 0.573909997940063], + [0.104906998574734, 0.254140973091125], + [0.365929991006851, 0.409575998783112], + [0.338757991790771, 0.41302502155304], + [0.311120003461838, 0.409460008144379], + [0.274657994508743, 0.389131009578705], + [0.393361985683441, 0.403706014156342], + [0.345234006643295, 0.344011008739471], + [0.370094001293182, 0.346076011657715], + [0.319321990013123, 0.347265005111694], + [0.297903001308441, 0.353591024875641], + [0.24779200553894, 0.410809993743896], + [0.396889001131058, 0.842755019664764], + [0.280097991228104, 0.375599980354309], + [0.106310002505779, 0.399955987930298], + [0.2099249958992, 0.391353011131287], + [0.355807989835739, 0.534406006336212], + [0.471751004457474, 0.65040397644043], + [0.474155008792877, 0.680191993713379], + [0.439785003662109, 0.657229006290436], + [0.414617002010345, 0.66654098033905], + [0.450374007225037, 0.680860996246338], + [0.428770989179611, 0.682690978050232], + [0.374971002340317, 0.727805018424988], + [0.486716985702515, 0.547628998756409], + [0.485300987958908, 0.527395009994507], + [0.257764995098114, 0.314490020275116], + [0.401223003864288, 0.455172002315521], + [0.429818987846375, 0.548614978790283], + [0.421351999044418, 0.533740997314453], + [0.276895999908447, 0.532056987285614], + [0.483370006084442, 0.499586999416351], + [0.33721199631691, 0.282882988452911], + [0.296391993761063, 0.293242990970612], + [0.169294998049736, 0.193813979625702], + [0.447580009698868, 0.302609980106354], + [0.392390012741089, 0.353887975215912], + [0.354490011930466, 0.696784019470215], + [0.067304998636246, 0.730105042457581], + [0.442739009857178, 0.572826027870178], + [0.457098007202148, 0.584792017936707], + [0.381974011659622, 0.694710969924927], + [0.392388999462128, 0.694203019142151], + [0.277076005935669, 0.271932005882263], + [0.422551989555359, 0.563233017921448], + [0.385919004678726, 0.281364023685455], + [0.383103013038635, 0.255840003490448], + [0.331431001424789, 0.119714021682739], + [0.229923993349075, 0.232002973556519], + [0.364500999450684, 0.189113974571228], + [0.229622006416321, 0.299540996551514], + [0.173287004232407, 0.278747975826263], + [0.472878992557526, 0.666198015213013], + [0.446828007698059, 0.668527007102966], + [0.422762006521225, 0.673889994621277], + [0.445307999849319, 0.580065965652466], + [0.388103008270264, 0.693961024284363], + [0.403039008378983, 0.706539988517761], + [0.403629004955292, 0.693953037261963], + [0.460041999816895, 0.557139039039612], + [0.431158006191254, 0.692366003990173], + [0.452181994915009, 0.692366003990173], + [0.475387006998062, 0.692366003990173], + [0.465828001499176, 0.779190003871918], + [0.472328990697861, 0.736225962638855], + [0.473087012767792, 0.717857003211975], + [0.473122000694275, 0.704625964164734], + [0.473033010959625, 0.695277988910675], + [0.427942007780075, 0.695277988910675], + [0.426479011774063, 0.703539967536926], + [0.423162013292313, 0.711845993995667], + [0.4183090031147, 0.720062971115112], + [0.390094995498657, 0.639572978019714], + [0.013953999616206, 0.560034036636353], + [0.499913990497589, 0.58014702796936], + [0.413199990987778, 0.69539999961853], + [0.409626007080078, 0.701822996139526], + [0.468080013990402, 0.601534962654114], + [0.422728985548019, 0.585985004901886], + [0.463079988956451, 0.593783974647522], + [0.37211999297142, 0.47341400384903], + [0.334562003612518, 0.496073007583618], + [0.411671012639999, 0.546965003013611], + [0.242175996303558, 0.14767599105835], + [0.290776997804642, 0.201445996761322], + [0.327338010072708, 0.256527006626129], + [0.399509996175766, 0.748921036720276], + [0.441727995872498, 0.261676013469696], + [0.429764986038208, 0.187834024429321], + [0.412198007106781, 0.108901023864746], + [0.288955003023148, 0.398952007293701], + [0.218936994671822, 0.435410976409912], + [0.41278201341629, 0.398970007896423], + [0.257135003805161, 0.355440020561218], + [0.427684992551804, 0.437960982322693], + [0.448339998722076, 0.536936044692993], + [0.178560003638268, 0.45755398273468], + [0.247308000922203, 0.457193970680237], + [0.286267012357712, 0.467674970626831], + [0.332827985286713, 0.460712015628815], + [0.368755996227264, 0.447206974029541], + [0.398963987827301, 0.432654976844788], + [0.476410001516342, 0.405806005001068], + [0.189241006970406, 0.523923993110657], + [0.228962004184723, 0.348950982093811], + [0.490725994110107, 0.562400996685028], + [0.404670000076294, 0.485132992267609], + [0.019469000399113, 0.401564002037048], + [0.426243007183075, 0.420431017875671], + [0.396993011236191, 0.548797011375427], + [0.266469985246658, 0.376977026462555], + [0.439121007919312, 0.51895797252655], + [0.032313998788595, 0.644356966018677], + [0.419054001569748, 0.387154996395111], + [0.462783008813858, 0.505746960639954], + [0.238978996872902, 0.779744982719421], + [0.198220998048782, 0.831938028335571], + [0.107550002634525, 0.540755033493042], + [0.183610007166862, 0.740257024765015], + [0.134409993886948, 0.333683013916016], + [0.385764002799988, 0.883153975009918], + [0.490967005491257, 0.579378008842468], + [0.382384985685349, 0.508572995662689], + [0.174399003386497, 0.397670984268188], + [0.318785011768341, 0.39623498916626], + [0.343364000320435, 0.400596976280212], + [0.396100014448166, 0.710216999053955], + [0.187885001301765, 0.588537991046906], + [0.430987000465393, 0.944064974784851], + [0.318993002176285, 0.898285031318665], + [0.266247987747192, 0.869701027870178], + [0.500023007392883, 0.190576016902924], + [0.499976992607117, 0.954452991485596], + [0.366169989109039, 0.398822009563446], + [0.393207013607025, 0.39553701877594], + [0.410373002290726, 0.391080021858215], + [0.194993004202843, 0.342101991176605], + [0.388664990663528, 0.362284004688263], + [0.365961998701096, 0.355970978736877], + [0.343364000320435, 0.355356991291046], + [0.318785011768341, 0.35834002494812], + [0.301414996385574, 0.363156020641327], + [0.058132998645306, 0.319076001644135], + [0.301414996385574, 0.387449026107788], + [0.499987989664078, 0.618434011936188], + [0.415838003158569, 0.624195992946625], + [0.445681989192963, 0.566076993942261], + [0.465844005346298, 0.620640993118286], + [0.49992299079895, 0.351523995399475], + [0.288718998432159, 0.819945991039276], + [0.335278987884521, 0.852819979190826], + [0.440512001514435, 0.902418971061707], + [0.128294005990028, 0.791940987110138], + [0.408771991729736, 0.373893976211548], + [0.455606997013092, 0.451801002025604], + [0.499877005815506, 0.908990025520325], + [0.375436991453171, 0.924192011356354], + [0.11421000212431, 0.615022003650665], + [0.448662012815475, 0.695277988910675], + [0.4480200111866, 0.704632043838501], + [0.447111994028091, 0.715808033943176], + [0.444831997156143, 0.730794012546539], + [0.430011987686157, 0.766808986663818], + [0.406787008047104, 0.685672998428345], + [0.400738000869751, 0.681069016456604], + [0.392399996519089, 0.677703022956848], + [0.367855995893478, 0.663918972015381], + [0.247923001646996, 0.601333022117615], + [0.452769994735718, 0.420849978923798], + [0.43639200925827, 0.359887003898621], + [0.416164010763168, 0.368713974952698], + [0.413385987281799, 0.692366003990173], + [0.228018000721931, 0.683571994304657], + [0.468268007040024, 0.352671027183533], + [0.411361992359161, 0.804327011108398], + [0.499989002943039, 0.469825029373169], + [0.479153990745544, 0.442654013633728], + [0.499974012374878, 0.439637005329132], + [0.432112008333206, 0.493588984012604], + [0.499886006116867, 0.866917014122009], + [0.49991300702095, 0.821729004383087], + [0.456548988819122, 0.819200992584229], + [0.344549000263214, 0.745438992977142], + [0.37890899181366, 0.574010014533997], + [0.374292999505997, 0.780184984207153], + [0.319687992334366, 0.570737957954407], + [0.357154995203018, 0.604269981384277], + [0.295284003019333, 0.621580958366394], + [0.447750002145767, 0.862477004528046], + [0.410986006259918, 0.508723020553589], + [0.31395098567009, 0.775308012962341], + [0.354128003120422, 0.812552988529205], + [0.324548006057739, 0.703992962837219], + [0.189096003770828, 0.646299958229065], + [0.279776990413666, 0.71465802192688], + [0.1338230073452, 0.682700991630554], + [0.336768001317978, 0.644733011722565], + [0.429883986711502, 0.466521978378296], + [0.455527991056442, 0.548622965812683], + [0.437114000320435, 0.558896005153656], + [0.467287987470627, 0.529924988746643], + [0.414712011814117, 0.335219979286194], + [0.37704598903656, 0.322777986526489], + [0.344107985496521, 0.320150971412659], + [0.312875986099243, 0.32233202457428], + [0.283526003360748, 0.333190023899078], + [0.241245999932289, 0.382785975933075], + [0.102986000478268, 0.468762993812561], + [0.267612010240555, 0.424560010433197], + [0.297879010438919, 0.433175981044769], + [0.333433985710144, 0.433878004550934], + [0.366427004337311, 0.426115989685059], + [0.396012008190155, 0.416696012020111], + [0.420121014118195, 0.41022801399231], + [0.007561000064015, 0.480777025222778], + [0.432949006557465, 0.569517970085144], + [0.458638995885849, 0.479089021682739], + [0.473466008901596, 0.545744001865387], + [0.476087987422943, 0.563830018043518], + [0.468472003936768, 0.555056989192963], + [0.433990985155106, 0.582361996173859], + [0.483518004417419, 0.562983989715576], + [0.482482999563217, 0.57784903049469], + [0.42645001411438, 0.389798998832703], + [0.438998997211456, 0.39649498462677], + [0.450067013502121, 0.400434017181396], + [0.289712011814117, 0.368252992630005], + [0.276670008897781, 0.363372981548309], + [0.517862021923065, 0.471948027610779], + [0.710287988185883, 0.380764007568359], + [0.526226997375488, 0.573909997940063], + [0.895093023777008, 0.254140973091125], + [0.634069979190826, 0.409575998783112], + [0.661242008209229, 0.41302502155304], + [0.688880026340485, 0.409460008144379], + [0.725341975688934, 0.389131009578705], + [0.606630027294159, 0.40370500087738], + [0.654766023159027, 0.344011008739471], + [0.629905998706818, 0.346076011657715], + [0.680678009986877, 0.347265005111694], + [0.702096998691559, 0.353591024875641], + [0.75221198797226, 0.410804986953735], + [0.602918028831482, 0.842862963676453], + [0.719901978969574, 0.375599980354309], + [0.893692970275879, 0.399959981441498], + [0.790081977844238, 0.391354024410248], + [0.643998026847839, 0.534487962722778], + [0.528249025344849, 0.65040397644043], + [0.525849997997284, 0.680191040039062], + [0.560214996337891, 0.657229006290436], + [0.585384011268616, 0.66654098033905], + [0.549625992774963, 0.680860996246338], + [0.57122802734375, 0.682691991329193], + [0.624852001667023, 0.72809898853302], + [0.513050019741058, 0.547281980514526], + [0.51509702205658, 0.527251958847046], + [0.742246985435486, 0.314507007598877], + [0.598631024360657, 0.454979002475739], + [0.570338010787964, 0.548575043678284], + [0.578631997108459, 0.533622980117798], + [0.723087012767792, 0.532054007053375], + [0.516445994377136, 0.499638974666595], + [0.662801027297974, 0.282917976379395], + [0.70362401008606, 0.293271005153656], + [0.830704987049103, 0.193813979625702], + [0.552385985851288, 0.302568018436432], + [0.607609987258911, 0.353887975215912], + [0.645429015159607, 0.696707010269165], + [0.932694971561432, 0.730105042457581], + [0.557260990142822, 0.572826027870178], + [0.542901992797852, 0.584792017936707], + [0.6180260181427, 0.694710969924927], + [0.607590973377228, 0.694203019142151], + [0.722943007946014, 0.271963000297546], + [0.577413976192474, 0.563166975975037], + [0.614082992076874, 0.281386971473694], + [0.616907000541687, 0.255886018276215], + [0.668509006500244, 0.119913995265961], + [0.770092010498047, 0.232020974159241], + [0.635536015033722, 0.189248979091644], + [0.77039098739624, 0.299556016921997], + [0.826722025871277, 0.278755009174347], + [0.527121007442474, 0.666198015213013], + [0.553171992301941, 0.668527007102966], + [0.577238023281097, 0.673889994621277], + [0.554691970348358, 0.580065965652466], + [0.611896991729736, 0.693961024284363], + [0.59696102142334, 0.706539988517761], + [0.596370995044708, 0.693953037261963], + [0.539958000183105, 0.557139039039612], + [0.568841993808746, 0.692366003990173], + [0.547818005084991, 0.692366003990173], + [0.52461302280426, 0.692366003990173], + [0.534089982509613, 0.779141008853912], + [0.527670979499817, 0.736225962638855], + [0.526912987232208, 0.717857003211975], + [0.526877999305725, 0.704625964164734], + [0.526966989040375, 0.695277988910675], + [0.572058022022247, 0.695277988910675], + [0.573521018028259, 0.703539967536926], + [0.57683801651001, 0.711845993995667], + [0.581691026687622, 0.720062971115112], + [0.609944999217987, 0.639909982681274], + [0.986046016216278, 0.560034036636353], + [0.5867999792099, 0.69539999961853], + [0.590372025966644, 0.701822996139526], + [0.531915009021759, 0.601536989212036], + [0.577268004417419, 0.585934996604919], + [0.536915004253387, 0.593786001205444], + [0.627542972564697, 0.473352015018463], + [0.665585994720459, 0.495950996875763], + [0.588353991508484, 0.546862006187439], + [0.757824003696442, 0.14767599105835], + [0.709249973297119, 0.201507985591888], + [0.672684013843536, 0.256581008434296], + [0.600408971309662, 0.74900496006012], + [0.55826598405838, 0.261672019958496], + [0.570303976535797, 0.187870979309082], + [0.588165998458862, 0.109044015407562], + [0.711045026779175, 0.398952007293701], + [0.781069993972778, 0.435405015945435], + [0.587247014045715, 0.398931980133057], + [0.742869973182678, 0.355445981025696], + [0.572156012058258, 0.437651991844177], + [0.55186802148819, 0.536570012569427], + [0.821442008018494, 0.457556009292603], + [0.752701997756958, 0.457181990146637], + [0.71375697851181, 0.467626988887787], + [0.66711300611496, 0.460672974586487], + [0.631101012229919, 0.447153985500336], + [0.6008620262146, 0.432473003864288], + [0.523481011390686, 0.405627012252808], + [0.810747981071472, 0.523926019668579], + [0.771045982837677, 0.348959028720856], + [0.509127020835876, 0.562718033790588], + [0.595292985439301, 0.485023975372314], + [0.980530977249146, 0.401564002037048], + [0.573499977588654, 0.420000016689301], + [0.602994978427887, 0.548687994480133], + [0.733529984951019, 0.376977026462555], + [0.560611009597778, 0.519016981124878], + [0.967685997486115, 0.644356966018677], + [0.580985009670258, 0.387160003185272], + [0.537728011608124, 0.505385041236877], + [0.760966002941132, 0.779752969741821], + [0.801778972148895, 0.831938028335571], + [0.892440974712372, 0.54076099395752], + [0.816350996494293, 0.740260004997253], + [0.865594983100891, 0.333687007427216], + [0.614073991775513, 0.883246004581451], + [0.508952975273132, 0.579437971115112], + [0.617941975593567, 0.508316040039062], + [0.825608015060425, 0.397674977779388], + [0.681214988231659, 0.39623498916626], + [0.656635999679565, 0.400596976280212], + [0.603900015354156, 0.710216999053955], + [0.81208598613739, 0.588539004325867], + [0.56801301240921, 0.944564998149872], + [0.681007981300354, 0.898285031318665], + [0.733752012252808, 0.869701027870178], + [0.633830010890961, 0.398822009563446], + [0.606792986392975, 0.39553701877594], + [0.589659988880157, 0.391062021255493], + [0.805015981197357, 0.342108011245728], + [0.611334979534149, 0.362284004688263], + [0.634037971496582, 0.355970978736877], + [0.656635999679565, 0.355356991291046], + [0.681214988231659, 0.35834002494812], + [0.698584973812103, 0.363156020641327], + [0.941866993904114, 0.319076001644135], + [0.698584973812103, 0.387449026107788], + [0.584177017211914, 0.624107003211975], + [0.554318010807037, 0.566076993942261], + [0.534153997898102, 0.62064003944397], + [0.711217999458313, 0.819975018501282], + [0.664629995822906, 0.852871000766754], + [0.559099972248077, 0.902631998062134], + [0.871706008911133, 0.791940987110138], + [0.591234028339386, 0.373893976211548], + [0.544341027736664, 0.451583981513977], + [0.624562978744507, 0.924192011356354], + [0.88577002286911, 0.615028977394104], + [0.551338016986847, 0.695277988910675], + [0.551980018615723, 0.704632043838501], + [0.552887976169586, 0.715808033943176], + [0.555167973041534, 0.730794012546539], + [0.569944024085999, 0.767035007476807], + [0.593203008174896, 0.685675978660583], + [0.599261999130249, 0.681069016456604], + [0.607599973678589, 0.677703022956848], + [0.631937980651855, 0.663500010967255], + [0.752032995223999, 0.601315021514893], + [0.547226011753082, 0.420395016670227], + [0.563543975353241, 0.359827995300293], + [0.583841025829315, 0.368713974952698], + [0.586614012718201, 0.692366003990173], + [0.771915018558502, 0.683578014373779], + [0.531597018241882, 0.352482974529266], + [0.588370978832245, 0.804440975189209], + [0.52079701423645, 0.442565023899078], + [0.567984998226166, 0.493479013442993], + [0.543282985687256, 0.819254994392395], + [0.655317008495331, 0.745514988899231], + [0.621008992195129, 0.574018001556396], + [0.625559985637665, 0.78031200170517], + [0.680198013782501, 0.570719003677368], + [0.64276397228241, 0.604337990283966], + [0.704662978649139, 0.621529996395111], + [0.552012026309967, 0.862591981887817], + [0.589071989059448, 0.508637011051178], + [0.685944974422455, 0.775357007980347], + [0.645735025405884, 0.812640011310577], + [0.675342977046967, 0.703978002071381], + [0.810858011245728, 0.646304965019226], + [0.72012197971344, 0.714666962623596], + [0.866151988506317, 0.682704985141754], + [0.663187026977539, 0.644596993923187], + [0.570082008838654, 0.466325998306274], + [0.544561982154846, 0.548375964164734], + [0.562758982181549, 0.558784961700439], + [0.531987011432648, 0.530140042304993], + [0.585271000862122, 0.335177004337311], + [0.622952997684479, 0.32277899980545], + [0.655896008014679, 0.320163011550903], + [0.687132000923157, 0.322345972061157], + [0.716481983661652, 0.333200991153717], + [0.758756995201111, 0.382786989212036], + [0.897013008594513, 0.468769013881683], + [0.732392013072968, 0.424547016620636], + [0.70211398601532, 0.433162987232208], + [0.66652500629425, 0.433866024017334], + [0.633504986763, 0.426087975502014], + [0.603875994682312, 0.416586995124817], + [0.579657971858978, 0.409945011138916], + [0.992439985275269, 0.480777025222778], + [0.567192018032074, 0.569419980049133], + [0.54136598110199, 0.478899002075195], + [0.526564002037048, 0.546118021011353], + [0.523913025856018, 0.563830018043518], + [0.531529009342194, 0.555056989192963], + [0.566035985946655, 0.582329034805298], + [0.51631098985672, 0.563053965568542], + [0.5174720287323, 0.577877044677734], + [0.573594987392426, 0.389806985855103], + [0.560697972774506, 0.395331978797913], + [0.549755990505219, 0.399751007556915], + [0.710287988185883, 0.368252992630005], + [0.723330020904541, 0.363372981548309] +]; +var TRI468 = [ + 127, + 34, + 139, + 11, + 0, + 37, + 232, + 231, + 120, + 72, + 37, + 39, + 128, + 121, + 47, + 232, + 121, + 128, + 104, + 69, + 67, + 175, + 171, + 148, + 157, + 154, + 155, + 118, + 50, + 101, + 73, + 39, + 40, + 9, + 151, + 108, + 48, + 115, + 131, + 194, + 204, + 211, + 74, + 40, + 185, + 80, + 42, + 183, + 40, + 92, + 186, + 230, + 229, + 118, + 202, + 212, + 214, + 83, + 18, + 17, + 76, + 61, + 146, + 160, + 29, + 30, + 56, + 157, + 173, + 106, + 204, + 194, + 135, + 214, + 192, + 203, + 165, + 98, + 21, + 71, + 68, + 51, + 45, + 4, + 144, + 24, + 23, + 77, + 146, + 91, + 205, + 50, + 187, + 201, + 200, + 18, + 91, + 106, + 182, + 90, + 91, + 181, + 85, + 84, + 17, + 206, + 203, + 36, + 148, + 171, + 140, + 92, + 40, + 39, + 193, + 189, + 244, + 159, + 158, + 28, + 247, + 246, + 161, + 236, + 3, + 196, + 54, + 68, + 104, + 193, + 168, + 8, + 117, + 228, + 31, + 189, + 193, + 55, + 98, + 97, + 99, + 126, + 47, + 100, + 166, + 79, + 218, + 155, + 154, + 26, + 209, + 49, + 131, + 135, + 136, + 150, + 47, + 126, + 217, + 223, + 52, + 53, + 45, + 51, + 134, + 211, + 170, + 140, + 67, + 69, + 108, + 43, + 106, + 91, + 230, + 119, + 120, + 226, + 130, + 247, + 63, + 53, + 52, + 238, + 20, + 242, + 46, + 70, + 156, + 78, + 62, + 96, + 46, + 53, + 63, + 143, + 34, + 227, + 173, + 155, + 133, + 123, + 117, + 111, + 44, + 125, + 19, + 236, + 134, + 51, + 216, + 206, + 205, + 154, + 153, + 22, + 39, + 37, + 167, + 200, + 201, + 208, + 36, + 142, + 100, + 57, + 212, + 202, + 20, + 60, + 99, + 28, + 158, + 157, + 35, + 226, + 113, + 160, + 159, + 27, + 204, + 202, + 210, + 113, + 225, + 46, + 43, + 202, + 204, + 62, + 76, + 77, + 137, + 123, + 116, + 41, + 38, + 72, + 203, + 129, + 142, + 64, + 98, + 240, + 49, + 102, + 64, + 41, + 73, + 74, + 212, + 216, + 207, + 42, + 74, + 184, + 169, + 170, + 211, + 170, + 149, + 176, + 105, + 66, + 69, + 122, + 6, + 168, + 123, + 147, + 187, + 96, + 77, + 90, + 65, + 55, + 107, + 89, + 90, + 180, + 101, + 100, + 120, + 63, + 105, + 104, + 93, + 137, + 227, + 15, + 86, + 85, + 129, + 102, + 49, + 14, + 87, + 86, + 55, + 8, + 9, + 100, + 47, + 121, + 145, + 23, + 22, + 88, + 89, + 179, + 6, + 122, + 196, + 88, + 95, + 96, + 138, + 172, + 136, + 215, + 58, + 172, + 115, + 48, + 219, + 42, + 80, + 81, + 195, + 3, + 51, + 43, + 146, + 61, + 171, + 175, + 199, + 81, + 82, + 38, + 53, + 46, + 225, + 144, + 163, + 110, + 246, + 33, + 7, + 52, + 65, + 66, + 229, + 228, + 117, + 34, + 127, + 234, + 107, + 108, + 69, + 109, + 108, + 151, + 48, + 64, + 235, + 62, + 78, + 191, + 129, + 209, + 126, + 111, + 35, + 143, + 163, + 161, + 246, + 117, + 123, + 50, + 222, + 65, + 52, + 19, + 125, + 141, + 221, + 55, + 65, + 3, + 195, + 197, + 25, + 7, + 33, + 220, + 237, + 44, + 70, + 71, + 139, + 122, + 193, + 245, + 247, + 130, + 33, + 71, + 21, + 162, + 153, + 158, + 159, + 170, + 169, + 150, + 188, + 174, + 196, + 216, + 186, + 92, + 144, + 160, + 161, + 2, + 97, + 167, + 141, + 125, + 241, + 164, + 167, + 37, + 72, + 38, + 12, + 145, + 159, + 160, + 38, + 82, + 13, + 63, + 68, + 71, + 226, + 35, + 111, + 158, + 153, + 154, + 101, + 50, + 205, + 206, + 92, + 165, + 209, + 198, + 217, + 165, + 167, + 97, + 220, + 115, + 218, + 133, + 112, + 243, + 239, + 238, + 241, + 214, + 135, + 169, + 190, + 173, + 133, + 171, + 208, + 32, + 125, + 44, + 237, + 86, + 87, + 178, + 85, + 86, + 179, + 84, + 85, + 180, + 83, + 84, + 181, + 201, + 83, + 182, + 137, + 93, + 132, + 76, + 62, + 183, + 61, + 76, + 184, + 57, + 61, + 185, + 212, + 57, + 186, + 214, + 207, + 187, + 34, + 143, + 156, + 79, + 239, + 237, + 123, + 137, + 177, + 44, + 1, + 4, + 201, + 194, + 32, + 64, + 102, + 129, + 213, + 215, + 138, + 59, + 166, + 219, + 242, + 99, + 97, + 2, + 94, + 141, + 75, + 59, + 235, + 24, + 110, + 228, + 25, + 130, + 226, + 23, + 24, + 229, + 22, + 23, + 230, + 26, + 22, + 231, + 112, + 26, + 232, + 189, + 190, + 243, + 221, + 56, + 190, + 28, + 56, + 221, + 27, + 28, + 222, + 29, + 27, + 223, + 30, + 29, + 224, + 247, + 30, + 225, + 238, + 79, + 20, + 166, + 59, + 75, + 60, + 75, + 240, + 147, + 177, + 215, + 20, + 79, + 166, + 187, + 147, + 213, + 112, + 233, + 244, + 233, + 128, + 245, + 128, + 114, + 188, + 114, + 217, + 174, + 131, + 115, + 220, + 217, + 198, + 236, + 198, + 131, + 134, + 177, + 132, + 58, + 143, + 35, + 124, + 110, + 163, + 7, + 228, + 110, + 25, + 356, + 389, + 368, + 11, + 302, + 267, + 452, + 350, + 349, + 302, + 303, + 269, + 357, + 343, + 277, + 452, + 453, + 357, + 333, + 332, + 297, + 175, + 152, + 377, + 384, + 398, + 382, + 347, + 348, + 330, + 303, + 304, + 270, + 9, + 336, + 337, + 278, + 279, + 360, + 418, + 262, + 431, + 304, + 408, + 409, + 310, + 415, + 407, + 270, + 409, + 410, + 450, + 348, + 347, + 422, + 430, + 434, + 313, + 314, + 17, + 306, + 307, + 375, + 387, + 388, + 260, + 286, + 414, + 398, + 335, + 406, + 418, + 364, + 367, + 416, + 423, + 358, + 327, + 251, + 284, + 298, + 281, + 5, + 4, + 373, + 374, + 253, + 307, + 320, + 321, + 425, + 427, + 411, + 421, + 313, + 18, + 321, + 405, + 406, + 320, + 404, + 405, + 315, + 16, + 17, + 426, + 425, + 266, + 377, + 400, + 369, + 322, + 391, + 269, + 417, + 465, + 464, + 386, + 257, + 258, + 466, + 260, + 388, + 456, + 399, + 419, + 284, + 332, + 333, + 417, + 285, + 8, + 346, + 340, + 261, + 413, + 441, + 285, + 327, + 460, + 328, + 355, + 371, + 329, + 392, + 439, + 438, + 382, + 341, + 256, + 429, + 420, + 360, + 364, + 394, + 379, + 277, + 343, + 437, + 443, + 444, + 283, + 275, + 440, + 363, + 431, + 262, + 369, + 297, + 338, + 337, + 273, + 375, + 321, + 450, + 451, + 349, + 446, + 342, + 467, + 293, + 334, + 282, + 458, + 461, + 462, + 276, + 353, + 383, + 308, + 324, + 325, + 276, + 300, + 293, + 372, + 345, + 447, + 382, + 398, + 362, + 352, + 345, + 340, + 274, + 1, + 19, + 456, + 248, + 281, + 436, + 427, + 425, + 381, + 256, + 252, + 269, + 391, + 393, + 200, + 199, + 428, + 266, + 330, + 329, + 287, + 273, + 422, + 250, + 462, + 328, + 258, + 286, + 384, + 265, + 353, + 342, + 387, + 259, + 257, + 424, + 431, + 430, + 342, + 353, + 276, + 273, + 335, + 424, + 292, + 325, + 307, + 366, + 447, + 345, + 271, + 303, + 302, + 423, + 266, + 371, + 294, + 455, + 460, + 279, + 278, + 294, + 271, + 272, + 304, + 432, + 434, + 427, + 272, + 407, + 408, + 394, + 430, + 431, + 395, + 369, + 400, + 334, + 333, + 299, + 351, + 417, + 168, + 352, + 280, + 411, + 325, + 319, + 320, + 295, + 296, + 336, + 319, + 403, + 404, + 330, + 348, + 349, + 293, + 298, + 333, + 323, + 454, + 447, + 15, + 16, + 315, + 358, + 429, + 279, + 14, + 15, + 316, + 285, + 336, + 9, + 329, + 349, + 350, + 374, + 380, + 252, + 318, + 402, + 403, + 6, + 197, + 419, + 318, + 319, + 325, + 367, + 364, + 365, + 435, + 367, + 397, + 344, + 438, + 439, + 272, + 271, + 311, + 195, + 5, + 281, + 273, + 287, + 291, + 396, + 428, + 199, + 311, + 271, + 268, + 283, + 444, + 445, + 373, + 254, + 339, + 263, + 466, + 249, + 282, + 334, + 296, + 449, + 347, + 346, + 264, + 447, + 454, + 336, + 296, + 299, + 338, + 10, + 151, + 278, + 439, + 455, + 292, + 407, + 415, + 358, + 371, + 355, + 340, + 345, + 372, + 390, + 249, + 466, + 346, + 347, + 280, + 442, + 443, + 282, + 19, + 94, + 370, + 441, + 442, + 295, + 248, + 419, + 197, + 263, + 255, + 359, + 440, + 275, + 274, + 300, + 383, + 368, + 351, + 412, + 465, + 263, + 467, + 466, + 301, + 368, + 389, + 380, + 374, + 386, + 395, + 378, + 379, + 412, + 351, + 419, + 436, + 426, + 322, + 373, + 390, + 388, + 2, + 164, + 393, + 370, + 462, + 461, + 164, + 0, + 267, + 302, + 11, + 12, + 374, + 373, + 387, + 268, + 12, + 13, + 293, + 300, + 301, + 446, + 261, + 340, + 385, + 384, + 381, + 330, + 266, + 425, + 426, + 423, + 391, + 429, + 355, + 437, + 391, + 327, + 326, + 440, + 457, + 438, + 341, + 382, + 362, + 459, + 457, + 461, + 434, + 430, + 394, + 414, + 463, + 362, + 396, + 369, + 262, + 354, + 461, + 457, + 316, + 403, + 402, + 315, + 404, + 403, + 314, + 405, + 404, + 313, + 406, + 405, + 421, + 418, + 406, + 366, + 401, + 361, + 306, + 408, + 407, + 291, + 409, + 408, + 287, + 410, + 409, + 432, + 436, + 410, + 434, + 416, + 411, + 264, + 368, + 383, + 309, + 438, + 457, + 352, + 376, + 401, + 274, + 275, + 4, + 421, + 428, + 262, + 294, + 327, + 358, + 433, + 416, + 367, + 289, + 455, + 439, + 462, + 370, + 326, + 2, + 326, + 370, + 305, + 460, + 455, + 254, + 449, + 448, + 255, + 261, + 446, + 253, + 450, + 449, + 252, + 451, + 450, + 256, + 452, + 451, + 341, + 453, + 452, + 413, + 464, + 463, + 441, + 413, + 414, + 258, + 442, + 441, + 257, + 443, + 442, + 259, + 444, + 443, + 260, + 445, + 444, + 467, + 342, + 445, + 459, + 458, + 250, + 289, + 392, + 290, + 290, + 328, + 460, + 376, + 433, + 435, + 250, + 290, + 392, + 411, + 416, + 433, + 341, + 463, + 464, + 453, + 464, + 465, + 357, + 465, + 412, + 343, + 412, + 399, + 360, + 363, + 440, + 437, + 399, + 456, + 420, + 456, + 363, + 401, + 435, + 288, + 372, + 383, + 353, + 339, + 255, + 249, + 448, + 261, + 255, + 133, + 243, + 190, + 133, + 155, + 112, + 33, + 246, + 247, + 33, + 130, + 25, + 398, + 384, + 286, + 362, + 398, + 414, + 362, + 463, + 341, + 263, + 359, + 467, + 263, + 249, + 255, + 466, + 467, + 260, + 75, + 60, + 166, + 238, + 239, + 79, + 162, + 127, + 139, + 72, + 11, + 37, + 121, + 232, + 120, + 73, + 72, + 39, + 114, + 128, + 47, + 233, + 232, + 128, + 103, + 104, + 67, + 152, + 175, + 148, + 173, + 157, + 155, + 119, + 118, + 101, + 74, + 73, + 40, + 107, + 9, + 108, + 49, + 48, + 131, + 32, + 194, + 211, + 184, + 74, + 185, + 191, + 80, + 183, + 185, + 40, + 186, + 119, + 230, + 118, + 210, + 202, + 214, + 84, + 83, + 17, + 77, + 76, + 146, + 161, + 160, + 30, + 190, + 56, + 173, + 182, + 106, + 194, + 138, + 135, + 192, + 129, + 203, + 98, + 54, + 21, + 68, + 5, + 51, + 4, + 145, + 144, + 23, + 90, + 77, + 91, + 207, + 205, + 187, + 83, + 201, + 18, + 181, + 91, + 182, + 180, + 90, + 181, + 16, + 85, + 17, + 205, + 206, + 36, + 176, + 148, + 140, + 165, + 92, + 39, + 245, + 193, + 244, + 27, + 159, + 28, + 30, + 247, + 161, + 174, + 236, + 196, + 103, + 54, + 104, + 55, + 193, + 8, + 111, + 117, + 31, + 221, + 189, + 55, + 240, + 98, + 99, + 142, + 126, + 100, + 219, + 166, + 218, + 112, + 155, + 26, + 198, + 209, + 131, + 169, + 135, + 150, + 114, + 47, + 217, + 224, + 223, + 53, + 220, + 45, + 134, + 32, + 211, + 140, + 109, + 67, + 108, + 146, + 43, + 91, + 231, + 230, + 120, + 113, + 226, + 247, + 105, + 63, + 52, + 241, + 238, + 242, + 124, + 46, + 156, + 95, + 78, + 96, + 70, + 46, + 63, + 116, + 143, + 227, + 116, + 123, + 111, + 1, + 44, + 19, + 3, + 236, + 51, + 207, + 216, + 205, + 26, + 154, + 22, + 165, + 39, + 167, + 199, + 200, + 208, + 101, + 36, + 100, + 43, + 57, + 202, + 242, + 20, + 99, + 56, + 28, + 157, + 124, + 35, + 113, + 29, + 160, + 27, + 211, + 204, + 210, + 124, + 113, + 46, + 106, + 43, + 204, + 96, + 62, + 77, + 227, + 137, + 116, + 73, + 41, + 72, + 36, + 203, + 142, + 235, + 64, + 240, + 48, + 49, + 64, + 42, + 41, + 74, + 214, + 212, + 207, + 183, + 42, + 184, + 210, + 169, + 211, + 140, + 170, + 176, + 104, + 105, + 69, + 193, + 122, + 168, + 50, + 123, + 187, + 89, + 96, + 90, + 66, + 65, + 107, + 179, + 89, + 180, + 119, + 101, + 120, + 68, + 63, + 104, + 234, + 93, + 227, + 16, + 15, + 85, + 209, + 129, + 49, + 15, + 14, + 86, + 107, + 55, + 9, + 120, + 100, + 121, + 153, + 145, + 22, + 178, + 88, + 179, + 197, + 6, + 196, + 89, + 88, + 96, + 135, + 138, + 136, + 138, + 215, + 172, + 218, + 115, + 219, + 41, + 42, + 81, + 5, + 195, + 51, + 57, + 43, + 61, + 208, + 171, + 199, + 41, + 81, + 38, + 224, + 53, + 225, + 24, + 144, + 110, + 105, + 52, + 66, + 118, + 229, + 117, + 227, + 34, + 234, + 66, + 107, + 69, + 10, + 109, + 151, + 219, + 48, + 235, + 183, + 62, + 191, + 142, + 129, + 126, + 116, + 111, + 143, + 7, + 163, + 246, + 118, + 117, + 50, + 223, + 222, + 52, + 94, + 19, + 141, + 222, + 221, + 65, + 196, + 3, + 197, + 45, + 220, + 44, + 156, + 70, + 139, + 188, + 122, + 245, + 139, + 71, + 162, + 145, + 153, + 159, + 149, + 170, + 150, + 122, + 188, + 196, + 206, + 216, + 92, + 163, + 144, + 161, + 164, + 2, + 167, + 242, + 141, + 241, + 0, + 164, + 37, + 11, + 72, + 12, + 144, + 145, + 160, + 12, + 38, + 13, + 70, + 63, + 71, + 31, + 226, + 111, + 157, + 158, + 154, + 36, + 101, + 205, + 203, + 206, + 165, + 126, + 209, + 217, + 98, + 165, + 97, + 237, + 220, + 218, + 237, + 239, + 241, + 210, + 214, + 169, + 140, + 171, + 32, + 241, + 125, + 237, + 179, + 86, + 178, + 180, + 85, + 179, + 181, + 84, + 180, + 182, + 83, + 181, + 194, + 201, + 182, + 177, + 137, + 132, + 184, + 76, + 183, + 185, + 61, + 184, + 186, + 57, + 185, + 216, + 212, + 186, + 192, + 214, + 187, + 139, + 34, + 156, + 218, + 79, + 237, + 147, + 123, + 177, + 45, + 44, + 4, + 208, + 201, + 32, + 98, + 64, + 129, + 192, + 213, + 138, + 235, + 59, + 219, + 141, + 242, + 97, + 97, + 2, + 141, + 240, + 75, + 235, + 229, + 24, + 228, + 31, + 25, + 226, + 230, + 23, + 229, + 231, + 22, + 230, + 232, + 26, + 231, + 233, + 112, + 232, + 244, + 189, + 243, + 189, + 221, + 190, + 222, + 28, + 221, + 223, + 27, + 222, + 224, + 29, + 223, + 225, + 30, + 224, + 113, + 247, + 225, + 99, + 60, + 240, + 213, + 147, + 215, + 60, + 20, + 166, + 192, + 187, + 213, + 243, + 112, + 244, + 244, + 233, + 245, + 245, + 128, + 188, + 188, + 114, + 174, + 134, + 131, + 220, + 174, + 217, + 236, + 236, + 198, + 134, + 215, + 177, + 58, + 156, + 143, + 124, + 25, + 110, + 7, + 31, + 228, + 25, + 264, + 356, + 368, + 0, + 11, + 267, + 451, + 452, + 349, + 267, + 302, + 269, + 350, + 357, + 277, + 350, + 452, + 357, + 299, + 333, + 297, + 396, + 175, + 377, + 381, + 384, + 382, + 280, + 347, + 330, + 269, + 303, + 270, + 151, + 9, + 337, + 344, + 278, + 360, + 424, + 418, + 431, + 270, + 304, + 409, + 272, + 310, + 407, + 322, + 270, + 410, + 449, + 450, + 347, + 432, + 422, + 434, + 18, + 313, + 17, + 291, + 306, + 375, + 259, + 387, + 260, + 424, + 335, + 418, + 434, + 364, + 416, + 391, + 423, + 327, + 301, + 251, + 298, + 275, + 281, + 4, + 254, + 373, + 253, + 375, + 307, + 321, + 280, + 425, + 411, + 200, + 421, + 18, + 335, + 321, + 406, + 321, + 320, + 405, + 314, + 315, + 17, + 423, + 426, + 266, + 396, + 377, + 369, + 270, + 322, + 269, + 413, + 417, + 464, + 385, + 386, + 258, + 248, + 456, + 419, + 298, + 284, + 333, + 168, + 417, + 8, + 448, + 346, + 261, + 417, + 413, + 285, + 326, + 327, + 328, + 277, + 355, + 329, + 309, + 392, + 438, + 381, + 382, + 256, + 279, + 429, + 360, + 365, + 364, + 379, + 355, + 277, + 437, + 282, + 443, + 283, + 281, + 275, + 363, + 395, + 431, + 369, + 299, + 297, + 337, + 335, + 273, + 321, + 348, + 450, + 349, + 359, + 446, + 467, + 283, + 293, + 282, + 250, + 458, + 462, + 300, + 276, + 383, + 292, + 308, + 325, + 283, + 276, + 293, + 264, + 372, + 447, + 346, + 352, + 340, + 354, + 274, + 19, + 363, + 456, + 281, + 426, + 436, + 425, + 380, + 381, + 252, + 267, + 269, + 393, + 421, + 200, + 428, + 371, + 266, + 329, + 432, + 287, + 422, + 290, + 250, + 328, + 385, + 258, + 384, + 446, + 265, + 342, + 386, + 387, + 257, + 422, + 424, + 430, + 445, + 342, + 276, + 422, + 273, + 424, + 306, + 292, + 307, + 352, + 366, + 345, + 268, + 271, + 302, + 358, + 423, + 371, + 327, + 294, + 460, + 331, + 279, + 294, + 303, + 271, + 304, + 436, + 432, + 427, + 304, + 272, + 408, + 395, + 394, + 431, + 378, + 395, + 400, + 296, + 334, + 299, + 6, + 351, + 168, + 376, + 352, + 411, + 307, + 325, + 320, + 285, + 295, + 336, + 320, + 319, + 404, + 329, + 330, + 349, + 334, + 293, + 333, + 366, + 323, + 447, + 316, + 15, + 315, + 331, + 358, + 279, + 317, + 14, + 316, + 8, + 285, + 9, + 277, + 329, + 350, + 253, + 374, + 252, + 319, + 318, + 403, + 351, + 6, + 419, + 324, + 318, + 325, + 397, + 367, + 365, + 288, + 435, + 397, + 278, + 344, + 439, + 310, + 272, + 311, + 248, + 195, + 281, + 375, + 273, + 291, + 175, + 396, + 199, + 312, + 311, + 268, + 276, + 283, + 445, + 390, + 373, + 339, + 295, + 282, + 296, + 448, + 449, + 346, + 356, + 264, + 454, + 337, + 336, + 299, + 337, + 338, + 151, + 294, + 278, + 455, + 308, + 292, + 415, + 429, + 358, + 355, + 265, + 340, + 372, + 388, + 390, + 466, + 352, + 346, + 280, + 295, + 442, + 282, + 354, + 19, + 370, + 285, + 441, + 295, + 195, + 248, + 197, + 457, + 440, + 274, + 301, + 300, + 368, + 417, + 351, + 465, + 251, + 301, + 389, + 385, + 380, + 386, + 394, + 395, + 379, + 399, + 412, + 419, + 410, + 436, + 322, + 387, + 373, + 388, + 326, + 2, + 393, + 354, + 370, + 461, + 393, + 164, + 267, + 268, + 302, + 12, + 386, + 374, + 387, + 312, + 268, + 13, + 298, + 293, + 301, + 265, + 446, + 340, + 380, + 385, + 381, + 280, + 330, + 425, + 322, + 426, + 391, + 420, + 429, + 437, + 393, + 391, + 326, + 344, + 440, + 438, + 458, + 459, + 461, + 364, + 434, + 394, + 428, + 396, + 262, + 274, + 354, + 457, + 317, + 316, + 402, + 316, + 315, + 403, + 315, + 314, + 404, + 314, + 313, + 405, + 313, + 421, + 406, + 323, + 366, + 361, + 292, + 306, + 407, + 306, + 291, + 408, + 291, + 287, + 409, + 287, + 432, + 410, + 427, + 434, + 411, + 372, + 264, + 383, + 459, + 309, + 457, + 366, + 352, + 401, + 1, + 274, + 4, + 418, + 421, + 262, + 331, + 294, + 358, + 435, + 433, + 367, + 392, + 289, + 439, + 328, + 462, + 326, + 94, + 2, + 370, + 289, + 305, + 455, + 339, + 254, + 448, + 359, + 255, + 446, + 254, + 253, + 449, + 253, + 252, + 450, + 252, + 256, + 451, + 256, + 341, + 452, + 414, + 413, + 463, + 286, + 441, + 414, + 286, + 258, + 441, + 258, + 257, + 442, + 257, + 259, + 443, + 259, + 260, + 444, + 260, + 467, + 445, + 309, + 459, + 250, + 305, + 289, + 290, + 305, + 290, + 460, + 401, + 376, + 435, + 309, + 250, + 392, + 376, + 411, + 433, + 453, + 341, + 464, + 357, + 453, + 465, + 343, + 357, + 412, + 437, + 343, + 399, + 344, + 360, + 440, + 420, + 437, + 456, + 360, + 420, + 363, + 361, + 401, + 288, + 265, + 372, + 353, + 390, + 339, + 249, + 339, + 448, + 255 +]; +var VTX68 = [ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + 78, + 81, + 13, + 311, + 308, + 402, + 14, + 178 +]; +var VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; +var VTX7 = [33, 133, 362, 263, 1, 78, 308]; +var UV68 = VTX68.map((x) => UV468[x]); +var UV33 = VTX33.map((x) => UV468[x]); +var UV7 = VTX7.map((x) => UV468[x]); +function connectionsToIndices(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var pairsLips = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var pairsLeftEye = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var pairsLeftEyebrow = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var pairsLeftIris = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var pairsRightEye = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var pairsRightEyebrow = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var pairsRightIris = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var pairsFaceContour = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +var contourKeypoints = { + lips: connectionsToIndices(pairsLips), + leftEye: connectionsToIndices(pairsLeftEye), + leftEyebrow: connectionsToIndices(pairsLeftEyebrow), + leftIris: connectionsToIndices(pairsLeftIris), + rightEye: connectionsToIndices(pairsRightEye), + rightEyebrow: connectionsToIndices(pairsRightEyebrow), + rightIris: connectionsToIndices(pairsRightIris), + faceOval: connectionsToIndices(pairsFaceContour) +}; + +// src/face/constants.ts +var LIPS_CONNECTIONS = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var LEFT_EYE_CONNECTIONS = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var LEFT_EYEBROW_CONNECTIONS = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var LEFT_IRIS_CONNECTIONS = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var RIGHT_EYE_CONNECTIONS = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var RIGHT_EYEBROW_CONNECTIONS = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var RIGHT_IRIS_CONNECTIONS = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var FACE_OVAL_CONNECTIONS = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +function connectionsToIndices2(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = { + lips: connectionsToIndices2(LIPS_CONNECTIONS), + leftEye: connectionsToIndices2(LEFT_EYE_CONNECTIONS), + leftEyebrow: connectionsToIndices2(LEFT_EYEBROW_CONNECTIONS), + leftIris: connectionsToIndices2(LEFT_IRIS_CONNECTIONS), + rightEye: connectionsToIndices2(RIGHT_EYE_CONNECTIONS), + rightEyebrow: connectionsToIndices2(RIGHT_EYEBROW_CONNECTIONS), + rightIris: connectionsToIndices2(RIGHT_IRIS_CONNECTIONS), + faceOval: connectionsToIndices2(FACE_OVAL_CONNECTIONS) +}; +var indexLabelPairs = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR).map(([label, indices]) => indices.map((index2) => [index2, label])).flat(); +var MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs); +var LANDMARKS_REFINEMENT_LIPS_CONFIG = [ + 61, + 146, + 91, + 181, + 84, + 17, + 314, + 405, + 321, + 375, + 291, + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + 246, + 161, + 160, + 159, + 158, + 157, + 173, + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + 247, + 30, + 29, + 27, + 28, + 56, + 190, + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + 113, + 225, + 224, + 223, + 222, + 221, + 189, + 35, + 124, + 46, + 53, + 52, + 65, + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + 466, + 388, + 387, + 386, + 385, + 384, + 398, + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + 467, + 260, + 259, + 257, + 258, + 286, + 414, + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + 342, + 445, + 444, + 443, + 442, + 441, + 413, + 265, + 353, + 276, + 283, + 282, + 295, + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 +]; + +// src/draw/face.ts +var localOptions; +function drawLabels(f, ctx) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) + return; + let l = localOptions.faceLabels.slice(); + if (f.score) + l = replace(l, "[score]", 100 * f.score); + if (f.gender) + l = replace(l, "[gender]", f.gender); + if (f.genderScore) + l = replace(l, "[genderScore]", 100 * f.genderScore); + if (f.age) + l = replace(l, "[age]", f.age); + if (f.distance) + l = replace(l, "[distance]", 100 * f.distance); + if (f.real) + l = replace(l, "[real]", 100 * f.real); + if (f.live) + l = replace(l, "[live]", 100 * f.live); + if (f.emotion && f.emotion.length > 0) { + const emotion2 = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`); + if (emotion2.length > 3) + emotion2.length = 3; + l = replace(l, "[emotions]", emotion2.join(" ")); + } + if ((_c = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c.roll) + l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); + if ((_e = (_d = f.rotation) == null ? void 0 : _d.angle) == null ? void 0 : _e.yaw) + l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); + if ((_g = (_f = f.rotation) == null ? void 0 : _f.angle) == null ? void 0 : _g.pitch) + l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); + if ((_i = (_h = f.rotation) == null ? void 0 : _h.gaze) == null ? void 0 : _i.bearing) + l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); + labels(ctx, l, f.box[0], f.box[1], localOptions); +} +function drawIrisElipse(f, ctx) { + var _a, _b, _c, _d; + if (((_a = f.annotations) == null ? void 0 : _a.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } + if (((_c = f.annotations) == null ? void 0 : _c.rightEyeIris) && ((_d = f.annotations) == null ? void 0 : _d.rightEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } +} +function drawGazeSpheres(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.angle) && typeof Path2D !== "undefined") { + ctx.strokeStyle = "pink"; + const valX = f.box[0] + f.box[2] / 2 - f.box[3] * rad2deg(f.rotation.angle.yaw) / 90; + const valY = f.box[1] + f.box[3] / 2 + f.box[2] * rad2deg(f.rotation.angle.pitch) / 90; + const pathV = new Path2D(` + M ${f.box[0] + f.box[2] / 2} ${f.box[1]} C - ${o} ${e.box[1]}, - ${o} ${e.box[1]+e.box[3]}, - ${e.box[0]+e.box[2]/2} ${e.box[1]+e.box[3]} - `),A=new Path2D(` - M ${e.box[0]} ${e.box[1]+e.box[3]/2} + ${valX} ${f.box[1]}, + ${valX} ${f.box[1] + f.box[3]}, + ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]} + `); + const pathH = new Path2D(` + M ${f.box[0]} ${f.box[1] + f.box[3] / 2} C - ${e.box[0]} ${r}, - ${e.box[0]+e.box[2]} ${r}, - ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(A),t.stroke(s)}}function Ls(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let o=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];_t(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[o[0],o[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];_t(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Cs(e,t){if(K.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[r]);Qt(t,o,K)}Is(e,t)}}function Ws(e,t){if(K.drawPoints&&e.mesh.length>=468)for(let n=0;n0&&(Ws(r,o),Cs(r,o),Os(r,o),Ls(r,o))}}function K2(e,t,n){var s,A;let o=A0(x0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=_(l,"[score]",100*t[a].score),te(r,l,t[a].box[0],t[a].box[1],o)}if(o.drawPoints&&t[a].keypoints)for(let l=0;l0&&t[a].keypoints){r.font=o.font;for(let l of t[a].keypoints){if(!l.score||l.score===0)continue;let c=o.bodyPartLabels.slice();c=_(c,"[label]",l.part),c=_(c,"[score]",100*l.score),te(r,c,l.position[0],l.position[1],o)}}if(o.drawPolygons&&t[a].keypoints&&t[a].annotations)for(let l of Object.values(t[a].annotations))for(let c of l)G1(r,c,o)}}}function J2(e,t,n){var s,A;let o=A0(x0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let a of t){if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,a.box[0],a.box[1],a.box[2],a.box[3],o),o.drawLabels&&((s=o.handLabels)==null?void 0:s.length)>0){let l=o.handLabels.slice();l=_(l,"[label]",a.label),l=_(l,"[score]",100*a.score),te(r,l,a.box[0],a.box[1],o)}r.stroke()}if(o.drawPoints&&a.keypoints&&a.keypoints.length>0)for(let l of a.keypoints)r.fillStyle=Ye(l[2],o),be(r,l[0],l[1],0,o);if(o.drawLabels&&a.annotations&&((A=o.fingerLabels)==null?void 0:A.length)>0)for(let[l,c]of Object.entries(a.annotations)){let d=o.fingerLabels.slice();d=_(d,"[label]",l),te(r,d,c[c.length-1][0],c[c.length-1][1],o)}if(o.drawPolygons&&a.annotations){let l=c=>{if(!(!c||c.length===0||!c[0]))for(let d=0;d0?d-1:0][0],c[d>0?d-1:0][1]),r.lineTo(c[d][0],c[d][1]),r.stroke()}};r.lineWidth=o.lineWidth,l(a.annotations.index),l(a.annotations.middle),l(a.annotations.ring),l(a.annotations.pinky),l(a.annotations.thumb)}}}}function Q2(e,t,n){var s;let o=A0(x0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let A of t)if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,A.box[0],A.box[1],A.box[2],A.box[3],o),o.drawLabels&&((s=o.objectLabels)==null?void 0:s.length)>0){let a=o.objectLabels.slice();a=_(a,"[label]",A.label),a=_(a,"[score]",100*A.score),te(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function _2(e,t,n){var r;let o=A0(x0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=J0(e);if(!s)return;s.font=o.font,s.fillStyle=o.color;let A=1;for(let a=0;a1&&c[1].length>0){let d=l[1]>0?`#${l[1]}`:"",i=o.gestureLabels.slice();i=_(i,"[where]",l[0]),i=_(i,"[who]",d),i=_(i,"[what]",c[1]),te(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var je={face:`face + ${f.box[0]} ${valY}, + ${f.box[0] + f.box[2]} ${valY}, + ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2} + `); + ctx.stroke(pathH); + ctx.stroke(pathV); + } +} +function drawGazeArrows(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { + ctx.strokeStyle = "pink"; + ctx.fillStyle = "pink"; + const leftGaze = [ + f.annotations.leftEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.leftEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4); + const rightGaze = [ + f.annotations.rightEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.rightEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4); + } +} +function drawFacePolygons(f, ctx) { + if (localOptions.drawPolygons && f.mesh.length >= 468) { + ctx.lineWidth = 1; + for (let i = 0; i < TRI468.length / 3; i++) { + const points = [TRI468[i * 3 + 0], TRI468[i * 3 + 1], TRI468[i * 3 + 2]].map((index2) => f.mesh[index2]); + lines(ctx, points, localOptions); + } + drawIrisElipse(f, ctx); + } +} +function drawFacePoints(f, ctx) { + if (localOptions.drawPoints && f.mesh.length >= 468) { + for (let i = 0; i < f.mesh.length; i++) { + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions); + if (localOptions.drawAttention) { + if (LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] + 127, localOptions); + if (LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + if (LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + } + } + } +} +function drawFaceBoxes(f, ctx) { + if (localOptions.drawBoxes) { + rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions); + } +} +function face(inCanvas2, result, drawOptions) { + localOptions = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions.font; + ctx.strokeStyle = localOptions.color; + ctx.fillStyle = localOptions.color; + for (const f of result) { + drawFaceBoxes(f, ctx); + drawLabels(f, ctx); + if (f.mesh && f.mesh.length > 0) { + drawFacePoints(f, ctx); + drawFacePolygons(f, ctx); + drawGazeSpheres(f, ctx); + drawGazeArrows(f, ctx); + } + } +} + +// src/draw/body.ts +function body(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + for (let i = 0; i < result.length; i++) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + ctx.lineWidth = localOptions2.lineWidth; + ctx.font = localOptions2.font; + if (localOptions2.drawBoxes && result[i].box && result[i].box.length === 4) { + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.bodyLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.bodyLabels.slice(); + l = replace(l, "[score]", 100 * result[i].score); + labels(ctx, l, result[i].box[0], result[i].box[1], localOptions2); + } + } + if (localOptions2.drawPoints && result[i].keypoints) { + for (let pt = 0; pt < result[i].keypoints.length; pt++) { + if (!result[i].keypoints[pt].score || result[i].keypoints[pt].score === 0) + continue; + ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions2); + point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions2); + } + } + if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { + ctx.font = localOptions2.font; + for (const pt of result[i].keypoints) { + if (!pt.score || pt.score === 0) + continue; + let l = localOptions2.bodyPartLabels.slice(); + l = replace(l, "[label]", pt.part); + l = replace(l, "[score]", 100 * pt.score); + labels(ctx, l, pt.position[0], pt.position[1], localOptions2); + } + } + if (localOptions2.drawPolygons && result[i].keypoints && result[i].annotations) { + for (const part of Object.values(result[i].annotations)) { + for (const connected4 of part) + curves(ctx, connected4, localOptions2); + } + } + } +} + +// src/draw/hand.ts +function hand(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.handLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.handLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + if (localOptions2.drawPoints) { + if (h.keypoints && h.keypoints.length > 0) { + for (const pt of h.keypoints) { + ctx.fillStyle = colorDepth(pt[2], localOptions2); + point(ctx, pt[0], pt[1], 0, localOptions2); + } + } + } + if (localOptions2.drawLabels && h.annotations && ((_b = localOptions2.fingerLabels) == null ? void 0 : _b.length) > 0) { + for (const [part, pt] of Object.entries(h.annotations)) { + let l = localOptions2.fingerLabels.slice(); + l = replace(l, "[label]", part); + labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions2); + } + } + if (localOptions2.drawPolygons && h.annotations) { + const addHandLine = (part) => { + if (!part || part.length === 0 || !part[0]) + return; + for (let i = 0; i < part.length; i++) { + ctx.beginPath(); + const z = part[i][2] || 0; + ctx.strokeStyle = colorDepth(i * z, localOptions2); + ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]); + ctx.lineTo(part[i][0], part[i][1]); + ctx.stroke(); + } + }; + ctx.lineWidth = localOptions2.lineWidth; + addHandLine(h.annotations.index); + addHandLine(h.annotations.middle); + addHandLine(h.annotations.ring); + addHandLine(h.annotations.pinky); + addHandLine(h.annotations.thumb); + } + } +} + +// src/draw/object.ts +function object(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.objectLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.objectLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + } +} + +// src/draw/gesture.ts +function gesture(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions2.font; + ctx.fillStyle = localOptions2.color; + let i = 1; + for (let j = 0; j < result.length; j++) { + const [where, what] = Object.entries(result[j]); + if (what.length > 1 && what[1].length > 0) { + const who = where[1] > 0 ? `#${where[1]}` : ""; + let l = localOptions2.gestureLabels.slice(); + l = replace(l, "[where]", where[0]); + l = replace(l, "[who]", who); + l = replace(l, "[what]", what[1]); + labels(ctx, l, 8, 2 + i * localOptions2.lineHeight, localOptions2); + i += 1; + } + } + } +} + +// src/draw/labels.ts +var defaultLabels = { + face: `face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -118,7 +6449,7521 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var n5=0;function Fs(e,t,n){let o=A0(x0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let s=0;ss5,kpt:()=>r5});var r5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],s5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(H());var Q0,$e=224,X1,Gs=5,tt=[8,16,32,32,32];function Vs(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function q1(e){if(v.initial&&(Q0=null),!Q0&&e.body.detector&&e.body.detector.modelPath){Q0=await O(e.body.detector.modelPath);let t=Q0!=null&&Q0.executor?Object.values(Q0.modelSignature.inputs):void 0;$e=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&Q0&&u("cached model:",Q0.modelUrl);return Vs(),Q0}var Z1=[5,5];function Zs(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,$e),t.x),r=D.add(D.div(r,$e),t.y),s=D.mul(D.div(s,$e),Z1[0]),A=D.mul(D.div(A,$e),Z1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),d=D.add(l,A);return D.stack([a,l,c,d],1)})}async function Xs(e,t,n,o){var c,d;let r=[],s={};s.boxes=Zs(e,X1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((d=n.body.detector)==null?void 0:d.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],x=l[i],p=[Math.round(x[0]*o[0]),Math.round(x[1]*o[1]),Math.round(x[2]*o[0]),Math.round(x[3]*o[1])],f={score:y,boxRaw:x,box:p};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function U1(e,t,n){let o={};o.res=Q0==null?void 0:Q0.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await Xs(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function ge(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function Y1(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function nt(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var F0,a5=256,A5=Number.MAX_SAFE_INTEGER,qs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},rt=[],Ne=[[0,0],[0,0],[0,0],[0,0]],K1=0,J1=e=>1-1/(1+Math.exp(e)),_1=e=>q1(e);async function $1(e){if(v.initial&&(F0=null),F0)e.debug&&u("cached model:",F0.modelUrl);else{F0=await O(e.body.modelPath);let t=F0!=null&&F0.executor?Object.values(F0.modelSignature.inputs):void 0;a5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return F0}function Q1(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=B0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Ne=[[0,0],a,l,[0,0]],o.pad=B0.pad(o.cropped||e,Ne),o.resize=B0.image.resizeBilinear(o.pad,[t,t]),r=B0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=B0.image.resizeBilinear(o.cropped||e,[t,t]),r=B0.div(o.resize,C.tf255)):r=B0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>B0.dispose(o[a])),r}function Us(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Ne[2][0]+Ne[2][1])/t[0]-Ne[2][0]),Math.trunc(o.position[1]*(t[1]+Ne[1][0]+Ne[1][1])/t[1]-Ne[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function Ys(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function Ks(e,t,n){if(!(F0!=null&&F0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=F0==null?void 0:F0.execute(e,qs.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(p=>B0.dispose(o[p]));let a=[],l=5;for(let p=0;pp.position),i=ge(d,[n[0],n[1]]),y={};for(let[p,f]of Object.entries(s5)){let b=[];for(let M=0;Mh.part===f[M]),m=c.find(h=>h.part===f[M+1]);T&&m&&b.push([T.position,m.position])}y[p]=b}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function i5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>g()-K1,r=A5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&rt!==null)A5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=Q1(e,224);l=await U1(c,t,n),B0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cL0.dispose(o[c])),r}async function x5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>g()-t3,o=c5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&l5.length>0?(c5++,l5):(c5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=L0.image.resizeBilinear(e,[e2,e2]),a=t.object.enabled?H0==null?void 0:H0.execute(A,["tower_0/detections"]):null;t3=g(),L0.dispose(A);let l=await Js(a,s,t);l5=l,r(l)}))}var J=V(H());var st={};we(st,{connected:()=>y5,kpt:()=>d5});var d5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],y5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var a0,r3=0,C0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},f5=Number.MAX_SAFE_INTEGER;async function s3(e){return v.initial&&(a0=null),a0?e.debug&&u("cached model:",a0.modelUrl):a0=await O(e.body.modelPath),a0}async function Qs(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],d=J.div(a,n),i=(await d.data())[0];return J.dispose([r,s,a,l,d]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function m5(e,t){if(!(a0!=null&&a0.executor)||!(a0!=null&&a0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>g()-r3,o=f5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(C0.keypoints).length>0?(f5++,[C0]):(f5=0,new Promise(async r=>{let s=J.tidy(()=>{var p,f;let i=J.image.resizeBilinear(e,[((p=a0==null?void 0:a0.inputs[0].shape)==null?void 0:p[2])||0,((f=a0==null?void 0:a0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=a0==null?void 0:a0.execute(s)),r3=g(),J.dispose(s),A){C0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let x=0;x(t.body.minConfidence||0)&&C0.keypoints.push({score:Math.round(100*b)/100,part:d5[x],positionRaw:[p/a0.inputs[0].shape[2],f/a0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/a0.inputs[0].shape[2]),Math.round(e.shape[1]*f/a0.inputs[0].shape[1])]})}y.forEach(x=>J.dispose(x))}C0.score=C0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=C0.keypoints.map(i=>i.position[0]),l=C0.keypoints.map(i=>i.position[1]);C0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=C0.keypoints.map(i=>i.positionRaw[0]),d=C0.keypoints.map(i=>i.positionRaw[1]);C0.boxRaw=[Math.min(...c),Math.min(...d),Math.max(...c)-Math.min(...c),Math.max(...d)-Math.min(...d)];for(let[i,y]of Object.entries(y5)){let x=[];for(let p=0;pM.part===y[p]),b=C0.keypoints.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&x.push([f.position,b.position])}C0.annotations[i]=x}r([C0])}))}var i0=V(H());var Le=V(H());var L=V(H());var Te=V(H());var d2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],At=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],at=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],it=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],l3=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],o=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:o,landmarks:e.landmarks,confidence:e.confidence}},p5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Te.image.cropAndResize(t,[s],[0],n),a=Te.div(A,C.tf255);return Te.dispose(A),a},lt=(e,t)=>{let n=At(e),o=d2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},ct=e=>{let t=At(e),n=d2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence}},c3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},u5=[[1,0,0],[0,1,0],[0,0,1]],_s=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),$s=(e,t)=>_s(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var a3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],t2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=a3(t[0],t[1]),A=i3(s,r),a=a3(-t[0],-t[1]);return i3(A,a)},tA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-t2(t[0],n),-t2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},nA=(e,t)=>[t2(e,t[0]),t2(e,t[1])];function d3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(x[0]-r/2),s[1]/r*(x[1]-r/2),x[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?x3(n,[0,0]):u5,c=a?A.map(x=>[...nA(x,l),x[2]]):A,d=a?tA(o):u5,i=At(t),y=[t2(i,d[0]),t2(i,d[1])];return c.map(x=>[Math.trunc(x[0]+y[0]),Math.trunc(x[1]+y[1]),Math.trunc(x[2]||0)])}function f3(e,t,n,o){let r=t.landmarks.length>=$t.count?$t.symmetryLine:Ke.symmetryLine,s=0,A=u5,a;if(e&&v.kernels.includes("rotatewithoffset"))if(s=$s(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=At(t),d=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Te.image.rotateWithOffset(n,s,0,[d[0],d[1]]);A=x3(-s,c),a=p5(t,i,[o,o]),Te.dispose(i)}else a=p5(t,n,[o,o]);else a=p5(t,n,[o,o]);return[s,A,a]}var oA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},m3=(e,t)=>{let n=oA(e),o=d2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var p3=6,rA=1.4,ae,b5=null,Ie=0,y2=null,f2=()=>Ie;async function u3(e){var t;return v.initial&&(ae=null),ae?e.debug&&u("cached model:",ae.modelUrl):ae=await O((t=e.face.detector)==null?void 0:t.modelPath),Ie=ae.executor&&ae.inputs[0].shape?ae.inputs[0].shape[2]:256,y2=L.scalar(Ie,"int32"),b5=L.tensor2d(d3(Ie)),ae}function sA(e){if(!b5||!y2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,b5),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,y2),t.centersNormalized=L.div(t.centers,y2),t.halfBoxSize=L.div(t.boxSizesNormalized,C.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,y2),t.endNormalized=L.mul(t.ends,y2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function h3(e,t){var a,l,c,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=L.image.resizeBilinear(e,[Ie,Ie]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf05);let o=ae==null?void 0:ae.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let i=o.sort((y,x)=>y.size-x.size);n.concat384=L.concat([i[0],i[2]],2),n.concat512=L.concat([i[1],i[3]],2),n.concat=L.concat([n.concat512,n.concat384],1),n.batch=L.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=L.squeeze(o[0]):n.batch=L.squeeze(o);L.dispose(o),n.boxes=sA(n.batch),n.logits=L.slice(n.batch,[0,0],[-1,1]),n.sigmoid=L.sigmoid(n.logits),n.scores=L.squeeze(n.sigmoid),n.nms=await L.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let i=0;i(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let x={};x.bbox=L.slice(n.boxes,[r[i],0],[1,-1]),x.slice=L.slice(n.batch,[r[i],p3-1],[1,-1]),x.squeeze=L.squeeze(x.slice),x.landmarks=L.reshape(x.squeeze,[p3,-1]);let p=await x.bbox.data(),f={startPoint:[p[0],p[1]],endPoint:[p[2],p[3]],landmarks:await x.landmarks.array(),confidence:y},b=l3(f,[(e.shape[2]||0)/Ie,(e.shape[1]||0)/Ie]),M=lt(b,t.face.scale||rA),T=ct(M);s.push(T),Object.keys(x).forEach(m=>L.dispose(x[m]))}}return Object.keys(n).forEach(i=>L.dispose(n[i])),s}var ie=V(H());var G0,Oe=0,AA=2.3,g5=ne.leftEyeLower0,T5=ne.rightEyeLower0,m2={leftBounds:[g5[0],g5[g5.length-1]],rightBounds:[T5[0],T5[T5.length-1]]},p2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function R3(e){var t,n;return v.initial&&(G0=null),G0?e.debug&&u("cached model:",G0.modelUrl):G0=await O((t=e.face.iris)==null?void 0:t.modelPath),Oe=(G0==null?void 0:G0.executor)&&((n=G0.inputs)==null?void 0:n[0].shape)?G0.inputs[0].shape[2]:0,Oe===-1&&(Oe=64),G0}function xt(e,t,n,o){for(let r=0;r{let t=e[m2.leftBounds[0]][2],n=e[m2.rightBounds[0]][2];return t-n},g3=(e,t,n,o,r,s=!1)=>{let A=ct(lt(c3([e[n],e[o]]),AA)),a=d2(A),l=ie.image.cropAndResize(t,[[A.startPoint[1]/r,A.startPoint[0]/r,A.endPoint[1]/r,A.endPoint[0]/r]],[0],[Oe,Oe]);if(s&&v.kernels.includes("flipleftright")){let c=ie.image.flipLeftRight(l);ie.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},T3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ne[`${n}EyeUpper0`][p2.upperCenter]][2],r=e[ne[`${n}EyeLower0`][p2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function M3(e,t,n){if(!(G0!=null&&G0.executor))return e;let{box:o,boxSize:r,crop:s}=g3(e,t,m2.leftBounds[0],m2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=g3(e,t,m2.rightBounds[0],m2.rightBounds[1],n,!0),c=ie.concat([s,l]);ie.dispose(s),ie.dispose(l);let d=G0.execute(c);ie.dispose(c);let i=await d.data();ie.dispose(d);let y=i.slice(0,p2.numCoordinates*3),{rawCoords:x,iris:p}=T3(y,o,r,!0),f=i.slice(p2.numCoordinates*3),{rawCoords:b,iris:M}=T3(f,A,a,!1),T=aA(e);Math.abs(T)<30?(xt(e,x,"left",null),xt(e,b,"right",null)):T<1?xt(e,x,"left",["EyeUpper0","EyeLower0"]):xt(e,b,"right",["EyeUpper0","EyeLower0"]);let m=v3(e,p,"left"),h=v3(e,M,"right");return e.concat(m).concat(h)}async function k3(e,t){var s,A,a,l,c,d,i,y,x,p;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((d=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:d.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((p=(x=t.filter(f=>f.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let f of Object.values(n))if(!f)return e;let o=Qe.reduce((f,b)=>f+=e[b][2],0)/Qe.length;for(let f=0;ff+=e[b][2],0)/_e.length;for(let f=0;fg()-pe.timestamp,o=pe.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||pe.boxes.length===0?(pe.boxes=await h3(e,t),pe.timestamp=g(),pe.skipped=0):pe.skipped++;let r=[],s=[],A=0,a=I2;for(let T=0;TG.shape[G.shape.length-1]===1).data();if(P.faceScore=Math.round(100*t0[0])/100,P.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(m.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=at(m,e),P.boxRaw=it(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(G=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*G[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*G[1]/f2()]),P.meshRaw=P.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/a]);for(let G of Object.keys(Ke))P.annotations[G]=[P.mesh[Ke[G]]]}}else{let G=I.find(Z=>Z.shape[Z.shape.length-1]===1404),$=Le.reshape(G,[-1,3]),s0=await $.array();Le.dispose($),(f=t.face.attention)!=null&&f.enabled?s0=await k3(s0,I):(b=t.face.iris)!=null&&b.enabled&&(s0=await M3(s0,P.tensor,I2)),P.mesh=y3(s0,m,h,S,I2),P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||0),Z[1]/(e.shape[1]||0),(Z[2]||0)/a]);for(let Z of Object.keys(ne))P.annotations[Z]=ne[Z].map(b0=>P.mesh[b0]);P.score=P.faceScore;let R={...m3(P.mesh,m),confidence:m.confidence,landmarks:m.landmarks};P.box=at(R,e),P.boxRaw=it(R,e),s.push(R)}Le.dispose(I)}else{P.box=at(m,e),P.boxRaw=it(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(I=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*I[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*I[1]/f2()]),P.meshRaw=P.mesh.map(I=>[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(Ke))P.annotations[I]=[P.mesh[Ke[I]]]}P.score>(((M=t.face.detector)==null?void 0:M.minConfidence)||1)?r.push(P):Le.dispose(P.tensor)}return pe.boxes=s,r}async function E3(e){var t,n,o,r,s,A;return v.initial&&(o0=null),((t=e.face.attention)==null?void 0:t.enabled)&&(o0==null?void 0:o0.signature)&&Object.keys(((n=o0==null?void 0:o0.signature)==null?void 0:n.outputs)||{}).length<6&&(o0=null),o0?e.debug&&u("cached model:",o0.modelUrl):(o=e.face.attention)!=null&&o.enabled?o0=await O(e.face.attention.modelPath):o0=await O((r=e.face.mesh)==null?void 0:r.modelPath),I2=o0.executor&&((s=o0==null?void 0:o0.inputs)==null?void 0:s[0].shape)?(A=o0==null?void 0:o0.inputs)==null?void 0:A[0].shape[2]:256,o0}var z3=Je,S3=j2;var le=V(H());var lA=["angry","disgust","fear","happy","sad","surprise","neutral"],_0,dt=[],j3=0,N3=0,R5=Number.MAX_SAFE_INTEGER;async function I3(e){var t;return v.initial&&(_0=null),_0?e.debug&&u("cached model:",_0.modelUrl):_0=await O((t=e.face.emotion)==null?void 0:t.modelPath),_0}async function M5(e,t,n,o){var A,a;if(!_0)return[];let r=R5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>g()-N3;return t.skipAllowed&&s&&r&&j3===o&&dt[n]&&dt[n].length>0?(R5++,dt[n]):(R5=0,new Promise(async l=>{var d;let c=[];if((d=t.face.emotion)!=null&&d.enabled){let i={},y=_0!=null&&_0.inputs[0].shape?_0.inputs[0].shape[2]:0;i.resize=le.image.resizeBilinear(e,[y,y],!1),i.channels=le.mul(i.resize,C.rgb),i.grayscale=le.sum(i.channels,3,!0),i.grayscaleSub=le.sub(i.grayscale,C.tf05),i.grayscaleMul=le.mul(i.grayscaleSub,C.tf2),i.emotion=_0==null?void 0:_0.execute(i.grayscaleMul),N3=g();let x=await i.emotion.data();for(let p=0;p(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*x[p])/100),emotion:lA[p]});c.sort((p,f)=>f.score-p.score),Object.keys(i).forEach(p=>le.dispose(i[p]))}dt[n]=c,j3=o,l(c)}))}var ce=V(H());var z0,Ce=[],L3=0,C3=0,P5=Number.MAX_SAFE_INTEGER;async function W3(e){var t;return v.initial&&(z0=null),z0?e.debug&&u("cached model:",z0.modelUrl):z0=await O((t=e.face.description)==null?void 0:t.modelPath),z0}function cA(e){let t=e.image||e.tensor||e;if(!(z0!=null&&z0.inputs[0].shape))return t;let n=ce.image.resizeBilinear(t,[z0.inputs[0].shape[2],z0.inputs[0].shape[1]],!1),o=ce.mul(n,C.tf255);return ce.dispose(n),o}async function k5(e,t,n,o){var a,l,c,d;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(z0!=null&&z0.executor))return r;let s=P5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>g()-L3;return t.skipAllowed&&s&&A&&C3===o&&((c=Ce==null?void 0:Ce[n])==null?void 0:c.age)>0&&((d=Ce==null?void 0:Ce[n])==null?void 0:d.genderScore)>0?(P5++,Ce[n]):(P5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let x=cA(e),p=z0==null?void 0:z0.execute(x);L3=g(),ce.dispose(x);let b=await p.find(q=>q.shape[1]===1).data(),M=Math.trunc(200*Math.abs(b[0]-.5))/100;M>(t.face.description.minConfidence||0)&&(r.gender=b[0]<=.5?"female":"male",r.genderScore=Math.min(.99,M));let T=ce.argMax(p.find(q=>q.shape[1]===100),1),m=(await T.data())[0];ce.dispose(T);let S=await p.find(q=>q.shape[1]===100).data();r.age=Math.round(S[m-1]>S[m+1]?10*m-100*S[m-1]:10*m+100*S[m+1])/10,(Number.isNaN(b[0])||Number.isNaN(S[0]))&&u("faceres error:",{model:z0,result:p});let P=p.find(q=>q.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),p.forEach(q=>ce.dispose(q))}Ce[n]=r,C3=o,i(r)}))}var u2=.1,w5=.5;function xA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function F3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ne.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});u2&&u2>0&&(r=r.map(A=>({x:A.x>.5?A.x+u2:A.x-u2,y:A.y>.5?A.y+u2:A.y-u2})));for(let A=0;Ag()-H3,s=E5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&B3===o&&yt[n]?(E5++,yt[n]):(E5=0,new Promise(async l=>{let c=ft.image.resizeBilinear(e,[M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[1]:0],!1),d=M0==null?void 0:M0.execute(c),i=(await d.data())[0];yt[n]=Math.round(100*i)/100,B3=o,H3=g(),ft.dispose([c,d]),l(yt[n])}))}var pt=V(H());var P0,mt=[],S5=Number.MAX_SAFE_INTEGER,Z3=0,X3=0;async function q3(e){var t;return v.initial&&(P0=null),P0?e.debug&&u("cached model:",P0.modelUrl):P0=await O((t=e.face.liveness)==null?void 0:t.modelPath),P0}async function j5(e,t,n,o){var A,a;if(!(P0!=null&&P0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>g()-X3,s=S5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&Z3===o&&mt[n]?(S5++,mt[n]):(S5=0,new Promise(async l=>{let c=pt.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),d=P0==null?void 0:P0.execute(c),i=(await d.data())[0];mt[n]=Math.round(100*i)/100,Z3=o,X3=g(),pt.dispose([c,d]),l(mt[n])}))}var ut=V(H());var oe,N5=[],yA=["white","black","asian","indian","other"],fA=[15,23,28,35.5,45.5,55.5,65],Y3=0,K3=0,I5=Number.MAX_SAFE_INTEGER;async function J3(e){var t;return v.initial&&(oe=null),oe?e.debug&&u("cached model:",oe.modelUrl):oe=await O((t=e.face.gear)==null?void 0:t.modelPath),oe}async function O5(e,t,n,o){var A,a;if(!oe)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=I5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>g()-K3;return t.skipAllowed&&s&&r&&Y3===o&&N5[n]?(I5++,N5[n]):(I5=0,new Promise(async l=>{var M,T;if(!(oe!=null&&oe.inputs[0].shape))return;let c={},d=[[0,.1,.9,.9]];c.resize=ut.image.cropAndResize(e,d,[0],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([c.age,c.gender,c.race]=oe.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let x=await c.race.data();for(let m=0;m(((T=t.face.gear)==null?void 0:T.minConfidence)||.2)&&i.race.push({score:Math.round(100*x[m])/100,race:yA[m]});i.race.sort((m,h)=>h.score-m.score);let f=Array.from(await c.age.data()).map((m,h)=>[fA[h],m]).sort((m,h)=>h[1]-m[1]),b=f[0][0];for(let m=1;mut.dispose(c[m])),N5[n]=i,Y3=o,K3=g(),l(i)}))}var h2=V(H());var V0,ht=[],_3=0,$3=0,L5=Number.MAX_SAFE_INTEGER;async function en(e){return v.initial&&(V0=null),V0?e.debug&&u("cached model:",V0.modelUrl):V0=await O(e.face.ssrnet.modelPathAge),V0}async function C5(e,t,n,o){var A,a,l,c;if(!V0)return{age:0};let r=L5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-$3;return t.skipAllowed&&r&&s&&_3===o&&((l=ht[n])==null?void 0:l.age)&&((c=ht[n])==null?void 0:c.age)>0?(L5++,ht[n]):(L5=0,new Promise(async d=>{var x;if(!(V0!=null&&V0.inputs)||!V0.inputs[0]||!V0.inputs[0].shape)return;let i={};i.resize=h2.image.resizeBilinear(e,[V0.inputs[0].shape[2],V0.inputs[0].shape[1]],!1),i.enhance=h2.mul(i.resize,C.tf255);let y={age:0};if((x=t.face.ssrnet)!=null&&x.enabled&&(i.age=V0.execute(i.enhance)),i.age){let p=await i.age.data();y.age=Math.trunc(10*p[0])/10}Object.keys(i).forEach(p=>h2.dispose(i[p])),ht[n]=y,_3=o,$3=g(),d(y)}))}var S0=V(H());var re,bt=[],nn=0,on=0,W5=Number.MAX_SAFE_INTEGER,D5=[.2989,.587,.114];async function rn(e){var t;return v.initial&&(re=null),re?e.debug&&u("cached model:",re.modelUrl):re=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),re}async function F5(e,t,n,o){var A,a,l,c;if(!re)return{gender:"unknown",genderScore:0};let r=W5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-on;return t.skipAllowed&&r&&s&&nn===o&&((l=bt[n])==null?void 0:l.gender)&&((c=bt[n])==null?void 0:c.genderScore)>0?(W5++,bt[n]):(W5=0,new Promise(async d=>{var p;if(!(re!=null&&re.inputs[0].shape))return;let i={};i.resize=S0.image.resizeBilinear(e,[re.inputs[0].shape[2],re.inputs[0].shape[1]],!1),i.enhance=S0.tidy(()=>{let[f,b,M]=S0.split(i.resize,3,3),T=S0.mul(f,D5[0]),m=S0.mul(b,D5[1]),h=S0.mul(M,D5[2]),S=S0.addN([T,m,h]);return S0.mul(S0.sub(S,C.tf05),2)});let y={gender:"unknown",genderScore:0};(p=t.face.ssrnet)!=null&&p.enabled&&(i.gender=re.execute(i.enhance));let x=await i.gender.data();y.gender=x[0]>x[1]?"female":"male",y.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(i).forEach(f=>S0.dispose(i[f])),bt[n]=y,nn=o,on=g(),d(y)}))}var gt=V(H());var Z0,B5=[],An=0,an=0,ln=Number.MAX_SAFE_INTEGER;async function cn(e){var t;return v.initial&&(Z0=null),Z0?e.debug&&u("cached model:",Z0.modelUrl):Z0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Z0}async function H5(e,t,n,o){var A,a;if(!(Z0!=null&&Z0.executor))return[];let r=ln<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>g()-an;return t.skipAllowed&&s&&r&&An===o&&B5[n]?(ln++,B5[n]):new Promise(async l=>{var d;let c=[];if(((d=t.face.mobilefacenet)==null?void 0:d.enabled)&&(Z0==null?void 0:Z0.inputs[0].shape)){let i={};i.crop=gt.image.resizeBilinear(e,[Z0.inputs[0].shape[2],Z0.inputs[0].shape[1]],!1),i.data=Z0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(x=>gt.dispose(i[x]))}B5[n]=c,An=o,an=g(),l(c)})}var Tt=V(H());var X0,G5=[],dn=0,yn=0,fn=Number.MAX_SAFE_INTEGER;async function mn(e){return v.initial&&(X0=null),X0?e.debug&&u("cached model:",X0.modelUrl):X0=await O(e.face.insightface.modelPath),X0}async function V5(e,t,n,o){var A,a;if(!(X0!=null&&X0.executor))return[];let r=fn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>g()-yn;return t.skipAllowed&&s&&r&&dn===o&&G5[n]?(fn++,G5[n]):new Promise(async l=>{var d;let c=[];if(((d=t.face.insightface)==null?void 0:d.enabled)&&(X0==null?void 0:X0.inputs[0].shape)){let i={};i.crop=Tt.image.resizeBilinear(e,[X0.inputs[0].shape[2],X0.inputs[0].shape[1]],!1),i.data=X0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(x=>Tt.dispose(i[x]))}G5[n]=c,dn=o,yn=g(),l(c)})}var mA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},un=(e,t)=>{let n=f=>{let b=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=b,f[1]/=b,f[2]/=b,f},o=(f,b)=>{let M=f[0]-b[0],T=f[1]-b[1],m=f[2]-b[2];return[M,T,m]},r=(f,b)=>{let M=f[1]*b[2]-f[2]*b[1],T=f[2]*b[0]-f[0]*b[2],m=f[0]*b[1]-f[1]*b[0];return[M,T,m]},s=f=>{let[b,M,T,m,h,S,P,I,q]=f,t0,G,$;return m<1?m>-1?($=Math.asin(m),G=Math.atan2(-P,b),t0=Math.atan2(-S,h)):($=-Math.PI/2,G=-Math.atan2(I,q),t0=0):($=Math.PI/2,G=Math.atan2(I,q),t0=0),Number.isNaN(t0)&&(t0=0),Number.isNaN(G)&&(G=0),Number.isNaN($)&&($=0),{pitch:2*-t0,yaw:2*-G,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),d=n(o(l[3],l[2])),i=n(r(d,c));d=r(c,i);let y=[d[0],d[1],d[2],c[0],c[1],c[2],i[0],i[1],i[2]],x=s(y),p=A.length===478?mA(e):{bearing:0,strength:0};return{angle:x,matrix:y,gaze:p}};function hn(e,t){let n=e==null?void 0:e.annotations;if(!n)return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var Z5=async(e,t)=>{var p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;let n=g(),o,r,s,A,a,l,c,d,i,y=[];e.state="run:face";let x=await w3(t,e.config);if(e.performance.face=v.perfadd?(e.performance.face||0)+Math.trunc(g()-n):Math.trunc(g()-n),!t.shape||t.shape.length!==4)return[];if(!x)return[];for(let z=0;z200?un(x[z],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?M5(x[z].tensor||i0.tensor([]),e.config,z,x.length):[]:(e.state="run:emotion",n=g(),A=(b=e.config.face.emotion)!=null&&b.enabled?await M5(x[z].tensor||i0.tensor([]),e.config,z,x.length):[],e.performance.emotion=v.perfadd?(e.performance.emotion||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(M=e.config.face.antispoof)!=null&&M.enabled?z5(x[z].tensor||i0.tensor([]),e.config,z,x.length):0:(e.state="run:antispoof",n=g(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await z5(x[z].tensor||i0.tensor([]),e.config,z,x.length):0,e.performance.antispoof=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?d=(m=e.config.face.liveness)!=null&&m.enabled?j5(x[z].tensor||i0.tensor([]),e.config,z,x.length):0:(e.state="run:liveness",n=g(),d=(h=e.config.face.liveness)!=null&&h.enabled?await j5(x[z].tensor||i0.tensor([]),e.config,z,x.length):0,e.performance.liveness=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(S=e.config.face.gear)!=null&&S.enabled?O5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null:(e.state="run:gear",n=g(),r=(P=e.config.face.gear)!=null&&P.enabled?await O5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,e.performance.gear=Math.trunc(g()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?C5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,s=(q=e.config.face.ssrnet)!=null&&q.enabled?F5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null):(e.state="run:ssrnet",n=g(),o=(t0=e.config.face.ssrnet)!=null&&t0.enabled?await C5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,s=(G=e.config.face.ssrnet)!=null&&G.enabled?await F5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,e.performance.ssrnet=Math.trunc(g()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?H5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null:(e.state="run:mobilefacenet",n=g(),a=(s0=e.config.face.mobilefacenet)!=null&&s0.enabled?await H5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(R=e.config.face.insightface)!=null&&R.enabled?V5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null:(e.state="run:mobilefacenet",n=g(),l=(Z=e.config.face.insightface)!=null&&Z.enabled?await V5(x[z].tensor||i0.tensor([]),e.config,z,x.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=k5(x[z].tensor||i0.tensor([]),e.config,z,x.length):(e.state="run:description",n=g(),i=await k5(x[z].tensor||i0.tensor([]),e.config,z,x.length),e.performance.description=v.perfadd?(e.performance.description||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,d]=await Promise.all([o,s,A,a,l,i,r,c,d])),e.analyze("Finish Face:"),((b0=e.config.face.ssrnet)==null?void 0:b0.enabled)&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),((U=e.config.face.gear)==null?void 0:U.enabled)&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),((g0=e.config.face.mobilefacenet)==null?void 0:g0.enabled)&&a&&(i.descriptor=a),((f0=e.config.face.insightface)==null?void 0:f0.enabled)&&l&&(i.descriptor=l);let Pe=(B=e.config.face.iris)!=null&&B.enabled?hn(x[z],t.shape[2]):0,ke=(X=e.config.face.detector)!=null&&X.return?i0.squeeze(x[z].tensor):null;i0.dispose(x[z].tensor),x[z].tensor&&delete x[z].tensor;let T0={...x[z],id:z};i.age&&(T0.age=i.age),i.gender&&(T0.gender=i.gender),i.genderScore&&(T0.genderScore=i.genderScore),i.descriptor&&(T0.embedding=i.descriptor),i.race&&(T0.race=i.race),A&&(T0.emotion=A),c&&(T0.real=c),d&&(T0.live=d),Pe>0&&(T0.distance=Pe),$0&&(T0.rotation=$0),ke&&(T0.tensor=ke),y.push(T0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var W0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>W0.nameMapping[e],getPoints:e=>W0.pointsMapping[e]},De={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>De.nameMapping[e]},l0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>l0.nameMapping[e]},We=class{constructor(t){k(this,"name");k(this,"curls");k(this,"directions");k(this,"weights");k(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:xe,index:ve,middle:Re,ring:n2,pinky:o2}=W0,{none:de,half:uA,full:ye}=De,{verticalUp:b2,verticalDown:G7,horizontalLeft:X5,horizontalRight:hA,diagonalUpRight:bA,diagonalUpLeft:g2,diagonalDownRight:V7,diagonalDownLeft:Z7}=l0,Fe=new We("thumbs up");Fe.curl(xe,de,1);Fe.direction(xe,b2,1);Fe.direction(xe,g2,.25);Fe.direction(xe,bA,.25);for(let e of[W0.index,W0.middle,W0.ring,W0.pinky])Fe.curl(e,ye,1),Fe.direction(e,X5,1),Fe.direction(e,hA,1);var p0=new We("victory");p0.curl(xe,uA,.5);p0.curl(xe,de,.5);p0.direction(xe,b2,1);p0.direction(xe,g2,1);p0.curl(ve,de,1);p0.direction(ve,b2,.75);p0.direction(ve,g2,1);p0.curl(Re,de,1);p0.direction(Re,b2,1);p0.direction(Re,g2,.75);p0.curl(n2,ye,1);p0.direction(n2,b2,.2);p0.direction(n2,g2,1);p0.direction(n2,X5,.2);p0.curl(o2,ye,1);p0.direction(o2,b2,.2);p0.direction(o2,g2,1);p0.direction(o2,X5,.2);p0.weight(ve,2);p0.weight(Re,2);var Be=new We("point");Be.curl(xe,ye,1);Be.curl(ve,de,.5);Be.curl(Re,ye,.5);Be.curl(n2,ye,.5);Be.curl(o2,ye,.5);Be.weight(ve,2);Be.weight(Re,2);var He=new We("middle finger");He.curl(xe,de,1);He.curl(ve,ye,.5);He.curl(Re,ye,.5);He.curl(n2,ye,.5);He.curl(o2,ye,.5);He.weight(ve,2);He.weight(Re,2);var T2=new We("open palm");T2.curl(xe,de,.75);T2.curl(ve,de,.75);T2.curl(Re,de,.75);T2.curl(n2,de,.75);T2.curl(o2,de,.75);var bn=[Fe,p0,Be,He,T2];var gA=.7,r2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function gn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function vn(e,t){if(!e||!t)return[0,0];let n=gn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=gn(e[1],e[2],t[1],t[2]);return[n,o]}function Tn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function TA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],d=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),x=Math.sqrt(r*r+a*a+d*d),p=Math.sqrt(s*s+l*l+i*i),f=(p*p+y*y-x*x)/(2*p*y);f>1?f=1:f<-1&&(f=-1);let b=Math.acos(f);b=57.2958*b%180;let M;return b>r2.NO_CURL_START_LIMIT?M=De.none:b>r2.HALF_CURL_START_LIMIT?M=De.half:M=De.full,M}function Rn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=l0.horizontalLeft:r=l0.horizontalRight:o===Math.abs(t)?t>0?r=l0.horizontalLeft:r=l0.horizontalRight:n>0?r=l0.horizontalLeft:r=l0.horizontalRight,r}function Mn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=l0.verticalDown:r=l0.verticalUp:o===Math.abs(t)?t<0?r=l0.verticalDown:r=l0.verticalUp:n<0?r=l0.verticalDown:r=l0.verticalUp,r}function vA(e,t,n,o,r,s,A,a){let l,c=Mn(e,t,n,o),d=Rn(r,s,A,a);return c===l0.verticalUp?d===l0.horizontalLeft?l=l0.diagonalUpLeft:l=l0.diagonalUpRight:d===l0.horizontalLeft?l=l0.diagonalDownLeft:l=l0.diagonalDownRight,l}function RA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],d=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,x=0,p=0,f=i/(d+1e-5);f>1.5?y+=r2.DISTANCE_VOTE_POWER:f>.66?x+=r2.DISTANCE_VOTE_POWER:p+=r2.DISTANCE_VOTE_POWER;let b=Math.sqrt(r*r+a*a),M=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),m=Math.max(b,M,T),h=e[0],S=e[1],P=n[0],I=n[1];m===b?(P=n[0],I=n[1]):m===T&&(h=t[0],S=t[1]);let G=vn([h,S],[P,I]),$=Tn(G,r2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],x+=$[1],p+=$[2];for(let R of o){let Z=Tn(R,r2.SINGLE_ANGLE_VOTE_POWER);y+=Z[0],x+=Z[1],p+=Z[2]}let s0;return y===Math.max(y,x,p)?s0=Mn(l,a,c,i):p===Math.max(x,p)?s0=Rn(s,r,A,d):s0=vA(l,a,c,i,s,r,A,d),s0}function Pn(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of W0.all){let A=W0.getPoints(s),a=[],l=[];for(let c of A){let d=e[c[0]],i=e[c[1]],y=vn(d,i),x=y[0],p=y[1];a.push(x),l.push(p)}t.push(a),n.push(l)}for(let s of W0.all){let A=s===W0.thumb?1:0,a=W0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],d=e[a[3][1]],i=TA(l,c,d),y=RA(l,c,d,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function vt(e){if(!e||e.length===0)return null;let t=Pn(e),n={};for(let o of W0.all)n[W0.getName(o)]={curl:De.getName(t.curls[o]),direction:l0.getName(t.directions[o])};return n}function kn(e){let t=[];if(!e||e.length===0)return t;let n=Pn(e);for(let o of bn){let r=o.matchAgainst(n.curls,n.directions);r>=gA&&t.push({name:o.name,confidence:r})}return t}var wn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},En=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let a=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));a>10&&t.push({face:n,gesture:`mouth ${Math.trunc(a)}% open`});let l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},zn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||b>.06)&&(x=!1),f>b?f>.05&&t.push({iris:A,gesture:"looking right"}):b>.05&&t.push({iris:A,gesture:"looking left"});let M=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||M<.01||T>.022||M>.022)&&(x=!1),(T<.01||M<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||M>.022)&&t.push({iris:A,gesture:"looking up"}),x&&t.push({iris:A,gesture:"looking center"})}return t},Sn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function Mt(e,t=1.5){let n=O2(e),o=Rt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function Pt(e){let t=O2(e),n=Rt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function PA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Cn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return PA(n)}var jn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ge(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let d=await c.box.data(),i=d.slice(0,2),y=d.slice(2,4),x=await c.palmLandmarks.array(),p={startPoint:i,endPoint:y,palmLandmarks:x,confidence:r[l]},f=Ln(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(b=>W.dispose(c[b]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var q0=V(H());var zA=5,Bn=1.65,Hn=[0,5,9,13,17,1,2],SA=0,jA=2,Gn=0,wt=class{constructor(t,n){k(this,"handDetector");k(this,"handPoseModel");k(this,"inputSize");k(this,"storedBoxes");k(this,"skipped");k(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>Y5([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Mt(Pt(r),zA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Mt(Pt(n),Bn);o.palmLandmarks=[];for(let r=0;r[A[0]*(x[0]-this.inputSize/2),A[1]*(x[1]-this.inputSize/2),A[2]*x[2]]),l=U5(o,[0,0]),c=a.map(x=>[...Y5(x,l),x[2]]),d=Wn(r),i=[...O2(n),1],y=[Ge(i,d[0]),Ge(i,d[1])];return c.map(x=>[Math.trunc(x[0]+y[0]),Math.trunc(x[1]+y[1]),Math.trunc(x[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>g()-Gn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A&&(r=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let S=q0.reshape(m,[-1,3]),P=await S.array();q0.dispose(m),q0.dispose(S);let I=this.transformRawCoords(P,f,d,p),q=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...q,confidence:h};let t0={landmarks:I,confidence:h,boxConfidence:c.confidence,fingerConfidence:h,box:{topLeft:q.startPoint,bottomRight:q.endPoint}};a.push(t0)}else this.storedBoxes[l]=null;q0.dispose(m)}else{let d=Mt(Pt(c),Bn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:d.startPoint,bottomRight:d.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var Vn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},s2,A2,Zn;async function K5(e,t){let n=await Zn.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let d of A)d[0]a[2]&&(a[2]=d[0]),d[1]>a[3]&&(a[3]=d[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=vt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function Xn(e){var n,o;v.initial&&(s2=null,A2=null),!s2||!A2?[s2,A2]=await Promise.all([e.hand.enabled?O((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?O((o=e.hand.skeleton)==null?void 0:o.modelPath):null]):(e.debug&&u("cached model:",s2.modelUrl),e.debug&&u("cached model:",A2.modelUrl));let t=s2?new kt(s2):void 0;return t&&A2&&(Zn=new wt(t,A2)),[s2,A2]}var Q=V(H());var y0=[null,null],IA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ve=[[0,0],[0,0]],OA=["hand","fist","pinch","point","face","tip","pinchtip"],Un=4,Yn=1.6,LA=512,CA=1.4,Et=Number.MAX_SAFE_INTEGER,J5=0,Me=[0,0],d0={boxes:[],hands:[]},Kn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Jn(e){var t;if(v.initial&&(y0[0]=null),y0[0])e.debug&&u("cached model:",y0[0].modelUrl);else{U2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),y0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=y0[0].executor?Object.values(y0[0].modelSignature.inputs):void 0;Ve[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[0]}async function Qn(e){var t;if(v.initial&&(y0[1]=null),y0[1])e.debug&&u("cached model:",y0[1].modelUrl);else{y0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=y0[1].executor?Object.values(y0[1].modelSignature.inputs):void 0;Ve[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[1]}async function WA(e,t){let n=[];if(!e||!y0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,LA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await y0[0].executeAsync(o.cast,IA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[Un]),a.splice(Un,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),d=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let x=Q.slice(o.boxes,y,1),p=await x.data();Q.dispose(x);let f=[p[1],p[0],p[3]-p[1],p[2]-p[0]],b=nt(f,CA),M=[Math.trunc(f[0]*Me[0]),Math.trunc(f[1]*Me[1]),Math.trunc(f[2]*Me[0]),Math.trunc(f[3]*Me[1])],T=d[y],m=OA[i[y]],h={id:l++,score:T,box:M,boxRaw:b,label:m};n.push(h)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,x)=>x.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function Q5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&y0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[Ve[1][0],Ve[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=y0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(i=>[i[0]/Ve[1][1],i[1]/Ve[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=d.map(i=>[Me[0]*(i[0]+t.boxRaw[0]),Me[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=vt(o.keypoints);for(let i of Object.keys(Kn))o.annotations[i]=Kn[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function _5(e,t){var r,s;if(!((r=y0[0])!=null&&r.executor)||!((s=y0[1])!=null&&s.executor)||!y0[0].inputs[0].shape||!y0[1].inputs[0].shape)return[];Me=[e.shape[2]||0,e.shape[1]||0],Et++;let n=(t.hand.skipTime||0)>g()-J5,o=Et<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?d0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>g()-J5,l=Et<3*(t.hand.skipFrames||0);t.skipAllowed&&d0.hands.length===t.hand.maxDetected?d0.hands=await Promise.all(d0.boxes.map(d=>Q5(e,d,t))):t.skipAllowed&&a&&l&&d0.hands.length>0?d0.hands=await Promise.all(d0.boxes.map(d=>Q5(e,d,t))):(d0.boxes=await WA(e,t),J5=g(),d0.hands=await Promise.all(d0.boxes.map(d=>Q5(e,d,t))),Et=0);let c=[...d0.boxes];if(d0.boxes.length=0,t.cacheSensitivity>0)for(let d=0;d.05&&i.box[3]/(e.shape[1]||1)>.05&&d0.hands[d].fingerScore&&d0.hands[d].fingerScore>(t.hand.minConfidence||0)){let y=nt(i.box,Yn),x=nt(i.boxRaw,Yn);d0.boxes.push({...c[d],box:y,boxRaw:x})}}for(let d=0;d({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var L2={};we(L2,{connected:()=>St,horizontal:()=>$5,kpt:()=>zt,relative:()=>t1,vertical:()=>e1});var zt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],$5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],e1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],t1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],St={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var w=ue(),n1=0;function $n(e,t){var A,a,l,c,d,i,y,x,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;let n=g();if(!e)return ue();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(w.canvas=e.canvas),e.error&&(w.error=e.error),!w.body||e.body.length!==w.body.length)w.body=JSON.parse(JSON.stringify(e.body));else for(let R=0;R((r-1)*w.body[R].box[X]+B)/r),b0=e.body[R].boxRaw.map((B,X)=>((r-1)*w.body[R].boxRaw[X]+B)/r),U=e.body[R].keypoints.map((B,X)=>{var z,$0,Pe,ke,T0,M2,T1,v1,R1;return{score:B.score,part:B.part,position:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[w.body[R].keypoints[X]?((r-1)*(((z=w.body[R].keypoints[X].distance)==null?void 0:z[0])||0)+((($0=B.distance)==null?void 0:$0[0])||0))/r:(Pe=B.distance)==null?void 0:Pe[0],w.body[R].keypoints[X]?((r-1)*(((ke=w.body[R].keypoints[X].distance)==null?void 0:ke[1])||0)+(((T0=B.distance)==null?void 0:T0[1])||0))/r:(M2=B.distance)==null?void 0:M2[1],w.body[R].keypoints[X]?((r-1)*(((T1=w.body[R].keypoints[X].distance)==null?void 0:T1[2])||0)+(((v1=B.distance)==null?void 0:v1[2])||0))/r:(R1=B.distance)==null?void 0:R1[2]]}}),g0={},f0={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?f0=st:(a=t.body.modelPath)!=null&&a.includes("blazepose")?f0=et:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(f0=L2);for(let[B,X]of Object.entries(f0.connected)){let z=[];for(let $0=0;$0T0.part===X[$0]),ke=U.find(T0=>T0.part===X[$0+1]);Pe&&ke&&z.push([Pe.position,ke.position])}g0[B]=z}w.body[R]={...e.body[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.hand||e.hand.length!==w.hand.length)w.hand=JSON.parse(JSON.stringify(e.hand));else for(let R=0;R((r-1)*w.hand[R].box[B]+f0)/r),b0=e.hand[R].boxRaw.map((f0,B)=>((r-1)*w.hand[R].boxRaw[B]+f0)/r);w.hand[R].keypoints.length!==e.hand[R].keypoints.length&&(w.hand[R].keypoints=e.hand[R].keypoints);let U=e.hand[R].keypoints&&e.hand[R].keypoints.length>0?e.hand[R].keypoints.map((f0,B)=>f0.map((X,z)=>((r-1)*(w.hand[R].keypoints[B][z]||1)+(X||0))/r)):[],g0={};if(Object.keys(w.hand[R].annotations).length!==Object.keys(e.hand[R].annotations).length)w.hand[R].annotations=e.hand[R].annotations,g0=w.hand[R].annotations;else if(e.hand[R].annotations)for(let f0 of Object.keys(e.hand[R].annotations))g0[f0]=(i=(d=(c=e.hand[R])==null?void 0:c.annotations)==null?void 0:d[f0])!=null&&i[0]?e.hand[R].annotations[f0].map((B,X)=>B.map((z,$0)=>((r-1)*w.hand[R].annotations[f0][X][$0]+z)/r)):null;w.hand[R]={...e.hand[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.face||e.face.length!==w.face.length)w.face=JSON.parse(JSON.stringify(e.face));else for(let R=0;R((r-1)*w.face[R].box[g0]+U)/r),b0=e.face[R].boxRaw.map((U,g0)=>((r-1)*w.face[R].boxRaw[g0]+U)/r);if(e.face[R].rotation){let U={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};U.matrix=(y=e.face[R].rotation)==null?void 0:y.matrix,U.angle={roll:((r-1)*(((p=(x=w.face[R].rotation)==null?void 0:x.angle)==null?void 0:p.roll)||0)+(((b=(f=e.face[R].rotation)==null?void 0:f.angle)==null?void 0:b.roll)||0))/r,yaw:((r-1)*(((T=(M=w.face[R].rotation)==null?void 0:M.angle)==null?void 0:T.yaw)||0)+(((h=(m=e.face[R].rotation)==null?void 0:m.angle)==null?void 0:h.yaw)||0))/r,pitch:((r-1)*(((P=(S=w.face[R].rotation)==null?void 0:S.angle)==null?void 0:P.pitch)||0)+(((q=(I=e.face[R].rotation)==null?void 0:I.angle)==null?void 0:q.pitch)||0))/r},U.gaze={bearing:((r-1)*(((t0=w.face[R].rotation)==null?void 0:t0.gaze.bearing)||0)+(((G=e.face[R].rotation)==null?void 0:G.gaze.bearing)||0))/r,strength:((r-1)*((($=w.face[R].rotation)==null?void 0:$.gaze.strength)||0)+(((s0=e.face[R].rotation)==null?void 0:s0.gaze.strength)||0))/r},w.face[R]={...e.face[R],rotation:U,box:Z,boxRaw:b0}}else w.face[R]={...e.face[R],box:Z,boxRaw:b0}}if(!w.object||e.object.length!==w.object.length)w.object=JSON.parse(JSON.stringify(e.object));else for(let R=0;R((r-1)*w.object[R].box[g0]+U)/r),b0=e.object[R].boxRaw.map((U,g0)=>((r-1)*w.object[R].boxRaw[g0]+U)/r);w.object[R]={...e.object[R],box:Z,boxRaw:b0}}if(e.persons){let R=e.persons;if(!w.persons||R.length!==w.persons.length)w.persons=JSON.parse(JSON.stringify(R));else for(let Z=0;Z((r-1)*w.persons[Z].box[U]+b0)/r)}e.gesture&&(w.gesture=e.gesture),w.width=e.width,w.height=e.height;let s=g();return n1=v.perfadd?n1+Math.round(s-n):Math.round(s-n),e.performance&&(w.performance={...e.performance,interpolate:n1}),w}var r0=V(H());var j0;async function o1(e){return!j0||v.initial?j0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",j0.modelUrl),j0}async function eo(e,t){var r;if(j0||(j0=await o1(t)),!(j0!=null&&j0.executor)||!((r=j0==null?void 0:j0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=r0.image.resizeBilinear(e,[j0.inputs[0].shape?j0.inputs[0].shape[1]:0,j0.inputs[0].shape?j0.inputs[0].shape[2]:0],!1),n.norm=r0.div(n.resize,C.tf255),n.res=j0.execute(n.norm),n.squeeze=r0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r0.unstack(n.squeeze,2),n.fg=r0.softmax(n.fgRaw),n.mul=r0.mul(n.fg,C.tf255),n.expand=r0.expandDims(n.mul,2),n.output=r0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r0.squeeze(e),n.concat=r0.concat([n.input,n.output],-1),o=r0.cast(n.concat,"int32");break;case"alpha":o=r0.cast(n.output,"int32");break;default:o=r0.tensor(0)}return Object.keys(n).forEach(s=>r0.dispose(n[s])),o}var jt={};we(jt,{distance:()=>r1,find:()=>BA,similarity:()=>FA});function r1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function FA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=r1(e,t,n);return no(o,n.order||2,n.min||0,n.max||1)}function BA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AD2,validateModel:()=>Dt});var ao=V(H());var Ze=V(H());var oo=.005,U0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function s1(e){for(let t of $5){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function ro(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ze.pad(e,U0.padding),n.resize=Ze.image.resizeBilinear(n.pad,[t,t]);let o=Ze.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ze.dispose(n[A])),o}function Ao(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+U0.padding[2][0]+U0.padding[2][1])/t[0]-U0.padding[2][0],o.position[1]*(t[1]+U0.padding[1][0]+U0.padding[1][1])/t[1]-U0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ge(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var u0,Nt=0,A1=Number.MAX_SAFE_INTEGER,a2={boxes:[],bodies:[],last:0};async function io(e){var t;return v.initial&&(u0=null),u0?e.debug&&u("cached model:",u0.modelUrl):(U2(["size"],e),u0=await O(e.body.modelPath)),Nt=(u0==null?void 0:u0.executor)&&((t=u0==null?void 0:u0.inputs)==null?void 0:t[0].shape)?u0.inputs[0].shape[2]:0,Nt<64&&(Nt=256),u0}function GA(e,t,n){let o=e[0][0],r=[],s=0;for(let d=0;dt.body.minConfidence){let i=[o[d][1],o[d][0]];r.push({score:Math.round(100*s)/100,part:zt[d],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((d,i)=>i.score>d?i.score:d,0);let A=[],a=ge(r.map(d=>d.position),[n.shape[2],n.shape[1]]),l={};for(let[d,i]of Object.entries(St)){let y=[];for(let x=0;xb.part===i[x]),f=r.find(b=>b.part===i[x+1]);p&&f&&p.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([p.position,f.position])}l[d]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return s1(c),A.push(c),A}function VA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let y=s[3*i+2];if(y>t.body.minConfidence){let x=[s[3*i+1],s[3*i+0]];a.push({part:zt[i],score:Math.round(100*y)/100,positionRaw:x,position:[Math.round((n.shape[2]||0)*x[0]),Math.round((n.shape[1]||0)*x[1])]})}}let l=ge(a.map(i=>i.position),[n.shape[2],n.shape[1]]),c={};for(let[i,y]of Object.entries(St)){let x=[];for(let p=0;pM.part===y[p]),b=a.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&x.push([f.position,b.position])}c[i]=x}let d={id:r,score:A,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:c};s1(d),o.push(d)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function a1(e,t){var r;if(!(u0!=null&&u0.executor)||!((r=u0==null?void 0:u0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(a2.boxes.length=0),A1++;let n=(t.body.skipTime||0)>g()-a2.last,o=A1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?a2.bodies:new Promise(async s=>{let A={};A1=0,A.input=so(e,Nt),A.res=u0==null?void 0:u0.execute(A.input),a2.last=g();let a=await A.res.array();a2.bodies=A.res.shape[2]===17?GA(a,t,e):VA(a,t,e);for(let l of a2.bodies)Ao(l,[e.shape[2]||1,e.shape[1]||1]),ro(l.keypoints);Object.keys(A).forEach(l=>ao.dispose(A[l])),s(a2.bodies)})}var w0=V(H());var se,It=[],co=0,i1=Number.MAX_SAFE_INTEGER,Lt=0,Ot=2.5;async function xo(e){if(!se||v.initial){se=await O(e.object.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;Lt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&u("cached model:",se.modelUrl);return se}async function ZA(e,t,n){var c,d;let o=0,r=[],s=Lt;for(let i of[1,2,4]){let y=i*13,x=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)===x2.length)),p=await x.array(),f=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)(n.object.minConfidence||0)&&h!==61){let P=(.5+Math.trunc(m%y))/y,I=(.5+Math.trunc(m/y))/y,q=T[m].map(U=>U*(y/i/s)),[t0,G]=[P-Ot/i*q[0],I-Ot/i*q[1]],[$,s0]=[P+Ot/i*q[2]-t0,I+Ot/i*q[3]-G],R=[t0,G,$,s0];R=R.map(U=>Math.max(0,Math.min(U,1)));let Z=[R[0]*t[0],R[1]*t[1],R[2]*t[0],R[3]*t[1]],b0={id:o++,score:Math.round(100*S)/100,class:h+1,label:x2[h].label,box:Z.map(U=>Math.trunc(U)),boxRaw:R};r.push(b0)}}w0.dispose([x,f,b,M])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await w0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),w0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function l1(e,t){if(!(se!=null&&se.executor))return[];let n=(t.object.skipTime||0)>g()-co,o=i1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&It.length>0?(i1++,It):(i1=0,!v.kernels.includes("mod")||!v.kernels.includes("sparsetodense")?It:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=w0.image.resizeBilinear(e,[Lt,Lt],!1),a=w0.div(A,C.tf255),l=w0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=se.execute(l)),co=g();let d=await ZA(c,s,t);It=d,w0.dispose([A,a,l,...c]),r(d)}))}var D0=V(H());var W2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],XA=W2.length,C2=W2.reduce((e,t,n)=>(e[t]=n,e),{}),qA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Li=qA.map(([e,t])=>[C2[e],C2[t]]),fo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function mo(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function po(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,d)=>({id:d,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:x})=>({score:i,part:y,position:[Math.trunc(x.x*A),Math.trunc(x.y*s)],positionRaw:[x.x/o,x.y/o]})),annotations:{}});return e.map((c,d)=>a(c,d))}var Ct=class{constructor(t,n){k(this,"priorityQueue");k(this,"numberOfElements");k(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function uo(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function y1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Y0,YA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Wt=1,v2=16,KA=50**2;function ho(e,t,n,o,r,s,A=2){let a=M=>({y:s.get(M.y,M.x,e),x:s.get(M.y,M.x,s.shape[2]/2+e)}),l=(M,T,m)=>({y:d1(Math.round(M.y/v2),0,T-1),x:d1(Math.round(M.x/v2),0,m-1)}),[c,d]=o.shape,i=l(t.position,c,d),y=a(i),p=y1(t.position,y);for(let M=0;M[C2[y],C2[x]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,d=new Array(l),i=x1(e.part,v2,n);d[e.part.id]={score:e.score,part:W2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let x=A[y],p=a[y];d[x]&&!d[p]&&(d[p]=ho(y,d[x],p,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function _A(e,t){let[n,o,r]=t.shape,s=new Ct(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?uo(n,t,s.y,s.x)<=KA:!1})}function $A(e,t){return t.reduce((o,{position:r,score:s},A)=>(bo(e,r,A)||(o+=s),o),0)/t.length}function e4(e,t,n,o,r,s){let A=[],a=_A(s,t);for(;A.lengthx.score>s);let i=$A(A,d),y=mo(d);i>s&&A.push({keypoints:d,box:y,score:Math.round(100*i)/100})}return A}async function f1(e,t){if(!(Y0!=null&&Y0.executor))return[];let n=D0.tidy(()=>{if(!Y0.inputs[0].shape)return[];let A=D0.image.resizeBilinear(e,[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]),a=D0.sub(D0.div(D0.cast(A,"float32"),127.5),1),c=Y0.execute(a,YA).map(d=>D0.squeeze(d,[0]));return c[1]=D0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)D0.dispose(A);let r=e4(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return Y0.inputs[0].shape?po(r,[e.shape[1],e.shape[2]],[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]):[]}async function go(e){return!Y0||v.initial?Y0=await O(e.body.modelPath):e.debug&&u("cached model:",Y0.modelUrl),Y0}var F=V(H());var he,t4=["fgr","pha","r1o","r2o","r3o","r4o"],h0={},p1=0;function Ro(e){F.dispose([h0.r1i,h0.r2i,h0.r3i,h0.r4i,h0.downsample_ratio]),h0.r1i=F.tensor(0),h0.r2i=F.tensor(0),h0.r3i=F.tensor(0),h0.r4i=F.tensor(0),p1=e.segmentation.ratio||.5,h0.downsample_ratio=F.tensor(p1)}async function u1(e){return!he||v.initial?he=await O(e.segmentation.modelPath):e.debug&&u("cached model:",he.modelUrl),Ro(e),he}var vo=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function m1(e,t){let n=e?vo(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?vo(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function n4(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Mo(e,t){if(he||(he=await u1(t)),!(he!=null&&he.executor))return null;h0.src=F.div(e,255),p1!==t.segmentation.ratio&&Ro(t);let[n,o,r,s,A,a]=await he.executeAsync(h0,t4),l;switch(t.segmentation.mode||"default"){case"default":l=m1(n,o);break;case"alpha":l=m1(null,o);break;case"foreground":l=m1(n,null);break;case"state":l=n4(r);break;default:l=F.tensor(0)}return F.dispose([h0.src,n,o,h0.r1i,h0.r2i,h0.r3i,h0.r4i]),[h0.r1i,h0.r2i,h0.r3i,h0.r4i]=[r,s,A,a],l}var k0=V(H());var N0;async function h1(e){return!N0||v.initial?N0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",N0.modelUrl),N0}async function ko(e,t){var r;if(N0||(N0=await h1(t)),!(N0!=null&&N0.executor)||!((r=N0==null?void 0:N0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=k0.image.resizeBilinear(e,[N0.inputs[0].shape?N0.inputs[0].shape[1]:0,N0.inputs[0].shape?N0.inputs[0].shape[2]:0],!1),n.norm=k0.div(n.resize,C.tf255),n.res=N0.execute(n.norm),n.squeeze=k0.squeeze(n.res,[0]),n.alpha=k0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=k0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=k0.squeeze(e),n.concat=k0.concat([n.input,n.mul],-1),o=k0.cast(n.concat,"int32");break;case"alpha":o=k0.cast(n.mul,"int32");break;default:o=k0.tensor(0)}return Object.keys(n).forEach(s=>k0.dispose(n[s])),o}function Dt(e,t,n){var c,d;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((d=l==null?void 0:l.graph)!=null&&d.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&u("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&u("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var D2=class{constructor(t){k(this,"instance");k(this,"models");this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(E0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(E0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(E0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(){var n,o,r,s,A,a,l,c,d,i,y,x,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;v.initial&&this.reset();let t={};t.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?u3(this.instance.config):null,t.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)==null?void 0:n.enabled)&&!this.models.antispoof?G3(this.instance.config):null,t.liveness=this.instance.config.face.enabled&&((o=this.instance.config.face.liveness)==null?void 0:o.enabled)&&!this.models.liveness?q3(this.instance.config):null,t.faceres=this.instance.config.face.enabled&&((r=this.instance.config.face.description)==null?void 0:r.enabled)&&!this.models.faceres?W3(this.instance.config):null,t.emotion=this.instance.config.face.enabled&&((s=this.instance.config.face.emotion)==null?void 0:s.enabled)&&!this.models.emotion?I3(this.instance.config):null,t.iris=this.instance.config.face.enabled&&((A=this.instance.config.face.iris)==null?void 0:A.enabled)&&!((a=this.instance.config.face.attention)!=null&&a.enabled)&&!this.models.iris?R3(this.instance.config):null,t.facemesh=this.instance.config.face.enabled&&((l=this.instance.config.face.mesh)==null?void 0:l.enabled)&&!this.models.facemesh?E3(this.instance.config):null,t.gear=this.instance.config.face.enabled&&((c=this.instance.config.face.gear)==null?void 0:c.enabled)&&!this.models.gear?J3(this.instance.config):null,t.ssrnetage=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)==null?void 0:d.enabled)&&!this.models.ssrnetage?en(this.instance.config):null,t.ssrnetgender=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)==null?void 0:i.enabled)&&!this.models.ssrnetgender?rn(this.instance.config):null,t.mobilefacenet=this.instance.config.face.enabled&&((y=this.instance.config.face.mobilefacenet)==null?void 0:y.enabled)&&!this.models.mobilefacenet?cn(this.instance.config):null,t.insightface=this.instance.config.face.enabled&&((x=this.instance.config.face.insightface)==null?void 0:x.enabled)&&!this.models.insightface?mn(this.instance.config):null,t.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((p=this.instance.config.body.modelPath)==null?void 0:p.includes("blazepose"))?$1(this.instance.config):null,t.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?_1(this.instance.config):null,t.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((f=this.instance.config.body.modelPath)==null?void 0:f.includes("efficientpose"))?s3(this.instance.config):null,t.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((b=this.instance.config.body.modelPath)==null?void 0:b.includes("movenet"))?io(this.instance.config):null,t.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((M=this.instance.config.body.modelPath)==null?void 0:M.includes("posenet"))?go(this.instance.config):null,t.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((m=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)==null?void 0:m.includes("handtrack"))?Jn(this.instance.config):null,t.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((S=(h=this.instance.config.hand.detector)==null?void 0:h.modelPath)==null?void 0:S.includes("handtrack"))?Qn(this.instance.config):null,(I=(P=this.instance.config.hand.detector)==null?void 0:P.modelPath)!=null&&I.includes("handdetect")&&([t.handpose,t.handskeleton]=this.models.handpose?[null,null]:await Xn(this.instance.config)),t.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((q=this.instance.config.object.modelPath)==null?void 0:q.includes("centernet"))?n3(this.instance.config):null,t.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((t0=this.instance.config.object.modelPath)==null?void 0:t0.includes("nanodet"))?xo(this.instance.config):null,t.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((G=this.instance.config.segmentation.modelPath)==null?void 0:G.includes("selfie"))?h1(this.instance.config):null,t.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&(($=this.instance.config.segmentation.modelPath)==null?void 0:$.includes("meet"))?o1(this.instance.config):null,t.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((s0=this.instance.config.segmentation.modelPath)==null?void 0:s0.includes("rvm"))?u1(this.instance.config):null,await Promise.all([...Object.values(t)]);for(let R of Object.keys(t))this.models[R]=t[R]||this.models[R]||null}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(E0).find(r=>r.startsWith(n.name));!o||(n.size=E0[o].sizeLoadedWeights,n.url=E0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Dt(this.instance,o,n);r&&t.push(r)}return t}};function Eo(e,t,n,o,r){var a,l,c,d,i,y;let s=0,A=[];for(let x of e){let p={id:s++,face:x,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let h of t)x.box[0]>h.box[0]&&x.box[0]h.box[1]&&x.box[1]+x.box[3]p.body.box[0]&&h.box[0]+h.box[2]p.body.box[1]&&h.box[1]+h.box[3]p.body.box[0]&&h.box[1]+h.box[3]>p.body.box[1]&&h.box[1]+h.box[3]{h&&h.length===4&&(f.push(h[0],h[0]+h[2]),b.push(h[1],h[1]+h[3]))};M(p.face.box),M((d=p.body)==null?void 0:d.box),M((i=p.hands.left)==null?void 0:i.box),M((y=p.hands.right)==null?void 0:y.box);let T=Math.min(...f),m=Math.min(...b);p.box=[T,m,Math.max(...f)-T,Math.max(...b)-m],(r==null?void 0:r[1])&&(r==null?void 0:r[2])&&(p.boxRaw=[p.box[0]/r[2],p.box[1]/r[1],p.box[2]/r[2],p.box[3]/r[1]]),A.push(p)}return A}var c0=V(H());var Ft=` + gaze: [gaze]\xB0`, + body: "body [score]%", + bodyPart: "[label] [score]%", + object: "[label] [score]%", + hand: "[label] [score]%", + finger: "[label]", + gesture: "[where] [who]: [what]" +}; + +// src/draw/draw.ts +var drawTime = 0; +function person(inCanvas2, result, drawOptions) { + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (let i = 0; i < result.length; i++) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels) { + const label = `person #${i}`; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.stroke(); + } + } +} +function canvas2(input, output) { + if (!input || !output) + return; + const ctx = getCanvasContext(output); + if (!ctx) + return; + ctx.drawImage(input, 0, 0); +} +async function all(inCanvas2, result, drawOptions) { + if (!(result == null ? void 0 : result.performance) || !inCanvas2) + return null; + const timeStamp = now(); + const localOptions2 = mergeDeep(options2, drawOptions); + const promise = Promise.all([ + face(inCanvas2, result.face, localOptions2), + body(inCanvas2, result.body, localOptions2), + hand(inCanvas2, result.hand, localOptions2), + object(inCanvas2, result.object, localOptions2), + gesture(inCanvas2, result.gesture, localOptions2) + ]); + drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp); + result.performance.draw = drawTime; + return promise; +} +function init2() { + options2.faceLabels = defaultLabels.face; + options2.bodyLabels = defaultLabels.body; + options2.bodyPartLabels = defaultLabels.bodyPart; + options2.handLabels = defaultLabels.hand; + options2.fingerLabels = defaultLabels.finger; + options2.objectLabels = defaultLabels.object; + options2.gestureLabels = defaultLabels.gesture; +} + +// src/body/blazepose.ts +var tf9 = __toESM(require_tfjs_esm()); + +// src/body/blazeposecoords.ts +var blazeposecoords_exports = {}; +__export(blazeposecoords_exports, { + connected: () => connected, + kpt: () => kpt +}); +var kpt = [ + "nose", + "leftEyeInside", + "leftEye", + "leftEyeOutside", + "rightEyeInside", + "rightEye", + "rightEyeOutside", + "leftEar", + "rightEar", + "leftMouth", + "rightMouth", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftPinky", + "rightPinky", + "leftIndex", + "rightIndex", + "leftThumb", + "rightThumb", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle", + "leftHeel", + "rightHeel", + "leftFoot", + "rightFoot", + "bodyCenter", + "bodyTop", + "leftPalm", + "leftHand", + "rightPalm", + "rightHand" +]; +var connected = { + shoulders: ["leftShoulder", "rightShoulder"], + hips: ["rightHip", "leftHip"], + mouth: ["leftMouth", "rightMouth"], + leftLegUpper: ["leftHip", "leftKnee"], + leftLegLower: ["leftKnee", "leftAnkle"], + leftFoot: ["leftAnkle", "leftHeel", "leftFoot"], + leftTorso: ["leftShoulder", "leftHip"], + leftArmUpper: ["leftShoulder", "leftElbow"], + leftArmLower: ["leftElbow", "leftWrist"], + leftHand: ["leftWrist", "leftPalm"], + leftHandPinky: ["leftPalm", "leftPinky"], + leftHandIndex: ["leftPalm", "leftIndex"], + leftHandThumb: ["leftPalm", "leftThumb"], + leftEyeOutline: ["leftEyeInside", "leftEyeOutside"], + rightLegUpper: ["rightHip", "rightKnee"], + rightLegLower: ["rightKnee", "rightAnkle"], + rightFoot: ["rightAnkle", "rightHeel", "rightFoot"], + rightTorso: ["rightShoulder", "rightHip"], + rightArmUpper: ["rightShoulder", "rightElbow"], + rightArmLower: ["rightElbow", "rightWrist"], + rightHand: ["rightWrist", "rightPalm"], + rightHandPinky: ["rightPalm", "rightPinky"], + rightHandIndex: ["rightPalm", "rightIndex"], + rightHandThumb: ["rightPalm", "rightThumb"], + rightEyeOutline: ["rightEyeInside", "rightEyeOutside"] +}; + +// src/body/blazeposedetector.ts +var tf8 = __toESM(require_tfjs_esm()); +var model; +var inputSize = 224; +var anchorTensor; +var numLayers = 5; +var strides = [8, 16, 32, 32, 32]; +function createAnchors() { + const anchors3 = []; + let layerId = 0; + while (layerId < numLayers) { + let anchorCount = 0; + let lastSameStrideLayer = layerId; + while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) { + anchorCount += 2; + lastSameStrideLayer++; + } + const stride = strides[layerId]; + const featureMapHeight = Math.ceil(inputSize / stride); + const featureMapWidth = Math.ceil(inputSize / stride); + for (let y = 0; y < featureMapHeight; ++y) { + for (let x = 0; x < featureMapWidth; ++x) { + for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight }); + } + } + } + layerId = lastSameStrideLayer; + } + anchorTensor = { x: tf8.tensor1d(anchors3.map((a) => a.x)), y: tf8.tensor1d(anchors3.map((a) => a.y)) }; +} +async function loadDetector(config3) { + if (env.initial) + model = null; + if (!model && config3.body["detector"] && config3.body["detector"].modelPath || "") { + model = await loadModel(config3.body["detector"].modelPath); + const inputs = (model == null ? void 0 : model["executor"]) ? Object.values(model.modelSignature["inputs"]) : void 0; + inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug && model) + log("cached model:", model["modelUrl"]); + createAnchors(); + return model; +} +var cropFactor = [5, 5]; +function decodeBoxes(boxesTensor, anchor) { + return tf8.tidy(() => { + const split6 = tf8.split(boxesTensor, 12, 1); + let xCenter = tf8.squeeze(split6[0]); + let yCenter = tf8.squeeze(split6[1]); + let width = tf8.squeeze(split6[2]); + let height = tf8.squeeze(split6[3]); + xCenter = tf8.add(tf8.div(xCenter, inputSize), anchor.x); + yCenter = tf8.add(tf8.div(yCenter, inputSize), anchor.y); + width = tf8.mul(tf8.div(width, inputSize), cropFactor[0]); + height = tf8.mul(tf8.div(height, inputSize), cropFactor[1]); + const xMin = tf8.sub(xCenter, tf8.div(width, 2)); + const yMin = tf8.sub(yCenter, tf8.div(height, 2)); + const xMax = tf8.add(xMin, width); + const yMax = tf8.add(yMin, height); + const boxes = tf8.stack([xMin, yMin, xMax, yMax], 1); + return boxes; + }); +} +async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { + var _a, _b; + const detectedBoxes = []; + const t2 = {}; + t2.boxes = decodeBoxes(boxesTensor, anchorTensor); + t2.scores = tf8.sigmoid(logitsTensor); + t2.nms = await tf8.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, 1, ((_a = config3.body["detector"]) == null ? void 0 : _a.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); + const nms = await t2.nms.data(); + const scores = await t2.scores.data(); + const boxes = await t2.boxes.array(); + for (const i of Array.from(nms)) { + const score = scores[i]; + const boxRaw = boxes[i]; + const box = [Math.round(boxRaw[0] * outputSize2[0]), Math.round(boxRaw[1] * outputSize2[1]), Math.round(boxRaw[2] * outputSize2[0]), Math.round(boxRaw[3] * outputSize2[1])]; + const detectedBox = { score, boxRaw, box }; + detectedBoxes.push(detectedBox); + } + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return detectedBoxes; +} +async function detectBoxes(input, config3, outputSize2) { + const t2 = {}; + t2.res = model == null ? void 0 : model.execute(input, ["Identity"]); + t2.logitsRaw = tf8.slice(t2.res, [0, 0, 0], [1, -1, 1]); + t2.boxesRaw = tf8.slice(t2.res, [0, 0, 1], [1, -1, -1]); + t2.logits = tf8.squeeze(t2.logitsRaw); + t2.boxes = tf8.squeeze(t2.boxesRaw); + const boxes = await decodeResults(t2.boxes, t2.logits, config3, outputSize2); + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return boxes; +} + +// src/util/box.ts +function calc(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const box = [min2[0], min2[1], max5[0] - min2[0], max5[1] - min2[1]]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function square(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const center = [(min2[0] + max5[0]) / 2, (min2[1] + max5[1]) / 2]; + const dist = Math.max(center[0] - min2[0], center[1] - min2[1], -center[0] + max5[0], -center[1] + max5[1]); + const box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function scale(box, scaleFact) { + const dist = [box[2] * scaleFact, box[3] * scaleFact]; + const newBox = [ + box[0] - (dist[0] - box[2]) / 2, + box[1] - (dist[1] - box[3]) / 2, + dist[0], + dist[1] + ]; + return newBox; +} + +// src/body/blazepose.ts +var model2; +var inputSize2 = 256; +var skipped = Number.MAX_SAFE_INTEGER; +var outputNodes = { + landmarks: ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"], + detector: [] +}; +var cache = []; +var padding = [[0, 0], [0, 0], [0, 0], [0, 0]]; +var lastTime = 0; +var sigmoid2 = (x) => 1 - 1 / (1 + Math.exp(x)); +var loadDetect = (config3) => loadDetector(config3); +async function loadPose(config3) { + if (env.initial) + model2 = null; + if (!model2) { + model2 = await loadModel(config3.body.modelPath); + const inputs = (model2 == null ? void 0 : model2["executor"]) ? Object.values(model2.modelSignature["inputs"]) : void 0; + inputSize2 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug) + log("cached model:", model2["modelUrl"]); + return model2; +} +function prepareImage(input, size2, cropBox) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + let final; + if (cropBox) { + t2.cropped = tf9.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + } + if (input.shape[1] !== input.shape[2]) { + const height = [ + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0 + ]; + const width = [ + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0 + ]; + padding = [ + [0, 0], + height, + width, + [0, 0] + ]; + t2.pad = tf9.pad(t2.cropped || input, padding); + t2.resize = tf9.image.resizeBilinear(t2.pad, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else if (input.shape[1] !== size2) { + t2.resize = tf9.image.resizeBilinear(t2.cropped || input, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else { + final = tf9.div(t2.cropped || input, constants.tf255); + } + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + return final; +} +function rescaleKeypoints(keypoints, outputSize2, cropBox) { + for (const kpt4 of keypoints) { + kpt4.position = [ + Math.trunc(kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0]), + Math.trunc(kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0]), + kpt4.position[2] + ]; + kpt4.positionRaw = [kpt4.position[0] / outputSize2[0], kpt4.position[1] / outputSize2[1], 2 * kpt4.position[2] / (outputSize2[0] + outputSize2[1])]; + } + if (cropBox) { + const width = cropBox[2] - cropBox[0]; + const height = cropBox[3] - cropBox[1]; + for (const kpt4 of keypoints) { + kpt4.positionRaw = [ + kpt4.positionRaw[0] / height + cropBox[1], + kpt4.positionRaw[1] / width + cropBox[0], + kpt4.positionRaw[2] + ]; + kpt4.position = [ + Math.trunc(kpt4.positionRaw[0] * outputSize2[0]), + Math.trunc(kpt4.positionRaw[1] * outputSize2[1]), + kpt4.positionRaw[2] + ]; + } + } + return keypoints; +} +function fixKeypoints(keypoints) { + const leftPalm = keypoints.find((k) => k.part === "leftPalm"); + const leftWrist = keypoints.find((k) => k.part === "leftWrist"); + const leftIndex = keypoints.find((k) => k.part === "leftIndex"); + leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2; + const rightPalm = keypoints.find((k) => k.part === "rightPalm"); + const rightWrist = keypoints.find((k) => k.part === "rightWrist"); + const rightIndex = keypoints.find((k) => k.part === "rightIndex"); + rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2; +} +async function detectLandmarks(input, config3, outputSize2) { + if (!(model2 == null ? void 0 : model2["executor"])) + return null; + const t2 = {}; + [t2.ld, t2.segmentation, t2.heatmap, t2.world, t2.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); + const poseScore = (await t2.poseflag.data())[0]; + const points = await t2.ld.data(); + const distances = await t2.world.data(); + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + const keypointsRelative = []; + const depth = 5; + for (let i = 0; i < points.length / depth; i++) { + const score = sigmoid2(points[depth * i + 3]); + const presence = sigmoid2(points[depth * i + 4]); + const adjScore = Math.trunc(100 * score * presence * poseScore) / 100; + const positionRaw = [points[depth * i + 0] / inputSize2, points[depth * i + 1] / inputSize2, points[depth * i + 2] + 0]; + const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]]; + const distance2 = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0]; + keypointsRelative.push({ part: kpt[i], positionRaw, position, distance: distance2, score: adjScore }); + } + if (poseScore < (config3.body.minConfidence || 0)) + return null; + fixKeypoints(keypointsRelative); + const keypoints = rescaleKeypoints(keypointsRelative, outputSize2); + const kpts = keypoints.map((k) => k.position); + const boxes = calc(kpts, [outputSize2[0], outputSize2[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations: annotations2 }; + return body4; +} +async function predict(input, config3) { + var _a, _b, _c; + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime; + const skipFrame = skipped < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && cache !== null) { + skipped++; + } else { + let boxes = []; + if ((_b = (_a = config3.body) == null ? void 0 : _a["detector"]) == null ? void 0 : _b["enabled"]) { + const preparedImage = prepareImage(input, 224); + boxes = await detectBoxes(preparedImage, config3, outputSize2); + tf9.dispose(preparedImage); + } else { + boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; + } + for (let i = 0; i < boxes.length; i++) { + const preparedBox = prepareImage(input, 256, (_c = boxes[i]) == null ? void 0 : _c.boxRaw); + cache.length = 0; + const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); + tf9.dispose(preparedBox); + if (!bodyResult) + continue; + bodyResult.id = i; + cache.push(bodyResult); + } + lastTime = now(); + skipped = 0; + } + return cache; +} + +// src/object/centernet.ts +var tf10 = __toESM(require_tfjs_esm()); + +// src/object/labels.ts +var labels2 = [ + { class: 1, label: "person" }, + { class: 2, label: "bicycle" }, + { class: 3, label: "car" }, + { class: 4, label: "motorcycle" }, + { class: 5, label: "airplane" }, + { class: 6, label: "bus" }, + { class: 7, label: "train" }, + { class: 8, label: "truck" }, + { class: 9, label: "boat" }, + { class: 10, label: "traffic light" }, + { class: 11, label: "fire hydrant" }, + { class: 12, label: "stop sign" }, + { class: 13, label: "parking meter" }, + { class: 14, label: "bench" }, + { class: 15, label: "bird" }, + { class: 16, label: "cat" }, + { class: 17, label: "dog" }, + { class: 18, label: "horse" }, + { class: 19, label: "sheep" }, + { class: 20, label: "cow" }, + { class: 21, label: "elephant" }, + { class: 22, label: "bear" }, + { class: 23, label: "zebra" }, + { class: 24, label: "giraffe" }, + { class: 25, label: "backpack" }, + { class: 26, label: "umbrella" }, + { class: 27, label: "handbag" }, + { class: 28, label: "tie" }, + { class: 29, label: "suitcase" }, + { class: 30, label: "frisbee" }, + { class: 31, label: "skis" }, + { class: 32, label: "snowboard" }, + { class: 33, label: "sports ball" }, + { class: 34, label: "kite" }, + { class: 35, label: "baseball bat" }, + { class: 36, label: "baseball glove" }, + { class: 37, label: "skateboard" }, + { class: 38, label: "surfboard" }, + { class: 39, label: "tennis racket" }, + { class: 40, label: "bottle" }, + { class: 41, label: "wine glass" }, + { class: 42, label: "cup" }, + { class: 43, label: "fork" }, + { class: 44, label: "knife" }, + { class: 45, label: "spoon" }, + { class: 46, label: "bowl" }, + { class: 47, label: "banana" }, + { class: 48, label: "apple" }, + { class: 49, label: "sandwich" }, + { class: 50, label: "orange" }, + { class: 51, label: "broccoli" }, + { class: 52, label: "carrot" }, + { class: 53, label: "hot dog" }, + { class: 54, label: "pizza" }, + { class: 55, label: "donut" }, + { class: 56, label: "cake" }, + { class: 57, label: "chair" }, + { class: 58, label: "couch" }, + { class: 59, label: "potted plant" }, + { class: 60, label: "bed" }, + { class: 61, label: "dining table" }, + { class: 62, label: "toilet" }, + { class: 63, label: "tv" }, + { class: 64, label: "laptop" }, + { class: 65, label: "mouse" }, + { class: 66, label: "remote" }, + { class: 67, label: "keyboard" }, + { class: 68, label: "cell phone" }, + { class: 69, label: "microwave" }, + { class: 70, label: "oven" }, + { class: 71, label: "toaster" }, + { class: 72, label: "sink" }, + { class: 73, label: "refrigerator" }, + { class: 74, label: "book" }, + { class: 75, label: "clock" }, + { class: 76, label: "vase" }, + { class: 77, label: "scissors" }, + { class: 78, label: "teddy bear" }, + { class: 79, label: "hair drier" }, + { class: 80, label: "toothbrush" } +]; + +// src/object/centernet.ts +var model3; +var inputSize3 = 0; +var last2 = []; +var lastTime2 = 0; +var skipped2 = Number.MAX_SAFE_INTEGER; +async function load(config3) { + if (env.initial) + model3 = null; + if (!model3) { + model3 = await loadModel(config3.object.modelPath); + const inputs = (model3 == null ? void 0 : model3["executor"]) ? Object.values(model3.modelSignature["inputs"]) : void 0; + inputSize3 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", model3["modelUrl"]); + return model3; +} +async function process3(res, outputShape, config3) { + if (!res) + return []; + const t2 = {}; + const results = []; + const detections = await res.array(); + t2.squeeze = tf10.squeeze(res); + const arr = tf10.split(t2.squeeze, 6, 1); + t2.stack = tf10.stack([arr[1], arr[0], arr[3], arr[2]], 1); + t2.boxes = tf10.squeeze(t2.stack); + t2.scores = tf10.squeeze(arr[4]); + t2.classes = tf10.squeeze(arr[5]); + tf10.dispose([res, ...arr]); + t2.nms = await tf10.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + const nms = await t2.nms.data(); + let i = 0; + for (const id of Array.from(nms)) { + const score = Math.trunc(100 * detections[0][id][4]) / 100; + const classVal = detections[0][id][5]; + if (Number.isNaN(classVal)) + continue; + const label = labels2[classVal].label; + const [x, y] = [ + detections[0][id][0] / inputSize3, + detections[0][id][1] / inputSize3 + ]; + const boxRaw = [ + x, + y, + detections[0][id][2] / inputSize3 - x, + detections[0][id][3] / inputSize3 - y + ]; + const box = [ + Math.trunc(boxRaw[0] * outputShape[0]), + Math.trunc(boxRaw[1] * outputShape[1]), + Math.trunc(boxRaw[2] * outputShape[0]), + Math.trunc(boxRaw[3] * outputShape[1]) + ]; + results.push({ id: i++, score, class: classVal, label, box, boxRaw }); + } + Object.keys(t2).forEach((tensor6) => tf10.dispose(t2[tensor6])); + return results; +} +async function predict2(input, config3) { + if (!(model3 == null ? void 0 : model3["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime2; + const skipFrame = skipped2 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last2.length > 0) { + skipped2++; + return last2; + } + skipped2 = 0; + return new Promise(async (resolve) => { + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const resize = tf10.image.resizeBilinear(input, [inputSize3, inputSize3]); + const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; + lastTime2 = now(); + tf10.dispose(resize); + const obj = await process3(objectT, outputSize2, config3); + last2 = obj; + resolve(obj); + }); +} + +// src/body/efficientpose.ts +var tf11 = __toESM(require_tfjs_esm()); + +// src/body/efficientposecoords.ts +var efficientposecoords_exports = {}; +__export(efficientposecoords_exports, { + connected: () => connected2, + kpt: () => kpt2 +}); +var kpt2 = [ + "head", + "neck", + "rightShoulder", + "rightElbow", + "rightWrist", + "chest", + "leftShoulder", + "leftElbow", + "leftWrist", + "bodyCenter", + "rightHip", + "rightKnee", + "rightAnkle", + "leftHip", + "leftKnee", + "leftAnkle" +]; +var connected2 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/body/efficientpose.ts +var model4; +var lastTime3 = 0; +var cache2 = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} }; +var skipped3 = Number.MAX_SAFE_INTEGER; +async function load2(config3) { + if (env.initial) + model4 = null; + if (!model4) + model4 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model4["modelUrl"]); + return model4; +} +async function max2d(inputs, minScore) { + const [width, height] = inputs.shape; + const reshaped = tf11.reshape(inputs, [height * width]); + const max5 = tf11.max(reshaped, 0); + const newScore = (await max5.data())[0]; + if (newScore > minScore) { + const coordinates = tf11.argMax(reshaped, 0); + const mod3 = tf11.mod(coordinates, width); + const x = (await mod3.data())[0]; + const div15 = tf11.div(coordinates, width); + const y = (await div15.data())[0]; + tf11.dispose([reshaped, max5, coordinates, mod3, div15]); + return [x, y, newScore]; + } + tf11.dispose([reshaped, max5]); + return [0, 0, newScore]; +} +async function predict3(image28, config3) { + if (!(model4 == null ? void 0 : model4["executor"]) || !(model4 == null ? void 0 : model4.inputs[0].shape)) + return []; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime3; + const skipFrame = skipped3 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && Object.keys(cache2.keypoints).length > 0) { + skipped3++; + return [cache2]; + } + skipped3 = 0; + return new Promise(async (resolve) => { + const tensor6 = tf11.tidy(() => { + var _a, _b; + const resize = tf11.image.resizeBilinear(image28, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); + const enhance2 = tf11.mul(resize, constants.tf2); + const norm = tf11.sub(enhance2, constants.tf1); + return norm; + }); + let resT; + if (config3.body.enabled) + resT = model4 == null ? void 0 : model4.execute(tensor6); + lastTime3 = now(); + tf11.dispose(tensor6); + if (resT) { + cache2.keypoints.length = 0; + const squeeze14 = tf11.squeeze(resT); + tf11.dispose(resT); + const stack5 = tf11.unstack(squeeze14, 2); + tf11.dispose(squeeze14); + for (let id = 0; id < stack5.length; id++) { + const [x2, y2, partScore] = await max2d(stack5[id], config3.body.minConfidence); + if (partScore > (config3.body.minConfidence || 0)) { + cache2.keypoints.push({ + score: Math.round(100 * partScore) / 100, + part: kpt2[id], + positionRaw: [ + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + Math.round(image28.shape[2] * x2 / model4.inputs[0].shape[2]), + Math.round(image28.shape[1] * y2 / model4.inputs[0].shape[1]) + ] + }); + } + } + stack5.forEach((s) => tf11.dispose(s)); + } + cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const x = cache2.keypoints.map((a) => a.position[0]); + const y = cache2.keypoints.map((a) => a.position[1]); + cache2.box = [ + Math.min(...x), + Math.min(...y), + Math.max(...x) - Math.min(...x), + Math.max(...y) - Math.min(...y) + ]; + const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); + const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); + cache2.boxRaw = [ + Math.min(...xRaw), + Math.min(...yRaw), + Math.max(...xRaw) - Math.min(...xRaw), + Math.max(...yRaw) - Math.min(...yRaw) + ]; + for (const [name, indexes] of Object.entries(connected2)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + cache2.annotations[name] = pt; + } + resolve([cache2]); + }); +} + +// src/face/face.ts +var tf25 = __toESM(require_tfjs_esm()); + +// src/face/facemesh.ts +var tf15 = __toESM(require_tfjs_esm()); + +// src/face/blazeface.ts +var tf13 = __toESM(require_tfjs_esm()); + +// src/face/facemeshutil.ts +var tf12 = __toESM(require_tfjs_esm()); +var getBoxSize = (box) => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])]; +var getBoxCenter = (box) => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1]; +var clampBox = (box, input) => box ? [ + Math.trunc(Math.max(0, box.startPoint[0])), + Math.trunc(Math.max(0, box.startPoint[1])), + Math.trunc(Math.min(input.shape[2] || 0, box.endPoint[0]) - Math.max(0, box.startPoint[0])), + Math.trunc(Math.min(input.shape[1] || 0, box.endPoint[1]) - Math.max(0, box.startPoint[1])) +] : [0, 0, 0, 0]; +var getRawBox = (box, input) => box ? [ + box.startPoint[0] / (input.shape[2] || 0), + box.startPoint[1] / (input.shape[1] || 0), + (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0), + (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0) +] : [0, 0, 0, 0]; +var scaleBoxCoordinates = (box, factor) => { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence }; +}; +var cutAndResize = (box, image28, cropSize) => { + const h = image28.shape[1]; + const w = image28.shape[2]; + const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; + const crop = tf12.image.cropAndResize(image28, [cutBox], [0], cropSize); + const norm = tf12.div(crop, constants.tf255); + tf12.dispose(crop); + return norm; +}; +var enlargeBox = (box, factor) => { + const center = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]], endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]], landmarks: box.landmarks, confidence: box.confidence }; +}; +var squarifyBox = (box) => { + const centers = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = Math.max(...size2) / 2; + return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)], endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)], landmarks: box.landmarks, confidence: box.confidence }; +}; +var calculateLandmarksBoundingBox = (landmarks) => { + const x = landmarks.map((d) => d[0]); + const y = landmarks.map((d) => d[1]); + return { startPoint: [Math.min(...x), Math.min(...y)], endPoint: [Math.max(...x), Math.max(...y)], landmarks }; +}; +var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; +var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); +var buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +var dot = (v1, v2) => { + let product = 0; + for (let i = 0; i < v1.length; i++) + product += v1[i] * v2[i]; + return product; +}; +var getColumnFrom2DArr = (arr, columnIndex) => { + const column = []; + for (let i = 0; i < arr.length; i++) + column.push(arr[i][columnIndex]); + return column; +}; +var multiplyTransformMatrices = (mat1, mat2) => { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) + product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col))); + } + return product; +}; +var buildRotationMatrix = (rotation, center) => { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]); + return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix); +}; +var invertTransformMatrix = (matrix) => { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)]; + return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]]; +}; +var rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])]; +function generateAnchors(inputSize10) { + const spec = inputSize10 === 192 ? { strides: [4], anchors: [1] } : { strides: [inputSize10 / 16, inputSize10 / 8], anchors: [2, 6] }; + const anchors3 = []; + for (let i = 0; i < spec.strides.length; i++) { + const stride = spec.strides[i]; + const gridRows = Math.floor((inputSize10 + stride - 1) / stride); + const gridCols = Math.floor((inputSize10 + stride - 1) / stride); + const anchorsNum = spec.anchors[i]; + for (let gridY = 0; gridY < gridRows; gridY++) { + const anchorY = stride * (gridY + 0.5); + for (let gridX = 0; gridX < gridCols; gridX++) { + const anchorX = stride * (gridX + 0.5); + for (let n = 0; n < anchorsNum; n++) + anchors3.push([anchorX, anchorY]); + } + } + } + return anchors3; +} +function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize10) { + const boxSize = getBoxSize(box); + const coordsScaled = coordsRaw.map((coord) => [ + boxSize[0] / inputSize10 * (coord[0] - inputSize10 / 2), + boxSize[1] / inputSize10 * (coord[1] - inputSize10 / 2), + coord[2] || 0 + ]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix; + const coordsRotated = largeAngle ? coordsScaled.map((coord) => [...rotatePoint(coord, coordsRotationMatrix), coord[2]]) : coordsScaled; + const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix; + const boxCenter = getBoxCenter(box); + const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + offsets[0]), + Math.trunc(coord[1] + offsets[1]), + Math.trunc(coord[2] || 0) + ]); +} +function correctFaceRotation(rotate, box, input, inputSize10) { + const symmetryLine = box.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; + let angle = 0; + let rotationMatrix = fixedRotationMatrix; + let face4; + if (rotate && env.kernels.includes("rotatewithoffset")) { + angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + if (largeAngle) { + const center = getBoxCenter(box); + const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; + const rotated = tf12.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + rotationMatrix = buildRotationMatrix(-angle, center); + face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); + tf12.dispose(rotated); + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + return [angle, rotationMatrix, face4]; +} +var findFaceCenter = (mesh) => { + const x = mesh.map((m) => m[0]); + const y = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2]; +}; +var calculateFaceBox = (mesh, previousBox) => { + const center = findFaceCenter(mesh); + const boxSize = getBoxSize(previousBox); + const calculatedBox = { + startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2], + endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] + }; + return calculatedBox; +}; + +// src/face/blazeface.ts +var keypointsCount = 6; +var faceBoxScaleFactor = 1.4; +var model5; +var anchors = null; +var inputSize4 = 0; +var inputSizeT = null; +var size = () => inputSize4; +async function load3(config3) { + var _a; + if (env.initial) + model5 = null; + if (!model5) + model5 = await loadModel((_a = config3.face.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model5["modelUrl"]); + inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; + inputSizeT = tf13.scalar(inputSize4, "int32"); + anchors = tf13.tensor2d(generateAnchors(inputSize4)); + return model5; +} +function decodeBoxes2(boxOutputs) { + if (!anchors || !inputSizeT) + return tf13.zeros([0, 0]); + const t2 = {}; + t2.boxStarts = tf13.slice(boxOutputs, [0, 1], [-1, 2]); + t2.centers = tf13.add(t2.boxStarts, anchors); + t2.boxSizes = tf13.slice(boxOutputs, [0, 3], [-1, 2]); + t2.boxSizesNormalized = tf13.div(t2.boxSizes, inputSizeT); + t2.centersNormalized = tf13.div(t2.centers, inputSizeT); + t2.halfBoxSize = tf13.div(t2.boxSizesNormalized, constants.tf2); + t2.starts = tf13.sub(t2.centersNormalized, t2.halfBoxSize); + t2.ends = tf13.add(t2.centersNormalized, t2.halfBoxSize); + t2.startNormalized = tf13.mul(t2.starts, inputSizeT); + t2.endNormalized = tf13.mul(t2.ends, inputSizeT); + const boxes = tf13.concat2d([t2.startNormalized, t2.endNormalized], 1); + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} +async function getBoxes(inputImage, config3) { + var _a, _b, _c, _d; + if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) + return []; + const t2 = {}; + t2.resized = tf13.image.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t2.div = tf13.div(t2.resized, constants.tf127); + t2.normalized = tf13.sub(t2.div, constants.tf05); + const res = model5 == null ? void 0 : model5.execute(t2.normalized); + if (Array.isArray(res) && res.length > 2) { + const sorted = res.sort((a, b) => a.size - b.size); + t2.concat384 = tf13.concat([sorted[0], sorted[2]], 2); + t2.concat512 = tf13.concat([sorted[1], sorted[3]], 2); + t2.concat = tf13.concat([t2.concat512, t2.concat384], 1); + t2.batch = tf13.squeeze(t2.concat, [0]); + } else if (Array.isArray(res)) { + t2.batch = tf13.squeeze(res[0]); + } else { + t2.batch = tf13.squeeze(res); + } + tf13.dispose(res); + t2.boxes = decodeBoxes2(t2.batch); + t2.logits = tf13.slice(t2.batch, [0, 0], [-1, 1]); + t2.sigmoid = tf13.sigmoid(t2.logits); + t2.scores = tf13.squeeze(t2.sigmoid); + t2.nms = await tf13.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c = config3.face.detector) == null ? void 0 : _c.minConfidence) || 0); + const nms = await t2.nms.array(); + const boxes = []; + const scores = await t2.scores.data(); + for (let i = 0; i < nms.length; i++) { + const confidence = scores[nms[i]]; + if (confidence > (((_d = config3.face.detector) == null ? void 0 : _d.minConfidence) || 0)) { + const b = {}; + b.bbox = tf13.slice(t2.boxes, [nms[i], 0], [1, -1]); + b.slice = tf13.slice(t2.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = tf13.squeeze(b.slice); + b.landmarks = tf13.reshape(b.squeeze, [keypointsCount, -1]); + const points = await b.bbox.data(); + const rawBox = { + startPoint: [points[0], points[1]], + endPoint: [points[2], points[3]], + landmarks: await b.landmarks.array(), + confidence + }; + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4]); + const enlargedBox = enlargeBox(scaledBox, config3.face["scale"] || faceBoxScaleFactor); + const squaredBox = squarifyBox(enlargedBox); + boxes.push(squaredBox); + Object.keys(b).forEach((tensor6) => tf13.dispose(b[tensor6])); + } + } + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} + +// src/face/iris.ts +var tf14 = __toESM(require_tfjs_esm()); +var model6; +var inputSize5 = 0; +var irisEnlarge = 2.3; +var leftOutline = meshAnnotations.leftEyeLower0; +var rightOutline = meshAnnotations.rightEyeLower0; +var eyeLandmarks = { + leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]], + rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]] +}; +var irisLandmarks = { + upperCenter: 3, + lowerCenter: 4, + index: 71, + numCoordinates: 76 +}; +async function load4(config3) { + var _a, _b; + if (env.initial) + model6 = null; + if (!model6) + model6 = await loadModel((_a = config3.face.iris) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model6["modelUrl"]); + inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; + if (inputSize5 === -1) + inputSize5 = 64; + return model6; +} +function replaceIrisCoords(rawCoords, newCoords, prefix, keys) { + for (let i = 0; i < irisIndices.length; i++) { + const { key, indices } = irisIndices[i]; + const originalIndices = meshAnnotations[`${prefix}${key}`]; + if (!keys || keys.includes(key)) { + for (let j = 0; j < indices.length; j++) { + const index2 = indices[j]; + rawCoords[originalIndices[j]] = [ + newCoords[index2][0], + newCoords[index2][1], + (newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2 + ]; + } + } + } +} +var getLeftToRightEyeDepthDifference = (rawCoords) => { + const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2]; + const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2]; + return leftEyeZ - rightEyeZ; +}; +var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); + const boxSize = getBoxSize(box); + let crop = tf14.image.cropAndResize(face4, [[ + box.startPoint[1] / meshSize, + box.startPoint[0] / meshSize, + box.endPoint[1] / meshSize, + box.endPoint[0] / meshSize + ]], [0], [inputSize5, inputSize5]); + if (flip && env.kernels.includes("flipleftright")) { + const flipped = tf14.image.flipLeftRight(crop); + tf14.dispose(crop); + crop = flipped; + } + return { box, boxSize, crop }; +}; +var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { + const eyeRawCoords = []; + for (let i = 0; i < irisLandmarks.numCoordinates; i++) { + const x = eyeData[i * 3]; + const y = eyeData[i * 3 + 1]; + const z = eyeData[i * 3 + 2]; + eyeRawCoords.push([ + (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], + y / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + z + ]); + } + return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) }; +}; +var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { + const upperCenterZ = rawCoords[meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2]; + const lowerCenterZ = rawCoords[meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2]; + const averageZ = (upperCenterZ + lowerCenterZ) / 2; + return irisCoords.map((coord, i) => { + let z = averageZ; + if (i === 2) { + z = upperCenterZ; + } else if (i === 4) { + z = lowerCenterZ; + } + return [coord[0], coord[1], z]; + }); +}; +async function augmentIris(rawCoords, face4, meshSize) { + if (!(model6 == null ? void 0 : model6["executor"])) + return rawCoords; + const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); + const combined = tf14.concat([leftEyeCrop, rightEyeCrop]); + tf14.dispose(leftEyeCrop); + tf14.dispose(rightEyeCrop); + const eyePredictions = model6.execute(combined); + tf14.dispose(combined); + const eyePredictionsData = await eyePredictions.data(); + tf14.dispose(eyePredictions); + const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); + const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); + const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); + const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false); + const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords); + if (Math.abs(leftToRightEyeDepthDifference) < 30) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", null); + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", null); + } else if (leftToRightEyeDepthDifference < 1) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", ["EyeUpper0", "EyeLower0"]); + } else { + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", ["EyeUpper0", "EyeLower0"]); + } + const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, "left"); + const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, "right"); + const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords); + return newCoords; +} + +// src/face/attention.ts +async function augment(rawCoords, results) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + const t2 = { + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + }; + for (const val of Object.values(t2)) { + if (!val) + return rawCoords; + } + const irisLDepth = LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisL.length / 2; i++) + rawCoords.push([t2.irisL[2 * i + 0], t2.irisL[2 * i + 1], irisLDepth]); + const irisRDepth = LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisR.length / 2; i++) + rawCoords.push([t2.irisR[2 * i + 0], t2.irisR[2 * i + 1], irisRDepth]); + for (let i = 0; i < t2.eyeL.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t2.eyeL[2 * i + 0], t2.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.eyeR.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t2.eyeR[2 * i + 0], t2.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.lips.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t2.lips[2 * i + 0], t2.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; + return rawCoords; +} + +// src/face/facemesh.ts +var cache3 = { + boxes: [], + skipped: Number.MAX_SAFE_INTEGER, + timestamp: 0 +}; +var model7 = null; +var inputSize6 = 0; +async function predict4(input, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + if (!(model7 == null ? void 0 : model7["executor"])) + return []; + const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - cache3.timestamp; + const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); + if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { + cache3.boxes = await getBoxes(input, config3); + cache3.timestamp = now(); + cache3.skipped = 0; + } else { + cache3.skipped++; + } + const faces = []; + const newCache = []; + let id = 0; + const size2 = inputSize6; + for (let i = 0; i < cache3.boxes.length; i++) { + const box = cache3.boxes[i]; + let angle = 0; + let rotationMatrix; + const face4 = { + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + annotations: {} + }; + [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c = config3.face.detector) == null ? void 0 : _c.rotation, box, input, ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) ? inputSize6 : size()); + if (config3.filter.equalization) { + const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; + tf15.dispose(face4.tensor); + if (equilized) + face4.tensor = equilized; + } + face4.boxScore = Math.round(100 * box.confidence) / 100; + if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } else if (!model7) { + if (config3.debug) + log("face mesh detection requested, but model is not loaded"); + } else { + if (((_f = config3.face.attention) == null ? void 0 : _f.enabled) && !env.kernels.includes("atan2")) { + config3.face.attention.enabled = false; + tf15.dispose(face4.tensor); + return faces; + } + const results = model7.execute(face4.tensor); + const confidenceT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1); + const faceConfidence = await confidenceT.data(); + face4.faceScore = Math.round(100 * faceConfidence[0]) / 100; + if (face4.faceScore < (((_g = config3.face.detector) == null ? void 0 : _g.minConfidence) || 1)) { + box.confidence = face4.faceScore; + if (config3.face.mesh.keepInvalid) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } + } else { + const meshT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1404); + const coordsReshaped = tf15.reshape(meshT, [-1, 3]); + let rawCoords = await coordsReshaped.array(); + tf15.dispose(coordsReshaped); + if ((_h = config3.face.attention) == null ? void 0 : _h.enabled) { + rawCoords = await augment(rawCoords, results); + } else if ((_i = config3.face.iris) == null ? void 0 : _i.enabled) { + rawCoords = await augmentIris(rawCoords, face4.tensor, inputSize6); + } + face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(meshAnnotations)) + face4.annotations[key] = meshAnnotations[key].map((index2) => face4.mesh[index2]); + face4.score = face4.faceScore; + const calculatedBox = { ...calculateFaceBox(face4.mesh, box), confidence: box.confidence, landmarks: box.landmarks }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + newCache.push(calculatedBox); + } + tf15.dispose(results); + } + if (face4.score > (((_j = config3.face.detector) == null ? void 0 : _j.minConfidence) || 1)) + faces.push(face4); + else + tf15.dispose(face4.tensor); + } + cache3.boxes = newCache; + return faces; +} +async function load5(config3) { + var _a, _b, _c, _d, _e, _f; + if (env.initial) + model7 = null; + if (((_a = config3.face.attention) == null ? void 0 : _a.enabled) && (model7 == null ? void 0 : model7["signature"])) { + if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) + model7 = null; + } + if (!model7) { + if ((_c = config3.face.attention) == null ? void 0 : _c.enabled) + model7 = await loadModel(config3.face.attention.modelPath); + else + model7 = await loadModel((_d = config3.face.mesh) == null ? void 0 : _d.modelPath); + } else if (config3.debug) { + log("cached model:", model7["modelUrl"]); + } + inputSize6 = model7["executor"] && ((_e = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _e[0].shape) ? (_f = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _f[0].shape[2] : 256; + return model7; +} +var triangulation = TRI468; +var uvmap = UV468; + +// src/gear/emotion.ts +var tf16 = __toESM(require_tfjs_esm()); +var annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +async function load6(config3) { + var _a; + if (env.initial) + model8 = null; + if (!model8) + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model8["modelUrl"]); + return model8; +} +async function predict5(image28, config3, idx, count2) { + var _a, _b; + if (!model8) + return []; + const skipFrame = skipped4 < (((_a = config3.face.emotion) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; + if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { + skipped4++; + return last3[idx]; + } + skipped4 = 0; + return new Promise(async (resolve) => { + var _a2; + const obj = []; + if ((_a2 = config3.face.emotion) == null ? void 0 : _a2.enabled) { + const t2 = {}; + const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + t2.channels = tf16.mul(t2.resize, constants.rgb); + t2.grayscale = tf16.sum(t2.channels, 3, true); + t2.grayscaleSub = tf16.sub(t2.grayscale, constants.tf05); + t2.grayscaleMul = tf16.mul(t2.grayscaleSub, constants.tf2); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.grayscaleMul); + lastTime4 = now(); + const data = await t2.emotion.data(); + for (let i = 0; i < data.length; i++) { + if (data[i] > (config3.face.emotion.minConfidence || 0)) + obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); + } + obj.sort((a, b) => b.score - a.score); + Object.keys(t2).forEach((tensor6) => tf16.dispose(t2[tensor6])); + } + last3[idx] = obj; + lastCount = count2; + resolve(obj); + }); +} + +// src/face/faceres.ts +var tf17 = __toESM(require_tfjs_esm()); +var model9; +var last4 = []; +var lastTime5 = 0; +var lastCount2 = 0; +var skipped5 = Number.MAX_SAFE_INTEGER; +async function load7(config3) { + var _a; + if (env.initial) + model9 = null; + if (!model9) + model9 = await loadModel((_a = config3.face.description) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model9["modelUrl"]); + return model9; +} +function enhance(input) { + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) + return tensor6; + const crop = tf17.image.resizeBilinear(tensor6, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + const norm = tf17.mul(crop, constants.tf255); + tf17.dispose(crop); + return norm; +} +async function predict6(image28, config3, idx, count2) { + var _a, _b, _c, _d; + const obj = { + age: 0, + gender: "unknown", + genderScore: 0, + descriptor: [] + }; + if (!(model9 == null ? void 0 : model9["executor"])) + return obj; + const skipFrame = skipped5 < (((_a = config3.face.description) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; + if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c.age) > 0 && ((_d = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped5++; + return last4[idx]; + } + skipped5 = 0; + return new Promise(async (resolve) => { + var _a2; + if ((_a2 = config3.face.description) == null ? void 0 : _a2.enabled) { + const enhanced = enhance(image28); + const resT = model9 == null ? void 0 : model9.execute(enhanced); + lastTime5 = now(); + tf17.dispose(enhanced); + const genderT = resT.find((t2) => t2.shape[1] === 1); + const gender2 = await genderT.data(); + const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; + if (confidence > (config3.face.description.minConfidence || 0)) { + obj.gender = gender2[0] <= 0.5 ? "female" : "male"; + obj.genderScore = Math.min(0.99, confidence); + } + const argmax = tf17.argMax(resT.find((t2) => t2.shape[1] === 100), 1); + const ageIdx = (await argmax.data())[0]; + tf17.dispose(argmax); + const ageT = resT.find((t2) => t2.shape[1] === 100); + const all2 = await ageT.data(); + obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; + if (Number.isNaN(gender2[0]) || Number.isNaN(all2[0])) + log("faceres error:", { model: model9, result: resT }); + const desc = resT.find((t2) => t2.shape[1] === 1024); + const descriptor = desc ? await desc.data() : []; + obj.descriptor = Array.from(descriptor); + resT.forEach((t2) => tf17.dispose(t2)); + } + last4[idx] = obj; + lastCount2 = count2; + resolve(obj); + }); +} + +// src/face/mask.ts +var expandFact = 0.1; +var alpha = 0.5; +function insidePoly(x, y, polygon) { + let inside = false; + let j = polygon.length - 1; + for (let i = 0; i < polygon.length; j = i++) { + if (polygon[i].y > y !== polygon[j].y > y && x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + inside = !inside; + } + return inside; +} +async function mask(face4) { + if (!face4.tensor) + return face4.tensor; + if (!face4.mesh || face4.mesh.length < 100) + return face4.tensor; + const width = face4.tensor.shape[2] || 0; + const height = face4.tensor.shape[1] || 0; + const buffer = await face4.tensor.buffer(); + let silhouette = []; + for (const pt of meshAnnotations.silhouette) + silhouette.push({ x: (face4.mesh[pt][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt][1] - face4.box[1]) / face4.box[3] }); + if (expandFact && expandFact > 0) + silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const inside = insidePoly(x / width, y / width, silhouette); + if (!inside) { + buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0); + buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1); + buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2); + } + } + } + const output = buffer.toTensor(); + return output; +} + +// src/face/antispoof.ts +var tf18 = __toESM(require_tfjs_esm()); +var model10; +var cached = []; +var skipped6 = Number.MAX_SAFE_INTEGER; +var lastCount3 = 0; +var lastTime6 = 0; +async function load8(config3) { + var _a; + if (env.initial) + model10 = null; + if (!model10) + model10 = await loadModel((_a = config3.face.antispoof) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model10["modelUrl"]); + return model10; +} +async function predict7(image28, config3, idx, count2) { + var _a, _b; + if (!(model10 == null ? void 0 : model10["executor"])) + return 0; + const skipTime = (((_a = config3.face.antispoof) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6; + const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { + skipped6++; + return cached[idx]; + } + skipped6 = 0; + return new Promise(async (resolve) => { + const resize = tf18.image.resizeBilinear(image28, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const res = model10 == null ? void 0 : model10.execute(resize); + const num = (await res.data())[0]; + cached[idx] = Math.round(100 * num) / 100; + lastCount3 = count2; + lastTime6 = now(); + tf18.dispose([resize, res]); + resolve(cached[idx]); + }); +} + +// src/face/liveness.ts +var tf19 = __toESM(require_tfjs_esm()); +var model11; +var cached2 = []; +var skipped7 = Number.MAX_SAFE_INTEGER; +var lastCount4 = 0; +var lastTime7 = 0; +async function load9(config3) { + var _a; + if (env.initial) + model11 = null; + if (!model11) + model11 = await loadModel((_a = config3.face.liveness) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model11["modelUrl"]); + return model11; +} +async function predict8(image28, config3, idx, count2) { + var _a, _b; + if (!(model11 == null ? void 0 : model11["executor"])) + return 0; + const skipTime = (((_a = config3.face.liveness) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime7; + const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { + skipped7++; + return cached2[idx]; + } + skipped7 = 0; + return new Promise(async (resolve) => { + const resize = tf19.image.resizeBilinear(image28, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const res = model11 == null ? void 0 : model11.execute(resize); + const num = (await res.data())[0]; + cached2[idx] = Math.round(100 * num) / 100; + lastCount4 = count2; + lastTime7 = now(); + tf19.dispose([resize, res]); + resolve(cached2[idx]); + }); +} + +// src/gear/gear.ts +var tf20 = __toESM(require_tfjs_esm()); +var model12; +var last5 = []; +var raceNames = ["white", "black", "asian", "indian", "other"]; +var ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65]; +var lastCount5 = 0; +var lastTime8 = 0; +var skipped8 = Number.MAX_SAFE_INTEGER; +async function load10(config3) { + var _a; + if (env.initial) + model12 = null; + if (!model12) + model12 = await loadModel((_a = config3.face.gear) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model12["modelUrl"]); + return model12; +} +async function predict9(image28, config3, idx, count2) { + var _a, _b; + if (!model12) + return { age: 0, gender: "unknown", genderScore: 0, race: [] }; + const skipFrame = skipped8 < (((_a = config3.face.gear) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; + if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { + skipped8++; + return last5[idx]; + } + skipped8 = 0; + return new Promise(async (resolve) => { + var _a2, _b2; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) + return; + const t2 = {}; + const box = [[0, 0.1, 0.9, 0.9]]; + t2.resize = tf20.image.cropAndResize(image28, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; + if ((_a2 = config3.face.gear) == null ? void 0 : _a2.enabled) + [t2.age, t2.gender, t2.race] = model12.execute(t2.resize, ["age_output", "gender_output", "race_output"]); + const gender2 = await t2.gender.data(); + obj.gender = gender2[0] > gender2[1] ? "male" : "female"; + obj.genderScore = Math.round(100 * (gender2[0] > gender2[1] ? gender2[0] : gender2[1])) / 100; + const race = await t2.race.data(); + for (let i = 0; i < race.length; i++) { + if (race[i] > (((_b2 = config3.face.gear) == null ? void 0 : _b2.minConfidence) || 0.2)) + obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); + } + obj.race.sort((a, b) => b.score - a.score); + const ageDistribution = Array.from(await t2.age.data()); + const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]); + let age2 = ageSorted[0][0]; + for (let i = 1; i < ageSorted.length; i++) + age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); + obj.age = Math.round(10 * age2) / 10; + Object.keys(t2).forEach((tensor6) => tf20.dispose(t2[tensor6])); + last5[idx] = obj; + lastCount5 = count2; + lastTime8 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-age.ts +var tf21 = __toESM(require_tfjs_esm()); +var model13; +var last6 = []; +var lastCount6 = 0; +var lastTime9 = 0; +var skipped9 = Number.MAX_SAFE_INTEGER; +async function load11(config3) { + if (env.initial) + model13 = null; + if (!model13) + model13 = await loadModel(config3.face["ssrnet"].modelPathAge); + else if (config3.debug) + log("cached model:", model13["modelUrl"]); + return model13; +} +async function predict10(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model13) + return { age: 0 }; + const skipFrame = skipped9 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; + if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c = last6[idx]) == null ? void 0 : _c.age) && ((_d = last6[idx]) == null ? void 0 : _d.age) > 0) { + skipped9++; + return last6[idx]; + } + skipped9 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) + return; + const t2 = {}; + t2.resize = tf21.image.resizeBilinear(image28, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t2.enhance = tf21.mul(t2.resize, constants.tf255); + const obj = { age: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.age = model13.execute(t2.enhance); + if (t2.age) { + const data = await t2.age.data(); + obj.age = Math.trunc(10 * data[0]) / 10; + } + Object.keys(t2).forEach((tensor6) => tf21.dispose(t2[tensor6])); + last6[idx] = obj; + lastCount6 = count2; + lastTime9 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-gender.ts +var tf22 = __toESM(require_tfjs_esm()); +var model14; +var last7 = []; +var lastCount7 = 0; +var lastTime10 = 0; +var skipped10 = Number.MAX_SAFE_INTEGER; +var rgb = [0.2989, 0.587, 0.114]; +async function load12(config3) { + var _a; + if (env.initial) + model14 = null; + if (!model14) + model14 = await loadModel((_a = config3.face["ssrnet"]) == null ? void 0 : _a.modelPathGender); + else if (config3.debug) + log("cached model:", model14["modelUrl"]); + return model14; +} +async function predict11(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model14) + return { gender: "unknown", genderScore: 0 }; + const skipFrame = skipped10 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; + if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c = last7[idx]) == null ? void 0 : _c.gender) && ((_d = last7[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped10++; + return last7[idx]; + } + skipped10 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) + return; + const t2 = {}; + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t2.enhance = tf22.tidy(() => { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb[0]); + const greenNorm = tf22.mul(green, rgb[1]); + const blueNorm = tf22.mul(blue, rgb[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + const normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.gender = model14.execute(t2.enhance); + const data = await t2.gender.data(); + obj.gender = data[0] > data[1] ? "female" : "male"; + obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; + Object.keys(t2).forEach((tensor6) => tf22.dispose(t2[tensor6])); + last7[idx] = obj; + lastCount7 = count2; + lastTime10 = now(); + resolve(obj); + }); +} + +// src/face/mobilefacenet.ts +var tf23 = __toESM(require_tfjs_esm()); +var model15; +var last8 = []; +var lastCount8 = 0; +var lastTime11 = 0; +var skipped11 = Number.MAX_SAFE_INTEGER; +async function load13(config3) { + var _a; + if (env.initial) + model15 = null; + if (!model15) + model15 = await loadModel((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model15["modelUrl"]); + return model15; +} +async function predict12(input, config3, idx, count2) { + var _a, _b; + if (!(model15 == null ? void 0 : model15["executor"])) + return []; + const skipFrame = skipped11 < (((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; + if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { + skipped11++; + return last8[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf23.image.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t2.data = model15.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf23.dispose(t2[tensor6])); + } + last8[idx] = data; + lastCount8 = count2; + lastTime11 = now(); + resolve(data); + }); +} + +// src/face/insightface.ts +var tf24 = __toESM(require_tfjs_esm()); +var model16; +var last9 = []; +var lastCount9 = 0; +var lastTime12 = 0; +var skipped12 = Number.MAX_SAFE_INTEGER; +async function load14(config3) { + if (env.initial) + model16 = null; + if (!model16) + model16 = await loadModel(config3.face["insightface"].modelPath); + else if (config3.debug) + log("cached model:", model16["modelUrl"]); + return model16; +} +async function predict13(input, config3, idx, count2) { + var _a, _b; + if (!(model16 == null ? void 0 : model16["executor"])) + return []; + const skipFrame = skipped12 < (((_a = config3.face["insightface"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; + if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { + skipped12++; + return last9[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf24.image.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t2.data = model16.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf24.dispose(t2[tensor6])); + } + last9[idx] = data; + lastCount9 = count2; + lastTime12 = now(); + resolve(data); + }); +} + +// src/face/angles.ts +var calculateGaze = (face4) => { + const radians = (pt1, pt2) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); + if (!face4.annotations.rightEyeIris || !face4.annotations.leftEyeIris) + return { bearing: 0, strength: 0 }; + const offsetIris = [0, -0.1]; + const eyeRatio = 1; + const left = (face4.mesh[33][2] || 0) > (face4.mesh[263][2] || 0); + const irisCenter = left ? face4.mesh[473] : face4.mesh[468]; + const eyeCenter = left ? [(face4.mesh[133][0] + face4.mesh[33][0]) / 2, (face4.mesh[133][1] + face4.mesh[33][1]) / 2] : [(face4.mesh[263][0] + face4.mesh[362][0]) / 2, (face4.mesh[263][1] + face4.mesh[362][1]) / 2]; + const eyeSize = left ? [face4.mesh[133][0] - face4.mesh[33][0], face4.mesh[23][1] - face4.mesh[27][1]] : [face4.mesh[263][0] - face4.mesh[362][0], face4.mesh[253][1] - face4.mesh[257][1]]; + const eyeDiff = [ + (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0], + eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1] + ]; + let strength = Math.sqrt(eyeDiff[0] * eyeDiff[0] + eyeDiff[1] * eyeDiff[1]); + strength = Math.min(strength, face4.boxRaw[2] / 2, face4.boxRaw[3] / 2); + const bearing = (radians([0, 0], eyeDiff) + Math.PI / 2) % Math.PI; + return { bearing, strength }; +}; +var calculateFaceAngle = (face4, imageSize) => { + const normalize2 = (v) => { + const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + v[0] /= length; + v[1] /= length; + v[2] /= length; + return v; + }; + const subVectors = (a, b) => { + const x = a[0] - b[0]; + const y = a[1] - b[1]; + const z = a[2] - b[2]; + return [x, y, z]; + }; + const crossVectors = (a, b) => { + const x = a[1] * b[2] - a[2] * b[1]; + const y = a[2] * b[0] - a[0] * b[2]; + const z = a[0] * b[1] - a[1] * b[0]; + return [x, y, z]; + }; + const rotationMatrixToEulerAngle = (r) => { + const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; + let thetaX; + let thetaY; + let thetaZ; + if (r10 < 1) { + if (r10 > -1) { + thetaZ = Math.asin(r10); + thetaY = Math.atan2(-r20, r00); + thetaX = Math.atan2(-r12, r11); + } else { + thetaZ = -Math.PI / 2; + thetaY = -Math.atan2(r21, r22); + thetaX = 0; + } + } else { + thetaZ = Math.PI / 2; + thetaY = Math.atan2(r21, r22); + thetaX = 0; + } + if (Number.isNaN(thetaX)) + thetaX = 0; + if (Number.isNaN(thetaY)) + thetaY = 0; + if (Number.isNaN(thetaZ)) + thetaZ = 0; + return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ }; + }; + const mesh = face4.meshRaw; + if (!mesh || mesh.length < 300) + return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } }; + const size2 = Math.max(face4.boxRaw[2] * imageSize[0], face4.boxRaw[3] * imageSize[1]) / 1.5; + const pts = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size2, pt[1] * imageSize[1] / size2, pt[2]]); + const yAxis = normalize2(subVectors(pts[1], pts[0])); + let xAxis = normalize2(subVectors(pts[3], pts[2])); + const zAxis = normalize2(crossVectors(xAxis, yAxis)); + xAxis = crossVectors(yAxis, zAxis); + const matrix = [ + xAxis[0], + xAxis[1], + xAxis[2], + yAxis[0], + yAxis[1], + yAxis[2], + zAxis[0], + zAxis[1], + zAxis[2] + ]; + const angle = rotationMatrixToEulerAngle(matrix); + const gaze = mesh.length === 478 ? calculateGaze(face4) : { bearing: 0, strength: 0 }; + return { angle, matrix, gaze }; +}; + +// src/face/anthropometry.ts +function calculateCameraDistance(face4, width) { + const f = face4 == null ? void 0 : face4.annotations; + if (!f) + return 0; + const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width; + const cameraDistance = Math.round(1.17 / irisSize) / 100; + return cameraDistance; +} + +// src/face/face.ts +var detectFace = async (instance, input) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + let timeStamp = now(); + let ageRes; + let gearRes; + let genderRes; + let emotionRes; + let mobilefacenetRes; + let insightfaceRes; + let antispoofRes; + let livenessRes; + let descRes; + const faceRes = []; + instance.state = "run:face"; + const faces = await predict4(input, instance.config); + instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + if (!input.shape || input.shape.length !== 4) + return []; + if (!faces) + return []; + for (let i = 0; i < faces.length; i++) { + instance.analyze("Get Face"); + if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) { + log("Face object is disposed:", faces[i].tensor); + continue; + } + if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { + const masked = await mask(faces[i]); + tf25.dispose(faces[i].tensor); + if (masked) + faces[i].tensor = masked; + } + const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; + instance.analyze("Start Emotion:"); + if (instance.config.async) { + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + } else { + instance.state = "run:emotion"; + timeStamp = now(); + emotionRes = ((_c = instance.config.face.emotion) == null ? void 0 : _c.enabled) ? await predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Emotion:"); + instance.analyze("Start AntiSpoof:"); + if (instance.config.async) { + antispoofRes = ((_d = instance.config.face.antispoof) == null ? void 0 : _d.enabled) ? predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:antispoof"; + timeStamp = now(); + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End AntiSpoof:"); + instance.analyze("Start Liveness:"); + if (instance.config.async) { + livenessRes = ((_f = instance.config.face.liveness) == null ? void 0 : _f.enabled) ? predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:liveness"; + timeStamp = now(); + livenessRes = ((_g = instance.config.face.liveness) == null ? void 0 : _g.enabled) ? await predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Liveness:"); + instance.analyze("Start GEAR:"); + if (instance.config.async) { + gearRes = ((_h = instance.config.face.gear) == null ? void 0 : _h.enabled) ? predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:gear"; + timeStamp = now(); + gearRes = ((_i = instance.config.face.gear) == null ? void 0 : _i.enabled) ? await predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.gear = Math.trunc(now() - timeStamp); + } + instance.analyze("End GEAR:"); + instance.analyze("Start SSRNet:"); + if (instance.config.async) { + ageRes = ((_j = instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) ? predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_k = instance.config.face["ssrnet"]) == null ? void 0 : _k.enabled) ? predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:ssrnet"; + timeStamp = now(); + ageRes = ((_l = instance.config.face["ssrnet"]) == null ? void 0 : _l.enabled) ? await predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.ssrnet = Math.trunc(now() - timeStamp); + } + instance.analyze("End SSRNet:"); + instance.analyze("Start MobileFaceNet:"); + if (instance.config.async) { + mobilefacenetRes = ((_n = instance.config.face["mobilefacenet"]) == null ? void 0 : _n.enabled) ? predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + mobilefacenetRes = ((_o = instance.config.face["mobilefacenet"]) == null ? void 0 : _o.enabled) ? await predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End MobileFaceNet:"); + instance.analyze("Start InsightFace:"); + if (instance.config.async) { + insightfaceRes = ((_p = instance.config.face["insightface"]) == null ? void 0 : _p.enabled) ? predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + insightfaceRes = ((_q = instance.config.face["insightface"]) == null ? void 0 : _q.enabled) ? await predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End InsightFace:"); + instance.analyze("Start Description:"); + if (instance.config.async) { + descRes = predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + } else { + instance.state = "run:description"; + timeStamp = now(); + descRes = await predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Description:"); + if (instance.config.async) { + [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]); + } + instance.analyze("Finish Face:"); + if (((_r = instance.config.face["ssrnet"]) == null ? void 0 : _r.enabled) && ageRes && genderRes) { + descRes = { + ...descRes, + age: ageRes.age, + gender: genderRes.gender, + genderScore: genderRes.genderScore + }; + } + if (((_s = instance.config.face.gear) == null ? void 0 : _s.enabled) && gearRes) { + descRes = { + ...descRes, + age: gearRes.age, + gender: gearRes.gender, + genderScore: gearRes.genderScore, + race: gearRes.race + }; + } + if (((_t = instance.config.face["mobilefacenet"]) == null ? void 0 : _t.enabled) && mobilefacenetRes) { + descRes.descriptor = mobilefacenetRes; + } + if (((_u = instance.config.face["insightface"]) == null ? void 0 : _u.enabled) && insightfaceRes) { + descRes.descriptor = insightfaceRes; + } + const irisSize = ((_v = instance.config.face.iris) == null ? void 0 : _v.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; + const tensor6 = ((_w = instance.config.face.detector) == null ? void 0 : _w.return) ? tf25.squeeze(faces[i].tensor) : null; + tf25.dispose(faces[i].tensor); + if (faces[i].tensor) + delete faces[i].tensor; + const res = { + ...faces[i], + id: i + }; + if (descRes.age) + res.age = descRes.age; + if (descRes.gender) + res.gender = descRes.gender; + if (descRes.genderScore) + res.genderScore = descRes.genderScore; + if (descRes.descriptor) + res.embedding = descRes.descriptor; + if (descRes.race) + res.race = descRes.race; + if (emotionRes) + res.emotion = emotionRes; + if (antispoofRes) + res.real = antispoofRes; + if (livenessRes) + res.live = livenessRes; + if (irisSize > 0) + res.distance = irisSize; + if (rotation) + res.rotation = rotation; + if (tensor6) + res.tensor = tensor6; + faceRes.push(res); + instance.analyze("End Face"); + } + instance.analyze("End FaceMesh:"); + if (instance.config.async) { + if (instance.performance.face) + delete instance.performance.face; + if (instance.performance.age) + delete instance.performance.age; + if (instance.performance.gender) + delete instance.performance.gender; + if (instance.performance.emotion) + delete instance.performance.emotion; + } + return faceRes; +}; + +// src/hand/fingerdef.ts +var Finger = { + thumb: 0, + index: 1, + middle: 2, + ring: 3, + pinky: 4, + all: [0, 1, 2, 3, 4], + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + pointsMapping: { + 0: [[0, 1], [1, 2], [2, 3], [3, 4]], + 1: [[0, 5], [5, 6], [6, 7], [7, 8]], + 2: [[0, 9], [9, 10], [10, 11], [11, 12]], + 3: [[0, 13], [13, 14], [14, 15], [15, 16]], + 4: [[0, 17], [17, 18], [18, 19], [19, 20]] + }, + getName: (value) => Finger.nameMapping[value], + getPoints: (value) => Finger.pointsMapping[value] +}; +var FingerCurl = { + none: 0, + half: 1, + full: 2, + nameMapping: { 0: "none", 1: "half", 2: "full" }, + getName: (value) => FingerCurl.nameMapping[value] +}; +var FingerDirection = { + verticalUp: 0, + verticalDown: 1, + horizontalLeft: 2, + horizontalRight: 3, + diagonalUpRight: 4, + diagonalUpLeft: 5, + diagonalDownRight: 6, + diagonalDownLeft: 7, + nameMapping: { 0: "verticalUp", 1: "verticalDown", 2: "horizontalLeft", 3: "horizontalRight", 4: "diagonalUpRight", 5: "diagonalUpLeft", 6: "diagonalDownRight", 7: "diagonalDownLeft" }, + getName: (value) => FingerDirection.nameMapping[value] +}; +var FingerGesture = class { + constructor(name) { + __publicField(this, "name"); + __publicField(this, "curls"); + __publicField(this, "directions"); + __publicField(this, "weights"); + __publicField(this, "weightsRelative"); + this.name = name; + this.curls = {}; + this.directions = {}; + this.weights = [1, 1, 1, 1, 1]; + this.weightsRelative = [1, 1, 1, 1, 1]; + } + curl(finger, curl, confidence) { + if (typeof this.curls[finger] === "undefined") + this.curls[finger] = []; + this.curls[finger].push([curl, confidence]); + } + direction(finger, position, confidence) { + if (!this.directions[finger]) + this.directions[finger] = []; + this.directions[finger].push([position, confidence]); + } + weight(finger, weight) { + this.weights[finger] = weight; + const total = this.weights.reduce((a, b) => a + b, 0); + this.weightsRelative = this.weights.map((el) => el * 5 / total); + } + matchAgainst(detectedCurls, detectedDirections) { + let confidence = 0; + for (const fingerIdx in detectedCurls) { + const detectedCurl = detectedCurls[fingerIdx]; + const expectedCurls = this.curls[fingerIdx]; + if (typeof expectedCurls === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedCurl, score] of expectedCurls) { + if (detectedCurl === expectedCurl) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + for (const fingerIdx in detectedDirections) { + const detectedDirection = detectedDirections[fingerIdx]; + const expectedDirections = this.directions[fingerIdx]; + if (typeof expectedDirections === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedDirection, score] of expectedDirections) { + if (detectedDirection === expectedDirection) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + return confidence / 10; + } +}; + +// src/hand/fingergesture.ts +var { thumb, index, middle, ring, pinky } = Finger; +var { none, half, full } = FingerCurl; +var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection; +var ThumbsUp = new FingerGesture("thumbs up"); +ThumbsUp.curl(thumb, none, 1); +ThumbsUp.direction(thumb, verticalUp, 1); +ThumbsUp.direction(thumb, diagonalUpLeft, 0.25); +ThumbsUp.direction(thumb, diagonalUpRight, 0.25); +for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) { + ThumbsUp.curl(finger, full, 1); + ThumbsUp.direction(finger, horizontalLeft, 1); + ThumbsUp.direction(finger, horizontalRight, 1); +} +var Victory = new FingerGesture("victory"); +Victory.curl(thumb, half, 0.5); +Victory.curl(thumb, none, 0.5); +Victory.direction(thumb, verticalUp, 1); +Victory.direction(thumb, diagonalUpLeft, 1); +Victory.curl(index, none, 1); +Victory.direction(index, verticalUp, 0.75); +Victory.direction(index, diagonalUpLeft, 1); +Victory.curl(middle, none, 1); +Victory.direction(middle, verticalUp, 1); +Victory.direction(middle, diagonalUpLeft, 0.75); +Victory.curl(ring, full, 1); +Victory.direction(ring, verticalUp, 0.2); +Victory.direction(ring, diagonalUpLeft, 1); +Victory.direction(ring, horizontalLeft, 0.2); +Victory.curl(pinky, full, 1); +Victory.direction(pinky, verticalUp, 0.2); +Victory.direction(pinky, diagonalUpLeft, 1); +Victory.direction(pinky, horizontalLeft, 0.2); +Victory.weight(index, 2); +Victory.weight(middle, 2); +var Point = new FingerGesture("point"); +Point.curl(thumb, full, 1); +Point.curl(index, none, 0.5); +Point.curl(middle, full, 0.5); +Point.curl(ring, full, 0.5); +Point.curl(pinky, full, 0.5); +Point.weight(index, 2); +Point.weight(middle, 2); +var MiddleFinger = new FingerGesture("middle finger"); +MiddleFinger.curl(thumb, none, 1); +MiddleFinger.curl(index, full, 0.5); +MiddleFinger.curl(middle, full, 0.5); +MiddleFinger.curl(ring, full, 0.5); +MiddleFinger.curl(pinky, full, 0.5); +MiddleFinger.weight(index, 2); +MiddleFinger.weight(middle, 2); +var OpenPalm = new FingerGesture("open palm"); +OpenPalm.curl(thumb, none, 0.75); +OpenPalm.curl(index, none, 0.75); +OpenPalm.curl(middle, none, 0.75); +OpenPalm.curl(ring, none, 0.75); +OpenPalm.curl(pinky, none, 0.75); +var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm]; + +// src/hand/fingerpose.ts +var minConfidence = 0.7; +var options3 = { + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + DISTANCE_VOTE_POWER: 1.1, + SINGLE_ANGLE_VOTE_POWER: 0.9, + TOTAL_ANGLE_VOTE_POWER: 1.6 +}; +function calculateSlope(point1x, point1y, point2x, point2y) { + const value = (point1y - point2y) / (point1x - point2x); + let slope = Math.atan(value) * 180 / Math.PI; + if (slope <= 0) + slope = -slope; + else if (slope > 0) + slope = 180 - slope; + return slope; +} +function getSlopes(point1, point2) { + if (!point1 || !point2) + return [0, 0]; + const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]); + if (point1.length === 2) + return slopeXY; + const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]); + return [slopeXY, slopeYZ]; +} +function angleOrientationAt(angle, weightageAt = 1) { + let isVertical = 0; + let isDiagonal = 0; + let isHorizontal = 0; + if (angle >= 75 && angle <= 105) + isVertical = 1 * weightageAt; + else if (angle >= 25 && angle <= 155) + isDiagonal = 1 * weightageAt; + else + isHorizontal = 1 * weightageAt; + return [isVertical, isDiagonal, isHorizontal]; +} +function estimateFingerCurl(startPoint, midPoint, endPoint) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const start_mid_z_dist = startPoint[2] - midPoint[2]; + const start_end_z_dist = startPoint[2] - endPoint[2]; + const mid_end_z_dist = midPoint[2] - endPoint[2]; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist); + let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist); + if (cos_in > 1) + cos_in = 1; + else if (cos_in < -1) + cos_in = -1; + let angleOfCurve = Math.acos(cos_in); + angleOfCurve = 57.2958 * angleOfCurve % 180; + let fingerCurl; + if (angleOfCurve > options3.NO_CURL_START_LIMIT) + fingerCurl = FingerCurl.none; + else if (angleOfCurve > options3.HALF_CURL_START_LIMIT) + fingerCurl = FingerCurl.half; + else + fingerCurl = FingerCurl.full; + return fingerCurl; +} +function estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + if (max_dist_x === Math.abs(start_end_x_dist)) { + if (start_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else if (max_dist_x === Math.abs(start_mid_x_dist)) { + if (start_mid_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else { + if (mid_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } + return estimatedDirection; +} +function estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) { + let estimatedDirection; + if (max_dist_y === Math.abs(start_end_y_dist)) { + if (start_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else if (max_dist_y === Math.abs(start_mid_y_dist)) { + if (start_mid_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else { + if (mid_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } + return estimatedDirection; +} +function estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + if (reqd_vertical_direction === FingerDirection.verticalUp) { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalUpLeft; + else + estimatedDirection = FingerDirection.diagonalUpRight; + } else { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalDownLeft; + else + estimatedDirection = FingerDirection.diagonalDownRight; + } + return estimatedDirection; +} +function calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist)); + const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist)); + let voteVertical = 0; + let voteDiagonal = 0; + let voteHorizontal = 0; + const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 1e-5); + if (start_end_x_y_dist_ratio > 1.5) + voteVertical += options3.DISTANCE_VOTE_POWER; + else if (start_end_x_y_dist_ratio > 0.66) + voteDiagonal += options3.DISTANCE_VOTE_POWER; + else + voteHorizontal += options3.DISTANCE_VOTE_POWER; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist); + const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist); + let calc_start_point_x = startPoint[0]; + let calc_start_point_y = startPoint[1]; + let calc_end_point_x = endPoint[0]; + let calc_end_point_y = endPoint[1]; + if (max_dist === start_mid_dist) { + calc_end_point_x = endPoint[0]; + calc_end_point_y = endPoint[1]; + } else if (max_dist === mid_end_dist) { + calc_start_point_x = midPoint[0]; + calc_start_point_y = midPoint[1]; + } + const calcStartPoint = [calc_start_point_x, calc_start_point_y]; + const calcEndPoint = [calc_end_point_x, calc_end_point_y]; + const totalAngle = getSlopes(calcStartPoint, calcEndPoint); + const votes = angleOrientationAt(totalAngle, options3.TOTAL_ANGLE_VOTE_POWER); + voteVertical += votes[0]; + voteDiagonal += votes[1]; + voteHorizontal += votes[2]; + for (const fingerSlope of fingerSlopes) { + const fingerVotes = angleOrientationAt(fingerSlope, options3.SINGLE_ANGLE_VOTE_POWER); + voteVertical += fingerVotes[0]; + voteDiagonal += fingerVotes[1]; + voteHorizontal += fingerVotes[2]; + } + let estimatedDirection; + if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } else { + estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } + return estimatedDirection; +} +function estimate(landmarks) { + const slopesXY = []; + const slopesYZ = []; + const fingerCurls = []; + const fingerDirections = []; + if (!landmarks) + return { curls: fingerCurls, directions: fingerDirections }; + for (const finger of Finger.all) { + const points = Finger.getPoints(finger); + const slopeAtXY = []; + const slopeAtYZ = []; + for (const point2 of points) { + const point1 = landmarks[point2[0]]; + const point22 = landmarks[point2[1]]; + const slopes = getSlopes(point1, point22); + const slopeXY = slopes[0]; + const slopeYZ = slopes[1]; + slopeAtXY.push(slopeXY); + slopeAtYZ.push(slopeYZ); + } + slopesXY.push(slopeAtXY); + slopesYZ.push(slopeAtYZ); + } + for (const finger of Finger.all) { + const pointIndexAt = finger === Finger.thumb ? 1 : 0; + const fingerPointsAt = Finger.getPoints(finger); + const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]]; + const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]]; + const endPoint = landmarks[fingerPointsAt[3][1]]; + const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint); + const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt)); + fingerCurls[finger] = fingerCurled; + fingerDirections[finger] = fingerPosition; + } + return { curls: fingerCurls, directions: fingerDirections }; +} +function analyze(keypoints) { + if (!keypoints || keypoints.length === 0) + return null; + const estimatorRes = estimate(keypoints); + const landmarks = {}; + for (const fingerIdx of Finger.all) { + landmarks[Finger.getName(fingerIdx)] = { + curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]), + direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]) + }; + } + return landmarks; +} +function match(keypoints) { + const poses = []; + if (!keypoints || keypoints.length === 0) + return poses; + const estimatorRes = estimate(keypoints); + for (const gesture2 of fingergesture_default) { + const confidence = gesture2.matchAgainst(estimatorRes.curls, estimatorRes.directions); + if (confidence >= minConfidence) + poses.push({ name: gesture2.name, confidence }); + } + return poses; +} + +// src/gesture/gesture.ts +var body2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const leftWrist = res[i].keypoints.find((a) => a.part === "leftWrist"); + const rightWrist = res[i].keypoints.find((a) => a.part === "rightWrist"); + const nose = res[i].keypoints.find((a) => a.part === "nose"); + if (nose && leftWrist && rightWrist && leftWrist.position[1] < nose.position[1] && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "i give up" }); + else if (nose && leftWrist && leftWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise left hand" }); + else if (nose && rightWrist && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise right hand" }); + const leftShoulder = res[i].keypoints.find((a) => a.part === "leftShoulder"); + const rightShoulder = res[i].keypoints.find((a) => a.part === "rightShoulder"); + if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) { + gestures.push({ body: i, gesture: `leaning ${leftShoulder.position[1] > rightShoulder.position[1] ? "left" : "right"}` }); + } + } + return gestures; +}; +var face2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (res[i].mesh && res[i].mesh.length > 450) { + const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0); + const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0]; + if (Math.abs(zDiff / xDiff) <= 0.15) + gestures.push({ face: i, gesture: "facing center" }); + else + gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? "left" : "right"}` }); + const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); + if (openLeft < 0.2) + gestures.push({ face: i, gesture: "blink left eye" }); + const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); + if (openRight < 0.2) + gestures.push({ face: i, gesture: "blink right eye" }); + const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1])); + if (mouthOpen > 10) + gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` }); + const chinDepth = res[i].mesh[152][2] || 0; + if (Math.abs(chinDepth) > 10) + gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? "up" : "down"}` }); + } + } + return gestures; +}; +var iris2 = (res) => { + var _a, _b, _c, _d; + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[0]) || !((_d = (_c = res[i].annotations) == null ? void 0 : _c.rightEyeIris) == null ? void 0 : _d[0])) + continue; + const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; + const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; + const areaLeft = Math.abs(sizeXLeft * sizeYLeft); + const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0]; + const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1]; + const areaRight = Math.abs(sizeXRight * sizeYRight); + let center = false; + const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight); + if (difference < 0.25) { + center = true; + gestures.push({ iris: i, gesture: "facing center" }); + } + const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2]; + const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2]; + if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) + center = false; + if (leftIrisCenterX > rightIrisCenterX) { + if (leftIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (rightIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking left" }); + } + const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3]; + const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3]; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + center = false; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) + gestures.push({ iris: i, gesture: "looking down" }); + if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + gestures.push({ iris: i, gesture: "looking up" }); + if (center) + gestures.push({ iris: i, gesture: "looking center" }); + } + return gestures; +}; +var hand2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const fingers = []; + if (res[i].annotations) { + for (const [finger, pos] of Object.entries(res[i].annotations)) { + if (finger !== "palmBase" && Array.isArray(pos) && pos[0]) + fingers.push({ name: finger.toLowerCase(), position: pos[0] }); + } + } + if (fingers && fingers.length > 0) { + const closest = fingers.reduce((best, a) => (best.position[2] || 0) < (a.position[2] || 0) ? best : a); + gestures.push({ hand: i, gesture: `${closest.name} forward` }); + const highest = fingers.reduce((best, a) => best.position[1] < a.position[1] ? best : a); + gestures.push({ hand: i, gesture: `${highest.name} up` }); + } + if (res[i].keypoints) { + const poses = match(res[i].keypoints); + for (const pose of poses) + gestures.push({ hand: i, gesture: pose.name }); + } + } + return gestures; +}; + +// src/hand/handposedetector.ts +var tf27 = __toESM(require_tfjs_esm()); + +// src/hand/handposeutil.ts +var tf26 = __toESM(require_tfjs_esm()); +function getBoxSize2(box) { + return [ + Math.abs(box.endPoint[0] - box.startPoint[0]), + Math.abs(box.endPoint[1] - box.startPoint[1]) + ]; +} +function getBoxCenter2(box) { + return [ + box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, + box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2 + ]; +} +function cutBoxFromImageAndResize(box, image28, cropSize) { + const h = image28.shape[1]; + const w = image28.shape[2]; + const boxes = [[ + box.startPoint[1] / h, + box.startPoint[0] / w, + box.endPoint[1] / h, + box.endPoint[0] / w + ]]; + return tf26.image.cropAndResize(image28, boxes, [0], cropSize); +} +function scaleBoxCoordinates2(box, factor) { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + const palmLandmarks = box.palmLandmarks.map((coord) => { + const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]]; + return scaledCoord; + }); + return { startPoint, endPoint, palmLandmarks, confidence: box.confidence }; +} +function enlargeBox2(box, factor = 1.5) { + const center = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const newHalfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]]; + const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function squarifyBox2(box) { + const centers = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const maxEdge = Math.max(...size2); + const halfSize = maxEdge / 2; + const startPoint = [centers[0] - halfSize, centers[1] - halfSize]; + const endPoint = [centers[0] + halfSize, centers[1] + halfSize]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function normalizeRadians2(angle) { + return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +} +function computeRotation2(point1, point2) { + const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); + return normalizeRadians2(radians); +} +var buildTranslationMatrix2 = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +function dot2(v1, v2) { + let product = 0; + for (let i = 0; i < v1.length; i++) { + product += v1[i] * v2[i]; + } + return product; +} +function getColumnFrom2DArr2(arr, columnIndex) { + const column = []; + for (let i = 0; i < arr.length; i++) { + column.push(arr[i][columnIndex]); + } + return column; +} +function multiplyTransformMatrices2(mat1, mat2) { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) { + product[row].push(dot2(mat1[row], getColumnFrom2DArr2(mat2, col))); + } + } + return product; +} +function buildRotationMatrix2(rotation, center) { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix2(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices2(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix2(-center[0], -center[1]); + return multiplyTransformMatrices2(translationTimesRotation, negativeTranslationMatrix); +} +function invertTransformMatrix2(matrix) { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [ + -dot2(rotationComponent[0], translationComponent), + -dot2(rotationComponent[1], translationComponent) + ]; + return [ + rotationComponent[0].concat(invertedTranslation[0]), + rotationComponent[1].concat(invertedTranslation[1]), + [0, 0, 1] + ]; +} +function rotatePoint2(homogeneousCoordinate, rotationMatrix) { + return [ + dot2(homogeneousCoordinate, rotationMatrix[0]), + dot2(homogeneousCoordinate, rotationMatrix[1]) + ]; +} + +// src/hand/handposeanchors.ts +var anchors2 = [ + { x: 0.015625, y: 0.015625 }, + { x: 0.015625, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 } +]; + +// src/hand/handposedetector.ts +var HandDetector = class { + constructor(model23) { + __publicField(this, "model"); + __publicField(this, "anchors"); + __publicField(this, "anchorsTensor"); + __publicField(this, "inputSize"); + __publicField(this, "inputSizeTensor"); + __publicField(this, "doubleInputSizeTensor"); + var _a, _b, _c, _d; + this.model = model23; + this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); + this.anchorsTensor = tf27.tensor2d(this.anchors); + this.inputSize = ((_d = (_c = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c.shape) == null ? void 0 : _d[2]) || 0; + this.inputSizeTensor = tf27.tensor1d([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = tf27.tensor1d([this.inputSize * 2, this.inputSize * 2]); + } + normalizeBoxes(boxes) { + const t2 = {}; + t2.boxOffsets = tf27.slice(boxes, [0, 0], [-1, 2]); + t2.boxSizes = tf27.slice(boxes, [0, 2], [-1, 2]); + t2.div = tf27.div(t2.boxOffsets, this.inputSizeTensor); + t2.boxCenterPoints = tf27.add(t2.div, this.anchorsTensor); + t2.halfBoxSizes = tf27.div(t2.boxSizes, this.doubleInputSizeTensor); + t2.sub = tf27.sub(t2.boxCenterPoints, t2.halfBoxSizes); + t2.startPoints = tf27.mul(t2.sub, this.inputSizeTensor); + t2.add = tf27.add(t2.boxCenterPoints, t2.halfBoxSizes); + t2.endPoints = tf27.mul(t2.add, this.inputSizeTensor); + const res = tf27.concat2d([t2.startPoints, t2.endPoints], 1); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + normalizeLandmarks(rawPalmLandmarks, index2) { + const t2 = {}; + t2.reshape = tf27.reshape(rawPalmLandmarks, [-1, 7, 2]); + t2.div = tf27.div(t2.reshape, this.inputSizeTensor); + t2.landmarks = tf27.add(t2.div, this.anchors[index2] ? this.anchors[index2] : 0); + const res = tf27.mul(t2.landmarks, this.inputSizeTensor); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + async predict(input, config3) { + var _a; + const t2 = {}; + t2.resize = tf27.image.resizeBilinear(input, [this.inputSize, this.inputSize]); + t2.div = tf27.div(t2.resize, constants.tf127); + t2.image = tf27.sub(t2.div, constants.tf1); + t2.batched = this.model.execute(t2.image); + t2.predictions = tf27.squeeze(t2.batched); + t2.slice = tf27.slice(t2.predictions, [0, 0], [-1, 1]); + t2.sigmoid = tf27.sigmoid(t2.slice); + t2.scores = tf27.squeeze(t2.sigmoid); + const scores = await t2.scores.data(); + t2.boxes = tf27.slice(t2.predictions, [0, 1], [-1, 4]); + t2.norm = this.normalizeBoxes(t2.boxes); + t2.nms = await tf27.image.nonMaxSuppressionAsync(t2.norm, t2.scores, 3 * (((_a = config3.hand) == null ? void 0 : _a.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + const nms = await t2.nms.array(); + const hands = []; + for (const index2 of nms) { + const p = {}; + p.box = tf27.slice(t2.norm, [index2, 0], [1, -1]); + p.slice = tf27.slice(t2.predictions, [index2, 5], [1, 14]); + p.norm = this.normalizeLandmarks(p.slice, index2); + p.palmLandmarks = tf27.reshape(p.norm, [-1, 2]); + const box = await p.box.data(); + const startPoint = box.slice(0, 2); + const endPoint = box.slice(2, 4); + const palmLandmarks = await p.palmLandmarks.array(); + const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; + const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); + hands.push(scaled); + Object.keys(p).forEach((tensor6) => tf27.dispose(p[tensor6])); + } + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return hands; + } +}; + +// src/hand/handposepipeline.ts +var tf28 = __toESM(require_tfjs_esm()); +var palmBoxEnlargeFactor = 5; +var handBoxEnlargeFactor = 1.65; +var palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2]; +var palmLandmarksPalmBase = 0; +var palmLandmarksMiddleFingerBase = 2; +var lastTime13 = 0; +var HandPipeline = class { + constructor(handDetector, handPoseModel2) { + __publicField(this, "handDetector"); + __publicField(this, "handPoseModel"); + __publicField(this, "inputSize"); + __publicField(this, "storedBoxes"); + __publicField(this, "skipped"); + __publicField(this, "detectedHands"); + var _a, _b, _c; + this.handDetector = handDetector; + this.handPoseModel = handPoseModel2; + this.inputSize = ((_c = (_b = (_a = this.handPoseModel) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[2]) || 0; + this.storedBoxes = []; + this.skipped = Number.MAX_SAFE_INTEGER; + this.detectedHands = 0; + } + calculateLandmarksBoundingBox(landmarks) { + const xs = landmarks.map((d) => d[0]); + const ys = landmarks.map((d) => d[1]); + const startPoint = [Math.min(...xs), Math.min(...ys)]; + const endPoint = [Math.max(...xs), Math.max(...ys)]; + return { startPoint, endPoint }; + } + getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) { + const rotatedPalmLandmarks = palmLandmarks.map((coord) => rotatePoint2([...coord, 1], rotationMatrix)); + const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks); + return enlargeBox2(squarifyBox2(boxAroundPalm), palmBoxEnlargeFactor); + } + getBoxForHandLandmarks(landmarks) { + const boundingBox = this.calculateLandmarksBoundingBox(landmarks); + const boxAroundHand = enlargeBox2(squarifyBox2(boundingBox), handBoxEnlargeFactor); + boxAroundHand.palmLandmarks = []; + for (let i = 0; i < palmLandmarkIds.length; i++) { + boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2)); + } + return boxAroundHand; + } + transformRawCoords(rawCoords, box2, angle, rotationMatrix) { + const boxSize = getBoxSize2(box2); + const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2]; + const coordsScaled = rawCoords.map((coord) => [ + scaleFactor[0] * (coord[0] - this.inputSize / 2), + scaleFactor[1] * (coord[1] - this.inputSize / 2), + scaleFactor[2] * coord[2] + ]); + const coordsRotationMatrix = buildRotationMatrix2(angle, [0, 0]); + const coordsRotated = coordsScaled.map((coord) => { + const rotated = rotatePoint2(coord, coordsRotationMatrix); + return [...rotated, coord[2]]; + }); + const inverseRotationMatrix = invertTransformMatrix2(rotationMatrix); + const boxCenter = [...getBoxCenter2(box2), 1]; + const originalBoxCenter = [ + dot2(boxCenter, inverseRotationMatrix[0]), + dot2(boxCenter, inverseRotationMatrix[1]) + ]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + originalBoxCenter[0]), + Math.trunc(coord[1] + originalBoxCenter[1]), + Math.trunc(coord[2]) + ]); + } + async estimateHands(image28, config3) { + let useFreshBox = false; + let boxes; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime13; + const skipFrame = this.skipped < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + if (config3.skipAllowed) + this.skipped++; + if (boxes && boxes.length > 0 && (boxes.length !== this.detectedHands && this.detectedHands !== config3.hand.maxDetected || !config3.hand.landmarks)) { + this.detectedHands = 0; + this.storedBoxes = [...boxes]; + if (this.storedBoxes.length > 0) + useFreshBox = true; + } + const hands = []; + for (let i = 0; i < this.storedBoxes.length; i++) { + const currentBox = this.storedBoxes[i]; + if (!currentBox) + continue; + if (config3.hand.landmarks) { + const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; + const palmCenter = getBoxCenter2(currentBox); + const palmCenterNormalized = [palmCenter[0] / image28.shape[2], palmCenter[1] / image28.shape[1]]; + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? tf28.image.rotateWithOffset(image28, angle, 0, palmCenterNormalized) : image28.clone(); + const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); + const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; + const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); + const handImage = tf28.div(croppedInput, constants.tf255); + tf28.dispose(croppedInput); + tf28.dispose(rotatedImage); + const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); + lastTime13 = now(); + tf28.dispose(handImage); + const confidence = (await confidenceT.data())[0]; + tf28.dispose(confidenceT); + if (confidence >= config3.hand.minConfidence / 4) { + const keypointsReshaped = tf28.reshape(keypoints, [-1, 3]); + const rawCoords = await keypointsReshaped.array(); + tf28.dispose(keypoints); + tf28.dispose(keypointsReshaped); + const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); + const nextBoundingBox = this.getBoxForHandLandmarks(coords); + this.storedBoxes[i] = { ...nextBoundingBox, confidence }; + const result = { + landmarks: coords, + confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: confidence, + box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint } + }; + hands.push(result); + } else { + this.storedBoxes[i] = null; + } + tf28.dispose(keypoints); + } else { + const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); + const result = { + confidence: currentBox.confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: 0, + box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint }, + landmarks: [] + }; + hands.push(result); + } + } + this.storedBoxes = this.storedBoxes.filter((a) => a !== null); + this.detectedHands = hands.length; + if (hands.length > config3.hand.maxDetected) + hands.length = config3.hand.maxDetected; + return hands; + } +}; + +// src/hand/handpose.ts +var meshAnnotations2 = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + palm: [0] +}; +var handDetectorModel; +var handPoseModel; +var handPipeline; +async function predict14(input, config3) { + const predictions = await handPipeline.estimateHands(input, config3); + if (!predictions) + return []; + const hands = []; + for (let i = 0; i < predictions.length; i++) { + const annotations2 = {}; + if (predictions[i].landmarks) { + for (const key of Object.keys(meshAnnotations2)) { + annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]); + } + } + const keypoints = predictions[i].landmarks; + let box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; + let boxRaw = [0, 0, 0, 0]; + if (keypoints && keypoints.length > 0) { + for (const pt of keypoints) { + if (pt[0] < box[0]) + box[0] = pt[0]; + if (pt[1] < box[1]) + box[1] = pt[1]; + if (pt[0] > box[2]) + box[2] = pt[0]; + if (pt[1] > box[3]) + box[3] = pt[1]; + } + box[2] -= box[0]; + box[3] -= box[1]; + boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)]; + } else { + box = predictions[i].box ? [ + Math.trunc(Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.max(0, predictions[i].box.topLeft[1])), + Math.trunc(Math.min(input.shape[2] || 0, predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.min(input.shape[1] || 0, predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])) + ] : [0, 0, 0, 0]; + boxRaw = [ + predictions[i].box.topLeft[0] / (input.shape[2] || 0), + predictions[i].box.topLeft[1] / (input.shape[1] || 0), + (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0), + (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0) + ]; + } + const landmarks = analyze(keypoints); + hands.push({ + id: i, + score: Math.round(100 * predictions[i].confidence) / 100, + boxScore: Math.round(100 * predictions[i].boxConfidence) / 100, + fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100, + label: "hand", + box, + boxRaw, + keypoints, + annotations: annotations2, + landmarks + }); + } + return hands; +} +async function load15(config3) { + var _a, _b; + if (env.initial) { + handDetectorModel = null; + handPoseModel = null; + } + if (!handDetectorModel || !handPoseModel) { + [handDetectorModel, handPoseModel] = await Promise.all([ + config3.hand.enabled ? loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath) : null, + config3.hand.landmarks ? loadModel((_b = config3.hand.skeleton) == null ? void 0 : _b.modelPath) : null + ]); + } else { + if (config3.debug) + log("cached model:", handDetectorModel["modelUrl"]); + if (config3.debug) + log("cached model:", handPoseModel["modelUrl"]); + } + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) + handPipeline = new HandPipeline(handDetector, handPoseModel); + return [handDetectorModel, handPoseModel]; +} + +// src/hand/handtrack.ts +var tf29 = __toESM(require_tfjs_esm()); +var models2 = [null, null]; +var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; +var inputSize7 = [[0, 0], [0, 0]]; +var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; +var faceIndex = 4; +var boxExpandFact = 1.6; +var maxDetectorResolution = 512; +var detectorExpandFact = 1.4; +var skipped13 = Number.MAX_SAFE_INTEGER; +var lastTime14 = 0; +var outputSize = [0, 0]; +var cache4 = { + boxes: [], + hands: [] +}; +var fingerMap = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + base: [0], + palm: [0, 17, 13, 9, 5, 1, 0] +}; +async function loadDetect2(config3) { + var _a; + if (env.initial) + models2[0] = null; + if (!models2[0]) { + fakeOps(["tensorlistreserve", "enter", "tensorlistfromtensor", "merge", "loopcond", "switch", "exit", "tensorliststack", "nextiteration", "tensorlistsetitem", "tensorlistgetitem", "reciprocal", "shape", "split", "where"], config3); + models2[0] = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + const inputs = models2[0]["executor"] ? Object.values(models2[0].modelSignature["inputs"]) : void 0; + inputSize7[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[0]["modelUrl"]); + return models2[0]; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) + models2[1] = null; + if (!models2[1]) { + models2[1] = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + const inputs = models2[1]["executor"] ? Object.values(models2[1].modelSignature["inputs"]) : void 0; + inputSize7[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[1]["modelUrl"]); + return models2[1]; +} +async function detectHands(input, config3) { + const hands = []; + if (!input || !models2[0]) + return hands; + const t2 = {}; + const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); + const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); + const width = Math.round(height * ratio2 / 8) * 8; + t2.resize = tf29.image.resizeBilinear(input, [height, width]); + t2.cast = tf29.cast(t2.resize, "int32"); + [t2.rawScores, t2.rawBoxes] = await models2[0].executeAsync(t2.cast, modelOutputNodes); + t2.boxes = tf29.squeeze(t2.rawBoxes, [0, 2]); + t2.scores = tf29.squeeze(t2.rawScores, [0]); + const classScores = tf29.unstack(t2.scores, 1); + tf29.dispose(classScores[faceIndex]); + classScores.splice(faceIndex, 1); + t2.filtered = tf29.stack(classScores, 1); + tf29.dispose(classScores); + t2.max = tf29.max(t2.filtered, 1); + t2.argmax = tf29.argMax(t2.filtered, 1); + let id = 0; + t2.nms = await tf29.image.nonMaxSuppressionAsync(t2.boxes, t2.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + const nms = await t2.nms.data(); + const scores = await t2.max.data(); + const classNum = await t2.argmax.data(); + for (const nmsIndex of Array.from(nms)) { + const boxSlice = tf29.slice(t2.boxes, nmsIndex, 1); + const boxYX = await boxSlice.data(); + tf29.dispose(boxSlice); + const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; + const boxRaw = scale(boxData, detectorExpandFact); + const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; + const score = scores[nmsIndex]; + const label = classes[classNum[nmsIndex]]; + const hand3 = { id: id++, score, box: boxFull, boxRaw, label }; + hands.push(hand3); + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + hands.sort((a, b) => b.score - a.score); + if (hands.length > (config3.hand.maxDetected || 1)) + hands.length = config3.hand.maxDetected || 1; + return hands; +} +async function detectFingers(input, h, config3) { + const hand3 = { + id: h.id, + score: Math.round(100 * h.score) / 100, + boxScore: Math.round(100 * h.score) / 100, + fingerScore: 0, + box: h.box, + boxRaw: h.boxRaw, + label: h.label, + keypoints: [], + landmarks: {}, + annotations: {} + }; + if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { + const t2 = {}; + const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; + t2.crop = tf29.image.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t2.div = tf29.div(t2.crop, constants.tf255); + [t2.score, t2.keypoints] = models2[1].execute(t2.div, ["Identity_1", "Identity"]); + const rawScore = (await t2.score.data())[0]; + const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; + if (score >= (config3.hand.minConfidence || 0)) { + hand3.fingerScore = score; + t2.reshaped = tf29.reshape(t2.keypoints, [-1, 3]); + const coordsData = await t2.reshaped.array(); + const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize7[1][1], kpt4[1] / inputSize7[1][0], kpt4[2] || 0]); + const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); + hand3.keypoints = coordsNorm.map((kpt4) => [outputSize[0] * (kpt4[0] + h.boxRaw[0]), outputSize[1] * (kpt4[1] + h.boxRaw[1]), kpt4[2] || 0]); + hand3.landmarks = analyze(hand3.keypoints); + for (const key of Object.keys(fingerMap)) { + hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); + } + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + } + return hand3; +} +async function predict15(input, config3) { + var _a, _b; + if (!((_a = models2[0]) == null ? void 0 : _a["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + return []; + outputSize = [input.shape[2] || 0, input.shape[1] || 0]; + skipped13++; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrame = skipped13 < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache4.hands; + } + return new Promise(async (resolve) => { + const skipTimeExtended = 3 * (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrameExtended = skipped13 < 3 * (config3.hand.skipFrames || 0); + if (config3.skipAllowed && cache4.hands.length === config3.hand.maxDetected) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else if (config3.skipAllowed && skipTimeExtended && skipFrameExtended && cache4.hands.length > 0) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else { + cache4.boxes = await detectHands(input, config3); + lastTime14 = now(); + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + skipped13 = 0; + } + const oldCache = [...cache4.boxes]; + cache4.boxes.length = 0; + if (config3.cacheSensitivity > 0) { + for (let i = 0; i < cache4.hands.length; i++) { + const boxKpt = square(cache4.hands[i].keypoints, outputSize); + if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache4.hands[i].fingerScore && cache4.hands[i].fingerScore > (config3.hand.minConfidence || 0)) { + const boxScale = scale(boxKpt.box, boxExpandFact); + const boxScaleRaw = scale(boxKpt.boxRaw, boxExpandFact); + cache4.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw }); + } + } + } + for (let i = 0; i < cache4.hands.length; i++) { + const bbox = calc(cache4.hands[i].keypoints, outputSize); + cache4.hands[i].box = bbox.box; + cache4.hands[i].boxRaw = bbox.boxRaw; + } + resolve(cache4.hands); + }); +} + +// src/result.ts +var empty = (error = null) => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error }); + +// src/body/movenetcoords.ts +var movenetcoords_exports = {}; +__export(movenetcoords_exports, { + connected: () => connected3, + horizontal: () => horizontal, + kpt: () => kpt3, + relative: () => relative, + vertical: () => vertical +}); +var kpt3 = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/util/interpolate.ts +var bufferedResult = empty(); +var interpolateTime = 0; +function calc2(newResult, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + const t0 = now(); + if (!newResult) + return empty(); + const elapsed = Date.now() - newResult.timestamp; + const bufferedFactor = elapsed < 1e3 ? 8 - Math.log(elapsed + 1) : 1; + if (newResult.canvas) + bufferedResult.canvas = newResult.canvas; + if (newResult.error) + bufferedResult.error = newResult.error; + if (!bufferedResult.body || newResult.body.length !== bufferedResult.body.length) { + bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)); + } else { + for (let i = 0; i < newResult.body.length; i++) { + const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); + const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); + const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2; + return { + score: newKpt.score, + part: newKpt.part, + position: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2] + ], + positionRaw: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] + ], + distance: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a2[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c2 = newKpt.distance) == null ? void 0 : _c2[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d2[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f2 = newKpt.distance) == null ? void 0 : _f2[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g2[2]) || 0) + (((_h2 = newKpt.distance) == null ? void 0 : _h2[2]) || 0)) / bufferedFactor : (_i2 = newKpt.distance) == null ? void 0 : _i2[2] + ] + }; + }); + const annotations2 = {}; + let coords = { connected: {} }; + if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("efficientpose")) + coords = efficientposecoords_exports; + else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + coords = blazeposecoords_exports; + else if ((_c = config3.body.modelPath) == null ? void 0 : _c.includes("movenet")) + coords = movenetcoords_exports; + for (const [name, indexes] of Object.entries(coords.connected)) { + const pt = []; + for (let j = 0; j < indexes.length - 1; j++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[j]); + const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.hand || newResult.hand.length !== bufferedResult.hand.length) { + bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); + } else { + for (let i = 0; i < newResult.hand.length; i++) { + const box = newResult.hand[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.hand[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor); + if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) + bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; + const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : []; + let annotations2 = {}; + if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) { + bufferedResult.hand[i].annotations = newResult.hand[i].annotations; + annotations2 = bufferedResult.hand[i].annotations; + } else if (newResult.hand[i].annotations) { + for (const key of Object.keys(newResult.hand[i].annotations)) { + annotations2[key] = ((_f = (_e = (_d = newResult.hand[i]) == null ? void 0 : _d.annotations) == null ? void 0 : _e[key]) == null ? void 0 : _f[0]) ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) { + bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)); + } else { + for (let i = 0; i < newResult.face.length; i++) { + const box = newResult.face[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.face[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor); + if (newResult.face[i].rotation) { + const rotation = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } }; + rotation.matrix = (_g = newResult.face[i].rotation) == null ? void 0 : _g.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_i = (_h = bufferedResult.face[i].rotation) == null ? void 0 : _h.angle) == null ? void 0 : _i.roll) || 0) + (((_k = (_j = newResult.face[i].rotation) == null ? void 0 : _j.angle) == null ? void 0 : _k.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_m = (_l = bufferedResult.face[i].rotation) == null ? void 0 : _l.angle) == null ? void 0 : _m.yaw) || 0) + (((_o = (_n = newResult.face[i].rotation) == null ? void 0 : _n.angle) == null ? void 0 : _o.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_q = (_p = bufferedResult.face[i].rotation) == null ? void 0 : _p.angle) == null ? void 0 : _q.pitch) || 0) + (((_s = (_r = newResult.face[i].rotation) == null ? void 0 : _r.angle) == null ? void 0 : _s.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + bearing: ((bufferedFactor - 1) * (((_t = bufferedResult.face[i].rotation) == null ? void 0 : _t.gaze.bearing) || 0) + (((_u = newResult.face[i].rotation) == null ? void 0 : _u.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_v = bufferedResult.face[i].rotation) == null ? void 0 : _v.gaze.strength) || 0) + (((_w = newResult.face[i].rotation) == null ? void 0 : _w.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; + } + } + } + if (!bufferedResult.object || newResult.object.length !== bufferedResult.object.length) { + bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)); + } else { + for (let i = 0; i < newResult.object.length; i++) { + const box = newResult.object[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.object[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor); + bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; + } + } + if (newResult.persons) { + const newPersons = newResult.persons; + if (!bufferedResult.persons || newPersons.length !== bufferedResult.persons.length) { + bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)); + } else { + for (let i = 0; i < newPersons.length; i++) { + bufferedResult.persons[i].box = newPersons[i].box.map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor); + } + } + } + if (newResult.gesture) + bufferedResult.gesture = newResult.gesture; + bufferedResult.width = newResult.width; + bufferedResult.height = newResult.height; + const t1 = now(); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0); + if (newResult.performance) + bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; + return bufferedResult; +} + +// src/segmentation/meet.ts +var tf30 = __toESM(require_tfjs_esm()); +var model17; +async function load16(config3) { + if (!model17 || env.initial) + model17 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model17["modelUrl"]); + return model17; +} +async function predict16(input, config3) { + var _a; + if (!model17) + model17 = await load16(config3); + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf30.image.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t2.norm = tf30.div(t2.resize, constants.tf255); + t2.res = model17.execute(t2.norm); + t2.squeeze = tf30.squeeze(t2.res, [0]); + [t2.bgRaw, t2.fgRaw] = tf30.unstack(t2.squeeze, 2); + t2.fg = tf30.softmax(t2.fgRaw); + t2.mul = tf30.mul(t2.fg, constants.tf255); + t2.expand = tf30.expandDims(t2.mul, 2); + t2.output = tf30.image.resizeBilinear(t2.expand, [input.shape[1] || 0, input.shape[2] || 0]); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf30.squeeze(input); + t2.concat = tf30.concat([t2.input, t2.output], -1); + rgba = tf30.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf30.cast(t2.output, "int32"); + break; + default: + rgba = tf30.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf30.dispose(t2[tensor6])); + return rgba; +} + +// src/face/match.ts +var match_exports = {}; +__export(match_exports, { + distance: () => distance, + find: () => find, + similarity: () => similarity +}); +function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25 }) { + if (!descriptor1 || !descriptor1) + return Number.MAX_SAFE_INTEGER; + let sum3 = 0; + for (let i = 0; i < descriptor1.length; i++) { + const diff = !options4.order || options4.order === 2 ? descriptor1[i] - descriptor2[i] : Math.abs(descriptor1[i] - descriptor2[i]); + sum3 += !options4.order || options4.order === 2 ? diff * diff : diff ** options4.order; + } + return (options4.multiplier || 20) * sum3; +} +var normalizeDistance = (dist, order, min2, max5) => { + if (dist === 0) + return 1; + const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); + const norm = (1 - root / 100 - min2) / (max5 - min2); + const clamp2 = Math.max(Math.min(norm, 1), 0); + return clamp2; +}; +function similarity(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) { + const dist = distance(descriptor1, descriptor2, options4); + return normalizeDistance(dist, options4.order || 2, options4.min || 0, options4.max || 1); +} +function find(descriptor, descriptors, options4 = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) { + if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { + return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 }; + } + let lowestDistance = Number.MAX_SAFE_INTEGER; + let index2 = -1; + for (let i = 0; i < descriptors.length; i++) { + const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options4) : Number.MAX_SAFE_INTEGER; + if (res < lowestDistance) { + lowestDistance = res; + index2 = i; + } + if (lowestDistance < (options4.threshold || 0)) + break; + } + const normalizedSimilarity = normalizeDistance(lowestDistance, options4.order || 2, options4.min || 0, options4.max || 1); + return { index: index2, distance: lowestDistance, similarity: normalizedSimilarity }; +} + +// src/models.ts +var models_exports2 = {}; +__export(models_exports2, { + Models: () => Models, + validateModel: () => validateModel +}); + +// src/body/movenet.ts +var tf32 = __toESM(require_tfjs_esm()); + +// src/body/movenetfix.ts +var tf31 = __toESM(require_tfjs_esm()); +var maxJitter = 5e-3; +var cache5 = { + keypoints: [], + padding: [[0, 0], [0, 0], [0, 0], [0, 0]] +}; +function bodyParts(body4) { + for (const pair of horizontal) { + const left = body4.keypoints.findIndex((kp) => kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp.part === pair[1]); + if (body4.keypoints[left] && body4.keypoints[right]) { + if (body4.keypoints[left].position[0] < body4.keypoints[right].position[0]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } + } + for (const pair of vertical) { + const lower = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const higher = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + if (body4.keypoints[lower] && body4.keypoints[higher]) { + if (body4.keypoints[lower].position[1] < body4.keypoints[higher].position[1]) { + body4.keypoints.splice(lower, 1); + } + } + } + for (const [pair, compare2] of relative) { + const left = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + const leftTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[0]); + const rightTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[1]); + if (!body4.keypoints[leftTo] || !body4.keypoints[rightTo]) + continue; + const distanceLeft = body4.keypoints[left] ? [ + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[left].position[0]), + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[left].position[0]) + ] : [0, 0]; + const distanceRight = body4.keypoints[right] ? [ + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[right].position[0]), + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[right].position[0]) + ] : [0, 0]; + if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } +} +function jitter(keypoints) { + for (let i = 0; i < keypoints.length; i++) { + if (keypoints[i] && cache5.keypoints[i]) { + const diff = [Math.abs(keypoints[i].positionRaw[0] - cache5.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache5.keypoints[i].positionRaw[1])]; + if (diff[0] < maxJitter && diff[1] < maxJitter) { + keypoints[i] = cache5.keypoints[i]; + } else { + cache5.keypoints[i] = keypoints[i]; + } + } else { + cache5.keypoints[i] = keypoints[i]; + } + } + return keypoints; +} +function padInput(input, inputSize10) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + cache5.padding = [ + [0, 0], + [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], + [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], + [0, 0] + ]; + t2.pad = tf31.pad(input, cache5.padding); + t2.resize = tf31.image.resizeBilinear(t2.pad, [inputSize10, inputSize10]); + const final = tf31.cast(t2.resize, "int32"); + Object.keys(t2).forEach((tensor6) => tf31.dispose(t2[tensor6])); + return final; +} +function rescaleBody(body4, outputSize2) { + body4.keypoints = body4.keypoints.filter((kpt4) => kpt4 == null ? void 0 : kpt4.position); + for (const kpt4 of body4.keypoints) { + kpt4.position = [ + kpt4.position[0] * (outputSize2[0] + cache5.padding[2][0] + cache5.padding[2][1]) / outputSize2[0] - cache5.padding[2][0], + kpt4.position[1] * (outputSize2[1] + cache5.padding[1][0] + cache5.padding[1][1]) / outputSize2[1] - cache5.padding[1][0] + ]; + kpt4.positionRaw = [ + kpt4.position[0] / outputSize2[0], + kpt4.position[1] / outputSize2[1] + ]; + } + const rescaledBoxes = calc(body4.keypoints.map((pt) => pt.position), outputSize2); + body4.box = rescaledBoxes.box; + body4.boxRaw = rescaledBoxes.boxRaw; + return body4; +} + +// src/body/movenet.ts +var model18; +var inputSize8 = 0; +var skipped14 = Number.MAX_SAFE_INTEGER; +var cache6 = { + boxes: [], + bodies: [], + last: 0 +}; +async function load17(config3) { + var _a; + if (env.initial) + model18 = null; + if (!model18) { + fakeOps(["size"], config3); + model18 = await loadModel(config3.body.modelPath); + } else if (config3.debug) + log("cached model:", model18["modelUrl"]); + inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape) ? model18.inputs[0].shape[2] : 0; + if (inputSize8 < 64) + inputSize8 = 256; + return model18; +} +function parseSinglePose(res, config3, image28) { + const kpt4 = res[0][0]; + const keypoints = []; + let score = 0; + for (let id = 0; id < kpt4.length; id++) { + score = kpt4[id][2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[id][1], kpt4[id][0]]; + keypoints.push({ + score: Math.round(100 * score) / 100, + part: kpt3[id], + positionRaw, + position: [ + Math.round((image28.shape[2] || 0) * positionRaw[0]), + Math.round((image28.shape[1] || 0) * positionRaw[1]) + ] + }); + } + } + score = keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const bodies = []; + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + return bodies; +} +function parseMultiPose(res, config3, image28) { + const bodies = []; + for (let id = 0; id < res[0].length; id++) { + const kpt4 = res[0][id]; + const totalScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (totalScore > config3.body.minConfidence) { + const keypoints = []; + for (let i = 0; i < 17; i++) { + const score = kpt4[3 * i + 2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[3 * i + 1], kpt4[3 * i + 0]]; + keypoints.push({ + part: kpt3[i], + score: Math.round(100 * score) / 100, + positionRaw, + position: [Math.round((image28.shape[2] || 0) * positionRaw[0]), Math.round((image28.shape[1] || 0) * positionRaw[1])] + }); + } + } + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + } + } + bodies.sort((a, b) => b.score - a.score); + if (bodies.length > config3.body.maxDetected) + bodies.length = config3.body.maxDetected; + return bodies; +} +async function predict17(input, config3) { + var _a; + if (!(model18 == null ? void 0 : model18["executor"]) || !((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape)) + return []; + if (!config3.skipAllowed) + cache6.boxes.length = 0; + skipped14++; + const skipTime = (config3.body.skipTime || 0) > now() - cache6.last; + const skipFrame = skipped14 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache6.bodies; + } + return new Promise(async (resolve) => { + const t2 = {}; + skipped14 = 0; + t2.input = padInput(input, inputSize8); + t2.res = model18 == null ? void 0 : model18.execute(t2.input); + cache6.last = now(); + const res = await t2.res.array(); + cache6.bodies = t2.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); + for (const body4 of cache6.bodies) { + rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); + jitter(body4.keypoints); + } + Object.keys(t2).forEach((tensor6) => tf32.dispose(t2[tensor6])); + resolve(cache6.bodies); + }); +} + +// src/object/nanodet.ts +var tf33 = __toESM(require_tfjs_esm()); +var model19; +var last10 = []; +var lastTime15 = 0; +var skipped15 = Number.MAX_SAFE_INTEGER; +var inputSize9 = 0; +var scaleBox = 2.5; +async function load18(config3) { + if (!model19 || env.initial) { + model19 = await loadModel(config3.object.modelPath); + const inputs = (model19 == null ? void 0 : model19["executor"]) ? Object.values(model19.modelSignature["inputs"]) : void 0; + inputSize9 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416; + } else if (config3.debug) + log("cached model:", model19["modelUrl"]); + return model19; +} +async function process4(res, outputShape, config3) { + var _a, _b; + let id = 0; + let results = []; + const size2 = inputSize9; + for (const strideSize of [1, 2, 4]) { + const baseSize = strideSize * 13; + const scoresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scores = await scoresT.array(); + const featuresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const boxesMaxT = tf33.reshape(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); + const boxIdxT = tf33.argMax(boxesMaxT, 2); + const boxIdx = await boxIdxT.array(); + for (let i = 0; i < scoresT.shape[0]; i++) { + for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { + const score = scores[i][j]; + if (score > (config3.object.minConfidence || 0) && j !== 61) { + const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; + const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; + const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); + const [x, y] = [ + cx - scaleBox / strideSize * boxOffset[0], + cy - scaleBox / strideSize * boxOffset[1] + ]; + const [w, h] = [ + cx + scaleBox / strideSize * boxOffset[2] - x, + cy + scaleBox / strideSize * boxOffset[3] - y + ]; + let boxRaw = [x, y, w, h]; + boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); + const box = [ + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + box: box.map((a) => Math.trunc(a)), + boxRaw + }; + results.push(result); + } + } + } + tf33.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]); + } + const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); + const nmsScores = results.map((a) => a.score); + let nmsIdx = []; + if (nmsBoxes && nmsBoxes.length > 0) { + const nms = await tf33.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + nmsIdx = Array.from(await nms.data()); + tf33.dispose(nms); + } + results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); + return results; +} +async function predict18(image28, config3) { + if (!(model19 == null ? void 0 : model19["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime15; + const skipFrame = skipped15 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last10.length > 0) { + skipped15++; + return last10; + } + skipped15 = 0; + if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) + return last10; + return new Promise(async (resolve) => { + const outputSize2 = [image28.shape[2] || 0, image28.shape[1] || 0]; + const resizeT = tf33.image.resizeBilinear(image28, [inputSize9, inputSize9], false); + const normT = tf33.div(resizeT, constants.tf255); + const transposeT = tf33.transpose(normT, [0, 3, 1, 2]); + let objectT; + if (config3.object.enabled) + objectT = model19.execute(transposeT); + lastTime15 = now(); + const obj = await process4(objectT, outputSize2, config3); + last10 = obj; + tf33.dispose([resizeT, normT, transposeT, ...objectT]); + resolve(obj); + }); +} + +// src/body/posenet.ts +var tf34 = __toESM(require_tfjs_esm()); + +// src/body/posenetutils.ts +var partNames = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var count = partNames.length; +var partIds = partNames.reduce((result, jointName, i) => { + result[jointName] = i; + return result; +}, {}); +var connectedPartNames = [ + ["leftHip", "leftShoulder"], + ["leftElbow", "leftShoulder"], + ["leftElbow", "leftWrist"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["rightHip", "rightShoulder"], + ["rightElbow", "rightShoulder"], + ["rightElbow", "rightWrist"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"], + ["leftShoulder", "rightShoulder"], + ["leftHip", "rightHip"] +]; +var connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => [partIds[jointNameA], partIds[jointNameB]]); +var poseChain = [ + ["nose", "leftEye"], + ["leftEye", "leftEar"], + ["nose", "rightEye"], + ["rightEye", "rightEar"], + ["nose", "leftShoulder"], + ["leftShoulder", "leftElbow"], + ["leftElbow", "leftWrist"], + ["leftShoulder", "leftHip"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["nose", "rightShoulder"], + ["rightShoulder", "rightElbow"], + ["rightElbow", "rightWrist"], + ["rightShoulder", "rightHip"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"] +]; +function getBoundingBox(keypoints) { + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({ + maxX: Math.max(maxX, x), + maxY: Math.max(maxY, y), + minX: Math.min(minX, x), + minY: Math.min(minY, y) + }), { + maxX: Number.NEGATIVE_INFINITY, + maxY: Number.NEGATIVE_INFINITY, + minX: Number.POSITIVE_INFINITY, + minY: Number.POSITIVE_INFINITY + }); + return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY]; +} +function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]) { + const scaleY = height / inputResolutionHeight; + const scaleX = width / inputResolutionWidth; + const scalePose = (pose, i) => ({ + id: i, + score: pose.score, + boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight], + box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)], + keypoints: pose.keypoints.map(({ score, part, position }) => ({ + score, + part, + position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)], + positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] + })), + annotations: {} + }); + const scaledPoses = poses.map((pose, i) => scalePose(pose, i)); + return scaledPoses; +} +var MaxHeap = class { + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + __publicField(this, "numberOfElements"); + __publicField(this, "getElementValue"); + this.priorityQueue = new Array(maxSize2); + this.numberOfElements = -1; + this.getElementValue = getElementValue; + } + enqueue(x) { + this.priorityQueue[++this.numberOfElements] = x; + this.swim(this.numberOfElements); + } + dequeue() { + const max5 = this.priorityQueue[0]; + this.exchange(0, this.numberOfElements--); + this.sink(0); + this.priorityQueue[this.numberOfElements + 1] = null; + return max5; + } + empty() { + return this.numberOfElements === -1; + } + size() { + return this.numberOfElements + 1; + } + all() { + return this.priorityQueue.slice(0, this.numberOfElements + 1); + } + max() { + return this.priorityQueue[0]; + } + swim(k) { + while (k > 0 && this.less(Math.floor(k / 2), k)) { + this.exchange(k, Math.floor(k / 2)); + k = Math.floor(k / 2); + } + } + sink(k) { + while (2 * k <= this.numberOfElements) { + let j = 2 * k; + if (j < this.numberOfElements && this.less(j, j + 1)) + j++; + if (!this.less(k, j)) + break; + this.exchange(k, j); + k = j; + } + } + getValueAt(i) { + return this.getElementValue(this.priorityQueue[i]); + } + less(i, j) { + return this.getValueAt(i) < this.getValueAt(j); + } + exchange(i, j) { + const t2 = this.priorityQueue[i]; + this.priorityQueue[i] = this.priorityQueue[j]; + this.priorityQueue[j] = t2; + } +}; +function getOffsetPoint(y, x, keypoint, offsets) { + return { + y: offsets.get(y, x, keypoint), + x: offsets.get(y, x, keypoint + count) + }; +} +function getImageCoords(part, outputStride2, offsets) { + const { heatmapY, heatmapX, id: keypoint } = part; + const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + return { + x: part.heatmapX * outputStride2 + x, + y: part.heatmapY * outputStride2 + y + }; +} +function clamp(a, min2, max5) { + if (a < min2) + return min2; + if (a > max5) + return max5; + return a; +} +function squaredDistance(y1, x1, y2, x2) { + const dy = y2 - y1; + const dx = x2 - x1; + return dy * dy + dx * dx; +} +function addVectors(a, b) { + return { x: a.x + b.x, y: a.y + b.y }; +} + +// src/body/posenet.ts +var model20; +var poseNetOutputs = ["MobilenetV1/offset_2/BiasAdd", "MobilenetV1/heatmap_2/BiasAdd", "MobilenetV1/displacement_fwd_2/BiasAdd", "MobilenetV1/displacement_bwd_2/BiasAdd"]; +var localMaximumRadius = 1; +var outputStride = 16; +var squaredNmsRadius = 50 ** 2; +function traverse(edgeId, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) { + const getDisplacement = (point2) => ({ + y: displacements.get(point2.y, point2.x, edgeId), + x: displacements.get(point2.y, point2.x, displacements.shape[2] / 2 + edgeId) + }); + const getStridedIndexNearPoint = (point2, height2, width2) => ({ + y: clamp(Math.round(point2.y / outputStride), 0, height2 - 1), + x: clamp(Math.round(point2.x / outputStride), 0, width2 - 1) + }); + const [height, width] = scores.shape; + const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width); + const displacement = getDisplacement(sourceKeypointIndices); + const displacedPoint = addVectors(sourceKeypoint.position, displacement); + let targetKeypoint = displacedPoint; + for (let i = 0; i < offsetRefineStep; i++) { + const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const offsetPoint = getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets); + targetKeypoint = addVectors( + { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride }, + { x: offsetPoint.x, y: offsetPoint.y } + ); + } + const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId); + return { position: targetKeypoint, part: partNames[targetId], score }; +} +function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) { + const tuples = poseChain.map(([parentJoinName, childJoinName]) => [partIds[parentJoinName], partIds[childJoinName]]); + const edgesFwd = tuples.map(([, childJointId]) => childJointId); + const edgesBwd = tuples.map(([parentJointId]) => parentJointId); + const numParts = scores.shape[2]; + const numEdges = edgesFwd.length; + const keypoints = new Array(numParts); + const rootPoint = getImageCoords(root.part, outputStride, offsets); + keypoints[root.part.id] = { + score: root.score, + part: partNames[root.part.id], + position: rootPoint + }; + for (let edge = numEdges - 1; edge >= 0; --edge) { + const sourceId = edgesFwd[edge]; + const targetId = edgesBwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd); + } + } + for (let edge = 0; edge < numEdges; ++edge) { + const sourceId = edgesBwd[edge]; + const targetId = edgesFwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd); + } + } + return keypoints; +} +function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores) { + const [height, width] = scores.shape; + let localMaximum = true; + const yStart = Math.max(heatmapY - localMaximumRadius, 0); + const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height); + for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) { + const xStart = Math.max(heatmapX - localMaximumRadius, 0); + const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width); + for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) { + if (scores.get(yCurrent, xCurrent, keypointId) > score) { + localMaximum = false; + break; + } + } + if (!localMaximum) + break; + } + return localMaximum; +} +function buildPartWithScoreQueue(minConfidence2, scores) { + const [height, width, numKeypoints] = scores.shape; + const queue = new MaxHeap(height * width * numKeypoints, ({ score }) => score); + for (let heatmapY = 0; heatmapY < height; ++heatmapY) { + for (let heatmapX = 0; heatmapX < width; ++heatmapX) { + for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) { + const score = scores.get(heatmapY, heatmapX, keypointId); + if (score < minConfidence2) + continue; + if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) + queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } }); + } + } + } + return queue; +} +function withinRadius(poses, { x, y }, keypointId) { + return poses.some(({ keypoints }) => { + var _a; + const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; + if (!correspondingKeypoint) + return false; + return squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + }); +} +function getInstanceScore(existingPoses, keypoints) { + const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => { + if (!withinRadius(existingPoses, position, keypointId)) + result += score; + return result; + }, 0); + return notOverlappedKeypointScores / keypoints.length; +} +function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence2) { + const poses = []; + const queue = buildPartWithScoreQueue(minConfidence2, scores); + while (poses.length < maxDetected && !queue.empty()) { + const root = queue.dequeue(); + const rootImageCoords = getImageCoords(root.part, outputStride, offsets); + if (withinRadius(poses, rootImageCoords, root.part.id)) + continue; + let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd); + keypoints = keypoints.filter((a) => a.score > minConfidence2); + const score = getInstanceScore(poses, keypoints); + const box = getBoundingBox(keypoints); + if (score > minConfidence2) + poses.push({ keypoints, box, score: Math.round(100 * score) / 100 }); + } + return poses; +} +async function predict19(input, config3) { + if (!(model20 == null ? void 0 : model20["executor"])) + return []; + const res = tf34.tidy(() => { + if (!model20.inputs[0].shape) + return []; + const resized = tf34.image.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = tf34.sub(tf34.div(tf34.cast(resized, "float32"), 127.5), 1); + const results = model20.execute(normalized, poseNetOutputs); + const results3d = results.map((y) => tf34.squeeze(y, [0])); + results3d[1] = tf34.sigmoid(results3d[1]); + return results3d; + }); + const buffers = await Promise.all(res.map((tensor6) => tensor6.buffer())); + for (const t2 of res) + tf34.dispose(t2); + const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); + if (!model20.inputs[0].shape) + return []; + const scaled = scalePoses(decoded, [input.shape[1], input.shape[2]], [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + return scaled; +} +async function load19(config3) { + if (!model20 || env.initial) + model20 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model20["modelUrl"]); + return model20; +} + +// src/segmentation/rvm.ts +var tf35 = __toESM(require_tfjs_esm()); +var model21; +var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; +var t = {}; +var ratio = 0; +function init3(config3) { + tf35.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = tf35.tensor(0); + t.r2i = tf35.tensor(0); + t.r3i = tf35.tensor(0); + t.r4i = tf35.tensor(0); + ratio = config3.segmentation.ratio || 0.5; + t.downsample_ratio = tf35.tensor(ratio); +} +async function load20(config3) { + if (!model21 || env.initial) + model21 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model21["modelUrl"]); + init3(config3); + return model21; +} +var normalize = (r) => tf35.tidy(() => { + const squeeze14 = tf35.squeeze(r, [0]); + const mul15 = tf35.mul(squeeze14, constants.tf255); + const cast8 = tf35.cast(mul15, "int32"); + return cast8; +}); +function getRGBA(fgr, pha) { + const rgb2 = fgr ? normalize(fgr) : tf35.fill([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : tf35.fill([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgba = tf35.concat([rgb2, a], -1); + tf35.dispose([rgb2, a]); + return rgba; +} +function getState(state) { + return tf35.tidy(() => { + const r = {}; + r.unstack = tf35.unstack(state, -1); + r.concat = tf35.concat(r.unstack, 1); + r.split = tf35.split(r.concat, 4, 1); + r.stack = tf35.concat(r.split, 2); + r.squeeze = tf35.squeeze(r.stack, [0]); + r.expand = tf35.expandDims(r.squeeze, -1); + r.add = tf35.add(r.expand, 1); + r.mul = tf35.mul(r.add, 127.5); + r.cast = tf35.cast(r.mul, "int32"); + r.tile = tf35.tile(r.cast, [1, 1, 3]); + r.alpha = tf35.fill([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); + return tf35.concat([r.tile, r.alpha], -1); + }); +} +async function predict20(input, config3) { + if (!model21) + model21 = await load20(config3); + if (!(model21 == null ? void 0 : model21["executor"])) + return null; + t.src = tf35.div(input, 255); + if (ratio !== config3.segmentation.ratio) + init3(config3); + const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + rgba = getRGBA(fgr, pha); + break; + case "alpha": + rgba = getRGBA(null, pha); + break; + case "foreground": + rgba = getRGBA(fgr, null); + break; + case "state": + rgba = getState(r1o); + break; + default: + rgba = tf35.tensor(0); + } + tf35.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; + return rgba; +} + +// src/segmentation/selfie.ts +var tf36 = __toESM(require_tfjs_esm()); +var model22; +async function load21(config3) { + if (!model22 || env.initial) + model22 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model22["modelUrl"]); + return model22; +} +async function predict21(input, config3) { + var _a; + if (!model22) + model22 = await load21(config3); + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf36.image.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t2.norm = tf36.div(t2.resize, constants.tf255); + t2.res = model22.execute(t2.norm); + t2.squeeze = tf36.squeeze(t2.res, [0]); + t2.alpha = tf36.image.resizeBilinear(t2.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t2.mul = tf36.mul(t2.alpha, constants.tf255); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf36.squeeze(input); + t2.concat = tf36.concat([t2.input, t2.mul], -1); + rgba = tf36.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf36.cast(t2.mul, "int32"); + break; + default: + rgba = tf36.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf36.dispose(t2[tensor6])); + return rgba; +} + +// src/models.ts +function validateModel(instance, model23, name) { + var _a, _b; + if (!model23) + return null; + if (!((_a = instance == null ? void 0 : instance.config) == null ? void 0 : _a.validateModels)) + return null; + const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"]; + const ignoreOps = ["biasadd", "fusedbatchnormv3", "matmul", "switch", "shape", "merge", "split", "broadcastto"]; + const ops = []; + const missing = []; + const url = model23["modelUrl"]; + const executor = model23["executor"]; + if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { + for (const kernel of Object.values(executor.graph.nodes)) { + const op = kernel.op.toLowerCase(); + if (!ops.includes(op)) + ops.push(op); + } + } else { + if (!executor && instance.config.debug) { + log("model not loaded", name); + } + } + for (const op of ops) { + if (!simpleOps.includes(op) && !ignoreOps.includes(op) && !instance.env.kernels.includes(op) && !instance.env.kernels.includes(op.replace("_", "")) && !instance.env.kernels.includes(op.replace("native", "")) && !instance.env.kernels.includes(op.replace("v2", ""))) { + missing.push(op); + } + } + if (instance.config.debug && missing.length > 0) + log("model validation failed:", name, missing); + return missing.length > 0 ? { name, missing, ops, url } : null; +} +var Models = class { + constructor(currentInstance) { + __publicField(this, "instance"); + __publicField(this, "models", {}); + this.models = {}; + this.instance = currentInstance; + } + stats() { + let totalSizeFromManifest = 0; + let totalSizeWeights = 0; + let totalSizeLoading = 0; + for (const m of Object.values(modelStats)) { + totalSizeFromManifest += m.sizeFromManifest; + totalSizeWeights += m.sizeLoadedWeights; + totalSizeLoading += m.sizeDesired; + } + const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0; + return { + numLoadedModels: Object.values(modelStats).length, + numDefinedModels: Object.keys(this.models).length, + percentageLoaded, + totalSizeFromManifest, + totalSizeWeights, + totalSizeLoading, + modelStats: Object.values(modelStats) + }; + } + reset() { + for (const model23 of Object.keys(this.models)) + this.models[model23] = null; + } + async load(instance) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A; + if (env.initial) + this.reset(); + if (instance) + this.instance = instance; + const m = {}; + m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; + m.antispoof = this.instance.config.face.enabled && ((_a = this.instance.config.face.antispoof) == null ? void 0 : _a.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; + m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; + m.faceres = this.instance.config.face.enabled && ((_c = this.instance.config.face.description) == null ? void 0 : _c.enabled) && !this.models.faceres ? load7(this.instance.config) : null; + m.emotion = this.instance.config.face.enabled && ((_d = this.instance.config.face.emotion) == null ? void 0 : _d.enabled) && !this.models.emotion ? load6(this.instance.config) : null; + m.iris = this.instance.config.face.enabled && ((_e = this.instance.config.face.iris) == null ? void 0 : _e.enabled) && !((_f = this.instance.config.face.attention) == null ? void 0 : _f.enabled) && !this.models.iris ? load4(this.instance.config) : null; + m.facemesh = this.instance.config.face.enabled && ((_g = this.instance.config.face.mesh) == null ? void 0 : _g.enabled) && !this.models.facemesh ? load5(this.instance.config) : null; + m.gear = this.instance.config.face.enabled && ((_h = this.instance.config.face["gear"]) == null ? void 0 : _h.enabled) && !this.models.gear ? load10(this.instance.config) : null; + m.ssrnetage = this.instance.config.face.enabled && ((_i = this.instance.config.face["ssrnet"]) == null ? void 0 : _i.enabled) && !this.models.ssrnetage ? load11(this.instance.config) : null; + m.ssrnetgender = this.instance.config.face.enabled && ((_j = this.instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; + m.mobilefacenet = this.instance.config.face.enabled && ((_k = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; + m.insightface = this.instance.config.face.enabled && ((_l = this.instance.config.face["insightface"]) == null ? void 0 : _l.enabled) && !this.models.insightface ? load14(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; + m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n = this.instance.config.body.modelPath) == null ? void 0 : _n.includes("efficientpose")) ? load2(this.instance.config) : null; + m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o = this.instance.config.body.modelPath) == null ? void 0 : _o.includes("movenet")) ? load17(this.instance.config) : null; + m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p = this.instance.config.body.modelPath) == null ? void 0 : _p.includes("posenet")) ? load19(this.instance.config) : null; + m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r = (_q = this.instance.config.hand.detector) == null ? void 0 : _q.modelPath) == null ? void 0 : _r.includes("handtrack")) ? loadDetect2(this.instance.config) : null; + m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s = this.instance.config.hand.detector) == null ? void 0 : _s.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton(this.instance.config) : null; + if ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect")) + [m.handpose, m.handskeleton] = !this.models.handpose ? await load15(this.instance.config) : [null, null]; + m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w = this.instance.config.object.modelPath) == null ? void 0 : _w.includes("centernet")) ? load(this.instance.config) : null; + m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x = this.instance.config.object.modelPath) == null ? void 0 : _x.includes("nanodet")) ? load18(this.instance.config) : null; + m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load21(this.instance.config) : null; + m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z = this.instance.config.segmentation.modelPath) == null ? void 0 : _z.includes("meet")) ? load16(this.instance.config) : null; + m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A = this.instance.config.segmentation.modelPath) == null ? void 0 : _A.includes("rvm")) ? load20(this.instance.config) : null; + await Promise.all([...Object.values(m)]); + for (const model23 of Object.keys(m)) + this.models[model23] = m[model23] || this.models[model23] || null; + } + list() { + const models3 = Object.keys(this.models).map((model23) => { + var _a; + return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a = this.models[model23]) == null ? void 0 : _a["modelUrl"] : null }; + }); + for (const m of models3) { + const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); + if (!stats) + continue; + m.size = modelStats[stats].sizeLoadedWeights; + m.url = modelStats[stats].url; + } + return models3; + } + loaded() { + const list = this.list(); + const loaded = list.filter((model23) => model23.loaded).map((model23) => model23.name); + return loaded; + } + validate() { + const missing = []; + for (const defined of Object.keys(this.models)) { + const model23 = this.models[defined]; + if (!model23) + continue; + const res = validateModel(this.instance, model23, defined); + if (res) + missing.push(res); + } + return missing; + } +}; + +// src/util/persons.ts +function join2(faces, bodies, hands, gestures, shape) { + var _a, _b, _c, _d, _e, _f; + let id = 0; + const persons = []; + for (const face4 of faces) { + const person2 = { id: id++, face: face4, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] }; + for (const body4 of bodies) { + if (face4.box[0] > body4.box[0] && face4.box[0] < body4.box[0] + body4.box[2] && face4.box[1] + face4.box[3] > body4.box[1] && face4.box[1] + face4.box[3] < body4.box[1] + body4.box[3]) { + person2.body = body4; + } + } + if (person2.body) { + for (const hand3 of hands) { + if (hand3.box[0] + hand3.box[2] > person2.body.box[0] && hand3.box[0] + hand3.box[2] < person2.body.box[0] + person2.body.box[2] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.left = hand3; + } + if (hand3.box[0] < person2.body.box[0] + person2.body.box[2] && hand3.box[0] > person2.body.box[0] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.right = hand3; + } + } + } + for (const gesture2 of gestures) { + if (gesture2["face"] !== void 0 && gesture2["face"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["iris"] !== void 0 && gesture2["iris"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a = person2.body) == null ? void 0 : _a.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_c = person2.hands.right) == null ? void 0 : _c.id)) + person2.gestures.push(gesture2); + } + const x = []; + const y = []; + const extractXY = (box) => { + if (box && box.length === 4) { + x.push(box[0], box[0] + box[2]); + y.push(box[1], box[1] + box[3]); + } + }; + extractXY(person2.face.box); + extractXY((_d = person2.body) == null ? void 0 : _d.box); + extractXY((_e = person2.hands.left) == null ? void 0 : _e.box); + extractXY((_f = person2.hands.right) == null ? void 0 : _f.box); + const minX = Math.min(...x); + const minY = Math.min(...y); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; + if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) + person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; + persons.push(person2); + } + return persons; +} + +// src/warmup.ts +var tf37 = __toESM(require_tfjs_esm()); + +// src/sample.ts +var face3 = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -269,7 +14114,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Bt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14683,559 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function s4(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(A=>A.blob()),n,o;switch(e.config.warmup){case"face":n=await t(Ft);break;case"body":case"full":n=await t(Bt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function A4(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+Ft;break;case"full":case"body":n="data:image/jpeg;base64,"+Bt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(v.Image)o=new v.Image;else return;o.onload=async()=>{let r=ee(o.naturalWidth,o.naturalHeight);if(!r)u("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(o,0,0);let A=await e.image(r,!0),a=A.tensor?await e.detect(A.tensor,e.config):void 0;t(a)}},n?o.src=n:t(void 0)})}async function a4(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(Ft):n=t(Bt);let o;if("node"in c0&&c0.getBackend()==="tensorflow"){let r=c0.node.decodeJpeg(n),s=c0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&u("Warmup tfjs-node not loaded");return o}async function i4(e){let t;return typeof createImageBitmap=="function"?t=await s4(e):typeof Image!="undefined"||v.Canvas!==void 0?t=await A4(e):t=await a4(e),t}async function l4(e){var a,l,c,d;if(!c0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=c0.getBackend(),n=c0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;c0.env().set("ENGINE_COMPILE_ONLY",!0);let o=c0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models).filter(([x,p])=>x!==null&&p!==null)){let x=(y==null?void 0:y.modelSignature)&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])==null?void 0:l.shape)?[...y.inputs[0].shape]:[1,64,64,3],p=(y==null?void 0:y.modelSignature)&&((d=(c=y==null?void 0:y.inputs)==null?void 0:c[0])==null?void 0:d.dtype)?y.inputs[0].dtype:"float32";for(let b=0;bc0.dispose(M)):c0.dispose(b)}catch(b){e.config.debug&&u("compile fail model:",i)}c0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&u("compile pass:",{models:r,kernels:s.length}),c0.env().set("ENGINE_COMPILE_ONLY",!1);let A=c0.engine().state.numTensors;A-o>0&&u("tensor leak:",A-o)}async function zo(e,t){await S2(e,!1);let n=g();return e.state="warmup",t&&(e.config=A0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?ue():new Promise(async o=>{await e.models.load(),await l4(e);let r=await i4(e),s=g();e.config.debug&&u("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var R2,F2,B2,Ht,Xe,g1=class{constructor(t){k(this,"version");k(this,"config");k(this,"result");k(this,"state");k(this,"process");k(this,"tf");k(this,"env",v);k(this,"draw",$2);k(this,"match",jt);k(this,"models");k(this,"events");k(this,"faceTriangulation");k(this,"faceUVMap");k(this,"performance");i2(this,R2,void 0);i2(this,F2,void 0);i2(this,B2,void 0);k(this,"analyze",(...t)=>{if(!fe(this,F2))return;let n=this.tf.engine().state.numTensors,o=fe(this,R2);k2(this,R2,n);let r=n-o;r!==0&&u(...t,r)});i2(this,Ht,t=>{if(!fe(this,B2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof Ae.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});k(this,"webcam",new q2);k(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});i2(this,Xe,{});let n=(Ae.version.tfjs||Ae.version_core).replace(/-(.*)/,"");qe.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,qe.modelBasePath=v.browser?"../models/":"file://models/",this.version=Jt,Object.defineProperty(this,"version",{value:Jt}),this.config=JSON.parse(JSON.stringify(qe)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=A0(this.config,t)),W1(this.config),this.tf=Ae,this.state="idle",k2(this,R2,0),k2(this,F2,!1),k2(this,B2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new D2(this),o5(),this.result=ue(),this.process={tensor:null,canvas:null},this.faceTriangulation=z3,this.faceUVMap=S3,Dt(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version["tfjs-core"]}`);let o=JSON.parse(JSON.stringify(this.env));delete o.kernels,delete o.initial,delete o.perfadd,this.config.debug&&u("environment:",o)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(qe)),this.config.backend=t,Yt(),v.initial=!0}validate(t){let n=Xt(qe,t||this.config);return n.length===0&&(this.config=A0(this.config,t)),n}now(){return g()}image(t,n=!1){return Z2(t,this.config,n)}async segmentation(t,n){var s,A,a;if(n&&(this.config=A0(this.config,n)),!this.config.segmentation.enabled)return null;let o=await Z2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Mo(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await eo(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await ko(o.tensor,this.config)),Ae.dispose(o.tensor),r}compare(t,n){return C1(this.config,t,n)}async init(){await S2(this,!0),await this.tf.ready(),Yt()}async load(t){this.state="load";let n=g(),o=Object.values(this.models).filter(A=>A).length;t&&(this.config=A0(this.config,t)),this.env.initial&&(await S2(this,!1)||u("error: backend check failed"),await Ae.ready(),this.env.browser&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("tf flags:",this.tf.ENV.flags))),await this.models.load(),this.env.initial&&this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(g()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return $n(t,this.config)}async warmup(t){let n=g(),o=await zo(this,t),r=g();return this.performance.warmup=Math.trunc(r-n),o}async profile(t,n){let o=await this.tf.profile(()=>this.detect(t,n)),r={},s=0;for(let a of o.kernels){let l=Number(a.kernelTimeMs)||0;r[a.name]?r[a.name]+=l:r[a.name]=l,s+=l}let A=[];Object.entries(r).forEach(a=>A.push({kernel:a[0],time:a[1],perc:0}));for(let a of A)a.perc=Math.round(1e3*a.time/s)/1e3,a.time=Math.round(1e3*a.time)/1e3;return A.sort((a,l)=>l.time-a.time),A.length=20,A}async detect(t,n){return this.state="detect",new Promise(async o=>{var b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;this.state="config";let r;this.config=A0(this.config,n),this.state="check";let s=fe(this,Ht).call(this,t);s&&(u(s,t),this.emit("error"),o(ue(s)));let A=g();await this.load(),r=g(),this.state="image";let a=await Z2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&u("could not convert input to tensor"),this.emit("error"),o(ue("could not convert input to tensor"));return}this.emit("image"),r=g(),this.config.skipAllowed=await L1(this.config,a.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Check Changed:");let l=[],c=[],d=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?Z5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=g(),l=this.config.face.enabled?await Z5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let y=this.config.body.maxDetected===-1?A0(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?f1(a.tensor,y):[]:(M=this.config.body.modelPath)!=null&&M.includes("blazepose")?c=this.config.body.enabled?i5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?m5(a.tensor,y):[]:(m=this.config.body.modelPath)!=null&&m.includes("movenet")&&(c=this.config.body.enabled?a1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=g(),(h=this.config.body.modelPath)!=null&&h.includes("posenet")?c=this.config.body.enabled?await f1(a.tensor,y):[]:(S=this.config.body.modelPath)!=null&&S.includes("blazepose")?c=this.config.body.enabled?await i5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await m5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await a1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let x=this.config.hand.maxDetected===-1?A0(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((t0=(q=this.config.hand.detector)==null?void 0:q.modelPath)!=null&&t0.includes("handdetect")?d=this.config.hand.enabled?K5(a.tensor,x):[]:($=(G=this.config.hand.detector)==null?void 0:G.modelPath)!=null&&$.includes("handtrack")&&(d=this.config.hand.enabled?_5(a.tensor,x):[]),this.performance.hand&&delete this.performance.hand):(r=g(),(R=(s0=this.config.hand.detector)==null?void 0:s0.modelPath)!=null&&R.includes("handdetect")?d=this.config.hand.enabled?await K5(a.tensor,x):[]:(b0=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&b0.includes("handtrack")&&(d=this.config.hand.enabled?await _5(a.tensor,x):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((U=this.config.object.modelPath)!=null&&U.includes("nanodet")?i=this.config.object.enabled?l1(a.tensor,this.config):[]:(g0=this.config.object.modelPath)!=null&&g0.includes("centernet")&&(i=this.config.object.enabled?x5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=g(),(f0=this.config.object.modelPath)!=null&&f0.includes("nanodet")?i=this.config.object.enabled?await l1(a.tensor,this.config):[]:(B=this.config.object.modelPath)!=null&&B.includes("centernet")&&(i=this.config.object.enabled?await x5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,c,d,i]=await Promise.all([l,c,d,i])),this.state="detect:gesture";let p=[];this.config.gesture.enabled&&(r=g(),p=[...En(l),...wn(c),...Sn(d),...zn(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(g()-A):Math.trunc(g()-A);let f=((X=this.process.tensor)==null?void 0:X.shape)||[0,0,0,0];this.result={face:l,body:c,hand:d,gesture:p,object:i,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return Eo(l,c,d,p,f)}},Ae.dispose(a.tensor),this.emit("detect"),this.state="idle",o(this.result)})}async sleep(t){return new Promise(n=>{setTimeout(n,t)})}async video(t,n=!0,o=0){n?(fe(this,Xe)[t.id]||(this.config.debug&&u("video start",t.id),fe(this,Xe)[t.id]=!0),!t.paused&&fe(this,Xe)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),fe(this,Xe)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&u("video stop",t.id),fe(this,Xe)[t.id]=!1)}};R2=new WeakMap,F2=new WeakMap,B2=new WeakMap,Ht=new WeakMap,Xe=new WeakMap;0&&(module.exports={Env,Human,defaults,draw,empty,env,match,models}); +2Q==`; + +// src/warmup.ts +async function warmupBitmap(instance) { + const b64toBlob = (base64, type = "application/octet-stream") => fetch(`data:${type};base64,${base64}`).then((res2) => res2.blob()); + let blob; + let res; + switch (instance.config.warmup) { + case "face": + blob = await b64toBlob(face3); + break; + case "body": + case "full": + blob = await b64toBlob(body3); + break; + default: + blob = null; + } + if (blob) { + const bitmap = await createImageBitmap(blob); + res = await instance.detect(bitmap, instance.config); + bitmap.close(); + } + return res; +} +async function warmupCanvas(instance) { + return new Promise((resolve) => { + let src; + switch (instance.config.warmup) { + case "face": + src = "data:image/jpeg;base64," + face3; + break; + case "full": + case "body": + src = "data:image/jpeg;base64," + body3; + break; + default: + src = ""; + } + let img; + if (typeof Image !== "undefined") + img = new Image(); + else if (env.Image) + img = new env.Image(); + else + return; + img.onload = async () => { + const canvas3 = canvas(img.naturalWidth, img.naturalHeight); + if (!canvas3) { + log("Warmup: Canvas not found"); + resolve(void 0); + } else { + const ctx = canvas3.getContext("2d"); + if (ctx) + ctx.drawImage(img, 0, 0); + const tensor6 = await instance.image(canvas3, true); + const res = tensor6.tensor ? await instance.detect(tensor6.tensor, instance.config) : void 0; + resolve(res); + } + }; + if (src) + img.src = src; + else + resolve(void 0); + }); +} +async function warmupNode(instance) { + const atob = (str) => Buffer.from(str, "base64"); + let img; + if (instance.config.warmup === "face") + img = atob(face3); + else + img = atob(body3); + let res; + if ("node" in tf37 && tf37.getBackend() === "tensorflow") { + const data = tf37["node"].decodeJpeg(img); + const expanded = tf37.expandDims(data, 0); + instance.tf.dispose(data); + res = await instance.detect(expanded, instance.config); + instance.tf.dispose(expanded); + } else { + if (instance.config.debug) + log("Warmup tfjs-node not loaded"); + } + return res; +} +async function runInference(instance) { + let res; + if (typeof createImageBitmap === "function") + res = await warmupBitmap(instance); + else if (typeof Image !== "undefined" || env.Canvas !== void 0) + res = await warmupCanvas(instance); + else + res = await warmupNode(instance); + return res; +} +async function runCompile(instance) { + var _a, _b, _c, _d; + if (!tf37.env().flagRegistry.ENGINE_COMPILE_ONLY) + return; + const backendType = tf37.getBackend(); + const webGLBackend = tf37.backend(); + if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { + return; + } + tf37.env().set("ENGINE_COMPILE_ONLY", true); + const numTensorsStart = tf37.engine().state.numTensors; + const compiledModels = []; + for (const [modelName, model23] of Object.entries(instance.models).filter(([key, val]) => key !== null && val !== null)) { + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d = (_c = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c[0]) == null ? void 0 : _d.dtype) ? model23.inputs[0].dtype : "float32"; + for (let dim = 0; dim < shape.length; dim++) { + if (shape[dim] === -1) + shape[dim] = dim === 0 ? 1 : 64; + } + const tensor6 = tf37.zeros(shape, dtype); + try { + const res = model23.execute(tensor6); + compiledModels.push(modelName); + if (Array.isArray(res)) + res.forEach((t2) => tf37.dispose(t2)); + else + tf37.dispose(res); + } catch (e) { + if (instance.config.debug) + log("compile fail model:", modelName); + } + tf37.dispose(tensor6); + } + const kernels = await webGLBackend["checkCompileCompletionAsync"](); + webGLBackend["getUniformLocations"](); + if (instance.config.debug) + log("compile pass:", { models: compiledModels, kernels: kernels.length }); + tf37.env().set("ENGINE_COMPILE_ONLY", false); + const numTensorsEnd = tf37.engine().state.numTensors; + if (numTensorsEnd - numTensorsStart > 0) + log("tensor leak:", numTensorsEnd - numTensorsStart); +} +async function warmup(instance, userConfig) { + await check(instance, false); + const t0 = now(); + instance.state = "warmup"; + if (userConfig) + instance.config = mergeDeep(instance.config, userConfig); + if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === "none") { + return empty(); + } + return new Promise(async (resolve) => { + await instance.models.load(); + await runCompile(instance); + const res = await runInference(instance); + const t1 = now(); + if (instance.config.debug) + log("warmup", instance.config.warmup, Math.round(t1 - t0), "ms"); + instance.emit("warmup"); + resolve(res); + }); +} + +// src/human.ts +var _numTensors, _analyzeMemoryLeaks, _checkSanity, _sanity, _loops; +var Human = class { + constructor(userConfig) { + __publicField(this, "version"); + __publicField(this, "config"); + __publicField(this, "result"); + __publicField(this, "state"); + __publicField(this, "process"); + __publicField(this, "tf"); + __publicField(this, "env", env); + __publicField(this, "draw", draw_exports); + __publicField(this, "match", match_exports); + __publicField(this, "models"); + __publicField(this, "events"); + __publicField(this, "faceTriangulation"); + __publicField(this, "faceUVMap"); + __publicField(this, "performance"); + __privateAdd(this, _numTensors, void 0); + __privateAdd(this, _analyzeMemoryLeaks, void 0); + __privateAdd(this, _checkSanity, void 0); + __publicField(this, "analyze", (...msg) => { + if (!__privateGet(this, _analyzeMemoryLeaks)) + return; + const currentTensors = this.tf.engine().state.numTensors; + const previousTensors = __privateGet(this, _numTensors); + __privateSet(this, _numTensors, currentTensors); + const leaked = currentTensors - previousTensors; + if (leaked !== 0) + log(...msg, leaked); + }); + __privateAdd(this, _sanity, (input) => { + if (!__privateGet(this, _checkSanity)) + return null; + if (!input) + return "input is not defined"; + if (this.env.node && !(input instanceof tf38.Tensor)) + return "input must be a tensor"; + try { + this.tf.getBackend(); + } catch (e) { + return "backend not loaded"; + } + return null; + }); + __publicField(this, "webcam", new WebCam()); + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) + this.events.dispatchEvent(new Event(event)); + }); + __privateAdd(this, _loops, {}); + const tfVersion = (tf38.version.tfjs || tf38.version_core).replace(/-(.*)/, ""); + config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; + config.modelBasePath = env.browser ? "../models/" : "file://models/"; + this.version = version2; + Object.defineProperty(this, "version", { value: version2 }); + this.config = JSON.parse(JSON.stringify(config)); + Object.seal(this.config); + this.config.cacheModels = typeof indexedDB !== "undefined"; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + setModelLoadOptions(this.config); + this.tf = tf38; + this.state = "idle"; + __privateSet(this, _numTensors, 0); + __privateSet(this, _analyzeMemoryLeaks, false); + __privateSet(this, _checkSanity, false); + this.performance = {}; + this.events = typeof EventTarget !== "undefined" ? new EventTarget() : void 0; + this.models = new Models(this); + init2(); + this.result = empty(); + this.process = { tensor: null, canvas: null }; + this.faceTriangulation = triangulation; + this.faceUVMap = uvmap; + validateModel(this, null, ""); + this.emit("create"); + if (this.config.debug || this.env.browser) + log(`version: ${this.version}`); + if (this.config.debug) + log(`tfjs version: ${this.tf.version["tfjs-core"]}`); + const envTemp = JSON.parse(JSON.stringify(this.env)); + delete envTemp.kernels; + delete envTemp.initial; + delete envTemp.perfadd; + if (this.config.debug) + log("environment:", envTemp); + } + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) + this.config = mergeDeep(this.config, userConfig); + return msgs; + } + now() { + return now(); + } + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + async segmentation(input, userConfig) { + var _a, _b, _c; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (!this.config.segmentation.enabled) + return null; + const processed = await process2(input, this.config); + if (!processed.tensor) + return null; + let tensor6 = null; + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) + tensor6 = await predict20(processed.tensor, this.config); + if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) + tensor6 = await predict16(processed.tensor, this.config); + if ((_c = this.config.segmentation.modelPath) == null ? void 0 : _c.includes("selfie")) + tensor6 = await predict21(processed.tensor, this.config); + tf38.dispose(processed.tensor); + return tensor6; + } + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + async load(userConfig) { + this.state = "load"; + const timeStamp = now(); + const count2 = Object.values(this.models.models).filter((model23) => model23).length; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (this.env.initial) { + if (!await check(this, false)) + log("error: backend check failed"); + await tf38.ready(); + if (this.env.browser) { + if (this.config.debug) + log("configuration:", this.config); + if (this.config.debug) + log("tf flags:", this.tf.ENV.flags); + } + } + await this.models.load(this); + if (this.env.initial && this.config.debug) + log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); + this.env.initial = false; + const loaded = Object.values(this.models.models).filter((model23) => model23).length; + if (loaded !== count2) { + this.models.validate(); + this.emit("load"); + } + const current = Math.trunc(now() - timeStamp); + if (current > (this.performance.loadModels || 0)) + this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current; + } + next(result = this.result) { + return calc2(result, this.config); + } + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + async profile(input, userConfig) { + const profile = await this.tf.profile(() => this.detect(input, userConfig)); + const kernels = {}; + let total = 0; + for (const kernel of profile.kernels) { + const ms = Number(kernel.kernelTimeMs) || 0; + if (kernels[kernel.name]) + kernels[kernel.name] += ms; + else + kernels[kernel.name] = ms; + total += ms; + } + const kernelArr = []; + Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1], perc: 0 })); + for (const kernel of kernelArr) { + kernel.perc = Math.round(1e3 * kernel.time / total) / 1e3; + kernel.time = Math.round(1e3 * kernel.time) / 1e3; + } + kernelArr.sort((a, b) => b.time - a.time); + kernelArr.length = 20; + return kernelArr; + } + async detect(input, userConfig) { + this.state = "detect"; + return new Promise(async (resolve) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u; + this.state = "config"; + let timeStamp; + this.config = mergeDeep(this.config, userConfig); + this.state = "check"; + const error = __privateGet(this, _sanity).call(this, input); + if (error) { + log(error, input); + this.emit("error"); + resolve(empty(error)); + } + const timeStart = now(); + await this.load(); + timeStamp = now(); + this.state = "image"; + const img = await process2(input, this.config); + this.process = img; + this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Get Image:"); + if (!img.tensor) { + if (this.config.debug) + log("could not convert input to tensor"); + this.emit("error"); + resolve(empty("could not convert input to tensor")); + return; + } + this.emit("image"); + timeStamp = now(); + this.config.skipAllowed = await skip(this.config, img.tensor); + this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; + if (!this.performance.totalFrames) + this.performance.totalFrames = 0; + if (!this.performance.cachedFrames) + this.performance.cachedFrames = 0; + this.performance.totalFrames++; + if (this.config.skipAllowed) + this.performance.cachedFrames++; + this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Check Changed:"); + let faceRes = []; + let bodyRes = []; + let handRes = []; + let objectRes = []; + this.state = "detect:face"; + if (this.config.async) { + faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : []; + if (this.performance.face) + delete this.performance.face; + } else { + timeStamp = now(); + faceRes = this.config.face.enabled ? await detectFace(this, img.tensor) : []; + this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) + faceRes = await faceRes; + this.analyze("Start Body:"); + this.state = "detect:body"; + const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet")) + bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; + else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; + else if ((_c = this.config.body.modelPath) == null ? void 0 : _c.includes("efficientpose")) + bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; + else if ((_d = this.config.body.modelPath) == null ? void 0 : _d.includes("movenet")) + bodyRes = this.config.body.enabled ? predict17(img.tensor, bodyConfig) : []; + if (this.performance.body) + delete this.performance.body; + } else { + timeStamp = now(); + if ((_e = this.config.body.modelPath) == null ? void 0 : _e.includes("posenet")) + bodyRes = this.config.body.enabled ? await predict19(img.tensor, bodyConfig) : []; + else if ((_f = this.config.body.modelPath) == null ? void 0 : _f.includes("blazepose")) + bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; + else if ((_g = this.config.body.modelPath) == null ? void 0 : _g.includes("efficientpose")) + bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; + else if ((_h = this.config.body.modelPath) == null ? void 0 : _h.includes("movenet")) + bodyRes = this.config.body.enabled ? await predict17(img.tensor, bodyConfig) : []; + this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Body:"); + this.analyze("Start Hand:"); + this.state = "detect:hand"; + const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_j = (_i = this.config.hand.detector) == null ? void 0 : _i.modelPath) == null ? void 0 : _j.includes("handdetect")) + handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; + else if ((_l = (_k = this.config.hand.detector) == null ? void 0 : _k.modelPath) == null ? void 0 : _l.includes("handtrack")) + handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; + if (this.performance.hand) + delete this.performance.hand; + } else { + timeStamp = now(); + if ((_n = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n.includes("handdetect")) + handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; + else if ((_p = (_o = this.config.hand.detector) == null ? void 0 : _o.modelPath) == null ? void 0 : _p.includes("handtrack")) + handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; + this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Hand:"); + this.analyze("Start Object:"); + this.state = "detect:object"; + if (this.config.async) { + if ((_q = this.config.object.modelPath) == null ? void 0 : _q.includes("nanodet")) + objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; + else if ((_r = this.config.object.modelPath) == null ? void 0 : _r.includes("centernet")) + objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; + if (this.performance.object) + delete this.performance.object; + } else { + timeStamp = now(); + if ((_s = this.config.object.modelPath) == null ? void 0 : _s.includes("nanodet")) + objectRes = this.config.object.enabled ? await predict18(img.tensor, this.config) : []; + else if ((_t = this.config.object.modelPath) == null ? void 0 : _t.includes("centernet")) + objectRes = this.config.object.enabled ? await predict2(img.tensor, this.config) : []; + this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Object:"); + this.state = "detect:await"; + if (this.config.async) + [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]); + this.state = "detect:gesture"; + let gestureRes = []; + if (this.config.gesture.enabled) { + timeStamp = now(); + gestureRes = [...face2(faceRes), ...body2(bodyRes), ...hand2(handRes), ...iris2(faceRes)]; + if (!this.config.async) + this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + else if (this.performance.gesture) + delete this.performance.gesture; + } + this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart); + const shape = ((_u = this.process.tensor) == null ? void 0 : _u.shape) || [0, 0, 0, 0]; + this.result = { + face: faceRes, + body: bodyRes, + hand: handRes, + gesture: gestureRes, + object: objectRes, + performance: this.performance, + canvas: this.process.canvas, + timestamp: Date.now(), + error: null, + width: shape[2], + height: shape[1], + get persons() { + return join2(faceRes, bodyRes, handRes, gestureRes, shape); + } + }; + tf38.dispose(img.tensor); + this.emit("detect"); + this.state = "idle"; + resolve(this.result); + }); + } + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + async video(element, run = true, delay = 0) { + if (run) { + if (!__privateGet(this, _loops)[element.id]) { + if (this.config.debug) + log("video start", element.id); + __privateGet(this, _loops)[element.id] = true; + } + if (!element.paused && __privateGet(this, _loops)[element.id] && element.readyState >= 2) + await this.detect(element); + if (delay > 0) + await this.sleep(delay); + if (__privateGet(this, _loops)[element.id]) + requestAnimationFrame(() => this.video(element, run, delay)); + } else { + if (this.config.debug) + log("video stop", element.id); + __privateGet(this, _loops)[element.id] = false; + } + } +}; +_numTensors = new WeakMap(); +_analyzeMemoryLeaks = new WeakMap(); +_checkSanity = new WeakMap(); +_sanity = new WeakMap(); +_loops = new WeakMap(); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + Env, + Human, + defaults, + draw, + empty, + env, + match, + models +}); diff --git a/dist/human.node.js b/dist/human.node.js index dcde41a3..674be4a3 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -4,7 +4,316 @@ author: ' */ -"use strict";var zo=Object.create;var P2=Object.defineProperty;var So=Object.getOwnPropertyDescriptor;var jo=Object.getOwnPropertyNames;var No=Object.getPrototypeOf,Io=Object.prototype.hasOwnProperty;var Oo=(e,t,n)=>t in e?P2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Lo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var n in t)P2(e,n,{get:t[n],enumerable:!0})},R1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of jo(t))!Io.call(e,r)&&r!==n&&P2(e,r,{get:()=>t[r],enumerable:!(o=So(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?zo(No(e)):{},R1(t||!e||!e.__esModule?P2(n,"default",{value:e,enumerable:!0}):n,e)),Co=e=>R1(P2({},"__esModule",{value:!0}),e);var k=(e,t,n)=>(Oo(e,typeof t!="symbol"?t+"":t,n),n),M1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var fe=(e,t,n)=>(M1(e,t,"read from private field"),n?n.call(e):t.get(e)),i2=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},k2=(e,t,n,o)=>(M1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var H=Lo((y4,Vt)=>{"use strict";var Ht=Object.defineProperty,Wo=Object.getOwnPropertyDescriptor,Do=Object.getOwnPropertyNames,Fo=Object.prototype.hasOwnProperty,Bo=(e,t)=>{for(var n in t)Ht(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Do(t))!Fo.call(e,r)&&r!==n&&Ht(e,r,{get:()=>t[r],enumerable:!(o=Wo(t,r))||o.enumerable});return e},Ho=(e,t,n)=>(Bt(e,t,"default"),n&&Bt(n,t,"default")),Go=e=>Bt(Ht({},"__esModule",{value:!0}),e),Gt={};Bo(Gt,{version:()=>Yo});Vt.exports=Go(Gt);Ho(Gt,require("@tensorflow/tfjs-node"),Vt.exports);var P1="4.0.0",Vo="4.0.0",Zo="4.0.0",Xo="4.0.0",qo="4.0.0",Uo="0.0.1-alpha.14",Yo={tfjs:P1,"tfjs-core":P1,"tfjs-converter":Vo,"tfjs-backend-cpu":Zo,"tfjs-backend-webgl":Xo,"tfjs-backend-wasm":qo,"tfjs-backend-webgpu":Uo}});var d4={};we(d4,{Env:()=>w2,Human:()=>b1,default:()=>b1,defaults:()=>qe,draw:()=>Q2,empty:()=>ue,env:()=>v,match:()=>zt,models:()=>h1});module.exports=Co(d4);var Ae=V(H());function u(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}function k1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var g=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Zt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Zt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&u("invalid configuration",o),o}function A0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=A0(s,A):n[r]=A}),n),{})}var qe={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"blazeface.json",rotation:!0,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,iouThreshold:.1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-full.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var I0=V(H());var N=V(H());var w1=` +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod3) => function __require() { + return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports; +}; +var __export = (target, all2) => { + for (var name in all2) + __defProp(target, name, { get: all2[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod3, isNodeMode, target) => (target = mod3 != null ? __create(__getProtoOf(mod3)) : {}, __copyProps( + isNodeMode || !mod3 || !mod3.__esModule ? __defProp(target, "default", { value: mod3, enumerable: true }) : target, + mod3 +)); +var __toCommonJS = (mod3) => __copyProps(__defProp({}, "__esModule", { value: true }), mod3); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all2) => { + for (var name in all2) + __defProp2(target, name, { get: all2[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __reExport = (target, mod3, secondTarget) => (__copyProps2(target, mod3, "default"), secondTarget && __copyProps2(secondTarget, mod3, "default")); + var __toCommonJS2 = (mod3) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod3); + var tf_node_exports = {}; + __export2(tf_node_exports, { + version: () => version7 + }); + module2.exports = __toCommonJS2(tf_node_exports); + __reExport(tf_node_exports, require("@tensorflow/tfjs-node"), module2.exports); + var version4 = "4.1.0"; + var version22 = "4.1.0"; + var version32 = "4.1.0"; + var version42 = "4.1.0"; + var version5 = "4.1.0"; + var version6 = "0.0.1-alpha.16"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + "tfjs-converter": version22, + "tfjs-backend-cpu": version32, + "tfjs-backend-webgl": version42, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 + }; + } +}); + +// src/human.ts +var human_exports = {}; +__export(human_exports, { + Env: () => Env, + Human: () => Human, + default: () => Human, + defaults: () => config, + draw: () => draw_exports, + empty: () => empty, + env: () => env, + match: () => match_exports, + models: () => models_exports2 +}); +module.exports = __toCommonJS(human_exports); +var tf38 = __toESM(require_tfjs_esm()); + +// src/util/util.ts +function log(...msg) { + const dt = new Date(); + const ts = `${dt.getHours().toString().padStart(2, "0")}:${dt.getMinutes().toString().padStart(2, "0")}:${dt.getSeconds().toString().padStart(2, "0")}.${dt.getMilliseconds().toString().padStart(3, "0")}`; + if (msg) + console.log(ts, "Human:", ...msg); +} +function join(folder, file) { + const separator = folder.endsWith("/") ? "" : "/"; + const skipJoin = file.startsWith(".") || file.startsWith("/") || file.startsWith("http:") || file.startsWith("https:") || file.startsWith("file:"); + const path = skipJoin ? `${file}` : `${folder}${separator}${file}`; + if (!path.toLocaleLowerCase().includes(".json")) + throw new Error(`modelpath error: expecting json file: ${path}`); + return path; +} +var now = () => { + if (typeof performance !== "undefined") + return performance.now(); + return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString()); +}; +function validate(defaults, config3, parent = "config", msgs = []) { + for (const key of Object.keys(config3)) { + if (typeof config3[key] === "object") { + validate(defaults[key], config3[key], key, msgs); + } else { + const defined = defaults && typeof defaults[key] !== "undefined"; + if (!defined) + msgs.push({ reason: "unknown property", where: `${parent}.${key} = ${config3[key]}` }); + const same = defaults && typeof defaults[key] === typeof config3[key]; + if (defined && !same) + msgs.push({ reason: "property type mismatch", where: `${parent}.${key} = ${config3[key]}`, expected: typeof defaults[key] }); + } + } + if (config3.debug && parent === "config" && msgs.length > 0) + log("invalid configuration", msgs); + return msgs; +} +function mergeDeep(...objects) { + const isObject = (obj) => obj && typeof obj === "object"; + return objects.reduce((prev, obj) => { + Object.keys(obj || {}).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + if (Array.isArray(pVal) && Array.isArray(oVal)) + prev[key] = pVal.concat(...oVal); + else if (isObject(pVal) && isObject(oVal)) + prev[key] = mergeDeep(pVal, oVal); + else + prev[key] = oVal; + }); + return prev; + }, {}); +} + +// src/config.ts +var config = { + backend: "", + modelBasePath: "", + cacheModels: true, + validateModels: true, + wasmPath: "", + wasmPlatformFetch: false, + debug: false, + async: true, + warmup: "full", + cacheSensitivity: 0.7, + skipAllowed: false, + deallocate: false, + flags: {}, + softwareKernels: false, + filter: { + enabled: true, + equalization: false, + width: 0, + height: 0, + flip: false, + return: true, + autoBrightness: true, + brightness: 0, + contrast: 0, + sharpness: 0, + blur: 0, + saturation: 0, + hue: 0, + negative: false, + sepia: false, + vintage: false, + kodachrome: false, + technicolor: false, + polaroid: false, + pixelate: 0 + }, + gesture: { + enabled: true + }, + face: { + enabled: true, + detector: { + modelPath: "blazeface.json", + rotation: true, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + iouThreshold: 0.1, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + modelPath: "iris.json" + }, + emotion: { + enabled: true, + minConfidence: 0.1, + skipFrames: 99, + skipTime: 1500, + modelPath: "emotion.json" + }, + description: { + enabled: true, + modelPath: "faceres.json", + skipFrames: 99, + skipTime: 3e3, + minConfidence: 0.1 + }, + antispoof: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "antispoof.json" + }, + liveness: { + enabled: false, + skipFrames: 99, + skipTime: 4e3, + modelPath: "liveness.json" + } + }, + body: { + enabled: true, + modelPath: "movenet-lightning.json", + maxDetected: -1, + minConfidence: 0.3, + skipFrames: 1, + skipTime: 200 + }, + hand: { + enabled: true, + rotation: true, + skipFrames: 99, + skipTime: 1e3, + minConfidence: 0.5, + iouThreshold: 0.2, + maxDetected: -1, + landmarks: true, + detector: { + modelPath: "handtrack.json" + }, + skeleton: { + modelPath: "handlandmark-full.json" + } + }, + object: { + enabled: false, + modelPath: "centernet.json", + minConfidence: 0.2, + iouThreshold: 0.4, + maxDetected: 10, + skipFrames: 99, + skipTime: 2e3 + }, + segmentation: { + enabled: false, + modelPath: "rvm.json", + ratio: 0.5, + mode: "default" + } +}; + +// src/util/env.ts +var tf3 = __toESM(require_tfjs_esm()); + +// src/image/image.ts +var tf2 = __toESM(require_tfjs_esm()); + +// src/image/imagefxshaders.ts +var vertexIdentity = ` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -14,7 +323,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var E1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +336,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14]; gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19]; } -`,z1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +349,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,S1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +363,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,j1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +387,8 @@ gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794; gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265; } -`,N1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +410,6035 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var Xt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},qt=class{constructor(t,n,o){k(this,"uniform",{});k(this,"attribute",{});k(this,"gl");k(this,"id");k(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(u(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(u("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){u("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){u(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Xt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Xt(n,"uniform",this.uniform),Xt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function I1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=ee(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){u("filter: cannot get webgl context");return}this.gl=i;function y(T,m){if(!(T===l.width&&m===l.height)){if(l.width=T,l.height=m,!A){let h=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,h,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,m){let h=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,h);let S=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,S);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,m,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:h,texture:P}}function p(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let m=null,h=null,S=!1;e===0?m=t:m=p(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(h=null,S=e%2===0):(o=(o+1)%2,h=p(o).fbo||null),i.bindTexture(i.TEXTURE_2D,m),i.bindFramebuffer(i.FRAMEBUFFER,h),i.uniform1f(a.uniform.flipY,S?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function b(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new qt(i,w1,T),!a)return u("filter: could not get webgl program"),null;let m=Float32Array.BYTES_PER_ELEMENT,h=4*m;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,h,0*m),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,h,2*m),c[T]=a,a}let M={colorMatrix:T=>{let m=new Float32Array(T);m[4]/=255,m[9]/=255,m[14]/=255,m[19]/=255;let h=m[18]===1&&m[3]===0&&m[8]===0&&m[13]===0&&m[15]===0&&m[16]===0&&m[17]===0&&m[19]===0?z1:E1,S=b(h);!S||(i.uniform1fv(S.uniform.m,m),f())},brightness:T=>{let m=(T||0)+1;M.colorMatrix([m,0,0,0,0,0,m,0,0,0,0,0,m,0,0,0,0,0,1,0])},saturation:T=>{let m=(T||0)*2/3+1,h=(m-1)*-.5;M.colorMatrix([m,h,h,0,0,h,m,h,0,0,h,h,m,0,0,0,0,0,1,0])},desaturate:()=>{M.saturation(-1)},contrast:T=>{let m=(T||0)+1,h=-128*(m-1);M.colorMatrix([m,0,0,0,h,0,m,0,0,h,0,0,m,0,h,0,0,0,1,0])},negative:()=>{M.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let m=Math.cos(T),h=Math.sin(T),S=.213,P=.715,I=.072;M.colorMatrix([S+m*(1-S)+h*-S,P+m*-P+h*-P,I+m*-I+h*(1-I),0,0,S+m*-S+h*.143,P+m*(1-P)+h*.14,I+m*-I+h*-.283,0,0,S+m*-S+h*-(1-S),P+m*-P+h*P,I+m*(1-I)+h*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{M.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{M.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{M.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{M.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{M.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},technicolor:()=>{M.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},polaroid:()=>{M.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{M.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let m=new Float32Array(T),h=1/l.width,S=1/l.height,P=b(N1);!P||(i.uniform1fv(P.uniform.m,m),i.uniform2f(P.uniform.px,h,S),f())},detectEdges:()=>{M.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{M.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{M.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let m=T||1;M.convolution.call(this,[0,-1*m,0,-1*m,1+4*m,-1*m,0,-1*m,0])},emboss:T=>{let m=T||1;M.convolution.call(this,[-2*m,-1*m,0,-1*m,1,1*m,0,1*m,2*m])},blur:T=>{let m=T/7/l.width,h=T/7/l.height,S=b(j1);!S||(i.uniform2f(S.uniform.px,0,h),f(x.INTERMEDIATE),i.uniform2f(S.uniform.px,m,0),f())},pixelate:T=>{let m=T/l.width,h=T/l.height,S=b(S1);!S||(i.uniform2f(S.uniform.size,m,h),f())}};this.add=function(T){let m=Array.prototype.slice.call(arguments,1),h=M[T];s.push({func:h,args:m})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let m=0;mx.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[Y.sub(n[0],o[0]),Y.sub(n[1],o[1]),Y.sub(n[2],o[2])],i=[Y.sub(r[0],o[0]),Y.sub(r[1],o[1]),Y.sub(r[2],o[2])],y=[Y.mul(x[0],l),Y.mul(x[1],l),Y.mul(x[2],l)],d=Y.stack([y[0],y[1],y[2]],2);c=Y.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),Y.dispose([...x,...i,...y])}else c=Y.expandDims(t,0);return Y.dispose([...n,...o,...r,n,t,e]),c}var B2=3840,v0=null,R0=null,l2=null,e0,K0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function Ut(){K0.inputSum=0,K0.cacheDiff=1,K0.sumMethod=0,K0.inputTensor=void 0}function ee(e,t){let n;if(v.browser)if(v.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else{if(typeof document=="undefined")throw new Error("canvas error: attempted to run in browser but DOM is not defined");n=document.createElement("canvas"),n.width=e,n.height=t}else typeof v.Canvas!="undefined"?n=new v.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function H2(e,t){let n=t||ee(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function G2(e,t,n=!0){var y,d,p;if(!e)return t.debug&&u("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof v.Canvas!="undefined"&&e instanceof v.Canvas)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type is not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let b=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(b,0),N.dispose(b)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let b=N.cast(f,"float32");N.dispose(f),f=b}return{tensor:f,canvas:t.filter.return?R0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&u("input stream is not ready"),{tensor:null,canvas:v0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&u("cannot determine input dimensions"),{tensor:null,canvas:v0};let s=o,A=r;if(s>B2&&(s=B2,A=Math.trunc(s*r/o)),A>B2&&(A=B2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!v0||v0.width!==s||v0.height!==A)&&(v0=ee(s,A));let a=v0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,v0.width,v0.height),(!R0||v0.width!==R0.width||v0.height!==R0.height)&&(R0=ee(v0.width,v0.height)),t.filter.enabled&&v.webgl.supported?(e0||(e0=v.browser?new I1:null),v.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((p=e0.get())==null?void 0:p.length)>1?R0=e0.apply(v0):R0=e0.draw(v0)):(t.debug&&u("input process error: cannot initialize filters"),v.webgl.supported=!1,t.filter.enabled=!1,H2(v0,R0))):(H2(v0,R0),e0&&(e0=null),v.filter=!!e0),!n)return{tensor:null,canvas:R0};if(!R0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(v.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!l2||R0.width!==l2.width||R0.height!==l2.height)&&(l2=ee(R0.width,R0.height)),N.browser&&v.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(R0):(l2=H2(R0),l=N.browser.fromPixels(l2));else{let M=H2(R0).getContext("2d").getImageData(0,0,s,A);c=M.data.length/s/A;let T=new Uint8Array(M.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await F2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),b=await f.data();t.filter.brightness=b[0]>1?1-b[0]/255:1-b[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?R0:null}}async function O1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!K0.inputTensor)K0.inputTensor=N.clone(t);else if(K0.inputTensor.shape[1]!==t.shape[1]||K0.inputTensor.shape[2]!==t.shape[2])N.dispose(K0.inputTensor),K0.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,K0.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([K0.inputTensor,o.diff,o.squared,o.sum]),K0.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function L1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||u("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||u("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var w2=class{constructor(){k(this,"browser");k(this,"node");k(this,"worker");k(this,"platform","");k(this,"agent","");k(this,"backends",[]);k(this,"initial");k(this,"filter");k(this,"tfjs");k(this,"offscreen");k(this,"perfadd",!1);k(this,"tensorflow",{version:void 0,gpu:void 0});k(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});k(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});k(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});k(this,"cpu",{model:void 0,flags:[]});k(this,"kernels",[]);k(this,"Canvas");k(this,"Image");k(this,"ImageData");if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:I0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"){let t=navigator.userAgent.match(/\(([^()]+)\)/g);if(t!=null&&t[0]){let n=t[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=navigator.userAgent.replace(t[0],""),this.platform[1]&&(this.agent=this.agent.replace(t[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}async updateBackend(){this.backends=Object.keys(I0.engine().registryFactory);try{this.tensorflow={version:I0.backend().binding?I0.backend().binding.TF_Version:void 0,gpu:I0.backend().binding?I0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await I0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await I0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=ee(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=I0.getKernelsForBackend(I0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}},v=new w2;var Z2=class{constructor(){k(this,"config");k(this,"element");k(this,"stream");k(this,"devices",[]);k(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});k(this,"start",async t=>{if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let r=document.getElementById(t.element);if(r&&r instanceof HTMLVideoElement)this.element=r;else{this.config.debug&&u("webcam","cannot get dom element",t.element);return}}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else{this.config.debug&&u("webcam","unknown dom element",t.element);return}else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none",width:{ideal:this.config.width>0?this.config.width:window.innerWidth},height:{ideal:this.config.height>0?this.config.height:window.innerHeight}}};if(this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&u("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&u("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices)){this.config.debug&&u("webcam","no devices");return}try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(r){u("webcam",r);return}if(!this.stream){this.config.debug&&u("webcam","no stream");return}this.element.srcObject=this.stream,await new Promise(r=>{this.element?this.element.onloadeddata=()=>r(!0):r(!1)}),await this.element.play(),this.config.debug&&u("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities})});k(this,"pause",()=>{this.element&&this.element.pause()});k(this,"play",async()=>{this.element&&await this.element.play()});k(this,"stop",()=>{this.config.debug&&u("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(!!this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(!!this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(!!this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var c2=V(H());var Yt={};we(Yt,{age:()=>cr,"anti-spoofing":()=>Vr,antispoof:()=>_o,blazeface:()=>$o,"blazeface-back":()=>dr,"blazeface-front":()=>xr,"blazepose-detect":()=>Gr,"blazepose-detector2d":()=>yr,"blazepose-detector3d":()=>fr,"blazepose-full":()=>mr,"blazepose-heavy":()=>pr,"blazepose-lite":()=>ur,centernet:()=>er,default:()=>ns,efficientpose:()=>hr,"efficientpose-i-lite":()=>Zr,"efficientpose-ii-lite":()=>Xr,"efficientpose-iv":()=>qr,emotion:()=>tr,faceboxes:()=>br,facemesh:()=>nr,"facemesh-attention":()=>Tr,"facemesh-attention-alt":()=>gr,"facemesh-detection-full":()=>vr,"facemesh-detection-short":()=>Rr,"facemesh-orig":()=>Mr,faceres:()=>or,"faceres-deep":()=>Pr,gear:()=>kr,gender:()=>Er,"gender-ssrnet-imdb":()=>wr,handdetect:()=>zr,"handlandmark-full":()=>rr,"handlandmark-lite":()=>Sr,"handlandmark-sparse":()=>jr,handskeleton:()=>Nr,handtrack:()=>sr,"insightface-efficientnet-b0":()=>Ur,"insightface-ghostnet-strides1":()=>Yr,"insightface-ghostnet-strides2":()=>Kr,"insightface-mobilenet-emore":()=>Jr,"insightface-mobilenet-swish":()=>Qr,iris:()=>Ar,liveness:()=>ar,meet:()=>Ir,mobileface:()=>Or,mobilefacenet:()=>Lr,models:()=>ir,"movenet-lightning":()=>lr,"movenet-multipose":()=>Cr,"movenet-thunder":()=>Wr,nanodet:()=>Dr,"nanodet-e":()=>_r,"nanodet-g":()=>$r,"nanodet-m":()=>es,"nanodet-t":()=>ts,posenet:()=>Fr,rvm:()=>Br,selfie:()=>Hr});var _o=853098,$o=538928,er=4030290,tr=820516,nr=1477958,or=6978814,rr=5431368,sr=2964837,Ar=2599092,ar=592976,ir=0,lr=4650216,cr=161240,dr=538928,xr=402048,yr=7499400,fr=5928856,mr=6338290,pr=27501554,ur=2725490,hr=5651240,br=2013002,gr=2387598,Tr=2382414,vr=1026192,Rr=201268,Mr=2955780,Pr=13957620,kr=1498916,wr=161236,Er=201808,zr=3515612,Sr=2023432,jr=5286322,Nr=5502280,Ir=372228,Or=2183192,Lr=5171976,Cr=9448838,Wr=12477112,Dr=7574558,Fr=5032780,Br=3739355,Hr=212886,Gr=5928804,Vr=853098,Zr=2269064,Xr=5651240,qr=25643252,Ur=13013224,Yr=8093408,Kr=8049584,Jr=6938536,Qr=12168584,_r=12319156,$r=7574558,es=1887474,ts=5294216,ns={antispoof:_o,blazeface:$o,centernet:er,emotion:tr,facemesh:nr,faceres:or,"handlandmark-full":rr,handtrack:sr,iris:Ar,liveness:ar,models:ir,"movenet-lightning":lr,age:cr,"blazeface-back":dr,"blazeface-front":xr,"blazepose-detector2d":yr,"blazepose-detector3d":fr,"blazepose-full":mr,"blazepose-heavy":pr,"blazepose-lite":ur,efficientpose:hr,faceboxes:br,"facemesh-attention-alt":gr,"facemesh-attention":Tr,"facemesh-detection-full":vr,"facemesh-detection-short":Rr,"facemesh-orig":Mr,"faceres-deep":Pr,gear:kr,"gender-ssrnet-imdb":wr,gender:Er,handdetect:zr,"handlandmark-lite":Sr,"handlandmark-sparse":jr,handskeleton:Nr,meet:Ir,mobileface:Or,mobilefacenet:Lr,"movenet-multipose":Cr,"movenet-thunder":Wr,nanodet:Dr,posenet:Fr,rvm:Br,selfie:Hr,"blazepose-detect":Gr,"anti-spoofing":Vr,"efficientpose-i-lite":Zr,"efficientpose-ii-lite":Xr,"efficientpose-iv":qr,"insightface-efficientnet-b0":Ur,"insightface-ghostnet-strides1":Yr,"insightface-ghostnet-strides2":Kr,"insightface-mobilenet-emore":Jr,"insightface-mobilenet-swish":Qr,"nanodet-e":_r,"nanodet-g":$r,"nanodet-m":es,"nanodet-t":ts};var O0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},E0={};async function os(e,t){return O0.debug&&u("load model fetch:",e,t),fetch(e,t)}function C1(e){O0.cacheModels=e.cacheModels,O0.verbose=e.debug,O0.modelBasePath=e.modelBasePath}async function O(e){var c,x,i,y;let t=k1(O0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;E0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:Yt[o],inCache:!1,url:""},O0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=O0.cacheSupported&&O0.cacheModels?await c2.io.listModels():{}}catch(d){O0.cacheSupported=!1}E0[o].inCache=O0.cacheSupported&&O0.cacheModels&&Object.keys(s).includes(r),E0[o].url=E0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,p)=>os(d,p)},a=new c2.GraphModel(E0[o].url,A),l=!1;try{a.findIOHandler(),O0.debug&&u("model load handler:",a.handler)}catch(d){u("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;E0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await c2.loadGraphModel(E0[o].inCache?r:t,A),E0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,O0.verbose&&u("load:",{model:o,url:a.modelUrl,bytes:E0[o].sizeLoadedWeights}),l=!0}catch(d){u("error loading model:",t,d)}if(l&&O0.cacheModels&&O0.cacheSupported&&!E0[o].inCache)try{let d=await a.save(r);O0.debug&&u("model saved:",r,d)}catch(d){u("error saving model:",t,d)}return a}var Kt="3.0.0";var E=V(H());var m0=V(H());var n0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function As(){let e=n0.gl;!e||(n0.extensions=e.getSupportedExtensions())}function W1(e){var t;if(e.config.backend==="humangl"&&(n0.name in m0.engine().registry&&!((t=n0==null?void 0:n0.gl)!=null&&t.getParameter(n0.gl.VERSION))&&(u("humangl error: backend invalid context"),e.models.reset()),!m0.findBackend(n0.name))){try{n0.canvas=ee(100,100)}catch(r){u("humangl error: cannot create canvas:",r);return}try{if(n0.gl=n0.canvas.getContext("webgl2",n0.webGLattr),!n0.gl){u("humangl error: cannot get webgl context");return}if(!n0.gl.getParameter(n0.gl.VERSION).includes("2.0")){u("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}n0.canvas&&(n0.canvas.addEventListener("webglcontextlost",s=>{throw u("humangl error:",s.type),u("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),n0.canvas.addEventListener("webglcontextrestored",s=>{u("humangl error: context restored:",s)}),n0.canvas.addEventListener("webglcontextcreationerror",s=>{u("humangl error: context create:",s)}))}catch(r){u("humangl error: cannot get webgl context:",r);return}try{m0.setWebGLContext(2,n0.gl)}catch(r){u("humangl error: cannot set webgl context:",r);return}try{let r=new m0.GPGPUContext(n0.gl);m0.registerBackend(n0.name,()=>new m0.MathBackendWebGL(r),n0.priority)}catch(r){u("humangl error: cannot register webgl backend:",r);return}try{m0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:n0.name};m0.registerKernel(A)})}catch(r){u("humangl error: cannot update webgl backend registration:",r);return}try{m0.env().flagRegistry.WEBGL_VERSION&&m0.env().set("WEBGL_VERSION",2)}catch(r){u("humangl error: cannot set WebGL backend flags:",r);return}As();let n=m0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&u("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):u("humangl error: no current gl context:",o,n0.gl)}}var Ee=V(H()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function D1(){C.tf255=Ee.scalar(255,"float32"),C.tf1=Ee.scalar(1,"float32"),C.tf2=Ee.scalar(2,"float32"),C.tf05=Ee.scalar(.5,"float32"),C.tf127=Ee.scalar(127.5,"float32"),C.rgb=Ee.tensor1d([.2989,.587,.114],"float32")}async function ls(){return await v.updateBackend(),v.browser?v.webgpu.supported&&v.webgpu.backend?"webgpu":v.webgl.supported&&v.webgl.backend?"webgl":v.wasm.supported&&v.wasm.backend?"wasm":"cpu":"tensorflow"}function cs(e){let t=[];if(!v.kernels.includes("mod")){let n={kernelName:"Mod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.sub(o.inputs.a,E.mul(E.div(o.inputs.a,o.inputs.b),o.inputs.b)))};E.registerKernel(n),v.kernels.push("mod"),t.push("mod")}if(!v.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>E.add(E.mul(E.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),E.mod(o.inputs.a,o.inputs.b)))};E.registerKernel(n),v.kernels.push("floormod"),t.push("floormod")}if(!v.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:E.getBackend(),kernelFunc:o=>E.tidy(()=>{let r=E.getBackend();E.setBackend("cpu");let s=E.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return E.setBackend(r),s})};E.registerKernel(n),v.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&u("registered kernels:",t)}var F1={};async function E2(e,t=!1){var n;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await ls()),t||v.initial||e.config.backend&&e.config.backend.length>0&&E.getBackend()!==e.config.backend){let o=g();if(e.config.backend&&e.config.backend.length>0){if(typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&u("running inside web worker"),v.browser&&e.config.backend==="tensorflow"&&(e.config.debug&&u("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),v.node&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&(e.config.debug&&u(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),v.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")u("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let s=await navigator.gpu.requestAdapter();if(e.config.debug&&u("enumerated webgpu adapter:",s),!s)u("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let A="requestAdapterInfo"in s?await s.requestAdapterInfo():void 0;u("webgpu adapter info:",A)}}let r=Object.keys(E.engine().registryFactory);if(e.config.backend==="humangl"&&!r.includes("humangl")&&(W1(e),r=Object.keys(E.engine().registryFactory)),e.config.debug&&u("available backends:",r),r.includes(e.config.backend)||(u(`error: backend ${e.config.backend} not found in registry`),e.config.backend=v.node?"tensorflow":"webgl",e.config.debug&&u(`override: setting backend ${e.config.backend}`)),e.config.debug&&u("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(E.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&E.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&u("wasm path:",e.config.wasmPath),typeof E.setWasmPaths!="undefined")E.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let s=!1,A=!1;try{s=await E.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),A=await E.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&u(`wasm execution: ${A?"simd":"no simd"} ${s?"multithreaded":"singlethreaded"}`),e.config.debug&&!A&&u("warning: wasm simd support is not enabled")}catch(a){u("wasm detection failed")}}try{await E.setBackend(e.config.backend),await E.ready()}catch(s){return u("error: cannot set backend:",e.config.backend,s),!1}e.config.debug&&(F1=JSON.parse(JSON.stringify(E.env().flags)))}if((E.getBackend()==="humangl"||E.getBackend()==="webgl")&&(E.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&E.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),E.env().flagRegistry.WEBGL_EXP_CONV&&E.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(u("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),E.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),E.getBackend(),e.config.debug){let r=E.env().flags,s={};for(let A of Object.keys(r))F1[A]!==r[A]&&(s[A]=r[A]);e.config.debug&&Object.keys(s).length>0&&u("backend:",E.getBackend(),"flags:",s)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&u("flags:",e.config.flags);for(let[r,s]of Object.entries(e.config.flags))E.env().set(r,s)}E.enableProdMode(),D1(),e.performance.initBackend=Math.trunc(g()-o),e.config.backend=E.getBackend(),await v.updateBackend(),cs(e.config),v.initial=!1}return!0}function X2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&u("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};E.registerKernel(o)}v.kernels=E.getKernelsForBackend(E.getBackend()).map(n=>n.kernelName.toLowerCase())}var Q2={};we(Q2,{all:()=>Hs,body:()=>U2,canvas:()=>Bs,face:()=>q2,gesture:()=>J2,hand:()=>Y2,init:()=>n5,object:()=>K2,options:()=>d0,person:()=>Fs});var J0=e=>{if(!e)u("draw error: invalid canvas");else if(!e.getContext)u("draw error: canvas context not defined");else{let t=e.getContext("2d");if(!t)u("draw error: cannot get canvas context");else return t}return null},Ue=e=>Math.round(e*180/Math.PI),_=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Ye=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function te(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` -`).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function be(e,t,n,o,r){e.fillStyle=Ye(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function me(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function Jt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Ye(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function H1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){Jt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oz2[e]),L4=xs.map(e=>z2[e]),C4=ys.map(e=>z2[e]);function ze(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var fs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],us=[[474,475],[475,476],[476,477],[477,474]],hs=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],bs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],gs=[[469,470],[470,471],[471,472],[472,469]],Ts=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],W4={lips:ze(fs),leftEye:ze(ms),leftEyebrow:ze(ps),leftIris:ze(us),rightEye:ze(hs),rightEyebrow:ze(bs),rightIris:ze(gs),faceOval:ze(Ts)};var vs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Rs=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ms=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ps=[[474,475],[475,476],[476,477],[477,474]],ks=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ws=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Es=[[469,470],[470,471],[471,472],[472,469]],zs=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Se(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Ss={lips:Se(vs),leftEye:Se(Rs),leftEyebrow:Se(Ms),leftIris:Se(Ps),rightEye:Se(ks),rightEyebrow:Se(ws),rightIris:Se(Es),faceOval:Se(zs)},js=Object.entries(Ss).map(([e,t])=>t.map(n=>[n,e])).flat(),D4=new Map(js),S2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Qe=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],_e=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var K;function Ns(e,t){var o,r,s,A,a,l,c,x,i;if(!K.drawLabels||((o=K.faceLabels)==null?void 0:o.length)===0)return;let n=K.faceLabels.slice();if(e.score&&(n=_(n,"[score]",100*e.score)),e.gender&&(n=_(n,"[gender]",e.gender)),e.genderScore&&(n=_(n,"[genderScore]",100*e.genderScore)),e.age&&(n=_(n,"[age]",e.age)),e.distance&&(n=_(n,"[distance]",100*e.distance)),e.real&&(n=_(n,"[real]",100*e.real)),e.live&&(n=_(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);y.length>3&&(y.length=3),n=_(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=_(n,"[roll]",Ue(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=_(n,"[yaw]",Ue(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=_(n,"[pitch]",Ue(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=_(n,"[gaze]",Ue(e.rotation.gaze.bearing))),te(t,n,e.box[0],e.box[1],K)}function Is(e,t){var n,o,r,s;if(((n=e.annotations)==null?void 0:n.leftEyeIris)&&((o=e.annotations)==null?void 0:o.leftEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}if(((r=e.annotations)==null?void 0:r.rightEyeIris)&&((s=e.annotations)==null?void 0:s.rightEyeIris[0])){t.strokeStyle=K.useDepth?"rgba(255, 200, 255, 0.3)":K.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),K.fillPolygons&&(t.fillStyle=K.useDepth?"rgba(255, 255, 200, 0.3)":K.color,t.fill())}}function Os(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Ue(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Ue(e.rotation.angle.pitch)/90,s=new Path2D(` - M ${e.box[0]+e.box[2]/2} ${e.box[1]} +`; + +// src/image/imagefx.ts +var collect = (source, prefix, collection) => { + const r = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r, (match2, name) => { + collection[name] = 0; + return match2; + }); +}; +var GLProgram = class { + constructor(gl, vertexSource, fragmentSource) { + __publicField(this, "uniform", {}); + __publicField(this, "attribute", {}); + __publicField(this, "gl"); + __publicField(this, "id"); + __publicField(this, "compile", (source, type) => { + const shader = this.gl.createShader(type); + if (!shader) { + log("filter: could not create shader"); + return null; + } + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) { + log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || "unknown"}`); + return null; + } + return shader; + }); + this.gl = gl; + const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER); + const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER); + this.id = this.gl.createProgram(); + if (!vertexShader || !fragmentShader) + return; + if (!this.id) { + log("filter: could not create webgl program"); + return; + } + this.gl.attachShader(this.id, vertexShader); + this.gl.attachShader(this.id, fragmentShader); + this.gl.linkProgram(this.id); + if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) { + log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || "unknown"}`); + return; + } + this.gl.useProgram(this.id); + collect(vertexSource, "attribute", this.attribute); + for (const a in this.attribute) + this.attribute[a] = this.gl.getAttribLocation(this.id, a); + collect(vertexSource, "uniform", this.uniform); + collect(fragmentSource, "uniform", this.uniform); + for (const u in this.uniform) + this.uniform[u] = this.gl.getUniformLocation(this.id, u); + } +}; +function GLImageFilter() { + let drawCount = 0; + let sourceTexture = null; + let lastInChain = false; + let currentFramebufferIndex = -1; + let tempFramebuffers = [null, null]; + let filterChain = []; + let vertexBuffer = null; + let currentProgram = null; + const fxcanvas = canvas(100, 100); + const shaderProgramCache = {}; + const DRAW = { INTERMEDIATE: 1 }; + const gl = fxcanvas.getContext("webgl"); + if (!gl) { + log("filter: cannot get webgl context"); + return; + } + this.gl = gl; + function resize(width, height) { + if (width === fxcanvas.width && height === fxcanvas.height) + return; + fxcanvas.width = width; + fxcanvas.height = height; + if (!vertexBuffer) { + const vertices = new Float32Array([-1, -1, 0, 1, 1, -1, 1, 1, -1, 1, 0, 0, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0]); + vertexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + } + gl.viewport(0, 0, fxcanvas.width, fxcanvas.height); + tempFramebuffers = [null, null]; + } + function createFramebufferTexture(width, height) { + const fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + const renderbuffer = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return { fbo, texture }; + } + function getTempFramebuffer(index2) { + tempFramebuffers[index2] = tempFramebuffers[index2] || createFramebufferTexture(fxcanvas.width, fxcanvas.height); + return tempFramebuffers[index2]; + } + function draw(flags = 0) { + if (!currentProgram) + return; + let source = null; + let target = null; + let flipY = false; + if (drawCount === 0) + source = sourceTexture; + else + source = getTempFramebuffer(currentFramebufferIndex).texture || null; + drawCount++; + if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { + target = null; + flipY = drawCount % 2 === 0; + } else { + currentFramebufferIndex = (currentFramebufferIndex + 1) % 2; + target = getTempFramebuffer(currentFramebufferIndex).fbo || null; + } + gl.bindTexture(gl.TEXTURE_2D, source); + gl.bindFramebuffer(gl.FRAMEBUFFER, target); + gl.uniform1f(currentProgram.uniform["flipY"], flipY ? -1 : 1); + gl.drawArrays(gl.TRIANGLES, 0, 6); + } + function compileShader(fragmentSource) { + if (shaderProgramCache[fragmentSource]) { + currentProgram = shaderProgramCache[fragmentSource]; + gl.useProgram((currentProgram ? currentProgram.id : null) || null); + return currentProgram; + } + currentProgram = new GLProgram(gl, vertexIdentity, fragmentSource); + if (!currentProgram) { + log("filter: could not get webgl program"); + return null; + } + const floatSize = Float32Array.BYTES_PER_ELEMENT; + const vertSize = 4 * floatSize; + gl.enableVertexAttribArray(currentProgram.attribute["pos"]); + gl.vertexAttribPointer(currentProgram.attribute["pos"], 2, gl.FLOAT, false, vertSize, 0 * floatSize); + gl.enableVertexAttribArray(currentProgram.attribute["uv"]); + gl.vertexAttribPointer(currentProgram.attribute["uv"], 2, gl.FLOAT, false, vertSize, 2 * floatSize); + shaderProgramCache[fragmentSource] = currentProgram; + return currentProgram; + } + const filter = { + colorMatrix: (matrix) => { + const m = new Float32Array(matrix); + m[4] /= 255; + m[9] /= 255; + m[14] /= 255; + m[19] /= 255; + const shader = m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0 ? colorMatrixWithoutAlpha : colorMatrixWithAlpha; + const program = compileShader(shader); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + draw(); + }, + brightness: (brightness) => { + const b = (brightness || 0) + 1; + filter.colorMatrix([ + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + b, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + saturation: (amount) => { + const x = (amount || 0) * 2 / 3 + 1; + const y = (x - 1) * -0.5; + filter.colorMatrix([ + x, + y, + y, + 0, + 0, + y, + x, + y, + 0, + 0, + y, + y, + x, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturate: () => { + filter.saturation(-1); + }, + contrast: (amount) => { + const v = (amount || 0) + 1; + const o = -128 * (v - 1); + filter.colorMatrix([ + v, + 0, + 0, + 0, + o, + 0, + v, + 0, + 0, + o, + 0, + 0, + v, + 0, + o, + 0, + 0, + 0, + 1, + 0 + ]); + }, + negative: () => { + filter.contrast(-2); + }, + hue: (rotation) => { + rotation = (rotation || 0) / 180 * Math.PI; + const cos = Math.cos(rotation); + const sin = Math.sin(rotation); + const lumR = 0.213; + const lumG = 0.715; + const lumB = 0.072; + filter.colorMatrix([ + lumR + cos * (1 - lumR) + sin * -lumR, + lumG + cos * -lumG + sin * -lumG, + lumB + cos * -lumB + sin * (1 - lumB), + 0, + 0, + lumR + cos * -lumR + sin * 0.143, + lumG + cos * (1 - lumG) + sin * 0.14, + lumB + cos * -lumB + sin * -0.283, + 0, + 0, + lumR + cos * -lumR + sin * -(1 - lumR), + lumG + cos * -lumG + sin * lumG, + lumB + cos * (1 - lumB) + sin * lumB, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + desaturateLuminance: () => { + filter.colorMatrix([ + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0.2764723, + 0.929708, + 0.0938197, + 0, + -37.1, + 0, + 0, + 0, + 1, + 0 + ]); + }, + sepia: () => { + filter.colorMatrix([ + 0.393, + 0.7689999, + 0.18899999, + 0, + 0, + 0.349, + 0.6859999, + 0.16799999, + 0, + 0, + 0.272, + 0.5339999, + 0.13099999, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + brownie: () => { + filter.colorMatrix([ + 0.5997023498159715, + 0.34553243048391263, + -0.2708298674538042, + 0, + 47.43192855600873, + -0.037703249837783157, + 0.8609577587992641, + 0.15059552388459913, + 0, + -36.96841498319127, + 0.24113635128153335, + -0.07441037908422492, + 0.44972182064877153, + 0, + -7.562075277591283, + 0, + 0, + 0, + 1, + 0 + ]); + }, + vintagePinhole: () => { + filter.colorMatrix([ + 0.6279345635605994, + 0.3202183420819367, + -0.03965408211312453, + 0, + 9.651285835294123, + 0.02578397704808868, + 0.6441188644374771, + 0.03259127616149294, + 0, + 7.462829176470591, + 0.0466055556782719, + -0.0851232987247891, + 0.5241648018700465, + 0, + 5.159190588235296, + 0, + 0, + 0, + 1, + 0 + ]); + }, + kodachrome: () => { + filter.colorMatrix([ + 1.1285582396593525, + -0.3967382283601348, + -0.03992559172921793, + 0, + 63.72958762196502, + -0.16404339962244616, + 1.0835251566291304, + -0.05498805115633132, + 0, + 24.732407896706203, + -0.16786010706155763, + -0.5603416277695248, + 1.6014850761964943, + 0, + 35.62982807460946, + 0, + 0, + 0, + 1, + 0 + ]); + }, + technicolor: () => { + filter.colorMatrix([ + 1.9125277891456083, + -0.8545344976951645, + -0.09155508482755585, + 0, + 11.793603434377337, + -0.3087833385928097, + 1.7658908555458428, + -0.10601743074722245, + 0, + -70.35205161461398, + -0.231103377548616, + -0.7501899197440212, + 1.847597816108189, + 0, + 30.950940869491138, + 0, + 0, + 0, + 1, + 0 + ]); + }, + polaroid: () => { + filter.colorMatrix([ + 1.438, + -0.062, + -0.062, + 0, + 0, + -0.122, + 1.378, + -0.122, + 0, + 0, + -0.016, + -0.016, + 1.483, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + shiftToBGR: () => { + filter.colorMatrix([ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ]); + }, + convolution: (matrix) => { + const m = new Float32Array(matrix); + const pixelSizeX = 1 / fxcanvas.width; + const pixelSizeY = 1 / fxcanvas.height; + const program = compileShader(convolution); + if (!program) + return; + gl.uniform1fv(program.uniform["m"], m); + gl.uniform2f(program.uniform["px"], pixelSizeX, pixelSizeY); + draw(); + }, + detectEdges: () => { + filter.convolution.call(this, [ + 0, + 1, + 0, + 1, + -4, + 1, + 0, + 1, + 0 + ]); + }, + sobelX: () => { + filter.convolution.call(this, [ + -1, + 0, + 1, + -2, + 0, + 2, + -1, + 0, + 1 + ]); + }, + sobelY: () => { + filter.convolution.call(this, [ + -1, + -2, + -1, + 0, + 0, + 0, + 1, + 2, + 1 + ]); + }, + sharpen: (amount) => { + const a = amount || 1; + filter.convolution.call(this, [ + 0, + -1 * a, + 0, + -1 * a, + 1 + 4 * a, + -1 * a, + 0, + -1 * a, + 0 + ]); + }, + emboss: (size2) => { + const s = size2 || 1; + filter.convolution.call(this, [ + -2 * s, + -1 * s, + 0, + -1 * s, + 1, + 1 * s, + 0, + 1 * s, + 2 * s + ]); + }, + blur: (size2) => { + const blurSizeX = size2 / 7 / fxcanvas.width; + const blurSizeY = size2 / 7 / fxcanvas.height; + const program = compileShader(blur); + if (!program) + return; + gl.uniform2f(program.uniform["px"], 0, blurSizeY); + draw(DRAW.INTERMEDIATE); + gl.uniform2f(program.uniform["px"], blurSizeX, 0); + draw(); + }, + pixelate: (size2) => { + const blurSizeX = size2 / fxcanvas.width; + const blurSizeY = size2 / fxcanvas.height; + const program = compileShader(pixelate); + if (!program) + return; + gl.uniform2f(program.uniform["size"], blurSizeX, blurSizeY); + draw(); + } + }; + this.add = function(name) { + const args = Array.prototype.slice.call(arguments, 1); + const func = filter[name]; + filterChain.push({ func, args }); + }; + this.reset = function() { + filterChain = []; + }; + this.get = function() { + return filterChain; + }; + this.apply = function(image28) { + resize(image28.width, image28.height); + drawCount = 0; + if (!sourceTexture) + sourceTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, sourceTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image28); + for (let i = 0; i < filterChain.length; i++) { + lastInChain = i === filterChain.length - 1; + const f = filterChain[i]; + f.func.apply(this, f.args || []); + } + return fxcanvas; + }; + this.draw = function(image28) { + this.add("brightness", 0); + return this.apply(image28); + }; +} + +// src/image/enhance.ts +var tf = __toESM(require_tfjs_esm()); +async function histogramEqualization(inputImage) { + const squeeze14 = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage; + const rgb2 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb2[0]), tf.min(rgb2[1]), tf.min(rgb2[2])]; + const max5 = [tf.max(rgb2[0]), tf.max(rgb2[1]), tf.max(rgb2[2])]; + const absMax = await Promise.all(max5.map((channel) => channel.data())); + const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); + const maxRange = maxValue > 1 ? 255 : 1; + const factor = maxRange / maxValue; + let final; + if (factor > 1) { + const sub11 = [tf.sub(rgb2[0], min2[0]), tf.sub(rgb2[1], min2[1]), tf.sub(rgb2[2], min2[2])]; + const range = [tf.sub(max5[0], min2[0]), tf.sub(max5[1], min2[1]), tf.sub(max5[2], min2[2])]; + const enh = [tf.mul(sub11[0], factor), tf.mul(sub11[1], factor), tf.mul(sub11[2], factor)]; + const stack5 = tf.stack([enh[0], enh[1], enh[2]], 2); + final = tf.reshape(stack5, [1, squeeze14.shape[0] || 0, squeeze14.shape[1] || 0, 3]); + tf.dispose([...sub11, ...range, ...enh]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb2, ...min2, ...max5, rgb2, squeeze14, inputImage]); + return final; +} + +// src/image/image.ts +var maxSize = 3840; +var inCanvas = null; +var outCanvas = null; +var tmpCanvas = null; +var fx; +var last = { + inputSum: 0, + cacheDiff: 1, + sumMethod: 0, + inputTensor: void 0 +}; +function reset() { + last.inputSum = 0; + last.cacheDiff = 1; + last.sumMethod = 0; + last.inputTensor = void 0; +} +function canvas(width, height) { + let c; + if (env.browser) { + if (env.worker) { + if (typeof OffscreenCanvas === "undefined") + throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported"); + c = new OffscreenCanvas(width, height); + } else { + if (typeof document === "undefined") + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } + } else { + if (typeof env.Canvas !== "undefined") + c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") + c = new globalThis.Canvas(width, height); + } + return c; +} +function copy(input, output) { + const outputCanvas = output || canvas(input.width, input.height); + const ctx = outputCanvas.getContext("2d"); + ctx.drawImage(input, 0, 0); + return outputCanvas; +} +async function process2(input, config3, getTensor = true) { + var _a, _b, _c; + if (!input) { + if (config3.debug) + log("input error: input is missing"); + return { tensor: null, canvas: null }; + } + if (!(input instanceof tf2.Tensor) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof env.Canvas !== "undefined" && input instanceof env.Canvas) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + throw new Error("input error: type is not recognized"); + } + if (input instanceof tf2.Tensor) { + let tensor7 = null; + if (input["isDisposedInternal"]) + throw new Error("input error: attempted to use tensor but it is disposed"); + if (!input.shape) + throw new Error("input error: attempted to use tensor without a shape"); + if (input.shape.length === 3) { + if (input.shape[2] === 3) { + tensor7 = tf2.expandDims(input, 0); + } else if (input.shape[2] === 4) { + const rgb2 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb2, 0); + tf2.dispose(rgb2); + } + } else if (input.shape.length === 4) { + if (input.shape[3] === 3) { + tensor7 = tf2.clone(input); + } else if (input.shape[3] === 4) { + tensor7 = tf2.slice4d(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + } + } + if (tensor7 == null || tensor7.shape.length !== 4 || tensor7.shape[0] !== 1 || tensor7.shape[3] !== 3) + throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); + if (tensor7.dtype === "int32") { + const cast8 = tf2.cast(tensor7, "float32"); + tf2.dispose(tensor7); + tensor7 = cast8; + } + return { tensor: tensor7, canvas: config3.filter.return ? outCanvas : null }; + } + if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) { + if (config3.debug) + log("input stream is not ready"); + return { tensor: null, canvas: inCanvas }; + } + const originalWidth = input["naturalWidth"] || input["videoWidth"] || input["width"] || input["shape"] && input["shape"][1] > 0; + const originalHeight = input["naturalHeight"] || input["videoHeight"] || input["height"] || input["shape"] && input["shape"][2] > 0; + if (!originalWidth || !originalHeight) { + if (config3.debug) + log("cannot determine input dimensions"); + return { tensor: null, canvas: inCanvas }; + } + let targetWidth = originalWidth; + let targetHeight = originalHeight; + if (targetWidth > maxSize) { + targetWidth = maxSize; + targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth); + } + if (targetHeight > maxSize) { + targetHeight = maxSize; + targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight); + } + if ((((_a = config3.filter) == null ? void 0 : _a.width) || 0) > 0) + targetWidth = config3.filter.width; + else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) + targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); + if ((config3.filter.height || 0) > 0) + targetHeight = config3.filter.height; + else if ((config3.filter.width || 0) > 0) + targetHeight = originalHeight * ((config3.filter.width || 0) / originalWidth); + if (!targetWidth || !targetHeight) + throw new Error("input error: cannot determine dimension"); + if (!inCanvas || inCanvas.width !== targetWidth || inCanvas.height !== targetHeight) + inCanvas = canvas(targetWidth, targetHeight); + const inCtx = inCanvas.getContext("2d"); + if (typeof ImageData !== "undefined" && input instanceof ImageData) { + inCtx.putImageData(input, 0, 0); + } else { + if (config3.filter.flip && typeof inCtx.translate !== "undefined") { + inCtx.translate(originalWidth, 0); + inCtx.scale(-1, 1); + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + inCtx.setTransform(1, 0, 0, 1, 0, 0); + } else { + inCtx.drawImage(input, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height); + } + } + if (!outCanvas || inCanvas.width !== outCanvas.width || inCanvas.height !== outCanvas.height) + outCanvas = canvas(inCanvas.width, inCanvas.height); + if (config3.filter.enabled && env.webgl.supported) { + if (!fx) + fx = env.browser ? new GLImageFilter() : null; + env.filter = !!fx; + if (!(fx == null ? void 0 : fx.add)) { + if (config3.debug) + log("input process error: cannot initialize filters"); + env.webgl.supported = false; + config3.filter.enabled = false; + copy(inCanvas, outCanvas); + } else { + fx.reset(); + if (config3.filter.brightness !== 0) + fx.add("brightness", config3.filter.brightness); + if (config3.filter.contrast !== 0) + fx.add("contrast", config3.filter.contrast); + if (config3.filter.sharpness !== 0) + fx.add("sharpen", config3.filter.sharpness); + if (config3.filter.blur !== 0) + fx.add("blur", config3.filter.blur); + if (config3.filter.saturation !== 0) + fx.add("saturation", config3.filter.saturation); + if (config3.filter.hue !== 0) + fx.add("hue", config3.filter.hue); + if (config3.filter.negative) + fx.add("negative"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.vintage) + fx.add("brownie"); + if (config3.filter.sepia) + fx.add("sepia"); + if (config3.filter.kodachrome) + fx.add("kodachrome"); + if (config3.filter.technicolor) + fx.add("technicolor"); + if (config3.filter.polaroid) + fx.add("polaroid"); + if (config3.filter.pixelate !== 0) + fx.add("pixelate", config3.filter.pixelate); + if (((_c = fx.get()) == null ? void 0 : _c.length) > 1) + outCanvas = fx.apply(inCanvas); + else + outCanvas = fx.draw(inCanvas); + } + } else { + copy(inCanvas, outCanvas); + if (fx) + fx = null; + env.filter = !!fx; + } + if (!getTensor) + return { tensor: null, canvas: outCanvas }; + if (!outCanvas) + throw new Error("canvas error: cannot create output"); + let pixels; + let depth = 3; + if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { + if (env.browser && tf2.browser) { + pixels = tf2.browser ? tf2.browser.fromPixels(input) : null; + } else { + depth = input.data.length / input.height / input.width; + const arr = new Uint8Array(input.data.buffer); + pixels = tf2.tensor(arr, [input.height, input.width, depth], "int32"); + } + } else { + if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) + tmpCanvas = canvas(outCanvas.width, outCanvas.height); + if (tf2.browser && env.browser) { + if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { + pixels = tf2.browser.fromPixels(outCanvas); + } else { + tmpCanvas = copy(outCanvas); + pixels = tf2.browser.fromPixels(tmpCanvas); + } + } else { + const tempCanvas = copy(outCanvas); + const tempCtx = tempCanvas.getContext("2d"); + const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); + depth = tempData.data.length / targetWidth / targetHeight; + const arr = new Uint8Array(tempData.data.buffer); + pixels = tf2.tensor(arr, [targetWidth, targetHeight, depth]); + } + } + if (depth === 4) { + const rgb2 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb2; + } + if (!pixels) + throw new Error("input error: cannot create tensor"); + const casted = tf2.cast(pixels, "float32"); + const tensor6 = config3.filter.equalization ? await histogramEqualization(casted) : tf2.expandDims(casted, 0); + tf2.dispose([pixels, casted]); + if (config3.filter.autoBrightness) { + const max5 = tf2.max(tensor6); + const maxVal = await max5.data(); + config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; + tf2.dispose(max5); + } + return { tensor: tensor6, canvas: config3.filter.return ? outCanvas : null }; +} +async function skip(config3, input) { + let skipFrame = false; + if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) + return skipFrame; + if (!last.inputTensor) { + last.inputTensor = tf2.clone(input); + } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { + tf2.dispose(last.inputTensor); + last.inputTensor = tf2.clone(input); + } else { + const t2 = {}; + t2.diff = tf2.sub(input, last.inputTensor); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; + tf2.dispose([last.inputTensor, t2.diff, t2.squared, t2.sum]); + last.inputTensor = tf2.clone(input); + skipFrame = diffRelative <= (config3.cacheSensitivity || 0); + } + return skipFrame; +} +async function compare(config3, input1, input2) { + const t2 = {}; + if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) { + if (!config3.debug) + log("invalid input tensor or tensor shapes do not match:", input1.shape, input2.shape); + return 0; + } + if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) { + if (!config3.debug) + log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); + return 0; + } + t2.input1 = tf2.clone(input1); + t2.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? tf2.image.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : tf2.clone(input2); + t2.diff = tf2.sub(t2.input1, t2.input2); + t2.squared = tf2.mul(t2.diff, t2.diff); + t2.sum = tf2.sum(t2.squared); + const diffSum = await t2.sum.data(); + const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; + tf2.dispose([t2.input1, t2.input2, t2.diff, t2.squared, t2.sum]); + return diffRelative; +} + +// src/util/env.ts +var Env = class { + constructor() { + __publicField(this, "browser"); + __publicField(this, "node"); + __publicField(this, "worker"); + __publicField(this, "platform", ""); + __publicField(this, "agent", ""); + __publicField(this, "backends", []); + __publicField(this, "initial"); + __publicField(this, "filter"); + __publicField(this, "tfjs"); + __publicField(this, "offscreen"); + __publicField(this, "perfadd", false); + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + __publicField(this, "kernels", []); + __publicField(this, "Canvas"); + __publicField(this, "Image"); + __publicField(this, "ImageData"); + this.browser = typeof navigator !== "undefined"; + this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; + this.tfjs = { version: tf3.version["tfjs-core"] }; + this.offscreen = typeof OffscreenCanvas !== "undefined"; + this.initial = true; + this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; + if (typeof navigator !== "undefined") { + const raw = navigator.userAgent.match(/\(([^()]+)\)/g); + if (raw == null ? void 0 : raw[0]) { + const platformMatch = raw[0].match(/\(([^()]+)\)/g); + this.platform = (platformMatch == null ? void 0 : platformMatch[0]) ? platformMatch[0].replace(/\(|\)/g, "") : ""; + this.agent = navigator.userAgent.replace(raw[0], ""); + if (this.platform[1]) + this.agent = this.agent.replace(raw[1], ""); + this.agent = this.agent.replace(/ /g, " "); + } + } else if (typeof process !== "undefined") { + this.platform = `${process.platform} ${process.arch}`; + this.agent = `NodeJS ${process.version}`; + } + } + async updateBackend() { + this.backends = Object.keys(tf3.engine().registryFactory); + try { + this.tensorflow = { + version: tf3.backend()["binding"] ? tf3.backend()["binding"].TF_Version : void 0, + gpu: tf3.backend()["binding"] ? tf3.backend()["binding"].isUsingGpuDevice() : void 0 + }; + } catch (e) { + } + this.wasm.supported = typeof WebAssembly !== "undefined"; + this.wasm.backend = this.backends.includes("wasm"); + if (this.wasm.supported && this.wasm.backend) { + this.wasm.simd = await tf3.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + this.wasm.multithread = await tf3.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + } + const c = canvas(100, 100); + const gl = c ? c.getContext("webgl2") : void 0; + this.webgl.supported = typeof gl !== "undefined"; + this.webgl.backend = this.backends.includes("webgl"); + if (this.webgl.supported && this.webgl.backend && gl) { + this.webgl.version = gl.getParameter(gl.VERSION); + this.webgl.vendor = gl.getParameter(gl.VENDOR); + this.webgl.renderer = gl.getParameter(gl.RENDERER); + this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION); + } + this.webgpu.supported = this.browser && typeof navigator.gpu !== "undefined"; + this.webgpu.backend = this.backends.includes("webgpu"); + try { + if (this.webgpu.supported) { + const adapter = await navigator.gpu.requestAdapter(); + this.webgpu.adapter = await (adapter == null ? void 0 : adapter.requestAdapterInfo()); + } + } catch (e) { + this.webgpu.supported = false; + } + try { + this.kernels = tf3.getKernelsForBackend(tf3.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); + } catch (e) { + } + } + updateCPU() { + const cpu = { model: "", flags: [] }; + if (this.node && this.platform.startsWith("linux")) { + } + if (!this.cpu) + Object.defineProperty(this, "cpu", { value: cpu }); + else + this.cpu = cpu; + } +}; +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + __publicField(this, "config"); + __publicField(this, "element"); + __publicField(this, "stream"); + __publicField(this, "devices", []); + __publicField(this, "enumerate", async () => { + try { + const devices = await navigator.mediaDevices.enumerateDevices(); + this.devices = devices.filter((device) => device.kind === "videoinput"); + } catch (e) { + this.devices = []; + } + return this.devices; + }); + __publicField(this, "start", async (webcamConfig) => { + if (webcamConfig == null ? void 0 : webcamConfig.debug) + this.config.debug = webcamConfig == null ? void 0 : webcamConfig.debug; + if (webcamConfig == null ? void 0 : webcamConfig.crop) + this.config.crop = webcamConfig == null ? void 0 : webcamConfig.crop; + if (webcamConfig == null ? void 0 : webcamConfig.mode) + this.config.mode = webcamConfig == null ? void 0 : webcamConfig.mode; + if (webcamConfig == null ? void 0 : webcamConfig.width) + this.config.width = webcamConfig == null ? void 0 : webcamConfig.width; + if (webcamConfig == null ? void 0 : webcamConfig.height) + this.config.height = webcamConfig == null ? void 0 : webcamConfig.height; + if (webcamConfig == null ? void 0 : webcamConfig.id) + this.config.id = webcamConfig == null ? void 0 : webcamConfig.id; + if (webcamConfig == null ? void 0 : webcamConfig.element) { + if (typeof webcamConfig.element === "string") { + const el = document.getElementById(webcamConfig.element); + if (el && el instanceof HTMLVideoElement) { + this.element = el; + } else { + if (this.config.debug) + log("webcam", "cannot get dom element", webcamConfig.element); + return; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) + log("webcam", "unknown dom element", webcamConfig.element); + return; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + resizeMode: this.config.crop ? "crop-and-scale" : "none", + width: { ideal: this.config.width > 0 ? this.config.width : window.innerWidth }, + height: { ideal: this.config.height > 0 ? this.config.height : window.innerHeight } + } + }; + if (this.config.id) + requestedConstraints.video.deviceId = this.config.id; + this.element.addEventListener("play", () => { + if (this.config.debug) + log("webcam", "play"); + }); + this.element.addEventListener("pause", () => { + if (this.config.debug) + log("webcam", "pause"); + }); + this.element.addEventListener("click", async () => { + if (!this.element || !this.stream) + return; + if (this.element.paused) + await this.element.play(); + else + this.element.pause(); + }); + if (!(navigator == null ? void 0 : navigator.mediaDevices)) { + if (this.config.debug) + log("webcam", "no devices"); + return; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return; + } + if (!this.stream) { + if (this.config.debug) + log("webcam", "no stream"); + return; + } + this.element.srcObject = this.stream; + const ready3 = new Promise((resolve) => { + if (!this.element) + resolve(false); + else + this.element.onloadeddata = () => resolve(true); + }); + await ready3; + await this.element.play(); + if (this.config.debug) { + log("webcam", { + width: this.width, + height: this.height, + label: this.label, + stream: this.stream, + track: this.track, + settings: this.settings, + constraints: this.constraints, + capabilities: this.capabilities + }); + } + }); + __publicField(this, "pause", () => { + if (this.element) + this.element.pause(); + }); + __publicField(this, "play", async () => { + if (this.element) + await this.element.play(); + }); + __publicField(this, "stop", () => { + if (this.config.debug) + log("webcam", "stop"); + if (this.track) + this.track.stop(); + }); + this.config = { + element: void 0, + debug: true, + mode: "front", + crop: false, + width: 0, + height: 0 + }; + } + get track() { + if (!this.stream) + return void 0; + return this.stream.getVideoTracks()[0]; + } + get capabilities() { + if (!this.track) + return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + get constraints() { + if (!this.track) + return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + get settings() { + if (!this.stream) + return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + get label() { + if (!this.track) + return ""; + return this.track.label; + } + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + get height() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; + } +}; + +// src/tfjs/load.ts +var tf4 = __toESM(require_tfjs_esm()); + +// models/models.json +var models_exports = {}; +__export(models_exports, { + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "blazepose-detector2d": () => blazepose_detector2d, + "blazepose-detector3d": () => blazepose_detector3d, + "blazepose-full": () => blazepose_full, + "blazepose-heavy": () => blazepose_heavy, + "blazepose-lite": () => blazepose_lite, + centernet: () => centernet, + default: () => models_default, + efficientpose: () => efficientpose, + "efficientpose-i-lite": () => efficientpose_i_lite, + "efficientpose-ii-lite": () => efficientpose_ii_lite, + "efficientpose-iv": () => efficientpose_iv, + emotion: () => emotion, + faceboxes: () => faceboxes, + facemesh: () => facemesh, + "facemesh-attention": () => facemesh_attention, + "facemesh-attention-alt": () => facemesh_attention_alt, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + "facemesh-orig": () => facemesh_orig, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + gender: () => gender, + "gender-ssrnet-imdb": () => gender_ssrnet_imdb, + handdetect: () => handdetect, + "handlandmark-full": () => handlandmark_full, + "handlandmark-lite": () => handlandmark_lite, + "handlandmark-sparse": () => handlandmark_sparse, + handskeleton: () => handskeleton, + handtrack: () => handtrack, + "insightface-efficientnet-b0": () => insightface_efficientnet_b0, + "insightface-ghostnet-strides1": () => insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": () => insightface_ghostnet_strides2, + "insightface-mobilenet-emore": () => insightface_mobilenet_emore, + "insightface-mobilenet-swish": () => insightface_mobilenet_swish, + iris: () => iris, + liveness: () => liveness, + meet: () => meet, + mobileface: () => mobileface, + mobilefacenet: () => mobilefacenet, + models: () => models, + "movenet-lightning": () => movenet_lightning, + "movenet-multipose": () => movenet_multipose, + "movenet-thunder": () => movenet_thunder, + nanodet: () => nanodet, + "nanodet-e": () => nanodet_e, + "nanodet-g": () => nanodet_g, + "nanodet-m": () => nanodet_m, + "nanodet-t": () => nanodet_t, + posenet: () => posenet, + rvm: () => rvm, + selfie: () => selfie +}); +var antispoof = 853098; +var blazeface = 538928; +var centernet = 4030290; +var emotion = 820516; +var facemesh = 1477958; +var faceres = 6978814; +var handlandmark_full = 5431368; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector2d = 7499400; +var blazepose_detector3d = 5928856; +var blazepose_full = 6338290; +var blazepose_heavy = 27501554; +var blazepose_lite = 2725490; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_alt = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var facemesh_orig = 2955780; +var faceres_deep = 13957620; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_lite = 2023432; +var handlandmark_sparse = 5286322; +var handskeleton = 5502280; +var meet = 372228; +var mobileface = 2183192; +var mobilefacenet = 5171976; +var movenet_multipose = 9448838; +var movenet_thunder = 12477112; +var nanodet = 7574558; +var posenet = 5032780; +var rvm = 3739355; +var selfie = 212886; +var blazepose_detector = 5928856; +var anti_spoofing = 853098; +var efficientpose_i_lite = 2269064; +var efficientpose_ii_lite = 5651240; +var efficientpose_iv = 25643252; +var insightface_efficientnet_b0 = 13013224; +var insightface_ghostnet_strides1 = 8093408; +var insightface_ghostnet_strides2 = 8049584; +var insightface_mobilenet_emore = 6938536; +var insightface_mobilenet_swish = 12168584; +var nanodet_e = 12319156; +var nanodet_g = 7574558; +var nanodet_m = 1887474; +var nanodet_t = 5294216; +var models_default = { + antispoof, + blazeface, + centernet, + emotion, + facemesh, + faceres, + "handlandmark-full": handlandmark_full, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector2d": blazepose_detector2d, + "blazepose-detector3d": blazepose_detector3d, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-alt": facemesh_attention_alt, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "facemesh-orig": facemesh_orig, + "faceres-deep": faceres_deep, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-lite": handlandmark_lite, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "blazepose-detector": blazepose_detector, + "anti-spoofing": anti_spoofing, + "efficientpose-i-lite": efficientpose_i_lite, + "efficientpose-ii-lite": efficientpose_ii_lite, + "efficientpose-iv": efficientpose_iv, + "insightface-efficientnet-b0": insightface_efficientnet_b0, + "insightface-ghostnet-strides1": insightface_ghostnet_strides1, + "insightface-ghostnet-strides2": insightface_ghostnet_strides2, + "insightface-mobilenet-emore": insightface_mobilenet_emore, + "insightface-mobilenet-swish": insightface_mobilenet_swish, + "nanodet-e": nanodet_e, + "nanodet-g": nanodet_g, + "nanodet-m": nanodet_m, + "nanodet-t": nanodet_t +}; + +// src/tfjs/load.ts +var options = { + cacheModels: true, + cacheSupported: true, + verbose: true, + debug: false, + modelBasePath: "" +}; +var modelStats = {}; +async function httpHandler(url, init4) { + if (options.debug) + log("load model fetch:", url, init4); + return fetch(url, init4); +} +function setModelLoadOptions(config3) { + options.cacheModels = config3.cacheModels; + options.verbose = config3.debug; + options.modelBasePath = config3.modelBasePath; +} +async function loadModel(modelPath) { + var _a, _b, _c, _d; + let modelUrl = join(options.modelBasePath, modelPath || ""); + if (!modelUrl.toLowerCase().endsWith(".json")) + modelUrl += ".json"; + const modelPathSegments = modelUrl.includes("/") ? modelUrl.split("/") : modelUrl.split("\\"); + const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace(".json", ""); + const cachedModelName = "indexeddb://" + shortModelName; + modelStats[shortModelName] = { + name: shortModelName, + sizeFromManifest: 0, + sizeLoadedWeights: 0, + sizeDesired: models_exports[shortModelName], + inCache: false, + url: "" + }; + options.cacheSupported = typeof indexedDB !== "undefined"; + let cachedModels = {}; + try { + cachedModels = options.cacheSupported && options.cacheModels ? await tf4.io.listModels() : {}; + } catch (e) { + options.cacheSupported = false; + } + modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); + modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; + const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; + let model23 = new tf4.GraphModel(modelStats[shortModelName].url, tfLoadOptions); + let loaded = false; + try { + model23.findIOHandler(); + if (options.debug) + log("model load handler:", model23["handler"]); + } catch (err) { + log("error finding model i/o handler:", modelUrl, err); + } + try { + const artifacts = await ((_a = model23.handler) == null ? void 0 : _a.load()) || null; + modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; + if (artifacts) + model23.loadSync(artifacts); + else + model23 = await tf4.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + modelStats[shortModelName].sizeLoadedWeights = ((_d = (_c = model23.artifacts) == null ? void 0 : _c.weightData) == null ? void 0 : _d.byteLength) || 0; + if (options.verbose) + log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); + loaded = true; + } catch (err) { + log("error loading model:", modelUrl, err); + } + if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { + try { + const saveResult = await model23.save(cachedModelName); + if (options.debug) + log("model saved:", cachedModelName, saveResult); + } catch (err) { + log("error saving model:", modelUrl, err); + } + } + return model23; +} + +// package.json +var version2 = "3.0.0"; + +// src/tfjs/backend.ts +var tf7 = __toESM(require_tfjs_esm()); + +// src/tfjs/humangl.ts +var tf5 = __toESM(require_tfjs_esm()); +var config2 = { + name: "humangl", + priority: 999, + canvas: null, + gl: null, + extensions: [], + webGLattr: { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + desynchronized: true + } +}; +function extensions() { + const gl = config2.gl; + if (!gl) + return; + config2.extensions = gl.getSupportedExtensions(); +} +function register(instance) { + var _a; + if (instance.config.backend !== "humangl") + return; + if (config2.name in tf5.engine().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { + log("humangl error: backend invalid context"); + instance.models.reset(); + } + if (!tf5.findBackend(config2.name)) { + try { + config2.canvas = canvas(100, 100); + } catch (err) { + log("humangl error: cannot create canvas:", err); + return; + } + try { + config2.gl = config2.canvas.getContext("webgl2", config2.webGLattr); + if (!config2.gl) { + log("humangl error: cannot get webgl context"); + return; + } + const glv2 = config2.gl.getParameter(config2.gl.VERSION).includes("2.0"); + if (!glv2) { + log("backend override: using fallback webgl backend as webgl 2.0 is not detected"); + instance.config.backend = "webgl"; + return; + } + if (config2.canvas) { + config2.canvas.addEventListener("webglcontextlost", (e) => { + log("humangl error:", e.type); + log("possible browser memory leak using webgl or conflict with multiple backend registrations"); + instance.emit("error"); + throw new Error("backend error: webgl context lost"); + }); + config2.canvas.addEventListener("webglcontextrestored", (e) => { + log("humangl error: context restored:", e); + }); + config2.canvas.addEventListener("webglcontextcreationerror", (e) => { + log("humangl error: context create:", e); + }); + } + } catch (err) { + log("humangl error: cannot get webgl context:", err); + return; + } + try { + tf5.setWebGLContext(2, config2.gl); + } catch (err) { + log("humangl error: cannot set webgl context:", err); + return; + } + try { + const ctx = new tf5.GPGPUContext(config2.gl); + tf5.registerBackend(config2.name, () => new tf5.MathBackendWebGL(ctx), config2.priority); + } catch (err) { + log("humangl error: cannot register webgl backend:", err); + return; + } + try { + const kernels = tf5.getKernelsForBackend("webgl"); + kernels.forEach((kernelConfig) => { + const newKernelConfig = { ...kernelConfig, backendName: config2.name }; + tf5.registerKernel(newKernelConfig); + }); + } catch (err) { + log("humangl error: cannot update webgl backend registration:", err); + return; + } + try { + if (tf5.env().flagRegistry.WEBGL_VERSION) + tf5.env().set("WEBGL_VERSION", 2); + } catch (err) { + log("humangl error: cannot set WebGL backend flags:", err); + return; + } + extensions(); + const backend4 = tf5.backend(); + const current = typeof backend4["gpgpu"] !== "undefined" ? backend4["getGPGPUContext"]().gl : null; + if (current) { + if (instance.config.debug) + log("humangl backend registered:", { webgl: current.getParameter(current.VERSION), renderer: current.getParameter(current.RENDERER) }); + } else { + log("humangl error: no current gl context:", current, config2.gl); + } + } +} + +// src/tfjs/constants.ts +var tf6 = __toESM(require_tfjs_esm()); +var constants = { + tf255: 255, + tf1: 1, + tf2: 2, + tf05: 0.5, + tf127: 127.5, + rgb: [0.2989, 0.587, 0.114] +}; +function init() { + constants.tf255 = tf6.scalar(255, "float32"); + constants.tf1 = tf6.scalar(1, "float32"); + constants.tf2 = tf6.scalar(2, "float32"); + constants.tf05 = tf6.scalar(0.5, "float32"); + constants.tf127 = tf6.scalar(127.5, "float32"); + constants.rgb = tf6.tensor1d([0.2989, 0.587, 0.114], "float32"); +} + +// src/tfjs/backend.ts +async function getBestBackend() { + await env.updateBackend(); + if (!env.browser) + return "tensorflow"; + if (env.webgpu.supported && env.webgpu.backend) + return "webgpu"; + if (env.webgl.supported && env.webgl.backend) + return "webgl"; + if (env.wasm.supported && env.wasm.backend) + return "wasm"; + return "cpu"; +} +function registerCustomOps(config3) { + const newKernels = []; + if (!env.kernels.includes("mod")) { + const kernelMod = { + kernelName: "Mod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.sub(op.inputs.a, tf7.mul(tf7.div(op.inputs.a, op.inputs.b), op.inputs.b))) + }; + tf7.registerKernel(kernelMod); + env.kernels.push("mod"); + newKernels.push("mod"); + } + if (!env.kernels.includes("floormod")) { + const kernelFloorMod = { + kernelName: "FloorMod", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => tf7.add(tf7.mul(tf7.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf7.mod(op.inputs.a, op.inputs.b))) + }; + tf7.registerKernel(kernelFloorMod); + env.kernels.push("floormod"); + newKernels.push("floormod"); + } + if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { + const kernelRotateWithOffset = { + kernelName: "RotateWithOffset", + backendName: tf7.getBackend(), + kernelFunc: (op) => tf7.tidy(() => { + const backend4 = tf7.getBackend(); + tf7.setBackend("cpu"); + const t2 = tf7.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center); + tf7.setBackend(backend4); + return t2; + }) + }; + tf7.registerKernel(kernelRotateWithOffset); + env.kernels.push("rotatewithoffset"); + newKernels.push("rotatewithoffset"); + } + if (newKernels.length > 0 && config3.debug) + log("registered kernels:", newKernels); +} +var defaultFlags = {}; +async function check(instance, force = false) { + var _a; + instance.state = "backend"; + if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) + instance.config.backend = await getBestBackend(); + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && tf7.getBackend() !== instance.config.backend) { + const timeStamp = now(); + if (instance.config.backend && instance.config.backend.length > 0) { + if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { + if (instance.config.debug) + log("running inside web worker"); + } + if (env.browser && instance.config.backend === "tensorflow") { + if (instance.config.debug) + log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && (instance.config.backend === "webgl" || instance.config.backend === "humangl")) { + if (instance.config.debug) + log(`override: backend set to ${instance.config.backend} while running in nodejs`); + instance.config.backend = "tensorflow"; + } + if (env.browser && instance.config.backend === "webgpu") { + if (typeof navigator === "undefined" || typeof navigator.gpu === "undefined") { + log("override: backend set to webgpu but browser does not support webgpu"); + instance.config.backend = "webgl"; + } else { + const adapter = await navigator.gpu.requestAdapter(); + if (instance.config.debug) + log("enumerated webgpu adapter:", adapter); + if (!adapter) { + log("override: backend set to webgpu but browser reports no available gpu"); + instance.config.backend = "webgl"; + } else { + const adapterInfo = "requestAdapterInfo" in adapter ? await adapter.requestAdapterInfo() : void 0; + log("webgpu adapter info:", adapterInfo); + } + } + } + let available = Object.keys(tf7.engine().registryFactory); + if (instance.config.backend === "humangl" && !available.includes("humangl")) { + register(instance); + available = Object.keys(tf7.engine().registryFactory); + } + if (instance.config.debug) + log("available backends:", available); + if (!available.includes(instance.config.backend)) { + log(`error: backend ${instance.config.backend} not found in registry`); + instance.config.backend = env.node ? "tensorflow" : "webgl"; + if (instance.config.debug) + log(`override: setting backend ${instance.config.backend}`); + } + if (instance.config.debug) + log("setting backend:", [instance.config.backend]); + if (instance.config.backend === "wasm") { + if (tf7.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) + tf7.env().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (instance.config.debug) + log("wasm path:", instance.config.wasmPath); + if (typeof tf7.setWasmPaths !== "undefined") + tf7.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch); + else + throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); + let mt = false; + let simd = false; + try { + mt = await tf7.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + simd = await tf7.env().getAsync("WASM_HAS_SIMD_SUPPORT"); + if (instance.config.debug) + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); + if (instance.config.debug && !simd) + log("warning: wasm simd support is not enabled"); + } catch (e) { + log("wasm detection failed"); + } + } + try { + await tf7.setBackend(instance.config.backend); + await tf7.ready(); + } catch (err) { + log("error: cannot set backend:", instance.config.backend, err); + return false; + } + if (instance.config.debug) + defaultFlags = JSON.parse(JSON.stringify(tf7.env().flags)); + } + if (tf7.getBackend() === "humangl" || tf7.getBackend() === "webgl") { + if (tf7.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) + tf7.env().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (tf7.env().flagRegistry.WEBGL_EXP_CONV) + tf7.env().set("WEBGL_EXP_CONV", true); + if (instance.config.debug && typeof instance.config.deallocate !== "undefined" && instance.config.deallocate) { + log("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:", true); + tf7.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); + } + } + if (tf7.getBackend() === "webgpu") { + } + if (instance.config.debug) { + const newFlags = tf7.env().flags; + const updatedFlags = {}; + for (const key of Object.keys(newFlags)) { + if (defaultFlags[key] === newFlags[key]) + continue; + updatedFlags[key] = newFlags[key]; + } + if (instance.config.debug && Object.keys(updatedFlags).length > 0) + log("backend:", tf7.getBackend(), "flags:", updatedFlags); + } + if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { + if (instance.config.debug) + log("flags:", instance.config["flags"]); + for (const [key, val] of Object.entries(instance.config.flags)) { + tf7.env().set(key, val); + } + } + tf7.enableProdMode(); + init(); + instance.performance.initBackend = Math.trunc(now() - timeStamp); + instance.config.backend = tf7.getBackend(); + await env.updateBackend(); + registerCustomOps(instance.config); + env.initial = false; + } + return true; +} +function fakeOps(kernelNames, config3) { + for (const kernelName of kernelNames) { + const kernelConfig = { + kernelName, + backendName: config3.backend, + kernelFunc: (param) => { + var _a; + if (config3.debug) + log("kernelFunc", kernelName, config3.backend, param); + return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; + } + }; + tf7.registerKernel(kernelConfig); + } + env.kernels = tf7.getKernelsForBackend(tf7.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); +} + +// src/draw/draw.ts +var draw_exports = {}; +__export(draw_exports, { + all: () => all, + body: () => body, + canvas: () => canvas2, + face: () => face, + gesture: () => gesture, + hand: () => hand, + init: () => init2, + object: () => object, + options: () => options2, + person: () => person +}); + +// src/draw/primitives.ts +var getCanvasContext = (input) => { + if (!input) + log("draw error: invalid canvas"); + else if (!input.getContext) + log("draw error: canvas context not defined"); + else { + const ctx = input.getContext("2d"); + if (!ctx) + log("draw error: cannot get canvas context"); + else + return ctx; + } + return null; +}; +var rad2deg = (theta) => Math.round(theta * 180 / Math.PI); +var replace = (str, source, target) => str.replace(source, typeof target === "number" ? target.toFixed(1) : target); +var colorDepth = (z, opt) => { + if (!opt.useDepth || typeof z === "undefined") + return opt.color; + const rgb2 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb2[0]}, ${rgb2[1]}, ${rgb2[2]}, ${opt.alpha})`; +}; +function labels(ctx, str, startX, startY, localOptions2) { + const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); + const x = Math.max(0, startX); + for (let i = line.length - 1; i >= 0; i--) { + const y = i * localOptions2.lineHeight + startY; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(line[i], x + 5, y + 16); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(line[i], x + 4, y + 15); + } +} +function point(ctx, x, y, z, localOptions2) { + ctx.fillStyle = colorDepth(z, localOptions2); + ctx.beginPath(); + ctx.arc(x, y, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.fill(); +} +function rect(ctx, x, y, width, height, localOptions2) { + ctx.beginPath(); + ctx.lineWidth = localOptions2.lineWidth; + if (localOptions2.useCurves) { + const cx = (x + x + width) / 2; + const cy = (y + y + height) / 2; + ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + ctx.moveTo(x + localOptions2.roundRect, y); + ctx.lineTo(x + width - localOptions2.roundRect, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions2.roundRect); + ctx.lineTo(x + width, y + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions2.roundRect, y + height); + ctx.lineTo(x + localOptions2.roundRect, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions2.roundRect); + ctx.lineTo(x, y + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y, x + localOptions2.roundRect, y); + ctx.closePath(); + } + ctx.stroke(); +} +function lines(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.beginPath(); + ctx.moveTo(points[0][0], points[0][1]); + for (const pt of points) { + ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions2); + ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1])); + } + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function curves(ctx, points, localOptions2) { + if (points.length < 2) + return; + ctx.lineWidth = localOptions2.lineWidth; + if (!localOptions2.useCurves || points.length <= 2) { + lines(ctx, points, localOptions2); + return; + } + ctx.moveTo(points[0][0], points[0][1]); + for (let i = 0; i < points.length - 2; i++) { + const xc = (points[i][0] + points[i + 1][0]) / 2; + const yc = (points[i][1] + points[i + 1][1]) / 2; + ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc); + } + ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]); + ctx.stroke(); + if (localOptions2.fillPolygons) { + ctx.closePath(); + ctx.fill(); + } +} +function arrow(ctx, from, to, radius = 5) { + let angle; + let x; + let y; + ctx.beginPath(); + ctx.moveTo(from[0], from[1]); + ctx.lineTo(to[0], to[1]); + angle = Math.atan2(to[1] - from[1], to[0] - from[0]); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.moveTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + angle += 1 / 3 * (2 * Math.PI); + x = radius * Math.cos(angle) + to[0]; + y = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y); + ctx.closePath(); + ctx.stroke(); + ctx.fill(); +} + +// src/draw/options.ts +var options2 = { + color: "rgba(173, 216, 230, 0.6)", + labelColor: "rgba(173, 216, 230, 1)", + shadowColor: "black", + alpha: 0.5, + font: 'small-caps 16px "Segoe UI"', + lineHeight: 18, + lineWidth: 4, + pointSize: 2, + roundRect: 8, + drawPoints: false, + drawLabels: true, + drawBoxes: true, + drawAttention: true, + drawGestures: true, + drawPolygons: true, + drawGaze: true, + fillPolygons: false, + useDepth: true, + useCurves: false, + faceLabels: "", + bodyLabels: "", + bodyPartLabels: "", + objectLabels: "", + handLabels: "", + fingerLabels: "", + gestureLabels: "" +}; + +// src/face/facemeshcoords.ts +var meshAnnotations = { + silhouette: [ + 10, + 338, + 297, + 332, + 284, + 251, + 389, + 356, + 454, + 323, + 361, + 288, + 397, + 365, + 379, + 378, + 400, + 377, + 152, + 148, + 176, + 149, + 150, + 136, + 172, + 58, + 132, + 93, + 234, + 127, + 162, + 21, + 54, + 103, + 67, + 109 + ], + lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409], + lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291], + lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415], + lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], + lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306], + lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408], + lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292], + lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407], + rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + rightEyeIris: [473, 474, 475, 476, 477], + leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398], + leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362], + leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414], + leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463], + leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413], + leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464], + leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465], + leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417], + leftEyebrowLower: [265, 353, 276, 283, 282, 295], + leftEyeIris: [468, 469, 470, 471, 472], + midwayBetweenEyes: [168], + noseTip: [1], + noseBottom: [2], + noseRightCorner: [98], + noseLeftCorner: [327], + rightCheek: [205], + leftCheek: [425] +}; +var meshLandmarks = { + count: 468, + mouth: 13, + symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]] +}; +var blazeFaceLandmarks = { + leftEye: 0, + rightEye: 1, + nose: 2, + mouth: 3, + leftEar: 4, + rightEar: 5, + symmetryLine: [3, 2] +}; +var irisIndices = [ + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } +]; +var UV468 = [ + [0.499976992607117, 0.652534008026123], + [0.500025987625122, 0.547487020492554], + [0.499974012374878, 0.602371990680695], + [0.482113003730774, 0.471979022026062], + [0.500150978565216, 0.527155995368958], + [0.499909996986389, 0.498252987861633], + [0.499523013830185, 0.40106201171875], + [0.289712011814117, 0.380764007568359], + [0.499954998493195, 0.312398016452789], + [0.499987006187439, 0.269918978214264], + [0.500023007392883, 0.107050001621246], + [0.500023007392883, 0.666234016418457], + [0.5000159740448, 0.679224014282227], + [0.500023007392883, 0.692348003387451], + [0.499976992607117, 0.695277988910675], + [0.499976992607117, 0.70593398809433], + [0.499976992607117, 0.719385027885437], + [0.499976992607117, 0.737019002437592], + [0.499967992305756, 0.781370997428894], + [0.499816000461578, 0.562981009483337], + [0.473773002624512, 0.573909997940063], + [0.104906998574734, 0.254140973091125], + [0.365929991006851, 0.409575998783112], + [0.338757991790771, 0.41302502155304], + [0.311120003461838, 0.409460008144379], + [0.274657994508743, 0.389131009578705], + [0.393361985683441, 0.403706014156342], + [0.345234006643295, 0.344011008739471], + [0.370094001293182, 0.346076011657715], + [0.319321990013123, 0.347265005111694], + [0.297903001308441, 0.353591024875641], + [0.24779200553894, 0.410809993743896], + [0.396889001131058, 0.842755019664764], + [0.280097991228104, 0.375599980354309], + [0.106310002505779, 0.399955987930298], + [0.2099249958992, 0.391353011131287], + [0.355807989835739, 0.534406006336212], + [0.471751004457474, 0.65040397644043], + [0.474155008792877, 0.680191993713379], + [0.439785003662109, 0.657229006290436], + [0.414617002010345, 0.66654098033905], + [0.450374007225037, 0.680860996246338], + [0.428770989179611, 0.682690978050232], + [0.374971002340317, 0.727805018424988], + [0.486716985702515, 0.547628998756409], + [0.485300987958908, 0.527395009994507], + [0.257764995098114, 0.314490020275116], + [0.401223003864288, 0.455172002315521], + [0.429818987846375, 0.548614978790283], + [0.421351999044418, 0.533740997314453], + [0.276895999908447, 0.532056987285614], + [0.483370006084442, 0.499586999416351], + [0.33721199631691, 0.282882988452911], + [0.296391993761063, 0.293242990970612], + [0.169294998049736, 0.193813979625702], + [0.447580009698868, 0.302609980106354], + [0.392390012741089, 0.353887975215912], + [0.354490011930466, 0.696784019470215], + [0.067304998636246, 0.730105042457581], + [0.442739009857178, 0.572826027870178], + [0.457098007202148, 0.584792017936707], + [0.381974011659622, 0.694710969924927], + [0.392388999462128, 0.694203019142151], + [0.277076005935669, 0.271932005882263], + [0.422551989555359, 0.563233017921448], + [0.385919004678726, 0.281364023685455], + [0.383103013038635, 0.255840003490448], + [0.331431001424789, 0.119714021682739], + [0.229923993349075, 0.232002973556519], + [0.364500999450684, 0.189113974571228], + [0.229622006416321, 0.299540996551514], + [0.173287004232407, 0.278747975826263], + [0.472878992557526, 0.666198015213013], + [0.446828007698059, 0.668527007102966], + [0.422762006521225, 0.673889994621277], + [0.445307999849319, 0.580065965652466], + [0.388103008270264, 0.693961024284363], + [0.403039008378983, 0.706539988517761], + [0.403629004955292, 0.693953037261963], + [0.460041999816895, 0.557139039039612], + [0.431158006191254, 0.692366003990173], + [0.452181994915009, 0.692366003990173], + [0.475387006998062, 0.692366003990173], + [0.465828001499176, 0.779190003871918], + [0.472328990697861, 0.736225962638855], + [0.473087012767792, 0.717857003211975], + [0.473122000694275, 0.704625964164734], + [0.473033010959625, 0.695277988910675], + [0.427942007780075, 0.695277988910675], + [0.426479011774063, 0.703539967536926], + [0.423162013292313, 0.711845993995667], + [0.4183090031147, 0.720062971115112], + [0.390094995498657, 0.639572978019714], + [0.013953999616206, 0.560034036636353], + [0.499913990497589, 0.58014702796936], + [0.413199990987778, 0.69539999961853], + [0.409626007080078, 0.701822996139526], + [0.468080013990402, 0.601534962654114], + [0.422728985548019, 0.585985004901886], + [0.463079988956451, 0.593783974647522], + [0.37211999297142, 0.47341400384903], + [0.334562003612518, 0.496073007583618], + [0.411671012639999, 0.546965003013611], + [0.242175996303558, 0.14767599105835], + [0.290776997804642, 0.201445996761322], + [0.327338010072708, 0.256527006626129], + [0.399509996175766, 0.748921036720276], + [0.441727995872498, 0.261676013469696], + [0.429764986038208, 0.187834024429321], + [0.412198007106781, 0.108901023864746], + [0.288955003023148, 0.398952007293701], + [0.218936994671822, 0.435410976409912], + [0.41278201341629, 0.398970007896423], + [0.257135003805161, 0.355440020561218], + [0.427684992551804, 0.437960982322693], + [0.448339998722076, 0.536936044692993], + [0.178560003638268, 0.45755398273468], + [0.247308000922203, 0.457193970680237], + [0.286267012357712, 0.467674970626831], + [0.332827985286713, 0.460712015628815], + [0.368755996227264, 0.447206974029541], + [0.398963987827301, 0.432654976844788], + [0.476410001516342, 0.405806005001068], + [0.189241006970406, 0.523923993110657], + [0.228962004184723, 0.348950982093811], + [0.490725994110107, 0.562400996685028], + [0.404670000076294, 0.485132992267609], + [0.019469000399113, 0.401564002037048], + [0.426243007183075, 0.420431017875671], + [0.396993011236191, 0.548797011375427], + [0.266469985246658, 0.376977026462555], + [0.439121007919312, 0.51895797252655], + [0.032313998788595, 0.644356966018677], + [0.419054001569748, 0.387154996395111], + [0.462783008813858, 0.505746960639954], + [0.238978996872902, 0.779744982719421], + [0.198220998048782, 0.831938028335571], + [0.107550002634525, 0.540755033493042], + [0.183610007166862, 0.740257024765015], + [0.134409993886948, 0.333683013916016], + [0.385764002799988, 0.883153975009918], + [0.490967005491257, 0.579378008842468], + [0.382384985685349, 0.508572995662689], + [0.174399003386497, 0.397670984268188], + [0.318785011768341, 0.39623498916626], + [0.343364000320435, 0.400596976280212], + [0.396100014448166, 0.710216999053955], + [0.187885001301765, 0.588537991046906], + [0.430987000465393, 0.944064974784851], + [0.318993002176285, 0.898285031318665], + [0.266247987747192, 0.869701027870178], + [0.500023007392883, 0.190576016902924], + [0.499976992607117, 0.954452991485596], + [0.366169989109039, 0.398822009563446], + [0.393207013607025, 0.39553701877594], + [0.410373002290726, 0.391080021858215], + [0.194993004202843, 0.342101991176605], + [0.388664990663528, 0.362284004688263], + [0.365961998701096, 0.355970978736877], + [0.343364000320435, 0.355356991291046], + [0.318785011768341, 0.35834002494812], + [0.301414996385574, 0.363156020641327], + [0.058132998645306, 0.319076001644135], + [0.301414996385574, 0.387449026107788], + [0.499987989664078, 0.618434011936188], + [0.415838003158569, 0.624195992946625], + [0.445681989192963, 0.566076993942261], + [0.465844005346298, 0.620640993118286], + [0.49992299079895, 0.351523995399475], + [0.288718998432159, 0.819945991039276], + [0.335278987884521, 0.852819979190826], + [0.440512001514435, 0.902418971061707], + [0.128294005990028, 0.791940987110138], + [0.408771991729736, 0.373893976211548], + [0.455606997013092, 0.451801002025604], + [0.499877005815506, 0.908990025520325], + [0.375436991453171, 0.924192011356354], + [0.11421000212431, 0.615022003650665], + [0.448662012815475, 0.695277988910675], + [0.4480200111866, 0.704632043838501], + [0.447111994028091, 0.715808033943176], + [0.444831997156143, 0.730794012546539], + [0.430011987686157, 0.766808986663818], + [0.406787008047104, 0.685672998428345], + [0.400738000869751, 0.681069016456604], + [0.392399996519089, 0.677703022956848], + [0.367855995893478, 0.663918972015381], + [0.247923001646996, 0.601333022117615], + [0.452769994735718, 0.420849978923798], + [0.43639200925827, 0.359887003898621], + [0.416164010763168, 0.368713974952698], + [0.413385987281799, 0.692366003990173], + [0.228018000721931, 0.683571994304657], + [0.468268007040024, 0.352671027183533], + [0.411361992359161, 0.804327011108398], + [0.499989002943039, 0.469825029373169], + [0.479153990745544, 0.442654013633728], + [0.499974012374878, 0.439637005329132], + [0.432112008333206, 0.493588984012604], + [0.499886006116867, 0.866917014122009], + [0.49991300702095, 0.821729004383087], + [0.456548988819122, 0.819200992584229], + [0.344549000263214, 0.745438992977142], + [0.37890899181366, 0.574010014533997], + [0.374292999505997, 0.780184984207153], + [0.319687992334366, 0.570737957954407], + [0.357154995203018, 0.604269981384277], + [0.295284003019333, 0.621580958366394], + [0.447750002145767, 0.862477004528046], + [0.410986006259918, 0.508723020553589], + [0.31395098567009, 0.775308012962341], + [0.354128003120422, 0.812552988529205], + [0.324548006057739, 0.703992962837219], + [0.189096003770828, 0.646299958229065], + [0.279776990413666, 0.71465802192688], + [0.1338230073452, 0.682700991630554], + [0.336768001317978, 0.644733011722565], + [0.429883986711502, 0.466521978378296], + [0.455527991056442, 0.548622965812683], + [0.437114000320435, 0.558896005153656], + [0.467287987470627, 0.529924988746643], + [0.414712011814117, 0.335219979286194], + [0.37704598903656, 0.322777986526489], + [0.344107985496521, 0.320150971412659], + [0.312875986099243, 0.32233202457428], + [0.283526003360748, 0.333190023899078], + [0.241245999932289, 0.382785975933075], + [0.102986000478268, 0.468762993812561], + [0.267612010240555, 0.424560010433197], + [0.297879010438919, 0.433175981044769], + [0.333433985710144, 0.433878004550934], + [0.366427004337311, 0.426115989685059], + [0.396012008190155, 0.416696012020111], + [0.420121014118195, 0.41022801399231], + [0.007561000064015, 0.480777025222778], + [0.432949006557465, 0.569517970085144], + [0.458638995885849, 0.479089021682739], + [0.473466008901596, 0.545744001865387], + [0.476087987422943, 0.563830018043518], + [0.468472003936768, 0.555056989192963], + [0.433990985155106, 0.582361996173859], + [0.483518004417419, 0.562983989715576], + [0.482482999563217, 0.57784903049469], + [0.42645001411438, 0.389798998832703], + [0.438998997211456, 0.39649498462677], + [0.450067013502121, 0.400434017181396], + [0.289712011814117, 0.368252992630005], + [0.276670008897781, 0.363372981548309], + [0.517862021923065, 0.471948027610779], + [0.710287988185883, 0.380764007568359], + [0.526226997375488, 0.573909997940063], + [0.895093023777008, 0.254140973091125], + [0.634069979190826, 0.409575998783112], + [0.661242008209229, 0.41302502155304], + [0.688880026340485, 0.409460008144379], + [0.725341975688934, 0.389131009578705], + [0.606630027294159, 0.40370500087738], + [0.654766023159027, 0.344011008739471], + [0.629905998706818, 0.346076011657715], + [0.680678009986877, 0.347265005111694], + [0.702096998691559, 0.353591024875641], + [0.75221198797226, 0.410804986953735], + [0.602918028831482, 0.842862963676453], + [0.719901978969574, 0.375599980354309], + [0.893692970275879, 0.399959981441498], + [0.790081977844238, 0.391354024410248], + [0.643998026847839, 0.534487962722778], + [0.528249025344849, 0.65040397644043], + [0.525849997997284, 0.680191040039062], + [0.560214996337891, 0.657229006290436], + [0.585384011268616, 0.66654098033905], + [0.549625992774963, 0.680860996246338], + [0.57122802734375, 0.682691991329193], + [0.624852001667023, 0.72809898853302], + [0.513050019741058, 0.547281980514526], + [0.51509702205658, 0.527251958847046], + [0.742246985435486, 0.314507007598877], + [0.598631024360657, 0.454979002475739], + [0.570338010787964, 0.548575043678284], + [0.578631997108459, 0.533622980117798], + [0.723087012767792, 0.532054007053375], + [0.516445994377136, 0.499638974666595], + [0.662801027297974, 0.282917976379395], + [0.70362401008606, 0.293271005153656], + [0.830704987049103, 0.193813979625702], + [0.552385985851288, 0.302568018436432], + [0.607609987258911, 0.353887975215912], + [0.645429015159607, 0.696707010269165], + [0.932694971561432, 0.730105042457581], + [0.557260990142822, 0.572826027870178], + [0.542901992797852, 0.584792017936707], + [0.6180260181427, 0.694710969924927], + [0.607590973377228, 0.694203019142151], + [0.722943007946014, 0.271963000297546], + [0.577413976192474, 0.563166975975037], + [0.614082992076874, 0.281386971473694], + [0.616907000541687, 0.255886018276215], + [0.668509006500244, 0.119913995265961], + [0.770092010498047, 0.232020974159241], + [0.635536015033722, 0.189248979091644], + [0.77039098739624, 0.299556016921997], + [0.826722025871277, 0.278755009174347], + [0.527121007442474, 0.666198015213013], + [0.553171992301941, 0.668527007102966], + [0.577238023281097, 0.673889994621277], + [0.554691970348358, 0.580065965652466], + [0.611896991729736, 0.693961024284363], + [0.59696102142334, 0.706539988517761], + [0.596370995044708, 0.693953037261963], + [0.539958000183105, 0.557139039039612], + [0.568841993808746, 0.692366003990173], + [0.547818005084991, 0.692366003990173], + [0.52461302280426, 0.692366003990173], + [0.534089982509613, 0.779141008853912], + [0.527670979499817, 0.736225962638855], + [0.526912987232208, 0.717857003211975], + [0.526877999305725, 0.704625964164734], + [0.526966989040375, 0.695277988910675], + [0.572058022022247, 0.695277988910675], + [0.573521018028259, 0.703539967536926], + [0.57683801651001, 0.711845993995667], + [0.581691026687622, 0.720062971115112], + [0.609944999217987, 0.639909982681274], + [0.986046016216278, 0.560034036636353], + [0.5867999792099, 0.69539999961853], + [0.590372025966644, 0.701822996139526], + [0.531915009021759, 0.601536989212036], + [0.577268004417419, 0.585934996604919], + [0.536915004253387, 0.593786001205444], + [0.627542972564697, 0.473352015018463], + [0.665585994720459, 0.495950996875763], + [0.588353991508484, 0.546862006187439], + [0.757824003696442, 0.14767599105835], + [0.709249973297119, 0.201507985591888], + [0.672684013843536, 0.256581008434296], + [0.600408971309662, 0.74900496006012], + [0.55826598405838, 0.261672019958496], + [0.570303976535797, 0.187870979309082], + [0.588165998458862, 0.109044015407562], + [0.711045026779175, 0.398952007293701], + [0.781069993972778, 0.435405015945435], + [0.587247014045715, 0.398931980133057], + [0.742869973182678, 0.355445981025696], + [0.572156012058258, 0.437651991844177], + [0.55186802148819, 0.536570012569427], + [0.821442008018494, 0.457556009292603], + [0.752701997756958, 0.457181990146637], + [0.71375697851181, 0.467626988887787], + [0.66711300611496, 0.460672974586487], + [0.631101012229919, 0.447153985500336], + [0.6008620262146, 0.432473003864288], + [0.523481011390686, 0.405627012252808], + [0.810747981071472, 0.523926019668579], + [0.771045982837677, 0.348959028720856], + [0.509127020835876, 0.562718033790588], + [0.595292985439301, 0.485023975372314], + [0.980530977249146, 0.401564002037048], + [0.573499977588654, 0.420000016689301], + [0.602994978427887, 0.548687994480133], + [0.733529984951019, 0.376977026462555], + [0.560611009597778, 0.519016981124878], + [0.967685997486115, 0.644356966018677], + [0.580985009670258, 0.387160003185272], + [0.537728011608124, 0.505385041236877], + [0.760966002941132, 0.779752969741821], + [0.801778972148895, 0.831938028335571], + [0.892440974712372, 0.54076099395752], + [0.816350996494293, 0.740260004997253], + [0.865594983100891, 0.333687007427216], + [0.614073991775513, 0.883246004581451], + [0.508952975273132, 0.579437971115112], + [0.617941975593567, 0.508316040039062], + [0.825608015060425, 0.397674977779388], + [0.681214988231659, 0.39623498916626], + [0.656635999679565, 0.400596976280212], + [0.603900015354156, 0.710216999053955], + [0.81208598613739, 0.588539004325867], + [0.56801301240921, 0.944564998149872], + [0.681007981300354, 0.898285031318665], + [0.733752012252808, 0.869701027870178], + [0.633830010890961, 0.398822009563446], + [0.606792986392975, 0.39553701877594], + [0.589659988880157, 0.391062021255493], + [0.805015981197357, 0.342108011245728], + [0.611334979534149, 0.362284004688263], + [0.634037971496582, 0.355970978736877], + [0.656635999679565, 0.355356991291046], + [0.681214988231659, 0.35834002494812], + [0.698584973812103, 0.363156020641327], + [0.941866993904114, 0.319076001644135], + [0.698584973812103, 0.387449026107788], + [0.584177017211914, 0.624107003211975], + [0.554318010807037, 0.566076993942261], + [0.534153997898102, 0.62064003944397], + [0.711217999458313, 0.819975018501282], + [0.664629995822906, 0.852871000766754], + [0.559099972248077, 0.902631998062134], + [0.871706008911133, 0.791940987110138], + [0.591234028339386, 0.373893976211548], + [0.544341027736664, 0.451583981513977], + [0.624562978744507, 0.924192011356354], + [0.88577002286911, 0.615028977394104], + [0.551338016986847, 0.695277988910675], + [0.551980018615723, 0.704632043838501], + [0.552887976169586, 0.715808033943176], + [0.555167973041534, 0.730794012546539], + [0.569944024085999, 0.767035007476807], + [0.593203008174896, 0.685675978660583], + [0.599261999130249, 0.681069016456604], + [0.607599973678589, 0.677703022956848], + [0.631937980651855, 0.663500010967255], + [0.752032995223999, 0.601315021514893], + [0.547226011753082, 0.420395016670227], + [0.563543975353241, 0.359827995300293], + [0.583841025829315, 0.368713974952698], + [0.586614012718201, 0.692366003990173], + [0.771915018558502, 0.683578014373779], + [0.531597018241882, 0.352482974529266], + [0.588370978832245, 0.804440975189209], + [0.52079701423645, 0.442565023899078], + [0.567984998226166, 0.493479013442993], + [0.543282985687256, 0.819254994392395], + [0.655317008495331, 0.745514988899231], + [0.621008992195129, 0.574018001556396], + [0.625559985637665, 0.78031200170517], + [0.680198013782501, 0.570719003677368], + [0.64276397228241, 0.604337990283966], + [0.704662978649139, 0.621529996395111], + [0.552012026309967, 0.862591981887817], + [0.589071989059448, 0.508637011051178], + [0.685944974422455, 0.775357007980347], + [0.645735025405884, 0.812640011310577], + [0.675342977046967, 0.703978002071381], + [0.810858011245728, 0.646304965019226], + [0.72012197971344, 0.714666962623596], + [0.866151988506317, 0.682704985141754], + [0.663187026977539, 0.644596993923187], + [0.570082008838654, 0.466325998306274], + [0.544561982154846, 0.548375964164734], + [0.562758982181549, 0.558784961700439], + [0.531987011432648, 0.530140042304993], + [0.585271000862122, 0.335177004337311], + [0.622952997684479, 0.32277899980545], + [0.655896008014679, 0.320163011550903], + [0.687132000923157, 0.322345972061157], + [0.716481983661652, 0.333200991153717], + [0.758756995201111, 0.382786989212036], + [0.897013008594513, 0.468769013881683], + [0.732392013072968, 0.424547016620636], + [0.70211398601532, 0.433162987232208], + [0.66652500629425, 0.433866024017334], + [0.633504986763, 0.426087975502014], + [0.603875994682312, 0.416586995124817], + [0.579657971858978, 0.409945011138916], + [0.992439985275269, 0.480777025222778], + [0.567192018032074, 0.569419980049133], + [0.54136598110199, 0.478899002075195], + [0.526564002037048, 0.546118021011353], + [0.523913025856018, 0.563830018043518], + [0.531529009342194, 0.555056989192963], + [0.566035985946655, 0.582329034805298], + [0.51631098985672, 0.563053965568542], + [0.5174720287323, 0.577877044677734], + [0.573594987392426, 0.389806985855103], + [0.560697972774506, 0.395331978797913], + [0.549755990505219, 0.399751007556915], + [0.710287988185883, 0.368252992630005], + [0.723330020904541, 0.363372981548309] +]; +var TRI468 = [ + 127, + 34, + 139, + 11, + 0, + 37, + 232, + 231, + 120, + 72, + 37, + 39, + 128, + 121, + 47, + 232, + 121, + 128, + 104, + 69, + 67, + 175, + 171, + 148, + 157, + 154, + 155, + 118, + 50, + 101, + 73, + 39, + 40, + 9, + 151, + 108, + 48, + 115, + 131, + 194, + 204, + 211, + 74, + 40, + 185, + 80, + 42, + 183, + 40, + 92, + 186, + 230, + 229, + 118, + 202, + 212, + 214, + 83, + 18, + 17, + 76, + 61, + 146, + 160, + 29, + 30, + 56, + 157, + 173, + 106, + 204, + 194, + 135, + 214, + 192, + 203, + 165, + 98, + 21, + 71, + 68, + 51, + 45, + 4, + 144, + 24, + 23, + 77, + 146, + 91, + 205, + 50, + 187, + 201, + 200, + 18, + 91, + 106, + 182, + 90, + 91, + 181, + 85, + 84, + 17, + 206, + 203, + 36, + 148, + 171, + 140, + 92, + 40, + 39, + 193, + 189, + 244, + 159, + 158, + 28, + 247, + 246, + 161, + 236, + 3, + 196, + 54, + 68, + 104, + 193, + 168, + 8, + 117, + 228, + 31, + 189, + 193, + 55, + 98, + 97, + 99, + 126, + 47, + 100, + 166, + 79, + 218, + 155, + 154, + 26, + 209, + 49, + 131, + 135, + 136, + 150, + 47, + 126, + 217, + 223, + 52, + 53, + 45, + 51, + 134, + 211, + 170, + 140, + 67, + 69, + 108, + 43, + 106, + 91, + 230, + 119, + 120, + 226, + 130, + 247, + 63, + 53, + 52, + 238, + 20, + 242, + 46, + 70, + 156, + 78, + 62, + 96, + 46, + 53, + 63, + 143, + 34, + 227, + 173, + 155, + 133, + 123, + 117, + 111, + 44, + 125, + 19, + 236, + 134, + 51, + 216, + 206, + 205, + 154, + 153, + 22, + 39, + 37, + 167, + 200, + 201, + 208, + 36, + 142, + 100, + 57, + 212, + 202, + 20, + 60, + 99, + 28, + 158, + 157, + 35, + 226, + 113, + 160, + 159, + 27, + 204, + 202, + 210, + 113, + 225, + 46, + 43, + 202, + 204, + 62, + 76, + 77, + 137, + 123, + 116, + 41, + 38, + 72, + 203, + 129, + 142, + 64, + 98, + 240, + 49, + 102, + 64, + 41, + 73, + 74, + 212, + 216, + 207, + 42, + 74, + 184, + 169, + 170, + 211, + 170, + 149, + 176, + 105, + 66, + 69, + 122, + 6, + 168, + 123, + 147, + 187, + 96, + 77, + 90, + 65, + 55, + 107, + 89, + 90, + 180, + 101, + 100, + 120, + 63, + 105, + 104, + 93, + 137, + 227, + 15, + 86, + 85, + 129, + 102, + 49, + 14, + 87, + 86, + 55, + 8, + 9, + 100, + 47, + 121, + 145, + 23, + 22, + 88, + 89, + 179, + 6, + 122, + 196, + 88, + 95, + 96, + 138, + 172, + 136, + 215, + 58, + 172, + 115, + 48, + 219, + 42, + 80, + 81, + 195, + 3, + 51, + 43, + 146, + 61, + 171, + 175, + 199, + 81, + 82, + 38, + 53, + 46, + 225, + 144, + 163, + 110, + 246, + 33, + 7, + 52, + 65, + 66, + 229, + 228, + 117, + 34, + 127, + 234, + 107, + 108, + 69, + 109, + 108, + 151, + 48, + 64, + 235, + 62, + 78, + 191, + 129, + 209, + 126, + 111, + 35, + 143, + 163, + 161, + 246, + 117, + 123, + 50, + 222, + 65, + 52, + 19, + 125, + 141, + 221, + 55, + 65, + 3, + 195, + 197, + 25, + 7, + 33, + 220, + 237, + 44, + 70, + 71, + 139, + 122, + 193, + 245, + 247, + 130, + 33, + 71, + 21, + 162, + 153, + 158, + 159, + 170, + 169, + 150, + 188, + 174, + 196, + 216, + 186, + 92, + 144, + 160, + 161, + 2, + 97, + 167, + 141, + 125, + 241, + 164, + 167, + 37, + 72, + 38, + 12, + 145, + 159, + 160, + 38, + 82, + 13, + 63, + 68, + 71, + 226, + 35, + 111, + 158, + 153, + 154, + 101, + 50, + 205, + 206, + 92, + 165, + 209, + 198, + 217, + 165, + 167, + 97, + 220, + 115, + 218, + 133, + 112, + 243, + 239, + 238, + 241, + 214, + 135, + 169, + 190, + 173, + 133, + 171, + 208, + 32, + 125, + 44, + 237, + 86, + 87, + 178, + 85, + 86, + 179, + 84, + 85, + 180, + 83, + 84, + 181, + 201, + 83, + 182, + 137, + 93, + 132, + 76, + 62, + 183, + 61, + 76, + 184, + 57, + 61, + 185, + 212, + 57, + 186, + 214, + 207, + 187, + 34, + 143, + 156, + 79, + 239, + 237, + 123, + 137, + 177, + 44, + 1, + 4, + 201, + 194, + 32, + 64, + 102, + 129, + 213, + 215, + 138, + 59, + 166, + 219, + 242, + 99, + 97, + 2, + 94, + 141, + 75, + 59, + 235, + 24, + 110, + 228, + 25, + 130, + 226, + 23, + 24, + 229, + 22, + 23, + 230, + 26, + 22, + 231, + 112, + 26, + 232, + 189, + 190, + 243, + 221, + 56, + 190, + 28, + 56, + 221, + 27, + 28, + 222, + 29, + 27, + 223, + 30, + 29, + 224, + 247, + 30, + 225, + 238, + 79, + 20, + 166, + 59, + 75, + 60, + 75, + 240, + 147, + 177, + 215, + 20, + 79, + 166, + 187, + 147, + 213, + 112, + 233, + 244, + 233, + 128, + 245, + 128, + 114, + 188, + 114, + 217, + 174, + 131, + 115, + 220, + 217, + 198, + 236, + 198, + 131, + 134, + 177, + 132, + 58, + 143, + 35, + 124, + 110, + 163, + 7, + 228, + 110, + 25, + 356, + 389, + 368, + 11, + 302, + 267, + 452, + 350, + 349, + 302, + 303, + 269, + 357, + 343, + 277, + 452, + 453, + 357, + 333, + 332, + 297, + 175, + 152, + 377, + 384, + 398, + 382, + 347, + 348, + 330, + 303, + 304, + 270, + 9, + 336, + 337, + 278, + 279, + 360, + 418, + 262, + 431, + 304, + 408, + 409, + 310, + 415, + 407, + 270, + 409, + 410, + 450, + 348, + 347, + 422, + 430, + 434, + 313, + 314, + 17, + 306, + 307, + 375, + 387, + 388, + 260, + 286, + 414, + 398, + 335, + 406, + 418, + 364, + 367, + 416, + 423, + 358, + 327, + 251, + 284, + 298, + 281, + 5, + 4, + 373, + 374, + 253, + 307, + 320, + 321, + 425, + 427, + 411, + 421, + 313, + 18, + 321, + 405, + 406, + 320, + 404, + 405, + 315, + 16, + 17, + 426, + 425, + 266, + 377, + 400, + 369, + 322, + 391, + 269, + 417, + 465, + 464, + 386, + 257, + 258, + 466, + 260, + 388, + 456, + 399, + 419, + 284, + 332, + 333, + 417, + 285, + 8, + 346, + 340, + 261, + 413, + 441, + 285, + 327, + 460, + 328, + 355, + 371, + 329, + 392, + 439, + 438, + 382, + 341, + 256, + 429, + 420, + 360, + 364, + 394, + 379, + 277, + 343, + 437, + 443, + 444, + 283, + 275, + 440, + 363, + 431, + 262, + 369, + 297, + 338, + 337, + 273, + 375, + 321, + 450, + 451, + 349, + 446, + 342, + 467, + 293, + 334, + 282, + 458, + 461, + 462, + 276, + 353, + 383, + 308, + 324, + 325, + 276, + 300, + 293, + 372, + 345, + 447, + 382, + 398, + 362, + 352, + 345, + 340, + 274, + 1, + 19, + 456, + 248, + 281, + 436, + 427, + 425, + 381, + 256, + 252, + 269, + 391, + 393, + 200, + 199, + 428, + 266, + 330, + 329, + 287, + 273, + 422, + 250, + 462, + 328, + 258, + 286, + 384, + 265, + 353, + 342, + 387, + 259, + 257, + 424, + 431, + 430, + 342, + 353, + 276, + 273, + 335, + 424, + 292, + 325, + 307, + 366, + 447, + 345, + 271, + 303, + 302, + 423, + 266, + 371, + 294, + 455, + 460, + 279, + 278, + 294, + 271, + 272, + 304, + 432, + 434, + 427, + 272, + 407, + 408, + 394, + 430, + 431, + 395, + 369, + 400, + 334, + 333, + 299, + 351, + 417, + 168, + 352, + 280, + 411, + 325, + 319, + 320, + 295, + 296, + 336, + 319, + 403, + 404, + 330, + 348, + 349, + 293, + 298, + 333, + 323, + 454, + 447, + 15, + 16, + 315, + 358, + 429, + 279, + 14, + 15, + 316, + 285, + 336, + 9, + 329, + 349, + 350, + 374, + 380, + 252, + 318, + 402, + 403, + 6, + 197, + 419, + 318, + 319, + 325, + 367, + 364, + 365, + 435, + 367, + 397, + 344, + 438, + 439, + 272, + 271, + 311, + 195, + 5, + 281, + 273, + 287, + 291, + 396, + 428, + 199, + 311, + 271, + 268, + 283, + 444, + 445, + 373, + 254, + 339, + 263, + 466, + 249, + 282, + 334, + 296, + 449, + 347, + 346, + 264, + 447, + 454, + 336, + 296, + 299, + 338, + 10, + 151, + 278, + 439, + 455, + 292, + 407, + 415, + 358, + 371, + 355, + 340, + 345, + 372, + 390, + 249, + 466, + 346, + 347, + 280, + 442, + 443, + 282, + 19, + 94, + 370, + 441, + 442, + 295, + 248, + 419, + 197, + 263, + 255, + 359, + 440, + 275, + 274, + 300, + 383, + 368, + 351, + 412, + 465, + 263, + 467, + 466, + 301, + 368, + 389, + 380, + 374, + 386, + 395, + 378, + 379, + 412, + 351, + 419, + 436, + 426, + 322, + 373, + 390, + 388, + 2, + 164, + 393, + 370, + 462, + 461, + 164, + 0, + 267, + 302, + 11, + 12, + 374, + 373, + 387, + 268, + 12, + 13, + 293, + 300, + 301, + 446, + 261, + 340, + 385, + 384, + 381, + 330, + 266, + 425, + 426, + 423, + 391, + 429, + 355, + 437, + 391, + 327, + 326, + 440, + 457, + 438, + 341, + 382, + 362, + 459, + 457, + 461, + 434, + 430, + 394, + 414, + 463, + 362, + 396, + 369, + 262, + 354, + 461, + 457, + 316, + 403, + 402, + 315, + 404, + 403, + 314, + 405, + 404, + 313, + 406, + 405, + 421, + 418, + 406, + 366, + 401, + 361, + 306, + 408, + 407, + 291, + 409, + 408, + 287, + 410, + 409, + 432, + 436, + 410, + 434, + 416, + 411, + 264, + 368, + 383, + 309, + 438, + 457, + 352, + 376, + 401, + 274, + 275, + 4, + 421, + 428, + 262, + 294, + 327, + 358, + 433, + 416, + 367, + 289, + 455, + 439, + 462, + 370, + 326, + 2, + 326, + 370, + 305, + 460, + 455, + 254, + 449, + 448, + 255, + 261, + 446, + 253, + 450, + 449, + 252, + 451, + 450, + 256, + 452, + 451, + 341, + 453, + 452, + 413, + 464, + 463, + 441, + 413, + 414, + 258, + 442, + 441, + 257, + 443, + 442, + 259, + 444, + 443, + 260, + 445, + 444, + 467, + 342, + 445, + 459, + 458, + 250, + 289, + 392, + 290, + 290, + 328, + 460, + 376, + 433, + 435, + 250, + 290, + 392, + 411, + 416, + 433, + 341, + 463, + 464, + 453, + 464, + 465, + 357, + 465, + 412, + 343, + 412, + 399, + 360, + 363, + 440, + 437, + 399, + 456, + 420, + 456, + 363, + 401, + 435, + 288, + 372, + 383, + 353, + 339, + 255, + 249, + 448, + 261, + 255, + 133, + 243, + 190, + 133, + 155, + 112, + 33, + 246, + 247, + 33, + 130, + 25, + 398, + 384, + 286, + 362, + 398, + 414, + 362, + 463, + 341, + 263, + 359, + 467, + 263, + 249, + 255, + 466, + 467, + 260, + 75, + 60, + 166, + 238, + 239, + 79, + 162, + 127, + 139, + 72, + 11, + 37, + 121, + 232, + 120, + 73, + 72, + 39, + 114, + 128, + 47, + 233, + 232, + 128, + 103, + 104, + 67, + 152, + 175, + 148, + 173, + 157, + 155, + 119, + 118, + 101, + 74, + 73, + 40, + 107, + 9, + 108, + 49, + 48, + 131, + 32, + 194, + 211, + 184, + 74, + 185, + 191, + 80, + 183, + 185, + 40, + 186, + 119, + 230, + 118, + 210, + 202, + 214, + 84, + 83, + 17, + 77, + 76, + 146, + 161, + 160, + 30, + 190, + 56, + 173, + 182, + 106, + 194, + 138, + 135, + 192, + 129, + 203, + 98, + 54, + 21, + 68, + 5, + 51, + 4, + 145, + 144, + 23, + 90, + 77, + 91, + 207, + 205, + 187, + 83, + 201, + 18, + 181, + 91, + 182, + 180, + 90, + 181, + 16, + 85, + 17, + 205, + 206, + 36, + 176, + 148, + 140, + 165, + 92, + 39, + 245, + 193, + 244, + 27, + 159, + 28, + 30, + 247, + 161, + 174, + 236, + 196, + 103, + 54, + 104, + 55, + 193, + 8, + 111, + 117, + 31, + 221, + 189, + 55, + 240, + 98, + 99, + 142, + 126, + 100, + 219, + 166, + 218, + 112, + 155, + 26, + 198, + 209, + 131, + 169, + 135, + 150, + 114, + 47, + 217, + 224, + 223, + 53, + 220, + 45, + 134, + 32, + 211, + 140, + 109, + 67, + 108, + 146, + 43, + 91, + 231, + 230, + 120, + 113, + 226, + 247, + 105, + 63, + 52, + 241, + 238, + 242, + 124, + 46, + 156, + 95, + 78, + 96, + 70, + 46, + 63, + 116, + 143, + 227, + 116, + 123, + 111, + 1, + 44, + 19, + 3, + 236, + 51, + 207, + 216, + 205, + 26, + 154, + 22, + 165, + 39, + 167, + 199, + 200, + 208, + 101, + 36, + 100, + 43, + 57, + 202, + 242, + 20, + 99, + 56, + 28, + 157, + 124, + 35, + 113, + 29, + 160, + 27, + 211, + 204, + 210, + 124, + 113, + 46, + 106, + 43, + 204, + 96, + 62, + 77, + 227, + 137, + 116, + 73, + 41, + 72, + 36, + 203, + 142, + 235, + 64, + 240, + 48, + 49, + 64, + 42, + 41, + 74, + 214, + 212, + 207, + 183, + 42, + 184, + 210, + 169, + 211, + 140, + 170, + 176, + 104, + 105, + 69, + 193, + 122, + 168, + 50, + 123, + 187, + 89, + 96, + 90, + 66, + 65, + 107, + 179, + 89, + 180, + 119, + 101, + 120, + 68, + 63, + 104, + 234, + 93, + 227, + 16, + 15, + 85, + 209, + 129, + 49, + 15, + 14, + 86, + 107, + 55, + 9, + 120, + 100, + 121, + 153, + 145, + 22, + 178, + 88, + 179, + 197, + 6, + 196, + 89, + 88, + 96, + 135, + 138, + 136, + 138, + 215, + 172, + 218, + 115, + 219, + 41, + 42, + 81, + 5, + 195, + 51, + 57, + 43, + 61, + 208, + 171, + 199, + 41, + 81, + 38, + 224, + 53, + 225, + 24, + 144, + 110, + 105, + 52, + 66, + 118, + 229, + 117, + 227, + 34, + 234, + 66, + 107, + 69, + 10, + 109, + 151, + 219, + 48, + 235, + 183, + 62, + 191, + 142, + 129, + 126, + 116, + 111, + 143, + 7, + 163, + 246, + 118, + 117, + 50, + 223, + 222, + 52, + 94, + 19, + 141, + 222, + 221, + 65, + 196, + 3, + 197, + 45, + 220, + 44, + 156, + 70, + 139, + 188, + 122, + 245, + 139, + 71, + 162, + 145, + 153, + 159, + 149, + 170, + 150, + 122, + 188, + 196, + 206, + 216, + 92, + 163, + 144, + 161, + 164, + 2, + 167, + 242, + 141, + 241, + 0, + 164, + 37, + 11, + 72, + 12, + 144, + 145, + 160, + 12, + 38, + 13, + 70, + 63, + 71, + 31, + 226, + 111, + 157, + 158, + 154, + 36, + 101, + 205, + 203, + 206, + 165, + 126, + 209, + 217, + 98, + 165, + 97, + 237, + 220, + 218, + 237, + 239, + 241, + 210, + 214, + 169, + 140, + 171, + 32, + 241, + 125, + 237, + 179, + 86, + 178, + 180, + 85, + 179, + 181, + 84, + 180, + 182, + 83, + 181, + 194, + 201, + 182, + 177, + 137, + 132, + 184, + 76, + 183, + 185, + 61, + 184, + 186, + 57, + 185, + 216, + 212, + 186, + 192, + 214, + 187, + 139, + 34, + 156, + 218, + 79, + 237, + 147, + 123, + 177, + 45, + 44, + 4, + 208, + 201, + 32, + 98, + 64, + 129, + 192, + 213, + 138, + 235, + 59, + 219, + 141, + 242, + 97, + 97, + 2, + 141, + 240, + 75, + 235, + 229, + 24, + 228, + 31, + 25, + 226, + 230, + 23, + 229, + 231, + 22, + 230, + 232, + 26, + 231, + 233, + 112, + 232, + 244, + 189, + 243, + 189, + 221, + 190, + 222, + 28, + 221, + 223, + 27, + 222, + 224, + 29, + 223, + 225, + 30, + 224, + 113, + 247, + 225, + 99, + 60, + 240, + 213, + 147, + 215, + 60, + 20, + 166, + 192, + 187, + 213, + 243, + 112, + 244, + 244, + 233, + 245, + 245, + 128, + 188, + 188, + 114, + 174, + 134, + 131, + 220, + 174, + 217, + 236, + 236, + 198, + 134, + 215, + 177, + 58, + 156, + 143, + 124, + 25, + 110, + 7, + 31, + 228, + 25, + 264, + 356, + 368, + 0, + 11, + 267, + 451, + 452, + 349, + 267, + 302, + 269, + 350, + 357, + 277, + 350, + 452, + 357, + 299, + 333, + 297, + 396, + 175, + 377, + 381, + 384, + 382, + 280, + 347, + 330, + 269, + 303, + 270, + 151, + 9, + 337, + 344, + 278, + 360, + 424, + 418, + 431, + 270, + 304, + 409, + 272, + 310, + 407, + 322, + 270, + 410, + 449, + 450, + 347, + 432, + 422, + 434, + 18, + 313, + 17, + 291, + 306, + 375, + 259, + 387, + 260, + 424, + 335, + 418, + 434, + 364, + 416, + 391, + 423, + 327, + 301, + 251, + 298, + 275, + 281, + 4, + 254, + 373, + 253, + 375, + 307, + 321, + 280, + 425, + 411, + 200, + 421, + 18, + 335, + 321, + 406, + 321, + 320, + 405, + 314, + 315, + 17, + 423, + 426, + 266, + 396, + 377, + 369, + 270, + 322, + 269, + 413, + 417, + 464, + 385, + 386, + 258, + 248, + 456, + 419, + 298, + 284, + 333, + 168, + 417, + 8, + 448, + 346, + 261, + 417, + 413, + 285, + 326, + 327, + 328, + 277, + 355, + 329, + 309, + 392, + 438, + 381, + 382, + 256, + 279, + 429, + 360, + 365, + 364, + 379, + 355, + 277, + 437, + 282, + 443, + 283, + 281, + 275, + 363, + 395, + 431, + 369, + 299, + 297, + 337, + 335, + 273, + 321, + 348, + 450, + 349, + 359, + 446, + 467, + 283, + 293, + 282, + 250, + 458, + 462, + 300, + 276, + 383, + 292, + 308, + 325, + 283, + 276, + 293, + 264, + 372, + 447, + 346, + 352, + 340, + 354, + 274, + 19, + 363, + 456, + 281, + 426, + 436, + 425, + 380, + 381, + 252, + 267, + 269, + 393, + 421, + 200, + 428, + 371, + 266, + 329, + 432, + 287, + 422, + 290, + 250, + 328, + 385, + 258, + 384, + 446, + 265, + 342, + 386, + 387, + 257, + 422, + 424, + 430, + 445, + 342, + 276, + 422, + 273, + 424, + 306, + 292, + 307, + 352, + 366, + 345, + 268, + 271, + 302, + 358, + 423, + 371, + 327, + 294, + 460, + 331, + 279, + 294, + 303, + 271, + 304, + 436, + 432, + 427, + 304, + 272, + 408, + 395, + 394, + 431, + 378, + 395, + 400, + 296, + 334, + 299, + 6, + 351, + 168, + 376, + 352, + 411, + 307, + 325, + 320, + 285, + 295, + 336, + 320, + 319, + 404, + 329, + 330, + 349, + 334, + 293, + 333, + 366, + 323, + 447, + 316, + 15, + 315, + 331, + 358, + 279, + 317, + 14, + 316, + 8, + 285, + 9, + 277, + 329, + 350, + 253, + 374, + 252, + 319, + 318, + 403, + 351, + 6, + 419, + 324, + 318, + 325, + 397, + 367, + 365, + 288, + 435, + 397, + 278, + 344, + 439, + 310, + 272, + 311, + 248, + 195, + 281, + 375, + 273, + 291, + 175, + 396, + 199, + 312, + 311, + 268, + 276, + 283, + 445, + 390, + 373, + 339, + 295, + 282, + 296, + 448, + 449, + 346, + 356, + 264, + 454, + 337, + 336, + 299, + 337, + 338, + 151, + 294, + 278, + 455, + 308, + 292, + 415, + 429, + 358, + 355, + 265, + 340, + 372, + 388, + 390, + 466, + 352, + 346, + 280, + 295, + 442, + 282, + 354, + 19, + 370, + 285, + 441, + 295, + 195, + 248, + 197, + 457, + 440, + 274, + 301, + 300, + 368, + 417, + 351, + 465, + 251, + 301, + 389, + 385, + 380, + 386, + 394, + 395, + 379, + 399, + 412, + 419, + 410, + 436, + 322, + 387, + 373, + 388, + 326, + 2, + 393, + 354, + 370, + 461, + 393, + 164, + 267, + 268, + 302, + 12, + 386, + 374, + 387, + 312, + 268, + 13, + 298, + 293, + 301, + 265, + 446, + 340, + 380, + 385, + 381, + 280, + 330, + 425, + 322, + 426, + 391, + 420, + 429, + 437, + 393, + 391, + 326, + 344, + 440, + 438, + 458, + 459, + 461, + 364, + 434, + 394, + 428, + 396, + 262, + 274, + 354, + 457, + 317, + 316, + 402, + 316, + 315, + 403, + 315, + 314, + 404, + 314, + 313, + 405, + 313, + 421, + 406, + 323, + 366, + 361, + 292, + 306, + 407, + 306, + 291, + 408, + 291, + 287, + 409, + 287, + 432, + 410, + 427, + 434, + 411, + 372, + 264, + 383, + 459, + 309, + 457, + 366, + 352, + 401, + 1, + 274, + 4, + 418, + 421, + 262, + 331, + 294, + 358, + 435, + 433, + 367, + 392, + 289, + 439, + 328, + 462, + 326, + 94, + 2, + 370, + 289, + 305, + 455, + 339, + 254, + 448, + 359, + 255, + 446, + 254, + 253, + 449, + 253, + 252, + 450, + 252, + 256, + 451, + 256, + 341, + 452, + 414, + 413, + 463, + 286, + 441, + 414, + 286, + 258, + 441, + 258, + 257, + 442, + 257, + 259, + 443, + 259, + 260, + 444, + 260, + 467, + 445, + 309, + 459, + 250, + 305, + 289, + 290, + 305, + 290, + 460, + 401, + 376, + 435, + 309, + 250, + 392, + 376, + 411, + 433, + 453, + 341, + 464, + 357, + 453, + 465, + 343, + 357, + 412, + 437, + 343, + 399, + 344, + 360, + 440, + 420, + 437, + 456, + 360, + 420, + 363, + 361, + 401, + 288, + 265, + 372, + 353, + 390, + 339, + 249, + 339, + 448, + 255 +]; +var VTX68 = [ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + 78, + 81, + 13, + 311, + 308, + 402, + 14, + 178 +]; +var VTX33 = [33, 133, 362, 263, 1, 62, 308, 159, 145, 386, 374, 6, 102, 331, 2, 13, 14, 70, 105, 107, 336, 334, 300, 54, 10, 284, 50, 280, 234, 454, 58, 288, 152]; +var VTX7 = [33, 133, 362, 263, 1, 78, 308]; +var UV68 = VTX68.map((x) => UV468[x]); +var UV33 = VTX33.map((x) => UV468[x]); +var UV7 = VTX7.map((x) => UV468[x]); +function connectionsToIndices(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var pairsLips = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var pairsLeftEye = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var pairsLeftEyebrow = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var pairsLeftIris = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var pairsRightEye = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var pairsRightEyebrow = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var pairsRightIris = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var pairsFaceContour = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +var contourKeypoints = { + lips: connectionsToIndices(pairsLips), + leftEye: connectionsToIndices(pairsLeftEye), + leftEyebrow: connectionsToIndices(pairsLeftEyebrow), + leftIris: connectionsToIndices(pairsLeftIris), + rightEye: connectionsToIndices(pairsRightEye), + rightEyebrow: connectionsToIndices(pairsRightEyebrow), + rightIris: connectionsToIndices(pairsRightIris), + faceOval: connectionsToIndices(pairsFaceContour) +}; + +// src/face/constants.ts +var LIPS_CONNECTIONS = [ + [61, 146], + [146, 91], + [91, 181], + [181, 84], + [84, 17], + [17, 314], + [314, 405], + [405, 321], + [321, 375], + [375, 291], + [61, 185], + [185, 40], + [40, 39], + [39, 37], + [37, 0], + [0, 267], + [267, 269], + [269, 270], + [270, 409], + [409, 291], + [78, 95], + [95, 88], + [88, 178], + [178, 87], + [87, 14], + [14, 317], + [317, 402], + [402, 318], + [318, 324], + [324, 308], + [78, 191], + [191, 80], + [80, 81], + [81, 82], + [82, 13], + [13, 312], + [312, 311], + [311, 310], + [310, 415], + [415, 308] +]; +var LEFT_EYE_CONNECTIONS = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]]; +var LEFT_EYEBROW_CONNECTIONS = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]]; +var LEFT_IRIS_CONNECTIONS = [[474, 475], [475, 476], [476, 477], [477, 474]]; +var RIGHT_EYE_CONNECTIONS = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]]; +var RIGHT_EYEBROW_CONNECTIONS = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]]; +var RIGHT_IRIS_CONNECTIONS = [[469, 470], [470, 471], [471, 472], [472, 469]]; +var FACE_OVAL_CONNECTIONS = [ + [10, 338], + [338, 297], + [297, 332], + [332, 284], + [284, 251], + [251, 389], + [389, 356], + [356, 454], + [454, 323], + [323, 361], + [361, 288], + [288, 397], + [397, 365], + [365, 379], + [379, 378], + [378, 400], + [400, 377], + [377, 152], + [152, 148], + [148, 176], + [176, 149], + [149, 150], + [150, 136], + [136, 172], + [172, 58], + [58, 132], + [132, 93], + [93, 234], + [234, 127], + [127, 162], + [162, 21], + [21, 54], + [54, 103], + [103, 67], + [67, 109], + [109, 10] +]; +function connectionsToIndices2(connections) { + const indices = connections.map((connection) => connection[0]); + indices.push(connections[connections.length - 1][1]); + return indices; +} +var MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = { + lips: connectionsToIndices2(LIPS_CONNECTIONS), + leftEye: connectionsToIndices2(LEFT_EYE_CONNECTIONS), + leftEyebrow: connectionsToIndices2(LEFT_EYEBROW_CONNECTIONS), + leftIris: connectionsToIndices2(LEFT_IRIS_CONNECTIONS), + rightEye: connectionsToIndices2(RIGHT_EYE_CONNECTIONS), + rightEyebrow: connectionsToIndices2(RIGHT_EYEBROW_CONNECTIONS), + rightIris: connectionsToIndices2(RIGHT_IRIS_CONNECTIONS), + faceOval: connectionsToIndices2(FACE_OVAL_CONNECTIONS) +}; +var indexLabelPairs = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR).map(([label, indices]) => indices.map((index2) => [index2, label])).flat(); +var MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs); +var LANDMARKS_REFINEMENT_LIPS_CONFIG = [ + 61, + 146, + 91, + 181, + 84, + 17, + 314, + 405, + 321, + 375, + 291, + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + 246, + 161, + 160, + 159, + 158, + 157, + 173, + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + 247, + 30, + 29, + 27, + 28, + 56, + 190, + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + 113, + 225, + 224, + 223, + 222, + 221, + 189, + 35, + 124, + 46, + 53, + 52, + 65, + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + 466, + 388, + 387, + 386, + 385, + 384, + 398, + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + 467, + 260, + 259, + 257, + 258, + 286, + 414, + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + 342, + 445, + 444, + 443, + 442, + 441, + 413, + 265, + 353, + 276, + 283, + 282, + 295, + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 +]; + +// src/draw/face.ts +var localOptions; +function drawLabels(f, ctx) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) + return; + let l = localOptions.faceLabels.slice(); + if (f.score) + l = replace(l, "[score]", 100 * f.score); + if (f.gender) + l = replace(l, "[gender]", f.gender); + if (f.genderScore) + l = replace(l, "[genderScore]", 100 * f.genderScore); + if (f.age) + l = replace(l, "[age]", f.age); + if (f.distance) + l = replace(l, "[distance]", 100 * f.distance); + if (f.real) + l = replace(l, "[real]", 100 * f.real); + if (f.live) + l = replace(l, "[live]", 100 * f.live); + if (f.emotion && f.emotion.length > 0) { + const emotion2 = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`); + if (emotion2.length > 3) + emotion2.length = 3; + l = replace(l, "[emotions]", emotion2.join(" ")); + } + if ((_c = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c.roll) + l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); + if ((_e = (_d = f.rotation) == null ? void 0 : _d.angle) == null ? void 0 : _e.yaw) + l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); + if ((_g = (_f = f.rotation) == null ? void 0 : _f.angle) == null ? void 0 : _g.pitch) + l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); + if ((_i = (_h = f.rotation) == null ? void 0 : _h.gaze) == null ? void 0 : _i.bearing) + l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); + labels(ctx, l, f.box[0], f.box[1], localOptions); +} +function drawIrisElipse(f, ctx) { + var _a, _b, _c, _d; + if (((_a = f.annotations) == null ? void 0 : _a.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } + if (((_c = f.annotations) == null ? void 0 : _c.rightEyeIris) && ((_d = f.annotations) == null ? void 0 : _d.rightEyeIris[0])) { + ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; + ctx.beginPath(); + const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2; + const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2; + ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI); + ctx.stroke(); + if (localOptions.fillPolygons) { + ctx.fillStyle = localOptions.useDepth ? "rgba(255, 255, 200, 0.3)" : localOptions.color; + ctx.fill(); + } + } +} +function drawGazeSpheres(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.angle) && typeof Path2D !== "undefined") { + ctx.strokeStyle = "pink"; + const valX = f.box[0] + f.box[2] / 2 - f.box[3] * rad2deg(f.rotation.angle.yaw) / 90; + const valY = f.box[1] + f.box[3] / 2 + f.box[2] * rad2deg(f.rotation.angle.pitch) / 90; + const pathV = new Path2D(` + M ${f.box[0] + f.box[2] / 2} ${f.box[1]} C - ${o} ${e.box[1]}, - ${o} ${e.box[1]+e.box[3]}, - ${e.box[0]+e.box[2]/2} ${e.box[1]+e.box[3]} - `),A=new Path2D(` - M ${e.box[0]} ${e.box[1]+e.box[3]/2} + ${valX} ${f.box[1]}, + ${valX} ${f.box[1] + f.box[3]}, + ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]} + `); + const pathH = new Path2D(` + M ${f.box[0]} ${f.box[1] + f.box[3] / 2} C - ${e.box[0]} ${r}, - ${e.box[0]+e.box[2]} ${r}, - ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(A),t.stroke(s)}}function Ls(e,t){var n;if(K.drawGaze&&((n=e.rotation)==null?void 0:n.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let o=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Qt(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[o[0],o[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Qt(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Cs(e,t){if(K.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[r]);Jt(t,o,K)}Is(e,t)}}function Ws(e,t){if(K.drawPoints&&e.mesh.length>=468)for(let n=0;n0&&(Ws(r,o),Cs(r,o),Os(r,o),Ls(r,o))}}function U2(e,t,n){var s,A;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=_(l,"[score]",100*t[a].score),te(r,l,t[a].box[0],t[a].box[1],o)}if(o.drawPoints&&t[a].keypoints)for(let l=0;l0&&t[a].keypoints){r.font=o.font;for(let l of t[a].keypoints){if(!l.score||l.score===0)continue;let c=o.bodyPartLabels.slice();c=_(c,"[label]",l.part),c=_(c,"[score]",100*l.score),te(r,c,l.position[0],l.position[1],o)}}if(o.drawPolygons&&t[a].keypoints&&t[a].annotations)for(let l of Object.values(t[a].annotations))for(let c of l)H1(r,c,o)}}}function Y2(e,t,n){var s,A;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let a of t){if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,a.box[0],a.box[1],a.box[2],a.box[3],o),o.drawLabels&&((s=o.handLabels)==null?void 0:s.length)>0){let l=o.handLabels.slice();l=_(l,"[label]",a.label),l=_(l,"[score]",100*a.score),te(r,l,a.box[0],a.box[1],o)}r.stroke()}if(o.drawPoints&&a.keypoints&&a.keypoints.length>0)for(let l of a.keypoints)r.fillStyle=Ye(l[2],o),be(r,l[0],l[1],0,o);if(o.drawLabels&&a.annotations&&((A=o.fingerLabels)==null?void 0:A.length)>0)for(let[l,c]of Object.entries(a.annotations)){let x=o.fingerLabels.slice();x=_(x,"[label]",l),te(r,x,c[c.length-1][0],c[c.length-1][1],o)}if(o.drawPolygons&&a.annotations){let l=c=>{if(!(!c||c.length===0||!c[0]))for(let x=0;x0?x-1:0][0],c[x>0?x-1:0][1]),r.lineTo(c[x][0],c[x][1]),r.stroke()}};r.lineWidth=o.lineWidth,l(a.annotations.index),l(a.annotations.middle),l(a.annotations.ring),l(a.annotations.pinky),l(a.annotations.thumb)}}}}function K2(e,t,n){var s;let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let A of t)if(o.drawBoxes){if(r.strokeStyle=o.color,r.fillStyle=o.color,me(r,A.box[0],A.box[1],A.box[2],A.box[3],o),o.drawLabels&&((s=o.objectLabels)==null?void 0:s.length)>0){let a=o.objectLabels.slice();a=_(a,"[label]",A.label),a=_(a,"[score]",100*A.score),te(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function J2(e,t,n){var r;let o=A0(d0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=J0(e);if(!s)return;s.font=o.font,s.fillStyle=o.color;let A=1;for(let a=0;a1&&c[1].length>0){let x=l[1]>0?`#${l[1]}`:"",i=o.gestureLabels.slice();i=_(i,"[where]",l[0]),i=_(i,"[who]",x),i=_(i,"[what]",c[1]),te(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var je={face:`face + ${f.box[0]} ${valY}, + ${f.box[0] + f.box[2]} ${valY}, + ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2} + `); + ctx.stroke(pathH); + ctx.stroke(pathV); + } +} +function drawGazeArrows(f, ctx) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { + ctx.strokeStyle = "pink"; + ctx.fillStyle = "pink"; + const leftGaze = [ + f.annotations.leftEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.leftEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4); + const rightGaze = [ + f.annotations.rightEyeIris[0][0] + Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3], + f.annotations.rightEyeIris[0][1] + Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2] + ]; + arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4); + } +} +function drawFacePolygons(f, ctx) { + if (localOptions.drawPolygons && f.mesh.length >= 468) { + ctx.lineWidth = 1; + for (let i = 0; i < TRI468.length / 3; i++) { + const points = [TRI468[i * 3 + 0], TRI468[i * 3 + 1], TRI468[i * 3 + 2]].map((index2) => f.mesh[index2]); + lines(ctx, points, localOptions); + } + drawIrisElipse(f, ctx); + } +} +function drawFacePoints(f, ctx) { + if (localOptions.drawPoints && f.mesh.length >= 468) { + for (let i = 0; i < f.mesh.length; i++) { + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions); + if (localOptions.drawAttention) { + if (LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] + 127, localOptions); + if (LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + if (LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) + point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2] - 127, localOptions); + } + } + } +} +function drawFaceBoxes(f, ctx) { + if (localOptions.drawBoxes) { + rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions); + } +} +function face(inCanvas2, result, drawOptions) { + localOptions = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions.font; + ctx.strokeStyle = localOptions.color; + ctx.fillStyle = localOptions.color; + for (const f of result) { + drawFaceBoxes(f, ctx); + drawLabels(f, ctx); + if (f.mesh && f.mesh.length > 0) { + drawFacePoints(f, ctx); + drawFacePolygons(f, ctx); + drawGazeSpheres(f, ctx); + drawGazeArrows(f, ctx); + } + } +} + +// src/draw/body.ts +function body(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + for (let i = 0; i < result.length; i++) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + ctx.lineWidth = localOptions2.lineWidth; + ctx.font = localOptions2.font; + if (localOptions2.drawBoxes && result[i].box && result[i].box.length === 4) { + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.bodyLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.bodyLabels.slice(); + l = replace(l, "[score]", 100 * result[i].score); + labels(ctx, l, result[i].box[0], result[i].box[1], localOptions2); + } + } + if (localOptions2.drawPoints && result[i].keypoints) { + for (let pt = 0; pt < result[i].keypoints.length; pt++) { + if (!result[i].keypoints[pt].score || result[i].keypoints[pt].score === 0) + continue; + ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions2); + point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions2); + } + } + if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { + ctx.font = localOptions2.font; + for (const pt of result[i].keypoints) { + if (!pt.score || pt.score === 0) + continue; + let l = localOptions2.bodyPartLabels.slice(); + l = replace(l, "[label]", pt.part); + l = replace(l, "[score]", 100 * pt.score); + labels(ctx, l, pt.position[0], pt.position[1], localOptions2); + } + } + if (localOptions2.drawPolygons && result[i].keypoints && result[i].annotations) { + for (const part of Object.values(result[i].annotations)) { + for (const connected4 of part) + curves(ctx, connected4, localOptions2); + } + } + } +} + +// src/draw/hand.ts +function hand(inCanvas2, result, drawOptions) { + var _a, _b; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.handLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.handLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + if (localOptions2.drawPoints) { + if (h.keypoints && h.keypoints.length > 0) { + for (const pt of h.keypoints) { + ctx.fillStyle = colorDepth(pt[2], localOptions2); + point(ctx, pt[0], pt[1], 0, localOptions2); + } + } + } + if (localOptions2.drawLabels && h.annotations && ((_b = localOptions2.fingerLabels) == null ? void 0 : _b.length) > 0) { + for (const [part, pt] of Object.entries(h.annotations)) { + let l = localOptions2.fingerLabels.slice(); + l = replace(l, "[label]", part); + labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions2); + } + } + if (localOptions2.drawPolygons && h.annotations) { + const addHandLine = (part) => { + if (!part || part.length === 0 || !part[0]) + return; + for (let i = 0; i < part.length; i++) { + ctx.beginPath(); + const z = part[i][2] || 0; + ctx.strokeStyle = colorDepth(i * z, localOptions2); + ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]); + ctx.lineTo(part[i][0], part[i][1]); + ctx.stroke(); + } + }; + ctx.lineWidth = localOptions2.lineWidth; + addHandLine(h.annotations.index); + addHandLine(h.annotations.middle); + addHandLine(h.annotations.ring); + addHandLine(h.annotations.pinky); + addHandLine(h.annotations.thumb); + } + } +} + +// src/draw/object.ts +function object(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (const h of result) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); + if (localOptions2.drawLabels && ((_a = localOptions2.objectLabels) == null ? void 0 : _a.length) > 0) { + let l = localOptions2.objectLabels.slice(); + l = replace(l, "[label]", h.label); + l = replace(l, "[score]", 100 * h.score); + labels(ctx, l, h.box[0], h.box[1], localOptions2); + } + ctx.stroke(); + } + } +} + +// src/draw/gesture.ts +function gesture(inCanvas2, result, drawOptions) { + var _a; + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.font = localOptions2.font; + ctx.fillStyle = localOptions2.color; + let i = 1; + for (let j = 0; j < result.length; j++) { + const [where, what] = Object.entries(result[j]); + if (what.length > 1 && what[1].length > 0) { + const who = where[1] > 0 ? `#${where[1]}` : ""; + let l = localOptions2.gestureLabels.slice(); + l = replace(l, "[where]", where[0]); + l = replace(l, "[who]", who); + l = replace(l, "[what]", what[1]); + labels(ctx, l, 8, 2 + i * localOptions2.lineHeight, localOptions2); + i += 1; + } + } + } +} + +// src/draw/labels.ts +var defaultLabels = { + face: `face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -118,7 +6447,7521 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var t5=0;function Fs(e,t,n){let o=A0(d0,n);if(!t||!e)return;let r=J0(e);if(!!r){r.lineJoin="round",r.font=o.font;for(let s=0;sr5,kpt:()=>o5});var o5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],r5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(H());var Q0,$e=224,Z1,Gs=5,$2=[8,16,32,32,32];function Vs(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function X1(e){if(v.initial&&(Q0=null),!Q0&&e.body.detector&&e.body.detector.modelPath){Q0=await O(e.body.detector.modelPath);let t=Q0!=null&&Q0.executor?Object.values(Q0.modelSignature.inputs):void 0;$e=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&Q0&&u("cached model:",Q0.modelUrl);return Vs(),Q0}var V1=[5,5];function Zs(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,$e),t.x),r=D.add(D.div(r,$e),t.y),s=D.mul(D.div(s,$e),V1[0]),A=D.mul(D.div(A,$e),V1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function Xs(e,t,n,o){var c,x;let r=[],s={};s.boxes=Zs(e,Z1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],p=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:p};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function q1(e,t,n){let o={};o.res=Q0==null?void 0:Q0.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await Xs(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function ge(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function U1(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function et(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var F0,A5=256,s5=Number.MAX_SAFE_INTEGER,qs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},nt=[],Ne=[[0,0],[0,0],[0,0],[0,0]],Y1=0,K1=e=>1-1/(1+Math.exp(e)),Q1=e=>X1(e);async function _1(e){if(v.initial&&(F0=null),F0)e.debug&&u("cached model:",F0.modelUrl);else{F0=await O(e.body.modelPath);let t=F0!=null&&F0.executor?Object.values(F0.modelSignature.inputs):void 0;A5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return F0}function J1(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=B0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Ne=[[0,0],a,l,[0,0]],o.pad=B0.pad(o.cropped||e,Ne),o.resize=B0.image.resizeBilinear(o.pad,[t,t]),r=B0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=B0.image.resizeBilinear(o.cropped||e,[t,t]),r=B0.div(o.resize,C.tf255)):r=B0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>B0.dispose(o[a])),r}function Us(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Ne[2][0]+Ne[2][1])/t[0]-Ne[2][0]),Math.trunc(o.position[1]*(t[1]+Ne[1][0]+Ne[1][1])/t[1]-Ne[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function Ys(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function Ks(e,t,n){if(!(F0!=null&&F0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=F0==null?void 0:F0.execute(e,qs.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(p=>B0.dispose(o[p]));let a=[],l=5;for(let p=0;pp.position),i=ge(x,[n[0],n[1]]),y={};for(let[p,f]of Object.entries(r5)){let b=[];for(let M=0;Mh.part===f[M]),m=c.find(h=>h.part===f[M+1]);T&&m&&b.push([T.position,m.position])}y[p]=b}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function a5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>g()-Y1,r=s5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&nt!==null)s5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=J1(e,224);l=await q1(c,t,n),B0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cL0.dispose(o[c])),r}async function c5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>g()-e3,o=l5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&i5.length>0?(l5++,i5):(l5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=L0.image.resizeBilinear(e,[e2,e2]),a=t.object.enabled?H0==null?void 0:H0.execute(A,["tower_0/detections"]):null;e3=g(),L0.dispose(A);let l=await Js(a,s,t);i5=l,r(l)}))}var J=V(H());var ot={};we(ot,{connected:()=>x5,kpt:()=>d5});var d5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],x5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var a0,o3=0,C0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},y5=Number.MAX_SAFE_INTEGER;async function r3(e){return v.initial&&(a0=null),a0?e.debug&&u("cached model:",a0.modelUrl):a0=await O(e.body.modelPath),a0}async function Qs(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function f5(e,t){if(!(a0!=null&&a0.executor)||!(a0!=null&&a0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>g()-o3,o=y5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(C0.keypoints).length>0?(y5++,[C0]):(y5=0,new Promise(async r=>{let s=J.tidy(()=>{var p,f;let i=J.image.resizeBilinear(e,[((p=a0==null?void 0:a0.inputs[0].shape)==null?void 0:p[2])||0,((f=a0==null?void 0:a0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=a0==null?void 0:a0.execute(s)),o3=g(),J.dispose(s),A){C0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&C0.keypoints.push({score:Math.round(100*b)/100,part:d5[d],positionRaw:[p/a0.inputs[0].shape[2],f/a0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/a0.inputs[0].shape[2]),Math.round(e.shape[1]*f/a0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}C0.score=C0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=C0.keypoints.map(i=>i.position[0]),l=C0.keypoints.map(i=>i.position[1]);C0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=C0.keypoints.map(i=>i.positionRaw[0]),x=C0.keypoints.map(i=>i.positionRaw[1]);C0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(x5)){let d=[];for(let p=0;pM.part===y[p]),b=C0.keypoints.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&d.push([f.position,b.position])}C0.annotations[i]=d}r([C0])}))}var i0=V(H());var Le=V(H());var L=V(H());var Te=V(H());var x2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],rt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],st=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],At=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],i3=(e,t)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],o=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:o,landmarks:e.landmarks,confidence:e.confidence}},m5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Te.image.cropAndResize(t,[s],[0],n),a=Te.div(A,C.tf255);return Te.dispose(A),a},at=(e,t)=>{let n=rt(e),o=x2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence}},it=e=>{let t=rt(e),n=x2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence}},l3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},p5=[[1,0,0],[0,1,0],[0,0,1]],_s=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),$s=(e,t)=>_s(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var A3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],t2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=A3(t[0],t[1]),A=a3(s,r),a=A3(-t[0],-t[1]);return a3(A,a)},tA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-t2(t[0],n),-t2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},nA=(e,t)=>[t2(e,t[0]),t2(e,t[1])];function d3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?c3(n,[0,0]):p5,c=a?A.map(d=>[...nA(d,l),d[2]]):A,x=a?tA(o):p5,i=rt(t),y=[t2(i,x[0]),t2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function y3(e,t,n,o){let r=t.landmarks.length>=_t.count?_t.symmetryLine:Ke.symmetryLine,s=0,A=p5,a;if(e&&v.kernels.includes("rotatewithoffset"))if(s=$s(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=rt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Te.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=c3(-s,c),a=m5(t,i,[o,o]),Te.dispose(i)}else a=m5(t,n,[o,o]);else a=m5(t,n,[o,o]);return[s,A,a]}var oA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},f3=(e,t)=>{let n=oA(e),o=x2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var m3=6,rA=1.4,ae,h5=null,Ie=0,y2=null,f2=()=>Ie;async function p3(e){var t;return v.initial&&(ae=null),ae?e.debug&&u("cached model:",ae.modelUrl):ae=await O((t=e.face.detector)==null?void 0:t.modelPath),Ie=ae.executor&&ae.inputs[0].shape?ae.inputs[0].shape[2]:256,y2=L.scalar(Ie,"int32"),h5=L.tensor2d(d3(Ie)),ae}function sA(e){if(!h5||!y2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,h5),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,y2),t.centersNormalized=L.div(t.centers,y2),t.halfBoxSize=L.div(t.boxSizesNormalized,C.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,y2),t.endNormalized=L.mul(t.ends,y2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function u3(e,t){var a,l,c,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=L.image.resizeBilinear(e,[Ie,Ie]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf05);let o=ae==null?void 0:ae.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let i=o.sort((y,d)=>y.size-d.size);n.concat384=L.concat([i[0],i[2]],2),n.concat512=L.concat([i[1],i[3]],2),n.concat=L.concat([n.concat512,n.concat384],1),n.batch=L.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=L.squeeze(o[0]):n.batch=L.squeeze(o);L.dispose(o),n.boxes=sA(n.batch),n.logits=L.slice(n.batch,[0,0],[-1,1]),n.sigmoid=L.sigmoid(n.logits),n.scores=L.squeeze(n.sigmoid),n.nms=await L.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let i=0;i(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let d={};d.bbox=L.slice(n.boxes,[r[i],0],[1,-1]),d.slice=L.slice(n.batch,[r[i],m3-1],[1,-1]),d.squeeze=L.squeeze(d.slice),d.landmarks=L.reshape(d.squeeze,[m3,-1]);let p=await d.bbox.data(),f={startPoint:[p[0],p[1]],endPoint:[p[2],p[3]],landmarks:await d.landmarks.array(),confidence:y},b=i3(f,[(e.shape[2]||0)/Ie,(e.shape[1]||0)/Ie]),M=at(b,t.face.scale||rA),T=it(M);s.push(T),Object.keys(d).forEach(m=>L.dispose(d[m]))}}return Object.keys(n).forEach(i=>L.dispose(n[i])),s}var ie=V(H());var G0,Oe=0,AA=2.3,b5=ne.leftEyeLower0,g5=ne.rightEyeLower0,m2={leftBounds:[b5[0],b5[b5.length-1]],rightBounds:[g5[0],g5[g5.length-1]]},p2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function v3(e){var t,n;return v.initial&&(G0=null),G0?e.debug&&u("cached model:",G0.modelUrl):G0=await O((t=e.face.iris)==null?void 0:t.modelPath),Oe=(G0==null?void 0:G0.executor)&&((n=G0.inputs)==null?void 0:n[0].shape)?G0.inputs[0].shape[2]:0,Oe===-1&&(Oe=64),G0}function lt(e,t,n,o){for(let r=0;r<$t.length;r++){let{key:s,indices:A}=$t[r],a=ne[`${n}${s}`];if(!o||o.includes(s))for(let l=0;l{let t=e[m2.leftBounds[0]][2],n=e[m2.rightBounds[0]][2];return t-n},b3=(e,t,n,o,r,s=!1)=>{let A=it(at(l3([e[n],e[o]]),AA)),a=x2(A),l=ie.image.cropAndResize(t,[[A.startPoint[1]/r,A.startPoint[0]/r,A.endPoint[1]/r,A.endPoint[0]/r]],[0],[Oe,Oe]);if(s&&v.kernels.includes("flipleftright")){let c=ie.image.flipLeftRight(l);ie.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},g3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ne[`${n}EyeUpper0`][p2.upperCenter]][2],r=e[ne[`${n}EyeLower0`][p2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function R3(e,t,n){if(!(G0!=null&&G0.executor))return e;let{box:o,boxSize:r,crop:s}=b3(e,t,m2.leftBounds[0],m2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=b3(e,t,m2.rightBounds[0],m2.rightBounds[1],n,!0),c=ie.concat([s,l]);ie.dispose(s),ie.dispose(l);let x=G0.execute(c);ie.dispose(c);let i=await x.data();ie.dispose(x);let y=i.slice(0,p2.numCoordinates*3),{rawCoords:d,iris:p}=g3(y,o,r,!0),f=i.slice(p2.numCoordinates*3),{rawCoords:b,iris:M}=g3(f,A,a,!1),T=aA(e);Math.abs(T)<30?(lt(e,d,"left",null),lt(e,b,"right",null)):T<1?lt(e,d,"left",["EyeUpper0","EyeLower0"]):lt(e,b,"right",["EyeUpper0","EyeLower0"]);let m=T3(e,p,"left"),h=T3(e,M,"right");return e.concat(m).concat(h)}async function P3(e,t){var s,A,a,l,c,x,i,y,d,p;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((p=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:p.data())};for(let f of Object.values(n))if(!f)return e;let o=Qe.reduce((f,b)=>f+=e[b][2],0)/Qe.length;for(let f=0;ff+=e[b][2],0)/_e.length;for(let f=0;fg()-pe.timestamp,o=pe.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||pe.boxes.length===0?(pe.boxes=await u3(e,t),pe.timestamp=g(),pe.skipped=0):pe.skipped++;let r=[],s=[],A=0,a=j2;for(let T=0;TG.shape[G.shape.length-1]===1).data();if(P.faceScore=Math.round(100*t0[0])/100,P.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(m.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=st(m,e),P.boxRaw=At(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(G=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*G[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*G[1]/f2()]),P.meshRaw=P.mesh.map(G=>[G[0]/(e.shape[2]||1),G[1]/(e.shape[1]||1),(G[2]||0)/a]);for(let G of Object.keys(Ke))P.annotations[G]=[P.mesh[Ke[G]]]}}else{let G=I.find(Z=>Z.shape[Z.shape.length-1]===1404),$=Le.reshape(G,[-1,3]),s0=await $.array();Le.dispose($),(f=t.face.attention)!=null&&f.enabled?s0=await P3(s0,I):(b=t.face.iris)!=null&&b.enabled&&(s0=await R3(s0,P.tensor,j2)),P.mesh=x3(s0,m,h,S,j2),P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||0),Z[1]/(e.shape[1]||0),(Z[2]||0)/a]);for(let Z of Object.keys(ne))P.annotations[Z]=ne[Z].map(b0=>P.mesh[b0]);P.score=P.faceScore;let R={...f3(P.mesh,m),confidence:m.confidence,landmarks:m.landmarks};P.box=st(R,e),P.boxRaw=At(R,e),s.push(R)}Le.dispose(I)}else{P.box=st(m,e),P.boxRaw=At(m,e),P.score=P.boxScore,P.mesh=m.landmarks.map(I=>[(m.startPoint[0]+m.endPoint[0])/2+(m.endPoint[0]+m.startPoint[0])*I[0]/f2(),(m.startPoint[1]+m.endPoint[1])/2+(m.endPoint[1]+m.startPoint[1])*I[1]/f2()]),P.meshRaw=P.mesh.map(I=>[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(Ke))P.annotations[I]=[P.mesh[Ke[I]]]}P.score>(((M=t.face.detector)==null?void 0:M.minConfidence)||1)?r.push(P):Le.dispose(P.tensor)}return pe.boxes=s,r}async function w3(e){var t,n,o,r,s,A;return v.initial&&(o0=null),((t=e.face.attention)==null?void 0:t.enabled)&&(o0==null?void 0:o0.signature)&&Object.keys(((n=o0==null?void 0:o0.signature)==null?void 0:n.outputs)||{}).length<6&&(o0=null),o0?e.debug&&u("cached model:",o0.modelUrl):(o=e.face.attention)!=null&&o.enabled?o0=await O(e.face.attention.modelPath):o0=await O((r=e.face.mesh)==null?void 0:r.modelPath),j2=o0.executor&&((s=o0==null?void 0:o0.inputs)==null?void 0:s[0].shape)?(A=o0==null?void 0:o0.inputs)==null?void 0:A[0].shape[2]:256,o0}var E3=Je,z3=z2;var le=V(H());var lA=["angry","disgust","fear","happy","sad","surprise","neutral"],_0,ct=[],S3=0,j3=0,v5=Number.MAX_SAFE_INTEGER;async function N3(e){var t;return v.initial&&(_0=null),_0?e.debug&&u("cached model:",_0.modelUrl):_0=await O((t=e.face.emotion)==null?void 0:t.modelPath),_0}async function R5(e,t,n,o){var A,a;if(!_0)return[];let r=v5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>g()-j3;return t.skipAllowed&&s&&r&&S3===o&&ct[n]&&ct[n].length>0?(v5++,ct[n]):(v5=0,new Promise(async l=>{var x;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let i={},y=_0!=null&&_0.inputs[0].shape?_0.inputs[0].shape[2]:0;i.resize=le.image.resizeBilinear(e,[y,y],!1),i.channels=le.mul(i.resize,C.rgb),i.grayscale=le.sum(i.channels,3,!0),i.grayscaleSub=le.sub(i.grayscale,C.tf05),i.grayscaleMul=le.mul(i.grayscaleSub,C.tf2),i.emotion=_0==null?void 0:_0.execute(i.grayscaleMul),j3=g();let d=await i.emotion.data();for(let p=0;p(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*d[p])/100),emotion:lA[p]});c.sort((p,f)=>f.score-p.score),Object.keys(i).forEach(p=>le.dispose(i[p]))}ct[n]=c,S3=o,l(c)}))}var ce=V(H());var z0,Ce=[],O3=0,L3=0,M5=Number.MAX_SAFE_INTEGER;async function C3(e){var t;return v.initial&&(z0=null),z0?e.debug&&u("cached model:",z0.modelUrl):z0=await O((t=e.face.description)==null?void 0:t.modelPath),z0}function cA(e){let t=e.image||e.tensor||e;if(!(z0!=null&&z0.inputs[0].shape))return t;let n=ce.image.resizeBilinear(t,[z0.inputs[0].shape[2],z0.inputs[0].shape[1]],!1),o=ce.mul(n,C.tf255);return ce.dispose(n),o}async function P5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(z0!=null&&z0.executor))return r;let s=M5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>g()-O3;return t.skipAllowed&&s&&A&&L3===o&&((c=Ce==null?void 0:Ce[n])==null?void 0:c.age)>0&&((x=Ce==null?void 0:Ce[n])==null?void 0:x.genderScore)>0?(M5++,Ce[n]):(M5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=cA(e),p=z0==null?void 0:z0.execute(d);O3=g(),ce.dispose(d);let b=await p.find(q=>q.shape[1]===1).data(),M=Math.trunc(200*Math.abs(b[0]-.5))/100;M>(t.face.description.minConfidence||0)&&(r.gender=b[0]<=.5?"female":"male",r.genderScore=Math.min(.99,M));let T=ce.argMax(p.find(q=>q.shape[1]===100),1),m=(await T.data())[0];ce.dispose(T);let S=await p.find(q=>q.shape[1]===100).data();r.age=Math.round(S[m-1]>S[m+1]?10*m-100*S[m-1]:10*m+100*S[m+1])/10,(Number.isNaN(b[0])||Number.isNaN(S[0]))&&u("faceres error:",{model:z0,result:p});let P=p.find(q=>q.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),p.forEach(q=>ce.dispose(q))}Ce[n]=r,L3=o,i(r)}))}var u2=.1,k5=.5;function dA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function D3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ne.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});u2&&u2>0&&(r=r.map(A=>({x:A.x>.5?A.x+u2:A.x-u2,y:A.y>.5?A.y+u2:A.y-u2})));for(let A=0;Ag()-B3,s=w5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&F3===o&&dt[n]?(w5++,dt[n]):(w5=0,new Promise(async l=>{let c=xt.image.resizeBilinear(e,[M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[2]:0,M0!=null&&M0.inputs[0].shape?M0.inputs[0].shape[1]:0],!1),x=M0==null?void 0:M0.execute(c),i=(await x.data())[0];dt[n]=Math.round(100*i)/100,F3=o,B3=g(),xt.dispose([c,x]),l(dt[n])}))}var ft=V(H());var P0,yt=[],z5=Number.MAX_SAFE_INTEGER,V3=0,Z3=0;async function X3(e){var t;return v.initial&&(P0=null),P0?e.debug&&u("cached model:",P0.modelUrl):P0=await O((t=e.face.liveness)==null?void 0:t.modelPath),P0}async function S5(e,t,n,o){var A,a;if(!(P0!=null&&P0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>g()-Z3,s=z5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&V3===o&&yt[n]?(z5++,yt[n]):(z5=0,new Promise(async l=>{let c=ft.image.resizeBilinear(e,[P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0,P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[1]:0],!1),x=P0==null?void 0:P0.execute(c),i=(await x.data())[0];yt[n]=Math.round(100*i)/100,V3=o,Z3=g(),ft.dispose([c,x]),l(yt[n])}))}var mt=V(H());var oe,j5=[],yA=["white","black","asian","indian","other"],fA=[15,23,28,35.5,45.5,55.5,65],U3=0,Y3=0,N5=Number.MAX_SAFE_INTEGER;async function K3(e){var t;return v.initial&&(oe=null),oe?e.debug&&u("cached model:",oe.modelUrl):oe=await O((t=e.face.gear)==null?void 0:t.modelPath),oe}async function I5(e,t,n,o){var A,a;if(!oe)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=N5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>g()-Y3;return t.skipAllowed&&s&&r&&U3===o&&j5[n]?(N5++,j5[n]):(N5=0,new Promise(async l=>{var M,T;if(!(oe!=null&&oe.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];c.resize=mt.image.cropAndResize(e,x,[0],[oe.inputs[0].shape[2],oe.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(M=t.face.gear)!=null&&M.enabled&&([c.age,c.gender,c.race]=oe.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let m=0;m(((T=t.face.gear)==null?void 0:T.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[m])/100,race:yA[m]});i.race.sort((m,h)=>h.score-m.score);let f=Array.from(await c.age.data()).map((m,h)=>[fA[h],m]).sort((m,h)=>h[1]-m[1]),b=f[0][0];for(let m=1;mmt.dispose(c[m])),j5[n]=i,U3=o,Y3=g(),l(i)}))}var h2=V(H());var V0,pt=[],Q3=0,_3=0,O5=Number.MAX_SAFE_INTEGER;async function $3(e){return v.initial&&(V0=null),V0?e.debug&&u("cached model:",V0.modelUrl):V0=await O(e.face.ssrnet.modelPathAge),V0}async function L5(e,t,n,o){var A,a,l,c;if(!V0)return{age:0};let r=O5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-_3;return t.skipAllowed&&r&&s&&Q3===o&&((l=pt[n])==null?void 0:l.age)&&((c=pt[n])==null?void 0:c.age)>0?(O5++,pt[n]):(O5=0,new Promise(async x=>{var d;if(!(V0!=null&&V0.inputs)||!V0.inputs[0]||!V0.inputs[0].shape)return;let i={};i.resize=h2.image.resizeBilinear(e,[V0.inputs[0].shape[2],V0.inputs[0].shape[1]],!1),i.enhance=h2.mul(i.resize,C.tf255);let y={age:0};if((d=t.face.ssrnet)!=null&&d.enabled&&(i.age=V0.execute(i.enhance)),i.age){let p=await i.age.data();y.age=Math.trunc(10*p[0])/10}Object.keys(i).forEach(p=>h2.dispose(i[p])),pt[n]=y,Q3=o,_3=g(),x(y)}))}var S0=V(H());var re,ut=[],tn=0,nn=0,C5=Number.MAX_SAFE_INTEGER,W5=[.2989,.587,.114];async function on(e){var t;return v.initial&&(re=null),re?e.debug&&u("cached model:",re.modelUrl):re=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),re}async function D5(e,t,n,o){var A,a,l,c;if(!re)return{gender:"unknown",genderScore:0};let r=C5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>g()-nn;return t.skipAllowed&&r&&s&&tn===o&&((l=ut[n])==null?void 0:l.gender)&&((c=ut[n])==null?void 0:c.genderScore)>0?(C5++,ut[n]):(C5=0,new Promise(async x=>{var p;if(!(re!=null&&re.inputs[0].shape))return;let i={};i.resize=S0.image.resizeBilinear(e,[re.inputs[0].shape[2],re.inputs[0].shape[1]],!1),i.enhance=S0.tidy(()=>{let[f,b,M]=S0.split(i.resize,3,3),T=S0.mul(f,W5[0]),m=S0.mul(b,W5[1]),h=S0.mul(M,W5[2]),S=S0.addN([T,m,h]);return S0.mul(S0.sub(S,C.tf05),2)});let y={gender:"unknown",genderScore:0};(p=t.face.ssrnet)!=null&&p.enabled&&(i.gender=re.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(f=>S0.dispose(i[f])),ut[n]=y,tn=o,nn=g(),x(y)}))}var ht=V(H());var Z0,F5=[],sn=0,An=0,an=Number.MAX_SAFE_INTEGER;async function ln(e){var t;return v.initial&&(Z0=null),Z0?e.debug&&u("cached model:",Z0.modelUrl):Z0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Z0}async function B5(e,t,n,o){var A,a;if(!(Z0!=null&&Z0.executor))return[];let r=an<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>g()-An;return t.skipAllowed&&s&&r&&sn===o&&F5[n]?(an++,F5[n]):new Promise(async l=>{var x;let c=[];if(((x=t.face.mobilefacenet)==null?void 0:x.enabled)&&(Z0==null?void 0:Z0.inputs[0].shape)){let i={};i.crop=ht.image.resizeBilinear(e,[Z0.inputs[0].shape[2],Z0.inputs[0].shape[1]],!1),i.data=Z0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>ht.dispose(i[d]))}F5[n]=c,sn=o,An=g(),l(c)})}var bt=V(H());var X0,H5=[],dn=0,xn=0,yn=Number.MAX_SAFE_INTEGER;async function fn(e){return v.initial&&(X0=null),X0?e.debug&&u("cached model:",X0.modelUrl):X0=await O(e.face.insightface.modelPath),X0}async function G5(e,t,n,o){var A,a;if(!(X0!=null&&X0.executor))return[];let r=yn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>g()-xn;return t.skipAllowed&&s&&r&&dn===o&&H5[n]?(yn++,H5[n]):new Promise(async l=>{var x;let c=[];if(((x=t.face.insightface)==null?void 0:x.enabled)&&(X0==null?void 0:X0.inputs[0].shape)){let i={};i.crop=bt.image.resizeBilinear(e,[X0.inputs[0].shape[2],X0.inputs[0].shape[1]],!1),i.data=X0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>bt.dispose(i[d]))}H5[n]=c,dn=o,xn=g(),l(c)})}var mA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},pn=(e,t)=>{let n=f=>{let b=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=b,f[1]/=b,f[2]/=b,f},o=(f,b)=>{let M=f[0]-b[0],T=f[1]-b[1],m=f[2]-b[2];return[M,T,m]},r=(f,b)=>{let M=f[1]*b[2]-f[2]*b[1],T=f[2]*b[0]-f[0]*b[2],m=f[0]*b[1]-f[1]*b[0];return[M,T,m]},s=f=>{let[b,M,T,m,h,S,P,I,q]=f,t0,G,$;return m<1?m>-1?($=Math.asin(m),G=Math.atan2(-P,b),t0=Math.atan2(-S,h)):($=-Math.PI/2,G=-Math.atan2(I,q),t0=0):($=Math.PI/2,G=Math.atan2(I,q),t0=0),Number.isNaN(t0)&&(t0=0),Number.isNaN(G)&&(G=0),Number.isNaN($)&&($=0),{pitch:2*-t0,yaw:2*-G,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),p=A.length===478?mA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:p}};function un(e,t){let n=e==null?void 0:e.annotations;if(!n)return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var V5=async(e,t)=>{var p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;let n=g(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await k3(t,e.config);if(e.performance.face=v.perfadd?(e.performance.face||0)+Math.trunc(g()-n):Math.trunc(g()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let z=0;z200?pn(d[z],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?R5(d[z].tensor||i0.tensor([]),e.config,z,d.length):[]:(e.state="run:emotion",n=g(),A=(b=e.config.face.emotion)!=null&&b.enabled?await R5(d[z].tensor||i0.tensor([]),e.config,z,d.length):[],e.performance.emotion=v.perfadd?(e.performance.emotion||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(M=e.config.face.antispoof)!=null&&M.enabled?E5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0:(e.state="run:antispoof",n=g(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await E5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0,e.performance.antispoof=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(m=e.config.face.liveness)!=null&&m.enabled?S5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0:(e.state="run:liveness",n=g(),x=(h=e.config.face.liveness)!=null&&h.enabled?await S5(d[z].tensor||i0.tensor([]),e.config,z,d.length):0,e.performance.liveness=v.perfadd?(e.performance.antispoof||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(S=e.config.face.gear)!=null&&S.enabled?I5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:gear",n=g(),r=(P=e.config.face.gear)!=null&&P.enabled?await I5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.gear=Math.trunc(g()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?L5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,s=(q=e.config.face.ssrnet)!=null&&q.enabled?D5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null):(e.state="run:ssrnet",n=g(),o=(t0=e.config.face.ssrnet)!=null&&t0.enabled?await L5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,s=(G=e.config.face.ssrnet)!=null&&G.enabled?await D5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.ssrnet=Math.trunc(g()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?B5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:mobilefacenet",n=g(),a=(s0=e.config.face.mobilefacenet)!=null&&s0.enabled?await B5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(R=e.config.face.insightface)!=null&&R.enabled?G5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null:(e.state="run:mobilefacenet",n=g(),l=(Z=e.config.face.insightface)!=null&&Z.enabled?await G5(d[z].tensor||i0.tensor([]),e.config,z,d.length):null,e.performance.mobilefacenet=Math.trunc(g()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=P5(d[z].tensor||i0.tensor([]),e.config,z,d.length):(e.state="run:description",n=g(),i=await P5(d[z].tensor||i0.tensor([]),e.config,z,d.length),e.performance.description=v.perfadd?(e.performance.description||0)+Math.trunc(g()-n):Math.trunc(g()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),((b0=e.config.face.ssrnet)==null?void 0:b0.enabled)&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),((U=e.config.face.gear)==null?void 0:U.enabled)&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),((g0=e.config.face.mobilefacenet)==null?void 0:g0.enabled)&&a&&(i.descriptor=a),((f0=e.config.face.insightface)==null?void 0:f0.enabled)&&l&&(i.descriptor=l);let Pe=(B=e.config.face.iris)!=null&&B.enabled?un(d[z],t.shape[2]):0,ke=(X=e.config.face.detector)!=null&&X.return?i0.squeeze(d[z].tensor):null;i0.dispose(d[z].tensor),d[z].tensor&&delete d[z].tensor;let T0={...d[z],id:z};i.age&&(T0.age=i.age),i.gender&&(T0.gender=i.gender),i.genderScore&&(T0.genderScore=i.genderScore),i.descriptor&&(T0.embedding=i.descriptor),i.race&&(T0.race=i.race),A&&(T0.emotion=A),c&&(T0.real=c),x&&(T0.live=x),Pe>0&&(T0.distance=Pe),$0&&(T0.rotation=$0),ke&&(T0.tensor=ke),y.push(T0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var W0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>W0.nameMapping[e],getPoints:e=>W0.pointsMapping[e]},De={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>De.nameMapping[e]},l0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>l0.nameMapping[e]},We=class{constructor(t){k(this,"name");k(this,"curls");k(this,"directions");k(this,"weights");k(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:de,index:ve,middle:Re,ring:n2,pinky:o2}=W0,{none:xe,half:uA,full:ye}=De,{verticalUp:b2,verticalDown:G7,horizontalLeft:Z5,horizontalRight:hA,diagonalUpRight:bA,diagonalUpLeft:g2,diagonalDownRight:V7,diagonalDownLeft:Z7}=l0,Fe=new We("thumbs up");Fe.curl(de,xe,1);Fe.direction(de,b2,1);Fe.direction(de,g2,.25);Fe.direction(de,bA,.25);for(let e of[W0.index,W0.middle,W0.ring,W0.pinky])Fe.curl(e,ye,1),Fe.direction(e,Z5,1),Fe.direction(e,hA,1);var p0=new We("victory");p0.curl(de,uA,.5);p0.curl(de,xe,.5);p0.direction(de,b2,1);p0.direction(de,g2,1);p0.curl(ve,xe,1);p0.direction(ve,b2,.75);p0.direction(ve,g2,1);p0.curl(Re,xe,1);p0.direction(Re,b2,1);p0.direction(Re,g2,.75);p0.curl(n2,ye,1);p0.direction(n2,b2,.2);p0.direction(n2,g2,1);p0.direction(n2,Z5,.2);p0.curl(o2,ye,1);p0.direction(o2,b2,.2);p0.direction(o2,g2,1);p0.direction(o2,Z5,.2);p0.weight(ve,2);p0.weight(Re,2);var Be=new We("point");Be.curl(de,ye,1);Be.curl(ve,xe,.5);Be.curl(Re,ye,.5);Be.curl(n2,ye,.5);Be.curl(o2,ye,.5);Be.weight(ve,2);Be.weight(Re,2);var He=new We("middle finger");He.curl(de,xe,1);He.curl(ve,ye,.5);He.curl(Re,ye,.5);He.curl(n2,ye,.5);He.curl(o2,ye,.5);He.weight(ve,2);He.weight(Re,2);var T2=new We("open palm");T2.curl(de,xe,.75);T2.curl(ve,xe,.75);T2.curl(Re,xe,.75);T2.curl(n2,xe,.75);T2.curl(o2,xe,.75);var hn=[Fe,p0,Be,He,T2];var gA=.7,r2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function bn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function Tn(e,t){if(!e||!t)return[0,0];let n=bn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=bn(e[1],e[2],t[1],t[2]);return[n,o]}function gn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function TA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),p=Math.sqrt(s*s+l*l+i*i),f=(p*p+y*y-d*d)/(2*p*y);f>1?f=1:f<-1&&(f=-1);let b=Math.acos(f);b=57.2958*b%180;let M;return b>r2.NO_CURL_START_LIMIT?M=De.none:b>r2.HALF_CURL_START_LIMIT?M=De.half:M=De.full,M}function vn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=l0.horizontalLeft:r=l0.horizontalRight:o===Math.abs(t)?t>0?r=l0.horizontalLeft:r=l0.horizontalRight:n>0?r=l0.horizontalLeft:r=l0.horizontalRight,r}function Rn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=l0.verticalDown:r=l0.verticalUp:o===Math.abs(t)?t<0?r=l0.verticalDown:r=l0.verticalUp:n<0?r=l0.verticalDown:r=l0.verticalUp,r}function vA(e,t,n,o,r,s,A,a){let l,c=Rn(e,t,n,o),x=vn(r,s,A,a);return c===l0.verticalUp?x===l0.horizontalLeft?l=l0.diagonalUpLeft:l=l0.diagonalUpRight:x===l0.horizontalLeft?l=l0.diagonalDownLeft:l=l0.diagonalDownRight,l}function RA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,p=0,f=i/(x+1e-5);f>1.5?y+=r2.DISTANCE_VOTE_POWER:f>.66?d+=r2.DISTANCE_VOTE_POWER:p+=r2.DISTANCE_VOTE_POWER;let b=Math.sqrt(r*r+a*a),M=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),m=Math.max(b,M,T),h=e[0],S=e[1],P=n[0],I=n[1];m===b?(P=n[0],I=n[1]):m===T&&(h=t[0],S=t[1]);let G=Tn([h,S],[P,I]),$=gn(G,r2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],p+=$[2];for(let R of o){let Z=gn(R,r2.SINGLE_ANGLE_VOTE_POWER);y+=Z[0],d+=Z[1],p+=Z[2]}let s0;return y===Math.max(y,d,p)?s0=Rn(l,a,c,i):p===Math.max(d,p)?s0=vn(s,r,A,x):s0=vA(l,a,c,i,s,r,A,x),s0}function Mn(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of W0.all){let A=W0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=Tn(x,i),d=y[0],p=y[1];a.push(d),l.push(p)}t.push(a),n.push(l)}for(let s of W0.all){let A=s===W0.thumb?1:0,a=W0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=TA(l,c,x),y=RA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function gt(e){if(!e||e.length===0)return null;let t=Mn(e),n={};for(let o of W0.all)n[W0.getName(o)]={curl:De.getName(t.curls[o]),direction:l0.getName(t.directions[o])};return n}function Pn(e){let t=[];if(!e||e.length===0)return t;let n=Mn(e);for(let o of hn){let r=o.matchAgainst(n.curls,n.directions);r>=gA&&t.push({name:o.name,confidence:r})}return t}var kn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let a=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));a>10&&t.push({face:n,gesture:`mouth ${Math.trunc(a)}% open`});let l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},En=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||b>.06)&&(d=!1),f>b?f>.05&&t.push({iris:A,gesture:"looking right"}):b>.05&&t.push({iris:A,gesture:"looking left"});let M=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||M<.01||T>.022||M>.022)&&(d=!1),(T<.01||M<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||M>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},zn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function vt(e,t=1.5){let n=N2(e),o=Tt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function Rt(e){let t=N2(e),n=Tt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function PA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Ln(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return PA(n)}var Sn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ge(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),p={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=On(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(b=>W.dispose(c[b]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var q0=V(H());var zA=5,Fn=1.65,Bn=[0,5,9,13,17,1,2],SA=0,jA=2,Hn=0,Pt=class{constructor(t,n){k(this,"handDetector");k(this,"handPoseModel");k(this,"inputSize");k(this,"storedBoxes");k(this,"skipped");k(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>U5([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return vt(Rt(r),zA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=vt(Rt(n),Fn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=q5(o,[0,0]),c=a.map(d=>[...U5(d,l),d[2]]),x=Cn(r),i=[...N2(n),1],y=[Ge(i,x[0]),Ge(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>g()-Hn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A&&(r=await this.handDetector.predict(t,n),this.skipped=0),n.skipAllowed&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let S=q0.reshape(m,[-1,3]),P=await S.array();q0.dispose(m),q0.dispose(S);let I=this.transformRawCoords(P,f,x,p),q=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...q,confidence:h};let t0={landmarks:I,confidence:h,boxConfidence:c.confidence,fingerConfidence:h,box:{topLeft:q.startPoint,bottomRight:q.endPoint}};a.push(t0)}else this.storedBoxes[l]=null;q0.dispose(m)}else{let x=vt(Rt(c),Fn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var Gn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},s2,A2,Vn;async function Y5(e,t){let n=await Vn.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=gt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function Zn(e){var n,o;v.initial&&(s2=null,A2=null),!s2||!A2?[s2,A2]=await Promise.all([e.hand.enabled?O((n=e.hand.detector)==null?void 0:n.modelPath):null,e.hand.landmarks?O((o=e.hand.skeleton)==null?void 0:o.modelPath):null]):(e.debug&&u("cached model:",s2.modelUrl),e.debug&&u("cached model:",A2.modelUrl));let t=s2?new Mt(s2):void 0;return t&&A2&&(Vn=new Pt(t,A2)),[s2,A2]}var Q=V(H());var y0=[null,null],IA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ve=[[0,0],[0,0]],OA=["hand","fist","pinch","point","face","tip","pinchtip"],qn=4,Un=1.6,LA=512,CA=1.4,kt=Number.MAX_SAFE_INTEGER,K5=0,Me=[0,0],x0={boxes:[],hands:[]},Yn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Kn(e){var t;if(v.initial&&(y0[0]=null),y0[0])e.debug&&u("cached model:",y0[0].modelUrl);else{X2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),y0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=y0[0].executor?Object.values(y0[0].modelSignature.inputs):void 0;Ve[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[0]}async function Jn(e){var t;if(v.initial&&(y0[1]=null),y0[1])e.debug&&u("cached model:",y0[1].modelUrl);else{y0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=y0[1].executor?Object.values(y0[1].modelSignature.inputs):void 0;Ve[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Ve[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return y0[1]}async function WA(e,t){let n=[];if(!e||!y0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,LA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await y0[0].executeAsync(o.cast,IA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[qn]),a.splice(qn,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),p=await d.data();Q.dispose(d);let f=[p[1],p[0],p[3]-p[1],p[2]-p[0]],b=et(f,CA),M=[Math.trunc(f[0]*Me[0]),Math.trunc(f[1]*Me[1]),Math.trunc(f[2]*Me[0]),Math.trunc(f[3]*Me[1])],T=x[y],m=OA[i[y]],h={id:l++,score:T,box:M,boxRaw:b,label:m};n.push(h)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function J5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&y0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[Ve[1][0],Ve[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=y0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Ve[1][1],i[1]/Ve[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[Me[0]*(i[0]+t.boxRaw[0]),Me[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=gt(o.keypoints);for(let i of Object.keys(Yn))o.annotations[i]=Yn[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function Q5(e,t){var r,s;if(!((r=y0[0])!=null&&r.executor)||!((s=y0[1])!=null&&s.executor)||!y0[0].inputs[0].shape||!y0[1].inputs[0].shape)return[];Me=[e.shape[2]||0,e.shape[1]||0],kt++;let n=(t.hand.skipTime||0)>g()-K5,o=kt<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?x0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>g()-K5,l=kt<3*(t.hand.skipFrames||0);t.skipAllowed&&x0.hands.length===t.hand.maxDetected?x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))):t.skipAllowed&&a&&l&&x0.hands.length>0?x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))):(x0.boxes=await WA(e,t),K5=g(),x0.hands=await Promise.all(x0.boxes.map(x=>J5(e,x,t))),kt=0);let c=[...x0.boxes];if(x0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&x0.hands[x].fingerScore&&x0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=et(i.box,Un),d=et(i.boxRaw,Un);x0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var I2={};we(I2,{connected:()=>Et,horizontal:()=>_5,kpt:()=>wt,relative:()=>e1,vertical:()=>$5});var wt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],$5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],e1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Et={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var w=ue(),t1=0;function _n(e,t){var A,a,l,c,x,i,y,d,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;let n=g();if(!e)return ue();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(w.canvas=e.canvas),e.error&&(w.error=e.error),!w.body||e.body.length!==w.body.length)w.body=JSON.parse(JSON.stringify(e.body));else for(let R=0;R((r-1)*w.body[R].box[X]+B)/r),b0=e.body[R].boxRaw.map((B,X)=>((r-1)*w.body[R].boxRaw[X]+B)/r),U=e.body[R].keypoints.map((B,X)=>{var z,$0,Pe,ke,T0,M2,g1,T1,v1;return{score:B.score,part:B.part,position:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],w.body[R].keypoints[X]?((r-1)*(w.body[R].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[w.body[R].keypoints[X]?((r-1)*(((z=w.body[R].keypoints[X].distance)==null?void 0:z[0])||0)+((($0=B.distance)==null?void 0:$0[0])||0))/r:(Pe=B.distance)==null?void 0:Pe[0],w.body[R].keypoints[X]?((r-1)*(((ke=w.body[R].keypoints[X].distance)==null?void 0:ke[1])||0)+(((T0=B.distance)==null?void 0:T0[1])||0))/r:(M2=B.distance)==null?void 0:M2[1],w.body[R].keypoints[X]?((r-1)*(((g1=w.body[R].keypoints[X].distance)==null?void 0:g1[2])||0)+(((T1=B.distance)==null?void 0:T1[2])||0))/r:(v1=B.distance)==null?void 0:v1[2]]}}),g0={},f0={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?f0=ot:(a=t.body.modelPath)!=null&&a.includes("blazepose")?f0=_2:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(f0=I2);for(let[B,X]of Object.entries(f0.connected)){let z=[];for(let $0=0;$0T0.part===X[$0]),ke=U.find(T0=>T0.part===X[$0+1]);Pe&&ke&&z.push([Pe.position,ke.position])}g0[B]=z}w.body[R]={...e.body[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.hand||e.hand.length!==w.hand.length)w.hand=JSON.parse(JSON.stringify(e.hand));else for(let R=0;R((r-1)*w.hand[R].box[B]+f0)/r),b0=e.hand[R].boxRaw.map((f0,B)=>((r-1)*w.hand[R].boxRaw[B]+f0)/r);w.hand[R].keypoints.length!==e.hand[R].keypoints.length&&(w.hand[R].keypoints=e.hand[R].keypoints);let U=e.hand[R].keypoints&&e.hand[R].keypoints.length>0?e.hand[R].keypoints.map((f0,B)=>f0.map((X,z)=>((r-1)*(w.hand[R].keypoints[B][z]||1)+(X||0))/r)):[],g0={};if(Object.keys(w.hand[R].annotations).length!==Object.keys(e.hand[R].annotations).length)w.hand[R].annotations=e.hand[R].annotations,g0=w.hand[R].annotations;else if(e.hand[R].annotations)for(let f0 of Object.keys(e.hand[R].annotations))g0[f0]=(i=(x=(c=e.hand[R])==null?void 0:c.annotations)==null?void 0:x[f0])!=null&&i[0]?e.hand[R].annotations[f0].map((B,X)=>B.map((z,$0)=>((r-1)*w.hand[R].annotations[f0][X][$0]+z)/r)):null;w.hand[R]={...e.hand[R],box:Z,boxRaw:b0,keypoints:U,annotations:g0}}if(!w.face||e.face.length!==w.face.length)w.face=JSON.parse(JSON.stringify(e.face));else for(let R=0;R((r-1)*w.face[R].box[g0]+U)/r),b0=e.face[R].boxRaw.map((U,g0)=>((r-1)*w.face[R].boxRaw[g0]+U)/r);if(e.face[R].rotation){let U={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};U.matrix=(y=e.face[R].rotation)==null?void 0:y.matrix,U.angle={roll:((r-1)*(((p=(d=w.face[R].rotation)==null?void 0:d.angle)==null?void 0:p.roll)||0)+(((b=(f=e.face[R].rotation)==null?void 0:f.angle)==null?void 0:b.roll)||0))/r,yaw:((r-1)*(((T=(M=w.face[R].rotation)==null?void 0:M.angle)==null?void 0:T.yaw)||0)+(((h=(m=e.face[R].rotation)==null?void 0:m.angle)==null?void 0:h.yaw)||0))/r,pitch:((r-1)*(((P=(S=w.face[R].rotation)==null?void 0:S.angle)==null?void 0:P.pitch)||0)+(((q=(I=e.face[R].rotation)==null?void 0:I.angle)==null?void 0:q.pitch)||0))/r},U.gaze={bearing:((r-1)*(((t0=w.face[R].rotation)==null?void 0:t0.gaze.bearing)||0)+(((G=e.face[R].rotation)==null?void 0:G.gaze.bearing)||0))/r,strength:((r-1)*((($=w.face[R].rotation)==null?void 0:$.gaze.strength)||0)+(((s0=e.face[R].rotation)==null?void 0:s0.gaze.strength)||0))/r},w.face[R]={...e.face[R],rotation:U,box:Z,boxRaw:b0}}else w.face[R]={...e.face[R],box:Z,boxRaw:b0}}if(!w.object||e.object.length!==w.object.length)w.object=JSON.parse(JSON.stringify(e.object));else for(let R=0;R((r-1)*w.object[R].box[g0]+U)/r),b0=e.object[R].boxRaw.map((U,g0)=>((r-1)*w.object[R].boxRaw[g0]+U)/r);w.object[R]={...e.object[R],box:Z,boxRaw:b0}}if(e.persons){let R=e.persons;if(!w.persons||R.length!==w.persons.length)w.persons=JSON.parse(JSON.stringify(R));else for(let Z=0;Z((r-1)*w.persons[Z].box[U]+b0)/r)}e.gesture&&(w.gesture=e.gesture),w.width=e.width,w.height=e.height;let s=g();return t1=v.perfadd?t1+Math.round(s-n):Math.round(s-n),e.performance&&(w.performance={...e.performance,interpolate:t1}),w}var r0=V(H());var j0;async function n1(e){return!j0||v.initial?j0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",j0.modelUrl),j0}async function $n(e,t){var r;if(j0||(j0=await n1(t)),!(j0!=null&&j0.executor)||!((r=j0==null?void 0:j0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=r0.image.resizeBilinear(e,[j0.inputs[0].shape?j0.inputs[0].shape[1]:0,j0.inputs[0].shape?j0.inputs[0].shape[2]:0],!1),n.norm=r0.div(n.resize,C.tf255),n.res=j0.execute(n.norm),n.squeeze=r0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r0.unstack(n.squeeze,2),n.fg=r0.softmax(n.fgRaw),n.mul=r0.mul(n.fg,C.tf255),n.expand=r0.expandDims(n.mul,2),n.output=r0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r0.squeeze(e),n.concat=r0.concat([n.input,n.output],-1),o=r0.cast(n.concat,"int32");break;case"alpha":o=r0.cast(n.output,"int32");break;default:o=r0.tensor(0)}return Object.keys(n).forEach(s=>r0.dispose(n[s])),o}var zt={};we(zt,{distance:()=>o1,find:()=>BA,similarity:()=>FA});function o1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function FA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=o1(e,t,n);return to(o,n.order||2,n.min||0,n.max||1)}function BA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AC2,validateModel:()=>Ct});var Ao=V(H());var Ze=V(H());var no=.005,U0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function r1(e){for(let t of _5){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function oo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ze.pad(e,U0.padding),n.resize=Ze.image.resizeBilinear(n.pad,[t,t]);let o=Ze.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ze.dispose(n[A])),o}function so(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+U0.padding[2][0]+U0.padding[2][1])/t[0]-U0.padding[2][0],o.position[1]*(t[1]+U0.padding[1][0]+U0.padding[1][1])/t[1]-U0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ge(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var u0,St=0,s1=Number.MAX_SAFE_INTEGER,a2={boxes:[],bodies:[],last:0};async function ao(e){var t;return v.initial&&(u0=null),u0?e.debug&&u("cached model:",u0.modelUrl):(X2(["size"],e),u0=await O(e.body.modelPath)),St=(u0==null?void 0:u0.executor)&&((t=u0==null?void 0:u0.inputs)==null?void 0:t[0].shape)?u0.inputs[0].shape[2]:0,St<64&&(St=256),u0}function GA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:wt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=ge(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Et)){let y=[];for(let d=0;db.part===i[d]),f=r.find(b=>b.part===i[d+1]);p&&f&&p.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([p.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return r1(c),A.push(c),A}function VA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let i=0;i<17;i++){let y=s[3*i+2];if(y>t.body.minConfidence){let d=[s[3*i+1],s[3*i+0]];a.push({part:wt[i],score:Math.round(100*y)/100,positionRaw:d,position:[Math.round((n.shape[2]||0)*d[0]),Math.round((n.shape[1]||0)*d[1])]})}}let l=ge(a.map(i=>i.position),[n.shape[2],n.shape[1]]),c={};for(let[i,y]of Object.entries(Et)){let d=[];for(let p=0;pM.part===y[p]),b=a.find(M=>M.part===y[p+1]);f&&b&&f.score>(t.body.minConfidence||0)&&b.score>(t.body.minConfidence||0)&&d.push([f.position,b.position])}c[i]=d}let x={id:r,score:A,box:l.box,boxRaw:l.boxRaw,keypoints:[...a],annotations:c};r1(x),o.push(x)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function A1(e,t){var r;if(!(u0!=null&&u0.executor)||!((r=u0==null?void 0:u0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(a2.boxes.length=0),s1++;let n=(t.body.skipTime||0)>g()-a2.last,o=s1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?a2.bodies:new Promise(async s=>{let A={};s1=0,A.input=ro(e,St),A.res=u0==null?void 0:u0.execute(A.input),a2.last=g();let a=await A.res.array();a2.bodies=A.res.shape[2]===17?GA(a,t,e):VA(a,t,e);for(let l of a2.bodies)so(l,[e.shape[2]||1,e.shape[1]||1]),oo(l.keypoints);Object.keys(A).forEach(l=>Ao.dispose(A[l])),s(a2.bodies)})}var w0=V(H());var se,jt=[],lo=0,a1=Number.MAX_SAFE_INTEGER,It=0,Nt=2.5;async function co(e){if(!se||v.initial){se=await O(e.object.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;It=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&u("cached model:",se.modelUrl);return se}async function ZA(e,t,n){var c,x;let o=0,r=[],s=It;for(let i of[1,2,4]){let y=i*13,d=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)===d2.length)),p=await d.array(),f=w0.squeeze(e.find(m=>m.shape[1]===y**2&&(m.shape[2]||0)(n.object.minConfidence||0)&&h!==61){let P=(.5+Math.trunc(m%y))/y,I=(.5+Math.trunc(m/y))/y,q=T[m].map(U=>U*(y/i/s)),[t0,G]=[P-Nt/i*q[0],I-Nt/i*q[1]],[$,s0]=[P+Nt/i*q[2]-t0,I+Nt/i*q[3]-G],R=[t0,G,$,s0];R=R.map(U=>Math.max(0,Math.min(U,1)));let Z=[R[0]*t[0],R[1]*t[1],R[2]*t[0],R[3]*t[1]],b0={id:o++,score:Math.round(100*S)/100,class:h+1,label:d2[h].label,box:Z.map(U=>Math.trunc(U)),boxRaw:R};r.push(b0)}}w0.dispose([d,f,b,M])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await w0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),w0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function i1(e,t){if(!(se!=null&&se.executor))return[];let n=(t.object.skipTime||0)>g()-lo,o=a1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&jt.length>0?(a1++,jt):(a1=0,!v.kernels.includes("mod")||!v.kernels.includes("sparsetodense")?jt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=w0.image.resizeBilinear(e,[It,It],!1),a=w0.div(A,C.tf255),l=w0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=se.execute(l)),lo=g();let x=await ZA(c,s,t);jt=x,w0.dispose([A,a,l,...c]),r(x)}))}var D0=V(H());var L2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],XA=L2.length,O2=L2.reduce((e,t,n)=>(e[t]=n,e),{}),qA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Li=qA.map(([e,t])=>[O2[e],O2[t]]),yo=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];function fo(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Ot=class{constructor(t,n){k(this,"priorityQueue");k(this,"numberOfElements");k(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function x1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var Y0,YA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Lt=1,v2=16,KA=50**2;function uo(e,t,n,o,r,s,A=2){let a=M=>({y:s.get(M.y,M.x,e),x:s.get(M.y,M.x,s.shape[2]/2+e)}),l=(M,T,m)=>({y:d1(Math.round(M.y/v2),0,T-1),x:d1(Math.round(M.x/v2),0,m-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),p=x1(t.position,y);for(let M=0;M[O2[y],O2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=c1(e.part,v2,n);x[e.part.id]={score:e.score,part:L2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],p=a[y];x[d]&&!x[p]&&(x[p]=uo(y,x[d],p,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function _A(e,t){let[n,o,r]=t.shape,s=new Ot(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?po(n,t,s.y,s.x)<=KA:!1})}function $A(e,t){return t.reduce((o,{position:r,score:s},A)=>(ho(e,r,A)||(o+=s),o),0)/t.length}function e4(e,t,n,o,r,s){let A=[],a=_A(s,t);for(;A.lengthd.score>s);let i=$A(A,x),y=fo(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function y1(e,t){if(!(Y0!=null&&Y0.executor))return[];let n=D0.tidy(()=>{if(!Y0.inputs[0].shape)return[];let A=D0.image.resizeBilinear(e,[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]),a=D0.sub(D0.div(D0.cast(A,"float32"),127.5),1),c=Y0.execute(a,YA).map(x=>D0.squeeze(x,[0]));return c[1]=D0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)D0.dispose(A);let r=e4(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return Y0.inputs[0].shape?mo(r,[e.shape[1],e.shape[2]],[Y0.inputs[0].shape[2],Y0.inputs[0].shape[1]]):[]}async function bo(e){return!Y0||v.initial?Y0=await O(e.body.modelPath):e.debug&&u("cached model:",Y0.modelUrl),Y0}var F=V(H());var he,t4=["fgr","pha","r1o","r2o","r3o","r4o"],h0={},m1=0;function vo(e){F.dispose([h0.r1i,h0.r2i,h0.r3i,h0.r4i,h0.downsample_ratio]),h0.r1i=F.tensor(0),h0.r2i=F.tensor(0),h0.r3i=F.tensor(0),h0.r4i=F.tensor(0),m1=e.segmentation.ratio||.5,h0.downsample_ratio=F.tensor(m1)}async function p1(e){return!he||v.initial?he=await O(e.segmentation.modelPath):e.debug&&u("cached model:",he.modelUrl),vo(e),he}var To=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function f1(e,t){let n=e?To(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?To(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function n4(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Ro(e,t){if(he||(he=await p1(t)),!(he!=null&&he.executor))return null;h0.src=F.div(e,255),m1!==t.segmentation.ratio&&vo(t);let[n,o,r,s,A,a]=await he.executeAsync(h0,t4),l;switch(t.segmentation.mode||"default"){case"default":l=f1(n,o);break;case"alpha":l=f1(null,o);break;case"foreground":l=f1(n,null);break;case"state":l=n4(r);break;default:l=F.tensor(0)}return F.dispose([h0.src,n,o,h0.r1i,h0.r2i,h0.r3i,h0.r4i]),[h0.r1i,h0.r2i,h0.r3i,h0.r4i]=[r,s,A,a],l}var k0=V(H());var N0;async function u1(e){return!N0||v.initial?N0=await O(e.segmentation.modelPath):e.debug&&u("cached model:",N0.modelUrl),N0}async function Po(e,t){var r;if(N0||(N0=await u1(t)),!(N0!=null&&N0.executor)||!((r=N0==null?void 0:N0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=k0.image.resizeBilinear(e,[N0.inputs[0].shape?N0.inputs[0].shape[1]:0,N0.inputs[0].shape?N0.inputs[0].shape[2]:0],!1),n.norm=k0.div(n.resize,C.tf255),n.res=N0.execute(n.norm),n.squeeze=k0.squeeze(n.res,[0]),n.alpha=k0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=k0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=k0.squeeze(e),n.concat=k0.concat([n.input,n.mul],-1),o=k0.cast(n.concat,"int32");break;case"alpha":o=k0.cast(n.mul,"int32");break;default:o=k0.tensor(0)}return Object.keys(n).forEach(s=>k0.dispose(n[s])),o}function Ct(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&u("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&u("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var C2=class{constructor(t){k(this,"instance");k(this,"models");this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(E0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(E0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(E0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(){var n,o,r,s,A,a,l,c,x,i,y,d,p,f,b,M,T,m,h,S,P,I,q,t0,G,$,s0;v.initial&&this.reset();let t={};t.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?p3(this.instance.config):null,t.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)==null?void 0:n.enabled)&&!this.models.antispoof?H3(this.instance.config):null,t.liveness=this.instance.config.face.enabled&&((o=this.instance.config.face.liveness)==null?void 0:o.enabled)&&!this.models.liveness?X3(this.instance.config):null,t.faceres=this.instance.config.face.enabled&&((r=this.instance.config.face.description)==null?void 0:r.enabled)&&!this.models.faceres?C3(this.instance.config):null,t.emotion=this.instance.config.face.enabled&&((s=this.instance.config.face.emotion)==null?void 0:s.enabled)&&!this.models.emotion?N3(this.instance.config):null,t.iris=this.instance.config.face.enabled&&((A=this.instance.config.face.iris)==null?void 0:A.enabled)&&!((a=this.instance.config.face.attention)!=null&&a.enabled)&&!this.models.iris?v3(this.instance.config):null,t.facemesh=this.instance.config.face.enabled&&((l=this.instance.config.face.mesh)==null?void 0:l.enabled)&&!this.models.facemesh?w3(this.instance.config):null,t.gear=this.instance.config.face.enabled&&((c=this.instance.config.face.gear)==null?void 0:c.enabled)&&!this.models.gear?K3(this.instance.config):null,t.ssrnetage=this.instance.config.face.enabled&&((x=this.instance.config.face.ssrnet)==null?void 0:x.enabled)&&!this.models.ssrnetage?$3(this.instance.config):null,t.ssrnetgender=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)==null?void 0:i.enabled)&&!this.models.ssrnetgender?on(this.instance.config):null,t.mobilefacenet=this.instance.config.face.enabled&&((y=this.instance.config.face.mobilefacenet)==null?void 0:y.enabled)&&!this.models.mobilefacenet?ln(this.instance.config):null,t.insightface=this.instance.config.face.enabled&&((d=this.instance.config.face.insightface)==null?void 0:d.enabled)&&!this.models.insightface?fn(this.instance.config):null,t.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((p=this.instance.config.body.modelPath)==null?void 0:p.includes("blazepose"))?_1(this.instance.config):null,t.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?Q1(this.instance.config):null,t.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((f=this.instance.config.body.modelPath)==null?void 0:f.includes("efficientpose"))?r3(this.instance.config):null,t.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((b=this.instance.config.body.modelPath)==null?void 0:b.includes("movenet"))?ao(this.instance.config):null,t.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((M=this.instance.config.body.modelPath)==null?void 0:M.includes("posenet"))?bo(this.instance.config):null,t.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((m=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)==null?void 0:m.includes("handtrack"))?Kn(this.instance.config):null,t.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((S=(h=this.instance.config.hand.detector)==null?void 0:h.modelPath)==null?void 0:S.includes("handtrack"))?Jn(this.instance.config):null,(I=(P=this.instance.config.hand.detector)==null?void 0:P.modelPath)!=null&&I.includes("handdetect")&&([t.handpose,t.handskeleton]=this.models.handpose?[null,null]:await Zn(this.instance.config)),t.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((q=this.instance.config.object.modelPath)==null?void 0:q.includes("centernet"))?t3(this.instance.config):null,t.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((t0=this.instance.config.object.modelPath)==null?void 0:t0.includes("nanodet"))?co(this.instance.config):null,t.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((G=this.instance.config.segmentation.modelPath)==null?void 0:G.includes("selfie"))?u1(this.instance.config):null,t.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&(($=this.instance.config.segmentation.modelPath)==null?void 0:$.includes("meet"))?n1(this.instance.config):null,t.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((s0=this.instance.config.segmentation.modelPath)==null?void 0:s0.includes("rvm"))?p1(this.instance.config):null,await Promise.all([...Object.values(t)]);for(let R of Object.keys(t))this.models[R]=t[R]||this.models[R]||null}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(E0).find(r=>r.startsWith(n.name));!o||(n.size=E0[o].sizeLoadedWeights,n.url=E0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Ct(this.instance,o,n);r&&t.push(r)}return t}};function wo(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let p={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let h of t)d.box[0]>h.box[0]&&d.box[0]h.box[1]&&d.box[1]+d.box[3]p.body.box[0]&&h.box[0]+h.box[2]p.body.box[1]&&h.box[1]+h.box[3]p.body.box[0]&&h.box[1]+h.box[3]>p.body.box[1]&&h.box[1]+h.box[3]{h&&h.length===4&&(f.push(h[0],h[0]+h[2]),b.push(h[1],h[1]+h[3]))};M(p.face.box),M((x=p.body)==null?void 0:x.box),M((i=p.hands.left)==null?void 0:i.box),M((y=p.hands.right)==null?void 0:y.box);let T=Math.min(...f),m=Math.min(...b);p.box=[T,m,Math.max(...f)-T,Math.max(...b)-m],(r==null?void 0:r[1])&&(r==null?void 0:r[2])&&(p.boxRaw=[p.box[0]/r[2],p.box[1]/r[1],p.box[2]/r[2],p.box[3]/r[1]]),A.push(p)}return A}var c0=V(H());var Wt=` + gaze: [gaze]\xB0`, + body: "body [score]%", + bodyPart: "[label] [score]%", + object: "[label] [score]%", + hand: "[label] [score]%", + finger: "[label]", + gesture: "[where] [who]: [what]" +}; + +// src/draw/draw.ts +var drawTime = 0; +function person(inCanvas2, result, drawOptions) { + const localOptions2 = mergeDeep(options2, drawOptions); + if (!result || !inCanvas2) + return; + const ctx = getCanvasContext(inCanvas2); + if (!ctx) + return; + ctx.lineJoin = "round"; + ctx.font = localOptions2.font; + for (let i = 0; i < result.length; i++) { + if (localOptions2.drawBoxes) { + ctx.strokeStyle = localOptions2.color; + ctx.fillStyle = localOptions2.color; + rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); + if (localOptions2.drawLabels) { + const label = `person #${i}`; + if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { + ctx.fillStyle = localOptions2.shadowColor; + ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.fillStyle = localOptions2.labelColor; + ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions2.lineHeight, result[i].box[2]); + } + ctx.stroke(); + } + } +} +function canvas2(input, output) { + if (!input || !output) + return; + const ctx = getCanvasContext(output); + if (!ctx) + return; + ctx.drawImage(input, 0, 0); +} +async function all(inCanvas2, result, drawOptions) { + if (!(result == null ? void 0 : result.performance) || !inCanvas2) + return null; + const timeStamp = now(); + const localOptions2 = mergeDeep(options2, drawOptions); + const promise = Promise.all([ + face(inCanvas2, result.face, localOptions2), + body(inCanvas2, result.body, localOptions2), + hand(inCanvas2, result.hand, localOptions2), + object(inCanvas2, result.object, localOptions2), + gesture(inCanvas2, result.gesture, localOptions2) + ]); + drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp); + result.performance.draw = drawTime; + return promise; +} +function init2() { + options2.faceLabels = defaultLabels.face; + options2.bodyLabels = defaultLabels.body; + options2.bodyPartLabels = defaultLabels.bodyPart; + options2.handLabels = defaultLabels.hand; + options2.fingerLabels = defaultLabels.finger; + options2.objectLabels = defaultLabels.object; + options2.gestureLabels = defaultLabels.gesture; +} + +// src/body/blazepose.ts +var tf9 = __toESM(require_tfjs_esm()); + +// src/body/blazeposecoords.ts +var blazeposecoords_exports = {}; +__export(blazeposecoords_exports, { + connected: () => connected, + kpt: () => kpt +}); +var kpt = [ + "nose", + "leftEyeInside", + "leftEye", + "leftEyeOutside", + "rightEyeInside", + "rightEye", + "rightEyeOutside", + "leftEar", + "rightEar", + "leftMouth", + "rightMouth", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftPinky", + "rightPinky", + "leftIndex", + "rightIndex", + "leftThumb", + "rightThumb", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle", + "leftHeel", + "rightHeel", + "leftFoot", + "rightFoot", + "bodyCenter", + "bodyTop", + "leftPalm", + "leftHand", + "rightPalm", + "rightHand" +]; +var connected = { + shoulders: ["leftShoulder", "rightShoulder"], + hips: ["rightHip", "leftHip"], + mouth: ["leftMouth", "rightMouth"], + leftLegUpper: ["leftHip", "leftKnee"], + leftLegLower: ["leftKnee", "leftAnkle"], + leftFoot: ["leftAnkle", "leftHeel", "leftFoot"], + leftTorso: ["leftShoulder", "leftHip"], + leftArmUpper: ["leftShoulder", "leftElbow"], + leftArmLower: ["leftElbow", "leftWrist"], + leftHand: ["leftWrist", "leftPalm"], + leftHandPinky: ["leftPalm", "leftPinky"], + leftHandIndex: ["leftPalm", "leftIndex"], + leftHandThumb: ["leftPalm", "leftThumb"], + leftEyeOutline: ["leftEyeInside", "leftEyeOutside"], + rightLegUpper: ["rightHip", "rightKnee"], + rightLegLower: ["rightKnee", "rightAnkle"], + rightFoot: ["rightAnkle", "rightHeel", "rightFoot"], + rightTorso: ["rightShoulder", "rightHip"], + rightArmUpper: ["rightShoulder", "rightElbow"], + rightArmLower: ["rightElbow", "rightWrist"], + rightHand: ["rightWrist", "rightPalm"], + rightHandPinky: ["rightPalm", "rightPinky"], + rightHandIndex: ["rightPalm", "rightIndex"], + rightHandThumb: ["rightPalm", "rightThumb"], + rightEyeOutline: ["rightEyeInside", "rightEyeOutside"] +}; + +// src/body/blazeposedetector.ts +var tf8 = __toESM(require_tfjs_esm()); +var model; +var inputSize = 224; +var anchorTensor; +var numLayers = 5; +var strides = [8, 16, 32, 32, 32]; +function createAnchors() { + const anchors3 = []; + let layerId = 0; + while (layerId < numLayers) { + let anchorCount = 0; + let lastSameStrideLayer = layerId; + while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) { + anchorCount += 2; + lastSameStrideLayer++; + } + const stride = strides[layerId]; + const featureMapHeight = Math.ceil(inputSize / stride); + const featureMapWidth = Math.ceil(inputSize / stride); + for (let y = 0; y < featureMapHeight; ++y) { + for (let x = 0; x < featureMapWidth; ++x) { + for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight }); + } + } + } + layerId = lastSameStrideLayer; + } + anchorTensor = { x: tf8.tensor1d(anchors3.map((a) => a.x)), y: tf8.tensor1d(anchors3.map((a) => a.y)) }; +} +async function loadDetector(config3) { + if (env.initial) + model = null; + if (!model && config3.body["detector"] && config3.body["detector"].modelPath || "") { + model = await loadModel(config3.body["detector"].modelPath); + const inputs = (model == null ? void 0 : model["executor"]) ? Object.values(model.modelSignature["inputs"]) : void 0; + inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug && model) + log("cached model:", model["modelUrl"]); + createAnchors(); + return model; +} +var cropFactor = [5, 5]; +function decodeBoxes(boxesTensor, anchor) { + return tf8.tidy(() => { + const split6 = tf8.split(boxesTensor, 12, 1); + let xCenter = tf8.squeeze(split6[0]); + let yCenter = tf8.squeeze(split6[1]); + let width = tf8.squeeze(split6[2]); + let height = tf8.squeeze(split6[3]); + xCenter = tf8.add(tf8.div(xCenter, inputSize), anchor.x); + yCenter = tf8.add(tf8.div(yCenter, inputSize), anchor.y); + width = tf8.mul(tf8.div(width, inputSize), cropFactor[0]); + height = tf8.mul(tf8.div(height, inputSize), cropFactor[1]); + const xMin = tf8.sub(xCenter, tf8.div(width, 2)); + const yMin = tf8.sub(yCenter, tf8.div(height, 2)); + const xMax = tf8.add(xMin, width); + const yMax = tf8.add(yMin, height); + const boxes = tf8.stack([xMin, yMin, xMax, yMax], 1); + return boxes; + }); +} +async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { + var _a, _b; + const detectedBoxes = []; + const t2 = {}; + t2.boxes = decodeBoxes(boxesTensor, anchorTensor); + t2.scores = tf8.sigmoid(logitsTensor); + t2.nms = await tf8.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, 1, ((_a = config3.body["detector"]) == null ? void 0 : _a.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); + const nms = await t2.nms.data(); + const scores = await t2.scores.data(); + const boxes = await t2.boxes.array(); + for (const i of Array.from(nms)) { + const score = scores[i]; + const boxRaw = boxes[i]; + const box = [Math.round(boxRaw[0] * outputSize2[0]), Math.round(boxRaw[1] * outputSize2[1]), Math.round(boxRaw[2] * outputSize2[0]), Math.round(boxRaw[3] * outputSize2[1])]; + const detectedBox = { score, boxRaw, box }; + detectedBoxes.push(detectedBox); + } + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return detectedBoxes; +} +async function detectBoxes(input, config3, outputSize2) { + const t2 = {}; + t2.res = model == null ? void 0 : model.execute(input, ["Identity"]); + t2.logitsRaw = tf8.slice(t2.res, [0, 0, 0], [1, -1, 1]); + t2.boxesRaw = tf8.slice(t2.res, [0, 0, 1], [1, -1, -1]); + t2.logits = tf8.squeeze(t2.logitsRaw); + t2.boxes = tf8.squeeze(t2.boxesRaw); + const boxes = await decodeResults(t2.boxes, t2.logits, config3, outputSize2); + Object.keys(t2).forEach((tensor6) => tf8.dispose(t2[tensor6])); + return boxes; +} + +// src/util/box.ts +function calc(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const box = [min2[0], min2[1], max5[0] - min2[0], max5[1] - min2[1]]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function square(keypoints, outputSize2 = [1, 1]) { + const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; + const min2 = [Math.min(...coords[0]), Math.min(...coords[1])]; + const max5 = [Math.max(...coords[0]), Math.max(...coords[1])]; + const center = [(min2[0] + max5[0]) / 2, (min2[1] + max5[1]) / 2]; + const dist = Math.max(center[0] - min2[0], center[1] - min2[1], -center[0] + max5[0], -center[1] + max5[1]); + const box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)]; + const boxRaw = [box[0] / outputSize2[0], box[1] / outputSize2[1], box[2] / outputSize2[0], box[3] / outputSize2[1]]; + return { box, boxRaw }; +} +function scale(box, scaleFact) { + const dist = [box[2] * scaleFact, box[3] * scaleFact]; + const newBox = [ + box[0] - (dist[0] - box[2]) / 2, + box[1] - (dist[1] - box[3]) / 2, + dist[0], + dist[1] + ]; + return newBox; +} + +// src/body/blazepose.ts +var model2; +var inputSize2 = 256; +var skipped = Number.MAX_SAFE_INTEGER; +var outputNodes = { + landmarks: ["ld_3d", "activation_segmentation", "activation_heatmap", "world_3d", "output_poseflag"], + detector: [] +}; +var cache = []; +var padding = [[0, 0], [0, 0], [0, 0], [0, 0]]; +var lastTime = 0; +var sigmoid2 = (x) => 1 - 1 / (1 + Math.exp(x)); +var loadDetect = (config3) => loadDetector(config3); +async function loadPose(config3) { + if (env.initial) + model2 = null; + if (!model2) { + model2 = await loadModel(config3.body.modelPath); + const inputs = (model2 == null ? void 0 : model2["executor"]) ? Object.values(model2.modelSignature["inputs"]) : void 0; + inputSize2 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + } else if (config3.debug) + log("cached model:", model2["modelUrl"]); + return model2; +} +function prepareImage(input, size2, cropBox) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + let final; + if (cropBox) { + t2.cropped = tf9.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + } + if (input.shape[1] !== input.shape[2]) { + const height = [ + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, + input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0 + ]; + const width = [ + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, + input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0 + ]; + padding = [ + [0, 0], + height, + width, + [0, 0] + ]; + t2.pad = tf9.pad(t2.cropped || input, padding); + t2.resize = tf9.image.resizeBilinear(t2.pad, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else if (input.shape[1] !== size2) { + t2.resize = tf9.image.resizeBilinear(t2.cropped || input, [size2, size2]); + final = tf9.div(t2.resize, constants.tf255); + } else { + final = tf9.div(t2.cropped || input, constants.tf255); + } + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + return final; +} +function rescaleKeypoints(keypoints, outputSize2, cropBox) { + for (const kpt4 of keypoints) { + kpt4.position = [ + Math.trunc(kpt4.position[0] * (outputSize2[0] + padding[2][0] + padding[2][1]) / outputSize2[0] - padding[2][0]), + Math.trunc(kpt4.position[1] * (outputSize2[1] + padding[1][0] + padding[1][1]) / outputSize2[1] - padding[1][0]), + kpt4.position[2] + ]; + kpt4.positionRaw = [kpt4.position[0] / outputSize2[0], kpt4.position[1] / outputSize2[1], 2 * kpt4.position[2] / (outputSize2[0] + outputSize2[1])]; + } + if (cropBox) { + const width = cropBox[2] - cropBox[0]; + const height = cropBox[3] - cropBox[1]; + for (const kpt4 of keypoints) { + kpt4.positionRaw = [ + kpt4.positionRaw[0] / height + cropBox[1], + kpt4.positionRaw[1] / width + cropBox[0], + kpt4.positionRaw[2] + ]; + kpt4.position = [ + Math.trunc(kpt4.positionRaw[0] * outputSize2[0]), + Math.trunc(kpt4.positionRaw[1] * outputSize2[1]), + kpt4.positionRaw[2] + ]; + } + } + return keypoints; +} +function fixKeypoints(keypoints) { + const leftPalm = keypoints.find((k) => k.part === "leftPalm"); + const leftWrist = keypoints.find((k) => k.part === "leftWrist"); + const leftIndex = keypoints.find((k) => k.part === "leftIndex"); + leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2; + const rightPalm = keypoints.find((k) => k.part === "rightPalm"); + const rightWrist = keypoints.find((k) => k.part === "rightWrist"); + const rightIndex = keypoints.find((k) => k.part === "rightIndex"); + rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2; +} +async function detectLandmarks(input, config3, outputSize2) { + if (!(model2 == null ? void 0 : model2["executor"])) + return null; + const t2 = {}; + [t2.ld, t2.segmentation, t2.heatmap, t2.world, t2.poseflag] = model2 == null ? void 0 : model2.execute(input, outputNodes.landmarks); + const poseScore = (await t2.poseflag.data())[0]; + const points = await t2.ld.data(); + const distances = await t2.world.data(); + Object.keys(t2).forEach((tensor6) => tf9.dispose(t2[tensor6])); + const keypointsRelative = []; + const depth = 5; + for (let i = 0; i < points.length / depth; i++) { + const score = sigmoid2(points[depth * i + 3]); + const presence = sigmoid2(points[depth * i + 4]); + const adjScore = Math.trunc(100 * score * presence * poseScore) / 100; + const positionRaw = [points[depth * i + 0] / inputSize2, points[depth * i + 1] / inputSize2, points[depth * i + 2] + 0]; + const position = [Math.trunc(outputSize2[0] * positionRaw[0]), Math.trunc(outputSize2[1] * positionRaw[1]), positionRaw[2]]; + const distance2 = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0]; + keypointsRelative.push({ part: kpt[i], positionRaw, position, distance: distance2, score: adjScore }); + } + if (poseScore < (config3.body.minConfidence || 0)) + return null; + fixKeypoints(keypointsRelative); + const keypoints = rescaleKeypoints(keypointsRelative, outputSize2); + const kpts = keypoints.map((k) => k.position); + const boxes = calc(kpts, [outputSize2[0], outputSize2[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations: annotations2 }; + return body4; +} +async function predict(input, config3) { + var _a, _b, _c; + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime; + const skipFrame = skipped < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && cache !== null) { + skipped++; + } else { + let boxes = []; + if ((_b = (_a = config3.body) == null ? void 0 : _a["detector"]) == null ? void 0 : _b["enabled"]) { + const preparedImage = prepareImage(input, 224); + boxes = await detectBoxes(preparedImage, config3, outputSize2); + tf9.dispose(preparedImage); + } else { + boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; + } + for (let i = 0; i < boxes.length; i++) { + const preparedBox = prepareImage(input, 256, (_c = boxes[i]) == null ? void 0 : _c.boxRaw); + cache.length = 0; + const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); + tf9.dispose(preparedBox); + if (!bodyResult) + continue; + bodyResult.id = i; + cache.push(bodyResult); + } + lastTime = now(); + skipped = 0; + } + return cache; +} + +// src/object/centernet.ts +var tf10 = __toESM(require_tfjs_esm()); + +// src/object/labels.ts +var labels2 = [ + { class: 1, label: "person" }, + { class: 2, label: "bicycle" }, + { class: 3, label: "car" }, + { class: 4, label: "motorcycle" }, + { class: 5, label: "airplane" }, + { class: 6, label: "bus" }, + { class: 7, label: "train" }, + { class: 8, label: "truck" }, + { class: 9, label: "boat" }, + { class: 10, label: "traffic light" }, + { class: 11, label: "fire hydrant" }, + { class: 12, label: "stop sign" }, + { class: 13, label: "parking meter" }, + { class: 14, label: "bench" }, + { class: 15, label: "bird" }, + { class: 16, label: "cat" }, + { class: 17, label: "dog" }, + { class: 18, label: "horse" }, + { class: 19, label: "sheep" }, + { class: 20, label: "cow" }, + { class: 21, label: "elephant" }, + { class: 22, label: "bear" }, + { class: 23, label: "zebra" }, + { class: 24, label: "giraffe" }, + { class: 25, label: "backpack" }, + { class: 26, label: "umbrella" }, + { class: 27, label: "handbag" }, + { class: 28, label: "tie" }, + { class: 29, label: "suitcase" }, + { class: 30, label: "frisbee" }, + { class: 31, label: "skis" }, + { class: 32, label: "snowboard" }, + { class: 33, label: "sports ball" }, + { class: 34, label: "kite" }, + { class: 35, label: "baseball bat" }, + { class: 36, label: "baseball glove" }, + { class: 37, label: "skateboard" }, + { class: 38, label: "surfboard" }, + { class: 39, label: "tennis racket" }, + { class: 40, label: "bottle" }, + { class: 41, label: "wine glass" }, + { class: 42, label: "cup" }, + { class: 43, label: "fork" }, + { class: 44, label: "knife" }, + { class: 45, label: "spoon" }, + { class: 46, label: "bowl" }, + { class: 47, label: "banana" }, + { class: 48, label: "apple" }, + { class: 49, label: "sandwich" }, + { class: 50, label: "orange" }, + { class: 51, label: "broccoli" }, + { class: 52, label: "carrot" }, + { class: 53, label: "hot dog" }, + { class: 54, label: "pizza" }, + { class: 55, label: "donut" }, + { class: 56, label: "cake" }, + { class: 57, label: "chair" }, + { class: 58, label: "couch" }, + { class: 59, label: "potted plant" }, + { class: 60, label: "bed" }, + { class: 61, label: "dining table" }, + { class: 62, label: "toilet" }, + { class: 63, label: "tv" }, + { class: 64, label: "laptop" }, + { class: 65, label: "mouse" }, + { class: 66, label: "remote" }, + { class: 67, label: "keyboard" }, + { class: 68, label: "cell phone" }, + { class: 69, label: "microwave" }, + { class: 70, label: "oven" }, + { class: 71, label: "toaster" }, + { class: 72, label: "sink" }, + { class: 73, label: "refrigerator" }, + { class: 74, label: "book" }, + { class: 75, label: "clock" }, + { class: 76, label: "vase" }, + { class: 77, label: "scissors" }, + { class: 78, label: "teddy bear" }, + { class: 79, label: "hair drier" }, + { class: 80, label: "toothbrush" } +]; + +// src/object/centernet.ts +var model3; +var inputSize3 = 0; +var last2 = []; +var lastTime2 = 0; +var skipped2 = Number.MAX_SAFE_INTEGER; +async function load(config3) { + if (env.initial) + model3 = null; + if (!model3) { + model3 = await loadModel(config3.object.modelPath); + const inputs = (model3 == null ? void 0 : model3["executor"]) ? Object.values(model3.modelSignature["inputs"]) : void 0; + inputSize3 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", model3["modelUrl"]); + return model3; +} +async function process3(res, outputShape, config3) { + if (!res) + return []; + const t2 = {}; + const results = []; + const detections = await res.array(); + t2.squeeze = tf10.squeeze(res); + const arr = tf10.split(t2.squeeze, 6, 1); + t2.stack = tf10.stack([arr[1], arr[0], arr[3], arr[2]], 1); + t2.boxes = tf10.squeeze(t2.stack); + t2.scores = tf10.squeeze(arr[4]); + t2.classes = tf10.squeeze(arr[5]); + tf10.dispose([res, ...arr]); + t2.nms = await tf10.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + const nms = await t2.nms.data(); + let i = 0; + for (const id of Array.from(nms)) { + const score = Math.trunc(100 * detections[0][id][4]) / 100; + const classVal = detections[0][id][5]; + if (Number.isNaN(classVal)) + continue; + const label = labels2[classVal].label; + const [x, y] = [ + detections[0][id][0] / inputSize3, + detections[0][id][1] / inputSize3 + ]; + const boxRaw = [ + x, + y, + detections[0][id][2] / inputSize3 - x, + detections[0][id][3] / inputSize3 - y + ]; + const box = [ + Math.trunc(boxRaw[0] * outputShape[0]), + Math.trunc(boxRaw[1] * outputShape[1]), + Math.trunc(boxRaw[2] * outputShape[0]), + Math.trunc(boxRaw[3] * outputShape[1]) + ]; + results.push({ id: i++, score, class: classVal, label, box, boxRaw }); + } + Object.keys(t2).forEach((tensor6) => tf10.dispose(t2[tensor6])); + return results; +} +async function predict2(input, config3) { + if (!(model3 == null ? void 0 : model3["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime2; + const skipFrame = skipped2 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last2.length > 0) { + skipped2++; + return last2; + } + skipped2 = 0; + return new Promise(async (resolve) => { + const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; + const resize = tf10.image.resizeBilinear(input, [inputSize3, inputSize3]); + const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; + lastTime2 = now(); + tf10.dispose(resize); + const obj = await process3(objectT, outputSize2, config3); + last2 = obj; + resolve(obj); + }); +} + +// src/body/efficientpose.ts +var tf11 = __toESM(require_tfjs_esm()); + +// src/body/efficientposecoords.ts +var efficientposecoords_exports = {}; +__export(efficientposecoords_exports, { + connected: () => connected2, + kpt: () => kpt2 +}); +var kpt2 = [ + "head", + "neck", + "rightShoulder", + "rightElbow", + "rightWrist", + "chest", + "leftShoulder", + "leftElbow", + "leftWrist", + "bodyCenter", + "rightHip", + "rightKnee", + "rightAnkle", + "leftHip", + "leftKnee", + "leftAnkle" +]; +var connected2 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/body/efficientpose.ts +var model4; +var lastTime3 = 0; +var cache2 = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} }; +var skipped3 = Number.MAX_SAFE_INTEGER; +async function load2(config3) { + if (env.initial) + model4 = null; + if (!model4) + model4 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model4["modelUrl"]); + return model4; +} +async function max2d(inputs, minScore) { + const [width, height] = inputs.shape; + const reshaped = tf11.reshape(inputs, [height * width]); + const max5 = tf11.max(reshaped, 0); + const newScore = (await max5.data())[0]; + if (newScore > minScore) { + const coordinates = tf11.argMax(reshaped, 0); + const mod3 = tf11.mod(coordinates, width); + const x = (await mod3.data())[0]; + const div15 = tf11.div(coordinates, width); + const y = (await div15.data())[0]; + tf11.dispose([reshaped, max5, coordinates, mod3, div15]); + return [x, y, newScore]; + } + tf11.dispose([reshaped, max5]); + return [0, 0, newScore]; +} +async function predict3(image28, config3) { + if (!(model4 == null ? void 0 : model4["executor"]) || !(model4 == null ? void 0 : model4.inputs[0].shape)) + return []; + const skipTime = (config3.body.skipTime || 0) > now() - lastTime3; + const skipFrame = skipped3 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && Object.keys(cache2.keypoints).length > 0) { + skipped3++; + return [cache2]; + } + skipped3 = 0; + return new Promise(async (resolve) => { + const tensor6 = tf11.tidy(() => { + var _a, _b; + const resize = tf11.image.resizeBilinear(image28, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); + const enhance2 = tf11.mul(resize, constants.tf2); + const norm = tf11.sub(enhance2, constants.tf1); + return norm; + }); + let resT; + if (config3.body.enabled) + resT = model4 == null ? void 0 : model4.execute(tensor6); + lastTime3 = now(); + tf11.dispose(tensor6); + if (resT) { + cache2.keypoints.length = 0; + const squeeze14 = tf11.squeeze(resT); + tf11.dispose(resT); + const stack5 = tf11.unstack(squeeze14, 2); + tf11.dispose(squeeze14); + for (let id = 0; id < stack5.length; id++) { + const [x2, y2, partScore] = await max2d(stack5[id], config3.body.minConfidence); + if (partScore > (config3.body.minConfidence || 0)) { + cache2.keypoints.push({ + score: Math.round(100 * partScore) / 100, + part: kpt2[id], + positionRaw: [ + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + Math.round(image28.shape[2] * x2 / model4.inputs[0].shape[2]), + Math.round(image28.shape[1] * y2 / model4.inputs[0].shape[1]) + ] + }); + } + } + stack5.forEach((s) => tf11.dispose(s)); + } + cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const x = cache2.keypoints.map((a) => a.position[0]); + const y = cache2.keypoints.map((a) => a.position[1]); + cache2.box = [ + Math.min(...x), + Math.min(...y), + Math.max(...x) - Math.min(...x), + Math.max(...y) - Math.min(...y) + ]; + const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); + const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); + cache2.boxRaw = [ + Math.min(...xRaw), + Math.min(...yRaw), + Math.max(...xRaw) - Math.min(...xRaw), + Math.max(...yRaw) - Math.min(...yRaw) + ]; + for (const [name, indexes] of Object.entries(connected2)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i]); + const pt1 = cache2.keypoints.find((kpt4) => kpt4.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + cache2.annotations[name] = pt; + } + resolve([cache2]); + }); +} + +// src/face/face.ts +var tf25 = __toESM(require_tfjs_esm()); + +// src/face/facemesh.ts +var tf15 = __toESM(require_tfjs_esm()); + +// src/face/blazeface.ts +var tf13 = __toESM(require_tfjs_esm()); + +// src/face/facemeshutil.ts +var tf12 = __toESM(require_tfjs_esm()); +var getBoxSize = (box) => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])]; +var getBoxCenter = (box) => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1]; +var clampBox = (box, input) => box ? [ + Math.trunc(Math.max(0, box.startPoint[0])), + Math.trunc(Math.max(0, box.startPoint[1])), + Math.trunc(Math.min(input.shape[2] || 0, box.endPoint[0]) - Math.max(0, box.startPoint[0])), + Math.trunc(Math.min(input.shape[1] || 0, box.endPoint[1]) - Math.max(0, box.startPoint[1])) +] : [0, 0, 0, 0]; +var getRawBox = (box, input) => box ? [ + box.startPoint[0] / (input.shape[2] || 0), + box.startPoint[1] / (input.shape[1] || 0), + (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0), + (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0) +] : [0, 0, 0, 0]; +var scaleBoxCoordinates = (box, factor) => { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + return { startPoint, endPoint, landmarks: box.landmarks, confidence: box.confidence }; +}; +var cutAndResize = (box, image28, cropSize) => { + const h = image28.shape[1]; + const w = image28.shape[2]; + const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; + const crop = tf12.image.cropAndResize(image28, [cutBox], [0], cropSize); + const norm = tf12.div(crop, constants.tf255); + tf12.dispose(crop); + return norm; +}; +var enlargeBox = (box, factor) => { + const center = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + return { startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]], endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]], landmarks: box.landmarks, confidence: box.confidence }; +}; +var squarifyBox = (box) => { + const centers = getBoxCenter(box); + const size2 = getBoxSize(box); + const halfSize = Math.max(...size2) / 2; + return { startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)], endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)], landmarks: box.landmarks, confidence: box.confidence }; +}; +var calculateLandmarksBoundingBox = (landmarks) => { + const x = landmarks.map((d) => d[0]); + const y = landmarks.map((d) => d[1]); + return { startPoint: [Math.min(...x), Math.min(...y)], endPoint: [Math.max(...x), Math.max(...y)], landmarks }; +}; +var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; +var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); +var buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +var dot = (v1, v2) => { + let product = 0; + for (let i = 0; i < v1.length; i++) + product += v1[i] * v2[i]; + return product; +}; +var getColumnFrom2DArr = (arr, columnIndex) => { + const column = []; + for (let i = 0; i < arr.length; i++) + column.push(arr[i][columnIndex]); + return column; +}; +var multiplyTransformMatrices = (mat1, mat2) => { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) + product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col))); + } + return product; +}; +var buildRotationMatrix = (rotation, center) => { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]); + return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix); +}; +var invertTransformMatrix = (matrix) => { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)]; + return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]]; +}; +var rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])]; +function generateAnchors(inputSize10) { + const spec = inputSize10 === 192 ? { strides: [4], anchors: [1] } : { strides: [inputSize10 / 16, inputSize10 / 8], anchors: [2, 6] }; + const anchors3 = []; + for (let i = 0; i < spec.strides.length; i++) { + const stride = spec.strides[i]; + const gridRows = Math.floor((inputSize10 + stride - 1) / stride); + const gridCols = Math.floor((inputSize10 + stride - 1) / stride); + const anchorsNum = spec.anchors[i]; + for (let gridY = 0; gridY < gridRows; gridY++) { + const anchorY = stride * (gridY + 0.5); + for (let gridX = 0; gridX < gridCols; gridX++) { + const anchorX = stride * (gridX + 0.5); + for (let n = 0; n < anchorsNum; n++) + anchors3.push([anchorX, anchorY]); + } + } + } + return anchors3; +} +function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize10) { + const boxSize = getBoxSize(box); + const coordsScaled = coordsRaw.map((coord) => [ + boxSize[0] / inputSize10 * (coord[0] - inputSize10 / 2), + boxSize[1] / inputSize10 * (coord[1] - inputSize10 / 2), + coord[2] || 0 + ]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix; + const coordsRotated = largeAngle ? coordsScaled.map((coord) => [...rotatePoint(coord, coordsRotationMatrix), coord[2]]) : coordsScaled; + const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix; + const boxCenter = getBoxCenter(box); + const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + offsets[0]), + Math.trunc(coord[1] + offsets[1]), + Math.trunc(coord[2] || 0) + ]); +} +function correctFaceRotation(rotate, box, input, inputSize10) { + const symmetryLine = box.landmarks.length >= meshLandmarks.count ? meshLandmarks.symmetryLine : blazeFaceLandmarks.symmetryLine; + let angle = 0; + let rotationMatrix = fixedRotationMatrix; + let face4; + if (rotate && env.kernels.includes("rotatewithoffset")) { + angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]); + const largeAngle = angle && angle !== 0 && Math.abs(angle) > 0.2; + if (largeAngle) { + const center = getBoxCenter(box); + const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; + const rotated = tf12.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + rotationMatrix = buildRotationMatrix(-angle, center); + face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); + tf12.dispose(rotated); + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + } else { + face4 = cutAndResize(box, input, [inputSize10, inputSize10]); + } + return [angle, rotationMatrix, face4]; +} +var findFaceCenter = (mesh) => { + const x = mesh.map((m) => m[0]); + const y = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2]; +}; +var calculateFaceBox = (mesh, previousBox) => { + const center = findFaceCenter(mesh); + const boxSize = getBoxSize(previousBox); + const calculatedBox = { + startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2], + endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] + }; + return calculatedBox; +}; + +// src/face/blazeface.ts +var keypointsCount = 6; +var faceBoxScaleFactor = 1.4; +var model5; +var anchors = null; +var inputSize4 = 0; +var inputSizeT = null; +var size = () => inputSize4; +async function load3(config3) { + var _a; + if (env.initial) + model5 = null; + if (!model5) + model5 = await loadModel((_a = config3.face.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model5["modelUrl"]); + inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; + inputSizeT = tf13.scalar(inputSize4, "int32"); + anchors = tf13.tensor2d(generateAnchors(inputSize4)); + return model5; +} +function decodeBoxes2(boxOutputs) { + if (!anchors || !inputSizeT) + return tf13.zeros([0, 0]); + const t2 = {}; + t2.boxStarts = tf13.slice(boxOutputs, [0, 1], [-1, 2]); + t2.centers = tf13.add(t2.boxStarts, anchors); + t2.boxSizes = tf13.slice(boxOutputs, [0, 3], [-1, 2]); + t2.boxSizesNormalized = tf13.div(t2.boxSizes, inputSizeT); + t2.centersNormalized = tf13.div(t2.centers, inputSizeT); + t2.halfBoxSize = tf13.div(t2.boxSizesNormalized, constants.tf2); + t2.starts = tf13.sub(t2.centersNormalized, t2.halfBoxSize); + t2.ends = tf13.add(t2.centersNormalized, t2.halfBoxSize); + t2.startNormalized = tf13.mul(t2.starts, inputSizeT); + t2.endNormalized = tf13.mul(t2.ends, inputSizeT); + const boxes = tf13.concat2d([t2.startNormalized, t2.endNormalized], 1); + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} +async function getBoxes(inputImage, config3) { + var _a, _b, _c, _d; + if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) + return []; + const t2 = {}; + t2.resized = tf13.image.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t2.div = tf13.div(t2.resized, constants.tf127); + t2.normalized = tf13.sub(t2.div, constants.tf05); + const res = model5 == null ? void 0 : model5.execute(t2.normalized); + if (Array.isArray(res) && res.length > 2) { + const sorted = res.sort((a, b) => a.size - b.size); + t2.concat384 = tf13.concat([sorted[0], sorted[2]], 2); + t2.concat512 = tf13.concat([sorted[1], sorted[3]], 2); + t2.concat = tf13.concat([t2.concat512, t2.concat384], 1); + t2.batch = tf13.squeeze(t2.concat, [0]); + } else if (Array.isArray(res)) { + t2.batch = tf13.squeeze(res[0]); + } else { + t2.batch = tf13.squeeze(res); + } + tf13.dispose(res); + t2.boxes = decodeBoxes2(t2.batch); + t2.logits = tf13.slice(t2.batch, [0, 0], [-1, 1]); + t2.sigmoid = tf13.sigmoid(t2.logits); + t2.scores = tf13.squeeze(t2.sigmoid); + t2.nms = await tf13.image.nonMaxSuppressionAsync(t2.boxes, t2.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c = config3.face.detector) == null ? void 0 : _c.minConfidence) || 0); + const nms = await t2.nms.array(); + const boxes = []; + const scores = await t2.scores.data(); + for (let i = 0; i < nms.length; i++) { + const confidence = scores[nms[i]]; + if (confidence > (((_d = config3.face.detector) == null ? void 0 : _d.minConfidence) || 0)) { + const b = {}; + b.bbox = tf13.slice(t2.boxes, [nms[i], 0], [1, -1]); + b.slice = tf13.slice(t2.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = tf13.squeeze(b.slice); + b.landmarks = tf13.reshape(b.squeeze, [keypointsCount, -1]); + const points = await b.bbox.data(); + const rawBox = { + startPoint: [points[0], points[1]], + endPoint: [points[2], points[3]], + landmarks: await b.landmarks.array(), + confidence + }; + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4]); + const enlargedBox = enlargeBox(scaledBox, config3.face["scale"] || faceBoxScaleFactor); + const squaredBox = squarifyBox(enlargedBox); + boxes.push(squaredBox); + Object.keys(b).forEach((tensor6) => tf13.dispose(b[tensor6])); + } + } + Object.keys(t2).forEach((tensor6) => tf13.dispose(t2[tensor6])); + return boxes; +} + +// src/face/iris.ts +var tf14 = __toESM(require_tfjs_esm()); +var model6; +var inputSize5 = 0; +var irisEnlarge = 2.3; +var leftOutline = meshAnnotations.leftEyeLower0; +var rightOutline = meshAnnotations.rightEyeLower0; +var eyeLandmarks = { + leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]], + rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]] +}; +var irisLandmarks = { + upperCenter: 3, + lowerCenter: 4, + index: 71, + numCoordinates: 76 +}; +async function load4(config3) { + var _a, _b; + if (env.initial) + model6 = null; + if (!model6) + model6 = await loadModel((_a = config3.face.iris) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model6["modelUrl"]); + inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; + if (inputSize5 === -1) + inputSize5 = 64; + return model6; +} +function replaceIrisCoords(rawCoords, newCoords, prefix, keys) { + for (let i = 0; i < irisIndices.length; i++) { + const { key, indices } = irisIndices[i]; + const originalIndices = meshAnnotations[`${prefix}${key}`]; + if (!keys || keys.includes(key)) { + for (let j = 0; j < indices.length; j++) { + const index2 = indices[j]; + rawCoords[originalIndices[j]] = [ + newCoords[index2][0], + newCoords[index2][1], + (newCoords[index2][2] + rawCoords[originalIndices[j]][2]) / 2 + ]; + } + } + } +} +var getLeftToRightEyeDepthDifference = (rawCoords) => { + const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2]; + const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2]; + return leftEyeZ - rightEyeZ; +}; +var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge)); + const boxSize = getBoxSize(box); + let crop = tf14.image.cropAndResize(face4, [[ + box.startPoint[1] / meshSize, + box.startPoint[0] / meshSize, + box.endPoint[1] / meshSize, + box.endPoint[0] / meshSize + ]], [0], [inputSize5, inputSize5]); + if (flip && env.kernels.includes("flipleftright")) { + const flipped = tf14.image.flipLeftRight(crop); + tf14.dispose(crop); + crop = flipped; + } + return { box, boxSize, crop }; +}; +var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { + const eyeRawCoords = []; + for (let i = 0; i < irisLandmarks.numCoordinates; i++) { + const x = eyeData[i * 3]; + const y = eyeData[i * 3 + 1]; + const z = eyeData[i * 3 + 2]; + eyeRawCoords.push([ + (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], + y / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + z + ]); + } + return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) }; +}; +var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { + const upperCenterZ = rawCoords[meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2]; + const lowerCenterZ = rawCoords[meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2]; + const averageZ = (upperCenterZ + lowerCenterZ) / 2; + return irisCoords.map((coord, i) => { + let z = averageZ; + if (i === 2) { + z = upperCenterZ; + } else if (i === 4) { + z = lowerCenterZ; + } + return [coord[0], coord[1], z]; + }); +}; +async function augmentIris(rawCoords, face4, meshSize) { + if (!(model6 == null ? void 0 : model6["executor"])) + return rawCoords; + const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); + const combined = tf14.concat([leftEyeCrop, rightEyeCrop]); + tf14.dispose(leftEyeCrop); + tf14.dispose(rightEyeCrop); + const eyePredictions = model6.execute(combined); + tf14.dispose(combined); + const eyePredictionsData = await eyePredictions.data(); + tf14.dispose(eyePredictions); + const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); + const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); + const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); + const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false); + const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords); + if (Math.abs(leftToRightEyeDepthDifference) < 30) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", null); + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", null); + } else if (leftToRightEyeDepthDifference < 1) { + replaceIrisCoords(rawCoords, leftEyeRawCoords, "left", ["EyeUpper0", "EyeLower0"]); + } else { + replaceIrisCoords(rawCoords, rightEyeRawCoords, "right", ["EyeUpper0", "EyeLower0"]); + } + const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, "left"); + const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, "right"); + const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords); + return newCoords; +} + +// src/face/attention.ts +async function augment(rawCoords, results) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + const t2 = { + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + }; + for (const val of Object.values(t2)) { + if (!val) + return rawCoords; + } + const irisLDepth = LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisL.length / 2; i++) + rawCoords.push([t2.irisL[2 * i + 0], t2.irisL[2 * i + 1], irisLDepth]); + const irisRDepth = LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; + for (let i = 0; i < t2.irisR.length / 2; i++) + rawCoords.push([t2.irisR[2 * i + 0], t2.irisR[2 * i + 1], irisRDepth]); + for (let i = 0; i < t2.eyeL.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t2.eyeL[2 * i + 0], t2.eyeL[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.eyeR.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t2.eyeR[2 * i + 0], t2.eyeR[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]]; + for (let i = 0; i < t2.lips.length / 2; i++) + rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t2.lips[2 * i + 0], t2.lips[2 * i + 1], rawCoords[LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]]; + return rawCoords; +} + +// src/face/facemesh.ts +var cache3 = { + boxes: [], + skipped: Number.MAX_SAFE_INTEGER, + timestamp: 0 +}; +var model7 = null; +var inputSize6 = 0; +async function predict4(input, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; + if (!(model7 == null ? void 0 : model7["executor"])) + return []; + const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - cache3.timestamp; + const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); + if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { + cache3.boxes = await getBoxes(input, config3); + cache3.timestamp = now(); + cache3.skipped = 0; + } else { + cache3.skipped++; + } + const faces = []; + const newCache = []; + let id = 0; + const size2 = inputSize6; + for (let i = 0; i < cache3.boxes.length; i++) { + const box = cache3.boxes[i]; + let angle = 0; + let rotationMatrix; + const face4 = { + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + annotations: {} + }; + [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c = config3.face.detector) == null ? void 0 : _c.rotation, box, input, ((_d = config3.face.mesh) == null ? void 0 : _d.enabled) ? inputSize6 : size()); + if (config3.filter.equalization) { + const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; + tf15.dispose(face4.tensor); + if (equilized) + face4.tensor = equilized; + } + face4.boxScore = Math.round(100 * box.confidence) / 100; + if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled)) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } else if (!model7) { + if (config3.debug) + log("face mesh detection requested, but model is not loaded"); + } else { + if (((_f = config3.face.attention) == null ? void 0 : _f.enabled) && !env.kernels.includes("atan2")) { + config3.face.attention.enabled = false; + tf15.dispose(face4.tensor); + return faces; + } + const results = model7.execute(face4.tensor); + const confidenceT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1); + const faceConfidence = await confidenceT.data(); + face4.faceScore = Math.round(100 * faceConfidence[0]) / 100; + if (face4.faceScore < (((_g = config3.face.detector) == null ? void 0 : _g.minConfidence) || 1)) { + box.confidence = face4.faceScore; + if (config3.face.mesh.keepInvalid) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.mesh = box.landmarks.map((pt) => [ + (box.startPoint[0] + box.endPoint[0]) / 2 + (box.endPoint[0] + box.startPoint[0]) * pt[0] / size(), + (box.startPoint[1] + box.endPoint[1]) / 2 + (box.endPoint[1] + box.startPoint[1]) * pt[1] / size() + ]); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size2]); + for (const key of Object.keys(blazeFaceLandmarks)) { + face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + } + } + } else { + const meshT = results.find((t2) => t2.shape[t2.shape.length - 1] === 1404); + const coordsReshaped = tf15.reshape(meshT, [-1, 3]); + let rawCoords = await coordsReshaped.array(); + tf15.dispose(coordsReshaped); + if ((_h = config3.face.attention) == null ? void 0 : _h.enabled) { + rawCoords = await augment(rawCoords, results); + } else if ((_i = config3.face.iris) == null ? void 0 : _i.enabled) { + rawCoords = await augmentIris(rawCoords, face4.tensor, inputSize6); + } + face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); + face4.meshRaw = face4.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size2]); + for (const key of Object.keys(meshAnnotations)) + face4.annotations[key] = meshAnnotations[key].map((index2) => face4.mesh[index2]); + face4.score = face4.faceScore; + const calculatedBox = { ...calculateFaceBox(face4.mesh, box), confidence: box.confidence, landmarks: box.landmarks }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + newCache.push(calculatedBox); + } + tf15.dispose(results); + } + if (face4.score > (((_j = config3.face.detector) == null ? void 0 : _j.minConfidence) || 1)) + faces.push(face4); + else + tf15.dispose(face4.tensor); + } + cache3.boxes = newCache; + return faces; +} +async function load5(config3) { + var _a, _b, _c, _d, _e, _f; + if (env.initial) + model7 = null; + if (((_a = config3.face.attention) == null ? void 0 : _a.enabled) && (model7 == null ? void 0 : model7["signature"])) { + if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) + model7 = null; + } + if (!model7) { + if ((_c = config3.face.attention) == null ? void 0 : _c.enabled) + model7 = await loadModel(config3.face.attention.modelPath); + else + model7 = await loadModel((_d = config3.face.mesh) == null ? void 0 : _d.modelPath); + } else if (config3.debug) { + log("cached model:", model7["modelUrl"]); + } + inputSize6 = model7["executor"] && ((_e = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _e[0].shape) ? (_f = model7 == null ? void 0 : model7.inputs) == null ? void 0 : _f[0].shape[2] : 256; + return model7; +} +var triangulation = TRI468; +var uvmap = UV468; + +// src/gear/emotion.ts +var tf16 = __toESM(require_tfjs_esm()); +var annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +async function load6(config3) { + var _a; + if (env.initial) + model8 = null; + if (!model8) + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model8["modelUrl"]); + return model8; +} +async function predict5(image28, config3, idx, count2) { + var _a, _b; + if (!model8) + return []; + const skipFrame = skipped4 < (((_a = config3.face.emotion) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; + if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { + skipped4++; + return last3[idx]; + } + skipped4 = 0; + return new Promise(async (resolve) => { + var _a2; + const obj = []; + if ((_a2 = config3.face.emotion) == null ? void 0 : _a2.enabled) { + const t2 = {}; + const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + t2.channels = tf16.mul(t2.resize, constants.rgb); + t2.grayscale = tf16.sum(t2.channels, 3, true); + t2.grayscaleSub = tf16.sub(t2.grayscale, constants.tf05); + t2.grayscaleMul = tf16.mul(t2.grayscaleSub, constants.tf2); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.grayscaleMul); + lastTime4 = now(); + const data = await t2.emotion.data(); + for (let i = 0; i < data.length; i++) { + if (data[i] > (config3.face.emotion.minConfidence || 0)) + obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); + } + obj.sort((a, b) => b.score - a.score); + Object.keys(t2).forEach((tensor6) => tf16.dispose(t2[tensor6])); + } + last3[idx] = obj; + lastCount = count2; + resolve(obj); + }); +} + +// src/face/faceres.ts +var tf17 = __toESM(require_tfjs_esm()); +var model9; +var last4 = []; +var lastTime5 = 0; +var lastCount2 = 0; +var skipped5 = Number.MAX_SAFE_INTEGER; +async function load7(config3) { + var _a; + if (env.initial) + model9 = null; + if (!model9) + model9 = await loadModel((_a = config3.face.description) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model9["modelUrl"]); + return model9; +} +function enhance(input) { + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) + return tensor6; + const crop = tf17.image.resizeBilinear(tensor6, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + const norm = tf17.mul(crop, constants.tf255); + tf17.dispose(crop); + return norm; +} +async function predict6(image28, config3, idx, count2) { + var _a, _b, _c, _d; + const obj = { + age: 0, + gender: "unknown", + genderScore: 0, + descriptor: [] + }; + if (!(model9 == null ? void 0 : model9["executor"])) + return obj; + const skipFrame = skipped5 < (((_a = config3.face.description) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; + if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c.age) > 0 && ((_d = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped5++; + return last4[idx]; + } + skipped5 = 0; + return new Promise(async (resolve) => { + var _a2; + if ((_a2 = config3.face.description) == null ? void 0 : _a2.enabled) { + const enhanced = enhance(image28); + const resT = model9 == null ? void 0 : model9.execute(enhanced); + lastTime5 = now(); + tf17.dispose(enhanced); + const genderT = resT.find((t2) => t2.shape[1] === 1); + const gender2 = await genderT.data(); + const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; + if (confidence > (config3.face.description.minConfidence || 0)) { + obj.gender = gender2[0] <= 0.5 ? "female" : "male"; + obj.genderScore = Math.min(0.99, confidence); + } + const argmax = tf17.argMax(resT.find((t2) => t2.shape[1] === 100), 1); + const ageIdx = (await argmax.data())[0]; + tf17.dispose(argmax); + const ageT = resT.find((t2) => t2.shape[1] === 100); + const all2 = await ageT.data(); + obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; + if (Number.isNaN(gender2[0]) || Number.isNaN(all2[0])) + log("faceres error:", { model: model9, result: resT }); + const desc = resT.find((t2) => t2.shape[1] === 1024); + const descriptor = desc ? await desc.data() : []; + obj.descriptor = Array.from(descriptor); + resT.forEach((t2) => tf17.dispose(t2)); + } + last4[idx] = obj; + lastCount2 = count2; + resolve(obj); + }); +} + +// src/face/mask.ts +var expandFact = 0.1; +var alpha = 0.5; +function insidePoly(x, y, polygon) { + let inside = false; + let j = polygon.length - 1; + for (let i = 0; i < polygon.length; j = i++) { + if (polygon[i].y > y !== polygon[j].y > y && x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + inside = !inside; + } + return inside; +} +async function mask(face4) { + if (!face4.tensor) + return face4.tensor; + if (!face4.mesh || face4.mesh.length < 100) + return face4.tensor; + const width = face4.tensor.shape[2] || 0; + const height = face4.tensor.shape[1] || 0; + const buffer = await face4.tensor.buffer(); + let silhouette = []; + for (const pt of meshAnnotations.silhouette) + silhouette.push({ x: (face4.mesh[pt][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt][1] - face4.box[1]) / face4.box[3] }); + if (expandFact && expandFact > 0) + silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const inside = insidePoly(x / width, y / width, silhouette); + if (!inside) { + buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0); + buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1); + buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2); + } + } + } + const output = buffer.toTensor(); + return output; +} + +// src/face/antispoof.ts +var tf18 = __toESM(require_tfjs_esm()); +var model10; +var cached = []; +var skipped6 = Number.MAX_SAFE_INTEGER; +var lastCount3 = 0; +var lastTime6 = 0; +async function load8(config3) { + var _a; + if (env.initial) + model10 = null; + if (!model10) + model10 = await loadModel((_a = config3.face.antispoof) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model10["modelUrl"]); + return model10; +} +async function predict7(image28, config3, idx, count2) { + var _a, _b; + if (!(model10 == null ? void 0 : model10["executor"])) + return 0; + const skipTime = (((_a = config3.face.antispoof) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6; + const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { + skipped6++; + return cached[idx]; + } + skipped6 = 0; + return new Promise(async (resolve) => { + const resize = tf18.image.resizeBilinear(image28, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const res = model10 == null ? void 0 : model10.execute(resize); + const num = (await res.data())[0]; + cached[idx] = Math.round(100 * num) / 100; + lastCount3 = count2; + lastTime6 = now(); + tf18.dispose([resize, res]); + resolve(cached[idx]); + }); +} + +// src/face/liveness.ts +var tf19 = __toESM(require_tfjs_esm()); +var model11; +var cached2 = []; +var skipped7 = Number.MAX_SAFE_INTEGER; +var lastCount4 = 0; +var lastTime7 = 0; +async function load9(config3) { + var _a; + if (env.initial) + model11 = null; + if (!model11) + model11 = await loadModel((_a = config3.face.liveness) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model11["modelUrl"]); + return model11; +} +async function predict8(image28, config3, idx, count2) { + var _a, _b; + if (!(model11 == null ? void 0 : model11["executor"])) + return 0; + const skipTime = (((_a = config3.face.liveness) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime7; + const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); + if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { + skipped7++; + return cached2[idx]; + } + skipped7 = 0; + return new Promise(async (resolve) => { + const resize = tf19.image.resizeBilinear(image28, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const res = model11 == null ? void 0 : model11.execute(resize); + const num = (await res.data())[0]; + cached2[idx] = Math.round(100 * num) / 100; + lastCount4 = count2; + lastTime7 = now(); + tf19.dispose([resize, res]); + resolve(cached2[idx]); + }); +} + +// src/gear/gear.ts +var tf20 = __toESM(require_tfjs_esm()); +var model12; +var last5 = []; +var raceNames = ["white", "black", "asian", "indian", "other"]; +var ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65]; +var lastCount5 = 0; +var lastTime8 = 0; +var skipped8 = Number.MAX_SAFE_INTEGER; +async function load10(config3) { + var _a; + if (env.initial) + model12 = null; + if (!model12) + model12 = await loadModel((_a = config3.face.gear) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model12["modelUrl"]); + return model12; +} +async function predict9(image28, config3, idx, count2) { + var _a, _b; + if (!model12) + return { age: 0, gender: "unknown", genderScore: 0, race: [] }; + const skipFrame = skipped8 < (((_a = config3.face.gear) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; + if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { + skipped8++; + return last5[idx]; + } + skipped8 = 0; + return new Promise(async (resolve) => { + var _a2, _b2; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) + return; + const t2 = {}; + const box = [[0, 0.1, 0.9, 0.9]]; + t2.resize = tf20.image.cropAndResize(image28, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; + if ((_a2 = config3.face.gear) == null ? void 0 : _a2.enabled) + [t2.age, t2.gender, t2.race] = model12.execute(t2.resize, ["age_output", "gender_output", "race_output"]); + const gender2 = await t2.gender.data(); + obj.gender = gender2[0] > gender2[1] ? "male" : "female"; + obj.genderScore = Math.round(100 * (gender2[0] > gender2[1] ? gender2[0] : gender2[1])) / 100; + const race = await t2.race.data(); + for (let i = 0; i < race.length; i++) { + if (race[i] > (((_b2 = config3.face.gear) == null ? void 0 : _b2.minConfidence) || 0.2)) + obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); + } + obj.race.sort((a, b) => b.score - a.score); + const ageDistribution = Array.from(await t2.age.data()); + const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]); + let age2 = ageSorted[0][0]; + for (let i = 1; i < ageSorted.length; i++) + age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); + obj.age = Math.round(10 * age2) / 10; + Object.keys(t2).forEach((tensor6) => tf20.dispose(t2[tensor6])); + last5[idx] = obj; + lastCount5 = count2; + lastTime8 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-age.ts +var tf21 = __toESM(require_tfjs_esm()); +var model13; +var last6 = []; +var lastCount6 = 0; +var lastTime9 = 0; +var skipped9 = Number.MAX_SAFE_INTEGER; +async function load11(config3) { + if (env.initial) + model13 = null; + if (!model13) + model13 = await loadModel(config3.face["ssrnet"].modelPathAge); + else if (config3.debug) + log("cached model:", model13["modelUrl"]); + return model13; +} +async function predict10(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model13) + return { age: 0 }; + const skipFrame = skipped9 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; + if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c = last6[idx]) == null ? void 0 : _c.age) && ((_d = last6[idx]) == null ? void 0 : _d.age) > 0) { + skipped9++; + return last6[idx]; + } + skipped9 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) + return; + const t2 = {}; + t2.resize = tf21.image.resizeBilinear(image28, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t2.enhance = tf21.mul(t2.resize, constants.tf255); + const obj = { age: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.age = model13.execute(t2.enhance); + if (t2.age) { + const data = await t2.age.data(); + obj.age = Math.trunc(10 * data[0]) / 10; + } + Object.keys(t2).forEach((tensor6) => tf21.dispose(t2[tensor6])); + last6[idx] = obj; + lastCount6 = count2; + lastTime9 = now(); + resolve(obj); + }); +} + +// src/gear/ssrnet-gender.ts +var tf22 = __toESM(require_tfjs_esm()); +var model14; +var last7 = []; +var lastCount7 = 0; +var lastTime10 = 0; +var skipped10 = Number.MAX_SAFE_INTEGER; +var rgb = [0.2989, 0.587, 0.114]; +async function load12(config3) { + var _a; + if (env.initial) + model14 = null; + if (!model14) + model14 = await loadModel((_a = config3.face["ssrnet"]) == null ? void 0 : _a.modelPathGender); + else if (config3.debug) + log("cached model:", model14["modelUrl"]); + return model14; +} +async function predict11(image28, config3, idx, count2) { + var _a, _b, _c, _d; + if (!model14) + return { gender: "unknown", genderScore: 0 }; + const skipFrame = skipped10 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; + if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c = last7[idx]) == null ? void 0 : _c.gender) && ((_d = last7[idx]) == null ? void 0 : _d.genderScore) > 0) { + skipped10++; + return last7[idx]; + } + skipped10 = 0; + return new Promise(async (resolve) => { + var _a2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) + return; + const t2 = {}; + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t2.enhance = tf22.tidy(() => { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb[0]); + const greenNorm = tf22.mul(green, rgb[1]); + const blueNorm = tf22.mul(blue, rgb[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + const normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.enabled) + t2.gender = model14.execute(t2.enhance); + const data = await t2.gender.data(); + obj.gender = data[0] > data[1] ? "female" : "male"; + obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; + Object.keys(t2).forEach((tensor6) => tf22.dispose(t2[tensor6])); + last7[idx] = obj; + lastCount7 = count2; + lastTime10 = now(); + resolve(obj); + }); +} + +// src/face/mobilefacenet.ts +var tf23 = __toESM(require_tfjs_esm()); +var model15; +var last8 = []; +var lastCount8 = 0; +var lastTime11 = 0; +var skipped11 = Number.MAX_SAFE_INTEGER; +async function load13(config3) { + var _a; + if (env.initial) + model15 = null; + if (!model15) + model15 = await loadModel((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.modelPath); + else if (config3.debug) + log("cached model:", model15["modelUrl"]); + return model15; +} +async function predict12(input, config3, idx, count2) { + var _a, _b; + if (!(model15 == null ? void 0 : model15["executor"])) + return []; + const skipFrame = skipped11 < (((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; + if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { + skipped11++; + return last8[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf23.image.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t2.data = model15.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf23.dispose(t2[tensor6])); + } + last8[idx] = data; + lastCount8 = count2; + lastTime11 = now(); + resolve(data); + }); +} + +// src/face/insightface.ts +var tf24 = __toESM(require_tfjs_esm()); +var model16; +var last9 = []; +var lastCount9 = 0; +var lastTime12 = 0; +var skipped12 = Number.MAX_SAFE_INTEGER; +async function load14(config3) { + if (env.initial) + model16 = null; + if (!model16) + model16 = await loadModel(config3.face["insightface"].modelPath); + else if (config3.debug) + log("cached model:", model16["modelUrl"]); + return model16; +} +async function predict13(input, config3, idx, count2) { + var _a, _b; + if (!(model16 == null ? void 0 : model16["executor"])) + return []; + const skipFrame = skipped12 < (((_a = config3.face["insightface"]) == null ? void 0 : _a.skipFrames) || 0); + const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; + if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { + skipped12++; + return last9[idx]; + } + return new Promise(async (resolve) => { + var _a2; + let data = []; + if (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { + const t2 = {}; + t2.crop = tf24.image.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t2.data = model16.execute(t2.crop); + const output = await t2.data.data(); + data = Array.from(output); + Object.keys(t2).forEach((tensor6) => tf24.dispose(t2[tensor6])); + } + last9[idx] = data; + lastCount9 = count2; + lastTime12 = now(); + resolve(data); + }); +} + +// src/face/angles.ts +var calculateGaze = (face4) => { + const radians = (pt1, pt2) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); + if (!face4.annotations.rightEyeIris || !face4.annotations.leftEyeIris) + return { bearing: 0, strength: 0 }; + const offsetIris = [0, -0.1]; + const eyeRatio = 1; + const left = (face4.mesh[33][2] || 0) > (face4.mesh[263][2] || 0); + const irisCenter = left ? face4.mesh[473] : face4.mesh[468]; + const eyeCenter = left ? [(face4.mesh[133][0] + face4.mesh[33][0]) / 2, (face4.mesh[133][1] + face4.mesh[33][1]) / 2] : [(face4.mesh[263][0] + face4.mesh[362][0]) / 2, (face4.mesh[263][1] + face4.mesh[362][1]) / 2]; + const eyeSize = left ? [face4.mesh[133][0] - face4.mesh[33][0], face4.mesh[23][1] - face4.mesh[27][1]] : [face4.mesh[263][0] - face4.mesh[362][0], face4.mesh[253][1] - face4.mesh[257][1]]; + const eyeDiff = [ + (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0], + eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1] + ]; + let strength = Math.sqrt(eyeDiff[0] * eyeDiff[0] + eyeDiff[1] * eyeDiff[1]); + strength = Math.min(strength, face4.boxRaw[2] / 2, face4.boxRaw[3] / 2); + const bearing = (radians([0, 0], eyeDiff) + Math.PI / 2) % Math.PI; + return { bearing, strength }; +}; +var calculateFaceAngle = (face4, imageSize) => { + const normalize2 = (v) => { + const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + v[0] /= length; + v[1] /= length; + v[2] /= length; + return v; + }; + const subVectors = (a, b) => { + const x = a[0] - b[0]; + const y = a[1] - b[1]; + const z = a[2] - b[2]; + return [x, y, z]; + }; + const crossVectors = (a, b) => { + const x = a[1] * b[2] - a[2] * b[1]; + const y = a[2] * b[0] - a[0] * b[2]; + const z = a[0] * b[1] - a[1] * b[0]; + return [x, y, z]; + }; + const rotationMatrixToEulerAngle = (r) => { + const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; + let thetaX; + let thetaY; + let thetaZ; + if (r10 < 1) { + if (r10 > -1) { + thetaZ = Math.asin(r10); + thetaY = Math.atan2(-r20, r00); + thetaX = Math.atan2(-r12, r11); + } else { + thetaZ = -Math.PI / 2; + thetaY = -Math.atan2(r21, r22); + thetaX = 0; + } + } else { + thetaZ = Math.PI / 2; + thetaY = Math.atan2(r21, r22); + thetaX = 0; + } + if (Number.isNaN(thetaX)) + thetaX = 0; + if (Number.isNaN(thetaY)) + thetaY = 0; + if (Number.isNaN(thetaZ)) + thetaZ = 0; + return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ }; + }; + const mesh = face4.meshRaw; + if (!mesh || mesh.length < 300) + return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } }; + const size2 = Math.max(face4.boxRaw[2] * imageSize[0], face4.boxRaw[3] * imageSize[1]) / 1.5; + const pts = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size2, pt[1] * imageSize[1] / size2, pt[2]]); + const yAxis = normalize2(subVectors(pts[1], pts[0])); + let xAxis = normalize2(subVectors(pts[3], pts[2])); + const zAxis = normalize2(crossVectors(xAxis, yAxis)); + xAxis = crossVectors(yAxis, zAxis); + const matrix = [ + xAxis[0], + xAxis[1], + xAxis[2], + yAxis[0], + yAxis[1], + yAxis[2], + zAxis[0], + zAxis[1], + zAxis[2] + ]; + const angle = rotationMatrixToEulerAngle(matrix); + const gaze = mesh.length === 478 ? calculateGaze(face4) : { bearing: 0, strength: 0 }; + return { angle, matrix, gaze }; +}; + +// src/face/anthropometry.ts +function calculateCameraDistance(face4, width) { + const f = face4 == null ? void 0 : face4.annotations; + if (!f) + return 0; + const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width; + const cameraDistance = Math.round(1.17 / irisSize) / 100; + return cameraDistance; +} + +// src/face/face.ts +var detectFace = async (instance, input) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + let timeStamp = now(); + let ageRes; + let gearRes; + let genderRes; + let emotionRes; + let mobilefacenetRes; + let insightfaceRes; + let antispoofRes; + let livenessRes; + let descRes; + const faceRes = []; + instance.state = "run:face"; + const faces = await predict4(input, instance.config); + instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + if (!input.shape || input.shape.length !== 4) + return []; + if (!faces) + return []; + for (let i = 0; i < faces.length; i++) { + instance.analyze("Get Face"); + if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) { + log("Face object is disposed:", faces[i].tensor); + continue; + } + if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { + const masked = await mask(faces[i]); + tf25.dispose(faces[i].tensor); + if (masked) + faces[i].tensor = masked; + } + const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; + instance.analyze("Start Emotion:"); + if (instance.config.async) { + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + } else { + instance.state = "run:emotion"; + timeStamp = now(); + emotionRes = ((_c = instance.config.face.emotion) == null ? void 0 : _c.enabled) ? await predict5(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : []; + instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Emotion:"); + instance.analyze("Start AntiSpoof:"); + if (instance.config.async) { + antispoofRes = ((_d = instance.config.face.antispoof) == null ? void 0 : _d.enabled) ? predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:antispoof"; + timeStamp = now(); + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End AntiSpoof:"); + instance.analyze("Start Liveness:"); + if (instance.config.async) { + livenessRes = ((_f = instance.config.face.liveness) == null ? void 0 : _f.enabled) ? predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + } else { + instance.state = "run:liveness"; + timeStamp = now(); + livenessRes = ((_g = instance.config.face.liveness) == null ? void 0 : _g.enabled) ? await predict8(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : 0; + instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Liveness:"); + instance.analyze("Start GEAR:"); + if (instance.config.async) { + gearRes = ((_h = instance.config.face.gear) == null ? void 0 : _h.enabled) ? predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:gear"; + timeStamp = now(); + gearRes = ((_i = instance.config.face.gear) == null ? void 0 : _i.enabled) ? await predict9(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.gear = Math.trunc(now() - timeStamp); + } + instance.analyze("End GEAR:"); + instance.analyze("Start SSRNet:"); + if (instance.config.async) { + ageRes = ((_j = instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) ? predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_k = instance.config.face["ssrnet"]) == null ? void 0 : _k.enabled) ? predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:ssrnet"; + timeStamp = now(); + ageRes = ((_l = instance.config.face["ssrnet"]) == null ? void 0 : _l.enabled) ? await predict10(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.ssrnet = Math.trunc(now() - timeStamp); + } + instance.analyze("End SSRNet:"); + instance.analyze("Start MobileFaceNet:"); + if (instance.config.async) { + mobilefacenetRes = ((_n = instance.config.face["mobilefacenet"]) == null ? void 0 : _n.enabled) ? predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + mobilefacenetRes = ((_o = instance.config.face["mobilefacenet"]) == null ? void 0 : _o.enabled) ? await predict12(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End MobileFaceNet:"); + instance.analyze("Start InsightFace:"); + if (instance.config.async) { + insightfaceRes = ((_p = instance.config.face["insightface"]) == null ? void 0 : _p.enabled) ? predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + } else { + instance.state = "run:mobilefacenet"; + timeStamp = now(); + insightfaceRes = ((_q = instance.config.face["insightface"]) == null ? void 0 : _q.enabled) ? await predict13(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length) : null; + instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); + } + instance.analyze("End InsightFace:"); + instance.analyze("Start Description:"); + if (instance.config.async) { + descRes = predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + } else { + instance.state = "run:description"; + timeStamp = now(); + descRes = await predict6(faces[i].tensor || tf25.tensor([]), instance.config, i, faces.length); + instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + instance.analyze("End Description:"); + if (instance.config.async) { + [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]); + } + instance.analyze("Finish Face:"); + if (((_r = instance.config.face["ssrnet"]) == null ? void 0 : _r.enabled) && ageRes && genderRes) { + descRes = { + ...descRes, + age: ageRes.age, + gender: genderRes.gender, + genderScore: genderRes.genderScore + }; + } + if (((_s = instance.config.face.gear) == null ? void 0 : _s.enabled) && gearRes) { + descRes = { + ...descRes, + age: gearRes.age, + gender: gearRes.gender, + genderScore: gearRes.genderScore, + race: gearRes.race + }; + } + if (((_t = instance.config.face["mobilefacenet"]) == null ? void 0 : _t.enabled) && mobilefacenetRes) { + descRes.descriptor = mobilefacenetRes; + } + if (((_u = instance.config.face["insightface"]) == null ? void 0 : _u.enabled) && insightfaceRes) { + descRes.descriptor = insightfaceRes; + } + const irisSize = ((_v = instance.config.face.iris) == null ? void 0 : _v.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; + const tensor6 = ((_w = instance.config.face.detector) == null ? void 0 : _w.return) ? tf25.squeeze(faces[i].tensor) : null; + tf25.dispose(faces[i].tensor); + if (faces[i].tensor) + delete faces[i].tensor; + const res = { + ...faces[i], + id: i + }; + if (descRes.age) + res.age = descRes.age; + if (descRes.gender) + res.gender = descRes.gender; + if (descRes.genderScore) + res.genderScore = descRes.genderScore; + if (descRes.descriptor) + res.embedding = descRes.descriptor; + if (descRes.race) + res.race = descRes.race; + if (emotionRes) + res.emotion = emotionRes; + if (antispoofRes) + res.real = antispoofRes; + if (livenessRes) + res.live = livenessRes; + if (irisSize > 0) + res.distance = irisSize; + if (rotation) + res.rotation = rotation; + if (tensor6) + res.tensor = tensor6; + faceRes.push(res); + instance.analyze("End Face"); + } + instance.analyze("End FaceMesh:"); + if (instance.config.async) { + if (instance.performance.face) + delete instance.performance.face; + if (instance.performance.age) + delete instance.performance.age; + if (instance.performance.gender) + delete instance.performance.gender; + if (instance.performance.emotion) + delete instance.performance.emotion; + } + return faceRes; +}; + +// src/hand/fingerdef.ts +var Finger = { + thumb: 0, + index: 1, + middle: 2, + ring: 3, + pinky: 4, + all: [0, 1, 2, 3, 4], + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + pointsMapping: { + 0: [[0, 1], [1, 2], [2, 3], [3, 4]], + 1: [[0, 5], [5, 6], [6, 7], [7, 8]], + 2: [[0, 9], [9, 10], [10, 11], [11, 12]], + 3: [[0, 13], [13, 14], [14, 15], [15, 16]], + 4: [[0, 17], [17, 18], [18, 19], [19, 20]] + }, + getName: (value) => Finger.nameMapping[value], + getPoints: (value) => Finger.pointsMapping[value] +}; +var FingerCurl = { + none: 0, + half: 1, + full: 2, + nameMapping: { 0: "none", 1: "half", 2: "full" }, + getName: (value) => FingerCurl.nameMapping[value] +}; +var FingerDirection = { + verticalUp: 0, + verticalDown: 1, + horizontalLeft: 2, + horizontalRight: 3, + diagonalUpRight: 4, + diagonalUpLeft: 5, + diagonalDownRight: 6, + diagonalDownLeft: 7, + nameMapping: { 0: "verticalUp", 1: "verticalDown", 2: "horizontalLeft", 3: "horizontalRight", 4: "diagonalUpRight", 5: "diagonalUpLeft", 6: "diagonalDownRight", 7: "diagonalDownLeft" }, + getName: (value) => FingerDirection.nameMapping[value] +}; +var FingerGesture = class { + constructor(name) { + __publicField(this, "name"); + __publicField(this, "curls"); + __publicField(this, "directions"); + __publicField(this, "weights"); + __publicField(this, "weightsRelative"); + this.name = name; + this.curls = {}; + this.directions = {}; + this.weights = [1, 1, 1, 1, 1]; + this.weightsRelative = [1, 1, 1, 1, 1]; + } + curl(finger, curl, confidence) { + if (typeof this.curls[finger] === "undefined") + this.curls[finger] = []; + this.curls[finger].push([curl, confidence]); + } + direction(finger, position, confidence) { + if (!this.directions[finger]) + this.directions[finger] = []; + this.directions[finger].push([position, confidence]); + } + weight(finger, weight) { + this.weights[finger] = weight; + const total = this.weights.reduce((a, b) => a + b, 0); + this.weightsRelative = this.weights.map((el) => el * 5 / total); + } + matchAgainst(detectedCurls, detectedDirections) { + let confidence = 0; + for (const fingerIdx in detectedCurls) { + const detectedCurl = detectedCurls[fingerIdx]; + const expectedCurls = this.curls[fingerIdx]; + if (typeof expectedCurls === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedCurl, score] of expectedCurls) { + if (detectedCurl === expectedCurl) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + for (const fingerIdx in detectedDirections) { + const detectedDirection = detectedDirections[fingerIdx]; + const expectedDirections = this.directions[fingerIdx]; + if (typeof expectedDirections === "undefined") { + confidence += this.weightsRelative[fingerIdx]; + continue; + } + for (const [expectedDirection, score] of expectedDirections) { + if (detectedDirection === expectedDirection) { + confidence += score * this.weightsRelative[fingerIdx]; + break; + } + } + } + return confidence / 10; + } +}; + +// src/hand/fingergesture.ts +var { thumb, index, middle, ring, pinky } = Finger; +var { none, half, full } = FingerCurl; +var { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection; +var ThumbsUp = new FingerGesture("thumbs up"); +ThumbsUp.curl(thumb, none, 1); +ThumbsUp.direction(thumb, verticalUp, 1); +ThumbsUp.direction(thumb, diagonalUpLeft, 0.25); +ThumbsUp.direction(thumb, diagonalUpRight, 0.25); +for (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) { + ThumbsUp.curl(finger, full, 1); + ThumbsUp.direction(finger, horizontalLeft, 1); + ThumbsUp.direction(finger, horizontalRight, 1); +} +var Victory = new FingerGesture("victory"); +Victory.curl(thumb, half, 0.5); +Victory.curl(thumb, none, 0.5); +Victory.direction(thumb, verticalUp, 1); +Victory.direction(thumb, diagonalUpLeft, 1); +Victory.curl(index, none, 1); +Victory.direction(index, verticalUp, 0.75); +Victory.direction(index, diagonalUpLeft, 1); +Victory.curl(middle, none, 1); +Victory.direction(middle, verticalUp, 1); +Victory.direction(middle, diagonalUpLeft, 0.75); +Victory.curl(ring, full, 1); +Victory.direction(ring, verticalUp, 0.2); +Victory.direction(ring, diagonalUpLeft, 1); +Victory.direction(ring, horizontalLeft, 0.2); +Victory.curl(pinky, full, 1); +Victory.direction(pinky, verticalUp, 0.2); +Victory.direction(pinky, diagonalUpLeft, 1); +Victory.direction(pinky, horizontalLeft, 0.2); +Victory.weight(index, 2); +Victory.weight(middle, 2); +var Point = new FingerGesture("point"); +Point.curl(thumb, full, 1); +Point.curl(index, none, 0.5); +Point.curl(middle, full, 0.5); +Point.curl(ring, full, 0.5); +Point.curl(pinky, full, 0.5); +Point.weight(index, 2); +Point.weight(middle, 2); +var MiddleFinger = new FingerGesture("middle finger"); +MiddleFinger.curl(thumb, none, 1); +MiddleFinger.curl(index, full, 0.5); +MiddleFinger.curl(middle, full, 0.5); +MiddleFinger.curl(ring, full, 0.5); +MiddleFinger.curl(pinky, full, 0.5); +MiddleFinger.weight(index, 2); +MiddleFinger.weight(middle, 2); +var OpenPalm = new FingerGesture("open palm"); +OpenPalm.curl(thumb, none, 0.75); +OpenPalm.curl(index, none, 0.75); +OpenPalm.curl(middle, none, 0.75); +OpenPalm.curl(ring, none, 0.75); +OpenPalm.curl(pinky, none, 0.75); +var fingergesture_default = [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm]; + +// src/hand/fingerpose.ts +var minConfidence = 0.7; +var options3 = { + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + DISTANCE_VOTE_POWER: 1.1, + SINGLE_ANGLE_VOTE_POWER: 0.9, + TOTAL_ANGLE_VOTE_POWER: 1.6 +}; +function calculateSlope(point1x, point1y, point2x, point2y) { + const value = (point1y - point2y) / (point1x - point2x); + let slope = Math.atan(value) * 180 / Math.PI; + if (slope <= 0) + slope = -slope; + else if (slope > 0) + slope = 180 - slope; + return slope; +} +function getSlopes(point1, point2) { + if (!point1 || !point2) + return [0, 0]; + const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]); + if (point1.length === 2) + return slopeXY; + const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]); + return [slopeXY, slopeYZ]; +} +function angleOrientationAt(angle, weightageAt = 1) { + let isVertical = 0; + let isDiagonal = 0; + let isHorizontal = 0; + if (angle >= 75 && angle <= 105) + isVertical = 1 * weightageAt; + else if (angle >= 25 && angle <= 155) + isDiagonal = 1 * weightageAt; + else + isHorizontal = 1 * weightageAt; + return [isVertical, isDiagonal, isHorizontal]; +} +function estimateFingerCurl(startPoint, midPoint, endPoint) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const start_mid_z_dist = startPoint[2] - midPoint[2]; + const start_end_z_dist = startPoint[2] - endPoint[2]; + const mid_end_z_dist = midPoint[2] - endPoint[2]; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist); + let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist); + if (cos_in > 1) + cos_in = 1; + else if (cos_in < -1) + cos_in = -1; + let angleOfCurve = Math.acos(cos_in); + angleOfCurve = 57.2958 * angleOfCurve % 180; + let fingerCurl; + if (angleOfCurve > options3.NO_CURL_START_LIMIT) + fingerCurl = FingerCurl.none; + else if (angleOfCurve > options3.HALF_CURL_START_LIMIT) + fingerCurl = FingerCurl.half; + else + fingerCurl = FingerCurl.full; + return fingerCurl; +} +function estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + if (max_dist_x === Math.abs(start_end_x_dist)) { + if (start_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else if (max_dist_x === Math.abs(start_mid_x_dist)) { + if (start_mid_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } else { + if (mid_end_x_dist > 0) + estimatedDirection = FingerDirection.horizontalLeft; + else + estimatedDirection = FingerDirection.horizontalRight; + } + return estimatedDirection; +} +function estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) { + let estimatedDirection; + if (max_dist_y === Math.abs(start_end_y_dist)) { + if (start_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else if (max_dist_y === Math.abs(start_mid_y_dist)) { + if (start_mid_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } else { + if (mid_end_y_dist < 0) + estimatedDirection = FingerDirection.verticalDown; + else + estimatedDirection = FingerDirection.verticalUp; + } + return estimatedDirection; +} +function estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) { + let estimatedDirection; + const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + if (reqd_vertical_direction === FingerDirection.verticalUp) { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalUpLeft; + else + estimatedDirection = FingerDirection.diagonalUpRight; + } else { + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) + estimatedDirection = FingerDirection.diagonalDownLeft; + else + estimatedDirection = FingerDirection.diagonalDownRight; + } + return estimatedDirection; +} +function calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) { + const start_mid_x_dist = startPoint[0] - midPoint[0]; + const start_end_x_dist = startPoint[0] - endPoint[0]; + const mid_end_x_dist = midPoint[0] - endPoint[0]; + const start_mid_y_dist = startPoint[1] - midPoint[1]; + const start_end_y_dist = startPoint[1] - endPoint[1]; + const mid_end_y_dist = midPoint[1] - endPoint[1]; + const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist)); + const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist)); + let voteVertical = 0; + let voteDiagonal = 0; + let voteHorizontal = 0; + const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 1e-5); + if (start_end_x_y_dist_ratio > 1.5) + voteVertical += options3.DISTANCE_VOTE_POWER; + else if (start_end_x_y_dist_ratio > 0.66) + voteDiagonal += options3.DISTANCE_VOTE_POWER; + else + voteHorizontal += options3.DISTANCE_VOTE_POWER; + const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist); + const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist); + const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist); + const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist); + let calc_start_point_x = startPoint[0]; + let calc_start_point_y = startPoint[1]; + let calc_end_point_x = endPoint[0]; + let calc_end_point_y = endPoint[1]; + if (max_dist === start_mid_dist) { + calc_end_point_x = endPoint[0]; + calc_end_point_y = endPoint[1]; + } else if (max_dist === mid_end_dist) { + calc_start_point_x = midPoint[0]; + calc_start_point_y = midPoint[1]; + } + const calcStartPoint = [calc_start_point_x, calc_start_point_y]; + const calcEndPoint = [calc_end_point_x, calc_end_point_y]; + const totalAngle = getSlopes(calcStartPoint, calcEndPoint); + const votes = angleOrientationAt(totalAngle, options3.TOTAL_ANGLE_VOTE_POWER); + voteVertical += votes[0]; + voteDiagonal += votes[1]; + voteHorizontal += votes[2]; + for (const fingerSlope of fingerSlopes) { + const fingerVotes = angleOrientationAt(fingerSlope, options3.SINGLE_ANGLE_VOTE_POWER); + voteVertical += fingerVotes[0]; + voteDiagonal += fingerVotes[1]; + voteHorizontal += fingerVotes[2]; + } + let estimatedDirection; + if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y); + } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) { + estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } else { + estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x); + } + return estimatedDirection; +} +function estimate(landmarks) { + const slopesXY = []; + const slopesYZ = []; + const fingerCurls = []; + const fingerDirections = []; + if (!landmarks) + return { curls: fingerCurls, directions: fingerDirections }; + for (const finger of Finger.all) { + const points = Finger.getPoints(finger); + const slopeAtXY = []; + const slopeAtYZ = []; + for (const point2 of points) { + const point1 = landmarks[point2[0]]; + const point22 = landmarks[point2[1]]; + const slopes = getSlopes(point1, point22); + const slopeXY = slopes[0]; + const slopeYZ = slopes[1]; + slopeAtXY.push(slopeXY); + slopeAtYZ.push(slopeYZ); + } + slopesXY.push(slopeAtXY); + slopesYZ.push(slopeAtYZ); + } + for (const finger of Finger.all) { + const pointIndexAt = finger === Finger.thumb ? 1 : 0; + const fingerPointsAt = Finger.getPoints(finger); + const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]]; + const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]]; + const endPoint = landmarks[fingerPointsAt[3][1]]; + const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint); + const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt)); + fingerCurls[finger] = fingerCurled; + fingerDirections[finger] = fingerPosition; + } + return { curls: fingerCurls, directions: fingerDirections }; +} +function analyze(keypoints) { + if (!keypoints || keypoints.length === 0) + return null; + const estimatorRes = estimate(keypoints); + const landmarks = {}; + for (const fingerIdx of Finger.all) { + landmarks[Finger.getName(fingerIdx)] = { + curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]), + direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]) + }; + } + return landmarks; +} +function match(keypoints) { + const poses = []; + if (!keypoints || keypoints.length === 0) + return poses; + const estimatorRes = estimate(keypoints); + for (const gesture2 of fingergesture_default) { + const confidence = gesture2.matchAgainst(estimatorRes.curls, estimatorRes.directions); + if (confidence >= minConfidence) + poses.push({ name: gesture2.name, confidence }); + } + return poses; +} + +// src/gesture/gesture.ts +var body2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const leftWrist = res[i].keypoints.find((a) => a.part === "leftWrist"); + const rightWrist = res[i].keypoints.find((a) => a.part === "rightWrist"); + const nose = res[i].keypoints.find((a) => a.part === "nose"); + if (nose && leftWrist && rightWrist && leftWrist.position[1] < nose.position[1] && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "i give up" }); + else if (nose && leftWrist && leftWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise left hand" }); + else if (nose && rightWrist && rightWrist.position[1] < nose.position[1]) + gestures.push({ body: i, gesture: "raise right hand" }); + const leftShoulder = res[i].keypoints.find((a) => a.part === "leftShoulder"); + const rightShoulder = res[i].keypoints.find((a) => a.part === "rightShoulder"); + if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) { + gestures.push({ body: i, gesture: `leaning ${leftShoulder.position[1] > rightShoulder.position[1] ? "left" : "right"}` }); + } + } + return gestures; +}; +var face2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (res[i].mesh && res[i].mesh.length > 450) { + const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0); + const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0]; + if (Math.abs(zDiff / xDiff) <= 0.15) + gestures.push({ face: i, gesture: "facing center" }); + else + gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? "left" : "right"}` }); + const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); + if (openLeft < 0.2) + gestures.push({ face: i, gesture: "blink left eye" }); + const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); + if (openRight < 0.2) + gestures.push({ face: i, gesture: "blink right eye" }); + const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1])); + if (mouthOpen > 10) + gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` }); + const chinDepth = res[i].mesh[152][2] || 0; + if (Math.abs(chinDepth) > 10) + gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? "up" : "down"}` }); + } + } + return gestures; +}; +var iris2 = (res) => { + var _a, _b, _c, _d; + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[0]) || !((_d = (_c = res[i].annotations) == null ? void 0 : _c.rightEyeIris) == null ? void 0 : _d[0])) + continue; + const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; + const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; + const areaLeft = Math.abs(sizeXLeft * sizeYLeft); + const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0]; + const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1]; + const areaRight = Math.abs(sizeXRight * sizeYRight); + let center = false; + const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight); + if (difference < 0.25) { + center = true; + gestures.push({ iris: i, gesture: "facing center" }); + } + const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2]; + const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2]; + if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) + center = false; + if (leftIrisCenterX > rightIrisCenterX) { + if (leftIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (rightIrisCenterX > 0.05) + gestures.push({ iris: i, gesture: "looking left" }); + } + const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3]; + const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3]; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + center = false; + if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) + gestures.push({ iris: i, gesture: "looking down" }); + if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) + gestures.push({ iris: i, gesture: "looking up" }); + if (center) + gestures.push({ iris: i, gesture: "looking center" }); + } + return gestures; +}; +var hand2 = (res) => { + if (!res) + return []; + const gestures = []; + for (let i = 0; i < res.length; i++) { + const fingers = []; + if (res[i].annotations) { + for (const [finger, pos] of Object.entries(res[i].annotations)) { + if (finger !== "palmBase" && Array.isArray(pos) && pos[0]) + fingers.push({ name: finger.toLowerCase(), position: pos[0] }); + } + } + if (fingers && fingers.length > 0) { + const closest = fingers.reduce((best, a) => (best.position[2] || 0) < (a.position[2] || 0) ? best : a); + gestures.push({ hand: i, gesture: `${closest.name} forward` }); + const highest = fingers.reduce((best, a) => best.position[1] < a.position[1] ? best : a); + gestures.push({ hand: i, gesture: `${highest.name} up` }); + } + if (res[i].keypoints) { + const poses = match(res[i].keypoints); + for (const pose of poses) + gestures.push({ hand: i, gesture: pose.name }); + } + } + return gestures; +}; + +// src/hand/handposedetector.ts +var tf27 = __toESM(require_tfjs_esm()); + +// src/hand/handposeutil.ts +var tf26 = __toESM(require_tfjs_esm()); +function getBoxSize2(box) { + return [ + Math.abs(box.endPoint[0] - box.startPoint[0]), + Math.abs(box.endPoint[1] - box.startPoint[1]) + ]; +} +function getBoxCenter2(box) { + return [ + box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, + box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2 + ]; +} +function cutBoxFromImageAndResize(box, image28, cropSize) { + const h = image28.shape[1]; + const w = image28.shape[2]; + const boxes = [[ + box.startPoint[1] / h, + box.startPoint[0] / w, + box.endPoint[1] / h, + box.endPoint[0] / w + ]]; + return tf26.image.cropAndResize(image28, boxes, [0], cropSize); +} +function scaleBoxCoordinates2(box, factor) { + const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; + const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]]; + const palmLandmarks = box.palmLandmarks.map((coord) => { + const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]]; + return scaledCoord; + }); + return { startPoint, endPoint, palmLandmarks, confidence: box.confidence }; +} +function enlargeBox2(box, factor = 1.5) { + const center = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const newHalfSize = [factor * size2[0] / 2, factor * size2[1] / 2]; + const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]]; + const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function squarifyBox2(box) { + const centers = getBoxCenter2(box); + const size2 = getBoxSize2(box); + const maxEdge = Math.max(...size2); + const halfSize = maxEdge / 2; + const startPoint = [centers[0] - halfSize, centers[1] - halfSize]; + const endPoint = [centers[0] + halfSize, centers[1] + halfSize]; + return { startPoint, endPoint, palmLandmarks: box.palmLandmarks }; +} +function normalizeRadians2(angle) { + return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +} +function computeRotation2(point1, point2) { + const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); + return normalizeRadians2(radians); +} +var buildTranslationMatrix2 = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]]; +function dot2(v1, v2) { + let product = 0; + for (let i = 0; i < v1.length; i++) { + product += v1[i] * v2[i]; + } + return product; +} +function getColumnFrom2DArr2(arr, columnIndex) { + const column = []; + for (let i = 0; i < arr.length; i++) { + column.push(arr[i][columnIndex]); + } + return column; +} +function multiplyTransformMatrices2(mat1, mat2) { + const product = []; + const size2 = mat1.length; + for (let row = 0; row < size2; row++) { + product.push([]); + for (let col = 0; col < size2; col++) { + product[row].push(dot2(mat1[row], getColumnFrom2DArr2(mat2, col))); + } + } + return product; +} +function buildRotationMatrix2(rotation, center) { + const cosA = Math.cos(rotation); + const sinA = Math.sin(rotation); + const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]]; + const translationMatrix = buildTranslationMatrix2(center[0], center[1]); + const translationTimesRotation = multiplyTransformMatrices2(translationMatrix, rotationMatrix); + const negativeTranslationMatrix = buildTranslationMatrix2(-center[0], -center[1]); + return multiplyTransformMatrices2(translationTimesRotation, negativeTranslationMatrix); +} +function invertTransformMatrix2(matrix) { + const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]]; + const translationComponent = [matrix[0][2], matrix[1][2]]; + const invertedTranslation = [ + -dot2(rotationComponent[0], translationComponent), + -dot2(rotationComponent[1], translationComponent) + ]; + return [ + rotationComponent[0].concat(invertedTranslation[0]), + rotationComponent[1].concat(invertedTranslation[1]), + [0, 0, 1] + ]; +} +function rotatePoint2(homogeneousCoordinate, rotationMatrix) { + return [ + dot2(homogeneousCoordinate, rotationMatrix[0]), + dot2(homogeneousCoordinate, rotationMatrix[1]) + ]; +} + +// src/hand/handposeanchors.ts +var anchors2 = [ + { x: 0.015625, y: 0.015625 }, + { x: 0.015625, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.046875, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.078125, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.109375, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.140625, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.171875, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.203125, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.234375, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.265625, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.296875, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.328125, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.359375, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.390625, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.421875, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.453125, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.484375, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.515625, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.546875, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.578125, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.609375, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.640625, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.671875, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.703125, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.734375, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.765625, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.796875, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.828125, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.859375, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.890625, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.921875, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.953125, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.984375, y: 0.015625 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.015625, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.046875, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.078125, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.109375, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.140625, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.171875, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.203125, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.234375, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.265625, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.296875, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.328125, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.359375, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.390625, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.421875, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.453125, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.484375, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.515625, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.546875, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.578125, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.609375, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.640625, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.671875, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.703125, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.734375, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.765625, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.796875, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.828125, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.859375, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.890625, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.921875, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.953125, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.984375, y: 0.046875 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.015625, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.046875, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.078125, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.109375, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.140625, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.171875, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.203125, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.234375, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.265625, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.296875, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.328125, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.359375, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.390625, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.421875, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.453125, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.484375, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.515625, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.546875, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.578125, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.609375, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.640625, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.671875, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.703125, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.734375, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.765625, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.796875, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.828125, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.859375, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.890625, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.921875, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.953125, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.984375, y: 0.078125 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.015625, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.046875, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.078125, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.109375, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.140625, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.171875, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.203125, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.234375, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.265625, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.296875, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.328125, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.359375, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.390625, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.421875, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.453125, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.484375, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.515625, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.546875, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.578125, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.609375, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.640625, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.671875, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.703125, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.734375, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.765625, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.796875, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.828125, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.859375, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.890625, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.921875, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.953125, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.984375, y: 0.109375 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.015625, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.046875, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.078125, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.109375, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.140625, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.171875, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.203125, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.234375, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.265625, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.296875, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.328125, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.359375, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.390625, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.421875, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.453125, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.484375, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.515625, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.546875, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.578125, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.609375, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.640625, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.671875, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.703125, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.734375, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.765625, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.796875, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.828125, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.859375, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.890625, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.921875, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.953125, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.984375, y: 0.140625 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.015625, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.046875, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.078125, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.109375, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.140625, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.171875, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.203125, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.234375, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.265625, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.296875, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.328125, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.359375, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.390625, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.421875, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.453125, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.484375, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.515625, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.546875, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.578125, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.609375, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.640625, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.671875, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.703125, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.734375, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.765625, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.796875, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.828125, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.859375, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.890625, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.921875, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.953125, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.984375, y: 0.171875 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.015625, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.046875, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.078125, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.109375, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.140625, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.171875, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.203125, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.234375, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.265625, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.296875, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.328125, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.359375, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.390625, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.421875, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.453125, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.484375, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.515625, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.546875, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.578125, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.609375, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.640625, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.671875, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.703125, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.734375, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.765625, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.796875, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.828125, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.859375, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.890625, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.921875, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.953125, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.984375, y: 0.203125 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.015625, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.046875, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.078125, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.109375, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.140625, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.171875, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.203125, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.234375, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.265625, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.296875, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.328125, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.359375, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.390625, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.421875, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.453125, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.484375, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.515625, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.546875, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.578125, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.609375, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.640625, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.671875, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.703125, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.734375, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.765625, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.796875, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.828125, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.859375, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.890625, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.921875, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.953125, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.984375, y: 0.234375 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.015625, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.046875, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.078125, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.109375, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.140625, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.171875, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.203125, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.234375, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.265625, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.296875, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.328125, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.359375, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.390625, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.421875, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.453125, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.484375, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.515625, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.546875, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.578125, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.609375, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.640625, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.671875, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.703125, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.734375, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.765625, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.796875, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.828125, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.859375, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.890625, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.921875, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.953125, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.984375, y: 0.265625 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.015625, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.046875, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.078125, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.109375, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.140625, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.171875, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.203125, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.234375, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.265625, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.296875, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.328125, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.359375, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.390625, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.421875, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.453125, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.484375, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.515625, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.546875, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.578125, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.609375, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.640625, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.671875, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.703125, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.734375, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.765625, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.796875, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.828125, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.859375, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.890625, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.921875, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.953125, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.984375, y: 0.296875 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.015625, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.046875, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.078125, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.109375, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.140625, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.171875, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.203125, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.234375, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.265625, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.296875, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.328125, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.359375, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.390625, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.421875, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.453125, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.484375, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.515625, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.546875, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.578125, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.609375, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.640625, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.671875, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.703125, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.734375, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.765625, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.796875, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.828125, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.859375, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.890625, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.921875, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.953125, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.984375, y: 0.328125 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.015625, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.046875, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.078125, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.109375, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.140625, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.171875, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.203125, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.234375, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.265625, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.296875, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.328125, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.359375, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.390625, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.421875, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.453125, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.484375, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.515625, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.546875, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.578125, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.609375, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.640625, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.671875, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.703125, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.734375, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.765625, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.796875, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.828125, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.859375, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.890625, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.921875, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.953125, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.984375, y: 0.359375 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.015625, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.046875, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.078125, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.109375, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.140625, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.171875, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.203125, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.234375, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.265625, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.296875, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.328125, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.359375, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.390625, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.421875, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.453125, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.484375, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.515625, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.546875, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.578125, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.609375, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.640625, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.671875, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.703125, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.734375, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.765625, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.796875, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.828125, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.859375, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.890625, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.921875, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.953125, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.984375, y: 0.390625 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.015625, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.046875, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.078125, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.109375, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.140625, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.171875, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.203125, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.234375, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.265625, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.296875, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.328125, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.359375, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.390625, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.421875, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.453125, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.484375, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.515625, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.546875, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.578125, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.609375, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.640625, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.671875, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.703125, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.734375, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.765625, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.796875, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.828125, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.859375, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.890625, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.921875, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.953125, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.984375, y: 0.421875 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.015625, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.046875, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.078125, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.109375, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.140625, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.171875, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.203125, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.234375, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.265625, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.296875, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.328125, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.359375, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.390625, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.421875, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.453125, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.484375, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.515625, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.546875, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.578125, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.609375, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.640625, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.671875, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.703125, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.734375, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.765625, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.796875, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.828125, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.859375, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.890625, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.921875, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.953125, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.984375, y: 0.453125 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.015625, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.046875, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.078125, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.109375, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.140625, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.171875, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.203125, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.234375, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.265625, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.296875, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.328125, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.359375, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.390625, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.421875, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.453125, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.484375, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.515625, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.546875, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.578125, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.609375, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.640625, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.671875, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.703125, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.734375, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.765625, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.796875, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.828125, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.859375, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.890625, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.921875, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.953125, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.984375, y: 0.484375 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.015625, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.046875, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.078125, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.109375, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.140625, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.171875, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.203125, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.234375, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.265625, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.296875, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.328125, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.359375, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.390625, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.421875, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.453125, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.484375, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.515625, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.546875, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.578125, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.609375, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.640625, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.671875, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.703125, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.734375, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.765625, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.796875, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.828125, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.859375, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.890625, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.921875, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.953125, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.984375, y: 0.515625 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.015625, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.046875, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.078125, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.109375, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.140625, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.171875, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.203125, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.234375, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.265625, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.296875, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.328125, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.359375, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.390625, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.421875, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.453125, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.484375, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.515625, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.546875, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.578125, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.609375, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.640625, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.671875, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.703125, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.734375, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.765625, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.796875, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.828125, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.859375, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.890625, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.921875, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.953125, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.984375, y: 0.546875 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.015625, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.046875, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.078125, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.109375, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.140625, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.171875, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.203125, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.234375, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.265625, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.296875, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.328125, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.359375, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.390625, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.421875, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.453125, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.484375, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.515625, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.546875, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.578125, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.609375, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.640625, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.671875, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.703125, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.734375, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.765625, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.796875, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.828125, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.859375, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.890625, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.921875, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.953125, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.984375, y: 0.578125 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.015625, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.046875, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.078125, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.109375, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.140625, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.171875, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.203125, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.234375, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.265625, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.296875, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.328125, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.359375, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.390625, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.421875, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.453125, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.484375, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.515625, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.546875, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.578125, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.609375, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.640625, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.671875, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.703125, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.734375, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.765625, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.796875, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.828125, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.859375, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.890625, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.921875, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.953125, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.984375, y: 0.609375 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.015625, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.046875, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.078125, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.109375, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.140625, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.171875, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.203125, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.234375, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.265625, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.296875, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.328125, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.359375, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.390625, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.421875, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.453125, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.484375, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.515625, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.546875, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.578125, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.609375, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.640625, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.671875, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.703125, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.734375, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.765625, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.796875, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.828125, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.859375, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.890625, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.921875, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.953125, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.984375, y: 0.640625 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.015625, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.046875, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.078125, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.109375, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.140625, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.171875, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.203125, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.234375, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.265625, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.296875, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.328125, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.359375, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.390625, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.421875, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.453125, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.484375, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.515625, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.546875, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.578125, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.609375, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.640625, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.671875, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.703125, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.734375, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.765625, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.796875, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.828125, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.859375, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.890625, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.921875, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.953125, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.984375, y: 0.671875 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.015625, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.046875, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.078125, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.109375, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.140625, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.171875, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.203125, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.234375, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.265625, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.296875, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.328125, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.359375, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.390625, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.421875, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.453125, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.484375, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.515625, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.546875, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.578125, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.609375, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.640625, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.671875, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.703125, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.734375, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.765625, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.796875, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.828125, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.859375, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.890625, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.921875, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.953125, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.984375, y: 0.703125 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.015625, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.046875, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.078125, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.109375, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.140625, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.171875, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.203125, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.234375, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.265625, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.296875, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.328125, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.359375, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.390625, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.421875, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.453125, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.484375, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.515625, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.546875, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.578125, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.609375, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.640625, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.671875, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.703125, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.734375, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.765625, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.796875, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.828125, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.859375, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.890625, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.921875, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.953125, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.984375, y: 0.734375 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.015625, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.046875, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.078125, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.109375, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.140625, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.171875, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.203125, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.234375, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.265625, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.296875, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.328125, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.359375, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.390625, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.421875, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.453125, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.484375, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.515625, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.546875, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.578125, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.609375, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.640625, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.671875, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.703125, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.734375, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.765625, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.796875, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.828125, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.859375, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.890625, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.921875, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.953125, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.984375, y: 0.765625 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.015625, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.046875, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.078125, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.109375, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.140625, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.171875, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.203125, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.234375, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.265625, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.296875, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.328125, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.359375, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.390625, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.421875, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.453125, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.484375, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.515625, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.546875, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.578125, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.609375, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.640625, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.671875, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.703125, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.734375, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.765625, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.796875, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.828125, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.859375, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.890625, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.921875, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.953125, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.984375, y: 0.796875 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.015625, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.046875, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.078125, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.109375, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.140625, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.171875, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.203125, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.234375, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.265625, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.296875, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.328125, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.359375, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.390625, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.421875, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.453125, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.484375, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.515625, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.546875, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.578125, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.609375, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.640625, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.671875, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.703125, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.734375, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.765625, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.796875, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.828125, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.859375, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.890625, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.921875, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.953125, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.984375, y: 0.828125 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.015625, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.046875, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.078125, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.109375, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.140625, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.171875, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.203125, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.234375, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.265625, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.296875, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.328125, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.359375, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.390625, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.421875, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.453125, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.484375, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.515625, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.546875, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.578125, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.609375, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.640625, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.671875, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.703125, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.734375, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.765625, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.796875, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.828125, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.859375, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.890625, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.921875, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.953125, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.984375, y: 0.859375 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.015625, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.046875, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.078125, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.109375, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.140625, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.171875, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.203125, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.234375, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.265625, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.296875, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.328125, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.359375, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.390625, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.421875, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.453125, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.484375, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.515625, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.546875, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.578125, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.609375, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.640625, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.671875, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.703125, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.734375, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.765625, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.796875, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.828125, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.859375, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.890625, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.921875, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.953125, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.984375, y: 0.890625 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.015625, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.046875, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.078125, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.109375, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.140625, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.171875, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.203125, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.234375, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.265625, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.296875, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.328125, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.359375, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.390625, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.421875, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.453125, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.484375, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.515625, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.546875, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.578125, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.609375, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.640625, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.671875, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.703125, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.734375, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.765625, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.796875, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.828125, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.859375, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.890625, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.921875, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.953125, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.984375, y: 0.921875 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.015625, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.046875, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.078125, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.109375, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.140625, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.171875, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.203125, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.234375, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.265625, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.296875, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.328125, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.359375, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.390625, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.421875, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.453125, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.484375, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.515625, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.546875, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.578125, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.609375, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.640625, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.671875, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.703125, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.734375, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.765625, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.796875, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.828125, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.859375, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.890625, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.921875, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.953125, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.984375, y: 0.953125 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.015625, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.046875, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.078125, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.109375, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.140625, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.171875, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.203125, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.234375, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.265625, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.296875, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.328125, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.359375, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.390625, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.421875, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.453125, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.484375, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.515625, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.546875, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.578125, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.609375, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.640625, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.671875, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.703125, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.734375, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.765625, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.796875, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.828125, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.859375, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.890625, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.921875, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.953125, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.984375, y: 0.984375 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.03125, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.09375, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.15625, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.21875, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.28125, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.34375, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.40625, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.46875, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.53125, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.59375, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.65625, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.71875, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.78125, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.84375, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.90625, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.96875, y: 0.03125 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.03125, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.09375, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.15625, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.21875, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.28125, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.34375, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.40625, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.46875, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.53125, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.59375, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.65625, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.71875, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.78125, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.84375, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.90625, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.96875, y: 0.09375 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.03125, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.09375, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.15625, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.21875, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.28125, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.34375, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.40625, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.46875, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.53125, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.59375, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.65625, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.71875, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.78125, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.84375, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.90625, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.96875, y: 0.15625 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.03125, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.09375, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.15625, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.21875, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.28125, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.34375, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.40625, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.46875, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.53125, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.59375, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.65625, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.71875, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.78125, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.84375, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.90625, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.96875, y: 0.21875 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.03125, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.09375, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.15625, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.21875, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.28125, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.34375, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.40625, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.46875, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.53125, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.59375, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.65625, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.71875, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.78125, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.84375, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.90625, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.96875, y: 0.28125 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.03125, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.09375, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.15625, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.21875, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.28125, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.34375, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.40625, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.46875, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.53125, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.59375, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.65625, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.71875, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.78125, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.84375, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.90625, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.96875, y: 0.34375 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.03125, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.09375, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.15625, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.21875, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.28125, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.34375, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.40625, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.46875, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.53125, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.59375, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.65625, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.71875, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.78125, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.84375, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.90625, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.96875, y: 0.40625 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.03125, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.09375, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.15625, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.21875, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.28125, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.34375, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.40625, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.46875, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.53125, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.59375, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.65625, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.71875, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.78125, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.84375, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.90625, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.96875, y: 0.46875 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.03125, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.09375, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.15625, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.21875, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.28125, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.34375, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.40625, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.46875, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.53125, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.59375, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.65625, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.71875, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.78125, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.84375, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.90625, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.96875, y: 0.53125 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.03125, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.09375, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.15625, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.21875, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.28125, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.34375, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.40625, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.46875, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.53125, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.59375, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.65625, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.71875, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.78125, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.84375, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.90625, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.96875, y: 0.59375 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.03125, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.09375, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.15625, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.21875, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.28125, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.34375, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.40625, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.46875, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.53125, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.59375, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.65625, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.71875, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.78125, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.84375, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.90625, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.96875, y: 0.65625 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.03125, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.09375, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.15625, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.21875, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.28125, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.34375, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.40625, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.46875, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.53125, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.59375, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.65625, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.71875, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.78125, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.84375, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.90625, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.96875, y: 0.71875 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.03125, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.09375, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.15625, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.21875, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.28125, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.34375, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.40625, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.46875, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.53125, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.59375, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.65625, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.71875, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.78125, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.84375, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.90625, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.96875, y: 0.78125 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.03125, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.09375, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.15625, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.21875, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.28125, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.34375, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.40625, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.46875, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.53125, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.59375, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.65625, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.71875, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.78125, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.84375, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.90625, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.96875, y: 0.84375 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.03125, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.09375, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.15625, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.21875, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.28125, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.34375, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.40625, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.46875, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.53125, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.59375, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.65625, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.71875, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.78125, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.84375, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.90625, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.96875, y: 0.90625 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.03125, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.09375, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.15625, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.21875, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.28125, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.34375, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.40625, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.46875, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.53125, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.59375, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.65625, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.71875, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.78125, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.84375, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.90625, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.96875, y: 0.96875 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.0625, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.1875, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.3125, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.4375, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.5625, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.6875, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.8125, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.9375, y: 0.0625 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.0625, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.1875, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.3125, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.4375, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.5625, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.6875, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.8125, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.9375, y: 0.1875 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.0625, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.1875, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.3125, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.4375, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.5625, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.6875, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.8125, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.9375, y: 0.3125 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.0625, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.1875, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.3125, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.4375, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.5625, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.6875, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.8125, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.9375, y: 0.4375 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.0625, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.1875, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.3125, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.4375, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.5625, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.6875, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.8125, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.9375, y: 0.5625 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.0625, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.1875, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.3125, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.4375, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.5625, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.6875, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.8125, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.9375, y: 0.6875 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.0625, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.1875, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.3125, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.4375, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.5625, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.6875, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.8125, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.9375, y: 0.8125 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.0625, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.1875, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.3125, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.4375, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.5625, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.6875, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.8125, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 }, + { x: 0.9375, y: 0.9375 } +]; + +// src/hand/handposedetector.ts +var HandDetector = class { + constructor(model23) { + __publicField(this, "model"); + __publicField(this, "anchors"); + __publicField(this, "anchorsTensor"); + __publicField(this, "inputSize"); + __publicField(this, "inputSizeTensor"); + __publicField(this, "doubleInputSizeTensor"); + var _a, _b, _c, _d; + this.model = model23; + this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); + this.anchorsTensor = tf27.tensor2d(this.anchors); + this.inputSize = ((_d = (_c = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c.shape) == null ? void 0 : _d[2]) || 0; + this.inputSizeTensor = tf27.tensor1d([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = tf27.tensor1d([this.inputSize * 2, this.inputSize * 2]); + } + normalizeBoxes(boxes) { + const t2 = {}; + t2.boxOffsets = tf27.slice(boxes, [0, 0], [-1, 2]); + t2.boxSizes = tf27.slice(boxes, [0, 2], [-1, 2]); + t2.div = tf27.div(t2.boxOffsets, this.inputSizeTensor); + t2.boxCenterPoints = tf27.add(t2.div, this.anchorsTensor); + t2.halfBoxSizes = tf27.div(t2.boxSizes, this.doubleInputSizeTensor); + t2.sub = tf27.sub(t2.boxCenterPoints, t2.halfBoxSizes); + t2.startPoints = tf27.mul(t2.sub, this.inputSizeTensor); + t2.add = tf27.add(t2.boxCenterPoints, t2.halfBoxSizes); + t2.endPoints = tf27.mul(t2.add, this.inputSizeTensor); + const res = tf27.concat2d([t2.startPoints, t2.endPoints], 1); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + normalizeLandmarks(rawPalmLandmarks, index2) { + const t2 = {}; + t2.reshape = tf27.reshape(rawPalmLandmarks, [-1, 7, 2]); + t2.div = tf27.div(t2.reshape, this.inputSizeTensor); + t2.landmarks = tf27.add(t2.div, this.anchors[index2] ? this.anchors[index2] : 0); + const res = tf27.mul(t2.landmarks, this.inputSizeTensor); + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return res; + } + async predict(input, config3) { + var _a; + const t2 = {}; + t2.resize = tf27.image.resizeBilinear(input, [this.inputSize, this.inputSize]); + t2.div = tf27.div(t2.resize, constants.tf127); + t2.image = tf27.sub(t2.div, constants.tf1); + t2.batched = this.model.execute(t2.image); + t2.predictions = tf27.squeeze(t2.batched); + t2.slice = tf27.slice(t2.predictions, [0, 0], [-1, 1]); + t2.sigmoid = tf27.sigmoid(t2.slice); + t2.scores = tf27.squeeze(t2.sigmoid); + const scores = await t2.scores.data(); + t2.boxes = tf27.slice(t2.predictions, [0, 1], [-1, 4]); + t2.norm = this.normalizeBoxes(t2.boxes); + t2.nms = await tf27.image.nonMaxSuppressionAsync(t2.norm, t2.scores, 3 * (((_a = config3.hand) == null ? void 0 : _a.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + const nms = await t2.nms.array(); + const hands = []; + for (const index2 of nms) { + const p = {}; + p.box = tf27.slice(t2.norm, [index2, 0], [1, -1]); + p.slice = tf27.slice(t2.predictions, [index2, 5], [1, 14]); + p.norm = this.normalizeLandmarks(p.slice, index2); + p.palmLandmarks = tf27.reshape(p.norm, [-1, 2]); + const box = await p.box.data(); + const startPoint = box.slice(0, 2); + const endPoint = box.slice(2, 4); + const palmLandmarks = await p.palmLandmarks.array(); + const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; + const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); + hands.push(scaled); + Object.keys(p).forEach((tensor6) => tf27.dispose(p[tensor6])); + } + Object.keys(t2).forEach((tensor6) => tf27.dispose(t2[tensor6])); + return hands; + } +}; + +// src/hand/handposepipeline.ts +var tf28 = __toESM(require_tfjs_esm()); +var palmBoxEnlargeFactor = 5; +var handBoxEnlargeFactor = 1.65; +var palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2]; +var palmLandmarksPalmBase = 0; +var palmLandmarksMiddleFingerBase = 2; +var lastTime13 = 0; +var HandPipeline = class { + constructor(handDetector, handPoseModel2) { + __publicField(this, "handDetector"); + __publicField(this, "handPoseModel"); + __publicField(this, "inputSize"); + __publicField(this, "storedBoxes"); + __publicField(this, "skipped"); + __publicField(this, "detectedHands"); + var _a, _b, _c; + this.handDetector = handDetector; + this.handPoseModel = handPoseModel2; + this.inputSize = ((_c = (_b = (_a = this.handPoseModel) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[2]) || 0; + this.storedBoxes = []; + this.skipped = Number.MAX_SAFE_INTEGER; + this.detectedHands = 0; + } + calculateLandmarksBoundingBox(landmarks) { + const xs = landmarks.map((d) => d[0]); + const ys = landmarks.map((d) => d[1]); + const startPoint = [Math.min(...xs), Math.min(...ys)]; + const endPoint = [Math.max(...xs), Math.max(...ys)]; + return { startPoint, endPoint }; + } + getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) { + const rotatedPalmLandmarks = palmLandmarks.map((coord) => rotatePoint2([...coord, 1], rotationMatrix)); + const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks); + return enlargeBox2(squarifyBox2(boxAroundPalm), palmBoxEnlargeFactor); + } + getBoxForHandLandmarks(landmarks) { + const boundingBox = this.calculateLandmarksBoundingBox(landmarks); + const boxAroundHand = enlargeBox2(squarifyBox2(boundingBox), handBoxEnlargeFactor); + boxAroundHand.palmLandmarks = []; + for (let i = 0; i < palmLandmarkIds.length; i++) { + boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2)); + } + return boxAroundHand; + } + transformRawCoords(rawCoords, box2, angle, rotationMatrix) { + const boxSize = getBoxSize2(box2); + const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2]; + const coordsScaled = rawCoords.map((coord) => [ + scaleFactor[0] * (coord[0] - this.inputSize / 2), + scaleFactor[1] * (coord[1] - this.inputSize / 2), + scaleFactor[2] * coord[2] + ]); + const coordsRotationMatrix = buildRotationMatrix2(angle, [0, 0]); + const coordsRotated = coordsScaled.map((coord) => { + const rotated = rotatePoint2(coord, coordsRotationMatrix); + return [...rotated, coord[2]]; + }); + const inverseRotationMatrix = invertTransformMatrix2(rotationMatrix); + const boxCenter = [...getBoxCenter2(box2), 1]; + const originalBoxCenter = [ + dot2(boxCenter, inverseRotationMatrix[0]), + dot2(boxCenter, inverseRotationMatrix[1]) + ]; + return coordsRotated.map((coord) => [ + Math.trunc(coord[0] + originalBoxCenter[0]), + Math.trunc(coord[1] + originalBoxCenter[1]), + Math.trunc(coord[2]) + ]); + } + async estimateHands(image28, config3) { + let useFreshBox = false; + let boxes; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime13; + const skipFrame = this.skipped < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + if (config3.skipAllowed) + this.skipped++; + if (boxes && boxes.length > 0 && (boxes.length !== this.detectedHands && this.detectedHands !== config3.hand.maxDetected || !config3.hand.landmarks)) { + this.detectedHands = 0; + this.storedBoxes = [...boxes]; + if (this.storedBoxes.length > 0) + useFreshBox = true; + } + const hands = []; + for (let i = 0; i < this.storedBoxes.length; i++) { + const currentBox = this.storedBoxes[i]; + if (!currentBox) + continue; + if (config3.hand.landmarks) { + const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; + const palmCenter = getBoxCenter2(currentBox); + const palmCenterNormalized = [palmCenter[0] / image28.shape[2], palmCenter[1] / image28.shape[1]]; + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? tf28.image.rotateWithOffset(image28, angle, 0, palmCenterNormalized) : image28.clone(); + const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); + const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; + const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); + const handImage = tf28.div(croppedInput, constants.tf255); + tf28.dispose(croppedInput); + tf28.dispose(rotatedImage); + const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); + lastTime13 = now(); + tf28.dispose(handImage); + const confidence = (await confidenceT.data())[0]; + tf28.dispose(confidenceT); + if (confidence >= config3.hand.minConfidence / 4) { + const keypointsReshaped = tf28.reshape(keypoints, [-1, 3]); + const rawCoords = await keypointsReshaped.array(); + tf28.dispose(keypoints); + tf28.dispose(keypointsReshaped); + const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); + const nextBoundingBox = this.getBoxForHandLandmarks(coords); + this.storedBoxes[i] = { ...nextBoundingBox, confidence }; + const result = { + landmarks: coords, + confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: confidence, + box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint } + }; + hands.push(result); + } else { + this.storedBoxes[i] = null; + } + tf28.dispose(keypoints); + } else { + const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); + const result = { + confidence: currentBox.confidence, + boxConfidence: currentBox.confidence, + fingerConfidence: 0, + box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint }, + landmarks: [] + }; + hands.push(result); + } + } + this.storedBoxes = this.storedBoxes.filter((a) => a !== null); + this.detectedHands = hands.length; + if (hands.length > config3.hand.maxDetected) + hands.length = config3.hand.maxDetected; + return hands; + } +}; + +// src/hand/handpose.ts +var meshAnnotations2 = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + palm: [0] +}; +var handDetectorModel; +var handPoseModel; +var handPipeline; +async function predict14(input, config3) { + const predictions = await handPipeline.estimateHands(input, config3); + if (!predictions) + return []; + const hands = []; + for (let i = 0; i < predictions.length; i++) { + const annotations2 = {}; + if (predictions[i].landmarks) { + for (const key of Object.keys(meshAnnotations2)) { + annotations2[key] = meshAnnotations2[key].map((index2) => predictions[i].landmarks[index2]); + } + } + const keypoints = predictions[i].landmarks; + let box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; + let boxRaw = [0, 0, 0, 0]; + if (keypoints && keypoints.length > 0) { + for (const pt of keypoints) { + if (pt[0] < box[0]) + box[0] = pt[0]; + if (pt[1] < box[1]) + box[1] = pt[1]; + if (pt[0] > box[2]) + box[2] = pt[0]; + if (pt[1] > box[3]) + box[3] = pt[1]; + } + box[2] -= box[0]; + box[3] -= box[1]; + boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)]; + } else { + box = predictions[i].box ? [ + Math.trunc(Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.max(0, predictions[i].box.topLeft[1])), + Math.trunc(Math.min(input.shape[2] || 0, predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])), + Math.trunc(Math.min(input.shape[1] || 0, predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])) + ] : [0, 0, 0, 0]; + boxRaw = [ + predictions[i].box.topLeft[0] / (input.shape[2] || 0), + predictions[i].box.topLeft[1] / (input.shape[1] || 0), + (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0), + (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0) + ]; + } + const landmarks = analyze(keypoints); + hands.push({ + id: i, + score: Math.round(100 * predictions[i].confidence) / 100, + boxScore: Math.round(100 * predictions[i].boxConfidence) / 100, + fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100, + label: "hand", + box, + boxRaw, + keypoints, + annotations: annotations2, + landmarks + }); + } + return hands; +} +async function load15(config3) { + var _a, _b; + if (env.initial) { + handDetectorModel = null; + handPoseModel = null; + } + if (!handDetectorModel || !handPoseModel) { + [handDetectorModel, handPoseModel] = await Promise.all([ + config3.hand.enabled ? loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath) : null, + config3.hand.landmarks ? loadModel((_b = config3.hand.skeleton) == null ? void 0 : _b.modelPath) : null + ]); + } else { + if (config3.debug) + log("cached model:", handDetectorModel["modelUrl"]); + if (config3.debug) + log("cached model:", handPoseModel["modelUrl"]); + } + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) + handPipeline = new HandPipeline(handDetector, handPoseModel); + return [handDetectorModel, handPoseModel]; +} + +// src/hand/handtrack.ts +var tf29 = __toESM(require_tfjs_esm()); +var models2 = [null, null]; +var modelOutputNodes = ["StatefulPartitionedCall/Postprocessor/Slice", "StatefulPartitionedCall/Postprocessor/ExpandDims_1"]; +var inputSize7 = [[0, 0], [0, 0]]; +var classes = ["hand", "fist", "pinch", "point", "face", "tip", "pinchtip"]; +var faceIndex = 4; +var boxExpandFact = 1.6; +var maxDetectorResolution = 512; +var detectorExpandFact = 1.4; +var skipped13 = Number.MAX_SAFE_INTEGER; +var lastTime14 = 0; +var outputSize = [0, 0]; +var cache4 = { + boxes: [], + hands: [] +}; +var fingerMap = { + thumb: [1, 2, 3, 4], + index: [5, 6, 7, 8], + middle: [9, 10, 11, 12], + ring: [13, 14, 15, 16], + pinky: [17, 18, 19, 20], + base: [0], + palm: [0, 17, 13, 9, 5, 1, 0] +}; +async function loadDetect2(config3) { + var _a; + if (env.initial) + models2[0] = null; + if (!models2[0]) { + fakeOps(["tensorlistreserve", "enter", "tensorlistfromtensor", "merge", "loopcond", "switch", "exit", "tensorliststack", "nextiteration", "tensorlistsetitem", "tensorlistgetitem", "reciprocal", "shape", "split", "where"], config3); + models2[0] = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + const inputs = models2[0]["executor"] ? Object.values(models2[0].modelSignature["inputs"]) : void 0; + inputSize7[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[0]["modelUrl"]); + return models2[0]; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) + models2[1] = null; + if (!models2[1]) { + models2[1] = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + const inputs = models2[1]["executor"] ? Object.values(models2[1].modelSignature["inputs"]) : void 0; + inputSize7[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; + inputSize7[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; + } else if (config3.debug) + log("cached model:", models2[1]["modelUrl"]); + return models2[1]; +} +async function detectHands(input, config3) { + const hands = []; + if (!input || !models2[0]) + return hands; + const t2 = {}; + const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); + const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); + const width = Math.round(height * ratio2 / 8) * 8; + t2.resize = tf29.image.resizeBilinear(input, [height, width]); + t2.cast = tf29.cast(t2.resize, "int32"); + [t2.rawScores, t2.rawBoxes] = await models2[0].executeAsync(t2.cast, modelOutputNodes); + t2.boxes = tf29.squeeze(t2.rawBoxes, [0, 2]); + t2.scores = tf29.squeeze(t2.rawScores, [0]); + const classScores = tf29.unstack(t2.scores, 1); + tf29.dispose(classScores[faceIndex]); + classScores.splice(faceIndex, 1); + t2.filtered = tf29.stack(classScores, 1); + tf29.dispose(classScores); + t2.max = tf29.max(t2.filtered, 1); + t2.argmax = tf29.argMax(t2.filtered, 1); + let id = 0; + t2.nms = await tf29.image.nonMaxSuppressionAsync(t2.boxes, t2.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + const nms = await t2.nms.data(); + const scores = await t2.max.data(); + const classNum = await t2.argmax.data(); + for (const nmsIndex of Array.from(nms)) { + const boxSlice = tf29.slice(t2.boxes, nmsIndex, 1); + const boxYX = await boxSlice.data(); + tf29.dispose(boxSlice); + const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; + const boxRaw = scale(boxData, detectorExpandFact); + const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; + const score = scores[nmsIndex]; + const label = classes[classNum[nmsIndex]]; + const hand3 = { id: id++, score, box: boxFull, boxRaw, label }; + hands.push(hand3); + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + hands.sort((a, b) => b.score - a.score); + if (hands.length > (config3.hand.maxDetected || 1)) + hands.length = config3.hand.maxDetected || 1; + return hands; +} +async function detectFingers(input, h, config3) { + const hand3 = { + id: h.id, + score: Math.round(100 * h.score) / 100, + boxScore: Math.round(100 * h.score) / 100, + fingerScore: 0, + box: h.box, + boxRaw: h.boxRaw, + label: h.label, + keypoints: [], + landmarks: {}, + annotations: {} + }; + if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { + const t2 = {}; + const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; + t2.crop = tf29.image.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t2.div = tf29.div(t2.crop, constants.tf255); + [t2.score, t2.keypoints] = models2[1].execute(t2.div, ["Identity_1", "Identity"]); + const rawScore = (await t2.score.data())[0]; + const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; + if (score >= (config3.hand.minConfidence || 0)) { + hand3.fingerScore = score; + t2.reshaped = tf29.reshape(t2.keypoints, [-1, 3]); + const coordsData = await t2.reshaped.array(); + const coordsRaw = coordsData.map((kpt4) => [kpt4[0] / inputSize7[1][1], kpt4[1] / inputSize7[1][0], kpt4[2] || 0]); + const coordsNorm = coordsRaw.map((kpt4) => [kpt4[0] * h.boxRaw[2], kpt4[1] * h.boxRaw[3], kpt4[2] || 0]); + hand3.keypoints = coordsNorm.map((kpt4) => [outputSize[0] * (kpt4[0] + h.boxRaw[0]), outputSize[1] * (kpt4[1] + h.boxRaw[1]), kpt4[2] || 0]); + hand3.landmarks = analyze(hand3.keypoints); + for (const key of Object.keys(fingerMap)) { + hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); + } + } + Object.keys(t2).forEach((tensor6) => tf29.dispose(t2[tensor6])); + } + return hand3; +} +async function predict15(input, config3) { + var _a, _b; + if (!((_a = models2[0]) == null ? void 0 : _a["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + return []; + outputSize = [input.shape[2] || 0, input.shape[1] || 0]; + skipped13++; + const skipTime = (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrame = skipped13 < (config3.hand.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache4.hands; + } + return new Promise(async (resolve) => { + const skipTimeExtended = 3 * (config3.hand.skipTime || 0) > now() - lastTime14; + const skipFrameExtended = skipped13 < 3 * (config3.hand.skipFrames || 0); + if (config3.skipAllowed && cache4.hands.length === config3.hand.maxDetected) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else if (config3.skipAllowed && skipTimeExtended && skipFrameExtended && cache4.hands.length > 0) { + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + } else { + cache4.boxes = await detectHands(input, config3); + lastTime14 = now(); + cache4.hands = await Promise.all(cache4.boxes.map((handBox) => detectFingers(input, handBox, config3))); + skipped13 = 0; + } + const oldCache = [...cache4.boxes]; + cache4.boxes.length = 0; + if (config3.cacheSensitivity > 0) { + for (let i = 0; i < cache4.hands.length; i++) { + const boxKpt = square(cache4.hands[i].keypoints, outputSize); + if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache4.hands[i].fingerScore && cache4.hands[i].fingerScore > (config3.hand.minConfidence || 0)) { + const boxScale = scale(boxKpt.box, boxExpandFact); + const boxScaleRaw = scale(boxKpt.boxRaw, boxExpandFact); + cache4.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw }); + } + } + } + for (let i = 0; i < cache4.hands.length; i++) { + const bbox = calc(cache4.hands[i].keypoints, outputSize); + cache4.hands[i].box = bbox.box; + cache4.hands[i].boxRaw = bbox.boxRaw; + } + resolve(cache4.hands); + }); +} + +// src/result.ts +var empty = (error = null) => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error }); + +// src/body/movenetcoords.ts +var movenetcoords_exports = {}; +__export(movenetcoords_exports, { + connected: () => connected3, + horizontal: () => horizontal, + kpt: () => kpt3, + relative: () => relative, + vertical: () => vertical +}); +var kpt3 = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + leftLeg: ["leftHip", "leftKnee", "leftAnkle"], + rightLeg: ["rightHip", "rightKnee", "rightAnkle"], + torso: ["leftShoulder", "rightShoulder", "rightHip", "leftHip", "leftShoulder"], + leftArm: ["leftShoulder", "leftElbow", "leftWrist"], + rightArm: ["rightShoulder", "rightElbow", "rightWrist"], + head: [] +}; + +// src/util/interpolate.ts +var bufferedResult = empty(); +var interpolateTime = 0; +function calc2(newResult, config3) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + const t0 = now(); + if (!newResult) + return empty(); + const elapsed = Date.now() - newResult.timestamp; + const bufferedFactor = elapsed < 1e3 ? 8 - Math.log(elapsed + 1) : 1; + if (newResult.canvas) + bufferedResult.canvas = newResult.canvas; + if (newResult.error) + bufferedResult.error = newResult.error; + if (!bufferedResult.body || newResult.body.length !== bufferedResult.body.length) { + bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)); + } else { + for (let i = 0; i < newResult.body.length; i++) { + const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); + const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); + const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { + var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2; + return { + score: newKpt.score, + part: newKpt.part, + position: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2] + ], + positionRaw: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] + ], + distance: [ + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a2[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c2 = newKpt.distance) == null ? void 0 : _c2[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d2[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f2 = newKpt.distance) == null ? void 0 : _f2[1], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g2[2]) || 0) + (((_h2 = newKpt.distance) == null ? void 0 : _h2[2]) || 0)) / bufferedFactor : (_i2 = newKpt.distance) == null ? void 0 : _i2[2] + ] + }; + }); + const annotations2 = {}; + let coords = { connected: {} }; + if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("efficientpose")) + coords = efficientposecoords_exports; + else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + coords = blazeposecoords_exports; + else if ((_c = config3.body.modelPath) == null ? void 0 : _c.includes("movenet")) + coords = movenetcoords_exports; + for (const [name, indexes] of Object.entries(coords.connected)) { + const pt = []; + for (let j = 0; j < indexes.length - 1; j++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[j]); + const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]); + if (pt0 && pt1) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.hand || newResult.hand.length !== bufferedResult.hand.length) { + bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); + } else { + for (let i = 0; i < newResult.hand.length; i++) { + const box = newResult.hand[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.hand[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor); + if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) + bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; + const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints.map((landmark, j) => landmark.map((coord, k) => ((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) : []; + let annotations2 = {}; + if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) { + bufferedResult.hand[i].annotations = newResult.hand[i].annotations; + annotations2 = bufferedResult.hand[i].annotations; + } else if (newResult.hand[i].annotations) { + for (const key of Object.keys(newResult.hand[i].annotations)) { + annotations2[key] = ((_f = (_e = (_d = newResult.hand[i]) == null ? void 0 : _d.annotations) == null ? void 0 : _e[key]) == null ? void 0 : _f[0]) ? newResult.hand[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations2 }; + } + } + if (!bufferedResult.face || newResult.face.length !== bufferedResult.face.length) { + bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)); + } else { + for (let i = 0; i < newResult.face.length; i++) { + const box = newResult.face[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.face[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor); + if (newResult.face[i].rotation) { + const rotation = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } }; + rotation.matrix = (_g = newResult.face[i].rotation) == null ? void 0 : _g.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_i = (_h = bufferedResult.face[i].rotation) == null ? void 0 : _h.angle) == null ? void 0 : _i.roll) || 0) + (((_k = (_j = newResult.face[i].rotation) == null ? void 0 : _j.angle) == null ? void 0 : _k.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_m = (_l = bufferedResult.face[i].rotation) == null ? void 0 : _l.angle) == null ? void 0 : _m.yaw) || 0) + (((_o = (_n = newResult.face[i].rotation) == null ? void 0 : _n.angle) == null ? void 0 : _o.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_q = (_p = bufferedResult.face[i].rotation) == null ? void 0 : _p.angle) == null ? void 0 : _q.pitch) || 0) + (((_s = (_r = newResult.face[i].rotation) == null ? void 0 : _r.angle) == null ? void 0 : _s.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + bearing: ((bufferedFactor - 1) * (((_t = bufferedResult.face[i].rotation) == null ? void 0 : _t.gaze.bearing) || 0) + (((_u = newResult.face[i].rotation) == null ? void 0 : _u.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_v = bufferedResult.face[i].rotation) == null ? void 0 : _v.gaze.strength) || 0) + (((_w = newResult.face[i].rotation) == null ? void 0 : _w.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw }; + } + } + } + if (!bufferedResult.object || newResult.object.length !== bufferedResult.object.length) { + bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)); + } else { + for (let i = 0; i < newResult.object.length; i++) { + const box = newResult.object[i].box.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor); + const boxRaw = newResult.object[i].boxRaw.map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor); + bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; + } + } + if (newResult.persons) { + const newPersons = newResult.persons; + if (!bufferedResult.persons || newPersons.length !== bufferedResult.persons.length) { + bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)); + } else { + for (let i = 0; i < newPersons.length; i++) { + bufferedResult.persons[i].box = newPersons[i].box.map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor); + } + } + } + if (newResult.gesture) + bufferedResult.gesture = newResult.gesture; + bufferedResult.width = newResult.width; + bufferedResult.height = newResult.height; + const t1 = now(); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0); + if (newResult.performance) + bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; + return bufferedResult; +} + +// src/segmentation/meet.ts +var tf30 = __toESM(require_tfjs_esm()); +var model17; +async function load16(config3) { + if (!model17 || env.initial) + model17 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model17["modelUrl"]); + return model17; +} +async function predict16(input, config3) { + var _a; + if (!model17) + model17 = await load16(config3); + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf30.image.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t2.norm = tf30.div(t2.resize, constants.tf255); + t2.res = model17.execute(t2.norm); + t2.squeeze = tf30.squeeze(t2.res, [0]); + [t2.bgRaw, t2.fgRaw] = tf30.unstack(t2.squeeze, 2); + t2.fg = tf30.softmax(t2.fgRaw); + t2.mul = tf30.mul(t2.fg, constants.tf255); + t2.expand = tf30.expandDims(t2.mul, 2); + t2.output = tf30.image.resizeBilinear(t2.expand, [input.shape[1] || 0, input.shape[2] || 0]); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf30.squeeze(input); + t2.concat = tf30.concat([t2.input, t2.output], -1); + rgba = tf30.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf30.cast(t2.output, "int32"); + break; + default: + rgba = tf30.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf30.dispose(t2[tensor6])); + return rgba; +} + +// src/face/match.ts +var match_exports = {}; +__export(match_exports, { + distance: () => distance, + find: () => find, + similarity: () => similarity +}); +function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25 }) { + if (!descriptor1 || !descriptor1) + return Number.MAX_SAFE_INTEGER; + let sum3 = 0; + for (let i = 0; i < descriptor1.length; i++) { + const diff = !options4.order || options4.order === 2 ? descriptor1[i] - descriptor2[i] : Math.abs(descriptor1[i] - descriptor2[i]); + sum3 += !options4.order || options4.order === 2 ? diff * diff : diff ** options4.order; + } + return (options4.multiplier || 20) * sum3; +} +var normalizeDistance = (dist, order, min2, max5) => { + if (dist === 0) + return 1; + const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); + const norm = (1 - root / 100 - min2) / (max5 - min2); + const clamp2 = Math.max(Math.min(norm, 1), 0); + return clamp2; +}; +function similarity(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) { + const dist = distance(descriptor1, descriptor2, options4); + return normalizeDistance(dist, options4.order || 2, options4.min || 0, options4.max || 1); +} +function find(descriptor, descriptors, options4 = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) { + if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { + return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 }; + } + let lowestDistance = Number.MAX_SAFE_INTEGER; + let index2 = -1; + for (let i = 0; i < descriptors.length; i++) { + const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options4) : Number.MAX_SAFE_INTEGER; + if (res < lowestDistance) { + lowestDistance = res; + index2 = i; + } + if (lowestDistance < (options4.threshold || 0)) + break; + } + const normalizedSimilarity = normalizeDistance(lowestDistance, options4.order || 2, options4.min || 0, options4.max || 1); + return { index: index2, distance: lowestDistance, similarity: normalizedSimilarity }; +} + +// src/models.ts +var models_exports2 = {}; +__export(models_exports2, { + Models: () => Models, + validateModel: () => validateModel +}); + +// src/body/movenet.ts +var tf32 = __toESM(require_tfjs_esm()); + +// src/body/movenetfix.ts +var tf31 = __toESM(require_tfjs_esm()); +var maxJitter = 5e-3; +var cache5 = { + keypoints: [], + padding: [[0, 0], [0, 0], [0, 0], [0, 0]] +}; +function bodyParts(body4) { + for (const pair of horizontal) { + const left = body4.keypoints.findIndex((kp) => kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp.part === pair[1]); + if (body4.keypoints[left] && body4.keypoints[right]) { + if (body4.keypoints[left].position[0] < body4.keypoints[right].position[0]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } + } + for (const pair of vertical) { + const lower = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const higher = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + if (body4.keypoints[lower] && body4.keypoints[higher]) { + if (body4.keypoints[lower].position[1] < body4.keypoints[higher].position[1]) { + body4.keypoints.splice(lower, 1); + } + } + } + for (const [pair, compare2] of relative) { + const left = body4.keypoints.findIndex((kp) => kp && kp.part === pair[0]); + const right = body4.keypoints.findIndex((kp) => kp && kp.part === pair[1]); + const leftTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[0]); + const rightTo = body4.keypoints.findIndex((kp) => kp && kp.part === compare2[1]); + if (!body4.keypoints[leftTo] || !body4.keypoints[rightTo]) + continue; + const distanceLeft = body4.keypoints[left] ? [ + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[left].position[0]), + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[left].position[0]) + ] : [0, 0]; + const distanceRight = body4.keypoints[right] ? [ + Math.abs(body4.keypoints[rightTo].position[0] - body4.keypoints[right].position[0]), + Math.abs(body4.keypoints[leftTo].position[0] - body4.keypoints[right].position[0]) + ] : [0, 0]; + if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { + const tmp = body4.keypoints[left]; + body4.keypoints[left] = body4.keypoints[right]; + body4.keypoints[right] = tmp; + } + } +} +function jitter(keypoints) { + for (let i = 0; i < keypoints.length; i++) { + if (keypoints[i] && cache5.keypoints[i]) { + const diff = [Math.abs(keypoints[i].positionRaw[0] - cache5.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache5.keypoints[i].positionRaw[1])]; + if (diff[0] < maxJitter && diff[1] < maxJitter) { + keypoints[i] = cache5.keypoints[i]; + } else { + cache5.keypoints[i] = keypoints[i]; + } + } else { + cache5.keypoints[i] = keypoints[i]; + } + } + return keypoints; +} +function padInput(input, inputSize10) { + var _a, _b; + const t2 = {}; + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + return input; + cache5.padding = [ + [0, 0], + [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], + [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], + [0, 0] + ]; + t2.pad = tf31.pad(input, cache5.padding); + t2.resize = tf31.image.resizeBilinear(t2.pad, [inputSize10, inputSize10]); + const final = tf31.cast(t2.resize, "int32"); + Object.keys(t2).forEach((tensor6) => tf31.dispose(t2[tensor6])); + return final; +} +function rescaleBody(body4, outputSize2) { + body4.keypoints = body4.keypoints.filter((kpt4) => kpt4 == null ? void 0 : kpt4.position); + for (const kpt4 of body4.keypoints) { + kpt4.position = [ + kpt4.position[0] * (outputSize2[0] + cache5.padding[2][0] + cache5.padding[2][1]) / outputSize2[0] - cache5.padding[2][0], + kpt4.position[1] * (outputSize2[1] + cache5.padding[1][0] + cache5.padding[1][1]) / outputSize2[1] - cache5.padding[1][0] + ]; + kpt4.positionRaw = [ + kpt4.position[0] / outputSize2[0], + kpt4.position[1] / outputSize2[1] + ]; + } + const rescaledBoxes = calc(body4.keypoints.map((pt) => pt.position), outputSize2); + body4.box = rescaledBoxes.box; + body4.boxRaw = rescaledBoxes.boxRaw; + return body4; +} + +// src/body/movenet.ts +var model18; +var inputSize8 = 0; +var skipped14 = Number.MAX_SAFE_INTEGER; +var cache6 = { + boxes: [], + bodies: [], + last: 0 +}; +async function load17(config3) { + var _a; + if (env.initial) + model18 = null; + if (!model18) { + fakeOps(["size"], config3); + model18 = await loadModel(config3.body.modelPath); + } else if (config3.debug) + log("cached model:", model18["modelUrl"]); + inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape) ? model18.inputs[0].shape[2] : 0; + if (inputSize8 < 64) + inputSize8 = 256; + return model18; +} +function parseSinglePose(res, config3, image28) { + const kpt4 = res[0][0]; + const keypoints = []; + let score = 0; + for (let id = 0; id < kpt4.length; id++) { + score = kpt4[id][2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[id][1], kpt4[id][0]]; + keypoints.push({ + score: Math.round(100 * score) / 100, + part: kpt3[id], + positionRaw, + position: [ + Math.round((image28.shape[2] || 0) * positionRaw[0]), + Math.round((image28.shape[1] || 0) * positionRaw[1]) + ] + }); + } + } + score = keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); + const bodies = []; + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + return bodies; +} +function parseMultiPose(res, config3, image28) { + const bodies = []; + for (let id = 0; id < res[0].length; id++) { + const kpt4 = res[0][id]; + const totalScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (totalScore > config3.body.minConfidence) { + const keypoints = []; + for (let i = 0; i < 17; i++) { + const score = kpt4[3 * i + 2]; + if (score > config3.body.minConfidence) { + const positionRaw = [kpt4[3 * i + 1], kpt4[3 * i + 0]]; + keypoints.push({ + part: kpt3[i], + score: Math.round(100 * score) / 100, + positionRaw, + position: [Math.round((image28.shape[2] || 0) * positionRaw[0]), Math.round((image28.shape[1] || 0) * positionRaw[1])] + }); + } + } + const newBox = calc(keypoints.map((pt) => pt.position), [image28.shape[2], image28.shape[1]]); + const annotations2 = {}; + for (const [name, indexes] of Object.entries(connected3)) { + const pt = []; + for (let i = 0; i < indexes.length - 1; i++) { + const pt0 = keypoints.find((kp) => kp.part === indexes[i]); + const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) + pt.push([pt0.position, pt1.position]); + } + annotations2[name] = pt; + } + const body4 = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations: annotations2 }; + bodyParts(body4); + bodies.push(body4); + } + } + bodies.sort((a, b) => b.score - a.score); + if (bodies.length > config3.body.maxDetected) + bodies.length = config3.body.maxDetected; + return bodies; +} +async function predict17(input, config3) { + var _a; + if (!(model18 == null ? void 0 : model18["executor"]) || !((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape)) + return []; + if (!config3.skipAllowed) + cache6.boxes.length = 0; + skipped14++; + const skipTime = (config3.body.skipTime || 0) > now() - cache6.last; + const skipFrame = skipped14 < (config3.body.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame) { + return cache6.bodies; + } + return new Promise(async (resolve) => { + const t2 = {}; + skipped14 = 0; + t2.input = padInput(input, inputSize8); + t2.res = model18 == null ? void 0 : model18.execute(t2.input); + cache6.last = now(); + const res = await t2.res.array(); + cache6.bodies = t2.res.shape[2] === 17 ? parseSinglePose(res, config3, input) : parseMultiPose(res, config3, input); + for (const body4 of cache6.bodies) { + rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); + jitter(body4.keypoints); + } + Object.keys(t2).forEach((tensor6) => tf32.dispose(t2[tensor6])); + resolve(cache6.bodies); + }); +} + +// src/object/nanodet.ts +var tf33 = __toESM(require_tfjs_esm()); +var model19; +var last10 = []; +var lastTime15 = 0; +var skipped15 = Number.MAX_SAFE_INTEGER; +var inputSize9 = 0; +var scaleBox = 2.5; +async function load18(config3) { + if (!model19 || env.initial) { + model19 = await loadModel(config3.object.modelPath); + const inputs = (model19 == null ? void 0 : model19["executor"]) ? Object.values(model19.modelSignature["inputs"]) : void 0; + inputSize9 = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416; + } else if (config3.debug) + log("cached model:", model19["modelUrl"]); + return model19; +} +async function process4(res, outputShape, config3) { + var _a, _b; + let id = 0; + let results = []; + const size2 = inputSize9; + for (const strideSize of [1, 2, 4]) { + const baseSize = strideSize * 13; + const scoresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scores = await scoresT.array(); + const featuresT = tf33.squeeze(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const boxesMaxT = tf33.reshape(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); + const boxIdxT = tf33.argMax(boxesMaxT, 2); + const boxIdx = await boxIdxT.array(); + for (let i = 0; i < scoresT.shape[0]; i++) { + for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { + const score = scores[i][j]; + if (score > (config3.object.minConfidence || 0) && j !== 61) { + const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; + const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; + const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); + const [x, y] = [ + cx - scaleBox / strideSize * boxOffset[0], + cy - scaleBox / strideSize * boxOffset[1] + ]; + const [w, h] = [ + cx + scaleBox / strideSize * boxOffset[2] - x, + cy + scaleBox / strideSize * boxOffset[3] - y + ]; + let boxRaw = [x, y, w, h]; + boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); + const box = [ + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + box: box.map((a) => Math.trunc(a)), + boxRaw + }; + results.push(result); + } + } + } + tf33.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]); + } + const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); + const nmsScores = results.map((a) => a.score); + let nmsIdx = []; + if (nmsBoxes && nmsBoxes.length > 0) { + const nms = await tf33.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + nmsIdx = Array.from(await nms.data()); + tf33.dispose(nms); + } + results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); + return results; +} +async function predict18(image28, config3) { + if (!(model19 == null ? void 0 : model19["executor"])) + return []; + const skipTime = (config3.object.skipTime || 0) > now() - lastTime15; + const skipFrame = skipped15 < (config3.object.skipFrames || 0); + if (config3.skipAllowed && skipTime && skipFrame && last10.length > 0) { + skipped15++; + return last10; + } + skipped15 = 0; + if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) + return last10; + return new Promise(async (resolve) => { + const outputSize2 = [image28.shape[2] || 0, image28.shape[1] || 0]; + const resizeT = tf33.image.resizeBilinear(image28, [inputSize9, inputSize9], false); + const normT = tf33.div(resizeT, constants.tf255); + const transposeT = tf33.transpose(normT, [0, 3, 1, 2]); + let objectT; + if (config3.object.enabled) + objectT = model19.execute(transposeT); + lastTime15 = now(); + const obj = await process4(objectT, outputSize2, config3); + last10 = obj; + tf33.dispose([resizeT, normT, transposeT, ...objectT]); + resolve(obj); + }); +} + +// src/body/posenet.ts +var tf34 = __toESM(require_tfjs_esm()); + +// src/body/posenetutils.ts +var partNames = [ + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var count = partNames.length; +var partIds = partNames.reduce((result, jointName, i) => { + result[jointName] = i; + return result; +}, {}); +var connectedPartNames = [ + ["leftHip", "leftShoulder"], + ["leftElbow", "leftShoulder"], + ["leftElbow", "leftWrist"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["rightHip", "rightShoulder"], + ["rightElbow", "rightShoulder"], + ["rightElbow", "rightWrist"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"], + ["leftShoulder", "rightShoulder"], + ["leftHip", "rightHip"] +]; +var connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => [partIds[jointNameA], partIds[jointNameB]]); +var poseChain = [ + ["nose", "leftEye"], + ["leftEye", "leftEar"], + ["nose", "rightEye"], + ["rightEye", "rightEar"], + ["nose", "leftShoulder"], + ["leftShoulder", "leftElbow"], + ["leftElbow", "leftWrist"], + ["leftShoulder", "leftHip"], + ["leftHip", "leftKnee"], + ["leftKnee", "leftAnkle"], + ["nose", "rightShoulder"], + ["rightShoulder", "rightElbow"], + ["rightElbow", "rightWrist"], + ["rightShoulder", "rightHip"], + ["rightHip", "rightKnee"], + ["rightKnee", "rightAnkle"] +]; +function getBoundingBox(keypoints) { + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({ + maxX: Math.max(maxX, x), + maxY: Math.max(maxY, y), + minX: Math.min(minX, x), + minY: Math.min(minY, y) + }), { + maxX: Number.NEGATIVE_INFINITY, + maxY: Number.NEGATIVE_INFINITY, + minX: Number.POSITIVE_INFINITY, + minY: Number.POSITIVE_INFINITY + }); + return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY]; +} +function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]) { + const scaleY = height / inputResolutionHeight; + const scaleX = width / inputResolutionWidth; + const scalePose = (pose, i) => ({ + id: i, + score: pose.score, + boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight], + box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)], + keypoints: pose.keypoints.map(({ score, part, position }) => ({ + score, + part, + position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)], + positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] + })), + annotations: {} + }); + const scaledPoses = poses.map((pose, i) => scalePose(pose, i)); + return scaledPoses; +} +var MaxHeap = class { + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + __publicField(this, "numberOfElements"); + __publicField(this, "getElementValue"); + this.priorityQueue = new Array(maxSize2); + this.numberOfElements = -1; + this.getElementValue = getElementValue; + } + enqueue(x) { + this.priorityQueue[++this.numberOfElements] = x; + this.swim(this.numberOfElements); + } + dequeue() { + const max5 = this.priorityQueue[0]; + this.exchange(0, this.numberOfElements--); + this.sink(0); + this.priorityQueue[this.numberOfElements + 1] = null; + return max5; + } + empty() { + return this.numberOfElements === -1; + } + size() { + return this.numberOfElements + 1; + } + all() { + return this.priorityQueue.slice(0, this.numberOfElements + 1); + } + max() { + return this.priorityQueue[0]; + } + swim(k) { + while (k > 0 && this.less(Math.floor(k / 2), k)) { + this.exchange(k, Math.floor(k / 2)); + k = Math.floor(k / 2); + } + } + sink(k) { + while (2 * k <= this.numberOfElements) { + let j = 2 * k; + if (j < this.numberOfElements && this.less(j, j + 1)) + j++; + if (!this.less(k, j)) + break; + this.exchange(k, j); + k = j; + } + } + getValueAt(i) { + return this.getElementValue(this.priorityQueue[i]); + } + less(i, j) { + return this.getValueAt(i) < this.getValueAt(j); + } + exchange(i, j) { + const t2 = this.priorityQueue[i]; + this.priorityQueue[i] = this.priorityQueue[j]; + this.priorityQueue[j] = t2; + } +}; +function getOffsetPoint(y, x, keypoint, offsets) { + return { + y: offsets.get(y, x, keypoint), + x: offsets.get(y, x, keypoint + count) + }; +} +function getImageCoords(part, outputStride2, offsets) { + const { heatmapY, heatmapX, id: keypoint } = part; + const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + return { + x: part.heatmapX * outputStride2 + x, + y: part.heatmapY * outputStride2 + y + }; +} +function clamp(a, min2, max5) { + if (a < min2) + return min2; + if (a > max5) + return max5; + return a; +} +function squaredDistance(y1, x1, y2, x2) { + const dy = y2 - y1; + const dx = x2 - x1; + return dy * dy + dx * dx; +} +function addVectors(a, b) { + return { x: a.x + b.x, y: a.y + b.y }; +} + +// src/body/posenet.ts +var model20; +var poseNetOutputs = ["MobilenetV1/offset_2/BiasAdd", "MobilenetV1/heatmap_2/BiasAdd", "MobilenetV1/displacement_fwd_2/BiasAdd", "MobilenetV1/displacement_bwd_2/BiasAdd"]; +var localMaximumRadius = 1; +var outputStride = 16; +var squaredNmsRadius = 50 ** 2; +function traverse(edgeId, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) { + const getDisplacement = (point2) => ({ + y: displacements.get(point2.y, point2.x, edgeId), + x: displacements.get(point2.y, point2.x, displacements.shape[2] / 2 + edgeId) + }); + const getStridedIndexNearPoint = (point2, height2, width2) => ({ + y: clamp(Math.round(point2.y / outputStride), 0, height2 - 1), + x: clamp(Math.round(point2.x / outputStride), 0, width2 - 1) + }); + const [height, width] = scores.shape; + const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width); + const displacement = getDisplacement(sourceKeypointIndices); + const displacedPoint = addVectors(sourceKeypoint.position, displacement); + let targetKeypoint = displacedPoint; + for (let i = 0; i < offsetRefineStep; i++) { + const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const offsetPoint = getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets); + targetKeypoint = addVectors( + { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride }, + { x: offsetPoint.x, y: offsetPoint.y } + ); + } + const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width); + const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId); + return { position: targetKeypoint, part: partNames[targetId], score }; +} +function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) { + const tuples = poseChain.map(([parentJoinName, childJoinName]) => [partIds[parentJoinName], partIds[childJoinName]]); + const edgesFwd = tuples.map(([, childJointId]) => childJointId); + const edgesBwd = tuples.map(([parentJointId]) => parentJointId); + const numParts = scores.shape[2]; + const numEdges = edgesFwd.length; + const keypoints = new Array(numParts); + const rootPoint = getImageCoords(root.part, outputStride, offsets); + keypoints[root.part.id] = { + score: root.score, + part: partNames[root.part.id], + position: rootPoint + }; + for (let edge = numEdges - 1; edge >= 0; --edge) { + const sourceId = edgesFwd[edge]; + const targetId = edgesBwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd); + } + } + for (let edge = 0; edge < numEdges; ++edge) { + const sourceId = edgesBwd[edge]; + const targetId = edgesFwd[edge]; + if (keypoints[sourceId] && !keypoints[targetId]) { + keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd); + } + } + return keypoints; +} +function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores) { + const [height, width] = scores.shape; + let localMaximum = true; + const yStart = Math.max(heatmapY - localMaximumRadius, 0); + const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height); + for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) { + const xStart = Math.max(heatmapX - localMaximumRadius, 0); + const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width); + for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) { + if (scores.get(yCurrent, xCurrent, keypointId) > score) { + localMaximum = false; + break; + } + } + if (!localMaximum) + break; + } + return localMaximum; +} +function buildPartWithScoreQueue(minConfidence2, scores) { + const [height, width, numKeypoints] = scores.shape; + const queue = new MaxHeap(height * width * numKeypoints, ({ score }) => score); + for (let heatmapY = 0; heatmapY < height; ++heatmapY) { + for (let heatmapX = 0; heatmapX < width; ++heatmapX) { + for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) { + const score = scores.get(heatmapY, heatmapX, keypointId); + if (score < minConfidence2) + continue; + if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) + queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } }); + } + } + } + return queue; +} +function withinRadius(poses, { x, y }, keypointId) { + return poses.some(({ keypoints }) => { + var _a; + const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; + if (!correspondingKeypoint) + return false; + return squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + }); +} +function getInstanceScore(existingPoses, keypoints) { + const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => { + if (!withinRadius(existingPoses, position, keypointId)) + result += score; + return result; + }, 0); + return notOverlappedKeypointScores / keypoints.length; +} +function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence2) { + const poses = []; + const queue = buildPartWithScoreQueue(minConfidence2, scores); + while (poses.length < maxDetected && !queue.empty()) { + const root = queue.dequeue(); + const rootImageCoords = getImageCoords(root.part, outputStride, offsets); + if (withinRadius(poses, rootImageCoords, root.part.id)) + continue; + let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd); + keypoints = keypoints.filter((a) => a.score > minConfidence2); + const score = getInstanceScore(poses, keypoints); + const box = getBoundingBox(keypoints); + if (score > minConfidence2) + poses.push({ keypoints, box, score: Math.round(100 * score) / 100 }); + } + return poses; +} +async function predict19(input, config3) { + if (!(model20 == null ? void 0 : model20["executor"])) + return []; + const res = tf34.tidy(() => { + if (!model20.inputs[0].shape) + return []; + const resized = tf34.image.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = tf34.sub(tf34.div(tf34.cast(resized, "float32"), 127.5), 1); + const results = model20.execute(normalized, poseNetOutputs); + const results3d = results.map((y) => tf34.squeeze(y, [0])); + results3d[1] = tf34.sigmoid(results3d[1]); + return results3d; + }); + const buffers = await Promise.all(res.map((tensor6) => tensor6.buffer())); + for (const t2 of res) + tf34.dispose(t2); + const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); + if (!model20.inputs[0].shape) + return []; + const scaled = scalePoses(decoded, [input.shape[1], input.shape[2]], [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + return scaled; +} +async function load19(config3) { + if (!model20 || env.initial) + model20 = await loadModel(config3.body.modelPath); + else if (config3.debug) + log("cached model:", model20["modelUrl"]); + return model20; +} + +// src/segmentation/rvm.ts +var tf35 = __toESM(require_tfjs_esm()); +var model21; +var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; +var t = {}; +var ratio = 0; +function init3(config3) { + tf35.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = tf35.tensor(0); + t.r2i = tf35.tensor(0); + t.r3i = tf35.tensor(0); + t.r4i = tf35.tensor(0); + ratio = config3.segmentation.ratio || 0.5; + t.downsample_ratio = tf35.tensor(ratio); +} +async function load20(config3) { + if (!model21 || env.initial) + model21 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model21["modelUrl"]); + init3(config3); + return model21; +} +var normalize = (r) => tf35.tidy(() => { + const squeeze14 = tf35.squeeze(r, [0]); + const mul15 = tf35.mul(squeeze14, constants.tf255); + const cast8 = tf35.cast(mul15, "int32"); + return cast8; +}); +function getRGBA(fgr, pha) { + const rgb2 = fgr ? normalize(fgr) : tf35.fill([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : tf35.fill([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgba = tf35.concat([rgb2, a], -1); + tf35.dispose([rgb2, a]); + return rgba; +} +function getState(state) { + return tf35.tidy(() => { + const r = {}; + r.unstack = tf35.unstack(state, -1); + r.concat = tf35.concat(r.unstack, 1); + r.split = tf35.split(r.concat, 4, 1); + r.stack = tf35.concat(r.split, 2); + r.squeeze = tf35.squeeze(r.stack, [0]); + r.expand = tf35.expandDims(r.squeeze, -1); + r.add = tf35.add(r.expand, 1); + r.mul = tf35.mul(r.add, 127.5); + r.cast = tf35.cast(r.mul, "int32"); + r.tile = tf35.tile(r.cast, [1, 1, 3]); + r.alpha = tf35.fill([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); + return tf35.concat([r.tile, r.alpha], -1); + }); +} +async function predict20(input, config3) { + if (!model21) + model21 = await load20(config3); + if (!(model21 == null ? void 0 : model21["executor"])) + return null; + t.src = tf35.div(input, 255); + if (ratio !== config3.segmentation.ratio) + init3(config3); + const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + rgba = getRGBA(fgr, pha); + break; + case "alpha": + rgba = getRGBA(null, pha); + break; + case "foreground": + rgba = getRGBA(fgr, null); + break; + case "state": + rgba = getState(r1o); + break; + default: + rgba = tf35.tensor(0); + } + tf35.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; + return rgba; +} + +// src/segmentation/selfie.ts +var tf36 = __toESM(require_tfjs_esm()); +var model22; +async function load21(config3) { + if (!model22 || env.initial) + model22 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) + log("cached model:", model22["modelUrl"]); + return model22; +} +async function predict21(input, config3) { + var _a; + if (!model22) + model22 = await load21(config3); + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) + return null; + const t2 = {}; + t2.resize = tf36.image.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t2.norm = tf36.div(t2.resize, constants.tf255); + t2.res = model22.execute(t2.norm); + t2.squeeze = tf36.squeeze(t2.res, [0]); + t2.alpha = tf36.image.resizeBilinear(t2.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t2.mul = tf36.mul(t2.alpha, constants.tf255); + let rgba; + switch (config3.segmentation.mode || "default") { + case "default": + t2.input = tf36.squeeze(input); + t2.concat = tf36.concat([t2.input, t2.mul], -1); + rgba = tf36.cast(t2.concat, "int32"); + break; + case "alpha": + rgba = tf36.cast(t2.mul, "int32"); + break; + default: + rgba = tf36.tensor(0); + } + Object.keys(t2).forEach((tensor6) => tf36.dispose(t2[tensor6])); + return rgba; +} + +// src/models.ts +function validateModel(instance, model23, name) { + var _a, _b; + if (!model23) + return null; + if (!((_a = instance == null ? void 0 : instance.config) == null ? void 0 : _a.validateModels)) + return null; + const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"]; + const ignoreOps = ["biasadd", "fusedbatchnormv3", "matmul", "switch", "shape", "merge", "split", "broadcastto"]; + const ops = []; + const missing = []; + const url = model23["modelUrl"]; + const executor = model23["executor"]; + if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { + for (const kernel of Object.values(executor.graph.nodes)) { + const op = kernel.op.toLowerCase(); + if (!ops.includes(op)) + ops.push(op); + } + } else { + if (!executor && instance.config.debug) { + log("model not loaded", name); + } + } + for (const op of ops) { + if (!simpleOps.includes(op) && !ignoreOps.includes(op) && !instance.env.kernels.includes(op) && !instance.env.kernels.includes(op.replace("_", "")) && !instance.env.kernels.includes(op.replace("native", "")) && !instance.env.kernels.includes(op.replace("v2", ""))) { + missing.push(op); + } + } + if (instance.config.debug && missing.length > 0) + log("model validation failed:", name, missing); + return missing.length > 0 ? { name, missing, ops, url } : null; +} +var Models = class { + constructor(currentInstance) { + __publicField(this, "instance"); + __publicField(this, "models", {}); + this.models = {}; + this.instance = currentInstance; + } + stats() { + let totalSizeFromManifest = 0; + let totalSizeWeights = 0; + let totalSizeLoading = 0; + for (const m of Object.values(modelStats)) { + totalSizeFromManifest += m.sizeFromManifest; + totalSizeWeights += m.sizeLoadedWeights; + totalSizeLoading += m.sizeDesired; + } + const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0; + return { + numLoadedModels: Object.values(modelStats).length, + numDefinedModels: Object.keys(this.models).length, + percentageLoaded, + totalSizeFromManifest, + totalSizeWeights, + totalSizeLoading, + modelStats: Object.values(modelStats) + }; + } + reset() { + for (const model23 of Object.keys(this.models)) + this.models[model23] = null; + } + async load(instance) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A; + if (env.initial) + this.reset(); + if (instance) + this.instance = instance; + const m = {}; + m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; + m.antispoof = this.instance.config.face.enabled && ((_a = this.instance.config.face.antispoof) == null ? void 0 : _a.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; + m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; + m.faceres = this.instance.config.face.enabled && ((_c = this.instance.config.face.description) == null ? void 0 : _c.enabled) && !this.models.faceres ? load7(this.instance.config) : null; + m.emotion = this.instance.config.face.enabled && ((_d = this.instance.config.face.emotion) == null ? void 0 : _d.enabled) && !this.models.emotion ? load6(this.instance.config) : null; + m.iris = this.instance.config.face.enabled && ((_e = this.instance.config.face.iris) == null ? void 0 : _e.enabled) && !((_f = this.instance.config.face.attention) == null ? void 0 : _f.enabled) && !this.models.iris ? load4(this.instance.config) : null; + m.facemesh = this.instance.config.face.enabled && ((_g = this.instance.config.face.mesh) == null ? void 0 : _g.enabled) && !this.models.facemesh ? load5(this.instance.config) : null; + m.gear = this.instance.config.face.enabled && ((_h = this.instance.config.face["gear"]) == null ? void 0 : _h.enabled) && !this.models.gear ? load10(this.instance.config) : null; + m.ssrnetage = this.instance.config.face.enabled && ((_i = this.instance.config.face["ssrnet"]) == null ? void 0 : _i.enabled) && !this.models.ssrnetage ? load11(this.instance.config) : null; + m.ssrnetgender = this.instance.config.face.enabled && ((_j = this.instance.config.face["ssrnet"]) == null ? void 0 : _j.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; + m.mobilefacenet = this.instance.config.face.enabled && ((_k = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; + m.insightface = this.instance.config.face.enabled && ((_l = this.instance.config.face["insightface"]) == null ? void 0 : _l.enabled) && !this.models.insightface ? load14(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; + m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n = this.instance.config.body.modelPath) == null ? void 0 : _n.includes("efficientpose")) ? load2(this.instance.config) : null; + m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o = this.instance.config.body.modelPath) == null ? void 0 : _o.includes("movenet")) ? load17(this.instance.config) : null; + m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p = this.instance.config.body.modelPath) == null ? void 0 : _p.includes("posenet")) ? load19(this.instance.config) : null; + m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r = (_q = this.instance.config.hand.detector) == null ? void 0 : _q.modelPath) == null ? void 0 : _r.includes("handtrack")) ? loadDetect2(this.instance.config) : null; + m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s = this.instance.config.hand.detector) == null ? void 0 : _s.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton(this.instance.config) : null; + if ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect")) + [m.handpose, m.handskeleton] = !this.models.handpose ? await load15(this.instance.config) : [null, null]; + m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w = this.instance.config.object.modelPath) == null ? void 0 : _w.includes("centernet")) ? load(this.instance.config) : null; + m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x = this.instance.config.object.modelPath) == null ? void 0 : _x.includes("nanodet")) ? load18(this.instance.config) : null; + m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load21(this.instance.config) : null; + m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z = this.instance.config.segmentation.modelPath) == null ? void 0 : _z.includes("meet")) ? load16(this.instance.config) : null; + m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A = this.instance.config.segmentation.modelPath) == null ? void 0 : _A.includes("rvm")) ? load20(this.instance.config) : null; + await Promise.all([...Object.values(m)]); + for (const model23 of Object.keys(m)) + this.models[model23] = m[model23] || this.models[model23] || null; + } + list() { + const models3 = Object.keys(this.models).map((model23) => { + var _a; + return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a = this.models[model23]) == null ? void 0 : _a["modelUrl"] : null }; + }); + for (const m of models3) { + const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); + if (!stats) + continue; + m.size = modelStats[stats].sizeLoadedWeights; + m.url = modelStats[stats].url; + } + return models3; + } + loaded() { + const list = this.list(); + const loaded = list.filter((model23) => model23.loaded).map((model23) => model23.name); + return loaded; + } + validate() { + const missing = []; + for (const defined of Object.keys(this.models)) { + const model23 = this.models[defined]; + if (!model23) + continue; + const res = validateModel(this.instance, model23, defined); + if (res) + missing.push(res); + } + return missing; + } +}; + +// src/util/persons.ts +function join2(faces, bodies, hands, gestures, shape) { + var _a, _b, _c, _d, _e, _f; + let id = 0; + const persons = []; + for (const face4 of faces) { + const person2 = { id: id++, face: face4, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] }; + for (const body4 of bodies) { + if (face4.box[0] > body4.box[0] && face4.box[0] < body4.box[0] + body4.box[2] && face4.box[1] + face4.box[3] > body4.box[1] && face4.box[1] + face4.box[3] < body4.box[1] + body4.box[3]) { + person2.body = body4; + } + } + if (person2.body) { + for (const hand3 of hands) { + if (hand3.box[0] + hand3.box[2] > person2.body.box[0] && hand3.box[0] + hand3.box[2] < person2.body.box[0] + person2.body.box[2] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.left = hand3; + } + if (hand3.box[0] < person2.body.box[0] + person2.body.box[2] && hand3.box[0] > person2.body.box[0] && hand3.box[1] + hand3.box[3] > person2.body.box[1] && hand3.box[1] + hand3.box[3] < person2.body.box[1] + person2.body.box[3]) { + if (person2.hands) + person2.hands.right = hand3; + } + } + } + for (const gesture2 of gestures) { + if (gesture2["face"] !== void 0 && gesture2["face"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["iris"] !== void 0 && gesture2["iris"] === face4.id) + person2.gestures.push(gesture2); + else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a = person2.body) == null ? void 0 : _a.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) + person2.gestures.push(gesture2); + else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_c = person2.hands.right) == null ? void 0 : _c.id)) + person2.gestures.push(gesture2); + } + const x = []; + const y = []; + const extractXY = (box) => { + if (box && box.length === 4) { + x.push(box[0], box[0] + box[2]); + y.push(box[1], box[1] + box[3]); + } + }; + extractXY(person2.face.box); + extractXY((_d = person2.body) == null ? void 0 : _d.box); + extractXY((_e = person2.hands.left) == null ? void 0 : _e.box); + extractXY((_f = person2.hands.right) == null ? void 0 : _f.box); + const minX = Math.min(...x); + const minY = Math.min(...y); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; + if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) + person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; + persons.push(person2); + } + return persons; +} + +// src/warmup.ts +var tf37 = __toESM(require_tfjs_esm()); + +// src/sample.ts +var face3 = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -269,7 +14112,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Dt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14681,559 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function s4(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(A=>A.blob()),n,o;switch(e.config.warmup){case"face":n=await t(Wt);break;case"body":case"full":n=await t(Dt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function A4(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+Wt;break;case"full":case"body":n="data:image/jpeg;base64,"+Dt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(v.Image)o=new v.Image;else return;o.onload=async()=>{let r=ee(o.naturalWidth,o.naturalHeight);if(!r)u("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(o,0,0);let A=await e.image(r,!0),a=A.tensor?await e.detect(A.tensor,e.config):void 0;t(a)}},n?o.src=n:t(void 0)})}async function a4(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(Wt):n=t(Dt);let o;if("node"in c0&&c0.getBackend()==="tensorflow"){let r=c0.node.decodeJpeg(n),s=c0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&u("Warmup tfjs-node not loaded");return o}async function i4(e){let t;return typeof createImageBitmap=="function"?t=await s4(e):typeof Image!="undefined"||v.Canvas!==void 0?t=await A4(e):t=await a4(e),t}async function l4(e){var a,l,c,x;if(!c0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=c0.getBackend(),n=c0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;c0.env().set("ENGINE_COMPILE_ONLY",!0);let o=c0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models).filter(([d,p])=>d!==null&&p!==null)){let d=(y==null?void 0:y.modelSignature)&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])==null?void 0:l.shape)?[...y.inputs[0].shape]:[1,64,64,3],p=(y==null?void 0:y.modelSignature)&&((x=(c=y==null?void 0:y.inputs)==null?void 0:c[0])==null?void 0:x.dtype)?y.inputs[0].dtype:"float32";for(let b=0;bc0.dispose(M)):c0.dispose(b)}catch(b){e.config.debug&&u("compile fail model:",i)}c0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&u("compile pass:",{models:r,kernels:s.length}),c0.env().set("ENGINE_COMPILE_ONLY",!1);let A=c0.engine().state.numTensors;A-o>0&&u("tensor leak:",A-o)}async function Eo(e,t){await E2(e,!1);let n=g();return e.state="warmup",t&&(e.config=A0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?ue():new Promise(async o=>{await e.models.load(),await l4(e);let r=await i4(e),s=g();e.config.debug&&u("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var R2,W2,D2,Ft,Xe,b1=class{constructor(t){k(this,"version");k(this,"config");k(this,"result");k(this,"state");k(this,"process");k(this,"tf");k(this,"env",v);k(this,"draw",Q2);k(this,"match",zt);k(this,"models");k(this,"events");k(this,"faceTriangulation");k(this,"faceUVMap");k(this,"performance");i2(this,R2,void 0);i2(this,W2,void 0);i2(this,D2,void 0);k(this,"analyze",(...t)=>{if(!fe(this,W2))return;let n=this.tf.engine().state.numTensors,o=fe(this,R2);k2(this,R2,n);let r=n-o;r!==0&&u(...t,r)});i2(this,Ft,t=>{if(!fe(this,D2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof Ae.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});k(this,"webcam",new Z2);k(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});i2(this,Xe,{});let n=(Ae.version.tfjs||Ae.version_core).replace(/-(.*)/,"");qe.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,qe.modelBasePath=v.browser?"../models/":"file://models/",this.version=Kt,Object.defineProperty(this,"version",{value:Kt}),this.config=JSON.parse(JSON.stringify(qe)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=A0(this.config,t)),C1(this.config),this.tf=Ae,this.state="idle",k2(this,R2,0),k2(this,W2,!1),k2(this,D2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new C2(this),n5(),this.result=ue(),this.process={tensor:null,canvas:null},this.faceTriangulation=E3,this.faceUVMap=z3,Ct(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&u(`version: ${this.version}`),this.config.debug&&u(`tfjs version: ${this.tf.version["tfjs-core"]}`);let o=JSON.parse(JSON.stringify(this.env));delete o.kernels,delete o.initial,delete o.perfadd,this.config.debug&&u("environment:",o)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(qe)),this.config.backend=t,Ut(),v.initial=!0}validate(t){let n=Zt(qe,t||this.config);return n.length===0&&(this.config=A0(this.config,t)),n}now(){return g()}image(t,n=!1){return G2(t,this.config,n)}async segmentation(t,n){var s,A,a;if(n&&(this.config=A0(this.config,n)),!this.config.segmentation.enabled)return null;let o=await G2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Ro(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await $n(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await Po(o.tensor,this.config)),Ae.dispose(o.tensor),r}compare(t,n){return L1(this.config,t,n)}async init(){await E2(this,!0),await this.tf.ready(),Ut()}async load(t){this.state="load";let n=g(),o=Object.values(this.models).filter(A=>A).length;t&&(this.config=A0(this.config,t)),this.env.initial&&(await E2(this,!1)||u("error: backend check failed"),await Ae.ready(),this.env.browser&&(this.config.debug&&u("configuration:",this.config),this.config.debug&&u("tf flags:",this.tf.ENV.flags))),await this.models.load(),this.env.initial&&this.config.debug&&u("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(g()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return _n(t,this.config)}async warmup(t){let n=g(),o=await Eo(this,t),r=g();return this.performance.warmup=Math.trunc(r-n),o}async profile(t,n){let o=await this.tf.profile(()=>this.detect(t,n)),r={},s=0;for(let a of o.kernels){let l=Number(a.kernelTimeMs)||0;r[a.name]?r[a.name]+=l:r[a.name]=l,s+=l}let A=[];Object.entries(r).forEach(a=>A.push({kernel:a[0],time:a[1],perc:0}));for(let a of A)a.perc=Math.round(1e3*a.time/s)/1e3,a.time=Math.round(1e3*a.time)/1e3;return A.sort((a,l)=>l.time-a.time),A.length=20,A}async detect(t,n){return this.state="detect",new Promise(async o=>{var b,M,T,m,h,S,P,I,q,t0,G,$,s0,R,Z,b0,U,g0,f0,B,X;this.state="config";let r;this.config=A0(this.config,n),this.state="check";let s=fe(this,Ft).call(this,t);s&&(u(s,t),this.emit("error"),o(ue(s)));let A=g();await this.load(),r=g(),this.state="image";let a=await G2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&u("could not convert input to tensor"),this.emit("error"),o(ue("could not convert input to tensor"));return}this.emit("image"),r=g(),this.config.skipAllowed=await O1(this.config,a.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(g()-r):Math.trunc(g()-r),this.analyze("Check Changed:");let l=[],c=[],x=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?V5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=g(),l=this.config.face.enabled?await V5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let y=this.config.body.maxDetected===-1?A0(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?y1(a.tensor,y):[]:(M=this.config.body.modelPath)!=null&&M.includes("blazepose")?c=this.config.body.enabled?a5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?f5(a.tensor,y):[]:(m=this.config.body.modelPath)!=null&&m.includes("movenet")&&(c=this.config.body.enabled?A1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=g(),(h=this.config.body.modelPath)!=null&&h.includes("posenet")?c=this.config.body.enabled?await y1(a.tensor,y):[]:(S=this.config.body.modelPath)!=null&&S.includes("blazepose")?c=this.config.body.enabled?await a5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await f5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await A1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let d=this.config.hand.maxDetected===-1?A0(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((t0=(q=this.config.hand.detector)==null?void 0:q.modelPath)!=null&&t0.includes("handdetect")?x=this.config.hand.enabled?Y5(a.tensor,d):[]:($=(G=this.config.hand.detector)==null?void 0:G.modelPath)!=null&&$.includes("handtrack")&&(x=this.config.hand.enabled?Q5(a.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(r=g(),(R=(s0=this.config.hand.detector)==null?void 0:s0.modelPath)!=null&&R.includes("handdetect")?x=this.config.hand.enabled?await Y5(a.tensor,d):[]:(b0=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&b0.includes("handtrack")&&(x=this.config.hand.enabled?await Q5(a.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((U=this.config.object.modelPath)!=null&&U.includes("nanodet")?i=this.config.object.enabled?i1(a.tensor,this.config):[]:(g0=this.config.object.modelPath)!=null&&g0.includes("centernet")&&(i=this.config.object.enabled?c5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=g(),(f0=this.config.object.modelPath)!=null&&f0.includes("nanodet")?i=this.config.object.enabled?await i1(a.tensor,this.config):[]:(B=this.config.object.modelPath)!=null&&B.includes("centernet")&&(i=this.config.object.enabled?await c5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,c,x,i]=await Promise.all([l,c,x,i])),this.state="detect:gesture";let p=[];this.config.gesture.enabled&&(r=g(),p=[...wn(l),...kn(c),...zn(x),...En(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(g()-r):Math.trunc(g()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(g()-A):Math.trunc(g()-A);let f=((X=this.process.tensor)==null?void 0:X.shape)||[0,0,0,0];this.result={face:l,body:c,hand:x,gesture:p,object:i,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return wo(l,c,x,p,f)}},Ae.dispose(a.tensor),this.emit("detect"),this.state="idle",o(this.result)})}async sleep(t){return new Promise(n=>{setTimeout(n,t)})}async video(t,n=!0,o=0){n?(fe(this,Xe)[t.id]||(this.config.debug&&u("video start",t.id),fe(this,Xe)[t.id]=!0),!t.paused&&fe(this,Xe)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),fe(this,Xe)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&u("video stop",t.id),fe(this,Xe)[t.id]=!1)}};R2=new WeakMap,W2=new WeakMap,D2=new WeakMap,Ft=new WeakMap,Xe=new WeakMap;0&&(module.exports={Env,Human,defaults,draw,empty,env,match,models}); +2Q==`; + +// src/warmup.ts +async function warmupBitmap(instance) { + const b64toBlob = (base64, type = "application/octet-stream") => fetch(`data:${type};base64,${base64}`).then((res2) => res2.blob()); + let blob; + let res; + switch (instance.config.warmup) { + case "face": + blob = await b64toBlob(face3); + break; + case "body": + case "full": + blob = await b64toBlob(body3); + break; + default: + blob = null; + } + if (blob) { + const bitmap = await createImageBitmap(blob); + res = await instance.detect(bitmap, instance.config); + bitmap.close(); + } + return res; +} +async function warmupCanvas(instance) { + return new Promise((resolve) => { + let src; + switch (instance.config.warmup) { + case "face": + src = "data:image/jpeg;base64," + face3; + break; + case "full": + case "body": + src = "data:image/jpeg;base64," + body3; + break; + default: + src = ""; + } + let img; + if (typeof Image !== "undefined") + img = new Image(); + else if (env.Image) + img = new env.Image(); + else + return; + img.onload = async () => { + const canvas3 = canvas(img.naturalWidth, img.naturalHeight); + if (!canvas3) { + log("Warmup: Canvas not found"); + resolve(void 0); + } else { + const ctx = canvas3.getContext("2d"); + if (ctx) + ctx.drawImage(img, 0, 0); + const tensor6 = await instance.image(canvas3, true); + const res = tensor6.tensor ? await instance.detect(tensor6.tensor, instance.config) : void 0; + resolve(res); + } + }; + if (src) + img.src = src; + else + resolve(void 0); + }); +} +async function warmupNode(instance) { + const atob = (str) => Buffer.from(str, "base64"); + let img; + if (instance.config.warmup === "face") + img = atob(face3); + else + img = atob(body3); + let res; + if ("node" in tf37 && tf37.getBackend() === "tensorflow") { + const data = tf37["node"].decodeJpeg(img); + const expanded = tf37.expandDims(data, 0); + instance.tf.dispose(data); + res = await instance.detect(expanded, instance.config); + instance.tf.dispose(expanded); + } else { + if (instance.config.debug) + log("Warmup tfjs-node not loaded"); + } + return res; +} +async function runInference(instance) { + let res; + if (typeof createImageBitmap === "function") + res = await warmupBitmap(instance); + else if (typeof Image !== "undefined" || env.Canvas !== void 0) + res = await warmupCanvas(instance); + else + res = await warmupNode(instance); + return res; +} +async function runCompile(instance) { + var _a, _b, _c, _d; + if (!tf37.env().flagRegistry.ENGINE_COMPILE_ONLY) + return; + const backendType = tf37.getBackend(); + const webGLBackend = tf37.backend(); + if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { + return; + } + tf37.env().set("ENGINE_COMPILE_ONLY", true); + const numTensorsStart = tf37.engine().state.numTensors; + const compiledModels = []; + for (const [modelName, model23] of Object.entries(instance.models).filter(([key, val]) => key !== null && val !== null)) { + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d = (_c = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c[0]) == null ? void 0 : _d.dtype) ? model23.inputs[0].dtype : "float32"; + for (let dim = 0; dim < shape.length; dim++) { + if (shape[dim] === -1) + shape[dim] = dim === 0 ? 1 : 64; + } + const tensor6 = tf37.zeros(shape, dtype); + try { + const res = model23.execute(tensor6); + compiledModels.push(modelName); + if (Array.isArray(res)) + res.forEach((t2) => tf37.dispose(t2)); + else + tf37.dispose(res); + } catch (e) { + if (instance.config.debug) + log("compile fail model:", modelName); + } + tf37.dispose(tensor6); + } + const kernels = await webGLBackend["checkCompileCompletionAsync"](); + webGLBackend["getUniformLocations"](); + if (instance.config.debug) + log("compile pass:", { models: compiledModels, kernels: kernels.length }); + tf37.env().set("ENGINE_COMPILE_ONLY", false); + const numTensorsEnd = tf37.engine().state.numTensors; + if (numTensorsEnd - numTensorsStart > 0) + log("tensor leak:", numTensorsEnd - numTensorsStart); +} +async function warmup(instance, userConfig) { + await check(instance, false); + const t0 = now(); + instance.state = "warmup"; + if (userConfig) + instance.config = mergeDeep(instance.config, userConfig); + if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === "none") { + return empty(); + } + return new Promise(async (resolve) => { + await instance.models.load(); + await runCompile(instance); + const res = await runInference(instance); + const t1 = now(); + if (instance.config.debug) + log("warmup", instance.config.warmup, Math.round(t1 - t0), "ms"); + instance.emit("warmup"); + resolve(res); + }); +} + +// src/human.ts +var _numTensors, _analyzeMemoryLeaks, _checkSanity, _sanity, _loops; +var Human = class { + constructor(userConfig) { + __publicField(this, "version"); + __publicField(this, "config"); + __publicField(this, "result"); + __publicField(this, "state"); + __publicField(this, "process"); + __publicField(this, "tf"); + __publicField(this, "env", env); + __publicField(this, "draw", draw_exports); + __publicField(this, "match", match_exports); + __publicField(this, "models"); + __publicField(this, "events"); + __publicField(this, "faceTriangulation"); + __publicField(this, "faceUVMap"); + __publicField(this, "performance"); + __privateAdd(this, _numTensors, void 0); + __privateAdd(this, _analyzeMemoryLeaks, void 0); + __privateAdd(this, _checkSanity, void 0); + __publicField(this, "analyze", (...msg) => { + if (!__privateGet(this, _analyzeMemoryLeaks)) + return; + const currentTensors = this.tf.engine().state.numTensors; + const previousTensors = __privateGet(this, _numTensors); + __privateSet(this, _numTensors, currentTensors); + const leaked = currentTensors - previousTensors; + if (leaked !== 0) + log(...msg, leaked); + }); + __privateAdd(this, _sanity, (input) => { + if (!__privateGet(this, _checkSanity)) + return null; + if (!input) + return "input is not defined"; + if (this.env.node && !(input instanceof tf38.Tensor)) + return "input must be a tensor"; + try { + this.tf.getBackend(); + } catch (e) { + return "backend not loaded"; + } + return null; + }); + __publicField(this, "webcam", new WebCam()); + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) + this.events.dispatchEvent(new Event(event)); + }); + __privateAdd(this, _loops, {}); + const tfVersion = (tf38.version.tfjs || tf38.version_core).replace(/-(.*)/, ""); + config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; + config.modelBasePath = env.browser ? "../models/" : "file://models/"; + this.version = version2; + Object.defineProperty(this, "version", { value: version2 }); + this.config = JSON.parse(JSON.stringify(config)); + Object.seal(this.config); + this.config.cacheModels = typeof indexedDB !== "undefined"; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + setModelLoadOptions(this.config); + this.tf = tf38; + this.state = "idle"; + __privateSet(this, _numTensors, 0); + __privateSet(this, _analyzeMemoryLeaks, false); + __privateSet(this, _checkSanity, false); + this.performance = {}; + this.events = typeof EventTarget !== "undefined" ? new EventTarget() : void 0; + this.models = new Models(this); + init2(); + this.result = empty(); + this.process = { tensor: null, canvas: null }; + this.faceTriangulation = triangulation; + this.faceUVMap = uvmap; + validateModel(this, null, ""); + this.emit("create"); + if (this.config.debug || this.env.browser) + log(`version: ${this.version}`); + if (this.config.debug) + log(`tfjs version: ${this.tf.version["tfjs-core"]}`); + const envTemp = JSON.parse(JSON.stringify(this.env)); + delete envTemp.kernels; + delete envTemp.initial; + delete envTemp.perfadd; + if (this.config.debug) + log("environment:", envTemp); + } + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) + this.config = mergeDeep(this.config, userConfig); + return msgs; + } + now() { + return now(); + } + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + async segmentation(input, userConfig) { + var _a, _b, _c; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (!this.config.segmentation.enabled) + return null; + const processed = await process2(input, this.config); + if (!processed.tensor) + return null; + let tensor6 = null; + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) + tensor6 = await predict20(processed.tensor, this.config); + if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) + tensor6 = await predict16(processed.tensor, this.config); + if ((_c = this.config.segmentation.modelPath) == null ? void 0 : _c.includes("selfie")) + tensor6 = await predict21(processed.tensor, this.config); + tf38.dispose(processed.tensor); + return tensor6; + } + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + async load(userConfig) { + this.state = "load"; + const timeStamp = now(); + const count2 = Object.values(this.models.models).filter((model23) => model23).length; + if (userConfig) + this.config = mergeDeep(this.config, userConfig); + if (this.env.initial) { + if (!await check(this, false)) + log("error: backend check failed"); + await tf38.ready(); + if (this.env.browser) { + if (this.config.debug) + log("configuration:", this.config); + if (this.config.debug) + log("tf flags:", this.tf.ENV.flags); + } + } + await this.models.load(this); + if (this.env.initial && this.config.debug) + log("tf engine state:", this.tf.engine().state.numBytes, "bytes", this.tf.engine().state.numTensors, "tensors"); + this.env.initial = false; + const loaded = Object.values(this.models.models).filter((model23) => model23).length; + if (loaded !== count2) { + this.models.validate(); + this.emit("load"); + } + const current = Math.trunc(now() - timeStamp); + if (current > (this.performance.loadModels || 0)) + this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current; + } + next(result = this.result) { + return calc2(result, this.config); + } + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + async profile(input, userConfig) { + const profile = await this.tf.profile(() => this.detect(input, userConfig)); + const kernels = {}; + let total = 0; + for (const kernel of profile.kernels) { + const ms = Number(kernel.kernelTimeMs) || 0; + if (kernels[kernel.name]) + kernels[kernel.name] += ms; + else + kernels[kernel.name] = ms; + total += ms; + } + const kernelArr = []; + Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1], perc: 0 })); + for (const kernel of kernelArr) { + kernel.perc = Math.round(1e3 * kernel.time / total) / 1e3; + kernel.time = Math.round(1e3 * kernel.time) / 1e3; + } + kernelArr.sort((a, b) => b.time - a.time); + kernelArr.length = 20; + return kernelArr; + } + async detect(input, userConfig) { + this.state = "detect"; + return new Promise(async (resolve) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u; + this.state = "config"; + let timeStamp; + this.config = mergeDeep(this.config, userConfig); + this.state = "check"; + const error = __privateGet(this, _sanity).call(this, input); + if (error) { + log(error, input); + this.emit("error"); + resolve(empty(error)); + } + const timeStart = now(); + await this.load(); + timeStamp = now(); + this.state = "image"; + const img = await process2(input, this.config); + this.process = img; + this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Get Image:"); + if (!img.tensor) { + if (this.config.debug) + log("could not convert input to tensor"); + this.emit("error"); + resolve(empty("could not convert input to tensor")); + return; + } + this.emit("image"); + timeStamp = now(); + this.config.skipAllowed = await skip(this.config, img.tensor); + this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; + if (!this.performance.totalFrames) + this.performance.totalFrames = 0; + if (!this.performance.cachedFrames) + this.performance.cachedFrames = 0; + this.performance.totalFrames++; + if (this.config.skipAllowed) + this.performance.cachedFrames++; + this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + this.analyze("Check Changed:"); + let faceRes = []; + let bodyRes = []; + let handRes = []; + let objectRes = []; + this.state = "detect:face"; + if (this.config.async) { + faceRes = this.config.face.enabled ? detectFace(this, img.tensor) : []; + if (this.performance.face) + delete this.performance.face; + } else { + timeStamp = now(); + faceRes = this.config.face.enabled ? await detectFace(this, img.tensor) : []; + this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) + faceRes = await faceRes; + this.analyze("Start Body:"); + this.state = "detect:body"; + const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet")) + bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; + else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) + bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; + else if ((_c = this.config.body.modelPath) == null ? void 0 : _c.includes("efficientpose")) + bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; + else if ((_d = this.config.body.modelPath) == null ? void 0 : _d.includes("movenet")) + bodyRes = this.config.body.enabled ? predict17(img.tensor, bodyConfig) : []; + if (this.performance.body) + delete this.performance.body; + } else { + timeStamp = now(); + if ((_e = this.config.body.modelPath) == null ? void 0 : _e.includes("posenet")) + bodyRes = this.config.body.enabled ? await predict19(img.tensor, bodyConfig) : []; + else if ((_f = this.config.body.modelPath) == null ? void 0 : _f.includes("blazepose")) + bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; + else if ((_g = this.config.body.modelPath) == null ? void 0 : _g.includes("efficientpose")) + bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; + else if ((_h = this.config.body.modelPath) == null ? void 0 : _h.includes("movenet")) + bodyRes = this.config.body.enabled ? await predict17(img.tensor, bodyConfig) : []; + this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Body:"); + this.analyze("Start Hand:"); + this.state = "detect:hand"; + const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * faceRes.length : 1 } }) : this.config; + if (this.config.async) { + if ((_j = (_i = this.config.hand.detector) == null ? void 0 : _i.modelPath) == null ? void 0 : _j.includes("handdetect")) + handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; + else if ((_l = (_k = this.config.hand.detector) == null ? void 0 : _k.modelPath) == null ? void 0 : _l.includes("handtrack")) + handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; + if (this.performance.hand) + delete this.performance.hand; + } else { + timeStamp = now(); + if ((_n = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n.includes("handdetect")) + handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; + else if ((_p = (_o = this.config.hand.detector) == null ? void 0 : _o.modelPath) == null ? void 0 : _p.includes("handtrack")) + handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; + this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Hand:"); + this.analyze("Start Object:"); + this.state = "detect:object"; + if (this.config.async) { + if ((_q = this.config.object.modelPath) == null ? void 0 : _q.includes("nanodet")) + objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; + else if ((_r = this.config.object.modelPath) == null ? void 0 : _r.includes("centernet")) + objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; + if (this.performance.object) + delete this.performance.object; + } else { + timeStamp = now(); + if ((_s = this.config.object.modelPath) == null ? void 0 : _s.includes("nanodet")) + objectRes = this.config.object.enabled ? await predict18(img.tensor, this.config) : []; + else if ((_t = this.config.object.modelPath) == null ? void 0 : _t.includes("centernet")) + objectRes = this.config.object.enabled ? await predict2(img.tensor, this.config) : []; + this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + } + this.analyze("End Object:"); + this.state = "detect:await"; + if (this.config.async) + [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]); + this.state = "detect:gesture"; + let gestureRes = []; + if (this.config.gesture.enabled) { + timeStamp = now(); + gestureRes = [...face2(faceRes), ...body2(bodyRes), ...hand2(handRes), ...iris2(faceRes)]; + if (!this.config.async) + this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); + else if (this.performance.gesture) + delete this.performance.gesture; + } + this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart); + const shape = ((_u = this.process.tensor) == null ? void 0 : _u.shape) || [0, 0, 0, 0]; + this.result = { + face: faceRes, + body: bodyRes, + hand: handRes, + gesture: gestureRes, + object: objectRes, + performance: this.performance, + canvas: this.process.canvas, + timestamp: Date.now(), + error: null, + width: shape[2], + height: shape[1], + get persons() { + return join2(faceRes, bodyRes, handRes, gestureRes, shape); + } + }; + tf38.dispose(img.tensor); + this.emit("detect"); + this.state = "idle"; + resolve(this.result); + }); + } + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + async video(element, run = true, delay = 0) { + if (run) { + if (!__privateGet(this, _loops)[element.id]) { + if (this.config.debug) + log("video start", element.id); + __privateGet(this, _loops)[element.id] = true; + } + if (!element.paused && __privateGet(this, _loops)[element.id] && element.readyState >= 2) + await this.detect(element); + if (delay > 0) + await this.sleep(delay); + if (__privateGet(this, _loops)[element.id]) + requestAnimationFrame(() => this.video(element, run, delay)); + } else { + if (this.config.debug) + log("video stop", element.id); + __privateGet(this, _loops)[element.id] = false; + } + } +}; +_numTensors = new WeakMap(); +_analyzeMemoryLeaks = new WeakMap(); +_checkSanity = new WeakMap(); +_sanity = new WeakMap(); +_loops = new WeakMap(); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + Env, + Human, + defaults, + draw, + empty, + env, + match, + models +}); diff --git a/dist/tfjs.esm.js b/dist/tfjs.esm.js index 8ef8f368..63964587 100644 --- a/dist/tfjs.esm.js +++ b/dist/tfjs.esm.js @@ -4,57 +4,57 @@ author: ' */ -var QV=Object.create;var fb=Object.defineProperty;var ZV=Object.getOwnPropertyDescriptor;var JV=Object.getOwnPropertyNames;var ez=Object.getPrototypeOf,tz=Object.prototype.hasOwnProperty;var Em=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Be=(r,e)=>{for(var t in e)fb(r,t,{get:e[t],enumerable:!0})},rz=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of JV(e))!tz.call(r,n)&&n!==t&&fb(r,n,{get:()=>e[n],enumerable:!(o=ZV(e,n))||o.enumerable});return r};var rp=(r,e,t)=>(t=r!=null?QV(ez(r)):{},rz(e||!r||!r.__esModule?fb(t,"default",{value:r,enumerable:!0}):t,r));var _0=Kt((Vne,N0)=>{N0.exports=wt;var Oo=null;try{Oo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function wt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}wt.prototype.__isLong__;Object.defineProperty(wt.prototype,"__isLong__",{value:!0});function Br(r){return(r&&r.__isLong__)===!0}wt.isLong=Br;var y0={},b0={};function eu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=b0[r],o)?o:(t=St(r,(r|0)<0?-1:0,!0),n&&(b0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=y0[r],o)?o:(t=St(r,r<0?-1:0,!1),n&&(y0[r]=t),t))}wt.fromInt=eu;function Mo(r,e){if(isNaN(r))return e?Ji:Lo;if(e){if(r<0)return Ji;if(r>=S0)return T0}else{if(r<=-I0)return Lr;if(r+1>=I0)return k0}return r<0?Mo(-r,e).neg():St(r%Dp|0,r/Dp|0,e)}wt.fromNumber=Mo;function St(r,e,t){return new wt(r,e,t)}wt.fromBits=St;var Wm=Math.pow;function _b(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return Lo;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return _b(r.substring(1),e,t).neg();for(var n=Mo(Wm(t,8)),s=Lo,a=0;a>>0:this.low};ce.toNumber=function(){return this.unsigned?(this.high>>>0)*Dp+(this.low>>>0):this.high*Dp+(this.low>>>0)};ce.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c="0"+c;i=""+c+i}};ce.getHighBits=function(){return this.high};ce.getHighBitsUnsigned=function(){return this.high>>>0};ce.getLowBits=function(){return this.low};ce.getLowBitsUnsigned=function(){return this.low>>>0};ce.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Lr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&(e&1<=0};ce.isOdd=function(){return(this.low&1)===1};ce.isEven=function(){return(this.low&1)===0};ce.equals=function(e){return Br(e)||(e=ts(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};ce.eq=ce.equals;ce.notEquals=function(e){return!this.eq(e)};ce.neq=ce.notEquals;ce.ne=ce.notEquals;ce.lessThan=function(e){return this.comp(e)<0};ce.lt=ce.lessThan;ce.lessThanOrEqual=function(e){return this.comp(e)<=0};ce.lte=ce.lessThanOrEqual;ce.le=ce.lessThanOrEqual;ce.greaterThan=function(e){return this.comp(e)>0};ce.gt=ce.greaterThan;ce.greaterThanOrEqual=function(e){return this.comp(e)>=0};ce.gte=ce.greaterThanOrEqual;ce.ge=ce.greaterThanOrEqual;ce.compare=function(e){if(Br(e)||(e=ts(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};ce.comp=ce.compare;ce.negate=function(){return!this.unsigned&&this.eq(Lr)?Lr:this.not().add(Fp)};ce.neg=ce.negate;ce.add=function(e){Br(e)||(e=ts(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,f=0;return f+=s+u,m+=f>>>16,f&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,St(m<<16|f,c<<16|l,this.unsigned)};ce.subtract=function(e){return Br(e)||(e=ts(e)),this.add(e.neg())};ce.sub=ce.subtract;ce.multiply=function(e){if(this.isZero())return Lo;if(Br(e)||(e=ts(e)),Oo){var t=Oo.mul(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}if(e.isZero())return Lo;if(this.eq(Lr))return e.isOdd()?Lr:Lo;if(e.eq(Lr))return this.isOdd()?Lr:Lo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(w0)&&e.lt(w0))return Mo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,f=0,d=0;return d+=a*c,f+=d>>>16,d&=65535,f+=s*c,m+=f>>>16,f&=65535,f+=a*u,m+=f>>>16,f&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,St(f<<16|d,l<<16|m,this.unsigned)};ce.mul=ce.multiply;ce.divide=function(e){if(Br(e)||(e=ts(e)),e.isZero())throw Error("division by zero");if(Oo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?Oo.div_u:Oo.div_s)(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ji:Lo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Ji;if(e.gt(this.shru(1)))return v0;s=Ji}else{if(this.eq(Lr)){if(e.eq(Fp)||e.eq(Nb))return Lr;if(e.eq(Lr))return Fp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(Lo)?e.isNegative()?Fp:Nb:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Lr))return this.unsigned?Ji:Lo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=Lo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Wm(2,i-48),u=Mo(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=Mo(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Fp),s=s.add(u),n=n.sub(c)}return s};ce.div=ce.divide;ce.modulo=function(e){if(Br(e)||(e=ts(e)),Oo){var t=(this.unsigned?Oo.rem_u:Oo.rem_s)(this.low,this.high,e.low,e.high);return St(t,Oo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};ce.mod=ce.modulo;ce.rem=ce.modulo;ce.not=function(){return St(~this.low,~this.high,this.unsigned)};ce.and=function(e){return Br(e)||(e=ts(e)),St(this.low&e.low,this.high&e.high,this.unsigned)};ce.or=function(e){return Br(e)||(e=ts(e)),St(this.low|e.low,this.high|e.high,this.unsigned)};ce.xor=function(e){return Br(e)||(e=ts(e)),St(this.low^e.low,this.high^e.high,this.unsigned)};ce.shiftLeft=function(e){return Br(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?St(this.low<>>32-e,this.unsigned):St(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):St(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};ce.shr=ce.shiftRight;ce.shiftRightUnsigned=function(e){if(Br(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return St(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?St(t,0,this.unsigned):St(t>>>e-32,0,this.unsigned)};ce.shru=ce.shiftRightUnsigned;ce.shr_u=ce.shiftRightUnsigned;ce.toSigned=function(){return this.unsigned?St(this.low,this.high,!1):this};ce.toUnsigned=function(){return this.unsigned?this:St(this.low,this.high,!0)};ce.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};ce.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};ce.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};wt.fromBytes=function(e,t,o){return o?wt.fromBytesLE(e,t):wt.fromBytesBE(e,t)};wt.fromBytesLE=function(e,t){return new wt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};wt.fromBytesBE=function(e,t){return new wt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var pv=Kt(()=>{});var cv=Kt(()=>{});var l1=Kt((c1,hC)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(" "),p.s1=u(" "),p.s2=u(" "),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c=="object"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(c1,typeof hC=="object"&&hC,typeof define=="function"&&define)});var f1=Kt((m1,gC)=>{(function(r,e,t){function o(a){var i=this,p="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(m1,typeof gC=="object"&&gC,typeof define=="function"&&define)});var h1=Kt((d1,xC)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(d1,typeof xC=="object"&&xC,typeof define=="function"&&define)});var x1=Kt((g1,yC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,f;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(g1,typeof yC=="object"&&yC,typeof define=="function"&&define)});var b1=Kt((y1,bC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,f;return i.w=u=u+1640531527|0,f=c[l+34&127],m=c[l=l+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[l]=f^m,i.i=l,f+(u^u>>>16)|0};function p(u,c){var l,m,f,d,h,g=[],y=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,y=Math.max(y,c.length)),f=0,d=-32;d>>15,m^=m<<4,m^=m>>>13,d>=0&&(h=h+1640531527|0,l=g[d&127]^=m+h,f=l==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,d=4*128;d>0;--d)m=g[f+34&127],l=g[f=f+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[f]=m^l;u.w=h,u.X=g,u.i=f}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(y1,typeof bC=="object"&&bC,typeof define=="function"&&define)});var I1=Kt((C1,CC)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.b,l=i.c,m=i.d,f=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(l+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(C1,typeof CC=="object"&&CC,typeof define=="function"&&define)});var w1=Kt(()=>{});var v1=Kt((S1,Of)=>{(function(r,e,t){var o=256,n=6,s=52,a="random",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,w,k){var _=[];w=w==!0?{entropy:!0}:w||{};var E=g(h(w.entropy?[C,b(e)]:C==null?y():C,3),_),R=new f(_),A=function(){for(var D=R.g(n),O=i,M=0;D=u;)D/=2,O/=2,M>>>=1;return(D+M)/O};return A.int32=function(){return R.g(4)|0},A.quick=function(){return R.g(4)/4294967296},A.double=A,g(b(R.S),e),(w.pass||k||function(D,O,M,L){return L&&(L.S&&d(L,R),D.state=function(){return d(R,{})}),M?(t[a]=D,O):D})(A,E,"global"in w?w.global:this==t,w.state)}function f(C){var w,k=C.length,_=this,E=0,R=_.i=_.j=0,A=_.S=[];for(k||(C=[k++]);E{var F4=l1(),D4=f1(),P4=h1(),O4=x1(),M4=b1(),L4=I1(),fu=v1();fu.alea=F4;fu.xor128=D4;fu.xorwow=P4;fu.xorshift7=O4;fu.xor4096=M4;fu.tychei=L4;k1.exports=fu});var Vl=Kt(()=>{});var Qw=Kt(()=>{});var D3=Kt(()=>{});var P3=Kt(()=>{});var O3=Kt(()=>{});var M3=Kt((Fg,Jw)=>{var Zw=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};function t(){return Q.buffer!=De&&Tt(Q.buffer),ft}function o(){return Q.buffer!=De&&Tt(Q.buffer),at}function n(){return Q.buffer!=De&&Tt(Q.buffer),dt}function s(){return Q.buffer!=De&&Tt(Q.buffer),Fr}function a(){return Q.buffer!=De&&Tt(Q.buffer),Pt}function i(){return Q.buffer!=De&&Tt(Q.buffer),jr}function p(){return Q.buffer!=De&&Tt(Q.buffer),er}var u=typeof e!="undefined"?e:{},c,l;u.ready=new Promise(function(F,B){c=F,l=B});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var f=Object.assign({},u),d=[],h="./this.program",g=(F,B)=>{throw B},y=typeof window=="object",b=typeof importScripts=="function",C=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",w=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var E,R,A,D;function O(F){if(F instanceof Di)return;q("exiting due to exception: "+F)}if(C){b?k=Vl().dirname(k)+"/":k=__dirname+"/";var M,L;typeof Em=="function"&&(M=Qw(),L=Vl()),E=(B,re)=>(B=L.normalize(B),M.readFileSync(B,re?void 0:"utf8")),A=B=>{var re=E(B,!0);return re.buffer||(re=new Uint8Array(re)),re},R=(B,re,le)=>{B=L.normalize(B),M.readFile(B,function(Te,Ze){Te?le(Te):re(Ze.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),d=process.argv.slice(2),process.on("uncaughtException",function(B){if(!(B instanceof Di))throw B}),process.on("unhandledRejection",function(B){throw B}),g=(B,re)=>{if(tn())throw process.exitCode=B,re;O(re),process.exit(B)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=D3()}catch(B){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),B}global.Worker=F.Worker}else(y||b)&&(b?k=self.location.href:typeof document!="undefined"&&document.currentScript&&(k=document.currentScript.src),typeof r!="undefined"&&r&&(k=r),k.indexOf("blob:")!==0?k=k.substr(0,k.replace(/[?#].*/,"").lastIndexOf("/")+1):k="",C||(E=F=>{var B=new XMLHttpRequest;return B.open("GET",F,!1),B.send(null),B.responseText},b&&(A=F=>{var B=new XMLHttpRequest;return B.open("GET",F,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),R=(F,B,re)=>{var le=new XMLHttpRequest;le.open("GET",F,!0),le.responseType="arraybuffer",le.onload=()=>{if(le.status==200||le.status==0&&le.response){B(le.response);return}re()},le.onerror=re,le.send(null)}),D=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=P3().performance);var W=console.log.bind(console),V=console.warn.bind(console);C&&(W=F=>M.writeSync(1,F+` +var yV=Object.create;var ub=Object.defineProperty;var bV=Object.getOwnPropertyDescriptor;var CV=Object.getOwnPropertyNames;var SV=Object.getPrototypeOf,wV=Object.prototype.hasOwnProperty;var bm=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var qt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ue=(r,e)=>{for(var t in e)ub(r,t,{get:e[t],enumerable:!0})},IV=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of CV(e))!wV.call(r,n)&&n!==t&&ub(r,n,{get:()=>e[n],enumerable:!(o=bV(e,n))||o.enumerable});return r};var rp=(r,e,t)=>(t=r!=null?yV(SV(r)):{},IV(e||!r||!r.__esModule?ub(t,"default",{value:r,enumerable:!0}):t,r));var rv=qt((Pne,tv)=>{tv.exports=It;var xo=null;try{xo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function It(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}It.prototype.__isLong__;Object.defineProperty(It.prototype,"__isLong__",{value:!0});function Lr(r){return(r&&r.__isLong__)===!0}It.isLong=Lr;var qI={},KI={};function eu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=KI[r],o)?o:(t=vt(r,(r|0)<0?-1:0,!0),n&&(KI[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=qI[r],o)?o:(t=vt(r,r<0?-1:0,!1),n&&(qI[r]=t),t))}It.fromInt=eu;function yo(r,e){if(isNaN(r))return e?Ji:bo;if(e){if(r<0)return Ji;if(r>=QI)return ev}else{if(r<=-XI)return Mr;if(r+1>=XI)return JI}return r<0?yo(-r,e).neg():vt(r%Ep|0,r/Ep|0,e)}It.fromNumber=yo;function vt(r,e,t){return new It(r,e,t)}It.fromBits=vt;var Rm=Math.pow;function Ib(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return bo;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return Ib(r.substring(1),e,t).neg();for(var n=yo(Rm(t,8)),s=bo,a=0;a>>0:this.low};me.toNumber=function(){return this.unsigned?(this.high>>>0)*Ep+(this.low>>>0):this.high*Ep+(this.low>>>0)};me.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c="0"+c;i=""+c+i}};me.getHighBits=function(){return this.high};me.getHighBitsUnsigned=function(){return this.high>>>0};me.getLowBits=function(){return this.low};me.getLowBitsUnsigned=function(){return this.low>>>0};me.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Mr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&(e&1<=0};me.isOdd=function(){return(this.low&1)===1};me.isEven=function(){return(this.low&1)===0};me.equals=function(e){return Lr(e)||(e=ts(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};me.eq=me.equals;me.notEquals=function(e){return!this.eq(e)};me.neq=me.notEquals;me.ne=me.notEquals;me.lessThan=function(e){return this.comp(e)<0};me.lt=me.lessThan;me.lessThanOrEqual=function(e){return this.comp(e)<=0};me.lte=me.lessThanOrEqual;me.le=me.lessThanOrEqual;me.greaterThan=function(e){return this.comp(e)>0};me.gt=me.greaterThan;me.greaterThanOrEqual=function(e){return this.comp(e)>=0};me.gte=me.greaterThanOrEqual;me.ge=me.greaterThanOrEqual;me.compare=function(e){if(Lr(e)||(e=ts(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};me.comp=me.compare;me.negate=function(){return!this.unsigned&&this.eq(Mr)?Mr:this.not().add(_p)};me.neg=me.negate;me.add=function(e){Lr(e)||(e=ts(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,vt(m<<16|d,c<<16|l,this.unsigned)};me.subtract=function(e){return Lr(e)||(e=ts(e)),this.add(e.neg())};me.sub=me.subtract;me.multiply=function(e){if(this.isZero())return bo;if(Lr(e)||(e=ts(e)),xo){var t=xo.mul(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}if(e.isZero())return bo;if(this.eq(Mr))return e.isOdd()?Mr:bo;if(e.eq(Mr))return this.isOdd()?Mr:bo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(YI)&&e.lt(YI))return yo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,d=0,f=0;return f+=a*c,d+=f>>>16,f&=65535,d+=s*c,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,vt(d<<16|f,l<<16|m,this.unsigned)};me.mul=me.multiply;me.divide=function(e){if(Lr(e)||(e=ts(e)),e.isZero())throw Error("division by zero");if(xo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?xo.div_u:xo.div_s)(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ji:bo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Ji;if(e.gt(this.shru(1)))return ZI;s=Ji}else{if(this.eq(Mr)){if(e.eq(_p)||e.eq(wb))return Mr;if(e.eq(Mr))return _p;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(bo)?e.isNegative()?_p:wb:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Mr))return this.unsigned?Ji:bo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=bo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Rm(2,i-48),u=yo(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=yo(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=_p),s=s.add(u),n=n.sub(c)}return s};me.div=me.divide;me.modulo=function(e){if(Lr(e)||(e=ts(e)),xo){var t=(this.unsigned?xo.rem_u:xo.rem_s)(this.low,this.high,e.low,e.high);return vt(t,xo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};me.mod=me.modulo;me.rem=me.modulo;me.not=function(){return vt(~this.low,~this.high,this.unsigned)};me.and=function(e){return Lr(e)||(e=ts(e)),vt(this.low&e.low,this.high&e.high,this.unsigned)};me.or=function(e){return Lr(e)||(e=ts(e)),vt(this.low|e.low,this.high|e.high,this.unsigned)};me.xor=function(e){return Lr(e)||(e=ts(e)),vt(this.low^e.low,this.high^e.high,this.unsigned)};me.shiftLeft=function(e){return Lr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?vt(this.low<>>32-e,this.unsigned):vt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):vt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};me.shr=me.shiftRight;me.shiftRightUnsigned=function(e){if(Lr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return vt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?vt(t,0,this.unsigned):vt(t>>>e-32,0,this.unsigned)};me.shru=me.shiftRightUnsigned;me.shr_u=me.shiftRightUnsigned;me.toSigned=function(){return this.unsigned?vt(this.low,this.high,!1):this};me.toUnsigned=function(){return this.unsigned?this:vt(this.low,this.high,!0)};me.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};me.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};me.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};It.fromBytes=function(e,t,o){return o?It.fromBytesLE(e,t):It.fromBytesBE(e,t)};It.fromBytesLE=function(e,t){return new It(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};It.fromBytesBE=function(e,t){return new It(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Mv=qt(()=>{});var Lv=qt(()=>{});var Bk=qt((Lk,cC)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(" "),p.s1=u(" "),p.s2=u(" "),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c=="object"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(Lk,typeof cC=="object"&&cC,typeof define=="function"&&define)});var zk=qt((Vk,lC)=>{(function(r,e,t){function o(a){var i=this,p="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(Vk,typeof lC=="object"&&lC,typeof define=="function"&&define)});var Uk=qt((Wk,mC)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(Wk,typeof mC=="object"&&mC,typeof define=="function"&&define)});var Hk=qt((Gk,dC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,d;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,d=[];if(c===(c|0))m=d[0]=c;else for(c=""+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(Gk,typeof dC=="object"&&dC,typeof define=="function"&&define)});var Kk=qt((qk,fC)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,d;return i.w=u=u+1640531527|0,d=c[l+34&127],m=c[l=l+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=c[l]=d^m,i.i=l,d+(u^u>>>16)|0};function p(u,c){var l,m,d,f,h,g=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,l=g[f&127]^=m+h,d=l==0?d+1:0);for(d>=128&&(g[(c&&c.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],l=g[d=d+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[d]=m^l;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(qk,typeof fC=="object"&&fC,typeof define=="function"&&define)});var Xk=qt((jk,hC)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.b,l=i.c,m=i.d,d=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^d,d=d-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^d,i.a=d-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(jk,typeof hC=="object"&&hC,typeof define=="function"&&define)});var Yk=qt(()=>{});var Zk=qt((Qk,kd)=>{(function(r,e,t){var o=256,n=6,s=52,a="random",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,w,k){var _=[];w=w==!0?{entropy:!0}:w||{};var $=g(h(w.entropy?[C,b(e)]:C==null?x():C,3),_),A=new d(_),R=function(){for(var D=A.g(n),P=i,M=0;D=u;)D/=2,P/=2,M>>>=1;return(D+M)/P};return R.int32=function(){return A.g(4)|0},R.quick=function(){return A.g(4)/4294967296},R.double=R,g(b(A.S),e),(w.pass||k||function(D,P,M,L){return L&&(L.S&&f(L,A),D.state=function(){return f(A,{})}),M?(t[a]=D,P):D})(R,$,"global"in w?w.global:this==t,w.state)}function d(C){var w,k=C.length,_=this,$=0,A=_.i=_.j=0,R=_.S=[];for(k||(C=[k++]);${var eG=Bk(),tG=zk(),rG=Uk(),oG=Hk(),nG=Kk(),sG=Xk(),du=Zk();du.alea=eG;du.xor128=tG;du.xorwow=rG;du.xorshift7=oG;du.xor4096=nG;du.tychei=sG;Jk.exports=du});var Rl=qt(()=>{});var qw=qt(()=>{});var l3=qt(()=>{});var m3=qt(()=>{});var d3=qt(()=>{});var f3=qt((wg,jw)=>{var Kw=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};function t(){return J.buffer!=Oe&&Nt(J.buffer),mt}function o(){return J.buffer!=Oe&&Nt(J.buffer),at}function n(){return J.buffer!=Oe&&Nt(J.buffer),ft}function s(){return J.buffer!=Oe&&Nt(J.buffer),Fr}function a(){return J.buffer!=Oe&&Nt(J.buffer),Ot}function i(){return J.buffer!=Oe&&Nt(J.buffer),Kr}function p(){return J.buffer!=Oe&&Nt(J.buffer),er}var u=typeof e!="undefined"?e:{},c,l;u.ready=new Promise(function(F,B){c=F,l=B});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var d=Object.assign({},u),f=[],h="./this.program",g=(F,B)=>{throw B},x=typeof window=="object",b=typeof importScripts=="function",C=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",w=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,A,R,D;function P(F){if(F instanceof Hi)return;q("exiting due to exception: "+F)}if(C){b?k=Rl().dirname(k)+"/":k=__dirname+"/";var M,L;typeof bm=="function"&&(M=qw(),L=Rl()),$=(B,ne)=>(B=L.normalize(B),M.readFileSync(B,ne?void 0:"utf8")),R=B=>{var ne=$(B,!0);return ne.buffer||(ne=new Uint8Array(ne)),ne},A=(B,ne,fe)=>{B=L.normalize(B),M.readFile(B,function(Te,Ze){Te?fe(Te):ne(Ze.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(B){if(!(B instanceof Hi))throw B}),process.on("unhandledRejection",function(B){throw B}),g=(B,ne)=>{if(Fo())throw process.exitCode=B,ne;P(ne),process.exit(B)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=l3()}catch(B){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),B}global.Worker=F.Worker}else(x||b)&&(b?k=self.location.href:typeof document!="undefined"&&document.currentScript&&(k=document.currentScript.src),typeof r!="undefined"&&r&&(k=r),k.indexOf("blob:")!==0?k=k.substr(0,k.replace(/[?#].*/,"").lastIndexOf("/")+1):k="",C||($=F=>{var B=new XMLHttpRequest;return B.open("GET",F,!1),B.send(null),B.responseText},b&&(R=F=>{var B=new XMLHttpRequest;return B.open("GET",F,!1),B.responseType="arraybuffer",B.send(null),new Uint8Array(B.response)}),A=(F,B,ne)=>{var fe=new XMLHttpRequest;fe.open("GET",F,!0),fe.responseType="arraybuffer",fe.onload=()=>{if(fe.status==200||fe.status==0&&fe.response){B(fe.response);return}ne()},fe.onerror=ne,fe.send(null)}),D=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=m3().performance);var W=console.log.bind(console),V=console.warn.bind(console);C&&(W=F=>M.writeSync(1,F+` `),V=F=>M.writeSync(2,F+` -`));var G=u.print||W,q=u.printErr||V;Object.assign(u,f),f=null,u.arguments&&(d=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var H=4,j=Atomics.load,Y=Atomics.store,Z=Atomics.compareExchange,ee;u.wasmBinary&&(ee=u.wasmBinary);var X=u.noExitRuntime||!0;typeof WebAssembly!="object"&&Xu("no native wasm support detected");var Q,se,ie=!1,de;function Ie(F,B){F||Xu(B)}var Se=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Ee(F,B,re){for(var le=B+re,Te=B;F[Te]&&!(Te>=le);)++Te;if(Te-B>16&&F.buffer&&Se)return Se.decode(F.buffer instanceof SharedArrayBuffer?F.slice(B,Te):F.subarray(B,Te));for(var Ze="";B>10,56320|Zr&1023)}}return Ze}function Me(F,B){return F?Ee(o(),F,B):""}function st(F,B,re,le){if(!(le>0))return 0;for(var Te=re,Ze=re+le-1,$e=0;$e=55296&&Pe<=57343){var Wt=F.charCodeAt(++$e);Pe=65536+((Pe&1023)<<10)|Wt&1023}if(Pe<=127){if(re>=Ze)break;B[re++]=Pe}else if(Pe<=2047){if(re+1>=Ze)break;B[re++]=192|Pe>>6,B[re++]=128|Pe&63}else if(Pe<=65535){if(re+2>=Ze)break;B[re++]=224|Pe>>12,B[re++]=128|Pe>>6&63,B[re++]=128|Pe&63}else{if(re+3>=Ze)break;B[re++]=240|Pe>>18,B[re++]=128|Pe>>12&63,B[re++]=128|Pe>>6&63,B[re++]=128|Pe&63}}return B[re]=0,re-Te}function pt(F,B,re){return st(F,o(),B,re)}var De,ft,at,dt,It,Fr,Pt,jr,er;w&&(De=u.buffer);function Tt(F){De=F,u.HEAP8=ft=new Int8Array(F),u.HEAP16=dt=new Int16Array(F),u.HEAP32=Fr=new Int32Array(F),u.HEAPU8=at=new Uint8Array(F),u.HEAPU16=It=new Uint16Array(F),u.HEAPU32=Pt=new Uint32Array(F),u.HEAPF32=jr=new Float32Array(F),u.HEAPF64=er=new Float64Array(F)}var tr=u.INITIAL_MEMORY||16777216;if(w)Q=u.wasmMemory,De=u.buffer;else if(u.wasmMemory)Q=u.wasmMemory;else if(Q=new WebAssembly.Memory({initial:tr/65536,maximum:32768,shared:!0}),!(Q.buffer instanceof SharedArrayBuffer))throw q("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"),C&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Q&&(De=Q.buffer),tr=De.byteLength,Tt(De);var rr,Xr=[],Yr=[],pr=[],Qs=!1;function tn(){return X}function Ua(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)Lc(u.preRun.shift());Uc(Xr)}function jt(){Qs=!0,!w&&Uc(Yr)}function Zs(){if(!w){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)KS(u.postRun.shift());Uc(pr)}}function Lc(F){Xr.unshift(F)}function Bc(F){Yr.unshift(F)}function KS(F){pr.unshift(F)}var Ga=0,ju=null,Js=null;function jS(F){Ga++,u.monitorRunDependencies&&u.monitorRunDependencies(Ga)}function XS(F){if(Ga--,u.monitorRunDependencies&&u.monitorRunDependencies(Ga),Ga==0&&(ju!==null&&(clearInterval(ju),ju=null),Js)){var B=Js;Js=null,B()}}function Xu(F){w?postMessage({cmd:"onAbort",arg:F}):u.onAbort&&u.onAbort(F),F="Aborted("+F+")",q(F),ie=!0,de=1,F+=". Build with -sASSERTIONS for more info.";var B=new WebAssembly.RuntimeError(F);throw l(B),B}var $x="data:application/octet-stream;base64,";function nm(F){return F.startsWith($x)}function Vc(F){return F.startsWith("file://")}var dr;dr="tfjs-backend-wasm-threaded-simd.wasm",nm(dr)||(dr=_(dr));function sm(F){try{if(F==dr&&ee)return new Uint8Array(ee);if(A)return A(F);throw"both async and sync fetching of the wasm failed"}catch(B){Xu(B)}}function Rx(){if(!ee&&(y||b)){if(typeof fetch=="function"&&!Vc(dr))return fetch(dr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+dr+"'";return F.arrayBuffer()}).catch(function(){return sm(dr)});if(R)return new Promise(function(F,B){R(dr,function(re){F(new Uint8Array(re))},B)})}return Promise.resolve().then(function(){return sm(dr)})}function Ax(){var F={env:xm,wasi_snapshot_preview1:xm};function B($e,Pe){var Wt=$e.exports;if(u.asm=Wt,Wx(u.asm._emscripten_tls_init),rr=u.asm.__indirect_function_table,Bc(u.asm.__wasm_call_ctors),se=Pe,!w){var Zr=Fe.unusedWorkers.length;Fe.unusedWorkers.forEach(function(ta){Fe.loadWasmModuleToWorker(ta,function(){--Zr||XS("wasm-instantiate")})})}}w||jS("wasm-instantiate");function re($e){B($e.instance,$e.module)}function le($e){return Rx().then(function(Pe){return WebAssembly.instantiate(Pe,F)}).then(function(Pe){return Pe}).then($e,function(Pe){q("failed to asynchronously prepare wasm: "+Pe),Xu(Pe)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!nm(dr)&&!Vc(dr)&&!C&&typeof fetch=="function"?fetch(dr,{credentials:"same-origin"}).then(function($e){var Pe=WebAssembly.instantiateStreaming($e,F);return Pe.then(re,function(Wt){return q("wasm streaming compile failed: "+Wt),q("falling back to ArrayBuffer instantiation"),le(re)})}):le(re)}if(u.instantiateWasm)try{var Ze=u.instantiateWasm(F,B);return Ze}catch($e){q("Module.instantiateWasm callback failed with error: "+$e),l($e)}return Te().catch(l),{}}var Fx,YS,Dx={};function Di(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function Px(F){var B=Fe.pthreads[F];delete Fe.pthreads[F],B.terminate(),cb(F),Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(B),1),B.pthread_ptr=0}function Ox(F){var B=Fe.pthreads[F];B.postMessage({cmd:"cancel"})}function zc(F){var B=Fe.pthreads[F];Ie(B),Fe.returnWorkerToPool(B)}function am(F){var B=Fe.getNewWorker();if(!B)return 6;Fe.runningWorkers.push(B),Fe.pthreads[F.pthread_ptr]=B,B.pthread_ptr=F.pthread_ptr;var re={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return B.runPthread=()=>{re.time=performance.now(),B.postMessage(re,F.transferList)},B.loaded&&(B.runPthread(),delete B.runPthread),0}var im={varargs:void 0,get:function(){im.varargs+=4;var F=s()[im.varargs-4>>2];return F},getStr:function(F){var B=Me(F);return B}};function Wc(F){if(w)return Ha(1,1,F);de=F,tn()||(Fe.terminateAllThreads(),u.onExit&&u.onExit(F),ie=!0),g(F,new Di(F))}function QS(F,B){if(de=F,!B&&w)throw pm(F),"unwind";Wc(F)}var um=QS;function Mx(F){if(F instanceof Di||F=="unwind")return de;g(1,F)}var Fe={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){w?Fe.initWorker():Fe.initMainThread()},initMainThread:function(){for(var F=8;F--;)Fe.allocateUnusedWorker()},initWorker:function(){X=!1},setExitStatus:function(F){de=F},terminateAllThreads:function(){for(var F of Object.values(Fe.pthreads))Fe.returnWorkerToPool(F);for(var F of Fe.unusedWorkers)F.terminate();Fe.unusedWorkers=[]},returnWorkerToPool:function(F){var B=F.pthread_ptr;delete Fe.pthreads[B],Fe.unusedWorkers.push(F),Fe.runningWorkers.splice(Fe.runningWorkers.indexOf(F),1),F.pthread_ptr=0,cb(B)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Fe.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,B){F.onmessage=re=>{var le=re.data,Te=le.cmd;if(F.pthread_ptr&&(Fe.currentProxiedOperationCallerThread=F.pthread_ptr),le.targetThread&&le.targetThread!=Sm()){var Ze=Fe.pthreads[le.targetThread];Ze?Ze.postMessage(le,le.transferList):q('Internal error! Worker sent a message "'+Te+'" to target pthread '+le.targetThread+", but that thread no longer exists!"),Fe.currentProxiedOperationCallerThread=void 0;return}Te==="processProxyingQueue"?Gc(le.queue):Te==="spawnThread"?am(le):Te==="cleanupThread"?zc(le.thread):Te==="killThread"?Px(le.thread):Te==="cancelThread"?Ox(le.thread):Te==="loaded"?(F.loaded=!0,B&&B(F),F.runPthread&&(F.runPthread(),delete F.runPthread)):Te==="print"?G("Thread "+le.threadId+": "+le.text):Te==="printErr"?q("Thread "+le.threadId+": "+le.text):Te==="alert"?alert("Thread "+le.threadId+": "+le.text):le.target==="setimmediate"?F.postMessage(le):Te==="onAbort"?u.onAbort&&u.onAbort(le.arg):Te&&q("worker sent an unknown command "+Te),Fe.currentProxiedOperationCallerThread=void 0},F.onerror=re=>{var le="worker sent an error!";throw q(le+" "+re.filename+":"+re.lineno+": "+re.message),re},C&&(F.on("message",function(re){F.onmessage({data:re})}),F.on("error",function(re){F.onerror(re)}),F.on("detachedExit",function(){})),F.postMessage({cmd:"load",urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:Q,wasmModule:se})},allocateUnusedWorker:function(){var F=_("tfjs-backend-wasm-threaded-simd.worker.js");Fe.unusedWorkers.push(new Worker(F))},getNewWorker:function(){return Fe.unusedWorkers.length==0&&(Fe.allocateUnusedWorker(),Fe.loadWasmModuleToWorker(Fe.unusedWorkers[0])),Fe.unusedWorkers.pop()}};u.PThread=Fe;function Uc(F){for(;F.length>0;)F.shift()(u)}function Lx(F){var B=lb(),re=F();return vm(B),re}function ZS(F){return F}function JS(F){var B=/\b_Z[\w\d_]+/g;return F.replace(B,function(re){var le=re;return re===le?re:le+" ["+re+"]"})}function Bx(){var F=Sm(),B=s()[F+44>>2],re=s()[F+48>>2],le=B-re;a0(B,le),vm(B)}u.establishStackSpace=Bx;function pm(F){if(w)return Ha(2,0,F);try{um(F)}catch(B){Mx(B)}}var Yu=[];function Vx(F){var B=Yu[F];return B||(F>=Yu.length&&(Yu.length=F+1),Yu[F]=B=rr.get(F)),B}function zx(F,B){var re=Vx(F)(B);tn()?Fe.setExitStatus(re):s0(re)}u.invokeEntryPoint=zx;function e0(){var F=new Error;if(!F.stack){try{throw new Error}catch(B){F=B}if(!F.stack)return"(no stack trace available)"}return F.stack.toString()}function Wx(F){Fe.tlsInitFunctions.push(F)}function Ux(F,B){t().set(F,B)}function Gx(F){r0(F,!b,1,!y),Fe.threadInitTLS()}function Hx(F){w?postMessage({cmd:"cleanupThread",thread:F}):zc(F)}function cm(F,B,re,le){return w?Ha(3,1,F,B,re,le):lm(F,B,re,le)}function lm(F,B,re,le){if(typeof SharedArrayBuffer=="undefined")return q("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Te=[],Ze=0;if(w&&(Te.length===0||Ze))return cm(F,B,re,le);if(Ze)return Ze;var $e={startRoutine:re,pthread_ptr:F,arg:le,transferList:Te};return w?($e.cmd="spawnThread",postMessage($e,Te),0):am($e)}function qx(){return 2097152}var Kx=!0;function jx(){return Kx}function Gc(F){Atomics.store(s(),F>>2,1),Sm()&&n0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=Gc;function Xx(F,B,re,le){if(F==B)setTimeout(()=>Gc(le));else if(w)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:le});else{var Te=Fe.pthreads[F];if(!Te)return;Te.postMessage({cmd:"processProxyingQueue",queue:le})}return 1}function Yx(F,B,re){return-1}function Qx(){Xu("")}function Pi(F){Pi.shown||(Pi.shown={}),Pi.shown[F]||(Pi.shown[F]=1,C&&(F="warning: "+F),q(F))}function Zx(){C||b||Pi("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Jx(){return Date.now()}function mm(){return 2147483648}function ey(){return mm()}var Qu;C?Qu=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:w?Qu=()=>performance.now()-u.__performance_now_clock_drift:Qu=()=>performance.now();function ty(F,B,re){o().copyWithin(F,B,B+re)}function ry(){return C?O3().cpus().length:navigator.hardwareConcurrency}function Ha(F,B){var re=arguments.length-2,le=arguments;return Lx(()=>{for(var Te=re,Ze=km(Te*8),$e=Ze>>3,Pe=0;Pe>3,Te=0;Te>>16),Tt(Q.buffer),1}catch(B){}}function sy(F){var B=o().length;if(F=F>>>0,F<=B)return!1;var re=mm();if(F>re)return!1;let le=(Wt,Zr)=>Wt+(Zr-Wt%Zr)%Zr;for(var Te=1;Te<=4;Te*=2){var Ze=B*(1+.2/Te);Ze=Math.min(Ze,F+100663296);var $e=Math.min(re,le(Math.max(F,Ze),65536)),Pe=ny($e);if(Pe)return!0}return!1}function ay(){throw"unwind"}function fm(F){return w?Ha(4,1,F):52}function dm(F,B,re,le,Te){return w?Ha(5,1,F,B,re,le,Te):70}var iy=[null,[],[]];function uy(F,B){var re=iy[F];B===0||B===10?((F===1?G:q)(Ee(re,0)),re.length=0):re.push(B)}function hm(F,B,re,le){if(w)return Ha(6,1,F,B,re,le);for(var Te=0,Ze=0;Ze>2],Pe=a()[B+4>>2];B+=8;for(var Wt=0;Wt>2]=Te,0}function gm(F){var B=u["_"+F];return B}function py(F,B,re,le,Te){var Ze={string:Dr=>{var tp=0;if(Dr!=null&&Dr!==0){var p0=(Dr.length<<2)+1;tp=km(p0),pt(Dr,tp,p0)}return tp},array:Dr=>{var tp=km(Dr.length);return Ux(Dr,tp),tp}};function $e(Dr){return B==="string"?Me(Dr):B==="boolean"?Boolean(Dr):Dr}var Pe=gm(F),Wt=[],Zr=0;if(le)for(var ta=0;ta$e==="number"||$e==="boolean"),Ze=B!=="string";return Ze&&Te&&!le?gm(F):function(){return py(F,B,re,arguments,le)}}Fe.init();var ly=[null,Wc,pm,cm,fm,dm,hm],xm={__emscripten_init_main_thread_js:Gx,__emscripten_thread_cleanup:Hx,__pthread_create_js:lm,_emscripten_default_pthread_stack_size:qx,_emscripten_get_now_is_monotonic:jx,_emscripten_notify_task_queue:Xx,_emscripten_set_offscreencanvas_size:Yx,abort:Qx,emscripten_check_blocking_allowed:Zx,emscripten_date_now:Jx,emscripten_get_heap_max:ey,emscripten_get_now:Qu,emscripten_memcpy_big:ty,emscripten_num_logical_cores:ry,emscripten_receive_on_main_thread_js:oy,emscripten_resize_heap:sy,emscripten_unwind_to_js_event_loop:ay,exit:um,fd_close:fm,fd_seek:dm,fd_write:hm,memory:Q||u.wasmMemory},t0=Ax(),my=u.___wasm_call_ctors=function(){return(my=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},fy=u._init=function(){return(fy=u._init=u.asm.init).apply(null,arguments)},dy=u._init_with_threads_count=function(){return(dy=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},hy=u._get_threads_count=function(){return(hy=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},gy=u._register_tensor=function(){return(gy=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},xy=u._dispose_data=function(){return(xy=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},yy=u._dispose=function(){return(yy=u._dispose=u.asm.dispose).apply(null,arguments)},by=u._Abs=function(){return(by=u._Abs=u.asm.Abs).apply(null,arguments)},Cy=u._Add=function(){return(Cy=u._Add=u.asm.Add).apply(null,arguments)},Iy=u._AddN=function(){return(Iy=u._AddN=u.asm.AddN).apply(null,arguments)},wy=u._All=function(){return(wy=u._All=u.asm.All).apply(null,arguments)},Sy=u._Any=function(){return(Sy=u._Any=u.asm.Any).apply(null,arguments)},vy=u._ArgMax=function(){return(vy=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},ky=u._AvgPool=function(){return(ky=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},Ty=u._BatchMatMul=function(){return(Ty=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Ny=u._Ceil=function(){return(Ny=u._Ceil=u.asm.Ceil).apply(null,arguments)},_y=u._ClipByValue=function(){return(_y=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ey=u._Conv2D=function(){return(Ey=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},$y=u._Conv2DBackpropInput=function(){return($y=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Ry=u._Cos=function(){return(Ry=u._Cos=u.asm.Cos).apply(null,arguments)},Ay=u._Cosh=function(){return(Ay=u._Cosh=u.asm.Cosh).apply(null,arguments)},Fy=u._CropAndResize=function(){return(Fy=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Dy=u._Cumprod=function(){return(Dy=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Py=u._Cumsum=function(){return(Py=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Oy=u._DepthToSpace=function(){return(Oy=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},My=u._DepthwiseConv2dNative=function(){return(My=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Ly=u._Elu=function(){return(Ly=u._Elu=u.asm.Elu).apply(null,arguments)},By=u._Equal=function(){return(By=u._Equal=u.asm.Equal).apply(null,arguments)},Vy=u._Exp=function(){return(Vy=u._Exp=u.asm.Exp).apply(null,arguments)},zy=u._FlipLeftRight=function(){return(zy=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},Wy=u._Floor=function(){return(Wy=u._Floor=u.asm.Floor).apply(null,arguments)},Uy=u._FloorDiv=function(){return(Uy=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},Gy=u._FusedBatchNorm=function(){return(Gy=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},Hy=u._FusedConv2D=function(){return(Hy=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},qy=u._FusedDepthwiseConv2D=function(){return(qy=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},Ky=u._Gather=function(){return(Ky=u._Gather=u.asm.Gather).apply(null,arguments)},jy=u._GatherNd=function(){return(jy=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},Xy=u._Greater=function(){return(Xy=u._Greater=u.asm.Greater).apply(null,arguments)},Yy=u._GreaterEqual=function(){return(Yy=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},Qy=u._LeakyRelu=function(){return(Qy=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},Zy=u._Less=function(){return(Zy=u._Less=u.asm.Less).apply(null,arguments)},Jy=u._LessEqual=function(){return(Jy=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},eb=u._Log=function(){return(eb=u._Log=u.asm.Log).apply(null,arguments)},tb=u._LogicalAnd=function(){return(tb=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},rb=u._LogicalNot=function(){return(rb=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},ob=u._LogicalOr=function(){return(ob=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},nb=u._LogicalXor=function(){return(nb=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},sb=u._Max=function(){return(sb=u._Max=u.asm.Max).apply(null,arguments)},ym=u._MaxPool=function(){return(ym=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},bm=u._Maximum=function(){return(bm=u._Maximum=u.asm.Maximum).apply(null,arguments)},qc=u._Mean=function(){return(qc=u._Mean=u.asm.Mean).apply(null,arguments)},ab=u._Min=function(){return(ab=u._Min=u.asm.Min).apply(null,arguments)},ib=u._Minimum=function(){return(ib=u._Minimum=u.asm.Minimum).apply(null,arguments)},Zu=u._MirrorPad=function(){return(Zu=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},Cm=u._Multiply=function(){return(Cm=u._Multiply=u.asm.Multiply).apply(null,arguments)},Ju=u._Neg=function(){return(Ju=u._Neg=u.asm.Neg).apply(null,arguments)},ep=u._NonMaxSuppressionV3=function(){return(ep=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},ub=u._NonMaxSuppressionV4=function(){return(ub=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},U=u._NonMaxSuppressionV5=function(){return(U=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},te=u._NotEqual=function(){return(te=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},ve=u._OneHot=function(){return(ve=u._OneHot=u.asm.OneHot).apply(null,arguments)},Ke=u._PadV2=function(){return(Ke=u._PadV2=u.asm.PadV2).apply(null,arguments)},Nt=u._Pow=function(){return(Nt=u._Pow=u.asm.Pow).apply(null,arguments)},_t=u._Prelu=function(){return(_t=u._Prelu=u.asm.Prelu).apply(null,arguments)},He=u._Prod=function(){return(He=u._Prod=u.asm.Prod).apply(null,arguments)},ze=u._RealDiv=function(){return(ze=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},zt=u._Relu=function(){return(zt=u._Relu=u.asm.Relu).apply(null,arguments)},Qr=u._Relu6=function(){return(Qr=u._Relu6=u.asm.Relu6).apply(null,arguments)},ea=u._ResizeBilinear=function(){return(ea=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Im=u._ResizeNearestNeighbor=function(){return(Im=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},Kc=u._Reverse=function(){return(Kc=u._Reverse=u.asm.Reverse).apply(null,arguments)},pb=u._RotateWithOffset=function(){return(pb=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},hr=u._Round=function(){return(hr=u._Round=u.asm.Round).apply(null,arguments)},qa=u._Rsqrt=function(){return(qa=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},wm=u._ScatterNd=function(){return(wm=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},yV=u._SelectV2=function(){return(yV=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},bV=u._Sigmoid=function(){return(bV=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},CV=u._Sin=function(){return(CV=u._Sin=u.asm.Sin).apply(null,arguments)},IV=u._Softmax=function(){return(IV=u._Softmax=u.asm.Softmax).apply(null,arguments)},wV=u._SparseFillEmptyRows=function(){return(wV=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},SV=u._SparseReshape=function(){return(SV=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},vV=u._SparseSegmentReduction=function(){return(vV=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},kV=u._Sqrt=function(){return(kV=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},TV=u._Square=function(){return(TV=u._Square=u.asm.Square).apply(null,arguments)},NV=u._SquaredDifference=function(){return(NV=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},_V=u._Step=function(){return(_V=u._Step=u.asm.Step).apply(null,arguments)},EV=u._StridedSlice=function(){return(EV=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},$V=u._Sub=function(){return($V=u._Sub=u.asm.Sub).apply(null,arguments)},RV=u._Sum=function(){return(RV=u._Sum=u.asm.Sum).apply(null,arguments)},AV=u._Tan=function(){return(AV=u._Tan=u.asm.Tan).apply(null,arguments)},FV=u._Tanh=function(){return(FV=u._Tanh=u.asm.Tanh).apply(null,arguments)},DV=u._Tile=function(){return(DV=u._Tile=u.asm.Tile).apply(null,arguments)},PV=u._TopK=function(){return(PV=u._TopK=u.asm.TopK).apply(null,arguments)},OV=u._Transform=function(){return(OV=u._Transform=u.asm.Transform).apply(null,arguments)},MV=u._Transpose=function(){return(MV=u._Transpose=u.asm.Transpose).apply(null,arguments)},LV=u.__FusedMatMul=function(){return(LV=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},BV=u._malloc=function(){return(BV=u._malloc=u.asm.malloc).apply(null,arguments)},VV=u._free=function(){return(VV=u._free=u.asm.free).apply(null,arguments)},zV=u.__emscripten_tls_init=function(){return(zV=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Sm=u._pthread_self=function(){return(Sm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},WV=u.___errno_location=function(){return(WV=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},r0=u.__emscripten_thread_init=function(){return(r0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},UV=u.__emscripten_thread_crashed=function(){return(UV=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},GV=u._emscripten_main_thread_process_queued_calls=function(){return(GV=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},HV=u._emscripten_main_browser_thread_id=function(){return(HV=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},o0=u._emscripten_run_in_main_runtime_thread_js=function(){return(o0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},qV=u._emscripten_dispatch_to_thread_=function(){return(qV=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},n0=u.__emscripten_proxy_execute_task_queue=function(){return(n0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},cb=u.__emscripten_thread_free_data=function(){return(cb=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},s0=u.__emscripten_thread_exit=function(){return(s0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},a0=u._emscripten_stack_set_limits=function(){return(a0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},lb=u.stackSave=function(){return(lb=u.stackSave=u.asm.stackSave).apply(null,arguments)},vm=u.stackRestore=function(){return(vm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},km=u.stackAlloc=function(){return(km=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},KV=u.dynCall_iijjiiii=function(){return(KV=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},jV=u.dynCall_jiji=function(){return(jV=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=tn,u.wasmMemory=Q,u.cwrap=cy,u.ExitStatus=Di,u.PThread=Fe;var Tm;Js=function F(){Tm||i0(),Tm||(Js=F)};function i0(F){if(F=F||d,Ga>0)return;if(w){c(u),jt(),postMessage({cmd:"loaded"});return}if(Ua(),Ga>0)return;function B(){Tm||(Tm=!0,u.calledRun=!0,!ie&&(jt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Zs()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),B()},1)):B()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();i0();var Nm;m&&(Nm={uncaughtException:process.listeners("uncaughtException").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var _m;if(typeof WasmBackendModule!="undefined")_m=WasmBackendModule;else if(typeof e!="undefined")_m=e;else throw new Error("Could not find wasm module in post.js");if(Nm){var XV=_m._dispose;_m._dispose=function(){XV(),Nm.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Nm.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return e.ready}})();typeof Fg=="object"&&typeof Jw=="object"?Jw.exports=Zw:typeof define=="function"&&define.amd?define([],function(){return Zw}):typeof Fg=="object"&&(Fg.WasmBackendModuleThreadedSimd=Zw)});var B3=Kt((ukt,L3)=>{L3.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" -");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`});var V3=Kt((Dg,tS)=>{var eS=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!="undefined"?e:{},o,n;t.ready=new Promise(function(U,te){o=U,n=te});var s;typeof process!="undefined"&&process.listeners&&(s={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var a=Object.assign({},t),i=[],p="./this.program",u=(U,te)=>{throw te},c=typeof window=="object",l=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f="";function d(U){return t.locateFile?t.locateFile(U,f):f+U}var h,g,y,b;function C(U){if(U instanceof ju)return;E("exiting due to exception: "+U)}if(m){l?f=Vl().dirname(f)+"/":f=__dirname+"/";var w,k;typeof Em=="function"&&(w=Qw(),k=Vl()),h=(U,te)=>(U=k.normalize(U),w.readFileSync(U,te?void 0:"utf8")),y=U=>{var te=h(U,!0);return te.buffer||(te=new Uint8Array(te)),te},g=(U,te,ve)=>{U=k.normalize(U),w.readFile(U,function(Ke,Nt){Ke?ve(Ke):te(Nt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(U){if(!(U instanceof ju))throw U}),process.on("unhandledRejection",function(U){throw U}),u=(U,te)=>{if(at())throw process.exitCode=U,te;C(te),process.exit(U)},t.inspect=function(){return"[Emscripten Module object]"}}else(c||l)&&(l?f=self.location.href:typeof document!="undefined"&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f.indexOf("blob:")!==0?f=f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):f="",h=U=>{var te=new XMLHttpRequest;return te.open("GET",U,!1),te.send(null),te.responseText},l&&(y=U=>{var te=new XMLHttpRequest;return te.open("GET",U,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),g=(U,te,ve)=>{var Ke=new XMLHttpRequest;Ke.open("GET",U,!0),Ke.responseType="arraybuffer",Ke.onload=()=>{if(Ke.status==200||Ke.status==0&&Ke.response){te(Ke.response);return}ve()},Ke.onerror=ve,Ke.send(null)},b=U=>document.title=U);var _=t.print||console.log.bind(console),E=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,A;t.wasmBinary&&(A=t.wasmBinary);var D=t.noExitRuntime||!0;typeof WebAssembly!="object"&&pr("no native wasm support detected");var O,M=!1,L;function W(U,te){U||pr(te)}var V=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function G(U,te,ve){for(var Ke=te+ve,Nt=te;U[Nt]&&!(Nt>=Ke);)++Nt;if(Nt-te>16&&U.buffer&&V)return V.decode(U.subarray(te,Nt));for(var _t="";te>10,56320|Qr&1023)}}return _t}function q(U,te){return U?G(ee,U,te):""}function H(U,te,ve,Ke){if(!(Ke>0))return 0;for(var Nt=ve,_t=ve+Ke-1,He=0;He=55296&&ze<=57343){var zt=U.charCodeAt(++He);ze=65536+((ze&1023)<<10)|zt&1023}if(ze<=127){if(ve>=_t)break;te[ve++]=ze}else if(ze<=2047){if(ve+1>=_t)break;te[ve++]=192|ze>>6,te[ve++]=128|ze&63}else if(ze<=65535){if(ve+2>=_t)break;te[ve++]=224|ze>>12,te[ve++]=128|ze>>6&63,te[ve++]=128|ze&63}else{if(ve+3>=_t)break;te[ve++]=240|ze>>18,te[ve++]=128|ze>>12&63,te[ve++]=128|ze>>6&63,te[ve++]=128|ze&63}}return te[ve]=0,ve-Nt}function j(U,te,ve){return H(U,ee,te,ve)}var Y,Z,ee,X,Q,se,ie,de,Ie;function Se(U){Y=U,t.HEAP8=Z=new Int8Array(U),t.HEAP16=X=new Int16Array(U),t.HEAP32=se=new Int32Array(U),t.HEAPU8=ee=new Uint8Array(U),t.HEAPU16=Q=new Uint16Array(U),t.HEAPU32=ie=new Uint32Array(U),t.HEAPF32=de=new Float32Array(U),t.HEAPF64=Ie=new Float64Array(U)}var Ee=t.INITIAL_MEMORY||16777216,Me,st=[],pt=[],De=[],ft=!1;function at(){return D}function dt(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Pt(t.preRun.shift());Js(st)}function It(){ft=!0,Js(pt)}function Fr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)er(t.postRun.shift());Js(De)}function Pt(U){st.unshift(U)}function jr(U){pt.unshift(U)}function er(U){De.unshift(U)}var Tt=0,tr=null,rr=null;function Xr(U){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function Yr(U){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(tr!==null&&(clearInterval(tr),tr=null),rr)){var te=rr;rr=null,te()}}function pr(U){t.onAbort&&t.onAbort(U),U="Aborted("+U+")",E(U),M=!0,L=1,U+=". Build with -sASSERTIONS for more info.";var te=new WebAssembly.RuntimeError(U);throw n(te),te}var Qs="data:application/octet-stream;base64,";function tn(U){return U.startsWith(Qs)}function Ua(U){return U.startsWith("file://")}var jt;jt="tfjs-backend-wasm.wasm",tn(jt)||(jt=d(jt));function Zs(U){try{if(U==jt&&A)return new Uint8Array(A);if(y)return y(U);throw"both async and sync fetching of the wasm failed"}catch(te){pr(te)}}function Lc(){if(!A&&(c||l)){if(typeof fetch=="function"&&!Ua(jt))return fetch(jt,{credentials:"same-origin"}).then(function(U){if(!U.ok)throw"failed to load wasm binary file at '"+jt+"'";return U.arrayBuffer()}).catch(function(){return Zs(jt)});if(g)return new Promise(function(U,te){g(jt,function(ve){U(new Uint8Array(ve))},te)})}return Promise.resolve().then(function(){return Zs(jt)})}function Bc(){var U={env:Wc,wasi_snapshot_preview1:Wc};function te(He,ze){var zt=He.exports;t.asm=zt,O=t.asm.memory,Se(O.buffer),Me=t.asm.__indirect_function_table,jr(t.asm.__wasm_call_ctors),Yr("wasm-instantiate")}Xr("wasm-instantiate");function ve(He){te(He.instance)}function Ke(He){return Lc().then(function(ze){return WebAssembly.instantiate(ze,U)}).then(function(ze){return ze}).then(He,function(ze){E("failed to asynchronously prepare wasm: "+ze),pr(ze)})}function Nt(){return!A&&typeof WebAssembly.instantiateStreaming=="function"&&!tn(jt)&&!Ua(jt)&&!m&&typeof fetch=="function"?fetch(jt,{credentials:"same-origin"}).then(function(He){var ze=WebAssembly.instantiateStreaming(He,U);return ze.then(ve,function(zt){return E("wasm streaming compile failed: "+zt),E("falling back to ArrayBuffer instantiation"),Ke(ve)})}):Ke(ve)}if(t.instantiateWasm)try{var _t=t.instantiateWasm(U,te);return _t}catch(He){E("Module.instantiateWasm callback failed with error: "+He),n(He)}return Nt().catch(n),{}}var KS,Ga;function ju(U){this.name="ExitStatus",this.message="Program terminated with exit("+U+")",this.status=U}function Js(U){for(;U.length>0;)U.shift()(t)}function jS(U){return U}function XS(U){var te=/\b_Z[\w\d_]+/g;return U.replace(te,function(ve){var Ke=ve;return ve===Ke?ve:Ke+" ["+ve+"]"})}function Xu(){var U=new Error;if(!U.stack){try{throw new Error}catch(te){U=te}if(!U.stack)return"(no stack trace available)"}return U.stack.toString()}function $x(U,te){Z.set(U,te)}function nm(){pr("")}function Vc(){return 2147483648}function dr(){return Vc()}function sm(U,te,ve){ee.copyWithin(U,te,te+ve)}function Rx(U){try{return O.grow(U-Y.byteLength+65535>>>16),Se(O.buffer),1}catch(te){}}function Ax(U){var te=ee.length;U=U>>>0;var ve=Vc();if(U>ve)return!1;let Ke=(zt,Qr)=>zt+(Qr-zt%Qr)%Qr;for(var Nt=1;Nt<=4;Nt*=2){var _t=te*(1+.2/Nt);_t=Math.min(_t,U+100663296);var He=Math.min(ve,Ke(Math.max(U,_t),65536)),ze=Rx(He);if(ze)return!0}return!1}var Fx={varargs:void 0,get:function(){Fx.varargs+=4;var U=se[Fx.varargs-4>>2];return U},getStr:function(U){var te=q(U);return te}};function YS(U){return 52}function Dx(U,te,ve,Ke,Nt){return 70}var Di=[null,[],[]];function Px(U,te){var ve=Di[U];te===0||te===10?((U===1?_:E)(G(ve,0)),ve.length=0):ve.push(te)}function Ox(U,te,ve,Ke){for(var Nt=0,_t=0;_t>2],ze=ie[te+4>>2];te+=8;for(var zt=0;zt>2]=Nt,0}function zc(U){var te=t["_"+U];return te}function am(U,te,ve,Ke,Nt){var _t={string:hr=>{var qa=0;if(hr!=null&&hr!==0){var wm=(hr.length<<2)+1;qa=qc(wm),j(hr,qa,wm)}return qa},array:hr=>{var qa=qc(hr.length);return $x(hr,qa),qa}};function He(hr){return te==="string"?q(hr):te==="boolean"?Boolean(hr):hr}var ze=zc(U),zt=[],Qr=0;if(Ke)for(var ea=0;eaHe==="number"||He==="boolean"),_t=te!=="string";return _t&&Nt&&!Ke?zc(U):function(){return am(U,te,ve,arguments,Ke)}}var Wc={abort:nm,emscripten_get_heap_max:dr,emscripten_memcpy_big:sm,emscripten_resize_heap:Ax,fd_close:YS,fd_seek:Dx,fd_write:Ox},QS=Bc(),um=t.___wasm_call_ctors=function(){return(um=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Mx=t._init=function(){return(Mx=t._init=t.asm.init).apply(null,arguments)},Fe=t._init_with_threads_count=function(){return(Fe=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Uc=t._get_threads_count=function(){return(Uc=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Lx=t._register_tensor=function(){return(Lx=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},ZS=t._dispose_data=function(){return(ZS=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},JS=t._dispose=function(){return(JS=t._dispose=t.asm.dispose).apply(null,arguments)},Bx=t._Abs=function(){return(Bx=t._Abs=t.asm.Abs).apply(null,arguments)},pm=t._Add=function(){return(pm=t._Add=t.asm.Add).apply(null,arguments)},Yu=t._AddN=function(){return(Yu=t._AddN=t.asm.AddN).apply(null,arguments)},Vx=t._All=function(){return(Vx=t._All=t.asm.All).apply(null,arguments)},zx=t._Any=function(){return(zx=t._Any=t.asm.Any).apply(null,arguments)},e0=t._ArgMax=function(){return(e0=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Wx=t._AvgPool=function(){return(Wx=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Ux=t._BatchMatMul=function(){return(Ux=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Gx=t._Ceil=function(){return(Gx=t._Ceil=t.asm.Ceil).apply(null,arguments)},Hx=t._ClipByValue=function(){return(Hx=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},cm=t._Conv2D=function(){return(cm=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},lm=t._Conv2DBackpropInput=function(){return(lm=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},qx=t._Cos=function(){return(qx=t._Cos=t.asm.Cos).apply(null,arguments)},Kx=t._Cosh=function(){return(Kx=t._Cosh=t.asm.Cosh).apply(null,arguments)},jx=t._CropAndResize=function(){return(jx=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Gc=t._Cumprod=function(){return(Gc=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Xx=t._Cumsum=function(){return(Xx=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Yx=t._DepthToSpace=function(){return(Yx=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Qx=t._DepthwiseConv2dNative=function(){return(Qx=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Pi=t._Elu=function(){return(Pi=t._Elu=t.asm.Elu).apply(null,arguments)},Zx=t._Equal=function(){return(Zx=t._Equal=t.asm.Equal).apply(null,arguments)},Jx=t._Exp=function(){return(Jx=t._Exp=t.asm.Exp).apply(null,arguments)},mm=t._FlipLeftRight=function(){return(mm=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ey=t._Floor=function(){return(ey=t._Floor=t.asm.Floor).apply(null,arguments)},Qu=t._FloorDiv=function(){return(Qu=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ty=t._FusedBatchNorm=function(){return(ty=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},ry=t._FusedConv2D=function(){return(ry=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Ha=t._FusedDepthwiseConv2D=function(){return(Ha=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},Hc=t._Gather=function(){return(Hc=t._Gather=t.asm.Gather).apply(null,arguments)},oy=t._GatherNd=function(){return(oy=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},ny=t._Greater=function(){return(ny=t._Greater=t.asm.Greater).apply(null,arguments)},sy=t._GreaterEqual=function(){return(sy=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},ay=t._LeakyRelu=function(){return(ay=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},fm=t._Less=function(){return(fm=t._Less=t.asm.Less).apply(null,arguments)},dm=t._LessEqual=function(){return(dm=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},iy=t._Log=function(){return(iy=t._Log=t.asm.Log).apply(null,arguments)},uy=t._LogicalAnd=function(){return(uy=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},hm=t._LogicalNot=function(){return(hm=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},gm=t._LogicalOr=function(){return(gm=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},py=t._LogicalXor=function(){return(py=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},cy=t._Max=function(){return(cy=t._Max=t.asm.Max).apply(null,arguments)},ly=t._MaxPool=function(){return(ly=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},xm=t._Maximum=function(){return(xm=t._Maximum=t.asm.Maximum).apply(null,arguments)},t0=t._Mean=function(){return(t0=t._Mean=t.asm.Mean).apply(null,arguments)},my=t._Min=function(){return(my=t._Min=t.asm.Min).apply(null,arguments)},fy=t._Minimum=function(){return(fy=t._Minimum=t.asm.Minimum).apply(null,arguments)},dy=t._MirrorPad=function(){return(dy=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},hy=t._Multiply=function(){return(hy=t._Multiply=t.asm.Multiply).apply(null,arguments)},gy=t._Neg=function(){return(gy=t._Neg=t.asm.Neg).apply(null,arguments)},xy=t._NonMaxSuppressionV3=function(){return(xy=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},yy=t._NonMaxSuppressionV4=function(){return(yy=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},by=t._NonMaxSuppressionV5=function(){return(by=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},Cy=t._NotEqual=function(){return(Cy=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Iy=t._OneHot=function(){return(Iy=t._OneHot=t.asm.OneHot).apply(null,arguments)},wy=t._PadV2=function(){return(wy=t._PadV2=t.asm.PadV2).apply(null,arguments)},Sy=t._Pow=function(){return(Sy=t._Pow=t.asm.Pow).apply(null,arguments)},vy=t._Prelu=function(){return(vy=t._Prelu=t.asm.Prelu).apply(null,arguments)},ky=t._Prod=function(){return(ky=t._Prod=t.asm.Prod).apply(null,arguments)},Ty=t._RealDiv=function(){return(Ty=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},Ny=t._Relu=function(){return(Ny=t._Relu=t.asm.Relu).apply(null,arguments)},_y=t._Relu6=function(){return(_y=t._Relu6=t.asm.Relu6).apply(null,arguments)},Ey=t._ResizeBilinear=function(){return(Ey=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},$y=t._ResizeNearestNeighbor=function(){return($y=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},Ry=t._Reverse=function(){return(Ry=t._Reverse=t.asm.Reverse).apply(null,arguments)},Ay=t._RotateWithOffset=function(){return(Ay=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},Fy=t._Round=function(){return(Fy=t._Round=t.asm.Round).apply(null,arguments)},Dy=t._Rsqrt=function(){return(Dy=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},Py=t._ScatterNd=function(){return(Py=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},Oy=t._SelectV2=function(){return(Oy=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},My=t._Sigmoid=function(){return(My=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},Ly=t._Sin=function(){return(Ly=t._Sin=t.asm.Sin).apply(null,arguments)},By=t._Softmax=function(){return(By=t._Softmax=t.asm.Softmax).apply(null,arguments)},Vy=t._SparseFillEmptyRows=function(){return(Vy=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},zy=t._SparseReshape=function(){return(zy=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},Wy=t._SparseSegmentReduction=function(){return(Wy=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},Uy=t._Sqrt=function(){return(Uy=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},Gy=t._Square=function(){return(Gy=t._Square=t.asm.Square).apply(null,arguments)},Hy=t._SquaredDifference=function(){return(Hy=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},qy=t._Step=function(){return(qy=t._Step=t.asm.Step).apply(null,arguments)},Ky=t._StridedSlice=function(){return(Ky=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},jy=t._Sub=function(){return(jy=t._Sub=t.asm.Sub).apply(null,arguments)},Xy=t._Sum=function(){return(Xy=t._Sum=t.asm.Sum).apply(null,arguments)},Yy=t._Tan=function(){return(Yy=t._Tan=t.asm.Tan).apply(null,arguments)},Qy=t._Tanh=function(){return(Qy=t._Tanh=t.asm.Tanh).apply(null,arguments)},Zy=t._Tile=function(){return(Zy=t._Tile=t.asm.Tile).apply(null,arguments)},Jy=t._TopK=function(){return(Jy=t._TopK=t.asm.TopK).apply(null,arguments)},eb=t._Transform=function(){return(eb=t._Transform=t.asm.Transform).apply(null,arguments)},tb=t._Transpose=function(){return(tb=t._Transpose=t.asm.Transpose).apply(null,arguments)},rb=t.__FusedMatMul=function(){return(rb=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},ob=t._malloc=function(){return(ob=t._malloc=t.asm.malloc).apply(null,arguments)},nb=t._free=function(){return(nb=t._free=t.asm.free).apply(null,arguments)},sb=t.___errno_location=function(){return(sb=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},ym=t.stackSave=function(){return(ym=t.stackSave=t.asm.stackSave).apply(null,arguments)},bm=t.stackRestore=function(){return(bm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},qc=t.stackAlloc=function(){return(qc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},ab=t.dynCall_iijjiiii=function(){return(ab=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},ib=t.dynCall_jiji=function(){return(ib=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=im;var Zu;rr=function U(){Zu||Cm(),Zu||(rr=U)};function Cm(U){if(U=U||i,Tt>0||(dt(),Tt>0))return;function te(){Zu||(Zu=!0,t.calledRun=!0,!M&&(It(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Fr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),te()},1)):te()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Cm();var Ju;s&&(Ju={uncaughtException:process.listeners("uncaughtException").filter(function(U){return!s.uncaughtException.indexOf(U)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(U){return!s.unhandledRejection.indexOf(U)>-1})});var ep;if(typeof e!="undefined")ep=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")ep=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ju){var ub=ep._dispose;ep._dispose=function(){ub(),Ju.uncaughtException.forEach(function(U){process.removeListener("uncaughtException",U)}),Ju.unhandledRejection.forEach(function(U){process.removeListener("unhandledRejection",U)})}}return e.ready}})();typeof Dg=="object"&&typeof tS=="object"?tS.exports=eS:typeof define=="function"&&define.amd?define([],function(){return eS}):typeof Dg=="object"&&(Dg.WasmBackendModule=eS)});var rn=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},Jr=class{refCount(e){return Pr("refCount")}incRef(e){return Pr("incRef")}timerAvailable(){return!0}time(e){return Pr("time")}read(e){return Pr("read")}readSync(e){return Pr("readSync")}readToGPU(e,t){return Pr("readToGPU")}numDataIds(){return Pr("numDataIds")}disposeData(e,t){return Pr("disposeData")}write(e,t,o){return Pr("write")}move(e,t,o,n,s){return Pr("move")}createTensorFromTexture(e,t,o){return Pr("createTensorFromTexture")}memory(){return Pr("memory")}floatPrecision(){return Pr("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Pr("dispose")}};function Pr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function c0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,$m(r,e,t)}function oz(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,$m(r,t,o),$m(e,t,o)}function op(r,e,t){return Math.max(r,Math.min(e,t))}function nz(r){return r%2===0?r:r+1}function $m(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function sz(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function eo(r){$(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function on(r,e=[],t=!1){if(e==null&&(e=[]),Array.isArray(r)||Ut(r)&&!t)for(let o=0;o0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function fz(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Ka(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),$(r.every(o=>ra(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function db(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Ka(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function hb(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else throw new Error(`Unknown data type ${r}`);return t}function gb(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else if(r==="string")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function xb(r,e){for(let t=0;te+=t.length),e}function nn(r){return typeof r=="string"||r instanceof String}function l0(r){return typeof r=="boolean"}function m0(r){return typeof r=="number"}function np(r){return Array.isArray(r)?np(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":m0(r)?"float32":nn(r)?"string":l0(r)?"bool":"float32"}function fs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function sp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function f0(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?" for a complex tensor":""}.`);return f0(0,r,e,t)}function jc(r,e){let t=ap(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Oi(r,new Float32Array(t));if(e==="int32")return Oi(r,new Int32Array(t));if(e==="bool")return Oi(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Xc(r){r.forEach(e=>{$(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function gz(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=Iz(n,s)})}};function bz(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(Cz(e,o[0],o[1]),o.join("="))),e}function Cz(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function Iz(r,e){if(e=e.toLowerCase(),e==="true"||e==="false")return e==="true";if(`${+e}`===e)return+e;throw new Error(`Could not parse value flag value ${e} for flag ${r}.`)}function P(){return Cb}var Cb=null;function h0(r){Cb=r}var Ib;function wb(){if(Ib==null){let r;if(typeof window!="undefined")r=window;else if(typeof global!="undefined")r=global;else if(typeof process!="undefined")r=process;else if(typeof self!="undefined")r=self;else throw new Error("Could not find a global object");Ib=r}return Ib}function wz(){let r=wb();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function Zc(r,e){let t=wz();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var sn="Abs",Li="Acos",Bi="Acosh",_r="Add",an="AddN",oa="All",na="Any",un="ArgMax",ja="ArgMin",Vi="Asin",zi="Asinh",Wi="Atan",Ui="Atanh",sa="Atan2",pn="AvgPool",Am="AvgPoolGrad",ip="AvgPool3D",Fm="AvgPool3DGrad",cn="BatchMatMul",hs="BatchToSpaceND",up="Bincount",Tne="BroadcastTo",pp="BroadcastArgs",to="Cast",ro="Ceil",Ro="ClipByValue",aa="Complex",cp="ComplexAbs",gs="Concat",ln="Conv2D",lp="Conv2DBackpropFilter",mn="Conv2DBackpropInput",mp="Conv3D",Dm="Conv3DBackpropFilterV2",fp="Conv3DBackpropInputV2",fn="Cos",dn="Cosh",hn="Cumprod",gn="Cumsum",xn="CropAndResize",dp="DenseBincount",yn="DepthToSpace",bn="DepthwiseConv2dNative",hp="DepthwiseConv2dNativeBackpropFilter",gp="DepthwiseConv2dNativeBackpropInput",xp="Diag",yp="Dilation2D",Sb="Dilation2DBackpropInput",vb="Dilation2DBackpropFilter",Cn="RealDiv",Xa="Einsum",In="Elu",Pm="EluGrad",Gi="Erf",oo="Equal",no="Exp",xs="ExpandDims",wn="Expm1",bp="FFT",ys="Fill",Sn="FlipLeftRight",so="Floor",vn="FloorDiv",kn="FusedBatchNorm",bs="GatherV2",Tn="GatherNd",ao="Greater",io="GreaterEqual",uo="Identity",Cp="IFFT",Ya="Imag",Hi="IsFinite",qi="IsInf",ia="IsNan",Nn="LeakyRelu",po="Less",co="LessEqual",Ip="LinSpace",lo="Log",Ki="Log1p",_n="LogicalAnd",En="LogicalNot",ua="LogicalOr",g0="LogicalXor",Nne="LogSoftmax",_ne="LowerBound",wp="LRN",Om="LRNGrad",$n="Max",mo="Maximum",Rn="MaxPool",Mm="MaxPoolGrad",Sp="MaxPool3D",Lm="MaxPool3DGrad",vp="MaxPoolWithArgmax",An="Mean",Fn="Min",fo="Minimum",Dn="MirrorPad",ji="Mod",kp="Multinomial",ho="Multiply",Pn="Neg",go="NotEqual",On="NonMaxSuppressionV3",pa="NonMaxSuppressionV4",Mn="NonMaxSuppressionV5",Cs="OnesLike",ca="OneHot",Is="Pack",Ln="PadV2",Ene="Pool",Bn="Pow",Vn="Prelu",Ao="Prod",Tp="RaggedGather",Np="RaggedRange",_p="RaggedTensorToTensor",ws="Range",la="Real",ma="Reciprocal",zn="Relu",Ss="Reshape",Wn="ResizeNearestNeighbor",Bm="ResizeNearestNeighborGrad",Un="ResizeBilinear",Vm="ResizeBilinearGrad",Gn="Relu6",fa="Reverse",da="Round",xo="Rsqrt",Hn="ScatterNd",Ep="SearchSorted",vs="Select",Xi="Selu",qn="Slice",Kn="Sin",ha="Sinh",Yi="Sign",yo="Sigmoid",Qi="Softplus",bo="Sqrt",jn="Sum",ks="SpaceToBatchND",Ts="SplitV",Xn="Softmax",Qa="SparseFillEmptyRows",ga="SparseReshape",Za="SparseSegmentMean",Ja="SparseSegmentSum",ei="SparseToDense",Co="SquaredDifference",ti="Square",Yn="StridedSlice",Ns="StringNGrams",ri="StringSplit",oi="StringToHashBucketFast",Io="Sub",xa="Tan",Qn="Tanh",wo="Tile",Zn="TopK",Jn="Transform",Mr="Transpose",$p="Unique",_s="Unpack",Rp="UnsortedSegmentSum",$ne="UpperBound",Es="ZerosLike",$s="Step",Zi="FromPixels",es="RotateWithOffset",Fo="_FusedMatMul",Do="FusedConv2D",Po="FusedDepthwiseConv2D";function Rs(...r){P().getBool("IS_TEST")||P().getBool("PROD")||console.warn(...r)}function Sz(...r){P().getBool("IS_TEST")||P().getBool("PROD")||console.log(...r)}var Ap=Zc("kernelRegistry",()=>new Map),Jc=Zc("gradRegistry",()=>new Map);function el(r,e){let t=Tb(r,e);return Ap.get(t)}function kb(r){return Jc.get(r)}function zm(r){let e=Ap.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&t.push(a)}return t}function ya(r){let{kernelName:e,backendName:t}=r,o=Tb(e,t);Ap.has(o)&&Rs(`The kernel '${e}' for backend '${t}' is already registered`),Ap.set(o,r)}function Pne(r){let{kernelName:e}=r;Jc.has(e)&&P().getBool("DEBUG")&&Rs(`Overriding the gradient for '${e}'`),Jc.set(e,r)}function One(r,e){let t=Tb(r,e);if(!Ap.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);Ap.delete(t)}function Mne(r){if(!Jc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Jc.delete(r)}function Lne(r,e){zm(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ya(n)})}function Tb(r,e){return`${e}_${r}`}var x={};Be(x,{arraysEqual:()=>Or,assert:()=>$,assertNonNegativeIntegerDimensions:()=>Xc,assertNonNull:()=>eo,assertShapesMatch:()=>ht,bytesFromStringArray:()=>bb,bytesPerElement:()=>Rm,checkConversionForErrors:()=>xb,clamp:()=>op,computeStrides:()=>ds,createScalarValue:()=>$z,createShuffledIndices:()=>lz,decodeString:()=>Op,distSquared:()=>iz,encodeString:()=>si,fetch:()=>Az,fingerPrint64:()=>Ez,flatten:()=>on,getArrayFromDType:()=>gb,getTypedArrayFromDType:()=>hb,hasEncodingLoss:()=>dz,hexToLong:()=>tl,indexToLoc:()=>xz,inferDtype:()=>np,inferFromImplicitShape:()=>fz,isBoolean:()=>l0,isFunction:()=>fs,isInt:()=>ra,isNumber:()=>m0,isPromise:()=>Yc,isScalarShape:()=>uz,isString:()=>nn,isTypedArray:()=>Ut,isValidDtype:()=>yb,locToIndex:()=>gz,makeOnesTypedArray:()=>jc,makeZerosNestedTypedArray:()=>hz,makeZerosTypedArray:()=>ap,nearestDivisor:()=>sp,nearestLargerEven:()=>nz,now:()=>ou,parseAxisParam:()=>Ka,randUniform:()=>az,repeatedTry:()=>mz,rightPad:()=>Mi,shuffle:()=>c0,shuffleCombo:()=>oz,sizeFromShape:()=>Ve,sizeToSquarishShape:()=>cz,squeezeShape:()=>db,sum:()=>sz,swap:()=>$m,tanh:()=>pz,toNestedArray:()=>Oi,toTypedArray:()=>Pp});var $b=rp(_0());var ru=$b.default||$b;function tl(r){return ru.fromString(r,!0,16)}var $0=tl("c3a5c85c97cb3127"),tu=tl("b492b66fbe98f273"),gr=tl("9ae16a3b2f90404f");function Eb(r){return r.xor(r.shru(47))}function R0(r,e,t){let o=r.slice(e,e+t);return ru.fromBytes(Array.from(o),!0,!0)}function yt(r,e){return R0(r,e,8)}function E0(r,e){return R0(r,e,4)}function Xt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function ni(r,e,t=tl("9ddfea08eb382d69")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function kz(r,e,t,o,n,s){n=n.add(r),s=Xt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Xt(n,44)),[n.add(o),s.add(a)]}function Um(r,e,t,o){return kz(yt(r,e),yt(r,e+8),yt(r,e+16),yt(r,e+24),t,o)}function Tz(r,e=r.length){if(e>=8){let t=gr.add(e*2),o=yt(r,0).add(gr),n=yt(r,e-8),s=Xt(n,37).mul(t).add(o),a=Xt(o,25).add(n).mul(t);return ni(s,a,t)}if(e>=4){let t=gr.add(e*2),o=E0(r,0);return ni(o.shl(3).add(e),E0(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return Eb(gr.mul(s).xor($0.mul(a))).mul(gr)}return gr}function Nz(r,e=r.length){let t=gr.add(e*2),o=yt(r,0).mul(tu),n=yt(r,8),s=yt(r,e-8).mul(t),a=yt(r,e-16).mul(gr);return ni(Xt(o.add(n),43).add(Xt(s,30)).add(a),o.add(Xt(n.add(gr),18)).add(s),t)}function _z(r,e=r.length){let t=gr.add(e*2),o=yt(r,0).mul(gr),n=yt(r,8),s=yt(r,e-8).mul(t),a=yt(r,e-16).mul(gr),i=Xt(o.add(n),43).add(Xt(s,30)).add(a),p=ni(i,o.add(Xt(n.add(gr),18)).add(s),t),u=yt(r,16).mul(t),c=yt(r,24),l=i.add(yt(r,e-32)).mul(t),m=p.add(yt(r,e-24)).mul(t);return ni(Xt(u.add(c),43).add(Xt(l,30)).add(m),u.add(Xt(c.add(o),18)).add(l),t)}function Ez(r,e=r.length){let t=ru.fromNumber(81,!0);if(e<=32)return e<=16?Tz(r,e):Nz(r,e);if(e<=64)return _z(r,e);let o=t,n=t.mul(tu).add(113),s=Eb(n.mul(gr).add(113)).mul(gr),a=[ru.UZERO,ru.UZERO],i=[ru.UZERO,ru.UZERO];o=o.mul(gr).add(yt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Xt(o.add(n).add(a[0]).add(yt(r,p+8)),37).mul(tu),n=Xt(n.add(a[1]).add(yt(r,p+48)),42).mul(tu),o=o.xor(i[1]),n=n.add(a[0]).add(yt(r,p+40)),s=Xt(s.add(i[0]),33).mul(tu),a=Um(r,p,a[1].mul(tu),o.add(i[0])),i=Um(r,p+32,s.add(i[1]),n.add(yt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=tu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Xt(o.add(n).add(a[0]).add(yt(r,p+8)),37).mul(l),n=Xt(n.add(a[1]).add(yt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(yt(r,p+40))),s=Xt(s.add(i[0]),33).mul(l),a=Um(r,p,a[1].mul(l),o.add(i[0])),i=Um(r,p+32,s.add(i[1]),n.add(yt(r,p+16))),[s,o]=[o,s],ni(ni(a[0],i[0],l).add(Eb(n).mul($0)).add(s),ni(a[1],i[1],l).add(o),l)}function $z(r,e){return e==="string"?si(r):Pp([r],e)}function Rz(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function Pp(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=on(r)),P().getBool("DEBUG")&&xb(r,e),Rz(r,e))return r;if(e==null||e==="float32"||e==="complex64")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=ou();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:ou()-i})}if(P().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{Fz(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function Fz(r,e,t){if(e!=="float32")return!1;for(let o=0;o0?h:""} `}}console.log(`%c${p} %c${i} %c${u}D ${l} %c${c} %c${m} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function A0(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),f=!0,n[u.id]=!0;break}if(f)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!Or(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var D0=20,rl=3,Ab=7;function P0(r,e,t,o){let n=ds(e),s=Dz(r,e,t,n),a=e.length,i=Hm(r,e,t,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(" values:")),p.push(i.map(u=>" "+u).join(` +`));var U=u.print||W,q=u.printErr||V;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var H=4,j=Atomics.load,X=Atomics.store,Z=Atomics.compareExchange,ee;u.wasmBinary&&(ee=u.wasmBinary);var Y=u.noExitRuntime||!0;typeof WebAssembly!="object"&&Xu("no native wasm support detected");var J,ie,pe=!1,he;function we(F,B){F||Xu(B)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function $e(F,B,ne){for(var fe=B+ne,Te=B;F[Te]&&!(Te>=fe);)++Te;if(Te-B>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(B,Te):F.subarray(B,Te));for(var Ze="";B>10,56320|Qr&1023)}}return Ze}function Le(F,B){return F?$e(o(),F,B):""}function nt(F,B,ne,fe){if(!(fe>0))return 0;for(var Te=ne,Ze=ne+fe-1,Ae=0;Ae=55296&&Pe<=57343){var zt=F.charCodeAt(++Ae);Pe=65536+((Pe&1023)<<10)|zt&1023}if(Pe<=127){if(ne>=Ze)break;B[ne++]=Pe}else if(Pe<=2047){if(ne+1>=Ze)break;B[ne++]=192|Pe>>6,B[ne++]=128|Pe&63}else if(Pe<=65535){if(ne+2>=Ze)break;B[ne++]=224|Pe>>12,B[ne++]=128|Pe>>6&63,B[ne++]=128|Pe&63}else{if(ne+3>=Ze)break;B[ne++]=240|Pe>>18,B[ne++]=128|Pe>>12&63,B[ne++]=128|Pe>>6&63,B[ne++]=128|Pe&63}}return B[ne]=0,ne-Te}function pt(F,B,ne){return nt(F,o(),B,ne)}var Oe,mt,at,ft,wt,Fr,Ot,Kr,er;w&&(Oe=u.buffer);function Nt(F){Oe=F,u.HEAP8=mt=new Int8Array(F),u.HEAP16=ft=new Int16Array(F),u.HEAP32=Fr=new Int32Array(F),u.HEAPU8=at=new Uint8Array(F),u.HEAPU16=wt=new Uint16Array(F),u.HEAPU32=Ot=new Uint32Array(F),u.HEAPF32=Kr=new Float32Array(F),u.HEAPF64=er=new Float64Array(F)}var tr=u.INITIAL_MEMORY||16777216;if(w)J=u.wasmMemory,Oe=u.buffer;else if(u.wasmMemory)J=u.wasmMemory;else if(J=new WebAssembly.Memory({initial:tr/65536,maximum:32768,shared:!0}),!(J.buffer instanceof SharedArrayBuffer))throw q("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"),C&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");J&&(Oe=J.buffer),tr=Oe.byteLength,Nt(Oe);var rr,jr=[],Xr=[],pr=[],Js=!1;function Fo(){return Y}function Ka(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)Ac(u.preRun.shift());Pc(jr)}function Kt(){Js=!0,!w&&Pc(Xr)}function ea(){if(!w){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)SI(u.postRun.shift());Pc(pr)}}function Ac(F){jr.unshift(F)}function Rc(F){Xr.unshift(F)}function SI(F){pr.unshift(F)}var ja=0,ju=null,ta=null;function wI(F){ja++,u.monitorRunDependencies&&u.monitorRunDependencies(ja)}function II(F){if(ja--,u.monitorRunDependencies&&u.monitorRunDependencies(ja),ja==0&&(ju!==null&&(clearInterval(ju),ju=null),ta)){var B=ta;ta=null,B()}}function Xu(F){w?postMessage({cmd:"onAbort",arg:F}):u.onAbort&&u.onAbort(F),F="Aborted("+F+")",q(F),pe=!0,he=1,F+=". Build with -sASSERTIONS for more info.";var B=new WebAssembly.RuntimeError(F);throw l(B),B}var Ix="data:application/octet-stream;base64,";function jl(F){return F.startsWith(Ix)}function Fc(F){return F.startsWith("file://")}var fr;fr="tfjs-backend-wasm-threaded-simd.wasm",jl(fr)||(fr=_(fr));function Xl(F){try{if(F==fr&&ee)return new Uint8Array(ee);if(R)return R(F);throw"both async and sync fetching of the wasm failed"}catch(B){Xu(B)}}function vx(){if(!ee&&(x||b)){if(typeof fetch=="function"&&!Fc(fr))return fetch(fr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+fr+"'";return F.arrayBuffer()}).catch(function(){return Xl(fr)});if(A)return new Promise(function(F,B){A(fr,function(ne){F(new Uint8Array(ne))},B)})}return Promise.resolve().then(function(){return Xl(fr)})}function kx(){var F={env:im,wasi_snapshot_preview1:im};function B(Ae,Pe){var zt=Ae.exports;if(u.asm=zt,Ox(u.asm._emscripten_tls_init),rr=u.asm.__indirect_function_table,Rc(u.asm.__wasm_call_ctors),ie=Pe,!w){var Qr=De.unusedWorkers.length;De.unusedWorkers.forEach(function(oa){De.loadWasmModuleToWorker(oa,function(){--Qr||II("wasm-instantiate")})})}}w||wI("wasm-instantiate");function ne(Ae){B(Ae.instance,Ae.module)}function fe(Ae){return vx().then(function(Pe){return WebAssembly.instantiate(Pe,F)}).then(function(Pe){return Pe}).then(Ae,function(Pe){q("failed to asynchronously prepare wasm: "+Pe),Xu(Pe)})}function Te(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!jl(fr)&&!Fc(fr)&&!C&&typeof fetch=="function"?fetch(fr,{credentials:"same-origin"}).then(function(Ae){var Pe=WebAssembly.instantiateStreaming(Ae,F);return Pe.then(ne,function(zt){return q("wasm streaming compile failed: "+zt),q("falling back to ArrayBuffer instantiation"),fe(ne)})}):fe(ne)}if(u.instantiateWasm)try{var Ze=u.instantiateWasm(F,B);return Ze}catch(Ae){q("Module.instantiateWasm callback failed with error: "+Ae),l(Ae)}return Te().catch(l),{}}var Nx,vI,Tx={};function Hi(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function _x(F){var B=De.pthreads[F];delete De.pthreads[F],B.terminate(),sb(F),De.runningWorkers.splice(De.runningWorkers.indexOf(B),1),B.pthread_ptr=0}function Ex(F){var B=De.pthreads[F];B.postMessage({cmd:"cancel"})}function Dc(F){var B=De.pthreads[F];we(B),De.returnWorkerToPool(B)}function Yl(F){var B=De.getNewWorker();if(!B)return 6;De.runningWorkers.push(B),De.pthreads[F.pthread_ptr]=B,B.pthread_ptr=F.pthread_ptr;var ne={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return B.runPthread=()=>{ne.time=performance.now(),B.postMessage(ne,F.transferList)},B.loaded&&(B.runPthread(),delete B.runPthread),0}var Ql={varargs:void 0,get:function(){Ql.varargs+=4;var F=s()[Ql.varargs-4>>2];return F},getStr:function(F){var B=Le(F);return B}};function Oc(F){if(w)return Xa(1,1,F);he=F,Fo()||(De.terminateAllThreads(),u.onExit&&u.onExit(F),pe=!0),g(F,new Hi(F))}function kI(F,B){if(he=F,!B&&w)throw Jl(F),"unwind";Oc(F)}var Zl=kI;function $x(F){if(F instanceof Hi||F=="unwind")return he;g(1,F)}var De={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){w?De.initWorker():De.initMainThread()},initMainThread:function(){for(var F=8;F--;)De.allocateUnusedWorker()},initWorker:function(){Y=!1},setExitStatus:function(F){he=F},terminateAllThreads:function(){for(var F of Object.values(De.pthreads))De.returnWorkerToPool(F);for(var F of De.unusedWorkers)F.terminate();De.unusedWorkers=[]},returnWorkerToPool:function(F){var B=F.pthread_ptr;delete De.pthreads[B],De.unusedWorkers.push(F),De.runningWorkers.splice(De.runningWorkers.indexOf(F),1),F.pthread_ptr=0,sb(B)},receiveObjectTransfer:function(F){},threadInitTLS:function(){De.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,B){F.onmessage=ne=>{var fe=ne.data,Te=fe.cmd;if(F.pthread_ptr&&(De.currentProxiedOperationCallerThread=F.pthread_ptr),fe.targetThread&&fe.targetThread!=dm()){var Ze=De.pthreads[fe.targetThread];Ze?Ze.postMessage(fe,fe.transferList):q('Internal error! Worker sent a message "'+Te+'" to target pthread '+fe.targetThread+", but that thread no longer exists!"),De.currentProxiedOperationCallerThread=void 0;return}Te==="processProxyingQueue"?Mc(fe.queue):Te==="spawnThread"?Yl(fe):Te==="cleanupThread"?Dc(fe.thread):Te==="killThread"?_x(fe.thread):Te==="cancelThread"?Ex(fe.thread):Te==="loaded"?(F.loaded=!0,B&&B(F),F.runPthread&&(F.runPthread(),delete F.runPthread)):Te==="print"?U("Thread "+fe.threadId+": "+fe.text):Te==="printErr"?q("Thread "+fe.threadId+": "+fe.text):Te==="alert"?alert("Thread "+fe.threadId+": "+fe.text):fe.target==="setimmediate"?F.postMessage(fe):Te==="onAbort"?u.onAbort&&u.onAbort(fe.arg):Te&&q("worker sent an unknown command "+Te),De.currentProxiedOperationCallerThread=void 0},F.onerror=ne=>{var fe="worker sent an error!";throw q(fe+" "+ne.filename+":"+ne.lineno+": "+ne.message),ne},C&&(F.on("message",function(ne){F.onmessage({data:ne})}),F.on("error",function(ne){F.onerror(ne)}),F.on("detachedExit",function(){})),F.postMessage({cmd:"load",urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:J,wasmModule:ie})},allocateUnusedWorker:function(){var F=_("tfjs-backend-wasm-threaded-simd.worker.js");De.unusedWorkers.push(new Worker(F))},getNewWorker:function(){return De.unusedWorkers.length==0&&(De.allocateUnusedWorker(),De.loadWasmModuleToWorker(De.unusedWorkers[0])),De.unusedWorkers.pop()}};u.PThread=De;function Pc(F){for(;F.length>0;)F.shift()(u)}function Ax(F){var B=ab(),ne=F();return fm(B),ne}function NI(F){return F}function TI(F){var B=/\b_Z[\w\d_]+/g;return F.replace(B,function(ne){var fe=ne;return ne===fe?ne:fe+" ["+ne+"]"})}function Rx(){var F=dm(),B=s()[F+44>>2],ne=s()[F+48>>2],fe=B-ne;DI(B,fe),fm(B)}u.establishStackSpace=Rx;function Jl(F){if(w)return Xa(2,0,F);try{Zl(F)}catch(B){$x(B)}}var Yu=[];function Fx(F){var B=Yu[F];return B||(F>=Yu.length&&(Yu.length=F+1),Yu[F]=B=rr.get(F)),B}function Dx(F,B){var ne=Fx(F)(B);Fo()?De.setExitStatus(ne):FI(ne)}u.invokeEntryPoint=Dx;function _I(){var F=new Error;if(!F.stack){try{throw new Error}catch(B){F=B}if(!F.stack)return"(no stack trace available)"}return F.stack.toString()}function Ox(F){De.tlsInitFunctions.push(F)}function Px(F,B){t().set(F,B)}function Mx(F){$I(F,!b,1,!x),De.threadInitTLS()}function Lx(F){w?postMessage({cmd:"cleanupThread",thread:F}):Dc(F)}function em(F,B,ne,fe){return w?Xa(3,1,F,B,ne,fe):tm(F,B,ne,fe)}function tm(F,B,ne,fe){if(typeof SharedArrayBuffer=="undefined")return q("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Te=[],Ze=0;if(w&&(Te.length===0||Ze))return em(F,B,ne,fe);if(Ze)return Ze;var Ae={startRoutine:ne,pthread_ptr:F,arg:fe,transferList:Te};return w?(Ae.cmd="spawnThread",postMessage(Ae,Te),0):Yl(Ae)}function Bx(){return 2097152}var Vx=!0;function zx(){return Vx}function Mc(F){Atomics.store(s(),F>>2,1),dm()&&RI(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=Mc;function Wx(F,B,ne,fe){if(F==B)setTimeout(()=>Mc(fe));else if(w)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:fe});else{var Te=De.pthreads[F];if(!Te)return;Te.postMessage({cmd:"processProxyingQueue",queue:fe})}return 1}function Ux(F,B,ne){return-1}function Gx(){Xu("")}function qi(F){qi.shown||(qi.shown={}),qi.shown[F]||(qi.shown[F]=1,C&&(F="warning: "+F),q(F))}function Hx(){C||b||qi("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function qx(){return Date.now()}function rm(){return 2147483648}function Kx(){return rm()}var Qu;C?Qu=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:w?Qu=()=>performance.now()-u.__performance_now_clock_drift:Qu=()=>performance.now();function jx(F,B,ne){o().copyWithin(F,B,B+ne)}function Xx(){return C?d3().cpus().length:navigator.hardwareConcurrency}function Xa(F,B){var ne=arguments.length-2,fe=arguments;return Ax(()=>{for(var Te=ne,Ze=hm(Te*8),Ae=Ze>>3,Pe=0;Pe>3,Te=0;Te>>16),Nt(J.buffer),1}catch(B){}}function Zx(F){var B=o().length;if(F=F>>>0,F<=B)return!1;var ne=rm();if(F>ne)return!1;let fe=(zt,Qr)=>zt+(Qr-zt%Qr)%Qr;for(var Te=1;Te<=4;Te*=2){var Ze=B*(1+.2/Te);Ze=Math.min(Ze,F+100663296);var Ae=Math.min(ne,fe(Math.max(F,Ze),65536)),Pe=Qx(Ae);if(Pe)return!0}return!1}function Jx(){throw"unwind"}function om(F){return w?Xa(4,1,F):52}function nm(F,B,ne,fe,Te){return w?Xa(5,1,F,B,ne,fe,Te):70}var ey=[null,[],[]];function ty(F,B){var ne=ey[F];B===0||B===10?((F===1?U:q)($e(ne,0)),ne.length=0):ne.push(B)}function sm(F,B,ne,fe){if(w)return Xa(6,1,F,B,ne,fe);for(var Te=0,Ze=0;Ze>2],Pe=a()[B+4>>2];B+=8;for(var zt=0;zt>2]=Te,0}function am(F){var B=u["_"+F];return B}function ry(F,B,ne,fe,Te){var Ze={string:Dr=>{var tp=0;if(Dr!=null&&Dr!==0){var MI=(Dr.length<<2)+1;tp=hm(MI),pt(Dr,tp,MI)}return tp},array:Dr=>{var tp=hm(Dr.length);return Px(Dr,tp),tp}};function Ae(Dr){return B==="string"?Le(Dr):B==="boolean"?Boolean(Dr):Dr}var Pe=am(F),zt=[],Qr=0;if(fe)for(var oa=0;oaAe==="number"||Ae==="boolean"),Ze=B!=="string";return Ze&&Te&&!fe?am(F):function(){return ry(F,B,ne,arguments,fe)}}De.init();var ny=[null,Oc,Jl,em,om,nm,sm],im={__emscripten_init_main_thread_js:Mx,__emscripten_thread_cleanup:Lx,__pthread_create_js:tm,_emscripten_default_pthread_stack_size:Bx,_emscripten_get_now_is_monotonic:zx,_emscripten_notify_task_queue:Wx,_emscripten_set_offscreencanvas_size:Ux,abort:Gx,emscripten_check_blocking_allowed:Hx,emscripten_date_now:qx,emscripten_get_heap_max:Kx,emscripten_get_now:Qu,emscripten_memcpy_big:jx,emscripten_num_logical_cores:Xx,emscripten_receive_on_main_thread_js:Yx,emscripten_resize_heap:Zx,emscripten_unwind_to_js_event_loop:Jx,exit:Zl,fd_close:om,fd_seek:nm,fd_write:sm,memory:J||u.wasmMemory},EI=kx(),sy=u.___wasm_call_ctors=function(){return(sy=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},ay=u._init=function(){return(ay=u._init=u.asm.init).apply(null,arguments)},iy=u._init_with_threads_count=function(){return(iy=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},uy=u._get_threads_count=function(){return(uy=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},py=u._register_tensor=function(){return(py=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},cy=u._dispose_data=function(){return(cy=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},ly=u._dispose=function(){return(ly=u._dispose=u.asm.dispose).apply(null,arguments)},my=u._Abs=function(){return(my=u._Abs=u.asm.Abs).apply(null,arguments)},dy=u._Add=function(){return(dy=u._Add=u.asm.Add).apply(null,arguments)},fy=u._AddN=function(){return(fy=u._AddN=u.asm.AddN).apply(null,arguments)},hy=u._All=function(){return(hy=u._All=u.asm.All).apply(null,arguments)},gy=u._Any=function(){return(gy=u._Any=u.asm.Any).apply(null,arguments)},xy=u._ArgMax=function(){return(xy=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yy=u._AvgPool=function(){return(yy=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},by=u._BatchMatMul=function(){return(by=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Cy=u._Ceil=function(){return(Cy=u._Ceil=u.asm.Ceil).apply(null,arguments)},Sy=u._ClipByValue=function(){return(Sy=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},wy=u._Conv2D=function(){return(wy=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Iy=u._Conv2DBackpropInput=function(){return(Iy=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},vy=u._Cos=function(){return(vy=u._Cos=u.asm.Cos).apply(null,arguments)},ky=u._Cosh=function(){return(ky=u._Cosh=u.asm.Cosh).apply(null,arguments)},Ny=u._CropAndResize=function(){return(Ny=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Ty=u._Cumprod=function(){return(Ty=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},_y=u._Cumsum=function(){return(_y=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ey=u._DepthToSpace=function(){return(Ey=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},$y=u._DepthwiseConv2dNative=function(){return($y=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Ay=u._Elu=function(){return(Ay=u._Elu=u.asm.Elu).apply(null,arguments)},Ry=u._Equal=function(){return(Ry=u._Equal=u.asm.Equal).apply(null,arguments)},Fy=u._Exp=function(){return(Fy=u._Exp=u.asm.Exp).apply(null,arguments)},Dy=u._FlipLeftRight=function(){return(Dy=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},Oy=u._Floor=function(){return(Oy=u._Floor=u.asm.Floor).apply(null,arguments)},Py=u._FloorDiv=function(){return(Py=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},My=u._FusedBatchNorm=function(){return(My=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},Ly=u._FusedConv2D=function(){return(Ly=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},By=u._FusedDepthwiseConv2D=function(){return(By=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},Vy=u._Gather=function(){return(Vy=u._Gather=u.asm.Gather).apply(null,arguments)},zy=u._GatherNd=function(){return(zy=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},Wy=u._Greater=function(){return(Wy=u._Greater=u.asm.Greater).apply(null,arguments)},Uy=u._GreaterEqual=function(){return(Uy=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},Gy=u._IsNan=function(){return(Gy=u._IsNan=u.asm.IsNan).apply(null,arguments)},Hy=u._LeakyRelu=function(){return(Hy=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},qy=u._Less=function(){return(qy=u._Less=u.asm.Less).apply(null,arguments)},Ky=u._LessEqual=function(){return(Ky=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},jy=u._Log=function(){return(jy=u._Log=u.asm.Log).apply(null,arguments)},Xy=u._LogicalAnd=function(){return(Xy=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},Yy=u._LogicalNot=function(){return(Yy=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},Qy=u._LogicalOr=function(){return(Qy=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},Zy=u._LogicalXor=function(){return(Zy=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},Jy=u._Max=function(){return(Jy=u._Max=u.asm.Max).apply(null,arguments)},eb=u._MaxPool=function(){return(eb=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},um=u._Maximum=function(){return(um=u._Maximum=u.asm.Maximum).apply(null,arguments)},pm=u._Mean=function(){return(pm=u._Mean=u.asm.Mean).apply(null,arguments)},Bc=u._Min=function(){return(Bc=u._Min=u.asm.Min).apply(null,arguments)},tb=u._Minimum=function(){return(tb=u._Minimum=u.asm.Minimum).apply(null,arguments)},rb=u._MirrorPad=function(){return(rb=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},Zu=u._Multiply=function(){return(Zu=u._Multiply=u.asm.Multiply).apply(null,arguments)},cm=u._Neg=function(){return(cm=u._Neg=u.asm.Neg).apply(null,arguments)},Ju=u._NonMaxSuppressionV3=function(){return(Ju=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},ep=u._NonMaxSuppressionV4=function(){return(ep=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},ob=u._NonMaxSuppressionV5=function(){return(ob=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},G=u._NotEqual=function(){return(G=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},oe=u._OneHot=function(){return(oe=u._OneHot=u.asm.OneHot).apply(null,arguments)},ke=u._PadV2=function(){return(ke=u._PadV2=u.asm.PadV2).apply(null,arguments)},je=u._Pow=function(){return(je=u._Pow=u.asm.Pow).apply(null,arguments)},Tt=u._Prelu=function(){return(Tt=u._Prelu=u.asm.Prelu).apply(null,arguments)},_t=u._Prod=function(){return(_t=u._Prod=u.asm.Prod).apply(null,arguments)},qe=u._RealDiv=function(){return(qe=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},We=u._Reciprocal=function(){return(We=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},Vt=u._Relu=function(){return(Vt=u._Relu=u.asm.Relu).apply(null,arguments)},Yr=u._Relu6=function(){return(Yr=u._Relu6=u.asm.Relu6).apply(null,arguments)},ra=u._ResizeBilinear=function(){return(ra=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},lm=u._ResizeNearestNeighbor=function(){return(lm=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},Vc=u._Reverse=function(){return(Vc=u._Reverse=u.asm.Reverse).apply(null,arguments)},nb=u._RotateWithOffset=function(){return(nb=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},hr=u._Round=function(){return(hr=u._Round=u.asm.Round).apply(null,arguments)},Ya=u._Rsqrt=function(){return(Ya=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},mm=u._ScatterNd=function(){return(mm=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},BB=u._SelectV2=function(){return(BB=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},VB=u._Sigmoid=function(){return(VB=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},zB=u._Sin=function(){return(zB=u._Sin=u.asm.Sin).apply(null,arguments)},WB=u._Softmax=function(){return(WB=u._Softmax=u.asm.Softmax).apply(null,arguments)},UB=u._SparseFillEmptyRows=function(){return(UB=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},GB=u._SparseReshape=function(){return(GB=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},HB=u._SparseSegmentReduction=function(){return(HB=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},qB=u._Sqrt=function(){return(qB=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},KB=u._Square=function(){return(KB=u._Square=u.asm.Square).apply(null,arguments)},jB=u._SquaredDifference=function(){return(jB=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},XB=u._Step=function(){return(XB=u._Step=u.asm.Step).apply(null,arguments)},YB=u._StridedSlice=function(){return(YB=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},QB=u._Sub=function(){return(QB=u._Sub=u.asm.Sub).apply(null,arguments)},ZB=u._Sum=function(){return(ZB=u._Sum=u.asm.Sum).apply(null,arguments)},JB=u._Tan=function(){return(JB=u._Tan=u.asm.Tan).apply(null,arguments)},eV=u._Tanh=function(){return(eV=u._Tanh=u.asm.Tanh).apply(null,arguments)},tV=u._Tile=function(){return(tV=u._Tile=u.asm.Tile).apply(null,arguments)},rV=u._TopK=function(){return(rV=u._TopK=u.asm.TopK).apply(null,arguments)},oV=u._Transform=function(){return(oV=u._Transform=u.asm.Transform).apply(null,arguments)},nV=u._Transpose=function(){return(nV=u._Transpose=u.asm.Transpose).apply(null,arguments)},sV=u.__FusedMatMul=function(){return(sV=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},aV=u._malloc=function(){return(aV=u._malloc=u.asm.malloc).apply(null,arguments)},iV=u._free=function(){return(iV=u._free=u.asm.free).apply(null,arguments)},uV=u.__emscripten_tls_init=function(){return(uV=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},dm=u._pthread_self=function(){return(dm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},pV=u.___errno_location=function(){return(pV=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},$I=u.__emscripten_thread_init=function(){return($I=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},cV=u.__emscripten_thread_crashed=function(){return(cV=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},lV=u._emscripten_main_thread_process_queued_calls=function(){return(lV=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},mV=u._emscripten_main_browser_thread_id=function(){return(mV=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},AI=u._emscripten_run_in_main_runtime_thread_js=function(){return(AI=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},dV=u._emscripten_dispatch_to_thread_=function(){return(dV=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},RI=u.__emscripten_proxy_execute_task_queue=function(){return(RI=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},sb=u.__emscripten_thread_free_data=function(){return(sb=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},FI=u.__emscripten_thread_exit=function(){return(FI=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},DI=u._emscripten_stack_set_limits=function(){return(DI=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},ab=u.stackSave=function(){return(ab=u.stackSave=u.asm.stackSave).apply(null,arguments)},fm=u.stackRestore=function(){return(fm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},hm=u.stackAlloc=function(){return(hm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},fV=u.dynCall_iijjiiii=function(){return(fV=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},hV=u.dynCall_jiji=function(){return(hV=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Fo,u.wasmMemory=J,u.cwrap=oy,u.ExitStatus=Hi,u.PThread=De;var gm;ta=function F(){gm||OI(),gm||(ta=F)};function OI(F){if(F=F||f,ja>0)return;if(w){c(u),Kt(),postMessage({cmd:"loaded"});return}if(Ka(),ja>0)return;function B(){gm||(gm=!0,u.calledRun=!0,!pe&&(Kt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),ea()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),B()},1)):B()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();OI();var xm;m&&(xm={uncaughtException:process.listeners("uncaughtException").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var ym;if(typeof WasmBackendModule!="undefined")ym=WasmBackendModule;else if(typeof e!="undefined")ym=e;else throw new Error("Could not find wasm module in post.js");if(xm){var gV=ym._dispose;ym._dispose=function(){gV(),xm.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),xm.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return e.ready}})();typeof wg=="object"&&typeof jw=="object"?jw.exports=Kw:typeof define=="function"&&define.amd?define([],function(){return Kw}):typeof wg=="object"&&(wg.WasmBackendModuleThreadedSimd=Kw)});var g3=qt((kkt,h3)=>{h3.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`});var x3=qt((Ig,Yw)=>{var Xw=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!="undefined"?e:{},o,n;t.ready=new Promise(function(G,oe){o=G,n=oe});var s;typeof process!="undefined"&&process.listeners&&(s={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var a=Object.assign({},t),i=[],p="./this.program",u=(G,oe)=>{throw oe},c=typeof window=="object",l=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",d="";function f(G){return t.locateFile?t.locateFile(G,d):d+G}var h,g,x,b;function C(G){if(G instanceof ju)return;$("exiting due to exception: "+G)}if(m){l?d=Rl().dirname(d)+"/":d=__dirname+"/";var w,k;typeof bm=="function"&&(w=qw(),k=Rl()),h=(G,oe)=>(G=k.normalize(G),w.readFileSync(G,oe?void 0:"utf8")),x=G=>{var oe=h(G,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},g=(G,oe,ke)=>{G=k.normalize(G),w.readFile(G,function(je,Tt){je?ke(je):oe(Tt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof ju))throw G}),process.on("unhandledRejection",function(G){throw G}),u=(G,oe)=>{if(at())throw process.exitCode=G,oe;C(oe),process.exit(G)},t.inspect=function(){return"[Emscripten Module object]"}}else(c||l)&&(l?d=self.location.href:typeof document!="undefined"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf("blob:")!==0?d=d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):d="",h=G=>{var oe=new XMLHttpRequest;return oe.open("GET",G,!1),oe.send(null),oe.responseText},l&&(x=G=>{var oe=new XMLHttpRequest;return oe.open("GET",G,!1),oe.responseType="arraybuffer",oe.send(null),new Uint8Array(oe.response)}),g=(G,oe,ke)=>{var je=new XMLHttpRequest;je.open("GET",G,!0),je.responseType="arraybuffer",je.onload=()=>{if(je.status==200||je.status==0&&je.response){oe(je.response);return}ke()},je.onerror=ke,je.send(null)},b=G=>document.title=G);var _=t.print||console.log.bind(console),$=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var A=4,R;t.wasmBinary&&(R=t.wasmBinary);var D=t.noExitRuntime||!0;typeof WebAssembly!="object"&&pr("no native wasm support detected");var P,M=!1,L;function W(G,oe){G||pr(oe)}var V=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(G,oe,ke){for(var je=oe+ke,Tt=oe;G[Tt]&&!(Tt>=je);)++Tt;if(Tt-oe>16&&G.buffer&&V)return V.decode(G.subarray(oe,Tt));for(var _t="";oe>10,56320|Yr&1023)}}return _t}function q(G,oe){return G?U(ee,G,oe):""}function H(G,oe,ke,je){if(!(je>0))return 0;for(var Tt=ke,_t=ke+je-1,qe=0;qe=55296&&We<=57343){var Vt=G.charCodeAt(++qe);We=65536+((We&1023)<<10)|Vt&1023}if(We<=127){if(ke>=_t)break;oe[ke++]=We}else if(We<=2047){if(ke+1>=_t)break;oe[ke++]=192|We>>6,oe[ke++]=128|We&63}else if(We<=65535){if(ke+2>=_t)break;oe[ke++]=224|We>>12,oe[ke++]=128|We>>6&63,oe[ke++]=128|We&63}else{if(ke+3>=_t)break;oe[ke++]=240|We>>18,oe[ke++]=128|We>>12&63,oe[ke++]=128|We>>6&63,oe[ke++]=128|We&63}}return oe[ke]=0,ke-Tt}function j(G,oe,ke){return H(G,ee,oe,ke)}var X,Z,ee,Y,J,ie,pe,he,we;function ve(G){X=G,t.HEAP8=Z=new Int8Array(G),t.HEAP16=Y=new Int16Array(G),t.HEAP32=ie=new Int32Array(G),t.HEAPU8=ee=new Uint8Array(G),t.HEAPU16=J=new Uint16Array(G),t.HEAPU32=pe=new Uint32Array(G),t.HEAPF32=he=new Float32Array(G),t.HEAPF64=we=new Float64Array(G)}var $e=t.INITIAL_MEMORY||16777216,Le,nt=[],pt=[],Oe=[],mt=!1;function at(){return D}function ft(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Ot(t.preRun.shift());ta(nt)}function wt(){mt=!0,ta(pt)}function Fr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)er(t.postRun.shift());ta(Oe)}function Ot(G){nt.unshift(G)}function Kr(G){pt.unshift(G)}function er(G){Oe.unshift(G)}var Nt=0,tr=null,rr=null;function jr(G){Nt++,t.monitorRunDependencies&&t.monitorRunDependencies(Nt)}function Xr(G){if(Nt--,t.monitorRunDependencies&&t.monitorRunDependencies(Nt),Nt==0&&(tr!==null&&(clearInterval(tr),tr=null),rr)){var oe=rr;rr=null,oe()}}function pr(G){t.onAbort&&t.onAbort(G),G="Aborted("+G+")",$(G),M=!0,L=1,G+=". Build with -sASSERTIONS for more info.";var oe=new WebAssembly.RuntimeError(G);throw n(oe),oe}var Js="data:application/octet-stream;base64,";function Fo(G){return G.startsWith(Js)}function Ka(G){return G.startsWith("file://")}var Kt;Kt="tfjs-backend-wasm.wasm",Fo(Kt)||(Kt=f(Kt));function ea(G){try{if(G==Kt&&R)return new Uint8Array(R);if(x)return x(G);throw"both async and sync fetching of the wasm failed"}catch(oe){pr(oe)}}function Ac(){if(!R&&(c||l)){if(typeof fetch=="function"&&!Ka(Kt))return fetch(Kt,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+Kt+"'";return G.arrayBuffer()}).catch(function(){return ea(Kt)});if(g)return new Promise(function(G,oe){g(Kt,function(ke){G(new Uint8Array(ke))},oe)})}return Promise.resolve().then(function(){return ea(Kt)})}function Rc(){var G={env:Oc,wasi_snapshot_preview1:Oc};function oe(qe,We){var Vt=qe.exports;t.asm=Vt,P=t.asm.memory,ve(P.buffer),Le=t.asm.__indirect_function_table,Kr(t.asm.__wasm_call_ctors),Xr("wasm-instantiate")}jr("wasm-instantiate");function ke(qe){oe(qe.instance)}function je(qe){return Ac().then(function(We){return WebAssembly.instantiate(We,G)}).then(function(We){return We}).then(qe,function(We){$("failed to asynchronously prepare wasm: "+We),pr(We)})}function Tt(){return!R&&typeof WebAssembly.instantiateStreaming=="function"&&!Fo(Kt)&&!Ka(Kt)&&!m&&typeof fetch=="function"?fetch(Kt,{credentials:"same-origin"}).then(function(qe){var We=WebAssembly.instantiateStreaming(qe,G);return We.then(ke,function(Vt){return $("wasm streaming compile failed: "+Vt),$("falling back to ArrayBuffer instantiation"),je(ke)})}):je(ke)}if(t.instantiateWasm)try{var _t=t.instantiateWasm(G,oe);return _t}catch(qe){$("Module.instantiateWasm callback failed with error: "+qe),n(qe)}return Tt().catch(n),{}}var SI,ja;function ju(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}function ta(G){for(;G.length>0;)G.shift()(t)}function wI(G){return G}function II(G){var oe=/\b_Z[\w\d_]+/g;return G.replace(oe,function(ke){var je=ke;return ke===je?ke:je+" ["+ke+"]"})}function Xu(){var G=new Error;if(!G.stack){try{throw new Error}catch(oe){G=oe}if(!G.stack)return"(no stack trace available)"}return G.stack.toString()}function Ix(G,oe){Z.set(G,oe)}function jl(){pr("")}function Fc(){return 2147483648}function fr(){return Fc()}function Xl(G,oe,ke){ee.copyWithin(G,oe,oe+ke)}function vx(G){try{return P.grow(G-X.byteLength+65535>>>16),ve(P.buffer),1}catch(oe){}}function kx(G){var oe=ee.length;G=G>>>0;var ke=Fc();if(G>ke)return!1;let je=(Vt,Yr)=>Vt+(Yr-Vt%Yr)%Yr;for(var Tt=1;Tt<=4;Tt*=2){var _t=oe*(1+.2/Tt);_t=Math.min(_t,G+100663296);var qe=Math.min(ke,je(Math.max(G,_t),65536)),We=vx(qe);if(We)return!0}return!1}var Nx={varargs:void 0,get:function(){Nx.varargs+=4;var G=ie[Nx.varargs-4>>2];return G},getStr:function(G){var oe=q(G);return oe}};function vI(G){return 52}function Tx(G,oe,ke,je,Tt){return 70}var Hi=[null,[],[]];function _x(G,oe){var ke=Hi[G];oe===0||oe===10?((G===1?_:$)(U(ke,0)),ke.length=0):ke.push(oe)}function Ex(G,oe,ke,je){for(var Tt=0,_t=0;_t>2],We=pe[oe+4>>2];oe+=8;for(var Vt=0;Vt>2]=Tt,0}function Dc(G){var oe=t["_"+G];return oe}function Yl(G,oe,ke,je,Tt){var _t={string:hr=>{var Ya=0;if(hr!=null&&hr!==0){var mm=(hr.length<<2)+1;Ya=Bc(mm),j(hr,Ya,mm)}return Ya},array:hr=>{var Ya=Bc(hr.length);return Ix(hr,Ya),Ya}};function qe(hr){return oe==="string"?q(hr):oe==="boolean"?Boolean(hr):hr}var We=Dc(G),Vt=[],Yr=0;if(je)for(var ra=0;raqe==="number"||qe==="boolean"),_t=oe!=="string";return _t&&Tt&&!je?Dc(G):function(){return Yl(G,oe,ke,arguments,je)}}var Oc={abort:jl,emscripten_get_heap_max:fr,emscripten_memcpy_big:Xl,emscripten_resize_heap:kx,fd_close:vI,fd_seek:Tx,fd_write:Ex},kI=Rc(),Zl=t.___wasm_call_ctors=function(){return(Zl=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},$x=t._init=function(){return($x=t._init=t.asm.init).apply(null,arguments)},De=t._init_with_threads_count=function(){return(De=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Pc=t._get_threads_count=function(){return(Pc=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Ax=t._register_tensor=function(){return(Ax=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},NI=t._dispose_data=function(){return(NI=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},TI=t._dispose=function(){return(TI=t._dispose=t.asm.dispose).apply(null,arguments)},Rx=t._Abs=function(){return(Rx=t._Abs=t.asm.Abs).apply(null,arguments)},Jl=t._Add=function(){return(Jl=t._Add=t.asm.Add).apply(null,arguments)},Yu=t._AddN=function(){return(Yu=t._AddN=t.asm.AddN).apply(null,arguments)},Fx=t._All=function(){return(Fx=t._All=t.asm.All).apply(null,arguments)},Dx=t._Any=function(){return(Dx=t._Any=t.asm.Any).apply(null,arguments)},_I=t._ArgMax=function(){return(_I=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Ox=t._AvgPool=function(){return(Ox=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Px=t._BatchMatMul=function(){return(Px=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Mx=t._Ceil=function(){return(Mx=t._Ceil=t.asm.Ceil).apply(null,arguments)},Lx=t._ClipByValue=function(){return(Lx=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},em=t._Conv2D=function(){return(em=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},tm=t._Conv2DBackpropInput=function(){return(tm=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Bx=t._Cos=function(){return(Bx=t._Cos=t.asm.Cos).apply(null,arguments)},Vx=t._Cosh=function(){return(Vx=t._Cosh=t.asm.Cosh).apply(null,arguments)},zx=t._CropAndResize=function(){return(zx=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Mc=t._Cumprod=function(){return(Mc=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Wx=t._Cumsum=function(){return(Wx=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Ux=t._DepthToSpace=function(){return(Ux=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Gx=t._DepthwiseConv2dNative=function(){return(Gx=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},qi=t._Elu=function(){return(qi=t._Elu=t.asm.Elu).apply(null,arguments)},Hx=t._Equal=function(){return(Hx=t._Equal=t.asm.Equal).apply(null,arguments)},qx=t._Exp=function(){return(qx=t._Exp=t.asm.Exp).apply(null,arguments)},rm=t._FlipLeftRight=function(){return(rm=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},Kx=t._Floor=function(){return(Kx=t._Floor=t.asm.Floor).apply(null,arguments)},Qu=t._FloorDiv=function(){return(Qu=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},jx=t._FusedBatchNorm=function(){return(jx=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},Xx=t._FusedConv2D=function(){return(Xx=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Xa=t._FusedDepthwiseConv2D=function(){return(Xa=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},Lc=t._Gather=function(){return(Lc=t._Gather=t.asm.Gather).apply(null,arguments)},Yx=t._GatherNd=function(){return(Yx=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},Qx=t._Greater=function(){return(Qx=t._Greater=t.asm.Greater).apply(null,arguments)},Zx=t._GreaterEqual=function(){return(Zx=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},Jx=t._IsNan=function(){return(Jx=t._IsNan=t.asm.IsNan).apply(null,arguments)},om=t._LeakyRelu=function(){return(om=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},nm=t._Less=function(){return(nm=t._Less=t.asm.Less).apply(null,arguments)},ey=t._LessEqual=function(){return(ey=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},ty=t._Log=function(){return(ty=t._Log=t.asm.Log).apply(null,arguments)},sm=t._LogicalAnd=function(){return(sm=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},am=t._LogicalNot=function(){return(am=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},ry=t._LogicalOr=function(){return(ry=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},oy=t._LogicalXor=function(){return(oy=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},ny=t._Max=function(){return(ny=t._Max=t.asm.Max).apply(null,arguments)},im=t._MaxPool=function(){return(im=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},EI=t._Maximum=function(){return(EI=t._Maximum=t.asm.Maximum).apply(null,arguments)},sy=t._Mean=function(){return(sy=t._Mean=t.asm.Mean).apply(null,arguments)},ay=t._Min=function(){return(ay=t._Min=t.asm.Min).apply(null,arguments)},iy=t._Minimum=function(){return(iy=t._Minimum=t.asm.Minimum).apply(null,arguments)},uy=t._MirrorPad=function(){return(uy=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},py=t._Multiply=function(){return(py=t._Multiply=t.asm.Multiply).apply(null,arguments)},cy=t._Neg=function(){return(cy=t._Neg=t.asm.Neg).apply(null,arguments)},ly=t._NonMaxSuppressionV3=function(){return(ly=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},my=t._NonMaxSuppressionV4=function(){return(my=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},dy=t._NonMaxSuppressionV5=function(){return(dy=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},fy=t._NotEqual=function(){return(fy=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},hy=t._OneHot=function(){return(hy=t._OneHot=t.asm.OneHot).apply(null,arguments)},gy=t._PadV2=function(){return(gy=t._PadV2=t.asm.PadV2).apply(null,arguments)},xy=t._Pow=function(){return(xy=t._Pow=t.asm.Pow).apply(null,arguments)},yy=t._Prelu=function(){return(yy=t._Prelu=t.asm.Prelu).apply(null,arguments)},by=t._Prod=function(){return(by=t._Prod=t.asm.Prod).apply(null,arguments)},Cy=t._RealDiv=function(){return(Cy=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},Sy=t._Reciprocal=function(){return(Sy=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},wy=t._Relu=function(){return(wy=t._Relu=t.asm.Relu).apply(null,arguments)},Iy=t._Relu6=function(){return(Iy=t._Relu6=t.asm.Relu6).apply(null,arguments)},vy=t._ResizeBilinear=function(){return(vy=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},ky=t._ResizeNearestNeighbor=function(){return(ky=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},Ny=t._Reverse=function(){return(Ny=t._Reverse=t.asm.Reverse).apply(null,arguments)},Ty=t._RotateWithOffset=function(){return(Ty=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},_y=t._Round=function(){return(_y=t._Round=t.asm.Round).apply(null,arguments)},Ey=t._Rsqrt=function(){return(Ey=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},$y=t._ScatterNd=function(){return($y=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},Ay=t._SelectV2=function(){return(Ay=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},Ry=t._Sigmoid=function(){return(Ry=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},Fy=t._Sin=function(){return(Fy=t._Sin=t.asm.Sin).apply(null,arguments)},Dy=t._Softmax=function(){return(Dy=t._Softmax=t.asm.Softmax).apply(null,arguments)},Oy=t._SparseFillEmptyRows=function(){return(Oy=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},Py=t._SparseReshape=function(){return(Py=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},My=t._SparseSegmentReduction=function(){return(My=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},Ly=t._Sqrt=function(){return(Ly=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},By=t._Square=function(){return(By=t._Square=t.asm.Square).apply(null,arguments)},Vy=t._SquaredDifference=function(){return(Vy=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},zy=t._Step=function(){return(zy=t._Step=t.asm.Step).apply(null,arguments)},Wy=t._StridedSlice=function(){return(Wy=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},Uy=t._Sub=function(){return(Uy=t._Sub=t.asm.Sub).apply(null,arguments)},Gy=t._Sum=function(){return(Gy=t._Sum=t.asm.Sum).apply(null,arguments)},Hy=t._Tan=function(){return(Hy=t._Tan=t.asm.Tan).apply(null,arguments)},qy=t._Tanh=function(){return(qy=t._Tanh=t.asm.Tanh).apply(null,arguments)},Ky=t._Tile=function(){return(Ky=t._Tile=t.asm.Tile).apply(null,arguments)},jy=t._TopK=function(){return(jy=t._TopK=t.asm.TopK).apply(null,arguments)},Xy=t._Transform=function(){return(Xy=t._Transform=t.asm.Transform).apply(null,arguments)},Yy=t._Transpose=function(){return(Yy=t._Transpose=t.asm.Transpose).apply(null,arguments)},Qy=t.__FusedMatMul=function(){return(Qy=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},Zy=t._malloc=function(){return(Zy=t._malloc=t.asm.malloc).apply(null,arguments)},Jy=t._free=function(){return(Jy=t._free=t.asm.free).apply(null,arguments)},eb=t.___errno_location=function(){return(eb=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},um=t.stackSave=function(){return(um=t.stackSave=t.asm.stackSave).apply(null,arguments)},pm=t.stackRestore=function(){return(pm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},Bc=t.stackAlloc=function(){return(Bc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},tb=t.dynCall_iijjiiii=function(){return(tb=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},rb=t.dynCall_jiji=function(){return(rb=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=Ql;var Zu;rr=function G(){Zu||cm(),Zu||(rr=G)};function cm(G){if(G=G||i,Nt>0||(ft(),Nt>0))return;function oe(){Zu||(Zu=!0,t.calledRun=!0,!M&&(wt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Fr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),oe()},1)):oe()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();cm();var Ju;s&&(Ju={uncaughtException:process.listeners("uncaughtException").filter(function(G){return!s.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(G){return!s.unhandledRejection.indexOf(G)>-1})});var ep;if(typeof e!="undefined")ep=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")ep=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ju){var ob=ep._dispose;ep._dispose=function(){ob(),Ju.uncaughtException.forEach(function(G){process.removeListener("uncaughtException",G)}),Ju.unhandledRejection.forEach(function(G){process.removeListener("unhandledRejection",G)})}}return e.ready}})();typeof Ig=="object"&&typeof Yw=="object"?Yw.exports=Xw:typeof define=="function"&&define.amd?define([],function(){return Xw}):typeof Ig=="object"&&(Ig.WasmBackendModule=Xw)});var Do=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},Zr=class{refCount(e){return Or("refCount")}incRef(e){return Or("incRef")}timerAvailable(){return!0}time(e){return Or("time")}read(e){return Or("read")}readSync(e){return Or("readSync")}readToGPU(e,t){return Or("readToGPU")}numDataIds(){return Or("numDataIds")}disposeData(e,t){return Or("disposeData")}write(e,t,o){return Or("write")}move(e,t,o,n,s){return Or("move")}createTensorFromTexture(e,t,o){return Or("createTensorFromTexture")}memory(){return Or("memory")}floatPrecision(){return Or("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Or("dispose")}};function Or(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function LI(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,Cm(r,e,t)}function vV(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,Cm(r,t,o),Cm(e,t,o)}function op(r,e,t){return Math.max(r,Math.min(e,t))}function kV(r){return r%2===0?r:r+1}function Cm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function NV(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function Jr(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Oo(r,e=[],t=!1){if(e==null&&(e=[]),Array.isArray(r)||Wt(r)&&!t)for(let o=0;o0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function DV(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Qa(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),E(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),E(r.every(o=>na(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function pb(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Qa(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function cb(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else throw new Error(`Unknown data type ${r}`);return t}function lb(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else if(r==="string")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function mb(r,e){for(let t=0;te+=t.length),e}function Po(r){return typeof r=="string"||r instanceof String}function BI(r){return typeof r=="boolean"}function VI(r){return typeof r=="number"}function np(r){return Array.isArray(r)?np(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":VI(r)?"float32":Po(r)?"string":BI(r)?"bool":"float32"}function fs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function sp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function zI(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?" for a complex tensor":""}.`);return zI(0,r,e,t)}function zc(r,e){let t=ap(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Ki(r,new Float32Array(t));if(e==="int32")return Ki(r,new Int32Array(t));if(e==="bool")return Ki(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function yt(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function MV(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=WV(n,s)})}};function VV(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(zV(e,o[0],o[1]),o.join("="))),e}function zV(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function WV(r,e){if(e=e.toLowerCase(),e==="true"||e==="false")return e==="true";if(`${+e}`===e)return+e;throw new Error(`Could not parse value flag value ${e} for flag ${r}.`)}function O(){return hb}var hb=null;function UI(r){hb=r}var gb;function xb(){if(gb==null){let r;if(typeof window!="undefined")r=window;else if(typeof global!="undefined")r=global;else if(typeof process!="undefined")r=process;else if(typeof self!="undefined")r=self;else throw new Error("Could not find a global object");gb=r}return gb}function UV(){let r=xb();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function Gc(r,e){let t=UV();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var gs="Abs",sa="Acos",aa="Acosh",eo="Add",Mo="AddN",Lo="All",Bo="Any",Vo="ArgMax",Za="ArgMin",ia="Asin",ua="Asinh",pa="Atan",ca="Atanh",la="Atan2",zo="AvgPool",wm="AvgPoolGrad",ip="AvgPool3D",Im="AvgPool3DGrad",Wo="BatchMatMul",xs="BatchToSpaceND",Ja="Bincount",wne="BroadcastTo",up="BroadcastArgs",co="Cast",Uo="Ceil",lo="ClipByValue",ei="Complex",pp="ComplexAbs",ys="Concat",Go="Conv2D",cp="Conv2DBackpropFilter",Ho="Conv2DBackpropInput",lp="Conv3D",vm="Conv3DBackpropFilterV2",mp="Conv3DBackpropInputV2",qo="Cos",Ko="Cosh",jo="Cumprod",Xo="Cumsum",Yo="CropAndResize",ti="DenseBincount",Qo="DepthToSpace",Zo="DepthwiseConv2dNative",dp="DepthwiseConv2dNativeBackpropFilter",fp="DepthwiseConv2dNativeBackpropInput",hp="Diag",gp="Dilation2D",yb="Dilation2DBackpropInput",bb="Dilation2DBackpropFilter",Jo="RealDiv",ri="Einsum",en="Elu",km="EluGrad",ma="Erf",tn="Equal",rn="Exp",bs="ExpandDims",da="Expm1",oi="FFT",Cs="Fill",on="FlipLeftRight",nn="Floor",sn="FloorDiv",an="FusedBatchNorm",Ss="GatherV2",un="GatherNd",pn="Greater",cn="GreaterEqual",mo="Identity",ni="IFFT",si="Imag",fa="IsFinite",ha="IsInf",ln="IsNan",mn="LeakyRelu",dn="Less",fn="LessEqual",xp="LinSpace",hn="Log",ga="Log1p",gn="LogicalAnd",xn="LogicalNot",xa="LogicalOr",GI="LogicalXor",Ine="LogSoftmax",vne="LowerBound",yp="LRN",Nm="LRNGrad",yn="Max",bn="Maximum",Cn="MaxPool",Tm="MaxPoolGrad",bp="MaxPool3D",_m="MaxPool3DGrad",Cp="MaxPoolWithArgmax",Sn="Mean",wn="Min",In="Minimum",vn="MirrorPad",ya="Mod",Sp="Multinomial",kn="Multiply",ws="Neg",Nn="NotEqual",Tn="NonMaxSuppressionV3",ba="NonMaxSuppressionV4",_n="NonMaxSuppressionV5",Is="OnesLike",En="OneHot",vs="Pack",$n="PadV2",kne="Pool",An="Pow",Rn="Prelu",Fn="Prod",wp="RaggedGather",Ip="RaggedRange",vp="RaggedTensorToTensor",ks="Range",ai="Real",Dn="Reciprocal",On="Relu",Ns="Reshape",Pn="ResizeNearestNeighbor",Em="ResizeNearestNeighborGrad",Mn="ResizeBilinear",$m="ResizeBilinearGrad",Ln="Relu6",Bn="Reverse",Ca="Round",Vn="Rsqrt",zn="ScatterNd",ii="SearchSorted",Ts="Select",Xi="Selu",_s="Slice",Wn="Sin",Sa="Sinh",Yi="Sign",Un="Sigmoid",Qi="Softplus",Gn="Sqrt",Hn="Sum",Es="SpaceToBatchND",$s="SplitV",qn="Softmax",ui="SparseFillEmptyRows",wa="SparseReshape",pi="SparseSegmentMean",ci="SparseSegmentSum",li="SparseToDense",Kn="SquaredDifference",mi="Square",jn="StridedSlice",As="StringNGrams",di="StringSplit",fi="StringToHashBucketFast",Xn="Sub",Yn="Tan",Qn="Tanh",to="Tile",Zn="TopK",Jn="Transform",ro="Transpose",kp="Unique",Rs="Unpack",Np="UnsortedSegmentSum",Nne="UpperBound",Fs="ZerosLike",Ds="Step",Zi="FromPixels",es="RotateWithOffset",fo="_FusedMatMul",ho="FusedConv2D",go="FusedDepthwiseConv2D";function Os(...r){O().getBool("IS_TEST")||O().getBool("PROD")||console.warn(...r)}function GV(...r){O().getBool("IS_TEST")||O().getBool("PROD")||console.log(...r)}var Tp=Gc("kernelRegistry",()=>new Map),Hc=Gc("gradRegistry",()=>new Map);function qc(r,e){let t=Sb(r,e);return Tp.get(t)}function Cb(r){return Hc.get(r)}function Am(r){let e=Tp.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&t.push(a)}return t}function Ia(r){let{kernelName:e,backendName:t}=r,o=Sb(e,t);Tp.has(o)&&Os(`The kernel '${e}' for backend '${t}' is already registered`),Tp.set(o,r)}function Ane(r){let{kernelName:e}=r;Hc.has(e)&&O().getBool("DEBUG")&&Os(`Overriding the gradient for '${e}'`),Hc.set(e,r)}function Rne(r,e){let t=Sb(r,e);if(!Tp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);Tp.delete(t)}function Fne(r){if(!Hc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Hc.delete(r)}function Dne(r,e){Am(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});Ia(n)})}function Sb(r,e){return`${e}_${r}`}var y={};Ue(y,{arraysEqual:()=>Pr,assert:()=>E,assertNonNegativeIntegerDimensions:()=>yt,assertNonNull:()=>Jr,assertShapesMatch:()=>ht,bytesFromStringArray:()=>fb,bytesPerElement:()=>Sm,checkConversionForErrors:()=>mb,clamp:()=>op,computeStrides:()=>hs,createScalarValue:()=>QV,createShuffledIndices:()=>RV,decodeString:()=>Ap,distSquared:()=>_V,encodeString:()=>gi,fetch:()=>JV,fingerPrint64:()=>YV,flatten:()=>Oo,getArrayFromDType:()=>lb,getTypedArrayFromDType:()=>cb,hasEncodingLoss:()=>OV,hexToLong:()=>Kc,indexToLoc:()=>LV,inferDtype:()=>np,inferFromImplicitShape:()=>DV,isBoolean:()=>BI,isFunction:()=>fs,isInt:()=>na,isNumber:()=>VI,isPromise:()=>Wc,isScalarShape:()=>EV,isString:()=>Po,isTypedArray:()=>Wt,isValidDtype:()=>db,locToIndex:()=>MV,makeOnesTypedArray:()=>zc,makeZerosNestedTypedArray:()=>PV,makeZerosTypedArray:()=>ap,nearestDivisor:()=>sp,nearestLargerEven:()=>kV,now:()=>ou,parseAxisParam:()=>Qa,randUniform:()=>TV,repeatedTry:()=>FV,rightPad:()=>ji,shuffle:()=>LI,shuffleCombo:()=>vV,sizeFromShape:()=>ze,sizeToSquarishShape:()=>AV,squeezeShape:()=>pb,sum:()=>NV,swap:()=>Cm,tanh:()=>$V,toNestedArray:()=>Ki,toTypedArray:()=>$p});var kb=rp(rv());var ru=kb.default||kb;function Kc(r){return ru.fromString(r,!0,16)}var nv=Kc("c3a5c85c97cb3127"),tu=Kc("b492b66fbe98f273"),gr=Kc("9ae16a3b2f90404f");function vb(r){return r.xor(r.shru(47))}function sv(r,e,t){let o=r.slice(e,e+t);return ru.fromBytes(Array.from(o),!0,!0)}function bt(r,e){return sv(r,e,8)}function ov(r,e){return sv(r,e,4)}function jt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function hi(r,e,t=Kc("9ddfea08eb382d69")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function qV(r,e,t,o,n,s){n=n.add(r),s=jt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(jt(n,44)),[n.add(o),s.add(a)]}function Fm(r,e,t,o){return qV(bt(r,e),bt(r,e+8),bt(r,e+16),bt(r,e+24),t,o)}function KV(r,e=r.length){if(e>=8){let t=gr.add(e*2),o=bt(r,0).add(gr),n=bt(r,e-8),s=jt(n,37).mul(t).add(o),a=jt(o,25).add(n).mul(t);return hi(s,a,t)}if(e>=4){let t=gr.add(e*2),o=ov(r,0);return hi(o.shl(3).add(e),ov(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return vb(gr.mul(s).xor(nv.mul(a))).mul(gr)}return gr}function jV(r,e=r.length){let t=gr.add(e*2),o=bt(r,0).mul(tu),n=bt(r,8),s=bt(r,e-8).mul(t),a=bt(r,e-16).mul(gr);return hi(jt(o.add(n),43).add(jt(s,30)).add(a),o.add(jt(n.add(gr),18)).add(s),t)}function XV(r,e=r.length){let t=gr.add(e*2),o=bt(r,0).mul(gr),n=bt(r,8),s=bt(r,e-8).mul(t),a=bt(r,e-16).mul(gr),i=jt(o.add(n),43).add(jt(s,30)).add(a),p=hi(i,o.add(jt(n.add(gr),18)).add(s),t),u=bt(r,16).mul(t),c=bt(r,24),l=i.add(bt(r,e-32)).mul(t),m=p.add(bt(r,e-24)).mul(t);return hi(jt(u.add(c),43).add(jt(l,30)).add(m),u.add(jt(c.add(o),18)).add(l),t)}function YV(r,e=r.length){let t=ru.fromNumber(81,!0);if(e<=32)return e<=16?KV(r,e):jV(r,e);if(e<=64)return XV(r,e);let o=t,n=t.mul(tu).add(113),s=vb(n.mul(gr).add(113)).mul(gr),a=[ru.UZERO,ru.UZERO],i=[ru.UZERO,ru.UZERO];o=o.mul(gr).add(bt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=jt(o.add(n).add(a[0]).add(bt(r,p+8)),37).mul(tu),n=jt(n.add(a[1]).add(bt(r,p+48)),42).mul(tu),o=o.xor(i[1]),n=n.add(a[0]).add(bt(r,p+40)),s=jt(s.add(i[0]),33).mul(tu),a=Fm(r,p,a[1].mul(tu),o.add(i[0])),i=Fm(r,p+32,s.add(i[1]),n.add(bt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=tu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=jt(o.add(n).add(a[0]).add(bt(r,p+8)),37).mul(l),n=jt(n.add(a[1]).add(bt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(bt(r,p+40))),s=jt(s.add(i[0]),33).mul(l),a=Fm(r,p,a[1].mul(l),o.add(i[0])),i=Fm(r,p+32,s.add(i[1]),n.add(bt(r,p+16))),[s,o]=[o,s],hi(hi(a[0],i[0],l).add(vb(n).mul(nv)).add(s),hi(a[1],i[1],l).add(o),l)}function QV(r,e){return e==="string"?gi(r):$p([r],e)}function ZV(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function $p(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Oo(r)),O().getBool("DEBUG")&&mb(r,e),ZV(r,e))return r;if(e==null||e==="float32"||e==="complex64")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=ou();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:ou()-i})}if(O().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{ez(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function ez(r,e,t){if(e!=="float32")return!1;for(let o=0;o0?h:""} `}}console.log(`%c${p} %c${i} %c${u}D ${l} %c${c} %c${m} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function av(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!Pr(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var uv=20,jc=3,Tb=7;function pv(r,e,t,o){let n=hs(e),s=tz(r,e,t,n),a=e.length,i=Om(r,e,t,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(" values:")),p.push(i.map(u=>" "+u).join(` `)),p.join(` -`)}function Dz(r,e,t,o){let n=Ve(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t==="complex64"?nl(r):r;if(i>1)for(let u=0;uD0){let g=rl*a,y=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-rl)*a,i*a));return t==="complex64"&&(y=nl(y),b=nl(b)),["["+y.map((C,w)=>ol(C,n[w],t)).join(", ")+", ..., "+b.map((C,w)=>ol(C,n[i-rl+w],t)).join(", ")+"]"]}return["["+(t==="complex64"?nl(r):Array.from(r)).map((g,y)=>ol(g,n[y],t)).join(", ")+"]"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>D0){for(let h=0;h`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=o||gb(t,this.size),this.strides=ds(e)}set(e,...t){t.length===0&&(t=[0]),$(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nOp(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),rs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=rs().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Op(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await rs().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(rs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Mp.print(this,e)}clone(){return this.throwIfDisposed(),Mp.clone(this)}toString(e=!1){let t=this.dataSync();return P0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Mp.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),rs().makeVariable(this,e,t,o)}};Object.defineProperty(ut,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function Oz(){return Zc("Tensor",()=>ut)}Oz();var ba=class extends ut{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Or(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);rs().disposeTensor(this),this.dataId=e.dataId,rs().incRef(this,null)}dispose(){rs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ba,Symbol.hasInstance,{value:r=>r instanceof ut&&r.assign!=null&&r.assign instanceof Function});var z0={};Be(z0,{assertTypesMatch:()=>Lb,getTensorsInContainer:()=>sl,isTensorInList:()=>Lz,makeTypesMatch:()=>Re});var Fb;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(Fb||(Fb={}));var Db;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(Db||(Db={}));var Pb;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(Pb||(Pb={}));var Ob;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(Ob||(Ob={}));var Mb;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(Mb||(Mb={}));var Mz={float32:Ob,int32:Db,bool:Pb,complex64:Mb};function ct(r,e){if(r==="string"||e==="string"){if(r==="string"&&e==="string")return"string";throw new Error(`Can not upcast ${r} with ${e}`)}return Mz[r][e]}function Ca(r){return ct(r,"int32")}function Re(r,e){if(r.dtype===e.dtype)return[r,e];let t=ct(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Lb(r,e){$(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function Lz(r,e){return e.some(t=>t.id===r.id)}function sl(r){let e=[];return V0(r,e,new Set),e}function V0(r,e,t){if(r==null)return;if(r instanceof ut){e.push(r);return}if(!Bz(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),V0(s,e,t))}}function Bz(r){return Array.isArray(r)||typeof r=="object"}function Bb(r){return r.kernelName!=null}var qm=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},ai=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new qm}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){zm(e).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let o=t.factory();if(o&&!(o instanceof Jr)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return ai.nextTensorId++}nextVariableId(){return ai.nextVariableId++}clone(e){let t=N.runKernel(uo,{x:e}),o={x:e},n=a=>({x:()=>{let i="float32",p={x:a},u={dtype:i};return N.runKernel(to,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(el(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Bb(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Bb(e)){let{kernelName:d,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let y=el(d,this.backendName);$(y!=null,()=>`Cannot find registered kernel '${d}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=y.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,b,C);let w=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(d,h,w);o=this.saveTensorsForBackwardMode(k)}return w}}else{let{forwardFunc:d}=e,h=g=>{!n||(o=g.map(y=>this.keep(this.clone(y))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>d(this.backend,h));let y=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:c,attrs:l}=e,m=Bb(e)?null:e.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(f=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(f),t=f.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(d=>c[d]!=null?c[d].shape:null),outputShapes:t.map(d=>d.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=kb(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=e;o==="string"&&nn(e[0])&&(s=e.map(p=>si(p)));let a=n.write(s,t,o),i=new ut(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o==="string"){let p=this.state.tensorInfo.get(a),u=bb(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||"float32";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new ut(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ba(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let o=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(o=e.size*Rm(e.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:o})),e instanceof ba||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let o=e.size*Rm(e.dtype);this.state.numBytes-=o}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,o=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=kb(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],f=ap(m.size,m.dtype);return this.makeTensor(f,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=sl(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if($(t.length>0,()=>"gradients() received an empty list of xs."),o!=null&&o.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));$(s instanceof ut,()=>"The result y returned by f() must be a tensor.");let a=A0(this.state.activeTape,t,s);if(!n&&a.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[s.id]=o==null?Vz(s.shape):o,F0(i,a,u=>this.tidy(u),zz);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return $(fs(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{$(t.every(i=>i instanceof ut),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),$(o.value instanceof ut,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),$(fs(o.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];$(c.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),$(c.every(m=>m instanceof ut),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let l={};return c.forEach((m,f)=>{l[f]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=ou(),o=await this.backend.time(e);return o.wallMs=ou()-t,o}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new qm;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};ai.nextTensorId=0;ai.nextVariableId=0;function Vz(r){let e=jc(Ve(r),"float32");return N.makeTensor(e,r,"float32")}function Vb(){let r=wb();if(r._tfengine==null){let e=new Qc(r);r._tfengine=new ai(e)}return h0(r._tfengine.ENV),M0(()=>r._tfengine),r._tfengine}var N=Vb();function zz(r,e){let t={a:r,b:e};return N.runKernel(_r,t)}var ii={};Be(ii,{isBrowser:()=>Wb,isMobile:()=>Gz,mockIsMobile:()=>Uz});function Wz(){return typeof navigator!="undefined"&&navigator!=null}var zb;function Uz(r){zb=r}function Gz(r){if(zb!==void 0)return zb;if(r||Wz()){if(r||(r=navigator),r.product==="ReactNative")return!0;let e=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}return!1}function Wb(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Vr=P();Vr.registerFlag("DEBUG",()=>!1,r=>{r&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Vr.registerFlag("IS_BROWSER",()=>Wb());Vr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Vr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Vr.registerFlag("PROD",()=>!1);Vr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Vr.getBool("DEBUG"));Vr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Vr.registerFlag("IS_TEST",()=>!1);Vr.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);Vr.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Vr.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);Vr.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Vr.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function or(r,e){let t=r;if(Ut(r))return e==="string"?[]:[r.length];if(typeof r=="object"&&"texture"in r){let n=r.channels||"RGBA";return[r.height,r.width*n.length]}if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Ut(t)&&e!=="string";)o.push(t.length),t=t[0];return Array.isArray(r)&&P().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&U0(r,o,[]),o}function U0(r,e,t){if(t=t||[],!Array.isArray(r)&&!Ut(r)){$(e.length===0,()=>`Element arr[${t.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}$(e.length>0,()=>`Element arr[${t.join("][")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===e[0],()=>`Element arr[${t.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),W0(o,n,e,t),r==null||!Ut(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let p=r==null?"null":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=or(r,n);!Ut(r)&&!Array.isArray(r)&&(r=[r]);let i=n!=="string"?Pp(r,n):on(r,[],!0);return N.makeTensor(i,s,n)}function Ia(r,e,t,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Ub="__op";function T(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith("_")&&(t=t.substring(0,t.length-1)),t=t+Ub;let n=(...s)=>{N.startScope(t);try{let a=o(...s);return Yc(a)&&console.error("Cannot return a Promise inside of tidy."),N.endScope(a),a}catch(a){throw N.endScope(null),a}};return Object.defineProperty(n,"name",{value:t,configurable:!0}),n}function Hz(r,e){let t=v(r,"real","complex"),o=v(e,"imag","complex");ht(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return N.runKernel(aa,n)}var Er=T({complex_:Hz});function xr(r,e,t,o){if(o==null&&(o=np(r)),o==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof r=="object"&&"texture"in r){if(o!=="float32"&&o!=="int32")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return r.channels=r.channels||"RGBA",N.backend.createTensorFromTexture(r,e||t,o)}if(!Ut(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(e!=null){Xc(e);let n=Ve(e),s=Ve(t);$(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Ut(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!=="string"?Pp(r,o):on(r,[],!0),N.makeTensor(r,e,o)}function nr(r,e,t){let o=or(r,t);return xr(r,e,o,t)}var al={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Km=4;async function H0(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),f=m.reduce((g,y)=>g+y.length,0)+Km*m.length,d=new Uint8Array(f),h=0;for(let g=0;g{if(e+=s.byteLength,t.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Gb=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function G0(r){return Gb?Buffer.byteLength(r):new Blob([r]).size}function q0(r){if(Gb)return Buffer.from(r).toString("base64");let e=new Uint8Array(r),t="";for(let o=0,n=e.length;o{e+=n.byteLength});let t=new Uint8Array(e),o=0;return r.forEach(n=>{t.set(new Uint8Array(n),o),o+=n.byteLength}),t.buffer}function Hb(r){let e="/";for(r=r.trim();r.endsWith(e);)r=r.slice(0,r.length-1);let t=r.split(e);return t[t.length-1]}function Xm(r,e){let t={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:e};return r.signature!=null&&(t.signature=r.signature),r.userDefinedMetadata!=null&&(t.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(t.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(t.initializerSignature=r.initializerSignature),r.trainingConfig!=null&&(t.trainingConfig=r.trainingConfig),t}function qb(r,e,t){let o={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(o.trainingConfig=r.trainingConfig),r.weightsManifest!=null){if(!e)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!t)throw new Error("modelJSON has weightsManifest but weightData is null");o.weightSpecs=e,o.weightData=t}return r.signature!=null&&(o.signature=r.signature),r.userDefinedMetadata!=null&&(o.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(o.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(o.initializerSignature=r.initializerSignature),o}async function Bp(r,e){let t,o;return r.weightsManifest!=null&&([t,o]=await e(r.weightsManifest)),qb(r,t,o)}function As(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:r.modelTopology==null?0:G0(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:G0(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function Ym(r){let e=[];for(let t of r)e.push(...t.weights);return e}function Kz(){let r=t=>{let o=t<<13,n=0;for(;(o&8388608)===0;)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function jz(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function Xz(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function Yz(){let r=Kz(),e=jz(),t=Xz();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var mt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return mt.instance==null&&(mt.instance=new mt),mt.instance}static registerSaveRouter(e){mt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){mt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return mt.getHandlers(e,"save")}static getLoadHandlers(e,t){return mt.getHandlers(e,"load",t)}static getHandlers(e,t,o){let n=[];return(t==="load"?mt.getInstance().loadRouters:mt.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},j0=r=>mt.registerSaveRouter(r),X0=r=>mt.registerLoadRouter(r),Y0=r=>mt.getSaveHandlers(r),Q0=(r,e)=>mt.getLoadHandlers(r,e);var Kb="tensorflowjs",jb=1,nu="models_store",ui="model_info_store";function Z0(){if(!P().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let r=typeof window=="undefined"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Xb(r){let e=r.result;e.createObjectStore(nu,{keyPath:"modelPath"}),e.createObjectStore(ui,{keyPath:"modelPath"})}var Fs=class{constructor(e){if(this.indexedDB=Z0(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((o,n)=>{let s=this.indexedDB.open(Kb,jb);s.onupgradeneeded=()=>Xb(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(nu,"readonly"),u=i.objectStore(nu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{let i=As(t),p=a.transaction(ui,"readwrite"),u=p.objectStore(ui),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),l;c.onsuccess=()=>{l=a.transaction(nu,"readwrite");let f=l.objectStore(nu).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});f.onsuccess=()=>o({modelArtifactsInfo:i}),f.onerror=d=>{u=p.objectStore(ui);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(f.error)),h.onerror=g=>(a.close(),n(f.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Fs.URL_SCHEME="indexeddb://";var J0=r=>P().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Fs.URL_SCHEME)?Qz(r.slice(Fs.URL_SCHEME.length)):null;mt.registerSaveRouter(J0);mt.registerLoadRouter(J0);function Qz(r){return new Fs(r)}function Zz(r){return r.startsWith(Fs.URL_SCHEME)?r.slice(Fs.URL_SCHEME.length):r}var Qm=class{constructor(){this.indexedDB=Z0()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Kb,jb);o.onupgradeneeded=()=>Xb(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ui,"readonly"),i=s.objectStore(ui).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=Zz(e),new Promise((t,o)=>{let n=this.indexedDB.open(Kb,jb);n.onupgradeneeded=()=>Xb(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ui,"readwrite"),i=a.objectStore(ui),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(nu,"readwrite");let f=u.objectStore(nu).delete(e);f.onsuccess=()=>t(p.result.modelArtifactsInfo),f.onerror=d=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var wa="/",Vp="tensorflowjs_models",ev="info",Jz="model_topology",eW="weight_specs",tW="weight_data",rW="model_metadata";function tv(r){return{info:[Vp,r,ev].join(wa),topology:[Vp,r,Jz].join(wa),weightSpecs:[Vp,r,eW].join(wa),weightData:[Vp,r,tW].join(wa),modelMetadata:[Vp,r,rW].join(wa)}}function rv(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function oW(r){let e=r.split(wa);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(wa)}function nW(r){return r.startsWith(Ds.URL_SCHEME)?r.slice(Ds.URL_SCHEME.length):r}var Ds=class{constructor(e){if(!P().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=tv(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),o=JSON.stringify(e.weightSpecs),n=As(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,q0(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw rv(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=K0(a),t}};Ds.URL_SCHEME="localstorage://";var ov=r=>P().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Ds.URL_SCHEME)?sW(r.slice(Ds.URL_SCHEME.length)):null;mt.registerSaveRouter(ov);mt.registerLoadRouter(ov);function sW(r){return new Ds(r)}var Zm=class{constructor(){$(P().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),$(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Vp+wa,o=wa+ev;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(zp)&&(e=e.slice(0,e.indexOf(zp))),$(e.length>0,()=>"scheme must not be an empty string.");let o=Yt.getInstance();$(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=Yt.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Yt.getInstance().managers)}};function Jm(r){if(r.indexOf(zp)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Yt.getSchemes().join(",")}`);return{scheme:r.split(zp)[0],path:r.split(zp)[1]}}async function nv(r,e,t=!1){$(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=mt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=mt.getSaveHandlers(e);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Jm(r).scheme,p=Jm(r).path,u=i===Jm(r).scheme,c=await n.load();t&&u&&await Yt.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Yt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function sv(){let r=Yt.getSchemes(),e={};for(let t of r){let o=await Yt.getManager(t).listModels();for(let n in o){let s=t+zp+n;e[s]=o[n]}}return e}async function av(r){let e=Jm(r);return Yt.getManager(e.scheme).removeModel(e.path)}async function iv(r,e){return nv(r,e,!1)}async function uv(r,e){return nv(r,e,!0)}var Yb=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!P().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(P().get("IS_BROWSER")){P().setPlatform("browser",new Yb);try{Yt.registerManager(Ds.URL_SCHEME,new Zm)}catch(r){}try{Yt.registerManager(Fs.URL_SCHEME,new Qm)}catch(r){}}var aW={importFetch:()=>pv()},Qb;var Zb=class{constructor(){this.util=cv(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return P().global.fetch!=null?P().global.fetch(e,t):(Qb==null&&(Qb=aW.importFetch()),Qb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};P().get("IS_NODE")&&!P().get("IS_BROWSER")&&P().setPlatform("node",new Zb);function ne(r,e="float32",t){return e=e||"float32",Xc(r),new je(r,e,t)}function iW(r,e){let t=v(r,"x","cast");if(!yb(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e==="string"&&t.dtype!=="string"||e!=="string"&&t.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:t},n={dtype:e};return N.runKernel(to,o,n)}var qe=T({cast_:iW});function uW(r){let t={x:v(r,"x","clone","string_or_numeric")};return N.runKernel(uo,t)}var zr=T({clone_:uW});function ef(r,e=!1){console.log(r.toString(e))}Vb();var pW={buffer:ne,cast:qe,clone:zr,print:ef};L0(pW);var va={};Be(va,{browserFiles:()=>mv,browserHTTPRequest:()=>hv,concatenateArrayBuffers:()=>Lp,copyModel:()=>iv,decodeWeights:()=>jm,encodeWeights:()=>H0,fromMemory:()=>gv,fromMemorySync:()=>nC,getLoadHandlers:()=>Q0,getModelArtifactsForJSON:()=>Bp,getModelArtifactsForJSONSync:()=>qb,getModelArtifactsInfoForJSON:()=>As,getSaveHandlers:()=>Y0,getWeightSpecs:()=>Ym,http:()=>rf,isHTTPScheme:()=>tf,listModels:()=>sv,loadWeights:()=>fv,moveModel:()=>uv,registerLoadRouter:()=>X0,registerSaveRouter:()=>j0,removeModel:()=>av,weightsLoaderFactory:()=>rC,withSaveHandler:()=>xv,withSaveHandlerSync:()=>yv});var cW="model",lW=".json",mW=".weights.bin";function lv(r){return new Promise(e=>setTimeout(e)).then(r)}var Sa=class{constructor(e){if(!P().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(Sa.URL_SCHEME)&&(e=e.slice(Sa.URL_SCHEME.length)),(e==null||e.length===0)&&(e=cW),this.modelJsonFileName=e+lW,this.weightDataFileName=e+mW}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let o=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],n=Xm(e,o),s=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:"application/json"})),a=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=s,await lv(()=>a.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await lv(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:As(e)}}}};Sa.URL_SCHEME="downloads://";var Jb=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=Bp(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,Lp(a)])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Hb(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Hb(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},fW=r=>P().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Sa.URL_SCHEME)?dW(r.slice(Sa.URL_SCHEME.length)):null;mt.registerSaveRouter(fW);function dW(r="model"){return new Sa(r)}function mv(r){return new Jb(r)}function eC(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function tC(r,e){e==null&&(e={});let t=e.fetchFunc==null?P().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),n=0,s=.5,i=(e.onProgress==null?await Promise.all(o):await eC(o,e.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return e.onProgress==null?await Promise.all(i):await eC(i,e.onProgress,p,u)}async function fv(r,e="",t,o){return rC(a=>tC(a,{requestInit:o}))(r,e,t)}function rC(r){return async(e,t="",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((f,d)=>{let h=0;f.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,b=al[y]*Ve(g.shape),C=()=>{n[d]=!0,s[d]==null&&(s[d]=[]),s[d].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((w,k)=>{w===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(f=>f)){let f=o.filter((d,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}. -Manifest JSON has weights with names: ${i.join(", ")}.`)}let p=n.reduce((f,d,h)=>(d&&f.push(h),f),[]),u=[];p.forEach(f=>{e[f].paths.forEach(d=>{let h=t+(t.endsWith("/")?"":"/")+d;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(f=>{let d=e[f].paths.length,h=0;for(let w=0;w{let k=g.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=jm(k,[w.manifestEntry]);for(let E in _)l[E]=_[E]}),m+=d}),l}}var hW="application/octet-stream",gW="application/json",il=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?($(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=P().platform.fetch,$(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&$(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let o=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=Xm(e,o);t.body.append("model.json",new Blob([JSON.stringify(n)],{type:gW}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:hW}),"model.weights.bin");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:As(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Bp(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=xW(t),s=this.weightPathPrefix||o,a=Ym(e),i=[],p=[];for(let c of e)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await tC(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Lp(u)]}};il.URL_SCHEME_REGEX=/^https?:\/\//;function xW(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function tf(r){return r.match(il.URL_SCHEME_REGEX)!=null}var dv=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>tf(o)):t=tf(r),t)return rf(r,e)}return null};mt.registerSaveRouter(dv);mt.registerLoadRouter(dv);function rf(r,e){return new il(r,e)}function hv(r,e){return rf(r,e)}var ul=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},of=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},oC=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function gv(r,e,t,o){let n=arguments;return new oC(nC(...n))}function nC(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new ul(r):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ul({modelTopology:r})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ul({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function xv(r){return new of(r)}function yv(r){return new of(r)}var Cv={};Be(Cv,{confusionMatrix:()=>bv});function yW(r,e,t=!1,o=!1){let n=v(r,"a","matMul"),s=v(e,"b","matMul");[n,s]=Re(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return N.runKernel(cn,a,i)}var Xe=T({matMul_:yW});function bW(r,e,t=1,o=0,n="int32"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:e,onValue:t,offValue:o};return N.runKernel(ca,a,i)}var pl=T({oneHot_:bW});function Tie(){P().set("PROD",!0)}function Nie(){P().set("DEBUG",!0)}function _ie(){P().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function sC(r){P().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}B0(sC);function Eie(){N.disposeVariables()}function cr(){return N}function $ie(){return N.memory()}function Rie(r){return N.profile(r)}function Ne(r,e){return N.tidy(r,e)}function Ft(r){sl(r).forEach(t=>t.dispose())}function So(r){return N.keep(r)}function Aie(r){return N.time(r)}function Fie(r){return N.setBackend(r)}function Die(){return N.ready()}function Pie(){return N.backendName}function Oie(r){N.removeBackend(r)}function Mie(r){return N.findBackend(r)}function Lie(r){return N.findBackendFactory(r)}function pi(r,e,t=1){return N.registerBackend(r,e,t)}function Bie(){return N.backend}function Vie(r,e){P().setPlatform(r,e)}function CW(r){let t={input:v(r,"input","imag")};return N.runKernel(Ya,t)}var ci=T({imag_:CW});function IW(r){let t={x:v(r,"x","neg")};return N.runKernel(Pn,t)}var yr=T({neg_:IW});function wW(r){let t={input:v(r,"input","real")};return N.runKernel(la,t)}var ka=T({real_:wW});function SW(r,e,t){let o=v(r,"x","transpose");if(e==null&&(e=o.shape.map((a,i)=>i).reverse()),$(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype==="complex64"?Ne(()=>{let a=ka(o),i=ci(o);return a=N.runKernel(Mr,{x:a},s),i=N.runKernel(Mr,{x:i},s),t&&(i=yr(i)),Er(a,i)}):N.runKernel(Mr,n,s)}var Wp=T({transpose_:SW});function vW(r,e,t){let o=v(r,"labels","confusionMatrix"),n=v(e,"predictions","confusionMatrix");$(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=pl(qe(o,"int32"),t),a=pl(qe(n,"int32"),t),i=Wp(s),p=Xe(i,a);return qe(p,"int32")}var bv=T({confusionMatrix_:vW});var br={};Be(br,{assertAndGetBroadcastShape:()=>Je,getBroadcastDims:()=>Iv,getReductionAxes:()=>nf});function Iv(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function nf(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function Je(r,e){let t=[],o=Math.max(r.length,e.length);for(let n=0;nRW,fromPixelsAsync:()=>EW,toPixels:()=>$W});function sf(r,e,t){if(eo(r),e!=null&&e.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=or(r,t);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}var su;function wv(r,e=3){if(e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(el(Zi,N.backendName)!=null){let d={pixels:r},h={numChannels:e};return N.runKernel(Zi,d,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext("2d").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(su==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")su=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else su=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});su.canvas.width=u,su.canvas.height=c,su.drawImage(r,0,0,u,c),l=su.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let d=u*c;m=new Int32Array(d*e);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(t.dtype!=="float32"&&t.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${t.dtype}. Please use float32 or int32 tensors.`);let a=await t.data(),i=t.dtype==="float32"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`)}else if(t.dtype==="int32"&&(f<0||f>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${f}.`);s===1?(c[0]=f*i,c[1]=f*i,c[2]=f*i):c[m]=f*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){e.width=n,e.height=o;let u=e.getContext("2d"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}var RW=T({fromPixels_:wv});var af={};Be(af,{prepareAndValidate:()=>vv});function vv(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(Ve(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var cl={};Be(cl,{calculateShapes:()=>kv,validateInput:()=>uf,validateUpdateShape:()=>aC});function aC(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;lFW,computeFlatOffset:()=>LW,computeOutShape:()=>PW,getNormalizedAxes:()=>OW,isSliceContinous:()=>MW,maskToAxes:()=>DW,parseSliceParams:()=>BW,sliceInfo:()=>VW,startForAxis:()=>Fv,startIndicesWithElidedDims:()=>$v,stopForAxis:()=>Dv,stopIndicesWithElidedDims:()=>Rv,stridesForAxis:()=>Av,stridesWithElidedDims:()=>Nv});var iC=-2,AW=-1;function FW(r,e,t){let o=r.shape.length;$(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),$(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function DW(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function PW(r,e,t){let o=[];for(let n=0;n0){let f=e[0],d=t+1;c=$v(a,f,d,o,r),l=Rv(i,f,d,n,r),m=Nv(s,f,d,r)}else for(let f=0;f-1)s[i]=0;else{let p=_v(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=_v(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=op(0,a,p-1),a}function Dv(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=op(0,a,p):a=op(-1,a,p-1),a}function MW(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function LW(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return t==null?s=new Array(n).fill(-1):typeof t=="number"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function VW(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&(a&a-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(w&&m.strides[C]<=0)throw Error("only stride 1 allowed on non-range indexing.");h=h&&m.strides[C]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=Tv(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=Tv(m.end[C],1,m.strides[C],k,_,E);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;f=f&&O,d=d&&(C===0&&m.strides[C]===1||O)}else f=f&&m.strides[C]===1&&R,d=d&&(C===0&&m.strides[C]===1||R);let A,D=!1;if(m.beginValid&&m.endValid?(A=m.end[C]-m.begin[C],D=!0):w?(A=1,D=!0):R&&k>=0&&(m.strides[C]<0?A=-k:A=k,D=!0),D){let O;A===0||A<0!=m.strides[C]<0?O=0:O=Math.trunc(A/m.strides[C])+(A%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?y.push(g[w]):w===iC&&y.push(1)}return{finalShapeSparse:y.filter((C,w)=>m.finalShapeGatherIndices[w]!==iC),finalShape:y,isIdentity:f,sliceDim0:d,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function zW(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var Pv={};Be(Pv,{Serializable:()=>ll,SerializationMap:()=>Ps,registerClass:()=>$r});var ll=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ps=class{constructor(){this.classNameMap={}}static getMap(){return Ps.instance==null&&(Ps.instance=new Ps),Ps.instance}static register(e){Ps.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function $r(r){$(r.className!=null,()=>"Class being registered does not have the static className property defined."),$(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),$(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Ps.register(r)}var Bv={};Be(Bv,{TEST_EPSILON_FLOAT16:()=>Ov,createVideoElement:()=>jW,encodeStrings:()=>Lv,expectArrayBuffersEqual:()=>KW,expectArraysClose:()=>UW,expectArraysEqual:()=>HW,expectNumbersClose:()=>Mv,expectPromiseToFail:()=>GW,expectValuesInRange:()=>qW,play:()=>XW,testEpsilon:()=>pf});var WW=.001,Ov=.1;function UW(r,e,t){return t==null&&(t=pf()),uC(r,e,(o,n)=>pC(o,n,t))}function pf(){return N.backend.floatPrecision()===32?WW:Ov}function uC(r,e,t){let o=!0;if((Ut(r)||Ut(e))&&(o=!1),Ut(r)&&Ut(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=or(r),i=or(e);if(!Or(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Ut(r)?r:on(r),s=Ut(e)?e:on(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. +`)}function tz(r,e,t,o){let n=ze(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t==="complex64"?Yc(r):r;if(i>1)for(let u=0;uuv){let g=jc*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-jc)*a,i*a));return t==="complex64"&&(x=Yc(x),b=Yc(b)),["["+x.map((C,w)=>Xc(C,n[w],t)).join(", ")+", ..., "+b.map((C,w)=>Xc(C,n[i-jc+w],t)).join(", ")+"]"]}return["["+(t==="complex64"?Yc(r):Array.from(r)).map((g,x)=>Xc(g,n[x],t)).join(", ")+"]"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>uv){for(let h=0;h`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=o||lb(t,this.size),this.strides=hs(e)}set(e,...t){t.length===0&&(t=[0]),E(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nAp(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),rs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=rs().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Ap(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await rs().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(rs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Rp.print(this,e)}clone(){return this.throwIfDisposed(),Rp.clone(this)}toString(e=!1){let t=this.dataSync();return pv(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Rp.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),rs().makeVariable(this,e,t,o)}};Object.defineProperty(it,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function oz(){return Gc("Tensor",()=>it)}oz();var va=class extends it{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Pr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);rs().disposeTensor(this),this.dataId=e.dataId,rs().incRef(this,null)}dispose(){rs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(va,Symbol.hasInstance,{value:r=>r instanceof it&&r.assign!=null&&r.assign instanceof Function});var hv={};Ue(hv,{assertTypesMatch:()=>Fb,getTensorsInContainer:()=>Qc,isTensorInList:()=>sz,makeTypesMatch:()=>Re});var _b;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(_b||(_b={}));var Eb;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(Eb||(Eb={}));var $b;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})($b||($b={}));var Ab;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(Ab||(Ab={}));var Rb;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(Rb||(Rb={}));var nz={float32:Ab,int32:Eb,bool:$b,complex64:Rb};function dt(r,e){if(r==="string"||e==="string"){if(r==="string"&&e==="string")return"string";throw new Error(`Can not upcast ${r} with ${e}`)}return nz[r][e]}function ka(r){return dt(r,"int32")}function Re(r,e){if(r.dtype===e.dtype)return[r,e];let t=dt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Fb(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function sz(r,e){return e.some(t=>t.id===r.id)}function Qc(r){let e=[];return fv(r,e,new Set),e}function fv(r,e,t){if(r==null)return;if(r instanceof it){e.push(r);return}if(!az(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),fv(s,e,t))}}function az(r){return Array.isArray(r)||typeof r=="object"}function Db(r){return r.kernelName!=null}var Pm=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},xi=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Pm}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Am(e).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let o=t.factory();if(o&&!(o instanceof Zr)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return xi.nextTensorId++}nextVariableId(){return xi.nextVariableId++}clone(e){let t=T.runKernel(mo,{x:e}),o={x:e},n=a=>({x:()=>{let i="float32",p={x:a},u={dtype:i};return T.runKernel(co,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(qc(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Db(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Db(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=qc(f,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,C);let w=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,w);o=this.saveTensorsForBackwardMode(k)}return w}}else{let{forwardFunc:f}=e,h=g=>{!n||(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:l}=e,m=Db(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(f=>c[f]!=null?c[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=Cb(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?(E(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=e;o==="string"&&Po(e[0])&&(s=e.map(p=>gi(p)));let a=n.write(s,t,o),i=new it(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o==="string"){let p=this.state.tensorInfo.get(a),u=fb(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||"float32";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new it(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new va(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let o=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(o=e.size*Sm(e.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:o})),e instanceof va||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let o=e.size*Sm(e.dtype);this.state.numBytes-=o}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,o=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=Cb(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=ap(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Qc(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if(E(t.length>0,()=>"gradients() received an empty list of xs."),o!=null&&o.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));E(s instanceof it,()=>"The result y returned by f() must be a tensor.");let a=av(this.state.activeTape,t,s);if(!n&&a.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[s.id]=o==null?iz(s.shape):o,iv(i,a,u=>this.tidy(u),uz);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return E(fs(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{E(t.every(i=>i instanceof it),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),E(o.value instanceof it,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),E(fs(o.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];E(c.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),E(c.every(m=>m instanceof it),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=ou(),o=await this.backend.time(e);return o.wallMs=ou()-t,o}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Pm;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};xi.nextTensorId=0;xi.nextVariableId=0;function iz(r){let e=zc(ze(r),"float32");return T.makeTensor(e,r,"float32")}function Ob(){let r=xb();if(r._tfengine==null){let e=new Uc(r);r._tfengine=new xi(e)}return UI(r._tfengine.ENV),lv(()=>r._tfengine),r._tfengine}var T=Ob();function uz(r,e){let t={a:r,b:e};return T.runKernel(eo,t)}var yi={};Ue(yi,{isBrowser:()=>Mb,isMobile:()=>lz,mockIsMobile:()=>cz});function pz(){return typeof navigator!="undefined"&&navigator!=null}var Pb;function cz(r){Pb=r}function lz(r){if(Pb!==void 0)return Pb;if(r||pz()){if(r||(r=navigator),r.product==="ReactNative")return!0;let e=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}return!1}function Mb(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var oo=O();oo.registerFlag("DEBUG",()=>!1,r=>{r&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});oo.registerFlag("IS_BROWSER",()=>Mb());oo.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");oo.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));oo.registerFlag("PROD",()=>!1);oo.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>oo.getBool("DEBUG"));oo.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);oo.registerFlag("IS_TEST",()=>!1);oo.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);oo.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);oo.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);oo.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function or(r,e){let t=r;if(Wt(r))return e==="string"?[]:[r.length];if(typeof r=="object"&&"texture"in r){let n=r.channels||"RGBA";return[r.height,r.width*n.length]}if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Wt(t)&&e!=="string";)o.push(t.length),t=t[0];return Array.isArray(r)&&O().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&xv(r,o,[]),o}function xv(r,e,t){if(t=t||[],!Array.isArray(r)&&!Wt(r)){E(e.length===0,()=>`Element arr[${t.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}E(e.length>0,()=>`Element arr[${t.join("][")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===e[0],()=>`Element arr[${t.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),gv(o,n,e,t),r==null||!Wt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let p=r==null?"null":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=or(r,n);!Wt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!=="string"?$p(r,n):Oo(r,[],!0);return T.makeTensor(i,s,n)}function Na(r,e,t,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Lb="__op";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith("_")&&(t=t.substring(0,t.length-1)),t=t+Lb;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Wc(a)&&console.error("Cannot return a Promise inside of tidy."),T.endScope(a),a}catch(a){throw T.endScope(null),a}};return Object.defineProperty(n,"name",{value:t,configurable:!0}),n}function mz(r,e){let t=v(r,"real","complex"),o=v(e,"imag","complex");ht(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return T.runKernel(ei,n)}var Tr=N({complex_:mz});function xr(r,e,t,o){if(o==null&&(o=np(r)),o==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof r=="object"&&"texture"in r){if(o!=="float32"&&o!=="int32")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return r.channels=r.channels||"RGBA",T.backend.createTensorFromTexture(r,e||t,o)}if(!Wt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(e!=null){yt(e);let n=ze(e),s=ze(t);E(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Wt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!=="string"?$p(r,o):Oo(r,[],!0),T.makeTensor(r,e,o)}function nr(r,e,t){let o=or(r,t);return xr(r,e,o,t)}var Zc={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Mm=4;async function bv(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+Mm*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(e+=s.byteLength,t.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Bb=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function yv(r){return Bb?Buffer.byteLength(r):new Blob([r]).size}function Cv(r){if(Bb)return Buffer.from(r).toString("base64");let e=new Uint8Array(r),t="";for(let o=0,n=e.length;o{e+=n.byteLength});let t=new Uint8Array(e),o=0;return r.forEach(n=>{t.set(new Uint8Array(n),o),o+=n.byteLength}),t.buffer}function Vb(r){let e="/";for(r=r.trim();r.endsWith(e);)r=r.slice(0,r.length-1);let t=r.split(e);return t[t.length-1]}function Bm(r,e){let t={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:e};return r.signature!=null&&(t.signature=r.signature),r.userDefinedMetadata!=null&&(t.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(t.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(t.initializerSignature=r.initializerSignature),r.trainingConfig!=null&&(t.trainingConfig=r.trainingConfig),t}function zb(r,e,t){let o={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(o.trainingConfig=r.trainingConfig),r.weightsManifest!=null){if(!e)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!t)throw new Error("modelJSON has weightsManifest but weightData is null");o.weightSpecs=e,o.weightData=t}return r.signature!=null&&(o.signature=r.signature),r.userDefinedMetadata!=null&&(o.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(o.modelInitializer=r.modelInitializer),r.initializerSignature!=null&&(o.initializerSignature=r.initializerSignature),o}async function Dp(r,e){let t,o;return r.weightsManifest!=null&&([t,o]=await e(r.weightsManifest)),zb(r,t,o)}function Ps(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:r.modelTopology==null?0:yv(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:yv(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function Vm(r){let e=[];for(let t of r)e.push(...t.weights);return e}function fz(){let r=t=>{let o=t<<13,n=0;for(;(o&8388608)===0;)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function hz(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function gz(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function xz(){let r=fz(),e=hz(),t=gz();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var lt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return lt.instance==null&&(lt.instance=new lt),lt.instance}static registerSaveRouter(e){lt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){lt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return lt.getHandlers(e,"save")}static getLoadHandlers(e,t){return lt.getHandlers(e,"load",t)}static getHandlers(e,t,o){let n=[];return(t==="load"?lt.getInstance().loadRouters:lt.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},wv=r=>lt.registerSaveRouter(r),Iv=r=>lt.registerLoadRouter(r),vv=r=>lt.getSaveHandlers(r),kv=(r,e)=>lt.getLoadHandlers(r,e);var Wb="tensorflowjs",Ub=1,nu="models_store",bi="model_info_store";function Nv(){if(!O().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let r=typeof window=="undefined"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Gb(r){let e=r.result;e.createObjectStore(nu,{keyPath:"modelPath"}),e.createObjectStore(bi,{keyPath:"modelPath"})}var Ms=class{constructor(e){if(this.indexedDB=Nv(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((o,n)=>{let s=this.indexedDB.open(Wb,Ub);s.onupgradeneeded=()=>Gb(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(nu,"readonly"),u=i.objectStore(nu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{let i=Ps(t),p=a.transaction(bi,"readwrite"),u=p.objectStore(bi),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),l;c.onsuccess=()=>{l=a.transaction(nu,"readwrite");let d=l.objectStore(nu).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(bi);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Ms.URL_SCHEME="indexeddb://";var Tv=r=>O().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Ms.URL_SCHEME)?yz(r.slice(Ms.URL_SCHEME.length)):null;lt.registerSaveRouter(Tv);lt.registerLoadRouter(Tv);function yz(r){return new Ms(r)}function bz(r){return r.startsWith(Ms.URL_SCHEME)?r.slice(Ms.URL_SCHEME.length):r}var zm=class{constructor(){this.indexedDB=Nv()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Wb,Ub);o.onupgradeneeded=()=>Gb(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(bi,"readonly"),i=s.objectStore(bi).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=bz(e),new Promise((t,o)=>{let n=this.indexedDB.open(Wb,Ub);n.onupgradeneeded=()=>Gb(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(bi,"readwrite"),i=a.objectStore(bi),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(nu,"readwrite");let d=u.objectStore(nu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var Ta="/",Op="tensorflowjs_models",_v="info",Cz="model_topology",Sz="weight_specs",wz="weight_data",Iz="model_metadata";function Ev(r){return{info:[Op,r,_v].join(Ta),topology:[Op,r,Cz].join(Ta),weightSpecs:[Op,r,Sz].join(Ta),weightData:[Op,r,wz].join(Ta),modelMetadata:[Op,r,Iz].join(Ta)}}function $v(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function vz(r){let e=r.split(Ta);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(Ta)}function kz(r){return r.startsWith(Ls.URL_SCHEME)?r.slice(Ls.URL_SCHEME.length):r}var Ls=class{constructor(e){if(!O().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=Ev(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),o=JSON.stringify(e.weightSpecs),n=Ps(e);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,Cv(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw $v(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=Sv(a),t}};Ls.URL_SCHEME="localstorage://";var Av=r=>O().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Ls.URL_SCHEME)?Nz(r.slice(Ls.URL_SCHEME.length)):null;lt.registerSaveRouter(Av);lt.registerLoadRouter(Av);function Nz(r){return new Ls(r)}var Wm=class{constructor(){E(O().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),E(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Op+Ta,o=Ta+_v;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(Pp)&&(e=e.slice(0,e.indexOf(Pp))),E(e.length>0,()=>"scheme must not be an empty string.");let o=Xt.getInstance();E(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=Xt.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Xt.getInstance().managers)}};function Um(r){if(r.indexOf(Pp)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Xt.getSchemes().join(",")}`);return{scheme:r.split(Pp)[0],path:r.split(Pp)[1]}}async function Rv(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=lt.getLoadHandlers(r);E(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),E(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=lt.getSaveHandlers(e);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),E(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Um(r).scheme,p=Um(r).path,u=i===Um(r).scheme,c=await n.load();t&&u&&await Xt.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Xt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function Fv(){let r=Xt.getSchemes(),e={};for(let t of r){let o=await Xt.getManager(t).listModels();for(let n in o){let s=t+Pp+n;e[s]=o[n]}}return e}async function Dv(r){let e=Um(r);return Xt.getManager(e.scheme).removeModel(e.path)}async function Ov(r,e){return Rv(r,e,!1)}async function Pv(r,e){return Rv(r,e,!0)}var Hb=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!O().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(O().get("IS_BROWSER")){O().setPlatform("browser",new Hb);try{Xt.registerManager(Ls.URL_SCHEME,new Wm)}catch(r){}try{Xt.registerManager(Ms.URL_SCHEME,new zm)}catch(r){}}var Tz={importFetch:()=>Mv()},qb;var Kb=class{constructor(){this.util=Lv(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return O().global.fetch!=null?O().global.fetch(e,t):(qb==null&&(qb=Tz.importFetch()),qb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};O().get("IS_NODE")&&!O().get("IS_BROWSER")&&O().setPlatform("node",new Kb);function le(r,e="float32",t){return e=e||"float32",yt(r),new st(r,e,t)}function _z(r,e){let t=v(r,"x","cast");if(!db(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e==="string"&&t.dtype!=="string"||e!=="string"&&t.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:t},n={dtype:e};return T.runKernel(co,o,n)}var Ke=N({cast_:_z});function Ez(r){let t={x:v(r,"x","clone","string_or_numeric")};return T.runKernel(mo,t)}var Br=N({clone_:Ez});function Gm(r,e=!1){console.log(r.toString(e))}Ob();var $z={buffer:le,cast:Ke,clone:Br,print:Gm};mv($z);var Ea={};Ue(Ea,{browserFiles:()=>Vv,browserHTTPRequest:()=>Uv,concatenateArrayBuffers:()=>Fp,copyModel:()=>Ov,decodeWeights:()=>Lm,encodeWeights:()=>bv,fromMemory:()=>Gv,fromMemorySync:()=>Jb,getLoadHandlers:()=>kv,getModelArtifactsForJSON:()=>Dp,getModelArtifactsForJSONSync:()=>zb,getModelArtifactsInfoForJSON:()=>Ps,getSaveHandlers:()=>vv,getWeightSpecs:()=>Vm,http:()=>qm,isHTTPScheme:()=>Hm,listModels:()=>Fv,loadWeights:()=>zv,moveModel:()=>Pv,registerLoadRouter:()=>Iv,registerSaveRouter:()=>wv,removeModel:()=>Dv,weightsLoaderFactory:()=>Qb,withSaveHandler:()=>Hv,withSaveHandlerSync:()=>qv});var Az="model",Rz=".json",Fz=".weights.bin";function Bv(r){return new Promise(e=>setTimeout(e)).then(r)}var _a=class{constructor(e){if(!O().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(_a.URL_SCHEME)&&(e=e.slice(_a.URL_SCHEME.length)),(e==null||e.length===0)&&(e=Az),this.modelJsonFileName=e+Rz,this.weightDataFileName=e+Fz}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let o=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],n=Bm(e,o),s=window.URL.createObjectURL(new Blob([JSON.stringify(n)],{type:"application/json"})),a=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=s,await Bv(()=>a.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await Bv(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Ps(e)}}}};_a.URL_SCHEME="downloads://";var jb=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=Dp(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,Fp(a)])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Vb(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Vb(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},Dz=r=>O().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(_a.URL_SCHEME)?Oz(r.slice(_a.URL_SCHEME.length)):null;lt.registerSaveRouter(Dz);function Oz(r="model"){return new _a(r)}function Vv(r){return new jb(r)}function Xb(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){E(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){E(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),E(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function Yb(r,e){e==null&&(e={});let t=e.fetchFunc==null?O().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),n=0,s=.5,i=(e.onProgress==null?await Promise.all(o):await Xb(o,e.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return e.onProgress==null?await Promise.all(i):await Xb(i,e.onProgress,p,u)}async function zv(r,e="",t,o){return Qb(a=>Yb(a,{requestInit:o}))(r,e,t)}function Qb(r){return async(e,t="",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=Zc[x]*ze(g.shape),C=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((w,k)=>{w===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(", ")}. +Manifest JSON has weights with names: ${i.join(", ")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith("/")?"":"/")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=0;for(let w=0;w{let k=g.slice(w.groupOffset,w.groupOffset+w.sizeBytes),_=Lm(k,[w.manifestEntry]);for(let $ in _)l[$]=_[$]}),m+=f}),l}}var Pz="application/octet-stream",Mz="application/json",Jc=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(E(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=O().platform.fetch,E(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&E(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let o=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=Bm(e,o);t.body.append("model.json",new Blob([JSON.stringify(n)],{type:Mz}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:Pz}),"model.weights.bin");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:Ps(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Dp(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=Lz(t),s=this.weightPathPrefix||o,a=Vm(e),i=[],p=[];for(let c of e)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await Yb(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Fp(u)]}};Jc.URL_SCHEME_REGEX=/^https?:\/\//;function Lz(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function Hm(r){return r.match(Jc.URL_SCHEME_REGEX)!=null}var Wv=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>Hm(o)):t=Hm(r),t)return qm(r,e)}return null};lt.registerSaveRouter(Wv);lt.registerLoadRouter(Wv);function qm(r,e){return new Jc(r,e)}function Uv(r,e){return qm(r,e)}var el=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},Km=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},Zb=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function Gv(r,e,t,o){let n=arguments;return new Zb(Jb(...n))}function Jb(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new el(r):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new el({modelTopology:r})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new el({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function Hv(r){return new Km(r)}function qv(r){return new Km(r)}var jv={};Ue(jv,{confusionMatrix:()=>Kv});function Bz(r,e,t=!1,o=!1){let n=v(r,"a","matMul"),s=v(e,"b","matMul");[n,s]=Re(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Wo,a,i)}var Xe=N({matMul_:Bz});function Vz(r,e,t=1,o=0,n="int32"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:e,onValue:t,offValue:o};return T.runKernel(En,a,i)}var tl=N({oneHot_:Vz});function wie(){O().set("PROD",!0)}function Iie(){O().set("DEBUG",!0)}function vie(){O().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function eC(r){O().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}dv(eC);function kie(){T.disposeVariables()}function cr(){return T}function Nie(){return T.memory()}function Tie(r){return T.profile(r)}function Ee(r,e){return T.tidy(r,e)}function Dt(r){Qc(r).forEach(t=>t.dispose())}function _r(r){return T.keep(r)}function _ie(r){return T.time(r)}function Eie(r){return T.setBackend(r)}function $ie(){return T.ready()}function Aie(){return T.backendName}function Rie(r){T.removeBackend(r)}function Fie(r){return T.findBackend(r)}function Die(r){return T.findBackendFactory(r)}function Ci(r,e,t=1){return T.registerBackend(r,e,t)}function Oie(){return T.backend}function Pie(r,e){O().setPlatform(r,e)}function zz(r){let t={input:v(r,"input","imag")};return T.runKernel(si,t)}var Si=N({imag_:zz});function Wz(r){let t={x:v(r,"x","neg")};return T.runKernel(ws,t)}var yr=N({neg_:Wz});function Uz(r){let t={input:v(r,"input","real")};return T.runKernel(ai,t)}var $a=N({real_:Uz});function Gz(r,e,t){let o=v(r,"x","transpose");if(e==null&&(e=o.shape.map((a,i)=>i).reverse()),E(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{E(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype==="complex64"?Ee(()=>{let a=$a(o),i=Si(o);return a=T.runKernel(ro,{x:a},s),i=T.runKernel(ro,{x:i},s),t&&(i=yr(i)),Tr(a,i)}):T.runKernel(ro,n,s)}var Mp=N({transpose_:Gz});function Hz(r,e,t){let o=v(r,"labels","confusionMatrix"),n=v(e,"predictions","confusionMatrix");E(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),E(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),E(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),E(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),E(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=tl(Ke(o,"int32"),t),a=tl(Ke(n,"int32"),t),i=Mp(s),p=Xe(i,a);return Ke(p,"int32")}var Kv=N({confusionMatrix_:Hz});var br={};Ue(br,{assertAndGetBroadcastShape:()=>Je,getBroadcastDims:()=>Xv,getReductionAxes:()=>jm});function Xv(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function jm(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function Je(r,e){let t=[],o=Math.max(r.length,e.length);for(let n=0;nZz,fromPixelsAsync:()=>Yz,toPixels:()=>Qz});function Xm(r,e,t){if(Jr(r),e!=null&&e.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=or(r,t);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}var su;function Yv(r,e=3){if(e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(qc(Zi,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Zi,f,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext("2d").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(su==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")su=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else su=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});su.canvas.width=u,su.canvas.height=c,su.drawImage(r,0,0,u,c),l=su.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*e);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(t.dtype!=="float32"&&t.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${t.dtype}. Please use float32 or int32 tensors.`);let a=await t.data(),i=t.dtype==="float32"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype==="int32"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(c[0]=d*i,c[1]=d*i,c[2]=d*i):c[m]=d*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){e.width=n,e.height=o;let u=e.getContext("2d"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}var Zz=N({fromPixels_:Yv});var Ym={};Ue(Ym,{prepareAndValidate:()=>Zv});function Zv(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var rl={};Ue(rl,{calculateShapes:()=>Jv,validateInput:()=>Qm,validateUpdateShape:()=>tC});function tC(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;leW,computeFlatOffset:()=>sW,computeOutShape:()=>rW,getNormalizedAxes:()=>oW,isSliceContinous:()=>nW,maskToAxes:()=>tW,parseSliceParams:()=>aW,sliceInfo:()=>iW,startForAxis:()=>i0,startIndicesWithElidedDims:()=>n0,stopForAxis:()=>u0,stopIndicesWithElidedDims:()=>s0,stridesForAxis:()=>a0,stridesWithElidedDims:()=>t0});var rC=-2,Jz=-1;function eW(r,e,t){let o=r.shape.length;E(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),E(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function tW(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function rW(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=n0(a,d,f,o,r),l=s0(i,d,f,n,r),m=t0(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=r0(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=r0(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=op(0,a,p-1),a}function u0(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=op(0,a,p):a=op(-1,a,p-1),a}function nW(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function sW(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{E(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return t==null?s=new Array(n).fill(-1):typeof t=="number"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:(E(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function iW(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&(a&a-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(w&&m.strides[C]<=0)throw Error("only stride 1 allowed on non-range indexing.");h=h&&m.strides[C]===1;let A=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=e0(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=e0(m.end[C],1,m.strides[C],k,_,$);let P=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&P,f=f&&(C===0&&m.strides[C]===1||P)}else d=d&&m.strides[C]===1&&A,f=f&&(C===0&&m.strides[C]===1||A);let R,D=!1;if(m.beginValid&&m.endValid?(R=m.end[C]-m.begin[C],D=!0):w?(R=1,D=!0):A&&k>=0&&(m.strides[C]<0?R=-k:R=k,D=!0),D){let P;R===0||R<0!=m.strides[C]<0?P=0:P=Math.trunc(R/m.strides[C])+(R%m.strides[C]!==0?1:0),g.push(P)}else g.push(-1)}for(let C=0;C=0?x.push(g[w]):w===rC&&x.push(1)}return{finalShapeSparse:x.filter((C,w)=>m.finalShapeGatherIndices[w]!==rC),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function uW(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var p0={};Ue(p0,{Serializable:()=>ol,SerializationMap:()=>Bs,registerClass:()=>Er});var ol=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Bs=class{constructor(){this.classNameMap={}}static getMap(){return Bs.instance==null&&(Bs.instance=new Bs),Bs.instance}static register(e){Bs.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Er(r){E(r.className!=null,()=>"Class being registered does not have the static className property defined."),E(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),E(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Bs.register(r)}var d0={};Ue(d0,{TEST_EPSILON_FLOAT16:()=>c0,createVideoElement:()=>hW,encodeStrings:()=>m0,expectArrayBuffersEqual:()=>fW,expectArraysClose:()=>cW,expectArraysEqual:()=>mW,expectNumbersClose:()=>l0,expectPromiseToFail:()=>lW,expectValuesInRange:()=>dW,play:()=>gW,testEpsilon:()=>Zm});var pW=.001,c0=.1;function cW(r,e,t){return t==null&&(t=Zm()),oC(r,e,(o,n)=>nC(o,n,t))}function Zm(){return T.backend.floatPrecision()===32?pW:c0}function oC(r,e,t){let o=!0;if((Wt(r)||Wt(e))&&(o=!1),Wt(r)&&Wt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=or(r),i=or(e);if(!Pr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Wt(r)?r:Oo(r),s=Wt(e)?e:Oo(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. Actual: ${n}. Expected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!="undefined"&&expect().nothing()}function HW(r,e){let t=typeof e=="string"||typeof e=="number"||typeof e=="boolean"?[e]:e;return nn(r)||nn(r[0])||nn(e)||nn(e[0])?uC(r,t,(o,n)=>o==n):uC(r,e,(o,n)=>pC(o,n,0))}function Mv(r,e,t){if(t==null&&(t=pf()),!pC(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!="undefined"&&expect().nothing()}function pC(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function qW(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function KW(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener("loadeddata",o=>t(e)),e.load()})}async function XW(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var YW="4.0.0";function QW(r,e){let t=v(r,"a","add"),o=v(e,"b","add");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(_r,n)}var ge=T({add_:QW});function ZW(r,e){let t=v(r,"a","floorDiv"),o=v(e,"b","floorDiv");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(vn,n)}var cf=T({floorDiv_:ZW});function JW(r,e){let t=v(r,"a","div"),o=v(e,"b","div");if([t,o]=Re(t,o),t.dtype==="int32"&&o.dtype==="int32")return cf(t,o);let n={a:t,b:o},s={};return N.runKernel(Cn,n,s)}var We=T({div_:JW});function eU(r,e){let t=v(r,"a","mul"),o=v(e,"b","mul");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(ho,n)}var oe=T({mul_:eU});function tU(r){let e=v(r,"x","abs");if(e.dtype==="complex64"){let t={x:e};return N.runKernel(cp,t)}else{let t={x:e};return N.runKernel(sn,t)}}var Qt=T({abs_:tU});function rU(r){let t={x:v(r,"x","acos")};return N.runKernel(Li,t)}var Vv=T({acos_:rU});function oU(r){let t={x:v(r,"x","acosh")};return N.runKernel(Bi,t)}var zv=T({acosh_:oU});function nU(r){$(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,"addN")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(n=>{if(!Or(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=e;return N.runKernel(an,o)}var Wv=T({addN_:nU});function sU(r,e=null,t=!1){let n={x:v(r,"x","all","bool")},s={axis:e,keepDims:t};return N.runKernel(oa,n,s)}var Uv=T({all_:sU});function aU(r,e=null,t=!1){let n={x:v(r,"x","any","bool")},s={axis:e,keepDims:t};return N.runKernel(na,n,s)}var Gv=T({any_:aU});function iU(r,e=0){let o={x:v(r,"x","argMax")},n={axis:e};return N.runKernel(un,o,n)}var Hv=T({argMax_:iU});function uU(r,e=0){let o={x:v(r,"x","argMin")},n={axis:e};return N.runKernel(ja,o,n)}var qv=T({argMin_:uU});function pU(r){let t={x:v(r,"x","asin")};return N.runKernel(Vi,t)}var Kv=T({asin_:pU});function cU(r){let t={x:v(r,"x","asinh")};return N.runKernel(zi,t)}var jv=T({asinh_:cU});function lU(r){let t={x:v(r,"x","atan")};return N.runKernel(Wi,t)}var Xv=T({atan_:lU});function mU(r,e){let t=v(r,"a","atan2"),o=v(e,"b","atan2");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(sa,n)}var Yv=T({atan2_:mU});function fU(r){let t={x:v(r,"x","atanh")};return N.runKernel(Ui,t)}var Qv=T({atanh_:fU});function dU(r,e,t,o,n="NHWC",s){let a=r[3],i=[...e,a],p=Jv(n);return uu(r,i,t,s,o,null,null,p)}function lC(r,e,t,o,n,s,a="channelsLast"){let[i,p]=lf(e),u;if(a==="channelsLast")u=[i,p,r[3],r[3]];else if(a==="channelsFirst")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return uu(r,u,t,o,n,s,!1,a)}function hU(r,e,t,o,n,s,a="NDHWC"){let[i,p,u]=cC(e),c,l;if(a==="NDHWC")l="channelsLast",c=[i,p,u,r[4],r[4]];else if(a==="NCDHW")l="channelsFirst",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Zv(r,c,t,o,n,!1,l,s)}function uu(r,e,t,o,n,s,a=!1,i="channelsLast"){let[p,u,c,l]=[-1,-1,-1,-1];if(i==="channelsLast")[p,u,c,l]=r;else if(i==="channelsFirst")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,f,,d]=e,[h,g]=lf(t),[y,b]=lf(o),C=Up(m,y),w=Up(f,b),{padInfo:k,outHeight:_,outWidth:E}=yU(n,u,c,h,g,C,w,s,i),R=a?d*l:d,A;return i==="channelsFirst"?A=[p,R,_,E]:i==="channelsLast"&&(A=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:f,effectiveFilterHeight:C,effectiveFilterWidth:w,dilationHeight:y,dilationWidth:b,inShape:r,outShape:A,filterShape:e}}function Zv(r,e,t,o,n,s=!1,a="channelsLast",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[p,u,c,l,m]=r;else if(a==="channelsFirst")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[f,d,h,,g]=e,[y,b,C]=cC(t),[w,k,_]=cC(o),E=Up(f,w),R=Up(d,k),A=Up(h,_),{padInfo:D,outDepth:O,outHeight:M,outWidth:L}=bU(n,u,c,l,y,b,C,E,R,A,i),W=s?g*m:g,V;return a==="channelsFirst"?V=[p,W,O,M,L]:a==="channelsLast"&&(V=[p,O,M,L,W]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:W,padInfo:D,strideDepth:y,strideHeight:b,strideWidth:C,filterDepth:f,filterHeight:d,filterWidth:h,effectiveFilterDepth:E,effectiveFilterHeight:R,effectiveFilterWidth:A,dilationDepth:w,dilationHeight:k,dilationWidth:_,inShape:r,outShape:V,filterShape:e}}function gU(r,e,t,o,n){o==null&&(o=mC(r,e,t));let s=r[0],a=r[1],i=au((s-e+2*o)/t+1,n),p=au((a-e+2*o)/t+1,n);return[i,p]}function xU(r,e,t,o,n,s){n==null&&(n=mC(r,e,o));let a=r[0],i=r[1],p=r[2],u=au((a-e+2*n)/o+1,s),c=au((i-e+2*n)/o+1,s),l=au((p-e+2*n)/o+1,s);return[u,c,l,t]}function mC(r,e,t,o=1){let n=Up(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function lf(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function cC(r){return typeof r=="number"?[r,r,r]:r}function Up(r,e){return e<=1?r:r+(r-1)*(e-1)}function yU(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r=="number"){u={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let f=gU([e,t],s,o,r,i);c=f[0],l=f[1]}else if(r==="same"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),f=Math.max(0,(l-1)*n+a-t),d=Math.floor(m/2),h=m-d,g=Math.floor(f/2),y=f-g;u={top:d,bottom:h,left:g,right:y,type:"SAME"}}else if(r==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r=="object"){let m=p==="channelsLast"?r[1][0]:r[2][0],f=p==="channelsLast"?r[1][1]:r[2][1],d=p==="channelsLast"?r[2][0]:r[3][0],h=p==="channelsLast"?r[2][1]:r[3][1];u={top:m,bottom:f,left:d,right:h,type:m===0&&f===0&&d===0&&h===0?"VALID":"EXPLICIT"},c=au((e-s+m+f)/o+1,i),l=au((t-a+d+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function bU(r,e,t,o,n,s,a,i,p,u,c){let l,m,f,d;if(typeof r=="number"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?"VALID":"NUMBER"};let g=xU([e,t,o,1],i,1,n,r,c);m=g[0],f=g[1],d=g[2]}else if(r==="same"){m=Math.ceil(e/n),f=Math.ceil(t/s),d=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(f-1)*s+p-t,y=(d-1)*a+u-o,b=Math.floor(h/2),C=h-b,w=Math.floor(g/2),k=g-w,_=Math.floor(y/2),E=y-_;l={top:w,bottom:k,left:_,right:E,front:b,back:C,type:"SAME"}}else if(r==="valid")l={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},m=Math.ceil((e-i+1)/n),f=Math.ceil((t-p+1)/s),d=Math.ceil((o-u+1)/a);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:f,outWidth:d}}function au(r,e){if(!e)return Math.trunc(r);switch(e){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function iu(r){let[e,t,o]=lf(r);return e===1&&t===1&&o===1}function lr(r,e){return iu(r)||iu(e)}function Jv(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Ot(r,e,t){if(t!=null){if(typeof e=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e=="number")$(ra(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e=="object")e.forEach(o=>{o.forEach(n=>{$(ra(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function CU(r,e){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:e};return N.runKernel(Ss,o,n)}var z=T({reshape_:CU});function IU(r,e,t,o,n){let s=v(r,"x","avgPool","float32"),a=1;$(lr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Ot("avgPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=N.runKernel(pn,u,c);return l=qe(l,s.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var mf=T({avgPool_:IU});function wU(r,e,t,o,n,s="NDHWC"){let a=v(r,"x","avgPool3d","float32"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ot("avgPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=N.runKernel(ip,u,c);return l=qe(l,i.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var ek=T({avgPool3d_:wU});function SU(r,e=0){$(r.length>=1,()=>"Pass at least one tensor to concat");let t=Ia(r,"tensors","concat","string_or_numeric");if(t[0].dtype==="complex64"&&t.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${s.dtype}. `)}),t.length===1)return zr(t[0]);let o=t,n={axis:e};return N.runKernel(gs,o,n)}var gt=T({concat_:SU});function vU(r){let t={x:v(r,"x","sigmoid","float32")};return N.runKernel(yo,t)}var Ms=T({sigmoid_:vU});function kU(r,e,t){let o=v(r,"x","slice","string_or_numeric");if(o.rank===0)throw new Error("Slicing scalar is not possible");let n={x:o},s={begin:e,size:t};return N.runKernel(qn,n,s)}var Ue=T({slice_:kU});function TU(r){let t={x:v(r,"x","tanh","float32")};return N.runKernel(Qn,t)}var ml=T({tanh_:TU});function NU(r,e,t,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(e,"lstmKernel","basicLSTMCell"),p=v(t,"lstmBias","basicLSTMCell"),u=v(o,"data","basicLSTMCell"),c=v(n,"c","basicLSTMCell"),l=v(s,"h","basicLSTMCell"),m=gt([u,l],1),f=Xe(m,i),d=ge(f,p),h=d.shape[0],g=d.shape[1]/4,y=[h,g],b=Ue(d,[0,0],y),C=Ue(d,[0,g],y),w=Ue(d,[0,g*2],y),k=Ue(d,[0,g*3],y),_=ge(oe(Ms(b),ml(C)),oe(c,Ms(ge(a,w)))),E=oe(ml(_),Ms(k));return[_,E]}var tk=T({basicLSTMCell_:NU});function _U(r,e,t){let o=v(r,"x","batchToSpaceND"),n=e.reduce((i,p)=>i*p);$(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),$(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return N.runKernel(hs,s,a)}var ff=T({batchToSpaceND_:_U});function rk(r){let e;return r.rank===0||r.rank===1?e=z(r,[1,1,1,r.size]):r.rank===2?e=z(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function EU(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;o!=null&&(c=v(o,"offset","batchNorm")),$(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),$(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),$(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:rk(a),scale:u,offset:c,mean:i,variance:p},f={varianceEpsilon:s},d=N.runKernel(kn,m,f);return z(d,a.shape)}var li=T({batchNorm_:EU});function $U(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var ok=T({batchNorm2d_:$U});function RU(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var nk=T({batchNorm3d_:RU});function AU(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),li(a,i,p,c,u,s)}var sk=T({batchNorm4d_:AU});function FU(r,e,t){let o=v(r,"x","bincount"),n=v(e,"weights","bincount");$(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return N.runKernel(up,s,a)}var df=T({bincount_:FU});function DU(r,e){let t=v(r,"s0","broadcastArgs","int32"),o=v(e,"s1","broadcastArgs","int32");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return N.runKernel(pp,n)}var ak=T({broadcastArgs_:DU});function PU(r,e){let t=v(r,"broadcastTo","x"),o=t.shape;if(e.some(u=>!(u>0)||u%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${e}].`);if(e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return zr(t);let i={x:t},p={reps:s};return N.runKernel(wo,i,p)}var Ls=T({broadcastTo_:PU});function OU(r){let t={x:v(r,"x","ceil","float32")};return N.runKernel(ro,t)}var ik=T({ceil_:OU});function Bs(r,e,t){let o={shape:r,value:e,dtype:t};return N.runKernel(ys,{},o)}function MU(r,e,t){let o=v(r,"x","clipByValue");if($(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Bs(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return N.runKernel(Ro,n,s)}var uk=T({clipByValue_:MU});function LU(r){return gt(r,0)}var pk=T({concat1d_:LU});function BU(r,e){return gt(r,e)}var ck=T({concat2d_:BU});function VU(r,e){return gt(r,e)}var lk=T({concat3d_:VU});function zU(r,e){return gt(r,e)}var mk=T({concat4d_:zU});function WU(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(e,"filter","conv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Ot("conv2d",o,a);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let m={x:u,filter:p},f={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},d=N.runKernel(ln,m,f);return c?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var mi=T({conv2d_:WU});function UU(r,e,t,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(e,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Ot("conv1d",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(lr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),$(n==="NWC",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=z(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=z(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=mi(m,l,[1,t],o,"NHWC",[1,s],a);return c?z(g,[g.shape[2],g.shape[3]]):z(g,[g.shape[0],g.shape[2],g.shape[3]])}var fk=T({conv1d_:UU});function GU(r,e,t,o,n,s="NHWC",a){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s==="NHWC"?i[3]:i[1],l=s==="NHWC"?p.shape[3]:p.shape[1];$(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),$(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Ot("conv2dDerInput",n,a);let m={dy:p,filter:t},f={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},d=N.runKernel(mn,m,f);return u?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var hf=T({conv2DBackpropInput_:GU});function HU(r,e,t,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(e,"filter","conv2dTranspose");return hf(t,a,i,o,n,"NHWC",s)}var dk=T({conv2dTranspose_:HU});function qU(r,e,t,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(e,"filter","conv3d"),p=a,u=!1;a.rank===4&&(u=!0,p=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(lr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`);let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=N.runKernel(mp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var hk=T({conv3d_:qU});function KU(r,e,t,o,n){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=z(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),$(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),$(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=N.runKernel(fp,c,l);return i?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var gk=T({conv3DBackpropInput_:KU});function jU(r,e,t,o,n){let s=v(r,"x","conv3dTranspose"),a=v(e,"filter","conv3dTranspose");return gk(t,s,a,o,n)}var xk=T({conv3dTranspose_:jU});function XU(r){let t={x:v(r,"x","cos","float32")};return N.runKernel(fn,t)}var yk=T({cos_:XU});function YU(r){let t={x:v(r,"x","cosh","float32")};return N.runKernel(dn,t)}var bk=T({cosh_:YU});function QU(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:e,exclusive:t,reverse:o};return N.runKernel(hn,s,a)}var Ck=T({cumprod_:QU});function ZU(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:e,exclusive:t,reverse:o};return N.runKernel(gn,s,a)}var Ik=T({cumsum_:ZU});function JU(r,e,t,o=!1){let n=v(r,"x","denseBincount"),s=v(e,"weights","denseBincount");$(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return N.runKernel(dp,a,i)}var wk=T({denseBincount_:JU});function eG(r,e,t="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=t==="NHWC"?o.shape[1]:o.shape[2],s=t==="NHWC"?o.shape[2]:o.shape[3],a=t==="NHWC"?o.shape[3]:o.shape[1];$(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),$(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function lW(r,e){r().then(()=>e.fail(),()=>e()),typeof expect!="undefined"&&expect().nothing()}function mW(r,e){let t=typeof e=="string"||typeof e=="number"||typeof e=="boolean"?[e]:e;return Po(r)||Po(r[0])||Po(e)||Po(e[0])?oC(r,t,(o,n)=>o==n):oC(r,e,(o,n)=>nC(o,n,0))}function l0(r,e,t){if(t==null&&(t=Zm()),!nC(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!="undefined"&&expect().nothing()}function nC(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function dW(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function fW(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener("loadeddata",o=>t(e)),e.load()})}async function gW(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var xW="4.1.0";function yW(r,e){let t=v(r,"a","add"),o=v(e,"b","add");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(eo,n)}var xe=N({add_:yW});function bW(r,e){let t=v(r,"a","floorDiv"),o=v(e,"b","floorDiv");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(sn,n)}var Jm=N({floorDiv_:bW});function CW(r,e){let t=v(r,"a","div"),o=v(e,"b","div");if([t,o]=Re(t,o),t.dtype==="int32"&&o.dtype==="int32")return Jm(t,o);let n={a:t,b:o},s={};return T.runKernel(Jo,n,s)}var Ge=N({div_:CW});function SW(r,e){let t=v(r,"a","mul"),o=v(e,"b","mul");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(kn,n)}var ae=N({mul_:SW});function wW(r){let e=v(r,"x","abs");if(e.dtype==="complex64"){let t={x:e};return T.runKernel(pp,t)}else{let t={x:e};return T.runKernel(gs,t)}}var Yt=N({abs_:wW});function IW(r){let t={x:v(r,"x","acos")};return T.runKernel(sa,t)}var f0=N({acos_:IW});function vW(r){let t={x:v(r,"x","acosh")};return T.runKernel(aa,t)}var h0=N({acosh_:vW});function kW(r){E(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),E(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,"addN")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(n=>{if(!Pr(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=e;return T.runKernel(Mo,o)}var g0=N({addN_:kW});function NW(r,e=null,t=!1){let n={x:v(r,"x","all","bool")},s={axis:e,keepDims:t};return T.runKernel(Lo,n,s)}var x0=N({all_:NW});function TW(r,e=null,t=!1){let n={x:v(r,"x","any","bool")},s={axis:e,keepDims:t};return T.runKernel(Bo,n,s)}var y0=N({any_:TW});function _W(r,e=0){let o={x:v(r,"x","argMax")},n={axis:e};return T.runKernel(Vo,o,n)}var b0=N({argMax_:_W});function EW(r,e=0){let o={x:v(r,"x","argMin")},n={axis:e};return T.runKernel(Za,o,n)}var C0=N({argMin_:EW});function $W(r){let t={x:v(r,"x","asin")};return T.runKernel(ia,t)}var S0=N({asin_:$W});function AW(r){let t={x:v(r,"x","asinh")};return T.runKernel(ua,t)}var w0=N({asinh_:AW});function RW(r){let t={x:v(r,"x","atan")};return T.runKernel(pa,t)}var I0=N({atan_:RW});function FW(r,e){let t=v(r,"a","atan2"),o=v(e,"b","atan2");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(la,n)}var v0=N({atan2_:FW});function DW(r){let t={x:v(r,"x","atanh")};return T.runKernel(ca,t)}var k0=N({atanh_:DW});function OW(r,e,t,o,n="NHWC",s){let a=r[3],i=[...e,a],p=T0(n);return uu(r,i,t,s,o,null,null,p)}function aC(r,e,t,o,n,s,a="channelsLast"){let[i,p]=ed(e),u;if(a==="channelsLast")u=[i,p,r[3],r[3]];else if(a==="channelsFirst")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return uu(r,u,t,o,n,s,!1,a)}function PW(r,e,t,o,n,s,a="NDHWC"){let[i,p,u]=sC(e),c,l;if(a==="NDHWC")l="channelsLast",c=[i,p,u,r[4],r[4]];else if(a==="NCDHW")l="channelsFirst",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return N0(r,c,t,o,n,!1,l,s)}function uu(r,e,t,o,n,s,a=!1,i="channelsLast"){let[p,u,c,l]=[-1,-1,-1,-1];if(i==="channelsLast")[p,u,c,l]=r;else if(i==="channelsFirst")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=ed(t),[x,b]=ed(o),C=Lp(m,x),w=Lp(d,b),{padInfo:k,outHeight:_,outWidth:$}=BW(n,u,c,h,g,C,w,s,i),A=a?f*l:f,R;return i==="channelsFirst"?R=[p,A,_,$]:i==="channelsLast"&&(R=[p,_,$,A]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:A,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:w,dilationHeight:x,dilationWidth:b,inShape:r,outShape:R,filterShape:e}}function N0(r,e,t,o,n,s=!1,a="channelsLast",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[p,u,c,l,m]=r;else if(a==="channelsFirst")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,C]=sC(t),[w,k,_]=sC(o),$=Lp(d,w),A=Lp(f,k),R=Lp(h,_),{padInfo:D,outDepth:P,outHeight:M,outWidth:L}=VW(n,u,c,l,x,b,C,$,A,R,i),W=s?g*m:g,V;return a==="channelsFirst"?V=[p,W,P,M,L]:a==="channelsLast"&&(V=[p,P,M,L,W]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:P,outHeight:M,outWidth:L,outChannels:W,padInfo:D,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:A,effectiveFilterWidth:R,dilationDepth:w,dilationHeight:k,dilationWidth:_,inShape:r,outShape:V,filterShape:e}}function MW(r,e,t,o,n){o==null&&(o=iC(r,e,t));let s=r[0],a=r[1],i=au((s-e+2*o)/t+1,n),p=au((a-e+2*o)/t+1,n);return[i,p]}function LW(r,e,t,o,n,s){n==null&&(n=iC(r,e,o));let a=r[0],i=r[1],p=r[2],u=au((a-e+2*n)/o+1,s),c=au((i-e+2*n)/o+1,s),l=au((p-e+2*n)/o+1,s);return[u,c,l,t]}function iC(r,e,t,o=1){let n=Lp(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function ed(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function sC(r){return typeof r=="number"?[r,r,r]:r}function Lp(r,e){return e<=1?r:r+(r-1)*(e-1)}function BW(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r=="number"){u={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let d=MW([e,t],s,o,r,i);c=d[0],l=d[1]}else if(r==="same"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),d=Math.max(0,(l-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:"SAME"}}else if(r==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r=="object"){let m=p==="channelsLast"?r[1][0]:r[2][0],d=p==="channelsLast"?r[1][1]:r[2][1],f=p==="channelsLast"?r[2][0]:r[3][0],h=p==="channelsLast"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?"VALID":"EXPLICIT"},c=au((e-s+m+d)/o+1,i),l=au((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function VW(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(typeof r=="number"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?"VALID":"NUMBER"};let g=LW([e,t,o,1],i,1,n,r,c);m=g[0],d=g[1],f=g[2]}else if(r==="same"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),C=h-b,w=Math.floor(g/2),k=g-w,_=Math.floor(x/2),$=x-_;l={top:w,bottom:k,left:_,right:$,front:b,back:C,type:"SAME"}}else if(r==="valid")l={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},m=Math.ceil((e-i+1)/n),d=Math.ceil((t-p+1)/s),f=Math.ceil((o-u+1)/a);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function au(r,e){if(!e)return Math.trunc(r);switch(e){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function iu(r){let[e,t,o]=ed(r);return e===1&&t===1&&o===1}function lr(r,e){return iu(r)||iu(e)}function T0(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Pt(r,e,t){if(t!=null){if(typeof e=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e=="number")E(na(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e=="object")e.forEach(o=>{o.forEach(n=>{E(na(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function zW(r,e){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:e};return T.runKernel(Ns,o,n)}var z=N({reshape_:zW});function WW(r,e,t,o,n){let s=v(r,"x","avgPool","float32"),a=1;E(lr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Pt("avgPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(zo,u,c);return l=Ke(l,s.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var td=N({avgPool_:WW});function UW(r,e,t,o,n,s="NDHWC"){let a=v(r,"x","avgPool3d","float32"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Pt("avgPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ip,u,c);return l=Ke(l,i.dtype),p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var _0=N({avgPool3d_:UW});function GW(r,e=0){E(r.length>=1,()=>"Pass at least one tensor to concat");let t=Na(r,"tensors","concat","string_or_numeric");if(t[0].dtype==="complex64"&&t.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${s.dtype}. `)}),t.length===1)return Br(t[0]);let o=t,n={axis:e};return T.runKernel(ys,o,n)}var gt=N({concat_:GW});function HW(r){let t={x:v(r,"x","sigmoid","float32")};return T.runKernel(Un,t)}var zs=N({sigmoid_:HW});function qW(r,e,t){let o=v(r,"x","slice","string_or_numeric");if(o.rank===0)throw new Error("Slicing scalar is not possible");let n={x:o},s={begin:e,size:t};return T.runKernel(_s,n,s)}var He=N({slice_:qW});function KW(r){let t={x:v(r,"x","tanh","float32")};return T.runKernel(Qn,t)}var nl=N({tanh_:KW});function jW(r,e,t,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(e,"lstmKernel","basicLSTMCell"),p=v(t,"lstmBias","basicLSTMCell"),u=v(o,"data","basicLSTMCell"),c=v(n,"c","basicLSTMCell"),l=v(s,"h","basicLSTMCell"),m=gt([u,l],1),d=Xe(m,i),f=xe(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=He(f,[0,0],x),C=He(f,[0,g],x),w=He(f,[0,g*2],x),k=He(f,[0,g*3],x),_=xe(ae(zs(b),nl(C)),ae(c,zs(xe(a,w)))),$=ae(nl(_),zs(k));return[_,$]}var E0=N({basicLSTMCell_:jW});function XW(r,e,t){let o=v(r,"x","batchToSpaceND"),n=e.reduce((i,p)=>i*p);E(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),E(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),E(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return T.runKernel(xs,s,a)}var rd=N({batchToSpaceND_:XW});function $0(r){let e;return r.rank===0||r.rank===1?e=z(r,[1,1,1,r.size]):r.rank===2?e=z(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function YW(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;o!=null&&(c=v(o,"offset","batchNorm")),E(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:$0(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(an,m,d);return z(f,a.shape)}var wi=N({batchNorm_:YW});function QW(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),E(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),E(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var A0=N({batchNorm2d_:QW});function ZW(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),E(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),E(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var R0=N({batchNorm3d_:ZW});function JW(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),E(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),E(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),wi(a,i,p,c,u,s)}var F0=N({batchNorm4d_:JW});function eU(r,e,t){let o=v(r,"x","bincount"),n=v(e,"weights","bincount");E(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return T.runKernel(Ja,s,a)}var od=N({bincount_:eU});function tU(r,e){let t=v(r,"s0","broadcastArgs","int32"),o=v(e,"s1","broadcastArgs","int32");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return T.runKernel(up,n)}var D0=N({broadcastArgs_:tU});function rU(r,e){let t=v(r,"broadcastTo","x"),o=t.shape;if(yt(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Br(t);let i={x:t},p={reps:s};return T.runKernel(to,i,p)}var Ii=N({broadcastTo_:rU});function oU(r){let t={x:v(r,"x","ceil","float32")};return T.runKernel(Uo,t)}var O0=N({ceil_:oU});function Ws(r,e,t){yt(r);let o={shape:r,value:e,dtype:t};return T.runKernel(Cs,{},o)}function nU(r,e,t){let o=v(r,"x","clipByValue");if(E(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Ws(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(lo,n,s)}var P0=N({clipByValue_:nU});function sU(r){return gt(r,0)}var M0=N({concat1d_:sU});function aU(r,e){return gt(r,e)}var L0=N({concat2d_:aU});function iU(r,e){return gt(r,e)}var B0=N({concat3d_:iU});function uU(r,e){return gt(r,e)}var V0=N({concat4d_:uU});function pU(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(e,"filter","conv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Pt("conv2d",o,a);let l=n==="NHWC"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),E(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(Go,m,d);return c?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var vi=N({conv2d_:pU});function cU(r,e,t,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(e,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1]])),E(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),E(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Pt("conv1d",o,a),E(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),E(lr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(n==="NWC",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=z(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=z(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=vi(m,l,[1,t],o,"NHWC",[1,s],a);return c?z(g,[g.shape[2],g.shape[3]]):z(g,[g.shape[0],g.shape[2],g.shape[3]])}var z0=N({conv1d_:cU});function lU(r,e,t,o,n,s="NHWC",a){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),E(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),E(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),E(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s==="NHWC"?i[3]:i[1],l=s==="NHWC"?p.shape[3]:p.shape[1];E(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),E(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Pt("conv2dDerInput",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(Ho,m,d);return u?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var nd=N({conv2DBackpropInput_:lU});function mU(r,e,t,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(e,"filter","conv2dTranspose");return nd(t,a,i,o,n,"NHWC",s)}var W0=N({conv2dTranspose_:mU});function dU(r,e,t,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(e,"filter","conv3d"),p=a,u=!1;a.rank===4&&(u=!0,p=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),E(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),E(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),E(lr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`);let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(lp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var U0=N({conv3d_:dU});function fU(r,e,t,o,n){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=z(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),E(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),E(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),E(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=T.runKernel(mp,c,l);return i?z(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var G0=N({conv3DBackpropInput_:fU});function hU(r,e,t,o,n){let s=v(r,"x","conv3dTranspose"),a=v(e,"filter","conv3dTranspose");return G0(t,s,a,o,n)}var H0=N({conv3dTranspose_:hU});function gU(r){let t={x:v(r,"x","cos","float32")};return T.runKernel(qo,t)}var q0=N({cos_:gU});function xU(r){let t={x:v(r,"x","cosh","float32")};return T.runKernel(Ko,t)}var K0=N({cosh_:xU});function yU(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(jo,s,a)}var j0=N({cumprod_:yU});function bU(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(Xo,s,a)}var X0=N({cumsum_:bU});function CU(r,e,t,o=!1){let n=v(r,"x","denseBincount"),s=v(e,"weights","denseBincount");E(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),E(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return T.runKernel(ti,a,i)}var Y0=N({denseBincount_:CU});function SU(r,e,t="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=t==="NHWC"?o.shape[1]:o.shape[2],s=t==="NHWC"?o.shape[2]:o.shape[3],a=t==="NHWC"?o.shape[3]:o.shape[1];E(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),E(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${n} and ${e} for depthToSpace with input shape - ${o.shape}`),$(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying + ${o.shape}`),E(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${e} for depthToSpace with input shape - ${o.shape}`),$(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return N.runKernel(yn,i,p)}var Sk=T({depthToSpace_:eG});function tG(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(e,"filter","depthwiseConv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Ot("depthwiseConv2d",o,a);let m={x:u,filter:p},f={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},d=N.runKernel(bn,m,f);return c?z(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Gp=T({depthwiseConv2d_:tG});function rG(r){let t={x:v(r,"x","diag")};return N.runKernel(xp,t)}var vk=T({diag_:rG});function oG(r,e,t,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(e,"filter","dilation2d");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=z(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=N.runKernel(yp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var kk=T({dilation2d_:oG});function nG(r,e){let t=v(r,"a","equal","string_or_numeric"),o=v(e,"b","equal","string_or_numeric");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(oo,n)}var gf=T({equal_:nG});function sG(r,e,t){let o=v(e,"a","where"),n=v(t,"b","where"),s=v(r,"condition","where","bool"),a=Je(Je(s.shape,o.shape),n.shape),i=Ls(s,a),p=Ls(o,a),u=Ls(n,a),c={condition:i,t:p,e:u};return N.runKernel(vs,c)}var os=T({where_:sG});function aG(r){let t={x:v(r,"x","zerosLike")};return N.runKernel(Es,t)}var Gt=T({zerosLike_:aG});function iG(r,e){let t=v(r,"a","div"),o=v(e,"b","div");[t,o]=Re(t,o);let n=We(t,o),s=Gt(n),a=gf(o,s);return os(a,s,n)}var Tk=T({divNoNan_:iG});function uG(r,e){let t=v(r,"t1","dot"),o=v(e,"t2","dot");$((t.rank===1||t.rank===2)&&(o.rank===1||o.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=z(t,[1,-1]),i=z(o,[-1,1]),p=Xe(a,i);return z(p,[])}else if(t.rank===1&&o.rank===2){let a=z(t,[1,-1]),i=z(o,[o.shape[0],o.shape[1]]),p=Xe(a,i);return z(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=z(o,[-1,1]),i=Xe(t,a);return z(i,[i.size])}else{let a=z(o,[o.shape[0],o.shape[1]]);return Xe(t,a)}}var Nk=T({dot_:uG});function pG(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return N.runKernel(Xa,t,o)}var _k=T({einsum_:pG});function cG(r){let t={x:v(r,"x","elu","float32")};return N.runKernel(In,t)}var xf=T({elu_:cG});function lG(r){let e=v(r,"x","erf");$(e.dtype==="int32"||e.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),e.dtype==="int32"&&(e=qe(e,"float32"));let t={x:e};return N.runKernel(Gi,t)}var Ek=T({erf_:lG});function fC(r,e){for(let t=0;tr[s]);return[t,n]}function Ta(r,e){let t=e.map(o=>1);return $k(r,t,e)}function fG(r,e,t){$(fC(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function dG(r,e){if(fC(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function hG(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function gG(r,e){let t=[];for(let o=e-r;o"Axis must be <= rank of the tensor");let o={input:t},n={dim:e};return N.runKernel(xs,o,n)}var _a=T({expandDims_:NG});function _G(r){let t={x:v(r,"x","expm1")};return N.runKernel(wn,t)}var Fk=T({expm1_:_G});function EG(r,e){let t=v(r,"x","tile","string_or_numeric");$(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return N.runKernel(wo,o,n)}var fi=T({tile_:EG});function $G(r,e,t,o="float32"){e==null&&(e=r);let n=ne([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`),$(ra(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=z(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=N.runKernel(wp,p,u);return i?z(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Bk=T({localResponseNormalization_:zG});function WG(r){let t={x:v(r,"x","log","float32")};return N.runKernel(lo,t)}var Ea=T({log_:WG});function UG(r){let t={x:v(r,"x","log1p")};return N.runKernel(Ki,t)}var Sf=T({log1p_:UG});function GG(r){return $(fs(r),()=>"The f passed in grad(f) must be a function"),(e,t)=>{let o=v(e,"x","tf.grad","string_or_numeric"),n=t!=null?v(t,"dy","tf.grad"):null;return N.tidy(()=>{let{value:s,grads:a}=N.gradients(()=>r(o),[o],n);return n!=null&&ht(s.shape,n.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),vf(a),a[0]})}}function HG(r){return $(fs(r),()=>"The f passed in grads(f) must be a function"),(e,t)=>{$(Array.isArray(e),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=Ia(e,"args","tf.grads","string_or_numeric"),n=t!=null?v(t,"dy","tf.grads"):null;return N.tidy(()=>{let{value:s,grads:a}=N.gradients(()=>r(...o),o,n);return n!=null&&ht(s.shape,n.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),vf(a),a})}}function qG(r){return $(fs(r),()=>"The f passed in valueAndGrad(f) must be a function"),(e,t)=>{$(e instanceof ut,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),$(t==null||t instanceof ut,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=N.gradients(()=>r(e),[e],t);return vf(o),{grad:o[0],value:n}}}function KG(r){return $(fs(r),()=>"The f passed in valueAndGrads(f) must be a function"),(e,t)=>{$(Array.isArray(e)&&e.every(n=>n instanceof ut),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),$(t==null||t instanceof ut,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=N.gradients(()=>r(...e),e,t);return t!=null&&ht(o.value.shape,t.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),vf(o.grads),o}}function dC(r,e){$(fs(r),()=>"The f passed in variableGrads(f) must be a function"),$(e==null||Array.isArray(e)&&e.every(u=>u instanceof ba),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let t=e!=null;if(!t){e=[];for(let u in N.registeredVariables)e.push(N.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),$(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=N.gradients(r,e,null,s);$(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Cr(r){return N.customGrad(r)}function vf(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that - the f you passed encloses all operations that lead from x to y.`)}function jG(r){let t={x:v(r,"x","softplus")};return N.runKernel(Qi,t)}var kf=T({softplus_:jG});function XG(r){let e=v(r,"x","logSigmoid");return Cr(o=>({value:yr(kf(yr(o))),gradFunc:a=>oe(a,Ms(yr(o)))}))(e)}var Vk=T({logSigmoid_:XG});function YG(r,e){let t=v(r,"a","sub"),o=v(e,"b","sub");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(Io,n)}var ke=T({sub_:YG});function QG(r,e=-1){let t=v(r,"logits","logSoftmax");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Cr((n,s)=>{let i=Vs(n,e,!0),p=ke(n,i),u=ke(qe(p,"float32"),Ea(tt(Bo(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[f]=m,d=!0,h=Bo(f);return ke(l,oe(tt(l,e,d),h))}}})(t)}var zk=T({logSoftmax_:QG});function ZG(r,e=null,t=!1){let o=v(r,"x","logSumExp"),n=Ka(e,o.shape),s=Vs(o,n,!0),a=ke(o,s),i=Bo(a),p=tt(i,n),u=Ea(p),c=ge(z(s,u.shape),u);if(t){let l=Ta(c.shape,n);return z(c,l)}return c}var Tf=T({logSumExp_:ZG});function JG(r,e){let t=v(r,"a","logicalAnd","bool"),o=v(e,"b","logicalAnd","bool");Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(_n,n)}var lu=T({logicalAnd_:JG});function e4(r){let t={x:v(r,"x","logicalNot","bool")};return N.runKernel(En,t)}var Nf=T({logicalNot_:e4});function t4(r,e){let t=v(r,"a","logicalOr","bool"),o=v(e,"b","logicalOr","bool");Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(ua,n)}var _f=T({logicalOr_:t4});function r4(r,e){let t=v(r,"a","logicalXor","bool"),o=v(e,"b","logicalXor","bool");return Je(t.shape,o.shape),lu(_f(r,e),Nf(lu(r,e)))}var Wk=T({logicalXor_:r4});var Ef=2147483648;function o4(r,e,t="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(e,"values","searchSorted"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=z(o,[-1,s]),p=z(n,[-1,a]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==p.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(Ve(p.shape)>=Ef)throw new Error(`values tensor size must less than ${Ef}`);if(i.shape[1]>=Ef)throw new Error(`trailing dim_size must less than ${Ef} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return N.runKernel(Ep,u,c)}var dl=T({searchSorted_:o4});function Uk(r,e){return dl(r,e,"left")}function n4(r,e,t,o,n){let s=v(r,"x","maxPool"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(lr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Ot("maxPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=N.runKernel(Rn,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var $f=T({maxPool_:n4});function s4(r,e=[1,1,1],t,o,n,s="NDHWC"){let a=v(r,"x","maxPool3d"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ot("maxPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=N.runKernel(Sp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Gk=T({maxPool3d_:s4});function a4(r,e,t,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=N.runKernel(vp,a,i);return{result:p[0],indexes:p[1]}}var Hk=T({maxPoolWithArgmax_:a4});function i4(r,e){let t=v(r,"a","maximum"),o=v(e,"b","maximum");[t,o]=Re(t,o),t.dtype==="bool"&&(t=qe(t,"int32"),o=qe(o,"int32")),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(mo,n)}var Rf=T({maximum_:i4});function u4(r,e=null,t=!1){let n={x:v(r,"x","mean")},s={axis:e,keepDims:t};return N.runKernel(An,n,s)}var mu=T({mean_:u4});function Wr(r,e="float32"){if(e==="complex64"){let o=Wr(r,"float32"),n=Wr(r,"float32");return Er(o,n)}let t=ap(Ve(r),e);return N.makeTensor(t,r,e)}function zs(r,e="float32"){if(e==="complex64"){let o=zs(r,"float32"),n=Wr(r,"float32");return Er(o,n)}let t=jc(Ve(r),e);return N.makeTensor(t,r,e)}function qk(r,e,{indexing:t="xy"}={}){if(t!=="xy"&&t!=="ij")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,"x","meshgrid",r instanceof ut?r.dtype:"float32");if(e===void 0)return[o];let n=v(e,"y","meshgrid",e instanceof ut?e.dtype:"float32"),s=Ve(o.shape),a=Ve(n.shape);return t==="xy"?(o=z(o,[1,-1]),n=z(n,[-1,1]),[Xe(zs([a,1],o.dtype),o),Xe(n,zs([1,s],n.dtype))]):(o=z(o,[-1,1]),n=z(n,[1,-1]),[Xe(o,zs([1,a],o.dtype)),Xe(zs([s,1],n.dtype),n)])}function p4(r,e){let t=v(r,"a","minimum"),o=v(e,"b","minimum");[t,o]=Re(t,o),t.dtype==="bool"&&(t=qe(t,"int32"),o=qe(o,"int32")),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(fo,n)}var Af=T({minimum_:p4});function c4(r,e,t){$(t==="reflect"||t==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");$(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),$(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return N.runKernel(Dn,a,s)}var Kk=T({mirrorPad_:c4});function l4(r,e){let t=v(r,"a","mod"),o=v(e,"b","mod");[t,o]=Re(t,o);let n={a:t,b:o};return N.runKernel(ji,n)}var jk=T({mod_:l4});function m4(r,e=null,t=!1){r=v(r,"x","moments");let o=Ka(e,r.shape),n=mu(r,o,t),s=n.shape;t||(s=Ta(n.shape,o));let a=Zt(ke(qe(r,"float32"),z(n,s))),i=mu(a,o,t);return{mean:n,variance:i}}var Xk=T({moments_:m4});function f4(r,e,t,o){let n=v(e,"data","multiRNNCell"),s=Ia(t,"c","multiRNNCell"),a=Ia(o,"h","multiRNNCell"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?z(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=N.runKernel(kp,p,u);return a===1?z(c,[c.size]):c}var Qk=T({multinomial_:d4});function h4(r,e){let t=v(r,"a","notEqual","string_or_numeric"),o=v(e,"b","notEqual","string_or_numeric");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return N.runKernel(go,n)}var Ff=T({notEqual_:h4});function g4(r){let t={x:v(r,"x","onesLike")};return N.runKernel(Cs,t)}var Zk=T({onesLike_:g4});function x4(r,e){let t=v(r,"v1","outerProduct"),o=v(e,"v2","outerProduct");$(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=z(t,[-1,1]),s=z(o,[1,-1]);return Xe(n,s)}var Jk=T({outerProduct_:x4});function y4(r,e,t=0){let o=v(r,"x","pad");if(o.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let n={paddings:e,constantValue:t},s={x:o};return N.runKernel(Ln,s,n)}var Ws=T({pad_:y4});function b4(r,e,t=0){return $(e.length===2,()=>"Invalid number of paddings. Must be length of 2."),Ws(r,[e],t)}var e1=T({pad1d_:b4});function C4(r,e,t=0){return $(e.length===2&&e[0].length===2&&e[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Ws(r,e,t)}var t1=T({pad2d_:C4});function I4(r,e,t=0){return $(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Ws(r,e,t)}var r1=T({pad3d_:I4});function w4(r,e,t=0){return $(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Ws(r,e,t)}var o1=T({pad4d_:w4});function S4(r,e,t){let o=v(r,"x","spaceToBatchND");$(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),$(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return N.runKernel(ks,n,s)}var Df=T({spaceToBatchND_:S4});function v4(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o="valid");let i=v(r,"x","maxPool"),p=i,u=!1;i.rank===3&&(u=!0,p=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(lr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=lC(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o==="same"?m=T4([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let f=l[0]===1&&l[1]===1,[d,h]=k4([c.inHeight,c.inWidth],l,m),g=f?o:"valid",y=f?p:Df(p,l,d),C=(t==="avg"?()=>mf(y,e,s,g,a):()=>$f(y,e,s,g,a))(),w=f?C:ff(C,l,h);return u?z(w,[w.shape[1],w.shape[2],w.shape[3]]):w}function k4(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function T4(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var n1=T({pool_:v4});function N4(r,e){let t=v(r,"x","prelu"),o=v(e,"alpha","prelu"),n={x:t,alpha:o};return N.runKernel(Vn,n)}var Pf=T({prelu_:N4});function _4(r,e=null,t=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=qe(o,"int32"));let n={x:o},s={axis:e,keepDims:t};return N.runKernel(Ao,n,s)}var s1=T({prod_:_4});function E4(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,"raggedGather","int32")),s=v(e,"paramsDenseValues","raggedGather"),a=v(t,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=N.runKernel(Tp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var a1=T({raggedGather_:E4});function $4(r,e,t){let o=v(r,"starts","raggedRange"),n=v(e,"limits","raggedRange",o.dtype),s=v(t,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=N.runKernel(Np,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var i1=T({raggedRange_:$4});function R4(r,e,t,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(e,"values","raggedTensorToTensor"),i=v(t,"defaultValue","raggedTensorToTensor",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,"raggedTensorToTensor","int32")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return N.runKernel(_p,u,c)}var u1=T({raggedTensorToTensor_:R4});function A4(r,e,t){let o=Ve(r),n=null;if(t==null||t==="float32")n=new Float32Array(o);else if(t==="int32")n=new Int32Array(o);else if(t==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;s=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},Mf=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Bf.alea(s.toString()),this.randn=new du(0,1,o,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Bf.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function B4(r,e,t=1,o="float32",n){if(t==null&&(t=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new Mf(e,t,o,n),a=ne(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),vo(e,0)}var E1=T({reverse1d_:K4});function j4(r,e){let t=v(r,"x","reverse");return $(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),vo(t,e)}var $1=T({reverse2d_:j4});function X4(r,e){let t=v(r,"x","reverse");return $(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),vo(t,e)}var R1=T({reverse3d_:X4});function Y4(r,e){let t=v(r,"x","reverse");return $(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),vo(t,e)}var A1=T({reverse4d_:Y4});function Q4(r){let t={x:v(r,"x","round")};return N.runKernel(da,t)}var Uf=T({round_:Q4});function Z4(r){let t={x:v(r,"x","rsqrt","float32")};return N.runKernel(xo,t)}var F1=T({rsqrt_:Z4});function J4(r){let t={x:v(r,"x","selu")};return N.runKernel(Xi,t)}var D1=T({selu_:J4});function eH(r,e,t,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(e,"depthwiseFilter","separableConv2d"),u=v(t,"pointwiseFilter","separableConv2d"),c=i,l=!1;if(i.rank===3&&(l=!0,c=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],f=p.shape[3];$(u.shape[2]===m*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*f}, but got ${u.shape[2]}.`);let d=Gp(c,p,o,n,a,s),g=mi(d,u,1,"valid",a);return l?z(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var P1=T({separableConv2d_:eH});async function tH(r,e){let t=v(r,"x","setdiff1d"),o=v(e,"y","setdiff1d");$(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),$(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Ue(o,[e],[t])}var V1=T({slice1d_:sH});function aH(r,e,t){let o=v(r,"x","slice2d");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var z1=T({slice2d_:aH});function iH(r,e,t){let o=v(r,"x","slice3d");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var W1=T({slice3d_:iH});function uH(r,e,t){let o=v(r,"x","slice4d");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Ue(o,e,t)}var U1=T({slice4d_:uH});function pH(r,e=-1){let t=v(r,"logits","softmax","float32");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return N.runKernel(Xn,o,n)}var G1=T({softmax_:pH});function cH(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return N.runKernel(bp,e)}var qp=T({fft_:cH});function lH(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return N.runKernel(Cp,e)}var hu=T({ifft_:lH});function mH(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=z(r,[t,e]);o=hu(n)}else{let n=[t,2*(e-1)],s=z(ka(r),[t,e]),a=z(ci(r),[t,e]),i=vo(Ue(s,[0,1],[t,e-2]),1),p=oe(vo(Ue(a,[0,1],[t,e-2]),1),be(-1)),u=gt([s,i],1),c=gt([a,p],1),l=z(Er(u,c),[n[0],n[1]]);o=hu(l)}if(o=ka(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=z(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Gf=T({irfft_:mH});function fH(r,e,t=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:e,axis:t};return N.runKernel(Ts,n,s)}var $a=T({split_:fH});function dH(r,e){$(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Ue(r,d,h),t=e}else if(e!=null&&e>t){let d=r.shape.map(h=>h);d[r.shape.length-1]=e-t,n=gt([r,Wr(d)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=z(Er(n,s),[o,t]),i=qp(a),p=Math.floor(t/2)+1,u=ka(i),c=ci(i),l=$a(u,[p,t-p],u.shape.length-1),m=$a(c,[p,t-p],c.shape.length-1),f=n.shape.slice();return f[n.shape.length-1]=p,z(Er(l[0],m[0]),f)}var Kp=T({rfft_:dH});function hH(r,e){let t=v(r,"a","squaredDifference"),o=v(e,"b","squaredDifference");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o},s={};return N.runKernel(Co,n,s)}var Hf=T({squaredDifference_:hH});function gH(r,e){let t=v(r,"x","squeeze","string_or_numeric");return z(t,db(t.shape,e).newShape)}var jp=T({squeeze_:gH});function xH(r,e=0){let t=Ia(r,"tensors","stack","string_or_numeric");$(t.length>=1,()=>"Pass at least one tensor to tf.stack"),t.length>0&&$(e<=t[0].rank,()=>"Axis must be <= rank of the tensor");let o=t,n={axis:e};return N.runKernel(Is,o,n)}var Ir=T({stack_:xH});function yH(r,e=0){let o={x:v(r,"x","step")},n={alpha:e};return N.runKernel($s,o,n)}var qf=T({step_:yH});function bH(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,"x","stridedSlice","string_or_numeric")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return N.runKernel(Yn,c,l)}var H1=T({stridedSlice_:bH});function CH(r){let t={x:v(r,"x","tan","float32")};return N.runKernel(xa,t)}var q1=T({tan_:CH});function mr(r,e){eo(r);let t=or(r,e);if(t.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return xr(r,null,t,e)}function gi(r,e,t){if(eo(r),e!=null&&e.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=or(r,t);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return xr(r,e,o,t)}function K1(r,e,t){if(eo(r),e!=null&&e.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=or(r,t);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}function j1(r,e,t){if(eo(r),e!=null&&e.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=or(r,t);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}function X1(r,e,t){if(eo(r),e!=null&&e.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=or(r,t);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return e=e||o,xr(r,e,o,t)}function IH(r,e=1,t=!0){let o=v(r,"x","topk");if(o.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let n=o.shape[o.shape.length-1];if(e<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=N.runKernel(Zn,s,a);return{values:i,indices:p}}var Y1=T({topk_:IH});function wH(r,e=0,t=1,o,n){if(o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new du(e,t,o,!0,n),a=ne(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:t},n={axis:e},[s,a]=N.runKernel($p,o,n);return{values:s,indices:a}}var Z1=T({unique_:SH});function vH(r,e,t){let o=v(r,"x","unsortedSegmentSum"),n=v(e,"segmentIds","unsortedSegmentSum","int32");$(ra(t),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:t};return N.runKernel(Rp,s,a)}var J1=T({unsortedSegmentSum_:vH});function kH(r,e=0){let t=v(r,"x","unstack","string_or_numeric");$(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return N.runKernel(_s,o,n)}var ko=T({unstack_:kH});function eT(r,e){return dl(r,e,"right")}function tT(r,e=!0,t,o){return N.makeVariable(r,e,t,o)}function Kf(r,e){let t=[];for(let s=0;s0,()=>"mask cannot be scalar"),ht(i.slice(s,s+a),n.shape,"mask's shape must match the first K dimensions of tensor's shape,");let p=1;for(let h=s;h"Shape mismatch in v and x");let p=be(1),u=ke(p,i),c=oe(ke(a,s),u);if(n){$(o!=null,()=>"When using zeroDebias: true, step is required.");let l=v(o,"step","movingAverage");c=We(c,ke(p,Na(i,l)))}return ge(s,c)}var $H=T({movingAverage_:EH});function RH(r,e,t){let o=v(r,"indices","scatterND","int32"),n=v(e,"updates","scatterND");uf(n,o,t);let s={indices:o,updates:n},a={shape:t};return N.runKernel(Hn,s,a)}var AH=T({scatterND_:RH});function rT(r,e,t,o){if(r.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function DH(r,e,t,o=0){let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(e,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);rT(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return N.runKernel(ei,i,p)}var PH=T({sparseToDense_:DH});function OH(r,e){let t=v(e,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:t};return N.runKernel(Tn,n)}var MH=T({gatherND_:OH});function oT(r,e){if(e==null)return r.shape.slice();if(Or(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),$(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof ut?n.clone():n;let s=oT(n,t),a=1-e,i=We(bf(ge(zf(s,0,1,"float32",o),a)),a);return oe(n,i)}var BH=T({dropout_:LH});function wC(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function hl(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),ht(o.shape.slice(0,o.shape.length-1),n.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=o.shape[o.shape.length-1];$(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=hb("bool",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hsT,depthwiseConv2d:()=>uT,matMul:()=>pT});function WH(r,e,t,o,n,s="NHWC",a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?p.shape[3]:p.shape[1];$(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),$(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Ot("conv2dDerFilter",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return N.runKernel(lp,l,m)}var nT=T({conv2DBackpropFilter_:WH});function gu(r,e,t){if(t==null||t==="linear")return r;if(t==="relu")return oe(r,qf(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function xu(r,e){let t=e,o=nf(r.shape,e.shape);return o.length>0&&(t=tt(t,o)),z(t,r.shape)}function yu(r,e,t,o){if(e==="linear")return r;if(e==="relu")return hi(r);if(e==="elu")return xf(r);if(e==="relu6")return Wf(r);if(e==="prelu")return Pf(r,t);if(e==="leakyrelu")return wf(r,o);if(e==="sigmoid")return Ms(r);throw new Error(`Unknown fused activation ${e}.`)}var bu=(r,e)=>!(r>0)||e==="linear";function UH({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||"linear",bu(N.state.gradientDepth,p)===!1){$(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=mi(r,e,t,o,n,s,a);return i!=null&&(_=ge(_,i)),yu(_,p,u,c)}let l=v(r,"x","conv2d","float32"),m=v(e,"filter","conv2d","float32"),f=l,d=!1;l.rank===3&&(d=!0,f=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),$(f.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Ot("fused conv2d",o,a);let h=n==="NHWC"?f.shape[3]:f.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=uu(f.shape,m.shape,t,s,o,a),y;i!=null&&(y=v(i,"bias","fused conv2d"),[y]=Re(y,l),n==="NHWC"?Je(g.outShape,y.shape):($(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),$(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{Je(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,"prelu weights","fused conv2d")}let C=(_,E)=>{$(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,A,D,O]=E,M=gu(_,D,p);$(iu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=hf(A.shape,M,R,t,o),W=nT(A,M,R.shape,t,o),V=[L,W];if(O!=null){let G=xu(O,M);V.push(G)}return V},w={x:f,filter:m,bias:y,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((E,R,A)=>{let D=N.runKernel(Do,w,k);return A([R,E,D]),d&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:C}})(f,m):Cr((E,R,A,D)=>{let O=N.runKernel(Do,w,k);return D([R,E,O,A]),d&&(O=z(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(f,m,y)}var sT=T({fusedConv2d_:UH});function GH(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return N.runKernel(hp,u,c)}var aT=T({depthwiseConv2dNativeBackpropFilter_:GH});function HH(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=N.runKernel(gp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var iT=T({depthwiseConv2dNativeBackpropInput_:HH});function qH({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(bu(N.state.gradientDepth,p)===!1){let k=Gp(r,e,t,o,n,s,a);return i!=null&&(k=ge(k,i)),yu(k,p,u,c)}let l=v(r,"x","depthwiseConv2d","float32"),m=v(e,"filter","depthwiseConv2d","float32"),f=l,d=!1;l.rank===3&&(d=!0,f=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),$(f.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(f.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),$(lr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Ot("fused depthwiseConv2d",o,a);let h=uu(f.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Re(g,l),Je(h.outShape,g.shape));let y;u!=null&&(y=v(u,"prelu weights","fused depthwiseConv2d"));let b=(k,_)=>{$(iu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,A,D]=_,O=gu(k,A,p),M=iT(R.shape,O,E,t,o,s,a),L=aT(R,O,E.shape,t,o,s,a);if(D!=null){let W=xu(g,O);return[M,L,W]}return[M,L]},C={x:f,filter:m,bias:g,preluActivationWeights:y},w={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((_,E,R)=>{let A=N.runKernel(Po,C,w);return R([E,_,A]),d&&(A=z(A,[A.shape[1],A.shape[2],A.shape[3]])),{value:A,gradFunc:b}})(f,m):Cr((_,E,R,A)=>{let D=N.runKernel(Po,C,w);return A([E,_,D,R]),d&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(f,m,g)}var uT=T({fusedDepthwiseConv2d_:qH});function KH({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(bu(N.state.gradientDepth,s)===!1){let O=Xe(r,e,t,o);return n!=null&&(O=ge(O,n)),yu(O,s,a,i)}let p=v(r,"a","fused matMul"),u=v(e,"b","fused matMul");[p,u]=Re(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],f=o?u.shape[u.rank-2]:u.shape[u.rank-1],d=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=Ve(d),y=Ve(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=Je(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,f]),w=t?z(p,[g,c,m]):z(p,[g,m,c]),k=o?z(u,[y,f,l]):z(u,[y,l,f]),_;n!=null&&(_=v(n,"bias","fused matMul"),[_]=Re(_,p),Je(C,_.shape));let E;a!=null&&(E=v(a,"prelu weights","fused matMul"));let R=(O,M)=>{let[L,W,V,G]=M,q=gu(z(O,V.shape),V,s),H,j;if(!t&&!o?(H=Xe(q,W,!1,!0),j=Xe(L,q,!0,!1)):!t&&o?(H=Xe(q,W,!1,!1),j=Xe(q,L,!0,!1)):t&&!o?(H=Xe(W,q,!1,!0),j=Xe(L,q,!1,!1)):(H=Xe(W,q,!0,!0),j=Xe(q,L,!0,!0)),n!=null){let Y=xu(G,q);return[H,j,Y]}else return[H,j]},A={a:w,b:k,bias:_,preluActivationWeights:E},D={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Cr((M,L,W)=>{let V=N.runKernel(Fo,A,D);return W([M,L,V]),{value:z(V,C),gradFunc:R}})(w,k):Cr((M,L,W,V)=>{let G=N.runKernel(Fo,A,D);return V([M,L,G,W]),{value:z(G,C),gradFunc:R}})(w,k,_)}var pT=T({fusedMatMul_:KH});function jH(r){return hl(r,.54,.46)}var cT=T({hammingWindow_:jH});function XH(r){return hl(r,.5,.5)}var Xf=T({hannWindow_:XH});function YH(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Ue(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return N.runKernel(xn,c,l)}var mT=T({cropAndResize_:ZH});function JH(r){let e=v(r,"image","flipLeftRight","float32");$(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return N.runKernel(Sn,t,{})}var fT=T({flipLeftRight_:JH});function eq(r){let e=v(r,"image","grayscaleToRGB"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,fi(e,n)}var dT=T({grayscaleToRGB_:eq});function tq(r,e,t=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return N.runKernel(es,s,a)}var hT=T({rotateWithOffset_:tq});function Vo(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(e.rank===1,()=>"scores must be a 1D tensor"),$(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function rq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(e,"scores","nonMaxSuppression","float32"),i=Vo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return N.runKernel(On,{boxes:s,scores:a},p)}var gT=T({nonMaxSuppression_:rq});function xT(r,e,t){let o=oq(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function oq(r,e,t){return sq(r,e,t||nq)}function nq(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Qf(r,e,t,o,n){return vC(r,e,t,o,n,0)}function Zf(r,e,t,o,n,s){return vC(r,e,t,o,n,0,!1,s,!0)}function Jf(r,e,t,o,n,s){return vC(r,e,t,o,n,s,!0)}function vC(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(yT);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:y,boxIndex:b,suppressBeginIndex:C}=g;if(y=C;--k){let _=aq(r,b,l[k]);if(_>=o){w=!0;break}if(g.score=g.score*iq(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,w||(g.score===y?(l.push(b),m.push(g.score)):g.score>n&&xT(u,g,yT))}let f=l.length,d=t-f;i&&d>0&&(l.push(...new Array(d).fill(0)),m.push(...new Array(d).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=f),h}function aq(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),f=(i-s)*(p-a),d=(l-u)*(m-c);if(f<=0||d<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),y=Math.min(i,l),b=Math.min(p,m),C=Math.max(y-h,0)*Math.max(b-g,0);return C/(f+d-C)}function iq(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yT(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function uq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(e,"scores","nonMaxSuppressionAsync"),i=Vo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Qf(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),mr(l,"int32")}var bT=uq;function pq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=Vo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=N.runKernel(Mn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CT=T({nonMaxSuppressionWithScore_:pq});async function cq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=Vo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:f}=Jf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(m,"int32"),selectedScores:mr(f)}}var IT=cq;function lq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=Vo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},f={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},d=N.runKernel(pa,m,f);return{selectedIndices:d[0],validOutputs:d[1]}}var wT=T({nonMaxSuppressionPadded_:lq});async function mq(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=Vo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,f]=await Promise.all([a.data(),i.data()]),{selectedIndices:d,validOutputs:h}=Zf(m,f,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(d,"int32"),validOutputs:be(h,"int32")}}var ST=mq;function fq(r,e,t=!1,o=!1){let n=v(r,"images","resizeBilinear");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),$(o===!1||t===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=N.runKernel(Un,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vT=T({resizeBilinear_:fq});function dq(r,e,t=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),$(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),$(o===!1||t===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=N.runKernel(Wn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kT=T({resizeNearestNeighbor_:dq});function hq(r,e="binary",t=!1,o=.5){let n=v(r,"image","threshold"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=oe(mr([o]),255),c,l,m,f;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(e==="otsu"||e==="binary",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=$a(n,[1,1,1],-1);let g=oe(c,s),y=oe(l,a),b=oe(m,i);f=ge(ge(g,y),b)}else f=r;if(e==="otsu"){let g=df(qe(Uf(f),"int32"),nr([]),256);u=gq(g,p)}let d=t?Hp(f,u):cu(f,u);return qe(oe(d,255),"int32")}function gq(r,e){let t=mr([-1]),o=mr([0]),n=mr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return N.runKernel(Jn,p,u)}var NT=T({transform_:xq});function yq(r,e,t){$(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),$(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`);let o=v(r,"a","bandPart");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2);if(!(e<=s))throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`);if(!(t<=a))throw new Error(`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`);e<0&&(e=s),t<0&&(t=a);let i=z(di(0,s,1,"int32"),[-1,1]),p=di(0,a,1,"int32"),u=ke(i,p),c=lu(Hp(u,be(+e,"int32")),If(u,be(-t,"int32"))),l=Wr([s,a],o.dtype);return z(Ir(ko(z(o,[-1,s,a])).map(m=>os(c,m,l))),n)}var _T=T({bandPart_:yq});function bq(r){let e;if(Array.isArray(r)){e=!1,$(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=$a(r,r.shape[0],0).map(n=>jp(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return $T(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=ko(z(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$T(p,e);n.push(u),s.push(c)});let a=z(Ir(n,0),r.shape),i=z(Ir(s,0),r.shape);return[a,i]}}function $T(r,e=!1){return N.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=yf(t),s=zr(r),a=gi([[1]],[1,1]),i=zr(a),p=t>=o?o:t;for(let u=0;u{let f=Ue(s,[u,u],[t-u,1]),d=pu(f),h=Ue(s,[u,u],[1,1]),g=os(cu(h,0),gi([[-1]]),gi([[1]])),y=ke(h,oe(g,d)),b=We(f,y);b.shape[0]===1?i=zr(a):i=gt([a,Ue(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=yr(We(Xe(g,y),d)),w=Ue(s,[u,0],[t-u,o]),k=oe(C,i),_=Wp(i);if(u===0)s=ke(w,Xe(k,Xe(_,w)));else{let A=ke(w,Xe(k,Xe(_,w)));s=gt([Ue(s,[0,0],[u,o]),A],0)}let E=Wp(k),R=Ue(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=ke(R,Xe(Xe(R,i),E));else{let A=ke(R,Xe(Xe(R,i),E));n=gt([Ue(n,[0,0],[t,u]),A],1)}return[i,s,n]}),Ft([c,l,m])}return!e&&t>o&&(n=Ue(n,[0,0],[t,o]),s=Ue(s,[0,0],[o,o])),[n,s]})}var RT=T({qr_:Cq});var Et;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Et||(Et={}));function Iq(r,e,t=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;e!=null&&(n=v(e,"weights","computeWeightedLoss"));let s=n==null?o:oe(o,n);if(t===Et.NONE)return s;if(t===Et.SUM)return tt(s);if(t===Et.MEAN){if(n==null)return mu(s);{let a=o.size/n.size,i=We(tt(s),tt(n));return a>1?We(i,be(a)):i}}if(t===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return We(tt(s),be(o.size));{let a=oe(n,zs(o.shape)),i=qe(tt(Ff(a,be(0))),"float32");return We(tt(s),i)}}throw Error(`Unknown reduction: ${t}`)}var sr=T({computeWeightedLoss_:Iq});function wq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(e,"predictions","absoluteDifference"),a=null;t!=null&&(a=v(t,"weights","absoluteDifference")),ht(n.shape,s.shape,"Error in absoluteDifference: ");let i=Qt(ke(n,s));return sr(i,a,o)}var AT=T({absoluteDifference_:wq});function Sq(r,e,t,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(e,"predictions","cosineDistance"),i=null;o!=null&&(i=v(o,"weights","cosineDistance")),ht(s.shape,a.shape,"Error in cosineDistance: ");let p=be(1),u=ke(p,tt(oe(s,a),t,!0));return sr(u,i,n)}var FT=T({cosineDistance_:Sq});function vq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(e,"predictions","hingeLoss"),a=null;t!=null&&(a=v(t,"weights","hingeLoss")),ht(n.shape,s.shape,"Error in hingeLoss: ");let i=be(1);n=ke(oe(be(2),n),i);let p=hi(ke(i,oe(n,s)));return sr(p,a,o)}var DT=T({hingeLoss_:vq});function kq(r,e,t,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(e,"predictions","huberLoss"),i=null;t!=null&&(i=v(t,"weights","huberLoss")),ht(s.shape,a.shape,"Error in huberLoss: ");let p=be(o),u=Qt(ke(a,s)),c=Af(u,p),l=ke(u,c),m=ge(oe(be(.5),Zt(c)),oe(p,l));return sr(m,i,n)}var PT=T({huberLoss_:kq});function Tq(r,e,t,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(e,"predictions","logLoss"),i=null;t!=null&&(i=v(t,"weights","logLoss")),ht(s.shape,a.shape,"Error in logLoss: ");let p=be(1),u=be(o),c=yr(oe(s,Ea(ge(a,u)))),l=oe(ke(p,s),Ea(ge(ke(p,a),u))),m=ke(c,l);return sr(m,i,n)}var OT=T({logLoss_:Tq});function Nq(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(e,"predictions","meanSquaredError"),a=null;t!=null&&(a=v(t,"weights","meanSquaredError")),ht(n.shape,s.shape,"Error in meanSquaredError: ");let i=Hf(n,s);return sr(i,a,o)}var MT=T({meanSquaredError_:Nq});function _q(r,e){let t=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(e,"logits","sigmoidCrossEntropyWithLogits");ht(t.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=hi(o),s=oe(o,t),a=Sf(Bo(yr(Qt(o))));return ge(ke(n,s),a)}function Eq(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(e,"logits","sigmoidCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","sigmoidCrossEntropy")),ht(s.shape,a.shape,"Error in sigmoidCrossEntropy: "),o>0){let u=be(o),c=be(1),l=be(.5);s=ge(oe(s,ke(c,u)),oe(l,u))}let p=_q(s,a);return sr(p,i,n)}var LT=T({sigmoidCrossEntropy_:Eq});function $q(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Cr((n,s,a)=>{let p=Tf(s,[t],!0),u=ke(qe(s,"float32"),p);a([n,u]);let c=yr(oe(u,n));return{value:tt(c,[t]),gradFunc:(f,d)=>{let[h,g]=d,y=Ta(f.shape,[t]);return[oe(z(f,y),ke(qe(h,"float32"),Bo(g))),oe(z(f,y),ke(Bo(g),qe(h,"float32")))]}}})(r,e)}function Rq(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(e,"logits","softmaxCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","softmaxCrossEntropy")),ht(s.shape,a.shape,"Error in softmaxCrossEntropy: "),o>0){let u=be(o),c=be(1),l=be(s.shape[1]);s=ge(oe(s,ke(c,u)),We(u,l))}let p=$q(s,a);return sr(p,i,n)}var BT=T({softmaxCrossEntropy_:Rq});function Aq(r,e,t,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(e,"values","sparseFillEmptyRows"),a=v(t,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape - ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=N.runKernel(Qa,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var VT=T({sparseFillEmptyRows_:Aq});function Fq(r,e,t){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(e,"inputShape","sparseReshape","int32"),s=v(t,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape - ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=N.runKernel(ga,a);return{outputIndices:i[0],outputShape:i[1]}}var zT=T({sparseReshape_:Fq});function Dq(r,e,t){let o=v(r,"data","sparseSegmentMean"),n=v(e,"indices","sparseSegmentMean","int32"),s=v(t,"segmentIds","sparseSegmentMean","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${o.shape}`),E(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return T.runKernel(Qo,i,p)}var Q0=N({depthToSpace_:SU});function wU(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(e,"filter","depthwiseConv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n==="NHWC"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Pt("depthwiseConv2d",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(Zo,m,d);return c?z(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Bp=N({depthwiseConv2d_:wU});function IU(r){let t={x:v(r,"x","diag")};return T.runKernel(hp,t)}var Z0=N({diag_:IU});function vU(r,e,t,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(e,"filter","dilation2d");E(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),E(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),E(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=z(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(gp,c,l);return u?z(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var J0=N({dilation2d_:vU});function kU(r,e){let t=v(r,"a","equal","string_or_numeric"),o=v(e,"b","equal","string_or_numeric");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(tn,n)}var sd=N({equal_:kU});function NU(r,e,t){let o=v(e,"a","where"),n=v(t,"b","where"),s=v(r,"condition","where","bool"),a=Je(Je(s.shape,o.shape),n.shape),i=Ii(s,a),p=Ii(o,a),u=Ii(n,a),c={condition:i,t:p,e:u};return T.runKernel(Ts,c)}var os=N({where_:NU});function TU(r){let t={x:v(r,"x","zerosLike")};return T.runKernel(Fs,t)}var Ut=N({zerosLike_:TU});function _U(r,e){let t=v(r,"a","div"),o=v(e,"b","div");[t,o]=Re(t,o);let n=Ge(t,o),s=Ut(n),a=sd(o,s);return os(a,s,n)}var ek=N({divNoNan_:_U});function EU(r,e){let t=v(r,"t1","dot"),o=v(e,"t2","dot");E((t.rank===1||t.rank===2)&&(o.rank===1||o.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if(E(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=z(t,[1,-1]),i=z(o,[-1,1]),p=Xe(a,i);return z(p,[])}else if(t.rank===1&&o.rank===2){let a=z(t,[1,-1]),i=z(o,[o.shape[0],o.shape[1]]),p=Xe(a,i);return z(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=z(o,[-1,1]),i=Xe(t,a);return z(i,[i.size])}else{let a=z(o,[o.shape[0],o.shape[1]]);return Xe(t,a)}}var tk=N({dot_:EU});function $U(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return T.runKernel(ri,t,o)}var rk=N({einsum_:$U});function AU(r){let t={x:v(r,"x","elu","float32")};return T.runKernel(en,t)}var ad=N({elu_:AU});function RU(r){let e=v(r,"x","erf");E(e.dtype==="int32"||e.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),e.dtype==="int32"&&(e=Ke(e,"float32"));let t={x:e};return T.runKernel(ma,t)}var ok=N({erf_:RU});function uC(r,e){for(let t=0;tr[s]);return[t,n]}function Aa(r,e){let t=e.map(o=>1);return nk(r,t,e)}function DU(r,e,t){E(uC(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function OU(r,e){if(uC(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function PU(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function MU(r,e){let t=[];for(let o=e-r;o"Axis must be <= rank of the tensor");let o={input:t},n={dim:e};return T.runKernel(bs,o,n)}var Fa=N({expandDims_:jU});function XU(r){let t={x:v(r,"x","expm1")};return T.runKernel(da,t)}var ik=N({expm1_:XU});function YU(r,e){let t=v(r,"x","tile","string_or_numeric");E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return T.runKernel(to,o,n)}var ki=N({tile_:YU});function QU(r,e,t,o="float32"){e==null&&(e=r);let n=le([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`),E(na(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=z(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=T.runKernel(yp,p,u);return i?z(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var dk=N({localResponseNormalization_:u4});function p4(r){let t={x:v(r,"x","log","float32")};return T.runKernel(hn,t)}var Da=N({log_:p4});function c4(r){let t={x:v(r,"x","log1p")};return T.runKernel(ga,t)}var md=N({log1p_:c4});function l4(r){return E(fs(r),()=>"The f passed in grad(f) must be a function"),(e,t)=>{let o=v(e,"x","tf.grad","string_or_numeric"),n=t!=null?v(t,"dy","tf.grad"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&ht(s.shape,n.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),dd(a),a[0]})}}function m4(r){return E(fs(r),()=>"The f passed in grads(f) must be a function"),(e,t)=>{E(Array.isArray(e),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=Na(e,"args","tf.grads","string_or_numeric"),n=t!=null?v(t,"dy","tf.grads"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&ht(s.shape,n.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),dd(a),a})}}function d4(r){return E(fs(r),()=>"The f passed in valueAndGrad(f) must be a function"),(e,t)=>{E(e instanceof it,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),E(t==null||t instanceof it,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return dd(o),{grad:o[0],value:n}}}function f4(r){return E(fs(r),()=>"The f passed in valueAndGrads(f) must be a function"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof it),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),E(t==null||t instanceof it,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=T.gradients(()=>r(...e),e,t);return t!=null&&ht(o.value.shape,t.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),dd(o.grads),o}}function pC(r,e){E(fs(r),()=>"The f passed in variableGrads(f) must be a function"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof va),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let t=e!=null;if(!t){e=[];for(let u in T.registeredVariables)e.push(T.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),E(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=T.gradients(r,e,null,s);E(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),E(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Cr(r){return T.customGrad(r)}function dd(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that + the f you passed encloses all operations that lead from x to y.`)}function h4(r){let t={x:v(r,"x","softplus")};return T.runKernel(Qi,t)}var fd=N({softplus_:h4});function g4(r){let e=v(r,"x","logSigmoid");return Cr(o=>({value:yr(fd(yr(o))),gradFunc:a=>ae(a,zs(yr(o)))}))(e)}var fk=N({logSigmoid_:g4});function x4(r,e){let t=v(r,"a","sub"),o=v(e,"b","sub");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var Ne=N({sub_:x4});function y4(r,e=-1){let t=v(r,"logits","logSoftmax");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Cr((n,s)=>{let i=Us(n,e,!0),p=Ne(n,i),u=Ne(Ke(p,"float32"),Da(et(Co(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=Co(d);return Ne(l,ae(et(l,e,f),h))}}})(t)}var hk=N({logSoftmax_:y4});function b4(r,e=null,t=!1){let o=v(r,"x","logSumExp"),n=Qa(e,o.shape),s=Us(o,n,!0),a=Ne(o,s),i=Co(a),p=et(i,n),u=Da(p),c=xe(z(s,u.shape),u);if(t){let l=Aa(c.shape,n);return z(c,l)}return c}var hd=N({logSumExp_:b4});function C4(r,e){let t=v(r,"a","logicalAnd","bool"),o=v(e,"b","logicalAnd","bool");Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(gn,n)}var lu=N({logicalAnd_:C4});function S4(r){let t={x:v(r,"x","logicalNot","bool")};return T.runKernel(xn,t)}var gd=N({logicalNot_:S4});function w4(r,e){let t=v(r,"a","logicalOr","bool"),o=v(e,"b","logicalOr","bool");Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(xa,n)}var xd=N({logicalOr_:w4});function I4(r,e){let t=v(r,"a","logicalXor","bool"),o=v(e,"b","logicalXor","bool");return Je(t.shape,o.shape),lu(xd(r,e),gd(lu(r,e)))}var gk=N({logicalXor_:I4});var yd=2147483648;function v4(r,e,t="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(e,"values","searchSorted"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=z(o,[-1,s]),p=z(n,[-1,a]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==p.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(ze(p.shape)>=yd)throw new Error(`values tensor size must less than ${yd}`);if(i.shape[1]>=yd)throw new Error(`trailing dim_size must less than ${yd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(ii,u,c)}var al=N({searchSorted_:v4});function xk(r,e){return al(r,e,"left")}function k4(r,e,t,o,n){let s=v(r,"x","maxPool"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=z(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),E(lr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Pt("maxPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Cn,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var bd=N({maxPool_:k4});function N4(r,e=[1,1,1],t,o,n,s="NDHWC"){let a=v(r,"x","maxPool3d"),i=a,p=!1;a.rank===4&&(p=!0,i=z(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Pt("maxPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(bp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var yk=N({maxPool3d_:N4});function T4(r,e,t,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=T.runKernel(Cp,a,i);return{result:p[0],indexes:p[1]}}var bk=N({maxPoolWithArgmax_:T4});function _4(r,e){let t=v(r,"a","maximum"),o=v(e,"b","maximum");[t,o]=Re(t,o),t.dtype==="bool"&&(t=Ke(t,"int32"),o=Ke(o,"int32")),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(bn,n)}var Cd=N({maximum_:_4});function E4(r,e=null,t=!1){let n={x:v(r,"x","mean")},s={axis:e,keepDims:t};return T.runKernel(Sn,n,s)}var mu=N({mean_:E4});function Vr(r,e="float32"){if(yt(r),e==="complex64"){let o=Vr(r,"float32"),n=Vr(r,"float32");return Tr(o,n)}let t=ap(ze(r),e);return T.makeTensor(t,r,e)}function Gs(r,e="float32"){if(yt(r),e==="complex64"){let o=Gs(r,"float32"),n=Vr(r,"float32");return Tr(o,n)}let t=zc(ze(r),e);return T.makeTensor(t,r,e)}function Ck(r,e,{indexing:t="xy"}={}){if(t!=="xy"&&t!=="ij")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,"x","meshgrid",r instanceof it?r.dtype:"float32");if(e===void 0)return[o];let n=v(e,"y","meshgrid",e instanceof it?e.dtype:"float32"),s=ze(o.shape),a=ze(n.shape);return t==="xy"?(o=z(o,[1,-1]),n=z(n,[-1,1]),[Xe(Gs([a,1],o.dtype),o),Xe(n,Gs([1,s],n.dtype))]):(o=z(o,[-1,1]),n=z(n,[1,-1]),[Xe(o,Gs([1,a],o.dtype)),Xe(Gs([s,1],n.dtype),n)])}function $4(r,e){let t=v(r,"a","minimum"),o=v(e,"b","minimum");[t,o]=Re(t,o),t.dtype==="bool"&&(t=Ke(t,"int32"),o=Ke(o,"int32")),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(In,n)}var Sd=N({minimum_:$4});function A4(r,e,t){E(t==="reflect"||t==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");E(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),E(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return T.runKernel(vn,a,s)}var Sk=N({mirrorPad_:A4});function R4(r,e){let t=v(r,"a","mod"),o=v(e,"b","mod");[t,o]=Re(t,o);let n={a:t,b:o};return T.runKernel(ya,n)}var wk=N({mod_:R4});function F4(r,e=null,t=!1){r=v(r,"x","moments");let o=Qa(e,r.shape),n=mu(r,o,t),s=n.shape;t||(s=Aa(n.shape,o));let a=Qt(Ne(Ke(r,"float32"),z(n,s))),i=mu(a,o,t);return{mean:n,variance:i}}var Ik=N({moments_:F4});function D4(r,e,t,o){let n=v(e,"data","multiRNNCell"),s=Na(t,"c","multiRNNCell"),a=Na(o,"h","multiRNNCell"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?z(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(Sp,p,u);return a===1?z(c,[c.size]):c}var kk=N({multinomial_:O4});function P4(r,e){let t=v(r,"a","notEqual","string_or_numeric"),o=v(e,"b","notEqual","string_or_numeric");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Nn,n)}var wd=N({notEqual_:P4});function M4(r){let t={x:v(r,"x","onesLike")};return T.runKernel(Is,t)}var Nk=N({onesLike_:M4});function L4(r,e){let t=v(r,"v1","outerProduct"),o=v(e,"v2","outerProduct");E(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=z(t,[-1,1]),s=z(o,[1,-1]);return Xe(n,s)}var Tk=N({outerProduct_:L4});function B4(r,e,t=0){let o=v(r,"x","pad");if(o.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let n={paddings:e,constantValue:t},s={x:o};return T.runKernel($n,s,n)}var Hs=N({pad_:B4});function V4(r,e,t=0){return E(e.length===2,()=>"Invalid number of paddings. Must be length of 2."),Hs(r,[e],t)}var _k=N({pad1d_:V4});function z4(r,e,t=0){return E(e.length===2&&e[0].length===2&&e[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Hs(r,e,t)}var Ek=N({pad2d_:z4});function W4(r,e,t=0){return E(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Hs(r,e,t)}var $k=N({pad3d_:W4});function U4(r,e,t=0){return E(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Hs(r,e,t)}var Ak=N({pad4d_:U4});function G4(r,e,t){let o=v(r,"x","spaceToBatchND");E(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),E(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),E(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return T.runKernel(Es,n,s)}var Id=N({spaceToBatchND_:G4});function H4(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o="valid");let i=v(r,"x","maxPool"),p=i,u=!1;i.rank===3&&(u=!0,p=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(lr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=aC(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o==="same"?m=K4([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=q4([c.inHeight,c.inWidth],l,m),g=d?o:"valid",x=d?p:Id(p,l,f),C=(t==="avg"?()=>td(x,e,s,g,a):()=>bd(x,e,s,g,a))(),w=d?C:rd(C,l,h);return u?z(w,[w.shape[1],w.shape[2],w.shape[3]]):w}function q4(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function K4(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var Rk=N({pool_:H4});function j4(r,e){let t=v(r,"x","prelu"),o=v(e,"alpha","prelu"),n={x:t,alpha:o};return T.runKernel(Rn,n)}var vd=N({prelu_:j4});function X4(r,e=null,t=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=Ke(o,"int32"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(Fn,n,s)}var Fk=N({prod_:X4});function Y4(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,"raggedGather","int32")),s=v(e,"paramsDenseValues","raggedGather"),a=v(t,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(wp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Dk=N({raggedGather_:Y4});function Q4(r,e,t){let o=v(r,"starts","raggedRange"),n=v(e,"limits","raggedRange",o.dtype),s=v(t,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Ip,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var Ok=N({raggedRange_:Q4});function Z4(r,e,t,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(e,"values","raggedTensorToTensor"),i=v(t,"defaultValue","raggedTensorToTensor",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,"raggedTensorToTensor","int32")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return T.runKernel(vp,u,c)}var Pk=N({raggedTensorToTensor_:Z4});function J4(r,e,t){yt(r);let o=ze(r),n=null;if(t==null||t==="float32")n=new Float32Array(o);else if(t==="int32")n=new Int32Array(o);else if(t==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;s=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},Nd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=_d.alea(s.toString()),this.randn=new fu(0,1,o,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=_d.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function aG(r,e,t=1,o="float32",n){if(yt(r),t==null&&(t=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new Nd(e,t,o,n),a=le(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),no(e,0)}var o1=N({reverse1d_:fG});function hG(r,e){let t=v(r,"x","reverse");return E(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),no(t,e)}var n1=N({reverse2d_:hG});function gG(r,e){let t=v(r,"x","reverse");return E(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),no(t,e)}var s1=N({reverse3d_:gG});function xG(r,e){let t=v(r,"x","reverse");return E(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),no(t,e)}var a1=N({reverse4d_:xG});function yG(r){let t={x:v(r,"x","round")};return T.runKernel(Ca,t)}var Rd=N({round_:yG});function bG(r){let t={x:v(r,"x","rsqrt","float32")};return T.runKernel(Vn,t)}var i1=N({rsqrt_:bG});function CG(r){let t={x:v(r,"x","selu")};return T.runKernel(Xi,t)}var u1=N({selu_:CG});function SG(r,e,t,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(e,"depthwiseFilter","separableConv2d"),u=v(t,"pointwiseFilter","separableConv2d"),c=i,l=!1;if(i.rank===3&&(l=!0,c=z(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");E(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),E(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),E(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),E(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];E(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=Bp(c,p,o,n,a,s),g=vi(f,u,1,"valid",a);return l?z(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var p1=N({separableConv2d_:SG});async function wG(r,e){let t=v(r,"x","setdiff1d"),o=v(e,"y","setdiff1d");E(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),E(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),E(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),He(o,[e],[t])}var f1=N({slice1d_:NG});function TG(r,e,t){let o=v(r,"x","slice2d");return E(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var h1=N({slice2d_:TG});function _G(r,e,t){let o=v(r,"x","slice3d");return E(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var g1=N({slice3d_:_G});function EG(r,e,t){let o=v(r,"x","slice4d");return E(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),He(o,e,t)}var x1=N({slice4d_:EG});function $G(r,e=-1){let t=v(r,"logits","softmax","float32");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return T.runKernel(qn,o,n)}var y1=N({softmax_:$G});function AG(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(oi,e)}var zp=N({fft_:AG});function RG(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(ni,e)}var hu=N({ifft_:RG});function FG(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=z(r,[t,e]);o=hu(n)}else{let n=[t,2*(e-1)],s=z($a(r),[t,e]),a=z(Si(r),[t,e]),i=no(He(s,[0,1],[t,e-2]),1),p=ae(no(He(a,[0,1],[t,e-2]),1),be(-1)),u=gt([s,i],1),c=gt([a,p],1),l=z(Tr(u,c),[n[0],n[1]]);o=hu(l)}if(o=$a(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=z(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Fd=N({irfft_:FG});function DG(r,e,t=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:e,axis:t};return T.runKernel($s,n,s)}var Oa=N({split_:DG});function OG(r,e){E(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=He(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=gt([r,Vr(f)],r.shape.length-1),t=e}else n=r;let s=Ut(n),a=z(Tr(n,s),[o,t]),i=zp(a),p=Math.floor(t/2)+1,u=$a(i),c=Si(i),l=Oa(u,[p,t-p],u.shape.length-1),m=Oa(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,z(Tr(l[0],m[0]),d)}var Wp=N({rfft_:OG});function PG(r,e){let t=v(r,"a","squaredDifference"),o=v(e,"b","squaredDifference");[t,o]=Re(t,o),Je(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(Kn,n,s)}var Dd=N({squaredDifference_:PG});function MG(r,e){let t=v(r,"x","squeeze","string_or_numeric");return z(t,pb(t.shape,e).newShape)}var Up=N({squeeze_:MG});function LG(r,e=0){let t=Na(r,"tensors","stack","string_or_numeric");E(t.length>=1,()=>"Pass at least one tensor to tf.stack"),t.length>0&&E(e<=t[0].rank,()=>"Axis must be <= rank of the tensor");let o=t,n={axis:e};return T.runKernel(vs,o,n)}var Sr=N({stack_:LG});function BG(r,e=0){let o={x:v(r,"x","step")},n={alpha:e};return T.runKernel(Ds,o,n)}var Od=N({step_:BG});function VG(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,"x","stridedSlice","string_or_numeric")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(jn,c,l)}var b1=N({stridedSlice_:VG});function zG(r){let t={x:v(r,"x","tan","float32")};return T.runKernel(Yn,t)}var C1=N({tan_:zG});function mr(r,e){Jr(r);let t=or(r,e);if(t.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return xr(r,null,t,e)}function _i(r,e,t){if(Jr(r),e!=null&&e.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=or(r,t);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return xr(r,e,o,t)}function S1(r,e,t){if(Jr(r),e!=null&&e.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=or(r,t);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}function w1(r,e,t){if(Jr(r),e!=null&&e.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=or(r,t);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return xr(r,e,o,t)}function I1(r,e,t){if(Jr(r),e!=null&&e.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=or(r,t);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return e=e||o,xr(r,e,o,t)}function WG(r,e=1,t=!0){let o=v(r,"x","topk");if(o.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let n=o.shape[o.shape.length-1];if(e<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=T.runKernel(Zn,s,a);return{values:i,indices:p}}var v1=N({topk_:WG});function UG(r,e=0,t=1,o,n){if(yt(r),o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new fu(e,t,o,!0,n),a=le(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:t},n={axis:e},[s,a]=T.runKernel(kp,o,n);return{values:s,indices:a}}var N1=N({unique_:GG});function HG(r,e,t){let o=v(r,"x","unsortedSegmentSum"),n=v(e,"segmentIds","unsortedSegmentSum","int32");E(na(t),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Np,s,a)}var T1=N({unsortedSegmentSum_:HG});function qG(r,e=0){let t=v(r,"x","unstack","string_or_numeric");E(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return T.runKernel(Rs,o,n)}var so=N({unstack_:qG});function _1(r,e){return al(r,e,"right")}function E1(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Pd(r,e){let t=[];for(let s=0;s0,()=>"mask cannot be scalar"),ht(i.slice(s,s+a),n.shape,"mask's shape must match the first K dimensions of tensor's shape,");let p=1;for(let h=s;h"Shape mismatch in v and x");let p=be(1),u=Ne(p,i),c=ae(Ne(a,s),u);if(n){E(o!=null,()=>"When using zeroDebias: true, step is required.");let l=v(o,"step","movingAverage");c=Ge(c,Ne(p,Ra(i,l)))}return xe(s,c)}var QG=N({movingAverage_:YG});function ZG(r,e,t){yt(t);let o=v(r,"indices","scatterND","int32"),n=v(e,"updates","scatterND");Qm(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(zn,s,a)}var JG=N({scatterND_:ZG});function $1(r,e,t,o){if(r.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function tH(r,e,t,o=0){yt(t);let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(e,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);$1(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(li,i,p)}var rH=N({sparseToDense_:tH});function oH(r,e){let t=v(e,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:t};return T.runKernel(un,n)}var nH=N({gatherND_:oH});function A1(r,e){if(e==null)return r.shape.slice();if(Pr(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),E(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof it?n.clone():n;let s=A1(n,t),a=1-e,i=Ge(ud(xe($d(s,0,1,"float32",o),a)),a);return ae(n,i)}var aH=N({dropout_:sH});function xC(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function il(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),E(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),ht(o.shape.slice(0,o.shape.length-1),n.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=o.shape[o.shape.length-1];E(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=cb("bool",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hF1,depthwiseConv2d:()=>P1,matMul:()=>M1});function pH(r,e,t,o,n,s="NHWC",a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]])),E(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),E(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),E(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?p.shape[3]:p.shape[1];E(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),E(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Pt("conv2dDerFilter",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(cp,l,m)}var R1=N({conv2DBackpropFilter_:pH});function gu(r,e,t){if(t==null||t==="linear")return r;if(t==="relu")return ae(r,Od(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function xu(r,e){let t=e,o=jm(r.shape,e.shape);return o.length>0&&(t=et(t,o)),z(t,r.shape)}function yu(r,e,t,o){if(e==="linear")return r;if(e==="relu")return Ti(r);if(e==="elu")return ad(r);if(e==="relu6")return Ad(r);if(e==="prelu")return vd(r,t);if(e==="leakyrelu")return ld(r,o);if(e==="sigmoid")return zs(r);throw new Error(`Unknown fused activation ${e}.`)}var bu=(r,e)=>!(r>0)||e==="linear";function cH({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||"linear",bu(T.state.gradientDepth,p)===!1){E(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=vi(r,e,t,o,n,s,a);return i!=null&&(_=xe(_,i)),yu(_,p,u,c)}let l=v(r,"x","conv2d","float32"),m=v(e,"filter","conv2d","float32"),d=l,f=!1;l.rank===3&&(f=!0,d=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Pt("fused conv2d",o,a);let h=n==="NHWC"?d.shape[3]:d.shape[1];E(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),E(lr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=uu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,"bias","fused conv2d"),[x]=Re(x,l),n==="NHWC"?Je(g.outShape,x.shape):(E(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),E(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if(E(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)E(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{Je(_,g.outShape)}catch($){let A=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(A)}b=v(u,"prelu weights","fused conv2d")}let C=(_,$)=>{E(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[A,R,D,P]=$,M=gu(_,D,p);E(iu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=nd(R.shape,M,A,t,o),W=R1(R,M,A.shape,t,o),V=[L,W];if(P!=null){let U=xu(P,M);V.push(U)}return V},w={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr(($,A,R)=>{let D=T.runKernel(ho,w,k);return R([A,$,D]),f&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:C}})(d,m):Cr(($,A,R,D)=>{let P=T.runKernel(ho,w,k);return D([A,$,P,R]),f&&(P=z(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m,x)}var F1=N({fusedConv2d_:cH});function lH(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=z(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return T.runKernel(dp,u,c)}var D1=N({depthwiseConv2dNativeBackpropFilter_:lH});function mH(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=z(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(fp,u,c);return p?z(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var O1=N({depthwiseConv2dNativeBackpropInput_:mH});function dH({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(bu(T.state.gradientDepth,p)===!1){let k=Bp(r,e,t,o,n,s,a);return i!=null&&(k=xe(k,i)),yu(k,p,u,c)}let l=v(r,"x","depthwiseConv2d","float32"),m=v(e,"filter","depthwiseConv2d","float32"),d=l,f=!1;l.rank===3&&(f=!0,d=z(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),E(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),E(lr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Pt("fused depthwiseConv2d",o,a);let h=uu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Re(g,l),Je(h.outShape,g.shape));let x;u!=null&&(x=v(u,"prelu weights","fused depthwiseConv2d"));let b=(k,_)=>{E(iu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,A,R,D]=_,P=gu(k,R,p),M=O1(A.shape,P,$,t,o,s,a),L=D1(A,P,$.shape,t,o,s,a);if(D!=null){let W=xu(g,P);return[M,L,W]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},w={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Cr((_,$,A)=>{let R=T.runKernel(go,C,w);return A([$,_,R]),f&&(R=z(R,[R.shape[1],R.shape[2],R.shape[3]])),{value:R,gradFunc:b}})(d,m):Cr((_,$,A,R)=>{let D=T.runKernel(go,C,w);return R([$,_,D,A]),f&&(D=z(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m,g)}var P1=N({fusedDepthwiseConv2d_:dH});function fH({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(bu(T.state.gradientDepth,s)===!1){let P=Xe(r,e,t,o);return n!=null&&(P=xe(P,n)),yu(P,s,a,i)}let p=v(r,"a","fused matMul"),u=v(e,"b","fused matMul");[p,u]=Re(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);E(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=Je(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),w=t?z(p,[g,c,m]):z(p,[g,m,c]),k=o?z(u,[x,d,l]):z(u,[x,l,d]),_;n!=null&&(_=v(n,"bias","fused matMul"),[_]=Re(_,p),Je(C,_.shape));let $;a!=null&&($=v(a,"prelu weights","fused matMul"));let A=(P,M)=>{let[L,W,V,U]=M,q=gu(z(P,V.shape),V,s),H,j;if(!t&&!o?(H=Xe(q,W,!1,!0),j=Xe(L,q,!0,!1)):!t&&o?(H=Xe(q,W,!1,!1),j=Xe(q,L,!0,!1)):t&&!o?(H=Xe(W,q,!1,!0),j=Xe(L,q,!1,!1)):(H=Xe(W,q,!0,!0),j=Xe(q,L,!0,!0)),n!=null){let X=xu(U,q);return[H,j,X]}else return[H,j]},R={a:w,b:k,bias:_,preluActivationWeights:$},D={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Cr((M,L,W)=>{let V=T.runKernel(fo,R,D);return W([M,L,V]),{value:z(V,C),gradFunc:A}})(w,k):Cr((M,L,W,V)=>{let U=T.runKernel(fo,R,D);return V([M,L,U,W]),{value:z(U,C),gradFunc:A}})(w,k,_)}var M1=N({fusedMatMul_:fH});function hH(r){return il(r,.54,.46)}var L1=N({hammingWindow_:hH});function gH(r){return il(r,.5,.5)}var Ld=N({hannWindow_:gH});function xH(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(He(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),E(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),E(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),E(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),E(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(Yo,c,l)}var V1=N({cropAndResize_:bH});function CH(r){let e=v(r,"image","flipLeftRight","float32");E(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return T.runKernel(on,t,{})}var z1=N({flipLeftRight_:CH});function SH(r){let e=v(r,"image","grayscaleToRGB"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),E(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,ki(e,n)}var W1=N({grayscaleToRGB_:SH});function wH(r,e,t=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");E(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return T.runKernel(es,s,a)}var U1=N({rotateWithOffset_:wH});function So(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),E(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),E(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),E(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),E(e.rank===1,()=>"scores must be a 1D tensor"),E(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function IH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(e,"scores","nonMaxSuppression","float32"),i=So(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return T.runKernel(Tn,{boxes:s,scores:a},p)}var G1=N({nonMaxSuppression_:IH});function H1(r,e,t){let o=vH(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function vH(r,e,t){return NH(r,e,t||kH)}function kH(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Vd(r,e,t,o,n){return bC(r,e,t,o,n,0)}function zd(r,e,t,o,n,s){return bC(r,e,t,o,n,0,!1,s,!0)}function Wd(r,e,t,o,n,s){return bC(r,e,t,o,n,s,!0)}function bC(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(q1);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:C}=g;if(x=C;--k){let _=TH(r,b,l[k]);if(_>=o){w=!0;break}if(g.score=g.score*_H(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,w||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&H1(u,g,q1))}let d=l.length,f=t-d;i&&f>0&&(l.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function TH(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(l-u)*(m-c);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),x=Math.min(i,l),b=Math.min(p,m),C=Math.max(x-h,0)*Math.max(b-g,0);return C/(d+f-C)}function _H(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function q1(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function EH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(e,"scores","nonMaxSuppressionAsync"),i=So(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Vd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),mr(l,"int32")}var K1=EH;function $H(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=So(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(_n,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var j1=N({nonMaxSuppressionWithScore_:$H});async function AH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=So(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:d}=Wd(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(m,"int32"),selectedScores:mr(d)}}var X1=AH;function RH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=So(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},f=T.runKernel(ba,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var Y1=N({nonMaxSuppressionPadded_:RH});async function FH(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=So(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=zd(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:mr(f,"int32"),validOutputs:be(h,"int32")}}var Q1=FH;function DH(r,e,t=!1,o=!1){let n=v(r,"images","resizeBilinear");E(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),E(o===!1||t===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(Mn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var Z1=N({resizeBilinear_:DH});function OH(r,e,t=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");E(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),E(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),E(o===!1||t===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=z(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(Pn,i,p);return a?z(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var J1=N({resizeNearestNeighbor_:OH});function PH(r,e="binary",t=!1,o=.5){let n=v(r,"image","threshold"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=ae(mr([o]),255),c,l,m,d;if(E(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),E(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),E(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),E(e==="otsu"||e==="binary",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=Oa(n,[1,1,1],-1);let g=ae(c,s),x=ae(l,a),b=ae(m,i);d=xe(xe(g,x),b)}else d=r;if(e==="otsu"){let g=od(Ke(Rd(d),"int32"),nr([]),256);u=MH(g,p)}let f=t?Vp(d,u):cu(d,u);return Ke(ae(f,255),"int32")}function MH(r,e){let t=mr([-1]),o=mr([0]),n=mr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),E(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Jn,p,u)}var tN=N({transform_:LH});function BH(r,e,t){E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`);let o=v(r,"a","bandPart");E(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2);if(!(e<=s))throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`);if(!(t<=a))throw new Error(`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`);e<0&&(e=s),t<0&&(t=a);let i=z(Ni(0,s,1,"int32"),[-1,1]),p=Ni(0,a,1,"int32"),u=Ne(i,p),c=lu(Vp(u,be(+e,"int32")),cd(u,be(-t,"int32"))),l=Vr([s,a],o.dtype);return z(Sr(so(z(o,[-1,s,a])).map(m=>os(c,m,l))),n)}var rN=N({bandPart_:BH});function VH(r){let e;if(Array.isArray(r)){e=!1,E(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=Oa(r,r.shape[0],0).map(n=>Up(n,[0]));E(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return nN(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=so(z(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=nN(p,e);n.push(u),s.push(c)});let a=z(Sr(n,0),r.shape),i=z(Sr(s,0),r.shape);return[a,i]}}function nN(r,e=!1){return T.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=id(t),s=Br(r),a=_i([[1]],[1,1]),i=Br(a),p=t>=o?o:t;for(let u=0;u{let d=He(s,[u,u],[t-u,1]),f=pu(d),h=He(s,[u,u],[1,1]),g=os(cu(h,0),_i([[-1]]),_i([[1]])),x=Ne(h,ae(g,f)),b=Ge(d,x);b.shape[0]===1?i=Br(a):i=gt([a,He(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=yr(Ge(Xe(g,x),f)),w=He(s,[u,0],[t-u,o]),k=ae(C,i),_=Mp(i);if(u===0)s=Ne(w,Xe(k,Xe(_,w)));else{let R=Ne(w,Xe(k,Xe(_,w)));s=gt([He(s,[0,0],[u,o]),R],0)}let $=Mp(k),A=He(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Ne(A,Xe(Xe(A,i),$));else{let R=Ne(A,Xe(Xe(A,i),$));n=gt([He(n,[0,0],[t,u]),R],1)}return[i,s,n]}),Dt([c,l,m])}return!e&&t>o&&(n=He(n,[0,0],[t,o]),s=He(s,[0,0],[o,o])),[n,s]})}var sN=N({qr_:zH});var Et;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Et||(Et={}));function WH(r,e,t=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;e!=null&&(n=v(e,"weights","computeWeightedLoss"));let s=n==null?o:ae(o,n);if(t===Et.NONE)return s;if(t===Et.SUM)return et(s);if(t===Et.MEAN){if(n==null)return mu(s);{let a=o.size/n.size,i=Ge(et(s),et(n));return a>1?Ge(i,be(a)):i}}if(t===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return Ge(et(s),be(o.size));{let a=ae(n,Gs(o.shape)),i=Ke(et(wd(a,be(0))),"float32");return Ge(et(s),i)}}throw Error(`Unknown reduction: ${t}`)}var sr=N({computeWeightedLoss_:WH});function UH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(e,"predictions","absoluteDifference"),a=null;t!=null&&(a=v(t,"weights","absoluteDifference")),ht(n.shape,s.shape,"Error in absoluteDifference: ");let i=Yt(Ne(n,s));return sr(i,a,o)}var aN=N({absoluteDifference_:UH});function GH(r,e,t,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(e,"predictions","cosineDistance"),i=null;o!=null&&(i=v(o,"weights","cosineDistance")),ht(s.shape,a.shape,"Error in cosineDistance: ");let p=be(1),u=Ne(p,et(ae(s,a),t,!0));return sr(u,i,n)}var iN=N({cosineDistance_:GH});function HH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(e,"predictions","hingeLoss"),a=null;t!=null&&(a=v(t,"weights","hingeLoss")),ht(n.shape,s.shape,"Error in hingeLoss: ");let i=be(1);n=Ne(ae(be(2),n),i);let p=Ti(Ne(i,ae(n,s)));return sr(p,a,o)}var uN=N({hingeLoss_:HH});function qH(r,e,t,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(e,"predictions","huberLoss"),i=null;t!=null&&(i=v(t,"weights","huberLoss")),ht(s.shape,a.shape,"Error in huberLoss: ");let p=be(o),u=Yt(Ne(a,s)),c=Sd(u,p),l=Ne(u,c),m=xe(ae(be(.5),Qt(c)),ae(p,l));return sr(m,i,n)}var pN=N({huberLoss_:qH});function KH(r,e,t,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(e,"predictions","logLoss"),i=null;t!=null&&(i=v(t,"weights","logLoss")),ht(s.shape,a.shape,"Error in logLoss: ");let p=be(1),u=be(o),c=yr(ae(s,Da(xe(a,u)))),l=ae(Ne(p,s),Da(xe(Ne(p,a),u))),m=Ne(c,l);return sr(m,i,n)}var cN=N({logLoss_:KH});function jH(r,e,t,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(e,"predictions","meanSquaredError"),a=null;t!=null&&(a=v(t,"weights","meanSquaredError")),ht(n.shape,s.shape,"Error in meanSquaredError: ");let i=Dd(n,s);return sr(i,a,o)}var lN=N({meanSquaredError_:jH});function XH(r,e){let t=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(e,"logits","sigmoidCrossEntropyWithLogits");ht(t.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=Ti(o),s=ae(o,t),a=md(Co(yr(Yt(o))));return xe(Ne(n,s),a)}function YH(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(e,"logits","sigmoidCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","sigmoidCrossEntropy")),ht(s.shape,a.shape,"Error in sigmoidCrossEntropy: "),o>0){let u=be(o),c=be(1),l=be(.5);s=xe(ae(s,Ne(c,u)),ae(l,u))}let p=XH(s,a);return sr(p,i,n)}var mN=N({sigmoidCrossEntropy_:YH});function QH(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Cr((n,s,a)=>{let p=hd(s,[t],!0),u=Ne(Ke(s,"float32"),p);a([n,u]);let c=yr(ae(u,n));return{value:et(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=Aa(d.shape,[t]);return[ae(z(d,x),Ne(Ke(h,"float32"),Co(g))),ae(z(d,x),Ne(Co(g),Ke(h,"float32")))]}}})(r,e)}function ZH(r,e,t,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(e,"logits","softmaxCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","softmaxCrossEntropy")),ht(s.shape,a.shape,"Error in softmaxCrossEntropy: "),o>0){let u=be(o),c=be(1),l=be(s.shape[1]);s=xe(ae(s,Ne(c,u)),Ge(u,l))}let p=QH(s,a);return sr(p,i,n)}var dN=N({softmaxCrossEntropy_:ZH});function JH(r,e,t,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(e,"values","sparseFillEmptyRows"),a=v(t,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape + ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(ui,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var fN=N({sparseFillEmptyRows_:JH});function eq(r,e,t){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(e,"inputShape","sparseReshape","int32"),s=v(t,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape + ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(wa,a);return{outputIndices:i[0],outputShape:i[1]}}var hN=N({sparseReshape_:eq});function tq(r,e,t){let o=v(r,"data","sparseSegmentMean"),n=v(e,"indices","sparseSegmentMean","int32"),s=v(t,"segmentIds","sparseSegmentMean","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return N.runKernel(Za,a)}var WT=T({sparseSegmentMean_:Dq});function Pq(r,e,t){let o=v(r,"data","sparseSegmentSum"),n=v(e,"indices","sparseSegmentSum","int32"),s=v(t,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(pi,a)}var gN=N({sparseSegmentMean_:tq});function rq(r,e,t){let o=v(r,"data","sparseSegmentSum"),n=v(e,"indices","sparseSegmentSum","int32"),s=v(t,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return N.runKernel(Ja,a)}var UT=T({sparseSegmentSum_:Pq});function Oq(r,e,t,o,n,s,a,i){let p=v(r,"data","stringNGrams","string");if(p.dtype!=="string")throw new Error("Data must be of datatype string");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=N.runKernel(Ns,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GT=T({stringNGrams_:Oq});function Mq(r,e,t=!0){let o=v(r,"input","stringSplit","string"),n=v(e,"delimiter","stringSplit","string");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=N.runKernel(ri,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HT=T({stringSplit_:Mq});function Lq(r,e){let t=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:e};if(e<=0)throw new Error("Number of buckets must be at least 1");let n={input:t};return N.runKernel(oi,n,o)}var qT=T({stringToHashBucketFast_:Lq});var Bq={fft:qp,ifft:hu,rfft:Kp,irfft:Gf},Vq={hammingWindow:cT,hannWindow:Xf,frame:Yf,stft:lT},zq={flipLeftRight:fT,grayscaleToRGB:dT,resizeNearestNeighbor:kT,resizeBilinear:vT,rotateWithOffset:hT,cropAndResize:mT,nonMaxSuppression:gT,nonMaxSuppressionAsync:bT,nonMaxSuppressionWithScore:CT,nonMaxSuppressionWithScoreAsync:IT,nonMaxSuppressionPadded:wT,nonMaxSuppressionPaddedAsync:ST,threshold:TT,transform:NT},Wq={bandPart:_T,gramSchmidt:ET,qr:RT},Uq={absoluteDifference:AT,computeWeightedLoss:sr,cosineDistance:FT,hingeLoss:DT,huberLoss:PT,logLoss:OT,meanSquaredError:MT,sigmoidCrossEntropy:LT,softmaxCrossEntropy:BT},Gq={sparseFillEmptyRows:VT,sparseReshape:zT,sparseSegmentMean:WT,sparseSegmentSum:UT},Hq={stringNGrams:GT,stringSplit:HT,stringToHashBucketFast:qT};var wr=class extends ll{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Ft(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return dC(e,t)}dispose(){this.iterations_!=null&&Ft(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:be(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(wr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var xi=class extends wr{constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:Ne(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;Ne(()=>{let c=ge(oe(p,this.rho),oe(Zt(i),1-this.rho)),l=oe(We(Rr(ge(u,this.epsilon)),Rr(ge(p,this.epsilon))),i),m=ge(oe(u,this.rho),oe(Zt(l),1-this.rho));p.assign(c),u.assign(m);let f=ge(oe(l,-this.learningRate),s);s.assign(f)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ft(this.accumulatedGrads.map(e=>e.variable)),Ft(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};xi.className="Adadelta";$r(xi);var yi=class extends wr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:Ne(()=>Bs(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;Ne(()=>{let p=ge(i,Zt(a));i.assign(p);let u=ge(oe(We(a,Rr(ge(p,N.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ft(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};yi.className="Adagrad";$r(yi);var bi=class extends wr{constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ne(()=>{this.accBeta1=be(t).variable(),this.accBeta2=be(o).variable()}),n==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ne(()=>{let o=ke(1,this.accBeta1),n=ke(1,this.accBeta2);t.forEach((s,a)=>{let i=N.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ne(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:Ne(()=>Gt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=ge(oe(c,this.beta1),oe(u,1-this.beta1)),f=ge(oe(l,this.beta2),oe(Zt(u),1-this.beta2)),d=We(m,o),h=We(f,n);c.assign(m),l.assign(f);let g=ge(oe(We(d,ge(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(oe(this.accBeta1,this.beta1)),this.accBeta2.assign(oe(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ft(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ft(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),Ne(()=>{this.accBeta1.assign(Na(this.beta1,this.iterations_+1)),this.accBeta2.assign(Na(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};bi.className="Adam";$r(bi);var Ci=class extends wr{constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ne(()=>{this.iteration=be(0).variable(),this.accBeta1=be(t).variable()}),n==null&&(this.epsilon=N.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ne(()=>{let o=ke(1,this.accBeta1),n=We(-this.learningRate,ge(oe(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=N.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Gt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Gt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=ge(oe(c,this.beta1),oe(u,1-this.beta1)),f=oe(l,this.beta2),d=Qt(u),h=Rf(f,d);c.assign(m),l.assign(h);let g=ge(oe(We(n,o),We(m,ge(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(ge(this.iteration,1)),this.accBeta1.assign(oe(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ft(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ft(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Ci.className="Adamax";$r(Ci);var Us=class extends wr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=N.registeredVariables[o];Ne(()=>{let i=ge(oe(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=So(be(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};Us.className="SGD";$r(Us);var Ii=class extends Us{constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=be(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:Ne(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&Ne(()=>{let p,u=ge(oe(this.m,a),i);this.useNesterov?p=ge(oe(this.c,ge(i,oe(u,this.m))),s):p=ge(oe(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ft(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Ii.className="Momentum";$r(Ii);var wi=class extends wr{constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=N.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=N.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:Ne(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:Ne(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;Ne(()=>{let c=ge(oe(p,this.decay),oe(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=ge(oe(l,this.decay),oe(i,1-this.decay)),f=We(oe(i,this.learningRate),Rr(ke(c,ge(Zt(m),this.epsilon)))),d=ge(oe(u,this.momentum),f);p.assign(c),l.assign(m),u.assign(d);let h=ke(s,d);s.assign(h)}else{let l=ge(oe(p,this.decay),oe(Zt(i),1-this.decay)),m=ge(oe(u,this.momentum),We(oe(i,this.learningRate),Rr(ge(l,this.epsilon))));p.assign(l),u.assign(m);let f=ke(s,m);s.assign(f)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ft(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ft(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ft(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};wi.className="RMSProp";$r(wi);var ns=class{static sgd(e){return new Us(e)}static momentum(e,t,o=!1){return new Ii(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new wi(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new bi(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new xi(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new Ci(e,t,o,n,s)}static adagrad(e,t=.1){return new yi(e,t)}};var pMe={sgd:ns.sgd,momentum:ns.momentum,adadelta:ns.adadelta,adagrad:ns.adagrad,rmsprop:ns.rmsprop,adamax:ns.adamax,adam:ns.adam};var qq=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r())();function kC(){return new Promise(r=>qq(()=>r()))}var I={};Be(I,{ERF_A1:()=>pK,ERF_A2:()=>cK,ERF_A3:()=>lK,ERF_A4:()=>mK,ERF_A5:()=>fK,ERF_P:()=>uK,PARALLELIZE_THRESHOLD:()=>ed,RowPartitionType:()=>Gs,SELU_SCALE:()=>iK,SELU_SCALEALPHA:()=>aK,applyActivation:()=>yu,assertAndGetBroadcastShape:()=>Je,assertAxesAreInnerMostDims:()=>fG,assertParamsConsistent:()=>Kq,assignToTypedArray:()=>bK,axesAreInnerMostDims:()=>fC,calculateShapes:()=>kv,checkEinsumDimSizes:()=>kK,checkPadOnDimRoundingMode:()=>Ot,combineLocations:()=>$k,combineRaggedTensorToTensorShapes:()=>Xq,complexWithEvenIndex:()=>gK,complexWithOddIndex:()=>xK,computeConv2DInfo:()=>uu,computeConv3DInfo:()=>Zv,computeDefaultPad:()=>mC,computeDilation2DInfo:()=>dU,computeOptimalWindowSize:()=>Jq,computeOutAndReduceShapes:()=>mG,computeOutShape:()=>jq,computePool2DInfo:()=>lC,computePool3DInfo:()=>hU,convertConv2DDataFormat:()=>Jv,decodeEinsumEquation:()=>SK,eitherStridesOrDilationsAreOne:()=>lr,expandShapeToKeepDim:()=>Ta,exponent:()=>IK,exponents:()=>CK,fromStringArrayToUint8:()=>qK,fromUint8ToStringArray:()=>HK,getAxesPermutation:()=>dG,getBroadcastDims:()=>Iv,getComplexWithIndex:()=>yK,getEinsumComputePath:()=>TK,getEinsumPermutation:()=>vK,getFusedBiasGradient:()=>xu,getFusedDyActivation:()=>gu,getImageCenter:()=>eK,getInnerMostAxes:()=>gG,getPermuted:()=>rK,getRaggedRank:()=>Qq,getReductionAxes:()=>nf,getReshaped:()=>tK,getReshapedPermuted:()=>oK,getRowPartitionTypesHelper:()=>Yq,getSliceBeginCoords:()=>nK,getSliceSize:()=>sK,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>$K,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>RK,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>AK,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>PK,getSparseReshapeInputOutputMismatchErrorMessage:()=>MK,getSparseReshapeInputOutputMultipleErrorMessage:()=>OK,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>FK,getSparseReshapeNegativeOutputDimErrorMessage:()=>DK,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>zK,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>LK,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>BK,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>VK,getUndoAxesPermutation:()=>hG,isIdentityPermutation:()=>NK,log:()=>Sz,mergeRealAndImagArrays:()=>dK,prepareAndValidate:()=>vv,prepareSplitSize:()=>EK,segment_util:()=>NC,shouldFuse:()=>bu,slice_util:()=>et,splitRealAndImagArrays:()=>hK,tupleValuesAreOne:()=>iu,upcastType:()=>ct,validateDefaultValueShape:()=>Zq,validateInput:()=>uf,validateUpdateShape:()=>aC,warn:()=>Rs});function Kq(r,e){let t=r[0].length;r.forEach((n,s)=>{$(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),$(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function jq(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function Yq(r){let e={FIRST_DIM_SIZE:Gs.FIRST_DIM_SIZE,VALUE_ROWIDS:Gs.VALUE_ROWIDS,ROW_LENGTHS:Gs.ROW_LENGTHS,ROW_SPLITS:Gs.ROW_SPLITS,ROW_LIMITS:Gs.ROW_LIMITS,ROW_STARTS:Gs.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function Qq(r){return r.length===0?0:r[0]===Gs.FIRST_DIM_SIZE?r.length-1:r.length}function Zq(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var ed=30;function Jq(r){return r<=ed?r:sp(r,Math.floor(Math.sqrt(r)))}function eK(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function tK(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function oK(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,KT=",",jT="...";function SK(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(wK,"").length)/TC.length;if(t<1)throw new Error("Equations without an arrow are not supported.");if(t>1)throw new Error(`Equation must contain exactly one arrow ("${TC}").`);let[o,n]=r.split(TC);$(o.indexOf(jT)===-1,()=>`The ellipsis notation ("${jT}") is not supported yet.`);let s=o.split(KT),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let m=0;md.indexOf(f)!==-1))throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`);i.indexOf(f)===-1&&i.push(f)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function kK(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function TK(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function _K(r,e){let t=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>"There should be only one negative value in split array.");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}$(r.shape[t]===e.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=e}return o}function $K(r){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${r}`}function RK(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function AK(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function FK(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function DK(r,e){return`size ${r} must be non-negative, not ${e}`}function PK(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function OK(r,e){let t=Ve(r),o=Ve(e);return`Input to reshape is a SparseTensor with ${t} - dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function MK(r,e){let t=Ve(r),o=Ve(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function LK(){return"segment ids must be >= 0"}function BK(){return"segment ids are not increasing"}function VK(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function zK(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var NC={};Be(NC,{collectGatherOpShapeInfo:()=>GK,computeOutShape:()=>UK,segOpComputeOptimalWindowSize:()=>WK});function WK(r,e){let t=!1,o;for(r<=ed?(o=r,t=!0):o=sp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=sp(r,o+1);return o}function UK(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) ( - ${s}).`);if(tOp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function qK(r){return r.map(e=>si(e))}var Bt={};Be(Bt,{nonMaxSuppressionV3Impl:()=>Qf,nonMaxSuppressionV4Impl:()=>Zf,nonMaxSuppressionV5Impl:()=>Jf,whereImpl:()=>Kf});var KK=P();KK.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,r=>{r&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var To;(function(r){r[r.DT_INVALID=0]="DT_INVALID",r[r.DT_FLOAT=1]="DT_FLOAT",r[r.DT_DOUBLE=2]="DT_DOUBLE",r[r.DT_INT32=3]="DT_INT32",r[r.DT_UINT8=4]="DT_UINT8",r[r.DT_INT16=5]="DT_INT16",r[r.DT_INT8=6]="DT_INT8",r[r.DT_STRING=7]="DT_STRING",r[r.DT_COMPLEX64=8]="DT_COMPLEX64",r[r.DT_INT64=9]="DT_INT64",r[r.DT_BOOL=10]="DT_BOOL",r[r.DT_QINT8=11]="DT_QINT8",r[r.DT_QUINT8=12]="DT_QUINT8",r[r.DT_QINT32=13]="DT_QINT32",r[r.DT_BFLOAT16=14]="DT_BFLOAT16",r[r.DT_QINT16=15]="DT_QINT16",r[r.DT_QUINT16=16]="DT_QUINT16",r[r.DT_UINT16=17]="DT_UINT16",r[r.DT_COMPLEX128=18]="DT_COMPLEX128",r[r.DT_HALF=19]="DT_HALF",r[r.DT_RESOURCE=20]="DT_RESOURCE",r[r.DT_VARIANT=21]="DT_VARIANT",r[r.DT_UINT32=22]="DT_UINT32",r[r.DT_UINT64=23]="DT_UINT64",r[r.DT_FLOAT_REF=101]="DT_FLOAT_REF",r[r.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",r[r.DT_INT32_REF=103]="DT_INT32_REF",r[r.DT_UINT8_REF=104]="DT_UINT8_REF",r[r.DT_INT16_REF=105]="DT_INT16_REF",r[r.DT_INT8_REF=106]="DT_INT8_REF",r[r.DT_STRING_REF=107]="DT_STRING_REF",r[r.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",r[r.DT_INT64_REF=109]="DT_INT64_REF",r[r.DT_BOOL_REF=110]="DT_BOOL_REF",r[r.DT_QINT8_REF=111]="DT_QINT8_REF",r[r.DT_QUINT8_REF=112]="DT_QUINT8_REF",r[r.DT_QINT32_REF=113]="DT_QINT32_REF",r[r.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",r[r.DT_QINT16_REF=115]="DT_QINT16_REF",r[r.DT_QUINT16_REF=116]="DT_QUINT16_REF",r[r.DT_UINT16_REF=117]="DT_UINT16_REF",r[r.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",r[r.DT_HALF_REF=119]="DT_HALF_REF",r[r.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",r[r.DT_VARIANT_REF=121]="DT_VARIANT_REF",r[r.DT_UINT32_REF=122]="DT_UINT32_REF",r[r.DT_UINT64_REF=123]="DT_UINT64_REF"})(To||(To={}));var XT;(function(r){let e;(function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(XT||(XT={}));var EC={};function XK(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};EC[r]=t}function td(r){return EC[r]}function YK(r){delete EC[r]}function S(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd;if(s.type==="tensor")return Ht(e.inputNames[s.inputIndexStart],t,o,n);if(s.type==="tensors")return e.inputNames.slice(i,p).map(m=>Ht(m,t,o,n));let u=Ht(e.inputNames.slice(i)[0],t,o,n),c=u.dataSync();return s.type==="number"?c[0]:x.toNestedArray(u.shape,c)}let a=e.attrParams[r];return a&&a.value}function Ht(r,e,t,o){let[n,s]=Sr(r);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[rd(n,i)]);return a!==void 0?e[rd(n,a)][s]:void 0}function YT(r,e,t){return e[rd(r,t.currentContextId)]}function zo(r,e){let[t,o,n]=Sr(r);return[rd(t,e&&e.currentContextId),o,n]}function rd(r,e){return e?`${r}-${e}`:r}function Sr(r){let e=r.split(":");if(e.length===1)return[r,0,void 0];let t=e[0],o=e.length===3?e[1]:void 0,n=Number(e[e.length-1]);return[t,n,o]}function gl(r,e,t){let o=S("pad",r,e,t);if(o==="explicit"){o=S("explicitPaddings",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function ss(r){return r.kept?r:zr(r)}var $C={};Be($C,{json:()=>QK});var QK=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var RC={};Be(RC,{json:()=>ZK});var ZK=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var AC={};Be(AC,{json:()=>JK});var JK=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}];var FC={};Be(FC,{json:()=>e6});var e6=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var DC={};Be(DC,{json:()=>t6});var t6=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var PC={};Be(PC,{json:()=>r6});var r6=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var OC={};Be(OC,{json:()=>o6});var o6=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var MC={};Be(MC,{json:()=>n6});var n6=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}];var LC={};Be(LC,{json:()=>s6});var s6=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}];var BC={};Be(BC,{json:()=>a6});var a6=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}];var VC={};Be(VC,{json:()=>i6});var i6=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var zC={};Be(zC,{json:()=>u6});var u6=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}];var WC={};Be(WC,{json:()=>p6});var p6=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}];var UC={};Be(UC,{json:()=>c6});var c6=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}];var GC={};Be(GC,{json:()=>l6});var l6=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}];var HC={};Be(HC,{json:()=>m6});var m6=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var qC={};Be(qC,{json:()=>f6});var f6=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}];var KC={};Be(KC,{json:()=>d6});var d6=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var jC={};Be(jC,{json:()=>h6});var h6=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var xl=class{constructor(){let e=[$C,RC,AC,FC,DC,PC,OC,MC,LC,BC,VC,zC,WC,UC,GC,HC,qC,KC,jC],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?n.push(h[g.name]):g.op==="Const"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((y,b)=>{let[C,,w]=zo(y),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(w);if(_!==-1){let E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=zo(h),y=i[g];y!=null&&(y.signatureKey=l[h],u.push(y))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=zo(h),y=i[g];y&&(y.signatureKey=c[h],p.push(y))}):p=n;let f={};e.library!=null&&e.library.function!=null&&(f=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let d={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:f};return a.length>0&&(d.initNodes=a),d}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=td(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=od(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=od(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=cd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=cd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=sd(e.attr,s.tfName,s.defaultValue||0),i===void 0&&!!s.tfDeprecatedName&&(i=sd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=pd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=pd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=nd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=nd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=md(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=md(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=ud(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ud(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=ld(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ld(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=ad(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ad(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=id(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=id(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=QT(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=QT(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op==="Const"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=zo(l.name),f={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:XC(l.type),type:"dtype"}},children:[]};f.signatureKey=l.name,a.push(f),s[m]=f}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((f,d)=>{let[h,,g]=zo(f),y=s[h];if(y.outputs!=null){let b=y.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[d]=C}}m.inputs.push(y),y.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,f]=zo(u[l.name]),d=s[m];d!=null&&(d.defaultOutput=f,i.push(d))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function g6(r){let e=P().global;if(typeof e.atob!="undefined")return e.atob(r);if(typeof Buffer!="undefined")return new Buffer(r,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function ZT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):g6(r);return e?t:t.toLowerCase()}function od(r,e,t,o=!1){let n=r[e];return n!=null?ZT(n.s,o):t}function nd(r,e,t){let o=r[e];return o?o.b:t}function sd(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n=="number"?n:parseInt(n,10)}function XC(r){switch(typeof r=="string"&&(r=To[r]),r){case To.DT_FLOAT:case To.DT_HALF:return"float32";case To.DT_INT32:case To.DT_INT64:case To.DT_INT8:case To.DT_UINT8:return"int32";case To.DT_BOOL:return"bool";case To.DT_DOUBLE:return"float32";case To.DT_STRING:return"string";default:return null}}function QT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ad(r,e,t){let o=r[e];return o&&o.type?XC(o.type):t}function id(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>XC(n)):t}function JT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function ud(r,e,t){let o=r[e];return o&&o.shape?JT(o.shape):t}function pd(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):t}function cd(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>ZT(s,o)):t}function ld(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>JT(n)):t}function md(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var fd=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Ht(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Ht(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return sd(this.node.rawAttrs,e,t);if(o.s!=null)return od(this.node.rawAttrs,e,t);if(o.b!=null)return nd(this.node.rawAttrs,e,t);if(o.shape!=null)return ud(this.node.rawAttrs,e,t);if(o.type!=null)return ad(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return pd(this.node.rawAttrs,e,t);if(o.list.s!=null)return cd(this.node.rawAttrs,e,t);if(o.list.shape!=null)return ld(this.node.rawAttrs,e,t);if(o.list.b!=null)return md(this.node.rawAttrs,e,t);if(o.list.type!=null)return id(this.node.rawAttrs,e,t)}return t}};var rt={};Be(rt,{OP_SCOPE_SUFFIX:()=>Ub,abs:()=>Qt,acos:()=>Vv,acosh:()=>zv,add:()=>ge,addN:()=>Wv,all:()=>Uv,any:()=>Gv,argMax:()=>Hv,argMin:()=>qv,asin:()=>Kv,asinh:()=>jv,atan:()=>Xv,atan2:()=>Yv,atanh:()=>Qv,avgPool:()=>mf,avgPool3d:()=>ek,basicLSTMCell:()=>tk,batchNorm:()=>li,batchNorm2d:()=>ok,batchNorm3d:()=>nk,batchNorm4d:()=>sk,batchToSpaceND:()=>ff,bincount:()=>df,booleanMaskAsync:()=>_H,broadcastArgs:()=>ak,broadcastTo:()=>Ls,buffer:()=>ne,cast:()=>qe,ceil:()=>ik,clipByValue:()=>uk,clone:()=>zr,complex:()=>Er,concat:()=>gt,concat1d:()=>pk,concat2d:()=>ck,concat3d:()=>lk,concat4d:()=>mk,conv1d:()=>fk,conv2d:()=>mi,conv2dTranspose:()=>dk,conv3d:()=>hk,conv3dTranspose:()=>xk,cos:()=>yk,cosh:()=>bk,cosineWindow:()=>hl,cumprod:()=>Ck,cumsum:()=>Ik,denseBincount:()=>wk,depthToSpace:()=>Sk,depthwiseConv2d:()=>Gp,diag:()=>vk,dilation2d:()=>kk,div:()=>We,divNoNan:()=>Tk,dot:()=>Nk,dropout:()=>BH,einsum:()=>_k,elu:()=>xf,enclosingPowerOfTwo:()=>wC,equal:()=>gf,erf:()=>Ek,euclideanNorm:()=>Ak,exp:()=>Bo,expandDims:()=>_a,expm1:()=>Fk,eye:()=>yf,fft:()=>qp,fill:()=>Bs,floor:()=>bf,floorDiv:()=>cf,fused:()=>SC,gather:()=>Cf,gatherND:()=>MH,greater:()=>cu,greaterEqual:()=>If,ifft:()=>hu,imag:()=>ci,image:()=>zq,inTopKAsync:()=>zH,irfft:()=>Gf,isFinite:()=>Dk,isInf:()=>Pk,isNaN:()=>Ok,leakyRelu:()=>wf,less:()=>Mk,lessEqual:()=>Hp,linalg:()=>Wq,linspace:()=>Lk,localResponseNormalization:()=>Bk,log:()=>Ea,log1p:()=>Sf,logSigmoid:()=>Vk,logSoftmax:()=>zk,logSumExp:()=>Tf,logicalAnd:()=>lu,logicalNot:()=>Nf,logicalOr:()=>_f,logicalXor:()=>Wk,losses:()=>Uq,lowerBound:()=>Uk,matMul:()=>Xe,max:()=>Vs,maxPool:()=>$f,maxPool3d:()=>Gk,maxPoolWithArgmax:()=>Hk,maximum:()=>Rf,mean:()=>mu,meshgrid:()=>qk,min:()=>fl,minimum:()=>Af,mirrorPad:()=>Kk,mod:()=>jk,moments:()=>Xk,movingAverage:()=>$H,mul:()=>oe,multiRNNCell:()=>Yk,multinomial:()=>Qk,neg:()=>yr,norm:()=>pu,notEqual:()=>Ff,oneHot:()=>pl,ones:()=>zs,onesLike:()=>Zk,op:()=>T,outerProduct:()=>Jk,pad:()=>Ws,pad1d:()=>e1,pad2d:()=>t1,pad3d:()=>r1,pad4d:()=>o1,pool:()=>n1,pow:()=>Na,prelu:()=>Pf,print:()=>ef,prod:()=>s1,raggedGather:()=>a1,raggedRange:()=>i1,raggedTensorToTensor:()=>u1,rand:()=>p1,randomGamma:()=>T1,randomNormal:()=>Vf,randomStandardNormal:()=>N1,randomUniform:()=>zf,range:()=>di,real:()=>ka,reciprocal:()=>_1,relu:()=>hi,relu6:()=>Wf,reshape:()=>z,reverse:()=>vo,reverse1d:()=>E1,reverse2d:()=>$1,reverse3d:()=>R1,reverse4d:()=>A1,rfft:()=>Kp,round:()=>Uf,rsqrt:()=>F1,scalar:()=>be,scatterND:()=>AH,searchSorted:()=>dl,selu:()=>D1,separableConv2d:()=>P1,setdiff1dAsync:()=>O1,sigmoid:()=>Ms,sign:()=>M1,signal:()=>Vq,sin:()=>L1,sinh:()=>B1,slice:()=>Ue,slice1d:()=>V1,slice2d:()=>z1,slice3d:()=>W1,slice4d:()=>U1,softmax:()=>G1,softplus:()=>kf,spaceToBatchND:()=>Df,sparse:()=>Gq,sparseToDense:()=>PH,spectral:()=>Bq,split:()=>$a,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Hf,squeeze:()=>jp,stack:()=>Ir,step:()=>qf,stridedSlice:()=>H1,string:()=>Hq,sub:()=>ke,sum:()=>tt,tan:()=>q1,tanh:()=>ml,tensor:()=>nr,tensor1d:()=>mr,tensor2d:()=>gi,tensor3d:()=>sf,tensor4d:()=>K1,tensor5d:()=>j1,tensor6d:()=>X1,tile:()=>fi,topk:()=>Y1,transpose:()=>Wp,truncatedNormal:()=>Q1,unique:()=>Z1,unsortedSegmentSum:()=>J1,unstack:()=>ko,upperBound:()=>eT,variable:()=>tT,where:()=>os,whereAsync:()=>jf,zeros:()=>Wr,zerosLike:()=>Gt});var eN=(r,e,t,o=rt)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(S("a",r,e,t),S("b",r,e,t))];case"AddN":return[o.addN(S("tensors",r,e,t))];case"FloorMod":case"Mod":return[o.mod(S("a",r,e,t),S("b",r,e,t))];case"Mul":return[o.mul(S("a",r,e,t),S("b",r,e,t))];case"RealDiv":case"Div":return[o.div(S("a",r,e,t),S("b",r,e,t))];case"DivNoNan":return[o.divNoNan(S("a",r,e,t),S("b",r,e,t))];case"FloorDiv":return[o.floorDiv(S("a",r,e,t),S("b",r,e,t))];case"Sub":return[o.sub(S("a",r,e,t),S("b",r,e,t))];case"Minimum":return[o.minimum(S("a",r,e,t),S("b",r,e,t))];case"Maximum":return[o.maximum(S("a",r,e,t),S("b",r,e,t))];case"Pow":return[o.pow(S("a",r,e,t),S("b",r,e,t))];case"SquaredDifference":return[o.squaredDifference(S("a",r,e,t),S("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var tN=(r,e,t,o=rt)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(S("x",r,e,t))];case"Acos":return[o.acos(S("x",r,e,t))];case"Acosh":return[o.acosh(S("x",r,e,t))];case"Asin":return[o.asin(S("x",r,e,t))];case"Asinh":return[o.asinh(S("x",r,e,t))];case"Atan":return[o.atan(S("x",r,e,t))];case"Atan2":return[o.atan2(S("x",r,e,t),S("y",r,e,t))];case"Atanh":return[o.atanh(S("x",r,e,t))];case"Ceil":return[o.ceil(S("x",r,e,t))];case"Complex":return[o.complex(S("real",r,e,t),S("imag",r,e,t))];case"Cos":return[o.cos(S("x",r,e,t))];case"Cosh":return[o.cosh(S("x",r,e,t))];case"Elu":return[o.elu(S("x",r,e,t))];case"Erf":return[o.erf(S("x",r,e,t))];case"Exp":return[o.exp(S("x",r,e,t))];case"Expm1":return[o.expm1(S("x",r,e,t))];case"Floor":return[o.floor(S("x",r,e,t))];case"Log":return[o.log(S("x",r,e,t))];case"Log1p":return[o.log1p(S("x",r,e,t))];case"Imag":return[o.imag(S("x",r,e,t))];case"Neg":return[o.neg(S("x",r,e,t))];case"Reciprocal":return[o.reciprocal(S("x",r,e,t))];case"Real":return[o.real(S("x",r,e,t))];case"Relu":return[o.relu(S("x",r,e,t))];case"Round":return[o.round(S("x",r,e,t))];case"Selu":return[o.selu(S("x",r,e,t))];case"Sigmoid":return[o.sigmoid(S("x",r,e,t))];case"Sin":return[o.sin(S("x",r,e,t))];case"Sign":return[o.sign(S("x",r,e,t))];case"Sinh":return[o.sinh(S("x",r,e,t))];case"Softplus":return[o.softplus(S("x",r,e,t))];case"Sqrt":return[o.sqrt(S("x",r,e,t))];case"Square":return[o.square(S("x",r,e,t))];case"Tanh":return[o.tanh(S("x",r,e,t))];case"Tan":return[o.tan(S("x",r,e,t))];case"ClipByValue":return[o.clipByValue(S("x",r,e,t),S("clipValueMin",r,e,t),S("clipValueMax",r,e,t))];case"Relu6":return[o.relu6(S("x",r,e,t))];case"Rsqrt":return[o.rsqrt(Ht(r.inputNames[0],e,t))];case"Prod":return[o.prod(S("x",r,e,t),S("axes",r,e,t))];case"LeakyRelu":return[o.leakyRelu(S("x",r,e,t),S("alpha",r,e,t))];case"Prelu":return[o.prelu(S("x",r,e,t),S("alpha",r,e,t))];case"IsNan":return[o.isNaN(Ht(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Ur(r,e,t=""){if(!(typeof r=="number"||typeof e=="number")){x.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function rN(r){return!(typeof r=="number"||r.some(e=>e<0))}function Xp(r,e,t){let o=dd(r,t),n=!rN(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=dd(s.shape,o)}),!rN(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function dd(r,e){if(typeof r=="number")return e;if(typeof e=="number")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var hd=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=be(0),So(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, - because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),Ur(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,So(t),o.written=!0,this.tensors[e]=o}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((o,n)=>this.write(o,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,ko(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ci,a)}var xN=N({sparseSegmentSum_:rq});function oq(r,e,t,o,n,s,a,i){let p=v(r,"data","stringNGrams","string");if(p.dtype!=="string")throw new Error("Data must be of datatype string");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=T.runKernel(As,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var yN=N({stringNGrams_:oq});function nq(r,e,t=!0){let o=v(r,"input","stringSplit","string"),n=v(e,"delimiter","stringSplit","string");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=T.runKernel(di,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var bN=N({stringSplit_:nq});function sq(r,e){let t=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:e};if(e<=0)throw new Error("Number of buckets must be at least 1");let n={input:t};return T.runKernel(fi,n,o)}var CN=N({stringToHashBucketFast_:sq});var aq={fft:zp,ifft:hu,rfft:Wp,irfft:Fd},iq={hammingWindow:L1,hannWindow:Ld,frame:Bd,stft:B1},uq={flipLeftRight:z1,grayscaleToRGB:W1,resizeNearestNeighbor:J1,resizeBilinear:Z1,rotateWithOffset:U1,cropAndResize:V1,nonMaxSuppression:G1,nonMaxSuppressionAsync:K1,nonMaxSuppressionWithScore:j1,nonMaxSuppressionWithScoreAsync:X1,nonMaxSuppressionPadded:Y1,nonMaxSuppressionPaddedAsync:Q1,threshold:eN,transform:tN},pq={bandPart:rN,gramSchmidt:oN,qr:sN},cq={absoluteDifference:aN,computeWeightedLoss:sr,cosineDistance:iN,hingeLoss:uN,huberLoss:pN,logLoss:cN,meanSquaredError:lN,sigmoidCrossEntropy:mN,softmaxCrossEntropy:dN},lq={sparseFillEmptyRows:fN,sparseReshape:hN,sparseSegmentMean:gN,sparseSegmentSum:xN},mq={stringNGrams:yN,stringSplit:bN,stringToHashBucketFast:CN};var wr=class extends ol{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Dt(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return pC(e,t)}dispose(){this.iterations_!=null&&Dt(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:be(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(wr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ei=class extends wr{constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:Ee(()=>Ut(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;Ee(()=>{let c=xe(ae(p,this.rho),ae(Qt(i),1-this.rho)),l=ae(Ge($r(xe(u,this.epsilon)),$r(xe(p,this.epsilon))),i),m=xe(ae(u,this.rho),ae(Qt(l),1-this.rho));p.assign(c),u.assign(m);let d=xe(ae(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Dt(this.accumulatedGrads.map(e=>e.variable)),Dt(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};Ei.className="Adadelta";Er(Ei);var $i=class extends wr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:Ee(()=>Ws(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;Ee(()=>{let p=xe(i,Qt(a));i.assign(p);let u=xe(ae(Ge(a,$r(xe(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Dt(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};$i.className="Adagrad";Er($i);var Ai=class extends wr{constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ee(()=>{this.accBeta1=be(t).variable(),this.accBeta2=be(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ee(()=>{let o=Ne(1,this.accBeta1),n=Ne(1,this.accBeta2);t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ee(()=>Ut(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:Ee(()=>Ut(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=xe(ae(c,this.beta1),ae(u,1-this.beta1)),d=xe(ae(l,this.beta2),ae(Qt(u),1-this.beta2)),f=Ge(m,o),h=Ge(d,n);c.assign(m),l.assign(d);let g=xe(ae(Ge(f,xe($r(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(ae(this.accBeta1,this.beta1)),this.accBeta2.assign(ae(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Dt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Dt(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),Ee(()=>{this.accBeta1.assign(Ra(this.beta1,this.iterations_+1)),this.accBeta2.assign(Ra(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Ai.className="Adam";Er(Ai);var Ri=class extends wr{constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ee(()=>{this.iteration=be(0).variable(),this.accBeta1=be(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);Ee(()=>{let o=Ne(1,this.accBeta1),n=Ge(-this.learningRate,xe(ae(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ut(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Ut(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=xe(ae(c,this.beta1),ae(u,1-this.beta1)),d=ae(l,this.beta2),f=Yt(u),h=Cd(d,f);c.assign(m),l.assign(h);let g=xe(ae(Ge(n,o),Ge(m,xe(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(xe(this.iteration,1)),this.accBeta1.assign(ae(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Dt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Dt(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Ri.className="Adamax";Er(Ri);var qs=class extends wr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=T.registeredVariables[o];Ee(()=>{let i=xe(ae(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=_r(be(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};qs.className="SGD";Er(qs);var Fi=class extends qs{constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=be(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:Ee(()=>Ut(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&Ee(()=>{let p,u=xe(ae(this.m,a),i);this.useNesterov?p=xe(ae(this.c,xe(i,ae(u,this.m))),s):p=xe(ae(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Dt(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Fi.className="Momentum";Er(Fi);var Di=class extends wr{constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:Ee(()=>Ut(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:Ee(()=>Ut(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;Ee(()=>{let c=xe(ae(p,this.decay),ae(Qt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=xe(ae(l,this.decay),ae(i,1-this.decay)),d=Ge(ae(i,this.learningRate),$r(Ne(c,xe(Qt(m),this.epsilon)))),f=xe(ae(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Ne(s,f);s.assign(h)}else{let l=xe(ae(p,this.decay),ae(Qt(i),1-this.decay)),m=xe(ae(u,this.momentum),Ge(ae(i,this.learningRate),$r(xe(l,this.epsilon))));p.assign(l),u.assign(m);let d=Ne(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Dt(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Dt(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Dt(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Di.className="RMSProp";Er(Di);var ns=class{static sgd(e){return new qs(e)}static momentum(e,t,o=!1){return new Fi(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new Di(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new Ai(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ei(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new Ri(e,t,o,n,s)}static adagrad(e,t=.1){return new $i(e,t)}};var hMe={sgd:ns.sgd,momentum:ns.momentum,adadelta:ns.adadelta,adagrad:ns.adagrad,rmsprop:ns.rmsprop,adamax:ns.adamax,adam:ns.adam};var dq=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r())();function CC(){return new Promise(r=>dq(()=>r()))}var S={};Ue(S,{ERF_A1:()=>$q,ERF_A2:()=>Aq,ERF_A3:()=>Rq,ERF_A4:()=>Fq,ERF_A5:()=>Dq,ERF_P:()=>Eq,PARALLELIZE_THRESHOLD:()=>Ud,RowPartitionType:()=>Ks,SELU_SCALE:()=>_q,SELU_SCALEALPHA:()=>Tq,applyActivation:()=>yu,assertAndGetBroadcastShape:()=>Je,assertAxesAreInnerMostDims:()=>DU,assertParamsConsistent:()=>fq,assignToTypedArray:()=>Vq,axesAreInnerMostDims:()=>uC,calculateShapes:()=>Jv,checkEinsumDimSizes:()=>qq,checkPadOnDimRoundingMode:()=>Pt,combineLocations:()=>nk,combineRaggedTensorToTensorShapes:()=>gq,complexWithEvenIndex:()=>Mq,complexWithOddIndex:()=>Lq,computeConv2DInfo:()=>uu,computeConv3DInfo:()=>N0,computeDefaultPad:()=>iC,computeDilation2DInfo:()=>OW,computeOptimalWindowSize:()=>Cq,computeOutAndReduceShapes:()=>FU,computeOutShape:()=>hq,computePool2DInfo:()=>aC,computePool3DInfo:()=>PW,convertConv2DDataFormat:()=>T0,decodeEinsumEquation:()=>Gq,eitherStridesOrDilationsAreOne:()=>lr,expandShapeToKeepDim:()=>Aa,exponent:()=>Wq,exponents:()=>zq,fromStringArrayToUint8:()=>dK,fromUint8ToStringArray:()=>mK,getAxesPermutation:()=>OU,getBroadcastDims:()=>Xv,getComplexWithIndex:()=>Bq,getEinsumComputePath:()=>Kq,getEinsumPermutation:()=>Hq,getFusedBiasGradient:()=>xu,getFusedDyActivation:()=>gu,getImageCenter:()=>Sq,getInnerMostAxes:()=>MU,getPermuted:()=>Iq,getRaggedRank:()=>yq,getReductionAxes:()=>jm,getReshaped:()=>wq,getReshapedPermuted:()=>vq,getRowPartitionTypesHelper:()=>xq,getSliceBeginCoords:()=>kq,getSliceSize:()=>Nq,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>Qq,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>Zq,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>Jq,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>rK,getSparseReshapeInputOutputMismatchErrorMessage:()=>nK,getSparseReshapeInputOutputMultipleErrorMessage:()=>oK,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>eK,getSparseReshapeNegativeOutputDimErrorMessage:()=>tK,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>uK,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>sK,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>aK,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>iK,getUndoAxesPermutation:()=>PU,isIdentityPermutation:()=>jq,log:()=>GV,mergeRealAndImagArrays:()=>Oq,prepareAndValidate:()=>Zv,prepareSplitSize:()=>Yq,segment_util:()=>wC,shouldFuse:()=>bu,slice_util:()=>ut,splitRealAndImagArrays:()=>Pq,tupleValuesAreOne:()=>iu,upcastType:()=>dt,validateDefaultValueShape:()=>bq,validateInput:()=>Qm,validateUpdateShape:()=>tC,warn:()=>Os});function fq(r,e){let t=r[0].length;r.forEach((n,s)=>{E(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),E(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function hq(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function xq(r){let e={FIRST_DIM_SIZE:Ks.FIRST_DIM_SIZE,VALUE_ROWIDS:Ks.VALUE_ROWIDS,ROW_LENGTHS:Ks.ROW_LENGTHS,ROW_SPLITS:Ks.ROW_SPLITS,ROW_LIMITS:Ks.ROW_LIMITS,ROW_STARTS:Ks.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function yq(r){return r.length===0?0:r[0]===Ks.FIRST_DIM_SIZE?r.length-1:r.length}function bq(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var Ud=30;function Cq(r){return r<=Ud?r:sp(r,Math.floor(Math.sqrt(r)))}function Sq(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function wq(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function vq(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,SN=",",wN="...";function Gq(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(Uq,"").length)/SC.length;if(t<1)throw new Error("Equations without an arrow are not supported.");if(t>1)throw new Error(`Equation must contain exactly one arrow ("${SC}").`);let[o,n]=r.split(SC);E(o.indexOf(wN)===-1,()=>`The ellipsis notation ("${wN}") is not supported yet.`);let s=o.split(SN),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function qq(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function Kq(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function Xq(r,e){let t=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);E(n<=1,()=>"There should be only one negative value in split array.");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}E(r.shape[t]===e.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=e}return o}function Qq(r){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${r}`}function Zq(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function Jq(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function eK(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function tK(r,e){return`size ${r} must be non-negative, not ${e}`}function rK(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function oK(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t} + dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function nK(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function sK(){return"segment ids must be >= 0"}function aK(){return"segment ids are not increasing"}function iK(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function uK(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var wC={};Ue(wC,{collectGatherOpShapeInfo:()=>lK,computeOutShape:()=>cK,segOpComputeOptimalWindowSize:()=>pK});function pK(r,e){let t=!1,o;for(r<=Ud?(o=r,t=!0):o=sp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=sp(r,o+1);return o}function cK(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) ( + ${s}).`);if(tAp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function dK(r){return r.map(e=>gi(e))}var Lt={};Ue(Lt,{nonMaxSuppressionV3Impl:()=>Vd,nonMaxSuppressionV4Impl:()=>zd,nonMaxSuppressionV5Impl:()=>Wd,whereImpl:()=>Pd});var fK=O();fK.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,r=>{r&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var ao;(function(r){r[r.DT_INVALID=0]="DT_INVALID",r[r.DT_FLOAT=1]="DT_FLOAT",r[r.DT_DOUBLE=2]="DT_DOUBLE",r[r.DT_INT32=3]="DT_INT32",r[r.DT_UINT8=4]="DT_UINT8",r[r.DT_INT16=5]="DT_INT16",r[r.DT_INT8=6]="DT_INT8",r[r.DT_STRING=7]="DT_STRING",r[r.DT_COMPLEX64=8]="DT_COMPLEX64",r[r.DT_INT64=9]="DT_INT64",r[r.DT_BOOL=10]="DT_BOOL",r[r.DT_QINT8=11]="DT_QINT8",r[r.DT_QUINT8=12]="DT_QUINT8",r[r.DT_QINT32=13]="DT_QINT32",r[r.DT_BFLOAT16=14]="DT_BFLOAT16",r[r.DT_QINT16=15]="DT_QINT16",r[r.DT_QUINT16=16]="DT_QUINT16",r[r.DT_UINT16=17]="DT_UINT16",r[r.DT_COMPLEX128=18]="DT_COMPLEX128",r[r.DT_HALF=19]="DT_HALF",r[r.DT_RESOURCE=20]="DT_RESOURCE",r[r.DT_VARIANT=21]="DT_VARIANT",r[r.DT_UINT32=22]="DT_UINT32",r[r.DT_UINT64=23]="DT_UINT64",r[r.DT_FLOAT_REF=101]="DT_FLOAT_REF",r[r.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",r[r.DT_INT32_REF=103]="DT_INT32_REF",r[r.DT_UINT8_REF=104]="DT_UINT8_REF",r[r.DT_INT16_REF=105]="DT_INT16_REF",r[r.DT_INT8_REF=106]="DT_INT8_REF",r[r.DT_STRING_REF=107]="DT_STRING_REF",r[r.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",r[r.DT_INT64_REF=109]="DT_INT64_REF",r[r.DT_BOOL_REF=110]="DT_BOOL_REF",r[r.DT_QINT8_REF=111]="DT_QINT8_REF",r[r.DT_QUINT8_REF=112]="DT_QUINT8_REF",r[r.DT_QINT32_REF=113]="DT_QINT32_REF",r[r.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",r[r.DT_QINT16_REF=115]="DT_QINT16_REF",r[r.DT_QUINT16_REF=116]="DT_QUINT16_REF",r[r.DT_UINT16_REF=117]="DT_UINT16_REF",r[r.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",r[r.DT_HALF_REF=119]="DT_HALF_REF",r[r.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",r[r.DT_VARIANT_REF=121]="DT_VARIANT_REF",r[r.DT_UINT32_REF=122]="DT_UINT32_REF",r[r.DT_UINT64_REF=123]="DT_UINT64_REF"})(ao||(ao={}));var IN;(function(r){let e;(function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(IN||(IN={}));var vC={};function gK(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};vC[r]=t}function Gd(r){return vC[r]}function xK(r){delete vC[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd;if(s.type==="tensor")return Gt(e.inputNames[s.inputIndexStart],t,o,n);if(s.type==="tensors")return e.inputNames.slice(i,p).map(m=>Gt(m,t,o,n));let u=Gt(e.inputNames.slice(i)[0],t,o,n),c=u.dataSync();return s.type==="number"?c[0]:y.toNestedArray(u.shape,c)}let a=e.attrParams[r];return a&&a.value}function Gt(r,e,t,o){let[n,s]=Ir(r);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[Hd(n,i)]);return a!==void 0?e[Hd(n,a)][s]:void 0}function vN(r,e,t){return e[Hd(r,t.currentContextId)]}function ss(r,e){let[t,o,n]=Ir(r);return[Hd(t,e&&e.currentContextId),o,n]}function Hd(r,e){return e?`${r}-${e}`:r}function Ir(r){let e=r.split(":");if(e.length===1)return[r,0,void 0];let t=e[0],o=e.length===3?e[1]:void 0,n=Number(e[e.length-1]);return[t,n,o]}function ul(r,e,t){let o=I("pad",r,e,t);if(o==="explicit"){o=I("explicitPaddings",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function as(r){return r.kept?r:Br(r)}var kC={};Ue(kC,{json:()=>yK});var yK=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var NC={};Ue(NC,{json:()=>bK});var bK=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var TC={};Ue(TC,{json:()=>CK});var CK=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}];var _C={};Ue(_C,{json:()=>SK});var SK=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var EC={};Ue(EC,{json:()=>wK});var wK=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var $C={};Ue($C,{json:()=>IK});var IK=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var AC={};Ue(AC,{json:()=>vK});var vK=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var RC={};Ue(RC,{json:()=>kK});var kK=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}];var FC={};Ue(FC,{json:()=>NK});var NK=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var DC={};Ue(DC,{json:()=>TK});var TK=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}];var OC={};Ue(OC,{json:()=>_K});var _K=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var PC={};Ue(PC,{json:()=>EK});var EK=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}];var MC={};Ue(MC,{json:()=>$K});var $K=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}];var LC={};Ue(LC,{json:()=>AK});var AK=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}];var BC={};Ue(BC,{json:()=>RK});var RK=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}];var VC={};Ue(VC,{json:()=>FK});var FK=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var zC={};Ue(zC,{json:()=>DK});var DK=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}];var WC={};Ue(WC,{json:()=>OK});var OK=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var UC={};Ue(UC,{json:()=>PK});var PK=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var pl=class{constructor(){let e=[kC,NC,TC,_C,EC,$C,AC,RC,FC,DC,OC,PC,MC,LC,BC,VC,zC,WC,UC],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?n.push(h[g.name]):g.op==="Const"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[C,,w]=ss(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(w);if(_!==-1){let $=`${C}:${_}`;g.inputNames[b]=$}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=ss(h),x=i[g];x!=null&&(x.signatureKey=l[h],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=ss(h),x=i[g];x&&(x.signatureKey=c[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=Gd(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=qd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=qd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=Jd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Jd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=jd(e.attr,s.tfName,s.defaultValue||0),i===void 0&&!!s.tfDeprecatedName&&(i=jd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=Zd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Zd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=Kd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Kd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=tf(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=tf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=Qd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Qd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=ef(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ef(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=Xd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Xd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=Yd(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Yd(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=kN(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=kN(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op==="Const"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=ss(l.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:GC(l.type),type:"dtype"}},children:[]};d.signatureKey=l.name,a.push(d),s[m]=d}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((d,f)=>{let[h,,g]=ss(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[f]=C}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,d]=ss(u[l.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function MK(r){let e=O().global;if(typeof e.atob!="undefined")return e.atob(r);if(typeof Buffer!="undefined")return new Buffer(r,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function NN(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):MK(r);return e?t:t.toLowerCase()}function qd(r,e,t,o=!1){let n=r[e];return n!=null?NN(n.s,o):t}function Kd(r,e,t){let o=r[e];return o?o.b:t}function jd(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n=="number"?n:parseInt(n,10)}function GC(r){switch(typeof r=="string"&&(r=ao[r]),r){case ao.DT_FLOAT:case ao.DT_HALF:return"float32";case ao.DT_INT32:case ao.DT_INT64:case ao.DT_INT8:case ao.DT_UINT8:return"int32";case ao.DT_BOOL:return"bool";case ao.DT_DOUBLE:return"float32";case ao.DT_STRING:return"string";default:return null}}function kN(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function Xd(r,e,t){let o=r[e];return o&&o.type?GC(o.type):t}function Yd(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>GC(n)):t}function TN(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function Qd(r,e,t){let o=r[e];return o&&o.shape?TN(o.shape):t}function Zd(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):t}function Jd(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>NN(s,o)):t}function ef(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>TN(n)):t}function tf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var rf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Gt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Gt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return jd(this.node.rawAttrs,e,t);if(o.s!=null)return qd(this.node.rawAttrs,e,t);if(o.b!=null)return Kd(this.node.rawAttrs,e,t);if(o.shape!=null)return Qd(this.node.rawAttrs,e,t);if(o.type!=null)return Xd(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return Zd(this.node.rawAttrs,e,t);if(o.list.s!=null)return Jd(this.node.rawAttrs,e,t);if(o.list.shape!=null)return ef(this.node.rawAttrs,e,t);if(o.list.b!=null)return tf(this.node.rawAttrs,e,t);if(o.list.type!=null)return Yd(this.node.rawAttrs,e,t)}return t}};var Ye={};Ue(Ye,{OP_SCOPE_SUFFIX:()=>Lb,abs:()=>Yt,acos:()=>f0,acosh:()=>h0,add:()=>xe,addN:()=>g0,all:()=>x0,any:()=>y0,argMax:()=>b0,argMin:()=>C0,asin:()=>S0,asinh:()=>w0,atan:()=>I0,atan2:()=>v0,atanh:()=>k0,avgPool:()=>td,avgPool3d:()=>_0,basicLSTMCell:()=>E0,batchNorm:()=>wi,batchNorm2d:()=>A0,batchNorm3d:()=>R0,batchNorm4d:()=>F0,batchToSpaceND:()=>rd,bincount:()=>od,booleanMaskAsync:()=>XG,broadcastArgs:()=>D0,broadcastTo:()=>Ii,buffer:()=>le,cast:()=>Ke,ceil:()=>O0,clipByValue:()=>P0,clone:()=>Br,complex:()=>Tr,concat:()=>gt,concat1d:()=>M0,concat2d:()=>L0,concat3d:()=>B0,concat4d:()=>V0,conv1d:()=>z0,conv2d:()=>vi,conv2dTranspose:()=>W0,conv3d:()=>U0,conv3dTranspose:()=>H0,cos:()=>q0,cosh:()=>K0,cosineWindow:()=>il,cumprod:()=>j0,cumsum:()=>X0,denseBincount:()=>Y0,depthToSpace:()=>Q0,depthwiseConv2d:()=>Bp,diag:()=>Z0,dilation2d:()=>J0,div:()=>Ge,divNoNan:()=>ek,dot:()=>tk,dropout:()=>aH,einsum:()=>rk,elu:()=>ad,enclosingPowerOfTwo:()=>xC,equal:()=>sd,erf:()=>ok,euclideanNorm:()=>ak,exp:()=>Co,expandDims:()=>Fa,expm1:()=>ik,eye:()=>id,fft:()=>zp,fill:()=>Ws,floor:()=>ud,floorDiv:()=>Jm,fused:()=>yC,gather:()=>pd,gatherND:()=>nH,greater:()=>cu,greaterEqual:()=>cd,ifft:()=>hu,imag:()=>Si,image:()=>uq,inTopKAsync:()=>uH,irfft:()=>Fd,isFinite:()=>uk,isInf:()=>pk,isNaN:()=>ck,leakyRelu:()=>ld,less:()=>lk,lessEqual:()=>Vp,linalg:()=>pq,linspace:()=>mk,localResponseNormalization:()=>dk,log:()=>Da,log1p:()=>md,logSigmoid:()=>fk,logSoftmax:()=>hk,logSumExp:()=>hd,logicalAnd:()=>lu,logicalNot:()=>gd,logicalOr:()=>xd,logicalXor:()=>gk,losses:()=>cq,lowerBound:()=>xk,matMul:()=>Xe,max:()=>Us,maxPool:()=>bd,maxPool3d:()=>yk,maxPoolWithArgmax:()=>bk,maximum:()=>Cd,mean:()=>mu,meshgrid:()=>Ck,min:()=>sl,minimum:()=>Sd,mirrorPad:()=>Sk,mod:()=>wk,moments:()=>Ik,movingAverage:()=>QG,mul:()=>ae,multiRNNCell:()=>vk,multinomial:()=>kk,neg:()=>yr,norm:()=>pu,notEqual:()=>wd,oneHot:()=>tl,ones:()=>Gs,onesLike:()=>Nk,op:()=>N,outerProduct:()=>Tk,pad:()=>Hs,pad1d:()=>_k,pad2d:()=>Ek,pad3d:()=>$k,pad4d:()=>Ak,pool:()=>Rk,pow:()=>Ra,prelu:()=>vd,print:()=>Gm,prod:()=>Fk,raggedGather:()=>Dk,raggedRange:()=>Ok,raggedTensorToTensor:()=>Pk,rand:()=>Mk,randomGamma:()=>e1,randomNormal:()=>Ed,randomStandardNormal:()=>t1,randomUniform:()=>$d,range:()=>Ni,real:()=>$a,reciprocal:()=>r1,relu:()=>Ti,relu6:()=>Ad,reshape:()=>z,reverse:()=>no,reverse1d:()=>o1,reverse2d:()=>n1,reverse3d:()=>s1,reverse4d:()=>a1,rfft:()=>Wp,round:()=>Rd,rsqrt:()=>i1,scalar:()=>be,scatterND:()=>JG,searchSorted:()=>al,selu:()=>u1,separableConv2d:()=>p1,setdiff1dAsync:()=>c1,sigmoid:()=>zs,sign:()=>l1,signal:()=>iq,sin:()=>m1,sinh:()=>d1,slice:()=>He,slice1d:()=>f1,slice2d:()=>h1,slice3d:()=>g1,slice4d:()=>x1,softmax:()=>y1,softplus:()=>fd,spaceToBatchND:()=>Id,sparse:()=>lq,sparseToDense:()=>rH,spectral:()=>aq,split:()=>Oa,sqrt:()=>$r,square:()=>Qt,squaredDifference:()=>Dd,squeeze:()=>Up,stack:()=>Sr,step:()=>Od,stridedSlice:()=>b1,string:()=>mq,sub:()=>Ne,sum:()=>et,tan:()=>C1,tanh:()=>nl,tensor:()=>nr,tensor1d:()=>mr,tensor2d:()=>_i,tensor3d:()=>Xm,tensor4d:()=>S1,tensor5d:()=>w1,tensor6d:()=>I1,tile:()=>ki,topk:()=>v1,transpose:()=>Mp,truncatedNormal:()=>k1,unique:()=>N1,unsortedSegmentSum:()=>T1,unstack:()=>so,upperBound:()=>_1,variable:()=>E1,where:()=>os,whereAsync:()=>Md,zeros:()=>Vr,zerosLike:()=>Ut});var _N=(r,e,t,o=Ye)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(I("a",r,e,t),I("b",r,e,t))];case"AddN":return[o.addN(I("tensors",r,e,t))];case"FloorMod":case"Mod":return[o.mod(I("a",r,e,t),I("b",r,e,t))];case"Mul":return[o.mul(I("a",r,e,t),I("b",r,e,t))];case"RealDiv":case"Div":return[o.div(I("a",r,e,t),I("b",r,e,t))];case"DivNoNan":return[o.divNoNan(I("a",r,e,t),I("b",r,e,t))];case"FloorDiv":return[o.floorDiv(I("a",r,e,t),I("b",r,e,t))];case"Sub":return[o.sub(I("a",r,e,t),I("b",r,e,t))];case"Minimum":return[o.minimum(I("a",r,e,t),I("b",r,e,t))];case"Maximum":return[o.maximum(I("a",r,e,t),I("b",r,e,t))];case"Pow":return[o.pow(I("a",r,e,t),I("b",r,e,t))];case"SquaredDifference":return[o.squaredDifference(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var EN=(r,e,t,o=Ye)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(I("x",r,e,t))];case"Acos":return[o.acos(I("x",r,e,t))];case"Acosh":return[o.acosh(I("x",r,e,t))];case"Asin":return[o.asin(I("x",r,e,t))];case"Asinh":return[o.asinh(I("x",r,e,t))];case"Atan":return[o.atan(I("x",r,e,t))];case"Atan2":return[o.atan2(I("x",r,e,t),I("y",r,e,t))];case"Atanh":return[o.atanh(I("x",r,e,t))];case"Ceil":return[o.ceil(I("x",r,e,t))];case"Complex":return[o.complex(I("real",r,e,t),I("imag",r,e,t))];case"Cos":return[o.cos(I("x",r,e,t))];case"Cosh":return[o.cosh(I("x",r,e,t))];case"Elu":return[o.elu(I("x",r,e,t))];case"Erf":return[o.erf(I("x",r,e,t))];case"Exp":return[o.exp(I("x",r,e,t))];case"Expm1":return[o.expm1(I("x",r,e,t))];case"Floor":return[o.floor(I("x",r,e,t))];case"Log":return[o.log(I("x",r,e,t))];case"Log1p":return[o.log1p(I("x",r,e,t))];case"Imag":return[o.imag(I("x",r,e,t))];case"Neg":return[o.neg(I("x",r,e,t))];case"Reciprocal":return[o.reciprocal(I("x",r,e,t))];case"Real":return[o.real(I("x",r,e,t))];case"Relu":return[o.relu(I("x",r,e,t))];case"Round":return[o.round(I("x",r,e,t))];case"Selu":return[o.selu(I("x",r,e,t))];case"Sigmoid":return[o.sigmoid(I("x",r,e,t))];case"Sin":return[o.sin(I("x",r,e,t))];case"Sign":return[o.sign(I("x",r,e,t))];case"Sinh":return[o.sinh(I("x",r,e,t))];case"Softplus":return[o.softplus(I("x",r,e,t))];case"Sqrt":return[o.sqrt(I("x",r,e,t))];case"Square":return[o.square(I("x",r,e,t))];case"Tanh":return[o.tanh(I("x",r,e,t))];case"Tan":return[o.tan(I("x",r,e,t))];case"ClipByValue":return[o.clipByValue(I("x",r,e,t),I("clipValueMin",r,e,t),I("clipValueMax",r,e,t))];case"Relu6":return[o.relu6(I("x",r,e,t))];case"Rsqrt":return[o.rsqrt(Gt(r.inputNames[0],e,t))];case"Prod":return[o.prod(I("x",r,e,t),I("axes",r,e,t))];case"LeakyRelu":return[o.leakyRelu(I("x",r,e,t),I("alpha",r,e,t))];case"Prelu":return[o.prelu(I("x",r,e,t),I("alpha",r,e,t))];case"IsNan":return[o.isNaN(Gt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function zr(r,e,t=""){if(!(typeof r=="number"||typeof e=="number")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function $N(r){return!(typeof r=="number"||r.some(e=>e<0))}function Gp(r,e,t){let o=of(r,t),n=!$N(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=of(s.shape,o)}),!$N(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function of(r,e){if(typeof r=="number")return e;if(typeof e=="number")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var nf=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=be(0),_r(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, + because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),zr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,_r(t),o.written=!0,this.tensors[e]=o}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((o,n)=>this.write(o,t[n]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,so(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:t.size/o,a=[];Ne(()=>{t=z(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Ur(t,s.shape,"TensorList shape mismatch: "),So(s)}),this.idTensor=be(0),this.maxNumElements=n,So(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Ra([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Ur(e,this.elementShape,"TensorList shape mismatch: ");let n=Xp(this.elementShape,this.tensors,e);return Ne(()=>{let s=this.tensors.map(a=>z(a,n));return Ir(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let o=Xp(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Ur(n.shape,e,"TensorList shape mismatch: "),z(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Ur(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");So(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new Ra([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);Ur(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=Xp(this.elementShape,this.tensors,t);return z(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);Ur(this.elementShape,t.shape,"TensorList shape mismatch: "),So(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Ur(this.elementShape,o,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=Xp(this.elementShape,this.tensors,o);return e.length===0?nr([],[0].concat(n)):Ne(()=>{let s=e.map(a=>z(this.tensors[a],n));return Ir(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Ur(this.elementShape,t,"TensorList shape mismatch: ");let o=Xp(this.elementShape,this.tensors,t);return this.size()===0?nr([],[0].concat(o)):Ne(()=>{let n=this.tensors.map(s=>z(s,o));return gt(n,0)})}};function oN(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Ur(n,e,"TensorList shape mismatch: ");let s=ko(r);return new Ra(s,e,o)}function nN(r,e,t,o){return new Ra([],r,e,o)}function sN(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new Ra([],t,r.dtype,o),a=ko(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function aN(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${o}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:t.size/o,a=[];Ee(()=>{t=z(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);zr(t,s.shape,"TensorList shape mismatch: "),_r(s)}),this.idTensor=be(0),this.maxNumElements=n,_r(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Pa([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);zr(e,this.elementShape,"TensorList shape mismatch: ");let n=Gp(this.elementShape,this.tensors,e);return Ee(()=>{let s=this.tensors.map(a=>z(a,n));return Sr(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let o=Gp(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,zr(n.shape,e,"TensorList shape mismatch: "),z(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(zr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");_r(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new Pa([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);zr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=Gp(this.elementShape,this.tensors,t);return z(this.tensors[e],n)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);zr(this.elementShape,t.shape,"TensorList shape mismatch: "),_r(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);zr(this.elementShape,o,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=Gp(this.elementShape,this.tensors,o);return e.length===0?nr([],[0].concat(n)):Ee(()=>{let s=e.map(a=>z(this.tensors[a],n));return Sr(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);zr(this.elementShape,t,"TensorList shape mismatch: ");let o=Gp(this.elementShape,this.tensors,t);return this.size()===0?nr([],[0].concat(o)):Ee(()=>{let n=this.tensors.map(s=>z(s,o));return gt(n,0)})}};function AN(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);zr(n,e,"TensorList shape mismatch: ");let s=so(r);return new Pa(s,e,o)}function RN(r,e,t,o){return new Pa([],r,e,o)}function FN(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new Pa([],t,r.dtype,o),a=so(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function DN(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=dd(s,t),i=o===0?0:r.size/o,p=Ne(()=>{let c=[];r=z(r,[1,o,i]);for(let l=0;l{switch(r.op){case"If":case"StatelessIf":{let o=S("thenBranch",r,e,t),n=S("elseBranch",r,e,t),s=S("cond",r,e,t),a=S("args",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case"While":case"StatelessWhile":{let o=S("body",r,e,t),n=S("cond",r,e,t),s=S("args",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(f=>f.id);c.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&l.indexOf(f.id)===-1&&f.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&l.indexOf(f.id)===-1&&f.dispose()})}return u}case"LoopCond":{let o=S("pred",r,e,t);return[ss(o)]}case"Switch":{let o=S("pred",r,e,t),n=S("data",r,e,t);return n.kept||(n=ss(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Ht(n,e,t)!==void 0);if(o){let n=Ht(o,e,t);return[ss(n)]}return}case"Enter":{let o=S("frameName",r,e,t),n=S("tensor",r,e,t);return t.enterFrame(o),[ss(n)]}case"Exit":{let o=S("tensor",r,e,t);return t.exitFrame(),[ss(o)]}case"NextIteration":{let o=S("tensor",r,e,t);return t.nextIteration(),[ss(o)]}case"TensorArrayV3":{let o=S("size",r,e,t),n=S("dtype",r,e,t),s=S("elementShape",r,e,t),a=S("dynamicSize",r,e,t),i=S("clearAfterRead",r,e,t),p=S("identicalElementShapes",r,e,t),u=S("name",r,e,t),c=new hd(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,be(1)]}case"TensorArrayWriteV3":{let o=S("tensorArrayId",r,e,t),n=S("index",r,e,t),s=S("tensor",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=S("tensorArrayId",r,e,t),n=S("index",r,e,t);return[t.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=S("tensorArrayId",r,e,t),n=S("indices",r,e,t),s=S("dtype",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=S("tensorArrayId",r,e,t),n=S("indices",r,e,t),s=S("tensor",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=S("tensorArrayId",r,e,t),n=t.getTensorArray(o.id),s=S("dtype",r,e,t);return[n.concat(s)]}case"TensorArraySplitV3":{let o=S("tensorArrayId",r,e,t),n=S("tensor",r,e,t),s=S("lengths",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=S("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return[be(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=S("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=S("tensorListId",r,e,t),n=S("index",r,e,t),s=S("tensor",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=S("tensorListId",r,e,t),n=S("index",r,e,t),s=S("elementShape",r,e,t),a=S("elementDType",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=S("indices",r,e,t),n=S("tensor",r,e,t),s=S("elementShape",r,e,t),a=S("numElements",r,e,t),i=sN(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=S("elementShape",r,e,t),n=S("elementDType",r,e,t),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=S(s,r,e,t),i=r.op==="TensorListReserve"?-1:a,p=nN(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=S("tensorListId",r,e,t),n=S("indices",r,e,t),s=S("elementShape",r,e,t),a=S("elementDType",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=S("tensorListId",r,e,t),n=S("elementShape",r,e,t),s=S("elementDType",r,e,t),a=S("numElements",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=S("tensor",r,e,t),n=S("elementShape",r,e,t),s=S("elementDType",r,e,t),a=oN(o,n,s);return t.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=S("tensorListId",r,e,t),n=t.getTensorList(o.id),s=S("dtype",r,e,t),a=S("elementShape",r,e,t);return[n.concat(s,a)]}case"TensorListPushBack":{let o=S("tensorListId",r,e,t),n=S("tensor",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=S("tensorListId",r,e,t),n=S("elementShape",r,e,t),s=S("elementDType",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=S("tensor",r,e,t),n=S("elementShape",r,e,t),s=S("lengths",r,e,t),a=aN(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=S("tensorListId",r,e,t),n=t.getTensorList(o.id);return[be(n.size(),"int32")]}case"TensorListResize":{let o=S("tensorListId",r,e,t),n=S("size",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function uN(r,e,t){let[o,n]=S("fusedOps",r,e,t),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=S("numArgs",r,e,t);if(s){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(p)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=S("strides",r,e,t),l=gl(r,e,t),m=S("dataFormat",r,e,t).toUpperCase(),f=S("dilations",r,e,t),[d,h]=S("args",r,e,t);a&&(h=d,d=void 0);let g=S("leakyreluAlpha",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:f,biasArg:d,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var pN=(r,e,t,o=rt)=>{switch(r.op){case"Conv1D":{let n=S("stride",r,e,t),s=S("pad",r,e,t),a=S("dataFormat",r,e,t).toUpperCase(),i=S("dilation",r,e,t);return[o.conv1d(S("x",r,e,t),S("filter",r,e,t),n,s,a,i)]}case"Conv2D":{let n=S("strides",r,e,t),s=gl(r,e,t),a=S("dataFormat",r,e,t).toUpperCase(),i=S("dilations",r,e,t);return[o.conv2d(S("x",r,e,t),S("filter",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=uN(r,e,t);return[o.fused.conv2d({x:S("x",r,e,t),filter:S("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"FusedDepthwiseConv2dNative":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=uN(r,e,t);return[o.fused.depthwiseConv2d({x:S("x",r,e,t),filter:S("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let n=S("outputShape",r,e,t),s=S("strides",r,e,t),a=gl(r,e,t);return[o.conv2dTranspose(S("x",r,e,t),S("filter",r,e,t),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=S("strides",r,e,t),s=gl(r,e,t),a=S("dilations",r,e,t),i=S("dataFormat",r,e,t).toUpperCase();return[o.depthwiseConv2d(S("input",r,e,t),S("filter",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("dataFormat",r,e,t).toUpperCase(),i=S("dilations",r,e,t);return[o.conv3d(S("x",r,e,t),S("filter",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("kernelSize",r,e,t);return[o.avgPool(S("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("kernelSize",r,e,t);return[o.maxPool(S("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("kernelSize",r,e,t),i=S("includeBatchInIndex",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(S("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("kernelSize",r,e,t);return[o.avgPool3d(S("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("kernelSize",r,e,t);return[o.maxPool3d(S("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=S("strides",r,e,t),s=S("pad",r,e,t),a=S("dilations",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(S("x",r,e,t),S("filter",r,e,t),[i,p],s,[u,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var cN=(r,e,t,o=rt)=>{switch(r.op){case"Fill":{let n=S("shape",r,e,t),s=S("dtype",r,e,t),a=S("value",r,e,t);return[o.fill(n,a,s)]}case"LinSpace":{let n=S("start",r,e,t),s=S("stop",r,e,t),a=S("num",r,e,t);return[o.linspace(n,s,a)]}case"Multinomial":{let n=S("logits",r,e,t),s=S("numSamples",r,e,t),a=S("seed",r,e,t);return[o.multinomial(n,s,a)]}case"OneHot":{let n=S("indices",r,e,t),s=S("depth",r,e,t),a=S("onValue",r,e,t),i=S("offValue",r,e,t),p=S("dtype",r,e,t);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(S("shape",r,e,t),S("dtype",r,e,t))];case"OnesLike":return[o.onesLike(S("x",r,e,t))];case"RandomStandardNormal":return[o.randomStandardNormal(S("shape",r,e,t),S("dtype",r,e,t),S("seed",r,e,t))];case"RandomUniform":return[o.randomUniform(S("shape",r,e,t),S("minval",r,e,t),S("maxval",r,e,t),S("dtype",r,e,t))];case"Range":{let n=S("start",r,e,t),s=S("stop",r,e,t),a=S("step",r,e,t);return[o.range(n,s,a,S("dtype",r,e,t))]}case"TruncatedNormal":{let n=S("shape",r,e,t),s=S("mean",r,e,t),a=S("stdDev",r,e,t),i=S("seed",r,e,t);return[o.truncatedNormal(n,s,a,S("dtype",r,e,t),i)]}case"Zeros":return[o.zeros(S("shape",r,e,t),S("dtype",r,e,t))];case"ZerosLike":return[o.zerosLike(S("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function YC(r,e,t){let o=S("boxes",r,e,t),n=S("scores",r,e,t),s=S("maxOutputSize",r,e,t),a=S("iouThreshold",r,e,t),i=S("scoreThreshold",r,e,t),p=S("softNmsSigma",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var lN=async(r,e,t,o,n=rt)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=YC(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=YC(r,e,t),c=S("padToMaxOutputSize",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=YC(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(S("condition",r,e,t),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(S("x",r,e,t),S("y",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var mN=(r,e,t,o=rt)=>{switch(r.op){case"LowerBound":{let n=S("sortedSequence",r,e,t),s=S("values",r,e,t);return[o.lowerBound(n,s)]}case"TopKV2":{let n=S("x",r,e,t),s=S("k",r,e,t),a=S("sorted",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=S("sortedSequence",r,e,t),s=S("values",r,e,t);return[o.upperBound(n,s)]}case"Unique":{let n=S("x",r,e,t),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=S("x",r,e,t),s=S("axis",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var fN=(r,e,t,o=rt)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=S("default",r,e,t);return[Ht(r.name,e,t)||n];case"Placeholder":return[Ht(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=S("x",r,e,t);return[ss(c)]}case"IdentityN":return S("x",r,e,t).map(c=>ss(c));case"Snapshot":let s=S("x",r,e,t);return[ss(s)];case"Shape":return[o.tensor1d(S("x",r,e,t).shape,"int32")];case"ShapeN":return S("x",r,e,t).map(c=>o.tensor1d(c.shape));case"Size":return[o.scalar(S("x",r,e,t).size,"int32")];case"Rank":return[o.scalar(S("x",r,e,t).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=S("x",r,e,t),i=S("data",r,e,t),p=S("message",r,e,t),u=S("summarize",r,e,t);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return be(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Ne(()=>{let n=ko(t),s=o.length,a=n.length;x.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case"HashTable":case"HashTableV2":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=S("keyDType",r,e,t),a=S("valueDType",r,e,t),i=new gd(s,a);return o.addHashTable(r.name,i),[i.handle]}}case"LookupTableImport":case"LookupTableImportV2":{let n=S("tableHandle",r,e,t,o),s=S("keys",r,e,t),a=S("values",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=S("tableHandle",r,e,t,o),s=S("keys",r,e,t),a=S("defaultValue",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=S("tableHandle",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var hN=(r,e,t,o=rt)=>{switch(r.op){case"ResizeBilinear":{let n=S("images",r,e,t),s=S("size",r,e,t),a=S("alignCorners",r,e,t),i=S("halfPixelCenters",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=S("images",r,e,t),s=S("size",r,e,t),a=S("alignCorners",r,e,t),i=S("halfPixelCenters",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=S("image",r,e,t),s=S("boxes",r,e,t),a=S("boxInd",r,e,t),i=S("cropSize",r,e,t),p=S("method",r,e,t),u=S("extrapolationValue",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=S("images",r,e,t),s=S("transforms",r,e,t),a=S("outputShape",r,e,t),i=S("fillValue",r,e,t),p=S("interpolation",r,e,t),u=S("fillMode",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var gN=(r,e,t,o=rt)=>{switch(r.op){case"Equal":return[o.equal(S("a",r,e,t),S("b",r,e,t))];case"NotEqual":return[o.notEqual(S("a",r,e,t),S("b",r,e,t))];case"Greater":return[o.greater(S("a",r,e,t),S("b",r,e,t))];case"GreaterEqual":return[o.greaterEqual(S("a",r,e,t),S("b",r,e,t))];case"Less":return[o.less(S("a",r,e,t),S("b",r,e,t))];case"LessEqual":return[o.lessEqual(S("a",r,e,t),S("b",r,e,t))];case"LogicalAnd":return[o.logicalAnd(S("a",r,e,t),S("b",r,e,t))];case"LogicalNot":return[o.logicalNot(S("a",r,e,t))];case"LogicalOr":return[o.logicalOr(S("a",r,e,t),S("b",r,e,t))];case"Select":case"SelectV2":return[o.where(S("condition",r,e,t),S("a",r,e,t),S("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var xN=(r,e,t,o=rt)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(S("a",r,e,t),S("b",r,e,t),S("transposeA",r,e,t),S("transposeB",r,e,t))];case"Einsum":return[o.einsum(S("equation",r,e,t),...S("tensors",r,e,t))];case"Transpose":return[o.transpose(S("x",r,e,t),S("perm",r,e,t))];case"_FusedMatMul":let[n,s]=S("fusedOps",r,e,t),a=n==="biasadd",i=s==="prelu",p=S("numArgs",r,e,t),u=S("leakyreluAlpha",r,e,t);if(a){if(i&&p!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&p!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,l]=S("args",r,e,t);return[o.fused.matMul({a:S("a",r,e,t),b:S("b",r,e,t),transposeA:S("transposeA",r,e,t),transposeB:S("transposeB",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var yN=(r,e,t,o=rt)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(S("x",r,e,t),S("axis",r,e,t),S("keepDims",r,e,t))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(S("x",r,e,t),S("mean",r,e,t),S("variance",r,e,t),S("offset",r,e,t),S("scale",r,e,t),S("epsilon",r,e,t))];case"FusedBatchNormV3":return[o.batchNorm(S("x",r,e,t),S("mean",r,e,t),S("variance",r,e,t),S("offset",r,e,t),S("scale",r,e,t),S("epsilon",r,e,t))];case"LRN":return[o.localResponseNormalization(S("x",r,e,t),S("radius",r,e,t),S("bias",r,e,t),S("alpha",r,e,t),S("beta",r,e,t))];case"Softmax":return[o.softmax(S("x",r,e,t))];case"LogSoftmax":return[o.logSoftmax(S("x",r,e,t))];case"SparseToDense":return[o.sparseToDense(S("sparseIndices",r,e,t),S("outputShape",r,e,t),S("sparseValues",r,e,t),S("defaultValue",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var bN=(r,e,t,o=rt)=>{switch(r.op){case"Max":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.max(S("x",r,e,t),i,p)]}case"Mean":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.mean(S("x",r,e,t),i,p)]}case"Min":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.min(S("x",r,e,t),i,p)]}case"Sum":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.sum(S("x",r,e,t),i,p)]}case"All":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.all(S("x",r,e,t),i,p)]}case"Any":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.any(S("x",r,e,t),i,p)]}case"ArgMax":{let i=S("axis",r,e,t);return[o.argMax(S("x",r,e,t),i)]}case"ArgMin":{let i=S("axis",r,e,t);return[o.argMin(S("x",r,e,t),i)]}case"Prod":{let i=S("axis",r,e,t),p=S("keepDims",r,e,t);return[o.prod(S("x",r,e,t),i,p)]}case"Cumprod":{let i=S("axis",r,e,t),p=S("exclusive",r,e,t),u=S("reverse",r,e,t);return[o.cumprod(S("x",r,e,t),i,p,u)]}case"Cumsum":{let i=S("axis",r,e,t),p=S("exclusive",r,e,t),u=S("reverse",r,e,t);return[o.cumsum(S("x",r,e,t),i,p,u)]}case"Bincount":let n=S("x",r,e,t),s=S("weights",r,e,t),a=S("size",r,e,t);return[o.bincount(n,s,a)];case"DenseBincount":{let i=S("x",r,e,t),p=S("weights",r,e,t),u=S("size",r,e,t),c=S("binaryOutput",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var CN=(r,e,t,o=rt)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=S("n",r,e,t),s=S("axis",r,e,t),a=S("tensors",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=S("x",r,e,t),s=S("indices",r,e,t);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=S("axis",r,e,t),s=S("batchDims",r,e,t),a=S("x",r,e,t),i=S("indices",r,e,t);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=S("dims",r,e,t),s=[];for(let i=0;i{let n=S("axis",r,e,t),s=S("tensors",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=x.arraysEqual(u.shape,a);if(!c&&!x.arraysEqual(o.squeeze(u).shape,i))throw new Error("the input tensors shape does not match");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case"Unpack":{let n=S("axis",r,e,t),s=S("tensor",r,e,t);return o.unstack(s,n)}case"Tile":{let n=S("reps",r,e,t);return[o.tile(S("x",r,e,t),n)]}case"Split":case"SplitV":{let n=S("axis",r,e,t),s=S("numOrSizeSplits",r,e,t),a=S("x",r,e,t);return o.split(a,s,n)}case"ScatterNd":{let n=S("indices",r,e,t),s=S("values",r,e,t),a=S("shape",r,e,t);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=S("x",r,e,t),s=S("indices",r,e,t);return[o.gatherND(n,s)]}case"SparseToDense":{let n=S("sparseIndices",r,e,t),s=S("outputShape",r,e,t),a=S("sparseValues",r,e,t),i=S("defaultValue",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var IN=(r,e,t,o=rt)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(S("indices",r,e,t),S("values",r,e,t),S("denseShape",r,e,t),S("defaultValue",r,e,t));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(S("inputIndices",r,e,t),S("inputShape",r,e,t),S("newShape",r,e,t));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(S("data",r,e,t),S("indices",r,e,t),S("segmentIds",r,e,t))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(S("data",r,e,t),S("indices",r,e,t),S("segmentIds",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var wN=(r,e,t,o=rt)=>{switch(r.op){case"FFT":return[o.fft(S("x",r,e,t))];case"IFFT":return[o.ifft(S("x",r,e,t))];case"RFFT":return[o.rfft(S("x",r,e,t))];case"IRFFT":return[o.irfft(S("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var SN=(r,e,t,o=rt)=>{switch(r.op){case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(S("data",r,e,t),S("dataSplits",r,e,t),S("separator",r,e,t),S("nGramWidths",r,e,t),S("leftPad",r,e,t),S("rightPad",r,e,t),S("padWidth",r,e,t),S("preserveShortSequences",r,e,t));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(S("input",r,e,t),S("delimiter",r,e,t),S("skipEmpty",r,e,t));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(S("input",r,e,t),S("numBuckets",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var vN=(r,e,t,o=rt)=>{switch(r.op){case"Cast":return[o.cast(S("x",r,e,t),S("dtype",r,e,t))];case"ExpandDims":{let n=S("axis",r,e,t);return[o.expandDims(S("x",r,e,t),n)]}case"Squeeze":{let n=S("axis",r,e,t);return[o.squeeze(S("x",r,e,t),n)]}case"Reshape":return[o.reshape(S("x",r,e,t),S("shape",r,e,t))];case"MirrorPad":return[o.mirrorPad(S("x",r,e,t),S("padding",r,e,t),S("mode",r,e,t))];case"PadV2":case"Pad":return[o.pad(S("x",r,e,t),S("padding",r,e,t),S("constantValue",r,e,t))];case"SpaceToBatchND":{let n=S("blockShape",r,e,t),s=S("paddings",r,e,t);return[o.spaceToBatchND(S("x",r,e,t),n,s)]}case"BatchToSpaceND":{let n=S("blockShape",r,e,t),s=S("crops",r,e,t);return[o.batchToSpaceND(S("x",r,e,t),n,s)]}case"DepthToSpace":{let n=S("blockSize",r,e,t),s=S("dataFormat",r,e,t).toUpperCase();return[o.depthToSpace(S("x",r,e,t),n,s)]}case"BroadcastTo":return[o.broadcastTo(S("x",r,e,t),S("shape",r,e,t))];case"BroadcastArgs":return[o.broadcastArgs(S("s0",r,e,t),S("s1",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function QC(r,e,t,o,n=Ne){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>eN(a,i,p));case"basic_math":return n(()=>tN(a,i,p));case"control":return iN(a,i,p);case"convolution":return n(()=>pN(a,i,p));case"creation":return n(()=>cN(a,i,p));case"dynamic":return lN(a,i,p);case"evaluation":return n(()=>mN(a,i,p));case"image":return n(()=>hN(a,i,p));case"graph":return n(()=>fN(a,i,p));case"logical":return n(()=>gN(a,i,p));case"matrices":return n(()=>xN(a,i,p));case"normalization":return n(()=>yN(a,i,p));case"reduction":return n(()=>bN(a,i,p));case"slice_join":return n(()=>CN(a,i,p));case"sparse":return n(()=>IN(a,i,p));case"spectral":return n(()=>wN(a,i,p));case"string":return n(()=>SN(a,i,p));case"transformation":return n(()=>vN(a,i,p));case"hash_table":return dN(a,i,p,o);case"custom":let u=td(a.op);if(u&&u.customExecutor)return u.customExecutor(new fd(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return x.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var yl=class{constructor(e={},t={},o={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function ZC(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=Object.keys(r).map(m=>Sr(m)[0]),c=[];o!=null&&(c=o.map(m=>Sr(m.name)[0]));let l=[...e];for(;l.length>0;){let m=l.pop();if((JC(m)||B6(m)||V6(m))&&a==null&&(a=m,i=a.children.map(f=>f.name).filter(f=>n.has(f))),n.add(m.name),t[m.name]==null&&u.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(f=>{p.has(f.name)||(p.add(f.name),l.push(f))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function kN(r,e,t){let{usedNodes:o,inputs:n}=t,s=[],a=Object.keys(n).map(c=>Sr(c)[0]).map(c=>r.nodes[c]),i=r.initNodes;a.forEach(c=>{o.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{o.has(c.name)&&s.push(c)}),i!=null&&i.forEach(c=>{o.has(c.name)&&s.push(c)});let p=new Set,u=[];for(;s.length>0;){let c=s.pop();p.add(c.name),e[c.name]||u.push(c),c.children.forEach(l=>{!p.has(l.name)&&o.has(l.name)&&l.inputs.every(m=>p.has(m.name))&&s.push(l)})}return u}var O6=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],M6=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],L6=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function JC(r){return O6.indexOf(r.op)>=0}function B6(r){return M6.indexOf(r.op)>=0}function V6(r){return L6.indexOf(r.op)>=0}var Cu=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(o=>{this._functionExecutorMap[o]=new Cu(e.functions[o],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(o=>e[o].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPERATOR)+"--"+n.join(this.SEPERATOR)}compile(e,t){let o=ZC(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let i=t.map(u=>u.name),p=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${p}]. Missing the following inputs: [${n}]`)}return kN(this.graph,this.weightMap,o)}execute(e,t){e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(l=>this.graph.nodes[Sr(l)[0]]),s=t.map(l=>Sr(l)[0]),a=s.map(l=>this.graph.nodes[l]);this.resetIntermediateTensors(),a.length===0&&(a=this._outputs);let i=this.getCompilationKey(n,a),p=this.compiledMap.get(i);p==null&&(p=this.compile(e,a),this.compiledMap.set(i,p));let u={},c={};return Ne(()=>{let l=new yl(this.weightMap,u,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);Object.keys(e).forEach(h=>{let[g,y]=Sr(h),b=[];b[y]=e[h],m[g]=b});let f=this.getFrozenTensorIds(m),d={};for(let h=0;hHt(h,m,l))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){t.category==="control"||a.indexOf(e)!==-1||(o[e].forEach(p=>{p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length)}),t.inputs.forEach(p=>{if(p.category!=="control"){let u=YT(p.name,o,n);u!=null&&u.forEach(c=>{if(c&&!c.kept&&!s.has(c.id)){let l=i[c.id];if(l===1){if(!this.keepTensorForDebug)c.dispose();else{let[m,f]=zo(t.name,n);this.intermediateTensors[m]?this.intermediateTensors[m][f]=c:(this.intermediateTensors[m]=[],this.intermediateTensors[m][f]=c)}delete i[c.id]}else l!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(o=>{o&&!o.kept&&!o.isDisposed&&!this.keepIds.has(o.id)&&o.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,o=!1,n={},s={}){o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=P().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(c){console.warn(c.message)}this.resetIntermediateTensors();let a=new yl(this.weightMap,n,s,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,a,t,o);let i=t.map(c=>Ht(c,this.tensorsMap,a)),p=i.map(c=>c.id),u=Object.keys(e).map(c=>e[c].id);return this.keepIds=new Set([...p,...u,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&a.dispose(this.keepIds),i}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(C=>this.graph.nodes[Sr(C)[0]]),i=o.map(C=>Sr(C)[0]),p=i.map(C=>this.graph.nodes[C]);p.length===0&&(p=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:l,syncInputs:m}=ZC(e,p,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(C=>({node:C,contexts:t.currentContext})),d=Object.assign({},this.weightMap);Object.keys(e).forEach(C=>{let[w,k]=Sr(C),_=[];_[k]=e[C],d[w]=_});let h={},g=this.getFrozenTensorIds(d),y={};for(;f.length>0;){let C=this.processStack(a,f,t,d,y,g,i,h,u);await Promise.all(C)}l==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let b=p.filter(C=>!JC(C)&&!Ht(C.name,d,t)).map(C=>C.name);if(b.length>0){let C="";throw l!=null&&(C=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${C}`)}return d}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m="";if(l.node.op==="Enter"&&S("isConstant",l.node,n,o)&&([m]=zo(l.node.name,o)),n[l.node.name]==null){let f=QC(l.node,n,o,this._resourceManager);m||([m]=zo(l.node.name,o));let d=o.currentContext;x.isPromise(f)?c.push(f.then(h=>(n[m]=h,o.currentContext=d,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=zo(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Ht(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Ht(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let o=e[t],[n]=Sr(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);x.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&x.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){let t={};for(let o in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[o]!=null){let n=this._signature.inputs[o];t[n.name]=e[o]}else t[o]=e[o];return t}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Sr(o);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[o]=Sr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var xd=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}};var z6="?tfjs-format=file",W6="model.json",bl=class{constructor(e,t={},o=va){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new xd}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return x.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Cu(xl.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=xl.Instance.transformGraph(e.modelInitializer);this.initializer=new Cu(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){let o=this.execute(e,this.outputNodes);if(this.structuredOutputKeys){let n=o instanceof ut?[o]:o,s={};return n.forEach((a,i)=>s[this.structuredOutputKeys[i]]=a),s}return o}normalizeInputs(e){if(!(e instanceof ut)&&!Array.isArray(e)){if(this.signature!=null&&this.signature.inputs!=null)for(let n in this.signature.inputs){let s=this.signature.inputs[n];s.resourceId!=null&&(e[n]=this.resourceIdToCapturedInput[s.resourceId])}return e}e=Array.isArray(e)?e:[e];let t=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+t!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-t} non-resource placeholders, while there are ${e.length} input tensors provided.`);let o=0;return this.inputNodes.reduce((n,s)=>{let a=this.signature?this.signature.inputs[s]:null;return a!=null&&a.resourceId!=null?n[s]=this.resourceIdToCapturedInput[a.resourceId]:n[s]=e[o++],n},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=Object.keys(this.initializerSignature.outputs);for(let o=0;o1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ft(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function U6(r,e={},t=va){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");e==null&&(e={}),e.fromTFHub&&typeof r=="string"&&(r=H6(r));let o=new bl(r,e,t);return await o.load(),o}function G6(r){if(r==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error("modelJSON must be the first element of the array");if(!n||!(n instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in o))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in o))throw new Error("Model JSON is missing 'weightsManifest'");let s=va.getWeightSpecs(o.weightsManifest),a=va.getModelArtifactsForJSONSync(o,s,n);e=va.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=va.fromMemorySync(r);else throw new Error("Unknown model format");let t=new bl(e);return t.load(),t}function H6(r){return r.endsWith("/")||(r=r+"/"),`${r}${W6}${z6}`}var q6="4.0.0";function K(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var K6=Bt.whereImpl,Si=class extends Jr{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new rn(this,cr())}nextDataId(){return Si.nextDataId++}write(e,t,o){this.firstUse&&(this.firstUse=!1,P().get("IS_NODE")&&I.warn(` + ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=of(s,t),i=o===0?0:r.size/o,p=Ee(()=>{let c=[];r=z(r,[1,o,i]);for(let l=0;l{switch(r.op){case"If":case"StatelessIf":{let o=I("thenBranch",r,e,t),n=I("elseBranch",r,e,t),s=I("cond",r,e,t),a=I("args",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case"While":case"StatelessWhile":{let o=I("body",r,e,t),n=I("cond",r,e,t),s=I("args",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(d=>d.id);c.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()})}return u}case"LoopCond":{let o=I("pred",r,e,t);return[as(o)]}case"Switch":{let o=I("pred",r,e,t),n=I("data",r,e,t);return n.kept||(n=as(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Gt(n,e,t)!==void 0);if(o){let n=Gt(o,e,t);return[as(n)]}return}case"Enter":{let o=I("frameName",r,e,t),n=I("tensor",r,e,t);return t.enterFrame(o),[as(n)]}case"Exit":{let o=I("tensor",r,e,t);return t.exitFrame(),[as(o)]}case"NextIteration":{let o=I("tensor",r,e,t);return t.nextIteration(),[as(o)]}case"TensorArrayV3":{let o=I("size",r,e,t),n=I("dtype",r,e,t),s=I("elementShape",r,e,t),a=I("dynamicSize",r,e,t),i=I("clearAfterRead",r,e,t),p=I("identicalElementShapes",r,e,t),u=I("name",r,e,t),c=new nf(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,be(1)]}case"TensorArrayWriteV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t);return[t.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("dtype",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id),s=I("dtype",r,e,t);return[n.concat(s)]}case"TensorArraySplitV3":{let o=I("tensorArrayId",r,e,t),n=I("tensor",r,e,t),s=I("lengths",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return[be(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=I("indices",r,e,t),n=I("tensor",r,e,t),s=I("elementShape",r,e,t),a=I("numElements",r,e,t),i=FN(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=I("elementShape",r,e,t),n=I("elementDType",r,e,t),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=I(s,r,e,t),i=r.op==="TensorListReserve"?-1:a,p=RN(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=I("tensorListId",r,e,t),n=I("indices",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=I("numElements",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=AN(o,n,s);return t.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id),s=I("dtype",r,e,t),a=I("elementShape",r,e,t);return[n.concat(s,a)]}case"TensorListPushBack":{let o=I("tensorListId",r,e,t),n=I("tensor",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("lengths",r,e,t),a=DN(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id);return[be(n.size(),"int32")]}case"TensorListResize":{let o=I("tensorListId",r,e,t),n=I("size",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PN(r,e,t){let[o,n]=I("fusedOps",r,e,t),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=I("numArgs",r,e,t);if(s){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(p)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=I("strides",r,e,t),l=ul(r,e,t),m=I("dataFormat",r,e,t).toUpperCase(),d=I("dilations",r,e,t),[f,h]=I("args",r,e,t);a&&(h=f,f=void 0);let g=I("leakyreluAlpha",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var MN=(r,e,t,o=Ye)=>{switch(r.op){case"Conv1D":{let n=I("stride",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilation",r,e,t);return[o.conv1d(I("x",r,e,t),I("filter",r,e,t),n,s,a,i)]}case"Conv2D":{let n=I("strides",r,e,t),s=ul(r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv2d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PN(r,e,t);return[o.fused.conv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"FusedDepthwiseConv2dNative":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PN(r,e,t);return[o.fused.depthwiseConv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let n=I("outputShape",r,e,t),s=I("strides",r,e,t),a=ul(r,e,t);return[o.conv2dTranspose(I("x",r,e,t),I("filter",r,e,t),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=I("strides",r,e,t),s=ul(r,e,t),a=I("dilations",r,e,t),i=I("dataFormat",r,e,t).toUpperCase();return[o.depthwiseConv2d(I("input",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv3d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t),i=I("includeBatchInIndex",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dilations",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I("x",r,e,t),I("filter",r,e,t),[i,p],s,[u,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LN=(r,e,t,o=Ye)=>{switch(r.op){case"Fill":{let n=I("shape",r,e,t),s=I("dtype",r,e,t),a=I("value",r,e,t);return[o.fill(n,a,s)]}case"LinSpace":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("num",r,e,t);return[o.linspace(n,s,a)]}case"Multinomial":{let n=I("logits",r,e,t),s=I("numSamples",r,e,t),a=I("seed",r,e,t);return[o.multinomial(n,s,a)]}case"OneHot":{let n=I("indices",r,e,t),s=I("depth",r,e,t),a=I("onValue",r,e,t),i=I("offValue",r,e,t),p=I("dtype",r,e,t);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(I("shape",r,e,t),I("dtype",r,e,t))];case"OnesLike":return[o.onesLike(I("x",r,e,t))];case"RandomStandardNormal":return[o.randomStandardNormal(I("shape",r,e,t),I("dtype",r,e,t),I("seed",r,e,t))];case"RandomUniform":return[o.randomUniform(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("dtype",r,e,t))];case"Range":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("step",r,e,t);return[o.range(n,s,a,I("dtype",r,e,t))]}case"TruncatedNormal":{let n=I("shape",r,e,t),s=I("mean",r,e,t),a=I("stdDev",r,e,t),i=I("seed",r,e,t);return[o.truncatedNormal(n,s,a,I("dtype",r,e,t),i)]}case"Zeros":return[o.zeros(I("shape",r,e,t),I("dtype",r,e,t))];case"ZerosLike":return[o.zerosLike(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function HC(r,e,t){let o=I("boxes",r,e,t),n=I("scores",r,e,t),s=I("maxOutputSize",r,e,t),a=I("iouThreshold",r,e,t),i=I("scoreThreshold",r,e,t),p=I("softNmsSigma",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var BN=async(r,e,t,o,n=Ye)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=HC(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=HC(r,e,t),c=I("padToMaxOutputSize",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=HC(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(I("condition",r,e,t),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(I("x",r,e,t),I("y",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VN=(r,e,t,o=Ye)=>{switch(r.op){case"LowerBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.lowerBound(n,s)]}case"TopKV2":{let n=I("x",r,e,t),s=I("k",r,e,t),a=I("sorted",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.upperBound(n,s)]}case"Unique":{let n=I("x",r,e,t),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=I("x",r,e,t),s=I("axis",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zN=(r,e,t,o=Ye)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=I("default",r,e,t);return[Gt(r.name,e,t)||n];case"Placeholder":return[Gt(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,e,t);return[as(c)]}case"IdentityN":return I("x",r,e,t).map(c=>as(c));case"Snapshot":let s=I("x",r,e,t);return[as(s)];case"Shape":return[o.tensor1d(I("x",r,e,t).shape,"int32")];case"ShapeN":return I("x",r,e,t).map(c=>o.tensor1d(c.shape));case"Size":return[o.scalar(I("x",r,e,t).size,"int32")];case"Rank":return[o.scalar(I("x",r,e,t).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=I("x",r,e,t),i=I("data",r,e,t),p=I("message",r,e,t),u=I("summarize",r,e,t);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return be(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Ee(()=>{let n=so(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case"HashTable":case"HashTableV2":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I("keyDType",r,e,t),a=I("valueDType",r,e,t),i=new sf(s,a);return o.addHashTable(r.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("values",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("defaultValue",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=I("tableHandle",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UN=(r,e,t,o=Ye)=>{switch(r.op){case"ResizeBilinear":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=I("image",r,e,t),s=I("boxes",r,e,t),a=I("boxInd",r,e,t),i=I("cropSize",r,e,t),p=I("method",r,e,t),u=I("extrapolationValue",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=I("images",r,e,t),s=I("transforms",r,e,t),a=I("outputShape",r,e,t),i=I("fillValue",r,e,t),p=I("interpolation",r,e,t),u=I("fillMode",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GN=(r,e,t,o=Ye)=>{switch(r.op){case"Equal":return[o.equal(I("a",r,e,t),I("b",r,e,t))];case"NotEqual":return[o.notEqual(I("a",r,e,t),I("b",r,e,t))];case"Greater":return[o.greater(I("a",r,e,t),I("b",r,e,t))];case"GreaterEqual":return[o.greaterEqual(I("a",r,e,t),I("b",r,e,t))];case"Less":return[o.less(I("a",r,e,t),I("b",r,e,t))];case"LessEqual":return[o.lessEqual(I("a",r,e,t),I("b",r,e,t))];case"LogicalAnd":return[o.logicalAnd(I("a",r,e,t),I("b",r,e,t))];case"LogicalNot":return[o.logicalNot(I("a",r,e,t))];case"LogicalOr":return[o.logicalOr(I("a",r,e,t),I("b",r,e,t))];case"Select":case"SelectV2":return[o.where(I("condition",r,e,t),I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HN=(r,e,t,o=Ye)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(I("a",r,e,t),I("b",r,e,t),I("transposeA",r,e,t),I("transposeB",r,e,t))];case"Einsum":return[o.einsum(I("equation",r,e,t),...I("tensors",r,e,t))];case"Transpose":return[o.transpose(I("x",r,e,t),I("perm",r,e,t))];case"_FusedMatMul":let[n,s]=I("fusedOps",r,e,t),a=n==="biasadd",i=s==="prelu",p=I("numArgs",r,e,t),u=I("leakyreluAlpha",r,e,t);if(a){if(i&&p!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&p!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,l]=I("args",r,e,t);return[o.fused.matMul({a:I("a",r,e,t),b:I("b",r,e,t),transposeA:I("transposeA",r,e,t),transposeB:I("transposeB",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var qN=(r,e,t,o=Ye)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(I("x",r,e,t),I("axis",r,e,t),I("keepDims",r,e,t))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"FusedBatchNormV3":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"LRN":return[o.localResponseNormalization(I("x",r,e,t),I("radius",r,e,t),I("bias",r,e,t),I("alpha",r,e,t),I("beta",r,e,t))];case"Softmax":return[o.softmax(I("x",r,e,t))];case"LogSoftmax":return[o.logSoftmax(I("x",r,e,t))];case"SparseToDense":return[o.sparseToDense(I("sparseIndices",r,e,t),I("outputShape",r,e,t),I("sparseValues",r,e,t),I("defaultValue",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KN=(r,e,t,o=Ye)=>{switch(r.op){case"RaggedGather":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I("paramsNestedSplits",r,e,t),I("paramsDenseValues",r,e,t),I("indices",r,e,t),I("outputRaggedRank",r,e,t));return n.concat(s)}case"RaggedRange":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I("starts",r,e,t),I("limits",r,e,t),I("splits",r,e,t));return[n,s]}case"RaggedTensorToTensor":return[o.raggedTensorToTensor(I("shape",r,e,t),I("values",r,e,t),I("defaultValue",r,e,t),I("rowPartitionTensors",r,e,t),I("rowPartitionTypes",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var jN=(r,e,t,o=Ye)=>{switch(r.op){case"Max":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.max(I("x",r,e,t),i,p)]}case"Mean":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.mean(I("x",r,e,t),i,p)]}case"Min":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.min(I("x",r,e,t),i,p)]}case"Sum":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.sum(I("x",r,e,t),i,p)]}case"All":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.all(I("x",r,e,t),i,p)]}case"Any":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.any(I("x",r,e,t),i,p)]}case"ArgMax":{let i=I("axis",r,e,t);return[o.argMax(I("x",r,e,t),i)]}case"ArgMin":{let i=I("axis",r,e,t);return[o.argMin(I("x",r,e,t),i)]}case"Prod":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.prod(I("x",r,e,t),i,p)]}case"Cumprod":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumprod(I("x",r,e,t),i,p,u)]}case"Cumsum":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumsum(I("x",r,e,t),i,p,u)]}case"Bincount":let n=I("x",r,e,t),s=I("weights",r,e,t),a=I("size",r,e,t);return[o.bincount(n,s,a)];case"DenseBincount":{let i=I("x",r,e,t),p=I("weights",r,e,t),u=I("size",r,e,t),c=I("binaryOutput",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XN=(r,e,t,o=Ye)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=I("n",r,e,t),s=I("axis",r,e,t),a=I("tensors",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=I("axis",r,e,t),s=I("batchDims",r,e,t),a=I("x",r,e,t),i=I("indices",r,e,t);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=I("dims",r,e,t),s=[];for(let i=0;i{let n=I("axis",r,e,t),s=I("tensors",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=y.arraysEqual(u.shape,a);if(!c&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error("the input tensors shape does not match");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case"Unpack":{let n=I("axis",r,e,t),s=I("tensor",r,e,t);return o.unstack(s,n)}case"Tile":{let n=I("reps",r,e,t);return[o.tile(I("x",r,e,t),n)]}case"Split":case"SplitV":{let n=I("axis",r,e,t),s=I("numOrSizeSplits",r,e,t),a=I("x",r,e,t);return o.split(a,s,n)}case"ScatterNd":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("shape",r,e,t);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gatherND(n,s)]}case"SparseToDense":{let n=I("sparseIndices",r,e,t),s=I("outputShape",r,e,t),a=I("sparseValues",r,e,t),i=I("defaultValue",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var YN=(r,e,t,o=Ye)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I("indices",r,e,t),I("values",r,e,t),I("denseShape",r,e,t),I("defaultValue",r,e,t));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I("inputIndices",r,e,t),I("inputShape",r,e,t),I("newShape",r,e,t));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var QN=(r,e,t,o=Ye)=>{switch(r.op){case"FFT":return[o.fft(I("x",r,e,t))];case"IFFT":return[o.ifft(I("x",r,e,t))];case"RFFT":return[o.rfft(I("x",r,e,t))];case"IRFFT":return[o.irfft(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ZN=(r,e,t,o=Ye)=>{switch(r.op){case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I("data",r,e,t),I("dataSplits",r,e,t),I("separator",r,e,t),I("nGramWidths",r,e,t),I("leftPad",r,e,t),I("rightPad",r,e,t),I("padWidth",r,e,t),I("preserveShortSequences",r,e,t));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I("input",r,e,t),I("delimiter",r,e,t),I("skipEmpty",r,e,t));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(I("input",r,e,t),I("numBuckets",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var JN=(r,e,t,o=Ye)=>{switch(r.op){case"Cast":return[o.cast(I("x",r,e,t),I("dtype",r,e,t))];case"ExpandDims":{let n=I("axis",r,e,t);return[o.expandDims(I("x",r,e,t),n)]}case"Squeeze":{let n=I("axis",r,e,t);return[o.squeeze(I("x",r,e,t),n)]}case"Reshape":return[o.reshape(I("x",r,e,t),I("shape",r,e,t))];case"MirrorPad":return[o.mirrorPad(I("x",r,e,t),I("padding",r,e,t),I("mode",r,e,t))];case"PadV2":case"Pad":return[o.pad(I("x",r,e,t),I("padding",r,e,t),I("constantValue",r,e,t))];case"SpaceToBatchND":{let n=I("blockShape",r,e,t),s=I("paddings",r,e,t);return[o.spaceToBatchND(I("x",r,e,t),n,s)]}case"BatchToSpaceND":{let n=I("blockShape",r,e,t),s=I("crops",r,e,t);return[o.batchToSpaceND(I("x",r,e,t),n,s)]}case"DepthToSpace":{let n=I("blockSize",r,e,t),s=I("dataFormat",r,e,t).toUpperCase();return[o.depthToSpace(I("x",r,e,t),n,s)]}case"BroadcastTo":return[o.broadcastTo(I("x",r,e,t),I("shape",r,e,t))];case"BroadcastArgs":return[o.broadcastArgs(I("s0",r,e,t),I("s1",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function qC(r,e,t,o,n=Ee){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>_N(a,i,p));case"basic_math":return n(()=>EN(a,i,p));case"control":return ON(a,i,p);case"convolution":return n(()=>MN(a,i,p));case"creation":return n(()=>LN(a,i,p));case"dynamic":return BN(a,i,p);case"evaluation":return n(()=>VN(a,i,p));case"image":return n(()=>UN(a,i,p));case"graph":return n(()=>zN(a,i,p));case"logical":return n(()=>GN(a,i,p));case"matrices":return n(()=>HN(a,i,p));case"normalization":return n(()=>qN(a,i,p));case"ragged":return n(()=>KN(a,i,p));case"reduction":return n(()=>jN(a,i,p));case"slice_join":return n(()=>XN(a,i,p));case"sparse":return n(()=>YN(a,i,p));case"spectral":return n(()=>QN(a,i,p));case"string":return n(()=>ZN(a,i,p));case"transformation":return n(()=>JN(a,i,p));case"hash_table":return WN(a,i,p,o);case"custom":let u=Gd(a.op);if(u&&u.customExecutor)return u.customExecutor(new rf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var cl=class{constructor(e={},t={},o={},n={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function KC(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=Object.keys(r).map(m=>Ir(m)[0]),c=[];o!=null&&(c=o.map(m=>Ir(m.name)[0]));let l=[...e];for(;l.length>0;){let m=l.pop();if((jC(m)||i6(m)||u6(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&u.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),l.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function eT(r,e,t){let{usedNodes:o,inputs:n}=t,s=[],a=Object.keys(n).map(c=>Ir(c)[0]).map(c=>r.nodes[c]),i=r.initNodes;a.forEach(c=>{o.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{o.has(c.name)&&s.push(c)}),i!=null&&i.forEach(c=>{o.has(c.name)&&s.push(c)});let p=new Set,u=[];for(;s.length>0;){let c=s.pop();p.add(c.name),e[c.name]||u.push(c),c.children.forEach(l=>{!p.has(l.name)&&o.has(l.name)&&l.inputs.every(m=>p.has(m.name))&&s.push(l)})}return u}var n6=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],s6=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],a6=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function jC(r){return n6.indexOf(r.op)>=0}function i6(r){return s6.indexOf(r.op)>=0}function u6(r){return a6.indexOf(r.op)>=0}var Cu=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(o=>{this._functionExecutorMap[o]=new Cu(e.functions[o],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(o=>e[o].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPERATOR)+"--"+n.join(this.SEPERATOR)}compile(e,t){let o=KC(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let i=t.map(u=>u.name),p=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${p}]. Missing the following inputs: [${n}]`)}return eT(this.graph,this.weightMap,o)}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return _r(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(l=>this.graph.nodes[Ir(l)[0]]),s=t.map(l=>Ir(l)[0]),a=s.map(l=>this.graph.nodes[l]);a.length===0&&(a=this._outputs);let i=this.getCompilationKey(n,a),p=this.compiledMap.get(i);p==null&&(p=this.compile(e,a),this.compiledMap.set(i,p));try{this.keepIntermediateTensors=O().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(l){this.keepIntermediateTensors=!1,console.warn(l.message)}let u={},c={};return Ee(()=>{let l=new cl(this.weightMap,u,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(h=>{let[g,x]=Ir(h),b=[];b[x]=e[h],m[g]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[g]=this.cloneTensorList(b))});let d=this.getFrozenTensorIds(m),f={};for(let h=0;hGt(h,m,l))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){t.category==="control"||a.indexOf(e)!==-1||(o[e].forEach(p=>{p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length)}),t.inputs.forEach(p=>{if(p.category!=="control"){let u=vN(p.name,o,n);u!=null&&u.forEach(c=>{if(c&&!c.kept&&!s.has(c.id)){let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.clonedTensorsMap||(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=O().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new cl(this.weightMap,n,s,this.functionExecutorMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Gt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(e).map(m=>e[m].id),l=new Set([...u,...c,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!l.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(l),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(C=>this.graph.nodes[Ir(C)[0]]),i=o.map(C=>Ir(C)[0]),p=i.map(C=>this.graph.nodes[C]);p.length===0&&(p=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:l,syncInputs:m}=KC(e,p,this.weightMap,this._initNodes),d=[...a,...this.graph.weights,...this._initNodes||[]].map(C=>({node:C,contexts:t.currentContext})),f=Object.assign({},this.weightMap);Object.keys(e).forEach(C=>{let[w,k]=Ir(C),_=[];_[k]=e[C],f[w]=_});let h={},g=this.getFrozenTensorIds(f),x={};for(;d.length>0;){let C=this.processStack(a,d,t,f,x,g,i,h,u);await Promise.all(C)}l==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let b=p.filter(C=>!jC(C)&&!Gt(C.name,f,t)).map(C=>C.name);if(b.length>0){let C="";throw l!=null&&(C=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${C}`)}return f}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m="";if(l.node.op==="Enter"&&I("isConstant",l.node,n,o)&&([m]=ss(l.node.name,o)),n[l.node.name]==null){let d=qC(l.node,n,o,this._resourceManager);m||([m]=ss(l.node.name,o));let f=o.currentContext;y.isPromise(d)?c.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=ss(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Gt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Gt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let o=e[t],[n]=Ir(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Ir(o);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Ir(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var af=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}};var p6="?tfjs-format=file",c6="model.json",ll=class{constructor(e,t={},o=Ea){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new af}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return y.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Cu(pl.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=pl.Instance.transformGraph(e.modelInitializer);this.initializer=new Cu(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof it?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof it)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let c=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return c!=null?s[a]=this.resourceIdToCapturedInput[c]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Dt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function l6(r,e={},t=Ea){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");e==null&&(e={}),e.fromTFHub&&typeof r=="string"&&(r=d6(r));let o=new ll(r,e,t);return await o.load(),o}function m6(r){if(r==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error("modelJSON must be the first element of the array");if(!n||!(n instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in o))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in o))throw new Error("Model JSON is missing 'weightsManifest'");let s=Ea.getWeightSpecs(o.weightsManifest),a=Ea.getModelArtifactsForJSONSync(o,s,n);e=Ea.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=Ea.fromMemorySync(r);else throw new Error("Unknown model format");let t=new ll(e);return t.load(),t}function d6(r){return r.endsWith("/")||(r=r+"/"),`${r}${c6}${p6}`}var f6="4.1.0";function K(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var h6=Lt.whereImpl,Oi=class extends Zr{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Do(this,cr())}nextDataId(){return Oi.nextDataId++}write(e,t,o){this.firstUse&&(this.firstUse=!1,O().get("IS_NODE")&&S.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. -============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t==="string"&&o!=null&&o.length>0&&x.isString(o[0])){let s=o.map(a=>x.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t==="complex64"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return I.mergeRealAndImagArrays(n,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ne(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=x.now();return e(),{kernelMs:x.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){K([e],"where");let t=this.readSync(e.dataId);return K6(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Si.nextDataId=0;var Ad={};Be(Ad,{addImpl:()=>rI,bincountImpl:()=>Zp,bincountReduceImpl:()=>yd,castImpl:()=>tI,ceilImpl:()=>oI,concatImpl:()=>Iu,equalImpl:()=>nI,expImpl:()=>aI,expm1Impl:()=>uI,floorImpl:()=>pI,gatherNdImpl:()=>bd,gatherV2Impl:()=>Cd,greaterEqualImpl:()=>lI,greaterImpl:()=>cI,lessEqualImpl:()=>fI,lessImpl:()=>mI,linSpaceImpl:()=>Id,logImpl:()=>dI,maxImpl:()=>wd,maximumImpl:()=>hI,minimumImpl:()=>gI,multiplyImpl:()=>Cl,negImpl:()=>xI,notEqualImpl:()=>yI,prodImpl:()=>bI,raggedGatherImpl:()=>Sd,raggedRangeImpl:()=>vd,raggedTensorToTensorImpl:()=>kd,rangeImpl:()=>Su,rsqrtImpl:()=>CI,scatterImpl:()=>Aa,sigmoidImpl:()=>e2,simpleAbsImpl:()=>eI,sliceImpl:()=>vu,sparseFillEmptyRowsImpl:()=>Td,sparseReshapeImpl:()=>Nd,sparseSegmentReductionImpl:()=>tc,sqrtImpl:()=>o2,squaredDifferenceImpl:()=>wI,stridedSliceImpl:()=>_d,stringNGramsImpl:()=>ku,stringSplitImpl:()=>Tu,stringToHashBucketFastImpl:()=>Nu,subImpl:()=>vI,tileImpl:()=>Ed,topKImpl:()=>$d,transposeImpl:()=>Jp,uniqueImpl:()=>Rd});function eI(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;K(e,"abs");let o=new Float32Array(x.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=eI(n),t.makeOutput(o,e.shape,e.dtype)},TN={kernelName:sn,backendName:"cpu",kernelFunc:j6};function Le(r){return(e,t,o,n,s)=>{let a=I.assertAndGetBroadcastShape(e,t),i=a.length,p=x.computeStrides(a),u=x.sizeFromShape(a),c=x.getTypedArrayFromDType(s,u),l=e.length,m=t.length,f=x.computeStrides(e),d=x.computeStrides(t),h=I.getBroadcastDims(e,a),g=I.getBroadcastDims(t,a);if(h.length+g.length===0)for(let y=0;yC[E]=0);let w=x.locToIndex(C,l,f),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=x.locToIndex(k,m,d);c[y]=r(o[w],n[_])}return[c,a]}}function qt(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}var NN={kernelName:aa,backendName:"cpu",kernelFunc:qt};function Yp(r,e,t="float32"){if(t==="complex64"){let n=Yp(r,e,"float32"),s=Yp(r,e,"float32");return qt({inputs:{real:n,imag:s},backend:r})}let o=x.makeZerosTypedArray(x.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function ar(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var _N={kernelName:uo,backendName:"cpu",kernelFunc:ar};function Wo(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var EN={kernelName:la,backendName:"cpu",kernelFunc:Wo};function tI(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=x.toTypedArray([0],t),[s,a]=Le((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Uo(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return ar({inputs:{x:n},backend:t});let c=Yp(t,n.shape,n.dtype),l=Uo({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=qt({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=Wo({inputs:{input:n},backend:t}),l=Uo({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!x.hasEncodingLoss(n.dtype,s)){let c=ar({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=tI(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var $N={kernelName:to,backendName:"cpu",kernelFunc:Uo};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;K([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?I.fromUint8ToStringArray(u):u,m=a.dtype==="string"?I.fromUint8ToStringArray(c):c,f=o||a.dtype,[d,h]=e(a.shape,i.shape,l,m,f);return p.makeTensorInfo(h,f,d)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=Uo({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=p.data.get(l.dataId).values,d=p.data.get(m.dataId).values,h=Uo({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(y.dataId).values,w=p.data.get(b.dataId).values,[k,_,E]=t(a.shape,i.shape,f,d,C,w),R=p.makeTensorInfo(E,"float32",k),A=p.makeTensorInfo(E,"float32",_),D=qt({inputs:{real:R,imag:A},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(A),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,f]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(f,l,m)}}}function Qp(r){return(e,t,o,n,s,a)=>{let i=I.assertAndGetBroadcastShape(e,t),p=x.sizeFromShape(i),u=i.length,c=x.computeStrides(i),l=x.getTypedArrayFromDType("float32",p),m=x.getTypedArrayFromDType("float32",p),f=I.getBroadcastDims(e,i),d=I.getBroadcastDims(t,i),h=I.mergeRealAndImagArrays(o,n),g=I.mergeRealAndImagArrays(s,a),y=e.length,b=x.computeStrides(e),C=t.length,w=x.computeStrides(t);if(f.length+d.length===0)for(let k=0;kE[M]=0);let R=x.locToIndex(E,y,b),A=_.slice(-C);d.forEach(M=>A[M]=0);let D=x.locToIndex(A,C,w),O=r(h[R*2],h[R*2+1],g[D*2],g[D*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var rI=Le((r,e)=>r+e),X6=Qp((r,e,t,o)=>({real:r+t,imag:e+o})),Hs=Ye(_r,rI,X6),RN={kernelName:_r,backendName:"cpu",kernelFunc:Hs};function Zp(r,e,t,o,n){let s=x.sizeFromShape(o),a=x.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function yd(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ne([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function vr(r){return(e,t,o)=>{let n=x.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(K(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=x.sizeFromShape(a.shape),c=t||a.dtype,l=x.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(K(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var oI=vr(r=>Math.ceil(r)),Y6=Go(ro,oI),AN={kernelName:ro,backendName:"cpu",kernelFunc:Y6};function Iu(r,e,t,o){let n=x.getArrayFromDType(t,x.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=x.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?I.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),sI=Ye(oo,nI,null,"bool"),FN={kernelName:oo,backendName:"cpu",kernelFunc:sI};var aI=vr(r=>Math.exp(r)),iI=Go(no,aI,"float32"),DN={kernelName:no,backendName:"cpu",kernelFunc:iI};var uI=vr(r=>Math.expm1(r)),Q6=Go(wn,uI),PN={kernelName:wn,backendName:"cpu",kernelFunc:Q6};var pI=vr(r=>Math.floor(r)),Z6=Go(so,pI),ON={kernelName:so,backendName:"cpu",kernelFunc:Z6};function bd(r,e,t,o,n,s,a,i,p){let u=ne([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let f=0;fr>e?1:0),J6=Ye(ao,cI,null,"bool"),MN={kernelName:ao,backendName:"cpu",kernelFunc:J6};var lI=Le((r,e)=>r>=e?1:0),ej=Ye(io,lI,null,"bool"),LN={kernelName:io,backendName:"cpu",kernelFunc:ej};var mI=Le((r,e)=>rr<=e?1:0),rj=Ye(co,fI,null,"bool"),VN={kernelName:co,backendName:"cpu",kernelFunc:rj};function Id(r,e,t){let o=(e-r)/(t-1),n=x.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),oj=Go(lo,dI),zN={kernelName:lo,backendName:"cpu",kernelFunc:oj};function wd(r,e,t,o){let n=x.getTypedArrayFromDType(o,x.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var hI=Le((r,e)=>Math.max(r,e)),nj=Ye(mo,hI),WN={kernelName:mo,backendName:"cpu",kernelFunc:nj};var gI=Le((r,e)=>Math.min(r,e)),sj=Ye(fo,gI),UN={kernelName:fo,backendName:"cpu",kernelFunc:sj};var Cl=Le((r,e)=>r*e),aj=Qp((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),wu=Ye(ho,Cl,aj),GN={kernelName:ho,backendName:"cpu",kernelFunc:wu};function xI(r,e,t){let o=x.createScalarValue(-1,t);return Cl([],e,o,r,t)}function ij(r){let{inputs:e,backend:t}=r,{x:o}=e;K(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=xI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var HN={kernelName:Pn,backendName:"cpu",kernelFunc:ij};var yI=Le((r,e)=>r!==e?1:0),uj=Ye(go,yI,null,"bool"),qN={kernelName:go,backendName:"cpu",kernelFunc:uj};function Jp(r,e,t,o,n){let s=e.length,a=x.sizeFromShape(e),i=x.computeStrides(e),p=x.computeStrides(n),u=x.getTypedArrayFromDType(t,x.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(y,g,d)}var jN={kernelName:Ao,backendName:"cpu",kernelFunc:pj};function cj(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=x.indexToLoc(n,e.length,x.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function lj(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function mj(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);lj(t,o);let p=1;for(let u=0;u=0){let h=i[d],g=h[h.length-1]-f[c];for(let y=c;yn[a]=s)}return e}function XN(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error("starts must be a scalar or vector");if(n.length>1)throw new Error("limits must be a scalar or vector");if(a.length>1)throw new Error("deltas must be a scalar or vector");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&by)w=0;else if(w=Math.ceil(Math.abs((b-y)/C)),w>YN)throw new Error(`Requires ((limit - start) / delta) <= ${YN}`);m[g+1]=m[g]+w}let f=m[l],d=x.getArrayFromDType(t,f),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case Ho.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Ho.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${Ho[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case Ho.FIRST_DIM_SIZE:return e[0];case Ho.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Ho.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Ho[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=ZN(o,!1),a=x.getArrayFromDType(this.valuesDType,x.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=x.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let d=this.defaultValueShape;Ne(()=>{let h=z(c,d);c=Ls(h,i).dataSync()})}let l=0,m=0,f=0;for(let d=0;d<=u;++d){let h=d=u){let g=o.length;h=Math.floor(g/p)}if(h>f)if(this.defaultValue.length===1)a.subarray(f*p,h*p).fill(this.defaultValue[0]),f=h;else for(;h>f;){let g=a.slice(f*p);QN(g,c,p),++f}h<0?(l=d+1,m=f):(l=d,m=f,f=m+1)}}};function QN(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function kd(r,e,t,o,n,s,a,i,p,u){return new ec(r,e,t,o,n,s,a,i,p,u).compute()}function Su(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return x.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=x.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),gj=Go(xo,CI),JN={kernelName:xo,backendName:"cpu",kernelFunc:gj};function Aa(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return ne(t,e.dtype);let f=ne(c,e.dtype);typeof p=="string"||typeof p=="number"?f.values.fill(p):typeof p=="boolean"&&f.values.fill(+p);for(let d=0;d=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let y=0;y1/(1+Math.exp(-r))),II=we(yo,r=>1/(1+Math.exp(-r))),t2={kernelName:yo,backendName:"cpu",kernelFunc:II};function vu(r,e,t,o,n){let s=et.isSliceContinous(o,e,t),a=x.sizeFromShape(t),i=x.computeStrides(o);if(s){let l=et.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?I.fromUint8ToStringArray(r):r,u=ne(o,n,p),c=ne(t,n);for(let l=0;ld+e[h]);c.set(u.get(...f),...m)}return n==="string"?I.fromStringArrayToUint8(c.values):c.values}function qo(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;K(n,"slice");let[i,p]=et.parseSliceParams(n,s,a);et.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=vu(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var r2={kernelName:qn,backendName:"cpu",kernelFunc:qo};function Td(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=x.getArrayFromDType(t,0),y=x.getArrayFromDType(n,0);return[g,[0,l],y,u,c]}let m=!0,f=0,d=new Array(p).fill(0);for(let g=0;g=p)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,p));++d[y],m=m&&y>=f,f=y}let h=!0;for(let g=0;g0&&(d[g]+=d[g-1])}if(h&&m){let g=r,y=o;for(let b=0;b0){f[m-1]=1;for(let g=m-2;g>=0;--g)f[g]=f[g+1]*o[g+1]}let d=[];if(i>0){d[i-1]=1;for(let g=i-2;g>=0;--g)d[g]=d[g+1]*p[g+1]}let h=x.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let f=m.reduce((C,w)=>C*w,1),d=x.getArrayFromDType(t,f);if(i===0)return l>0&&d.fill(a),[d,m];if(l<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,y=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>y&&d.fill(a,y*u,b*u);for(let w=h;w=p[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return yMath.sqrt(r)),xj=we(bo,r=>Math.sqrt(r)),n2={kernelName:bo,backendName:"cpu",kernelFunc:xj};var wI=Le((r,e)=>{let t=r-e;return t*t}),yj=Ye(Co,wI),s2={kernelName:Co,backendName:"cpu",kernelFunc:yj};function _d(r,e,t,o){let n=ne(r,e.dtype);for(let s=0;s0?0:i-p),f=0;f+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){y(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=x.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],f=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,f,l),c+=f}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,f=1;this.createNGrams(e,u,i,c,f,m)}}return[i,a]}};function ku(r,e,t,o,n,s,a,i){return new SI(t,o,n,s,a,i).compute(r,e)}function bj(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),Cj=Qp((r,e,t,o)=>({real:r-t,imag:e-o})),Il=Ye(Io,vI,Cj),a2={kernelName:Io,backendName:"cpu",kernelFunc:Il};function Ed(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function i2(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),f=Math.min(o,Math.floor(e+(i-p)*c/i+l));i2(r,e,m,f)}let n=r[e],s=t,a=o;for(x.swap(r,t,e),wl(r[o],n)>0&&x.swap(r,t,o);s0;)a=a-1}wl(r[t],n)===0?x.swap(r,t,a):(a=a+1,x.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function $d(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=x.getTypedArrayFromDType(t,a*o),u=x.getTypedArrayFromDType("int32",a*o);for(let l=0;ld[C]={value:b,index:C}),o{for(let g=0;gnew Si,1);var kI=we(In,r=>r>=0?r:Math.exp(r)-1),u2={kernelName:In,backendName:"cpu",kernelFunc:kI};function TI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;K([n],"leakyRelu");let a=x.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=x.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?e*r:r);function NI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;K([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=wj(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var c2={kernelName:Vn,backendName:"cpu",kernelFunc:NI};var _I=we(zn,r=>Math.max(0,r)),l2={kernelName:zn,backendName:"cpu",kernelFunc:_I};var EI=we(Gn,r=>Math.min(Math.max(0,r),6)),m2={kernelName:Gn,backendName:"cpu",kernelFunc:EI};function _u(r,e,t,o,n){if(t==="linear")return ar({inputs:{x:e},backend:r});if(t==="relu")return _I({inputs:{x:e},backend:r});if(t==="elu")return kI({inputs:{x:e},backend:r});if(t==="relu6")return EI({inputs:{x:e},backend:r});if(t==="prelu")return NI({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return TI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return II({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function Oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=x.sizeFromShape(n.shape),i=x.inferFromImplicitShape(s,a),p=x.sizeFromShape(i);x.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var f2={kernelName:Ss,backendName:"cpu",kernelFunc:Oe};function $I(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;K([n,s],"matMul");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],f=i?s.shape[u-2]:s.shape[u-1],d=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=x.sizeFromShape(d),y=x.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);x.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[y,f,l]:[y,l,f],_=Oe({inputs:{x:n},backend:t,attrs:{shape:w}}),E=Oe({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],A=a?_.shape[2]:_.shape[1],D=i?E.shape[1]:E.shape[2],O=Math.max(g,y),M=t.data.get(_.dataId).values,L=t.data.get(E.dataId).values,W=x.computeStrides(_.shape),V=x.computeStrides(E.shape),[G,q,H]=a?[W[0],1,W[1]]:[W[0],W[1],1],[j,Y,Z]=i?[1,V[1],V[0]]:[V[1],1,V[0]],ee=A*D,X=ne([O,A,D],_.dtype),Q=X.values,se=t.blockSize;for(let ie=0;ieMath.acos(r)),g2={kernelName:Li,backendName:"cpu",kernelFunc:vj};var kj=we(Bi,r=>Math.acosh(r)),x2={kernelName:Bi,backendName:"cpu",kernelFunc:kj};function Tj(r){let{inputs:e,backend:t}=r,o=e;K(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=ne(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=w)}f[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",f)}var I2={kernelName:un,backendName:"cpu",kernelFunc:Ej};function $j(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;K(n,"argMin");let a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],I.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[c,l]=I.computeOutAndReduceShapes(p.shape,a),m=x.sizeFromShape(c),f=x.makeZerosTypedArray(m,"int32"),d=x.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",f)}var w2={kernelName:ja,backendName:"cpu",kernelFunc:$j};var Rj=we(Vi,r=>Math.asin(r)),S2={kernelName:Vi,backendName:"cpu",kernelFunc:Rj};var Aj=we(zi,r=>Math.asinh(r)),v2={kernelName:zi,backendName:"cpu",kernelFunc:Aj};var Fj=we(Wi,r=>Math.atan(r)),k2={kernelName:Wi,backendName:"cpu",kernelFunc:Fj};var Dj=Le((r,e)=>Math.atan2(r,e)),Pj=Ye(sa,Dj),T2={kernelName:sa,backendName:"cpu",kernelFunc:Pj};var Oj=we(Ui,r=>Math.atanh(r)),N2={kernelName:Ui,backendName:"cpu",kernelFunc:Oj};function rc(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,f=n.padInfo.left,d=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=ne(n.outShape,t),g=h.values,y=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let w=0;wq?q=se:s==="avg"&&(H+=se,j++)}if(isNaN(q))break}let Y=M+L*C+E;g[Y]=s==="avg"?H/j:q}}}return h}function Fd(r,e,t,o,n=!1,s=!1){let a=ne(o.outShape,"int32"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,f=o.padInfo.top,d=o.padInfo.left,h=ne(e,t,r);for(let g=0;gD&&(D=G,n?O=s?((g*o.inHeight+M)*o.inWidth+W)*o.inChannels+y:(M*o.inWidth+W)*o.inChannels+y:O=L*m+V)}}a.set(O,g,b,_,y)}}return a}function Dd(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,f=n.effectiveFilterHeight,d=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,y=n.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=ne(n.outShape,t),w=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let A=0;AIe?Ie=It:s==="avg"&&(Se+=It,Ee++),isNaN(Ie))break}if(isNaN(Ie))break}if(isNaN(Ie))break}let Me=de+M;w[Me]=s==="avg"?Se/Ee:Ie}}}}return C}function _2(r,e){let t=ne(e.outShape,"int32"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left;for(let h=0;h=L&&(L=Z,W=G*c*l+H*c+Y)}}}t.set(W,h,y,k,A,g)}}}return t}function Mj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;K(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;x.assert(I.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,f=x.computeStrides(n.shape),d=rc(m,n.shape,n.dtype,f,c,"avg");l=t.makeTensorInfo(c.outShape,n.dtype,d.values)}return l}var E2={kernelName:pn,backendName:"cpu",kernelFunc:Mj};function Lj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,"avgPool3d");let c=I.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=Dd(l,n.shape,n.dtype,x.computeStrides(n.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var $2={kernelName:ip,backendName:"cpu",kernelFunc:Lj};function Bj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],"avgPool3DGrad");let c=I.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,f=c.strideWidth,d=c.filterDepth,h=c.filterHeight,g=c.filterWidth,y=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,w=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,E=w-1-c.padInfo.front,R=_-1-c.padInfo.left,A=k-1-c.padInfo.top,D=ne(s.shape,"float32"),O=1/(d*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(X)!==X))for(let Q=0;Q=c.outHeight||Math.floor(se)!==se))for(let ie=0;ie<_;ie+=C){let de=(Y+ie)/f;if(de<0||de>=c.outWidth||Math.floor(de)!==de)continue;let Ie=M.get(L,X,se,de,W);Z+=Ie}}}D.set(Z*O,L,V,G,q,W)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var R2={kernelName:Fm,backendName:"cpu",kernelFunc:Bj};function Vj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;K([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=I.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,f=c.filterHeight,d=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,y=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,w=y-1-c.padInfo.top,k=ne(a.shape,"float32"),_=1/(f*d),E=t.data.get(n.dataId).values,R=ne(n.shape,"float32",E);for(let A=0;A=c.outHeight||Math.floor(q)!==q))for(let H=0;H=c.outWidth||Math.floor(j)!==j)continue;let Y=R.get(A,q,j,D);V+=Y}}k.set(V*_,A,O,M,D)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var A2={kernelName:Am,backendName:"cpu",kernelFunc:Vj};function zj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;x.assert(i.shape.length===p.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),x.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),x.assert(s==null||i.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),K([n,i,p,s,a],"batchNorm");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,f=s?t.data.get(s.dataId).values:new Float32Array([1]),d=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=d.length,y=f.length,b=m.length,C=l.length,w=0,k=0,_=0,E=0;for(let R=0;R=g&&(w=0),k>=C&&(k=0),_>=y&&(_=0),E>=b&&(E=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var F2={kernelName:kn,backendName:"cpu",kernelFunc:zj};function Wj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;K([n],"batchToSpaceND");let i=s.reduce((y,b)=>y*b),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=Oe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),h=Oe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=qo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var D2={kernelName:hs,backendName:"cpu",kernelFunc:Wj};function Uj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Zp(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var P2={kernelName:up,backendName:"cpu",kernelFunc:Uj};function Gj(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=I.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var O2={kernelName:pp,backendName:"cpu",kernelFunc:Gj};var Hj=we(Ro,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(x.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(h=>h.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>x.sizeFromShape(h.shape)>0);if(p.length===1)return ar({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(w=>Wo({inputs:{input:w},backend:t})),g=p.map(w=>qs({inputs:{input:w},backend:t})),y=vi({inputs:h,backend:t,attrs:{axis:s}}),b=vi({inputs:g,backend:t,attrs:{axis:s}}),C=qt({inputs:{real:y,imag:b},backend:t});return h.forEach(w=>t.disposeIntermediateTensorInfo(w)),g.forEach(w=>t.disposeIntermediateTensorInfo(w)),t.disposeIntermediateTensorInfo(y),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let y=[-1,x.sizeFromShape(h.shape.slice(s))];return Oe({inputs:{x:h},backend:t,attrs:{shape:y}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=I.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=Iu(c,i,e[0].dtype,l),f=I.computeOutShape(p.map(h=>h.shape),s),d=t.makeTensorInfo(f,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),d}var V2={kernelName:gs,backendName:"cpu",kernelFunc:vi};function RI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;K([n,s],"conv2d");let l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),f=m.filterHeight,d=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,y=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat==="channelsLast",w=new je(m.outShape,n.dtype),k=x.computeStrides(n.shape),_=x.computeStrides(s.shape),E=k[0],R=C?k[1]:k[2],A=C?k[2]:1,D=C?1:k[1],O=w.strides[0],M=C?w.strides[1]:w.strides[2],L=C?w.strides[2]:1,W=C?1:w.strides[1],V=t.data.get(n.dataId).values,G=t.data.get(s.dataId).values,q=w.values;for(let H=0;H=m.inHeight)continue;let ie=Q*_[0],de=j+se*R;for(let Ie=0;Ie=m.inWidth)continue;let pt=ie+Me*_[1],De=de+st*A,ft=pt;for(let at=0;at=u.inDepth)continue;let H=G*A[0],j=O+q*R[1];for(let Y=0;Y=u.inHeight)continue;let se=H+X*A[1],ie=j+Q*R[2];for(let de=0;de=u.inWidth)continue;let st=se+Ee*A[2],pt=ie+Me*u.inChannels,De=st;for(let ft=0;ftMath.cos(r)),K2={kernelName:fn,backendName:"cpu",kernelFunc:Zj};var Jj=we(dn,r=>Math.cosh(r)),j2={kernelName:dn,backendName:"cpu",kernelFunc:Jj};function eX(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,f]=n.shape,d=s.shape[0],[h,g]=i,y=ne([d,h,g,f],"float32"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,w=t.data.get(n.dataId).values,k=x.computeStrides(n.shape),_=x.computeStrides(y.shape);for(let E=0;E=c)continue;let W=h>1?(O-A)*(l-1)/(h-1):0,V=g>1?(M-D)*(m-1)/(g-1):0;for(let G=0;G1?A*(l-1)+G*W:.5*(A+O)*(l-1);if(q<0||q>l-1){for(let H=0;H1?D*(m-1)+Z*V:.5*(D+M)*(m-1);if(ee<0||ee>m-1){for(let ie=0;ie1?D*(m-1)+H*V:.5*(D+M)*(m-1);if(j<0||j>m-1){for(let ee=0;eey+d-b-1:(y,b)=>y+b;for(let y=0;yy+d-b-1:(y,b)=>y+b;for(let y=0;y`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,f=c/(s*s),d=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*f),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let f=I.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:d,filterWidth:h,dilationHeight:g,dilationWidth:y,padInfo:b}=f,C=b.left,w=b.top,k=f.outChannels/f.inChannels,_=new je(f.outShape,n.dtype),E=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,A=_.values;for(let D=0;D=f.inHeight)continue;let H=G*l[0],j=O+q*c[1];for(let Y=0;Y=f.inWidth)continue;let se=H+X*l[1],ie=j+Q*f.inChannels,de=Z,Ie=se;for(let Se=0;Se{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:f,inHeight:d,inWidth:h,inChannels:g,outHeight:y,outWidth:b,padInfo:C,strideHeight:w,strideWidth:k,filterHeight:_,filterWidth:E,dilationHeight:R,dilationWidth:A,outShape:D}=I.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),O=x.sizeFromShape(D),M=D.length,L=x.getArrayFromDType(o.dtype,O);for(let V=0;V=0&&Q=0&&ieZ&&(Z=Se)}}}let ee=x.locToIndex([V,G,H,Y],M,x.computeStrides(D));L[ee]=Z}}}return{dataId:p.write(x.toTypedArray(L,o.dtype),D,o.dtype),shape:D,dtype:o.dtype}}};var s_={kernelName:vb,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=x.toNestedArray(o.shape,u.data.get(o.dataId).values),l=x.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:y,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:E,dilationWidth:R,outShape:A}=I.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);x.assert(s.rank===A.length,()=>`Error in ${vb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let D=x.toNestedArray(A,u.data.get(s.dataId).values),O=x.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&X=0&&sej&&(j=ie,Y=ee,Z=Q)}}}O[Y][Z][H]+=D[L][W][G][H]}}}return{dataId:u.write(x.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var a_={kernelName:Sb,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=x.toNestedArray(o.shape,u.data.get(o.dataId).values),l=x.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:y,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:E,dilationWidth:R,outShape:A}=I.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);x.assert(s.rank===A.length,()=>`Error in ${Sb}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let D=x.toNestedArray(A,u.data.get(s.dataId).values),O=x.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&X=0&&sej&&(j=ie,Y=X,Z=se)}}}O[L][Y][Z][H]+=D[L][W][G][H]}}}return{dataId:u.write(x.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function Fa(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,"sum");let i;n.dtype==="bool"?i=Uo({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=ar({inputs:{x:n},backend:t});let p=i.shape.length,u=x.parseAxisParam(s,i.shape),c=I.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=bt({inputs:{x:i},backend:t,attrs:{perm:c}}),l=I.getInnerMostAxes(l.length,p)),I.assertAxesAreInnerMostDims("sum",l,m.shape.length);let[f,d]=I.computeOutAndReduceShapes(m.shape,l),h=I.upcastType(m.dtype,"int32"),g=Yp(t,f,h),y=x.sizeFromShape(d),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let w=0;w=0&&(m=Fa({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var u_={kernelName:Xa,backendName:"cpu",kernelFunc:uX};function pX(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;K([o,n],"eluGrad");let s=new Float32Array(x.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=1?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var p_={kernelName:Pm,backendName:"cpu",kernelFunc:pX};var cX=I.ERF_P,lX=I.ERF_A1,mX=I.ERF_A2,fX=I.ERF_A3,dX=I.ERF_A4,hX=I.ERF_A5,gX=we(Gi,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+cX*t);return e*(1-((((hX*o+dX)*o+fX)*o+mX)*o+lX)*o*Math.exp(-t*t))}),c_={kernelName:Gi,backendName:"cpu",kernelFunc:gX};function oc(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(x.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Oe({inputs:{x:n},backend:t,attrs:{shape:i}})}var l_={kernelName:xs,backendName:"cpu",kernelFunc:oc};var xX=Le((r,e)=>r/e),Sl=Ye(Cn,xX),vl={kernelName:Cn,backendName:"cpu",kernelFunc:Sl};function Pd(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=x.sizeFromShape(u),l=x.getTypedArrayFromDType("float32",c),m=x.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:o}=r,n=t,s=x.getTypedArrayFromDType(o.dtype,x.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&CMath.floor(r/e)),vX=Ye(vn,SX,null,"int32"),h_={kernelName:vn,backendName:"cpu",kernelFunc:vX};function kX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=RI({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;if(c==="NCHW"&&a.shape.length===1&&a.shape[0]!==1){let y=Oe({inputs:{x:a},backend:t,attrs:{shape:[a.shape[0],1,1]}});h=Hs({inputs:{a:h,b:y},backend:t}),t.disposeIntermediateTensorInfo(y)}else h=Hs({inputs:{a:h,b:a},backend:t});t.disposeIntermediateTensorInfo(g)}if(f){let g=h;if(c==="NCHW"&&f==="prelu"&&i.shape.length===1&&i.shape[0]!==1){let y=Oe({inputs:{x:i},backend:t,attrs:{shape:[i.shape[0],1,1]}});h=_u(t,h,f,y,d),t.disposeIntermediateTensorInfo(y)}else h=_u(t,h,f,i,d);t.disposeIntermediateTensorInfo(g)}return h}var g_={kernelName:Do,backendName:"cpu",kernelFunc:kX};function TX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=AI({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;h=Hs({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(f){let g=h;h=_u(t,h,f,i,d),t.disposeIntermediateTensorInfo(g)}return h}var x_={kernelName:Po,backendName:"cpu",kernelFunc:TX};function NX(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=x.sizeFromShape(o.shape),a=n.shape,i=a[a.length-1],[p,u,c,l]=I.prepareAndValidate(o,n);if(u===0)return t.makeTensorInfo(p,o.dtype,[]);let m=t.data.get(n.dataId).values,f=t.bufferSync(o),d=bd(m,f,o.dtype,u,i,c,l,o.shape,s);return t.makeTensorInfo(p,o.dtype,d.values)}var y_={kernelName:Tn,backendName:"cpu",kernelFunc:NX};function _X(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o;K([n,s],"gatherV2");let p=x.parseAxisParam(a,n.shape)[0],u=t.data.get(s.dataId).values,c=n.shape[p];for(let w=0;w=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=x.sizeFromShape(s.shape),f=I.segment_util.collectGatherOpShapeInfo(n,s,p,l),d=Oe({inputs:{x:n},backend:t,attrs:{shape:[f.batchSize,f.outerSize,f.dimSize,f.sliceSize]}}),h=Oe({inputs:{x:s},backend:t,attrs:{shape:[f.batchSize,m/f.batchSize]}}),g=[f.batchSize,f.outerSize,m/f.batchSize,f.sliceSize],y=t.bufferSync(h),b=t.bufferSync(d),C=Cd(b,y,g);return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(f.outputShape,C.dtype,C.values)}var b_={kernelName:bs,backendName:"cpu",kernelFunc:_X};function EX(r){let{inputs:e,backend:t}=r,{input:o}=e,n=x.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Oe({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Pd(i,!0,t),u=Oe({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var C_={kernelName:Cp,backendName:"cpu",kernelFunc:EX};var $X=we(Hi,r=>Number.isFinite(r)?1:0,"bool"),I_={kernelName:Hi,backendName:"cpu",kernelFunc:$X};var RX=we(qi,r=>Math.abs(r)===1/0?1:0,"bool"),w_={kernelName:qi,backendName:"cpu",kernelFunc:RX};var AX=we(ia,r=>Number.isNaN(r)?1:0,"bool"),S_={kernelName:ia,backendName:"cpu",kernelFunc:AX};function FX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Id(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var v_={kernelName:Ip,backendName:"cpu",kernelFunc:FX};var DX=we(Ki,r=>Math.log1p(r)),k_={kernelName:Ki,backendName:"cpu",kernelFunc:DX};var PX=Le((r,e)=>r&&e),OX=Ye(_n,PX,null,"bool"),T_={kernelName:_n,backendName:"cpu",kernelFunc:OX};var MX=we(En,r=>r?0:1,"bool"),N_={kernelName:En,backendName:"cpu",kernelFunc:MX};var LX=Le((r,e)=>r||e),BX=Ye(ua,LX,null,"bool"),__={kernelName:ua,backendName:"cpu",kernelFunc:BX};function VX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;K(n,"LRN");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=x.sizeFromShape(n.shape),f=new Float32Array(m);function d(h){let g=h%u,y=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;y<=b;y++){let w=l[y];C+=w*w}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,f=x.computeStrides(n.shape),d=rc(m,n.shape,n.dtype,f,c,"max");l=t.makeTensorInfo(c.outShape,n.dtype,d.values)}return l}var A_={kernelName:Rn,backendName:"cpu",kernelFunc:WX};function UX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,"maxPool3d");let c=I.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=Dd(l,n.shape,n.dtype,x.computeStrides(n.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var F_={kernelName:Sp,backendName:"cpu",kernelFunc:UX};function GX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],"maxPool3DGrad");let c=I.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=_2(l,c),f=c.strideDepth,d=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,y=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,w=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,E=k-1-c.padInfo.left,R=w-1-c.padInfo.top,A=ne(s.shape,"float32"),D=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(Z)!==Z))for(let ee=0;ee=c.outHeight||Math.floor(X)!==X))for(let Q=0;Q=c.outWidth||Math.floor(se)!==se)continue;let ie=C*w*k-1-m.get(O,Z,X,se,M),de=Y*w*k+ee*k+Q,Ie=ie===de?1:0;if(Ie===0)continue;let Se=D.get(O,Z,X,se,M);j+=Se*Ie}}}A.set(j,O,L,W,V,M)}return t.makeTensorInfo(A.shape,A.dtype,A.values)}var D_={kernelName:Lm,backendName:"cpu",kernelFunc:GX};function HX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;K([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=I.computePool2DInfo(i.shape,p,u,1,c,l),f=t.data.get(i.dataId).values,d=ne(m.outShape,i.dtype,Fd(f,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,y=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,w=m.effectiveFilterWidth,k=w-1-m.padInfo.left,_=C-1-m.padInfo.top,E=ne(i.shape,"float32"),R=t.data.get(n.dataId).values,A=ne(n.shape,"float32",R);for(let D=0;D=m.outHeight||Math.floor(H)!==H))for(let j=0;j=m.outWidth||Math.floor(Y)!==Y)continue;let Z=C*w-1-d.get(D,H,Y,O),ee=q*w+j,X=Z===ee?1:0;if(X===0)continue;let Q=A.get(D,H,Y,O);G+=Q*X}}E.set(G,D,M,L,O)}return t.makeTensorInfo(E.shape,E.dtype,E.values)}var P_={kernelName:Mm,backendName:"cpu",kernelFunc:HX};function O_(r,e,t,o,n){let s=x.computeStrides(e),a=rc(r,e,t,s,n,"max"),i=Fd(r,e,t,n,!0,o);return[a.values,i.values]}var M_={kernelName:vp,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;K(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=I.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=O_(u,o.shape,o.dtype,i,c),f=p.write(l,c.outShape,o.dtype),d=p.write(m,c.outShape,o.dtype);return[{dataId:f,shape:c.outShape,dtype:o.dtype},{dataId:d,shape:c.outShape,dtype:"int32"}]}};function qX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=x.parseAxisParam(s,n.shape),u=I.computeOutAndReduceShapes(n.shape,i)[1],c=x.sizeFromShape(u),l=[],m=t.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let f=Uo({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});l.push(f);let d=Sl({inputs:{a:f,b:m},backend:t});l.push(d);let h=Fa({inputs:{x:d},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var L_={kernelName:An,backendName:"cpu",kernelFunc:qX};function KX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,"min");let i=x.parseAxisParam(s,n.shape),p=i,u=I.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=bt({inputs:{x:n},backend:t,attrs:{perm:u}}),p=I.getInnerMostAxes(p.length,n.shape.length)),I.assertAxesAreInnerMostDims("min",p,c.shape.length);let[l,m]=I.computeOutAndReduceShapes(c.shape,p),f=x.sizeFromShape(m),d=x.makeZerosTypedArray(x.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let y=0;yC[0]+n.shape[w]+C[1]),p=s.map(C=>C[0]),u=s.map((C,w)=>C[0]+n.shape[w]),c=a==="reflect"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,f=x.computeStrides(n.shape),d=x.sizeFromShape(i),h=i.length,g=x.computeStrides(i),y=x.getTypedArrayFromDType(n.dtype,d);for(let C=0;C=u[_]&&(w[_]=(u[_]-1)*2-w[_]+c);w=w.map((_,E)=>_-p[E]);let k=x.locToIndex(w,m,f);y[C]=l[k]}return{dataId:t.write(y,i,n.dtype),shape:i,dtype:n.dtype}}var V_={kernelName:Dn,backendName:"cpu",kernelFunc:jX};var XX=Le((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),YX=Ye(ji,XX),z_={kernelName:ji,backendName:"cpu",kernelFunc:YX};var U_=rp(IC());function PI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=x.parseAxisParam([i],n.shape),u=DI({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=I.expandShapeToKeepDim(u.shape,p),l=Oe({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Il({inputs:{a:n,b:l},backend:t}),f=iI({inputs:{x:m},backend:t}),d=Fa({inputs:{x:f},backend:t,attrs:{axis:p,keepDims:!1}}),h=Oe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=Sl({inputs:{a:f,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var W_={kernelName:Xn,backendName:"cpu",kernelFunc:PI};function QX(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;K(n,"multinomial");let p=i?n:PI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],f=x.makeZerosTypedArray(x.sizeFromShape(m),"int32");for(let d=0;d=0&&l[m]{x.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),x.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=oc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=vi({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var Z_={kernelName:Is,backendName:"cpu",kernelFunc:OI};function s5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;K(n,"pad");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=x.sizeFromShape(n.shape),l=n.shape.length,m=x.computeStrides(n.shape),f=x.sizeFromShape(i),d=i.length,h=x.computeStrides(i),g=x.getTypedArrayFromDType(n.dtype,f);a!==0&&g.fill(a);for(let b=0;b_+p[E]),k=x.locToIndex(w,d,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Od={kernelName:Ln,backendName:"cpu",kernelFunc:s5};var a5=Le((r,e)=>Math.pow(r,e)),i5=Ye(Bn,a5),J_={kernelName:Bn,backendName:"cpu",kernelFunc:i5};function u5(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(y=>t.data.get(y.dataId).values),u=n.map(y=>y.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,f,d]=Sd(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(y=>t.makeTensorInfo([y.length],"int32",y)),g=t.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var eE={kernelName:Tp,backendName:"cpu",kernelFunc:u5};function p5(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=vd(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var tE={kernelName:Np,backendName:"cpu",kernelFunc:p5};function c5(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),f=i.map(g=>g.shape),[d,h]=kd(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,f,p);return t.makeTensorInfo(d,s.dtype,h)}var rE={kernelName:_p,backendName:"cpu",kernelFunc:c5};function l5(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=Su(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var oE={kernelName:ws,backendName:"cpu",kernelFunc:l5};var m5=we(ma,r=>1/r),nE={kernelName:ma,backendName:"cpu",kernelFunc:m5};function f5(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;K(n,"resizeBilinear");let p=x.computeStrides(n.shape),[u,c]=i,[l,m,f,d]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(x.sizeFromShape([l,u,c,d])),y=[s&&u>1?m-1:m,s&&c>1?f-1:f],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,w=y[0]/b[0],k=y[1]/b[1];for(let _=0;_1?u-1:u,a&&f>1?c-1:c],g=[a&&m>1?m-1:m,a&&f>1?f-1:f],y=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,w=0;for(let k=0;k1?m-1:m,s&&c>1?f-1:f],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=y[0]/b[0],w=y[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&d>1?l-1:l],b=[a&&f>1?f-1:f,a&&d>1?d-1:d],C=y[0]/b[0],w=y[1]/b[1],k=1/C,_=1/w,E=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let A=0;A=f)continue;let X=D+ee*p[1],Q=ee*C,se=Math.min(c-1,a?Math.round(Q):Math.floor(Q));if(O===se)for(let ie=0;ie=d)continue;let Ie=X+de*p[2],Se=de*w,Ee=Math.min(l-1,a?Math.round(Se):Math.floor(Se));V===Ee&&(Y+=g[Ie+j])}}h[G+j]=Y}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var uE={kernelName:Bm,backendName:"cpu",kernelFunc:g5};function x5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;K(n,"reverse");let a=n.shape.length,i=x.parseAxisParam(s,n.shape);if(a===0)return ar({inputs:{x:n},backend:t});let p=new je(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[f]=n.shape[f]-1-m[f]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var pE={kernelName:fa,backendName:"cpu",kernelFunc:x5};var cE={kernelName:es,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=x.getTypedArrayFromDType(o.dtype,x.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[f,d]=I.getImageCenter(a,c,l),h=255,g=Math.sin(n),y=Math.cos(n),b=i.data.get(o.dataId).values;for(let w=0;w=0&&W=0&&V{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),lE={kernelName:da,backendName:"cpu",kernelFunc:y5};function b5(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=!0,f=t.bufferSync(n),d=t.bufferSync(s),h=Aa(f,d,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var mE={kernelName:Hn,backendName:"cpu",kernelFunc:b5};function C5(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:x.sizeFromShape(n.shape.slice(1));for(let d=0;dr>=0?k5*r:v5*(Math.exp(r)-1)),gE={kernelName:Xi,backendName:"cpu",kernelFunc:T5};var N5=we(Yi,r=>r<0?-1:r>0?1:0),xE={kernelName:Yi,backendName:"cpu",kernelFunc:N5};var _5=we(Kn,r=>Math.sin(r)),yE={kernelName:Kn,backendName:"cpu",kernelFunc:_5};var E5=we(ha,r=>Math.sinh(r)),bE={kernelName:ha,backendName:"cpu",kernelFunc:E5};var $5=11920928955078125e-23,CE=Math.log($5)+2,R5=we(Qi,r=>{let e=r>-CE,t=r0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t==="complex64"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return S.mergeRealAndImagArrays(n,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return le(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){K([e],"where");let t=this.readSync(e.dataId);return h6(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Oi.nextDataId=0;var Qp={};Ue(Qp,{addImpl:()=>QC,bincountImpl:()=>Kp,bincountReduceImpl:()=>uf,castImpl:()=>YC,ceilImpl:()=>ZC,concatImpl:()=>Su,equalImpl:()=>JC,expImpl:()=>tS,expm1Impl:()=>oS,floorImpl:()=>nS,gatherNdImpl:()=>pf,gatherV2Impl:()=>cf,greaterEqualImpl:()=>aS,greaterImpl:()=>sS,lessEqualImpl:()=>uS,lessImpl:()=>iS,linSpaceImpl:()=>lf,logImpl:()=>pS,maxImpl:()=>mf,maximumImpl:()=>cS,minimumImpl:()=>lS,multiplyImpl:()=>ml,negImpl:()=>mS,notEqualImpl:()=>dS,prodImpl:()=>fS,raggedGatherImpl:()=>df,raggedRangeImpl:()=>ff,raggedTensorToTensorImpl:()=>hf,rangeImpl:()=>Iu,rsqrtImpl:()=>hS,scatterImpl:()=>Ma,sigmoidImpl:()=>ET,simpleAbsImpl:()=>XC,sliceImpl:()=>vu,sparseFillEmptyRowsImpl:()=>gf,sparseReshapeImpl:()=>xf,sparseSegmentReductionImpl:()=>Yp,sqrtImpl:()=>RT,squaredDifferenceImpl:()=>xS,stridedSliceImpl:()=>yf,stringNGramsImpl:()=>ku,stringSplitImpl:()=>Nu,stringToHashBucketFastImpl:()=>Tu,subImpl:()=>bS,tileImpl:()=>bf,topKImpl:()=>Cf,transposeImpl:()=>jp,uniqueImpl:()=>Sf});function XC(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;K(e,"abs");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=XC(n),t.makeOutput(o,e.shape,e.dtype)},tT={kernelName:gs,backendName:"cpu",kernelFunc:g6};function Be(r){return(e,t,o,n,s)=>{let a=S.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=S.getBroadcastDims(e,a),g=S.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let w=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[w],n[_])}return[c,a]}}function Ht(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}var rT={kernelName:ei,backendName:"cpu",kernelFunc:Ht};function Hp(r,e,t="float32"){if(t==="complex64"){let n=Hp(r,e,"float32"),s=Hp(r,e,"float32");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function ar(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var oT={kernelName:mo,backendName:"cpu",kernelFunc:ar};function wo(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var nT={kernelName:ai,backendName:"cpu",kernelFunc:wo};function YC(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],t),[s,a]=Be((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Io(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return ar({inputs:{x:n},backend:t});let c=Hp(t,n.shape,n.dtype),l=Io({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=Ht({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=wo({inputs:{input:n},backend:t}),l=Io({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=ar({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=YC(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var sT={kernelName:co,backendName:"cpu",kernelFunc:Io};function Qe(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;K([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?S.fromUint8ToStringArray(u):u,m=a.dtype==="string"?S.fromUint8ToStringArray(c):c,d=o||a.dtype,[f,h]=e(a.shape,i.shape,l,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=Io({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,d=p.data.get(l.dataId).values,f=p.data.get(m.dataId).values,h=Io({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(x.dataId).values,w=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,w),A=p.makeTensorInfo($,"float32",k),R=p.makeTensorInfo($,"float32",_),D=Ht({inputs:{real:A,imag:R},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(A),p.disposeIntermediateTensorInfo(R),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,d]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function qp(r){return(e,t,o,n,s,a)=>{let i=S.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=S.getBroadcastDims(e,i),f=S.getBroadcastDims(t,i),h=S.mergeRealAndImagArrays(o,n),g=S.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,w=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let A=y.locToIndex($,x,b),R=_.slice(-C);f.forEach(M=>R[M]=0);let D=y.locToIndex(R,C,w),P=r(h[A*2],h[A*2+1],g[D*2],g[D*2+1]);l[k]=P.real,m[k]=P.imag}return[l,m,i]}}var QC=Be((r,e)=>r+e),x6=qp((r,e,t,o)=>({real:r+t,imag:e+o})),js=Qe(eo,QC,x6),aT={kernelName:eo,backendName:"cpu",kernelFunc:js};function Kp(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function uf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=le([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function vr(r){return(e,t,o)=>{let n=y.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(K(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=y.sizeFromShape(a.shape),c=t||a.dtype,l=y.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(K(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var ZC=vr(r=>Math.ceil(r)),y6=vo(Uo,ZC),iT={kernelName:Uo,backendName:"cpu",kernelFunc:y6};function Su(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?S.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),eS=Qe(tn,JC,null,"bool"),uT={kernelName:tn,backendName:"cpu",kernelFunc:eS};var tS=vr(r=>Math.exp(r)),rS=vo(rn,tS,"float32"),pT={kernelName:rn,backendName:"cpu",kernelFunc:rS};var oS=vr(r=>Math.expm1(r)),b6=vo(da,oS),cT={kernelName:da,backendName:"cpu",kernelFunc:b6};var nS=vr(r=>Math.floor(r)),C6=vo(nn,nS),lT={kernelName:nn,backendName:"cpu",kernelFunc:C6};function pf(r,e,t,o,n,s,a,i,p){let u=le([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>e?1:0),S6=Qe(pn,sS,null,"bool"),mT={kernelName:pn,backendName:"cpu",kernelFunc:S6};var aS=Be((r,e)=>r>=e?1:0),w6=Qe(cn,aS,null,"bool"),dT={kernelName:cn,backendName:"cpu",kernelFunc:w6};var iS=Be((r,e)=>rr<=e?1:0),v6=Qe(fn,uS,null,"bool"),hT={kernelName:fn,backendName:"cpu",kernelFunc:v6};function lf(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),k6=vo(hn,pS),gT={kernelName:hn,backendName:"cpu",kernelFunc:k6};function mf(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var cS=Be((r,e)=>Math.max(r,e)),N6=Qe(bn,cS),xT={kernelName:bn,backendName:"cpu",kernelFunc:N6};var lS=Be((r,e)=>Math.min(r,e)),T6=Qe(In,lS),yT={kernelName:In,backendName:"cpu",kernelFunc:T6};var ml=Be((r,e)=>r*e),_6=qp((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),wu=Qe(kn,ml,_6),bT={kernelName:kn,backendName:"cpu",kernelFunc:wu};function mS(r,e,t){let o=y.createScalarValue(-1,t);return ml([],e,o,r,t)}function E6(r){let{inputs:e,backend:t}=r,{x:o}=e;K(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=mS(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var CT={kernelName:ws,backendName:"cpu",kernelFunc:E6};var dS=Be((r,e)=>r!==e?1:0),$6=Qe(Nn,dS,null,"bool"),ST={kernelName:Nn,backendName:"cpu",kernelFunc:$6};function jp(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var IT={kernelName:Fn,backendName:"cpu",kernelFunc:A6};function R6(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function F6(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function D6(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);F6(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[c];for(let x=c;xn[a]=s)}return e}function vT(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error("starts must be a scalar or vector");if(n.length>1)throw new Error("limits must be a scalar or vector");if(a.length>1)throw new Error("deltas must be a scalar or vector");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&bx)w=0;else if(w=Math.ceil(Math.abs((b-x)/C)),w>kT)throw new Error(`Requires ((limit - start) / delta) <= ${kT}`);m[g+1]=m[g]+w}let d=m[l],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case ko.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case ko.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${ko[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case ko.FIRST_DIM_SIZE:return e[0];case ko.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case ko.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${ko[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=TT(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;Ee(()=>{let h=z(c,f);c=Ii(h,i).dataSync()})}let l=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);NT(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function NT(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function hf(r,e,t,o,n,s,a,i,p,u){return new Xp(r,e,t,o,n,s,a,i,p,u).compute()}function Iu(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),L6=vo(Vn,hS),_T={kernelName:Vn,backendName:"cpu",kernelFunc:L6};function Ma(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return le(t,e.dtype);let d=le(c,e.dtype);typeof p=="string"||typeof p=="number"?d.values.fill(p):typeof p=="boolean"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),gS=Ie(Un,r=>1/(1+Math.exp(-r))),$T={kernelName:Un,backendName:"cpu",kernelFunc:gS};function vu(r,e,t,o,n){let s=ut.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=ut.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?S.fromUint8ToStringArray(r):r,u=le(o,n,p),c=le(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n==="string"?S.fromStringArrayToUint8(c.values):c.values}function No(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;K(n,"slice");let[i,p]=ut.parseSliceParams(n,s,a);ut.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=vu(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var AT={kernelName:_s,backendName:"cpu",kernelFunc:No};function gf(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,l],x,u,c]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,w)=>C*w,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let w=h;w=p[0])throw new Error(S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),B6=Ie(Gn,r=>Math.sqrt(r)),FT={kernelName:Gn,backendName:"cpu",kernelFunc:B6};var xS=Be((r,e)=>{let t=r-e;return t*t}),V6=Qe(Kn,xS),DT={kernelName:Kn,backendName:"cpu",kernelFunc:V6};function yf(r,e,t,o){let n=le(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){x(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(e,u,i,c,d,m)}}return[i,a]}};function ku(r,e,t,o,n,s,a,i){return new yS(t,o,n,s,a,i).compute(r,e)}function z6(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),W6=qp((r,e,t,o)=>({real:r-t,imag:e-o})),dl=Qe(Xn,bS,W6),OT={kernelName:Xn,backendName:"cpu",kernelFunc:dl};function bf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function PT(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),d=Math.min(o,Math.floor(e+(i-p)*c/i+l));PT(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),fl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}fl(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function Cf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew Oi,1);var CS=Ie(en,r=>r>=0?r:Math.exp(r)-1),MT={kernelName:en,backendName:"cpu",kernelFunc:CS};function SS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;K([n],"leakyRelu");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?e*r:r);function wS(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;K([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=G6(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var BT={kernelName:Rn,backendName:"cpu",kernelFunc:wS};var IS=Ie(On,r=>Math.max(0,r)),VT={kernelName:On,backendName:"cpu",kernelFunc:IS};var vS=Ie(Ln,r=>Math.min(Math.max(0,r),6)),zT={kernelName:Ln,backendName:"cpu",kernelFunc:vS};function _u(r,e,t,o,n){if(t==="linear")return ar({inputs:{x:e},backend:r});if(t==="relu")return IS({inputs:{x:e},backend:r});if(t==="elu")return CS({inputs:{x:e},backend:r});if(t==="relu6")return vS({inputs:{x:e},backend:r});if(t==="prelu")return wS({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return SS({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return gS({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function Me(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var WT={kernelName:Ns,backendName:"cpu",kernelFunc:Me};function kS(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;K([n,s],"matMul");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=Me({inputs:{x:n},backend:t,attrs:{shape:w}}),$=Me({inputs:{x:s},backend:t,attrs:{shape:k}}),A=a?_.shape[1]:_.shape[2],R=a?_.shape[2]:_.shape[1],D=i?$.shape[1]:$.shape[2],P=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,W=y.computeStrides(_.shape),V=y.computeStrides($.shape),[U,q,H]=a?[W[0],1,W[1]]:[W[0],W[1],1],[j,X,Z]=i?[1,V[1],V[0]]:[V[1],1,V[0]],ee=R*D,Y=le([P,R,D],_.dtype),J=Y.values,ie=t.blockSize;for(let pe=0;peMath.acos(r)),HT={kernelName:sa,backendName:"cpu",kernelFunc:q6};var K6=Ie(aa,r=>Math.acosh(r)),qT={kernelName:aa,backendName:"cpu",kernelFunc:K6};function j6(r){let{inputs:e,backend:t}=r,o=e;K(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=le(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=w)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var YT={kernelName:Vo,backendName:"cpu",kernelFunc:Q6};function Z6(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;K(n,"argMin");let a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],S.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[c,l]=S.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(c),d=y.makeZerosTypedArray(m,"int32"),f=y.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var QT={kernelName:Za,backendName:"cpu",kernelFunc:Z6};var J6=Ie(ia,r=>Math.asin(r)),ZT={kernelName:ia,backendName:"cpu",kernelFunc:J6};var ej=Ie(ua,r=>Math.asinh(r)),JT={kernelName:ua,backendName:"cpu",kernelFunc:ej};var tj=Ie(pa,r=>Math.atan(r)),e2={kernelName:pa,backendName:"cpu",kernelFunc:tj};var rj=Be((r,e)=>Math.atan2(r,e)),oj=Qe(la,rj),t2={kernelName:la,backendName:"cpu",kernelFunc:oj};var nj=Ie(ca,r=>Math.atanh(r)),r2={kernelName:ca,backendName:"cpu",kernelFunc:nj};function Zp(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=le(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let w=0;wq?q=ie:s==="avg"&&(H+=ie,j++)}if(isNaN(q))break}let X=M+L*C+$;g[X]=s==="avg"?H/j:q}}}return h}function wf(r,e,t,o,n=!1,s=!1){let a=le(o.outShape,"int32"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=le(e,t,r);for(let g=0;gD&&(D=U,n?P=s?((g*o.inHeight+M)*o.inWidth+W)*o.inChannels+x:(M*o.inWidth+W)*o.inChannels+x:P=L*m+V)}}a.set(P,g,b,_,x)}}return a}function If(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=le(n.outShape,t),w=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],$=n.outShape[3]*n.outShape[4],A=n.outShape[4];for(let R=0;Rwe?we=wt:s==="avg"&&(ve+=wt,$e++),isNaN(we))break}if(isNaN(we))break}if(isNaN(we))break}let Le=he+M;w[Le]=s==="avg"?ve/$e:we}}}}return C}function o2(r,e){let t=le(e.outShape,"int32"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=Z,W=U*c*l+H*c+X)}}}t.set(W,h,x,k,R,g)}}}return t}function sj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;K(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(S.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Zp(m,n.shape,n.dtype,d,c,"avg");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var n2={kernelName:zo,backendName:"cpu",kernelFunc:sj};function aj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,"avgPool3d");let c=S.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=If(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var s2={kernelName:ip,backendName:"cpu",kernelFunc:aj};function ij(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],"avgPool3DGrad");let c=S.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,d=c.strideWidth,f=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,w=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=w-1-c.padInfo.front,A=_-1-c.padInfo.left,R=k-1-c.padInfo.top,D=le(s.shape,"float32"),P=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(Y)!==Y))for(let J=0;J=c.outHeight||Math.floor(ie)!==ie))for(let pe=0;pe<_;pe+=C){let he=(X+pe)/d;if(he<0||he>=c.outWidth||Math.floor(he)!==he)continue;let we=M.get(L,Y,ie,he,W);Z+=we}}}D.set(Z*P,L,V,U,q,W)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var a2={kernelName:Im,backendName:"cpu",kernelFunc:ij};function uj(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;K([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=S.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,d=c.filterHeight,f=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,w=x-1-c.padInfo.top,k=le(a.shape,"float32"),_=1/(d*f),$=t.data.get(n.dataId).values,A=le(n.shape,"float32",$);for(let R=0;R=c.outHeight||Math.floor(q)!==q))for(let H=0;H=c.outWidth||Math.floor(j)!==j)continue;let X=A.get(R,q,j,D);V+=X}}k.set(V*_,R,P,M,D)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var i2={kernelName:wm,backendName:"cpu",kernelFunc:uj};function pj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(s==null||i.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),K([n,i,p,s,a],"batchNorm");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=f.length,x=d.length,b=m.length,C=l.length,w=0,k=0,_=0,$=0;for(let A=0;A=g&&(w=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var u2={kernelName:an,backendName:"cpu",kernelFunc:pj};function cj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;K([n],"batchToSpaceND");let i=s.reduce((x,b)=>x*b),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=Me({inputs:{x:n},backend:t,attrs:{shape:p}}),f=Ct({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Me({inputs:{x:f},backend:t,attrs:{shape:c}}),g=No({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var p2={kernelName:xs,backendName:"cpu",kernelFunc:cj};function lj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Kp(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var c2={kernelName:Ja,backendName:"cpu",kernelFunc:lj};function mj(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=S.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var l2={kernelName:up,backendName:"cpu",kernelFunc:mj};var dj=Ie(lo,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return ar({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(w=>wo({inputs:{input:w},backend:t})),g=p.map(w=>Xs({inputs:{input:w},backend:t})),x=Pi({inputs:h,backend:t,attrs:{axis:s}}),b=Pi({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(w=>t.disposeIntermediateTensorInfo(w)),g.forEach(w=>t.disposeIntermediateTensorInfo(w)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Me({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=S.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=Su(c,i,e[0].dtype,l),d=S.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var h2={kernelName:ys,backendName:"cpu",kernelFunc:Pi};function NS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;K([n,s],"conv2d");let l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat==="channelsLast",w=new st(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],A=C?k[1]:k[2],R=C?k[2]:1,D=C?1:k[1],P=w.strides[0],M=C?w.strides[1]:w.strides[2],L=C?w.strides[2]:1,W=C?1:w.strides[1],V=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,q=w.values;for(let H=0;H=m.inHeight)continue;let pe=J*_[0],he=j+ie*A;for(let we=0;we=m.inWidth)continue;let pt=pe+Le*_[1],Oe=he+nt*R,mt=pt;for(let at=0;at=u.inDepth)continue;let H=U*R[0],j=P+q*A[1];for(let X=0;X=u.inHeight)continue;let ie=H+Y*R[1],pe=j+J*A[2];for(let he=0;he=u.inWidth)continue;let nt=ie+$e*R[2],pt=pe+Le*u.inChannels,Oe=nt;for(let mt=0;mtMath.cos(r)),w2={kernelName:qo,backendName:"cpu",kernelFunc:Cj};var Sj=Ie(Ko,r=>Math.cosh(r)),I2={kernelName:Ko,backendName:"cpu",kernelFunc:Sj};function wj(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=le([f,h,g,d],"float32"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,w=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let W=h>1?(P-R)*(l-1)/(h-1):0,V=g>1?(M-D)*(m-1)/(g-1):0;for(let U=0;U1?R*(l-1)+U*W:.5*(R+P)*(l-1);if(q<0||q>l-1){for(let H=0;H1?D*(m-1)+Z*V:.5*(D+M)*(m-1);if(ee<0||ee>m-1){for(let pe=0;pe1?D*(m-1)+H*V:.5*(D+M)*(m-1);if(j<0||j>m-1){for(let ee=0;eex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,d=c/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=S.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,w=b.top,k=d.outChannels/d.inChannels,_=new st(d.outShape,n.dtype),$=t.data.get(n.dataId).values,A=t.data.get(s.dataId).values,R=_.values;for(let D=0;D=d.inHeight)continue;let H=U*l[0],j=P+q*c[1];for(let X=0;X=d.inWidth)continue;let ie=H+Y*l[1],pe=j+J*d.inChannels,he=Z,we=ie;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:C,strideHeight:w,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:A,dilationWidth:R,outShape:D}=S.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),P=y.sizeFromShape(D),M=D.length,L=y.getArrayFromDType(o.dtype,P);for(let V=0;V=0&&J=0&&peZ&&(Z=ve)}}}let ee=y.locToIndex([V,U,H,X],M,y.computeStrides(D));L[ee]=Z}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),D,o.dtype),shape:D,dtype:o.dtype}}};var D2={kernelName:bb,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:A,outShape:R}=S.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===R.length,()=>`Error in ${bb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`);let D=y.toNestedArray(R,u.data.get(s.dataId).values),P=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&Y=0&&iej&&(j=pe,X=ee,Z=J)}}}P[X][Z][H]+=D[L][W][U][H]}}}return{dataId:u.write(y.toTypedArray(P,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var O2={kernelName:yb,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:w,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:A,outShape:R}=S.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===R.length,()=>`Error in ${yb}, dy must have the same rank as output ${R.length}, but got ${s.rank}`);let D=y.toNestedArray(R,u.data.get(s.dataId).values),P=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&Y=0&&iej&&(j=pe,X=Y,Z=ie)}}}P[L][X][Z][H]+=D[L][W][U][H]}}}return{dataId:u.write(y.toTypedArray(P,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function La(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,"sum");let i;n.dtype==="bool"?i=Io({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=ar({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=S.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=Ct({inputs:{x:i},backend:t,attrs:{perm:c}}),l=S.getInnerMostAxes(l.length,p)),S.assertAxesAreInnerMostDims("sum",l,m.shape.length);let[d,f]=S.computeOutAndReduceShapes(m.shape,l),h=S.upcastType(m.dtype,"int32"),g=Hp(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let w=0;w=0&&(m=La({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var M2={kernelName:ri,backendName:"cpu",kernelFunc:$j};function Aj(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;K([o,n],"eluGrad");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=1?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var L2={kernelName:km,backendName:"cpu",kernelFunc:Aj};var Rj=S.ERF_P,Fj=S.ERF_A1,Dj=S.ERF_A2,Oj=S.ERF_A3,Pj=S.ERF_A4,Mj=S.ERF_A5,Lj=Ie(ma,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+Rj*t);return e*(1-((((Mj*o+Pj)*o+Oj)*o+Dj)*o+Fj)*o*Math.exp(-t*t))}),B2={kernelName:ma,backendName:"cpu",kernelFunc:Lj};function Jp(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Me({inputs:{x:n},backend:t,attrs:{shape:i}})}var V2={kernelName:bs,backendName:"cpu",kernelFunc:Jp};var Bj=Be((r,e)=>r/e),hl=Qe(Jo,Bj),gl={kernelName:Jo,backendName:"cpu",kernelFunc:hl};function vf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=y.sizeFromShape(u),l=y.getTypedArrayFromDType("float32",c),m=y.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&CMath.floor(r/e)),qj=Qe(sn,Hj,null,"int32"),G2={kernelName:sn,backendName:"cpu",kernelFunc:qj};function Kj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=NS({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;if(c==="NCHW"&&a.shape.length===1&&a.shape[0]!==1){let x=Me({inputs:{x:a},backend:t,attrs:{shape:[a.shape[0],1,1]}});h=js({inputs:{a:h,b:x},backend:t}),t.disposeIntermediateTensorInfo(x)}else h=js({inputs:{a:h,b:a},backend:t});t.disposeIntermediateTensorInfo(g)}if(d){let g=h;if(c==="NCHW"&&d==="prelu"&&i.shape.length===1&&i.shape[0]!==1){let x=Me({inputs:{x:i},backend:t,attrs:{shape:[i.shape[0],1,1]}});h=_u(t,h,d,x,f),t.disposeIntermediateTensorInfo(x)}else h=_u(t,h,d,i,f);t.disposeIntermediateTensorInfo(g)}return h}var H2={kernelName:ho,backendName:"cpu",kernelFunc:Kj};function jj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=TS({inputs:{x:n,filter:s},backend:t,attrs:{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m}});if(a){let g=h;h=js({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(d){let g=h;h=_u(t,h,d,i,f),t.disposeIntermediateTensorInfo(g)}return h}var q2={kernelName:go,backendName:"cpu",kernelFunc:jj};function Xj(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=y.sizeFromShape(o.shape),a=n.shape,i=a[a.length-1],[p,u,c,l]=S.prepareAndValidate(o,n);if(u===0)return t.makeTensorInfo(p,o.dtype,[]);let m=t.data.get(n.dataId).values,d=t.bufferSync(o),f=pf(m,d,o.dtype,u,i,c,l,o.shape,s);return t.makeTensorInfo(p,o.dtype,f.values)}var K2={kernelName:un,backendName:"cpu",kernelFunc:Xj};function Yj(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o;K([n,s],"gatherV2");let p=y.parseAxisParam(a,n.shape)[0],u=t.data.get(s.dataId).values,c=n.shape[p];for(let w=0;w=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=y.sizeFromShape(s.shape),d=S.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=Me({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Me({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),C=cf(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var j2={kernelName:Ss,backendName:"cpu",kernelFunc:Yj};function Qj(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Me({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=vf(i,!0,t),u=Me({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var X2={kernelName:ni,backendName:"cpu",kernelFunc:Qj};var Zj=Ie(fa,r=>Number.isFinite(r)?1:0,"bool"),Y2={kernelName:fa,backendName:"cpu",kernelFunc:Zj};var Jj=Ie(ha,r=>Math.abs(r)===1/0?1:0,"bool"),Q2={kernelName:ha,backendName:"cpu",kernelFunc:Jj};var eX=Ie(ln,r=>Number.isNaN(r)?1:0,"bool"),Z2={kernelName:ln,backendName:"cpu",kernelFunc:eX};function tX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=lf(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var J2={kernelName:xp,backendName:"cpu",kernelFunc:tX};var rX=Ie(ga,r=>Math.log1p(r)),e_={kernelName:ga,backendName:"cpu",kernelFunc:rX};var oX=Be((r,e)=>r&&e),nX=Qe(gn,oX,null,"bool"),t_={kernelName:gn,backendName:"cpu",kernelFunc:nX};var sX=Ie(xn,r=>r?0:1,"bool"),r_={kernelName:xn,backendName:"cpu",kernelFunc:sX};var aX=Be((r,e)=>r||e),iX=Qe(xa,aX,null,"bool"),o_={kernelName:xa,backendName:"cpu",kernelFunc:iX};function uX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;K(n,"LRN");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;x<=b;x++){let w=l[x];C+=w*w}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=ar({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Zp(m,n.shape,n.dtype,d,c,"max");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var i_={kernelName:Cn,backendName:"cpu",kernelFunc:cX};function lX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;K(n,"maxPool3d");let c=S.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=If(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var u_={kernelName:bp,backendName:"cpu",kernelFunc:lX};function mX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;K([n,s],"maxPool3DGrad");let c=S.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=o2(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,w=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,A=w-1-c.padInfo.top,R=le(s.shape,"float32"),D=t.bufferSync(n);for(let P=0;P=c.outDepth||Math.floor(Z)!==Z))for(let ee=0;ee=c.outHeight||Math.floor(Y)!==Y))for(let J=0;J=c.outWidth||Math.floor(ie)!==ie)continue;let pe=C*w*k-1-m.get(P,Z,Y,ie,M),he=X*w*k+ee*k+J,we=pe===he?1:0;if(we===0)continue;let ve=D.get(P,Z,Y,ie,M);j+=ve*we}}}R.set(j,P,L,W,V,M)}return t.makeTensorInfo(R.shape,R.dtype,R.values)}var p_={kernelName:_m,backendName:"cpu",kernelFunc:mX};function dX(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;K([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=S.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=le(m.outShape,i.dtype,wf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,w=m.effectiveFilterWidth,k=w-1-m.padInfo.left,_=C-1-m.padInfo.top,$=le(i.shape,"float32"),A=t.data.get(n.dataId).values,R=le(n.shape,"float32",A);for(let D=0;D=m.outHeight||Math.floor(H)!==H))for(let j=0;j=m.outWidth||Math.floor(X)!==X)continue;let Z=C*w-1-f.get(D,H,X,P),ee=q*w+j,Y=Z===ee?1:0;if(Y===0)continue;let J=R.get(D,H,X,P);U+=J*Y}}$.set(U,D,M,L,P)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var c_={kernelName:Tm,backendName:"cpu",kernelFunc:dX};function l_(r,e,t,o,n){let s=y.computeStrides(e),a=Zp(r,e,t,s,n,"max"),i=wf(r,e,t,n,!0,o);return[a.values,i.values]}var m_={kernelName:Cp,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;K(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=S.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=l_(u,o.shape,o.dtype,i,c),d=p.write(l,c.outShape,o.dtype),f=p.write(m,c.outShape,o.dtype);return[{dataId:d,shape:c.outShape,dtype:o.dtype},{dataId:f,shape:c.outShape,dtype:"int32"}]}};function fX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=S.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Io({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});l.push(d);let f=hl({inputs:{a:d,b:m},backend:t});l.push(f);let h=La({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var d_={kernelName:Sn,backendName:"cpu",kernelFunc:fX};function hX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;K(n,"min");let i=y.parseAxisParam(s,n.shape),p=i,u=S.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:u}}),p=S.getInnerMostAxes(p.length,n.shape.length)),S.assertAxesAreInnerMostDims("min",p,c.shape.length);let[l,m]=S.computeOutAndReduceShapes(c.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let x=0;xC[0]+n.shape[w]+C[1]),p=s.map(C=>C[0]),u=s.map((C,w)=>C[0]+n.shape[w]),c=a==="reflect"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let C=0;C=u[_]&&(w[_]=(u[_]-1)*2-w[_]+c);w=w.map((_,$)=>_-p[$]);let k=y.locToIndex(w,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var h_={kernelName:vn,backendName:"cpu",kernelFunc:gX};var xX=Be((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),yX=Qe(ya,xX),g_={kernelName:ya,backendName:"cpu",kernelFunc:yX};var y_=rp(gC());function $S(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=ES({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=S.expandShapeToKeepDim(u.shape,p),l=Me({inputs:{x:u},backend:t,attrs:{shape:c}}),m=dl({inputs:{a:n,b:l},backend:t}),d=rS({inputs:{x:m},backend:t}),f=La({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=Me({inputs:{x:f},backend:t,attrs:{shape:c}}),g=hl({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var x_={kernelName:qn,backendName:"cpu",kernelFunc:$S};function bX(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;K(n,"multinomial");let p=i?n:$S({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),"int32");for(let f=0;f=0&&l[m]{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Jp({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pi({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var T_={kernelName:vs,backendName:"cpu",kernelFunc:AS};function TX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;K(n,"pad");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=y.sizeFromShape(n.shape),l=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;b_+p[$]),k=y.locToIndex(w,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var kf={kernelName:$n,backendName:"cpu",kernelFunc:TX};var _X=Be((r,e)=>Math.pow(r,e)),EX=Qe(An,_X),__={kernelName:An,backendName:"cpu",kernelFunc:EX};function $X(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,d,f]=df(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var E_={kernelName:wp,backendName:"cpu",kernelFunc:$X};function AX(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=ff(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var $_={kernelName:Ip,backendName:"cpu",kernelFunc:AX};function RX(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=hf(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var A_={kernelName:vp,backendName:"cpu",kernelFunc:RX};function FX(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=Iu(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var R_={kernelName:ks,backendName:"cpu",kernelFunc:FX};var DX=Ie(Dn,r=>1/r),F_={kernelName:Dn,backendName:"cpu",kernelFunc:DX};function OX(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;K(n,"resizeBilinear");let p=y.computeStrides(n.shape),[u,c]=i,[l,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([l,u,c,f])),x=[s&&u>1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,w=x[0]/b[0],k=x[1]/b[1];for(let _=0;_1?u-1:u,a&&d>1?c-1:c],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,w=0;for(let k=0;k1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=x[0]/b[0],w=x[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&f>1?l-1:l],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],C=x[0]/b[0],w=x[1]/b[1],k=1/C,_=1/w,$=Math.ceil(k)*2+2,A=Math.ceil(_)*2+2;for(let R=0;R=d)continue;let Y=D+ee*p[1],J=ee*C,ie=Math.min(c-1,a?Math.round(J):Math.floor(J));if(P===ie)for(let pe=0;pe=f)continue;let we=Y+he*p[2],ve=he*w,$e=Math.min(l-1,a?Math.round(ve):Math.floor(ve));V===$e&&(X+=g[we+j])}}h[U+j]=X}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var M_={kernelName:Em,backendName:"cpu",kernelFunc:LX};function BX(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;K(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return ar({inputs:{x:n},backend:t});let p=new st(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var L_={kernelName:Bn,backendName:"cpu",kernelFunc:BX};var B_={kernelName:es,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[d,f]=S.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let w=0;w=0&&W=0&&V{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),V_={kernelName:Ca,backendName:"cpu",kernelFunc:VX};function zX(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=S.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=Ma(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var z_={kernelName:zn,backendName:"cpu",kernelFunc:zX};function WX(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?KX*r:qX*(Math.exp(r)-1)),H_={kernelName:Xi,backendName:"cpu",kernelFunc:jX};var XX=Ie(Yi,r=>r<0?-1:r>0?1:0),q_={kernelName:Yi,backendName:"cpu",kernelFunc:XX};var YX=Ie(Wn,r=>Math.sin(r)),K_={kernelName:Wn,backendName:"cpu",kernelFunc:YX};var QX=Ie(Sa,r=>Math.sinh(r)),j_={kernelName:Sa,backendName:"cpu",kernelFunc:QX};var ZX=11920928955078125e-23,X_=Math.log(ZX)+2,JX=Ie(Qi,r=>{let e=r>-X_,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var SE={kernelName:Qa,backendName:"cpu",kernelFunc:F5};function D5(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape + ${a.shape}`);let i=t.data.get(o.dataId).values,p=t.data.get(n.dataId).values,u=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values[0],[l,m,d,f,h]=gf(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var Z_={kernelName:ui,backendName:"cpu",kernelFunc:t5};function r5(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape - ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=Nd(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var vE={kernelName:ga,backendName:"cpu",kernelFunc:D5};function P5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=xf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var J_={kernelName:wa,backendName:"cpu",kernelFunc:r5};function o5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=tc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var kE={kernelName:Za,backendName:"cpu",kernelFunc:P5};function O5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Yp(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var eE={kernelName:pi,backendName:"cpu",kernelFunc:o5};function n5(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=tc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var TE={kernelName:Ja,backendName:"cpu",kernelFunc:O5};function M5(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1,d=t.bufferSync(n),h;switch(s.dtype){case"bool":{let g=t.bufferSync(s),y=Boolean(t.data.get(a.dataId).values[0]);h=Aa(d,g,i,m,c,u,p,l,y,f);break}case"float32":{let g=t.bufferSync(s),y=t.data.get(a.dataId).values[0];h=Aa(d,g,i,m,c,u,p,l,y,f);break}case"int32":{let g=t.bufferSync(s),y=t.data.get(a.dataId).values[0];h=Aa(d,g,i,m,c,u,p,l,y,f);break}case"string":{let g=t.bufferSync(s),y=x.decodeString(t.data.get(a.dataId).values[0]);h=Aa(d,g,i,m,c,u,p,l,y,f);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var NE={kernelName:ei,backendName:"cpu",kernelFunc:M5};function L5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let f=qo({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,f})}var _E={kernelName:Ts,backendName:"cpu",kernelFunc:L5};var EE={kernelName:ti,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;K(t,"square");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),$E={kernelName:$s,backendName:"cpu",kernelFunc:B5};function V5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;K(n,"stridedSlice");let{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Oe({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=qo({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Oe({inputs:{x:E},backend:t,attrs:{shape:d}}),t.disposeIntermediateTensorInfo(E)}else{let _=t.bufferSync(n),E=_d(f,_,w,b);k=t.makeTensorInfo(d,E.dtype,E.values)}return k}var RE={kernelName:Yn,backendName:"cpu",kernelFunc:V5};function z5(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,f=t.data.get(l.dataId).values,[d,h]=ku(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],"string",d),t.makeTensorInfo(l.shape,"int32",h)]}var AE={kernelName:Ns,backendName:"cpu",kernelFunc:z5};function W5(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=Tu(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var FE={kernelName:ri,backendName:"cpu",kernelFunc:W5};function U5(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.data.get(s.dataId).values,i=Nu(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var DE={kernelName:oi,backendName:"cpu",kernelFunc:U5};var G5=we(xa,r=>Math.tan(r)),PE={kernelName:xa,backendName:"cpu",kernelFunc:G5};var H5=we(Qn,r=>Math.tanh(r)),OE={kernelName:Qn,backendName:"cpu",kernelFunc:H5};function q5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;K(n,"tile");let a=Ed(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var ME={kernelName:wo,backendName:"cpu",kernelFunc:q5};function K5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;K(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=$d(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var LE={kernelName:Zn,backendName:"cpu",kernelFunc:K5};function j5(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=x.computeStrides(n.shape),b=y[0],C=y[1],w=y[2],k=x.computeStrides(g),_=k[0],E=k[1],R=k[2],A=x.getTypedArrayFromDType(n.dtype,x.sizeFromShape(g));A.fill(p);let D=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return x.clamp(0,t,e-1)}function Y5(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return x.clamp(0,t,e-1)}function Q5(r,e){return r}function Z5(r,e){return x.clamp(0,r,e-1)}function Nl(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(d)),f}var UE={kernelName:Rp,backendName:"cpu",kernelFunc:o8};var n8=[h2,TN,g2,x2,RN,y2,b2,C2,I2,w2,S2,v2,k2,T2,N2,E2,$2,R2,A2,d2,F2,D2,P2,O2,$N,AN,M2,NN,L2,V2,z2,W2,U2,G2,H2,q2,K2,j2,X2,Y2,Q2,Z2,J2,e_,t_,r_,o_,n_,s_,a_,u_,u2,p_,FN,c_,DN,l_,PN,m_,f_,d_,ON,h_,g_,x_,y_,b_,MN,LN,_N,C_,B2,I_,w_,S_,p2,BN,VN,v_,zN,k_,T_,N_,__,E_,$_,R_,WN,A_,F_,D_,P_,M_,L_,B_,UN,V_,z_,G_,GN,HN,H_,q_,K_,qN,j_,Q_,Z_,Od,J_,c2,jN,eE,tE,rE,oE,EN,vl,nE,l2,m2,f2,sE,aE,iE,uE,pE,cE,lE,JN,mE,dE,hE,gE,t2,xE,yE,bE,r2,W_,IE,wE,SE,vE,kE,TE,NE,_E,n2,EE,s2,$E,RE,AE,FE,DE,a2,i_,PE,OE,ME,LE,VE,KN,zE,WE,UE,X_];for(let r of n8)ya(r);var ic={};Be(ic,{assertNotComplex:()=>as,bindCanvasToFramebuffer:()=>f8,bindColorTextureToFramebuffer:()=>Rl,bindTextureToProgramUniformSampler:()=>ZI,bindTextureUnit:()=>KE,bindVertexBufferToProgramAttribute:()=>Wd,callAndCheck:()=>me,canBeRepresented:()=>VI,createFragmentShader:()=>WI,createFramebuffer:()=>XI,createProgram:()=>UI,createStaticIndexBuffer:()=>qI,createStaticVertexBuffer:()=>HI,createTexture:()=>KI,createVertexShader:()=>zI,getBatchDim:()=>Pa,getExtensionOrThrow:()=>nc,getFramebufferErrorMessage:()=>jE,getMaxTexturesInShader:()=>tw,getNumChannels:()=>l8,getProgramUniformLocation:()=>QI,getProgramUniformLocationOrThrow:()=>YI,getRowsCols:()=>Oa,getShapeAs3D:()=>ac,getTextureShapeFromLogicalShape:()=>JI,getWebGLDisjointQueryTimerVersion:()=>rw,getWebGLErrorMessage:()=>qE,getWebGLMaxTextureSize:()=>ew,hasExtension:()=>Hr,isCapableOfRenderingToFloatTexture:()=>ow,isDownloadFloatTextureEnabled:()=>nw,isReshapeFree:()=>Ti,isWebGLFenceEnabled:()=>sw,isWebGLVersionEnabled:()=>Gd,linkProgram:()=>GI,logShaderSourceAndInfoLog:()=>zd,resetMaxTextureSize:()=>d8,resetMaxTexturesInShader:()=>h8,unbindColorTextureFromFramebuffer:()=>Ud,unbindTextureUnit:()=>m8,validateFramebuffer:()=>sc,validateProgram:()=>$l,validateTextureSize:()=>jI});var Eu={},Md={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function MI(r,e){Eu[r]=e}function Gr(r,e){if(!(r in Eu)||e!=null){let o=a8(r,e);if(o!==null)Eu[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=Eu[r];return t==null||t.isContextLost()?(delete Eu[r],Gr(r)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Eu[r])}function s8(r){if(typeof OffscreenCanvas!="undefined"&&r===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function a8(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?s8(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete Eu[r]},!1),P().getBool("SOFTWARE_WEBGL_ENABLED")&&(Md.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",Md)||t.getContext("experimental-webgl",Md):t.getContext("webgl2",Md)}var ki;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(ki||(ki={}));var ir;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(ir||(ir={}));var Jt;(function(r){r[r.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",r[r.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",r[r.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",r[r.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",r[r.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(Jt||(Jt={}));function $u(r,e){return[e,r]}function GE(r,e){return r*e}function _l(r){let e=x.sizeFromShape(r),t=Math.ceil(e/4);return x.sizeToSquarishShape(t)}function Ks(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function HE(r,e){let[t,o]=Ks(r,e);return t*o*4}function El(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return P().getNumber("WEBGL_VERSION")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function me(r,e){let t=e();return P().getBool("DEBUG")&&i8(r),t}function i8(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+qE(r,e))}var u8=596e-10,p8=65504;function VI(r){return!!(P().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||u8r.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function zI(r,e){let t=Da(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(me(r,()=>r.shaderSource(t,e)),me(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error("Failed to compile vertex shader.");return t}function WI(r,e){let t=Da(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(me(r,()=>r.shaderSource(t,e)),me(r,()=>r.compileShader(t)),P().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw zd(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var c8=/ERROR: [0-9]+:([0-9]+):/g;function zd(r,e){let t=c8.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(` -`),s=n.length.toString().length+2,a=n.map((l,m)=>x.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;l{let m=[...c];m[i]=l;let d=No({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var oE={kernelName:$s,backendName:"cpu",kernelFunc:a5};var nE={kernelName:mi,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;K(t,"square");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),sE={kernelName:Ds,backendName:"cpu",kernelFunc:i5};function u5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;K(n,"stridedSlice");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Me({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=No({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Me({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=yf(d,_,w,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var aE={kernelName:jn,backendName:"cpu",kernelFunc:u5};function p5(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,d=t.data.get(l.dataId).values,[f,h]=ku(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var iE={kernelName:As,backendName:"cpu",kernelFunc:p5};function c5(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=Nu(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var uE={kernelName:di,backendName:"cpu",kernelFunc:c5};function l5(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.data.get(s.dataId).values,i=Tu(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var pE={kernelName:fi,backendName:"cpu",kernelFunc:l5};var m5=Ie(Yn,r=>Math.tan(r)),cE={kernelName:Yn,backendName:"cpu",kernelFunc:m5};var d5=Ie(Qn,r=>Math.tanh(r)),lE={kernelName:Qn,backendName:"cpu",kernelFunc:d5};function f5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;K(n,"tile");let a=bf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var mE={kernelName:to,backendName:"cpu",kernelFunc:f5};function h5(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;K(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=Cf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var dE={kernelName:Zn,backendName:"cpu",kernelFunc:h5};function g5(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=y.computeStrides(n.shape),b=x[0],C=x[1],w=x[2],k=y.computeStrides(g),_=k[0],$=k[1],A=k[2],R=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));R.fill(p);let D=o.data.get(n.dataId).values,P=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function y5(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function b5(r,e){return r}function C5(r,e){return y.clamp(0,r,e-1)}function bl(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var yE={kernelName:Np,backendName:"cpu",kernelFunc:k5};var N5=[GT,tT,HT,qT,aT,KT,jT,XT,YT,QT,ZT,JT,e2,t2,r2,n2,s2,a2,i2,UT,u2,p2,c2,l2,sT,iT,m2,rT,d2,h2,g2,x2,y2,b2,C2,S2,w2,I2,v2,k2,N2,T2,_2,E2,$2,A2,R2,F2,D2,O2,M2,MT,L2,uT,B2,pT,V2,cT,z2,W2,U2,lT,G2,H2,q2,K2,j2,mT,dT,oT,X2,f2,Y2,Q2,Z2,LT,fT,hT,J2,gT,e_,t_,r_,o_,n_,s_,a_,xT,i_,u_,p_,c_,m_,d_,f_,yT,h_,g_,b_,bT,CT,C_,S_,w_,ST,I_,N_,T_,kf,__,BT,IT,E_,$_,A_,R_,nT,gl,F_,VT,zT,WT,D_,O_,P_,M_,L_,B_,V_,_T,z_,U_,G_,H_,$T,q_,K_,j_,AT,x_,Y_,Q_,Z_,J_,eE,tE,rE,oE,FT,nE,DT,sE,aE,iE,uE,pE,OT,P2,cE,lE,mE,dE,hE,wT,gE,xE,yE,v_];for(let r of N5)Ia(r);var oc={};Ue(oc,{assertNotComplex:()=>is,bindCanvasToFramebuffer:()=>O5,bindColorTextureToFramebuffer:()=>Il,bindTextureToProgramUniformSampler:()=>KS,bindTextureUnit:()=>wE,bindVertexBufferToProgramAttribute:()=>Af,callAndCheck:()=>ce,canBeRepresented:()=>OS,createFragmentShader:()=>MS,createFramebuffer:()=>GS,createProgram:()=>LS,createStaticIndexBuffer:()=>zS,createStaticVertexBuffer:()=>VS,createTexture:()=>WS,createVertexShader:()=>PS,getBatchDim:()=>Va,getExtensionOrThrow:()=>ec,getFramebufferErrorMessage:()=>IE,getMaxTexturesInShader:()=>YS,getNumChannels:()=>F5,getProgramUniformLocation:()=>qS,getProgramUniformLocationOrThrow:()=>HS,getRowsCols:()=>za,getShapeAs3D:()=>rc,getTextureShapeFromLogicalShape:()=>jS,getWebGLDisjointQueryTimerVersion:()=>QS,getWebGLErrorMessage:()=>SE,getWebGLMaxTextureSize:()=>XS,hasExtension:()=>Ur,isCapableOfRenderingToFloatTexture:()=>ZS,isDownloadFloatTextureEnabled:()=>JS,isReshapeFree:()=>Li,isWebGLFenceEnabled:()=>ew,isWebGLVersionEnabled:()=>Ff,linkProgram:()=>BS,logShaderSourceAndInfoLog:()=>$f,resetMaxTextureSize:()=>P5,resetMaxTexturesInShader:()=>M5,unbindColorTextureFromFramebuffer:()=>Rf,unbindTextureUnit:()=>D5,validateFramebuffer:()=>tc,validateProgram:()=>wl,validateTextureSize:()=>US});var Eu={},Nf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function RS(r,e){Eu[r]=e}function Wr(r,e){if(!(r in Eu)||e!=null){let o=_5(r,e);if(o!==null)Eu[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=Eu[r];return t==null||t.isContextLost()?(delete Eu[r],Wr(r)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),Eu[r])}function T5(r){if(typeof OffscreenCanvas!="undefined"&&r===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function _5(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?T5(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete Eu[r]},!1),O().getBool("SOFTWARE_WEBGL_ENABLED")&&(Nf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",Nf)||t.getContext("experimental-webgl",Nf):t.getContext("webgl2",Nf)}var Mi;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(Mi||(Mi={}));var ir;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(ir||(ir={}));var Zt;(function(r){r[r.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",r[r.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",r[r.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",r[r.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",r[r.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(Zt||(Zt={}));function $u(r,e){return[e,r]}function bE(r,e){return r*e}function Cl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ys(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function CE(r,e){let[t,o]=Ys(r,e);return t*o*4}function Sl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return O().getNumber("WEBGL_VERSION")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function ce(r,e){let t=e();return O().getBool("DEBUG")&&E5(r),t}function E5(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+SE(r,e))}var $5=596e-10,A5=65504;function OS(r){return!!(O().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||$5r.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function PS(r,e){let t=Ba(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error("Failed to compile vertex shader.");return t}function MS(r,e){let t=Ba(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),O().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw $f(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var R5=/ERROR: [0-9]+:([0-9]+):/g;function $f(r,e){let t=R5.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(` +`),s=n.length.toString().length+2,a=n.map((l,m)=>y.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),"Unable to create WebGLProgram.")}function GI(r,e){if(me(r,()=>r.linkProgram(e)),!P().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Failed to link vertex and fragment shaders.")}function $l(r,e){if(me(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function HI(r,e){let t=Da(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),me(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function qI(r,e){let t=Da(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return me(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),me(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function l8(){return P().getNumber("WEBGL_VERSION")===2?1:4}function KI(r){return Da(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function jI(r,e){let t=P().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function XI(r){return Da(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function Wd(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),me(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),me(r,()=>r.enableVertexAttribArray(i)),!0)}function KE(r,e,t){XE(r,t),me(r,()=>r.activeTexture(r.TEXTURE0+t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function m8(r,e){XE(r,e),me(r,()=>r.activeTexture(r.TEXTURE0+e)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function YI(r,e,t){return Da(r,()=>r.getUniformLocation(e,t),'uniform "'+t+'" not present in program.')}function QI(r,e,t){return r.getUniformLocation(e,t)}function ZI(r,e,t,o){me(r,()=>KE(r,e,o)),me(r,()=>r.uniform1i(t,o))}function f8(r){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),me(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),me(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Rl(r,e,t){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),me(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Ud(r,e){me(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),me(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function sc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+jE(r,e))}function jE(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${e}`}}function Da(r,e,t){let o=me(r,()=>e());if(o==null)throw new Error(t);return o}function XE(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function Pa(r,e=2){return x.sizeFromShape(r.slice(0,r.length-e))}function Oa(r){if(r.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function ac(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[Pa(r),...Oa(r)]),e}function JI(r,e=!1){let t=P().getNumber("WEBGL_MAX_TEXTURE_SIZE"),o=P().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");o===1/0&&P().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?x.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=x.squeezeShape(r).newShape);let n=x.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=Pa(r),p=2,u=2;r.length&&([p,u]=Oa(r)),n=i*(p/2)*(u/2),s=x.sizeToSquarishShape(n).map(c=>c*2)}else s=x.sizeToSquarishShape(n);return s}function Ld(r){return r%2===0}function Ti(r,e){if(r=r.slice(-2),e=e.slice(-2),x.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r.slice(-1)[0],o=e.slice(-1)[0];if(t===o||Ld(t)&&Ld(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Ld(r[0])&&Ld(e[0])}var Bd,Vd;function ew(r){if(Bd==null){let e=Gr(r);Bd=e.getParameter(e.MAX_TEXTURE_SIZE)}return Bd}function d8(){Bd=null}function h8(){Vd=null}function tw(r){if(Vd==null){let e=Gr(r);Vd=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Vd)}function rw(r){if(r===0)return 0;let e,t=Gr(r);return Hr(t,"EXT_disjoint_timer_query_webgl2")&&r===2?e=2:Hr(t,"EXT_disjoint_timer_query")?e=1:e=0,e}function Hr(r,e){return r.getExtension(e)!=null}function Gd(r){try{if(Gr(r)!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function ow(r){if(r===0)return!1;let e=Gr(r);if(r===1){if(!Hr(e,"OES_texture_float"))return!1}else if(!Hr(e,"EXT_color_buffer_float"))return!1;return BI(e)}function nw(r){if(r===0)return!1;let e=Gr(r);if(r===1){if(!Hr(e,"OES_texture_float")||!Hr(e,"WEBGL_color_buffer_float"))return!1}else{if(Hr(e,"EXT_color_buffer_float"))return BI(e);let o="EXT_color_buffer_half_float";if(Hr(e,o)){let n=e.getExtension(o);return g8(e,n)}return!1}return BI(e)}function BI(r){let e=El(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,o,n,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function g8(r,e){let t=El(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,n,s,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function sw(r){return r!==2?!1:Gr(r).fenceSync!=null}function as(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Ce=P();Ce.registerFlag("HAS_WEBGL",()=>Ce.getNumber("WEBGL_VERSION")>0);Ce.registerFlag("WEBGL_VERSION",()=>Gd(2)?2:Gd(1)?1:0);Ce.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Ce.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Ce.get("WEBGL_VERSION")===2);Ce.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Ce.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Ce.registerFlag("WEBGL_PACK",()=>Ce.getBool("HAS_WEBGL"));Ce.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_CLIP",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_REDUCE",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_LAZILY_UNPACK",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_CONV_IM2COL",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>ew(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>tw(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Ce.getNumber("WEBGL_VERSION");return r===0?0:rw(r)});Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Ce.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!ii.isMobile());Ce.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>ow(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Ce.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Ce.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Ce.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>nw(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_FENCE_API_ENABLED",()=>sw(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Ce.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Ce.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Ce.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>ii.isMobile()?1:-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Ce.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Ce.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Ce.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Ce.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Ce.registerFlag("WEBGL_EXP_CONV",()=>!1);Ce.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Ce.getBool("IS_TEST"));Ce.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Ce.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Ce.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);function Ct(){let r,e,t,o,n,s,a,i,p,u;return P().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",e="in",t="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=P().getBool("WEBGL2_ISNAN_CUSTOM")?` +`)[0]),console.log(`%c ${y.rightPad(u[0],i)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(c.join(` +`))}function LS(r){return Ba(r,()=>r.createProgram(),"Unable to create WebGLProgram.")}function BS(r,e){if(ce(r,()=>r.linkProgram(e)),!O().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Failed to link vertex and fragment shaders.")}function wl(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function VS(r,e){let t=Ba(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function zS(r,e){let t=Ba(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function F5(){return O().getNumber("WEBGL_VERSION")===2?1:4}function WS(r){return Ba(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function US(r,e){let t=O().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function GS(r){return Ba(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function Af(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function wE(r,e,t){vE(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function D5(r,e){vE(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function HS(r,e,t){return Ba(r,()=>r.getUniformLocation(e,t),'uniform "'+t+'" not present in program.')}function qS(r,e,t){return r.getUniformLocation(e,t)}function KS(r,e,t,o){ce(r,()=>wE(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function O5(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Il(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Rf(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function tc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+IE(r,e))}function IE(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${e}`}}function Ba(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function vE(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function Va(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function za(r){if(r.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function rc(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[Va(r),...za(r)]),e}function jS(r,e=!1){let t=O().getNumber("WEBGL_MAX_TEXTURE_SIZE"),o=O().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");o===1/0&&O().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=Va(r),p=2,u=2;r.length&&([p,u]=za(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Tf(r){return r%2===0}function Li(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r.slice(-1)[0],o=e.slice(-1)[0];if(t===o||Tf(t)&&Tf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Tf(r[0])&&Tf(e[0])}var _f,Ef;function XS(r){if(_f==null){let e=Wr(r);_f=e.getParameter(e.MAX_TEXTURE_SIZE)}return _f}function P5(){_f=null}function M5(){Ef=null}function YS(r){if(Ef==null){let e=Wr(r);Ef=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Ef)}function QS(r){if(r===0)return 0;let e,t=Wr(r);return Ur(t,"EXT_disjoint_timer_query_webgl2")&&r===2?e=2:Ur(t,"EXT_disjoint_timer_query")?e=1:e=0,e}function Ur(r,e){return r.getExtension(e)!=null}function Ff(r){try{if(Wr(r)!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function ZS(r){if(r===0)return!1;let e=Wr(r);if(r===1){if(!Ur(e,"OES_texture_float"))return!1}else if(!Ur(e,"EXT_color_buffer_float"))return!1;return DS(e)}function JS(r){if(r===0)return!1;let e=Wr(r);if(r===1){if(!Ur(e,"OES_texture_float")||!Ur(e,"WEBGL_color_buffer_float"))return!1}else{if(Ur(e,"EXT_color_buffer_float"))return DS(e);let o="EXT_color_buffer_half_float";if(Ur(e,o)){let n=e.getExtension(o);return L5(e,n)}return!1}return DS(e)}function DS(r){let e=Sl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,o,n,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function L5(r,e){let t=Sl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,n,s,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function ew(r){return r!==2?!1:Wr(r).fenceSync!=null}function is(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Ce=O();Ce.registerFlag("HAS_WEBGL",()=>Ce.getNumber("WEBGL_VERSION")>0);Ce.registerFlag("WEBGL_VERSION",()=>Ff(2)?2:Ff(1)?1:0);Ce.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Ce.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Ce.get("WEBGL_VERSION")===2);Ce.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Ce.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Ce.registerFlag("WEBGL_PACK",()=>Ce.getBool("HAS_WEBGL"));Ce.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_CLIP",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_PACK_REDUCE",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_LAZILY_UNPACK",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_CONV_IM2COL",()=>Ce.getBool("WEBGL_PACK"));Ce.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>XS(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>YS(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Ce.getNumber("WEBGL_VERSION");return r===0?0:QS(r)});Ce.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Ce.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!yi.isMobile());Ce.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>ZS(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Ce.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Ce.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Ce.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>JS(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_FENCE_API_ENABLED",()=>ew(Ce.getNumber("WEBGL_VERSION")));Ce.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Ce.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Ce.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Ce.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>yi.isMobile()?1:-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Ce.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Ce.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Ce.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Ce.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Ce.registerFlag("WEBGL_EXP_CONV",()=>!1);Ce.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Ce.getBool("IS_TEST"));Ce.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Ce.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Ce.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Ce.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function St(){let r,e,t,o,n,s,a,i,p,u;return O().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",e="in",t="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=O().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function is(r,e,t="index"){let o=x.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function Ru(r,e,t="index"){let o=x.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function x8(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function YE(r,e,t="index"){let o=r.map((s,a)=>a),n=x8(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function uc(r){let e=x.computeStrides(r).map(t=>t.toString());return` + `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function us(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function Au(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function B5(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function kE(r,e,t="index"){let o=r.map((s,a)=>a),n=B5(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function nc(r){let e=y.computeStrides(r).map(t=>t.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z; } -`}function pc(){return` +`}function sc(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var Hd=` +`}var Df=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -147,22 +147,22 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return c / 255.0; } -`;var{getBroadcastDims:QE}=I;function ZE(r,e,t){let o=[];if(r.forEach(f=>{let d=x.sizeFromShape(f.shapeInfo.logicalShape);if(f.shapeInfo.isUniform?o.push(`uniform float ${f.name}${d>1?`[${d}]`:""};`):(o.push(`uniform sampler2D ${f.name};`),o.push(`uniform int offset${f.name};`)),t.enableShapeUniforms){let{uniformShape:h}=qd(t.packedInputs,f.shapeInfo.logicalShape,f.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${f.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${f.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${f.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${f.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${f.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push("uniform int outShape;");break;case 2:o.push("uniform ivec2 outShape;"),o.push("uniform int outShapeStrides;");break;case 3:o.push("uniform ivec3 outShape;"),o.push("uniform ivec2 outShapeStrides;");break;case 4:o.push("uniform ivec4 outShape;"),o.push("uniform ivec3 outShapeStrides;");break;default:break}o.push("uniform ivec2 outTexShape;")}t.customUniforms&&t.customUniforms.forEach(f=>{o.push(`uniform ${f.type} ${f.name}${f.arrayIndex?`[${f.arrayIndex}]`:""};`)});let n=o.join(` -`),s=r.map(f=>y8(f,e,t.packedInputs,t.enableShapeUniforms)).join(` -`),a=e.texShape,i=Ct(),p=I8(i),u,c,l=v8(i);return e.isPacked?(u=b8(e.logicalShape,a,t.enableShapeUniforms),c=S8(i)):(u=C8(e.logicalShape,a,t.enableShapeUniforms),c=w8(i)),t.packedInputs&&(l+=_8),[l,p,c,n,u,s,t.userCode].join(` -`)}function lc(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return V8(r,e);case 1:return W8(r,e);case 2:return G8(r,e);case 3:return q8(r,e);case 4:return j8(r,e);case 5:return X8(r);case 6:return Y8(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function JE(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return B8(r);case 1:return z8(r,e);case 2:return U8(r,e);case 3:return H8(r,e);default:return K8(r,e)}}function y8(r,e,t=!1,o){let n="";t?n+=JE(r,o):n+=lc(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=Q8(r,e):n+=Z8(r,e)),n}function b8(r,e,t){switch(r.length){case 0:return e$();case 1:return E8(r,e,t);case 2:return M8(r,e,t);case 3:return R8(r,e,t);default:return F8(r,e,t)}}function C8(r,e,t){switch(r.length){case 0:return e$();case 1:return $8(r,e,t);case 2:return L8(r,e,t);case 3:return A8(r,e,t);case 4:return D8(r,e,t);case 5:return P8(r,e);case 6:return O8(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function I8(r){return` +`;var{getBroadcastDims:NE}=S;function TE(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:""};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=Of(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push("uniform int outShape;");break;case 2:o.push("uniform ivec2 outShape;"),o.push("uniform int outShapeStrides;");break;case 3:o.push("uniform ivec3 outShape;"),o.push("uniform ivec2 outShapeStrides;");break;case 4:o.push("uniform ivec4 outShape;"),o.push("uniform ivec3 outShapeStrides;");break;default:break}o.push("uniform ivec2 outTexShape;")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let n=o.join(` +`),s=r.map(d=>V5(d,e,t.packedInputs,t.enableShapeUniforms)).join(` +`),a=e.texShape,i=St(),p=U5(i),u,c,l=q5(i);return e.isPacked?(u=z5(e.logicalShape,a,t.enableShapeUniforms),c=H5(i)):(u=W5(e.logicalShape,a,t.enableShapeUniforms),c=G5(i)),t.packedInputs&&(l+=Y5),[l,p,c,n,u,s,t.userCode].join(` +`)}function ic(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return u8(r,e);case 1:return c8(r,e);case 2:return m8(r,e);case 3:return f8(r,e);case 4:return g8(r,e);case 5:return x8(r);case 6:return y8(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function _E(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return i8(r);case 1:return p8(r,e);case 2:return l8(r,e);case 3:return d8(r,e);default:return h8(r,e)}}function V5(r,e,t=!1,o){let n="";t?n+=_E(r,o):n+=ic(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=b8(r,e):n+=C8(r,e)),n}function z5(r,e,t){switch(r.length){case 0:return EE();case 1:return Q5(r,e,t);case 2:return s8(r,e,t);case 3:return J5(r,e,t);default:return t8(r,e,t)}}function W5(r,e,t){switch(r.length){case 0:return EE();case 1:return Z5(r,e,t);case 2:return a8(r,e,t);case 3:return e8(r,e,t);case 4:return r8(r,e,t);case 5:return o8(r,e);case 6:return n8(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function U5(r){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${r.texture2D}(textureSampler, uv).r; } - `}function w8(r){return` + `}function G5(r){return` void setOutput(float val) { ${r.output} = vec4(val, 0, 0, 0); } - `}function S8(r){return` + `}function H5(r){return` void setOutput(vec4 val) { ${r.output} = val; } - `}function v8(r){return`${r.version} + `}function q5(r){return`${r.version} precision highp float; precision highp int; precision highp sampler2D; @@ -217,10 +217,10 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return fract((p3.x + p3.y) * p3.z); } - ${k8} - ${T8} - ${N8} - `}var k8=` + ${K5} + ${j5} + ${X5} + `}var K5=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -232,7 +232,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,T8=` +`,j5=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -240,7 +240,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,N8=` +`,X5=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -249,7 +249,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,_8=` +`,Y5=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -260,11 +260,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } -`;function e$(){return` +`;function EE(){return` int getOutputCoords() { return 0; } - `}function E8(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?` + `}function Q5(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } @@ -293,7 +293,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${o[0]}, ${o[1]})); return 2 * (resTexRC.x * ${o[1]} + resTexRC.y); } - `}function $8(r,e,t){return e[0]===1?t?` + `}function Z5(r,e,t){return e[0]===1?t?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } @@ -321,7 +321,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${e[0]}, ${e[1]})); return resTexRC.x * ${e[1]} + resTexRC.y; } - `}function R8(r,e,t){if(t)return` + `}function J5(r,e,t){if(t)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); @@ -352,15 +352,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec3(b, r, c); } - `}function A8(r,e,t){if(t)return` + `}function e8(r,e,t){if(t)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ru(["r","c","d"],r)} + ${Au(["r","c","d"],r)} return ivec3(r, c, d); } -`;let o=is(["r","c","d"],r);return` +`;let o=us(["r","c","d"],r);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${o} return ivec3(r, c, d); } - `}function F8(r,e,t){if(t)return` + `}function t8(r,e,t){if(t)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -409,15 +409,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec${r.length}(${p}); } - `}function D8(r,e,t){if(t)return` + `}function r8(r,e,t){if(t)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ru(["r","c","d","d2"],r)} + ${Au(["r","c","d","d2"],r)} return ivec4(r, c, d, d2); } - `;let o=is(["r","c","d","d2"],r);return` + `;let o=us(["r","c","d","d2"],r);return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${o} return ivec4(r, c, d, d2); } - `}function P8(r,e){let t=is(["r","c","d","d2","d3"],r);return` + `}function o8(r,e){let t=us(["r","c","d","d2","d3"],r);return` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -437,7 +437,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec5 outShape = ivec5(r, c, d, d2, d3); return outShape; } - `}function O8(r,e){let t=is(["r","c","d","d2","d3","d4"],r);return` + `}function n8(r,e){let t=us(["r","c","d","d2","d3","d4"],r);return` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -448,7 +448,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec6 result = ivec6(r, c, d, d2, d3, d4); return result; } - `}function M8(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(x.arraysEqual(r,e))return t?` + `}function s8(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(y.arraysEqual(r,e))return t?` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); @@ -481,7 +481,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec2(r, c); } - `}function L8(r,e,t){return x.arraysEqual(r,e)?t?` + `}function a8(r,e,t){return y.arraysEqual(r,e)?t?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,15 +535,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${r[1]}; return ivec2(r, c); } - `}function Au(r){return`offset${r}`}function B8(r){let e=r.name,t="get"+e.charAt(0).toUpperCase()+e.slice(1),o=Ct();return` + `}function Ru(r){return`offset${r}`}function i8(r){let e=r.name,t="get"+e.charAt(0).toUpperCase()+e.slice(1),o=St();return` vec4 ${t}() { return ${o.texture2D}(${e}, halfCR); } - `}function V8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return`float ${o}() {return ${t};}`;let[n,s]=r.shapeInfo.texShape;if(n===1&&s===1)return` + `}function u8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return`float ${o}() {return ${t};}`;let[n,s]=r.shapeInfo.texShape;if(n===1&&s===1)return` float ${o}() { return sampleTexture(${t}, halfCR); } - `;let a=Au(t);if(e)return` + `;let a=Ru(t);if(e)return` float ${o}() { vec2 uv = uvFromFlat(${t}TexShape[0], ${t}TexShape[1], ${a}); return sampleTexture(${t}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${i}, ${p}, ${a}); return sampleTexture(${t}, uv); } - `}function z8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1),n=r.shapeInfo.texShape,s=Ct();if(e)return` + `}function p8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1),n=r.shapeInfo.texShape,s=St();if(e)return` vec4 ${o}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${t}TexShape[0]) / 2.0), ceil(float(${t}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -566,15 +566,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${a[0]}, ${a[1]}, index); return ${s.texture2D}(${t}, uv); } - `}function W8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return` + `}function c8(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return` float ${o}(int index) { - ${mc(r)} + ${uc(r)} } `;let n=r.shapeInfo.texShape,s=n[0],a=n[1];if(a===1&&s===1)return` float ${o}(int index) { return sampleTexture(${t}, halfCR); } - `;let i=Au(t);return a===1?e?` + `;let i=Ru(t);return a===1?e?` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${t}TexShape[0])); return sampleTexture(${t}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${a}, index + ${i}); return sampleTexture(${t}, uv); } - `}function U8(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=Ct();if(s!=null&&x.arraysEqual(t,s))return e?` + `}function l8(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=St();if(s!=null&&y.arraysEqual(t,s))return e?` vec4 ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); @@ -628,27 +628,27 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = packedUVfrom2D(${c}, ${u[0]}, ${u[1]}, row, col); return ${p.texture2D}(${o}, uv); } - `}function G8(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape;if(s!=null&&x.arraysEqual(t,s)){if(e)return` + `}function m8(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape;if(s!=null&&y.arraysEqual(t,s)){if(e)return` float ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); return sampleTexture(${o}, uv); } - `;let m=s[0],f=s[1];return` + `;let m=s[0],d=s[1];return` float ${n}(int row, int col) { - vec2 uv = (vec2(col, row) + halfCR) / vec2(${f}.0, ${m}.0); + vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } - `}let{newShape:a,keptDims:i}=x.squeezeShape(t),p=a;if(p.length=1?c="coords = 0;":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(` -`);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(", ");let f="return outputValue;",h=x.sizeFromShape(r.shapeInfo.logicalShape)===1,y=x.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!y)f=` + `}function b8(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=r.shapeInfo.logicalShape.length,a=e.logicalShape.length,i=NE(r.shapeInfo.logicalShape,e.logicalShape),p=_e(a),u=a-s,c,l=["x","y","z","w","u","v"];s===0?c="":a<2&&i.length>=1?c="coords = 0;":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(` +`);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(", ");let d="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=` return vec4(outputValue.xy, outputValue.xy); - `;else if(h&&!y)a===1?f=` + `;else if(h&&!x)a===1?d=` return vec4(outputValue.x, outputValue.x, 0., 0.); - `:f=` + `:d=` return vec4(outputValue.x); - `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?f="return vec4(outputValue.x);":i.indexOf(b)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(C)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}return` + `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?d="return vec4(outputValue.x);":i.indexOf(b)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(C)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${n}() { ${p} coords = getOutputCoords(); ${c} vec4 outputValue = get${o}(${m}); - ${f} + ${d} } - `}function Z8(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&x.arraysEqual(a,s))return` + `}function C8(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return` float ${n}() { return sampleTexture(${t}, resultUV); } - `;let u=_e(p),c=QE(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,f=["x","y","z","w","u","v"];i===0?m="":p<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${f[h+l]} = 0;`).join(` -`);let d="";return p<2&&i>0?d="coords":d=r.shapeInfo.logicalShape.map((h,g)=>`coords.${f[g+l]}`).join(", "),` + `;let u=_e(p),c=NE(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,d=["x","y","z","w","u","v"];i===0?m="":p<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(` +`);let f="";return p<2&&i>0?f="coords":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+l]}`).join(", "),` float ${n}() { ${u} coords = getOutputCoords(); ${m} - return get${o}(${d}); + return get${o}(${f}); } - `}function _e(r){if(r<=1)return"int";if(r===2)return"ivec2";if(r===3)return"ivec3";if(r===4)return"ivec4";if(r===5)return"ivec5";if(r===6)return"ivec6";throw Error(`GPU for rank ${r} is not yet supported`)}function qd(r,e,t){let{newShape:o,keptDims:n}=x.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!x.arraysEqual(e,t)&&o.lengthr[t]).join(", ")}function r$(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=ZE(n,a,e),p=WI(r.gl,i),u=r.createProgram(p);return P().get("ENGINE_COMPILE_ONLY")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},aw(r,e,u))}function aw(r,e,t){let o={},n={},s={},a=[],i,p,u,c=null,l=null;l=r.getUniformLocation(t,"NAN",!1),P().getNumber("WEBGL_VERSION")===1&&(c=r.getUniformLocation(t,"INFINITY",!1));let m=!1;for(let f=0;f{a[d]=r.getUniformLocation(t,f.name,m)}),{uniformLocations:o,customUniformLocations:a,infLoc:c,nanLoc:l,inShapesLocations:n,inTexShapesLocations:s,outShapeLocation:i,outShapeStridesLocation:u,outTexShapeLocation:p}}function t$(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!x.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!x.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function o$(r,e,t,o,n){e.program.enableShapeUniforms||(t$(e.inShapeInfos,t),t$([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),P().getNumber("WEBGL_VERSION")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN),t.forEach((p,u)=>{let c=e.program.variableNames[u],l=e.uniformLocations[c],m=e.uniformLocations[`offset${c}`],f=e.inShapesLocations[`${c}Shape`],d=e.inTexShapesLocations[`${c}TexShape`];if(f){let{uniformShape:h}=qd(e.program.packedInputs,p.shape,p.texData.texShape);switch(h.length){case 1:r.gl.uniform1iv(f,new Int32Array(h));break;case 2:r.gl.uniform2iv(f,new Int32Array(h));break;case 3:r.gl.uniform3iv(f,new Int32Array(h));break;case 4:r.gl.uniform4iv(f,new Int32Array(h));break;default:break}}if(d&&r.gl.uniform2i(d,p.texData.texShape[0],p.texData.texShape[1]),l!=null){if(p.isUniform){if(x.sizeFromShape(p.shape)<2)r.gl.uniform1f(l,p.uniformValues[0]);else{let h=p.uniformValues;h instanceof Float32Array||(h=new Float32Array(h)),r.gl.uniform1fv(l,h)}return}p.texData.slice!=null&&m!=null&&r.gl.uniform1i(m,p.texData.slice.flatOffset),r.setInputMatrixTexture(p.texData.texture.texture,l,u)}});let i=e.outShapeLocation;if(i)switch(o.shape.length){case 1:r.gl.uniform1iv(i,new Int32Array(o.shape));break;case 2:r.gl.uniform2iv(i,new Int32Array(o.shape));break;case 3:r.gl.uniform3iv(i,new Int32Array(o.shape));break;case 4:r.gl.uniform4iv(i,new Int32Array(o.shape));break;default:break}if(e.outShapeStridesLocation){let p=x.computeStrides(o.shape);switch(o.shape.length){case 2:r.gl.uniform1iv(e.outShapeStridesLocation,new Int32Array(p));break;case 3:r.gl.uniform2iv(e.outShapeStridesLocation,new Int32Array(p));break;case 4:r.gl.uniform3iv(e.outShapeStridesLocation,new Int32Array(p));break;default:break}}e.outTexShapeLocation&&r.gl.uniform2i(e.outTexShapeLocation,o.texData.texShape[0],o.texData.texShape[1]),e.program.customUniforms&&n&&e.program.customUniforms.forEach((p,u)=>{let c=e.customUniformLocations[u],l=n[u];if(p.type==="float")r.gl.uniform1fv(c,l);else if(p.type==="vec2")r.gl.uniform2fv(c,l);else if(p.type==="vec3")r.gl.uniform3fv(c,l);else if(p.type==="vec4")r.gl.uniform4fv(c,l);else if(p.type==="int")r.gl.uniform1iv(c,l);else if(p.type==="ivec2")r.gl.uniform2iv(c,l);else if(p.type==="ivec3")r.gl.uniform3iv(c,l);else if(p.type==="ivec4")r.gl.uniform4iv(c,l);else throw Error(`uniform type ${p.type} is not supported yet.`)}),r.executeProgram()}function n$(r,e,t){let o="";e.concat(t).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=qd(r.packedInputs,a.shape,p),m="",f="",d="";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)f=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=x.computeStrides(c);d=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&x.arraysEqual(a.shape,p),y=x.sizeFromShape(a.shape)===1,b=I.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&x.arraysEqual(p,t.texData.texShape),w=r.packedInputs||c.length>2?"":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:""}_${c.length}_${y}_${b}_${g}_${m}_${f}_${d}_${w}_${i}`}else{let p=a.isUniform?"uniform":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+="_"+o+"_"+n+`${P().getNumber("WEBGL_VERSION")}`,s}function lt(r){return P().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var Kd=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=ki.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}function _e(r){if(r<=1)return"int";if(r===2)return"ivec2";if(r===3)return"ivec3";if(r===4)return"ivec4";if(r===5)return"ivec5";if(r===6)return"ivec6";throw Error(`GPU for rank ${r} is not yet supported`)}function Of(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(", ")}function AE(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=TE(n,a,e),p=MS(r.gl,i),u=r.createProgram(p);return O().get("ENGINE_COMPILE_ONLY")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},tw(r,e,u))}function tw(r,e,t){let o={},n={},s={},a=[],i,p,u,c=null,l=null;l=r.getUniformLocation(t,"NAN",!1),O().getNumber("WEBGL_VERSION")===1&&(c=r.getUniformLocation(t,"INFINITY",!1));let m=!1;for(let d=0;d{a[f]=r.getUniformLocation(t,d.name,m)}),{uniformLocations:o,customUniformLocations:a,infLoc:c,nanLoc:l,inShapesLocations:n,inTexShapesLocations:s,outShapeLocation:i,outShapeStridesLocation:u,outTexShapeLocation:p}}function $E(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function RE(r,e,t,o,n){e.program.enableShapeUniforms||($E(e.inShapeInfos,t),$E([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),O().getNumber("WEBGL_VERSION")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN),t.forEach((p,u)=>{let c=e.program.variableNames[u],l=e.uniformLocations[c],m=e.uniformLocations[`offset${c}`],d=e.inShapesLocations[`${c}Shape`],f=e.inTexShapesLocations[`${c}TexShape`];if(d){let{uniformShape:h}=Of(e.program.packedInputs,p.shape,p.texData.texShape);switch(h.length){case 1:r.gl.uniform1iv(d,new Int32Array(h));break;case 2:r.gl.uniform2iv(d,new Int32Array(h));break;case 3:r.gl.uniform3iv(d,new Int32Array(h));break;case 4:r.gl.uniform4iv(d,new Int32Array(h));break;default:break}}if(f&&r.gl.uniform2i(f,p.texData.texShape[0],p.texData.texShape[1]),l!=null){if(p.isUniform){if(y.sizeFromShape(p.shape)<2)r.gl.uniform1f(l,p.uniformValues[0]);else{let h=p.uniformValues;h instanceof Float32Array||(h=new Float32Array(h)),r.gl.uniform1fv(l,h)}return}p.texData.slice!=null&&m!=null&&r.gl.uniform1i(m,p.texData.slice.flatOffset),r.setInputMatrixTexture(p.texData.texture.texture,l,u)}});let i=e.outShapeLocation;if(i)switch(o.shape.length){case 1:r.gl.uniform1iv(i,new Int32Array(o.shape));break;case 2:r.gl.uniform2iv(i,new Int32Array(o.shape));break;case 3:r.gl.uniform3iv(i,new Int32Array(o.shape));break;case 4:r.gl.uniform4iv(i,new Int32Array(o.shape));break;default:break}if(e.outShapeStridesLocation){let p=y.computeStrides(o.shape);switch(o.shape.length){case 2:r.gl.uniform1iv(e.outShapeStridesLocation,new Int32Array(p));break;case 3:r.gl.uniform2iv(e.outShapeStridesLocation,new Int32Array(p));break;case 4:r.gl.uniform3iv(e.outShapeStridesLocation,new Int32Array(p));break;default:break}}e.outTexShapeLocation&&r.gl.uniform2i(e.outTexShapeLocation,o.texData.texShape[0],o.texData.texShape[1]),e.program.customUniforms&&n&&e.program.customUniforms.forEach((p,u)=>{let c=e.customUniformLocations[u],l=n[u];if(p.type==="float")r.gl.uniform1fv(c,l);else if(p.type==="vec2")r.gl.uniform2fv(c,l);else if(p.type==="vec3")r.gl.uniform3fv(c,l);else if(p.type==="vec4")r.gl.uniform4fv(c,l);else if(p.type==="int")r.gl.uniform1iv(c,l);else if(p.type==="ivec2")r.gl.uniform2iv(c,l);else if(p.type==="ivec3")r.gl.uniform3iv(c,l);else if(p.type==="ivec4")r.gl.uniform4iv(c,l);else throw Error(`uniform type ${p.type} is not supported yet.`)}),r.executeProgram()}function FE(r,e,t){let o="";e.concat(t).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=Of(r.packedInputs,a.shape,p),m="",d="",f="";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)d=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=y.computeStrides(c);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=S.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),w=r.packedInputs||c.length>2?"":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:""}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${w}_${i}`}else{let p=a.isUniform?"uniform":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+="_"+o+"_"+n+`${O().getNumber("WEBGL_VERSION")}`,s}function ct(r){return O().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var Pf=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Mi.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=St();this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ru(["r","c","d"],e):is(["r","c","d"],e)} + ${this.enableShapeUniforms?Au(["r","c","d"],e):us(["r","c","d"],e)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}};var jd=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=ki.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}};var Mf=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Mi.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=St();this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ru(["r","c","d"],e):is(["r","c","d"],e)} + ${this.enableShapeUniforms?Au(["r","c","d"],e):us(["r","c","d"],e)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}};var Xd=class{constructor(e){this.variableNames=["A"],this.outTexUsage=ir.DOWNLOAD;let t=Ct();this.outputShape=e,this.userCode=` - ${Hd} + `}};var Lf=class{constructor(e){this.variableNames=["A"],this.outTexUsage=ir.DOWNLOAD;let t=St();this.outputShape=e,this.userCode=` + ${Df} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}};var Yd=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ir.DOWNLOAD;let t=Ct();this.outputShape=e,this.userCode=` - ${Hd} + `}};var Bf=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ir.DOWNLOAD;let t=St();this.outputShape=e,this.userCode=` + ${Df} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}};var tY={R:0,G:1,B:2,A:3},Al=class{constructor(e,t=!1,o="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ct();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let s="result";t&&(s="floor(result * 255. + 0.5)");let a="";for(let i=0;ihw,createBufferFromOutputTexture:()=>yw,createFloat16MatrixTexture:()=>lw,createFloat16PackedMatrixTexture:()=>dw,createFloat32MatrixTexture:()=>cw,createIndexBuffer:()=>pw,createPackedMatrixTexture:()=>fw,createUnsignedBytesMatrixTexture:()=>mw,createVertexBuffer:()=>uw,createVertexShader:()=>iw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Cw,downloadFloat32MatrixFromBuffer:()=>bw,downloadMatrixFromPackedOutputTexture:()=>ww,downloadPackedMatrixFromBuffer:()=>Iw,getInternalFormatForFloat16MatrixTexture:()=>Jd,getInternalFormatForFloat16PackedMatrixTexture:()=>rh,getInternalFormatForFloat32MatrixTexture:()=>Zd,getInternalFormatForPackedMatrixTexture:()=>th,getInternalFormatForUnsignedBytesMatrixTexture:()=>eh,uploadDenseMatrixToTexture:()=>gw,uploadPixelDataToTexture:()=>xw});function iw(r){let e=Ct(),t=`${e.version} + `}};var yw={};Ue(yw,{bindVertexProgramAttributeStreams:()=>cw,createBufferFromOutputTexture:()=>dw,createFloat16MatrixTexture:()=>aw,createFloat16PackedMatrixTexture:()=>pw,createFloat32MatrixTexture:()=>sw,createIndexBuffer:()=>nw,createPackedMatrixTexture:()=>uw,createUnsignedBytesMatrixTexture:()=>iw,createVertexBuffer:()=>ow,createVertexShader:()=>rw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>hw,downloadFloat32MatrixFromBuffer:()=>fw,downloadMatrixFromPackedOutputTexture:()=>xw,downloadPackedMatrixFromBuffer:()=>gw,getInternalFormatForFloat16MatrixTexture:()=>Wf,getInternalFormatForFloat16PackedMatrixTexture:()=>Hf,getInternalFormatForFloat32MatrixTexture:()=>zf,getInternalFormatForPackedMatrixTexture:()=>Gf,getInternalFormatForUnsignedBytesMatrixTexture:()=>Uf,uploadDenseMatrixToTexture:()=>lw,uploadPixelDataToTexture:()=>mw});function rw(r){let e=St(),t=`${e.version} precision highp float; ${e.attribute} vec3 clipSpacePos; ${e.attribute} vec2 uv; @@ -1107,7 +1107,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return zI(r,t)}function uw(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return HI(r,e)}function pw(r){let e=new Uint16Array([0,1,2,2,1,3]);return qI(r,e)}function Fl(r,e,t,o,n,s){jI(e,t);let a=KI(r),i=r.TEXTURE_2D;return me(r,()=>r.bindTexture(i,a)),me(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),me(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),me(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),me(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),P().getNumber("WEBGL_VERSION")===1?me(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):me(r,()=>r.texStorage2D(i,1,o,e,t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function Zd(r){return r.internalFormatFloat}function cw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,Zd(o),o.textureFormatFloat,r.FLOAT)}function Jd(r){return r.internalFormatHalfFloat}function lw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,Jd(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function eh(r){return r.downloadTextureFormat}function mw(r,e,t,o){let[n,s]=$u(e,t);return Fl(r,n,s,eh(o),r.RGBA,r.UNSIGNED_BYTE)}function th(r){return r.internalFormatPackedFloat}function fw(r,e,t,o){let[n,s]=Ks(e,t);return Fl(r,n,s,th(o),r.RGBA,r.FLOAT)}function rh(r){return r.internalFormatPackedHalfFloat}function dw(r,e,t,o){let[n,s]=Ks(e,t);return Fl(r,n,s,rh(o),r.RGBA,o.textureTypeHalfFloat)}function hw(r,e,t){return me(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Wd(r,e,"clipSpacePos",t,3,20,0)&&Wd(r,e,"uv",t,2,20,12)}function gw(r,e,t,o,n,s){me(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),P().getNumber("WEBGL_VERSION")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function xw(r,e,t){me(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?P().getNumber("WEBGL_VERSION")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):P().getNumber("WEBGL_VERSION")===2?me(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):me(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),me(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function yw(r,e,t,o){let n=r.createBuffer();me(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return me(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),me(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),me(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function bw(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function Cw(r,e,t,o){let[n,s]=$u(e,t),a=4,i=new Uint8Array(GE(e*t,a));return me(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function Iw(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(HE(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function ww(r,e,t){let o=new Float32Array(e*t*4);return me(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var Fu=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=P().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,MI(t,e)):this.gl=Gr(t);let o="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),P().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=nc(this.gl,s),Hr(this.gl,a))this.textureHalfFloatExtension=nc(this.gl,a);else if(P().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(o),Hr(this.gl,n))this.colorBufferHalfFloatExtension=nc(this.gl,n);else if(P().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(o="EXT_color_buffer_float",Hr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Hr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=uw(this.gl),this.indexBuffer=pw(this.gl),this.framebuffer=XI(this.gl),this.textureConfig=El(this.gl,this.textureHalfFloatExtension)}get debug(){return P().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;me(e,()=>e.finish()),me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),me(e,()=>e.deleteFramebuffer(this.framebuffer)),me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),me(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),me(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),cw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),lw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),mw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),xw(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),gw(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),dw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),fw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Ud(this.gl,this.framebuffer),this.outputTexture=null),me(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>Cw(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return Iw(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return bw(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=yw(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(P().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>ww(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=iw(t));let o=UI(t);return me(t,()=>t.attachShader(o,this.vertexShader)),me(t,()=>t.attachShader(o,e)),GI(t,o),this.debug&&$l(t,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=hw(t,this.program,this.vertexBuffer)),o}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&me(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&$l(this.gl,this.program),me(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?YI(this.gl,e,t):QI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),me(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),ZI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ks(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&$l(this.gl,this.program),sc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),me(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),me(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=nc(this.gl,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await x.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=rY(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;"setTimeoutCustom"in P().platform&&(o=P().platform.setTimeoutCustom.bind(P().platform)),x.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Rl(this.gl,e,this.framebuffer),this.debug&&sc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Rl(this.gl,this.outputTexture,this.framebuffer),this.debug&&sc(this.gl)):Ud(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Rl(n,e,this.framebuffer),this.debug&&sc(n),this.outputTexture=e,me(n,()=>n.viewport(0,0,t,o)),me(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),me(this.gl,()=>this.gl.scissor(e,t,o,n))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function rY(r){let e=0;for(;e`${r}.${t}`)}function $t(r,e){return e===1?[r]:vw(r,e)}function j$(r,e){if(r===1)return"rc";let t="";for(let o=0;or.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),O().getNumber("WEBGL_VERSION")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function zf(r){return r.internalFormatFloat}function sw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,zf(o),o.textureFormatFloat,r.FLOAT)}function Wf(r){return r.internalFormatHalfFloat}function aw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,Wf(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function Uf(r){return r.downloadTextureFormat}function iw(r,e,t,o){let[n,s]=$u(e,t);return kl(r,n,s,Uf(o),r.RGBA,r.UNSIGNED_BYTE)}function Gf(r){return r.internalFormatPackedFloat}function uw(r,e,t,o){let[n,s]=Ys(e,t);return kl(r,n,s,Gf(o),r.RGBA,r.FLOAT)}function Hf(r){return r.internalFormatPackedHalfFloat}function pw(r,e,t,o){let[n,s]=Ys(e,t);return kl(r,n,s,Hf(o),r.RGBA,o.textureTypeHalfFloat)}function cw(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Af(r,e,"clipSpacePos",t,3,20,0)&&Af(r,e,"uv",t,2,20,12)}function lw(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),O().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function mw(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?O().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):O().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function dw(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function fw(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function hw(r,e,t,o){let[n,s]=$u(e,t),a=4,i=new Uint8Array(bE(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function gw(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(CE(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function xw(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var Fu=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=O().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,RS(t,e)):this.gl=Wr(t),e=this.gl,O().getNumber("WEBGL_VERSION")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension("OES_vertex_array_object");if(s==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),O().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=ec(this.gl,s),Ur(this.gl,a))this.textureHalfFloatExtension=ec(this.gl,a);else if(O().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(o),Ur(this.gl,n))this.colorBufferHalfFloatExtension=ec(this.gl,n);else if(O().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(o="EXT_color_buffer_float",Ur(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Ur(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=ow(this.gl),this.indexBuffer=nw(this.gl),this.framebuffer=GS(this.gl),this.textureConfig=Sl(this.gl,this.textureHalfFloatExtension)}get debug(){return O().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),sw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),aw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),iw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),mw(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),lw(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),pw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),uw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Rf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>hw(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return gw(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return fw(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=dw(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(O().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>xw(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=rw(t));let o=LS(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),BS(t,o);let n;return n=Object.assign(o,{vao:this.createVertexArray()}),this.bindVertexArray(n.vao),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),console.assert(cw(t,n,this.vertexBuffer),"gpgpu_util.bindVertexProgramAttributeStreams not fully successful."),this.debug&&wl(t,n),this.setProgram(n),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&(this.bindVertexArray(this.program.vao),this.debug&&wl(this.gl,this.program)),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?HS(this.gl,e,t):qS(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),KS(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ys(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&wl(this.gl,this.program),tc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=ec(this.gl,O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=v8(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;"setTimeoutCustom"in O().platform&&(o=O().platform.setTimeoutCustom.bind(O().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Il(this.gl,e,this.framebuffer),this.debug&&tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Il(this.gl,this.outputTexture,this.framebuffer),this.debug&&tc(this.gl)):Rf(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Il(n,e,this.framebuffer),this.debug&&tc(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function v8(r){let e=0;for(;e`${r}.${t}`)}function $t(r,e){return e===1?[r]:bw(r,e)}function I$(r,e){if(r===1)return"rc";let t="";for(let o=0;o= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}), cEdge ? 0. : getA(${t[1]}), rEdge ? 0. : getA(${t[2]}), - rEdge || cEdge ? 0. : getA(${t[3]})`}};var hc=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let o="";for(let n=0;n<4;n++){let s="thisRC = rc;";n%2===1&&(s+="thisRC.z += 1;"),n>1&&(s+="thisRC.y += 1;"),o+=` + rEdge || cEdge ? 0. : getA(${t[3]})`}};var lc=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length);let o="";for(let n=0;n<4;n++){let s="thisRC = rc;";n%2===1&&(s+="thisRC.z += 1;"),n>1&&(s+="thisRC.y += 1;"),o+=` ${s} ${n>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); @@ -1146,8 +1146,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${oY(t,this.enableShapeUniforms)} - ${this.enableShapeUniforms?pc():uc(e)} + ${k8(t,this.enableShapeUniforms)} + ${this.enableShapeUniforms?sc():nc(e)} void main() { ivec3 rc = getOutputCoords(); @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function oY(r,e){return` + `}};function k8(r,e){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${e?YE(["r","c","d"],"inputShape"):is(["r","c","d"],r)} + ${e?kE(["r","c","d"],"inputShape"):us(["r","c","d"],r)} return ivec3(r, c, d); } - `}var ih=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,o){let n=Y$(t,o),s=Q$(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=X$(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].shift();return this.usedTextures[s].push(p),p}let i;return n===Jt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===Jt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===Jt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===Jt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===Jt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=Y$(o,n),a=Q$(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=X$(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=P().get("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(e);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function nY(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function X$(r,e,t,o,n){let s=sY(e,o),a;if(n){let[p,u]=Ks(r[0],r[1]);a=p*u}else{let[p,u]=$u(r[0],r[1]);a=p*u}let i=nY(t,s);return a*i}function sY(r,e){switch(r){case Jt.PACKED_2X2_FLOAT32:return th(e);case Jt.PACKED_2X2_FLOAT16:return rh(e);case Jt.UNPACKED_FLOAT32:return Zd(e);case Jt.UNPACKED_FLOAT16:return Jd(e);case Jt.PACKED_4X1_UNSIGNED_BYTE:return eh(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function aY(r){return P().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?Jt.PACKED_2X2_FLOAT32:Jt.UNPACKED_FLOAT32:r?Jt.PACKED_2X2_FLOAT16:Jt.UNPACKED_FLOAT16}function Y$(r,e){if(r===ir.UPLOAD)return Jt.PACKED_2X2_FLOAT32;if(r===ir.RENDER||r==null)return aY(e);if(r===ir.DOWNLOAD||r===ir.PIXELS)return Jt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function Q$(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var fr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}var Yf=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,o){let n=k$(t,o),s=N$(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=v$(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].shift();return this.usedTextures[s].push(p),p}let i;return n===Zt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===Zt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===Zt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===Zt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===Zt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=k$(o,n),a=N$(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=v$(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=O().get("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(e);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function N8(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function v$(r,e,t,o,n){let s=T8(e,o),a;if(n){let[p,u]=Ys(r[0],r[1]);a=p*u}else{let[p,u]=$u(r[0],r[1]);a=p*u}let i=N8(t,s);return a*i}function T8(r,e){switch(r){case Zt.PACKED_2X2_FLOAT32:return Gf(e);case Zt.PACKED_2X2_FLOAT16:return Hf(e);case Zt.UNPACKED_FLOAT32:return zf(e);case Zt.UNPACKED_FLOAT16:return Wf(e);case Zt.PACKED_4X1_UNSIGNED_BYTE:return Uf(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function _8(r){return O().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?Zt.PACKED_2X2_FLOAT32:Zt.UNPACKED_FLOAT32:r?Zt.PACKED_2X2_FLOAT16:Zt.UNPACKED_FLOAT16}function k$(r,e){if(r===ir.UPLOAD)return Zt.PACKED_2X2_FLOAT32;if(r===ir.RENDER||r==null)return _8(e);if(r===ir.DOWNLOAD||r===ir.PIXELS)return Zt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function N$(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var Jt=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Vt="if (isnan(x)) return x;",Z$="return x;",kw="return abs(x);";var J$="return (x >= 0.0) ? x : (exp(x) - 1.0);",eR=Vt+` + `}},Bt="if (isnan(x)) return x;",T$="return x;",Cw="return abs(x);";var _$="return (x >= 0.0) ? x : (exp(x) - 1.0);",E$=Bt+` return (x < 0.0) ? 0.0 : x; -`,tR=Vt+` +`,$$=Bt+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Pu="return x;",rR="return 1.0 / (1.0 + exp(-1.0 * x));";var nR="return x;",sR=` +`,Qs="return x;",A$="return 1.0 / (1.0 + exp(-1.0 * x));";var F$="return x;",D$=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -1191,7 +1191,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,aR=` +`,O$=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1201,7 +1201,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,iR=` +`,P$=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1211,7 +1211,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,uR="return 1.0 / (1.0 + exp(-1.0 * x));",No=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` +`,M$="return 1.0 / (1.0 + exp(-1.0 * x));",Ar=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } @@ -1222,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}};var uh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.length,o=$t("rc",t),n=_e(t),s=j$(t,o),a=o.slice(-2),i=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` + `}};var Qf=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ct(this.outputShape.length);let t=e.length,o=$t("rc",t),n=_e(t),s=I$(t,o),a=o.slice(-2),i=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${n} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${i})); } - `}};var uY=Bt.whereImpl,pY=1e-7,cY=1e-4,ph={};function lY(r){return r in ph||(ph[r]={}),ph[r]}var mY=P().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),fY=600;function dY(){return P().global.screen==null?1024:P().global.screen.height*P().global.screen.width*window.devicePixelRatio*fY/1024/1024}var Ni=class extends Jr{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!P().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Fu)t=e;else{let o=Gr(P().getNumber("WEBGL_VERSION"),e);t=new Fu(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Gr(P().getNumber("WEBGL_VERSION"));t=new Fu(o),this.binaryCache=lY(P().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new ih(this.gpgpu),this.numMBBeforeWarning=dY(),this.texData=new rn(this,cr())}nextDataId(){return Ni.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=ac(t),c=new Al(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((P().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||P().getBool("DEBUG"))&&this.checkNumericalProblems(e),o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:ir.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,o,n,s){if(P().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:o,dtype:n,values:t,usage:ir.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new No(i,Pu):m=new fr(i,Pu);let f=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),d=this.readSync(f.dataId);return this.disposeIntermediateTensorInfo(f),d}if(o!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return o;let u=this.activeTimers!=null,c;u&&(c=x.now());let l;if(n==="complex64"){let m=this.readSync(s.real.dataId),f=this.readSync(s.imag.dataId);l=I.mergeRealAndImagArrays(m,f)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=x.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let d=this.pendingRead.get(e);return new Promise(h=>d.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let d;p?d=new No(n,Pu):d=new fr(n,Pu);let h=this.runWebGLProgram(d,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(P().getBool("DEBUG")&&!P().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&P().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,c;if(a!=="complex64"&&P().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let d=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(d.texture.texture,..._l(n))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let l;if(a==="complex64"){let d=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=d[0],g=d[1];l=I.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let d=x.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,d)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let d=this.gpgpu.gl;me(d,()=>d.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),f=this.pendingRead.get(e);return this.pendingRead.delete(e),f.forEach(d=>d(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let f;p?f=new No(s,Pu):f=new fr(s,Pu);let d=this.runWebGLProgram(f,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(d,t);return this.disposeIntermediateTensorInfo(d),h}if(u==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let c=this.decode(e,t.customTexShape),l=cr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ne(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=x.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=x.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let p=await Promise.all(s);i.kernelMs=x.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:x.now(),endMs:null}}endTimer(e){return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=x.now(),e)}async getQueryTime(e){if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=mY){return P().getBool("WEBGL_CPU_FORWARD")&&e.every(o=>this.texData.get(o.dataId).texture==null&&x.sizeFromShape(o.shape)0&&x.isString(o[0])){let s=o.map(a=>x.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new uh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new ah(e.shape),o=!0;return this.runWebGLProgram(t,[e],e.dtype,null,o)}packedReshape(e,t){let o=[Pa(e.shape),...Oa(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[Pa(t),...Oa(t)],a=new hc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=x.sizeFromShape(s),f=t[0]*t[1]*4;x.assert(m<=f,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=ac(s),p;n?p=new jd(i):p=new Kd(i);let u=!0,c=[t!=null?t:_l(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===ki.DENSE){let y=a!=null?a:_l(e.outputShape);p.texShape=y.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),x.sizeFromShape(i.shape)===0)return p.values=x.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(y=>{if(y.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(y.dataId);if(b.texture==null){if(!e.packedInputs&&x.sizeFromShape(y.shape)<=P().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!b.isPacked!=!!e.packedInputs)y=b.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),b=this.texData.get(y.dataId);else if(b.isPacked&&!Ti(b.shape,y.shape)){let C=y,w=y.shape;y.shape=b.shape,y=this.packedReshape(y,w),u.push(y),b=this.texData.get(y.dataId),C.shape=w}return{shape:y.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=n$(e,c,l),f=this.getAndSaveBinary(m,()=>r$(this.gpgpu,e,c,l)),d=this.activeTimers!=null,h;d&&(h=this.startTimer()),P().get("ENGINE_COMPILE_ONLY")||o$(this.gpgpu,f,c,l,n),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),d&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=P().get("WEBGL_FLUSH_THRESHOLD");if(g>0){let y=x.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!P().getBool("WEBGL_LAZILY_UNPACK")&&p.isPacked&&s===!1){let y=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),y}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(P().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Ne(()=>{if(!P().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=P().getBool("DEBUG");P().set("DEBUG",!1);let t=this.abs(be(1e-8)).dataSync()[0];if(P().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?pY:cY}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=x.now());let l=t.texShape;if(l==null&&(l=JI(o,p),t.texShape=l),s!=null){let m=ac(o),f,d=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([d,h]=Ks(l[0],l[1])),p?f=new Qd(m,g):f=new Al(m,g);let y=g?[h,d]:l,b=this.makeTensorInfo(y,n),C=this.texData.get(b.dataId);g?C.usage=ir.PIXELS:C.usage=ir.UPLOAD,C.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),d,h,s);let w=[[h,d]],k=!0,_=this.runWebGLProgram(f,[b],n,w,k),E=this.texData.get(_.dataId);t.texShape=E.texShape,t.isPacked=E.isPacked,t.usage=E.usage,P().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(t.texture=E.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=x.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return this.releaseGPUData(e),t!=null&&(o.values=hY(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*x.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await kC(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(zd(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,inShapesLocations:a,inTexShapesLocations:i,outShapeLocation:p,outShapeStridesLocation:u,outTexShapeLocation:c}=aw(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.inShapesLocations=a,e.inTexShapesLocations=i,e.outShapeLocation=p,e.outShapeStridesLocation=u,e.outTexShapeLocation=c}}createTensorFromTexture(e,t,o){let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Ni.nextDataId=0;function hY(r,e){if(e==="float32"||e==="complex64")return r;if(e==="int32"||e==="bool"){let t=e==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Ni,2);var R9e={forceHalfFloat:pR};var gc=` + `}};var $8=Lt.whereImpl,A8=1e-7,R8=1e-4,Zf={};function F8(r){return r in Zf||(Zf[r]={}),Zf[r]}var D8=O().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),O8=600;function P8(){return O().global.screen==null?1024:O().global.screen.height*O().global.screen.width*window.devicePixelRatio*O8/1024/1024}var Bi=class extends Zr{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!O().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Fu)t=e;else{let o=Wr(O().getNumber("WEBGL_VERSION"),e);t=new Fu(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Wr(O().getNumber("WEBGL_VERSION"));t=new Fu(o),this.binaryCache=F8(O().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Yf(this.gpgpu),this.numMBBeforeWarning=P8(),this.texData=new Do(this,cr())}nextDataId(){return Bi.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=rc(t),c=new vl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((O().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||O().getBool("DEBUG"))&&this.checkNumericalProblems(e),o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:ir.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,o,n,s){if(O().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:o,dtype:n,values:t,usage:ir.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Ar(i,Qs):m=new Jt(i,Qs);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return o;let u=this.activeTimers!=null,c;u&&(c=y.now());let l;if(n==="complex64"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);l=S.mergeRealAndImagArrays(m,d)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Ar(n,Qs):f=new Jt(n,Qs);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(O().getBool("DEBUG")&&!O().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&O().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,c;if(a!=="complex64"&&O().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...Cl(n))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let l;if(a==="complex64"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];l=S.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let d;p?d=new Ar(s,Qs):d=new Jt(s,Qs);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let c=this.decode(e,t.customTexShape),l=cr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return le(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(O().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=D8){return O().getBool("WEBGL_CPU_FORWARD")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new Qf(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new Xf(e.shape),o=!0;return this.runWebGLProgram(t,[e],e.dtype,null,o)}packedReshape(e,t){let o=[Va(e.shape),...za(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[Va(t),...za(t)],a=new lc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=rc(s),p;n?p=new Mf(i):p=new Pf(i);let u=!0,c=[t!=null?t:Cl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===Mi.DENSE){let x=a!=null?a:Cl(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(x=>{if(x.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=O().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!Li(b.shape,x.shape)){let C=x,w=x.shape;x.shape=b.shape,x=this.packedReshape(x,w),u.push(x),b=this.texData.get(x.dataId),C.shape=w}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=FE(e,c,l),d=this.getAndSaveBinary(m,()=>AE(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),O().get("ENGINE_COMPILE_ONLY")||RE(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=O().get("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!O().getBool("WEBGL_LAZILY_UNPACK")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(O().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Ee(()=>{if(!O().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=O().getBool("DEBUG");O().set("DEBUG",!1);let t=this.abs(be(1e-8)).dataSync()[0];if(O().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?A8:R8}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=t.texShape;if(l==null&&(l=jS(o,p),t.texShape=l),s!=null){let m=rc(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ys(l[0],l[1])),p?d=new Vf(m,g):d=new vl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=ir.PIXELS:C.usage=ir.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let w=[[h,f]],k=!0,_=this.runWebGLProgram(d,[b],n,w,k),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,O().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(t.texture=$.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=M8(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await CC(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?($f(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,inShapesLocations:a,inTexShapesLocations:i,outShapeLocation:p,outShapeStridesLocation:u,outTexShapeLocation:c}=tw(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.inShapesLocations=a,e.inTexShapesLocations=i,e.outShapeLocation=p,e.outShapeStridesLocation=u,e.outTexShapeLocation=c}}createTensorFromTexture(e,t,o){let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Bi.nextDataId=0;function M8(r,e){if(e==="float32"||e==="complex64")return r;if(e==="int32"||e==="bool"){let t=e==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Bi,2);var L9e={forceHalfFloat:L$};var mc=` if (isnan(a)) return a; if (isnan(b)) return b; -`;var _o=class{constructor(e,t,o){this.variableNames=["A","B"],this.outputShape=I.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` +`;var io=class{constructor(e,t,o){this.variableNames=["A","B"],this.outputShape=S.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ct(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } @@ -1242,12 +1242,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } - `}};var js=` + `}};var Zs=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; -`;var Ko=class{constructor(e,t,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=I.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=lt(s);let a="";if(n)if(s===0||x.sizeFromShape(this.outputShape)===1)a=` +`;var To=class{constructor(e,t,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=S.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ct(s);let a="";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function Rt(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var cR={kernelName:uo,backendName:"webgl",kernelFunc:Rt};function Ar(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.texData.get(s.dataId),i=Rt({inputs:{x:o},backend:t}),p=Rt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lR={kernelName:aa,backendName:"webgl",kernelFunc:Ar};var Tw="return (a < 0.) ? b * a : a;",Nw=` + `}};function At(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var B$={kernelName:mo,backendName:"webgl",kernelFunc:At};function Rr(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.texData.get(s.dataId),i=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var V$={kernelName:ei,backendName:"webgl",kernelFunc:Rr};var Sw="return (a < 0.) ? b * a : a;",ww=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function xY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],"float32",x.createScalarValue(s,"float32")),i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ko(Nw,n.shape,a.shape):new _o(Tw,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],"float32");return t.disposeIntermediateTensorInfo(a),p}var mR={kernelName:Nn,backendName:"webgl",kernelFunc:xY};var _w="return (a < 0.) ? b * a : a;",Ew=` +`;function B8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=O().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new To(ww,n.shape,a.shape):new io(Sw,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],"float32");return t.disposeIntermediateTensorInfo(a),p}var z$={kernelName:mn,backendName:"webgl",kernelFunc:B8};var Iw="return (a < 0.) ? b * a : a;",vw=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function yY(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ko(Ew,o.shape,n.shape):new _o(_w,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],"float32")}var fR={kernelName:Vn,backendName:"webgl",kernelFunc:yY};var jo="if (isnan(x)) return x;";function he({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=P().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&e!=null,c;return u?c=new No(a.shape,e):c=new fr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function ot({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype==="complex64"){let d=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,y]=[[d.complexTensorInfos.real,h.complexTensorInfos.real],[d.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[w,k]=C,_={dataId:w.dataId,dtype:w.dtype,shape:p.shape},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new _o(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],ct(w.dtype,k.dtype))}),b=Ar({inputs:{real:g,imag:y},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(y),b}let l=s||ct(p.dtype,u.dtype);if((p.dtype==="string"||u.dtype==="string"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let d=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype==="string"?I.fromUint8ToStringArray(d):d,y=p.dtype==="string"?I.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,y,l),w=c.makeTensorInfo(C,l),k=c.texData.get(w.dataId);return k.values=b,w}let m=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&e!=null,f;return m?f=new Ko(e,p.shape,u.shape,t):f=new _o(r,p.shape,u.shape),c.runWebGLProgram(f,[p,u],l)}}function Ma(r,e=!1){if(r==="linear")return e?nR:Z$;if(r==="relu")return e?aR:eR;if(r==="elu")return e?sR:J$;if(r==="relu6")return e?iR:tR;if(r==="prelu")return e?Ew:_w;if(r==="leakyrelu")return e?Nw:Tw;if(r==="sigmoid")return e?uR:rR;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var xc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=lt(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?"i * 2, rc.y":"rc.y, i * 2",f=s?"rc.z, i * 2":"i * 2, rc.z",d=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",y="";i&&(p?g=`vec4 activation(vec4 a) { +`;function V8(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=O().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new To(vw,o.shape,n.shape):new io(Iw,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],"float32")}var W$={kernelName:Rn,backendName:"webgl",kernelFunc:V8};var _o="if (isnan(x)) return x;";function ge({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=O().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&e!=null,c;return u?c=new Ar(a.shape,e):c=new Jt(a.shape,r),i.runWebGLProgram(c,[a],p)}}function tt({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype==="complex64"){let f=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[w,k]=C,_={dataId:w.dataId,dtype:w.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},A=new io(r,p.shape,u.shape);return c.runWebGLProgram(A,[_,$],dt(w.dtype,k.dtype))}),b=Rr({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),b}let l=s||dt(p.dtype,u.dtype);if((p.dtype==="string"||u.dtype==="string"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let f=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype==="string"?S.fromUint8ToStringArray(f):f,x=p.dtype==="string"?S.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),w=c.makeTensorInfo(C,l),k=c.texData.get(w.dataId);return k.values=b,w}let m=O().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&e!=null,d;return m?d=new To(e,p.shape,u.shape,t):d=new io(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function Wa(r,e=!1){if(r==="linear")return e?F$:T$;if(r==="relu")return e?O$:E$;if(r==="elu")return e?D$:_$;if(r==="relu6")return e?P$:$$;if(r==="prelu")return e?vw:Iw;if(r==="leakyrelu")return e?ww:Sw;if(r==="sigmoid")return e?M$:A$;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var dc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=ct(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",f=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";i&&(p?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:u?g=`vec4 activation(vec4 a) { @@ -1305,7 +1305,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i} }`:g=`vec4 activation(vec4 x) { ${i} - }`,y="result = activation(result);");let b=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),u&&this.variableNames.push("leakyreluAlpha");let C="rc.x",w="rc.x";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!Ti(n.shape,p)&&!(c.texture!==null&&Ti(c.shape,p))?gR(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var xR={kernelName:Ss,backendName:"webgl",kernelFunc:J};var Ol=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${x.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%o>0&&(c=` + `}};var U$="return a * b;";function Tl(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=S.upcastType(o.dtype,n.dtype);if(o.dtype==="complex64"){let i=t.texData.get(o.dataId),p=t.texData.get(n.dataId),u=new Nl(kw.REAL,o.shape,n.shape),c=new Nl(kw.IMAG,o.shape,n.shape),l=[{dataId:i.complexTensorInfos.real.dataId,dtype:i.complexTensorInfos.real.dtype,shape:o.shape},{dataId:i.complexTensorInfos.imag.dataId,dtype:i.complexTensorInfos.imag.dtype,shape:o.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:n.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:n.shape}],m=t.runWebGLProgram(u,l,"float32"),d=t.runWebGLProgram(c,l,"float32"),f=Rr({inputs:{real:m,imag:d},backend:t});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}if(t.shouldExecuteOnCPU([o,n])){let i=t.texData.get(o.dataId),p=t.texData.get(n.dataId),[u,c]=e$(o.shape,n.shape,i.values,p.values,s),l=t.makeTensorInfo(c,s),m=t.texData.get(l.dataId);return m.values=u,l}let a;return O().getBool("WEBGL_PACK_BINARY_OPERATIONS")?a=new To(U$,o.shape,n.shape):a=new io(U$,o.shape,n.shape),t.runWebGLProgram(a,[o,n],s)}var G$={kernelName:kn,backendName:"webgl",kernelFunc:Tl};function H$(r,e,t){let o=[Va(r.shape),...za(r.shape)],n={dtype:r.dtype,shape:o,dataId:r.dataId},s=[Va(e),...za(e)],a=new lc(s,o),i=!0,p=[o],u=t.runWebGLProgram(a,[n],r.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}function te(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=t,i=y.sizeFromShape(n.shape),p=y.inferFromImplicitShape(s,i),u=y.sizeFromShape(p);y.assert(i===u,()=>`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!Li(n.shape,p)&&!(c.texture!==null&&Li(c.shape,p))?H$(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var q$={kernelName:Ns,backendName:"webgl",kernelFunc:te};var _l=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%o>0&&(c=` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } @@ -1402,7 +1402,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(sumValue); } - `}};var ch=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i="0.0",p="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",p="min"):t==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let c=Math.floor(o/4)*4,l=o%4,m=` + `}};var Jf=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i="0.0",p="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",p="min"):t==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let c=Math.floor(o/4)*4,l=o%4,m=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { @@ -1418,15 +1418,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } } } - `,f="vec4";t==="all"?(i="1.0",m=` + `,d="vec4";t==="all"?(i="1.0",m=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); - `,f="bvec4"):t==="any"&&(i="0.0",m=` + `,d="bvec4"):t==="any"&&(i="0.0",m=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); - `,f="bvec4");let d="";s%o>0&&(d=` + `,d="bvec4");let f="";s%o>0&&(f=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } @@ -1435,7 +1435,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { - ${d} + ${f} return getX(batch, inIdx); } @@ -1453,7 +1453,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1465,7 +1465,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int inIdx = inOffset + ${c}; if (${l===1}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, @@ -1474,7 +1474,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${m} } else if (${l===2}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, @@ -1483,7 +1483,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${m} } else if (${l===3}) { - ${f} values = ${f}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${u}); } - `}};function CY(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=I.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function qr(r,e,t,o){let n=CY(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=_e(this.rank),s=vw("rc",this.rank),a=new Array(this.rank);for(let c=0;c6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=_e(this.rank),s=bw("rc",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[y,l,f]:[y,f,l],_=o?[b,d,m]:[b,m,d],E=J({inputs:{x:r},backend:n,attrs:{shape:k}}),R=J({inputs:{x:e},backend:n,attrs:{shape:_}}),A=[E,R],D=Math.max(y,b),O=t?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,W=p==="leakyrelu",V=p!=null?Ma(p,!0):null,G=M||L||W||V!=null,q;if((f===1||d===1)&&O>Rw&&G===!1){let j=E,Y=R;t&&(j=xt({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),A.push(j)),o&&(Y=xt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),A.push(Y));let Z=d!==1,ee=d===1,X=j;Z&&(X=J({inputs:{x:j},backend:n,attrs:{shape:[D,O,1]}}),A.push(X));let Q=d===1?2:1,se=Y;ee&&(se=J({inputs:{x:Y},backend:n,attrs:{shape:[D,1,O]}}),A.push(se));let ie=Pl({inputs:{a:X,b:se},backend:n});q=Ou({inputs:{x:ie},backend:n,attrs:{axis:Q,keepDims:!0}}),A.push(ie)}else{let j=ct(r.dtype,e.dtype),Y=new xc(k,_,[D,f,d],t,o,M,V,L,W),Z=[E,R];if(s!=null&&Z.push(s),L&&Z.push(a),W){let ee=n.makeTensorInfo([],"float32",x.createScalarValue(i,"float32"));Z.push(ee),A.push(ee)}q=n.runWebGLProgram(Y,Z,j)}let H=J({inputs:{x:q},backend:n,attrs:{shape:w}});A.push(q);for(let j of A)n.disposeIntermediateTensorInfo(j);return H}function wY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Mu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var IR={kernelName:Fo,backendName:"webgl",kernelFunc:wY};var wR="return abs(x);";function SY(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=t.texData.get(o.dataId),a=nh(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return P().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new No(o.shape,wR):n=new fr(o.shape,wR),t.runWebGLProgram(n,[o],o.dtype)}var SR={kernelName:sn,backendName:"webgl",kernelFunc:SY};var vY=Vt+` + `}};function Vi(r,e,t){let o=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new th(r.shape,e):new eh(r.shape,e);return t.runWebGLProgram(o,[r],r.dtype)}function K$(r,e,t,o){let n=e,s=r.shape.length,a=y.parseAxisParam(n,r.shape),i=a,p=S.getAxesPermutation(i,s),u=p!=null,c=r;u&&(c=Vi(r,p,o),i=S.getInnerMostAxes(i.length,s)),S.assertAxesAreInnerMostDims("sum",i,s);let[l,m]=S.computeOutAndReduceShapes(c.shape,i),d=l;t&&(d=S.expandShapeToKeepDim(l,a));let f=y.sizeFromShape(m),g=y.sizeFromShape(r.shape)/f,x=te({inputs:{x:c},attrs:{shape:[g,f]},backend:o}),b=ka(r.dtype),C=Gr(x,b,"sum",o),w=te({inputs:{x:C},attrs:{shape:d},backend:o});return o.disposeIntermediateTensorInfo(x),o.disposeIntermediateTensorInfo(C),u&&o.disposeIntermediateTensorInfo(c),w}function Ou(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return K$(n,s,a,t)}var j$={kernelName:Hn,backendName:"webgl",kernelFunc:Ou};function xt(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{perm:s}=o,a=t,i=n.shape.length,p=new Array(i);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=te({inputs:{x:r},backend:n,attrs:{shape:k}}),A=te({inputs:{x:e},backend:n,attrs:{shape:_}}),R=[$,A],D=Math.max(x,b),P=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,W=p==="leakyrelu",V=p!=null?Wa(p,!0):null,U=M||L||W||V!=null,q;if((d===1||f===1)&&P>Nw&&U===!1){let j=$,X=A;t&&(j=xt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),R.push(j)),o&&(X=xt({inputs:{x:A},backend:n,attrs:{perm:[0,2,1]}}),R.push(X));let Z=f!==1,ee=f===1,Y=j;Z&&(Y=te({inputs:{x:j},backend:n,attrs:{shape:[D,P,1]}}),R.push(Y));let J=f===1?2:1,ie=X;ee&&(ie=te({inputs:{x:X},backend:n,attrs:{shape:[D,1,P]}}),R.push(ie));let pe=Tl({inputs:{a:Y,b:ie},backend:n});q=Ou({inputs:{x:pe},backend:n,attrs:{axis:J,keepDims:!0}}),R.push(pe)}else{let j=dt(r.dtype,e.dtype),X=new dc(k,_,[D,d,f],t,o,M,V,L,W),Z=[$,A];if(s!=null&&Z.push(s),L&&Z.push(a),W){let ee=n.makeTensorInfo([],"float32",y.createScalarValue(i,"float32"));Z.push(ee),R.push(ee)}q=n.runWebGLProgram(X,Z,j)}let H=te({inputs:{x:q},backend:n,attrs:{shape:w}});R.push(q);for(let j of R)n.disposeIntermediateTensorInfo(j);return H}function G8(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Pu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var Y$={kernelName:fo,backendName:"webgl",kernelFunc:G8};var Q$="return abs(x);";function H8(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=t.texData.get(o.dataId),a=Kf(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return O().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Ar(o.shape,Q$):n=new Jt(o.shape,Q$),t.runWebGLProgram(n,[o],o.dtype)}var Z$={kernelName:gs,backendName:"webgl",kernelFunc:H8};var q8=Bt+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,kY=he({opSnippet:vY}),vR={kernelName:Li,backendName:"webgl",kernelFunc:kY};var TY=Vt+` +`,K8=ge({opSnippet:q8}),J$={kernelName:sa,backendName:"webgl",kernelFunc:K8};var j8=Bt+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,backendName:"webgl",kernelFunc:NY};var TR="return a + b;",_Y=ot({opSnippet:TR,packedOpSnippet:TR,supportsComplex:!0,cpuKernelImpl:s$}),NR={kernelName:_r,backendName:"webgl",kernelFunc:_Y};var fh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` +return log(x + sqrt(x * x - 1.0));`,X8=ge({opSnippet:j8}),eA={kernelName:aa,backendName:"webgl",kernelFunc:X8};var tA="return a + b;",Y8=tt({opSnippet:tA,packedOpSnippet:tA,supportsComplex:!0,cpuKernelImpl:DE}),rA={kernelName:eo,backendName:"webgl",kernelFunc:Y8};var rh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1531,7 +1531,7 @@ return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,back float result = ${n}; setOutput(result); } - `}};var dh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` + `}};var oh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1539,7 +1539,7 @@ return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,back vec4 result = ${n}; setOutput(result); } - `}};function hh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Rt({inputs:{x:o[0]},backend:t});if(o.length>P().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(o.length/2),u=hh({inputs:o.slice(0,p),backend:t}),c=hh({inputs:o.slice(p),backend:t});return hh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>ct(p,u)),s=o.map(p=>p.shape),i=P().getBool("WEBGL_PACK")?new dh(o[0].shape,s):new fh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var _R={kernelName:an,backendName:"webgl",kernelFunc:hh};function EY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=I.getInnerMostAxes(u.length,i)),I.assertAxesAreInnerMostDims("all",u,i);let[m,f]=I.computeOutAndReduceShapes(l.shape,u),d=x.sizeFromShape(f),h=J({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}}),g=qr(h,h.dtype,"all",t),y;if(a){let b=I.expandShapeToKeepDim(m,p);y=J({inputs:{x:g},backend:t,attrs:{shape:b}})}else y=J({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),y}var ER={kernelName:oa,backendName:"webgl",kernelFunc:EY};function $Y(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=I.getInnerMostAxes(u.length,i)),I.assertAxesAreInnerMostDims("any",u,i);let[m,f]=I.computeOutAndReduceShapes(l.shape,u),d=x.sizeFromShape(f),h=J({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}}),g=qr(h,h.dtype,"any",t),y;if(a){let b=I.expandShapeToKeepDim(m,p);y=J({inputs:{x:g},backend:t,attrs:{shape:b}})}else y=J({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),y}var $R={kernelName:na,backendName:"webgl",kernelFunc:$Y};var gh=class{constructor(e,t,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=t==="max"?">":"<",p=o?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` + `}};function nh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({inputs:{x:o[0]},backend:t});if(o.length>O().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(o.length/2),u=nh({inputs:o.slice(0,p),backend:t}),c=nh({inputs:o.slice(p),backend:t});return nh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>dt(p,u)),s=o.map(p=>p.shape),i=O().getBool("WEBGL_PACK")?new oh(o[0].shape,s):new rh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var oA={kernelName:Mo,backendName:"webgl",kernelFunc:nh};function Q8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=S.getInnerMostAxes(u.length,i)),S.assertAxesAreInnerMostDims("all",u,i);let[m,d]=S.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Gr(h,h.dtype,"all",t),x;if(a){let b=S.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Lo,backendName:"webgl",kernelFunc:Q8};function Z8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=S.getInnerMostAxes(u.length,i)),S.assertAxesAreInnerMostDims("any",u,i);let[m,d]=S.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Gr(h,h.dtype,"any",t),x;if(a){let b=S.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var sA={kernelName:Bo,backendName:"webgl",kernelFunc:Z8};var sh=class{constructor(e,t,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=t==="max"?">":"<",p=o?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -1559,14 +1559,14 @@ return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,back } setOutput(float(bestIndex)); } - `}};var xh=class{constructor(e,t,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,x.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,p=i.length,u=_e(p),c=$t("coords",p),l,m;if(a===1){m=p+1;let R=_e(m);l=` - ${R} sourceLocR = ${R}(${c.join()}, 0); + `}};var ah=class{constructor(e,t,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,p=i.length,u=_e(p),c=$t("coords",p),l,m;if(a===1){m=p+1;let A=_e(m);l=` + ${A} sourceLocR = ${A}(${c.join()}, 0); ++${c[p-1]}; - ${R} sourceLocG = ${R}(${c.join()}, 0); + ${A} sourceLocG = ${A}(${c.join()}, 0); ++${c[p-2]}; - ${R} sourceLocA = ${R}(${c.join()}, 0); + ${A} sourceLocA = ${A}(${c.join()}, 0); --${c[p-1]}; - ${R} sourceLocB = ${R}(${c.join()}, 0); + ${A} sourceLocB = ${A}(${c.join()}, 0); --${c[p-2]};`}else m=p,l=` ${u} sourceLocR = coords; ++${c[p-1]}; @@ -1575,31 +1575,31 @@ return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,back ${u} sourceLocA = coords; --${c[p-1]}; ${u} sourceLocB = coords; - --${c[p-2]};`;let f=["x","y","z","w","u","v"].slice(0,m),d="."+f[m-1],h=f.map(R=>"int "+R),g=$t("sourceLocR",m-1).concat("inIdx.r"),y=$t("sourceLocG",m-1).concat("inIdx.g"),b=$t("sourceLocB",m-1).concat("inIdx.b"),C=$t("sourceLocA",m-1).concat("inIdx.a"),w=o==="max"?"greaterThan":"lessThan",k=n?"":` + --${c[p-2]};`;let d=["x","y","z","w","u","v"].slice(0,m),f="."+d[m-1],h=d.map(A=>"int "+A),g=$t("sourceLocR",m-1).concat("inIdx.r"),x=$t("sourceLocG",m-1).concat("inIdx.g"),b=$t("sourceLocB",m-1).concat("inIdx.b"),C=$t("sourceLocA",m-1).concat("inIdx.a"),w=o==="max"?"greaterThan":"lessThan",k=n?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), - getBestIndicesAChannel(${y.join()}), + getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), getBestIndicesAChannel(${C.join()})));`,_=`vec4( getAChannel(${g.join()}), - hasNextCol ? getAChannel(${y.join()}) : 0., + hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., - hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,E=n?"":` + hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,$=n?"":` float getBestIndicesAChannel(${h.join()}) { - return getChannel(getBestIndicesA(${f.join()}), - vec2(${f.slice(-2).join()})); + return getChannel(getBestIndicesA(${d.join()}), + vec2(${d.slice(-2).join()})); }`;this.userCode=` float getAChannel(${h.join()}) { - return getChannel(getA(${f.join()}), - vec2(${f.slice(-2).join()})); + return getChannel(getA(${d.join()}), + vec2(${d.slice(-2).join()})); } - ${E} + ${$} void main() { ${u} coords = getOutputCoords(); bool hasNextCol = ${c[p-1]} < ${i[p-1]-1}; bool hasNextRow = ${c[p-2]} < ${i[p-2]-1}; ${l} - ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d}, - sourceLocB${d}, sourceLocA${d}) * ${t}; + ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f}, + sourceLocB${f}, sourceLocA${f}) * ${t}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${_}; @@ -1621,27 +1621,27 @@ return log(x + sqrt(x * x - 1.0));`,NY=he({opSnippet:TY}),kR={kernelName:Bi,back } setOutput(bestIndex); } - `}};function RR(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=I.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new gh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,"int32");if(c.shape[1]===1)return c;let l=RR(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function AR(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=I.computeOptimalWindowSize(s),i=new xh(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===e.shape.length){let c=AR(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function yh(r,e,t,o){let n=[t];if(I.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!P().getBool("WEBGL_PACK_REDUCE")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=I.computeOutAndReduceShapes(p.shape,n),l=x.sizeFromShape(c),m=J({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let f=RR(r,m,o);s.push(f);let d=J({inputs:{x:f},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),d}return AR(r,e,o)}function RY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=yh(t,p,a[0],"max");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var FR={kernelName:un,backendName:"webgl",kernelFunc:RY};function AY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=yh(t,p,a[0],"min");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var DR={kernelName:ja,backendName:"webgl",kernelFunc:AY};var FY=Vt+` + `}};function aA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=S.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new sh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,"int32");if(c.shape[1]===1)return c;let l=aA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function iA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=S.computeOptimalWindowSize(s),i=new ah(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===e.shape.length){let c=iA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function ih(r,e,t,o){let n=[t];if(S.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!O().getBool("WEBGL_PACK_REDUCE")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=S.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=aA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return iA(r,e,o)}function J8(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=ih(t,p,a[0],"max");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Vo,backendName:"webgl",kernelFunc:J8};function eY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=ih(t,p,a[0],"min");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var pA={kernelName:Za,backendName:"webgl",kernelFunc:eY};var tY=Bt+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,DY=he({opSnippet:FY}),PR={kernelName:Vi,backendName:"webgl",kernelFunc:DY};var PY=Vt+"return log(x + sqrt(x * x + 1.0));",OY=he({opSnippet:PY}),OR={kernelName:zi,backendName:"webgl",kernelFunc:OY};var MY=Vt+` +`,rY=ge({opSnippet:tY}),cA={kernelName:ia,backendName:"webgl",kernelFunc:rY};var oY=Bt+"return log(x + sqrt(x * x + 1.0));",nY=ge({opSnippet:oY}),lA={kernelName:ua,backendName:"webgl",kernelFunc:nY};var sY=Bt+` return atan(x); -`,LY=he({opSnippet:MY}),MR={kernelName:Wi,backendName:"webgl",kernelFunc:LY};var BY=gc+` +`,aY=ge({opSnippet:sY}),mA={kernelName:pa,backendName:"webgl",kernelFunc:aY};var iY=mc+` return atan(a, b); -`,VY=` +`,uY=` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - `+js+` + `+Zs+` return result; -`,zY=ot({opSnippet:BY,packedOpSnippet:VY}),LR={kernelName:sa,backendName:"webgl",kernelFunc:zY};var WY=Vt+` +`,pY=tt({opSnippet:iY,packedOpSnippet:uY}),dA={kernelName:la,backendName:"webgl",kernelFunc:pY};var cY=Bt+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelName:Ui,backendName:"webgl",kernelFunc:UY};var us=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.top,d=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,y=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let R=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,lY=ge({opSnippet:cY}),fA={kernelName:ca,backendName:"webgl",kernelFunc:lY};var ps=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let A=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${p}); - const ivec2 pads = ivec2(${f}, ${d}); + const ivec2 pads = ivec2(${d}, ${f}); void main() { ivec4 coords = getOutputCoords(); @@ -1681,16 +1681,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); - if (value ${R} currMinMaxValue) { + if (value ${A} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; - minMaxPosition = ${n?s?g:y:`wR * ${m} + wC`}; + minMaxPosition = ${n?s?g:x:`wR * ${m} + wC`}; } } } setOutput(float(minMaxPosition)); } - `;return}let C="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let k=Math.floor(a/4)*4,_=a%4,E=` + `;return}let C="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let k=Math.floor(a/4)*4,_=a%4,$=` if (${h}) { avgValue += dot(values, ones); } else { @@ -1698,7 +1698,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${p}); - const ivec2 pads = ivec2(${f}, ${d}); + const ivec2 pads = ivec2(${d}, ${f}); const float initializationValue = ${b}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); @@ -1745,7 +1745,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam getValue(batch, xR, xC + 3 * ${c}, d) ); - ${E} + ${$} } int xC = xCCorner + ${k}; @@ -1757,7 +1757,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${E} + ${$} } else if (${_===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -1766,7 +1766,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${E} + ${$} } else if (${_===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -1775,15 +1775,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${E} + ${$} } } setOutput(${w}); } - `}},Ei=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,f=e.effectiveFilterDepth,d=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,y=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t==="avg",w="0.0";if(C||(w="-1.0 / 1e-20"),o){let D=">=";this.userCode=` + `}},zi=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t==="avg",w="0.0";if(C||(w="-1.0 / 1e-20"),o){let D=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${p}, ${u}); - const ivec3 pads = ivec3(${g}, ${y}, ${b}); + const ivec3 pads = ivec3(${g}, ${x}, ${b}); void main() { ivec5 coords = getOutputCoords(); @@ -1801,7 +1801,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float minMaxValueFound = 0.0; int minMaxPosition = 0; - for (int wD = 0; wD < ${f}; + for (int wD = 0; wD < ${d}; wD += ${c}) { int xD = xDCorner + wD; @@ -1809,7 +1809,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam continue; } - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${f}; wR += ${l}) { int xR = xRCorner + wR; @@ -1834,7 +1834,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam if (value ${D} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; - minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${d} * ${h} + + minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} + wR * ${h} + wC`}; } } @@ -1842,7 +1842,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(float(minMaxPosition)); } - `;return}let k="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / count");let E=Math.floor(a/4)*4,R=a%4,A=` + `;return}let k="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / count");let $=Math.floor(a/4)*4,A=a%4,R=` if (${C}) { avgValue += dot(values, ones); } else { @@ -1851,7 +1851,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam `;this.userCode=` const ivec3 strides = ivec3(${i}, ${p}, ${u}); - const ivec3 pads = ivec3(${g}, ${y}, ${b}); + const ivec3 pads = ivec3(${g}, ${x}, ${b}); const float initializationValue = ${w}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); @@ -1881,7 +1881,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float avgValue = 0.0; count = 0.0; - for (int wD = 0; wD < ${f}; + for (int wD = 0; wD < ${d}; wD += ${c}) { int xD = xDCorner + wD; @@ -1889,7 +1889,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam continue; } - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${f}; wR += ${l}) { int xR = xRCorner + wR; @@ -1897,7 +1897,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam continue; } - for (int wC = 0; wC < ${E}; wC += 4) { + for (int wC = 0; wC < ${$}; wC += 4) { int xC = xCCorner + wC * ${m}; vec4 values = vec4( @@ -1907,11 +1907,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam getValue(batch, xD, xR, xC + 3 * ${m}, ch) ); - ${A} + ${R} } - int xC = xCCorner + ${E}; - if (${R===1}) { + int xC = xCCorner + ${$}; + if (${A===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, @@ -1919,8 +1919,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${A} - } else if (${R===2}) { + ${R} + } else if (${A===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${m}, ch), @@ -1928,8 +1928,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${A} - } else if (${R===3}) { + ${R} + } else if (${A===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${m}, ch), @@ -1937,13 +1937,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam initializationValue ); - ${A} + ${R} } } setOutput(${_}); } } - `}};function GY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;as(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;x.assert(I.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))return Rt({inputs:{x:n},backend:t});let l=new us(c,"avg",!1);return t.runWebGLProgram(l,[n],"float32")}var VR={kernelName:pn,backendName:"webgl",kernelFunc:GY};function HY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=I.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new Ei(l,"avg",!1);return t.runWebGLProgram(m,[n],"float32")}var zR={kernelName:ip,backendName:"webgl",kernelFunc:HY};var bh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=` + `}};function mY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;is(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(S.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:t});let l=new ps(c,"avg",!1);return t.runWebGLProgram(l,[n],"float32")}var hA={kernelName:zo,backendName:"webgl",kernelFunc:mY};function dY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=S.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new zi(l,"avg",!1);return t.runWebGLProgram(m,[n],"float32")}var gA={kernelName:ip,backendName:"webgl",kernelFunc:dY};var uh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=` const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${m}); @@ -1985,9 +1985,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},Ch=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,f=e.effectiveFilterWidth,d=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=f-1-e.padInfo.left,y=1/(t*o*n);this.userCode=` - const ivec3 pads = ivec3(${d}, ${h}, ${g}); - const float avgMultiplier = float(${y}); + `}},ph=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=` + const ivec3 pads = ivec3(${f}, ${h}, ${g}); + const float avgMultiplier = float(${x}); void main() { ivec5 coords = getOutputCoords(); @@ -2023,7 +2023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } int idyR = int(dyR); - for (int wC = 0; wC < ${f}; + for (int wC = 0; wC < ${d}; wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}};function qY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=I.computePool3DInfo(a.shape,i,p,l,u,c),f=new Ch(m);return t.runWebGLProgram(f,[n],a.dtype)}var WR={kernelName:Fm,backendName:"webgl",kernelFunc:qY};function KY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;as([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=I.computePool2DInfo(a.shape,i,p,1,u),l=new bh(c);return t.runWebGLProgram(l,[n],a.dtype)}var UR={kernelName:Am,backendName:"webgl",kernelFunc:KY};function jY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Mu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var GR={kernelName:cn,backendName:"webgl",kernelFunc:jY};var Ih=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,o);let i="0.0";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(I.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function fY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=S.computePool3DInfo(a.shape,i,p,l,u,c),d=new ph(m);return t.runWebGLProgram(d,[n],a.dtype)}var xA={kernelName:Im,backendName:"webgl",kernelFunc:fY};function hY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;is([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=S.computePool2DInfo(a.shape,i,p,1,u),l=new uh(c);return t.runWebGLProgram(l,[n],a.dtype)}var yA={kernelName:wm,backendName:"webgl",kernelFunc:hY};function gY(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Pu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var bA={kernelName:Wo,backendName:"webgl",kernelFunc:gY};var ch=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,o);let i="0.0";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(S.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -2051,7 +2051,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}};var wh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,o);let i="vec4(0.0)";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(I.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};var lh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,o);let i="vec4(0.0)";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(S.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${p}; @@ -2064,7 +2064,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam setOutput((x - mean) * inv + offset); } - `}};var XY=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;x.assert(n.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),x.assert(a==null||n.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),x.assert(i==null||n.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=P().getBool("WEBGL_PACK_NORMALIZATION")?new wh(o.shape,n.shape,s.shape,c,l,p):new Ih(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},HR={kernelName:kn,backendName:"webgl",kernelFunc:XY};var Sh=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=_e(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=YY(this.rank),n,s=e.map((a,i)=>`sourceLoc.${Aw[i]} = start[${i}] + coords.${Aw[i]};`);n=` + `}};var xY=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||n.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(i==null||n.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=O().getBool("WEBGL_PACK_NORMALIZATION")?new lh(o.shape,n.shape,s.shape,c,l,p):new ch(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},CA={kernelName:an,backendName:"webgl",kernelFunc:xY};var mh=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=_e(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=yY(this.rank),n,s=e.map((a,i)=>`sourceLoc.${Tw[i]} = start[${i}] + coords.${Tw[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${s.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${n} setOutput(getSource(${o})); } - `}},Aw=["x","y","z","w","u","v"];function YY(r){if(r===1)return"sourceLoc";if(r<=6)return Aw.slice(0,r).map(e=>"sourceLoc."+e).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var vh=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=_e(this.rank),o=$t("coords",this.rank),n=$t("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=` + `}},Tw=["x","y","z","w","u","v"];function yY(r){if(r===1)return"sourceLoc";if(r<=6)return Tw.slice(0,r).map(e=>"sourceLoc."+e).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var dh=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=_e(this.rank),o=$t("coords",this.rank),n=$t("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=` result.x = ${a}; if (++${o[this.rank-1]} < ${e[this.rank-1]}) { ++${n[this.rank-1]}; @@ -2103,7 +2103,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${p} setOutput(result); } - `}};function QY(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=et.computeFlatOffset(e,x.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function ps(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=et.parseSliceParams(n,s,a);if(et.assertParamsValid(n,i,p),x.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.texData.get(n.dataId),m=O$(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=et.isSliceContinous(n.shape,i,p);if(u||!c){let l=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new vh(p):new Sh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),QY(n,i,p,t)}var qR={kernelName:qn,backendName:"webgl",kernelFunc:ps};var ZY=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;x.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=[],d=J({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xt({inputs:{x:d},backend:t,attrs:{perm:u}}),g=J({inputs:{x:h},backend:t,attrs:{shape:c}}),y=ps({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),y},KR={kernelName:hs,backendName:"webgl",kernelFunc:ZY};function JY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=oh(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var jR={kernelName:up,backendName:"webgl",kernelFunc:JY};function eQ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=I.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var XR={kernelName:pp,backendName:"webgl",kernelFunc:eQ};var tQ="return float(a != b);",Fw=ot({opSnippet:tQ,cpuKernelImpl:N$,dtype:"bool"}),YR={kernelName:go,backendName:"webgl",kernelFunc:Fw};function La(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Rt({inputs:{x:n.complexTensorInfos.real},backend:t})}var QR={kernelName:la,backendName:"webgl",kernelFunc:La};var rQ="return float(int(x));";function ZR(r,e){let t=new fr(r.shape,rQ),o=e.runWebGLProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Dw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Rt({inputs:{x:n},backend:t});let a=Wr(n.shape),i=Dw({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=Ar({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=La({inputs:{input:n},backend:t}),i=Dw({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!x.hasEncodingLoss(n.dtype,s)){let a=Rt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=i$(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return ZR(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",x.getTypedArrayFromDType("bool",1)),p=Fw({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var JR={kernelName:to,backendName:"webgl",kernelFunc:Dw};var eA="return ceil(x);",oQ=he({opSnippet:eA,packedOpSnippet:eA,cpuKernelImpl:u$}),tA={kernelName:ro,backendName:"webgl",kernelFunc:oQ};var kh=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}};function bY(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=ut.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function cs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=ut.parseSliceParams(n,s,a);if(ut.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.texData.get(n.dataId),m=l$(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=ut.isSliceContinous(n.shape,i,p);if(u||!c){let l=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new dh(p):new mh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),bY(n,i,p,t)}var SA={kernelName:_s,backendName:"webgl",kernelFunc:cs};var CY=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=cs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},wA={kernelName:xs,backendName:"webgl",kernelFunc:CY};function SY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=qf(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var IA={kernelName:Ja,backendName:"webgl",kernelFunc:SY};function wY(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=S.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var vA={kernelName:up,backendName:"webgl",kernelFunc:wY};var IY="return float(a != b);",_w=tt({opSnippet:IY,cpuKernelImpl:r$,dtype:"bool"}),kA={kernelName:Nn,backendName:"webgl",kernelFunc:_w};function Ua(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var NA={kernelName:ai,backendName:"webgl",kernelFunc:Ua};var vY="return float(int(x));";function TA(r,e){let t=new Jt(r.shape,vY),o=e.runWebGLProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Ew(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return At({inputs:{x:n},backend:t});let a=Vr(n.shape),i=Ew({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=Rr({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=Ua({inputs:{input:n},backend:t}),i=Ew({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=PE(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return TA(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=_w({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var _A={kernelName:co,backendName:"webgl",kernelFunc:Ew};var EA="return ceil(x);",kY=ge({opSnippet:EA,packedOpSnippet:EA,cpuKernelImpl:ME}),$A={kernelName:Uo,backendName:"webgl",kernelFunc:kY};var fh=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { float value = getAAtOutCoords(); @@ -2114,7 +2114,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}};var Th=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}};var hh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { vec4 value = getAAtOutCoords(); @@ -2125,7 +2125,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;P().getBool("WEBGL_PACK_CLIP")?i=new Th(n.shape):i=new kh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var rA={kernelName:Ro,backendName:"webgl",kernelFunc:nQ};var Nh=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function NY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;O().getBool("WEBGL_PACK_CLIP")?i=new hh(n.shape):i=new fh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var AA={kernelName:lo,backendName:"webgl",kernelFunc:NY};var gh=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); @@ -2138,7 +2138,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function oA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function sQ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Nh(o.shape),a=[oA(o,n.complexTensorInfos.real),oA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var nA={kernelName:cp,backendName:"webgl",kernelFunc:sQ};var _h=class{constructor(e){this.outputShape=[],this.outputShape=I.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) { return getChannel( - getT${h}(${Eh(i,u,g)}), - vec2(${Eh(c,u,g)})); - }`}let f=p.length,d=p[p.length-1];m+=` + getT${h}(${yh(i,u,g)}), + vec2(${yh(c,u,g)})); + }`}let d=p.length,f=p[p.length-1];m+=` return getChannel( - getT${f}(${Eh(i,u,d)}), - vec2(${Eh(c,u,d)}));`,this.userCode=` + getT${d}(${yh(i,u,f)}), + vec2(${yh(c,u,f)}));`,this.userCode=` float getValue(${i.map(h=>"int "+h)}) { ${m} } @@ -2184,7 +2184,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(result); } - `}};function Eh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Lu(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Rt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var sA={kernelName:Ya,backendName:"webgl",kernelFunc:Lu};function yc(r,e,t){let o=r[0].dtype;if(o==="complex64"){let l=r.map(g=>La({inputs:{input:g},backend:t})),m=r.map(g=>Lu({inputs:{input:g},backend:t})),f=yc(l,e,t),d=yc(m,e,t),h=Ar({inputs:{real:f,imag:d},backend:t});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),m.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),h}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let l=r.map(b=>{let w=[-1,x.sizeFromShape(b.shape.slice(e))];return J({inputs:{x:b},backend:t,attrs:{shape:w}})}),m=l.map(b=>({vals:t.readSync(b.dataId),shape:b.shape})),f=I.computeOutShape(l.map(b=>b.shape),1),d=l[0].shape[0]===1,h=p$(m,f,o,d),g=I.computeOutShape(r.map(b=>b.shape),e),y=t.makeTensorInfo(g,o,h);return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),y}let s=P().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(r.length>s){let l=[];for(let f=0;f1){let l=new $h(r.map(m=>m.shape),e);return t.runWebGLProgram(l,r,o)}let{tensors2D:a,outShape:i}=aQ(r,e,t),p=new _h(a.map(l=>l.shape)),u=t.runWebGLProgram(p,a,o);a.forEach(l=>t.disposeIntermediateTensorInfo(l));let c=J({inputs:{x:u},attrs:{shape:i},backend:t});return t.disposeIntermediateTensorInfo(u),c}function aQ(r,e,t){let o=I.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>J({inputs:{x:s},attrs:{shape:[-1,x.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function Pw(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=x.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(u=>u.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>x.sizeFromShape(u.shape)>0);return p.length===1?Rt({inputs:{x:p[0]},backend:t}):yc(p,s,t)}var aA={kernelName:gs,backendName:"webgl",kernelFunc:Pw};var bc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat==="channelsLast",y=g?1:2,b=g?2:3,C=g?3:1,w="",k="";o&&(n?w=`float activation(float a) { + `}};function yh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Mu(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:t})}var DA={kernelName:si,backendName:"webgl",kernelFunc:Mu};function fc(r,e,t){let o=r[0].dtype;if(o==="complex64"){let d=r.map(b=>Ua({inputs:{input:b},backend:t})),f=r.map(b=>Mu({inputs:{input:b},backend:t})),h=fc(d,e,t),g=fc(f,e,t),x=Rr({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(w=>{let _=[-1,y.sizeFromShape(w.shape.slice(e))];return te({inputs:{x:w},backend:t,attrs:{shape:_}})}),f=d.map(w=>({vals:t.readSync(w.dataId),shape:w.shape})),h=S.computeOutShape(d.map(w=>w.shape),1),g=d[0].shape[0]===1,x=LE(f,h,o,g),b=S.computeOutShape(r.map(w=>w.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let d=a?new Jt(r[0].shape,Qs):new Ar(r[0].shape,Qs);return t.runWebGLProgram(d,r,o)}let i=O().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=_Y(s,e,t),c=new xh(p.map(d=>d.shape)),l=t.runWebGLProgram(c,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(l),m}function _Y(r,e,t){let o=S.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function $w(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:t}):fc(p,s,t)}var OA={kernelName:ys,backendName:"webgl",kernelFunc:$w};var hc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,C=g?3:1,w="",k="";o&&(n?w=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?w=`float activation(float a) { @@ -2206,7 +2206,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam int d2 = coords[${C}]; ivec2 xRCCorner = - ivec2(coords[${y}], coords[${b}]) * strides - pads; + ivec2(coords[${x}], coords[${b}]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; @@ -2220,14 +2220,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam continue; } - for (int wC = 0; wC < ${f}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${l}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } - for (int d1 = 0; d1 < ${d}; d1 += 4) { + for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), @@ -2258,53 +2258,53 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam if (${g}) { dotProd += - getX(batch, xR, xC, ${d}) * - getW(wR, wC, ${d}, d2); + getX(batch, xR, xC, ${f}) * + getW(wR, wC, ${f}, d2); } else { dotProd += - getX(batch, ${d}, xR, xC) * - getW(wR, wC, ${d}, d2); + getX(batch, ${f}, xR, xC) * + getW(wR, wC, ${f}, d2); } } else if (${h===2}) { vec2 wValues = vec2( - getW(wR, wC, ${d}, d2), - getW(wR, wC, ${d} + 1, d2) + getW(wR, wC, ${f}, d2), + getW(wR, wC, ${f} + 1, d2) ); if (${g}) { vec2 xValues = vec2( - getX(batch, xR, xC, ${d}), - getX(batch, xR, xC, ${d} + 1) + getX(batch, xR, xC, ${f}), + getX(batch, xR, xC, ${f} + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( - getX(batch, ${d}, xR, xC), - getX(batch, ${d} + 1, xR, xC) + getX(batch, ${f}, xR, xC), + getX(batch, ${f} + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (${h===3}) { vec3 wValues = vec3( - getW(wR, wC, ${d}, d2), - getW(wR, wC, ${d} + 1, d2), - getW(wR, wC, ${d} + 2, d2) + getW(wR, wC, ${f}, d2), + getW(wR, wC, ${f} + 1, d2), + getW(wR, wC, ${f} + 2, d2) ); if (${g}) { vec3 xValues = vec3( - getX(batch, xR, xC, ${d}), - getX(batch, xR, xC, ${d} + 1), - getX(batch, xR, xC, ${d} + 2) + getX(batch, xR, xC, ${f}), + getX(batch, xR, xC, ${f} + 1), + getX(batch, xR, xC, ${f} + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( - getX(batch, ${d}, xR, xC), - getX(batch, ${d} + 1, xR, xC), - getX(batch, ${d} + 2, xR, xC) + getX(batch, ${f}, xR, xC), + getX(batch, ${f} + 1, xR, xC), + getX(batch, ${f} + 2, xR, xC) ); dotProd += dot(xValues, wValues); } @@ -2318,7 +2318,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${k} setOutput(result); } - `}},Rh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` + `}},Ch=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${a}, ${i}); const ivec3 pads = ivec3(${t}, ${o}, ${n}); @@ -2350,14 +2350,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam continue; } - for (int wC = 0; wC < ${f}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } - for (int d1 = 0; d1 < ${d}; d1 += 4) { + for (int d1 = 0; d1 < ${f}; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), @@ -2376,28 +2376,28 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam if (${h===1}) { dotProd += - getX(batch, xF, xR, xC, ${d}) * - getW(wF, wR, wC, ${d}, d2); + getX(batch, xF, xR, xC, ${f}) * + getW(wF, wR, wC, ${f}, d2); } else if (${h===2}) { vec2 xValues = vec2( - getX(batch, xF, xR, xC, ${d}), - getX(batch, xF, xR, xC, ${d} + 1) + getX(batch, xF, xR, xC, ${f}), + getX(batch, xF, xR, xC, ${f} + 1) ); vec2 wValues = vec2( - getW(wF, wR, wC, ${d}, d2), - getW(wF, wR, wC, ${d} + 1, d2) + getW(wF, wR, wC, ${f}, d2), + getW(wF, wR, wC, ${f} + 1, d2) ); dotProd += dot(xValues, wValues); } else if (${h===3}) { vec3 xValues = vec3( - getX(batch, xF, xR, xC, ${d}), - getX(batch, xF, xR, xC, ${d} + 1), - getX(batch, xF, xR, xC, ${d} + 2) + getX(batch, xF, xR, xC, ${f}), + getX(batch, xF, xR, xC, ${f} + 1), + getX(batch, xF, xR, xC, ${f} + 2) ); vec3 wValues = vec3( - getW(wF, wR, wC, ${d}, d2), - getW(wF, wR, wC, ${d} + 1, d2), - getW(wF, wR, wC, ${d} + 2, d2) + getW(wF, wR, wC, ${f}, d2), + getW(wF, wR, wC, ${f} + 1, d2), + getW(wF, wR, wC, ${f} + 2, d2) ); dotProd += dot(xValues, wValues); } @@ -2406,7 +2406,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}};var Cc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=` + `}};var gc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) { - `;for(let g=0;g<(l+1)/2;g++){let y=g*2;if(m+=` - xC = xCCorner + ${y*p}; - `,i===1){if(y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - `,p===1&&y>0?m+=` - xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy); + `,p===1&&x>0?m+=` + xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy); `:m+=` xCOffset = xC + 1 - 2; @@ -2452,120 +2452,120 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam previous.zw = vec2(0.0); } - xC${y} = vec4(previous.zw, xTexelC${y}.xy); + xC${x} = vec4(previous.zw, xTexelC${x}.xy); } else { - xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy); + xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy); } `):m+=` - if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - xC${y} = xTexelC${y}; - `,y+1= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } `,p>1?m+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); - xC${y+1} = vec4(previous.zw, xTexelC${y+1}.xy); + xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy); } else { - xC${y+1} = vec4(0.0, 0.0, xTexelC${y+1}.xy); + xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy); } `:m+=` - xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy); + xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy); `):b===1?m+=` - xC${y+1} = xTexelC${y}; + xC${x+1} = xTexelC${x}; `:m+=` xCOffset = xC + ${b}; - if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y+1} = xTexelC${y+1}; - `}}else y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xCOffset + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } - if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xC + 1, d1); + if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xC + 1, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if (xC + 2 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.0); + xTexelC${x+1}.zw = vec2(0.0); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw); - `,y+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } - xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy); + xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy); `)):(m+=` - if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { - xTexelC${y} = getX(batch, xR, xC, d1); + if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) { + xTexelC${x} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { - xTexelC${y}.zw = vec2(0.0); + xTexelC${x}.zw = vec2(0.0); } - xTexelC${y}Ready = 1; + xTexelC${x}Ready = 1; } xCOffset = xC + strides[1]; - if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { - xTexelC${y+1} = getX(batch, xR, xCOffset, d1); + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { + xTexelC${x+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { - xTexelC${y+1}.zw = vec2(0.); + xTexelC${x+1}.zw = vec2(0.); } - xTexelC${y+1}Ready = 1; + xTexelC${x+1}Ready = 1; } - xC${y} = vec4( - xTexelC${y}.xy, xTexelC${y+1}.xy); - `,y+1=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Dh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,f=t.dataFormat==="channelsLast",d=!1,h=!1,g,y=[];if(s!=null){let w=Fh(s.shape,f);w!=null&&(s=J({inputs:{x:s},backend:o,attrs:{shape:w}}),y.push(s))}if(n!=null){let w=Fh(n.shape,f);w!=null&&(n=J({inputs:{x:n},backend:o,attrs:{shape:w}}),y.push(n))}if(!((l===1||m===1)&&c>Rw)&&u.isPacked&&f&&u.texture!=null&&p[2]%2!==0&&x.arraysEqual(u.shape.slice(-3),p.slice(-3))){let w=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,w,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,x.assert(Ti(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=J({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});y.push(E);let R=Mu({a:k,b:E,backend:o,transposeA:d,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),A=o.texData.get(R.dataId);x.assert(A.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=_,A.shape=t.outShape,g=Rt({inputs:{x:R},backend:o}),g.shape=t.outShape,y.push(R)}else{let w=t.outHeight*t.outWidth,k=J({inputs:{x:r},backend:o,attrs:{shape:f?[t.batchSize,w,t.inChannels]:[t.batchSize,t.inChannels,w]}}),_=J({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),E=Mu({a:f?k:_,b:f?_:k,transposeA:!f,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=J({inputs:{x:E},backend:o,attrs:{shape:t.outShape}}),y.push(k),y.push(_),y.push(E)}for(let w of y)o.disposeIntermediateTensorInfo(w);return g}function Ph({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:f}=t,d=f==="channelsLast",h=p*u*c,g=m*l,y=[t.batchSize,h,g],b=!0,C=!1,w=[];if(s!=null){let H=Fh(s.shape,d);H!=null&&(s=J({inputs:{x:s},backend:o,attrs:{shape:H}}),w.push(s))}if(n!=null){let H=Fh(n.shape,d);H!=null&&(n=J({inputs:{x:n},backend:o,attrs:{shape:H}}),w.push(n))}let k=J({inputs:{x:e},backend:o,attrs:{shape:[1,h,x.sizeFromShape(e.shape)/h]}});w.push(k);let _=new Ah(y,t),E=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(_,[r],"float32",E),A=J({inputs:{x:R},backend:o,attrs:{shape:y}});w.push(R),w.push(A);let D=n!=null,O=s!=null,M=i==="leakyrelu",L=i?Ma(i,!0):null,W=new xc(d?A.shape:k.shape,d?k.shape:A.shape,d?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,D,L,O,M),V=d?[A,k]:[k,A];if(n&&V.push(n),O&&V.push(s),M){let H=o.makeTensorInfo([],"float32",x.createScalarValue(a,"float32"));V.push(H),w.push(H)}let G=o.runWebGLProgram(W,V,"float32"),q=J({inputs:{x:G},backend:o,attrs:{shape:t.outShape}});w.push(G);for(let H of w)o.disposeIntermediateTensorInfo(H);return q}function iQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),f;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))f=Dh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l==="channelsLast"&&P().getBool("WEBGL_EXP_CONV")){let h=new Cc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];f=t.runWebGLProgram(h,[n,s],"float32",g)}else if(P().getBool("WEBGL_CONV_IM2COL"))f=Ph({x:n,filter:s,convInfo:m,backend:t});else{let h=new bc(m);f=t.runWebGLProgram(h,[n,s],"float32")}let d=J({inputs:{x:f},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(f),d}var iA={kernelName:ln,backendName:"webgl",kernelFunc:iQ};var Oh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat==="channelsLast";this.userCode=` + `}};function wh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Ih({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat==="channelsLast",f=!1,h=!1,g,x=[];if(s!=null){let w=wh(s.shape,d);w!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:w}}),x.push(s))}if(n!=null){let w=wh(n.shape,d);w!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:w}}),x.push(n))}if(!((l===1||m===1)&&c>Nw)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let w=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,w,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(Li(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let $=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push($);let A=Pu({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),R=o.texData.get(A.dataId);y.assert(R.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=_,R.shape=t.outShape,g=At({inputs:{x:A},backend:o}),g.shape=t.outShape,x.push(A)}else{let w=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,w,t.inChannels]:[t.batchSize,t.inChannels,w]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Pu({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:$},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(_),x.push($)}for(let w of x)o.disposeIntermediateTensorInfo(w);return g}function vh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:d}=t,f=d==="channelsLast",h=p*u*c,g=m*l,x=[t.batchSize,h,g],b=!0,C=!1,w=[];if(s!=null){let H=wh(s.shape,f);H!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:H}}),w.push(s))}if(n!=null){let H=wh(n.shape,f);H!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:H}}),w.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});w.push(k);let _=new Sh(x,t),$=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],A=o.runWebGLProgram(_,[r],"float32",$),R=te({inputs:{x:A},backend:o,attrs:{shape:x}});w.push(A),w.push(R);let D=n!=null,P=s!=null,M=i==="leakyrelu",L=i?Wa(i,!0):null,W=new dc(f?R.shape:k.shape,f?k.shape:R.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,D,L,P,M),V=f?[R,k]:[k,R];if(n&&V.push(n),P&&V.push(s),M){let H=o.makeTensorInfo([],"float32",y.createScalarValue(a,"float32"));V.push(H),w.push(H)}let U=o.runWebGLProgram(W,V,"float32"),q=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});w.push(U);for(let H of w)o.disposeIntermediateTensorInfo(H);return q}function EY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))d=Ih({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l==="channelsLast"&&O().getBool("WEBGL_EXP_CONV")){let h=new gc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],"float32",g)}else if(O().getBool("WEBGL_CONV_IM2COL"))d=vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new hc(m);d=t.runWebGLProgram(h,[n,s],"float32")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var PA={kernelName:Go,backendName:"webgl",kernelFunc:EY};var kh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -2691,7 +2691,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},Mh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` + `}},Nh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { @@ -2744,7 +2744,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},Lh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=` + `}},Th=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; @@ -2786,7 +2786,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},Bh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=` + `}},_h=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${p}, ${u}, ${c}); void main() { @@ -2843,12 +2843,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}};function uQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),f=new Oh(m);return t.runWebGLProgram(f,[n,s],"float32")}var uA={kernelName:lp,backendName:"webgl",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(u),m=I.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),f=new Mh(m);return t.runWebGLProgram(f,[n,s],"float32")}var pA={kernelName:mn,backendName:"webgl",kernelFunc:pQ};function cQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=I.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Rh(u);return t.runWebGLProgram(c,[n,s],"float32")}var cA={kernelName:mp,backendName:"webgl",kernelFunc:cQ};function lQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=I.computeConv3DInfo(n.shape,p,a,1,i),c=new Lh(u);return t.runWebGLProgram(c,[n,s],"float32")}var lA={kernelName:Dm,backendName:"webgl",kernelFunc:lQ};function mQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=I.computeConv3DInfo(p,s.shape,i,1,a),c=new Bh(u);return t.runWebGLProgram(c,[n,s],"float32")}var mA={kernelName:fp,backendName:"webgl",kernelFunc:mQ};var fQ=jo+` + `}};function $Y(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new kh(m);return t.runWebGLProgram(d,[n,s],"float32")}var MA={kernelName:cp,backendName:"webgl",kernelFunc:$Y};function AY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=new Nh(m);return t.runWebGLProgram(d,[n,s],"float32")}var LA={kernelName:Ho,backendName:"webgl",kernelFunc:AY};function RY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=S.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Ch(u);return t.runWebGLProgram(c,[n,s],"float32")}var BA={kernelName:lp,backendName:"webgl",kernelFunc:RY};function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=S.computeConv3DInfo(n.shape,p,a,1,i),c=new Th(u);return t.runWebGLProgram(c,[n,s],"float32")}var VA={kernelName:vm,backendName:"webgl",kernelFunc:FY};function DY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=S.computeConv3DInfo(p,s.shape,i,1,a),c=new _h(u);return t.runWebGLProgram(c,[n,s],"float32")}var zA={kernelName:mp,backendName:"webgl",kernelFunc:DY};var OY=_o+` return cos(x); -`,dQ=he({opSnippet:fQ}),fA={kernelName:fn,backendName:"webgl",kernelFunc:dQ};var hQ=` +`,PY=ge({opSnippet:OY}),WA={kernelName:qo,backendName:"webgl",kernelFunc:PY};var MY=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,gQ=he({opSnippet:hQ}),dA={kernelName:dn,backendName:"webgl",kernelFunc:gQ};var Vh=class{constructor(e,t,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let f=n==="bilinear"?1:0,[d,h]=[`${i-1}.0`,`${p-1}.0`],[g,y,b]=l>1?[`${(i-1)/(l-1)}`,"(y2-y1) * height_ratio",`y1*${d} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${d}`],[C,w,k]=m>1?[`${(p-1)/(m-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=` +`,LY=ge({opSnippet:MY}),UA={kernelName:Ko,backendName:"webgl",kernelFunc:LY};var Eh=class{constructor(e,t,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let d=n==="bilinear"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=l>1?[`${(i-1)/(l-1)}`,"(y2-y1) * height_ratio",`y1*${f} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${f}`],[C,w,k]=m>1?[`${(p-1)/(m-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=` const float height_ratio = float(${g}); const float width_ratio = float(${C}); void main() { @@ -2870,11 +2870,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam return; } - float height_scale = ${y}; + float height_scale = ${x}; float width_scale = ${w}; float in_y = ${b}; - if( in_y < 0.0 || in_y > ${d} ) { + if( in_y < 0.0 || in_y > ${f} ) { setOutput(float(${s})); return; } @@ -2885,7 +2885,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } vec2 sourceFracIndexCR = vec2(in_x,in_y); - if(${f} == 1) { + if(${d} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); @@ -2909,20 +2909,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam setOutput(newValue); } } - `}};var xQ=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Vh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],"float32")},hA={kernelName:xn,backendName:"webgl",kernelFunc:xQ};var Bu;(function(r){r.Prod="*",r.Sum="+"})(Bu||(Bu={}));var Ml=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===Bu.Prod?"1.0":"0.0",i=o?a:`getX(${gA(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",c="";o?(u=n?`end != ${p-1}`:"end != 0",c=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",c=n?"end + pow2":"end - pow2"),this.userCode=` + `}};var BY=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Eh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],"float32")},GA={kernelName:Yo,backendName:"webgl",kernelFunc:BY};var Lu;(function(r){r.Prod="*",r.Sum="+"})(Lu||(Lu={}));var El=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===Lu.Prod?"1.0":"0.0",i=o?a:`getX(${HA(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",c="";o?(u=n?`end != ${p-1}`:"end != 0",c=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",c=n?"end + pow2":"end - pow2"),this.userCode=` void main() { ${_e(s)} coords = getOutputCoords(); - int end = ${xA(s,"coords",this.op)}; + int end = ${qA(s,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { int idx = ${c}; - ${xA(s,"coords",this.op)} = idx; - val ${this.op}= getX(${gA(s,"coords",this.op)}); + ${qA(s,"coords",this.op)} = idx; + val ${this.op}= getX(${HA(s,"coords",this.op)}); } setOutput(val); } - `}};function gA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function xA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function zh(r,e,t,o,n,s){let a=e.shape.length,i=I.getAxesPermutation([o],a),p=e;i!=null&&(p=xt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=I.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Rt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new Ml(r,p.shape,!1,s),d=[[m]],h=l;l=t.runWebGLProgram(f,[l],l.dtype,d),t.disposeIntermediateTensorInfo(h)}if(n){let m=new Ml(r,p.shape,n,s),f=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(f)}if(i!=null){let m=I.getUndoAxesPermutation(i),f=xt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),f}return l}function yQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zh(Bu.Prod,n,t,s,a,i)}var yA={kernelName:hn,backendName:"webgl",kernelFunc:yQ};function bQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zh(Bu.Sum,n,t,s,a,i)}var bA={kernelName:gn,backendName:"webgl",kernelFunc:bQ};function CQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=oh(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=a$(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var CA={kernelName:dp,backendName:"webgl",kernelFunc:CQ};var Wh=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=` + `}};function HA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function qA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function $h(r,e,t,o,n,s){let a=e.shape.length,i=S.getAxesPermutation([o],a),p=e;i!=null&&(p=xt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=S.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new El(r,p.shape,!1,s),f=[[m]],h=l;l=t.runWebGLProgram(d,[l],l.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new El(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=S.getUndoAxesPermutation(i),d=xt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function VY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return $h(Lu.Prod,n,t,s,a,i)}var KA={kernelName:jo,backendName:"webgl",kernelFunc:VY};function zY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return $h(Lu.Sum,n,t,s,a,i)}var jA={kernelName:Xo,backendName:"webgl",kernelFunc:zY};function WY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=qf(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=OE(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var XA={kernelName:ti,backendName:"webgl",kernelFunc:WY};var Ah=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -2941,7 +2941,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float result = ${this.getInputSamplingString()}; setOutput(result); } - `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function IQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a==="NHWC"?[i,l,m,f]:[i,f,l,m],h=new Wh(d,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var IA={kernelName:yn,backendName:"webgl",kernelFunc:IQ};var Ic=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u="",c="";o&&(n?u=`float activation(float a) { + `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function UY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=new Ah(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var YA={kernelName:Qo,backendName:"webgl",kernelFunc:UY};var xc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u="",c="";o&&(n?u=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?u=`float activation(float a) { @@ -2994,26 +2994,26 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${c} setOutput(result); } - `}};var wc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,f=` + `}};var yc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ct(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,d=` int xR; int xC; int xCOffset; - vec4 wTexel; vec4 previous; vec4 final;`;for(let y=0;y=0 && xR < inDims[0]) { - `;for(let y=0;y<(m+1)/2;y++){let b=y*2;if(f+=` + `;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(d+=` xC = xCCorner + ${b*u}; - `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -3025,9 +3025,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } xTexelC${b}Ready = 1; } - `,u===1&&b>0?f+=` + `,u===1&&b>0?d+=` xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy); - `:f+=` + `:d+=` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { @@ -3043,7 +3043,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } else { xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy); } - `):f+=` + `):d+=` if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -3053,7 +3053,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } xC${b} = xTexelC${b}; - `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { @@ -3066,7 +3066,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } xTexelC${b+1}Ready = 1; } - `,u>1?f+=` + `,u>1?d+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); @@ -3074,11 +3074,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } else { xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy); } - `:f+=` + `:d+=` xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy); - `):C===1?f+=` + `):C===1?d+=` xC${b+1} = xTexelC${b}; - `:f+=` + `:d+=` xCOffset = xC + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { @@ -3090,7 +3090,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } xC${b+1} = xTexelC${b+1}; - `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -3113,14 +3113,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw); - `,b+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy); - `)):(f+=` + `)):(d+=` if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -3140,28 +3140,28 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam xC${b} = vec4( xTexelC${b}.xy, xTexelC${b+1}.xy); - `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=I.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;P().getBool("WEBGL_PACK_DEPTHWISECONV")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new wc(l):m=new Ic(l);let f=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],"float32",f)}var wA={kernelName:bn,backendName:"webgl",kernelFunc:wQ};var Uh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=` + `}};function GY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p,dimRoundingMode:u}=o,c=p;c==null&&(c=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(a,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=S.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;O().getBool("WEBGL_PACK_DEPTHWISECONV")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new yc(l):m=new xc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],"float32",d)}var QA={kernelName:Zo,backendName:"webgl",kernelFunc:GY};var Rh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -3218,7 +3218,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},Gh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=` + `}},Fh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { @@ -3263,13 +3263,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}};function SQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=I.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Uh(l);return t.runWebGLProgram(m,[n,s],"float32")}var SA={kernelName:hp,backendName:"webgl",kernelFunc:SQ};function vQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=I.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Gh(l);return t.runWebGLProgram(m,[n,s],"float32")}var vA={kernelName:gp,backendName:"webgl",kernelFunc:vQ};var Hh=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function HY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=S.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Rh(l);return t.runWebGLProgram(m,[n,s],"float32")}var ZA={kernelName:dp,backendName:"webgl",kernelFunc:HY};function qY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=S.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Fh(l);return t.runWebGLProgram(m,[n,s],"float32")}var JA={kernelName:fp,backendName:"webgl",kernelFunc:qY};var Dh=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } - `}};function kQ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=x.sizeFromShape(o.shape),a=J({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Hh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=J({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var kA={kernelName:xp,backendName:"webgl",kernelFunc:kQ};var qh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=` + `}};function KY(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var eR={kernelName:hp,backendName:"webgl",kernelFunc:KY};var Oh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=` const ivec2 strides = ivec2(${s}, ${a}); const ivec2 pads = ivec2(${l}, ${m}); const float neg_infinity = -3.4e38; @@ -3307,7 +3307,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float result = curVal; setOutput(result); } - `}};function TQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=I.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c,l=new qh(u);c=t.runWebGLProgram(l,[n,s],"float32");let m=J({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var TA={kernelName:yp,backendName:"webgl",kernelFunc:TQ};function NQ(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=I.decodeEinsumEquation(n,s.length);I.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=I.getEinsumComputePath(i,p),l=c.length,m=null,f=a.length,d=[];for(let h=0;h=0&&(m=Ou({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var NA={kernelName:Xa,backendName:"webgl",kernelFunc:NQ};var _Q="return (x >= 0.0) ? x : (exp(x) - 1.0);",EQ=` + `}};function jY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=S.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c,l=new Oh(u);c=t.runWebGLProgram(l,[n,s],"float32");let m=te({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var tR={kernelName:gp,backendName:"webgl",kernelFunc:jY};function XY(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=S.decodeEinsumEquation(n,s.length);S.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=S.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Ou({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var rR={kernelName:ri,backendName:"webgl",kernelFunc:XY};var YY="return (x >= 0.0) ? x : (exp(x) - 1.0);",QY=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3316,29 +3316,29 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,$Q=he({opSnippet:_Q,packedOpSnippet:EQ}),_A={kernelName:In,backendName:"webgl",kernelFunc:$Q};var RQ="return (b >= 1.0) ? a : a * (b + 1.0);",AQ=` +`,ZY=ge({opSnippet:YY,packedOpSnippet:QY}),oR={kernelName:en,backendName:"webgl",kernelFunc:ZY};var JY="return (b >= 1.0) ? a : a * (b + 1.0);",eQ=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,FQ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ko(AQ,o.shape,n.shape):new _o(RQ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},EA={kernelName:Pm,backendName:"webgl",kernelFunc:FQ};var DQ=` +`,tQ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=O().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new To(eQ,o.shape,n.shape):new io(JY,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},nR={kernelName:km,backendName:"webgl",kernelFunc:tQ};var rQ=` return vec4(equal(a, b)); -`,PQ="return float(a == b);",OQ=ot({opSnippet:PQ,packedOpSnippet:DQ,dtype:"bool",cpuKernelImpl:c$}),$A={kernelName:oo,backendName:"webgl",kernelFunc:OQ};var MQ=` +`,oQ="return float(a == b);",nQ=tt({opSnippet:oQ,packedOpSnippet:rQ,dtype:"bool",cpuKernelImpl:BE}),sR={kernelName:tn,backendName:"webgl",kernelFunc:nQ};var sQ=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - float p = ${I.ERF_P}; - float a1 = ${I.ERF_A1}; - float a2 = ${I.ERF_A2}; - float a3 = ${I.ERF_A3}; - float a4 = ${I.ERF_A4}; - float a5 = ${I.ERF_A5}; + float p = ${S.ERF_P}; + float a1 = ${S.ERF_A1}; + float a2 = ${S.ERF_A2}; + float a3 = ${S.ERF_A3}; + float a4 = ${S.ERF_A4}; + float a5 = ${S.ERF_A5}; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); -`,LQ=he({opSnippet:MQ}),RA={kernelName:Gi,backendName:"webgl",kernelFunc:LQ};var BQ=jo+` +`,aQ=ge({opSnippet:sQ}),aR={kernelName:ma,backendName:"webgl",kernelFunc:aQ};var iQ=_o+` return exp(x); -`,VQ=` +`,uQ=` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -3347,7 +3347,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,Ow=he({opSnippet:BQ,packedOpSnippet:VQ,cpuKernelImpl:l$,dtype:"float32"}),AA={kernelName:no,backendName:"webgl",kernelFunc:Ow};function Kh(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(x.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),J({inputs:{x:s},backend:o,attrs:{shape:i}})}var FA={kernelName:xs,backendName:"webgl",kernelFunc:Kh};var DA="return exp(x) - 1.0;",zQ=he({opSnippet:DA,packedOpSnippet:DA,cpuKernelImpl:m$}),PA={kernelName:wn,backendName:"webgl",kernelFunc:zQ};var Ll=class{constructor(e,t,o){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` +`,Aw=ge({opSnippet:iQ,packedOpSnippet:uQ,cpuKernelImpl:VE,dtype:"float32"}),iR={kernelName:rn,backendName:"webgl",kernelFunc:Aw};function Ph(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var uR={kernelName:bs,backendName:"webgl",kernelFunc:Ph};var pR="return exp(x) - 1.0;",pQ=ge({opSnippet:pR,packedOpSnippet:pR,cpuKernelImpl:zE}),cR={kernelName:da,backendName:"webgl",kernelFunc:pQ};var $l=class{constructor(e,t,o){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` const float exponentMultiplier = ${s}; float unaryOpComplex(float real, float expR, float imag, float expI) { @@ -3380,12 +3380,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function jh(r,e,t){let o=t.texData.get(r.dataId),n=x.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=J({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new Ll("real",p,e),c=new Ll("imag",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,"float32"),f=t.runWebGLProgram(c,l,"float32"),d=Ar({inputs:{real:m,imag:f},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f);let h=J({inputs:{x:d},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(d),h}function WQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return jh(o,!1,t)}var OA={kernelName:bp,backendName:"webgl",kernelFunc:WQ};var Xh=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function Mh(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new $l("real",p,e),c=new $l("imag",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,"float32"),d=t.runWebGLProgram(c,l,"float32"),f=Rr({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function cQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return Mh(o,!1,t)}var lR={kernelName:oi,backendName:"webgl",kernelFunc:cQ};var Lh=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } - `}};function Ba(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||x.inferDtype(n),s==="string"){let a=x.getArrayFromDType(s,x.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Xh(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var MA={kernelName:ys,backendName:"webgl",kernelFunc:Ba};var Yh=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function Ga(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Lh(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var mR={kernelName:Cs,backendName:"webgl",kernelFunc:Ga};var Bh=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; @@ -3399,7 +3399,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(outputValue); } - `}};var LA={kernelName:Sn,backendName:"webgl",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Yh(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var BA="return floor(x);",UQ=he({opSnippet:BA,packedOpSnippet:BA,cpuKernelImpl:f$}),VA={kernelName:so,backendName:"webgl",kernelFunc:UQ};var GQ=` + `}};var dR={kernelName:on,backendName:"webgl",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bh(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var fR="return floor(x);",lQ=ge({opSnippet:fR,packedOpSnippet:fR,cpuKernelImpl:WE}),hR={kernelName:nn,backendName:"webgl",kernelFunc:lQ};var mQ=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3409,7 +3409,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } else { return NAN; } -`,HQ=` +`,dQ=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -3430,7 +3430,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,qQ=ot({opSnippet:GQ,packedOpSnippet:HQ,dtype:"int32"}),zA={kernelName:vn,backendName:"webgl",kernelFunc:qQ};var Qh=class{constructor(e){this.variableNames=["A"];let t=Ct(),[o,n]=e;this.outputShape=e,this.userCode=` +`,fQ=tt({opSnippet:mQ,packedOpSnippet:dQ,dtype:"int32"}),gR={kernelName:sn,backendName:"webgl",kernelFunc:fQ};var Vh=class{constructor(e){this.variableNames=["A"];let t=St(),[o,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3452,7 +3452,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}};var Zh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ct(),[o,n]=e;this.outputShape=e,this.userCode=` + `}};var zh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=St(),[o,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3486,7 +3486,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${t.output} = result; } - `}};var WA={kernelName:Zi,backendName:"webgl",kernelFunc:KQ},Sc,Mw=P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function KQ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Sc==null||h!==Mw)&&(Mw=h,Sc=document.createElement("canvas").getContext("2d",{willReadFrequently:Mw})),Sc.canvas.width=p,Sc.canvas.height=u,Sc.drawImage(n,0,0,p,u),n=Sc.canvas}let m=t.makeTensorInfo(c,"int32");t.texData.get(m.dataId).usage=ir.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let f=P().getBool("WEBGL_PACK")?new Zh(l):new Qh(l),d=t.runWebGLProgram(f,[m],"int32");return t.disposeData(m.dataId),d}function jQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=I.convertConv2DDataFormat(c),g=I.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),y,b=[],C=a!=null,w=i!=null,k=f==="leakyrelu",_=()=>{let R=[n,s],A=(D,O)=>{if(O==="NCHW"&&D.shape.length===1&&D.shape[0]!==1){let M=J({inputs:{x:D},backend:t,attrs:{shape:[D.shape[0],1,1]}});return b.push(M),M}return D};if(C&&R.push(A(a,c)),w&&R.push(A(i,c)),k){let D=t.makeTensorInfo([],"float32",x.createScalarValue(d,"float32"));R.push(D),b.push(D)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=Dh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else if(g.strideWidth<=2&&h==="channelsLast"&&P().getBool("WEBGL_EXP_CONV")){let R=f?Ma(f,!0):null,A=new Cc(g,C,R,w,k),D=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();y=t.runWebGLProgram(A,O,"float32",D)}else if(P().getBool("WEBGL_CONV_IM2COL"))y=Ph({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else{let R=f?Ma(f,!1):null,A=new bc(g,C,R,w,k),D=_();y=t.runWebGLProgram(A,D,"float32")}let E=J({inputs:{x:y},backend:t,attrs:{shape:g.outShape}});return b.push(y),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),E}var UA={kernelName:Do,backendName:"webgl",kernelFunc:jQ};function XQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:f}=o,d=[],h=c;h==null&&(h=[1,1]),x.assert(I.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=I.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),y=P().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Ma(m,y):null,C=[n,s],w=a!=null,k=i!=null,_=m==="leakyrelu";if(w&&C.push(a),k&&C.push(i),_){let D=t.makeTensorInfo([],"float32",x.createScalarValue(f,"float32"));C.push(D),d.push(D)}let E;y?E=new wc(g,w,b,k,_):E=new Ic(g,w,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],A=t.runWebGLProgram(E,C,"float32",R);return d.forEach(D=>t.disposeIntermediateTensorInfo(D)),A}var GA={kernelName:Po,backendName:"webgl",kernelFunc:XQ};var Jh=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=_e(o.length),a=` + `}};var xR={kernelName:Zi,backendName:"webgl",kernelFunc:hQ},bc,Rw=O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function hQ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=O().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(bc==null||h!==Rw)&&(Rw=h,bc=document.createElement("canvas").getContext("2d",{willReadFrequently:Rw})),bc.canvas.width=p,bc.canvas.height=u,bc.drawImage(n,0,0,p,u),n=bc.canvas}let m=t.makeTensorInfo(c,"int32");t.texData.get(m.dataId).usage=ir.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=O().getBool("WEBGL_PACK")?new zh(l):new Vh(l),f=t.runWebGLProgram(d,[m],"int32");return t.disposeData(m.dataId),f}function gQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=S.convertConv2DDataFormat(c),g=S.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,w=i!=null,k=d==="leakyrelu",_=()=>{let A=[n,s],R=(D,P)=>{if(P==="NCHW"&&D.shape.length===1&&D.shape[0]!==1){let M=te({inputs:{x:D},backend:t,attrs:{shape:[D.shape[0],1,1]}});return b.push(M),M}return D};if(C&&A.push(R(a,c)),w&&A.push(R(i,c)),k){let D=t.makeTensorInfo([],"float32",y.createScalarValue(f,"float32"));A.push(D),b.push(D)}return A};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=Ih({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h==="channelsLast"&&O().getBool("WEBGL_EXP_CONV")){let A=d?Wa(d,!0):null,R=new gc(g,C,A,w,k),D=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],P=_();x=t.runWebGLProgram(R,P,"float32",D)}else if(O().getBool("WEBGL_CONV_IM2COL"))x=vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let A=d?Wa(d,!1):null,R=new hc(g,C,A,w,k),D=_();x=t.runWebGLProgram(R,D,"float32")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(A=>t.disposeIntermediateTensorInfo(A)),$}var yR={kernelName:ho,backendName:"webgl",kernelFunc:gQ};function xQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=[],h=c;h==null&&(h=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=S.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=O().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Wa(m,x):null,C=[n,s],w=a!=null,k=i!=null,_=m==="leakyrelu";if(w&&C.push(a),k&&C.push(i),_){let D=t.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));C.push(D),f.push(D)}let $;x?$=new yc(g,w,b,k,_):$=new xc(g,w,b,k,_);let A=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],R=t.runWebGLProgram($,C,"float32",A);return f.forEach(D=>t.disposeIntermediateTensorInfo(D)),R}var bR={kernelName:go,backendName:"webgl",kernelFunc:xQ};var Wh=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=_e(o.length),a=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function QQ(r,e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=I.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=x.sizeFromShape(s.shape),l=[],m=J({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),f=J({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(f);let d=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=t.bufferSync(f),C=t.bufferSync(m),w=h$(C,b,d);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,w.dtype,w.values)}let h=new eg(m.shape,d),g=t.runWebGLProgram(h,[m,f],m.dtype);l.push(g);let y=J({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),y}var qA={kernelName:bs,backendName:"webgl",kernelFunc:Lw};var ZQ="return float(a > b);",JQ=` + `}};function bQ(r,e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=S.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=y.sizeFromShape(s.shape),l=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(d);let f=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=t.bufferSync(d),C=t.bufferSync(m),w=GE(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,w.dtype,w.values)}let h=new Uh(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var SR={kernelName:Ss,backendName:"webgl",kernelFunc:Fw};var CQ="return float(a > b);",SQ=` return vec4(greaterThan(a, b)); -`,e7=ot({opSnippet:ZQ,packedOpSnippet:JQ,cpuKernelImpl:g$,dtype:"bool"}),KA={kernelName:ao,backendName:"webgl",kernelFunc:e7};var t7="return float(a >= b);",r7=` +`,wQ=tt({opSnippet:CQ,packedOpSnippet:SQ,cpuKernelImpl:HE,dtype:"bool"}),wR={kernelName:pn,backendName:"webgl",kernelFunc:wQ};var IQ="return float(a >= b);",vQ=` return vec4(greaterThanEqual(a, b)); -`,o7=ot({opSnippet:t7,packedOpSnippet:r7,dtype:"bool",cpuKernelImpl:x$}),jA={kernelName:io,backendName:"webgl",kernelFunc:o7};function n7(r){let{inputs:e,backend:t}=r,{input:o}=e;return jh(o,!0,t)}var XA={kernelName:Cp,backendName:"webgl",kernelFunc:n7};var s7="return float(!isnan(x) && !isinf(x));",a7=he({opSnippet:s7,dtype:"bool"}),YA={kernelName:Hi,backendName:"webgl",kernelFunc:a7};var i7="return float(isinf(x));",u7=he({opSnippet:i7,dtype:"bool"}),QA={kernelName:qi,backendName:"webgl",kernelFunc:u7};var p7="return float(isnan(x));",c7=he({opSnippet:p7,dtype:"bool"}),ZA={kernelName:ia,backendName:"webgl",kernelFunc:c7};var l7="return float(a < b);",m7=` +`,kQ=tt({opSnippet:IQ,packedOpSnippet:vQ,dtype:"bool",cpuKernelImpl:qE}),IR={kernelName:cn,backendName:"webgl",kernelFunc:kQ};function NQ(r){let{inputs:e,backend:t}=r,{input:o}=e;return Mh(o,!0,t)}var vR={kernelName:ni,backendName:"webgl",kernelFunc:NQ};var TQ="return float(!isnan(x) && !isinf(x));",_Q=ge({opSnippet:TQ,dtype:"bool"}),kR={kernelName:fa,backendName:"webgl",kernelFunc:_Q};var EQ="return float(isinf(x));",$Q=ge({opSnippet:EQ,dtype:"bool"}),NR={kernelName:ha,backendName:"webgl",kernelFunc:$Q};var AQ="return float(isnan(x));",RQ=ge({opSnippet:AQ,dtype:"bool"}),TR={kernelName:ln,backendName:"webgl",kernelFunc:RQ};var FQ="return float(a < b);",DQ=` return vec4(lessThan(a, b)); -`,f7=ot({opSnippet:l7,packedOpSnippet:m7,cpuKernelImpl:y$,dtype:"bool"}),JA={kernelName:po,backendName:"webgl",kernelFunc:f7};var d7="return float(a <= b);",h7=` +`,OQ=tt({opSnippet:FQ,packedOpSnippet:DQ,cpuKernelImpl:KE,dtype:"bool"}),_R={kernelName:dn,backendName:"webgl",kernelFunc:OQ};var PQ="return float(a <= b);",MQ=` return vec4(lessThanEqual(a, b)); -`,g7=ot({opSnippet:d7,packedOpSnippet:h7,cpuKernelImpl:b$,dtype:"bool"}),eF={kernelName:co,backendName:"webgl",kernelFunc:g7};function x7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=C$(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var tF={kernelName:Ip,backendName:"webgl",kernelFunc:x7};var y7=jo+` +`,LQ=tt({opSnippet:PQ,packedOpSnippet:MQ,cpuKernelImpl:jE,dtype:"bool"}),ER={kernelName:fn,backendName:"webgl",kernelFunc:LQ};function BQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=XE(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var $R={kernelName:xp,backendName:"webgl",kernelFunc:BQ};var VQ=_o+` return x < 0.0 ? 0./0. : log(x); -`,b7=` +`,zQ=` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -3526,18 +3526,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; -`,C7=he({opSnippet:y7,packedOpSnippet:b7,cpuKernelImpl:I$}),rF={kernelName:lo,backendName:"webgl",kernelFunc:C7};var I7=jo+` +`,WQ=ge({opSnippet:VQ,packedOpSnippet:zQ,cpuKernelImpl:YE}),AR={kernelName:hn,backendName:"webgl",kernelFunc:WQ};var UQ=_o+` return log(1.0 + x); -`,w7=he({opSnippet:I7}),oF={kernelName:Ki,backendName:"webgl",kernelFunc:w7};var S7="return float(a >= 1.0 && b >= 1.0);",v7=` +`,GQ=ge({opSnippet:UQ}),RR={kernelName:ga,backendName:"webgl",kernelFunc:GQ};var HQ="return float(a >= 1.0 && b >= 1.0);",qQ=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,k7=ot({opSnippet:S7,packedOpSnippet:v7,dtype:"bool"}),nF={kernelName:_n,backendName:"webgl",kernelFunc:k7};var T7="return float(!(x >= 1.0));",N7=he({opSnippet:T7}),sF={kernelName:En,backendName:"webgl",kernelFunc:N7};var _7="return float(a >= 1.0 || b >= 1.0);",E7=` +`,KQ=tt({opSnippet:HQ,packedOpSnippet:qQ,dtype:"bool"}),FR={kernelName:gn,backendName:"webgl",kernelFunc:KQ};var jQ="return float(!(x >= 1.0));",XQ=ge({opSnippet:jQ}),DR={kernelName:xn,backendName:"webgl",kernelFunc:XQ};var YQ="return float(a >= 1.0 || b >= 1.0);",QQ=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,$7=ot({opSnippet:_7,packedOpSnippet:E7,dtype:"bool"}),aF={kernelName:ua,backendName:"webgl",kernelFunc:$7};var tg=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` +`,ZQ=tt({opSnippet:YQ,packedOpSnippet:QQ,dtype:"bool"}),OR={kernelName:xa,backendName:"webgl",kernelFunc:ZQ};var Gh=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3556,7 +3556,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam float val = x * ${p}; setOutput(val); } - `}};var rg=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` + `}};var Hh=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; @@ -3618,7 +3618,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam vec4 result = xAtOutputCoords * ${p}; setOutput(result); } - `}};var R7=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=P().getBool("WEBGL_PACK_NORMALIZATION")?new rg(n.shape,s,a,i,p):new tg(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},iF={kernelName:wp,backendName:"webgl",kernelFunc:R7};var og=class{constructor(e,t,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=` + `}};var JQ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=O().getBool("WEBGL_PACK_NORMALIZATION")?new Hh(n.shape,s,a,i,p):new Gh(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},PR={kernelName:yp,backendName:"webgl",kernelFunc:JQ};var qh=class{constructor(e,t,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3673,16 +3673,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(result); } - `}};var A7=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new og(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},uF={kernelName:Om,backendName:"webgl",kernelFunc:A7};function pF(r,e,t,o){let n=x.sizeFromShape(e),a=x.sizeFromShape(r.shape)/n,i=J({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=qr(i,r.dtype,"max",o),u=J({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Bw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=x.parseAxisParam(s,n.shape),u=p,c=I.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),f=n;if(l){if(m){let C=t.texData.get(f.dataId).values,w=new Array(i);for(let E=0;E{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new qh(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},MR={kernelName:Nm,backendName:"webgl",kernelFunc:e7};function LR(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Gr(i,r.dtype,"max",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Dw(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=S.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,w=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=I.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&x.arraysEqual(c.inShape,c.outShape))return Rt({inputs:{x:n},backend:t});let l=new us(c,"max",!1);return t.runWebGLProgram(l,[n],n.dtype)}var mF={kernelName:Rn,backendName:"webgl",kernelFunc:O7};function M7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=I.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Ei(l,"max",!1);return t.runWebGLProgram(m,[n],n.dtype)}var fF={kernelName:Sp,backendName:"webgl",kernelFunc:M7};var ng=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=` +`,o7=tt({opSnippet:t7,packedOpSnippet:r7,cpuKernelImpl:ZE}),VR={kernelName:bn,backendName:"webgl",kernelFunc:o7};function n7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;is(n,"maxPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(S.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=S.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:t});let l=new ps(c,"max",!1);return t.runWebGLProgram(l,[n],n.dtype)}var zR={kernelName:Cn,backendName:"webgl",kernelFunc:n7};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=S.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new zi(l,"max",!1);return t.runWebGLProgram(m,[n],n.dtype)}var WR={kernelName:bp,backendName:"webgl",kernelFunc:s7};var Kh=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { @@ -3728,8 +3728,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}},sg=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,f=c-1-e.padInfo.left,d=p*u*c-1;this.userCode=` - const ivec3 pads = ivec3(${l}, ${m}, ${f}); + `}},jh=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=c-1-e.padInfo.left,f=p*u*c-1;this.userCode=` + const ivec3 pads = ivec3(${l}, ${m}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -3776,7 +3776,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); - int maxPosValue = ${d} - + int maxPosValue = ${f} - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the @@ -3792,16 +3792,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam } setOutput(dotProd); } - `}};function L7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=I.computePool3DInfo(a.shape,i,p,l,u,c),f=new Ei(m,"max",!0),d=t.runWebGLProgram(f,[a],a.dtype),h=new sg(m),g=t.runWebGLProgram(h,[n,d],a.dtype);return t.disposeIntermediateTensorInfo(d),g}var dF={kernelName:Lm,backendName:"webgl",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;as([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=I.computePool2DInfo(i.shape,p,u,1,c,l),f=!0,d=new us(m,"max",f),h=t.runWebGLProgram(d,[i],i.dtype),g=new ng(m),y=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),y}var hF={kernelName:Mm,backendName:"webgl",kernelFunc:B7};function gF(r,e,t,o){let n=new us(t,"max",!1),s=o.runWebGLProgram(n,[r],"float32");n=new us(t,"max",!0,!0,e);let a=o.runWebGLProgram(n,[r],"float32");return[s,a]}var xF={kernelName:vp,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;x.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];x.assert(I.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=I.computePool2DInfo(o.shape,n,s,u,a),[l,m]=gF(o,i,c,p);return[l,m]}};function yF(r,e,t,o){let n=x.sizeFromShape(e),a=x.sizeFromShape(r.shape)/n,i=J({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=qr(i,"float32","mean",o),u=J({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var bF={kernelName:An,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=x.parseAxisParam(s,o.shape),u=p,c=I.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),f=[],d=o;if(l){if(m){let w=a.texData.get(d.dataId).values,k=new Array(i);for(let R=0;R{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(S.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=S.computePool2DInfo(o.shape,n,s,u,a),[l,m]=HR(o,i,c,p);return[l,m]}};function KR(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Gr(i,"float32","mean",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var jR={kernelName:Sn,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,c=S.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let w=a.texData.get(f.dataId).values,k=new Array(i);for(let A=0;Ac[0]+e[l]+c[1]);let n=e.length,s=_e(n),a=t.map(c=>c[0]).join(","),i=t.map((c,l)=>c[0]+e[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` +`,l7=tt({opSnippet:p7,packedOpSnippet:c7,cpuKernelImpl:JE}),YR={kernelName:In,backendName:"webgl",kernelFunc:l7};var Xh=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=t.map((c,l)=>c[0]+e[l]+c[1]);let n=e.length,s=_e(n),a=t.map(c=>c[0]).join(","),i=t.map((c,l)=>c[0]+e[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -3830,7 +3830,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam ${s} coords = outC - start; setOutput(getX(${p})); } - `}};var ig=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((d,h)=>d[0]+e[h]+d[1]);let n=e.length,s=_e(n),a=t.map(d=>d[0]).join(","),i=t.map((d,h)=>d[0]+e[h]).join(","),p=$t("rc",n),u=$t("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=o==="reflect"?0:1,f="";if(n===1){let d=` + `}};var Yh=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=_e(n),a=t.map(f=>f[0]).join(","),i=t.map((f,h)=>f[0]+e[h]).join(","),p=$t("rc",n),u=$t("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=o==="reflect"?0:1,d="";if(n===1){let f=` ${s} source = rc; if (source < start) { source = start * 2 - source - ${m}; @@ -3838,16 +3838,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam source = (end - 1) * 2 - source + ${m}; } source -= start; - `;f=` + `;d=` ${s} rc = outputLoc; - ${d} + ${f} result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; if(${c}) { - ${d} + ${f} result[1] = getChannel(getX(${u.join()}), ${l}); } - `}else{let d=` + `}else{let f=` ${s} source = rc; ${s} lt = ${s}(lessThan(source, start)); ${s} gte = ${s}(greaterThanEqual(source, end)); @@ -3856,23 +3856,23 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam lt * (start * 2 - source - ${m}) + gte * ((end - 1) * 2 - source + ${m}); source -= start; - `;f=` + `;d=` ${s} rc = outputLoc; - ${d} + ${f} result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; if(${c}) { - ${d} + ${f} result[1] = getChannel(getX(${u.join()}), ${l}); } rc = outputLoc; ${p[n-2]} += 1; if(${p[n-2]} < ${this.outputShape[n-2]}) { - ${d} + ${f} result[2] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; if(${c}) { - ${d} + ${f} result[3] = getChannel(getX(${u.join()}), ${l}); } } @@ -3883,16 +3883,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); - ${f} + ${d} setOutput(result); } - `}};var G7=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ig(o.shape,n,s):new ag(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},wF={kernelName:Dn,backendName:"webgl",kernelFunc:G7};var H7=`if (b == 0.0) return NAN; - return mod(a, b);`,q7=` + `}};var m7=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Yh(o.shape,n,s):new Xh(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},QR={kernelName:vn,backendName:"webgl",kernelFunc:m7};var d7=`if (b == 0.0) return NAN; + return mod(a, b);`,f7=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - `+js+` + `+Zs+` return result; -`,K7=ot({opSnippet:H7,packedOpSnippet:q7}),SF={kernelName:ji,backendName:"webgl",kernelFunc:K7};var ug=class{constructor(e,t,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,o],this.userCode=` +`,h7=tt({opSnippet:d7,packedOpSnippet:f7}),ZR={kernelName:ya,backendName:"webgl",kernelFunc:h7};var Qh=class{constructor(e,t,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,o],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -3912,11 +3912,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,UY=he({opSnippet:WY}),BR={kernelNam // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}};var j7=` + `}};var g7=` if (a == b) { return 1.0; }; -return a / b;`,X7=` +return a / b;`,x7=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -3934,9 +3934,9 @@ return a / b;`,X7=` } return result; -`,Vw=ot({opSnippet:j7,packedOpSnippet:X7,checkOutOfBounds:!0}),vF={kernelName:Cn,backendName:"webgl",kernelFunc:Vw};var kF="return a - b;",zw=ot({opSnippet:kF,packedOpSnippet:kF,supportsComplex:!0,cpuKernelImpl:G$}),TF={kernelName:Io,backendName:"webgl",kernelFunc:zw};function Ww(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=x.parseAxisParam([s],n.shape),i=Bw({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=I.expandShapeToKeepDim(i.shape,a),u=J({inputs:{x:i},backend:t,attrs:{shape:p}}),c=zw({inputs:{a:n,b:u},backend:t}),l=Ow({inputs:{x:c},backend:t}),m=Ou({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),f=J({inputs:{x:m},backend:t,attrs:{shape:p}}),d=Vw({inputs:{a:l,b:f},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),d}var NF={kernelName:Xn,backendName:"webgl",kernelFunc:Ww};function Y7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Ww({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new ug(u,c,s),m=[[a]],f=t.runWebGLProgram(l,[p],"int32",m);return i||t.disposeIntermediateTensorInfo(p),f}var _F={kernelName:kp,backendName:"webgl",kernelFunc:Y7};var Q7=Vt+` +`,Ow=tt({opSnippet:g7,packedOpSnippet:x7,checkOutOfBounds:!0}),JR={kernelName:Jo,backendName:"webgl",kernelFunc:Ow};var eF="return a - b;",Pw=tt({opSnippet:eF,packedOpSnippet:eF,supportsComplex:!0,cpuKernelImpl:b$}),tF={kernelName:Xn,backendName:"webgl",kernelFunc:Pw};function Mw(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Dw({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=S.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=Pw({inputs:{a:n,b:u},backend:t}),l=Aw({inputs:{x:c},backend:t}),m=Ou({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ow({inputs:{a:l,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var rF={kernelName:qn,backendName:"webgl",kernelFunc:Mw};function y7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Mw({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qh(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],"int32",m);return i||t.disposeIntermediateTensorInfo(p),d}var oF={kernelName:Sp,backendName:"webgl",kernelFunc:y7};var b7=Bt+` return -x; -`,Z7=` +`,C7=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -3946,14 +3946,14 @@ return a / b;`,X7=` result.a = isNaN.a ? x.a : result.a; return result; -`;function J7(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=T$(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return P().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new No(o.shape,Z7):n=new fr(o.shape,Q7),t.runWebGLProgram(n,[o],o.dtype)}var EF={kernelName:Pn,backendName:"webgl",kernelFunc:J7};var eZ=Bt.nonMaxSuppressionV3Impl;function tZ(r){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=eZ(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var $F={kernelName:On,backendName:"webgl",kernelFunc:tZ};var rZ=Bt.nonMaxSuppressionV4Impl;function oZ(r){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:f}=rZ(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],"int32",new Int32Array(m)),t.makeTensorInfo([],"int32",new Int32Array([f]))]}var RF={kernelName:pa,backendName:"webgl",kernelFunc:oZ};var nZ=Bt.nonMaxSuppressionV5Impl;function sZ(r){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,f=i,d=p,h=u,{selectedIndices:g,selectedScores:y}=nZ(c,l,m,f,d,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var AF={kernelName:Mn,backendName:"webgl",kernelFunc:sZ};var pg=class{constructor(e,t,o,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function S7(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=t$(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return O().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Ar(o.shape,C7):n=new Jt(o.shape,b7),t.runWebGLProgram(n,[o],o.dtype)}var nF={kernelName:ws,backendName:"webgl",kernelFunc:S7};var w7=Lt.nonMaxSuppressionV3Impl;function I7(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=w7(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var sF={kernelName:Tn,backendName:"webgl",kernelFunc:I7};var v7=Lt.nonMaxSuppressionV4Impl;function k7(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=v7(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],"int32",new Int32Array(m)),t.makeTensorInfo([],"int32",new Int32Array([d]))]}var aF={kernelName:ba,backendName:"webgl",kernelFunc:k7};var N7=Lt.nonMaxSuppressionV5Impl;function T7(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=N7(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var iF={kernelName:_n,backendName:"webgl",kernelFunc:T7};var Zh=class{constructor(e,t,o,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${n}), float(${o}), float(index == coords.y))); } - `}};var aZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=x.sizeFromShape(n.shape),c=new pg(u,a,i,p),l=J({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let f=[...n.shape,a],d=J({inputs:{x:m},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(m),d},FF={kernelName:ca,backendName:"webgl",kernelFunc:aZ};function Bl(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=La({inputs:{input:o},backend:t}),s=Bl({inputs:{x:n},backend:t}),a=Lu({inputs:{input:o},backend:t}),i=Bl({inputs:{x:a},backend:t}),p=Ar({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ba({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var DF={kernelName:Es,backendName:"webgl",kernelFunc:Bl};function PF(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=La({inputs:{input:o},backend:t}),s=PF({inputs:{x:n},backend:t}),a=Lu({inputs:{input:o},backend:t}),i=Bl({inputs:{x:a},backend:t}),p=Ar({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ba({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var OF={kernelName:Cs,backendName:"webgl",kernelFunc:PF};function iZ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Kh({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),x.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Kh({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var MF={kernelName:Is,backendName:"webgl",kernelFunc:iZ};var cg=class{constructor(e,t,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=_e(n),a=t.map(u=>u[0]).join(","),i=t.map((u,c)=>u[0]+e[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` + `}};var _7=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Zh(u,a,i,p),l=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},uF={kernelName:En,backendName:"webgl",kernelFunc:_7};function Al(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=Ua({inputs:{input:o},backend:t}),s=Al({inputs:{x:n},backend:t}),a=Mu({inputs:{input:o},backend:t}),i=Al({inputs:{x:a},backend:t}),p=Rr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ga({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var pF={kernelName:Fs,backendName:"webgl",kernelFunc:Al};function cF(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=Ua({inputs:{input:o},backend:t}),s=cF({inputs:{x:n},backend:t}),a=Mu({inputs:{input:o},backend:t}),i=Al({inputs:{x:a},backend:t}),p=Rr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ga({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var lF={kernelName:Is,backendName:"webgl",kernelFunc:cF};function E7(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Ph({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Ph({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=$w({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var mF={kernelName:vs,backendName:"webgl",kernelFunc:E7};var Jh=class{constructor(e,t,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=_e(n),a=t.map(u=>u[0]).join(","),i=t.map((u,c)=>u[0]+e[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -3978,31 +3978,31 @@ return a / b;`,X7=` setOutput(getX(${p})); } } - `}};var lg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=_e(n),a=t.map(h=>h[0]).join(","),i=t.map((h,g)=>h[0]+e[g]).join(","),p=$t("rc",n),u=$t("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1; + `}};var eg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=_e(n),a=t.map(h=>h[0]).join(","),i=t.map((h,g)=>h[0]+e[g]).join(","),p=$t("rc",n),u=$t("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1; if(${c}) { `,n===1?"":`} rc = outputLoc; ${p[n-2]} += 1; if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?"":` ${p[n-1]} += 1; - if(${c}) {`],f=n===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",d="";for(let h=0,g=n===1?2:4;h= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(x.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ba({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new lg(n.shape,s,a):new cg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},LF={kernelName:Ln,backendName:"webgl",kernelFunc:Uw};var uZ=` + `}};var Lw=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ga({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new eg(n.shape,s,a):new Jh(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},dF={kernelName:$n,backendName:"webgl",kernelFunc:Lw};var $7=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4011,7 +4011,7 @@ return a / b;`,X7=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,pZ=` +`,A7=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -4027,11 +4027,11 @@ return a / b;`,X7=` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - `+js+` + `+Zs+` return result; -`,cZ=ot({opSnippet:uZ,packedOpSnippet:pZ}),BF={kernelName:Bn,backendName:"webgl",kernelFunc:cZ};function lZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=x.parseAxisParam(s,n.shape),c=u,l=I.getAxesPermutation(c,i),m=n;l!=null&&(m=xt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=I.getInnerMostAxes(c.length,i),p.push(m)),I.assertAxesAreInnerMostDims("prod",c,i);let f;if(t.shouldExecuteOnCPU([m])){let d=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:y}=_$(m.shape,m.dtype,d,c);f=t.makeTensorInfo(g,y,h)}else{let[d,h]=I.computeOutAndReduceShapes(m.shape,c),g=x.sizeFromShape(h),y=J({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=Ca(n.dtype),C=qr(y,b,"prod",t);f=J({inputs:{x:C},backend:t,attrs:{shape:d}}),p.push(y),p.push(C)}if(a){p.push(f);let d=I.expandShapeToKeepDim(f.shape,u);f=J({inputs:{x:f},backend:t,attrs:{shape:d}})}return p.forEach(d=>t.disposeIntermediateTensorInfo(d)),f}var VF={kernelName:Ao,backendName:"webgl",kernelFunc:lZ};function mZ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(y=>t.readSync(y.dataId)),u=n.map(y=>y.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,f,d]=E$(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(y=>t.makeTensorInfo([y.length],"int32",y)),g=t.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var zF={kernelName:Tp,backendName:"webgl",kernelFunc:mZ};function fZ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=$$(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var WF={kernelName:Np,backendName:"webgl",kernelFunc:fZ};function dZ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),f=i.map(g=>g.shape),[d,h]=R$(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,f,p);return t.makeTensorInfo(d,s.dtype,h)}var UF={kernelName:_p,backendName:"webgl",kernelFunc:dZ};var Gw=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=A$(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},GF={kernelName:ws,backendName:"webgl",kernelFunc:Gw};var hZ="return 1.0 / x;",gZ=he({opSnippet:hZ}),HF={kernelName:ma,backendName:"webgl",kernelFunc:gZ};var xZ=Vt+` +`,R7=tt({opSnippet:$7,packedOpSnippet:A7}),fF={kernelName:An,backendName:"webgl",kernelFunc:R7};function F7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),c=u,l=S.getAxesPermutation(c,i),m=n;l!=null&&(m=xt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=S.getInnerMostAxes(c.length,i),p.push(m)),S.assertAxesAreInnerMostDims("prod",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=o$(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=S.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=ka(n.dtype),C=Gr(x,b,"prod",t);d=te({inputs:{x:C},backend:t,attrs:{shape:f}}),p.push(x),p.push(C)}if(a){p.push(d);let f=S.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var hF={kernelName:Fn,backendName:"webgl",kernelFunc:F7};function D7(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,d,f]=n$(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var gF={kernelName:wp,backendName:"webgl",kernelFunc:D7};function O7(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=s$(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var xF={kernelName:Ip,backendName:"webgl",kernelFunc:O7};function P7(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=a$(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var yF={kernelName:vp,backendName:"webgl",kernelFunc:P7};var Bw=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=i$(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},bF={kernelName:ks,backendName:"webgl",kernelFunc:Bw};var M7="return 1.0 / x;",L7=ge({opSnippet:M7}),CF={kernelName:Dn,backendName:"webgl",kernelFunc:L7};var B7=Bt+` return (x < 0.0) ? 0.0 : x; -`,yZ=` +`,V7=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4041,9 +4041,9 @@ return a / b;`,X7=` result.a = isNaN.a ? x.a : result.a; return result; -`,bZ=he({opSnippet:xZ,packedOpSnippet:yZ}),qF={kernelName:zn,backendName:"webgl",kernelFunc:bZ};var CZ=Vt+` +`,z7=ge({opSnippet:B7,packedOpSnippet:V7}),SF={kernelName:On,backendName:"webgl",kernelFunc:z7};var W7=Bt+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,IZ=` +`,U7=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4053,7 +4053,7 @@ return a / b;`,X7=` result.a = isNaN.a ? x.a : result.a; return result; -`,wZ=he({opSnippet:CZ,packedOpSnippet:IZ}),KF={kernelName:Gn,backendName:"webgl",kernelFunc:wZ};var mg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` +`,G7=ge({opSnippet:W7,packedOpSnippet:U7}),wF={kernelName:Ln,backendName:"webgl",kernelFunc:G7};var tg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); @@ -4086,7 +4086,7 @@ return a / b;`,X7=` setOutput(newValue); } - `}};var fg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};var rg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, @@ -4163,7 +4163,7 @@ return a / b;`,X7=` setOutput(newValue); } - `}};function SZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=P().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new fg(n.shape,p,u,s,a):new mg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],"float32")}var jF={kernelName:Un,backendName:"webgl",kernelFunc:SZ};var dg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,f=1/l,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=` + `}};function H7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=O().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new rg(n.shape,p,u,s,a):new tg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],"float32")}var IF={kernelName:Mn,backendName:"webgl",kernelFunc:H7};var og=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4177,9 +4177,9 @@ return a / b;`,X7=` const float widthScale = float(${l}); const float invHeightScale = float(${m}); - const float invWidthScale = float(${f}); + const float invWidthScale = float(${d}); - const int winHeight = int(${d}); + const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look @@ -4244,7 +4244,7 @@ return a / b;`,X7=` setOutput(accumulator); } - `}};function vZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new dg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var XF={kernelName:Vm,backendName:"webgl",kernelFunc:vZ};var hg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",f;s?f="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":f="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new og(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var vF={kernelName:$m,backendName:"webgl",kernelFunc:q7};var ng=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); @@ -4257,7 +4257,7 @@ return a / b;`,X7=` ivec2 yRC = coords.yz; // Fractional source index. - vec2 sourceFracIndexRC = ${f}; + vec2 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( @@ -4266,7 +4266,7 @@ return a / b;`,X7=` setOutput(newValue); } - `}};var gg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",f;s?f="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":f="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};var sg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, @@ -4286,7 +4286,7 @@ return a / b;`,X7=` ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. - vec3 sourceFracIndexRC = ${f}; + vec3 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( @@ -4307,7 +4307,7 @@ return a / b;`,X7=` setOutput(newValue); } - `}};function kZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=P().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new gg(n.shape,p,u,s,a):new hg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var YF={kernelName:Wn,backendName:"webgl",kernelFunc:kZ};var xg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,f=1/l,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=` + `}};function K7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=O().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new sg(n.shape,p,u,s,a):new ng(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var kF={kernelName:Pn,backendName:"webgl",kernelFunc:K7};var ag=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4321,9 +4321,9 @@ return a / b;`,X7=` const float widthScale = float(${l}); const float invHeightScale = float(${m}); - const float invWidthScale = float(${f}); + const float invWidthScale = float(${d}); - const int winHeight = int(${d}); + const int winHeight = int(${f}); const int winWidth = int(${h}); // Compute bounds for where in dy we will look @@ -4377,7 +4377,7 @@ return a / b;`,X7=` setOutput(accumulator); } - `}};function TZ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new xg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var QF={kernelName:Bm,backendName:"webgl",kernelFunc:TZ};var yg=class{constructor(e,t){this.variableNames=["x"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=` + `}};function j7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new ag(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var NF={kernelName:Em,backendName:"webgl",kernelFunc:j7};var ig=class{constructor(e,t){this.variableNames=["x"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); @@ -4387,7 +4387,7 @@ return a / b;`,X7=` ${a} coords = getOutputCoords(); setOutput(getX(${s})); } - `}};var bg=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=$t("rc",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=_e(o);o===1?this.userCode=` + `}};var ug=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=$t("rc",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=_e(o);o===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4415,7 +4415,7 @@ return a / b;`,X7=` } setOutput(result); } - `;function p(d){return m(d)}function u(d){return d[o-1]="("+d[o-1]+" + 1)",m(d)}function c(d){return d[o-2]="("+d[o-2]+" + 1)",m(d)}function l(d){return d[o-1]="("+d[o-1]+" + 1)",d[o-2]="("+d[o-2]+" + 1)",m(d)}function m(d){let h=e.map((b,C)=>f(C,d)),g=h.join(","),y=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${y}))`}function f(d,h){return t.indexOf(d)!==-1&&e[d]!==1?`${e[d]} - ${h[d]} - 1`:`${h[d]}`}}};function NZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=x.parseAxisParam(s,n.shape);if(a===0)return Rt({inputs:{x:n},backend:t});let p=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new bg(n.shape,i):new yg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var ZF={kernelName:fa,backendName:"webgl",kernelFunc:NZ};var Cg=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=e[1],n=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` + `;function p(f){return m(f)}function u(f){return f[o-1]="("+f[o-1]+" + 1)",m(f)}function c(f){return f[o-2]="("+f[o-2]+" + 1)",m(f)}function l(f){return f[o-1]="("+f[o-1]+" + 1)",f[o-2]="("+f[o-2]+" + 1)",m(f)}function m(f){let h=e.map((b,C)=>d(C,f)),g=h.join(","),x=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function X7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return At({inputs:{x:n},backend:t});let p=O().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ug(n.shape,i):new ig(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var TF={kernelName:Bn,backendName:"webgl",kernelFunc:X7};var pg=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=e[1],n=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` vec3 fill = vec3(${t.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { @@ -4434,7 +4434,7 @@ return a / b;`,X7=` } setOutput(outputValue); } - `}};var JF={kernelName:es,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Cg(o.shape,s),[u,c]=I.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var _Z=` + `}};var _F={kernelName:es,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new pg(o.shape,s),[u,c]=S.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var Y7=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -4449,7 +4449,7 @@ return a / b;`,X7=` return base + 1.0; } } -`,EZ=he({opSnippet:_Z}),eD={kernelName:da,backendName:"webgl",kernelFunc:EZ};var $Z="return inversesqrt(x);",RZ=he({opSnippet:$Z,cpuKernelImpl:F$}),tD={kernelName:xo,backendName:"webgl",kernelFunc:RZ};var vc=class{constructor(e,t,o,n,s,a,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let p=_e(s.length),u=_e(a.length),c="";o===1?c="i":o===2&&(c="i, j");let l=`getIndices(${c})`,m="";n===1?m="i":n===2&&(m="i, coords[1]");let f=`getUpdates(${m})`,d=t>1?"strides[j]":"strides";this.userCode=` +`,Q7=ge({opSnippet:Y7}),EF={kernelName:Ca,backendName:"webgl",kernelFunc:Q7};var Z7="return inversesqrt(x);",J7=ge({opSnippet:Z7,cpuKernelImpl:u$}),$F={kernelName:Vn,backendName:"webgl",kernelFunc:J7};var Cc=class{constructor(e,t,o,n,s,a,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let p=_e(s.length),u=_e(a.length),c="";o===1?c="i":o===2&&(c="i, j");let l=`getIndices(${c})`,m="";n===1?m="i":n===2&&(m="i, coords[1]");let d=`getUpdates(${m})`,f=t>1?"strides[j]":"strides";this.userCode=` ${p} strides = ${p}(${s}); void main() { @@ -4460,16 +4460,16 @@ return a / b;`,X7=` int flattenedIndex = 0; for (int j = 0; j < ${t}; j++) { int index = round(${l}); - flattenedIndex += index * ${d}; + flattenedIndex += index * ${f}; } if (flattenedIndex == coords[0]) { - sum += ${f}; + sum += ${d}; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } - `}};function AZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let f=J({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),d=J({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],"float32",new Float32Array([0])),g=new vc(p,i,f.shape.length,d.shape.length,c,m),y=t.runWebGLProgram(g,[d,f,h],d.dtype),b=J({inputs:{x:y},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(y),t.disposeIntermediateTensorInfo(h),b}var rD={kernelName:Hn,backendName:"webgl",kernelFunc:AZ};var Ig=class{constructor(e,t,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=P().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` + `}};function eZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=S.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],"float32",new Float32Array([0])),g=new Cc(p,i,d.shape.length,f.shape.length,c,m),x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var AF={kernelName:zn,backendName:"webgl",kernelFunc:eZ};var cg=class{constructor(e,t,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=O().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4494,7 +4494,7 @@ return a / b;`,X7=` setOutput(float(findBound(batch, value))); } - `}};function FZ(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Ig(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],"int32",p)}var oD={kernelName:Ep,backendName:"webgl",kernelFunc:FZ};var wg=class{constructor(e,t,o){this.variableNames=["c","a","b"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let c=0;c4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let c=0;c= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); -`,OZ=he({opSnippet:PZ}),sD={kernelName:Xi,backendName:"webgl",kernelFunc:OZ};var MZ=jo+` +`,nZ=ge({opSnippet:oZ}),DF={kernelName:Xi,backendName:"webgl",kernelFunc:nZ};var sZ=_o+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,LZ=` +`,aZ=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4522,15 +4522,15 @@ return a / b;`,X7=` result.a = isNaN.a ? x.a : result.a; return result; -`,BZ=he({opSnippet:MZ,packedOpSnippet:LZ,cpuKernelImpl:P$}),aD={kernelName:yo,backendName:"webgl",kernelFunc:BZ};var VZ=` +`,iZ=ge({opSnippet:sZ,packedOpSnippet:aZ,cpuKernelImpl:c$}),OF={kernelName:Un,backendName:"webgl",kernelFunc:iZ};var uZ=` if (isnan(x)) { return 0.0; } return sign(x); -`,zZ=he({opSnippet:VZ}),iD={kernelName:Yi,backendName:"webgl",kernelFunc:zZ};var WZ=jo+` +`,pZ=ge({opSnippet:uZ}),PF={kernelName:Yi,backendName:"webgl",kernelFunc:pZ};var cZ=_o+` return sin(x); -`,UZ=he({opSnippet:WZ}),uD={kernelName:Kn,backendName:"webgl",kernelFunc:UZ};var GZ=` +`,lZ=ge({opSnippet:cZ}),MF={kernelName:Wn,backendName:"webgl",kernelFunc:lZ};var mZ=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,HZ=he({opSnippet:GZ}),pD={kernelName:ha,backendName:"webgl",kernelFunc:HZ};var qZ=` +`,dZ=ge({opSnippet:mZ}),LF={kernelName:Sa,backendName:"webgl",kernelFunc:dZ};var fZ=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4550,17 +4550,17 @@ return a / b;`,X7=` result = log(exp_x + 1.0); } return result; -`,KZ=he({opSnippet:qZ}),cD={kernelName:Qi,backendName:"webgl",kernelFunc:KZ};var jZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;x.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((y,b)=>y*b),p=[[0,0]];p.push(...a);for(let y=1+s.length;yt.disposeIntermediateTensorInfo(y)),g},lD={kernelName:ks,backendName:"webgl",kernelFunc:jZ};function XZ(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: +`,hZ=ge({opSnippet:fZ}),BF={kernelName:Qi,backendName:"webgl",kernelFunc:hZ};var gZ=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},VF={kernelName:Es,backendName:"webgl",kernelFunc:gZ};function xZ(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw: ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw: - ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,f,d,h]=M$(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,f),t.makeTensorInfo([d.length],"bool",new Uint8Array(d.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var mD={kernelName:Qa,backendName:"webgl",kernelFunc:XZ};function YZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=L$(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var fD={kernelName:ga,backendName:"webgl",kernelFunc:YZ};function QZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,d,f,h]=m$(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var zF={kernelName:ui,backendName:"webgl",kernelFunc:xZ};function yZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=d$(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var WF={kernelName:wa,backendName:"webgl",kernelFunc:yZ};function bZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=sh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var dD={kernelName:Za,backendName:"webgl",kernelFunc:QZ};function ZZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=jf(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var UF={kernelName:pi,backendName:"webgl",kernelFunc:bZ};function CZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=sh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var hD={kernelName:Ja,backendName:"webgl",kernelFunc:ZZ};function JZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1;if(s.dtype==="string"){let y=t.bufferSync(n),b=t.bufferSync(s),C=x.decodeString(t.readSync(a.dataId)[0]),w=D$(y,b,i,m,c,u,p,l,C,f);return t.makeTensorInfo(i,w.dtype,w.values)}let d=new vc(u,p,n.shape.length,s.shape.length,l,[m,1],f),h=t.runWebGLProgram(d,[s,n,a],s.dtype),g=J({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var gD={kernelName:ei,backendName:"webgl",kernelFunc:JZ};function e9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let f=[...l];f[i]=m;let d=ps({inputs:{x:n},backend:t,attrs:{begin:c,size:f}});return c[i]+=m,d})}var xD={kernelName:Ts,backendName:"webgl",kernelFunc:e9};var yD="return sqrt(x);",t9=he({opSnippet:yD,packedOpSnippet:yD,cpuKernelImpl:B$}),bD={kernelName:bo,backendName:"webgl",kernelFunc:t9};var r9="return x * x;",o9=he({opSnippet:r9}),CD={kernelName:ti,backendName:"webgl",kernelFunc:o9};var ID="return (a - b) * (a - b);",n9=ot({opSnippet:ID,packedOpSnippet:ID}),wD={kernelName:Co,backendName:"webgl",kernelFunc:n9};function s9({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Vt+` + ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=jf(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var GF={kernelName:ci,backendName:"webgl",kernelFunc:CZ};function SZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=S.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let x=t.bufferSync(n),b=t.bufferSync(s),C=y.decodeString(t.readSync(a.dataId)[0]),w=p$(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,w.dtype,w.values)}let f=new Cc(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var HF={kernelName:li,backendName:"webgl",kernelFunc:SZ};function wZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=cs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var qF={kernelName:$s,backendName:"webgl",kernelFunc:wZ};var KF="return sqrt(x);",IZ=ge({opSnippet:KF,packedOpSnippet:KF,cpuKernelImpl:f$}),jF={kernelName:Gn,backendName:"webgl",kernelFunc:IZ};var vZ="return x * x;",kZ=ge({opSnippet:vZ}),XF={kernelName:mi,backendName:"webgl",kernelFunc:kZ};var YF="return (a - b) * (a - b);",NZ=tt({opSnippet:YF,packedOpSnippet:YF}),QF={kernelName:Kn,backendName:"webgl",kernelFunc:NZ};function TZ({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Bt+` return x > 0.0 ? 1.0 : float(${e.alpha}); - `,s=new fr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var SD={kernelName:$s,backendName:"webgl",kernelFunc:s9};var Sg=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=o;let n=o.length,s=_e(o.length),a=_e(o.length),i="";if(n===1)i="coords * strides + begin";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` + `,s=new Jt(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var ZF={kernelName:Ds,backendName:"webgl",kernelFunc:TZ};var mg=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=o;let n=o.length,s=_e(o.length),a=_e(o.length),i="";if(n===1)i="coords * strides + begin";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` ${s} begin = ${s}(${e}); ${s} strides = ${s}(${t}); @@ -4568,15 +4568,15 @@ return a / b;`,X7=` ${a} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function a9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=J({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let E=et.computeOutShape(b,C,w),R=ps({inputs:{x:n},backend:t,attrs:{begin:b,size:E}});k=J({inputs:{x:R},backend:t,attrs:{shape:d}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),A=ne(n.shape,n.dtype,R),D=V$(f,A,w,b);k=t.makeTensorInfo(d,n.dtype,D.values)}else{let R=new Sg(b,w,f);k=t.runWebGLProgram(R,[n],n.dtype)}let _=J({inputs:{x:k},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(k),_}var vD={kernelName:Yn,backendName:"webgl",kernelFunc:a9};function i9(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),f=t.readSync(l.dataId),[d,h]=z$(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],"string",d),t.makeTensorInfo(l.shape,"int32",h)]}var kD={kernelName:Ns,backendName:"webgl",kernelFunc:i9};function u9(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=W$(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var TD={kernelName:ri,backendName:"webgl",kernelFunc:u9};function p9(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.readSync(s.dataId),i=U$(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var ND={kernelName:oi,backendName:"webgl",kernelFunc:p9};var c9="return tan(x);",l9=he({opSnippet:c9}),_D={kernelName:xa,backendName:"webgl",kernelFunc:l9};var m9=` + `}};function _Z(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let $=ut.computeOutShape(b,C,w),A=cs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:A},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(A)}else if(t.shouldExecuteOnCPU([n])){let A=t.readSync(n.dataId),R=le(n.shape,n.dtype,A),D=h$(d,R,w,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let A=new mg(b,w,d);k=t.runWebGLProgram(A,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var JF={kernelName:jn,backendName:"webgl",kernelFunc:_Z};function EZ(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=g$(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var eD={kernelName:As,backendName:"webgl",kernelFunc:EZ};function $Z(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=x$(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var tD={kernelName:di,backendName:"webgl",kernelFunc:$Z};function AZ(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.readSync(s.dataId),i=y$(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var rD={kernelName:fi,backendName:"webgl",kernelFunc:AZ};var RZ="return tan(x);",FZ=ge({opSnippet:RZ}),oD={kernelName:Yn,backendName:"webgl",kernelFunc:FZ};var DZ=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,f9=he({opSnippet:m9}),ED={kernelName:Qn,backendName:"webgl",kernelFunc:f9};var vg=class{constructor(e,t){this.variableNames=["A"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>x.decodeString(m)):p,c=ne(n.shape,n.dtype,u),l=H$(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new vg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var $D={kernelName:wo,backendName:"webgl",kernelFunc:Hw};var kg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` + `}};function PZ(r){let e=r.length;if(e>5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=le(n.shape,n.dtype,u),l=C$(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new dg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var sD={kernelName:to,backendName:"webgl",kernelFunc:Vw};var fg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4616,7 +4616,7 @@ return a / b;`,X7=` setOutput(float(i1)); } } - `}},Tg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` + `}},hg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); @@ -4650,7 +4650,7 @@ return a / b;`,X7=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function Vu(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function RD(r){let e=1;for(;ep){let D=t.readSync(n.dataId),[O,M]=q$(D,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,"int32",[])];if(c===1)return[n,Ba({attrs:{shape:u,dtype:"int32",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,f=m?t.unpackTensor(n):n,h=x.sizeFromShape(u)/c,g=J({inputs:{x:f},attrs:{shape:[h,c]},backend:t});m&&Vu(t,f);let y=RD(s),b=RD(c),C=null,w=()=>C===null?[g,g]:[g,C],k=(D,O,M)=>{let L=w(),W=new kg(M),G=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[D],[O]],q=C;C=t.runWebGLProgram(W,L,"int32",G),Vu(t,q)};for(let D=1;D=1;M/=2)k(O,M,[h,b])}for(let D=b;D>y;D/=2){let O=w(),M=new Tg([h,D/2]),W=[[c],[C===null?1:0],[y]],V=C;C=t.runWebGLProgram(M,O,"int32",W),Vu(t,V);let G=y/2,q=G*2;for(let H=G;H>=1;H/=2)k(q,H,C.shape)}let _=C;C=ps({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),Vu(t,_);let E=Lw({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});Vu(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=J({inputs:{x:C},attrs:{shape:R},backend:t}),Vu(t,_);let A=E;return E=J({inputs:{x:E},attrs:{shape:R},backend:t}),Vu(t,A),[E,C]}var AD={kernelName:Zn,backendName:"webgl",kernelFunc:h9};var Ng=class{constructor(e,t,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` + `}};function Bu(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function aD(r){let e=1;for(;ep){let D=t.readSync(n.dataId),[P,M]=S$(D,u,n.dtype,s,a);return[t.makeTensorInfo(P.shape,P.dtype,P.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,"int32",[])];if(c===1)return[n,Ga({attrs:{shape:u,dtype:"int32",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:t});m&&Bu(t,d);let x=aD(s),b=aD(c),C=null,w=()=>C===null?[g,g]:[g,C],k=(D,P,M)=>{let L=w(),W=new fg(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[D],[P]],q=C;C=t.runWebGLProgram(W,L,"int32",U),Bu(t,q)};for(let D=1;D=1;M/=2)k(P,M,[h,b])}for(let D=b;D>x;D/=2){let P=w(),M=new hg([h,D/2]),W=[[c],[C===null?1:0],[x]],V=C;C=t.runWebGLProgram(M,P,"int32",W),Bu(t,V);let U=x/2,q=U*2;for(let H=U;H>=1;H/=2)k(q,H,C.shape)}let _=C;C=cs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),Bu(t,_);let $=Fw({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});Bu(t,g);let A=u.slice(0,-1);A.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:A},backend:t}),Bu(t,_);let R=$;return $=te({inputs:{x:$},attrs:{shape:A},backend:t}),Bu(t,R),[$,C]}var iD={kernelName:Zn,backendName:"webgl",kernelFunc:MZ};var gg=class{constructor(e,t,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${p} == 2) { @@ -4762,13 +4762,13 @@ return a / b;`,X7=` } setOutput(outputValue); } - `}};function g9(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Ng(l,m,a,i,p,g);return t.runWebGLProgram(y,[n,s],"float32")}var FD={kernelName:Jn,backendName:"webgl",kernelFunc:g9};function x9(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;as(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=K$(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var DD={kernelName:$p,backendName:"webgl",kernelFunc:x9};function y9(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),d}var PD={kernelName:_s,backendName:"webgl",kernelFunc:y9};var _g=class{constructor(e,t){this.variableNames=["x","segmentIds"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",c=Math.floor(o/4)*4,l=o%4,m=` + `}};function LZ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new gg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],"float32")}var uD={kernelName:Jn,backendName:"webgl",kernelFunc:LZ};function BZ(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;is(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=w$(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var pD={kernelName:kp,backendName:"webgl",kernelFunc:BZ};function VZ(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var cD={kernelName:Rs,backendName:"webgl",kernelFunc:VZ};var xg=class{constructor(e,t){this.variableNames=["x","segmentIds"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",c=Math.floor(o/4)*4,l=o%4,m=` sumValue += dot(values, segFilter); - `,f="";s%o>0&&(f=` + `,d="";s%o>0&&(d=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } - `);let d="";s%o>0&&(d=` + `);let f="";s%o>0&&(f=` if (inIdx < 0 || inIdx >= ${s}) { return -1.0; } @@ -4776,12 +4776,12 @@ return a / b;`,X7=` const float initializationValue = ${p}; float getValue(int batch, int inIdx) { - ${f} + ${d} return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { - ${d} + ${f} return getSegmentIds(inIdx); } @@ -4868,80 +4868,70 @@ return a / b;`,X7=` } setOutput(${u}); } - `}};function b9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=I.getAxesPermutation([u],i),l=n;c!=null&&(l=xt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=I.getInnerMostAxes(1,i)[0]);let m=I.segment_util.computeOutShape(l.shape,u,a),f=x.sizeFromShape([l.shape[u]]),d=J({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}});p.push(d);let h=Ca(n.dtype),g=(w,k,_,E,R)=>{let A=w.shape[0],D=w.shape[1],O=I.segment_util.segOpComputeOptimalWindowSize(D,R),M={windowSize:O,inSize:D,batchSize:A,numSegments:R},L=new _g(M,k),W=t.compileAndRun(L,[w,_],E);if(p.push(W),W.shape[1]===R)return W;let V=Gw({backend:t,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),G=Hw({inputs:{x:V},backend:t,attrs:{reps:[D/O]}});return p.push(V),p.push(G),g(W,k,G,E,R)},y=g(d,"unsortedSegmentSum",s,h,a),b=J({inputs:{x:y},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let w=I.getUndoAxesPermutation(c);C=xt({inputs:{x:C},backend:t,attrs:{perm:w}})}return p.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}var OD={kernelName:Rp,backendName:"webgl",kernelFunc:b9};var C9=[IR,SR,vR,kR,NR,_R,ER,$R,FR,DR,PR,OR,MR,LR,BR,VR,zR,WR,UR,GR,HR,KR,jR,XR,JR,tA,rA,lR,nA,aA,iA,uA,pA,cA,lA,mA,fA,dA,hA,yA,bA,CA,IA,wA,SA,vA,kA,TA,NA,_A,EA,$A,RA,AA,FA,PA,OA,MA,LA,VA,zA,WA,UA,GA,HA,qA,KA,jA,cR,XA,sA,YA,QA,ZA,mR,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,cF,lF,mF,fF,dF,hF,xF,bF,CF,IF,wF,SF,_F,hR,EF,$F,RF,AF,YR,FF,OF,MF,LF,BF,fR,VF,zF,WF,UF,GF,QR,vF,HF,qF,KF,xR,jF,XF,YF,QF,ZF,JF,eD,tD,rD,oD,nD,sD,aD,iD,uD,pD,qR,NF,cD,lD,mD,fD,dD,hD,gD,xD,bD,CD,wD,SD,vD,kD,TD,ND,TF,bR,_D,ED,$D,AD,FD,CR,DD,PD,OD,DF];for(let r of C9)ya(r);var Ae;(function(r){r[r.float32=0]="float32",r[r.int32=1]="int32",r[r.bool=2]="bool",r[r.string=3]="string",r[r.complex64=4]="complex64"})(Ae||(Ae={}));var $i;(function(r){r[r.linear=0]="linear",r[r.relu=1]="relu",r[r.relu6=2]="relu6",r[r.prelu=3]="prelu",r[r.leakyrelu=4]="leakyrelu",r[r.sigmoid=5]="sigmoid",r[r.elu=6]="elu"})($i||($i={}));var MD;function I9(r){MD=r.wasm.cwrap(Fo,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function w9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,f=t.dataIdMap.get(s.dataId).id,d=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);d=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=$i[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let y=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),w=t.makeOutput([...C,y,b],n.dtype),k=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return MD(m,_,n.shape.length,f,E,s.shape.length,p,u,g,d,h,l||0,k),w}var LD={kernelName:Fo,backendName:"wasm",setupFunc:I9,kernelFunc:w9};function Qe(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,["number","number","number"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return x.sizeFromShape(u.shape)===0||t(p,Ae[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var BD=Qe(sn);function nt(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,f=t!=null?t:u.dtype,d=I.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(d,f);if(x.sizeFromShape(d)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return(()=>o(l,g,u.shape.length,m,y,c.shape.length,Ae[u.dtype],b))(),h}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:s}}var S9=!0,VD=nt(_r,S9);var zD;function v9(r){zD=r.wasm.cwrap(an,null,["array","number","number","number"])}function k9(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(x.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return zD(s,n.length,Ae[o.dtype],a),o}var WD={kernelName:an,backendName:"wasm",setupFunc:v9,kernelFunc:k9};function zu(r){let{inputs:{x:e},backend:t}=r;if(e.dtype==="string")return nr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var UD={kernelName:uo,backendName:"wasm",kernelFunc:zu};var GD;function T9(r){GD=r.wasm.cwrap(Mr,null,["number","array","number","number","number","array","number"])}function Eo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=_9(e.x.shape,o.perm),a=!0;for(let d=0;d=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var HD={kernelName:Mr,backendName:"wasm",kernelFunc:Eo,setupFunc:T9};function kr(r,e,t){let o=r.shape,n=r.shape.length,s=x.parseAxisParam(e,o),a=s,i=I.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let f=0;f`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var eP={kernelName:Ss,backendName:"wasm",kernelFunc:Mt};var tP;function M9(r){tP=r.wasm.cwrap(cn,null,["number","array","number","number","array","number","number","number","number"])}function L9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],f=i?s.shape[u-2]:s.shape[u-1],d=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=x.sizeFromShape(d),y=x.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);x.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[y,f,l]:[y,l,f],_=Mt({inputs:{x:n},backend:t,attrs:{shape:w}}),E=Mt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,A=t.dataIdMap.get(E.dataId).id,D=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,y),L=t.makeOutput([M,D,O],_.dtype),W=t.dataIdMap.get(L.dataId).id,V=new Uint8Array(new Int32Array(_.shape).buffer),G=new Uint8Array(new Int32Array(E.shape).buffer);return tP(R,V,_.shape.length,A,G,E.shape.length,a,i,W),t.disposeData(_.dataId),t.disposeData(E.dataId),L.shape=C,L}var rP={kernelName:cn,backendName:"wasm",setupFunc:M9,kernelFunc:L9};function Xo(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=et.parseSliceParams(e,t,o),i=et.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=x.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let d=et.computeFlatOffset(s,c);return e.dtype==="string"?l.stringBytes=p.slice(d,d+x.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(d,d+x.sizeFromShape(a))),u}if(e.dtype==="string"){let d=vu(p,s,a,e.shape,e.dtype);return l.stringBytes=d,u}let m=n.typedArrayFromHeap(u),f=e.shape.length;if(f===2)B9(p,c[0],m,s,a);else if(f===3)V9(p,c[0],c[1],m,s,a);else if(f===4)z9(p,c[0],c[1],c[2],m,s,a);else{let d=vu(p,s,a,e.shape,e.dtype);m.set(d)}return u}function B9(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;uy*b),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=Mt({inputs:{x:n},backend:t,attrs:{shape:p}}),d=Eo({inputs:{x:f},backend:t,attrs:{perm:u}}),h=Mt({inputs:{x:d},backend:t,attrs:{shape:c}}),g=Xo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(f.dataId),t.disposeData(d.dataId),t.disposeData(f.dataId),g}var nP={kernelName:hs,backendName:"wasm",kernelFunc:W9};function cs(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var sP={kernelName:to,backendName:"wasm",kernelFunc:cs};var aP=Qe(ro);var iP;function U9(r){iP=r.wasm.cwrap(Ro,null,["number","number","number","number"])}function G9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return iP(i,s,a,u),p}var uP={kernelName:Ro,backendName:"wasm",setupFunc:U9,kernelFunc:G9};function qw(r){let{inputs:e,backend:t}=r,o=x.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(f=>f.shape);I.assertParamsConsistent(n,o);let s=I.computeOutShape(e.map(f=>f.shape),o),a=e.filter(f=>x.sizeFromShape(f.shape)>0);if(a.length===1)return zu({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(x.sizeFromShape(s)===0)return i;if(a[0].dtype==="string"){let f=a.map(C=>{let k=[-1,x.sizeFromShape(C.shape.slice(o))];return Mt({inputs:{x:C},backend:t,attrs:{shape:k}})}),d=f.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=I.computeOutShape(f.map(C=>C.shape),1);let h=f[0].shape[0]===1,g=Iu(d,s,e[0].dtype,h),y=I.computeOutShape(a.map(C=>C.shape),o);i.shape=y;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=I.fromStringArrayToUint8(g),f.forEach(C=>t.disposeData(C.dataId)),i}let p=x.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(f=>{let d=x.sizeFromShape(f.shape.slice(o));return u+=d,d}),l=a.map(f=>t.typedArrayFromHeap(f)),m=t.typedArrayFromHeap(i);for(let f=0;f`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],p),c=n;u!==null&&(c=Eo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=I.getInnerMostAxes(1,p)[0];I.assertAxesAreInnerMostDims("cumprod",[l],p);let m=t.makeOutput(c.shape,c.dtype),f=c.shape[l],d=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;yP(d,a?1:0,i?1:0,f,h,Ae[n.dtype]);let g=m;if(u!==null){let y=I.getUndoAxesPermutation(u);g=Eo({inputs:{x:m},attrs:{perm:y},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var bP={kernelName:hn,backendName:"wasm",setupFunc:Q9,kernelFunc:Z9};var CP;function J9(r){CP=r.wasm.cwrap(gn,null,["number","number","number","number","number","number"])}function eJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;x.assert(n.dtype==="float32"||n.dtype==="int32",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],p),c=n;u!==null&&(c=Eo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=I.getInnerMostAxes(1,p)[0];I.assertAxesAreInnerMostDims("cumsum",[l],p);let m=t.makeOutput(c.shape,c.dtype),f=c.shape[l],d=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;CP(d,a?1:0,i?1:0,f,h,Ae[n.dtype]);let g=m;if(u!==null){let y=I.getUndoAxesPermutation(u);g=Eo({inputs:{x:m},attrs:{perm:y},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var IP={kernelName:gn,backendName:"wasm",setupFunc:J9,kernelFunc:eJ};var wP;function tJ(r){wP=r.wasm.cwrap(yn,null,["number","number","number","array","number","array","array","number","number"])}function rJ(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a==="NHWC"?[i,l,m,f]:[i,f,l,m],h=e.makeOutput(d,"float32"),y=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(d).buffer),w=new Uint8Array(new Int32Array(x.computeStrides(d)).buffer),k=e.dataIdMap.get(h.dataId).id;return wP(y,s,a==="NHWC"?1:0,b,n.shape.length-1,C,w,d.length,k),h}var SP={kernelName:yn,backendName:"wasm",setupFunc:tJ,kernelFunc:rJ};var vP;function oJ(r){vP=r.wasm.cwrap(bn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function nJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,f=I.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),d=f.filterHeight,h=f.filterWidth,g=f.padInfo.top,y=f.padInfo.right,b=f.padInfo.bottom,C=f.padInfo.left,w=f.dilationHeight,k=f.dilationWidth,_=f.strideHeight,E=f.strideWidth,R=f.inChannels,A=f.outChannels,D=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(f.outShape,"float32"),M=o.dataIdMap.get(O.dataId).id;return vP(a,n.shape[0],n.shape[1],n.shape[2],i,d,h,g,y,b,C,D,w,k,_,E,R,A,M),O}var kP={kernelName:bn,backendName:"wasm",setupFunc:oJ,kernelFunc:nJ};var TP=Qe(In);var sJ=!1,NP=nt(oo,sJ,"bool");var _P=Qe(no,"float32");function Eg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(x.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Mt({inputs:{x:n},backend:o,attrs:{shape:i}})}var EP={kernelName:xs,backendName:"wasm",kernelFunc:Eg};function jw(r){let{attrs:{shape:e,value:t,dtype:o},backend:n}=r,s=n.makeOutput(e,o);return n.typedArrayFromHeap(s).fill(t),s}var $P={kernelName:ys,backendName:"wasm",kernelFunc:jw};var RP;function aJ(r){RP=r.wasm.cwrap(Sn,null,["number","number","number","number","number","number"])}function iJ(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return RP(s,i,p,u,c,a),n}var AP={kernelName:Sn,backendName:"wasm",kernelFunc:iJ,setupFunc:aJ};var FP=Qe(so);var uJ=!1,DP=nt(vn,uJ);var PP;function pJ(r){PP=r.wasm.cwrap(kn,null,["number","number","number","number","number","number","number"])}function cJ(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,f=p!=null?e.dataIdMap.get(p.dataId).id:0,d=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(x.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return PP(c,l,m,f,d,n,g),h}var OP={kernelName:kn,backendName:"wasm",setupFunc:pJ,kernelFunc:cJ};var MP;function lJ(r){MP=r.wasm.cwrap(Do,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function mJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=I.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=$i[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedConv2D in the wasm backend.`);let y=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let X=o.dataIdMap.get(a.dataId);if(X.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`);w=X.id}let k=h.filterHeight,_=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,A=h.padInfo.bottom,D=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,G=h.padInfo.type==="SAME"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let Y=o.makeOutput(h.outShape,"float32"),Z=o.dataIdMap.get(Y.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return MP(y,q,H,j,b,k,_,w,E,R,A,D,G,O,M,L,W,V,C,g,ee,d||0,Z),Y}var LP={kernelName:Do,backendName:"wasm",setupFunc:lJ,kernelFunc:mJ};var BP;function fJ(r){BP=r.wasm.cwrap(Po,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function dJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=I.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=$i[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let X=o.dataIdMap.get(a.dataId);if(X.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${C})`);w=X.id}let k=h.filterHeight,_=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,A=h.padInfo.bottom,D=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,G=h.padInfo.type==="SAME"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let Y=o.makeOutput(h.outShape,"float32"),Z=o.dataIdMap.get(Y.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return BP(y,q,H,j,b,k,_,w,E,R,A,D,G,O,M,L,W,V,C,g,ee,d||0,Z),Y}var VP={kernelName:Po,backendName:"wasm",setupFunc:fJ,kernelFunc:dJ};var zP;function hJ(r){zP=r.wasm.cwrap(Tn,null,["number","number","number","number","number","number","array","number"])}function gJ(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=af.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],f=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),y=e.dataIdMap.get(u.dataId).id;return zP(f,Ae[o.dtype],h,a,l,i,g,y),u}var WP={kernelName:Tn,backendName:"wasm",setupFunc:hJ,kernelFunc:gJ};var UP;function xJ(r){UP=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function yJ(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=x.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let A=0;A=0,()=>`GatherV2: the index value ${D} is not in [0, ${c-1}]`)}let l=I.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Mt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),f=x.sizeFromShape(s.shape),d=Mt({inputs:{x:s},attrs:{shape:[l.batchSize,f/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,f/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(x.sizeFromShape(n.shape)===0)return g;let y=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(d.dataId).id,_=e.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(x.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(x.computeStrides(h)).buffer);return UP(C,Ae[n.dtype],E,y,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(d.dataId),g.shape=l.outputShape,g}var GP={kernelName:bs,backendName:"wasm",setupFunc:xJ,kernelFunc:yJ};var bJ=!1,HP=nt(ao,bJ,"bool");var CJ=!1,qP=nt(io,CJ,"bool");var KP;function IJ(r){KP=r.wasm.cwrap(Nn,null,["number","number","number","number"])}function wJ(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,"float32");if(x.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;KP(n,Ae[e.dtype],t,a)}return s}var jP={kernelName:Nn,backendName:"wasm",setupFunc:IJ,kernelFunc:wJ};var SJ=!1,XP=nt(po,SJ,"bool");var vJ=!1,YP=nt(co,vJ,"bool");var QP=Qe(lo);var kJ=!1,ZP=nt(_n,kJ,"bool");var JP=Qe(En);var TJ=!1,eO=nt(ua,TJ,"bool");var NJ=!1,tO=nt(g0,NJ,"bool");var rO;function _J(r){rO=r.wasm.cwrap($n,null,["number","number","number","number"])}function EJ(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e);if(f){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let d=u.shape.length;I.assertAxesAreInnerMostDims("max",l,d);let[h,g]=I.computeOutAndReduceShapes(u.shape,l),y=x.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;rO(p,Ae[a.dtype],y,C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var oO={kernelName:$n,backendName:"wasm",setupFunc:_J,kernelFunc:EJ};var $J=!1,nO=nt(mo,$J);var sO;function RJ(r){sO=r.wasm.cwrap(Rn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function AJ(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;x.assert(n.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=I.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,f=c.padInfo.top,d=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,y=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,w=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let E=o.makeOutput(c.outShape,"float32"),R=o.dataIdMap.get(E.dataId).id;return sO(s,n.shape[0],n.shape[1],n.shape[2],l,m,f,d,h,g,y,b,C,w,k,_,R),E}var aO={kernelName:Rn,backendName:"wasm",setupFunc:RJ,kernelFunc:AJ};var iO;function FJ(r){iO=r.wasm.cwrap(An,null,["number, number, number"])}function DJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let w=e.dataIdMap.get(c.dataId).id;w!==i&&(u=c,p=w,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims("mean",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=cs({backend:e,inputs:{x:u},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,"float32");if(x.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(C.dataId).id;iO(p,y,w)}if(f&&e.disposeData(c.dataId),s){let w=I.expandShapeToKeepDim(C.shape,m);C.shape=w}return u.dtype!=="float32"&&e.disposeData(b.dataId),C}var uO={kernelName:An,backendName:"wasm",setupFunc:FJ,kernelFunc:DJ};var pO;function PJ(r){pO=r.wasm.cwrap(Fn,null,["number","number","number","number"])}function OJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e);if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let d=u.shape.length;I.assertAxesAreInnerMostDims("min",l,d);let[h,g]=I.computeOutAndReduceShapes(u.shape,l),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;pO(p,Ae[a.dtype],y,C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var cO={kernelName:Fn,backendName:"wasm",setupFunc:PJ,kernelFunc:OJ};var MJ=!1,lO=nt(fo,MJ);var Xw;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Xw||(Xw={}));var mO;function LJ(r){mO=r.wasm.cwrap(Dn,null,["number","array","number","number","array","array","number","number"])}function BJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((d,h)=>d[0]+e.shape[h]+d[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(d=>d[0]),l=o.map(d=>d[1]),m=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(l).buffer);return mO(a,u,e.shape.length,Ae[e.dtype],m,f,Xw[n],p),i}var fO={kernelName:Dn,backendName:"wasm",kernelFunc:BJ,setupFunc:LJ};var VJ=!0,dO=nt(ho,VJ);var hO=Qe(Pn);function kc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var gO;function zJ(r){gO=r.wasm.cwrap(On,"number",["number","number","number","number","number"])}function WJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=gO(u,c,s,n,a),{pSelectedIndices:m,selectedSize:f,pSelectedScores:d,pValidOutputs:h}=kc(e,l);return e.wasm._free(d),e.wasm._free(h),e.makeOutput([f],"int32",m)}var xO={kernelName:On,backendName:"wasm",setupFunc:zJ,kernelFunc:WJ};var yO;function UJ(r){yO=r.wasm.cwrap(pa,"number",["number","number","number","number","number","bool"])}function GJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=yO(c,l,s,n,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=kc(e,m);e.wasm._free(h);let y=e.makeOutput([d],"int32",f),b=e.makeOutput([],"int32",g);return[y,b]}var bO={kernelName:pa,backendName:"wasm",setupFunc:UJ,kernelFunc:GJ};var CO;function HJ(r){CO=r.wasm.cwrap(Mn,"number",["number","number","number","number","number","number"])}function qJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=CO(c,l,s,n,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=kc(e,m);e.wasm._free(g);let y=e.makeOutput([d],"int32",f),b=e.makeOutput([d],"float32",h);return[y,b]}var IO={kernelName:Mn,backendName:"wasm",setupFunc:HJ,kernelFunc:qJ};var KJ=!1,wO=nt(go,KJ,"bool");var SO;function jJ(r){SO=r.wasm.cwrap(ca,null,["number","number","number","number","number"])}function XJ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return SO(m,a,i,p,c),u}var vO={kernelName:ca,backendName:"wasm",setupFunc:jJ,kernelFunc:XJ};function YJ(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var kO={kernelName:Cs,backendName:"wasm",kernelFunc:YJ};function QJ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Eg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),x.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Eg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=qw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var TO={kernelName:Is,backendName:"wasm",kernelFunc:QJ};var NO;function ZJ(r){NO=r.wasm.cwrap(Ln,null,["number","array","number","number","array","array","number","number"])}function JJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(x.sizeFromShape(e.shape)===0)return jw({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),f=new Uint8Array(new Int32Array(l).buffer),d=new Uint8Array(new Int32Array(m).buffer);return NO(a,c,e.shape.length,Ae[e.dtype],f,d,n,u),i}var $g={kernelName:Ln,backendName:"wasm",kernelFunc:JJ,setupFunc:ZJ};var eee=!1,_O=nt(Bn,eee);var EO;function tee(r){EO=r.wasm.cwrap(Vn,null,["number","number","number"])}function ree(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=cs({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,"float32"),l=t.dataIdMap.get(c.dataId).id;return EO(i,a,l),p.dtype!=="float32"&&t.disposeData(u.dataId),c}var $O={kernelName:Vn,backendName:"wasm",setupFunc:tee,kernelFunc:ree};var RO;function oee(r){RO=r.wasm.cwrap(Ao,null,["number","number","number","number"])}function nee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims("prod",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;RO(p,y,Ae[b.dtype],C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var AO={kernelName:Ao,backendName:"wasm",setupFunc:oee,kernelFunc:nee};var see=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Su(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},FO={kernelName:ws,backendName:"wasm",kernelFunc:see};var aee=!0,DO=nt(Cn,aee);var PO=Qe(zn);var OO=Qe(Gn);var MO;function iee(r){MO=r.wasm.cwrap(Un,null,["number","number","number","number","number","number","number","number","number","number"])}function uee(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,f]=n.shape,d=[c,p,u,f],h=e.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=cs({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),h=e.dataIdMap.get(g.dataId));let y=h.id,b=e.makeOutput(d,"float32");if(x.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return MO(y,c,l,m,f,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var LO={kernelName:Un,backendName:"wasm",setupFunc:iee,kernelFunc:uee};var BO;function pee(r){BO=r.wasm.cwrap(Wn,null,["number","number","number","number","number","number","number","number","number","number"])}function cee(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,f]=n.shape,d=[c,p,u,f],h=e.makeOutput(d,"float32");if(x.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),y;g.dtype!=="float32"&&(y=cs({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),g=e.dataIdMap.get(y.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return BO(b,c,l,m,f,p,u,s?1:0,a?1:0,C),y!=null&&e.disposeData(y.dataId),h}var VO={kernelName:Wn,backendName:"wasm",setupFunc:pee,kernelFunc:cee};var zO;function lee(r){zO=r.wasm.cwrap(fa,null,["number","array","number","array","number","number"])}function mee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=x.parseAxisParam(s,n.shape);if(n.shape.length===0)return zu({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);zO(p,c,a.length,l,n.shape.length,u);let m=Mt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var WO={kernelName:fa,backendName:"wasm",kernelFunc:mee,setupFunc:lee};var UO;function fee(r){UO=r.wasm.cwrap(es,null,["number","number","number","number","number","number","number","number","array","number","number"])}function dee(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,f,d]=n.shape,[h,g]=I.getImageCenter(i,m,f),y=a===0,b=255,C=typeof a=="number"?[a,a,a,y?0:b]:[...a,b],w=new Uint8Array(new Int32Array(C).buffer);return UO(u,l,m,f,d,s,h,g,w,C.length,c),p}var GO={kernelName:es,backendName:"wasm",kernelFunc:dee,setupFunc:fee};var HO=Qe(da);var qO=Qe(xo);var KO;function hee(r){KO=r.wasm.cwrap(Hn,null,["number","number","number","number","number","number","array","number","number"])}function gee(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(x.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=cl.calculateShapes(s,n,a),d=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return KO(d,g,Ae[s.dtype],p,u,c,y,m,b),i}var jO={kernelName:Hn,backendName:"wasm",setupFunc:hee,kernelFunc:gee};var XO;function xee(r){XO=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function yee(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,f=l===0||l>1||m===1?1:x.sizeFromShape(n.shape.slice(1));return XO(a,i,p,f,c),u}var YO={kernelName:vs,backendName:"wasm",kernelFunc:yee,setupFunc:xee};var QO;function bee(r){QO=r.wasm.cwrap(yo,null,["number","number"])}function Cee(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return x.sizeFromShape(n.shape)===0||QO(o,s),n}var ZO={kernelName:"Sigmoid",backendName:"wasm",setupFunc:bee,kernelFunc:Cee};var JO=Qe(Kn);var e3;function Iee(r){e3=r.wasm.cwrap(Xn,null,["number","number","number","number"])}function wee(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=x.sizeFromShape(t.shape)/i;return x.sizeFromShape(s.shape)===0||e3(n,a,i,p),s}var t3={kernelName:Xn,backendName:"wasm",setupFunc:Iee,kernelFunc:wee};function See(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=x.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_{let R=w.shape[0],D=w.shape[1],P=S.segment_util.segOpComputeOptimalWindowSize(D,A),M={windowSize:P,inSize:D,batchSize:R,numSegments:A},L=new xg(M,k),W=t.compileAndRun(L,[w,_],$);if(p.push(W),W.shape[1]===A)return W;let V=Bw({backend:t,attrs:{start:0,stop:A,step:1,dtype:"float32"}}),U=Vw({inputs:{x:V},backend:t,attrs:{reps:[D/P]}});return p.push(V),p.push(U),g(W,k,U,$,A)},x=g(f,"unsortedSegmentSum",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let w=S.getUndoAxesPermutation(c);C=xt({inputs:{x:C},backend:t,attrs:{perm:w}})}return p.forEach(w=>t.disposeIntermediateTensorInfo(w)),C}var lD={kernelName:Np,backendName:"webgl",kernelFunc:zZ};var WZ=[Y$,Z$,J$,eA,rA,oA,nA,sA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,CA,wA,IA,vA,_A,$A,AA,V$,FA,OA,PA,MA,LA,BA,VA,zA,WA,UA,GA,KA,jA,XA,YA,QA,ZA,JA,eR,tR,rR,oR,nR,sR,aR,iR,uR,cR,lR,mR,dR,hR,gR,xR,yR,bR,CR,SR,wR,IR,B$,vR,DA,kR,NR,TR,z$,_R,ER,$R,AR,RR,FR,DR,OR,PR,MR,BR,VR,zR,WR,UR,GR,qR,jR,XR,YR,QR,ZR,oF,G$,nF,sF,aF,iF,kA,uF,lF,mF,dF,fF,W$,hF,gF,xF,yF,bF,NA,JR,CF,SF,wF,q$,IF,vF,kF,NF,TF,_F,EF,$F,AF,RF,FF,DF,OF,PF,MF,LF,SA,rF,BF,VF,zF,WF,UF,GF,HF,qF,jF,XF,QF,ZF,JF,eD,tD,rD,tF,j$,oD,nD,sD,iD,uD,X$,pD,cD,lD,pF];for(let r of WZ)Ia(r);var Fe;(function(r){r[r.float32=0]="float32",r[r.int32=1]="int32",r[r.bool=2]="bool",r[r.string=3]="string",r[r.complex64=4]="complex64"})(Fe||(Fe={}));var Wi;(function(r){r[r.linear=0]="linear",r[r.relu=1]="relu",r[r.relu6=2]="relu6",r[r.prelu=3]="prelu",r[r.leakyrelu=4]="leakyrelu",r[r.sigmoid=5]="sigmoid",r[r.elu=6]="elu"})(Wi||(Wi={}));var mD;function UZ(r){mD=r.wasm.cwrap(fo,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function GZ(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let A=t.dataIdMap.get(a.dataId);if(A.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${A.shape.length}.`);f=A.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=Wi[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),w=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(w.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return mD(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),w}var dD={kernelName:fo,backendName:"wasm",setupFunc:UZ,kernelFunc:GZ};function Ve(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,["number","number","number"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,Fe[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var fD=Ve(gs);function rt(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,d=t!=null?t:u.dtype,f=S.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return(()=>o(l,g,u.shape.length,m,x,c.shape.length,Fe[u.dtype],b))(),h}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:s}}var HZ=!0,hD=rt(eo,HZ);var gD;function qZ(r){gD=r.wasm.cwrap(Mo,null,["array","number","number","number"])}function KZ(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return gD(s,n.length,Fe[o.dtype],a),o}var xD={kernelName:Mo,backendName:"wasm",setupFunc:qZ,kernelFunc:KZ};function Vu(r){let{inputs:{x:e},backend:t}=r;if(e.dtype==="string")return nr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var yD={kernelName:mo,backendName:"wasm",kernelFunc:Vu};var bD;function jZ(r){bD=r.wasm.cwrap(ro,null,["number","array","number","number","number","array","number"])}function uo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=YZ(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var CD={kernelName:ro,backendName:"wasm",kernelFunc:uo,setupFunc:jZ};function kr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=S.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var ED={kernelName:Ns,backendName:"wasm",kernelFunc:Mt};var $D;function s9(r){$D=r.wasm.cwrap(Wo,null,["number","array","number","number","array","number","number","number","number"])}function a9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=br.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let w=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=Mt({inputs:{x:n},backend:t,attrs:{shape:w}}),$=Mt({inputs:{x:s},backend:t,attrs:{shape:k}}),A=t.dataIdMap.get(_.dataId).id,R=t.dataIdMap.get($.dataId).id,D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,D,P],_.dtype),W=t.dataIdMap.get(L.dataId).id,V=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return $D(A,V,_.shape.length,R,U,$.shape.length,a,i,W),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var AD={kernelName:Wo,backendName:"wasm",setupFunc:s9,kernelFunc:a9};function Eo(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=ut.parseSliceParams(e,t,o),i=ut.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=y.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=ut.computeFlatOffset(s,c);return e.dtype==="string"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype==="string"){let f=vu(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)i9(p,c[0],m,s,a);else if(d===3)u9(p,c[0],c[1],m,s,a);else if(d===4)p9(p,c[0],c[1],c[2],m,s,a);else{let f=vu(p,s,a,e.shape,e.dtype);m.set(f)}return u}function i9(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=Mt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=uo({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Mt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Eo({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(d.dataId),g}var FD={kernelName:xs,backendName:"wasm",kernelFunc:c9};function ls(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var DD={kernelName:co,backendName:"wasm",kernelFunc:ls};var OD=Ve(Uo);var PD;function l9(r){PD=r.wasm.cwrap(lo,null,["number","number","number","number"])}function m9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return PD(i,s,a,u),p}var MD={kernelName:lo,backendName:"wasm",setupFunc:l9,kernelFunc:m9};function zw(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);S.assertParamsConsistent(n,o);let s=S.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Vu({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype==="string"){let d=a.map(C=>{let k=[-1,y.sizeFromShape(C.shape.slice(o))];return Mt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=S.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=Su(f,s,e[0].dtype,h),x=S.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=S.fromStringArrayToUint8(g),d.forEach(C=>t.disposeData(C.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),l=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=S.getAxesPermutation([s],p),c=n;u!==null&&(c=uo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=S.getInnerMostAxes(1,p)[0];S.assertAxesAreInnerMostDims("cumprod",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;KD(f,a?1:0,i?1:0,d,h,Fe[n.dtype]);let g=m;if(u!==null){let x=S.getUndoAxesPermutation(u);g=uo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var jD={kernelName:jo,backendName:"wasm",setupFunc:b9,kernelFunc:C9};var XD;function S9(r){XD=r.wasm.cwrap(Xo,null,["number","number","number","number","number","number"])}function w9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype==="float32"||n.dtype==="int32",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=S.getAxesPermutation([s],p),c=n;u!==null&&(c=uo({inputs:{x:n},attrs:{perm:u},backend:t}));let l=S.getInnerMostAxes(1,p)[0];S.assertAxesAreInnerMostDims("cumsum",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;XD(f,a?1:0,i?1:0,d,h,Fe[n.dtype]);let g=m;if(u!==null){let x=S.getUndoAxesPermutation(u);g=uo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var YD={kernelName:Xo,backendName:"wasm",setupFunc:S9,kernelFunc:w9};var QD;function I9(r){QD=r.wasm.cwrap(Qo,null,["number","number","number","array","number","array","array","number","number"])}function v9(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=e.makeOutput(f,"float32"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(f).buffer),w=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return QD(x,s,a==="NHWC"?1:0,b,n.shape.length-1,C,w,f.length,k),h}var ZD={kernelName:Qo,backendName:"wasm",setupFunc:I9,kernelFunc:v9};var JD;function k9(r){JD=r.wasm.cwrap(Zo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function N9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,d=S.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,C=d.padInfo.left,w=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,A=d.inChannels,R=d.outChannels,D=d.padInfo.type==="SAME"?1:0;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let P=o.makeOutput(d.outShape,"float32"),M=o.dataIdMap.get(P.dataId).id;return JD(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,D,w,k,_,$,A,R,M),P}var eO={kernelName:Zo,backendName:"wasm",setupFunc:k9,kernelFunc:N9};var tO=Ve(en);var T9=!1,rO=rt(tn,T9,"bool");var oO=Ve(rn,"float32");function yg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Mt({inputs:{x:n},backend:o,attrs:{shape:i}})}var nO={kernelName:bs,backendName:"wasm",kernelFunc:yg};function Uw(r){let{attrs:{shape:e,value:t,dtype:o},backend:n}=r,s=n.makeOutput(e,o);return n.typedArrayFromHeap(s).fill(t),s}var sO={kernelName:Cs,backendName:"wasm",kernelFunc:Uw};var aO;function _9(r){aO=r.wasm.cwrap(on,null,["number","number","number","number","number","number"])}function E9(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return aO(s,i,p,u,c,a),n}var iO={kernelName:on,backendName:"wasm",kernelFunc:E9,setupFunc:_9};var uO=Ve(nn);var $9=!1,pO=rt(sn,$9);var cO;function A9(r){cO=r.wasm.cwrap(an,null,["number","number","number","number","number","number","number"])}function R9(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return cO(c,l,m,d,f,n,g),h}var lO={kernelName:an,backendName:"wasm",setupFunc:A9,kernelFunc:R9};var mO;function F9(r){mO=r.wasm.cwrap(ho,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function D9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=S.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=Wi[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let Y=o.dataIdMap.get(a.dataId);if(Y.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`);if(Y.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`);w=Y.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,A=h.padInfo.right,R=h.padInfo.bottom,D=h.padInfo.left,P=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,U=h.padInfo.type==="SAME"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let X=o.makeOutput(h.outShape,"float32"),Z=o.dataIdMap.get(X.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return mO(x,q,H,j,b,k,_,w,$,A,R,D,U,P,M,L,W,V,C,g,ee,f||0,Z),X}var dO={kernelName:ho,backendName:"wasm",setupFunc:F9,kernelFunc:D9};var fO;function O9(r){fO=r.wasm.cwrap(go,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function P9(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=S.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=Wi[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,w=0;if(a!=null){let Y=o.dataIdMap.get(a.dataId);if(Y.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${Y.shape.length}.`);if(Y.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${Y.shape}) does not match the number of output channels (${C})`);w=Y.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,A=h.padInfo.right,R=h.padInfo.bottom,D=h.padInfo.left,P=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,W=h.strideWidth,V=h.inChannels,U=h.padInfo.type==="SAME"?1:0,q=h.batchSize,H=h.inHeight,j=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let X=o.makeOutput(h.outShape,"float32"),Z=o.dataIdMap.get(X.dataId).id,ee=i==null?0:o.dataIdMap.get(i.dataId).id;return fO(x,q,H,j,b,k,_,w,$,A,R,D,U,P,M,L,W,V,C,g,ee,f||0,Z),X}var hO={kernelName:go,backendName:"wasm",setupFunc:O9,kernelFunc:P9};var gO;function M9(r){gO=r.wasm.cwrap(un,null,["number","number","number","number","number","number","array","number"])}function L9(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=Ym.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return gO(d,Fe[o.dtype],h,a,l,i,g,x),u}var xO={kernelName:un,backendName:"wasm",setupFunc:M9,kernelFunc:L9};var yO;function B9(r){yO=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function V9(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let R=0;R=0,()=>`GatherV2: the index value ${D} is not in [0, ${c-1}]`)}let l=S.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Mt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=Mt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,_=e.dataIdMap.get(g.dataId).id,$=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),A=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return yO(C,Fe[n.dtype],$,x,k,l.batchSize,A,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var bO={kernelName:Ss,backendName:"wasm",setupFunc:B9,kernelFunc:V9};var z9=!1,CO=rt(pn,z9,"bool");var W9=!1,SO=rt(cn,W9,"bool");var wO=Ve(ln,"bool");var IO;function U9(r){IO=r.wasm.cwrap(mn,null,["number","number","number","number"])}function G9(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,"float32");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;IO(n,Fe[e.dtype],t,a)}return s}var vO={kernelName:mn,backendName:"wasm",setupFunc:U9,kernelFunc:G9};var H9=!1,kO=rt(dn,H9,"bool");var q9=!1,NO=rt(fn,q9,"bool");var TO=Ve(hn);var K9=!1,_O=rt(gn,K9,"bool");var EO=Ve(xn);var j9=!1,$O=rt(xa,j9,"bool");var X9=!1,AO=rt(GI,X9,"bool");var RO;function Y9(r){RO=r.wasm.cwrap(yn,null,["number","number","number","number"])}function Q9(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;S.assertAxesAreInnerMostDims("max",l,f);let[h,g]=S.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;RO(p,Fe[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FO={kernelName:yn,backendName:"wasm",setupFunc:Y9,kernelFunc:Q9};var Z9=!1,DO=rt(bn,Z9);var OO;function J9(r){OO=r.wasm.cwrap(Cn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function eJ(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=S.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,d=c.padInfo.top,f=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,w=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let $=o.makeOutput(c.outShape,"float32"),A=o.dataIdMap.get($.dataId).id;return OO(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,w,k,_,A),$}var PO={kernelName:Cn,backendName:"wasm",setupFunc:J9,kernelFunc:eJ};var MO;function tJ(r){MO=r.wasm.cwrap(Sn,null,["number, number, number"])}function rJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let w=e.dataIdMap.get(c.dataId).id;w!==i&&(u=c,p=w,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=ls({backend:e,inputs:{x:u},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(C.dataId).id;MO(p,x,w)}if(d&&e.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(C.shape,m);C.shape=w}return u.dtype!=="float32"&&e.disposeData(b.dataId),C}var LO={kernelName:Sn,backendName:"wasm",setupFunc:tJ,kernelFunc:rJ};var BO;function oJ(r){BO=r.wasm.cwrap(wn,null,["number","number","number","number"])}function nJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;S.assertAxesAreInnerMostDims("min",l,f);let[h,g]=S.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;BO(p,Fe[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var VO={kernelName:wn,backendName:"wasm",setupFunc:oJ,kernelFunc:nJ};var sJ=!1,zO=rt(In,sJ);var Gw;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Gw||(Gw={}));var WO;function aJ(r){WO=r.wasm.cwrap(vn,null,["number","array","number","number","array","array","number","number"])}function iJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(f=>f[0]),l=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(c).buffer),d=new Uint8Array(new Int32Array(l).buffer);return WO(a,u,e.shape.length,Fe[e.dtype],m,d,Gw[n],p),i}var UO={kernelName:vn,backendName:"wasm",kernelFunc:iJ,setupFunc:aJ};var uJ=!0,GO=rt(kn,uJ);var HO=Ve(ws);function Sc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var qO;function pJ(r){qO=r.wasm.cwrap(Tn,"number",["number","number","number","number","number"])}function cJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=qO(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Sc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],"int32",m)}var KO={kernelName:Tn,backendName:"wasm",setupFunc:pJ,kernelFunc:cJ};var jO;function lJ(r){jO=r.wasm.cwrap(ba,"number",["number","number","number","number","number","bool"])}function mJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=jO(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Sc(e,m);e.wasm._free(h);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([],"int32",g);return[x,b]}var XO={kernelName:ba,backendName:"wasm",setupFunc:lJ,kernelFunc:mJ};var YO;function dJ(r){YO=r.wasm.cwrap(_n,"number",["number","number","number","number","number","number"])}function fJ(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=YO(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Sc(e,m);e.wasm._free(g);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([f],"float32",h);return[x,b]}var QO={kernelName:_n,backendName:"wasm",setupFunc:dJ,kernelFunc:fJ};var hJ=!1,ZO=rt(Nn,hJ,"bool");var JO;function gJ(r){JO=r.wasm.cwrap(En,null,["number","number","number","number","number"])}function xJ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return JO(m,a,i,p,c),u}var eP={kernelName:En,backendName:"wasm",setupFunc:gJ,kernelFunc:xJ};function yJ(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var tP={kernelName:Is,backendName:"wasm",kernelFunc:yJ};function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return yg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=yg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=zw({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var rP={kernelName:vs,backendName:"wasm",kernelFunc:bJ};var oP;function CJ(r){oP=r.wasm.cwrap($n,null,["number","array","number","number","array","array","number","number"])}function SJ(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Uw({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(l).buffer),f=new Uint8Array(new Int32Array(m).buffer);return oP(a,c,e.shape.length,Fe[e.dtype],d,f,n,u),i}var bg={kernelName:$n,backendName:"wasm",kernelFunc:SJ,setupFunc:CJ};var wJ=!1,nP=rt(An,wJ);var sP;function IJ(r){sP=r.wasm.cwrap(Rn,null,["number","number","number"])}function vJ(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=ls({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,"float32"),l=t.dataIdMap.get(c.dataId).id;return sP(i,a,l),p.dtype!=="float32"&&t.disposeData(u.dataId),c}var aP={kernelName:Rn,backendName:"wasm",setupFunc:IJ,kernelFunc:vJ};var iP;function kJ(r){iP=r.wasm.cwrap(Fn,null,["number","number","number","number"])}function NJ(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;iP(p,x,Fe[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var uP={kernelName:Fn,backendName:"wasm",setupFunc:kJ,kernelFunc:NJ};var TJ=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Iu(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},pP={kernelName:ks,backendName:"wasm",kernelFunc:TJ};var _J=!0,cP=rt(Jo,_J);var lP=Ve(Dn);var mP=Ve(On);var dP=Ve(Ln);var fP;function EJ(r){fP=r.wasm.cwrap(Mn,null,["number","number","number","number","number","number","number","number","number","number"])}function $J(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=ls({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return fP(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var hP={kernelName:Mn,backendName:"wasm",setupFunc:EJ,kernelFunc:$J};var gP;function AJ(r){gP=r.wasm.cwrap(Pn,null,["number","number","number","number","number","number","number","number","number","number"])}function RJ(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!=="float32"&&(x=ls({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return gP(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var xP={kernelName:Pn,backendName:"wasm",setupFunc:AJ,kernelFunc:RJ};var yP;function FJ(r){yP=r.wasm.cwrap(Bn,null,["number","array","number","array","number","number"])}function DJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Vu({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);yP(p,c,a.length,l,n.shape.length,u);let m=Mt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var bP={kernelName:Bn,backendName:"wasm",kernelFunc:DJ,setupFunc:FJ};var CP;function OJ(r){CP=r.wasm.cwrap(es,null,["number","number","number","number","number","number","number","number","array","number","number"])}function PJ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,d,f]=n.shape,[h,g]=S.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a=="number"?[a,a,a,x?0:b]:[...a,b],w=new Uint8Array(new Int32Array(C).buffer);return CP(u,l,m,d,f,s,h,g,w,C.length,c),p}var SP={kernelName:es,backendName:"wasm",kernelFunc:PJ,setupFunc:OJ};var wP=Ve(Ca);var IP=Ve(Vn);var vP;function MJ(r){vP=r.wasm.cwrap(zn,null,["number","number","number","number","number","number","array","number","number"])}function LJ(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=rl.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return vP(f,g,Fe[s.dtype],p,u,c,x,m,b),i}var kP={kernelName:zn,backendName:"wasm",setupFunc:MJ,kernelFunc:LJ};var NP;function BJ(r){NP=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function VJ(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,d=l===0||l>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return NP(a,i,p,d,c),u}var TP={kernelName:Ts,backendName:"wasm",kernelFunc:VJ,setupFunc:BJ};var _P;function zJ(r){_P=r.wasm.cwrap(Un,null,["number","number"])}function WJ(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||_P(o,s),n}var EP={kernelName:"Sigmoid",backendName:"wasm",setupFunc:zJ,kernelFunc:WJ};var $P=Ve(Wn);var AP;function UJ(r){AP=r.wasm.cwrap(qn,null,["number","number","number","number"])}function GJ(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||AP(n,a,i,p),s}var RP={kernelName:qn,backendName:"wasm",setupFunc:UJ,kernelFunc:GJ};function HJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_0?p+1:0;if(c<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,f=t.dataIdMap.get(s.dataId).id,d=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,y=t.makeOutput([4],"int32"),b=t.dataIdMap.get(y.dataId).id;i3(m,Ae[n.dtype],n.shape[0],f,d,g,b,e,0);let C=t.readSync(y.dataId),w;switch(C[0]){case 0:{w=I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{w=I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:w=I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:w=I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:w=""}if(t.disposeData(y.dataId),w)throw t.disposeData(h.dataId),new Error(w);return h}function _ee(r){return Ag(r,!0)}var u3={kernelName:Za,backendName:"wasm",setupFunc:Rg,kernelFunc:_ee};function Eee(r){return Ag(r,!1)}var p3={kernelName:Ja,backendName:"wasm",setupFunc:Rg,kernelFunc:Eee};function $ee(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let f=Xo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,f})}var c3={kernelName:Ts,backendName:"wasm",kernelFunc:$ee};var l3=Qe(bo);var m3=Qe(ti);var Ree=!0,f3=nt(Co,Ree);var d3;function Aee(r){d3=r.wasm.cwrap($s,null,["number","number","number","number"])}function Fee(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return d3(a,n,Ae[s.dtype],p),i}var h3={kernelName:$s,backendName:"wasm",setupFunc:Aee,kernelFunc:Fee};var g3;function Dee(r){g3=r.wasm.cwrap(Yn,null,["number","array","number","array","array","array","array","array","number","number"])}function Pee(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Mt({inputs:{x:n},backend:e,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=Xo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Mt({inputs:{x:E},backend:e,attrs:{shape:d}}),e.disposeData(E.dataId)}else{let _=e.makeOutput(f,"float32"),E=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),A=new Uint8Array(new Int32Array(b).buffer),D=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(w).buffer),M=new Uint8Array(new Int32Array(f).buffer),L=new Uint8Array(new Int32Array(x.computeStrides(f)).buffer),W=e.dataIdMap.get(_.dataId).id;g3(E,R,n.shape.length,A,D,O,M,L,f.length,W),k=Mt({inputs:{x:_},backend:e,attrs:{shape:d}}),e.disposeData(_.dataId)}return k}var x3={kernelName:Yn,backendName:"wasm",setupFunc:Dee,kernelFunc:Pee};function Oee(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),f=e.readSync(s.dataId),[d,h]=ku(m,f,a,i,p,u,c,l),g=e.makeOutput([d.length],"string"),y=e.dataIdMap.get(g.dataId);y.stringBytes=d;let b=e.makeOutput(s.shape,"int32");return e.typedArrayFromHeap(b).set(h),[g,b]}var y3={kernelName:Ns,backendName:"wasm",kernelFunc:Oee};function Mee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=Tu(i,p[0],a),m=c.length,f=e.makeOutput([m,2],"int32");e.typedArrayFromHeap(f).set(u);let h=e.makeOutput([m],"string"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let y=e.makeOutput([2],"int32");return e.typedArrayFromHeap(y).set(l),[f,h,y]}var b3={kernelName:ri,backendName:"wasm",kernelFunc:Mee};function Lee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=Nu(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var C3={kernelName:oi,backendName:"wasm",kernelFunc:Lee};var Bee=!0,I3=nt(Io,Bee);var w3;function Vee(r){w3=r.wasm.cwrap(jn,null,["number","number","number","number"])}function zee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:f}=kr(a,n,e),d=l;if(f){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,d=I.getInnerMostAxes(d.length,u.shape.length))}I.assertAxesAreInnerMostDims("sum",d,u.shape.length);let[h,g]=I.computeOutAndReduceShapes(u.shape,d),y=x.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(x.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;w3(p,y,Ae[b.dtype],C)}if(f&&e.disposeData(c.dataId),s){let C=I.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var S3={kernelName:jn,backendName:"wasm",setupFunc:Vee,kernelFunc:zee};var v3=Qe(xa);var k3=Qe(Qn);var T3;function Wee(r){T3=r.wasm.cwrap(wo,null,["number","array","number","array","number","number"])}function Uee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,"int32"),m=e.dataIdMap.get(l.dataId).id;return _3(a,i,o.shape.length,Ae[o.dtype],n,s,c,m),[u,l]},E3={kernelName:Zn,backendName:"wasm",setupFunc:Gee,kernelFunc:Hee};var $3;function qee(r){$3=r.wasm.cwrap(Jn,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Kee(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Uint8Array(new Int32Array(x.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(x.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),w=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,A=a==="nearest"?1:2,D;switch(i){case"constant":D=1;break;case"reflect":D=2;break;case"wrap":D=3;break;case"nearest":D=4;break;default:D=1;break}return $3(_,R,s.shape[0]>1,c,d,h,f,m,l,y,n.shape.length-1,b,g.length-1,A,D,p,w),C}var R3={kernelName:Jn,backendName:"wasm",setupFunc:qee,kernelFunc:Kee};function jee(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let f=0;f({dataId:f,dtype:d,shape:p}))}var A3={kernelName:_s,backendName:"wasm",kernelFunc:jee};function Xee(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var F3={kernelName:Es,backendName:"wasm",kernelFunc:Xee};var Yee=[LD,BD,VD,WD,KD,XD,QD,JD,rP,nP,sP,aP,uP,pP,lP,fP,dP,hP,xP,bP,IP,SP,kP,TP,NP,_P,EP,$P,AP,FP,DP,OP,LP,VP,WP,GP,HP,qP,UD,jP,XP,YP,QP,ZP,JP,eO,tO,oO,nO,aO,uO,cO,lO,fO,dO,hO,xO,bO,IO,wO,vO,kO,TO,$g,_O,$O,AO,FO,DO,PO,OO,eP,LO,VO,WO,GO,HO,qO,jO,YO,ZO,JO,oP,t3,r3,n3,a3,u3,p3,c3,l3,m3,f3,h3,x3,y3,b3,C3,I3,S3,v3,k3,N3,E3,R3,HD,A3,F3];for(let r of Yee)ya(r);var Yw=P();Yw.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(r){return!1}});Yw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Yw.get("IS_NODE"))return!1;try{return 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(r){return!1}});var oS=rp(M3()),U3=rp(B3()),nS=rp(V3());var z3=oS.default||oS,Qee=nS.default||nS,Gl=class extends Jr{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(H3),rS=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new rn(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=x.now();return e(),{kernelMs:x.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=x.sizeFromShape(o),p=i*x.bytesPerElement(n),u=this.wasm._malloc(p);this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s==="string")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||x.sizeFromShape(a);let p=x.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return Jee(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o){let n;if(o==null)n=this.write(null,e,t);else{let s=this.dataIdNextNumber++;n={id:s},this.dataIdMap.set(n,{id:s,memoryOffset:o,shape:e,dtype:t,refCount:1});let a=x.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,o)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=x.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,s,a);case"int32":return new Int32Array(n,s,a);case"bool":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function Zee(r){return(e,t)=>(x.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function W3(r,e,t){if(Pg!=null)return Pg;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),Wl!=null&&Wl[o]!=null?Wl[o]:t+o}async function G3(){let[r,e]=await Promise.all([P().getAsync("WASM_HAS_SIMD_SUPPORT"),P().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=U3.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?W3(r,e,zl!=null?zl:p):p+i},sS&&(n.instantiateWasm=Zee(W3(r,e,zl!=null?zl:"")));let s=!1;n.onAbort=()=>{if(s||Ul)return;Ul=!0,o({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let a;e&&r&&Pg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+z3.toString()],{type:"text/javascript"}),a=z3(n)):a=Qee(n),a.then(i=>{s=!0,Ul=!1;let p=null;i.tfjs={init:i.cwrap("init",null,[]),initWithThreadsCount:i.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:i.cwrap("get_threads_count","number",[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",p,["number"]),dispose:i.cwrap("dispose",p,[])},t({wasm:i})}).catch(o)})}function Jee(r,e){switch(e){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var ete=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Pg=null,zl=null,Wl={},Ul=!1,sS=!1;function tte(r,e=!1){if(sC("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Ul)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Pg=r,sS=e}function rte(r,e=!1){if(Ul)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof r=="string")zl=r;else{Wl=r;let t=ete.filter(o=>Wl[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}sS=e}var H3=-1,rS=-1;function ote(r){H3=r}function nte(){if(rS===-1)throw new Error("WASM backend not initialized.");return rS}var ste="4.0.0";var ate=2;pi("wasm",async()=>{let{wasm:r}=await G3();return new Gl(r)},ate);var Va=P();Va.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);Va.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);Va.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);Va.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!1);Va.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);Va.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);Va.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);Va.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);Va.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);var Og=class{constructor(e){e&&(this.vendor=e.vendor)}isIntel(){return this.vendor==="intel"}};var Mg=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,o=!1){let n=q3(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let a=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(a),a}this.numBytesAllocated+=e;let s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o});return this.usedBuffers.get(n).push(s),s}releaseBuffer(e,t,o){if(this.freeBuffers.size===0)return;let n=q3(t,o);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let s=this.usedBuffers.get(n),a=s.indexOf(e);if(a<0)throw new Error("Cannot release a buffer that was never provided by this buffer manager");s.splice(a,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,o){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,o)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function q3(r,e){return`${r}_${e}`}var Lg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=j3(o),a=e*t*s,i=K3(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e,t,o,n,s){if(this.freeTextures.size===0)return;let a=K3(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=j3(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function K3(r,e,t,o){return`${r}_${e}_${t}_${o}`}function j3(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function X3(r,e){if(Math.max(...r)>3)throw new Error("Cannot symbolically compute strides for rank > 4 tensor.");let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}var Z3=(r,e,t,o)=>{let n={dtype:o.dtype,shape:o.shape},s=ite(t,n,e),a=r.createShaderModule({code:s,label:e.constructor.name});return r.createComputePipeline({compute:{module:a,entryPoint:"_start"},label:e.constructor.name,layout:"auto"})};function At(r){if(r<=1)return"i32";if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4";if(r===5)return"vec5";if(r===6)return"vec6";throw Error(`GPU for rank ${r} is not yet supported`)}function Yo(r){if(r===0)return"x";if(r===1)return"y";if(r===2)return"z";if(r===3)return"w";if(r===4)return"u";if(r===5)return"v";throw Error(`Index ${r} is not yet supported`)}function ue(...r){let e;switch(r.length){case 0:e=` - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(); - } - + ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=o.shape[0],c=y.sizeFromShape(s.shape),l=e.makeOutput([u,c],o.dtype),m=e.dataIdMap.get(l.dataId).id,d=e.makeOutput([c],s.dtype),f=e.dataIdMap.get(d.dataId).id,h=e.makeOutput([3],"int32"),g=e.dataIdMap.get(h.dataId).id;PP(a,i,p,u,m,f,g);let x=e.readSync(h.dataId),b;switch(x[0]){case 0:{b=S.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1],x[2]);break}case 1:{b=S.getSparseReshapeNegativeOutputDimErrorMessage(x[1],x[2]);break}case 2:b=S.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let C=Array.from(e.readSync(n.dataId)),w=Array.from(e.readSync(d.dataId));b=S.getSparseReshapeInputOutputMultipleErrorMessage(C,w);break}case 4:{let C=Array.from(e.readSync(n.dataId)),w=Array.from(e.readSync(d.dataId));b=S.getSparseReshapeInputOutputMismatchErrorMessage(C,w);break}default:b=""}if(e.disposeData(h.dataId),b)throw e.disposeData(l.dataId),e.disposeData(d.dataId),new Error(b);return[l,d]}var MP={kernelName:wa,backendName:"wasm",setupFunc:jJ,kernelFunc:XJ};var LP;function Cg(r){LP=r.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function Sg(r,e){let{backend:t,inputs:o}=r,{data:n,indices:s,segmentIds:a}=o,i=s.shape[0],p=t.readSync(a.dataId,i-1,i)[0],c=i>0?p+1:0;if(c<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],"int32"),b=t.dataIdMap.get(x.dataId).id;LP(m,Fe[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),w;switch(C[0]){case 0:{w=S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{w=S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:w=S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:w=S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:w=""}if(t.disposeData(x.dataId),w)throw t.disposeData(h.dataId),new Error(w);return h}function YJ(r){return Sg(r,!0)}var BP={kernelName:pi,backendName:"wasm",setupFunc:Cg,kernelFunc:YJ};function QJ(r){return Sg(r,!1)}var VP={kernelName:ci,backendName:"wasm",setupFunc:Cg,kernelFunc:QJ};function ZJ(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=Eo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var zP={kernelName:$s,backendName:"wasm",kernelFunc:ZJ};var WP=Ve(Gn);var UP=Ve(mi);var JJ=!0,GP=rt(Kn,JJ);var HP;function eee(r){HP=r.wasm.cwrap(Ds,null,["number","number","number","number"])}function tee(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return HP(a,n,Fe[s.dtype],p),i}var qP={kernelName:Ds,backendName:"wasm",setupFunc:eee,kernelFunc:tee};var KP;function ree(r){KP=r.wasm.cwrap(jn,null,["number","array","number","array","array","array","array","array","number","number"])}function oee(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Mt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=Eo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Mt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,"float32"),$=e.dataIdMap.get(n.dataId).id,A=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),R=new Uint8Array(new Int32Array(b).buffer),D=new Uint8Array(new Int32Array(C).buffer),P=new Uint8Array(new Int32Array(w).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),W=e.dataIdMap.get(_.dataId).id;KP($,A,n.shape.length,R,D,P,M,L,d.length,W),k=Mt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var jP={kernelName:jn,backendName:"wasm",setupFunc:ree,kernelFunc:oee};function nee(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=ku(m,d,a,i,p,u,c,l),g=e.makeOutput([f.length],"string"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,"int32");return e.typedArrayFromHeap(b).set(h),[g,b]}var XP={kernelName:As,backendName:"wasm",kernelFunc:nee};function see(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=Nu(i,p[0],a),m=c.length,d=e.makeOutput([m,2],"int32");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],"string"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let x=e.makeOutput([2],"int32");return e.typedArrayFromHeap(x).set(l),[d,h,x]}var YP={kernelName:di,backendName:"wasm",kernelFunc:see};function aee(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=Tu(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var QP={kernelName:fi,backendName:"wasm",kernelFunc:aee};var iee=!0,ZP=rt(Xn,iee);var JP;function uee(r){JP=r.wasm.cwrap(Hn,null,["number","number","number","number"])}function pee(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=kr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=S.getInnerMostAxes(f.length,u.shape.length))}S.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[h,g]=S.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;JP(p,x,Fe[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var e3={kernelName:Hn,backendName:"wasm",setupFunc:uee,kernelFunc:pee};var t3=Ve(Yn);var r3=Ve(Qn);var o3;function cee(r){o3=r.wasm.cwrap(to,null,["number","array","number","array","number","number"])}function lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,"int32"),m=e.dataIdMap.get(l.dataId).id;return s3(a,i,o.shape.length,Fe[o.dtype],n,s,c,m),[u,l]},a3={kernelName:Zn,backendName:"wasm",setupFunc:mee,kernelFunc:dee};var i3;function fee(r){i3=r.wasm.cwrap(Jn,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function hee(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),w=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,A=e.dataIdMap.get(s.dataId).id,R=a==="nearest"?1:2,D;switch(i){case"constant":D=1;break;case"reflect":D=2;break;case"wrap":D=3;break;case"nearest":D=4;break;default:D=1;break}return i3(_,A,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,R,D,p,w),C}var u3={kernelName:Jn,backendName:"wasm",setupFunc:fee,kernelFunc:hee};function gee(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var p3={kernelName:Rs,backendName:"wasm",kernelFunc:gee};function xee(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var c3={kernelName:Fs,backendName:"wasm",kernelFunc:xee};var yee=[dD,fD,hD,xD,wD,vD,ND,_D,AD,FD,DD,OD,MD,LD,VD,WD,UD,GD,qD,jD,YD,ZD,eO,tO,rO,oO,nO,sO,iO,uO,pO,lO,dO,hO,xO,bO,CO,SO,yD,wO,vO,kO,NO,TO,_O,EO,$O,AO,FO,DO,PO,LO,VO,zO,UO,GO,HO,KO,XO,QO,ZO,eP,tP,rP,bg,nP,aP,uP,pP,cP,lP,mP,dP,ED,hP,xP,bP,SP,wP,IP,kP,TP,EP,$P,RD,RP,FP,OP,MP,BP,VP,zP,WP,UP,GP,qP,jP,XP,YP,QP,ZP,e3,t3,r3,n3,a3,u3,CD,p3,c3];for(let r of yee)Ia(r);var Hw=O();Hw.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{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,9,1,7,0,65,0,253,15,26,11]))}catch(r){return!1}});Hw.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Hw.get("IS_NODE"))return!1;try{return 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(r){return!1}});var Zw=rp(f3()),C3=rp(g3()),Jw=rp(x3());var y3=Zw.default||Zw,bee=Jw.default||Jw,Pl=class extends Zr{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(w3),Qw=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Do(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p);this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s==="string")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return See(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o){let n;if(o==null)n=this.write(null,e,t);else{let s=this.dataIdNextNumber++;n={id:s},this.dataIdMap.set(n,{id:s,memoryOffset:o,shape:e,dtype:t,refCount:1});let a=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,o)}return{dataId:n,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,s,a);case"int32":return new Int32Array(n,s,a);case"bool":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function Cee(r){return(e,t)=>(y.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function b3(r,e,t){if(vg!=null)return vg;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),Dl!=null&&Dl[o]!=null?Dl[o]:t+o}async function S3(){let[r,e]=await Promise.all([O().getAsync("WASM_HAS_SIMD_SUPPORT"),O().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=C3.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?b3(r,e,Fl!=null?Fl:p):p+i},eI&&(n.instantiateWasm=Cee(b3(r,e,Fl!=null?Fl:"")));let s=!1;n.onAbort=()=>{if(s||Ol)return;Ol=!0,o({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let a;e&&r&&vg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+y3.toString()],{type:"text/javascript"}),a=y3(n)):a=bee(n),a.then(i=>{s=!0,Ol=!1;let p=null;i.tfjs={init:i.cwrap("init",null,[]),initWithThreadsCount:i.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:i.cwrap("get_threads_count","number",[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",p,["number"]),dispose:i.cwrap("dispose",p,[])},t({wasm:i})}).catch(o)})}function See(r,e){switch(e){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var wee=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],vg=null,Fl=null,Dl={},Ol=!1,eI=!1;function Iee(r,e=!1){if(eC("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Ol)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");vg=r,eI=e}function vee(r,e=!1){if(Ol)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof r=="string")Fl=r;else{Dl=r;let t=wee.filter(o=>Dl[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}eI=e}var w3=-1,Qw=-1;function kee(r){w3=r}function Nee(){if(Qw===-1)throw new Error("WASM backend not initialized.");return Qw}var Tee="4.1.0";var _ee=2;Ci("wasm",async()=>{let{wasm:r}=await S3();return new Pl(r)},_ee);var ms=O();ms.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);ms.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);ms.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);ms.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!1);ms.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);ms.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);ms.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);ms.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);ms.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);ms.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>0);ms.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);var kg=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}};var Ng=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireUploadBuffer(e,t){return this.acquireBuffer(e,t,!0)}acquireBuffer(e,t,o=!1){let n=I3(e,t);if(this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.usedBuffers.has(n)||this.usedBuffers.set(n,[]),this.numBytesUsed+=e,this.numUsedBuffers++,this.freeBuffers.get(n).length>0){this.numFreeBuffers--;let a=this.freeBuffers.get(n).shift();return this.usedBuffers.get(n).push(a),a}this.numBytesAllocated+=e;let s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o});return this.usedBuffers.get(n).push(s),s}releaseBuffer(e,t,o){if(this.freeBuffers.size===0)return;let n=I3(t,o);this.freeBuffers.has(n)||this.freeBuffers.set(n,[]),this.freeBuffers.get(n).push(e),this.numFreeBuffers++,this.numUsedBuffers--;let s=this.usedBuffers.get(n),a=s.indexOf(e);if(a<0)throw new Error("Cannot release a buffer that was never provided by this buffer manager");s.splice(a,1),this.numBytesUsed-=t}releaseUploadBuffer(e,t,o){e.mapAsync(GPUMapMode.WRITE).then(()=>{this.releaseBuffer(e,t,o)},n=>{})}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function I3(r,e){return`${r}_${e}`}var Tg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=k3(o),a=e*t*s,i=v3(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e,t,o,n,s){if(this.freeTextures.size===0)return;let a=v3(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=k3(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function v3(r,e,t,o){return`${r}_${e}_${t}_${o}`}function k3(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function N3(r,e){if(Math.max(...r)>3)throw new Error("Cannot symbolically compute strides for rank > 4 tensor.");let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}var A3=(r,e,t,o)=>{let n={dtype:o.dtype,shape:o.shape},s=$ee(t,n,e),a=r.createShaderModule({code:s,label:e.constructor.name});return r.createComputePipeline({compute:{module:a,entryPoint:"_start"},label:e.constructor.name,layout:"auto"})};function Rt(r){if(r<=1)return"i32";if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4";if(r===5)return"vec5";if(r===6)return"vec6";throw Error(`GPU for rank ${r} is not yet supported`)}function $o(r){if(r===0)return"x";if(r===1)return"y";if(r===2)return"z";if(r===3)return"w";if(r===4)return"u";if(r===5)return"v";throw Error(`Index ${r} is not yet supported`)}function se(...r){let e;switch(r.length){case 0:e=` fn main() `;break;case 1:e=` - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups : vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; - main(getGlobalIndex()); - } - fn main(${r[0]} : i32) - `;break;default:throw Error("Unreachable")}return e}function Ri(){return` - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) -`}function ite(r,e,t){let o=[];if(o.push(` - const workGroupSizeX = ${t.workGroupSize[0]}u; - const workGroupSizeY = ${t.workGroupSize[1]}u; - const workGroupSizeZ = ${t.workGroupSize[2]}u; + `;break;default:throw Error("Unreachable")}return e}function T3(r){let e;return e=` + ${Eee()} + fn _start(@builtin(local_invocation_id) LocalId : vec3, + @builtin(global_invocation_id) GlobalId : vec3, + @builtin(local_invocation_index) LocalIndex: u32, + @builtin(workgroup_id) WorkgroupId : vec3, + @builtin(num_workgroups) NumWorkgroups : vec3) { + localId = LocalId; + localIndex = LocalIndex; + globalId = GlobalId; + numWorkgroups = NumWorkgroups; + workgroupId = WorkgroupId; + ${r?"main(getGlobalIndex());":"main();"}; + } + `,e}function Eee(){return` + @compute @workgroup_size(workgroupSizeX, workgroupSizeY, workgroupSizeZ) +`}function $ee(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(o.push(` + const workgroupSizeX = ${t.workgroupSize[0]}u; + const workgroupSizeY = ${t.workgroupSize[1]}u; + const workgroupSizeZ = ${t.workgroupSize[2]}u; var localId: vec3; + var localIndex: u32; var globalId: vec3; var numWorkgroups: vec3; + var workgroupId: vec3; // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${eM(t)?" return i32(globalId.x);":` let localInvocationIndex = localId.z * workGroupSizeX * workGroupSizeY + - localId.y * workGroupSizeX + localId.x; - let workGroupID = (globalId - localId)/vec3( - workGroupSizeX, workGroupSizeY, workGroupSizeZ); - - return i32((workGroupID.z * numWorkgroups.x * numWorkgroups.y + - workGroupID.y * numWorkgroups.x + workGroupID.x) * - (workGroupSizeX * workGroupSizeY * workGroupSizeZ) + - localInvocationIndex); + ${F3(t)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n} + + localIndex); `} } - `),t.isFromPixels)return o.push(` + `),t.isFromPixels){o.push(` struct Uniform { size : i32, numChannels : i32, outShapeStrides : vec2, }; - @group(0) @binding(0) var result: array<${Tc(e.dtype,t.isVec4)}>; + @group(0) @binding(0) var result: array<${wc(e.dtype,t.isVec4)}>; @group(0) @binding(2) var uniforms: Uniform; - `),[Y3,o.join(` -`),Q3(e.shape),t.getUserCode()].join(` -`);let n="struct Uniforms { NAN : f32, ";t.variableNames.forEach((m,f)=>{let d=At(r[f].shape.length);n+=`${m.charAt(0).toLowerCase()+m.slice(1)}Shape : ${d}, `});let s=At(e.shape.length);n+=`outShape : ${s}, `;let a=e.shape.length-1,i=At(a);n+=` - outShapeStrides: ${i}, `,t.size&&(n+="size : i32, "),t.uniforms&&(n+=t.uniforms),n+="};",n=dte(n),o.push(n),t.atomic?o.push(` + `);let f=$3(t);return[_3,o.join(` +`),E3(e.shape),t.getUserCode(),T3(f)].join(` +`)}let s="struct Uniforms { NAN : f32, INFINITY : f32, ";t.variableNames.forEach((f,h)=>{let g=Rt(r[h].shape.length);s+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `});let a=Rt(e.shape.length);s+=`outShape : ${a}, `;let i=e.shape.length-1,p=Rt(i);s+=` + outShapeStrides: ${p}, `,t.size&&(s+="size : i32, "),t.uniforms&&(s+=t.uniforms),s+="};",s=Lee(s),o.push(s),t.atomic?o.push(` @group(0) @binding(0) var result: array>; `):o.push(` - @group(0) @binding(0) var result: array<${Tc(e.dtype,t.isVec4)}>; - `),t.variableNames.forEach((m,f)=>{o.push(` - @group(0) @binding(${1+f}) var ${m}: array<${t.variableTypes?t.variableTypes[f]:Tc(r[f].dtype,t.isVec4)}>; - `)}),n!==""&&o.push(` + @group(0) @binding(0) var result: array<${wc(e.dtype,t.isVec4)}>; + `),t.variableNames.forEach((f,h)=>{o.push(` + @group(0) @binding(${1+h}) var ${f}: array<${t.variableTypes?t.variableTypes[h]:wc(r[h].dtype,t.isVec4)}>; + `)}),s!==""&&o.push(` @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms; - `);let p=lte(e.shape,t.dispatchLayout),u=[Y3,o.join(` -`),Q3(e.shape),p,mte(e.shape.length)];t.atomic||u.push(fte(e.shape,e.dtype,t.isVec4));let c=r.map((m,f)=>cte(m,e.shape,t.variableTypes?t.variableTypes[f]==="vec4":t.isVec4,t.dispatchLayout.x.length===e.shape.length)).join(` -`);return u.push(c),u.push(t.getUserCode()),u.join(` -`)}function J3(r,e,t,o){let n=r.shaderKey;if(r.isFromPixels)return n;let s=t.map(c=>c.dtype).concat(o.dtype),a=t.map(c=>I.getBroadcastDims(c.shape,o.shape)),i=t.map(c=>x.arraysEqual(c.shape,o.shape)).join("_"),p=a.map(c=>c.join("_")).join(";"),u=eM(r)?"flatDispatch":"";return n+="_"+(r.workGroupSize?r.workGroupSize.join(","):"")+e.map(c=>c.length).join(",")+s.join(",")+r.variableNames.join(",")+p+i+u,n}var Y3=` + `);let u=Oee(e.shape,t.dispatchLayout),c=[_3+Aee,o.join(` +`),E3(e.shape),u,Pee(e.shape.length)];t.atomic||c.push(Mee(e.shape,e.dtype,t.isVec4));let l=r.map((f,h)=>Dee(f,e.shape,t.variableTypes?t.variableTypes[h]==="vec4":t.isVec4,t.dispatchLayout.x.length===e.shape.length)).join(` +`);c.push(l),c.push(t.getUserCode());let m=$3(t);return c.push(T3(m)),c.join(` +`)}function R3(r,e,t,o){let n=r.shaderKey;if(r.isFromPixels)return n;let s=t.map(c=>c.dtype).concat(o.dtype),a=t.map(c=>S.getBroadcastDims(c.shape,o.shape)),i=t.map(c=>y.arraysEqual(c.shape,o.shape)).join("_"),p=a.map(c=>c.join("_")).join(";"),u=F3(r)?"flatDispatch":"";return n+="_"+(r.workgroupSize?r.workgroupSize.join(","):"")+e.map(c=>c.length).join(",")+s.join(",")+r.variableNames.join(",")+p+i+u,n}var _3=` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -4999,15 +4989,19 @@ return a / b;`,X7=` fn isnanVec4(val : vec4) -> vec4 { return vec4(isnan(val[0]), isnan(val[1]), isnan(val[2]), isnan(val[3])); } -`;function Q3(r){let e=r.length;if(e<=1)return"fn getCoordsFromIndex(index : i32) -> i32 { return index; }";let t=x.computeStrides(r),o=At(e),n=[];for(let a=0;a vec2 { +`,Aee=` + fn isinf(val: f32) -> bool { + return abs(val) == uniforms.INFINITY; + } +`;function E3(r){let e=r.length;if(e<=1)return"fn getCoordsFromIndex(index : i32) -> i32 { return index; }";let t=y.computeStrides(r),o=Rt(e),n=[];for(let a=0;a vec2 { let d0 = index / uniforms.outShapeStrides; let d1 = index - d0 * uniforms.outShapeStrides; return vec2(d0, d1); - }`;let s;return s="var index2 = index;"+t.map((a,i)=>{let p=`let ${n[i]} = index2 / uniforms.outShapeStrides.${Yo(i)}`,u=i===t.length-1?`let ${n[i+1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}`:`index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${Yo(i)}`;return`${p}; ${u};`}).join(""),` + }`;let s;return s="var index2 = index;"+t.map((a,i)=>{let p=`let ${n[i]} = index2 / uniforms.outShapeStrides.${$o(i)}`,u=i===t.length-1?`let ${n[i+1]} = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}`:`index2 = index2 - ${n[i]} * uniforms.outShapeStrides.${$o(i)}`;return`${p}; ${u};`}).join(""),` fn getCoordsFromIndex(index : i32) -> ${o} { ${s} return ${o}(${n.join(",")}); } - `}function ute(r,e){let t=r.name,o=r.shape.length,n=At(o),s="get"+t.charAt(0).toUpperCase()+t.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(c=>`${c} : i32`).join(", ");if(o<1)return e?` + `}function Ree(r,e){let t=r.name,o=r.shape.length,n=Rt(o),s="get"+t.charAt(0).toUpperCase()+t.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(c=>`${c} : i32`).join(", ");if(o<1)return e?` fn ${s}() -> vec4 { return vec4(${t}[0]); } @@ -5025,7 +5019,7 @@ return a / b;`,X7=` return f32(${t}[getIndexFromCoords${u}(${n}(${a.join(",")}), ${p})]); } - `}function pte(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=e.length,u=At(p);if(x.arraysEqual(r.shape,e)&&o)return t?` + `}function Fee(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=e.length,u=Rt(p);if(y.arraysEqual(r.shape,e)&&o)return t?` fn ${a}Index(globalIndex : i32) -> vec4 { return vec4(${n}[globalIndex]); } @@ -5041,7 +5035,7 @@ return a / b;`,X7=` fn ${a}Coords(coords : ${u}) -> f32 { return f32(${n}[${p>1?"getOutputIndexFromCoords(coords)":"coords"}]); } - `;let c=I.getBroadcastDims(r.shape,e),l=p-i,m="";if(i===0)return t?` + `;let c=S.getBroadcastDims(r.shape,e),l=p-i,m="";if(i===0)return t?` fn ${a}Index(globalIndex : i32) -> vec4 { return get${s}(); } @@ -5057,38 +5051,38 @@ return a / b;`,X7=` fn ${a}Coords(coords : ${u}) -> f32{ return get${s}(); } - `;p<2&&c.length>=1?m="coords = 0;":m=c.map(g=>`coords.${Yo(g+l)} = 0;`).join(` -`);let f="";if(p<2&&i>0)f="coords";else if(p>1){let g=At(i),y=r.shape.map((b,C)=>`coords.${Yo(C+l)}`).join(", ");f=`${g}(${y})`}else f="coords";let d=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return t?` + `;p<2&&c.length>=1?m="coords = 0;":m=c.map(g=>`coords.${$o(g+l)} = 0;`).join(` +`);let d="";if(p<2&&i>0)d="coords";else if(p>1){let g=Rt(i),x=r.shape.map((b,C)=>`coords.${$o(C+l)}`).join(", ");d=`${g}(${x})`}else d="coords";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return t?` fn ${a}Index(globalIndex : i32) -> vec4 { var coords = getCoordsFromIndex(globalIndex); ${m} - return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4]; + return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4]; } fn ${a}Coords(coordsIn : ${u}) -> vec4 { var coords = coordsIn; ${m} - return ${n}[getIndexFromCoords${h}(${f}, ${d}) / 4]; + return ${n}[getIndexFromCoords${h}(${d}, ${f}) / 4]; } `:` fn ${a}Index(globalIndex : i32) -> f32 { var coords = getCoordsFromIndex(globalIndex); ${m} - return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]); + return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]); } fn ${a}Coords(coordsIn : ${u}) -> f32 { var coords = coordsIn; ${m} - return f32(${n}[getIndexFromCoords${h}(${f}, ${d})]); + return f32(${n}[getIndexFromCoords${h}(${d}, ${f})]); } -`}function cte(r,e,t,o){let n=ute(r,t);return r.shape.length<=e.length&&(n+=pte(r,e,t,o)),n}function lte(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return"";if(t.length===s)return`fn getOutputCoords() -> ${At(s)}{ +`}function Dee(r,e,t,o){let n=Ree(r,t);return r.shape.length<=e.length&&(n+=Fee(r,e,t,o)),n}function Oee(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return"";if(t.length===s)return`fn getOutputCoords() -> ${Rt(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let i="",p=[t,o,n];for(let m=0;m ${c} { + `;let i="",p=[t,o,n];for(let m=0;m ${c} { ${i} -`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(",")}); }`,l}function mte(r){let e="";switch(r){case 0:case 1:e+=` +`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(",")}); }`,l}function Pee(r){let e="";switch(r){case 0:case 1:e+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5122,7 +5116,7 @@ return a / b;`,X7=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:x.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function eM(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Tc(r,e){return r==="float32"?e?"vec4":"f32":r==="int32"||r==="bool"?e?"vec4":"i32":r}function fte(r,e,t){let o=r.length,n=Tc(e,t),s;if(t?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) { + `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function F3(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function wc(r,e){return r==="float32"?e?"vec4":"f32":r==="int32"||r==="bool"?e?"vec4":"i32":r}function Mee(r,e,t){let o=r.length,n=wc(e,t),s;if(t?s=`fn setOutputAtIndex(flatIndex : i32, value : vec4) { result[flatIndex] = ${n}(value); } fn setOutputAtIndexI32(flatIndex : i32, value : vec4) { @@ -5132,7 +5126,7 @@ return a / b;`,X7=` } fn setOutputAtIndexI32(flatIndex : i32, value : i32) { result[flatIndex] = ${n}(value); - }`,o>=2){let a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=At(o);t?s+=` + }`,o>=2){let a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=Rt(o);t?s+=` fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(", ")}, value : vec4) { let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndex(flatIndex / 4, value); @@ -5150,10 +5144,10 @@ return a / b;`,X7=` let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndexI32(flatIndex, value); } - `}return s}function dte(r){let e=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(e,o=>"@align(16) "+o);let t=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}var pS={};Be(pS,{ArrayBufferToTypedArray:()=>uS,GPUBytesPerElement:()=>iS,MatMulProgramType:()=>Qo,computeDispatch:()=>ae,computeWorkGroupInfoForMatMul:()=>aS,computeWorkGroupSizeForConv2d:()=>Hl,computeWorkPerThreadForConv2d:()=>ql,flatDispatchLayout:()=>fe,isWebGPUSupported:()=>Kl,tilesFitEvenlyIntoShape:()=>gte});var Wu=r=>{let e=1;for(let t=0;tt%r[o]===0)}function ae(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Wu(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Wu(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Wu(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function aS(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workGroupSize:n,elementsPerThread:s}}function Hl(r,e,t=!1){if(t)return[8,8,1];let o=Wu(r.x.map(s=>e[s])),n=Wu(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function ql(r,e,t=!1){if(t)return[4,4,1];let o=Wu(r.x.map(s=>e[s])),n=Wu(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function fe(r){return{x:r.map((e,t)=>t)}}function iS(r){if(r==="float32"||r==="int32"||r==="bool"||r==="string")return 4;if(r==="complex64")return 8;throw new Error(`Unknown dtype ${r}`)}function uS(r,e){if(e==="float32")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function Kl(){return(typeof window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}var Qo;(function(r){r[r.MatMulReduceProgram=0]="MatMulReduceProgram",r[r.MatMulSplitKProgram=1]="MatMulSplitKProgram",r[r.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",r[r.MatMulPackedProgram=3]="MatMulPackedProgram",r[r.MatMulMax=4]="MatMulMax"})(Qo||(Qo={}));var xte=P().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),yte=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;x.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),x.assert(s<=t,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Ai=class extends Jr{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!Kl())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has("timestamp-query"),this.adapterInfo=new Og(t),this.bufferManager=new Mg(this.device),this.textureManager=new Lg(this.device),this.tensorMap=new rn(this,cr()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:2})),P().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Ai.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);if(this.decRef(e),!t&&o.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if("texture"in t.resourceInfo){let o=t.resourceInfo;o.texture instanceof GPUTexture&&this.textureManager.releaseTexture(o.texture,o.width,o.height,o.format,o.usage),o.texture=null}else{let o=t.resourceInfo;this.bufferManager.releaseBuffer(o.buffer,o.size,o.usage),o.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),P().getBool("WEBGPU_USE_PROFILE_TOOL")&&(x.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return this.releaseResource(e),o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o}=t;if(o==null)throw new Error("WebGPU readSync is only available for CPU-resident tensors.");return o}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return this.convertAndCacheOnCPU(e,o);let n;if(t.dtype==="complex64"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=I.mergeRealAndImagArrays(a,i)}else{let s=t.resourceInfo,a=await this.getBufferData(s.buffer,s.size);n=uS(a,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:o,dtype:n,shape:s,resourceInfo:a}=t;if(n==="complex64")throw new Error("Does not support reading buffer for complex64 dtype.");if(a==null)throw o!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let i=a.size,p=this.bufferManager.acquireBuffer(i,a.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(a.buffer,0,p,0,i),this.submitQueue();let u=this.makeTensorInfo(s,n),c=cr().makeTensorFromTensorInfo(u),l=this.tensorMap.get(u.dataId);return l.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:p},{tensorRef:c,buffer:p,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>x.decodeString(n));return ne(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ne(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.");let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=x.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=x.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=x.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t==="string"&&o!=null&&o.length>0&&x.isString(o[0])&&(o=o.map(s=>x.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if("texture"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let o=t.resourceInfo;return{offset:0,size:o.size,buffer:o.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let o=iS(t.dtype)*x.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(o,this.defaultGpuBufferUsage());if(t.resourceInfo={size:o,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let s=this.bufferManager.acquireUploadBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),a=s.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),s.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s,0,n,0,o);let i={size:o,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:s};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,o=0,n=[];e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:x.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4});let s=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type==="int32"?new Int32Array(s,c,p.data.length).set(p.data):p.type==="uint32"?new Uint32Array(s,c,p.data.length).set(p.data):new Float32Array(s,c,p.data.length).set(p.data)});let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(a,0,s,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:a};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:a}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),x.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=x.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=yte(this.device,e);let a=[],i=[];if(!e.isFromPixels){a.push({type:"float32",data:[NaN]}),i=t.concat(s).map(y=>y.shape);let h="int32";i.map(y=>{a.push({type:h,data:y})});let g=x.computeStrides(s.shape);if(a.push({type:h,data:g}),e.size){let y=x.sizeFromShape(e.outputShape);a.push({type:h,data:[e.isVec4?y/4:y]})}}let p=t.map((h,g)=>{if(h.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(h.dataId),{dtype:this.tensorMap.get(h.dataId).dtype,shape:h.shape,name:e.variableNames[g]}}),u=J3(e,i,p,s),c;u in this.pipelineCache?c=this.pipelineCache[u]:(c=Z3(this.device,e,p,s),this.pipelineCache[u]=c),n&&(a=[...a,...n]);let l=[this.tensorToBinding(s),...t.map(h=>this.tensorToBinding(h)),this.makeUniforms(a)],m=this.device.createBindGroup({layout:c.getBindGroupLayout(0),entries:l.map((h,g)=>({binding:g,resource:h}))});this.ensureCommandEncoderReady();let f=this.getComputePass(),d=this.activeTimers!=null;return d&&this.supportTimeQuery&&f.writeTimestamp(this.querySet,0),f.setPipeline(c),f.setBindGroup(0,m),f.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),d&&this.supportTimeQuery&&f.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(h=>{this.commandQueueOwnedIds.add(h.dataId)}),this.commandQueueOwnedIds.add(s.dataId),P().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchNumberInEncoder&&this.submitQueue(),d&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),s}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),o=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,o,0,16),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(o.getMappedRange()),s=Number(n[1]-n[0]);return o.unmap(),this.bufferManager.releaseBuffer(o,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),s/1e6}shouldExecuteOnCPU(e,t=xte){return P().getBool("WEBGPU_CPU_FORWARD")&&e.every(o=>this.tensorMap.get(o.dataId).resourceInfo==null&&x.sizeFromShape(o.shape){P().set("CHECK_COMPUTATION_FOR_ERRORS",!1);let r={powerPreference:P().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},e=await navigator.gpu.requestAdapter(r),t=e.limits,o={},n=e.features.has("timestamp-query");o.requiredLimits={maxComputeWorkgroupStorageSize:t.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:t.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:t.maxStorageBufferBindingSize},n&&(o.requiredFeatures=["timestamp-query"]);let s=await e.requestDevice(o),a=await e.requestAdapterInfo();return new Ai(s,a)},3);var ye;(function(r){r[r.MUL=0]="MUL",r[r.ADD=1]="ADD",r[r.ATAN2=2]="ATAN2",r[r.SUB=3]="SUB",r[r.DIV=4]="DIV",r[r.EQUAL=5]="EQUAL",r[r.GREATER=6]="GREATER",r[r.GREATER_EQUAL=7]="GREATER_EQUAL",r[r.LESS=8]="LESS",r[r.LESS_EQUAL=9]="LESS_EQUAL",r[r.LOGICAL_AND=10]="LOGICAL_AND",r[r.NOT_EQUAL=11]="NOT_EQUAL",r[r.SQUARED_DIFFERENCE=12]="SQUARED_DIFFERENCE",r[r.INT_DIV=13]="INT_DIV",r[r.POW=14]="POW",r[r.PRELU=15]="PRELU",r[r.MAX=16]="MAX",r[r.MIN=17]="MIN",r[r.COMPLEX_MULTIPLY_REAL=18]="COMPLEX_MULTIPLY_REAL",r[r.COMPLEX_MULTIPLY_IMAG=19]="COMPLEX_MULTIPLY_IMAG"})(ye||(ye={}));var bte=` + `}return s}function Lee(r){let e=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(e,o=>"@align(16) "+o);let t=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function $3(r){return!(r.dispatchLayout.hasOwnProperty("y")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty("z")&&r.dispatchLayout.z.length!==0)}var nI={};Ue(nI,{ArrayBufferToTypedArray:()=>oI,GPUBytesPerElement:()=>rI,MatMulProgramType:()=>Ao,computeDispatch:()=>re,computeWorkPerThreadForConv2d:()=>Ll,computeWorkgroupInfoForMatMul:()=>tI,computeWorkgroupSizeForConv2d:()=>Ml,flatDispatchLayout:()=>ue,isWebGPUSupported:()=>Bl,tilesFitEvenlyIntoShape:()=>Vee});var zu=r=>{let e=1;for(let t=0;tt%r[o]===0)}function re(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(zu(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(zu(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(zu(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function tI(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function Ml(r,e,t=!1){if(t)return[8,8,1];let o=zu(r.x.map(s=>e[s])),n=zu(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function Ll(r,e,t=!1){if(t)return[4,4,1];let o=zu(r.x.map(s=>e[s])),n=zu(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function ue(r){return{x:r.map((e,t)=>t)}}function rI(r){if(r==="float32"||r==="int32"||r==="bool"||r==="string")return 4;if(r==="complex64")return 8;throw new Error(`Unknown dtype ${r}`)}function oI(r,e){if(e==="float32")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function Bl(){return(typeof window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}var Ao;(function(r){r[r.MatMulReduceProgram=0]="MatMulReduceProgram",r[r.MatMulSplitKProgram=1]="MatMulSplitKProgram",r[r.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",r[r.MatMulPackedProgram=3]="MatMulPackedProgram",r[r.MatMulMax=4]="MatMulMax"})(Ao||(Ao={}));var zee=O().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Wee=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Ui=class extends Zr{constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchNumberInEncoder=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,!Bl())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.currentCommandEncoder=null,this.currentComputePass=null,this.supportTimeQuery=e.features.has("timestamp-query-inside-passes"),this.adapterInfo=new kg(t),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Ng(this.device),this.textureManager=new Tg(this.device),this.tensorMap=new Do(this,cr()),this.supportTimeQuery&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:2})),O().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}nextDataId(){return Ui.nextDataId++}floatPrecision(){return 32}defaultGpuBufferUsage(){return GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}disposeData(e,t=!1){if(this.tensorDataPendingDisposal.indexOf(e)>=0)return!1;if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);if(this.decRef(e),!t&&o.refCount>0)return!1;if(this.commandQueueOwnedIds.has(e))return this.tensorDataPendingDisposal.push(e),!1;let{complexTensorInfos:n}=this.tensorMap.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.releaseResource(e),this.tensorMap.delete(e),!0}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resourceInfo)){if("texture"in t.resourceInfo){let o=t.resourceInfo;o.texture instanceof GPUTexture&&this.textureManager.releaseTexture(o.texture,o.width,o.height,o.format,o.usage),o.texture=null}else{let o=t.resourceInfo;this.bufferManager.releaseBuffer(o.buffer,o.size,o.usage),o.buffer=null}t.resourceInfo=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.ensureComputePassEnded(),this.queue.submit([this.currentCommandEncoder.finish()]),this.currentCommandEncoder=null,this.dispatchNumberInEncoder=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e.buffer,e.size,e.usage)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseUploadBuffer(e.buffer,e.size,e.usage)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.currentCommandEncoder||(this.currentCommandEncoder=this.device.createCommandEncoder())}ensureComputePassEnded(){this.currentComputePass&&(this.currentComputePass.end(),this.currentComputePass=null)}getComputePass(){return this.currentComputePass||(this.currentComputePass=this.currentCommandEncoder.beginComputePass()),this.currentComputePass}async getBufferData(e,t){let o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o,t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ),O().getBool("WEBGPU_USE_PROFILE_TOOL")&&(y.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return this.releaseResource(e),o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o}=t;if(o==null)throw new Error("WebGPU readSync is only available for CPU-resident tensors.");return o}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return this.convertAndCacheOnCPU(e,o);let n;if(t.dtype==="complex64"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=S.mergeRealAndImagArrays(a,i)}else{let s=t.resourceInfo,a=await this.getBufferData(s.buffer,s.size);n=oI(a,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}readToGPU(e){let t=this.tensorMap.get(e),{values:o,dtype:n,shape:s,resourceInfo:a}=t;if(n==="complex64")throw new Error("Does not support reading buffer for complex64 dtype.");if(a==null)throw o!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let i=a.size,p=this.bufferManager.acquireBuffer(i,a.usage);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(a.buffer,0,p,0,i),this.submitQueue();let u=this.makeTensorInfo(s,n),c=cr().makeTensorFromTensorInfo(u),l=this.tensorMap.get(u.dataId);return l.resourceInfo={size:i,usage:this.defaultGpuBufferUsage(),buffer:p},{tensorRef:c,buffer:p,bufSize:i}}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return le(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return le(e.shape,e.dtype,t)}async time(e){this.supportTimeQuery||console.warn("This device doesn't support timestamp-query-inside-passes extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis then try again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled. Using performance.now is not workable for webgpu since it doesn't support synchronous data read from GPU.");let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t==="string"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId);if("texture"in t.resourceInfo){let n=t.resourceInfo;return n.texture instanceof GPUExternalTexture?n.texture:n.texture.createView()}let o=t.resourceInfo;return{offset:0,size:o.size,buffer:o.buffer}}async getQueryTime(e){return this.supportTimeQuery?this.getTimeFromQuerySet(e):0}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resourceInfo)return;let o=rI(t.dtype)*y.sizeFromShape(t.shape),n=this.bufferManager.acquireBuffer(o,this.defaultGpuBufferUsage());if(t.resourceInfo={size:o,usage:this.defaultGpuBufferUsage(),buffer:n},t.values){let s=this.bufferManager.acquireUploadBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC),a=s.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),s.unmap(),this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.copyBufferToBuffer(s,0,n,0,o);let i={size:o,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,buffer:s};this.stagingPendingDisposal.push(i)}}makeUniforms(e){let t=0,o=0,n=[];e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4});let s=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type==="int32"?new Int32Array(s,c,p.data.length).set(p.data):p.type==="uint32"?new Uint32Array(s,c,p.data.length).set(p.data):new Float32Array(s,c,p.data.length).set(p.data)});let a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.queue.writeBuffer(a,0,s,0,t);let i={size:t,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM,buffer:a};return this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:a}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Wee(this.device,e);let a=[],i=[];if(!e.isFromPixels){a.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=t.concat(s).map(x=>x.shape);let h="int32";i.map(x=>{a.push({type:h,data:x})});let g=y.computeStrides(s.shape);if(a.push({type:h,data:g}),e.size){let x=y.sizeFromShape(e.outputShape);a.push({type:h,data:[e.isVec4?x/4:x]})}}let p=t.map((h,g)=>{if(h.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(h.dataId),{dtype:this.tensorMap.get(h.dataId).dtype,shape:h.shape,name:e.variableNames[g]}}),u=R3(e,i,p,s),c;u in this.pipelineCache?c=this.pipelineCache[u]:(c=A3(this.device,e,p,s),this.pipelineCache[u]=c),n&&(a=[...a,...n]);let l=[this.tensorToBinding(s),...t.map(h=>this.tensorToBinding(h)),this.makeUniforms(a)],m=this.device.createBindGroup({layout:c.getBindGroupLayout(0),entries:l.map((h,g)=>({binding:g,resource:h}))});this.ensureCommandEncoderReady();let d=this.getComputePass(),f=this.activeTimers!=null;return f&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,0),d.setPipeline(c),d.setBindGroup(0,m),d.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),f&&this.supportTimeQuery&&d.writeTimestamp(this.querySet,1),this.dispatchNumberInEncoder++,t.forEach(h=>{this.commandQueueOwnedIds.add(h.dataId)}),this.commandQueueOwnedIds.add(s.dataId),O().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchNumberInEncoder&&this.submitQueue(),f&&this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(this.querySet)}),s}async getTimeFromQuerySet(e){let t=this.bufferManager.acquireBuffer(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),o=this.bufferManager.acquireBuffer(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.ensureCommandEncoderReady(),this.ensureComputePassEnded(),this.currentCommandEncoder.resolveQuerySet(e,0,2,t,0),this.currentCommandEncoder.copyBufferToBuffer(t,0,o,0,16),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(o.getMappedRange()),s=Number(n[1]-n[0]);return o.unmap(),this.bufferManager.releaseBuffer(o,16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),this.bufferManager.releaseBuffer(t,16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),s/1e6}shouldExecuteOnCPU(e,t=zee){return O().getBool("WEBGPU_CPU_FORWARD")&&e.every(o=>this.tensorMap.get(o.dataId).resourceInfo==null&&y.sizeFromShape(o.shape){O().set("CHECK_COMPUTATION_FOR_ERRORS",!1);let r={powerPreference:O().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},e=await navigator.gpu.requestAdapter(r),t={};e.features.has("timestamp-query-inside-passes")&&(t.requiredFeatures=["timestamp-query-inside-passes"]);let o=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:o.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:o.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:o.maxStorageBufferBindingSize};let n=await e.requestDevice(t),s=await e.requestAdapterInfo();return new Ui(n,s)},3);var ye;(function(r){r[r.ADD=0]="ADD",r[r.ATAN2=1]="ATAN2",r[r.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",r[r.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",r[r.DIV=4]="DIV",r[r.EQUAL=5]="EQUAL",r[r.GREATER=6]="GREATER",r[r.GREATER_EQUAL=7]="GREATER_EQUAL",r[r.INT_DIV=8]="INT_DIV",r[r.LESS=9]="LESS",r[r.LESS_EQUAL=10]="LESS_EQUAL",r[r.LOGICAL_AND=11]="LOGICAL_AND",r[r.MAX=12]="MAX",r[r.MIN=13]="MIN",r[r.MOD=14]="MOD",r[r.MUL=15]="MUL",r[r.NOT_EQUAL=16]="NOT_EQUAL",r[r.POW=17]="POW",r[r.PRELU=18]="PRELU",r[r.SQUARED_DIFFERENCE=19]="SQUARED_DIFFERENCE",r[r.SUB=20]="SUB"})(ye||(ye={}));var D3=` if (isnan(a)) { return a; } if (isnan(b)) { return b; } - `,tM=` + `,O3=` if (isNaN.r) { resultTemp.r = valueForNaN; } @@ -5166,16 +5160,15 @@ return a / b;`,X7=` if (isNaN.a) { resultTemp.a = valueForNaN; } - `,rM=` + `,aI=` let isNaN = isnanVec4(a) | isnanVec4(b); - ${tM} - `,Cte="return a + b;",Ite="return areal * breal - aimag * bimag;",wte="return areal * bimag + aimag * breal;",Ste="return a / b;",vte="return a * b;",kte="return (a - b) * (a - b);",Tte="return a - b;",Nte="return f32(a == b);",_te="return vec4(a == b);",Ete="return f32(a > b);",$te="return vec4(a > b);",Rte="return f32(a >= b);",Ate="return vec4(a >= b);",Fte="return f32(a < b);",Dte="return vec4(a < b);",Pte="return f32(a <= b);",Ote="return vec4(a <= b);",Mte="return f32(f32(a) >= 1.0 && f32(b) >= 1.0);",Lte=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,Bte=` + ${O3} + `,Uee="return a + b;",Gee="return areal * breal - aimag * bimag;",Hee="return areal * bimag + aimag * breal;",qee="return a / b;",Kee="return f32(a == b);",jee="return vec4(a == b);",Xee="return f32(a > b);",Yee="return vec4(a > b);",Qee="return f32(a >= b);",Zee="return vec4(a >= b);",Jee=` let s = sign(a) * sign(b); let ia = i32(round(a)); let ib = i32(round(b)); return f32(idiv(ia, ib, s)); - `,Vte=` +`,ete=` let ia = vec4(round(a)); let ib = vec4(round(b)); let cond = ib != vec4(0); @@ -5196,18 +5189,62 @@ return a / b;`,X7=` resultTemp[3] = idiv(ia[3], ib[3], s[3]); } return vec4(resultTemp); - `,zte=` +`,tte="return f32(a < b);",rte="return vec4(a < b);",ote="return f32(a <= b);",nte="return vec4(a <= b);",ste="return f32(f32(a) >= 1.0 && f32(b) >= 1.0);",ate=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,ite=` + ${D3} + if (b == 0.) { + return uniforms.NAN; + } + var resultTemp = a % b; + if ((a < 0. && b < 0.) || (a >= 0. && b > 0.)) { + return resultTemp; + } else { + return (resultTemp + b) % b; + } +`,ute=` + let valueForNaN = uniforms.NAN; + var resultTemp = vec4(a % b); + ${aI} + + if (b[0] == 0.) { + resultTemp[0] = uniforms.NAN; + } + if (b[1] == 0.) { + resultTemp[1] = uniforms.NAN; + } + if (b[2] == 0.) { + resultTemp[2] = uniforms.NAN; + } + if (b[3] == 0.) { + resultTemp[3] = uniforms.NAN; + } + + if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { + resultTemp[0] = (resultTemp[0] + b[0]) % b[0]; + } + if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) { + resultTemp[1] = (resultTemp[1] + b[1]) % b[1]; + } + if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) { + resultTemp[2] = (resultTemp[2] + b[2]) % b[2]; + } + if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { + resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; + } + + return resultTemp; +`,pte="return a * b;",cte=` if (isnan(a) || isnan(b)) { return 1.0; } return f32(a != b); -`,Wte=` +`,lte=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; - ${rM} + ${aI} return resultTemp; -`,Ute=` +`,mte=` if(a < 0.0 && floor(b) < b) { return uniforms.NAN; } @@ -5218,7 +5255,7 @@ return a / b;`,X7=` return pow(abs(a), b); } return sign(a) * pow(abs(a), b); - `,Gte=` +`,dte=` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -5240,22 +5277,53 @@ return a / b;`,X7=` } let isNaN = (a < vec4(0.0)) & (floor(b) < b); let valueForNaN = uniforms.NAN; - ${tM} + ${O3} return resultTemp; - `,Hte="if (a < 0.0) { return b * a; } return a;",qte=` +`,fte="if (a < 0.0) { return b * a; } return a;",hte=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); - `;function cS(r,e,t="uniforms.NAN"){let o=e?rM:bte;return e?` +`,gte="return (a - b) * (a - b);",xte="return a - b;";function sI(r,e,t="uniforms.NAN"){let o=e?aI:D3;return e?` let valueForNaN = ${t}; var resultTemp = vec4(${r}(a, b)); `+o+` return resultTemp; `:o+` return ${r}(a, b); - `}function Nc(r,e){switch(r){case ye.MUL:return vte;case ye.ADD:return Cte;case ye.ATAN2:return cS("atan2",e);case ye.SUB:return Tte;case ye.DIV:return Ste;case ye.EQUAL:return e?_te:Nte;case ye.GREATER:return e?$te:Ete;case ye.GREATER_EQUAL:return e?Ate:Rte;case ye.LESS:return e?Dte:Fte;case ye.LESS_EQUAL:return e?Ote:Pte;case ye.LOGICAL_AND:return e?Lte:Mte;case ye.NOT_EQUAL:return e?Wte:zte;case ye.SQUARED_DIFFERENCE:return kte;case ye.INT_DIV:return e?Vte:Bte;case ye.PRELU:return e?qte:Hte;case ye.MAX:return cS("max",e);case ye.MIN:return cS("min",e);case ye.POW:return e?Gte:Ute;case ye.COMPLEX_MULTIPLY_REAL:return Ite;case ye.COMPLEX_MULTIPLY_IMAG:return wte;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var pe;(function(r){r[r.ABS=0]="ABS",r[r.CEIL=1]="CEIL",r[r.COS=2]="COS",r[r.COSH=3]="COSH",r[r.ELU=4]="ELU",r[r.EXP=5]="EXP",r[r.EXPM1=6]="EXPM1",r[r.FLOOR=7]="FLOOR",r[r.IS_NAN=8]="IS_NAN",r[r.LINEAR=9]="LINEAR",r[r.LOG=10]="LOG",r[r.LOGICAL_NOT=11]="LOGICAL_NOT",r[r.NEG=12]="NEG",r[r.RELU=13]="RELU",r[r.RELU6=14]="RELU6",r[r.LEAKYRELU=15]="LEAKYRELU",r[r.RECIPROCAL=16]="RECIPROCAL",r[r.RSQRT=17]="RSQRT",r[r.SIN=18]="SIN",r[r.SINH=19]="SINH",r[r.SIGMOID=20]="SIGMOID",r[r.SQRT=21]="SQRT",r[r.SQUARE=22]="SQUARE",r[r.TANH=23]="TANH",r[r.TO_INT=24]="TO_INT"})(pe||(pe={}));var Kte="return abs(a);",jte="return ceil(a);",Xte="return cos(a);",Yte=` + `}function Ic(r,e){switch(r){case ye.ADD:return Uee;case ye.ATAN2:return sI("atan2",e);case ye.COMPLEX_MULTIPLY_IMAG:return Hee;case ye.COMPLEX_MULTIPLY_REAL:return Gee;case ye.DIV:return qee;case ye.EQUAL:return e?jee:Kee;case ye.GREATER:return e?Yee:Xee;case ye.GREATER_EQUAL:return e?Zee:Qee;case ye.INT_DIV:return e?ete:Jee;case ye.LESS:return e?rte:tte;case ye.LESS_EQUAL:return e?nte:ote;case ye.LOGICAL_AND:return e?ate:ste;case ye.MAX:return sI("max",e);case ye.MIN:return sI("min",e);case ye.MOD:return e?ute:ite;case ye.MUL:return pte;case ye.NOT_EQUAL:return e?lte:cte;case ye.POW:return e?dte:mte;case ye.PRELU:return e?hte:fte;case ye.SQUARED_DIFFERENCE:return gte;case ye.SUB:return xte;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var Q;(function(r){r[r.ABS=0]="ABS",r[r.ACOS=1]="ACOS",r[r.ACOSH=2]="ACOSH",r[r.ASIN=3]="ASIN",r[r.ASINH=4]="ASINH",r[r.ATAN=5]="ATAN",r[r.ATANH=6]="ATANH",r[r.CEIL=7]="CEIL",r[r.COS=8]="COS",r[r.COSH=9]="COSH",r[r.ELU=10]="ELU",r[r.ERF=11]="ERF",r[r.EXP=12]="EXP",r[r.EXPM1=13]="EXPM1",r[r.FLOOR=14]="FLOOR",r[r.IS_FINITE=15]="IS_FINITE",r[r.IS_INF=16]="IS_INF",r[r.IS_NAN=17]="IS_NAN",r[r.LINEAR=18]="LINEAR",r[r.LOG=19]="LOG",r[r.LOG1P=20]="LOG1P",r[r.LOGICAL_NOT=21]="LOGICAL_NOT",r[r.NEG=22]="NEG",r[r.RELU=23]="RELU",r[r.RELU6=24]="RELU6",r[r.LEAKYRELU=25]="LEAKYRELU",r[r.RECIPROCAL=26]="RECIPROCAL",r[r.RSQRT=27]="RSQRT",r[r.SIN=28]="SIN",r[r.SINH=29]="SINH",r[r.SIGMOID=30]="SIGMOID",r[r.SQRT=31]="SQRT",r[r.SQUARE=32]="SQUARE",r[r.TAN=33]="TAN",r[r.TANH=34]="TANH",r[r.TO_INT=35]="TO_INT"})(Q||(Q={}));var yte="return abs(a);",bte=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return acos(a); +`,Cte=` + if (a < 1.) { + return uniforms.NAN; + } + return acosh(a); +`,Ste=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + return asin(a); +`,wte="return asinh(a);",Ite=` + if (isnan(a)) { + return uniforms.NAN; + } + return atan(a); +`,vte=` + if (abs(a) > 1.) { + return uniforms.NAN; + } + if (a == 1.) { + return uniforms.INFINITY; + } + if (a == -1.) { + return -uniforms.INFINITY; + } + return atanh(a); +`,kte="return ceil(a);",Nte="return cos(a);",Tte=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,Qte="return exp(a) - 1.0;",Zte="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",Jte=` +`,_te="return exp(a) - 1.0;",Ete="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",$te=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5270,35 +5338,53 @@ return a / b;`,X7=` resFloat.a = a.a; } return resFloat; -`,ere="return exp(a);",tre="return floor(a);",rre="return f32(isnan(a));",ore="return a;",nre=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,sre="return f32(!(a >= 1.0));",are="return -a;",ire="if (a < 0.0) { return uniforms.alpha * a; } return a;",ure=` +`,Ate=` + // Error function is calculated approximately with elementary function. + // See "Handbook of Mathematical Functions with Formulas, + // Graphs, and Mathematical Tables", Abramowitz and Stegun. + let p = ${S.ERF_P}; + let a1 = ${S.ERF_A1}; + let a2 = ${S.ERF_A2}; + let a3 = ${S.ERF_A3}; + let a4 = ${S.ERF_A4}; + let a5 = ${S.ERF_A5}; + + let sign = sign(a); + let absA = abs(a); + let t = 1.0 / (1.0 + p * absA); + return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); +`,Rte="return exp(a);",Fte="return floor(a);",Dte="return f32(!isnan(a) && !isinf(a));",Ote="return f32(isinf(a));",Pte="return f32(isnan(a));",Mte="return a;",Lte=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,Bte=` + if (isnan(a)) { return a; } + return log(1.0 + a); +`,Vte="return f32(!(a >= 1.0));",zte="return -a;",Wte="if (a < 0.0) { return uniforms.alpha * a; } return a;",Ute=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,pre="return 1.0 / a;",cre="return select(a, 0.0, a < 0.0);",lre="return clamp(a, 0.0, 6.0);",mre="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",fre=` +`,Gte="return 1.0 / a;",Hte="return select(a, 0.0, a < 0.0);",qte="return clamp(a, 0.0, 6.0);",Kte="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",jte=` return select(a, vec4(0.0), a < vec4(0.0)); -`,dre="return 1.0/sqrt(a);",hre="return 1.0 / (1.0 + exp(-1.0 * a));",gre="return sin(a);",xre=` +`,Xte="return inverseSqrt(a);",Yte="return 1.0 / (1.0 + exp(-1.0 * a));",Qte="return sin(a);",Zte=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,yre="return sqrt(a);",bre="return a * a;",Cre=` +`,Jte="return sqrt(a);",ere="return a * a;",tre="return tan(a);",rre=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,Ire="return f32(i32((a)));";function za(r,e){switch(r){case pe.ABS:return Kte;case pe.COS:return Xte;case pe.COSH:return Yte;case pe.CEIL:return jte;case pe.ELU:return e?Jte:Zte;case pe.EXP:return ere;case pe.EXPM1:return Qte;case pe.FLOOR:return tre;case pe.IS_NAN:return rre;case pe.LINEAR:return ore;case pe.LOG:return nre;case pe.LOGICAL_NOT:return sre;case pe.NEG:return are;case pe.LEAKYRELU:return e?ure:ire;case pe.RECIPROCAL:return pre;case pe.RELU:return e?fre:cre;case pe.RELU6:return e?mre:lre;case pe.RSQRT:return dre;case pe.SIGMOID:return hre;case pe.SIN:return gre;case pe.SINH:return xre;case pe.SQRT:return yre;case pe.SQUARE:return bre;case pe.TANH:return Cre;case pe.TO_INT:return Ire;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var vt=r=>{switch(r){case 1:return"f32";case 2:return"vec2";case 3:return"vec3";case 4:return"vec4";default:throw new Error(`${r}-component is not supported.`)}};function ur(r,e=!1,t=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=za(pe.LINEAR);else if(r==="relu")n=za(pe.RELU,t);else if(r==="elu")n=za(pe.ELU,t);else if(r==="relu6")n=za(pe.RELU6,t);else if(r==="prelu")n=Nc(ye.PRELU,t);else if(r==="sigmoid")n=za(pe.SIGMOID,t);else if(r==="leakyrelu")n=za(pe.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=vt(t?4:1),i="";return e?i=` +`,ore="return f32(i32((a)));";function Ha(r,e){switch(r){case Q.ABS:return yte;case Q.ACOS:return bte;case Q.ACOSH:return Cte;case Q.ASIN:return Ste;case Q.ASINH:return wte;case Q.ATAN:return Ite;case Q.ATANH:return vte;case Q.COS:return Nte;case Q.COSH:return Tte;case Q.CEIL:return kte;case Q.ELU:return e?$te:Ete;case Q.ERF:return Ate;case Q.EXP:return Rte;case Q.EXPM1:return _te;case Q.FLOOR:return Fte;case Q.IS_FINITE:return Dte;case Q.IS_INF:return Ote;case Q.IS_NAN:return Pte;case Q.LINEAR:return Mte;case Q.LOG:return Lte;case Q.LOG1P:return Bte;case Q.LOGICAL_NOT:return Vte;case Q.NEG:return zte;case Q.LEAKYRELU:return e?Ute:Wte;case Q.RECIPROCAL:return Gte;case Q.RELU:return e?jte:Hte;case Q.RELU6:return e?Kte:qte;case Q.RSQRT:return Xte;case Q.SIGMOID:return Yte;case Q.SIN:return Qte;case Q.SINH:return Zte;case Q.SQRT:return Jte;case Q.SQUARE:return ere;case Q.TAN:return tre;case Q.TANH:return rre;case Q.TO_INT:return ore;default:throw new Error(`BinaryType ${r} is not implemented!`)}}var kt=r=>{switch(r){case 1:return"f32";case 2:return"vec2";case 3:return"vec3";case 4:return"vec4";default:throw new Error(`${r}-component is not supported.`)}};function ur(r,e=!1,t=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=Ha(Q.LINEAR);else if(r==="relu")n=Ha(Q.RELU,t);else if(r==="elu")n=Ha(Q.ELU,t);else if(r==="relu6")n=Ha(Q.RELU6,t);else if(r==="prelu")n=Ic(ye.PRELU,t);else if(r==="sigmoid")n=Ha(Q.SIGMOID,t);else if(r==="leakyrelu")n=Ha(Q.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=kt(t?4:1),i="";return e?i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { let b = getPreluActivationWeightsByOutputCoords(coords); ${n} }`:i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { ${n} - }`,i}function Kr(r,e){return` + }`,i}function Hr(r,e){return` ${r?"value = value + getBiasByOutputCoords(coords);":""} ${e?"value = activation(value, coords);":""} - `}function lS(r,e,t,o,n=!1,s=!1,a=!1,i=1){x.assert(t&&i===1||!t,()=>`transposeA ${t} is not compatible with component size ${i}`);let p=` + `}function iI(r,e,t,o,n=!1,s=!1,a=!1,i=1){y.assert(t&&i===1||!t,()=>`transposeA ${t} is not compatible with component size ${i}`);let p=` let batch = ${r?"0":"batchIn"}; ${t?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,u=o?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` - fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} { - var value = ${vt(i)}(0.0); + fn mm_readA(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} { + var value = ${kt(i)}(0.0); let col = colIn * ${i}; ${n&&a?p:` ${t?"if(row < uniforms.dimAOuter && col < uniforms.dimInner)":"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} @@ -5309,92 +5395,84 @@ return a / b;`,X7=` return value; } - fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${vt(i)} { + fn mm_readB(batchIn: i32, row: i32, colIn: i32) -> ${kt(i)} { let col = colIn * ${i}; let batch = ${e?"0":"batchIn"}; - var value = ${vt(i)}(0.0); + var value = ${kt(i)}(0.0); ${u} return value; } - `}function jl(r,e,t,o,n,s,a=!1,i=!1,p=!1,u=1){return` - ${lS(t,o,n,s,a,i,p,u)} - fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${vt(u)}) { + `}function Vl(r,e,t,o,n,s,a=!1,i=!1,p=!1,u=1){return` + ${iI(t,o,n,s,a,i,p,u)} + fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${kt(u)}) { let col = colIn * ${u}; ${a&&i?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${Kr(r,e)} + ${Hr(r,e)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var wre=r=>r?` + `}var nre=r=>r?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, - globalRowStart / InnerElementSize + inputCol); + globalRowStart / innerElementSize + inputCol); `:` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRow + innerRow, - kStart / InnerElementSize + inputCol); - `,Sre=(r,e)=>r?` - let ACached0 = mm_Asub[k * InnerElementSize][localRow]; - let ACached1 = mm_Asub[k * InnerElementSize + 1][localRow]; - let ACached2 = mm_Asub[k * InnerElementSize + 2][localRow]; - ${e===3?"":"let ACached3 = mm_Asub[k * InnerElementSize + 3][localRow];"} - for (var i = 0; i < RowPerThread; i = i + 1) { + kStart / innerElementSize + inputCol); + `,sre=(r,e)=>r?` + let ACached0 = mm_Asub[k * innerElementSize][localRow]; + let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; + let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; + ${e===3?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} + for (var i = 0; i < rowPerThread; i = i + 1) { acc[i] = BCached0 * ACached0[i] + acc[i]; acc[i] = BCached1 * ACached1[i] + acc[i]; acc[i] = BCached2 * ACached2[i] + acc[i]; ${e===3?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"} }`:` - for (var i = 0; i < RowPerThread; i = i + 1) { + for (var i = 0; i < rowPerThread; i = i + 1) { let ACached = mm_Asub[tileRow + i][k]; acc[i] = BCached0 * ACached.x + acc[i]; acc[i] = BCached1 * ACached.y + acc[i]; acc[i] = BCached2 * ACached.z + acc[i]; ${e===3?"":"acc[i] = BCached3 * ACached.w + acc[i];"} - }`;function Uu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1];return x.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. + }`;function Wu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1];return y.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. Otherwise, innerElementSize ${l} must be 3 or 4. - tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}. tileInner ${o} must be divisible by workGroupSize[1] ${e[1]}. ColPerThread ${r[0]} must be 4.`),` + tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`),` var mm_Asub : array, ${u/l}>, ${c}>; var mm_Bsub : array, ${p/r[0]}>, ${o}>; - const RowPerThread = ${r[1]}; - const ColPerThread = ${r[0]}; - const InnerElementSize = ${l}; - const TileInner = ${o}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${r[1]}; + const colPerThread = ${r[0]}; + const innerElementSize = ${l}; + const tileInner = ${o}; + ${se()} { let localRow = i32(localId.y); - let tileRow = ${a?"0":"localRow * RowPerThread"}; + let tileRow = ${a?"0":"localRow * rowPerThread"}; let tileCol = i32(localId.x); - let globalRow = ${a?"0":"i32(globalId.y) * RowPerThread"}; + let globalRow = ${a?"0":"i32(globalId.y) * rowPerThread"}; let globalCol = i32(globalId.x); let batch = ${n?"0":"i32(globalId.z)"}; let globalRowStart = i32(workgroupId.y) * ${i}; - let numTiles = ${n?`${Math.ceil(s/o)}`:"(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${n?`${Math.ceil(s/o)}`:"(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${n?`i32(globalId.z) * ${s}`:"0"}; - var acc: array, RowPerThread>; + var acc: array, rowPerThread>; // Loop over shared dimension. let tileRowB = localRow * ${m}; for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${wre(t)} + ${nre(t)} } // Load one tile of B into local memory. @@ -5403,26 +5481,26 @@ return a / b;`,X7=` let inputCol = tileCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol); } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileInner / InnerElementSize; k = k + 1) { - let BCached0 = mm_Bsub[k * InnerElementSize][tileCol]; - let BCached1 = mm_Bsub[k * InnerElementSize + 1][tileCol]; - let BCached2 = mm_Bsub[k * InnerElementSize + 2][tileCol]; - ${l===3?"":"let BCached3 = mm_Bsub[k * InnerElementSize + 3][tileCol];"} + for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { + let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; + let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; + let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; + ${l===3?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} - ${Sre(t,l)} + ${sre(t,l)} } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var oM=r=>r?` + }`}var P3=r=>r?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, globalRowStart + inputCol); @@ -5430,7 +5508,7 @@ return a / b;`,X7=` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRowStart + inputRow, kStart + inputCol); - `,vre=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Gu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=r[1]*e[1],p=r[0]*e[0],u=t?i:o,c=t?o:i;x.assert(c%e[1]===0&&u%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workGroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workGroupSize[0]${e[0]}, tileInner ${o} must be divisible by workGroupSize[1]${e[1]}`);let l=c/e[1],m=u/e[0],f=o/e[1],d=a?` + `,are=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Uu(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=r[1]*e[1],p=r[0]*e[0],u=t?i:o,c=t?o:i;y.assert(c%e[1]===0&&u%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let l=c/e[1],m=u/e[0],d=o/e[1],f=a?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${i}; @@ -5441,7 +5519,7 @@ return a / b;`,X7=` // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) { for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) { - ${oM(t)} + ${P3(t)} } } // Load one tile of B into local memory. @@ -5452,18 +5530,18 @@ return a / b;`,X7=` globalColStart + inputCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } @@ -5471,24 +5549,24 @@ return a / b;`,X7=` } workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let gRow = globalRowStart + localRow + innerRow * ${e[1]}; - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let gCol = globalColStart + localCol + innerCol * ${e[0]}; mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); } } `:` - let tileRow = i32(localId.y) * RowPerThread; - let tileCol = i32(localId.x) * ColPerThread; + let tileRow = i32(localId.y) * rowPerThread; + let tileCol = i32(localId.x) * colPerThread; - let globalRow = i32(globalId.y) * RowPerThread; - let globalCol = i32(globalId.x) * ColPerThread; + let globalRow = i32(globalId.y) * rowPerThread; + let globalCol = i32(globalId.x) * colPerThread; let globalRowStart = i32(workgroupId.y) * ${i}; let tileRowA = i32(localId.y) * ${l}; let tileColA = i32(localId.x) * ${m}; - let tileRowB = i32(localId.y) * ${f}; + let tileRowB = i32(localId.y) * ${d}; // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. @@ -5496,13 +5574,13 @@ return a / b;`,X7=` for (var innerCol = 0; innerCol < ${m}; innerCol = innerCol + 1) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${oM(t)} + ${P3(t)} } } // Load one tile of B into local memory. - for (var innerRow = 0; innerRow < ${f}; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol + innerCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, @@ -5510,19 +5588,19 @@ return a / b;`,X7=` globalCol + innerCol); } } - kStart = kStart + TileInner; + kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. - var BCached : array; - for (var k = 0; k < TileInner; k = k + 1) { - for (var inner = 0; inner < ColPerThread; inner = inner + 1) { + var BCached : array; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][tileCol + inner]; } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - ${vre(t)} - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + ${are(t)} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } } @@ -5531,8 +5609,8 @@ return a / b;`,X7=` workgroupBarrier(); } - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { mm_write(batch, globalRow + innerRow, globalCol + innerCol, acc[innerRow][innerCol]); } @@ -5540,34 +5618,26 @@ return a / b;`,X7=` `;return` var mm_Asub : array, ${c}>; var mm_Bsub : array, ${o}>; - const RowPerThread = ${r[1]}; - const ColPerThread = ${r[0]}; - const TileInner = ${o}; - - @compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ) - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(num_workgroups) NumWorkgroups: vec3, - @builtin(workgroup_id) workgroupId: vec3) { - localId = LocalId; - globalId = GlobalId; - numWorkgroups = NumWorkgroups; + const rowPerThread = ${r[1]}; + const colPerThread = ${r[0]}; + const tileInner = ${o}; + ${se()} { let batch = ${n?"0":"i32(globalId.z)"}; - let numTiles = ${n?`${Math.ceil(s/o)}`:"(uniforms.dimInner - 1) / TileInner + 1"}; + let numTiles = ${n?`${Math.ceil(s/o)}`:"(uniforms.dimInner - 1) / tileInner + 1"}; var kStart = ${n?`i32(globalId.z) * ${s}`:"0"}; - var acc : array, RowPerThread>; + var acc : array, rowPerThread>; // Without this initialization strange values show up in acc. - for (var innerRow = 0; innerRow < RowPerThread; innerRow = innerRow + 1) { - for (var innerCol = 0; innerCol < ColPerThread; innerCol = innerCol + 1) { + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = 0.0; } } - ${d} + ${f} } - `}var kre=r=>r?` + `}var ire=r=>r?` mm_readA(batch, colA, globalRow), mm_readA(batch, colA + 1, globalRow), mm_readA(batch, colA + 2, globalRow), @@ -5577,16 +5647,16 @@ return a / b;`,X7=` mm_readA(batch, globalRow, colA + 1), mm_readA(batch, globalRow, colA + 2), mm_readA(batch, globalRow, colA + 3) - `;function Tre(r,e=!1){return x.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`),` - const TileSize = ${r[0]*4}; + `;function ure(r,e=!1){return y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`),` + const tileSize = ${r[0]*4}; var mm_Asub : array, ${r[0]}>; - ${ue()} { + ${se()} { let tileCol = i32(localId.x); let globalCol = i32(globalId.x); let globalRow = i32(globalId.y); - let numTiles = (uniforms.dimInner - 1) / TileSize + 1; + let numTiles = (uniforms.dimInner - 1) / tileSize + 1; let batch = i32(globalId.z); // Without this initialization strange values show up in acc. var acc = 0.0; @@ -5594,13 +5664,13 @@ return a / b;`,X7=` // Loop over shared dimension. for (var t = 0; t < numTiles; t = t + 1) { // Load one tile of A into local memory. - let colA = t * TileSize + tileCol * 4; - mm_Asub[tileCol] = vec4(${kre(e)}); + let colA = t * tileSize + tileCol * 4; + mm_Asub[tileCol] = vec4(${ire(e)}); workgroupBarrier(); // Compute acc values for a single thread. - for (var k = 0; k < TileSize / 4; k = k + 1) { - let rowB = t * TileSize + k * 4; + for (var k = 0; k < tileSize / 4; k = k + 1) { + let rowB = t * tileSize + k * 4; let BCached = vec4(mm_readB(batch, rowB, globalCol), mm_readB(batch, rowB + 1, globalCol), mm_readB(batch, rowB + 2, globalCol), @@ -5615,20 +5685,20 @@ return a / b;`,X7=` mm_write(batch, globalRow, globalCol, acc); } - `}var Bg=class{constructor(e,t,o,n,s=!1,a=!1,i=null,p=null,u=null,c=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=s?e[1]:e[2];if(this.isVec4=(l%4===0&&!s||t[1]%4===0&&s)&&t[2]%4===0&&!a,this.isVectorA=t[1]===1&&!s,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workGroupSize=[32,1,1];else{let d=aS(t[1],l,t[2],s);this.workGroupSize=d.workGroupSize,this.elementsPerThread=d.elementsPerThread}this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread);let m=i!=null,f=u!=null;m&&this.variableNames.push("bias"),f&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=c,this.transposeA=s,this.transposeB=a,this.addBias=m,this.activation=p,this.hasPreluActivationWeights=f,this.batchAEqualOne=o,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workGroupSize[1]*this.elementsPerThread[1],s=this.workGroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workGroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` + `}var _g=class{constructor(e,t,o,n,s=!1,a=!1,i=null,p=null,u=null,c=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=s?e[1]:e[2];if(this.isVec4=(l%4===0&&!s||t[1]%4===0&&s)&&t[2]%4===0&&!a,this.isVectorA=t[1]===1&&!s,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let f=tI(t[1],l,t[2],s);this.workgroupSize=f.workgroupSize,this.elementsPerThread=f.elementsPerThread}this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let m=i!=null,d=u!=null;m&&this.variableNames.push("bias"),d&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=c,this.transposeA=s,this.transposeB=a,this.addBias=m,this.activation=p,this.hasPreluActivationWeights=d,this.batchAEqualOne=o,this.batchBEqualOne=n,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${s}_${a}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.batchAEqualOne}_${this.batchBEqualOne}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` ${ur(this.activation,this.hasPreluActivationWeights,this.isVec4)} - ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?Tre(this.workGroupSize,this.transposeA):Gu(this.elementsPerThread,this.workGroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)} - `}};function Nre(){return` - var sumValues : array; - ${ue()} { + ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.isVectorA):this.isVectorA?ure(this.workgroupSize,this.transposeA):Uu(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads)} + `}};function pre(){return` + var sumValues : array; + ${se()} { let coords = getOutputCoords(); let batch = coords[0]; let row = coords[1]; let col = coords[2]; var sum = 0.0; let Length = uniforms.dimInner; - for (var k = i32(localId.x); k < Length; k = k + i32(workGroupSizeX)) { + for (var k = i32(localId.x); k < Length; k = k + i32(workgroupSizeX)) { let dataA = mm_readA(batch, row, k); let dataB = mm_readB(batch, k, col); sum = sum + dataA * dataB; @@ -5636,7 +5706,7 @@ return a / b;`,X7=` sumValues[localId.x] = sum; workgroupBarrier(); - for(var currentSize = workGroupSizeX / 2u; currentSize > 1u; + for(var currentSize = workgroupSizeX / 2u; currentSize > 1u; currentSize = currentSize / 2u) { if (localId.x < currentSize) { @@ -5650,11 +5720,11 @@ return a / b;`,X7=` mm_write(batch, row, col, sum); } } - `}var Vg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize);let u=a!=null,c=p!=null;u&&this.variableNames.push("bias"),c&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=t,this.batchBEqualOne=o,this.shaderKey=`matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` + `}var Eg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize);let u=a!=null,c=p!=null;u&&this.variableNames.push("bias"),c&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=t,this.batchBEqualOne=o,this.shaderKey=`matMulReduce_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` ${ur(this.activation,this.hasPreluActivationWeights)} - ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} - ${Nre()} - `}};function _re(r){let e=r[1],t=r[0],o=e>t?e:t;return` + ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} + ${pre()} + `}};function cre(r){let e=r[1],t=r[0],o=e>t?e:t;return` var mm_Asub : array, ${e}>; var mm_Bsub : array, ${o}>; @@ -5664,7 +5734,7 @@ return a / b;`,X7=` // shared memory, so it is instruction-Level parallelism for arithmetic // operations and others handle IO operations between barrier api, makes ALU // and load/store units work simultaneously, could improves the performance. - ${ue()} { + ${se()} { let tileRow = i32(localId.y); let tileCol = i32(localId.x); let globalRow = i32(globalId.y); @@ -5704,11 +5774,11 @@ return a / b;`,X7=` mm_write(batch, globalRow, globalCol, acc); } - `}var zg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workGroupSize[0]),Math.ceil(o[1]/this.workGroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push("bias");let c=p!=null;c&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` + `}var $g=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push("bias");let c=p!=null;c&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.batchAEqualOne=e[0]===1,this.batchBEqualOne=t[0]===1,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}_${this.batchAEqualOne}_${this.batchBEqualOne}`}getUserCode(){return` ${ur(this.activation,this.hasPreluActivationWeights)} - ${jl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} - ${_re(this.workGroupSize)} - `}};var Wg=class{constructor(e,t,o,n,s=!1,a=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workGroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,x.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(s&&this.outputShape[1]%4===0||!s&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=ae(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workGroupSize,this.elementsPerThread),this.transposeA=s,this.transposeB=a,this.batchAEqualOne=o,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=n=>` + ${Vl(this.addBias,this.activation,this.batchAEqualOne,this.batchBEqualOne,this.transposeA,this.transposeB)} + ${cre(this.workgroupSize)} + `}};var Ag=class{constructor(e,t,o,n,s=!1,a=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.isVec4=!1,this.splitedDimInner=128,y.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]},this.isVec4=(s&&this.outputShape[1]%4===0||!s&&t%4===0)&&this.outputShape[2]%4===0,this.elementsPerThread=[4,4,this.splitedDimInner],this.isVec4||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=re(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=s,this.transposeB=a,this.batchAEqualOne=o,this.batchBEqualOne=n,this.shaderKey=`matMulSplitK_${s}_${a}_${o}_${n}_${this.elementsPerThread}_${this.isVec4}`}getUserCode(){let e=n=>` for (var i = 0; i < ${n}; i = i + 1) { var oldValue = atomicLoad(&(result[flatIndex + i])); @@ -5722,8 +5792,8 @@ return a / b;`,X7=` } } `,t=this.isVec4?4:1;return` - ${lS(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)} - fn mm_write(batch: i32, row : i32, colIn : i32, value : ${vt(t)}) { + ${iI(this.batchAEqualOne,this.batchBEqualOne,!1,this.transposeB,!1,!1,!1,t)} + fn mm_write(batch: i32, row : i32, colIn : i32, value : ${kt(t)}) { let col = colIn * ${t}; if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5733,30 +5803,30 @@ return a / b;`,X7=` ${e(t)} } } - ${this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner):Gu(this.elementsPerThread,this.workGroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},Ug=class{constructor(e,t=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return` + ${this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Uu(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},Rg=class{constructor(e,t=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return` ${ur(this.activation,this.hasPreluActivationWeights)} - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${Kr(this.addBias,this.activation)} + ${Hr(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}};var Gg=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="fill"}getUserCode(){return` - ${ue("index")} { + `}};var Fg=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function $o(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||x.inferDtype(n),s==="string"){let a=x.getArrayFromDType(s,x.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Gg(o),i=[{type:"float32",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var nM={kernelName:ys,backendName:"webgpu",kernelFunc:$o};function xe(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=x.sizeFromShape(o.shape),a=x.inferFromImplicitShape(n,s),i=x.sizeFromShape(a);return x.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var sM={kernelName:Ss,backendName:"webgpu",kernelFunc:xe};function _c({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],f=t?r.shape[u-1]:r.shape[u-2],d=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),y=x.sizeFromShape(h),b=x.sizeFromShape(g),w=br.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([f,d]);x.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[y,l,f]:[y,f,l],_=o?[b,d,m]:[b,m,d],E=xe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=xe({inputs:{x:e},backend:n,attrs:{shape:_}}),A=[E,R],D=Math.max(y,b),O=y===1,M=b===1,L=[E,R],W=[{type:"int32",data:[f]},{type:"int32",data:[d]},{type:"int32",data:[l]}],V,G,q=[D,f,d],H=P().get("WEBGPU_MATMUL_PROGRAM_TYPE");switch(H<0&&(f*d<=128?H=Qo.MatMulReduceProgram:D===1&&f<=128&&d<=48&&m>=2e3?H=Qo.MatMulSplitKProgram:f<=16&&(d<=512||m>=2*d)||d<=16&&(f<=512||l>=2*f)?H=Qo.MatMulSmallOutputSizeProgram:H=Qo.MatMulPackedProgram),H){case Qo.MatMulReduceProgram:V=new Vg(q,O,M,t,o,s,p,a);break;case Qo.MatMulSplitKProgram:{if(G=$o({backend:n,attrs:{shape:q,value:0,dtype:r.dtype}}),V=new Wg(q,m,O,M,t,o),s||p){G=n.runWebGPUProgram(V,L,r.dtype,W,G);let Z=new Ug(G.shape,s,p,a),ee=null,X=[G];s&&X.push(s),a&&X.push(a),p==="leakyrelu"&&(ee=[{type:"float32",data:[i]}],Z.uniforms+=" alpha : f32,");let Q=n.runWebGPUProgram(Z,X,G.dtype,ee);A.push(G);let se=xe({inputs:{x:Q},backend:n,attrs:{shape:w}});A.push(Q);for(let ie of A)n.disposeData(ie.dataId);return se}break}case Qo.MatMulSmallOutputSizeProgram:V=new zg(k,_,q,t,o,s,p,a);break;case Qo.MatMulPackedProgram:let Y=n.adapterInfo.isIntel();V=new Bg(k,q,O,M,t,o,s,p,a,Y);break;default:throw new Error(`Unsupported MatMulProgramType ${H}.`)}s&&L.push(s),a&&L.push(a),p==="leakyrelu"&&(W.push({type:"float32",data:[i]}),V.uniforms+=" alpha : f32,"),G=n.runWebGPUProgram(V,L,r.dtype,W,G);let j=xe({inputs:{x:G},backend:n,attrs:{shape:w}});A.push(G);for(let Y of A)n.disposeData(Y.dataId);return j}function Ere(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _c({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var aM={kernelName:Fo,backendName:"webgpu",kernelFunc:Ere};var Xl=class{constructor(e,t,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=I.assertAndGetBroadcastShape(t,o),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` + `}};function dr(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new Fg(o),i=[{type:"float32",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var M3={kernelName:Cs,backendName:"webgpu",kernelFunc:dr};function de(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var L3={kernelName:Ns,backendName:"webgpu",kernelFunc:de};function Gu({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),w=br.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=de({inputs:{x:r},backend:n,attrs:{shape:k}}),A=de({inputs:{x:e},backend:n,attrs:{shape:_}}),R=[$,A],D=Math.max(x,b),P=x===1,M=b===1,L=[$,A],W=[{type:"int32",data:[d]},{type:"int32",data:[f]},{type:"int32",data:[l]}],V,U,q=[D,d,f],H=O().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(H<0){let X=O().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),Z=X>0?X:n.thresholdToIncreaseWorkgroups,ee=D*Math.ceil(d/32)*Math.ceil(f/32);ee<=Z||d<=8&&ee<=Z*2?D*d*f<=128?H=Ao.MatMulReduceProgram:D===1&&m>=2e3?H=Ao.MatMulSplitKProgram:H=Ao.MatMulSmallOutputSizeProgram:H=Ao.MatMulPackedProgram}switch(H){case Ao.MatMulReduceProgram:V=new Eg(q,P,M,t,o,s,p,a);break;case Ao.MatMulSplitKProgram:{if(U=dr({backend:n,attrs:{shape:q,value:0,dtype:r.dtype}}),V=new Ag(q,m,P,M,t,o),s||p){U=n.runWebGPUProgram(V,L,r.dtype,W,U);let Z=new Rg(U.shape,s,p,a),ee=null,Y=[U];s&&Y.push(s),a&&Y.push(a),p==="leakyrelu"&&(ee=[{type:"float32",data:[i]}],Z.uniforms+=" alpha : f32,");let J=n.runWebGPUProgram(Z,Y,U.dtype,ee);R.push(U);let ie=de({inputs:{x:J},backend:n,attrs:{shape:w}});R.push(J);for(let pe of R)n.disposeData(pe.dataId);return ie}break}case Ao.MatMulSmallOutputSizeProgram:V=new $g(k,_,q,t,o,s,p,a);break;case Ao.MatMulPackedProgram:let X=n.adapterInfo.isIntel();V=new _g(k,q,P,M,t,o,s,p,a,X);break;default:throw new Error(`Unsupported MatMulProgramType ${H}.`)}s&&L.push(s),a&&L.push(a),p==="leakyrelu"&&(W.push({type:"float32",data:[i]}),V.uniforms+=" alpha : f32,"),U=n.runWebGPUProgram(V,L,r.dtype,W,U);let j=de({inputs:{x:U},backend:n,attrs:{shape:w}});R.push(U);for(let X of R)n.disposeData(X.dataId);return j}function lre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Gu({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var B3={kernelName:fo,backendName:"webgpu",kernelFunc:lre};var zl=class{constructor(e,t,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=S.assertAndGetBroadcastShape(t,o),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${Nc(this.op,!1)} + ${Ic(this.op,!1)} } - ${ue("index")} { + ${se("index")} { if(index < uniforms.size) { let areal = getARealByOutputIndex(index); let aimag = getAImagByOutputIndex(index); @@ -5765,16 +5835,16 @@ return a / b;`,X7=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}};var Hu=class{constructor(e,t,o){this.size=!0,this.variableNames=["A","B"],this.outputShape=I.assertAndGetBroadcastShape(t,o),this.dispatchLayout=fe(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type="shared",this.workGroupSize=[256,1,1],this.workPerThread=1):(x.arraysEqual(t,o)&&x.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type="vec4",this.workPerThread=4):(this.isVec4=!1,this.type="plain",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workGroupSize=[128,1,1]),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?"vec4":"f32",o=` + `}};var Hu=class{constructor(e,t,o){this.size=!0,this.variableNames=["A","B"],this.outputShape=S.assertAndGetBroadcastShape(t,o),this.dispatchLayout=ue(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB?(this.isVec4=!1,this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${this.type}_${e}_${this.lastDimensionSize}_${this.useSharedMemoryWithB}`,this.type="shared",this.workgroupSize=[256,1,1],this.workPerThread=1):(y.arraysEqual(t,o)&&y.sizeFromShape(t)%4===0?(this.isVec4=!0,this.type="vec4",this.workPerThread=4):(this.isVec4=!1,this.type="plain",this.workPerThread=1),this.shaderKey=`binary_${this.type}_${e}`,this.workgroupSize=[128,1,1]),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1])}getUserCode(){let e,t=this.isVec4?"vec4":"f32",o=` fn binaryOperation(a : ${t}, b : ${t}) -> ${t} { - ${Nc(this.op,this.isVec4)} + ${Ic(this.op,this.isVec4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; let b = getBByOutputIndex(index);`;e=` ${o} var sharedBuf : array; - ${ue("index")} { + ${se("index")} { // Fill in the shared memory buffer. let localIndex = i32(localId.x); if(localIndex < ${this.lastDimensionSize}) { @@ -5790,25 +5860,25 @@ return a / b;`,X7=` } `}else e=` ${o} - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); let b = getBByOutputIndex(index); setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function Lt(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var iM={kernelName:uo,backendName:"webgpu",kernelFunc:Lt};function ls(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.tensorMap.get(s.dataId),i=Lt({inputs:{x:o},backend:t}),p=Lt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var uM={kernelName:aa,backendName:"webgpu",kernelFunc:ls};var Zo=class{constructor(e,t){this.variableNames=["A"],this.size=!0;let o=128;this.workGroupSize=[o,1,1],this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return` + `;return e}};function Ft(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var V3={kernelName:mo,backendName:"webgpu",kernelFunc:Ft};function po(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.tensorMap.get(s.dataId),i=Ft({inputs:{x:o},backend:t}),p=Ft({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var z3={kernelName:ei,backendName:"webgpu",kernelFunc:po};var Ro=class{constructor(e,t){this.variableNames=["A"],this.size=!0;let o=128;this.workgroupSize=[o,1,1],this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,this.shaderKey=`unary_${t}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { - ${za(this.op,!1)} + ${Ha(this.op,!1)} } - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let a = getAByOutputIndex(index); setOutputAtIndex(index, unaryOperation(a)); } } - `}};function Ge({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Zo(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function it({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype==="complex64"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),f,d;if(r!==ye.MUL)[f,d]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[y,b]=g,C={dataId:y.dataId,dtype:y.dtype,shape:a.shape},w={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,w],ct(y.dtype,b.dtype))});else{let g=new Xl(ye.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),y=new Xl(ye.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];f=p.runWebGPUProgram(g,b,"float32"),d=p.runWebGPUProgram(y,b,"float32")}let h=ls({inputs:{real:f,imag:d},backend:p});return p.disposeData(f.dataId),p.disposeData(d.dataId),h}let u=o||ct(a.dtype,i.dtype);if((a.dtype==="string"||i.dtype==="string"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,f=a.dtype==="string"?I.fromUint8ToStringArray(l):l,d=a.dtype==="string"?I.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,f,d,u);return p.makeTensorInfo(g,u,h)}let c=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var FS={};Be(FS,{addImpl:()=>dS,bincountImpl:()=>lM,bincountReduceImpl:()=>mM,castImpl:()=>fS,ceilImpl:()=>hS,concatImpl:()=>fM,equalImpl:()=>gS,expImpl:()=>xS,expm1Impl:()=>yS,floorImpl:()=>bS,gatherNdImpl:()=>dM,gatherV2Impl:()=>hM,greaterEqualImpl:()=>IS,greaterImpl:()=>CS,lessEqualImpl:()=>SS,lessImpl:()=>wS,linSpaceImpl:()=>gM,logImpl:()=>vS,maxImpl:()=>xM,maximumImpl:()=>kS,minimumImpl:()=>TS,multiplyImpl:()=>Ql,negImpl:()=>yM,notEqualImpl:()=>NS,prodImpl:()=>bM,raggedGatherImpl:()=>IM,raggedTensorToTensorImpl:()=>vM,rangeImpl:()=>kM,rsqrtImpl:()=>ES,scatterImpl:()=>TM,sigmoidImpl:()=>NM,simpleAbsImpl:()=>pM,sliceImpl:()=>_M,sparseFillEmptyRowsImpl:()=>EM,sparseReshapeImpl:()=>$M,sparseSegmentReductionImpl:()=>RM,sqrtImpl:()=>AM,squaredDifferenceImpl:()=>$S,stridedSliceImpl:()=>FM,stringNGramsImpl:()=>DM,stringSplitImpl:()=>PM,stringToHashBucketFastImpl:()=>OM,subImpl:()=>AS,tileImpl:()=>MM,topKImpl:()=>BM,transposeImpl:()=>_S,uniqueImpl:()=>VM});function Xs(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&x.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}function pM(r){let e=new Float32Array(r.length);for(let t=0;t{let a=I.assertAndGetBroadcastShape(e,t),i=a.length,p=x.computeStrides(a),u=x.sizeFromShape(a),c=x.getTypedArrayFromDType(s,u),l=e.length,m=t.length,f=x.computeStrides(e),d=x.computeStrides(t),h=I.getBroadcastDims(e,a),g=I.getBroadcastDims(t,a);if(h.length+g.length===0)for(let y=0;yC[E]=0);let w=x.locToIndex(C,l,f),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=x.locToIndex(k,m,d);c[y]=r(o[w],n[_])}return[c,a]}}function Ec(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}function Hg(r,e,t="float32"){if(t==="complex64"){let n=Hg(r,e,"float32"),s=Hg(r,e,"float32");return Ec({inputs:{real:n,imag:s},backend:r})}let o=x.makeZerosTypedArray(x.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function mS(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function cM(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}function fS(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=x.toTypedArray([0],t),[s,a]=kt((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Yl(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return mS({inputs:{x:n},backend:t});let c=Hg(t,n.shape,n.dtype),l=Yl({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=Ec({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=cM({inputs:{input:n},backend:t}),l=Yl({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!x.hasEncodingLoss(n.dtype,s)){let c=mS({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=fS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}function Dt(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Xs([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?I.fromUint8ToStringArray(u):u,m=a.dtype==="string"?I.fromUint8ToStringArray(c):c,f=o||a.dtype,[d,h]=e(a.shape,i.shape,l,m,f);return p.makeTensorInfo(h,f,d)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=Yl({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=p.data.get(l.dataId).values,d=p.data.get(m.dataId).values,h=Yl({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(y.dataId).values,w=p.data.get(b.dataId).values,[k,_,E]=t(a.shape,i.shape,f,d,C,w),R=p.makeTensorInfo(E,"float32",k),A=p.makeTensorInfo(E,"float32",_),D=Ec({inputs:{real:R,imag:A},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(A),D}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,f]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(f,l,m)}}}function $c(r){return(e,t,o,n,s,a)=>{let i=I.assertAndGetBroadcastShape(e,t),p=x.sizeFromShape(i),u=i.length,c=x.computeStrides(i),l=x.getTypedArrayFromDType("float32",p),m=x.getTypedArrayFromDType("float32",p),f=I.getBroadcastDims(e,i),d=I.getBroadcastDims(t,i),h=I.mergeRealAndImagArrays(o,n),g=I.mergeRealAndImagArrays(s,a),y=e.length,b=x.computeStrides(e),C=t.length,w=x.computeStrides(t);if(f.length+d.length===0)for(let k=0;kE[M]=0);let R=x.locToIndex(E,y,b),A=_.slice(-C);d.forEach(M=>A[M]=0);let D=x.locToIndex(A,C,w),O=r(h[R*2],h[R*2+1],g[D*2],g[D*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var dS=kt((r,e)=>r+e),$re=$c((r,e,t,o)=>({real:r+t,imag:e+o})),LTt=Dt(_r,dS,$re);function lM(r,e,t,o,n){let s=x.sizeFromShape(o),a=x.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function mM(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ne([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}function Tr(r){return(e,t,o)=>{let n=x.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;if(Xs(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=x.sizeFromShape(a.shape),c=t||a.dtype,l=x.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=o;if(Xs(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,p=i.data.get(a.dataId).values,u=t||a.dtype,c=e(p,u,n);return i.makeTensorInfo(a.shape,u,c)}}var hS=Tr(r=>Math.ceil(r)),YTt=Jo(ro,hS);function fM(r,e,t,o){let n=x.getArrayFromDType(t,x.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=x.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?I.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),oNt=Dt(oo,gS,null,"bool");var xS=Tr(r=>Math.exp(r)),uNt=Jo(no,xS,"float32");var yS=Tr(r=>Math.expm1(r)),fNt=Jo(wn,yS);var bS=Tr(r=>Math.floor(r)),yNt=Jo(so,bS);function dM(r,e,t,o,n,s,a,i,p){let u=ne([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let f=0;fr>e?1:0),NNt=Dt(ao,CS,null,"bool");var IS=kt((r,e)=>r>=e?1:0),ANt=Dt(io,IS,null,"bool");var wS=kt((r,e)=>rr<=e?1:0),WNt=Dt(co,SS,null,"bool");function gM(r,e,t){let o=(e-r)/(t-1),n=x.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),XNt=Jo(lo,vS);function xM(r,e,t,o){let n=x.getTypedArrayFromDType(o,x.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var kS=kt((r,e)=>Math.max(r,e)),r2t=Dt(mo,kS);var TS=kt((r,e)=>Math.min(r,e)),i2t=Dt(fo,TS);var Ql=kt((r,e)=>r*e),Rre=$c((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),m2t=Dt(ho,Ql,Rre);function yM(r,e,t){let o=x.createScalarValue(-1,t);return Ql([],e,o,r,t)}var NS=kt((r,e)=>r!==e?1:0),I2t=Dt(go,NS,null,"bool");function _S(r,e,t,o,n){let s=e.length,a=x.sizeFromShape(e),i=x.computeStrides(e),p=x.computeStrides(n),u=x.getTypedArrayFromDType(t,x.sizeFromShape(n));for(let c=0;c{if(o<0||o>=t){let s=x.indexToLoc(n,e.length,x.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function Fre(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function Dre(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);Fre(t,o);let p=1;for(let u=0;u=0){let h=i[d],g=h[h.length-1]-f[c];for(let y=c;yn[a]=s)}return e}function CM(r,e){let t=r.slice(0,e);for(;t.lengtho&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case en.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case en.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${en[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case en.FIRST_DIM_SIZE:return e[0];case en.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case en.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${en[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=SM(o,!1),a=x.getArrayFromDType(this.valuesDType,x.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=x.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let d=this.defaultValueShape;Ne(()=>{let h=z(c,d);c=Ls(h,i).dataSync()})}let l=0,m=0,f=0;for(let d=0;d<=u;++d){let h=d=u){let g=o.length;h=Math.floor(g/p)}if(h>f)if(this.defaultValue.length===1)a.subarray(f*p,h*p).fill(this.defaultValue[0]),f=h;else for(;h>f;){let g=a.slice(f*p);wM(g,c,p),++f}h<0?(l=d+1,m=f):(l=d,m=f,f=m+1)}}};function wM(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function vM(r,e,t,o,n,s,a,i,p,u){return new Rc(r,e,t,o,n,s,a,i,p,u).compute()}function kM(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return x.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=x.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),U2t=Jo(xo,ES);function TM(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return ne(t,e.dtype);let f=ne(c,e.dtype);typeof p=="string"||typeof p=="number"?f.values.fill(p):typeof p=="boolean"&&f.values.fill(+p);for(let d=0;d=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let y=0;y1/(1+Math.exp(-r))),Y2t=qg(yo,r=>1/(1+Math.exp(-r)));function _M(r,e,t,o,n){let s=et.isSliceContinous(o,e,t),a=x.sizeFromShape(t),i=x.computeStrides(o);if(s){let l=et.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?I.fromUint8ToStringArray(r):r,u=ne(o,n,p),c=ne(t,n);for(let l=0;ld+e[h]);c.set(u.get(...f),...m)}return n==="string"?I.fromStringArrayToUint8(c.values):c.values}function EM(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=x.getArrayFromDType(t,0),y=x.getArrayFromDType(n,0);return[g,[0,l],y,u,c]}let m=!0,f=0,d=new Array(p).fill(0);for(let g=0;g=p)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,p));++d[y],m=m&&y>=f,f=y}let h=!0;for(let g=0;g0&&(d[g]+=d[g-1])}if(h&&m){let g=r,y=o;for(let b=0;b0){f[m-1]=1;for(let g=m-2;g>=0;--g)f[g]=f[g+1]*o[g+1]}let d=[];if(i>0){d[i-1]=1;for(let g=i-2;g>=0;--g)d[g]=d[g+1]*p[g+1]}let h=x.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let f=m.reduce((C,w)=>C*w,1),d=x.getArrayFromDType(t,f);if(i===0)return l>0&&d.fill(a),[d,m];if(l<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,y=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>y&&d.fill(a,y*u,b*u);for(let w=h;w=p[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w,o[w],p[0]));for(let _=0;_i)break}return yMath.sqrt(r)),c_t=qg(bo,r=>Math.sqrt(r));var $S=kt((r,e)=>{let t=r-e;return t*t}),h_t=Dt(Co,$S);function FM(r,e,t,o){let n=ne(r,e.dtype);for(let s=0;s0?0:i-p),f=0;f+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){y(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=x.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],f=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,f,l),c+=f}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth,f=1;this.createNGrams(e,u,i,c,f,m)}}return[i,a]}};function DM(r,e,t,o,n,s,a,i){return new RS(t,o,n,s,a,i).compute(r,e)}function Lre(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),Bre=$c((r,e,t,o)=>({real:r-t,imag:e-o})),__t=Dt(Io,AS,Bre);function MM(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function LM(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),f=Math.min(o,Math.floor(e+(i-p)*c/i+l));LM(r,e,m,f)}let n=r[e],s=t,a=o;for(x.swap(r,t,e),Zl(r[o],n)>0&&x.swap(r,t,o);s0;)a=a-1}Zl(r[t],n)===0?x.swap(r,t,a):(a=a+1,x.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function BM(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=x.getTypedArrayFromDType(t,a*o),u=x.getTypedArrayFromDType("int32",a*o);for(let l=0;ld[C]={value:b,index:C}),o{for(let g=0;g`T${o}`),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(" + ");return` - ${ue("index")} { + `}};function Se({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Ro(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function ot({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype==="complex64"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==ye.MUL)[d,f]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,C={dataId:x.dataId,dtype:x.dtype,shape:a.shape},w={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,w],dt(x.dtype,b.dtype))});else{let g=new zl(ye.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new zl(ye.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,"float32"),f=p.runWebGPUProgram(x,b,"float32")}let h=po({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||dt(a.dtype,i.dtype);if((a.dtype==="string"||i.dtype==="string"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype==="string"?S.fromUint8ToStringArray(l):l,f=a.dtype==="string"?S.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Hu(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:W3,castImpl:U3,ceilImpl:G3,concatImpl:H3,equalImpl:q3,expImpl:K3,expm1Impl:j3,floorImpl:X3,gatherNdImpl:Y3,gatherV2Impl:Q3,greaterEqualImpl:Z3,greaterImpl:J3,lessEqualImpl:eM,lessImpl:tM,logImpl:rM,maxImpl:oM,maximumImpl:nM,minimumImpl:sM,multiplyImpl:aM,negImpl:iM,notEqualImpl:uM,prodImpl:pM,rangeImpl:cM,rsqrtImpl:lM,scatterImpl:mM,simpleAbsImpl:dM,sliceImpl:fM,stridedSliceImpl:hM,stringNGramsImpl:gM,subImpl:xM,tileImpl:yM,topKImpl:bM,transposeImpl:CM,uniqueImpl:kNt}=Qp;var mre=Se({opType:Q.ABS,cpuKernelImpl:dM}),SM={kernelName:gs,backendName:"webgpu",kernelFunc:mre};var dre=Se({opType:Q.ACOS}),wM={kernelName:sa,backendName:"webgpu",kernelFunc:dre};var fre=Se({opType:Q.ACOSH}),IM={kernelName:aa,backendName:"webgpu",kernelFunc:fre};var hre=ot({opType:ye.ADD,cpuKernelImpl:W3,supportsComplex:!0}),vM={kernelName:eo,backendName:"webgpu",kernelFunc:hre};var Dg=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(" + ");return` + ${se("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; if (flatIndex < uniforms.size) { @@ -5819,25 +5889,104 @@ return a / b;`,X7=` } } } - `}};function Wre(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Lt({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>ct(i,p)),s=o.map(i=>i.shape),a=new Kg(s);return t.runWebGPUProgram(a,o,n)}var wL={kernelName:an,backendName:"webgpu",kernelFunc:Wre};var Ac=class{constructor(e,t,o){this.workGroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=o==="min"?"<":">";let[s,a]=I.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=fe(this.outputShape),x.sizeFromShape(a)<32||x.sizeFromShape(s)>1e3?(this.type="plain",this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize)):(this.type="shared",this.dispatch=ae(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Yo(this.inputShape.length-1)}`,t=()=>{let o="";if(this.outputShape.length===1)this.inputShape.length!==1&&(o+="outputCoords,");else for(let n=0;ni.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new Dg(s);return t.runWebGPUProgram(a,o,n)}var kM={kernelName:Mo,backendName:"webgpu",kernelFunc:gre};var Og=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`),` + const tileSize = ${this.workgroupSize[0]}; + var tile : array, ${this.workgroupSize[0]}>; + ${se()} { + var x = i32(workgroupId.x) * tileSize + i32(localId.x); + var y = i32(workgroupId.y) * tileSize + i32(localId.y); + let width = uniforms.outShape[0]; + let height = uniforms.outShape[1]; + if (x < width && y < height) { + tile[localId.y][localId.x] = f32(A[y * width + x]); + } + workgroupBarrier(); + + x = i32(workgroupId.y) * tileSize + i32(localId.x); + y = i32(workgroupId.x) * tileSize + i32(localId.y); + if (x < height && y < width) { + setOutputAtIndex((y * height + x), tile[localId.x] + [localId.y]); + } + } + `}};var Pg=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o"} bestValue) + { bestValue = candidate; }`,t="f32(x[offset])"):this.reduceType==="sum"||this.reduceType==="mean"?e=" bestValue = bestValue + candidate; ":this.reduceType==="prod"?(e=" bestValue = bestValue * candidate; ",t="1.0"):this.reduceType==="all"?(e=" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); ",t="1.0"):this.reduceType==="any"&&(e=" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); ",t="0.0");let o=this.reduceType==="mean"?"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));":"setOutputAtIndex(outputIndex, bestValue);";return` + fn DIV_CEIL(a : u32, b : u32) -> u32 { + return ((a - 1u) / b + 1u); + } + + ${` + var xBestValues : array; + `} + fn getOffset(outputIndex : i32) -> i32 { + let outputCoords = getCoordsFromIndex(outputIndex); + let offset = ${this.outputShape.length===1?"outputCoords":"outputCoords[0]"} * uniforms.reduceSize; + return offset; + } + ${se("index")} { + let outputIndex = index / i32(workgroupSizeX); + let offset = getOffset(outputIndex); + var bestValue = ${t}; + let Length = uniforms.reduceSize; + let WorkPerThread = DIV_CEIL(u32(Length), workgroupSizeX); + for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; + k = k + i32(workgroupSizeX)) { + let candidate = f32(x[offset + k]); + ${e} + } + xBestValues[localId.x] = bestValue; + workgroupBarrier(); + + var reduceSize = min(u32(Length), workgroupSizeX); + for (var currentSize = reduceSize / 2u; reduceSize > 1u; + currentSize = reduceSize / 2u) { + let interval = DIV_CEIL(reduceSize, 2u); + if (localId.x < currentSize) { + let candidate = xBestValues[localId.x + interval]; + ${e} + xBestValues[localId.x] = bestValue; + } + reduceSize = interval; + workgroupBarrier(); + } + + if (localId.x == 0u && outputIndex < uniforms.size) { + ${o} + } + } + `}};function qr(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=S.getAxesPermutation(p,s),c=r;u!=null&&(c=Nr({inputs:{x:r},attrs:{perm:u},backend:n}),p=S.getInnerMostAxes(p.length,s),a.push(c)),S.assertAxesAreInnerMostDims(o,p,s);let[l,m]=S.computeOutAndReduceShapes(c.shape,p),d=l;t&&(d=S.expandShapeToKeepDim(l,i));let f;if((o==="max"||o==="prod")&&n.shouldExecuteOnCPU([c])){let h=n.tensorMap.get(c.dataId).values;switch(o){case"max":let g=oM(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case"prod":let{outVals:x,outShape:b,outDtype:C}=pM(c.shape,c.dtype,h,p);f=n.makeTensorInfo(b,C,x);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=y.sizeFromShape(m),x=y.sizeFromShape(c.shape)/h,b={windowSize:h,inSize:h,batchSize:x,outSize:1},C=o==="mean"?"float32":ka(r.dtype),w=[{type:"int32",data:[h]}],k=new Mg(b,o),_=n.runWebGPUProgram(k,[c],C,w);a.push(_),f=de({inputs:{x:_},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function yre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,"all",t)}var TM={kernelName:Lo,backendName:"webgpu",kernelFunc:yre};function bre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,"any",t)}var _M={kernelName:Bo,backendName:"webgpu",kernelFunc:bre};var vc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=o==="min"?"<":">";let[s,a]=S.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=ue(this.outputShape),y.sizeFromShape(a)<32||y.sizeFromShape(s)>1e3?(this.type="plain",this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=re(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${$o(this.inputShape.length-1)}`,t=()=>{let o="";if(this.outputShape.length===1)this.inputShape.length!==1&&(o+="outputCoords,");else for(let n=0;n u32 { return ((a - 1u) / b + 1u); } ${` - var xBestIndices : array; - var xBestValues : array; + var xBestIndices : array; + var xBestValues : array; `} - ${ue("index")} { - let outputIndex = index / i32(workGroupSizeX); + ${se("index")} { + let outputIndex = index / i32(workgroupSizeX); let reduceLength = ${e()}; var bestIndex = i32(localId.x); var bestValue = uniforms.infinityValue; let outputCoords = getCoordsFromIndex(outputIndex); for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { + k = k + i32(workgroupSizeX)) { let candidate = getX(${t()} k); if (!isnan(candidate) && candidate ${this.op} bestValue) { bestValue = candidate; @@ -5848,7 +5997,7 @@ return a / b;`,X7=` xBestIndices[localId.x] = bestIndex; workgroupBarrier(); - var reduceSize = min(u32(reduceLength), workGroupSizeX); + var reduceSize = min(u32(reduceLength), workgroupSizeX); for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) { let interval = DIV_CEIL(reduceSize, 2u); @@ -5869,7 +6018,7 @@ return a / b;`,X7=` } } `:` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let outputCoords = getCoordsFromIndex(index); var bestIndex = 0; @@ -5885,41 +6034,8 @@ return a / b;`,X7=` setOutputAtIndexI32(index, bestIndex); } } - `}};var jg=class{constructor(e,t){this.variableNames=["A"],this.workGroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n tile : array, ${this.workGroupSize[0]}>; - ${Ri()} - fn _start(@builtin(local_invocation_id) localId : vec3, - @builtin(workgroup_id) workgroupId : vec3) { - var x = i32(workgroupId.x) * TILE_DIM + i32(localId.x); - var y = i32(workgroupId.y) * TILE_DIM + i32(localId.y); - let width = uniforms.outShape[0]; - let height = uniforms.outShape[1]; - if (x < width && y < height) { - tile[localId.y][localId.x] = A[y * width + x]; - } - workgroupBarrier(); - - x = i32(workgroupId.y) * TILE_DIM + i32(localId.x); - y = i32(workgroupId.x) * TILE_DIM + i32(localId.y); - if (x < height && y < width) { - setOutputAtIndex((y * height + x), tile[localId.x] - [localId.y]); - } - } - `}};var Xg=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;ot.disposeData(f.dataId)),m}var vL={kernelName:un,backendName:"webgpu",kernelFunc:Gre};function Hre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=x.parseAxisParam(s,n.shape),i=I.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=I.getInnerMostAxes(a.length,p.shape.length)),I.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=new Ac(p.shape,a[0],"min"),l=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],"int32",l);return u.forEach(f=>t.disposeData(f.dataId)),m}var kL={kernelName:ja,backendName:"webgpu",kernelFunc:Hre};var qre=it({opType:ye.ATAN2}),TL={kernelName:sa,backendName:"webgpu",kernelFunc:qre};var Jl=class{constructor(e,t){this.variableNames=["x"],this.uniforms="stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,",this.workGroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e="resultValue = max(value, resultValue);";this.poolType==="avg"&&(e="resultValue = resultValue + value; count = count + 1.0;");let t="resultValue";return this.poolType==="avg"&&(t="resultValue / count"),` - ${ue("index")} { + `}};function Cre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=new vc(p.shape,a[0],"max"),l=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var EM={kernelName:Vo,backendName:"webgpu",kernelFunc:Cre};function Sre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=S.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Nr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=S.getInnerMostAxes(a.length,p.shape.length)),S.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=new vc(p.shape,a[0],"min"),l=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var $M={kernelName:Za,backendName:"webgpu",kernelFunc:Sre};var wre=Se({opType:Q.ASIN}),AM={kernelName:ia,backendName:"webgpu",kernelFunc:wre};var Ire=Se({opType:Q.ASINH}),RM={kernelName:ua,backendName:"webgpu",kernelFunc:Ire};var vre=Se({opType:Q.ATAN}),FM={kernelName:pa,backendName:"webgpu",kernelFunc:vre};var kre=ot({opType:ye.ATAN2}),DM={kernelName:la,backendName:"webgpu",kernelFunc:kre};var Nre=Se({opType:Q.ATANH}),OM={kernelName:ca,backendName:"webgpu",kernelFunc:Nre};var Wl=class{constructor(e,t){this.variableNames=["x"],this.uniforms="stride : vec2, pad : vec2, dilation : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`pool2D_${t}`,this.poolType=t}getUserCode(){let e="resultValue = max(value, resultValue);";this.poolType==="avg"&&(e="resultValue = resultValue + value; count = count + 1.0;");let t="resultValue";return this.poolType==="avg"&&(t="resultValue / count"),` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -5951,8 +6067,8 @@ return a / b;`,X7=` setOutputAtIndex(index, ${t}); } } - `}};var Yg=class{constructor(e){this.variableNames=["x"],this.uniforms="stride : vec2,",this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` - ${ue("index")} { + `}};var Lg=class{constructor(e){this.variableNames=["x"],this.uniforms="stride : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -5966,56 +6082,8 @@ return a / b;`,X7=` setOutputAtIndex(index, value); } } - `}};var Qg=class{constructor(e,t){this.workGroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="reduceSize : i32,",this.size=!0,this.inputShape=[e.batchSize,e.inSize];let[o]=I.computeOutAndReduceShapes(this.inputShape,[1]);this.outputShape=o.length===0?[1]:o,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0";this.reduceType==="min"||this.reduceType==="max"?(e=` - if (isnan(candidate)) { - bestValue = uniforms.NAN; - } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) - { bestValue = candidate; }`,t="f32(x[offset])"):this.reduceType==="sum"||this.reduceType==="mean"?e=" bestValue = bestValue + candidate; ":this.reduceType==="prod"&&(e=" bestValue = bestValue * candidate; ",t="1.0");let o=this.reduceType==="mean"?"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));":"setOutputAtIndex(outputIndex, bestValue);";return` - fn DIV_CEIL(a : u32, b : u32) -> u32 { - return ((a - 1u) / b + 1u); - } - - ${` - var xBestValues : array; - `} - fn getOffset(outputIndex : i32) -> i32 { - let outputCoords = getCoordsFromIndex(outputIndex); - let offset = ${this.outputShape.length===1?"outputCoords":"outputCoords[0]"} * uniforms.reduceSize; - return offset; - } - ${ue("index")} { - let outputIndex = index / i32(workGroupSizeX); - let offset = getOffset(outputIndex); - var bestValue = ${t}; - let Length = uniforms.reduceSize; - let WorkPerThread = DIV_CEIL(u32(Length), workGroupSizeX); - for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size; - k = k + i32(workGroupSizeX)) { - let candidate = f32(x[offset + k]); - ${e} - } - xBestValues[localId.x] = bestValue; - workgroupBarrier(); - - var reduceSize = min(u32(Length), workGroupSizeX); - for (var currentSize = reduceSize / 2u; reduceSize > 1u; - currentSize = reduceSize / 2u) { - let interval = DIV_CEIL(reduceSize, 2u); - if (localId.x < currentSize) { - let candidate = xBestValues[localId.x + interval]; - ${e} - xBestValues[localId.x] = bestValue; - } - reduceSize = interval; - workgroupBarrier(); - } - - if (localId.x == 0u && outputIndex < uniforms.size) { - ${o} - } - } - `}};function Ys(r,e,t,o,n){let s=r.shape.length,a=[],i=x.parseAxisParam(e,r.shape),p=i,u=I.getAxesPermutation(p,s),c=r;u!=null&&(c=Nr({inputs:{x:r},attrs:{perm:u},backend:n}),p=I.getInnerMostAxes(p.length,s),a.push(c)),I.assertAxesAreInnerMostDims(o,p,s);let[l,m]=I.computeOutAndReduceShapes(c.shape,p),f=l;t&&(f=I.expandShapeToKeepDim(l,i));let d;if((o==="max"||o==="prod")&&n.shouldExecuteOnCPU([c])){let h=n.tensorMap.get(c.dataId).values;switch(o){case"max":let g=rL(h,x.sizeFromShape(m),f,r.dtype);d=n.makeTensorInfo(f,r.dtype,g);break;case"prod":let{outVals:y,outShape:b,outDtype:C}=uL(c.shape,c.dtype,h,p);d=n.makeTensorInfo(b,C,y);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=x.sizeFromShape(m),y=x.sizeFromShape(c.shape)/h,b={windowSize:h,inSize:h,batchSize:y,outSize:1},C=o==="mean"?"float32":Ca(r.dtype),w=[{type:"int32",data:[h]}],k=new Qg(b,o),_=n.runWebGPUProgram(k,[c],C,w);a.push(_),d=xe({inputs:{x:_},attrs:{shape:f},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),d}function em(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return Ys(n,s,a,"max",t)}var NL={kernelName:$n,backendName:"webgpu",kernelFunc:em};function DS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return Ys(n,a,s,"mean",t)}var _L={kernelName:An,backendName:"webgpu",kernelFunc:DS};function Zg(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&x.arraysEqual(e.inShape,e.outShape))return Lt({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type==="VALID"){let a=r.shape.length,i=xe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t==="avg"?p=DS({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(x.assert(t==="max",()=>`Invalid pool type ${t}`),p=em({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=xe({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new Yg(e):(t==="avg"?n=new Jl(e,"avg"):(x.assert(t==="max",()=>`Invalid pool type ${t}`),n=new Jl(e,"max")),s.push({type:"int32",data:[e.padInfo.top,e.padInfo.left]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]},{type:"int32",data:[e.inHeight,e.inWidth]},{type:"int32",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=I.computePool2DInfo(n.shape,s,a,u,i,p);return Zg(n,c,"avg",t)}var EL={kernelName:pn,backendName:"webgpu",kernelFunc:Kre};function jre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return _c({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var $L={kernelName:cn,backendName:"webgpu",kernelFunc:jre};var Jg=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${At(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=At(this.rank),t=Xre(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>"sourceLoc = uniforms.start + coords;"):o=this.outputShape.map((s,a)=>`sourceLoc.${PS[a]} = uniforms.start.${Yo(a)} + coords.${PS[a]};`),` - ${ue("index")} { + `}};function Ul(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return qr(n,s,a,"max",t)}var PM={kernelName:yn,backendName:"webgpu",kernelFunc:Ul};function uI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return qr(n,a,s,"mean",t)}var MM={kernelName:Sn,backendName:"webgpu",kernelFunc:uI};function Bg(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return Ft({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type==="VALID"){let a=r.shape.length,i=de({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t==="avg"?p=uI({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t==="max",()=>`Invalid pool type ${t}`),p=Ul({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=de({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new Lg(e):(t==="avg"?n=new Wl(e,"avg"):(y.assert(t==="max",()=>`Invalid pool type ${t}`),n=new Wl(e,"max")),s.push({type:"int32",data:[e.padInfo.top,e.padInfo.left]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]},{type:"int32",data:[e.inHeight,e.inWidth]},{type:"int32",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Tre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=S.computePool2DInfo(n.shape,s,a,u,i,p);return Bg(n,c,"avg",t)}var LM={kernelName:zo,backendName:"webgpu",kernelFunc:Tre};function _re(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Gu({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var BM={kernelName:Wo,backendName:"webgpu",kernelFunc:_re};var Vg=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Rt(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=Rt(this.rank),t=Ere(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>"sourceLoc = uniforms.start + coords;"):o=this.outputShape.map((s,a)=>`sourceLoc.${pI[a]} = uniforms.start.${$o(a)} + coords.${pI[a]};`),` + ${se("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; let coords = getCoordsFromIndex(index); @@ -6024,8 +6092,43 @@ return a / b;`,X7=` setOutputAtIndex(index, getSource(${t})); } } - `}},PS=["x","y","z","w","u","v"];function Xre(r){if(r===1)return"sourceLoc";if(r<=6)return PS.slice(0,r).map(e=>`sourceLoc.${e}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function ms(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=et.parseSliceParams(n,s,a);if(et.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.tensorMap.get(n.dataId),m=fL(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(x.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Jg(i,p),c=[{type:"int32",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var RL={kernelName:qn,backendName:"webgpu",kernelFunc:ms};var Yre=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;x.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=I.getReshaped(n.shape,s,i),u=I.getPermuted(p.length,s.length),c=I.getReshapedPermuted(n.shape,s,i),l=I.getSliceBeginCoords(a,s.length),m=I.getSliceSize(c,a,s.length),f=[],d=xe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Nr({inputs:{x:d},backend:t,attrs:{perm:u}}),g=xe({inputs:{x:h},backend:t,attrs:{shape:c}}),y=ms({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(b=>t.disposeData(b.dataId)),y},AL={kernelName:hs,backendName:"webgpu",kernelFunc:Yre};var OS=it({opType:ye.NOT_EQUAL,dtype:"bool",cpuKernelImpl:iL}),FL={kernelName:go,backendName:"webgpu",kernelFunc:OS};function Wa(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Lt({inputs:{x:n.complexTensorInfos.real},backend:t})}var DL={kernelName:la,backendName:"webgpu",kernelFunc:Wa};function PL(r,e){let t=new Zo(r.shape,pe.TO_INT),o=e.runWebGPUProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function MS(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Lt({inputs:{x:n},backend:t});let a=Wr(n.shape),i=MS({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=ls({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=Wa({inputs:{input:n},backend:t}),i=MS({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!x.hasEncodingLoss(n.dtype,s)){let a=Lt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=WM(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return PL(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",x.getTypedArrayFromDType("bool",1)),p=OS({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var OL={kernelName:to,backendName:"webgpu",kernelFunc:MS};var Qre=Ge({opType:pe.CEIL,cpuKernelImpl:UM}),ML={kernelName:ro,backendName:"webgpu",kernelFunc:Qre};var ex=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workGroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` - ${ue("index")} { + `}},pI=["x","y","z","w","u","v"];function Ere(r){if(r===1)return"sourceLoc";if(r<=6)return pI.slice(0,r).map(e=>`sourceLoc.${e}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function ds(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=ut.parseSliceParams(n,s,a);if(ut.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.tensorMap.get(n.dataId),m=fM(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Vg(i,p),c=[{type:"int32",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var VM={kernelName:_s,backendName:"webgpu",kernelFunc:ds};var $re=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=S.getReshaped(n.shape,s,i),u=S.getPermuted(p.length,s.length),c=S.getReshapedPermuted(n.shape,s,i),l=S.getSliceBeginCoords(a,s.length),m=S.getSliceSize(c,a,s.length),d=[],f=de({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Nr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=de({inputs:{x:h},backend:t,attrs:{shape:c}}),x=ds({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},zM={kernelName:xs,backendName:"webgpu",kernelFunc:$re};var Are=` + fn bincount_write(index: i32, value: f32) { + var oldValue = atomicLoad(& (result[index])); + var exchanged = false; + for (; !exchanged;) { + let newValueF32 = bitcast(oldValue) + value; + let newValue = bitcast(newValueF32); + let res = atomicCompareExchangeWeak( + &(result[index]), oldValue, newValue); + oldValue = res.old_value; + exchanged = res.exchanged; + } + } +`,Rre=` + fn bincount_write(index: i32, value: f32) { + result[index] = value; + } +`,kc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` + ${this.binaryOutput?Rre:Are} + ${se("index")} { + ${this.rank===1?`if (index < uniforms.xShape) { + let indexVal = i32(getX(index)); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput?1:this.hasWeights?"f32(getW(index))":"1."}; + bincount_write(indexVal, value); + } + }`:`let coord = getCoordsFromIndex(index); + if (coordsInBounds2D(coord, uniforms.xShape)) { + let indexVal = i32(getX(coord[0], coord[1])); + if (indexVal < uniforms.binCountSize) { + let value = ${this.binaryOutput?1:this.hasWeights?"f32(getW(coord[0], coord[1]))":"1."}; + bincount_write(coord.x * uniforms.binCountSize + indexVal, value); + } + }`} + } + `}};function Fre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=dr({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new kc([i],u),f=[{type:"int32",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var WM={kernelName:Ja,backendName:"webgpu",kernelFunc:Fre};var cI=ot({opType:ye.NOT_EQUAL,dtype:"bool",cpuKernelImpl:uM}),UM={kernelName:Nn,backendName:"webgpu",kernelFunc:cI};function qa(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:t})}var GM={kernelName:ai,backendName:"webgpu",kernelFunc:qa};function HM(r,e){let t=new Ro(r.shape,Q.TO_INT),o=e.runWebGPUProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function lI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Ft({inputs:{x:n},backend:t});let a=Vr(n.shape),i=lI({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=po({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=qa({inputs:{input:n},backend:t}),i=lI({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=U3(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return HM(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=cI({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var qM={kernelName:co,backendName:"webgpu",kernelFunc:lI};var Dre=Se({opType:Q.CEIL,cpuKernelImpl:G3}),KM={kernelName:Uo,backendName:"webgpu",kernelFunc:Dre};var zg=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.isVec4=!0,this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + ${se("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); var clampedValue : vec4; @@ -6040,8 +6143,8 @@ return a / b;`,X7=` setOutputAtIndex(index, clampedValue); } } - `}};var tx=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="clip"}getUserCode(){return` - ${ue("index")} { + `}};var Wg=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` + ${se("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); if (isnan(value)) { @@ -6051,8 +6154,8 @@ return a / b;`,X7=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function Zre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:"float32",data:[s]},{type:"float32",data:[a]}];return x.sizeFromShape(n.shape)%4===0?i=new ex(n.shape):i=new tx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var LL={kernelName:Ro,backendName:"webgpu",kernelFunc:Zre};var rx=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=I.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;s`T${o}`),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;sWa({inputs:{input:C},backend:t})),h=r.map(C=>qu({inputs:{input:C},backend:t})),g=Fc(d,e,t),y=Fc(h,e,t),b=ls({inputs:{real:g,imag:y},backend:t});return d.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(y.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(k=>{let E=[-1,x.sizeFromShape(k.shape.slice(e))];return xe({inputs:{x:k},backend:t,attrs:{shape:E}})}),h=d.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=I.computeOutShape(d.map(k=>k.shape),1),y=d[0].shape[0]===1,b=GM(h,g,o,y),C=I.computeOutShape(r.map(k=>k.shape),e),w=t.makeTensorInfo(C,o,b);return d.forEach(k=>t.disposeData(k.dataId)),w}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let d=[];for(let g=0;gd.shape),u=new rx(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:"int32",data:[l[0]]});for(let d=1;dt.disposeData(d.dataId));let f=xe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),f}function Jre(r,e,t){let o=I.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>xe({inputs:{x:s},backend:t,attrs:{shape:[x.sizeFromShape(s.shape.slice(0,e)),x.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function LS(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=x.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);I.assertParamsConsistent(a,s);let i=I.computeOutShape(e.map(u=>u.shape),s);if(x.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>x.sizeFromShape(u.shape)>0);return p.length===1?Lt({inputs:{x:p[0]},backend:t}):Fc(p,s,t)}var VL={kernelName:gs,backendName:"webgpu",kernelFunc:LS};function eoe(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=A=>{switch(A){case 1:return"resData = x[xIndex];";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${A} is not supported.`)}},l=A=>{switch(A){case 1:return"return W[row * uniforms.wShape[3] + colIn];";case 4:return"return W[row * uniforms.wShape[3] / 4 + colIn];";default:throw new Error(`innerElementSize ${A} is not supported.`)}},m=r?` + `}};function qu(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.imag},backend:t})}var XM={kernelName:si,backendName:"webgpu",kernelFunc:qu};function Nc(r,e,t){let o=r[0].dtype;if(o==="complex64"){let f=r.map(C=>qa({inputs:{input:C},backend:t})),h=r.map(C=>qu({inputs:{input:C},backend:t})),g=Nc(f,e,t),x=Nc(h,e,t),b=po({inputs:{real:g,imag:x},backend:t});return f.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let f=r.map(k=>{let $=[-1,y.sizeFromShape(k.shape.slice(e))];return de({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=S.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=H3(h,g,o,x),C=S.computeOutShape(r.map(k=>k.shape),e),w=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),w}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new Ug(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:"int32",data:[l[0]]});for(let f=1;ft.disposeData(f.dataId));let d=de({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Pre(r,e,t){let o=S.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>de({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function mI(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);S.assertParamsConsistent(a,s);let i=S.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:t}):Nc(p,s,t)}var YM={kernelName:ys,backendName:"webgpu",kernelFunc:mI};function Mre(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=R=>{switch(R){case 1:return"resData = x[xIndex];";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${R} is not supported.`)}},l=R=>{switch(R){case 1:return"return W[row * uniforms.wShape[3] + colIn];";case 4:return"return W[row * uniforms.wShape[3] / 4 + colIn];";default:throw new Error(`innerElementSize ${R} is not supported.`)}},m=r?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); - `,f=r?` + `,d=r?` let coords = vec4( batch, row / outWidth, @@ -6081,21 +6184,21 @@ return a / b;`,X7=` row, col / outWidth, col % outWidth); - `,d=r?"uniforms.xShape[1]":"uniforms.xShape[2]",h=r?"uniforms.xShape[2]":"uniforms.xShape[3]",g=r?"row":"col",y=r?"col":"row",b=` + `,f=r?"uniforms.xShape[1]":"uniforms.xShape[2]",h=r?"uniforms.xShape[2]":"uniforms.xShape[3]",g=r?"row":"col",x=r?"col":"row",b=` let inChannels = uniforms.wShape[2]; let outWidth = ${r?"uniforms.outShape[2]":"uniforms.outShape[3]"}; let outRow = ${g} / outWidth; let outCol = ${g} % outWidth; - let WRow = ${y} / (uniforms.filterDims[1] * inChannels); - let WCol = ${y} / inChannels % uniforms.filterDims[1]; + let WRow = ${x} / (uniforms.filterDims[1] * inChannels); + let WCol = ${x} / inChannels % uniforms.filterDims[1]; let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; - let xCh = ${y} % inChannels; - var resData = ${vt(i)}(0.0); + let xCh = ${x} % inChannels; + var resData = ${kt(i)}(0.0); // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. - if (xRow >= 0 && xRow < ${d} && xCol >= 0 && xCol < ${h}) { + if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) { ${m} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); ${c(i)} @@ -6107,20 +6210,20 @@ return a / b;`,X7=` if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${b} } - return ${vt(i)}(0.0);`:o&&t?` + return ${kt(i)}(0.0);`:o&&t?` let col = colIn * ${i}; ${b}`:` let col = colIn * ${i}; if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${b} } - return ${vt(i)}(0.0);`,w=`${l(p)}`,k=vt(u),_=r?vt(i):vt(p),E=r?vt(p):vt(i);return` + return ${kt(i)}(0.0);`,w=`${l(p)}`,k=kt(u),_=r?kt(i):kt(p),$=r?kt(p):kt(i);return` ${ur(s,a,u===4,4)} fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${_} { ${r?C:w} } - fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${E} { + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${$} { ${r?w:C} } @@ -6130,14 +6233,14 @@ return a / b;`,X7=` { var value = valueIn; let outWidth = ${r?"uniforms.outShape[2]":"uniforms.outShape[3]"}; - ${f} - ${Kr(n,s)} + ${d} + ${Hr(n,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var ox=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workGroupSize=Hl(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ql(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=["f32","vec4"]):(this.innerElementSize=4,this.variableTypes=["vec4","vec4"]),s&&(this.variableNames.push("bias"),this.variableTypes.push("vec4")),i&&(this.variableNames.push("preluActivationWeights"),this.variableTypes.push("vec4"))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workGroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workGroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workGroupSize[0]*this.innerElementSize,this.workGroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Uu(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner):Gu(this.elementsPerThread,this.workGroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` - ${eoe(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var Gg=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pad : vec2, stride : vec2, dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=Ml(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=Ll(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableTypes=["f32","vec4"]):(this.innerElementSize=4,this.variableTypes=["vec4","vec4"]),s&&(this.variableNames.push("bias"),this.variableTypes.push("vec4")),i&&(this.variableNames.push("preluActivationWeights"),this.variableTypes.push("vec4"))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Wu(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Uu(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${Mre(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}};var nx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,",this.workGroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` + `}};var Hg=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pad: vec2, stride: vec2, dilation: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` ${ur(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); @@ -6159,11 +6262,11 @@ return a / b;`,X7=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${Kr(this.addBias,this.activation)} + ${Hr(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } - ${ue("index")} { + ${se("index")} { let coords = getOutputCoords(); let batch = coords[0]; let outChannel = ${this.isChannelsLast?"coords[3];":"coords[1];"} @@ -6183,7 +6286,31 @@ return a / b;`,X7=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}};function zL(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function toe({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat==="channelsLast",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=[],f,d;if(l){let y=t.inHeight*t.inWidth*t.inChannels;f=xe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,y]}}),d=xe({inputs:{x:e},backend:o,attrs:{shape:[1,y,t.outChannels]}})}else f=xe({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),d=xe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(f),m.push(d),s!=null){let y=zL(s.shape,p);y!=null&&(s=xe({inputs:{x:s},backend:o,attrs:{shape:y}}),m.push(s))}if(n!=null){let y=zL(n.shape,p);y!=null&&(n=xe({inputs:{x:n},backend:o,attrs:{shape:y}}),m.push(n))}let h=_c({a:p?f:d,b:p?d:f,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=xe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let y of m)o.disposeData(y.dataId);return g}function sx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat==="channelsLast",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=P().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type==="SAME"||t.padInfo.type==="VALID")))return toe({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let f,d=[t.padInfo.top,t.padInfo.left],h=[{type:"int32",data:[t.filterHeight,t.filterWidth]},{type:"int32",data:[...d]},{type:"int32",data:[t.strideHeight,t.strideWidth]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]}];if(m)f=new nx(t,p,i,u);else{let C=c?t.outHeight*t.outWidth:t.outChannels,w=c?t.outChannels:t.outHeight*t.outWidth,k=t.filterHeight*t.filterWidth*t.inChannels;h.push({type:"int32",data:[C]},{type:"int32",data:[w]},{type:"int32",data:[k]});let _=o.adapterInfo.isIntel();f=new ox(t,C,w,k,p,i,u,_)}let g=[],y=[r,e];p&&(!c&&n.shape.length===1&&(n=xe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),g.push(n)),y.push(n)),u&&(!c&&s.shape.length===1&&(s=xe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),g.push(s)),y.push(s)),i==="leakyrelu"&&(h.push({type:"float32",data:[a]}),f.uniforms+=" alpha : f32,");let b=o.runWebGPUProgram(f,y,r.dtype,h);for(let C of g)o.disposeData(C.dataId);return b}function roe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=I.convertConv2DDataFormat(p),m=I.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return sx({x:n,filter:s,convInfo:m,backend:o})}var WL={kernelName:ln,backendName:"webgpu",kernelFunc:roe};function ooe(r=4){let e=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};var qg=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pad : vec2, stride : vec2, dilation : vec2, outWidth : i32, itemsPerBlockRow : i32, + inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?"coords[1]":"coords[2]",n=this.isChannelsLast?"coords[2]":"coords[1]",s=this.isChannelsLast?"getX(batch, xRow, xCol, ch)":"getX(batch, ch, xRow, xCol)";return` + ${se("index")} { + let coords = getCoordsFromIndex(index); + if(index < uniforms.size) { + let batch = coords[0]; + let row = ${o}; + let col = ${n}; + let offsetY = (row / uniforms.outWidth) * uniforms.stride[0] - uniforms.pad[0]; + let xRow = offsetY + uniforms.dilation[0] * (col / uniforms.itemsPerBlockRow); + var value = 0.0; + if(xRow < uniforms.xShape[${e}] && xRow >= 0) { + let offsetX = (row % uniforms.outWidth) * uniforms.stride[1] - + uniforms.pad[1]; + let xCol = offsetX + uniforms.dilation[1] * ((col % + uniforms.itemsPerBlockRow) / uniforms.inChannels); + let ch = col % uniforms.inChannels; + if(xCol < uniforms.xShape[${t}] && xCol >= 0) { + value = ${s}; + } + } + setOutputAtIndex(index, value); + } + } + `}};function Kg(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Lre({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat==="channelsLast",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=[],d,f;if(l){let x=t.inHeight*t.inWidth*t.inChannels;d=de({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=de({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=de({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=de({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=Kg(s.shape,p);x!=null&&(s=de({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=Kg(n.shape,p);x!=null&&(n=de({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=Gu({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=de({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Bre({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,strideWidth:l,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,C=b==="channelsLast",w=p*u*c,k=h*f,_=C?[t.batchSize,k,w]:[t.batchSize,w,k],$=new qg(_,C),A=[{type:"int32",data:[d.top,d.left]},{type:"int32",data:[m,l]},{type:"int32",data:[x,g]},{type:"int32",data:[f]},{type:"int32",data:[c*p]},{type:"int32",data:[c]}],R=o.runWebGPUProgram($,[r],r.dtype,A),D=[];D.push(R);let P=de({inputs:{x:e},backend:o,attrs:{shape:[1,w,-1]}});if(D.push(P),s!=null){let U=Kg(s.shape,C);U!=null&&(s=de({inputs:{x:s},backend:o,attrs:{shape:U}}),D.push(s))}if(n!=null){let U=Kg(n.shape,C);U!=null&&(n=de({inputs:{x:n},backend:o,attrs:{shape:U}}),D.push(n))}let W=Gu({a:C?R:P,b:C?P:R,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),V=de({inputs:{x:W},backend:o,attrs:{shape:t.outShape}});D.push(W);for(let U of D)o.disposeData(U.dataId);return V}function jg({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat==="channelsLast",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=O().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type==="SAME"||t.padInfo.type==="VALID")))return Lre({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=O().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),f=d>0?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(O().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||h<=f)return Bre({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:"int32",data:[t.filterHeight,t.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[t.strideHeight,t.strideWidth]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new Hg(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,A=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:"int32",data:[_]},{type:"int32",data:[$]},{type:"int32",data:[A]});let R=o.adapterInfo.isIntel();g=new Gg(t,_,$,A,p,i,u,R)}let C=[],w=[r,e];p&&(!c&&n.shape.length===1&&(n=de({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),w.push(n)),u&&(!c&&s.shape.length===1&&(s=de({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),w.push(s)),i==="leakyrelu"&&(b.push({type:"float32",data:[a]}),g.uniforms+=" alpha : f32,");let k=o.runWebGPUProgram(g,w,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function Vre(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=S.convertConv2DDataFormat(p),m=S.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return jg({x:n,filter:s,convInfo:m,backend:o})}var QM={kernelName:Go,backendName:"webgpu",kernelFunc:Vre};function zre(r=4){let e=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` let coord1 = vec4(coordX, coordY, col + 1, rowInner); let coord2 = vec4(coordX, coordY, col + 2, rowInner); let coord3 = vec4(coordX, coordY, col + 3, rowInner); @@ -6202,10 +6329,10 @@ return a / b;`,X7=` let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.stride[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.stride[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } let coord = vec4( batch, @@ -6214,13 +6341,13 @@ return a / b;`,X7=` col % uniforms.outBackprop[3]); return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`} } - return ${vt(r)}(0.0);`;return` - fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${vt(r)} { + return ${kt(r)}(0.0);`;return` + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${kt(r)} { let col = colIn * ${r}; ${o} } - fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${vt(r)} { + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${kt(r)} { let col = colIn * ${r}; let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); @@ -6232,10 +6359,10 @@ return a / b;`,X7=` let coord = vec4(coordX, coordY, col, rowInner); ${e(r)} } - return ${vt(r)}(0.0); + return ${kt(r)}(0.0); } - fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${vt(r)}) { + fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${kt(r)}) { let col = colIn * ${r}; if (row < uniforms.dimAOuter && (col + ${r-1}) < uniforms.dimBOuter) { var value = valueInput; @@ -6246,11 +6373,11 @@ return a / b;`,X7=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value; } - }`}var ax=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,x.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workGroupSize=Hl(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ql(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=["vec4","f32"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Uu(this.elementsPerThread,this.workGroupSize):Gu(this.elementsPerThread,this.workGroupSize);return` - ${ooe(this.isVec4?4:1)} + }`}var Xg=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=Ml(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=Ll(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.variableTypes=["vec4","f32"]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Wu(this.elementsPerThread,this.workgroupSize):Uu(this.elementsPerThread,this.workgroupSize);return` + ${zre(this.isVec4?4:1)} ${e} - `}};var ix=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1;return` - ${ue("index")} { + `}};var Yg=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, stride : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerInput_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1;return` + ${se("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let batch = coords[0]; @@ -6298,8 +6425,8 @@ return a / b;`,X7=` setOutputAtIndex(index, dotProd); } } - `}};function noe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(u),m=I.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),f=[{type:"int32",data:[m.filterHeight,m.filterWidth]},{type:"int32",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],d;if(P().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||m.filterHeight<=2&&m.filterWidth<=2&&m.outChannels<=16&&m.inChannels===1)d=new ix(m);else{d=new ax(m);let h=m.inHeight*m.inWidth,g=m.inChannels,y=m.filterHeight*m.filterWidth*m.outChannels;f.push({type:"uint32",data:[h]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return t.runWebGPUProgram(d,[n,s],"float32",f)}var UL={kernelName:mn,backendName:"webgpu",kernelFunc:noe};var soe=Ge({opType:pe.COS}),GL={kernelName:fn,backendName:"webgpu",kernelFunc:soe};var aoe=Ge({opType:pe.COSH}),HL={kernelName:dn,backendName:"webgpu",kernelFunc:aoe};var ux=class{constructor(e,t,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workGroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` - ${ue("index")} { + `}};function Wre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=[{type:"int32",data:[m.filterHeight,m.filterWidth]},{type:"int32",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(O().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||m.filterHeight<=2&&m.filterWidth<=2&&m.outChannels<=16&&m.inChannels===1)f=new Yg(m);else{f=new Xg(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:"uint32",data:[h]},{type:"uint32",data:[g]},{type:"uint32",data:[x]})}return t.runWebGPUProgram(f,[n,s],"float32",d)}var ZM={kernelName:Ho,backendName:"webgpu",kernelFunc:Wre};var Ure=Se({opType:Q.COS}),JM={kernelName:qo,backendName:"webgpu",kernelFunc:Ure};var Gre=Se({opType:Q.COSH}),eL={kernelName:Ko,backendName:"webgpu",kernelFunc:Gre};var Qg=class{constructor(e,t,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let height_ratio = f32(${o}); @@ -6354,24 +6481,24 @@ return a / b;`,X7=` } } } - `}};var ioe=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new ux(n.shape[3],s.shape,i,p),l=[{type:"float32",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],"float32",l)},qL={kernelName:xn,backendName:"webgpu",kernelFunc:ioe};var Ku;(function(r){r.Prod="*",r.Sum="+"})(Ku||(Ku={}));var tm=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0;let s=128;this.workGroupSize=[s,1,1],this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Ku.Prod?"1.0":"0.0",o=this.exclusive?t:`getX(${KL(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],s="",a="";return this.exclusive?(s=this.reverse?`end != ${n-1}`:"end != 0",a=this.reverse?"end + 1":"end - 1"):(s=this.reverse?`end + pow2 < ${n}`:"end >= pow2",a=this.reverse?"end + pow2":"end - pow2"),` - ${ue("index")} { + `}};var Hre=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Qg(n.shape[3],s.shape,i,p),l=[{type:"float32",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],"float32",l)},tL={kernelName:Yo,backendName:"webgpu",kernelFunc:Hre};var Ku;(function(r){r.Prod="*",r.Sum="+"})(Ku||(Ku={}));var Gl=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Ku.Prod?"1.0":"0.0",o=this.exclusive?t:`getX(${rL(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],s="",a="";return this.exclusive?(s=this.reverse?`end != ${n-1}`:"end != 0",a=this.reverse?"end + 1":"end - 1"):(s=this.reverse?`end + pow2 < ${n}`:"end >= pow2",a=this.reverse?"end + pow2":"end - pow2"),` + ${se("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${jL(e,"coords",this.op)}; + let end = ${oL(e,"coords",this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${jL(e,"coords",this.op)} = idx; - val ${this.op}= getX(${KL(e,"coords",this.op)}); + ${oL(e,"coords",this.op)} = idx; + val ${this.op}= getX(${rL(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function KL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function jL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function px(r,e,t,o,n,s){let a=e.shape.length,i=I.getAxesPermutation([o],a),p=e;i!=null&&(p=Nr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=I.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Lt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new tm(r,p.shape,!1,s),d=l,h=[{type:"float32",data:[m]}];l=t.runWebGPUProgram(f,[l],l.dtype,h),t.disposeData(d.dataId)}if(n){let m=new tm(r,p.shape,n,s),f=l,d=[{type:"float32",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,d),t.disposeData(f.dataId)}if(i!=null){let m=I.getUndoAxesPermutation(i),f=Nr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),f}return l}function uoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return px(Ku.Prod,n,t,s,a,i)}var XL={kernelName:hn,backendName:"webgpu",kernelFunc:uoe};function poe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return px(Ku.Sum,n,t,s,a,i)}var YL={kernelName:gn,backendName:"webgpu",kernelFunc:poe};var cx=class{constructor(e,t){this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` - ${ue("index")} { + `}};function rL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function oL(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function Zg(r,e,t,o,n,s){let a=e.shape.length,i=S.getAxesPermutation([o],a),p=e;i!=null&&(p=Nr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=S.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Ft({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new Gl(r,p.shape,!1,s),f=l,h=[{type:"float32",data:[m]}];l=t.runWebGPUProgram(d,[l],l.dtype,h),t.disposeData(f.dataId)}if(n){let m=new Gl(r,p.shape,n,s),d=l,f=[{type:"float32",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=S.getUndoAxesPermutation(i),d=Nr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function qre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Zg(Ku.Prod,n,t,s,a,i)}var nL={kernelName:jo,backendName:"webgpu",kernelFunc:qre};function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Zg(Ku.Sum,n,t,s,a,i)}var sL={kernelName:Xo,backendName:"webgpu",kernelFunc:Kre};function jre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,c=y.sizeFromShape(s.shape)>0,l=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=dr({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new kc(m,c,i),g=[{type:"int32",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var aL={kernelName:ti,backendName:"webgpu",kernelFunc:jre};var Jg=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6390,7 +6517,7 @@ return a / b;`,X7=` let rlt = ${this.getInputSamplingString()}; setOutputAtIndex(index, rlt); } - }`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function coe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,f=c/(s*s),d=a==="NHWC"?[i,l,m,f]:[i,f,l,m],h=[{type:"int32",data:[s]}],g=new cx(d,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var QL={kernelName:yn,backendName:"webgpu",kernelFunc:coe};var lx=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workGroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),n&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workGroupSize[0]*this.workGroupSize[1]*this.workGroupSize[2],o=this.workGroupSize[1]+this.filterHeight-1,n=this.workGroupSize[0]+this.filterWidth-1;return` + }`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Xre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=[{type:"int32",data:[s]}],g=new Jg(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var iL={kernelName:Qo,backendName:"webgpu",kernelFunc:Xre};var ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` ${ur(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${o}>; @@ -6404,15 +6531,7 @@ return a / b;`,X7=` return value; } - ${Ri()} - fn _start(@builtin(local_invocation_id) LocalId : vec3, - @builtin(global_invocation_id) GlobalId : vec3, - @builtin(local_invocation_index) LocalIndex: u32, - @builtin(num_workgroups) NumWorkgroups: vec3) { - localId = LocalId; - globalId = GlobalId; - let localIndex = i32(LocalIndex); - numWorkgroups = NumWorkgroups; + ${se()} { let coords = getOutputCoords(); let batch = coords[0]; let xRCCorner = vec2(coords.zw) - uniforms.pad; @@ -6427,8 +6546,8 @@ return a / b;`,X7=` let localCol = i32(localId.x); // Load one tile of X into local memory. - for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workGroupSize[1]}) { - for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workGroupSize[0]}) { + for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workgroupSize[1]}) { + for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) { let rowOffset = inputRow - localRow; let colOffset = inputCol - localCol; mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset); @@ -6436,7 +6555,7 @@ return a / b;`,X7=` } // Load one tile of W into local memory. - var wIndex = localIndex; + var wIndex = i32(localIndex); ${e, inDims : vec2,",this.workGroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[4,this.workPerThread,1]),x.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return` + `}};var Tc=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="pad : vec2, inDims : vec2,",this.workgroupSize=[4,4,4],this.workPerThread=4,this.isVec4=!0,this.outputShape=e.outShape,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1]),y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth;return` ${ur(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); @@ -6472,8 +6591,7 @@ return a / b;`,X7=` const strideHeight = ${this.convInfo.strideHeight}; const strideWidth = ${this.convInfo.strideWidth}; - ${Ri()} - fn _start(@builtin(global_invocation_id) globalId: vec3) { + ${se()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; let c = i32(globalId.y) * ${this.workPerThread}; @@ -6508,80 +6626,113 @@ return a / b;`,X7=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${Kr(this.addBias,this.activation)} + ${Hr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}};var Pc=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32, - filterWidth : i32, stride : vec2, dilation : vec2,`,this.workGroupSize=[256,1,1],this.outputShape=e.outShape,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` + `}};var _c=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pad : vec2, inDims : vec2, filterHeight : i32, + filterWidth : i32, stride : vec2, dilation : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` ${ur(this.activation,this.hasPreluActivation,!1,4)} - ${ue()} { - let coords = getOutputCoords(); - let batch = coords[0]; - let xRCCorner = vec2(coords.${this.isChannelsLast?"yz":"zw"}) * uniforms.stride - uniforms.pad; - let d2 = coords[${this.isChannelsLast?3:1}]; - let channelMul = uniforms.wShape[3]; - let d1 = d2 / channelMul; - let q = d2 % channelMul; + ${se("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + let batch = coords[0]; + let xRCCorner = vec2(coords.${this.isChannelsLast?"yz":"zw"}) * uniforms.stride - uniforms.pad; + let d2 = coords[${this.isChannelsLast?3:1}]; + let channelMul = uniforms.wShape[3]; + let d1 = d2 / channelMul; + let q = d2 % channelMul; - let inputRowStart = xRCCorner.x; - let inputColStart = xRCCorner.y; - let inputRowEnd = inputRowStart + uniforms.filterHeight * - uniforms.dilation[0]; - let inputColEnd = inputColStart + uniforms.filterWidth * - uniforms.dilation[1]; + let inputRowStart = xRCCorner.x; + let inputColStart = xRCCorner.y; + let inputRowEnd = inputRowStart + uniforms.filterHeight * + uniforms.dilation[0]; + let inputColEnd = inputColStart + uniforms.filterWidth * + uniforms.dilation[1]; - // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get - // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all - // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. - // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. - var value = 0.0; + // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get + // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all + // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC. + // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW. + var value = 0.0; - // Extract if checking out of for loop for performance. - if (inputRowStart >= 0 && inputColStart >= 0 && - inputRowEnd < uniforms.inDims[0] && - inputColEnd < uniforms.inDims[1]) { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + // Extract if checking out of for loop for performance. + if (inputRowStart >= 0 && inputColStart >= 0 && + inputRowEnd < uniforms.inDims[0] && + inputColEnd < uniforms.inDims[1]) { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } - } - } else { - for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { - let xR = inputRowStart + wR * uniforms.dilation[0]; + } else { + for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) { + let xR = inputRowStart + wR * uniforms.dilation[0]; - if (xR < 0 || xR >= uniforms.inDims[0]) { - continue; - } - - for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { - let xC = inputColStart + wC * uniforms.dilation[1]; - - if (xC < 0 || xC >= uniforms.inDims[1]) { + if (xR < 0 || xR >= uniforms.inDims[0]) { continue; } - let xVal = ${e}; - let wVal = getW(wR, wC, d1, q); - value = value + xVal * wVal; + for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) { + let xC = inputColStart + wC * uniforms.dilation[1]; + + if (xC < 0 || xC >= uniforms.inDims[1]) { + continue; + } + + let xVal = ${e}; + let wVal = getW(wR, wC, d1, q); + value = value + xVal * wVal; + } } } - } - ${Kr(this.addBias,this.activation)} - if (coordsInBounds4D(coords, uniforms.outShape)) { + ${Hr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function loe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=I.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let f=I.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),d=[{type:"int32",data:[f.padInfo.top,f.padInfo.left]},{type:"int32",data:[f.inHeight,f.inWidth]}],h=f.dataFormat==="channelsLast",g;return!h&&f.inHeight>16&&f.inWidth>16&&f.strideHeight===1&&f.strideWidth===1&&f.dilationWidth===1&&f.dilationHeight===1&&f.inChannels===f.outChannels?g=new lx(f.outShape,f.filterHeight,f.filterWidth):h&&f.inHeight>4&&f.inWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?g=new Dc(f):(g=new Pc(f),d.push({type:"int32",data:[f.filterHeight]},{type:"int32",data:[f.filterWidth]},{type:"int32",data:[f.strideHeight,f.strideWidth]},{type:"int32",data:[f.dilationHeight,f.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,d)}var ZL={kernelName:bn,backendName:"webgpu",kernelFunc:loe};var BS=it({opType:ye.MUL,cpuKernelImpl:sL,supportsComplex:!0}),JL={kernelName:ho,backendName:"webgpu",kernelFunc:BS};function rm(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,"sum",t)}var eB={kernelName:jn,backendName:"webgpu",kernelFunc:rm};function moe(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=I.decodeEinsumEquation(n,s.length);I.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=I.getEinsumComputePath(i,p),l=c.length,m=null,f=a.length,d=[];for(let h=0;h=0&&(m=rm({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&t.disposeData(h.dataId);return m}var tB={kernelName:Xa,backendName:"webgpu",kernelFunc:moe};var foe=Ge({opType:pe.ELU}),rB={kernelName:In,backendName:"webgpu",kernelFunc:foe};var doe=it({opType:ye.EQUAL,dtype:"bool",cpuKernelImpl:HM}),oB={kernelName:oo,backendName:"webgpu",kernelFunc:doe};var VS=Ge({opType:pe.EXP,cpuKernelImpl:qM,dtype:"float32"}),nB={kernelName:no,backendName:"webgpu",kernelFunc:VS};function mx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(x.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),xe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sB={kernelName:xs,backendName:"webgpu",kernelFunc:mx};var hoe=Ge({opType:pe.EXPM1,cpuKernelImpl:KM}),aB={kernelName:wn,backendName:"webgpu",kernelFunc:hoe};var fx=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` - ${ue("index")} { + `}};function Yre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=S.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=S.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),f=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inHeight,d.inWidth]}],h=d.dataFormat==="channelsLast",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new ex(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?g=new Tc(d):(g=new _c(d),f.push({type:"int32",data:[d.filterHeight]},{type:"int32",data:[d.filterWidth]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var uL={kernelName:Zo,backendName:"webgpu",kernelFunc:Yre};var dI=ot({opType:ye.MUL,cpuKernelImpl:aM,supportsComplex:!0}),pL={kernelName:kn,backendName:"webgpu",kernelFunc:dI};function Hl(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,"sum",t)}var cL={kernelName:Hn,backendName:"webgpu",kernelFunc:Hl};function Qre(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=S.decodeEinsumEquation(n,s.length);S.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=S.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Hl({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var lL={kernelName:ri,backendName:"webgpu",kernelFunc:Qre};var Zre=Se({opType:Q.ELU}),mL={kernelName:en,backendName:"webgpu",kernelFunc:Zre};var Jre=ot({opType:ye.EQUAL,dtype:"bool",cpuKernelImpl:q3}),dL={kernelName:tn,backendName:"webgpu",kernelFunc:Jre};var eoe=Se({opType:Q.ERF}),fL={kernelName:ma,backendName:"webgpu",kernelFunc:eoe};var fI=Se({opType:Q.EXP,cpuKernelImpl:K3,dtype:"float32"}),hL={kernelName:rn,backendName:"webgpu",kernelFunc:fI};function tx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),de({inputs:{x:s},backend:o,attrs:{shape:i}})}var gL={kernelName:bs,backendName:"webgpu",kernelFunc:tx};var toe=Se({opType:Q.EXPM1,cpuKernelImpl:j3}),xL={kernelName:da,backendName:"webgpu",kernelFunc:toe};var ql=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` + fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 { + ${this.component==="real"?"return real * expR - imag * expI;":"return real * expI + imag * expR;"} + } + + fn mulMatDFT(batch: i32, index: i32) -> f32 { + let indexRatio = f32(index) / f32(uniforms.realShape[1]); + let exponentMultiplierTimesIndexRatio = + uniforms.exponentMultiplier * indexRatio; + + var result = 0.0; + + for (var i = 0; i < uniforms.realShape[1]; i = i + 1) { + // x = (-2|2 * PI / N) * index * i; + let x = exponentMultiplierTimesIndexRatio * f32(i); + let expR = cos(x); + let expI = sin(x); + let real = getReal(batch, i); + let imag = getImag(batch, i); + + result = result + + unaryOpComplex(real, expR, imag, expI) / uniforms.denominator; + } + + return result; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getOutputCoords(); + setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); + } + } + `}};function rx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=de({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ql("real",u),l=new ql("imag",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:"float32",data:[d]},{type:"float32",data:[f]}],g=t.runWebGPUProgram(c,m,"float32",h);i.push(g);let x=t.runWebGPUProgram(l,m,"float32",h);i.push(x);let b=po({inputs:{real:g,imag:x},backend:t});i.push(b);let C=de({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(w=>t.disposeData(w.dataId)),C}function roe(r){let{inputs:e,backend:t}=r,{input:o}=e;return rx(o,!1,t)}var yL={kernelName:oi,backendName:"webgpu",kernelFunc:roe};var ox=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordX = uniforms.xShape[2] - coords[2] - 1; @@ -6589,9 +6740,9 @@ return a / b;`,X7=` setOutputAtIndex(index, outputValue); } } - `}};var iB={kernelName:Sn,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new fx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var goe=Ge({opType:pe.FLOOR,cpuKernelImpl:jM}),uB={kernelName:so,backendName:"webgpu",kernelFunc:goe};var xoe=it({opType:ye.INT_DIV,dtype:"int32"}),pB={kernelName:vn,backendName:"webgpu",kernelFunc:xoe};var dx=class{constructor(e,t,o=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workGroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` + `}};var bL={kernelName:on,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new ox(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ooe=Se({opType:Q.FLOOR,cpuKernelImpl:X3}),CL={kernelName:nn,backendName:"webgpu",kernelFunc:ooe};var noe=ot({opType:ye.INT_DIV,dtype:"int32"}),SL={kernelName:sn,backendName:"webgpu",kernelFunc:noe};var nx=class{constructor(e,t,o=!1){this.isFromPixels=!0,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` @binding(1) @group(0) var src: ${this.importVideo?"texture_external":"texture_2d"}; - ${ue("index")} { + ${se("index")} { let flatIndex = index * uniforms.numChannels; if (flatIndex < uniforms.size) { let coords = getCoordsFromIndex(flatIndex); @@ -6601,8 +6752,8 @@ return a / b;`,X7=` } } } - `}};var cB={kernelName:Zi,backendName:"webgpu",kernelFunc:yoe},Oc,zS=P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"),hx=new Map;function yoe(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!="undefined"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],f=!1,d=a||i;if(u||p||d){let b;if(f){let D=n;if(!hx.has(D)||hx.get(D).expired){let O={source:D};hx.set(D,t.device.importExternalTexture(O))}b={width:c,height:l,format:null,usage:null,texture:hx.get(D)}}else{if(d){let L=P().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Oc==null||L!==zS)&&(zS=L,Oc=document.createElement("canvas").getContext("2d",{willReadFrequently:zS})),Oc.canvas.width=c,Oc.canvas.height=l,Oc.drawImage(n,0,0,c,l),n=Oc.canvas}let D=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,O="rgba8unorm",M=t.textureManager.acquireTexture(m[1],m[0],O,D);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b={width:c,height:l,format:O,usage:D,texture:M}}let C=x.sizeFromShape(m),w=x.computeStrides(m),k=new dx(m,s,f),_=[{type:"uint32",data:[C]},{type:"uint32",data:[s]},{type:"uint32",data:[...w]}],E=t.makeTensorInfo([l,c],"int32"),R=t.tensorMap.get(E.dataId);R.resourceInfo=b;let A=t.runWebGPUProgram(k,[E],"int32",_);return t.disposeData(E.dataId),A}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,C=0;for(let w=0;w(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } } - `}};var lB={kernelName:kn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let f=new gx(o.shape,a.shape,i.shape,l,m),d=[{type:"float32",data:[p]}];return u.runWebGPUProgram(f,c,o.dtype,d)}};function boe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=o,h=I.convertConv2DDataFormat(c),g=I.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return sx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:d,activation:f})}var mB={kernelName:Do,backendName:"webgpu",kernelFunc:boe};function Coe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:f}=o,d=c;d==null&&(d=[1,1]),x.assert(I.eitherStridesOrDilationsAreOne(p,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${d}'`);let h=I.computeConv2DInfo(n.shape,s.shape,p,d,u,l,!0),g=[n,s],y=a!=null,b=i!=null;y&&g.push(a),b&&g.push(i);let C=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],w;return h.inHeight>4&&h.inWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?w=new Dc(h,y,m,b):(w=new Pc(h,y,m,b),C.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),m==="leakyrelu"&&(C.push({type:"float32",data:[f]}),w.uniforms+=" alpha : f32,"),t.runWebGPUProgram(w,g,"float32",C)}var fB={kernelName:Po,backendName:"webgpu",kernelFunc:Coe};var xx=class{constructor(e,t){this.variableNames=["A","indices"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${At(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` - ${ue("index")} { + `}};var IL={kernelName:an,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let d=new ax(o.shape,a.shape,i.shape,l,m),f=[{type:"float32",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function aoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=S.convertConv2DDataFormat(c),g=S.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return jg({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var vL={kernelName:ho,backendName:"webgpu",kernelFunc:aoe};function ioe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=c;f==null&&(f=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=S.computeConv2DInfo(n.shape,s.shape,p,f,u,l,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let C=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],w;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?w=new Tc(h,x,m,b):(w=new _c(h,x,m,b),C.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),m==="leakyrelu"&&(C.push({type:"float32",data:[d]}),w.uniforms+=" alpha : f32,"),t.runWebGPUProgram(w,g,"float32",C)}var kL={kernelName:go,backendName:"webgpu",kernelFunc:ioe};var ix=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Rt(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var flattenIndex = 0; @@ -6628,8 +6779,8 @@ return a / b;`,X7=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function Ioe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=x.sizeFromShape(o.shape),[p,u,c,l]=I.prepareAndValidate(o,n),m=xe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),f=xe({inputs:{x:o},backend:t,attrs:{shape:[x.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=t.readSync(n.dataId),C=t.bufferSync(o),w=XM(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,w.values)}let d=new xx(a,[u,c]),h=[{type:"int32",data:[a]},{type:"int32",data:l}],g=t.runWebGPUProgram(d,[f,m],f.dtype,h),y=xe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(f.dataId),t.disposeData(g.dataId),y}var dB={kernelName:Tn,backendName:"webgpu",kernelFunc:Ioe};var yx=class{constructor(e,t){this.variableNames=["A","indices"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="gather"}getUserCode(){let e=woe(this.aShape);return` - ${ue("index")} { + `}};function uoe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=S.prepareAndValidate(o,n),m=de({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=de({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=t.readSync(n.dataId),C=t.bufferSync(o),w=Y3(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,w.values)}let f=new ix(a,[u,c]),h=[{type:"int32",data:[a]},{type:"int32",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=de({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var NL={kernelName:un,backendName:"webgpu",kernelFunc:uoe};var ux=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=poe(this.aShape);return` + ${se("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); let indexZ = i32(getIndices(resRC.x, resRC.z)); @@ -6637,8 +6788,8 @@ return a / b;`,X7=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function woe(r){let e=["resRC.x","resRC.y","resRC.z","resRC.w"],t=[];for(let o=0;ot.disposeData(A.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new yx(m.shape,d),g=t.runWebGPUProgram(h,[m,f],m.dtype);l.push(g);let y=xe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),y}var hB={kernelName:bs,backendName:"webgpu",kernelFunc:WS};var Soe=it({opType:ye.GREATER,cpuKernelImpl:ZM,dtype:"bool"}),gB={kernelName:ao,backendName:"webgpu",kernelFunc:Soe};var voe=it({opType:ye.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:QM}),xB={kernelName:io,backendName:"webgpu",kernelFunc:voe};var koe=Ge({opType:pe.IS_NAN,dtype:"bool"}),yB={kernelName:ia,backendName:"webgpu",kernelFunc:koe};function Toe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new Zo(n.shape,pe.LEAKYRELU);return i.uniforms="alpha : f32,",t.runWebGPUProgram(i,[n],"float32",a)}var bB={kernelName:Nn,backendName:"webgpu",kernelFunc:Toe};var Noe=it({opType:ye.LESS,dtype:"bool",cpuKernelImpl:eL}),CB={kernelName:po,backendName:"webgpu",kernelFunc:Noe};var _oe=it({opType:ye.LESS_EQUAL,dtype:"bool",cpuKernelImpl:JM}),IB={kernelName:co,backendName:"webgpu",kernelFunc:_oe};var Eoe=Ge({opType:pe.LOG,cpuKernelImpl:tL}),wB={kernelName:lo,backendName:"webgpu",kernelFunc:Eoe};var $oe=it({opType:ye.LOGICAL_AND,dtype:"bool"}),SB={kernelName:_n,backendName:"webgpu",kernelFunc:$oe};var Roe=Ge({opType:pe.LOGICAL_NOT}),vB={kernelName:En,backendName:"webgpu",kernelFunc:Roe};var Aoe=it({opType:ye.MAX,cpuKernelImpl:oL}),kB={kernelName:mo,backendName:"webgpu",kernelFunc:Aoe};function Foe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=I.computePool2DInfo(n.shape,s,a,u,i,p);return Zg(n,c,"max",t)}var TB={kernelName:Rn,backendName:"webgpu",kernelFunc:Foe};function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,"min",t)}var NB={kernelName:Fn,backendName:"webgpu",kernelFunc:Doe};var Poe=it({opType:ye.MIN,cpuKernelImpl:nL}),_B={kernelName:fo,backendName:"webgpu",kernelFunc:Poe};var bx=class{constructor(e,t,o){this.uniforms="",this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(","),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:""}`).join(","),n=e===1?"start":"start[i]",s=e===1?"end":"end[i]",a=e===1?"outC":"outC[i]",i=At(e),p=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` - ${ue("index")} { + `}};function poe(r){let e=["resRC.x","resRC.y","resRC.z","resRC.w"],t=[];for(let o=0;ot.disposeData(R.dataId)),t.makeTensorInfo(u.outputShape,A.dtype,A.values)}let h=new ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=de({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var TL={kernelName:Ss,backendName:"webgpu",kernelFunc:gI};var coe=ot({opType:ye.GREATER,cpuKernelImpl:J3,dtype:"bool"}),_L={kernelName:pn,backendName:"webgpu",kernelFunc:coe};var loe=ot({opType:ye.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:Z3}),EL={kernelName:cn,backendName:"webgpu",kernelFunc:loe};function moe(r){let{inputs:e,backend:t}=r,{input:o}=e;return rx(o,!0,t)}var $L={kernelName:ni,backendName:"webgpu",kernelFunc:moe};var doe=Se({opType:Q.IS_FINITE,dtype:"bool"}),AL={kernelName:fa,backendName:"webgpu",kernelFunc:doe};var foe=Se({opType:Q.IS_INF,dtype:"bool"}),RL={kernelName:ha,backendName:"webgpu",kernelFunc:foe};var hoe=Se({opType:Q.IS_NAN,dtype:"bool"}),FL={kernelName:ln,backendName:"webgpu",kernelFunc:hoe};function goe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new Ro(n.shape,Q.LEAKYRELU);return i.uniforms="alpha : f32,",t.runWebGPUProgram(i,[n],"float32",a)}var DL={kernelName:mn,backendName:"webgpu",kernelFunc:goe};var xoe=ot({opType:ye.LESS,dtype:"bool",cpuKernelImpl:tM}),OL={kernelName:dn,backendName:"webgpu",kernelFunc:xoe};var yoe=ot({opType:ye.LESS_EQUAL,dtype:"bool",cpuKernelImpl:eM}),PL={kernelName:fn,backendName:"webgpu",kernelFunc:yoe};var boe=Se({opType:Q.LOG,cpuKernelImpl:rM}),ML={kernelName:hn,backendName:"webgpu",kernelFunc:boe};var Coe=Se({opType:Q.LOG1P}),LL={kernelName:ga,backendName:"webgpu",kernelFunc:Coe};var Soe=ot({opType:ye.LOGICAL_AND,dtype:"bool"}),BL={kernelName:gn,backendName:"webgpu",kernelFunc:Soe};var woe=Se({opType:Q.LOGICAL_NOT}),VL={kernelName:xn,backendName:"webgpu",kernelFunc:woe};var Ioe=ot({opType:ye.MAX,cpuKernelImpl:nM}),zL={kernelName:bn,backendName:"webgpu",kernelFunc:Ioe};function voe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=S.computePool2DInfo(n.shape,s,a,u,i,p);return Bg(n,c,"max",t)}var WL={kernelName:Cn,backendName:"webgpu",kernelFunc:voe};function koe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,"min",t)}var UL={kernelName:wn,backendName:"webgpu",kernelFunc:koe};var Noe=ot({opType:ye.MIN,cpuKernelImpl:sM}),GL={kernelName:In,backendName:"webgpu",kernelFunc:Noe};var px=class{constructor(e,t,o){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(","),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:""}`).join(","),n=e===1?"start":"start[i]",s=e===1?"end":"end[i]",a=e===1?"outC":"outC[i]",i=Rt(e),p=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + ${se("index")} { if (index < uniforms.size) { let start = ${i}(${t}); let end = ${i}(${o}); @@ -6654,8 +6805,16 @@ return a / b;`,X7=` setOutputAtIndex(index, getX(${p})); } } - `}};var EB={kernelName:Dn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:"int32",data:[c[0],c[1]]})),p=new bx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};function Ooe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=aL(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Zo(o.shape,pe.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var $B={kernelName:Pn,backendName:"webgpu",kernelFunc:Ooe};function Moe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Bt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var RB={kernelName:On,backendName:"webgpu",kernelFunc:Moe};function Loe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,f=i,d=p,h=u,{selectedIndices:g,selectedScores:y}=Bt.nonMaxSuppressionV5Impl(c,l,m,f,d,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var AB={kernelName:Mn,backendName:"webgpu",kernelFunc:Loe};function om(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=Wa({inputs:{input:o},backend:t}),s=om({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=om({inputs:{x:a},backend:t}),p=ls({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return $o({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var FB={kernelName:Es,backendName:"webgpu",kernelFunc:om};function DB(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=Wa({inputs:{input:o},backend:t}),s=DB({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=om({inputs:{x:a},backend:t}),p=ls({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return $o({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var PB={kernelName:Cs,backendName:"webgpu",kernelFunc:DB};function Boe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return mx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{x.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),x.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=mx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=LS({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var OB={kernelName:Is,backendName:"webgpu",kernelFunc:Boe};var Cx=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){let e=this.xShape.length,t=At(e),o=this.xShape.map((l,m)=>`uniforms.pad${m}[0]`).join(","),n=this.xShape.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:""}`).join(","),s=e>1?`${t}(${o})`:`${o}`,a=e>1?`${t}(${n})`:`${n}`,i=e>1?"any(outC < start)":"outC < start",p=e>1?"any(outC >= end)":"outC >= end",u=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` - ${ue("index")} { + `}};var HL={kernelName:vn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:"int32",data:[c[0],c[1]]})),p=new px(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Toe=ot({opType:ye.MOD}),qL={kernelName:ya,backendName:"webgpu",kernelFunc:Toe};function _oe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=iM(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Ro(o.shape,Q.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var KL={kernelName:ws,backendName:"webgpu",kernelFunc:_oe};function Eoe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Lt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var jL={kernelName:Tn,backendName:"webgpu",kernelFunc:Eoe};function $oe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Lt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var XL={kernelName:_n,backendName:"webgpu",kernelFunc:$oe};var cx=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + ${se("index")} { + if(index < uniforms.size) { + let coords = getCoordsFromIndex(index); + setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue, + f32(i32(round(getX(coords.x))) == coords.y))); + } + } + `}};function Aoe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new cx(u,a),l=de({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:"float32",data:[i]},{type:"float32",data:[p]}],d=t.runWebGPUProgram(c,[l],s,m);t.disposeData(l.dataId);let f=[...n.shape,a],h=de({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YL={kernelName:En,backendName:"webgpu",kernelFunc:Aoe};function Kl(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=qa({inputs:{input:o},backend:t}),s=Kl({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=Kl({inputs:{x:a},backend:t}),p=po({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return dr({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var QL={kernelName:Fs,backendName:"webgpu",kernelFunc:Kl};function ZL(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=qa({inputs:{input:o},backend:t}),s=ZL({inputs:{x:n},backend:t}),a=qu({inputs:{input:o},backend:t}),i=Kl({inputs:{x:a},backend:t}),p=po({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return dr({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JL={kernelName:Is,backendName:"webgpu",kernelFunc:ZL};function Roe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return tx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=tx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=mI({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eB={kernelName:vs,backendName:"webgpu",kernelFunc:Roe};var lx=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){let e=this.xShape.length,t=Rt(e),o=this.xShape.map((l,m)=>`uniforms.pad${m}[0]`).join(","),n=this.xShape.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:""}`).join(","),s=e>1?`${t}(${o})`:`${o}`,a=e>1?`${t}(${n})`:`${n}`,i=e>1?"any(outC < start)":"outC < start",p=e>1?"any(outC >= end)":"outC >= end",u=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + ${se("index")} { if (index < uniforms.size) { let start = ${s}; let end = ${a}; @@ -6669,8 +6828,8 @@ return a / b;`,X7=` } } } - `}};var US=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>x.arraysEqual(u,[0,0])))return Lt({inputs:{x:n},backend:t});if(x.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return $o({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:"float32",data:[a]}];s.map(u=>i.push({type:"int32",data:[u[0],u[1]]}));let p=new Cx(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},MB={kernelName:Ln,backendName:"webgpu",kernelFunc:US};var Voe=it({opType:ye.POW}),LB={kernelName:Bn,backendName:"webgpu",kernelFunc:Voe};function zoe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Hu(ye.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],"float32")}var BB={kernelName:Vn,backendName:"webgpu",kernelFunc:zoe};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return Ys(n,s,a,"prod",t)}var VB={kernelName:Ao,backendName:"webgpu",kernelFunc:Woe};var Uoe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=pL(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},zB={kernelName:ws,backendName:"webgpu",kernelFunc:Uoe};var GS=it({opType:ye.DIV}),WB={kernelName:Cn,backendName:"webgpu",kernelFunc:GS};var Goe=Ge({opType:pe.RECIPROCAL}),UB={kernelName:ma,backendName:"webgpu",kernelFunc:Goe};var Hoe=Ge({opType:pe.RELU}),GB={kernelName:zn,backendName:"webgpu",kernelFunc:Hoe};var qoe=Ge({opType:pe.RELU6}),HB={kernelName:Gn,backendName:"webgpu",kernelFunc:qoe};var Ix=class{constructor(e,t,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` - ${ue("index")} { + `}};var xI=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Ft({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return dr({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:"float32",data:[a]}];s.map(u=>i.push({type:"int32",data:[u[0],u[1]]}));let p=new lx(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tB={kernelName:$n,backendName:"webgpu",kernelFunc:xI};var Foe=ot({opType:ye.POW}),rB={kernelName:An,backendName:"webgpu",kernelFunc:Foe};function Doe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Hu(ye.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],"float32")}var oB={kernelName:Rn,backendName:"webgpu",kernelFunc:Doe};function Ooe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return qr(n,s,a,"prod",t)}var nB={kernelName:Fn,backendName:"webgpu",kernelFunc:Ooe};var Poe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=cM(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sB={kernelName:ks,backendName:"webgpu",kernelFunc:Poe};var yI=ot({opType:ye.DIV}),aB={kernelName:Jo,backendName:"webgpu",kernelFunc:yI};var Moe=Se({opType:Q.RECIPROCAL}),iB={kernelName:Dn,backendName:"webgpu",kernelFunc:Moe};var Loe=Se({opType:Q.RELU}),uB={kernelName:On,backendName:"webgpu",kernelFunc:Loe};var Boe=Se({opType:Q.RELU6}),pB={kernelName:Ln,backendName:"webgpu",kernelFunc:Boe};var mx=class{constructor(e,t,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6712,8 +6871,8 @@ return a / b;`,X7=` setOutputAtIndex(index, newValue); } } - `}};function Koe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,f=[{type:"float32",data:[c,l]},{type:"float32",data:[i?.5:0]}],d=new Ix(n.shape,p,u);return t.runWebGPUProgram(d,[n],"float32",f)}var qB={kernelName:Un,backendName:"webgpu",kernelFunc:Koe};var wx=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` - ${ue("index")} { + `}};function Voe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:"float32",data:[c,l]},{type:"float32",data:[i?.5:0]}],f=new mx(n.shape,p,u);return t.runWebGPUProgram(f,[n],"float32",d)}var cB={kernelName:Mn,backendName:"webgpu",kernelFunc:Voe};var dx=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let b = coords[0]; @@ -6743,9 +6902,39 @@ return a / b;`,X7=` setOutputAtIndex(index, newValue); } } - `}};function joe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,f=[{type:"float32",data:[c,l]},{type:"float32",data:[s?.5:0]}],d=new wx(n.shape,p,u,a);return t.runWebGPUProgram(d,[n],n.dtype,f)}var KB={kernelName:Wn,backendName:"webgpu",kernelFunc:joe};var Sx=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function zoe(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:"float32",data:[c,l]},{type:"float32",data:[s?.5:0]}],f=new dx(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var lB={kernelName:Pn,backendName:"webgpu",kernelFunc:zoe};var fx=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + + // Using uniform variables as judging conditions, so the function has + // coherent execution within all threads. + fn getReverseCoords(coords : vec4) -> vec4 { + var reverseCoords = coords; + if (uniforms.axis[0] == 1) { + reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1; + } + if (uniforms.axis[1] == 1) { + reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1; + } + if (uniforms.axis[2] == 1) { + reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1; + } + if (uniforms.axis[3] == 1) { + reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1; + } + + return reverseCoords; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let reverseCoords = getReverseCoords(coords); + setOutputAtIndex(index, getX(reverseCoords[0], + reverseCoords[1], reverseCoords[2], reverseCoords[3])); + } + } + `}};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return Ft({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),c=[0,0,0,0];u.forEach(g=>{let x=g+4-a;c[x]=1});let l=[{type:"int32",data:c}],m=de({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new fx(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=de({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var mB={kernelName:Bn,backendName:"webgpu",kernelFunc:Woe};var hx=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`,this.shaderKey="rotate",this.outputShape=e,typeof t=="number"?(this.uniforms+=" fillValue : f32,",this.fillSnippet="var outputValue = uniforms.fillValue;",this.shaderKey+="_float"):(this.uniforms+=" fillValue : vec3,",this.fillSnippet="var outputValue = uniforms.fillValue[coords[3]];",this.shaderKey+="_vec3")}getUserCode(){return` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); let coordXFloat = (f32(coords[2]) - uniforms.centerX) * @@ -6764,7 +6953,7 @@ return a / b;`,X7=` setOutputAtIndex(index, outputValue); } } - `}};var jB={kernelName:es,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Sx(o.shape,s),[u,c]=I.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:"float32",data:[u]},{type:"float32",data:[c]},{type:"float32",data:[Math.sin(n)]},{type:"float32",data:[Math.cos(n)]}];return typeof s=="number"?l.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:"float32",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var Xoe=Ge({opType:pe.RSQRT,cpuKernelImpl:cL}),XB={kernelName:xo,backendName:"webgpu",kernelFunc:Xoe};var Fi=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=["updates","indices"],this.workGroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=fe(e),this.dispatch=ae(this.dispatchLayout,e,this.workGroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=At(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, size: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` + `}};var dB={kernelName:es,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new hx(o.shape,s),[u,c]=S.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:"float32",data:[u]},{type:"float32",data:[c]},{type:"float32",data:[Math.sin(n)]},{type:"float32",data:[Math.cos(n)]}];return typeof s=="number"?l.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:"float32",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var Uoe=Se({opType:Q.RSQRT,cpuKernelImpl:lM}),fB={kernelName:Vn,backendName:"webgpu",kernelFunc:Uoe};var Gi=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=ue(e),this.dispatch=re(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=Rt(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; } @@ -6794,11 +6983,11 @@ return a / b;`,X7=` newBits = bitcast(newValue); } } - `);let f=`atomicStore(${c}, bitcast(${l}));`;return this.sumDupeIndices?m:f};return` + `);let d=`atomicStore(${c}, bitcast(${l}));`;return this.sumDupeIndices?m:d};return` ${s} - ${ue("index")} { - if (index < uniforms.size) { + ${se("index")} { + if (index < uniforms.updatesSize) { let coords = getUpdatesCoordsFromFlatIndex(index); var flattenedIndex = 0; for (var j = 0; j < uniforms.sliceDim; j = j + 1) { @@ -6806,13 +6995,35 @@ return a / b;`,X7=` flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Tc(this.type,!1)}(${i}); + ${wc(this.type,!1)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); ${p("&result[flatIndex]","updateValue")}; } - }`}};function Yoe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=I.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let f=xe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),d=xe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=d.dtype,g=$o({backend:t,attrs:{shape:m,value:0,dtype:h}}),y=x.sizeFromShape(d.shape),b=[{type:"int32",data:[i]},{type:"int32",data:c},{type:"int32",data:[y]}],C=new Fi(d.shape,i,f.shape.length,d.shape.length,c,m,h),w=t.runWebGPUProgram(C,[d,f],h,b,g),k=xe({inputs:{x:w},backend:t,attrs:{shape:a}});return t.disposeData(f.dataId),t.disposeData(d.dataId),t.disposeData(w.dataId),k}var YB={kernelName:Hn,backendName:"webgpu",kernelFunc:Yoe};var vx=class{constructor(e,t,o){this.variableNames=["c","a","b"],this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.cRank=e,this.rank=o,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i i32 { + var left = i32(0); + var right = uniforms.numInputs; + while (left < right) { + var mid = (left + right) / 2; + if (getSortedSequence(batch, mid) ${this.side==="left"?"<":"<="} value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + ${se("index")} { + if (index < uniforms.size) { + let coords = getCoordsFromIndex(index); + let value = getValuesByOutputIndex(index); + setOutputAtIndexI32(index, findBound(coords[0], value)); + } + } + `}};function Hoe(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new gx([s.shape[0],s.shape[1]],a),p=[{type:"int32",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],"int32",p)}var gB={kernelName:ii,backendName:"webgpu",kernelFunc:Hoe};var xx=class{constructor(e,t,o){this.variableNames=["c","a","b"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=o,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;x.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((y,b)=>y*b),p=[[0,0]];p.push(...a);for(let y=1+s.length;yt.disposeData(y.dataId)),g},oV={kernelName:ks,backendName:"webgpu",kernelFunc:rne};var kx=class{constructor(e,t){this.variableNames=["A"],this.workGroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeData(x.dataId)),g},IB={kernelName:Es,backendName:"webgpu",kernelFunc:Qoe};var yx=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>x.decodeString(m)):p,c=ne(n.shape,n.dtype,u),l=xL(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new kx(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var nV={kernelName:wo,backendName:"webgpu",kernelFunc:qS};function nne(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=I.calculateShapes(s,n,i),f=!1;if(s.dtype==="string"){let R=t.bufferSync(n),A=t.bufferSync(s),D=x.decodeString(t.readSync(a.dataId)[0]),O=lL(R,A,i,m,c,u,p,l,D,f);return t.makeTensorInfo(i,O.dtype,O.values)}let d=[m/c,c],h=xe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?xe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):Lt({inputs:{x:s},backend:t}),y=g.dtype,b=t.makeTensorInfo([],y,x.makeZerosTypedArray(1,y)),C=xe({inputs:{x:a},backend:t,attrs:{shape:Array(d.length).fill(1)}}),w=qS({inputs:{x:C},backend:t,attrs:{reps:d}}),k=x.sizeFromShape([u,c]),_=[{type:"int32",data:[p]},{type:"int32",data:l},{type:"int32",data:[k]}];switch(u){case 0:break;case 1:{let R=new Fi([u,c],p,h.shape.length,g.shape.length,l,d,y,f);t.runWebGPUProgram(R,[g,h],y,_,w)}break;default:{let R=new Fi([u,c],p,h.shape.length,b.shape.length,l,d,y,f);t.runWebGPUProgram(R,[b,h],y,_,w)}{let R=new Fi([u,c],p,h.shape.length,g.shape.length,l,d,y);t.runWebGPUProgram(R,[g,h],y,_,w)}}let E=xe({inputs:{x:w},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(w.dataId),E}var sV={kernelName:ei,backendName:"webgpu",kernelFunc:nne};function sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=x.parseAxisParam(a,n.shape)[0],p=I.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let f=[...l];f[i]=m;let d=ms({inputs:{x:n},backend:t,attrs:{begin:c,size:f}});return c[i]+=m,d})}var aV={kernelName:Ts,backendName:"webgpu",kernelFunc:sne};var ane=Ge({opType:pe.SQRT}),iV={kernelName:bo,backendName:"webgpu",kernelFunc:ane};var uV={kernelName:ti,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Zo(t.shape,pe.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var ine=it({opType:ye.SQUARED_DIFFERENCE}),pV={kernelName:Co,backendName:"webgpu",kernelFunc:ine};var Tx=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize,[this.workPerThread,1,1]);let t=At(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(",")}return` - ${ue("index")} { + `}};function Zoe(r,e=""){if(r>=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=le(n.shape,n.dtype,u),l=yM(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new yx(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var vB={kernelName:to,backendName:"webgpu",kernelFunc:CI};function Joe(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=S.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let A=t.bufferSync(n),R=t.bufferSync(s),D=y.decodeString(t.readSync(a.dataId)[0]),P=mM(A,R,i,m,c,u,p,l,D,d);return t.makeTensorInfo(i,P.dtype,P.values)}let f=[m/c,c],h=de({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?de({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):Ft({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=de({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),w=CI({inputs:{x:C},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,c]),_=[{type:"int32",data:[p]},{type:"int32",data:l},{type:"int32",data:[k]}];switch(u){case 0:break;case 1:{let A=new Gi([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(A,[g,h],x,_,w)}break;default:{let A=new Gi([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(A,[b,h],x,_,w)}{let A=new Gi([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(A,[g,h],x,_,w)}}let $=de({inputs:{x:w},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(w.dataId),$}var kB={kernelName:li,backendName:"webgpu",kernelFunc:Joe};function ene(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=S.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=ds({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var NB={kernelName:$s,backendName:"webgpu",kernelFunc:ene};var tne=Se({opType:Q.SQRT}),TB={kernelName:Gn,backendName:"webgpu",kernelFunc:tne};var _B={kernelName:mi,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Ro(t.shape,Q.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var rne=ot({opType:ye.SQUARED_DIFFERENCE}),EB={kernelName:Kn,backendName:"webgpu",kernelFunc:rne};var bx=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Rt(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(",")}return` + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${t})); } } - `}};function une(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:y,begin:b,end:C,strides:w}=et.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=xe({inputs:{x:n},backend:t,attrs:{shape:d}});else if(g||y){x.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=et.computeOutShape(b,C,w),E=ms({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=xe({inputs:{x:E},backend:t,attrs:{shape:d}}),t.disposeData(E.dataId)}else if(t.shouldExecuteOnCPU([n])){let E=t.readSync(n.dataId),R=ne(n.shape,n.dtype,E),A=dL(f,R,w,b);k=t.makeTensorInfo(d,n.dtype,A.values)}else{let E=new Tx(f),R=[{type:"int32",data:b},{type:"int32",data:w}],A=t.runWebGPUProgram(E,[n],n.dtype,R);k=xe({inputs:{x:A},backend:t,attrs:{shape:d}}),t.disposeData(A.dataId)}return k}var cV={kernelName:Yn,backendName:"webgpu",kernelFunc:une};function pne(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),f=t.readSync(l.dataId),[d,h]=hL(m,f,n,s,a,i,p,u);return[t.makeTensorInfo([d.length],"string",d),t.makeTensorInfo(l.shape,"int32",h)]}var lV={kernelName:Ns,backendName:"webgpu",kernelFunc:pne};var cne=Ge({opType:pe.TANH}),mV={kernelName:Qn,backendName:"webgpu",kernelFunc:cne};var Nx=class{constructor(e){this.variableNames=["x","indices"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function one(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:w}=ut.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=de({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=ut.computeOutShape(b,C,w),$=ds({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=de({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),A=le(n.shape,n.dtype,$),R=hM(d,A,w,b);k=t.makeTensorInfo(f,n.dtype,R.values)}else{let $=new bx(d),A=[{type:"int32",data:b},{type:"int32",data:w}],R=t.runWebGPUProgram($,[n],n.dtype,A);k=de({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeData(R.dataId)}return k}var $B={kernelName:jn,backendName:"webgpu",kernelFunc:one};function nne(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=gM(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var AB={kernelName:As,backendName:"webgpu",kernelFunc:nne};var sne=Se({opType:Q.TAN}),RB={kernelName:Yn,backendName:"webgpu",kernelFunc:sne};var ane=Se({opType:Q.TANH}),FB={kernelName:Qn,backendName:"webgpu",kernelFunc:ane};var Cx=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`,this.shaderKey="swap"}getUserCode(){return` - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -6905,8 +7116,8 @@ return a / b;`,X7=` } } } - `}},_x=class{constructor(e){this.variableNames=["x","indices"],this.workGroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` - ${ue("index")} { + `}},Sx=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` + ${se("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); let batch = outC[0]; @@ -6964,7 +7175,7 @@ return a / b;`,X7=` } } } - `}};function Mc(r,e){e!==null&&r.disposeData(e.dataId)}function fV(r){let e=1;for(;ed===null?[l,l]:[l,d],g=(k,_,E)=>{let R=h(),A=new Nx(E),O=[{type:"int32",data:[p]},{type:"int32",data:[d===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[k]},{type:"int32",data:[_]}],M=d;d=t.runWebGPUProgram(A,R,"int32",O),Mc(t,M)};for(let k=1;k=1;E/=2)g(_,E,[c,f])}for(let k=f;k>m;k/=2){let _=h(),E=new _x([c,k/2]),A=[{type:"int32",data:[p]},{type:"int32",data:[d===null?1:0]},{type:"int32",data:[m]}],D=d;d=t.runWebGPUProgram(E,_,"int32",A),Mc(t,D);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,d.shape)}let y=d;d=ms({inputs:{x:d},backend:t,attrs:{begin:0,size:[c,s]}}),Mc(t,y);let b=WS({inputs:{x:l,indices:d},backend:t,attrs:{axis:1,batchDims:1}});Mc(t,l);let C=i.slice(0,-1);C.push(s),y=d,d=xe({inputs:{x:d},attrs:{shape:C},backend:t}),Mc(t,y);let w=b;return b=xe({inputs:{x:b},attrs:{shape:C},backend:t}),Mc(t,w),[b,d]}var dV={kernelName:Zn,backendName:"webgpu",kernelFunc:lne};var Ex=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workGroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=fe(this.outputShape),this.dispatch=ae(this.dispatchLayout,this.outputShape,this.workGroupSize),this.shaderKey="transform"}getUserCode(){return` + `}};function $c(r,e){e!==null&&r.disposeData(e.dataId)}function DB(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let A=h(),R=new Cx($),P=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[k]},{type:"int32",data:[_]}],M=f;f=t.runWebGPUProgram(R,A,"int32",P),$c(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new Sx([c,k/2]),R=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"int32",data:[m]}],D=f;f=t.runWebGPUProgram($,_,"int32",R),$c(t,D);let P=m/2,M=P*2;for(let L=P;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=ds({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),$c(t,x);let b=gI({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});$c(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=de({inputs:{x:f},attrs:{shape:C},backend:t}),$c(t,x);let w=b;return b=de({inputs:{x:b},attrs:{shape:C},backend:t}),$c(t,w),[b,f]}var OB={kernelName:Zn,backendName:"webgpu",kernelFunc:ine};var wx=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=ue(this.outputShape),this.dispatch=re(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` fn mapCoord(outCoord : f32, len : f32) -> f32{ var inCoord = outCoord; if(uniforms.fillModeId == 2) { @@ -7028,7 +7239,7 @@ return a / b;`,X7=` return outputValue; } - ${ue("index")} { + ${se("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var outputValue : f32; @@ -7080,4 +7291,4 @@ return a / b;`,X7=` setOutputAtIndex(index, outputValue); } } - `}};function mne(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,f]=n.shape,[d,h]=u!=null?u:[l,m],g=[c,d,h,f],y=new Ex(g),b=a==="nearest"?1:2,C;switch(i){case"constant":C=1;break;case"reflect":C=2;break;case"wrap":C=3;break;case"nearest":C=4;break;default:C=1;break}let w=[{type:"int32",data:[b]},{type:"int32",data:[C]},{type:"float32",data:[p]}];return t.runWebGPUProgram(y,[n,s],"float32",w)}var hV={kernelName:Jn,backendName:"webgpu",kernelFunc:mne};function fne(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),d}var gV={kernelName:_s,backendName:"webgpu",kernelFunc:fne};var dne=[aM,CL,IL,wL,vL,kL,TL,EL,$L,AL,OL,ML,LL,uM,VL,WL,UL,GL,HL,qL,XL,YL,QL,ZL,tB,rB,oB,nB,sB,aB,nM,iB,cB,uB,pB,lB,mB,fB,dB,hB,gB,xB,iM,BL,yB,bB,CB,IB,wB,SB,vB,NL,kB,TB,_L,NB,_B,EB,JL,$B,RB,AB,FL,PB,OB,MB,LB,BB,VB,zB,DL,WB,UB,GB,HB,sM,qB,KB,jB,XB,YB,QB,ZB,JB,eV,RL,cV,lV,rV,oV,sV,aV,iV,uV,pV,tV,eB,mV,nV,dV,hV,SL,gV,FB];for(let r of dne)ya(r);var xV="4.0.0",hne="4.0.0",gne="4.0.0",xne="4.0.0",yne="4.0.0",bne="0.0.1-alpha.14",Cne={tfjs:xV,"tfjs-core":xV,"tfjs-converter":hne,"tfjs-backend-cpu":gne,"tfjs-backend-webgl":xne,"tfjs-backend-wasm":yne,"tfjs-backend-webgpu":bne};export{sn as Abs,Li as Acos,Bi as Acosh,xi as AdadeltaOptimizer,yi as AdagradOptimizer,bi as AdamOptimizer,Ci as AdamaxOptimizer,_r as Add,an as AddN,oa as All,na as Any,un as ArgMax,ja as ArgMin,Vi as Asin,zi as Asinh,Wi as Atan,sa as Atan2,Ui as Atanh,pn as AvgPool,ip as AvgPool3D,Fm as AvgPool3DGrad,Am as AvgPoolGrad,Gl as BackendWasm,cn as BatchMatMul,hs as BatchToSpaceND,up as Bincount,pp as BroadcastArgs,Tne as BroadcastTo,to as Cast,ro as Ceil,Ro as ClipByValue,aa as Complex,cp as ComplexAbs,gs as Concat,ln as Conv2D,lp as Conv2DBackpropFilter,mn as Conv2DBackpropInput,mp as Conv3D,Dm as Conv3DBackpropFilterV2,fp as Conv3DBackpropInputV2,fn as Cos,dn as Cosh,xn as CropAndResize,hn as Cumprod,gn as Cumsum,rn as DataStorage,dp as DenseBincount,yn as DepthToSpace,bn as DepthwiseConv2dNative,hp as DepthwiseConv2dNativeBackpropFilter,gp as DepthwiseConv2dNativeBackpropInput,xp as Diag,yp as Dilation2D,vb as Dilation2DBackpropFilter,Sb as Dilation2DBackpropInput,Cb as ENV,Xa as Einsum,In as Elu,Pm as EluGrad,Qc as Environment,oo as Equal,Gi as Erf,no as Exp,xs as ExpandDims,wn as Expm1,bp as FFT,ys as Fill,Sn as FlipLeftRight,so as Floor,vn as FloorDiv,Zi as FromPixels,kn as FusedBatchNorm,Do as FusedConv2D,Po as FusedDepthwiseConv2D,Fu as GPGPUContext,Tn as GatherNd,bs as GatherV2,bl as GraphModel,ao as Greater,io as GreaterEqual,Cp as IFFT,uo as Identity,Ya as Imag,Hi as IsFinite,qi as IsInf,ia as IsNan,Jr as KernelBackend,wp as LRN,Om as LRNGrad,Nn as LeakyRelu,po as Less,co as LessEqual,Ip as LinSpace,lo as Log,Ki as Log1p,Nne as LogSoftmax,_n as LogicalAnd,En as LogicalNot,ua as LogicalOr,g0 as LogicalXor,_ne as LowerBound,Si as MathBackendCPU,Ni as MathBackendWebGL,$n as Max,Rn as MaxPool,Sp as MaxPool3D,Lm as MaxPool3DGrad,Mm as MaxPoolGrad,vp as MaxPoolWithArgmax,mo as Maximum,An as Mean,Fn as Min,fo as Minimum,Dn as MirrorPad,ji as Mod,Ii as MomentumOptimizer,kp as Multinomial,ho as Multiply,Pn as Neg,On as NonMaxSuppressionV3,pa as NonMaxSuppressionV4,Mn as NonMaxSuppressionV5,go as NotEqual,Ub as OP_SCOPE_SUFFIX,ca as OneHot,Cs as OnesLike,wr as Optimizer,ns as OptimizerConstructors,Is as Pack,Ln as PadV2,Ene as Pool,Bn as Pow,Vn as Prelu,Ao as Prod,wi as RMSPropOptimizer,Tp as RaggedGather,Np as RaggedRange,_p as RaggedTensorToTensor,ws as Range,Fb as Rank,la as Real,Cn as RealDiv,ma as Reciprocal,Et as Reduction,zn as Relu,Gn as Relu6,Ss as Reshape,Un as ResizeBilinear,Vm as ResizeBilinearGrad,Wn as ResizeNearestNeighbor,Bm as ResizeNearestNeighborGrad,fa as Reverse,es as RotateWithOffset,da as Round,xo as Rsqrt,Us as SGDOptimizer,Hn as ScatterNd,Ep as SearchSorted,vs as Select,Xi as Selu,yo as Sigmoid,Yi as Sign,Kn as Sin,ha as Sinh,qn as Slice,Xn as Softmax,Qi as Softplus,ks as SpaceToBatchND,Qa as SparseFillEmptyRows,ga as SparseReshape,Za as SparseSegmentMean,Ja as SparseSegmentSum,ei as SparseToDense,Ts as SplitV,bo as Sqrt,ti as Square,Co as SquaredDifference,$s as Step,Yn as StridedSlice,Ns as StringNGrams,ri as StringSplit,oi as StringToHashBucketFast,Io as Sub,jn as Sum,xa as Tan,Qn as Tanh,ut as Tensor,je as TensorBuffer,wo as Tile,Zn as TopK,Jn as Transform,Mr as Transpose,$p as Unique,_s as Unpack,Rp as UnsortedSegmentSum,$ne as UpperBound,ba as Variable,Ai as WebGPUBackend,Es as ZerosLike,Fo as _FusedMatMul,Qt as abs,Vv as acos,zv as acosh,ge as add,Wv as addN,Uv as all,Gv as any,Hv as argMax,qv as argMin,Kv as asin,jv as asinh,Xv as atan,Yv as atan2,Qv as atanh,mf as avgPool,ek as avgPool3d,Bie as backend,I as backend_util,tk as basicLSTMCell,li as batchNorm,ok as batchNorm2d,nk as batchNorm3d,sk as batchNorm4d,ff as batchToSpaceND,df as bincount,_H as booleanMaskAsync,ak as broadcastArgs,Ls as broadcastTo,br as broadcast_util,Sv as browser,ne as buffer,qe as cast,ik as ceil,uk as clipByValue,zr as clone,Er as complex,gt as concat,pk as concat1d,ck as concat2d,lk as concat3d,mk as concat4d,fk as conv1d,mi as conv2d,dk as conv2dTranspose,hk as conv3d,xk as conv3dTranspose,Lne as copyRegisteredKernels,yk as cos,bk as cosh,hl as cosineWindow,Ck as cumprod,Ik as cumsum,Cr as customGrad,wk as denseBincount,sC as deprecationWarn,Sk as depthToSpace,Gp as depthwiseConv2d,YK as deregisterOp,ii as device_util,vk as diag,kk as dilation2d,_ie as disableDeprecationWarnings,Ft as dispose,Eie as disposeVariables,We as div,Tk as divNoNan,Nk as dot,BH as dropout,_k as einsum,xf as elu,Nie as enableDebugMode,Tie as enableProdMode,wC as enclosingPowerOfTwo,cr as engine,P as env,gf as equal,Ek as erf,Ak as euclideanNorm,Bo as exp,_a as expandDims,Fk as expm1,yf as eye,qp as fft,Bs as fill,Mie as findBackend,Lie as findBackendFactory,bf as floor,cf as floorDiv,pR as forceHalfFloat,SC as fused,Cf as gather,MH as gatherND,af as gather_util,Pie as getBackend,kb as getGradient,el as getKernel,zm as getKernelsForBackend,nte as getThreadsCount,Sw as gpgpu_util,GG as grad,HG as grads,cu as greater,If as greaterEqual,hu as ifft,ci as imag,zq as image,zH as inTopKAsync,va as io,Gf as irfft,Dk as isFinite,Pk as isInf,Ok as isNaN,So as keep,Bt as kernel_impls,wf as leakyRelu,Mk as less,Hp as lessEqual,Wq as linalg,Lk as linspace,U6 as loadGraphModel,G6 as loadGraphModelSync,Bk as localResponseNormalization,Ea as log,Sf as log1p,Vk as logSigmoid,zk as logSoftmax,Tf as logSumExp,lu as logicalAnd,Nf as logicalNot,_f as logicalOr,Wk as logicalXor,Uq as losses,Uk as lowerBound,Xe as matMul,Cv as math,Vs as max,$f as maxPool,Gk as maxPool3d,Hk as maxPoolWithArgmax,Rf as maximum,mu as mean,$ie as memory,qk as meshgrid,fl as min,Af as minimum,Kk as mirrorPad,jk as mod,Xk as moments,$H as movingAverage,oe as mul,Yk as multiRNNCell,Qk as multinomial,yr as neg,kC as nextFrame,pu as norm,Ff as notEqual,pl as oneHot,zs as ones,Zk as onesLike,T as op,Jk as outerProduct,Ws as pad,e1 as pad1d,t1 as pad2d,r1 as pad3d,o1 as pad4d,n1 as pool,Na as pow,Pf as prelu,ef as print,s1 as prod,Rie as profile,a1 as raggedGather,i1 as raggedRange,u1 as raggedTensorToTensor,p1 as rand,T1 as randomGamma,Vf as randomNormal,N1 as randomStandardNormal,zf as randomUniform,di as range,Die as ready,ka as real,_1 as reciprocal,pi as registerBackend,Pne as registerGradient,ya as registerKernel,XK as registerOp,hi as relu,Wf as relu6,Oie as removeBackend,z as reshape,vo as reverse,E1 as reverse1d,$1 as reverse2d,R1 as reverse3d,A1 as reverse4d,Kp as rfft,Uf as round,F1 as rsqrt,be as scalar,AH as scatterND,cl as scatter_util,dl as searchSorted,D1 as selu,P1 as separableConv2d,Pv as serialization,Fie as setBackend,Vie as setPlatform,ote as setThreadsCount,tte as setWasmPath,rte as setWasmPaths,MI as setWebGLContext,O1 as setdiff1dAsync,Ad as shared,Ms as sigmoid,M1 as sign,Vq as signal,L1 as sin,B1 as sinh,Ue as slice,V1 as slice1d,z1 as slice2d,W1 as slice3d,U1 as slice4d,et as slice_util,G1 as softmax,kf as softplus,Df as spaceToBatchND,Gq as sparse,PH as sparseToDense,Bq as spectral,$a as split,Rr as sqrt,Zt as square,Hf as squaredDifference,jp as squeeze,Ir as stack,qf as step,H1 as stridedSlice,Hq as string,ke as sub,tt as sum,Ca as sumOutType,q1 as tan,ml as tanh,nr as tensor,mr as tensor1d,gi as tensor2d,sf as tensor3d,K1 as tensor4d,j1 as tensor5d,X1 as tensor6d,z0 as tensor_util,Bv as test_util,Ne as tidy,fi as tile,Aie as time,Y1 as topk,pMe as train,Wp as transpose,Q1 as truncatedNormal,Z1 as unique,Mne as unregisterGradient,One as unregisterKernel,J1 as unsortedSegmentSum,ko as unstack,ct as upcastType,eT as upperBound,x as util,qG as valueAndGrad,KG as valueAndGrads,tT as variable,dC as variableGrads,Cne as version,q6 as version_converter,YW as version_core,Ij as version_cpu,ste as version_wasm,gY as version_webgl,R9e as webgl,ic as webgl_util,pS as webgpu_util,os as where,jf as whereAsync,Wr as zeros,Gt as zerosLike}; + `}};function une(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new wx(g),b=a==="nearest"?1:2,C;switch(i){case"constant":C=1;break;case"reflect":C=2;break;case"wrap":C=3;break;case"nearest":C=4;break;default:C=1;break}let w=[{type:"int32",data:[b]},{type:"int32",data:[C]},{type:"float32",data:[p]}];return t.runWebGPUProgram(x,[n,s],"float32",w)}var PB={kernelName:Jn,backendName:"webgpu",kernelFunc:une};function pne(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),f}var MB={kernelName:Rs,backendName:"webgpu",kernelFunc:pne};var cne=[B3,SM,wM,IM,vM,kM,TM,_M,EM,$M,AM,RM,FM,DM,OM,LM,BM,zM,WM,qM,KM,jM,z3,YM,QM,ZM,JM,eL,tL,nL,sL,aL,iL,uL,lL,mL,dL,fL,hL,gL,xL,yL,M3,bL,wL,CL,SL,IL,vL,kL,NL,TL,_L,EL,V3,$L,XM,AL,RL,FL,DL,OL,PL,LL,ML,BL,VL,PM,zL,WL,MM,UL,GL,HL,qL,pL,KL,jL,XL,UM,YL,JL,eB,tB,rB,oB,nB,sB,GM,aB,iB,uB,pB,L3,cB,lB,mB,dB,fB,hB,gB,xB,yB,bB,CB,VM,$B,AB,wB,IB,kB,NB,TB,_B,EB,SB,cL,RB,FB,vB,OB,PB,NM,MB,QL];for(let r of cne)Ia(r);var LB="4.1.0",lne="4.1.0",mne="4.1.0",dne="4.1.0",fne="4.1.0",hne="0.0.1-alpha.16",gne={tfjs:LB,"tfjs-core":LB,"tfjs-converter":lne,"tfjs-backend-cpu":mne,"tfjs-backend-webgl":dne,"tfjs-backend-wasm":fne,"tfjs-backend-webgpu":hne};export{gs as Abs,sa as Acos,aa as Acosh,Ei as AdadeltaOptimizer,$i as AdagradOptimizer,Ai as AdamOptimizer,Ri as AdamaxOptimizer,eo as Add,Mo as AddN,Lo as All,Bo as Any,Vo as ArgMax,Za as ArgMin,ia as Asin,ua as Asinh,pa as Atan,la as Atan2,ca as Atanh,zo as AvgPool,ip as AvgPool3D,Im as AvgPool3DGrad,wm as AvgPoolGrad,Pl as BackendWasm,Wo as BatchMatMul,xs as BatchToSpaceND,Ja as Bincount,up as BroadcastArgs,wne as BroadcastTo,co as Cast,Uo as Ceil,lo as ClipByValue,ei as Complex,pp as ComplexAbs,ys as Concat,Go as Conv2D,cp as Conv2DBackpropFilter,Ho as Conv2DBackpropInput,lp as Conv3D,vm as Conv3DBackpropFilterV2,mp as Conv3DBackpropInputV2,qo as Cos,Ko as Cosh,Yo as CropAndResize,jo as Cumprod,Xo as Cumsum,Do as DataStorage,ti as DenseBincount,Qo as DepthToSpace,Zo as DepthwiseConv2dNative,dp as DepthwiseConv2dNativeBackpropFilter,fp as DepthwiseConv2dNativeBackpropInput,hp as Diag,gp as Dilation2D,bb as Dilation2DBackpropFilter,yb as Dilation2DBackpropInput,hb as ENV,ri as Einsum,en as Elu,km as EluGrad,Uc as Environment,tn as Equal,ma as Erf,rn as Exp,bs as ExpandDims,da as Expm1,oi as FFT,Cs as Fill,on as FlipLeftRight,nn as Floor,sn as FloorDiv,Zi as FromPixels,an as FusedBatchNorm,ho as FusedConv2D,go as FusedDepthwiseConv2D,Fu as GPGPUContext,un as GatherNd,Ss as GatherV2,ll as GraphModel,pn as Greater,cn as GreaterEqual,ni as IFFT,mo as Identity,si as Imag,fa as IsFinite,ha as IsInf,ln as IsNan,Zr as KernelBackend,yp as LRN,Nm as LRNGrad,mn as LeakyRelu,dn as Less,fn as LessEqual,xp as LinSpace,hn as Log,ga as Log1p,Ine as LogSoftmax,gn as LogicalAnd,xn as LogicalNot,xa as LogicalOr,GI as LogicalXor,vne as LowerBound,Oi as MathBackendCPU,Bi as MathBackendWebGL,yn as Max,Cn as MaxPool,bp as MaxPool3D,_m as MaxPool3DGrad,Tm as MaxPoolGrad,Cp as MaxPoolWithArgmax,bn as Maximum,Sn as Mean,wn as Min,In as Minimum,vn as MirrorPad,ya as Mod,Fi as MomentumOptimizer,Sp as Multinomial,kn as Multiply,ws as Neg,Tn as NonMaxSuppressionV3,ba as NonMaxSuppressionV4,_n as NonMaxSuppressionV5,Nn as NotEqual,Lb as OP_SCOPE_SUFFIX,En as OneHot,Is as OnesLike,wr as Optimizer,ns as OptimizerConstructors,vs as Pack,$n as PadV2,kne as Pool,An as Pow,Rn as Prelu,Fn as Prod,Di as RMSPropOptimizer,wp as RaggedGather,Ip as RaggedRange,vp as RaggedTensorToTensor,ks as Range,_b as Rank,ai as Real,Jo as RealDiv,Dn as Reciprocal,Et as Reduction,On as Relu,Ln as Relu6,Ns as Reshape,Mn as ResizeBilinear,$m as ResizeBilinearGrad,Pn as ResizeNearestNeighbor,Em as ResizeNearestNeighborGrad,Bn as Reverse,es as RotateWithOffset,Ca as Round,Vn as Rsqrt,qs as SGDOptimizer,zn as ScatterNd,ii as SearchSorted,Ts as Select,Xi as Selu,Un as Sigmoid,Yi as Sign,Wn as Sin,Sa as Sinh,_s as Slice,qn as Softmax,Qi as Softplus,Es as SpaceToBatchND,ui as SparseFillEmptyRows,wa as SparseReshape,pi as SparseSegmentMean,ci as SparseSegmentSum,li as SparseToDense,$s as SplitV,Gn as Sqrt,mi as Square,Kn as SquaredDifference,Ds as Step,jn as StridedSlice,As as StringNGrams,di as StringSplit,fi as StringToHashBucketFast,Xn as Sub,Hn as Sum,Yn as Tan,Qn as Tanh,it as Tensor,st as TensorBuffer,to as Tile,Zn as TopK,Jn as Transform,ro as Transpose,kp as Unique,Rs as Unpack,Np as UnsortedSegmentSum,Nne as UpperBound,va as Variable,Ui as WebGPUBackend,Fs as ZerosLike,fo as _FusedMatMul,Yt as abs,f0 as acos,h0 as acosh,xe as add,g0 as addN,x0 as all,y0 as any,b0 as argMax,C0 as argMin,S0 as asin,w0 as asinh,I0 as atan,v0 as atan2,k0 as atanh,td as avgPool,_0 as avgPool3d,Oie as backend,S as backend_util,E0 as basicLSTMCell,wi as batchNorm,A0 as batchNorm2d,R0 as batchNorm3d,F0 as batchNorm4d,rd as batchToSpaceND,od as bincount,XG as booleanMaskAsync,D0 as broadcastArgs,Ii as broadcastTo,br as broadcast_util,Qv as browser,le as buffer,Ke as cast,O0 as ceil,P0 as clipByValue,Br as clone,Tr as complex,gt as concat,M0 as concat1d,L0 as concat2d,B0 as concat3d,V0 as concat4d,z0 as conv1d,vi as conv2d,W0 as conv2dTranspose,U0 as conv3d,H0 as conv3dTranspose,Dne as copyRegisteredKernels,q0 as cos,K0 as cosh,il as cosineWindow,j0 as cumprod,X0 as cumsum,Cr as customGrad,Y0 as denseBincount,eC as deprecationWarn,Q0 as depthToSpace,Bp as depthwiseConv2d,xK as deregisterOp,yi as device_util,Z0 as diag,J0 as dilation2d,vie as disableDeprecationWarnings,Dt as dispose,kie as disposeVariables,Ge as div,ek as divNoNan,tk as dot,aH as dropout,rk as einsum,ad as elu,Iie as enableDebugMode,wie as enableProdMode,xC as enclosingPowerOfTwo,cr as engine,O as env,sd as equal,ok as erf,ak as euclideanNorm,Co as exp,Fa as expandDims,ik as expm1,id as eye,zp as fft,Ws as fill,Fie as findBackend,Die as findBackendFactory,ud as floor,Jm as floorDiv,L$ as forceHalfFloat,yC as fused,pd as gather,nH as gatherND,Ym as gather_util,Aie as getBackend,Cb as getGradient,qc as getKernel,Am as getKernelsForBackend,Nee as getThreadsCount,yw as gpgpu_util,l4 as grad,m4 as grads,cu as greater,cd as greaterEqual,hu as ifft,Si as imag,uq as image,uH as inTopKAsync,Ea as io,Fd as irfft,uk as isFinite,pk as isInf,ck as isNaN,_r as keep,Lt as kernel_impls,ld as leakyRelu,lk as less,Vp as lessEqual,pq as linalg,mk as linspace,l6 as loadGraphModel,m6 as loadGraphModelSync,dk as localResponseNormalization,Da as log,md as log1p,fk as logSigmoid,hk as logSoftmax,hd as logSumExp,lu as logicalAnd,gd as logicalNot,xd as logicalOr,gk as logicalXor,cq as losses,xk as lowerBound,Xe as matMul,jv as math,Us as max,bd as maxPool,yk as maxPool3d,bk as maxPoolWithArgmax,Cd as maximum,mu as mean,Nie as memory,Ck as meshgrid,sl as min,Sd as minimum,Sk as mirrorPad,wk as mod,Ik as moments,QG as movingAverage,ae as mul,vk as multiRNNCell,kk as multinomial,yr as neg,CC as nextFrame,pu as norm,wd as notEqual,tl as oneHot,Gs as ones,Nk as onesLike,N as op,Tk as outerProduct,Hs as pad,_k as pad1d,Ek as pad2d,$k as pad3d,Ak as pad4d,Rk as pool,Ra as pow,vd as prelu,Gm as print,Fk as prod,Tie as profile,Dk as raggedGather,Ok as raggedRange,Pk as raggedTensorToTensor,Mk as rand,e1 as randomGamma,Ed as randomNormal,t1 as randomStandardNormal,$d as randomUniform,Ni as range,$ie as ready,$a as real,r1 as reciprocal,Ci as registerBackend,Ane as registerGradient,Ia as registerKernel,gK as registerOp,Ti as relu,Ad as relu6,Rie as removeBackend,z as reshape,no as reverse,o1 as reverse1d,n1 as reverse2d,s1 as reverse3d,a1 as reverse4d,Wp as rfft,Rd as round,i1 as rsqrt,be as scalar,JG as scatterND,rl as scatter_util,al as searchSorted,u1 as selu,p1 as separableConv2d,p0 as serialization,Eie as setBackend,Pie as setPlatform,kee as setThreadsCount,Iee as setWasmPath,vee as setWasmPaths,RS as setWebGLContext,c1 as setdiff1dAsync,Qp as shared,zs as sigmoid,l1 as sign,iq as signal,m1 as sin,d1 as sinh,He as slice,f1 as slice1d,h1 as slice2d,g1 as slice3d,x1 as slice4d,ut as slice_util,y1 as softmax,fd as softplus,Id as spaceToBatchND,lq as sparse,rH as sparseToDense,aq as spectral,Oa as split,$r as sqrt,Qt as square,Dd as squaredDifference,Up as squeeze,Sr as stack,Od as step,b1 as stridedSlice,mq as string,Ne as sub,et as sum,ka as sumOutType,C1 as tan,nl as tanh,nr as tensor,mr as tensor1d,_i as tensor2d,Xm as tensor3d,S1 as tensor4d,w1 as tensor5d,I1 as tensor6d,hv as tensor_util,d0 as test_util,Ee as tidy,ki as tile,_ie as time,v1 as topk,hMe as train,Mp as transpose,k1 as truncatedNormal,N1 as unique,Fne as unregisterGradient,Rne as unregisterKernel,T1 as unsortedSegmentSum,so as unstack,dt as upcastType,_1 as upperBound,y as util,d4 as valueAndGrad,f4 as valueAndGrads,E1 as variable,pC as variableGrads,gne as version,f6 as version_converter,xW as version_core,U6 as version_cpu,Tee as version_wasm,L8 as version_webgl,L9e as webgl,oc as webgl_util,nI as webgpu_util,os as where,Md as whereAsync,Vr as zeros,Ut as zerosLike}; diff --git a/dist/tfjs.version.js b/dist/tfjs.version.js index a6def486..5366c1a3 100644 --- a/dist/tfjs.version.js +++ b/dist/tfjs.version.js @@ -4,4 +4,35 @@ author: ' */ -var e="4.0.0";var s="4.0.0";var t="4.0.0";var n="4.0.0";var i="4.0.0";var r="0.0.1-alpha.14";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":i,"tfjs-backend-webgpu":r};export{h as version}; + +// node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/package.json +var version = "4.1.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/package.json +var version2 = "4.1.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-backend-cpu/package.json +var version3 = "4.1.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-backend-webgl/package.json +var version4 = "4.1.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-backend-wasm/package.json +var version5 = "4.1.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-webgpu@0.0.1-alpha.16_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-backend-webgpu/package.json +var version6 = "0.0.1-alpha.16"; + +// tfjs/tf-version.ts +var version7 = { + tfjs: version, + "tfjs-core": version, + "tfjs-converter": version2, + "tfjs-backend-cpu": version3, + "tfjs-backend-webgl": version4, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 +}; +export { + version7 as version +}; diff --git a/models/models.json b/models/models.json index c65a53e7..cdf3b9bf 100644 --- a/models/models.json +++ b/models/models.json @@ -43,7 +43,7 @@ "posenet": 5032780, "rvm": 3739355, "selfie": 212886, - "blazepose-detect": 5928804, + "blazepose-detector": 5928856, "anti-spoofing": 853098, "efficientpose-i-lite": 2269064, "efficientpose-ii-lite": 5651240, diff --git a/package.json b/package.json index 75693e1f..34bd4c2f 100644 --- a/package.json +++ b/package.json @@ -75,14 +75,14 @@ "@html-eslint/eslint-plugin": "^0.15.0", "@html-eslint/parser": "^0.15.0", "@microsoft/api-extractor": "^7.33.6", - "@tensorflow/tfjs-backend-cpu": "^4.0.0", - "@tensorflow/tfjs-backend-wasm": "^4.0.0", - "@tensorflow/tfjs-backend-webgl": "^4.0.0", - "@tensorflow/tfjs-backend-webgpu": "0.0.1-alpha.14", - "@tensorflow/tfjs-converter": "^4.0.0", - "@tensorflow/tfjs-core": "^4.0.0", - "@tensorflow/tfjs-node": "^4.0.0", - "@tensorflow/tfjs-node-gpu": "^4.0.0", + "@tensorflow/tfjs-backend-cpu": "^4.1.0", + "@tensorflow/tfjs-backend-wasm": "^4.1.0", + "@tensorflow/tfjs-backend-webgl": "^4.1.0", + "@tensorflow/tfjs-backend-webgpu": "0.0.1-alpha.16", + "@tensorflow/tfjs-converter": "^4.1.0", + "@tensorflow/tfjs-core": "^4.1.0", + "@tensorflow/tfjs-node": "^4.1.0", + "@tensorflow/tfjs-node-gpu": "^4.1.0", "@types/node": "^18.11.9", "@types/offscreencanvas": "^2019.7.0", "@typescript-eslint/eslint-plugin": "^5.43.0", @@ -92,7 +92,7 @@ "@vladmandic/tfjs": "github:vladmandic/tfjs", "canvas": "^2.10.2", "esbuild": "^0.15.14", - "eslint": "8.27.0", + "eslint": "8.28.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-html": "^7.1.0", "eslint-plugin-import": "^2.26.0", diff --git a/src/human.ts b/src/human.ts index ab4e29df..cc997706 100644 --- a/src/human.ts +++ b/src/human.ts @@ -286,7 +286,7 @@ export class Human { async load(userConfig?: Partial): Promise { this.state = 'load'; const timeStamp = now(); - const count = Object.values(this.models).filter((model) => model).length; + const count = Object.values(this.models.models).filter((model) => model).length; if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config; if (this.env.initial) { // print version info on first run and check for correct backend setup @@ -298,11 +298,11 @@ export class Human { } } - await this.models.load(); // actually loads models + await this.models.load(this); // actually loads models if (this.env.initial && this.config.debug) log('tf engine state:', this.tf.engine().state.numBytes, 'bytes', this.tf.engine().state.numTensors, 'tensors'); // print memory stats on first run this.env.initial = false; - const loaded = Object.values(this.models).filter((model) => model).length; + const loaded = Object.values(this.models.models).filter((model) => model).length; if (loaded !== count) { // number of loaded models changed this.models.validate(); // validate kernel ops used by model against current backend this.emit('load'); diff --git a/src/models.ts b/src/models.ts index 75005aa9..756fd722 100644 --- a/src/models.ts +++ b/src/models.ts @@ -87,8 +87,8 @@ export interface ModelStats { * - stats: live detailed model stats that can be checked during model load phase */ export class Models { - instance: Human; - models: Record; + private instance: Human; + models: Record = {}; constructor(currentInstance: Human) { this.models = {}; @@ -120,8 +120,9 @@ export class Models { for (const model of Object.keys(this.models)) this.models[model] = null; } - async load(): Promise { + async load(instance?: Human): Promise { if (env.initial) this.reset(); + if (instance) this.instance = instance; const m: Record> = {}; // face main models m.blazeface = (this.instance.config.face.enabled && !this.models.blazeface) ? blazeface.load(this.instance.config) : null; diff --git a/test/browser.sh b/test/browser.sh index f38e5051..630b8cd1 100755 --- a/test/browser.sh +++ b/test/browser.sh @@ -3,5 +3,5 @@ BROWSER="/mnt/c/Users/mandi/AppData/Local/Google/Chrome SxS/Application/chrome.exe" PARAMS="--enable-unsafe-gpu --allow-insecure-localhost --auto-open-devtools-for-tabs --unsafely-treat-insecure-origin-as-secure=https:/localhost:8001" -"$BROWSER" $PARAMS https://localhost:8001/test/test-browser-iife.html "$BROWSER" $PARAMS https://localhost:8001/test/test-browser-esm.html +"$BROWSER" $PARAMS https://localhost:8001/test/test-browser-iife.html diff --git a/test/build.log b/test/build.log index 1ed28767..f0ffb312 100644 --- a/test/build.log +++ b/test/build.log @@ -1,50 +1,943 @@ -2022-11-18 13:13:23 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-18 13:13:23 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} -2022-11-18 13:13:23 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2022-11-18 13:13:23 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.27.0"} -2022-11-18 13:13:23 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2022-11-18 13:13:23 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670136,"outputBytes":317438} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670140,"outputBytes":317442} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671088,"outputBytes":317553} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":669882,"outputBytes":316023} -2022-11-18 13:13:23 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1144900} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1814112,"outputBytes":1457337} -2022-11-18 13:13:23 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1814112,"outputBytes":1914669} -2022-11-18 13:13:27 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} -2022-11-18 13:13:29 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} -2022-11-18 13:13:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":2913} -2022-11-18 13:13:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} -2022-11-18 13:13:37 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":167,"errors":0,"warnings":0} -2022-11-18 13:13:37 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2022-11-18 13:13:37 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2022-11-18 13:13:37 INFO:  Done... -2022-11-18 13:13:37 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2022-11-18 13:13:37 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2022-11-18 13:13:37 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2022-11-18 13:13:37 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2022-11-18 13:13:37 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2022-11-18 13:13:38 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":195} -2022-11-18 13:13:38 STATE: Filter: {"input":"types/human.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.esm.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.node.d.ts"} -2022-11-18 13:13:38 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2022-11-18 13:13:38 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2022-11-18 13:13:38 STATE: Models {"folder":"./models","models":12} -2022-11-18 13:13:38 STATE: Models {"folder":"../human-models/models","models":43} -2022-11-18 13:13:38 STATE: Models {"folder":"../blazepose/model/","models":4} -2022-11-18 13:13:38 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2022-11-18 13:13:38 STATE: Models {"folder":"../efficientpose/models","models":3} -2022-11-18 13:13:38 STATE: Models {"folder":"../insightface/models","models":5} -2022-11-18 13:13:38 STATE: Models {"folder":"../movenet/models","models":3} -2022-11-18 13:13:38 STATE: Models {"folder":"../nanodet/models","models":4} -2022-11-18 13:13:39 STATE: Models: {"count":58,"totalSize":386543911} -2022-11-18 13:13:39 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-11-20 15:02:14 DATA:  Build {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-20 15:02:14 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-20 15:02:14 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-20 15:02:14 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.28.0"} +2022-11-20 15:02:14 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2022-11-20 15:02:14 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":361} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":569,"outputBytes":924} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":670136,"outputBytes":317438} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":577,"outputBytes":928} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":670140,"outputBytes":317442} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":665,"outputBytes":1876} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671088,"outputBytes":317553} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1375,"outputBytes":670} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":669882,"outputBytes":316023} +2022-11-20 15:02:14 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1375,"outputBytes":1138192} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807404,"outputBytes":1450588} +2022-11-20 15:02:14 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807404,"outputBytes":1893687} +2022-11-20 15:02:18 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} +2022-11-20 15:02:20 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":77,"generated":true} +2022-11-20 15:02:20 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":2913} +2022-11-20 15:02:20 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":9456} +2022-11-20 15:02:28 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":167,"errors":0,"warnings":0} +2022-11-20 15:02:28 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2022-11-20 15:02:28 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2022-11-20 15:02:28 INFO:  Done... +2022-11-20 15:02:28 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2022-11-20 15:02:28 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2022-11-20 15:02:28 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2022-11-20 15:02:28 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2022-11-20 15:02:28 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2022-11-20 15:02:29 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":204} +2022-11-20 15:02:29 STATE: Filter: {"input":"types/human.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.esm.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.node.d.ts"} +2022-11-20 15:02:29 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2022-11-20 15:02:29 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2022-11-20 15:02:29 STATE: Models {"folder":"./models","models":12} +2022-11-20 15:02:29 STATE: Models {"folder":"../human-models/models","models":43} +2022-11-20 15:02:29 STATE: Models {"folder":"../blazepose/model/","models":4} +2022-11-20 15:02:29 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2022-11-20 15:02:29 STATE: Models {"folder":"../efficientpose/models","models":3} +2022-11-20 15:02:29 STATE: Models {"folder":"../insightface/models","models":5} +2022-11-20 15:02:29 STATE: Models {"folder":"../movenet/models","models":3} +2022-11-20 15:02:29 STATE: Models {"folder":"../nanodet/models","models":4} +2022-11-20 15:02:30 STATE: Models: {"count":58,"totalSize":386778123} +2022-11-20 15:02:30 INFO:  Human Build complete... {"logFile":"test/build.log"} +2022-11-20 15:15:44 INFO:  @vladmandic/human version 3.0.0 +2022-11-20 15:15:44 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 +2022-11-20 15:15:44 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-20 15:15:44 INFO:  Environment: {"profile":"development","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-20 15:15:44 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.28.0"} +2022-11-20 15:15:44 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]} +2022-11-20 15:15:44 STATE: WebServer: {"ssl":false,"port":8000,"root":"."} +2022-11-20 15:15:44 STATE: WebServer: {"ssl":true,"port":8001,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"} +2022-11-20 15:15:44 STATE: Watch: {"locations":["src/**/*","tfjs/**/*","demo/**/*.ts"]} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671000,"outputBytes":504955} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671024,"outputBytes":504975} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671206,"outputBytes":505166} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670137,"outputBytes":507647} +2022-11-20 15:15:44 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807406,"outputBytes":1450592} +2022-11-20 15:15:44 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807406,"outputBytes":1893704} +2022-11-20 15:15:44 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:15:44 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:15:44 INFO:  Listening... +2022-11-20 15:15:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2042,"url":"/test/test-browser-iife.html","remote":"::1"} +2022-11-20 15:15:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450592,"url":"/dist/human.js","remote":"::1"} +2022-11-20 15:15:52 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4655,"url":"/test/test-browser-iife.js","remote":"::1"} +2022-11-20 15:15:52 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:15:52 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:17:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:17:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:17:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893704,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:17:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355211,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:17:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:19:49 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671091,"outputBytes":505046} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671115,"outputBytes":505066} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671297,"outputBytes":505257} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670228,"outputBytes":507738} +2022-11-20 15:19:49 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807497,"outputBytes":1450671} +2022-11-20 15:19:49 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807497,"outputBytes":1893795} +2022-11-20 15:19:49 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:19:49 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:19:55 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671091,"outputBytes":505046} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671115,"outputBytes":505066} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671297,"outputBytes":505257} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670228,"outputBytes":507738} +2022-11-20 15:19:55 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807497,"outputBytes":1450671} +2022-11-20 15:19:55 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807497,"outputBytes":1893795} +2022-11-20 15:19:55 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:19:55 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:20:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2042,"url":"/test/test-browser-iife.html","remote":"::1"} +2022-11-20 15:20:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450671,"url":"/dist/human.js","remote":"::1"} +2022-11-20 15:20:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4655,"url":"/test/test-browser-iife.js","remote":"::1"} +2022-11-20 15:20:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:20:11 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:20:11 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:20:11 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893795,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:20:11 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355366,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:20:12 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:21:18 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671091,"outputBytes":505046} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671115,"outputBytes":505066} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671297,"outputBytes":505257} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670228,"outputBytes":507738} +2022-11-20 15:21:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807497,"outputBytes":1450671} +2022-11-20 15:21:18 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807497,"outputBytes":1893795} +2022-11-20 15:21:19 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:21:19 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:21:26 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:21:26 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:21:26 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:21:26 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671093,"outputBytes":505048} +2022-11-20 15:21:26 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:21:26 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671117,"outputBytes":505068} +2022-11-20 15:21:27 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:21:27 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671299,"outputBytes":505259} +2022-11-20 15:21:27 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:21:27 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670230,"outputBytes":507740} +2022-11-20 15:21:27 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:21:27 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807499,"outputBytes":1450659} +2022-11-20 15:21:27 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807499,"outputBytes":1893797} +2022-11-20 15:21:27 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:21:27 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":301,"url":"/demo/typescript","redirect":"/demo/typescript/index.html","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":1953,"url":"/demo/typescript/index.html","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4207,"url":"/demo/typescript/index.js","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893797,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":9474,"url":"/demo/typescript/index.js.map","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355363,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/manifest+json","size":304,"url":"/demo/manifest.webmanifest","remote":"::1"} +2022-11-20 15:21:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/png","size":142790,"url":"/assets/icon.png","remote":"::1"} +2022-11-20 15:22:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:22:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:22:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893797,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:22:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355363,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:22:51 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:26:23 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671280,"outputBytes":505225} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671304,"outputBytes":505245} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671486,"outputBytes":505436} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670417,"outputBytes":507917} +2022-11-20 15:26:23 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807686,"outputBytes":1450775} +2022-11-20 15:26:23 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807686,"outputBytes":1893974} +2022-11-20 15:26:23 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:26:23 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893974,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355687,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:26:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:27:20 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671300,"outputBytes":505245} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671324,"outputBytes":505265} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671506,"outputBytes":505456} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670437,"outputBytes":507937} +2022-11-20 15:27:20 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807706,"outputBytes":1450794} +2022-11-20 15:27:20 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807706,"outputBytes":1893994} +2022-11-20 15:27:20 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:27:20 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893994,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355717,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:27:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:28:24 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671072,"outputBytes":505019} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671096,"outputBytes":505039} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671278,"outputBytes":505230} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670209,"outputBytes":507711} +2022-11-20 15:28:24 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807478,"outputBytes":1450649} +2022-11-20 15:28:24 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807478,"outputBytes":1893768} +2022-11-20 15:28:24 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:28:24 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:31:17 INFO:  Watch: {"event":"modify","input":"src/warmup.ts"} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671099,"outputBytes":505046} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671123,"outputBytes":505066} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671305,"outputBytes":505257} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670236,"outputBytes":507738} +2022-11-20 15:31:17 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807505,"outputBytes":1450671} +2022-11-20 15:31:17 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807505,"outputBytes":1893795} +2022-11-20 15:31:17 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:31:17 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:31:29 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671124,"outputBytes":505071} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671148,"outputBytes":505091} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671330,"outputBytes":505282} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670261,"outputBytes":507763} +2022-11-20 15:31:29 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807530,"outputBytes":1450691} +2022-11-20 15:31:29 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807530,"outputBytes":1893820} +2022-11-20 15:31:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:31:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893820,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355427,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:31:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:31:52 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671128,"outputBytes":505075} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671152,"outputBytes":505095} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671334,"outputBytes":505286} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670265,"outputBytes":507767} +2022-11-20 15:31:52 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807534,"outputBytes":1450695} +2022-11-20 15:31:52 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807534,"outputBytes":1893824} +2022-11-20 15:31:52 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:31:52 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:32:12 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671188,"outputBytes":505133} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671212,"outputBytes":505153} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671394,"outputBytes":505344} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670325,"outputBytes":507825} +2022-11-20 15:32:12 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807594,"outputBytes":1450717} +2022-11-20 15:32:12 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807594,"outputBytes":1893882} +2022-11-20 15:32:12 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:32:12 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:32:15 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:32:15 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:32:15 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:32:15 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671168,"outputBytes":505113} +2022-11-20 15:32:15 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:32:15 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671192,"outputBytes":505133} +2022-11-20 15:32:15 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:32:15 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671374,"outputBytes":505324} +2022-11-20 15:32:15 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:32:15 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670305,"outputBytes":507805} +2022-11-20 15:32:16 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:32:16 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807574,"outputBytes":1450698} +2022-11-20 15:32:16 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807574,"outputBytes":1893862} +2022-11-20 15:32:16 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:32:16 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893862,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355498,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:32:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:32:51 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671173,"outputBytes":505117} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671197,"outputBytes":505137} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671379,"outputBytes":505328} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670310,"outputBytes":507809} +2022-11-20 15:32:51 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807579,"outputBytes":1450701} +2022-11-20 15:32:51 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807579,"outputBytes":1893866} +2022-11-20 15:32:51 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:32:51 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:32:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:32:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:32:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893866,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:32:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355516,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:32:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:32:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:33:05 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:33:05 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450692} +2022-11-20 15:33:05 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:33:05 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:33:05 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:33:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:33:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:33:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893857,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:33:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355502,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:33:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:33:07 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:33:45 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:33:45 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:33:45 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:33:45 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:33:45 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:33:45 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:33:45 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:33:45 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:33:45 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:33:45 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:33:46 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:33:46 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450692} +2022-11-20 15:33:46 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:33:46 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:33:46 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893857,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355502,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:33:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:34:59 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:34:59 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:34:59 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:35:00 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:35:00 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:35:00 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:35:00 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450692} +2022-11-20 15:35:00 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:35:00 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:35:00 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:35:04 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:35:04 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:35:04 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:35:04 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:35:04 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:35:04 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:35:04 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:35:04 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:35:04 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:35:05 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:35:05 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:35:05 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450692} +2022-11-20 15:35:05 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:35:05 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:35:05 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:35:13 INFO:  Watch: {"event":"modify","input":"src/warmup.ts"} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:35:13 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671137,"outputBytes":505081} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:35:13 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671161,"outputBytes":505101} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:35:13 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671343,"outputBytes":505292} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:35:13 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670274,"outputBytes":507773} +2022-11-20 15:35:13 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:35:13 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807543,"outputBytes":1450670} +2022-11-20 15:35:14 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807543,"outputBytes":1893830} +2022-11-20 15:35:14 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:35:14 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:35:14 INFO:  Watch: {"event":"modify","input":"src/human.ts","skip":true} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893830,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355453,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:35:31 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:35:43 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671150,"outputBytes":505094} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671174,"outputBytes":505114} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671356,"outputBytes":505305} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670287,"outputBytes":507786} +2022-11-20 15:35:43 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807556,"outputBytes":1450682} +2022-11-20 15:35:43 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807556,"outputBytes":1893843} +2022-11-20 15:35:43 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:35:43 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:35:46 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:35:46 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:35:46 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893843,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:35:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355476,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:35:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:35:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:36:37 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:36:37 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450696} +2022-11-20 15:36:37 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:36:37 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:36:37 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:37:13 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:37:13 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450696} +2022-11-20 15:37:13 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:37:13 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:37:13 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893857,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355500,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:37:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:39:16 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671164,"outputBytes":505108} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671188,"outputBytes":505128} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671370,"outputBytes":505319} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670301,"outputBytes":507800} +2022-11-20 15:39:16 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807570,"outputBytes":1450696} +2022-11-20 15:39:16 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807570,"outputBytes":1893857} +2022-11-20 15:39:16 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:39:16 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893857,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355500,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:39:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:41:07 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671190,"outputBytes":505134} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671214,"outputBytes":505154} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671396,"outputBytes":505345} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670327,"outputBytes":507826} +2022-11-20 15:41:07 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807596,"outputBytes":1450717} +2022-11-20 15:41:07 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807596,"outputBytes":1893883} +2022-11-20 15:41:07 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:41:07 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893883,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355548,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:41:10 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:41:12 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:41:12 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:41:12 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893883,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:41:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355548,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:41:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:41:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:41:53 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671272,"outputBytes":505216} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671296,"outputBytes":505236} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671478,"outputBytes":505427} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670409,"outputBytes":507908} +2022-11-20 15:41:53 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807678,"outputBytes":1450784} +2022-11-20 15:41:53 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807678,"outputBytes":1893965} +2022-11-20 15:41:53 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:41:53 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:41:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:41:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:41:54 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893965,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:41:55 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355696,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:41:55 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:41:55 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893965,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355696,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:41:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:43:34 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671331,"outputBytes":505275} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671355,"outputBytes":505295} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671537,"outputBytes":505486} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670468,"outputBytes":507967} +2022-11-20 15:43:34 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807737,"outputBytes":1450833} +2022-11-20 15:43:34 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807737,"outputBytes":1894024} +2022-11-20 15:43:34 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:43:34 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894024,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355799,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:43:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:44:43 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671344,"outputBytes":505288} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671368,"outputBytes":505308} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671550,"outputBytes":505499} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670481,"outputBytes":507980} +2022-11-20 15:44:43 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807750,"outputBytes":1450845} +2022-11-20 15:44:43 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807750,"outputBytes":1894037} +2022-11-20 15:44:43 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:44:43 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894037,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355821,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:44:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:44:52 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671387,"outputBytes":505331} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671411,"outputBytes":505351} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671593,"outputBytes":505542} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670524,"outputBytes":508023} +2022-11-20 15:44:52 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807793,"outputBytes":1450882} +2022-11-20 15:44:52 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807793,"outputBytes":1894080} +2022-11-20 15:44:52 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:44:52 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894080,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355896,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:44:53 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:45:12 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671442,"outputBytes":505386} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671466,"outputBytes":505406} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671648,"outputBytes":505597} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670579,"outputBytes":508078} +2022-11-20 15:45:12 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807848,"outputBytes":1450930} +2022-11-20 15:45:12 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807848,"outputBytes":1894135} +2022-11-20 15:45:12 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:45:12 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8655,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894135,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355993,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:45:14 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8694,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894135,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355993,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:46:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8735,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894135,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355993,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:46:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:47:38 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671400,"outputBytes":505344} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671424,"outputBytes":505364} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671606,"outputBytes":505555} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670537,"outputBytes":508036} +2022-11-20 15:47:38 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807806,"outputBytes":1450894} +2022-11-20 15:47:38 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807806,"outputBytes":1894093} +2022-11-20 15:47:38 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:47:38 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:47:46 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:47:46 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671400,"outputBytes":505344} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:47:46 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671424,"outputBytes":505364} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:47:46 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671606,"outputBytes":505555} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:47:46 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670537,"outputBytes":508036} +2022-11-20 15:47:46 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:47:47 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807806,"outputBytes":1450894} +2022-11-20 15:47:47 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807806,"outputBytes":1894093} +2022-11-20 15:47:47 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:47:47 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:48:11 INFO:  Watch: {"event":"modify","input":"src/human.ts"} +2022-11-20 15:48:11 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:48:11 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:48:11 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671357,"outputBytes":505301} +2022-11-20 15:48:11 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:48:12 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671381,"outputBytes":505321} +2022-11-20 15:48:12 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:48:12 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671563,"outputBytes":505512} +2022-11-20 15:48:12 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:48:12 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670494,"outputBytes":507993} +2022-11-20 15:48:12 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:48:12 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807763,"outputBytes":1450857} +2022-11-20 15:48:12 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807763,"outputBytes":1894050} +2022-11-20 15:48:12 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6135,"outputBytes":4207} +2022-11-20 15:48:12 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8735,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894050,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355845,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:48:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:49:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:49:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8714,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:49:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894050,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:49:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355845,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:49:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:49:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:49:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8728,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894050,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355845,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:49:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:49:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:55:24 INFO:  Watch: {"event":"modify","input":"demo/typescript/index.ts"} +2022-11-20 15:55:24 INFO:  Watch: {"event":"modify","input":"src/models.ts","skip":true} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:55:24 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671325,"outputBytes":505269} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:55:24 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671349,"outputBytes":505289} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:55:24 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671531,"outputBytes":505480} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:55:24 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670462,"outputBytes":507961} +2022-11-20 15:55:24 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:55:24 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807731,"outputBytes":1450830} +2022-11-20 15:55:25 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807731,"outputBytes":1894018} +2022-11-20 15:55:25 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6088,"outputBytes":4160} +2022-11-20 15:55:25 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:55:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8611,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1894018,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355791,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:55:27 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:56:39 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671249,"outputBytes":505193} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671273,"outputBytes":505213} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671455,"outputBytes":505404} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670386,"outputBytes":507885} +2022-11-20 15:56:39 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807655,"outputBytes":1450769} +2022-11-20 15:56:39 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807655,"outputBytes":1893942} +2022-11-20 15:56:39 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6088,"outputBytes":4160} +2022-11-20 15:56:39 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8611,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893942,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355649,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:56:45 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:56:46 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:57:19 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671249,"outputBytes":505193} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671273,"outputBytes":505213} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671455,"outputBytes":505404} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670386,"outputBytes":507885} +2022-11-20 15:57:19 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807655,"outputBytes":1450769} +2022-11-20 15:57:19 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807655,"outputBytes":1893942} +2022-11-20 15:57:19 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6088,"outputBytes":4160} +2022-11-20 15:57:19 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 15:57:19 INFO:  Watch: {"event":"modify","input":"src/human.ts","skip":true} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8618,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893942,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355649,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:58:47 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:58:48 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:58:48 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/json","size":201673,"url":"/models/centernet.json","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":4030290,"url":"/models/centernet.bin","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:58:49 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8624,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893942,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355649,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 15:59:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 15:59:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450769,"url":"/dist/human.js","remote":"::1"} +2022-11-20 15:59:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:18 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:18 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 15:59:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 15:59:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450769,"url":"/dist/human.js","remote":"::1"} +2022-11-20 15:59:25 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:38 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:38 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:38 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:42 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:42 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 15:59:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 15:59:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 15:59:43 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450769,"url":"/dist/human.js","remote":"::1"} +2022-11-20 15:59:46 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:00 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:00 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:01 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:00:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:00:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 16:00:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450769,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:00:08 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:00:13 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:00:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:00:22 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:02:04 INFO:  Watch: {"event":"modify","input":"src/models.ts"} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671091,"outputBytes":505035} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671115,"outputBytes":505055} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671297,"outputBytes":505246} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670228,"outputBytes":507727} +2022-11-20 16:02:04 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807497,"outputBytes":1450635} +2022-11-20 16:02:04 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807497,"outputBytes":1893784} +2022-11-20 16:02:04 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6088,"outputBytes":4160} +2022-11-20 16:02:04 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 16:11:02 INFO:  @vladmandic/human version 3.0.0 +2022-11-20 16:11:02 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 +2022-11-20 16:11:02 INFO:  Application: {"name":"@vladmandic/human","version":"3.0.0"} +2022-11-20 16:11:02 INFO:  Environment: {"profile":"development","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2022-11-20 16:11:02 INFO:  Toolchain: {"build":"0.7.14","esbuild":"0.15.14","typescript":"4.9.3","typedoc":"0.23.21","eslint":"8.28.0"} +2022-11-20 16:11:02 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]} +2022-11-20 16:11:02 STATE: WebServer: {"ssl":false,"port":8000,"root":"."} +2022-11-20 16:11:02 STATE: WebServer: {"ssl":true,"port":8001,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"} +2022-11-20 16:11:02 STATE: Watch: {"locations":["src/**/*","tfjs/**/*","demo/**/*.ts"]} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":1357} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1565,"outputBytes":1786} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":671091,"outputBytes":505035} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1573,"outputBytes":1810} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":671115,"outputBytes":505055} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1661,"outputBytes":1992} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":671297,"outputBytes":505246} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":2371,"outputBytes":923} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":670228,"outputBytes":507727} +2022-11-20 16:11:02 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":2371,"outputBytes":1138192} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1807497,"outputBytes":1450635} +2022-11-20 16:11:02 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1807497,"outputBytes":1893784} +2022-11-20 16:11:02 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6088,"outputBytes":4160} +2022-11-20 16:11:02 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17572,"outputBytes":13919} +2022-11-20 16:11:02 INFO:  Listening... +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2010,"url":"/test/test-browser-esm.html","remote":"::1"} +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":8585,"url":"/test/test-browser-esm.js","remote":"::1"} +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1893784,"url":"/dist/human.esm.js","remote":"::1"} +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"application/octet-stream","size":3355368,"url":"/dist/human.esm.js.map","remote":"::1"} +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 16:11:03 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 16:11:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:04 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 16:11:05 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:11:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:16 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:17 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:11:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 16:11:21 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:11:24 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:36 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:40 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:40 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:11:40 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 16:11:41 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:11:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:58 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:11:59 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:12:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:12:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:12:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:12:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1070,"url":"/test/test-browser-worker.js","remote":"::1"} +2022-11-20 16:12:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:12:06 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:12:11 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:12:15 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:12:20 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":8596,"url":"/samples/in/ai-face.jpg","remote":"::1"} +2022-11-20 16:13:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2042,"url":"/test/test-browser-iife.html","remote":"::1"} +2022-11-20 16:13:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:13:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4573,"url":"/test/test-browser-iife.js","remote":"::1"} +2022-11-20 16:13:02 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 16:13:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2042,"url":"/test/test-browser-iife.html","remote":"::1"} +2022-11-20 16:13:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:13:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4580,"url":"/test/test-browser-iife.js","remote":"::1"} +2022-11-20 16:13:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 16:13:26 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 16:13:32 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/html","size":2042,"url":"/test/test-browser-iife.html","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":1450635,"url":"/dist/human.js","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"text/javascript","size":4583,"url":"/test/test-browser-iife.js","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:13:33 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:13:44 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} +2022-11-20 16:13:56 DATA:  HTTPS: {"method":"GET","ver":"2.0","status":200,"mime":"image/jpeg","size":32320,"url":"/samples/in/ai-body.jpg","remote":"::1"} diff --git a/test/test-browser-esm.js b/test/test-browser-esm.js index a5ec5ea2..a49a9174 100644 --- a/test/test-browser-esm.js +++ b/test/test-browser-esm.js @@ -65,20 +65,19 @@ async function events(event) { async function testDefault(title, testConfig = {}) { const t0 = human.now(); let res; - for (const model of Object.keys(human.models)) { // unload models - if (human.models[model]) human.models[model] = null; + for (const model of Object.keys(human.models.models)) { // unload models + if (human.models.models[model]) human.models.models[model] = null; } human.reset(); res = human.validate(testConfig); // validate if (res && res.length > 0) log(' invalid configuration', res); log(`test ${title}/${human.tf.getBackend()}`); await human.load(); - const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) })); - log(' models', models); + log(' models', human.models.loaded()); const ops = await human.models.validate(); if (ops && ops.length > 0) log(' missing ops', ops); const img = await image('../../samples/in/ai-body.jpg'); - const input = await human.image(img); // process image + const input = await human.image(img, true); // process image draw(input.canvas); res = await human.warmup({ warmup: 'face' }); // warmup draw(res.canvas); @@ -105,7 +104,7 @@ async function testMatch() { human.tf.dispose(input1.tensor, input2.tensor); const desc1 = res1?.face?.[0]?.embedding; const desc2 = res2?.face?.[0]?.embedding; - const similarity = await human.similarity(desc1, desc2); + const similarity = await human.match.similarity(desc1, desc2); const descArray = []; for (let i = 0; i < 100; i++) descArray.push(desc2); const match = await human.match.find(desc1, descArray); diff --git a/test/test-browser-iife.js b/test/test-browser-iife.js index 106a8d9a..12e62ddd 100644 --- a/test/test-browser-iife.js +++ b/test/test-browser-iife.js @@ -60,17 +60,16 @@ async function events(event) { async function testDefault(title, testConfig = {}) { const t0 = human.now(); let res; - for (const model of Object.keys(human.models)) { // unload models - if (human.models[model]) human.models[model] = null; + for (const model of Object.keys(human.models.models)) { // unload models + if (human.models.models[model]) human.models.models[model] = null; } human.reset(); res = human.validate(testConfig); // validate if (res && res.length > 0) log(' invalid configuration', res); log(`test ${title}/${human.tf.getBackend()}`, human.config); await human.load(); - const models = Object.keys(human.models).map((model) => ({ name: model, loaded: (human.models[model] !== null) })); - log(' models', models); - const ops = await human.check(); + log(' models', human.models.loaded()); + const ops = await human.models.validate(); if (ops && ops.length > 0) log(' missing ops', ops); const img = await image('../../samples/in/ai-body.jpg'); const input = await human.image(img, true); // process image diff --git a/test/test-node-main.js b/test/test-node-main.js index 6f718311..57405a93 100644 --- a/test/test-node-main.js +++ b/test/test-node-main.js @@ -89,10 +89,10 @@ async function testInstance(human) { } log('state', 'tensors', human.tf.memory().numTensors); - if (human.models) { + if (human.models.models) { log('state', 'passed: load models'); - const keys = Object.keys(human.models); - const loaded = keys.filter((model) => human.models[model]); + const keys = Object.keys(human.models.models); + const loaded = human.models.loaded(); log('state', ' result: defined models:', keys.length, 'loaded models:', loaded.length); return true; } @@ -392,12 +392,12 @@ async function test(Human, inputConfig) { res = await testDetect(human, 'samples/in/ai-body.jpg', 'object'); if (!res || res.object?.length < 1 || res.object[0]?.label !== 'person') log('error', 'failed: centernet', res.object); else log('state', 'passed: centernet'); - human.models.centernet = null; + human.models.models.centernet = null; config.object = { enabled: true, modelPath: 'https://vladmandic.github.io/human-models/models/nanodet.json' }; res = await testDetect(human, 'samples/in/ai-body.jpg', 'object'); if (!res || res.object?.length < 1 || res.object[0]?.label !== 'person') log('error', 'failed: nanodet', res.object); else log('state', 'passed: nanodet'); - human.models.nanodet = null; + human.models.models.nanodet = null; config.object.enabled = false; // test sensitive config @@ -480,20 +480,20 @@ async function test(Human, inputConfig) { res = await testDetect(human, 'samples/in/ai-face.jpg', 'face embeddings'); if (!res || !res.face || !res.face[0] || res.face[0]?.embedding?.length !== 512) log('error', 'failed: insightface', { embedding: res.face?.[0]?.embedding?.length }); else log('state', 'passed: insightface', { embedding: res.face?.[0]?.embedding?.length }); - human.models.mobilefacenet = null; + human.models.models.mobilefacenet = null; config.face.mobilefacenet = { enabled: false }; - human.models.insightface = null; + human.models.models.insightface = null; config.face.insightface = { enabled: false }; // test face attention log('info', 'test face attention'); - human.models.facemesh = null; + human.models.models.facemesh = null; config.softwareKernels = true; config.face.attention = { enabled: true, modelPath: 'https://vladmandic.github.io/human-models/models/facemesh-attention.json' }; res = await testDetect(human, 'samples/in/ai-face.jpg', 'face attention'); if (!res || !res.face[0] || res.face[0].mesh.length !== 478 || Object.keys(res.face[0].annotations).length !== 36) log('error', 'failed: face attention', { mesh: res.face?.[0]?.mesh?.length, annotations: Object.keys(res.face?.[0]?.annotations | {}).length }); else log('state', 'passed: face attention'); - human.models.facemesh = null; // unload model + human.models.models.facemesh = null; // unload model config.face.attention = { enabled: false }; // test detectors only diff --git a/test/test.log b/test/test.log index e2c8659c..13aa4c02 100644 --- a/test/test.log +++ b/test/test.log @@ -1,656 +1,997 @@ -2022-11-18 11:54:19 INFO:  @vladmandic/human version 3.0.0 -2022-11-18 11:54:19 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 -2022-11-18 11:54:19 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}] -2022-11-18 11:54:19 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start -2022-11-18 11:54:20 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start -2022-11-18 11:54:21 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start -2022-11-18 11:54:22 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start -2022-11-18 11:54:22 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start -2022-11-18 11:54:23 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start -2022-11-18 11:54:25 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start -2022-11-18 11:54:37 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start -2022-11-18 11:54:38 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] -2022-11-18 11:54:38 INFO:  -2022-11-18 11:54:38 INFO:  test-node-load.js start -2022-11-18 11:54:38 INFO:  test-node-load.js load start {"human":"3.0.0","tf":"4.0.0","progress":0} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":1,"progress":0} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":22,"progress":0.05339166087267679} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":57,"progress":0.3299591712723044} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":79,"progress":0.7259096583739463} -2022-11-18 11:54:38 STATE: test-node-load.js passed {"progress":1} -2022-11-18 11:54:38 INFO:  test-node-load.js load final {"progress":1} -2022-11-18 11:54:38 DATA:  test-node-load.js load interval {"elapsed":434,"progress":1} -2022-11-18 11:54:38 INFO:  -2022-11-18 11:54:38 INFO:  test-node-gear.js start -2022-11-18 11:54:39 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] -2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg -2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92} -2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg -2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}]} -2022-11-18 11:54:40 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg -2022-11-18 11:54:40 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99} -2022-11-18 11:54:40 INFO:  -2022-11-18 11:54:40 INFO:  test-backend-node.js start -2022-11-18 11:54:41 INFO:  test-backend-node.js test: configuration validation -2022-11-18 11:54:41 STATE: test-backend-node.js passed: configuration default validation [] -2022-11-18 11:54:41 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-18 11:54:41 INFO:  test-backend-node.js test: model load -2022-11-18 11:54:41 STATE: test-backend-node.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-18 11:54:41 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-18 11:54:41 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-18 11:54:41 INFO:  test-backend-node.js test: warmup -2022-11-18 11:54:41 STATE: test-backend-node.js passed: create human -2022-11-18 11:54:41 INFO:  test-backend-node.js human version: 3.0.0 -2022-11-18 11:54:41 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-18 11:54:41 INFO:  test-backend-node.js tfjs version: 4.0.0 -2022-11-18 11:54:41 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-11-18 11:54:41 STATE: test-backend-node.js passed: set backend: tensorflow -2022-11-18 11:54:41 STATE: test-backend-node.js tensors 1785 -2022-11-18 11:54:41 STATE: test-backend-node.js passed: load models -2022-11-18 11:54:41 STATE: test-backend-node.js result: defined models: 2 loaded models: 2 -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: none default -2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: null -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup none result match -2022-11-18 11:54:41 STATE: test-backend-node.js event: image -2022-11-18 11:54:41 STATE: test-backend-node.js event: detect -2022-11-18 11:54:41 STATE: test-backend-node.js event: warmup -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: face default -2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: 403 -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup face result match -2022-11-18 11:54:41 STATE: test-backend-node.js event: image -2022-11-18 11:54:41 STATE: test-backend-node.js event: detect -2022-11-18 11:54:41 STATE: test-backend-node.js event: warmup -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup: body default -2022-11-18 11:54:41 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:41 DATA:  test-backend-node.js result: performance: load: null total: 326 -2022-11-18 11:54:41 STATE: test-backend-node.js passed: warmup body result match -2022-11-18 11:54:41 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-18 11:54:41 INFO:  test-backend-node.js test: details verification -2022-11-18 11:54:41 STATE: test-backend-node.js start default -2022-11-18 11:54:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:42 STATE: test-backend-node.js event: image -2022-11-18 11:54:42 STATE: test-backend-node.js event: detect -2022-11-18 11:54:42 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default -2022-11-18 11:54:42 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:42 DATA:  test-backend-node.js result: performance: load: null total: 308 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face length 1 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face score 1 0.93 1 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face arrays 4 478 1024 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details face liveness 0.83 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details body length 1 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details body 0.92 17 6 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand length 1 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand 0.51 0.73 point -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details hand arrays 21 5 7 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details gesture length 7 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details object length 1 -2022-11-18 11:54:42 STATE: test-backend-node.js passed: details object 0.72 person -2022-11-18 11:54:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-11-18 11:54:42 STATE: test-backend-node.js event: image -2022-11-18 11:54:42 STATE: test-backend-node.js event: detect -2022-11-18 11:54:42 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-18 11:54:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-11-18 11:54:43 STATE: test-backend-node.js event: image -2022-11-18 11:54:43 STATE: test-backend-node.js event: detect -2022-11-18 11:54:43 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-18 11:54:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:43 STATE: test-backend-node.js event: image -2022-11-18 11:54:43 STATE: test-backend-node.js event: detect -2022-11-18 11:54:43 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-18 11:54:44 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:44 STATE: test-backend-node.js event: image -2022-11-18 11:54:44 STATE: test-backend-node.js event: detect -2022-11-18 11:54:44 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-18 11:54:44 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-18 11:54:44 STATE: test-backend-node.js event: image -2022-11-18 11:54:44 STATE: test-backend-node.js event: detect -2022-11-18 11:54:44 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-18 11:54:44 INFO:  test-backend-node.js test default -2022-11-18 11:54:44 STATE: test-backend-node.js start async -2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:45 STATE: test-backend-node.js event: image -2022-11-18 11:54:45 STATE: test-backend-node.js event: detect -2022-11-18 11:54:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async -2022-11-18 11:54:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:45 DATA:  test-backend-node.js result: performance: load: null total: 294 -2022-11-18 11:54:45 STATE: test-backend-node.js passed: default result face match 1 female 0.97 -2022-11-18 11:54:45 INFO:  test-backend-node.js test sync -2022-11-18 11:54:45 STATE: test-backend-node.js start sync -2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:45 STATE: test-backend-node.js event: image -2022-11-18 11:54:45 STATE: test-backend-node.js event: detect -2022-11-18 11:54:45 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync -2022-11-18 11:54:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:45 DATA:  test-backend-node.js result: performance: load: null total: 288 -2022-11-18 11:54:45 STATE: test-backend-node.js passed: default sync 1 female 0.97 -2022-11-18 11:54:45 INFO:  test-backend-node.js test: image process -2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:54:45 STATE: test-backend-node.js passed: image input null [1,256,256,3] -2022-11-18 11:54:45 INFO:  test-backend-node.js test: image null -2022-11-18 11:54:45 STATE: test-backend-node.js passed: invalid input could not convert input to tensor -2022-11-18 11:54:45 INFO:  test-backend-node.js test face similarity -2022-11-18 11:54:45 STATE: test-backend-node.js start face similarity -2022-11-18 11:54:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:54:45 STATE: test-backend-node.js event: image -2022-11-18 11:54:46 STATE: test-backend-node.js event: detect -2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 284 -2022-11-18 11:54:46 STATE: test-backend-node.js start face similarity -2022-11-18 11:54:46 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:46 STATE: test-backend-node.js event: image -2022-11-18 11:54:46 STATE: test-backend-node.js event: detect -2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 288 -2022-11-18 11:54:46 STATE: test-backend-node.js start face similarity -2022-11-18 11:54:46 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2022-11-18 11:54:46 STATE: test-backend-node.js event: image -2022-11-18 11:54:46 STATE: test-backend-node.js event: detect -2022-11-18 11:54:46 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-18 11:54:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-18 11:54:46 DATA:  test-backend-node.js result: performance: load: null total: 262 -2022-11-18 11:54:46 STATE: test-backend-node.js passed: face descriptor -2022-11-18 11:54:46 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} -2022-11-18 11:54:46 INFO:  test-backend-node.js test object -2022-11-18 11:54:46 STATE: test-backend-node.js start object -2022-11-18 11:54:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:47 STATE: test-backend-node.js event: image -2022-11-18 11:54:47 STATE: test-backend-node.js event: detect -2022-11-18 11:54:47 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:54:47 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:47 DATA:  test-backend-node.js result: performance: load: null total: 298 -2022-11-18 11:54:47 STATE: test-backend-node.js passed: centernet -2022-11-18 11:54:47 STATE: test-backend-node.js start object -2022-11-18 11:54:48 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:48 STATE: test-backend-node.js event: image -2022-11-18 11:54:48 STATE: test-backend-node.js event: detect -2022-11-18 11:54:48 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:54:48 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:48 DATA:  test-backend-node.js result: performance: load: null total: 291 -2022-11-18 11:54:48 STATE: test-backend-node.js passed: nanodet -2022-11-18 11:54:48 INFO:  test-backend-node.js test sensitive -2022-11-18 11:54:48 STATE: test-backend-node.js start sensitive -2022-11-18 11:54:49 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:49 STATE: test-backend-node.js event: image -2022-11-18 11:54:49 STATE: test-backend-node.js event: detect -2022-11-18 11:54:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-18 11:54:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:54:49 DATA:  test-backend-node.js result: performance: load: null total: 261 -2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive result match -2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive face result match -2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive body result match -2022-11-18 11:54:49 STATE: test-backend-node.js passed: sensitive hand result match -2022-11-18 11:54:49 INFO:  test-backend-node.js test body -2022-11-18 11:54:49 STATE: test-backend-node.js start blazepose -2022-11-18 11:54:51 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:51 STATE: test-backend-node.js event: image -2022-11-18 11:54:51 STATE: test-backend-node.js event: detect -2022-11-18 11:54:51 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-18 11:54:51 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-18 11:54:51 DATA:  test-backend-node.js result: performance: load: null total: 333 -2022-11-18 11:54:51 STATE: test-backend-node.js passed: blazepose -2022-11-18 11:54:51 STATE: test-backend-node.js start efficientpose -2022-11-18 11:54:52 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:52 STATE: test-backend-node.js event: image -2022-11-18 11:54:52 STATE: test-backend-node.js event: detect -2022-11-18 11:54:52 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-18 11:54:52 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-18 11:54:52 DATA:  test-backend-node.js result: performance: load: null total: 300 -2022-11-18 11:54:52 STATE: test-backend-node.js passed: efficientpose -2022-11-18 11:54:52 STATE: test-backend-node.js start posenet -2022-11-18 11:54:53 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:53 STATE: test-backend-node.js event: image -2022-11-18 11:54:53 STATE: test-backend-node.js event: detect -2022-11-18 11:54:53 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-18 11:54:53 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-18 11:54:53 DATA:  test-backend-node.js result: performance: load: null total: 245 -2022-11-18 11:54:53 STATE: test-backend-node.js passed: posenet -2022-11-18 11:54:53 STATE: test-backend-node.js start movenet -2022-11-18 11:54:54 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2022-11-18 11:54:54 STATE: test-backend-node.js event: image -2022-11-18 11:54:54 STATE: test-backend-node.js event: detect -2022-11-18 11:54:54 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-18 11:54:54 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:54:54 DATA:  test-backend-node.js result: performance: load: null total: 251 -2022-11-18 11:54:54 STATE: test-backend-node.js passed: movenet -2022-11-18 11:54:54 INFO:  test-backend-node.js test face matching -2022-11-18 11:54:54 STATE: test-backend-node.js passed: face database 40 -2022-11-18 11:54:54 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} -2022-11-18 11:54:54 INFO:  test-backend-node.js test face similarity alternative -2022-11-18 11:54:54 STATE: test-backend-node.js start face embeddings -2022-11-18 11:54:54 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:54:54 STATE: test-backend-node.js event: image -2022-11-18 11:54:55 ERROR: test-backend-node.js failed: testDetect face embeddings -2022-11-18 11:54:55 ERROR: test-backend-node.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node.js:121:37595"," at new Promise ()"," at B5 (/home/vlado/dev/human/dist/human.node.js:121:37364)"," at V5 (/home/vlado/dev/human/dist/human.node.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node.js:840:8294"]} -2022-11-18 11:54:55 INFO:  -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js start -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: configuration validation -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: configuration default validation [] -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: model load -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js test: warmup -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: create human -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js human version: 3.0.0 -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js tfjs version: 4.0.0 -2022-11-18 11:54:55 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: set backend: tensorflow -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js tensors 1785 -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: load models -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js result: defined models: 2 loaded models: 2 -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: warmup: none default -2022-11-18 11:54:55 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-18 11:54:55 DATA:  test-backend-node-gpu.js result: performance: load: null total: null -2022-11-18 11:54:55 STATE: test-backend-node-gpu.js passed: warmup none result match -2022-11-18 11:54:56 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: warmup -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup: face default -2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 3308 -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup face result match -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: warmup -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup: body default -2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:54:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 174 -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: warmup body result match -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-18 11:54:59 INFO:  test-backend-node-gpu.js test: details verification -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js start default -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:54:59 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2022-11-18 11:55:00 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:00 DATA:  test-backend-node-gpu.js result: performance: load: null total: 154 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face length 1 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details body length 1 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand length 1 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details gesture length 7 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details object length 1 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: details object 0.72 person -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:00 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-18 11:55:01 INFO:  test-backend-node-gpu.js test default -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js start async -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:01 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 144 -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 -2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test sync -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start sync -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 140 -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 -2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test: image process -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] -2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test: image null -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor -2022-11-18 11:55:02 INFO:  test-backend-node-gpu.js test face similarity -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 133 -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:02 DATA:  test-backend-node-gpu.js result: performance: load: null total: 133 -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js start face similarity -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} -2022-11-18 11:55:02 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 117 -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: face descriptor -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.4475002983522097,0.5570879556505012],"descriptors":[1024,1024,1024]} -2022-11-18 11:55:03 INFO:  test-backend-node-gpu.js test object -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js start object -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 130 -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js passed: centernet -2022-11-18 11:55:03 STATE: test-backend-node-gpu.js start object -2022-11-18 11:55:04 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:04 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 523 -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: nanodet -2022-11-18 11:55:05 INFO:  test-backend-node-gpu.js test sensitive -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js start sensitive -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:55:05 DATA:  test-backend-node-gpu.js result: performance: load: null total: 124 -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive result match -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive face result match -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive body result match -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js passed: sensitive hand result match -2022-11-18 11:55:05 INFO:  test-backend-node-gpu.js test body -2022-11-18 11:55:05 STATE: test-backend-node-gpu.js start blazepose -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-18 11:55:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-18 11:55:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 230 -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: blazepose -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js start efficientpose -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:07 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:08 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:08 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-18 11:55:08 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-18 11:55:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1013 -2022-11-18 11:55:08 STATE: test-backend-node-gpu.js passed: efficientpose -2022-11-18 11:55:08 STATE: test-backend-node-gpu.js start posenet -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 132 -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: posenet -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js start movenet -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js event: detect -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:55:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 93 -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: movenet -2022-11-18 11:55:09 INFO:  test-backend-node-gpu.js test face matching -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: face database 40 -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7829338043932047}} {"second":{"index":4,"similarity":0.5002928781584631}} {"third":{"index":4,"similarity":0.5402934771672516}} -2022-11-18 11:55:09 INFO:  test-backend-node-gpu.js test face similarity alternative -2022-11-18 11:55:09 STATE: test-backend-node-gpu.js start face embeddings -2022-11-18 11:55:10 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2022-11-18 11:55:10 STATE: test-backend-node-gpu.js event: image -2022-11-18 11:55:10 ERROR: test-backend-node-gpu.js failed: testDetect face embeddings -2022-11-18 11:55:10 ERROR: test-backend-node-gpu.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-gpu.js:121:37595"," at new Promise ()"," at B5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:37364)"," at V5 (/home/vlado/dev/human/dist/human.node-gpu.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-gpu.js:840:8294"]} -2022-11-18 11:55:10 INFO:  -2022-11-18 11:55:10 INFO:  test-backend-node-wasm.js start -2022-11-18 11:55:10 DATA:  test-backend-node-wasm.js stdout: 2022-11-18 11:55:10 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.0.0/dist/ -2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ -2022-11-18 11:55:11 INFO:  test-backend-node-wasm.js test: configuration validation -2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: configuration default validation [] -2022-11-18 11:55:11 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2022-11-18 11:55:11 INFO:  test-backend-node-wasm.js test: model load -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js test: warmup -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: create human -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js human version: 3.0.0 -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v19.1.0 -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js tfjs version: 4.0.0 -2022-11-18 11:55:13 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["wasm"],"initial":false,"tfjs":{"version":"4.0.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":126} -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: set backend: wasm -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js tensors 1785 -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: load models -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js result: defined models: 2 loaded models: 2 -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup: none default -2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: null -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup none result match -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: warmup -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup: face default -2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-18 11:55:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: 480 -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js passed: warmup face result match -2022-11-18 11:55:13 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: warmup -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: warmup: body default -2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 335 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: warmup body result match -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2022-11-18 11:55:14 INFO:  test-backend-node-wasm.js test: details verification -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js start default -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 320 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face length 1 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details body length 1 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand length 1 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details gesture length 7 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details object length 1 -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: details object 0.72 person -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2022-11-18 11:55:14 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:15 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2022-11-18 11:55:16 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2022-11-18 11:55:17 INFO:  test-backend-node-wasm.js test default -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js start async -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async -2022-11-18 11:55:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 319 -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 -2022-11-18 11:55:17 INFO:  test-backend-node-wasm.js test sync -2022-11-18 11:55:17 STATE: test-backend-node-wasm.js start sync -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync -2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 321 -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 -2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test: image process -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] -2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test: image null -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor -2022-11-18 11:55:18 INFO:  test-backend-node-wasm.js test face similarity -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js start face similarity -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity -2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2022-11-18 11:55:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 301 -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js start face similarity -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:18 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity -2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 308 -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js start face similarity -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity -2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2022-11-18 11:55:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 288 -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: face descriptor -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} -2022-11-18 11:55:19 INFO:  test-backend-node-wasm.js test object -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js start object -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:19 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:20 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:55:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2022-11-18 11:55:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 314 -2022-11-18 11:55:20 STATE: test-backend-node-wasm.js passed: centernet -2022-11-18 11:55:20 STATE: test-backend-node-wasm.js start object -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 208 -2022-11-18 11:55:21 ERROR: test-backend-node-wasm.js failed: nanodet [] -2022-11-18 11:55:21 INFO:  test-backend-node-wasm.js test sensitive -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js start sensitive -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive -2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:55:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 245 -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive result match -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive face result match -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive body result match -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js passed: sensitive hand result match -2022-11-18 11:55:21 INFO:  test-backend-node-wasm.js test body -2022-11-18 11:55:21 STATE: test-backend-node-wasm.js start blazepose -2022-11-18 11:55:23 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:23 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose -2022-11-18 11:55:24 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} -2022-11-18 11:55:24 DATA:  test-backend-node-wasm.js result: performance: load: null total: 393 -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: blazepose -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js start efficientpose -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:24 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:25 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:25 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose -2022-11-18 11:55:25 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} -2022-11-18 11:55:25 DATA:  test-backend-node-wasm.js result: performance: load: null total: 658 -2022-11-18 11:55:25 STATE: test-backend-node-wasm.js passed: efficientpose -2022-11-18 11:55:25 STATE: test-backend-node-wasm.js start posenet -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} -2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 277 -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: posenet -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js start movenet -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js event: detect -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} -2022-11-18 11:55:26 DATA:  test-backend-node-wasm.js result: performance: load: null total: 237 -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: movenet -2022-11-18 11:55:26 INFO:  test-backend-node-wasm.js test face matching -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: face database 40 -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} -2022-11-18 11:55:26 INFO:  test-backend-node-wasm.js test face similarity alternative -2022-11-18 11:55:26 STATE: test-backend-node-wasm.js start face embeddings -2022-11-18 11:55:27 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2022-11-18 11:55:27 STATE: test-backend-node-wasm.js event: image -2022-11-18 11:55:27 ERROR: test-backend-node-wasm.js failed: testDetect face embeddings -2022-11-18 11:55:27 ERROR: test-backend-node-wasm.js uncaughtException {"name":"TypeError","message":"Cannot read properties of undefined (reading 'img_inputs')","stack":["TypeError: Cannot read properties of undefined (reading 'img_inputs')"," at /home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30706:69"," at Array.reduce ()"," at GraphModel.normalizeInputs (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30705:32)"," at GraphModel.execute (/home/vlado/dev/human/node_modules/.pnpm/@tensorflow+tfjs-converter@4.0.0_hdmpc5coifabqk2ogondqkcwg4/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30777:23)"," at /home/vlado/dev/human/dist/human.node-wasm.js:121:37595"," at new Promise ()"," at H5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:37364)"," at Z5 (/home/vlado/dev/human/dist/human.node-wasm.js:121:43414)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"," at async /home/vlado/dev/human/dist/human.node-wasm.js:840:8294"]} -2022-11-18 11:55:27 STATE: all tests complete -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"test-node-gear.js","passed":3,"failed":0} -2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node.js","passed":85,"failed":1} -2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node-gpu.js","passed":85,"failed":1} -2022-11-18 11:55:27 INFO:  status {"test":"test-backend-node-wasm.js","passed":85,"failed":2} -2022-11-18 11:55:27 INFO:  failures {"count":4} -2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node.js","message":["error",["failed:","testDetect face embeddings"]]} -2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-gpu.js","message":["error",["failed:","testDetect face embeddings"]]} -2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: nanodet",[]]]} -2022-11-18 11:55:27 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face embeddings"]]} +2022-11-20 16:02:08 INFO:  @vladmandic/human version 3.0.0 +2022-11-20 16:02:08 INFO:  User: vlado Platform: linux Arch: x64 Node: v19.1.0 +2022-11-20 16:02:08 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]}] +2022-11-20 16:02:08 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start +2022-11-20 16:02:10 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start +2022-11-20 16:02:10 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start +2022-11-20 16:02:11 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start +2022-11-20 16:02:12 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start +2022-11-20 16:02:12 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start +2022-11-20 16:02:14 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start +2022-11-20 16:02:27 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start +2022-11-20 16:02:28 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] +2022-11-20 16:02:28 INFO:  +2022-11-20 16:02:28 INFO:  test-node-load.js start +2022-11-20 16:02:28 INFO:  test-node-load.js load start {"human":"3.0.0","tf":"4.1.0","progress":0} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":0,"progress":0} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":31,"progress":0.11143791531203556} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":58,"progress":0.3299591712723044} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":69,"progress":0.5125946867158943} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":81,"progress":0.786685028341948} +2022-11-20 16:02:28 STATE: test-node-load.js passed {"progress":1} +2022-11-20 16:02:28 INFO:  test-node-load.js load final {"progress":1} +2022-11-20 16:02:28 DATA:  test-node-load.js load interval {"elapsed":456,"progress":1} +2022-11-20 16:02:28 INFO:  +2022-11-20 16:02:28 INFO:  test-node-gear.js start +2022-11-20 16:02:29 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] +2022-11-20 16:02:30 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg +2022-11-20 16:02:30 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92} +2022-11-20 16:02:30 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg +2022-11-20 16:02:30 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}]} +2022-11-20 16:02:30 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg +2022-11-20 16:02:30 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99} +2022-11-20 16:02:30 INFO:  +2022-11-20 16:02:30 INFO:  test-backend-node.js start +2022-11-20 16:02:30 INFO:  test-backend-node.js test: configuration validation +2022-11-20 16:02:30 STATE: test-backend-node.js passed: configuration default validation [] +2022-11-20 16:02:30 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-20 16:02:30 INFO:  test-backend-node.js test: model load +2022-11-20 16:02:30 STATE: test-backend-node.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-20 16:02:30 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-20 16:02:30 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-20 16:02:30 INFO:  test-backend-node.js test: warmup +2022-11-20 16:02:30 STATE: test-backend-node.js passed: create human +2022-11-20 16:02:30 INFO:  test-backend-node.js human version: 3.0.0 +2022-11-20 16:02:30 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-20 16:02:30 INFO:  test-backend-node.js tfjs version: 4.1.0 +2022-11-20 16:02:30 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.1.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-11-20 16:02:30 STATE: test-backend-node.js passed: set backend: tensorflow +2022-11-20 16:02:30 STATE: test-backend-node.js tensors 1785 +2022-11-20 16:02:30 STATE: test-backend-node.js passed: load models +2022-11-20 16:02:30 STATE: test-backend-node.js result: defined models: 24 loaded models: 11 +2022-11-20 16:02:30 STATE: test-backend-node.js passed: warmup: none default +2022-11-20 16:02:30 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-20 16:02:30 DATA:  test-backend-node.js result: performance: load: null total: null +2022-11-20 16:02:30 STATE: test-backend-node.js passed: warmup none result match +2022-11-20 16:02:30 STATE: test-backend-node.js event: image +2022-11-20 16:02:30 STATE: test-backend-node.js event: detect +2022-11-20 16:02:30 STATE: test-backend-node.js event: warmup +2022-11-20 16:02:30 STATE: test-backend-node.js passed: warmup: face default +2022-11-20 16:02:30 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-11-20 16:02:30 DATA:  test-backend-node.js result: performance: load: null total: 432 +2022-11-20 16:02:30 STATE: test-backend-node.js passed: warmup face result match +2022-11-20 16:02:31 STATE: test-backend-node.js event: image +2022-11-20 16:02:31 STATE: test-backend-node.js event: detect +2022-11-20 16:02:31 STATE: test-backend-node.js event: warmup +2022-11-20 16:02:31 STATE: test-backend-node.js passed: warmup: body default +2022-11-20 16:02:31 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:31 DATA:  test-backend-node.js result: performance: load: null total: 340 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: warmup body result match +2022-11-20 16:02:31 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-20 16:02:31 INFO:  test-backend-node.js test: details verification +2022-11-20 16:02:31 STATE: test-backend-node.js start default +2022-11-20 16:02:31 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:31 STATE: test-backend-node.js event: image +2022-11-20 16:02:31 STATE: test-backend-node.js event: detect +2022-11-20 16:02:31 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default +2022-11-20 16:02:31 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:31 DATA:  test-backend-node.js result: performance: load: null total: 310 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face length 1 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face score 1 0.93 1 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face arrays 4 478 1024 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details face liveness 0.83 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details body length 1 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details body 0.92 17 6 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details hand length 1 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details hand 0.51 0.73 point +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details hand arrays 21 5 7 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details gesture length 7 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details object length 1 +2022-11-20 16:02:31 STATE: test-backend-node.js passed: details object 0.72 person +2022-11-20 16:02:32 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-11-20 16:02:32 STATE: test-backend-node.js event: image +2022-11-20 16:02:32 STATE: test-backend-node.js event: detect +2022-11-20 16:02:32 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-20 16:02:32 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-11-20 16:02:32 STATE: test-backend-node.js event: image +2022-11-20 16:02:32 STATE: test-backend-node.js event: detect +2022-11-20 16:02:32 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-20 16:02:33 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:33 STATE: test-backend-node.js event: image +2022-11-20 16:02:33 STATE: test-backend-node.js event: detect +2022-11-20 16:02:33 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-20 16:02:33 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:33 STATE: test-backend-node.js event: image +2022-11-20 16:02:33 STATE: test-backend-node.js event: detect +2022-11-20 16:02:33 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-20 16:02:34 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-20 16:02:34 STATE: test-backend-node.js event: image +2022-11-20 16:02:34 STATE: test-backend-node.js event: detect +2022-11-20 16:02:34 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-20 16:02:34 INFO:  test-backend-node.js test default +2022-11-20 16:02:34 STATE: test-backend-node.js start async +2022-11-20 16:02:34 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:34 STATE: test-backend-node.js event: image +2022-11-20 16:02:34 STATE: test-backend-node.js event: detect +2022-11-20 16:02:34 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async +2022-11-20 16:02:34 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:34 DATA:  test-backend-node.js result: performance: load: null total: 298 +2022-11-20 16:02:34 STATE: test-backend-node.js passed: default result face match 1 female 0.97 +2022-11-20 16:02:34 INFO:  test-backend-node.js test sync +2022-11-20 16:02:34 STATE: test-backend-node.js start sync +2022-11-20 16:02:35 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:35 STATE: test-backend-node.js event: image +2022-11-20 16:02:35 STATE: test-backend-node.js event: detect +2022-11-20 16:02:35 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync +2022-11-20 16:02:35 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:35 DATA:  test-backend-node.js result: performance: load: null total: 299 +2022-11-20 16:02:35 STATE: test-backend-node.js passed: default sync 1 female 0.97 +2022-11-20 16:02:35 INFO:  test-backend-node.js test: image process +2022-11-20 16:02:35 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:35 STATE: test-backend-node.js passed: image input null [1,256,256,3] +2022-11-20 16:02:35 INFO:  test-backend-node.js test: image null +2022-11-20 16:02:35 STATE: test-backend-node.js passed: invalid input could not convert input to tensor +2022-11-20 16:02:35 INFO:  test-backend-node.js test face similarity +2022-11-20 16:02:35 STATE: test-backend-node.js start face similarity +2022-11-20 16:02:35 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:35 STATE: test-backend-node.js event: image +2022-11-20 16:02:35 STATE: test-backend-node.js event: detect +2022-11-20 16:02:35 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-20 16:02:35 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-20 16:02:35 DATA:  test-backend-node.js result: performance: load: null total: 298 +2022-11-20 16:02:35 STATE: test-backend-node.js start face similarity +2022-11-20 16:02:35 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:35 STATE: test-backend-node.js event: image +2022-11-20 16:02:36 STATE: test-backend-node.js event: detect +2022-11-20 16:02:36 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-20 16:02:36 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:36 DATA:  test-backend-node.js result: performance: load: null total: 298 +2022-11-20 16:02:36 STATE: test-backend-node.js start face similarity +2022-11-20 16:02:36 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:36 STATE: test-backend-node.js event: image +2022-11-20 16:02:36 STATE: test-backend-node.js event: detect +2022-11-20 16:02:36 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-20 16:02:36 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-20 16:02:36 DATA:  test-backend-node.js result: performance: load: null total: 276 +2022-11-20 16:02:36 STATE: test-backend-node.js passed: face descriptor +2022-11-20 16:02:36 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} +2022-11-20 16:02:36 INFO:  test-backend-node.js test object +2022-11-20 16:02:36 STATE: test-backend-node.js start object +2022-11-20 16:02:36 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:36 STATE: test-backend-node.js event: image +2022-11-20 16:02:37 STATE: test-backend-node.js event: detect +2022-11-20 16:02:37 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:02:37 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:37 DATA:  test-backend-node.js result: performance: load: null total: 300 +2022-11-20 16:02:37 STATE: test-backend-node.js passed: centernet +2022-11-20 16:02:37 STATE: test-backend-node.js start object +2022-11-20 16:02:37 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:37 STATE: test-backend-node.js event: image +2022-11-20 16:02:38 STATE: test-backend-node.js event: detect +2022-11-20 16:02:38 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:02:38 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:38 DATA:  test-backend-node.js result: performance: load: null total: 298 +2022-11-20 16:02:38 STATE: test-backend-node.js passed: nanodet +2022-11-20 16:02:38 INFO:  test-backend-node.js test sensitive +2022-11-20 16:02:38 STATE: test-backend-node.js start sensitive +2022-11-20 16:02:38 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:38 STATE: test-backend-node.js event: image +2022-11-20 16:02:38 STATE: test-backend-node.js event: detect +2022-11-20 16:02:38 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-20 16:02:38 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:38 DATA:  test-backend-node.js result: performance: load: null total: 256 +2022-11-20 16:02:38 STATE: test-backend-node.js passed: sensitive result match +2022-11-20 16:02:38 STATE: test-backend-node.js passed: sensitive face result match +2022-11-20 16:02:38 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-11-20 16:02:38 STATE: test-backend-node.js passed: sensitive body result match +2022-11-20 16:02:38 STATE: test-backend-node.js passed: sensitive hand result match +2022-11-20 16:02:38 INFO:  test-backend-node.js test body +2022-11-20 16:02:38 STATE: test-backend-node.js start blazepose +2022-11-20 16:02:40 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:40 STATE: test-backend-node.js event: image +2022-11-20 16:02:40 STATE: test-backend-node.js event: detect +2022-11-20 16:02:40 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-20 16:02:40 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-20 16:02:40 DATA:  test-backend-node.js result: performance: load: null total: 339 +2022-11-20 16:02:40 STATE: test-backend-node.js passed: blazepose +2022-11-20 16:02:40 STATE: test-backend-node.js start efficientpose +2022-11-20 16:02:41 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:41 STATE: test-backend-node.js event: image +2022-11-20 16:02:42 STATE: test-backend-node.js event: detect +2022-11-20 16:02:42 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-20 16:02:42 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-20 16:02:42 DATA:  test-backend-node.js result: performance: load: null total: 310 +2022-11-20 16:02:42 STATE: test-backend-node.js passed: efficientpose +2022-11-20 16:02:42 STATE: test-backend-node.js start posenet +2022-11-20 16:02:42 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:42 STATE: test-backend-node.js event: image +2022-11-20 16:02:43 STATE: test-backend-node.js event: detect +2022-11-20 16:02:43 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-20 16:02:43 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-20 16:02:43 DATA:  test-backend-node.js result: performance: load: null total: 250 +2022-11-20 16:02:43 STATE: test-backend-node.js passed: posenet +2022-11-20 16:02:43 STATE: test-backend-node.js start movenet +2022-11-20 16:02:43 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:43 STATE: test-backend-node.js event: image +2022-11-20 16:02:43 STATE: test-backend-node.js event: detect +2022-11-20 16:02:43 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-20 16:02:43 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:43 DATA:  test-backend-node.js result: performance: load: null total: 252 +2022-11-20 16:02:43 STATE: test-backend-node.js passed: movenet +2022-11-20 16:02:43 INFO:  test-backend-node.js test face matching +2022-11-20 16:02:43 STATE: test-backend-node.js passed: face database 40 +2022-11-20 16:02:43 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} +2022-11-20 16:02:43 INFO:  test-backend-node.js test face similarity alternative +2022-11-20 16:02:43 STATE: test-backend-node.js start face embeddings +2022-11-20 16:02:44 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:44 STATE: test-backend-node.js event: image +2022-11-20 16:02:44 STATE: test-backend-node.js event: detect +2022-11-20 16:02:44 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:02:44 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:44 DATA:  test-backend-node.js result: performance: load: null total: 282 +2022-11-20 16:02:44 STATE: test-backend-node.js passed: mobilefacenet {"embedding":192} +2022-11-20 16:02:44 STATE: test-backend-node.js start face embeddings +2022-11-20 16:02:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:45 STATE: test-backend-node.js event: image +2022-11-20 16:02:45 STATE: test-backend-node.js event: detect +2022-11-20 16:02:45 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:02:45 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:45 DATA:  test-backend-node.js result: performance: load: null total: 304 +2022-11-20 16:02:45 STATE: test-backend-node.js passed: insightface {"embedding":512} +2022-11-20 16:02:45 INFO:  test-backend-node.js test face attention +2022-11-20 16:02:45 STATE: test-backend-node.js start face attention +2022-11-20 16:02:45 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:45 STATE: test-backend-node.js event: image +2022-11-20 16:02:46 STATE: test-backend-node.js event: detect +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face attention +2022-11-20 16:02:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:46 DATA:  test-backend-node.js result: performance: load: null total: 286 +2022-11-20 16:02:46 STATE: test-backend-node.js passed: face attention +2022-11-20 16:02:46 INFO:  test-backend-node.js test detectors +2022-11-20 16:02:46 STATE: test-backend-node.js start detectors +2022-11-20 16:02:46 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:46 STATE: test-backend-node.js event: image +2022-11-20 16:02:46 STATE: test-backend-node.js event: detect +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg detectors +2022-11-20 16:02:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:46 DATA:  test-backend-node.js result: performance: load: null total: 175 +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detector result face match +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detector result hand match +2022-11-20 16:02:46 INFO:  test-backend-node.js test: multi-instance +2022-11-20 16:02:46 STATE: test-backend-node.js start multi instance +2022-11-20 16:02:46 STATE: test-backend-node.js event: image +2022-11-20 16:02:46 STATE: test-backend-node.js event: detect +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detect: random multi instance +2022-11-20 16:02:46 DATA:  test-backend-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-11-20 16:02:46 DATA:  test-backend-node.js result: performance: load: null total: 129 +2022-11-20 16:02:46 INFO:  test-backend-node.js test: first instance +2022-11-20 16:02:46 STATE: test-backend-node.js start multi instance +2022-11-20 16:02:46 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:46 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:02:46 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:02:46 DATA:  test-backend-node.js result: performance: load: null total: 151 +2022-11-20 16:02:46 INFO:  test-backend-node.js test: second instance +2022-11-20 16:02:46 STATE: test-backend-node.js start multi instance +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:02:47 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:02:47 DATA:  test-backend-node.js result: performance: load: null total: 144 +2022-11-20 16:02:47 INFO:  test-backend-node.js test: concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js start concurrent +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:47 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2022-11-20 16:02:47 STATE: test-backend-node.js event: image +2022-11-20 16:02:47 STATE: test-backend-node.js event: image +2022-11-20 16:02:47 STATE: test-backend-node.js event: image +2022-11-20 16:02:49 STATE: test-backend-node.js event: detect +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js event: detect +2022-11-20 16:02:49 STATE: test-backend-node.js event: detect +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:02:49 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:02:49 DATA:  test-backend-node.js result: performance: load: null total: 1284 +2022-11-20 16:02:49 INFO:  test-backend-node.js test: monkey-patch +2022-11-20 16:02:49 STATE: test-backend-node.js event: image +2022-11-20 16:02:49 STATE: test-backend-node.js event: detect +2022-11-20 16:02:49 STATE: test-backend-node.js passed: monkey patch +2022-11-20 16:02:49 STATE: test-backend-node.js passed: segmentation [262144] +2022-11-20 16:02:49 STATE: test-backend-node.js passeed: equal usage +2022-11-20 16:02:49 INFO:  test-backend-node.js test: input compare +2022-11-20 16:02:49 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:49 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2022-11-20 16:02:50 STATE: test-backend-node.js passed: image compare 0 23.275441687091504 +2022-11-20 16:02:50 INFO:  test-backend-node.js events: {"image":29,"detect":29,"warmup":2} +2022-11-20 16:02:50 INFO:  test-backend-node.js tensors 4441 +2022-11-20 16:02:50 INFO:  test-backend-node.js test complete: 19560 ms +2022-11-20 16:02:50 INFO:  +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js start +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js test: configuration validation +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: configuration default validation [] +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js test: model load +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js test: warmup +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: create human +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js human version: 3.0.0 +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js tfjs version: 4.1.0 +2022-11-20 16:02:50 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.1.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":true},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":169} +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: set backend: tensorflow +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js tensors 1785 +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: load models +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js result: defined models: 24 loaded models: 11 +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: warmup: none default +2022-11-20 16:02:50 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-20 16:02:50 DATA:  test-backend-node-gpu.js result: performance: load: null total: null +2022-11-20 16:02:50 STATE: test-backend-node-gpu.js passed: warmup none result match +2022-11-20 16:02:51 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js event: warmup +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js passed: warmup: face default +2022-11-20 16:02:54 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2022-11-20 16:02:54 DATA:  test-backend-node-gpu.js result: performance: load: null total: 3080 +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js passed: warmup face result match +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js event: warmup +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js passed: warmup: body default +2022-11-20 16:02:54 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:54 DATA:  test-backend-node-gpu.js result: performance: load: null total: 174 +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js passed: warmup body result match +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-20 16:02:54 INFO:  test-backend-node-gpu.js test: details verification +2022-11-20 16:02:54 STATE: test-backend-node-gpu.js start default +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2022-11-20 16:02:55 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:55 DATA:  test-backend-node-gpu.js result: performance: load: null total: 131 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face length 1 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details body length 1 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details hand length 1 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details gesture length 7 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details object length 1 +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: details object 0.72 person +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2022-11-20 16:02:55 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:56 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-20 16:02:57 INFO:  test-backend-node-gpu.js test default +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js start async +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async +2022-11-20 16:02:57 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:57 DATA:  test-backend-node-gpu.js result: performance: load: null total: 134 +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 +2022-11-20 16:02:57 INFO:  test-backend-node-gpu.js test sync +2022-11-20 16:02:57 STATE: test-backend-node-gpu.js start sync +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: performance: load: null total: 157 +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 +2022-11-20 16:02:58 INFO:  test-backend-node-gpu.js test: image process +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] +2022-11-20 16:02:58 INFO:  test-backend-node-gpu.js test: image null +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor +2022-11-20 16:02:58 INFO:  test-backend-node-gpu.js test face similarity +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js start face similarity +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: performance: load: null total: 129 +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js start face similarity +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:58 DATA:  test-backend-node-gpu.js result: performance: load: null total: 140 +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js start face similarity +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:58 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-20 16:02:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-20 16:02:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 134 +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: face descriptor +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.4475002983522097,0.5570879556505012],"descriptors":[1024,1024,1024]} +2022-11-20 16:02:59 INFO:  test-backend-node-gpu.js test object +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js start object +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:02:59 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:02:59 DATA:  test-backend-node-gpu.js result: performance: load: null total: 137 +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js passed: centernet +2022-11-20 16:02:59 STATE: test-backend-node-gpu.js start object +2022-11-20 16:03:00 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:00 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:03:01 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:01 DATA:  test-backend-node-gpu.js result: performance: load: null total: 673 +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: nanodet +2022-11-20 16:03:01 INFO:  test-backend-node-gpu.js test sensitive +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js start sensitive +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-20 16:03:01 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:01 DATA:  test-backend-node-gpu.js result: performance: load: null total: 100 +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: sensitive result match +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: sensitive face result match +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: sensitive body result match +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js passed: sensitive hand result match +2022-11-20 16:03:01 INFO:  test-backend-node-gpu.js test body +2022-11-20 16:03:01 STATE: test-backend-node-gpu.js start blazepose +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-20 16:03:03 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-20 16:03:03 DATA:  test-backend-node-gpu.js result: performance: load: null total: 269 +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js passed: blazepose +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js start efficientpose +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:03 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:04 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:04 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-20 16:03:04 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-20 16:03:04 DATA:  test-backend-node-gpu.js result: performance: load: null total: 972 +2022-11-20 16:03:04 STATE: test-backend-node-gpu.js passed: efficientpose +2022-11-20 16:03:04 STATE: test-backend-node-gpu.js start posenet +2022-11-20 16:03:05 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:05 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-20 16:03:06 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-20 16:03:06 DATA:  test-backend-node-gpu.js result: performance: load: null total: 119 +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: posenet +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js start movenet +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-20 16:03:06 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:06 DATA:  test-backend-node-gpu.js result: performance: load: null total: 114 +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: movenet +2022-11-20 16:03:06 INFO:  test-backend-node-gpu.js test face matching +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: face database 40 +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7829338043932047}} {"second":{"index":4,"similarity":0.5002928781584631}} {"third":{"index":4,"similarity":0.5402934771672516}} +2022-11-20 16:03:06 INFO:  test-backend-node-gpu.js test face similarity alternative +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js start face embeddings +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:06 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:03:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 145 +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js passed: mobilefacenet {"embedding":192} +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js start face embeddings +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:03:07 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:07 DATA:  test-backend-node-gpu.js result: performance: load: null total: 193 +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js passed: insightface {"embedding":512} +2022-11-20 16:03:07 INFO:  test-backend-node-gpu.js test face attention +2022-11-20 16:03:07 STATE: test-backend-node-gpu.js start face attention +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 230 +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: face attention +2022-11-20 16:03:08 INFO:  test-backend-node-gpu.js test detectors +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js start detectors +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 108 +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detector result face match +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detector result hand match +2022-11-20 16:03:08 INFO:  test-backend-node-gpu.js test: multi-instance +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js start multi instance +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detect: random multi instance +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 56 +2022-11-20 16:03:08 INFO:  test-backend-node-gpu.js test: first instance +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js start multi instance +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:08 DATA:  test-backend-node-gpu.js result: performance: load: null total: 77 +2022-11-20 16:03:08 INFO:  test-backend-node-gpu.js test: second instance +2022-11-20 16:03:08 STATE: test-backend-node-gpu.js start multi instance +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:03:09 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:09 DATA:  test-backend-node-gpu.js result: performance: load: null total: 75 +2022-11-20 16:03:09 INFO:  test-backend-node-gpu.js test: concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js start concurrent +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:03:09 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289056} +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:10 DATA:  test-backend-node-gpu.js result: performance: load: null total: 691 +2022-11-20 16:03:10 INFO:  test-backend-node-gpu.js test: monkey-patch +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: image +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js event: detect +2022-11-20 16:03:10 STATE: test-backend-node-gpu.js passed: monkey patch +2022-11-20 16:03:11 STATE: test-backend-node-gpu.js passed: segmentation [262144] +2022-11-20 16:03:11 STATE: test-backend-node-gpu.js passeed: equal usage +2022-11-20 16:03:11 INFO:  test-backend-node-gpu.js test: input compare +2022-11-20 16:03:11 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2022-11-20 16:03:11 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796928} +2022-11-20 16:03:11 STATE: test-backend-node-gpu.js passed: image compare 0 23.275441687091504 +2022-11-20 16:03:11 INFO:  test-backend-node-gpu.js events: {"image":29,"detect":29,"warmup":2} +2022-11-20 16:03:11 INFO:  test-backend-node-gpu.js tensors 4441 +2022-11-20 16:03:11 INFO:  test-backend-node-gpu.js test complete: 20810 ms +2022-11-20 16:03:12 INFO:  +2022-11-20 16:03:12 INFO:  test-backend-node-wasm.js start +2022-11-20 16:03:12 DATA:  test-backend-node-wasm.js stdout: 2022-11-20 16:03:12 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.1.0/dist/ +2022-11-20 16:03:12 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ +2022-11-20 16:03:12 INFO:  test-backend-node-wasm.js test: configuration validation +2022-11-20 16:03:12 STATE: test-backend-node-wasm.js passed: configuration default validation [] +2022-11-20 16:03:12 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2022-11-20 16:03:12 INFO:  test-backend-node-wasm.js test: model load +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: models loaded 24 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"emotion","loaded":true,"size":820516,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"iris","loaded":true,"size":2599092,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"gear","loaded":false,"size":0,"url":null},{"name":"ssrnetage","loaded":false,"size":0,"url":null},{"name":"ssrnetgender","loaded":false,"size":0,"url":null},{"name":"mobilefacenet","loaded":false,"size":0,"url":null},{"name":"insightface","loaded":false,"size":0,"url":null},{"name":"blazepose","loaded":false,"size":0,"url":null},{"name":"blazeposedetect","loaded":false,"size":0,"url":null},{"name":"efficientpose","loaded":false,"size":0,"url":null},{"name":"movenet","loaded":true,"size":4650216,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"posenet","loaded":false,"size":0,"url":null},{"name":"handtrack","loaded":true,"size":2964837,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"handskeleton","loaded":true,"size":0},{"name":"centernet","loaded":true,"size":4030290,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"nanodet","loaded":false,"size":0,"url":null},{"name":"selfie","loaded":false,"size":0,"url":null},{"name":"meet","loaded":false,"size":0,"url":null},{"name":"rvm","loaded":false,"size":0,"url":null}] +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":63247332}} +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":63247332,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js test: warmup +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: create human +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js human version: 3.0.0 +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v19.1.0 +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js tfjs version: 4.1.0 +2022-11-20 16:03:14 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v19.1.0","backends":["wasm"],"initial":false,"tfjs":{"version":"4.1.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":128} +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: set backend: wasm +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js tensors 1785 +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: load models +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js result: defined models: 24 loaded models: 11 +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: warmup: none default +2022-11-20 16:03:14 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2022-11-20 16:03:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: null +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js passed: warmup none result match +2022-11-20 16:03:14 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: warmup +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js passed: warmup: face default +2022-11-20 16:03:15 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-20 16:03:15 DATA:  test-backend-node-wasm.js result: performance: load: null total: 507 +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js passed: warmup face result match +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: warmup +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js passed: warmup: body default +2022-11-20 16:03:15 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:15 DATA:  test-backend-node-wasm.js result: performance: load: null total: 338 +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js passed: warmup body result match +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"palm up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2022-11-20 16:03:15 INFO:  test-backend-node-wasm.js test: details verification +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js start default +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:15 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2022-11-20 16:03:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 326 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face length 1 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details body length 1 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details hand length 1 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details gesture length 7 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details object length 1 +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: details object 0.72 person +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:16 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:17 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2022-11-20 16:03:18 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2022-11-20 16:03:19 INFO:  test-backend-node-wasm.js test default +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js start async +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async +2022-11-20 16:03:19 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:19 DATA:  test-backend-node-wasm.js result: performance: load: null total: 313 +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 +2022-11-20 16:03:19 INFO:  test-backend-node-wasm.js test sync +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js start sync +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:19 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync +2022-11-20 16:03:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 321 +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 +2022-11-20 16:03:20 INFO:  test-backend-node-wasm.js test: image process +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] +2022-11-20 16:03:20 INFO:  test-backend-node-wasm.js test: image null +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor +2022-11-20 16:03:20 INFO:  test-backend-node-wasm.js test face similarity +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js start face similarity +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity +2022-11-20 16:03:20 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2022-11-20 16:03:20 DATA:  test-backend-node-wasm.js result: performance: load: null total: 294 +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js start face similarity +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:20 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 327 +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js start face similarity +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 297 +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: face descriptor +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.5266119940661309,0.4858842904087851],"descriptors":[1024,1024,1024]} +2022-11-20 16:03:21 INFO:  test-backend-node-wasm.js test object +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js start object +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 1 person: 1 {"score":1,"age":29.6,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2022-11-20 16:03:21 DATA:  test-backend-node-wasm.js result: performance: load: null total: 319 +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js passed: centernet +2022-11-20 16:03:21 STATE: test-backend-node-wasm.js start object +2022-11-20 16:03:23 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:23 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:23 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:23 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2022-11-20 16:03:23 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 8 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:23 DATA:  test-backend-node-wasm.js result: performance: load: null total: 218 +2022-11-20 16:03:23 ERROR: test-backend-node-wasm.js failed: nanodet [] +2022-11-20 16:03:23 INFO:  test-backend-node-wasm.js test sensitive +2022-11-20 16:03:23 STATE: test-backend-node-wasm.js start sensitive +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive +2022-11-20 16:03:24 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:24 DATA:  test-backend-node-wasm.js result: performance: load: null total: 236 +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: sensitive result match +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: sensitive face result match +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.46,"emotion":"neutral"},{"score":0.24,"emotion":"fear"},{"score":0.17,"emotion":"sad"}] +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: sensitive body result match +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js passed: sensitive hand result match +2022-11-20 16:03:24 INFO:  test-backend-node-wasm.js test body +2022-11-20 16:03:24 STATE: test-backend-node-wasm.js start blazepose +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose +2022-11-20 16:03:27 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.99,"keypoints":39} +2022-11-20 16:03:27 DATA:  test-backend-node-wasm.js result: performance: load: null total: 393 +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js passed: blazepose +2022-11-20 16:03:27 STATE: test-backend-node-wasm.js start efficientpose +2022-11-20 16:03:28 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:28 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:29 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:29 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose +2022-11-20 16:03:29 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.75,"keypoints":13} +2022-11-20 16:03:29 DATA:  test-backend-node-wasm.js result: performance: load: null total: 661 +2022-11-20 16:03:29 STATE: test-backend-node-wasm.js passed: efficientpose +2022-11-20 16:03:29 STATE: test-backend-node-wasm.js start posenet +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2022-11-20 16:03:30 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.96,"keypoints":16} +2022-11-20 16:03:30 DATA:  test-backend-node-wasm.js result: performance: load: null total: 284 +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: posenet +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js start movenet +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2022-11-20 16:03:30 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 10 object: 0 person: 1 {"score":1,"age":29.6,"gender":"female"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:30 DATA:  test-backend-node-wasm.js result: performance: load: null total: 243 +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: movenet +2022-11-20 16:03:30 INFO:  test-backend-node-wasm.js test face matching +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: face database 40 +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5660821189104794}} {"third":{"index":4,"similarity":0.45074189882665594}} +2022-11-20 16:03:30 INFO:  test-backend-node-wasm.js test face similarity alternative +2022-11-20 16:03:30 STATE: test-backend-node-wasm.js start face embeddings +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:03:31 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:31 DATA:  test-backend-node-wasm.js result: performance: load: null total: 239 +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js passed: mobilefacenet {"embedding":192} +2022-11-20 16:03:31 STATE: test-backend-node-wasm.js start face embeddings +2022-11-20 16:03:32 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:32 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: performance: load: null total: 280 +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: insightface {"embedding":512} +2022-11-20 16:03:33 INFO:  test-backend-node-wasm.js test face attention +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js start face attention +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face attention +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: face: 0 body: 1 hand: 1 gesture: 2 object: 0 person: 0 {} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: performance: load: null total: 119 +2022-11-20 16:03:33 ERROR: test-backend-node-wasm.js failed: face attention {"annotations":0} +2022-11-20 16:03:33 INFO:  test-backend-node-wasm.js test detectors +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js start detectors +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg detectors +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:33 DATA:  test-backend-node-wasm.js result: performance: load: null total: 125 +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: detector result face match +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js passed: detector result hand match +2022-11-20 16:03:33 INFO:  test-backend-node-wasm.js test: multi-instance +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js start multi instance +2022-11-20 16:03:33 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: detect: random multi instance +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: performance: load: null total: 97 +2022-11-20 16:03:34 INFO:  test-backend-node-wasm.js test: first instance +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start multi instance +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: performance: load: null total: 109 +2022-11-20 16:03:34 INFO:  test-backend-node-wasm.js test: second instance +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start multi instance +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg multi instance +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:34 DATA:  test-backend-node-wasm.js result: performance: load: null total: 106 +2022-11-20 16:03:34 INFO:  test-backend-node-wasm.js test: concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js start concurrent +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:34 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:35 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 947 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg concurrent +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2022-11-20 16:03:36 DATA:  test-backend-node-wasm.js result: performance: load: null total: 948 +2022-11-20 16:03:36 INFO:  test-backend-node-wasm.js test: monkey-patch +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js event: image +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js event: detect +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: monkey patch +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: segmentation [262144] +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passeed: equal usage +2022-11-20 16:03:36 INFO:  test-backend-node-wasm.js test: input compare +2022-11-20 16:03:36 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2022-11-20 16:03:37 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2022-11-20 16:03:37 STATE: test-backend-node-wasm.js passed: image compare 0 23.280073018790848 +2022-11-20 16:03:37 INFO:  test-backend-node-wasm.js events: {"image":29,"detect":29,"warmup":2} +2022-11-20 16:03:37 INFO:  test-backend-node-wasm.js tensors 4443 +2022-11-20 16:03:37 INFO:  test-backend-node-wasm.js test complete: 24612 ms +2022-11-20 16:03:37 STATE: all tests complete +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"test-node-gear.js","passed":3,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"test-backend-node.js","passed":125,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"test-backend-node-gpu.js","passed":125,"failed":0} +2022-11-20 16:03:37 INFO:  status {"test":"test-backend-node-wasm.js","passed":124,"failed":2} +2022-11-20 16:03:37 INFO:  failures {"count":2} +2022-11-20 16:03:37 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: nanodet",[]]]} +2022-11-20 16:03:37 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed: face attention",{"annotations":0}]]} diff --git a/typedoc/assets/search.js b/typedoc/assets/search.js index fd0dc77c..20d36c16 100644 --- a/typedoc/assets/search.js +++ b/typedoc/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\",\"8388608\":\"Reference\"},\"rows\":[{\"kind\":128,\"name\":\"Human\",\"url\":\"classes/Human.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Human.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Human.html#version\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/Human.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"classes/Human.html#result\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"classes/Human.html#state\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"process\",\"url\":\"classes/Human.html#process\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Human.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"classes/Human.html#__type.tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.__type\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"classes/Human.html#__type.canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.__type\"},{\"kind\":1024,\"name\":\"tf\",\"url\":\"classes/Human.html#tf\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"env\",\"url\":\"classes/Human.html#env\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Human.html#draw\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"match\",\"url\":\"classes/Human.html#match\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"events\",\"url\":\"classes/Human.html#events\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceTriangulation\",\"url\":\"classes/Human.html#faceTriangulation\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceUVMap\",\"url\":\"classes/Human.html#faceUVMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"classes/Human.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"analyze\",\"url\":\"classes/Human.html#analyze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Human.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/Human.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"now\",\"url\":\"classes/Human.html#now\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"image\",\"url\":\"classes/Human.html#image\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"segmentation\",\"url\":\"classes/Human.html#segmentation\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"compare\",\"url\":\"classes/Human.html#compare\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"init\",\"url\":\"classes/Human.html#init\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"webcam\",\"url\":\"classes/Human.html#webcam\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/Human.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"emit\",\"url\":\"classes/Human.html#emit\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"next\",\"url\":\"classes/Human.html#next\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"warmup\",\"url\":\"classes/Human.html#warmup\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"profile\",\"url\":\"classes/Human.html#profile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"detect\",\"url\":\"classes/Human.html#detect\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"sleep\",\"url\":\"classes/Human.html#sleep\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"video\",\"url\":\"classes/Human.html#video\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"index.html#default\",\"classes\":\"tsd-kind-reference\"},{\"kind\":4,\"name\":\"match\",\"url\":\"modules/match.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/match.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"similarity\",\"url\":\"functions/match.similarity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"find\",\"url\":\"functions/match.find.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/match.find.html#find.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"match.find.find\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"functions/match.find.html#find.__type.index\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"functions/match.find.html#find.__type.distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"similarity\",\"url\":\"functions/match.find.html#find.__type.similarity\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":4194304,\"name\":\"Descriptor\",\"url\":\"types/match.Descriptor.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4194304,\"name\":\"MatchOptions\",\"url\":\"types/match.MatchOptions.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4,\"name\":\"draw\",\"url\":\"modules/draw.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"person\",\"url\":\"functions/draw.person.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"canvas\",\"url\":\"functions/draw.canvas.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"all\",\"url\":\"functions/draw.all.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"init\",\"url\":\"functions/draw.init.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":32,\"name\":\"options\",\"url\":\"variables/draw.options.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"face\",\"url\":\"functions/draw.face.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"body\",\"url\":\"functions/draw.body.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"hand\",\"url\":\"functions/draw.hand.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"object\",\"url\":\"functions/draw.object.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"gesture\",\"url\":\"functions/draw.gesture.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":4,\"name\":\"models\",\"url\":\"modules/models.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"validateModel\",\"url\":\"functions/models.validateModel.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":256,\"name\":\"KernelOps\",\"url\":\"interfaces/models.KernelOps.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/models.KernelOps.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/models.KernelOps.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"missing\",\"url\":\"interfaces/models.KernelOps.html#missing\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"ops\",\"url\":\"interfaces/models.KernelOps.html#ops\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":256,\"name\":\"ModelStats\",\"url\":\"interfaces/models.ModelStats.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"numLoadedModels\",\"url\":\"interfaces/models.ModelStats.html#numLoadedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"numDefinedModels\",\"url\":\"interfaces/models.ModelStats.html#numDefinedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"percentageLoaded\",\"url\":\"interfaces/models.ModelStats.html#percentageLoaded\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeFromManifest\",\"url\":\"interfaces/models.ModelStats.html#totalSizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeWeights\",\"url\":\"interfaces/models.ModelStats.html#totalSizeWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeLoading\",\"url\":\"interfaces/models.ModelStats.html#totalSizeLoading\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"modelStats\",\"url\":\"interfaces/models.ModelStats.html#modelStats\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":128,\"name\":\"Models\",\"url\":\"classes/models.Models.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/models.Models.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":1024,\"name\":\"instance\",\"url\":\"classes/models.Models.html#instance\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":1024,\"name\":\"models\",\"url\":\"classes/models.Models.html#models\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"stats\",\"url\":\"classes/models.Models.html#stats\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/models.Models.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/models.Models.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"list\",\"url\":\"classes/models.Models.html#list\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"loaded\",\"url\":\"classes/models.Models.html#loaded\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/models.Models.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":128,\"name\":\"Tensor\",\"url\":\"classes/Tensor-1.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tensor-1.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"classes/Tensor-1.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dataId\",\"url\":\"classes/Tensor-1.html#dataId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"shape\",\"url\":\"classes/Tensor-1.html#shape\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"classes/Tensor-1.html#size\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dtype\",\"url\":\"classes/Tensor-1.html#dtype\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"rankType\",\"url\":\"classes/Tensor-1.html#rankType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"kept\",\"url\":\"classes/Tensor-1.html#kept\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"scopeId\",\"url\":\"classes/Tensor-1.html#scopeId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"strides\",\"url\":\"classes/Tensor-1.html#strides\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"rank\",\"url\":\"classes/Tensor-1.html#rank\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"buffer\",\"url\":\"classes/Tensor-1.html#buffer\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bufferSync\",\"url\":\"classes/Tensor-1.html#bufferSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"array\",\"url\":\"classes/Tensor-1.html#array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"arraySync\",\"url\":\"classes/Tensor-1.html#arraySync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"data\",\"url\":\"classes/Tensor-1.html#data\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataToGPU\",\"url\":\"classes/Tensor-1.html#dataToGPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataSync\",\"url\":\"classes/Tensor-1.html#dataSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bytes\",\"url\":\"classes/Tensor-1.html#bytes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/Tensor-1.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"isDisposed\",\"url\":\"classes/Tensor-1.html#isDisposed\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"throwIfDisposed\",\"url\":\"classes/Tensor-1.html#throwIfDisposed\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"print\",\"url\":\"classes/Tensor-1.html#print\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/Tensor-1.html#clone\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Tensor-1.html#toString\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"variable\",\"url\":\"classes/Tensor-1.html#variable\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"abs\",\"url\":\"classes/Tensor-1.html#abs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acos\",\"url\":\"classes/Tensor-1.html#acos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acosh\",\"url\":\"classes/Tensor-1.html#acosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/Tensor-1.html#add\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"all\",\"url\":\"classes/Tensor-1.html#all\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"any\",\"url\":\"classes/Tensor-1.html#any\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMax\",\"url\":\"classes/Tensor-1.html#argMax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMin\",\"url\":\"classes/Tensor-1.html#argMin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asScalar\",\"url\":\"classes/Tensor-1.html#asScalar\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asType\",\"url\":\"classes/Tensor-1.html#asType\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as1D\",\"url\":\"classes/Tensor-1.html#as1D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as2D\",\"url\":\"classes/Tensor-1.html#as2D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as3D\",\"url\":\"classes/Tensor-1.html#as3D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as4D\",\"url\":\"classes/Tensor-1.html#as4D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as5D\",\"url\":\"classes/Tensor-1.html#as5D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asin\",\"url\":\"classes/Tensor-1.html#asin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asinh\",\"url\":\"classes/Tensor-1.html#asinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan\",\"url\":\"classes/Tensor-1.html#atan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan2\",\"url\":\"classes/Tensor-1.html#atan2\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atanh\",\"url\":\"classes/Tensor-1.html#atanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"avgPool\",\"url\":\"classes/Tensor-1.html#avgPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchToSpaceND\",\"url\":\"classes/Tensor-1.html#batchToSpaceND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchNorm\",\"url\":\"classes/Tensor-1.html#batchNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"broadcastTo\",\"url\":\"classes/Tensor-1.html#broadcastTo\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cast\",\"url\":\"classes/Tensor-1.html#cast\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ceil\",\"url\":\"classes/Tensor-1.html#ceil\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clipByValue\",\"url\":\"classes/Tensor-1.html#clipByValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"concat\",\"url\":\"classes/Tensor-1.html#concat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv1d\",\"url\":\"classes/Tensor-1.html#conv1d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2dTranspose\",\"url\":\"classes/Tensor-1.html#conv2dTranspose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2d\",\"url\":\"classes/Tensor-1.html#conv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cos\",\"url\":\"classes/Tensor-1.html#cos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cosh\",\"url\":\"classes/Tensor-1.html#cosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumprod\",\"url\":\"classes/Tensor-1.html#cumprod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumsum\",\"url\":\"classes/Tensor-1.html#cumsum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthToSpace\",\"url\":\"classes/Tensor-1.html#depthToSpace\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthwiseConv2d\",\"url\":\"classes/Tensor-1.html#depthwiseConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dilation2d\",\"url\":\"classes/Tensor-1.html#dilation2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"divNoNan\",\"url\":\"classes/Tensor-1.html#divNoNan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"div\",\"url\":\"classes/Tensor-1.html#div\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dot\",\"url\":\"classes/Tensor-1.html#dot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"elu\",\"url\":\"classes/Tensor-1.html#elu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"equal\",\"url\":\"classes/Tensor-1.html#equal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"erf\",\"url\":\"classes/Tensor-1.html#erf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"euclideanNorm\",\"url\":\"classes/Tensor-1.html#euclideanNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"exp\",\"url\":\"classes/Tensor-1.html#exp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expandDims\",\"url\":\"classes/Tensor-1.html#expandDims\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expm1\",\"url\":\"classes/Tensor-1.html#expm1\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"fft\",\"url\":\"classes/Tensor-1.html#fft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"flatten\",\"url\":\"classes/Tensor-1.html#flatten\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floor\",\"url\":\"classes/Tensor-1.html#floor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floorDiv\",\"url\":\"classes/Tensor-1.html#floorDiv\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"gather\",\"url\":\"classes/Tensor-1.html#gather\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greaterEqual\",\"url\":\"classes/Tensor-1.html#greaterEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greater\",\"url\":\"classes/Tensor-1.html#greater\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ifft\",\"url\":\"classes/Tensor-1.html#ifft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"irfft\",\"url\":\"classes/Tensor-1.html#irfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isFinite\",\"url\":\"classes/Tensor-1.html#isFinite\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isInf\",\"url\":\"classes/Tensor-1.html#isInf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isNaN\",\"url\":\"classes/Tensor-1.html#isNaN\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"leakyRelu\",\"url\":\"classes/Tensor-1.html#leakyRelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"lessEqual\",\"url\":\"classes/Tensor-1.html#lessEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"less\",\"url\":\"classes/Tensor-1.html#less\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"localResponseNormalization\",\"url\":\"classes/Tensor-1.html#localResponseNormalization\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSigmoid\",\"url\":\"classes/Tensor-1.html#logSigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSoftmax\",\"url\":\"classes/Tensor-1.html#logSoftmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSumExp\",\"url\":\"classes/Tensor-1.html#logSumExp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log\",\"url\":\"classes/Tensor-1.html#log\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log1p\",\"url\":\"classes/Tensor-1.html#log1p\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalAnd\",\"url\":\"classes/Tensor-1.html#logicalAnd\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalNot\",\"url\":\"classes/Tensor-1.html#logicalNot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalOr\",\"url\":\"classes/Tensor-1.html#logicalOr\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalXor\",\"url\":\"classes/Tensor-1.html#logicalXor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"matMul\",\"url\":\"classes/Tensor-1.html#matMul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maxPool\",\"url\":\"classes/Tensor-1.html#maxPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"max\",\"url\":\"classes/Tensor-1.html#max\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maximum\",\"url\":\"classes/Tensor-1.html#maximum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mean\",\"url\":\"classes/Tensor-1.html#mean\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"min\",\"url\":\"classes/Tensor-1.html#min\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"minimum\",\"url\":\"classes/Tensor-1.html#minimum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mirrorPad\",\"url\":\"classes/Tensor-1.html#mirrorPad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mod\",\"url\":\"classes/Tensor-1.html#mod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mul\",\"url\":\"classes/Tensor-1.html#mul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"neg\",\"url\":\"classes/Tensor-1.html#neg\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"norm\",\"url\":\"classes/Tensor-1.html#norm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"notEqual\",\"url\":\"classes/Tensor-1.html#notEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"oneHot\",\"url\":\"classes/Tensor-1.html#oneHot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"onesLike\",\"url\":\"classes/Tensor-1.html#onesLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pad\",\"url\":\"classes/Tensor-1.html#pad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pool\",\"url\":\"classes/Tensor-1.html#pool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pow\",\"url\":\"classes/Tensor-1.html#pow\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prelu\",\"url\":\"classes/Tensor-1.html#prelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prod\",\"url\":\"classes/Tensor-1.html#prod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reciprocal\",\"url\":\"classes/Tensor-1.html#reciprocal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu\",\"url\":\"classes/Tensor-1.html#relu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu6\",\"url\":\"classes/Tensor-1.html#relu6\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshapeAs\",\"url\":\"classes/Tensor-1.html#reshapeAs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshape\",\"url\":\"classes/Tensor-1.html#reshape\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeBilinear\",\"url\":\"classes/Tensor-1.html#resizeBilinear\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeNearestNeighbor\",\"url\":\"classes/Tensor-1.html#resizeNearestNeighbor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reverse\",\"url\":\"classes/Tensor-1.html#reverse\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rfft\",\"url\":\"classes/Tensor-1.html#rfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"round\",\"url\":\"classes/Tensor-1.html#round\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rsqrt\",\"url\":\"classes/Tensor-1.html#rsqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"selu\",\"url\":\"classes/Tensor-1.html#selu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"separableConv2d\",\"url\":\"classes/Tensor-1.html#separableConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sigmoid\",\"url\":\"classes/Tensor-1.html#sigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sign\",\"url\":\"classes/Tensor-1.html#sign\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sin\",\"url\":\"classes/Tensor-1.html#sin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sinh\",\"url\":\"classes/Tensor-1.html#sinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"slice\",\"url\":\"classes/Tensor-1.html#slice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softmax\",\"url\":\"classes/Tensor-1.html#softmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softplus\",\"url\":\"classes/Tensor-1.html#softplus\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"spaceToBatchND\",\"url\":\"classes/Tensor-1.html#spaceToBatchND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"split\",\"url\":\"classes/Tensor-1.html#split\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sqrt\",\"url\":\"classes/Tensor-1.html#sqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"square\",\"url\":\"classes/Tensor-1.html#square\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squaredDifference\",\"url\":\"classes/Tensor-1.html#squaredDifference\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squeeze\",\"url\":\"classes/Tensor-1.html#squeeze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stack\",\"url\":\"classes/Tensor-1.html#stack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"step\",\"url\":\"classes/Tensor-1.html#step\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stridedSlice\",\"url\":\"classes/Tensor-1.html#stridedSlice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sub\",\"url\":\"classes/Tensor-1.html#sub\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sum\",\"url\":\"classes/Tensor-1.html#sum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tan\",\"url\":\"classes/Tensor-1.html#tan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tanh\",\"url\":\"classes/Tensor-1.html#tanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tile\",\"url\":\"classes/Tensor-1.html#tile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toBool\",\"url\":\"classes/Tensor-1.html#toBool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toFloat\",\"url\":\"classes/Tensor-1.html#toFloat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toInt\",\"url\":\"classes/Tensor-1.html#toInt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"topk\",\"url\":\"classes/Tensor-1.html#topk\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.topk.topk\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.values\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.indices\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":2048,\"name\":\"transpose\",\"url\":\"classes/Tensor-1.html#transpose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unique\",\"url\":\"classes/Tensor-1.html#unique\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.unique.unique\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.values-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.indices-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":2048,\"name\":\"unsortedSegmentSum\",\"url\":\"classes/Tensor-1.html#unsortedSegmentSum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unstack\",\"url\":\"classes/Tensor-1.html#unstack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"where\",\"url\":\"classes/Tensor-1.html#where\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"zerosLike\",\"url\":\"classes/Tensor-1.html#zerosLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":4,\"name\":\"Tensor\",\"url\":\"modules/Tensor.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":4194304,\"name\":\"Tensor4D\",\"url\":\"types/Tensor4D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"GraphModel\",\"url\":\"classes/GraphModel.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraphModel.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"modelVersion\",\"url\":\"classes/GraphModel.html#modelVersion\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputNodes\",\"url\":\"classes/GraphModel.html#inputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputNodes\",\"url\":\"classes/GraphModel.html#outputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputs\",\"url\":\"classes/GraphModel.html#inputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputs\",\"url\":\"classes/GraphModel.html#outputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"weights\",\"url\":\"classes/GraphModel.html#weights\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"metadata\",\"url\":\"classes/GraphModel.html#metadata\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#metadata.metadata-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.metadata.metadata\"},{\"kind\":262144,\"name\":\"modelSignature\",\"url\":\"classes/GraphModel.html#modelSignature\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelSignature.modelSignature-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelSignature.modelSignature\"},{\"kind\":262144,\"name\":\"modelStructuredOutputKeys\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys.modelStructuredOutputKeys-1.__type-2\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelStructuredOutputKeys.modelStructuredOutputKeys\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/GraphModel.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"loadSync\",\"url\":\"classes/GraphModel.html#loadSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/GraphModel.html#save\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"predict\",\"url\":\"classes/GraphModel.html#predict\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"execute\",\"url\":\"classes/GraphModel.html#execute\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"executeAsync\",\"url\":\"classes/GraphModel.html#executeAsync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"getIntermediateTensors\",\"url\":\"classes/GraphModel.html#getIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"disposeIntermediateTensors\",\"url\":\"classes/GraphModel.html#disposeIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/GraphModel.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":8,\"name\":\"Rank\",\"url\":\"enums/Rank.html\",\"classes\":\"tsd-kind-enum\"},{\"kind\":16,\"name\":\"R0\",\"url\":\"enums/Rank.html#R0\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R1\",\"url\":\"enums/Rank.html#R1\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R2\",\"url\":\"enums/Rank.html#R2\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R3\",\"url\":\"enums/Rank.html#R3\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R4\",\"url\":\"enums/Rank.html#R4\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R5\",\"url\":\"enums/Rank.html#R5\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R6\",\"url\":\"enums/Rank.html#R6\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":256,\"name\":\"DrawOptions\",\"url\":\"interfaces/DrawOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"interfaces/DrawOptions.html#color\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"alpha\",\"url\":\"interfaces/DrawOptions.html#alpha\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"labelColor\",\"url\":\"interfaces/DrawOptions.html#labelColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"shadowColor\",\"url\":\"interfaces/DrawOptions.html#shadowColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/DrawOptions.html#font\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineHeight\",\"url\":\"interfaces/DrawOptions.html#lineHeight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/DrawOptions.html#lineWidth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"pointSize\",\"url\":\"interfaces/DrawOptions.html#pointSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"roundRect\",\"url\":\"interfaces/DrawOptions.html#roundRect\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPoints\",\"url\":\"interfaces/DrawOptions.html#drawPoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawLabels\",\"url\":\"interfaces/DrawOptions.html#drawLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawAttention\",\"url\":\"interfaces/DrawOptions.html#drawAttention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGestures\",\"url\":\"interfaces/DrawOptions.html#drawGestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawBoxes\",\"url\":\"interfaces/DrawOptions.html#drawBoxes\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPolygons\",\"url\":\"interfaces/DrawOptions.html#drawPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGaze\",\"url\":\"interfaces/DrawOptions.html#drawGaze\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fillPolygons\",\"url\":\"interfaces/DrawOptions.html#fillPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useDepth\",\"url\":\"interfaces/DrawOptions.html#useDepth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useCurves\",\"url\":\"interfaces/DrawOptions.html#useCurves\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"faceLabels\",\"url\":\"interfaces/DrawOptions.html#faceLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyLabels\",\"url\":\"interfaces/DrawOptions.html#bodyLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyPartLabels\",\"url\":\"interfaces/DrawOptions.html#bodyPartLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"handLabels\",\"url\":\"interfaces/DrawOptions.html#handLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fingerLabels\",\"url\":\"interfaces/DrawOptions.html#fingerLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"objectLabels\",\"url\":\"interfaces/DrawOptions.html#objectLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"gestureLabels\",\"url\":\"interfaces/DrawOptions.html#gestureLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":4194304,\"name\":\"Box\",\"url\":\"types/Box.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Point\",\"url\":\"types/Point.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":32,\"name\":\"env\",\"url\":\"variables/env-1.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":128,\"name\":\"Env\",\"url\":\"classes/Env.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Env.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"browser\",\"url\":\"classes/Env.html#browser\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"node\",\"url\":\"classes/Env.html#node\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"worker\",\"url\":\"classes/Env.html#worker\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"platform\",\"url\":\"classes/Env.html#platform\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"agent\",\"url\":\"classes/Env.html#agent\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"backends\",\"url\":\"classes/Env.html#backends\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"initial\",\"url\":\"classes/Env.html#initial\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"classes/Env.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tfjs\",\"url\":\"classes/Env.html#tfjs\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-2.version-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"offscreen\",\"url\":\"classes/Env.html#offscreen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"perfadd\",\"url\":\"classes/Env.html#perfadd\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tensorflow\",\"url\":\"classes/Env.html#tensorflow\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-1.version\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"gpu\",\"url\":\"classes/Env.html#__type-1.gpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"wasm\",\"url\":\"classes/Env.html#wasm\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-3.supported\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-3.backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"simd\",\"url\":\"classes/Env.html#__type-3.simd\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"multithread\",\"url\":\"classes/Env.html#__type-3.multithread\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"webgl\",\"url\":\"classes/Env.html#webgl\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-4.supported-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-4.backend-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-4.version-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"classes/Env.html#__type-4.renderer\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"shader\",\"url\":\"classes/Env.html#__type-4.shader\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"vendor\",\"url\":\"classes/Env.html#__type-4.vendor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"webgpu\",\"url\":\"classes/Env.html#webgpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-5\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-5.supported-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-5.backend-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"adapter\",\"url\":\"classes/Env.html#__type-5.adapter\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"cpu\",\"url\":\"classes/Env.html#cpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"model\",\"url\":\"classes/Env.html#__type.model\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"classes/Env.html#__type.flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"kernels\",\"url\":\"classes/Env.html#kernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"Canvas\",\"url\":\"classes/Env.html#Canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"Image\",\"url\":\"classes/Env.html#Image\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"ImageData\",\"url\":\"classes/Env.html#ImageData\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateBackend\",\"url\":\"classes/Env.html#updateBackend\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateCPU\",\"url\":\"classes/Env.html#updateCPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":4194304,\"name\":\"FaceGesture\",\"url\":\"types/FaceGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyGesture\",\"url\":\"types/BodyGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandGesture\",\"url\":\"types/HandGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"IrisGesture\",\"url\":\"types/IrisGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Emotion\",\"url\":\"types/Emotion.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Finger\",\"url\":\"types/Finger.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerCurl\",\"url\":\"types/FingerCurl.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerDirection\",\"url\":\"types/FingerDirection.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandType\",\"url\":\"types/HandType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Gender\",\"url\":\"types/Gender.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Race\",\"url\":\"types/Race.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FaceLandmark\",\"url\":\"types/FaceLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmark\",\"url\":\"types/BodyLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotation\",\"url\":\"types/BodyAnnotation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ObjectType\",\"url\":\"types/ObjectType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"WebCam\",\"url\":\"classes/WebCam.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/WebCam.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/WebCam.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"classes/WebCam.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"stream\",\"url\":\"classes/WebCam.html#stream\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"devices\",\"url\":\"classes/WebCam.html#devices\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"track\",\"url\":\"classes/WebCam.html#track\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"capabilities\",\"url\":\"classes/WebCam.html#capabilities\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"constraints\",\"url\":\"classes/WebCam.html#constraints\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"settings\",\"url\":\"classes/WebCam.html#settings\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"label\",\"url\":\"classes/WebCam.html#label\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"paused\",\"url\":\"classes/WebCam.html#paused\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"width\",\"url\":\"classes/WebCam.html#width\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"height\",\"url\":\"classes/WebCam.html#height\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"enumerate\",\"url\":\"classes/WebCam.html#enumerate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"start\",\"url\":\"classes/WebCam.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"pause\",\"url\":\"classes/WebCam.html#pause\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"play\",\"url\":\"classes/WebCam.html#play\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/WebCam.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":256,\"name\":\"WebCamConfig\",\"url\":\"interfaces/WebCamConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"interfaces/WebCamConfig.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/WebCamConfig.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/WebCamConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"crop\",\"url\":\"interfaces/WebCamConfig.html#crop\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/WebCamConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/WebCamConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/WebCamConfig.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":256,\"name\":\"ModelInfo\",\"url\":\"interfaces/ModelInfo.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/ModelInfo.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"inCache\",\"url\":\"interfaces/ModelInfo.html#inCache\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeDesired\",\"url\":\"interfaces/ModelInfo.html#sizeDesired\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeFromManifest\",\"url\":\"interfaces/ModelInfo.html#sizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeLoadedWeights\",\"url\":\"interfaces/ModelInfo.html#sizeLoadedWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/ModelInfo.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":4194304,\"name\":\"Events\",\"url\":\"types/Events.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyCanvas\",\"url\":\"types/AnyCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyImage\",\"url\":\"types/AnyImage.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyVideo\",\"url\":\"types/AnyVideo.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ImageObjects\",\"url\":\"types/ImageObjects.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ExternalCanvas\",\"url\":\"types/ExternalCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Input\",\"url\":\"types/Input.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BackendEnum\",\"url\":\"types/BackendEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"WarmupEnum\",\"url\":\"types/WarmupEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"SegmentationEnum\",\"url\":\"types/SegmentationEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"GenericConfig\",\"url\":\"interfaces/GenericConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GenericConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/GenericConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/GenericConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/GenericConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":256,\"name\":\"FaceDetectorConfig\",\"url\":\"interfaces/FaceDetectorConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceDetectorConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/FaceDetectorConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDetectorConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/FaceDetectorConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"mask\",\"url\":\"interfaces/FaceDetectorConfig.html#mask\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FaceDetectorConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDetectorConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDetectorConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDetectorConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDetectorConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":256,\"name\":\"FaceMeshConfig\",\"url\":\"interfaces/FaceMeshConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"keepInvalid\",\"url\":\"interfaces/FaceMeshConfig.html#keepInvalid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceMeshConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceMeshConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceMeshConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceMeshConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":256,\"name\":\"FaceIrisConfig\",\"url\":\"interfaces/FaceIrisConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceIrisConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceIrisConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceIrisConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceIrisConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":256,\"name\":\"FaceAttentionConfig\",\"url\":\"interfaces/FaceAttentionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAttentionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAttentionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAttentionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAttentionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":256,\"name\":\"FaceDescriptionConfig\",\"url\":\"interfaces/FaceDescriptionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDescriptionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDescriptionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDescriptionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":256,\"name\":\"FaceEmotionConfig\",\"url\":\"interfaces/FaceEmotionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceEmotionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceEmotionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceEmotionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceEmotionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceEmotionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":256,\"name\":\"FaceAntiSpoofConfig\",\"url\":\"interfaces/FaceAntiSpoofConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":256,\"name\":\"FaceLivenessConfig\",\"url\":\"interfaces/FaceLivenessConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceLivenessConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceLivenessConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceLivenessConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceLivenessConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":256,\"name\":\"FaceGearConfig\",\"url\":\"interfaces/FaceGearConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceGearConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceGearConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceGearConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceGearConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceGearConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":256,\"name\":\"FaceConfig\",\"url\":\"interfaces/FaceConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/FaceConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceConfig.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"attention\",\"url\":\"interfaces/FaceConfig.html#attention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"iris\",\"url\":\"interfaces/FaceConfig.html#iris\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"interfaces/FaceConfig.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceConfig.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"antispoof\",\"url\":\"interfaces/FaceConfig.html#antispoof\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"liveness\",\"url\":\"interfaces/FaceConfig.html#liveness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"gear\",\"url\":\"interfaces/FaceConfig.html#gear\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":256,\"name\":\"BodyConfig\",\"url\":\"interfaces/BodyConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/BodyConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/BodyConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/BodyConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/BodyConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/BodyConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/BodyConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":256,\"name\":\"HandConfig\",\"url\":\"interfaces/HandConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/HandConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/HandConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/HandConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/HandConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandConfig.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/HandConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#__type.modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.__type\"},{\"kind\":1024,\"name\":\"skeleton\",\"url\":\"interfaces/HandConfig.html#skeleton\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#__type-1.modelPath-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.__type\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/HandConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#modelPath-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/HandConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/HandConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":256,\"name\":\"ObjectConfig\",\"url\":\"interfaces/ObjectConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/ObjectConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/ObjectConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/ObjectConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/ObjectConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/ObjectConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/ObjectConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/ObjectConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":256,\"name\":\"SegmentationConfig\",\"url\":\"interfaces/SegmentationConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"ratio\",\"url\":\"interfaces/SegmentationConfig.html#ratio\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/SegmentationConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/SegmentationConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/SegmentationConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/SegmentationConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/SegmentationConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":256,\"name\":\"FilterConfig\",\"url\":\"interfaces/FilterConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FilterConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"equalization\",\"url\":\"interfaces/FilterConfig.html#equalization\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/FilterConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/FilterConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FilterConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"flip\",\"url\":\"interfaces/FilterConfig.html#flip\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"autoBrightness\",\"url\":\"interfaces/FilterConfig.html#autoBrightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"brightness\",\"url\":\"interfaces/FilterConfig.html#brightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"contrast\",\"url\":\"interfaces/FilterConfig.html#contrast\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sharpness\",\"url\":\"interfaces/FilterConfig.html#sharpness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"blur\",\"url\":\"interfaces/FilterConfig.html#blur\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"saturation\",\"url\":\"interfaces/FilterConfig.html#saturation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"hue\",\"url\":\"interfaces/FilterConfig.html#hue\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"negative\",\"url\":\"interfaces/FilterConfig.html#negative\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sepia\",\"url\":\"interfaces/FilterConfig.html#sepia\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"vintage\",\"url\":\"interfaces/FilterConfig.html#vintage\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"kodachrome\",\"url\":\"interfaces/FilterConfig.html#kodachrome\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"technicolor\",\"url\":\"interfaces/FilterConfig.html#technicolor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"polaroid\",\"url\":\"interfaces/FilterConfig.html#polaroid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"pixelate\",\"url\":\"interfaces/FilterConfig.html#pixelate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":256,\"name\":\"GestureConfig\",\"url\":\"interfaces/GestureConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GestureConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GestureConfig\"},{\"kind\":256,\"name\":\"Config\",\"url\":\"interfaces/Config.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"interfaces/Config.html#backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPath\",\"url\":\"interfaces/Config.html#wasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPlatformFetch\",\"url\":\"interfaces/Config.html#wasmPlatformFetch\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/Config.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"async\",\"url\":\"interfaces/Config.html#async\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"warmup\",\"url\":\"interfaces/Config.html#warmup\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"modelBasePath\",\"url\":\"interfaces/Config.html#modelBasePath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheModels\",\"url\":\"interfaces/Config.html#cacheModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"validateModels\",\"url\":\"interfaces/Config.html#validateModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheSensitivity\",\"url\":\"interfaces/Config.html#cacheSensitivity\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/Config.html#flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"softwareKernels\",\"url\":\"interfaces/Config.html#softwareKernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"deallocate\",\"url\":\"interfaces/Config.html#deallocate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"skipAllowed\",\"url\":\"interfaces/Config.html#skipAllowed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"interfaces/Config.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Config.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Config.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Config.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Config.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Config.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"segmentation\",\"url\":\"interfaces/Config.html#segmentation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":32,\"name\":\"defaults\",\"url\":\"variables/defaults.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":256,\"name\":\"FaceResult\",\"url\":\"interfaces/FaceResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/FaceResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/FaceResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/FaceResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"faceScore\",\"url\":\"interfaces/FaceResult.html#faceScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/FaceResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/FaceResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceResult.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"meshRaw\",\"url\":\"interfaces/FaceResult.html#meshRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/FaceResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/FaceResult.html#age\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"gender\",\"url\":\"interfaces/FaceResult.html#gender\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"genderScore\",\"url\":\"interfaces/FaceResult.html#genderScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceResult.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"race\",\"url\":\"interfaces/FaceResult.html#race\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"embedding\",\"url\":\"interfaces/FaceResult.html#embedding\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/FaceResult.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"real\",\"url\":\"interfaces/FaceResult.html#real\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"live\",\"url\":\"interfaces/FaceResult.html#live\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceResult.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"interfaces/FaceResult.html#tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":4194304,\"name\":\"BodyLandmarkPoseNet\",\"url\":\"types/BodyLandmarkPoseNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkMoveNet\",\"url\":\"types/BodyLandmarkMoveNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkEfficientNet\",\"url\":\"types/BodyLandmarkEfficientNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkBlazePose\",\"url\":\"types/BodyLandmarkBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationBlazePose\",\"url\":\"types/BodyAnnotationBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationEfficientPose\",\"url\":\"types/BodyAnnotationEfficientPose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"BodyKeypoint\",\"url\":\"interfaces/BodyKeypoint.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"part\",\"url\":\"interfaces/BodyKeypoint.html#part\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/BodyKeypoint.html#position\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"positionRaw\",\"url\":\"interfaces/BodyKeypoint.html#positionRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/BodyKeypoint.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyKeypoint.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":256,\"name\":\"BodyResult\",\"url\":\"interfaces/BodyResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BodyResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/BodyResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/BodyResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/BodyResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/BodyResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":256,\"name\":\"HandResult\",\"url\":\"interfaces/HandResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/HandResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/HandResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/HandResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"fingerScore\",\"url\":\"interfaces/HandResult.html#fingerScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/HandResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/HandResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/HandResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/HandResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/HandResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandResult.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":256,\"name\":\"ObjectResult\",\"url\":\"interfaces/ObjectResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ObjectResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/ObjectResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"class\",\"url\":\"interfaces/ObjectResult.html#class\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/ObjectResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/ObjectResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/ObjectResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":4194304,\"name\":\"GestureResult\",\"url\":\"types/GestureResult.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"PersonResult\",\"url\":\"interfaces/PersonResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PersonResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/PersonResult.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/PersonResult.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"hands\",\"url\":\"interfaces/PersonResult.html#hands\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PersonResult.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"interfaces/PersonResult.html#__type.left\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"interfaces/PersonResult.html#__type.right\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.__type\"},{\"kind\":1024,\"name\":\"gestures\",\"url\":\"interfaces/PersonResult.html#gestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/PersonResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/PersonResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":256,\"name\":\"Result\",\"url\":\"interfaces/Result.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Result.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Result.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Result.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Result.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Result.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"interfaces/Result.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"interfaces/Result.html#canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"timestamp\",\"url\":\"interfaces/Result.html#timestamp\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"persons\",\"url\":\"interfaces/Result.html#persons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"interfaces/Result.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/Result.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/Result.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":64,\"name\":\"empty\",\"url\":\"functions/empty.html\",\"classes\":\"tsd-kind-function\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,60.943]],[\"comment/0\",[]],[\"name/1\",[1,46.28]],[\"comment/1\",[]],[\"name/2\",[2,49.957]],[\"comment/2\",[]],[\"name/3\",[3,52.47]],[\"comment/3\",[]],[\"name/4\",[4,55.835]],[\"comment/4\",[]],[\"name/5\",[5,60.943]],[\"comment/5\",[]],[\"name/6\",[6,60.943]],[\"comment/6\",[]],[\"name/7\",[7,36.964]],[\"comment/7\",[]],[\"name/8\",[8,49.957]],[\"comment/8\",[]],[\"name/9\",[9,49.957]],[\"comment/9\",[]],[\"name/10\",[10,60.943]],[\"comment/10\",[]],[\"name/11\",[11,52.47]],[\"comment/11\",[]],[\"name/12\",[12,55.835]],[\"comment/12\",[]],[\"name/13\",[13,55.835]],[\"comment/13\",[]],[\"name/14\",[14,55.835]],[\"comment/14\",[]],[\"name/15\",[15,60.943]],[\"comment/15\",[]],[\"name/16\",[16,60.943]],[\"comment/16\",[]],[\"name/17\",[17,55.835]],[\"comment/17\",[]],[\"name/18\",[18,60.943]],[\"comment/18\",[]],[\"name/19\",[19,55.835]],[\"comment/19\",[]],[\"name/20\",[20,55.835]],[\"comment/20\",[]],[\"name/21\",[21,60.943]],[\"comment/21\",[]],[\"name/22\",[22,55.835]],[\"comment/22\",[]],[\"name/23\",[23,55.835]],[\"comment/23\",[]],[\"name/24\",[24,60.943]],[\"comment/24\",[]],[\"name/25\",[25,55.835]],[\"comment/25\",[]],[\"name/26\",[26,55.835]],[\"comment/26\",[]],[\"name/27\",[27,52.47]],[\"comment/27\",[]],[\"name/28\",[28,60.943]],[\"comment/28\",[]],[\"name/29\",[29,60.943]],[\"comment/29\",[]],[\"name/30\",[30,55.835]],[\"comment/30\",[]],[\"name/31\",[31,60.943]],[\"comment/31\",[]],[\"name/32\",[32,60.943]],[\"comment/32\",[]],[\"name/33\",[33,60.943]],[\"comment/33\",[]],[\"name/34\",[34,60.943]],[\"comment/34\",[]],[\"name/35\",[35,60.943]],[\"comment/35\",[]],[\"name/36\",[13,55.835]],[\"comment/36\",[]],[\"name/37\",[36,49.957]],[\"comment/37\",[]],[\"name/38\",[37,55.835]],[\"comment/38\",[]],[\"name/39\",[38,60.943]],[\"comment/39\",[]],[\"name/40\",[7,36.964]],[\"comment/40\",[]],[\"name/41\",[39,60.943]],[\"comment/41\",[]],[\"name/42\",[36,49.957]],[\"comment/42\",[]],[\"name/43\",[37,55.835]],[\"comment/43\",[]],[\"name/44\",[40,60.943]],[\"comment/44\",[]],[\"name/45\",[41,60.943]],[\"comment/45\",[]],[\"name/46\",[12,55.835]],[\"comment/46\",[]],[\"name/47\",[42,60.943]],[\"comment/47\",[]],[\"name/48\",[9,49.957]],[\"comment/48\",[]],[\"name/49\",[43,55.835]],[\"comment/49\",[]],[\"name/50\",[25,55.835]],[\"comment/50\",[]],[\"name/51\",[44,60.943]],[\"comment/51\",[]],[\"name/52\",[45,49.957]],[\"comment/52\",[]],[\"name/53\",[46,49.957]],[\"comment/53\",[]],[\"name/54\",[47,52.47]],[\"comment/54\",[]],[\"name/55\",[48,52.47]],[\"comment/55\",[]],[\"name/56\",[49,52.47]],[\"comment/56\",[]],[\"name/57\",[50,52.47]],[\"comment/57\",[]],[\"name/58\",[51,60.943]],[\"comment/58\",[]],[\"name/59\",[52,60.943]],[\"comment/59\",[]],[\"name/60\",[53,55.835]],[\"comment/60\",[]],[\"name/61\",[54,55.835]],[\"comment/61\",[]],[\"name/62\",[55,60.943]],[\"comment/62\",[]],[\"name/63\",[56,60.943]],[\"comment/63\",[]],[\"name/64\",[57,55.835]],[\"comment/64\",[]],[\"name/65\",[58,60.943]],[\"comment/65\",[]],[\"name/66\",[59,60.943]],[\"comment/66\",[]],[\"name/67\",[60,60.943]],[\"comment/67\",[]],[\"name/68\",[61,60.943]],[\"comment/68\",[]],[\"name/69\",[62,60.943]],[\"comment/69\",[]],[\"name/70\",[63,60.943]],[\"comment/70\",[]],[\"name/71\",[57,55.835]],[\"comment/71\",[]],[\"name/72\",[50,52.47]],[\"comment/72\",[]],[\"name/73\",[1,46.28]],[\"comment/73\",[]],[\"name/74\",[64,60.943]],[\"comment/74\",[]],[\"name/75\",[50,52.47]],[\"comment/75\",[]],[\"name/76\",[65,60.943]],[\"comment/76\",[]],[\"name/77\",[19,55.835]],[\"comment/77\",[]],[\"name/78\",[27,52.47]],[\"comment/78\",[]],[\"name/79\",[66,60.943]],[\"comment/79\",[]],[\"name/80\",[67,60.943]],[\"comment/80\",[]],[\"name/81\",[20,55.835]],[\"comment/81\",[]],[\"name/82\",[8,49.957]],[\"comment/82\",[]],[\"name/83\",[1,46.28]],[\"comment/83\",[]],[\"name/84\",[68,44.849]],[\"comment/84\",[]],[\"name/85\",[69,60.943]],[\"comment/85\",[]],[\"name/86\",[70,60.943]],[\"comment/86\",[]],[\"name/87\",[71,60.943]],[\"comment/87\",[]],[\"name/88\",[72,60.943]],[\"comment/88\",[]],[\"name/89\",[73,60.943]],[\"comment/89\",[]],[\"name/90\",[74,60.943]],[\"comment/90\",[]],[\"name/91\",[75,60.943]],[\"comment/91\",[]],[\"name/92\",[76,60.943]],[\"comment/92\",[]],[\"name/93\",[77,55.835]],[\"comment/93\",[]],[\"name/94\",[78,60.943]],[\"comment/94\",[]],[\"name/95\",[79,60.943]],[\"comment/95\",[]],[\"name/96\",[80,60.943]],[\"comment/96\",[]],[\"name/97\",[81,60.943]],[\"comment/97\",[]],[\"name/98\",[82,60.943]],[\"comment/98\",[]],[\"name/99\",[83,60.943]],[\"comment/99\",[]],[\"name/100\",[84,60.943]],[\"comment/100\",[]],[\"name/101\",[85,60.943]],[\"comment/101\",[]],[\"name/102\",[86,55.835]],[\"comment/102\",[]],[\"name/103\",[87,60.943]],[\"comment/103\",[]],[\"name/104\",[88,60.943]],[\"comment/104\",[]],[\"name/105\",[89,60.943]],[\"comment/105\",[]],[\"name/106\",[90,60.943]],[\"comment/106\",[]],[\"name/107\",[91,60.943]],[\"comment/107\",[]],[\"name/108\",[92,60.943]],[\"comment/108\",[]],[\"name/109\",[93,60.943]],[\"comment/109\",[]],[\"name/110\",[94,60.943]],[\"comment/110\",[]],[\"name/111\",[95,60.943]],[\"comment/111\",[]],[\"name/112\",[96,60.943]],[\"comment/112\",[]],[\"name/113\",[43,55.835]],[\"comment/113\",[]],[\"name/114\",[97,60.943]],[\"comment/114\",[]],[\"name/115\",[98,60.943]],[\"comment/115\",[]],[\"name/116\",[99,60.943]],[\"comment/116\",[]],[\"name/117\",[100,60.943]],[\"comment/117\",[]],[\"name/118\",[101,60.943]],[\"comment/118\",[]],[\"name/119\",[102,60.943]],[\"comment/119\",[]],[\"name/120\",[103,60.943]],[\"comment/120\",[]],[\"name/121\",[104,60.943]],[\"comment/121\",[]],[\"name/122\",[105,60.943]],[\"comment/122\",[]],[\"name/123\",[106,60.943]],[\"comment/123\",[]],[\"name/124\",[107,60.943]],[\"comment/124\",[]],[\"name/125\",[108,60.943]],[\"comment/125\",[]],[\"name/126\",[109,60.943]],[\"comment/126\",[]],[\"name/127\",[110,60.943]],[\"comment/127\",[]],[\"name/128\",[111,60.943]],[\"comment/128\",[]],[\"name/129\",[112,60.943]],[\"comment/129\",[]],[\"name/130\",[113,60.943]],[\"comment/130\",[]],[\"name/131\",[114,60.943]],[\"comment/131\",[]],[\"name/132\",[115,60.943]],[\"comment/132\",[]],[\"name/133\",[116,60.943]],[\"comment/133\",[]],[\"name/134\",[117,60.943]],[\"comment/134\",[]],[\"name/135\",[118,60.943]],[\"comment/135\",[]],[\"name/136\",[119,60.943]],[\"comment/136\",[]],[\"name/137\",[120,60.943]],[\"comment/137\",[]],[\"name/138\",[121,60.943]],[\"comment/138\",[]],[\"name/139\",[122,60.943]],[\"comment/139\",[]],[\"name/140\",[123,60.943]],[\"comment/140\",[]],[\"name/141\",[124,60.943]],[\"comment/141\",[]],[\"name/142\",[125,60.943]],[\"comment/142\",[]],[\"name/143\",[126,60.943]],[\"comment/143\",[]],[\"name/144\",[127,60.943]],[\"comment/144\",[]],[\"name/145\",[128,60.943]],[\"comment/145\",[]],[\"name/146\",[129,60.943]],[\"comment/146\",[]],[\"name/147\",[130,60.943]],[\"comment/147\",[]],[\"name/148\",[131,60.943]],[\"comment/148\",[]],[\"name/149\",[132,60.943]],[\"comment/149\",[]],[\"name/150\",[133,60.943]],[\"comment/150\",[]],[\"name/151\",[134,60.943]],[\"comment/151\",[]],[\"name/152\",[135,60.943]],[\"comment/152\",[]],[\"name/153\",[136,60.943]],[\"comment/153\",[]],[\"name/154\",[137,60.943]],[\"comment/154\",[]],[\"name/155\",[138,60.943]],[\"comment/155\",[]],[\"name/156\",[139,60.943]],[\"comment/156\",[]],[\"name/157\",[140,60.943]],[\"comment/157\",[]],[\"name/158\",[141,60.943]],[\"comment/158\",[]],[\"name/159\",[142,60.943]],[\"comment/159\",[]],[\"name/160\",[143,60.943]],[\"comment/160\",[]],[\"name/161\",[144,60.943]],[\"comment/161\",[]],[\"name/162\",[145,60.943]],[\"comment/162\",[]],[\"name/163\",[146,60.943]],[\"comment/163\",[]],[\"name/164\",[147,60.943]],[\"comment/164\",[]],[\"name/165\",[148,60.943]],[\"comment/165\",[]],[\"name/166\",[149,60.943]],[\"comment/166\",[]],[\"name/167\",[150,60.943]],[\"comment/167\",[]],[\"name/168\",[151,60.943]],[\"comment/168\",[]],[\"name/169\",[152,60.943]],[\"comment/169\",[]],[\"name/170\",[153,60.943]],[\"comment/170\",[]],[\"name/171\",[154,60.943]],[\"comment/171\",[]],[\"name/172\",[155,60.943]],[\"comment/172\",[]],[\"name/173\",[156,60.943]],[\"comment/173\",[]],[\"name/174\",[157,60.943]],[\"comment/174\",[]],[\"name/175\",[158,60.943]],[\"comment/175\",[]],[\"name/176\",[159,60.943]],[\"comment/176\",[]],[\"name/177\",[160,60.943]],[\"comment/177\",[]],[\"name/178\",[161,60.943]],[\"comment/178\",[]],[\"name/179\",[162,60.943]],[\"comment/179\",[]],[\"name/180\",[163,60.943]],[\"comment/180\",[]],[\"name/181\",[164,60.943]],[\"comment/181\",[]],[\"name/182\",[165,60.943]],[\"comment/182\",[]],[\"name/183\",[166,60.943]],[\"comment/183\",[]],[\"name/184\",[167,60.943]],[\"comment/184\",[]],[\"name/185\",[168,60.943]],[\"comment/185\",[]],[\"name/186\",[169,60.943]],[\"comment/186\",[]],[\"name/187\",[170,60.943]],[\"comment/187\",[]],[\"name/188\",[171,60.943]],[\"comment/188\",[]],[\"name/189\",[172,60.943]],[\"comment/189\",[]],[\"name/190\",[173,60.943]],[\"comment/190\",[]],[\"name/191\",[174,60.943]],[\"comment/191\",[]],[\"name/192\",[175,60.943]],[\"comment/192\",[]],[\"name/193\",[176,60.943]],[\"comment/193\",[]],[\"name/194\",[177,60.943]],[\"comment/194\",[]],[\"name/195\",[178,60.943]],[\"comment/195\",[]],[\"name/196\",[179,60.943]],[\"comment/196\",[]],[\"name/197\",[180,60.943]],[\"comment/197\",[]],[\"name/198\",[181,60.943]],[\"comment/198\",[]],[\"name/199\",[182,60.943]],[\"comment/199\",[]],[\"name/200\",[183,60.943]],[\"comment/200\",[]],[\"name/201\",[184,60.943]],[\"comment/201\",[]],[\"name/202\",[185,60.943]],[\"comment/202\",[]],[\"name/203\",[186,60.943]],[\"comment/203\",[]],[\"name/204\",[187,60.943]],[\"comment/204\",[]],[\"name/205\",[188,60.943]],[\"comment/205\",[]],[\"name/206\",[189,60.943]],[\"comment/206\",[]],[\"name/207\",[190,60.943]],[\"comment/207\",[]],[\"name/208\",[191,60.943]],[\"comment/208\",[]],[\"name/209\",[192,60.943]],[\"comment/209\",[]],[\"name/210\",[193,60.943]],[\"comment/210\",[]],[\"name/211\",[194,60.943]],[\"comment/211\",[]],[\"name/212\",[195,60.943]],[\"comment/212\",[]],[\"name/213\",[196,60.943]],[\"comment/213\",[]],[\"name/214\",[197,60.943]],[\"comment/214\",[]],[\"name/215\",[198,60.943]],[\"comment/215\",[]],[\"name/216\",[199,60.943]],[\"comment/216\",[]],[\"name/217\",[200,60.943]],[\"comment/217\",[]],[\"name/218\",[201,60.943]],[\"comment/218\",[]],[\"name/219\",[202,60.943]],[\"comment/219\",[]],[\"name/220\",[203,60.943]],[\"comment/220\",[]],[\"name/221\",[204,60.943]],[\"comment/221\",[]],[\"name/222\",[205,60.943]],[\"comment/222\",[]],[\"name/223\",[206,60.943]],[\"comment/223\",[]],[\"name/224\",[207,60.943]],[\"comment/224\",[]],[\"name/225\",[208,60.943]],[\"comment/225\",[]],[\"name/226\",[209,60.943]],[\"comment/226\",[]],[\"name/227\",[210,60.943]],[\"comment/227\",[]],[\"name/228\",[211,60.943]],[\"comment/228\",[]],[\"name/229\",[212,60.943]],[\"comment/229\",[]],[\"name/230\",[213,60.943]],[\"comment/230\",[]],[\"name/231\",[214,60.943]],[\"comment/231\",[]],[\"name/232\",[215,60.943]],[\"comment/232\",[]],[\"name/233\",[216,60.943]],[\"comment/233\",[]],[\"name/234\",[217,60.943]],[\"comment/234\",[]],[\"name/235\",[218,60.943]],[\"comment/235\",[]],[\"name/236\",[219,60.943]],[\"comment/236\",[]],[\"name/237\",[220,60.943]],[\"comment/237\",[]],[\"name/238\",[221,60.943]],[\"comment/238\",[]],[\"name/239\",[222,60.943]],[\"comment/239\",[]],[\"name/240\",[7,36.964]],[\"comment/240\",[]],[\"name/241\",[223,55.835]],[\"comment/241\",[]],[\"name/242\",[224,55.835]],[\"comment/242\",[]],[\"name/243\",[225,60.943]],[\"comment/243\",[]],[\"name/244\",[226,60.943]],[\"comment/244\",[]],[\"name/245\",[7,36.964]],[\"comment/245\",[]],[\"name/246\",[223,55.835]],[\"comment/246\",[]],[\"name/247\",[224,55.835]],[\"comment/247\",[]],[\"name/248\",[227,60.943]],[\"comment/248\",[]],[\"name/249\",[228,60.943]],[\"comment/249\",[]],[\"name/250\",[229,60.943]],[\"comment/250\",[]],[\"name/251\",[230,60.943]],[\"comment/251\",[]],[\"name/252\",[8,49.957]],[\"comment/252\",[]],[\"name/253\",[231,60.943]],[\"comment/253\",[]],[\"name/254\",[232,60.943]],[\"comment/254\",[]],[\"name/255\",[1,46.28]],[\"comment/255\",[]],[\"name/256\",[233,60.943]],[\"comment/256\",[]],[\"name/257\",[234,60.943]],[\"comment/257\",[]],[\"name/258\",[235,60.943]],[\"comment/258\",[]],[\"name/259\",[236,60.943]],[\"comment/259\",[]],[\"name/260\",[237,60.943]],[\"comment/260\",[]],[\"name/261\",[238,60.943]],[\"comment/261\",[]],[\"name/262\",[239,60.943]],[\"comment/262\",[]],[\"name/263\",[7,36.964]],[\"comment/263\",[]],[\"name/264\",[240,60.943]],[\"comment/264\",[]],[\"name/265\",[7,36.964]],[\"comment/265\",[]],[\"name/266\",[241,60.943]],[\"comment/266\",[]],[\"name/267\",[7,36.964]],[\"comment/267\",[]],[\"name/268\",[27,52.47]],[\"comment/268\",[]],[\"name/269\",[242,60.943]],[\"comment/269\",[]],[\"name/270\",[243,60.943]],[\"comment/270\",[]],[\"name/271\",[244,60.943]],[\"comment/271\",[]],[\"name/272\",[245,60.943]],[\"comment/272\",[]],[\"name/273\",[246,60.943]],[\"comment/273\",[]],[\"name/274\",[247,60.943]],[\"comment/274\",[]],[\"name/275\",[248,60.943]],[\"comment/275\",[]],[\"name/276\",[86,55.835]],[\"comment/276\",[]],[\"name/277\",[77,55.835]],[\"comment/277\",[]],[\"name/278\",[249,60.943]],[\"comment/278\",[]],[\"name/279\",[250,60.943]],[\"comment/279\",[]],[\"name/280\",[251,60.943]],[\"comment/280\",[]],[\"name/281\",[252,60.943]],[\"comment/281\",[]],[\"name/282\",[253,60.943]],[\"comment/282\",[]],[\"name/283\",[254,60.943]],[\"comment/283\",[]],[\"name/284\",[255,60.943]],[\"comment/284\",[]],[\"name/285\",[256,60.943]],[\"comment/285\",[]],[\"name/286\",[257,60.943]],[\"comment/286\",[]],[\"name/287\",[258,60.943]],[\"comment/287\",[]],[\"name/288\",[259,60.943]],[\"comment/288\",[]],[\"name/289\",[260,60.943]],[\"comment/289\",[]],[\"name/290\",[261,60.943]],[\"comment/290\",[]],[\"name/291\",[262,60.943]],[\"comment/291\",[]],[\"name/292\",[263,60.943]],[\"comment/292\",[]],[\"name/293\",[264,60.943]],[\"comment/293\",[]],[\"name/294\",[265,60.943]],[\"comment/294\",[]],[\"name/295\",[266,60.943]],[\"comment/295\",[]],[\"name/296\",[267,60.943]],[\"comment/296\",[]],[\"name/297\",[268,60.943]],[\"comment/297\",[]],[\"name/298\",[269,60.943]],[\"comment/298\",[]],[\"name/299\",[270,60.943]],[\"comment/299\",[]],[\"name/300\",[271,60.943]],[\"comment/300\",[]],[\"name/301\",[272,60.943]],[\"comment/301\",[]],[\"name/302\",[273,60.943]],[\"comment/302\",[]],[\"name/303\",[274,60.943]],[\"comment/303\",[]],[\"name/304\",[275,60.943]],[\"comment/304\",[]],[\"name/305\",[276,60.943]],[\"comment/305\",[]],[\"name/306\",[277,60.943]],[\"comment/306\",[]],[\"name/307\",[278,60.943]],[\"comment/307\",[]],[\"name/308\",[279,60.943]],[\"comment/308\",[]],[\"name/309\",[280,60.943]],[\"comment/309\",[]],[\"name/310\",[281,60.943]],[\"comment/310\",[]],[\"name/311\",[282,60.943]],[\"comment/311\",[]],[\"name/312\",[283,46.28]],[\"comment/312\",[]],[\"name/313\",[284,60.943]],[\"comment/313\",[]],[\"name/314\",[11,52.47]],[\"comment/314\",[]],[\"name/315\",[11,52.47]],[\"comment/315\",[]],[\"name/316\",[1,46.28]],[\"comment/316\",[]],[\"name/317\",[285,60.943]],[\"comment/317\",[]],[\"name/318\",[286,60.943]],[\"comment/318\",[]],[\"name/319\",[287,60.943]],[\"comment/319\",[]],[\"name/320\",[288,60.943]],[\"comment/320\",[]],[\"name/321\",[289,60.943]],[\"comment/321\",[]],[\"name/322\",[290,60.943]],[\"comment/322\",[]],[\"name/323\",[291,60.943]],[\"comment/323\",[]],[\"name/324\",[292,55.835]],[\"comment/324\",[]],[\"name/325\",[293,60.943]],[\"comment/325\",[]],[\"name/326\",[7,36.964]],[\"comment/326\",[]],[\"name/327\",[2,49.957]],[\"comment/327\",[]],[\"name/328\",[294,60.943]],[\"comment/328\",[]],[\"name/329\",[295,60.943]],[\"comment/329\",[]],[\"name/330\",[296,60.943]],[\"comment/330\",[]],[\"name/331\",[7,36.964]],[\"comment/331\",[]],[\"name/332\",[2,49.957]],[\"comment/332\",[]],[\"name/333\",[297,60.943]],[\"comment/333\",[]],[\"name/334\",[298,60.943]],[\"comment/334\",[]],[\"name/335\",[7,36.964]],[\"comment/335\",[]],[\"name/336\",[299,52.47]],[\"comment/336\",[]],[\"name/337\",[300,49.957]],[\"comment/337\",[]],[\"name/338\",[301,60.943]],[\"comment/338\",[]],[\"name/339\",[302,60.943]],[\"comment/339\",[]],[\"name/340\",[303,60.943]],[\"comment/340\",[]],[\"name/341\",[7,36.964]],[\"comment/341\",[]],[\"name/342\",[299,52.47]],[\"comment/342\",[]],[\"name/343\",[300,49.957]],[\"comment/343\",[]],[\"name/344\",[2,49.957]],[\"comment/344\",[]],[\"name/345\",[304,60.943]],[\"comment/345\",[]],[\"name/346\",[305,60.943]],[\"comment/346\",[]],[\"name/347\",[306,60.943]],[\"comment/347\",[]],[\"name/348\",[307,60.943]],[\"comment/348\",[]],[\"name/349\",[7,36.964]],[\"comment/349\",[]],[\"name/350\",[299,52.47]],[\"comment/350\",[]],[\"name/351\",[300,49.957]],[\"comment/351\",[]],[\"name/352\",[308,60.943]],[\"comment/352\",[]],[\"name/353\",[309,60.943]],[\"comment/353\",[]],[\"name/354\",[7,36.964]],[\"comment/354\",[]],[\"name/355\",[310,60.943]],[\"comment/355\",[]],[\"name/356\",[311,55.835]],[\"comment/356\",[]],[\"name/357\",[312,60.943]],[\"comment/357\",[]],[\"name/358\",[9,49.957]],[\"comment/358\",[]],[\"name/359\",[22,55.835]],[\"comment/359\",[]],[\"name/360\",[313,60.943]],[\"comment/360\",[]],[\"name/361\",[314,60.943]],[\"comment/361\",[]],[\"name/362\",[315,60.943]],[\"comment/362\",[]],[\"name/363\",[316,60.943]],[\"comment/363\",[]],[\"name/364\",[317,60.943]],[\"comment/364\",[]],[\"name/365\",[318,60.943]],[\"comment/365\",[]],[\"name/366\",[319,60.943]],[\"comment/366\",[]],[\"name/367\",[320,52.47]],[\"comment/367\",[]],[\"name/368\",[321,60.943]],[\"comment/368\",[]],[\"name/369\",[322,60.943]],[\"comment/369\",[]],[\"name/370\",[323,60.943]],[\"comment/370\",[]],[\"name/371\",[324,60.943]],[\"comment/371\",[]],[\"name/372\",[325,55.835]],[\"comment/372\",[]],[\"name/373\",[326,55.835]],[\"comment/373\",[]],[\"name/374\",[327,60.943]],[\"comment/374\",[]],[\"name/375\",[328,60.943]],[\"comment/375\",[]],[\"name/376\",[329,60.943]],[\"comment/376\",[]],[\"name/377\",[330,60.943]],[\"comment/377\",[]],[\"name/378\",[26,55.835]],[\"comment/378\",[]],[\"name/379\",[1,46.28]],[\"comment/379\",[]],[\"name/380\",[3,52.47]],[\"comment/380\",[]],[\"name/381\",[331,55.835]],[\"comment/381\",[]],[\"name/382\",[332,60.943]],[\"comment/382\",[]],[\"name/383\",[333,60.943]],[\"comment/383\",[]],[\"name/384\",[334,60.943]],[\"comment/384\",[]],[\"name/385\",[335,60.943]],[\"comment/385\",[]],[\"name/386\",[336,60.943]],[\"comment/386\",[]],[\"name/387\",[337,60.943]],[\"comment/387\",[]],[\"name/388\",[338,52.47]],[\"comment/388\",[]],[\"name/389\",[339,60.943]],[\"comment/389\",[]],[\"name/390\",[340,49.957]],[\"comment/390\",[]],[\"name/391\",[341,49.957]],[\"comment/391\",[]],[\"name/392\",[342,60.943]],[\"comment/392\",[]],[\"name/393\",[343,60.943]],[\"comment/393\",[]],[\"name/394\",[344,60.943]],[\"comment/394\",[]],[\"name/395\",[345,60.943]],[\"comment/395\",[]],[\"name/396\",[346,60.943]],[\"comment/396\",[]],[\"name/397\",[347,60.943]],[\"comment/397\",[]],[\"name/398\",[331,55.835]],[\"comment/398\",[]],[\"name/399\",[348,55.835]],[\"comment/399\",[]],[\"name/400\",[349,55.835]],[\"comment/400\",[]],[\"name/401\",[350,60.943]],[\"comment/401\",[]],[\"name/402\",[340,49.957]],[\"comment/402\",[]],[\"name/403\",[341,49.957]],[\"comment/403\",[]],[\"name/404\",[68,44.849]],[\"comment/404\",[]],[\"name/405\",[351,60.943]],[\"comment/405\",[]],[\"name/406\",[53,55.835]],[\"comment/406\",[]],[\"name/407\",[352,60.943]],[\"comment/407\",[]],[\"name/408\",[353,60.943]],[\"comment/408\",[]],[\"name/409\",[354,60.943]],[\"comment/409\",[]],[\"name/410\",[355,60.943]],[\"comment/410\",[]],[\"name/411\",[54,55.835]],[\"comment/411\",[]],[\"name/412\",[14,55.835]],[\"comment/412\",[]],[\"name/413\",[356,60.943]],[\"comment/413\",[]],[\"name/414\",[357,60.943]],[\"comment/414\",[]],[\"name/415\",[358,60.943]],[\"comment/415\",[]],[\"name/416\",[359,60.943]],[\"comment/416\",[]],[\"name/417\",[360,60.943]],[\"comment/417\",[]],[\"name/418\",[361,60.943]],[\"comment/418\",[]],[\"name/419\",[362,60.943]],[\"comment/419\",[]],[\"name/420\",[363,60.943]],[\"comment/420\",[]],[\"name/421\",[364,60.943]],[\"comment/421\",[]],[\"name/422\",[365,60.943]],[\"comment/422\",[]],[\"name/423\",[366,36.376]],[\"comment/423\",[]],[\"name/424\",[367,36.376]],[\"comment/424\",[]],[\"name/425\",[368,37.589]],[\"comment/425\",[]],[\"name/426\",[369,37.589]],[\"comment/426\",[]],[\"name/427\",[370,60.943]],[\"comment/427\",[]],[\"name/428\",[371,52.47]],[\"comment/428\",[]],[\"name/429\",[372,49.957]],[\"comment/429\",[]],[\"name/430\",[373,44.849]],[\"comment/430\",[]],[\"name/431\",[374,52.47]],[\"comment/431\",[]],[\"name/432\",[375,60.943]],[\"comment/432\",[]],[\"name/433\",[376,55.835]],[\"comment/433\",[]],[\"name/434\",[366,36.376]],[\"comment/434\",[]],[\"name/435\",[367,36.376]],[\"comment/435\",[]],[\"name/436\",[368,37.589]],[\"comment/436\",[]],[\"name/437\",[369,37.589]],[\"comment/437\",[]],[\"name/438\",[377,60.943]],[\"comment/438\",[]],[\"name/439\",[378,60.943]],[\"comment/439\",[]],[\"name/440\",[366,36.376]],[\"comment/440\",[]],[\"name/441\",[367,36.376]],[\"comment/441\",[]],[\"name/442\",[368,37.589]],[\"comment/442\",[]],[\"name/443\",[369,37.589]],[\"comment/443\",[]],[\"name/444\",[379,60.943]],[\"comment/444\",[]],[\"name/445\",[366,36.376]],[\"comment/445\",[]],[\"name/446\",[367,36.376]],[\"comment/446\",[]],[\"name/447\",[368,37.589]],[\"comment/447\",[]],[\"name/448\",[369,37.589]],[\"comment/448\",[]],[\"name/449\",[380,60.943]],[\"comment/449\",[]],[\"name/450\",[366,36.376]],[\"comment/450\",[]],[\"name/451\",[367,36.376]],[\"comment/451\",[]],[\"name/452\",[368,37.589]],[\"comment/452\",[]],[\"name/453\",[369,37.589]],[\"comment/453\",[]],[\"name/454\",[381,60.943]],[\"comment/454\",[]],[\"name/455\",[373,44.849]],[\"comment/455\",[]],[\"name/456\",[366,36.376]],[\"comment/456\",[]],[\"name/457\",[367,36.376]],[\"comment/457\",[]],[\"name/458\",[368,37.589]],[\"comment/458\",[]],[\"name/459\",[369,37.589]],[\"comment/459\",[]],[\"name/460\",[382,60.943]],[\"comment/460\",[]],[\"name/461\",[373,44.849]],[\"comment/461\",[]],[\"name/462\",[366,36.376]],[\"comment/462\",[]],[\"name/463\",[367,36.376]],[\"comment/463\",[]],[\"name/464\",[368,37.589]],[\"comment/464\",[]],[\"name/465\",[369,37.589]],[\"comment/465\",[]],[\"name/466\",[383,60.943]],[\"comment/466\",[]],[\"name/467\",[366,36.376]],[\"comment/467\",[]],[\"name/468\",[367,36.376]],[\"comment/468\",[]],[\"name/469\",[368,37.589]],[\"comment/469\",[]],[\"name/470\",[369,37.589]],[\"comment/470\",[]],[\"name/471\",[384,60.943]],[\"comment/471\",[]],[\"name/472\",[366,36.376]],[\"comment/472\",[]],[\"name/473\",[367,36.376]],[\"comment/473\",[]],[\"name/474\",[368,37.589]],[\"comment/474\",[]],[\"name/475\",[369,37.589]],[\"comment/475\",[]],[\"name/476\",[385,60.943]],[\"comment/476\",[]],[\"name/477\",[373,44.849]],[\"comment/477\",[]],[\"name/478\",[366,36.376]],[\"comment/478\",[]],[\"name/479\",[367,36.376]],[\"comment/479\",[]],[\"name/480\",[368,37.589]],[\"comment/480\",[]],[\"name/481\",[369,37.589]],[\"comment/481\",[]],[\"name/482\",[386,60.943]],[\"comment/482\",[]],[\"name/483\",[387,55.835]],[\"comment/483\",[]],[\"name/484\",[388,55.835]],[\"comment/484\",[]],[\"name/485\",[389,60.943]],[\"comment/485\",[]],[\"name/486\",[390,60.943]],[\"comment/486\",[]],[\"name/487\",[391,60.943]],[\"comment/487\",[]],[\"name/488\",[320,52.47]],[\"comment/488\",[]],[\"name/489\",[392,60.943]],[\"comment/489\",[]],[\"name/490\",[393,60.943]],[\"comment/490\",[]],[\"name/491\",[394,60.943]],[\"comment/491\",[]],[\"name/492\",[366,36.376]],[\"comment/492\",[]],[\"name/493\",[367,36.376]],[\"comment/493\",[]],[\"name/494\",[368,37.589]],[\"comment/494\",[]],[\"name/495\",[369,37.589]],[\"comment/495\",[]],[\"name/496\",[395,60.943]],[\"comment/496\",[]],[\"name/497\",[372,49.957]],[\"comment/497\",[]],[\"name/498\",[373,44.849]],[\"comment/498\",[]],[\"name/499\",[366,36.376]],[\"comment/499\",[]],[\"name/500\",[367,36.376]],[\"comment/500\",[]],[\"name/501\",[368,37.589]],[\"comment/501\",[]],[\"name/502\",[369,37.589]],[\"comment/502\",[]],[\"name/503\",[396,60.943]],[\"comment/503\",[]],[\"name/504\",[371,52.47]],[\"comment/504\",[]],[\"name/505\",[373,44.849]],[\"comment/505\",[]],[\"name/506\",[374,52.47]],[\"comment/506\",[]],[\"name/507\",[372,49.957]],[\"comment/507\",[]],[\"name/508\",[397,55.835]],[\"comment/508\",[]],[\"name/509\",[387,55.835]],[\"comment/509\",[]],[\"name/510\",[7,36.964]],[\"comment/510\",[]],[\"name/511\",[367,36.376]],[\"comment/511\",[]],[\"name/512\",[398,60.943]],[\"comment/512\",[]],[\"name/513\",[7,36.964]],[\"comment/513\",[]],[\"name/514\",[367,36.376]],[\"comment/514\",[]],[\"name/515\",[366,36.376]],[\"comment/515\",[]],[\"name/516\",[367,36.376]],[\"comment/516\",[]],[\"name/517\",[368,37.589]],[\"comment/517\",[]],[\"name/518\",[369,37.589]],[\"comment/518\",[]],[\"name/519\",[399,60.943]],[\"comment/519\",[]],[\"name/520\",[373,44.849]],[\"comment/520\",[]],[\"name/521\",[374,52.47]],[\"comment/521\",[]],[\"name/522\",[372,49.957]],[\"comment/522\",[]],[\"name/523\",[366,36.376]],[\"comment/523\",[]],[\"name/524\",[367,36.376]],[\"comment/524\",[]],[\"name/525\",[368,37.589]],[\"comment/525\",[]],[\"name/526\",[369,37.589]],[\"comment/526\",[]],[\"name/527\",[400,60.943]],[\"comment/527\",[]],[\"name/528\",[401,60.943]],[\"comment/528\",[]],[\"name/529\",[349,55.835]],[\"comment/529\",[]],[\"name/530\",[366,36.376]],[\"comment/530\",[]],[\"name/531\",[367,36.376]],[\"comment/531\",[]],[\"name/532\",[368,37.589]],[\"comment/532\",[]],[\"name/533\",[369,37.589]],[\"comment/533\",[]],[\"name/534\",[402,60.943]],[\"comment/534\",[]],[\"name/535\",[366,36.376]],[\"comment/535\",[]],[\"name/536\",[403,60.943]],[\"comment/536\",[]],[\"name/537\",[340,49.957]],[\"comment/537\",[]],[\"name/538\",[341,49.957]],[\"comment/538\",[]],[\"name/539\",[376,55.835]],[\"comment/539\",[]],[\"name/540\",[404,60.943]],[\"comment/540\",[]],[\"name/541\",[405,60.943]],[\"comment/541\",[]],[\"name/542\",[406,60.943]],[\"comment/542\",[]],[\"name/543\",[407,60.943]],[\"comment/543\",[]],[\"name/544\",[408,60.943]],[\"comment/544\",[]],[\"name/545\",[409,60.943]],[\"comment/545\",[]],[\"name/546\",[410,60.943]],[\"comment/546\",[]],[\"name/547\",[411,60.943]],[\"comment/547\",[]],[\"name/548\",[412,60.943]],[\"comment/548\",[]],[\"name/549\",[413,60.943]],[\"comment/549\",[]],[\"name/550\",[414,60.943]],[\"comment/550\",[]],[\"name/551\",[415,60.943]],[\"comment/551\",[]],[\"name/552\",[416,60.943]],[\"comment/552\",[]],[\"name/553\",[417,60.943]],[\"comment/553\",[]],[\"name/554\",[418,60.943]],[\"comment/554\",[]],[\"name/555\",[419,60.943]],[\"comment/555\",[]],[\"name/556\",[366,36.376]],[\"comment/556\",[]],[\"name/557\",[3,52.47]],[\"comment/557\",[]],[\"name/558\",[300,49.957]],[\"comment/558\",[]],[\"name/559\",[420,60.943]],[\"comment/559\",[]],[\"name/560\",[421,60.943]],[\"comment/560\",[]],[\"name/561\",[348,55.835]],[\"comment/561\",[]],[\"name/562\",[422,60.943]],[\"comment/562\",[]],[\"name/563\",[30,55.835]],[\"comment/563\",[]],[\"name/564\",[423,60.943]],[\"comment/564\",[]],[\"name/565\",[424,60.943]],[\"comment/565\",[]],[\"name/566\",[425,60.943]],[\"comment/566\",[]],[\"name/567\",[426,60.943]],[\"comment/567\",[]],[\"name/568\",[311,55.835]],[\"comment/568\",[]],[\"name/569\",[427,60.943]],[\"comment/569\",[]],[\"name/570\",[428,60.943]],[\"comment/570\",[]],[\"name/571\",[429,60.943]],[\"comment/571\",[]],[\"name/572\",[292,55.835]],[\"comment/572\",[]],[\"name/573\",[49,52.47]],[\"comment/573\",[]],[\"name/574\",[45,49.957]],[\"comment/574\",[]],[\"name/575\",[46,49.957]],[\"comment/575\",[]],[\"name/576\",[47,52.47]],[\"comment/576\",[]],[\"name/577\",[48,52.47]],[\"comment/577\",[]],[\"name/578\",[23,55.835]],[\"comment/578\",[]],[\"name/579\",[430,60.943]],[\"comment/579\",[]],[\"name/580\",[431,60.943]],[\"comment/580\",[]],[\"name/581\",[68,44.849]],[\"comment/581\",[]],[\"name/582\",[432,47.95]],[\"comment/582\",[]],[\"name/583\",[433,55.835]],[\"comment/583\",[]],[\"name/584\",[434,60.943]],[\"comment/584\",[]],[\"name/585\",[283,46.28]],[\"comment/585\",[]],[\"name/586\",[435,47.95]],[\"comment/586\",[]],[\"name/587\",[388,55.835]],[\"comment/587\",[]],[\"name/588\",[436,60.943]],[\"comment/588\",[]],[\"name/589\",[437,52.47]],[\"comment/589\",[]],[\"name/590\",[438,60.943]],[\"comment/590\",[]],[\"name/591\",[325,55.835]],[\"comment/591\",[]],[\"name/592\",[439,60.943]],[\"comment/592\",[]],[\"name/593\",[320,52.47]],[\"comment/593\",[]],[\"name/594\",[326,55.835]],[\"comment/594\",[]],[\"name/595\",[440,60.943]],[\"comment/595\",[]],[\"name/596\",[36,49.957]],[\"comment/596\",[]],[\"name/597\",[441,60.943]],[\"comment/597\",[]],[\"name/598\",[442,60.943]],[\"comment/598\",[]],[\"name/599\",[371,52.47]],[\"comment/599\",[]],[\"name/600\",[8,49.957]],[\"comment/600\",[]],[\"name/601\",[443,60.943]],[\"comment/601\",[]],[\"name/602\",[444,60.943]],[\"comment/602\",[]],[\"name/603\",[445,60.943]],[\"comment/603\",[]],[\"name/604\",[446,60.943]],[\"comment/604\",[]],[\"name/605\",[447,60.943]],[\"comment/605\",[]],[\"name/606\",[448,60.943]],[\"comment/606\",[]],[\"name/607\",[449,60.943]],[\"comment/607\",[]],[\"name/608\",[450,60.943]],[\"comment/608\",[]],[\"name/609\",[451,60.943]],[\"comment/609\",[]],[\"name/610\",[452,60.943]],[\"comment/610\",[]],[\"name/611\",[36,49.957]],[\"comment/611\",[]],[\"name/612\",[432,47.95]],[\"comment/612\",[]],[\"name/613\",[453,60.943]],[\"comment/613\",[]],[\"name/614\",[68,44.849]],[\"comment/614\",[]],[\"name/615\",[432,47.95]],[\"comment/615\",[]],[\"name/616\",[283,46.28]],[\"comment/616\",[]],[\"name/617\",[435,47.95]],[\"comment/617\",[]],[\"name/618\",[454,55.835]],[\"comment/618\",[]],[\"name/619\",[437,52.47]],[\"comment/619\",[]],[\"name/620\",[455,60.943]],[\"comment/620\",[]],[\"name/621\",[68,44.849]],[\"comment/621\",[]],[\"name/622\",[432,47.95]],[\"comment/622\",[]],[\"name/623\",[433,55.835]],[\"comment/623\",[]],[\"name/624\",[456,60.943]],[\"comment/624\",[]],[\"name/625\",[283,46.28]],[\"comment/625\",[]],[\"name/626\",[435,47.95]],[\"comment/626\",[]],[\"name/627\",[454,55.835]],[\"comment/627\",[]],[\"name/628\",[338,52.47]],[\"comment/628\",[]],[\"name/629\",[437,52.47]],[\"comment/629\",[]],[\"name/630\",[397,55.835]],[\"comment/630\",[]],[\"name/631\",[457,60.943]],[\"comment/631\",[]],[\"name/632\",[68,44.849]],[\"comment/632\",[]],[\"name/633\",[432,47.95]],[\"comment/633\",[]],[\"name/634\",[458,60.943]],[\"comment/634\",[]],[\"name/635\",[338,52.47]],[\"comment/635\",[]],[\"name/636\",[283,46.28]],[\"comment/636\",[]],[\"name/637\",[435,47.95]],[\"comment/637\",[]],[\"name/638\",[459,60.943]],[\"comment/638\",[]],[\"name/639\",[460,60.943]],[\"comment/639\",[]],[\"name/640\",[68,44.849]],[\"comment/640\",[]],[\"name/641\",[45,49.957]],[\"comment/641\",[]],[\"name/642\",[46,49.957]],[\"comment/642\",[]],[\"name/643\",[461,60.943]],[\"comment/643\",[]],[\"name/644\",[7,36.964]],[\"comment/644\",[]],[\"name/645\",[462,60.943]],[\"comment/645\",[]],[\"name/646\",[463,60.943]],[\"comment/646\",[]],[\"name/647\",[464,60.943]],[\"comment/647\",[]],[\"name/648\",[283,46.28]],[\"comment/648\",[]],[\"name/649\",[435,47.95]],[\"comment/649\",[]],[\"name/650\",[4,55.835]],[\"comment/650\",[]],[\"name/651\",[45,49.957]],[\"comment/651\",[]],[\"name/652\",[46,49.957]],[\"comment/652\",[]],[\"name/653\",[47,52.47]],[\"comment/653\",[]],[\"name/654\",[49,52.47]],[\"comment/654\",[]],[\"name/655\",[48,52.47]],[\"comment/655\",[]],[\"name/656\",[17,55.835]],[\"comment/656\",[]],[\"name/657\",[9,49.957]],[\"comment/657\",[]],[\"name/658\",[465,60.943]],[\"comment/658\",[]],[\"name/659\",[466,60.943]],[\"comment/659\",[]],[\"name/660\",[467,60.943]],[\"comment/660\",[]],[\"name/661\",[340,49.957]],[\"comment/661\",[]],[\"name/662\",[341,49.957]],[\"comment/662\",[]],[\"name/663\",[468,60.943]],[\"comment/663\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":7,\"name\":{\"7\":{},\"40\":{},\"240\":{},\"245\":{},\"263\":{},\"265\":{},\"267\":{},\"326\":{},\"331\":{},\"335\":{},\"341\":{},\"349\":{},\"354\":{},\"510\":{},\"513\":{},\"644\":{}},\"comment\":{}}],[\"abs\",{\"_index\":93,\"name\":{\"109\":{}},\"comment\":{}}],[\"acos\",{\"_index\":94,\"name\":{\"110\":{}},\"comment\":{}}],[\"acosh\",{\"_index\":95,\"name\":{\"111\":{}},\"comment\":{}}],[\"adapter\",{\"_index\":308,\"name\":{\"352\":{}},\"comment\":{}}],[\"add\",{\"_index\":96,\"name\":{\"112\":{}},\"comment\":{}}],[\"age\",{\"_index\":438,\"name\":{\"590\":{}},\"comment\":{}}],[\"agent\",{\"_index\":289,\"name\":{\"321\":{}},\"comment\":{}}],[\"all\",{\"_index\":43,\"name\":{\"49\":{},\"113\":{}},\"comment\":{}}],[\"alpha\",{\"_index\":258,\"name\":{\"287\":{}},\"comment\":{}}],[\"analyze\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"annotations\",{\"_index\":437,\"name\":{\"589\":{},\"619\":{},\"629\":{}},\"comment\":{}}],[\"antispoof\",{\"_index\":392,\"name\":{\"489\":{}},\"comment\":{}}],[\"any\",{\"_index\":97,\"name\":{\"114\":{}},\"comment\":{}}],[\"anycanvas\",{\"_index\":356,\"name\":{\"413\":{}},\"comment\":{}}],[\"anyimage\",{\"_index\":357,\"name\":{\"414\":{}},\"comment\":{}}],[\"anyvideo\",{\"_index\":358,\"name\":{\"415\":{}},\"comment\":{}}],[\"argmax\",{\"_index\":98,\"name\":{\"115\":{}},\"comment\":{}}],[\"argmin\",{\"_index\":99,\"name\":{\"116\":{}},\"comment\":{}}],[\"array\",{\"_index\":80,\"name\":{\"96\":{}},\"comment\":{}}],[\"arraysync\",{\"_index\":81,\"name\":{\"97\":{}},\"comment\":{}}],[\"as1d\",{\"_index\":102,\"name\":{\"119\":{}},\"comment\":{}}],[\"as2d\",{\"_index\":103,\"name\":{\"120\":{}},\"comment\":{}}],[\"as3d\",{\"_index\":104,\"name\":{\"121\":{}},\"comment\":{}}],[\"as4d\",{\"_index\":105,\"name\":{\"122\":{}},\"comment\":{}}],[\"as5d\",{\"_index\":106,\"name\":{\"123\":{}},\"comment\":{}}],[\"asin\",{\"_index\":107,\"name\":{\"124\":{}},\"comment\":{}}],[\"asinh\",{\"_index\":108,\"name\":{\"125\":{}},\"comment\":{}}],[\"asscalar\",{\"_index\":100,\"name\":{\"117\":{}},\"comment\":{}}],[\"astype\",{\"_index\":101,\"name\":{\"118\":{}},\"comment\":{}}],[\"async\",{\"_index\":422,\"name\":{\"562\":{}},\"comment\":{}}],[\"atan\",{\"_index\":109,\"name\":{\"126\":{}},\"comment\":{}}],[\"atan2\",{\"_index\":110,\"name\":{\"127\":{}},\"comment\":{}}],[\"atanh\",{\"_index\":111,\"name\":{\"128\":{}},\"comment\":{}}],[\"attention\",{\"_index\":389,\"name\":{\"485\":{}},\"comment\":{}}],[\"autobrightness\",{\"_index\":405,\"name\":{\"541\":{}},\"comment\":{}}],[\"avgpool\",{\"_index\":112,\"name\":{\"129\":{}},\"comment\":{}}],[\"backend\",{\"_index\":300,\"name\":{\"337\":{},\"343\":{},\"351\":{},\"558\":{}},\"comment\":{}}],[\"backendenum\",{\"_index\":362,\"name\":{\"419\":{}},\"comment\":{}}],[\"backends\",{\"_index\":290,\"name\":{\"322\":{}},\"comment\":{}}],[\"batchnorm\",{\"_index\":114,\"name\":{\"131\":{}},\"comment\":{}}],[\"batchtospacend\",{\"_index\":113,\"name\":{\"130\":{}},\"comment\":{}}],[\"blur\",{\"_index\":409,\"name\":{\"545\":{}},\"comment\":{}}],[\"body\",{\"_index\":46,\"name\":{\"53\":{},\"575\":{},\"642\":{},\"652\":{}},\"comment\":{}}],[\"bodyannotation\",{\"_index\":329,\"name\":{\"376\":{}},\"comment\":{}}],[\"bodyannotationblazepose\",{\"_index\":447,\"name\":{\"605\":{}},\"comment\":{}}],[\"bodyannotationefficientpose\",{\"_index\":448,\"name\":{\"606\":{}},\"comment\":{}}],[\"bodyconfig\",{\"_index\":395,\"name\":{\"496\":{}},\"comment\":{}}],[\"bodygesture\",{\"_index\":317,\"name\":{\"364\":{}},\"comment\":{}}],[\"bodykeypoint\",{\"_index\":449,\"name\":{\"607\":{}},\"comment\":{}}],[\"bodylabels\",{\"_index\":277,\"name\":{\"306\":{}},\"comment\":{}}],[\"bodylandmark\",{\"_index\":328,\"name\":{\"375\":{}},\"comment\":{}}],[\"bodylandmarkblazepose\",{\"_index\":446,\"name\":{\"604\":{}},\"comment\":{}}],[\"bodylandmarkefficientnet\",{\"_index\":445,\"name\":{\"603\":{}},\"comment\":{}}],[\"bodylandmarkmovenet\",{\"_index\":444,\"name\":{\"602\":{}},\"comment\":{}}],[\"bodylandmarkposenet\",{\"_index\":443,\"name\":{\"601\":{}},\"comment\":{}}],[\"bodypartlabels\",{\"_index\":278,\"name\":{\"307\":{}},\"comment\":{}}],[\"bodyresult\",{\"_index\":453,\"name\":{\"613\":{}},\"comment\":{}}],[\"box\",{\"_index\":283,\"name\":{\"312\":{},\"585\":{},\"616\":{},\"625\":{},\"636\":{},\"648\":{}},\"comment\":{}}],[\"boxraw\",{\"_index\":435,\"name\":{\"586\":{},\"617\":{},\"626\":{},\"637\":{},\"649\":{}},\"comment\":{}}],[\"boxscore\",{\"_index\":433,\"name\":{\"583\":{},\"623\":{}},\"comment\":{}}],[\"brightness\",{\"_index\":406,\"name\":{\"542\":{}},\"comment\":{}}],[\"broadcastto\",{\"_index\":115,\"name\":{\"132\":{}},\"comment\":{}}],[\"browser\",{\"_index\":285,\"name\":{\"317\":{}},\"comment\":{}}],[\"buffer\",{\"_index\":78,\"name\":{\"94\":{}},\"comment\":{}}],[\"buffersync\",{\"_index\":79,\"name\":{\"95\":{}},\"comment\":{}}],[\"bytes\",{\"_index\":85,\"name\":{\"101\":{}},\"comment\":{}}],[\"cachemodels\",{\"_index\":424,\"name\":{\"565\":{}},\"comment\":{}}],[\"cachesensitivity\",{\"_index\":426,\"name\":{\"567\":{}},\"comment\":{}}],[\"canvas\",{\"_index\":9,\"name\":{\"9\":{},\"48\":{},\"358\":{},\"657\":{}},\"comment\":{}}],[\"capabilities\",{\"_index\":335,\"name\":{\"385\":{}},\"comment\":{}}],[\"cast\",{\"_index\":116,\"name\":{\"133\":{}},\"comment\":{}}],[\"ceil\",{\"_index\":117,\"name\":{\"134\":{}},\"comment\":{}}],[\"class\",{\"_index\":458,\"name\":{\"634\":{}},\"comment\":{}}],[\"clipbyvalue\",{\"_index\":118,\"name\":{\"135\":{}},\"comment\":{}}],[\"clone\",{\"_index\":90,\"name\":{\"106\":{}},\"comment\":{}}],[\"color\",{\"_index\":257,\"name\":{\"286\":{}},\"comment\":{}}],[\"compare\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"concat\",{\"_index\":119,\"name\":{\"136\":{}},\"comment\":{}}],[\"config\",{\"_index\":3,\"name\":{\"3\":{},\"380\":{},\"557\":{}},\"comment\":{}}],[\"constraints\",{\"_index\":336,\"name\":{\"386\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":1,\"name\":{\"1\":{},\"73\":{},\"83\":{},\"255\":{},\"316\":{},\"379\":{}},\"comment\":{}}],[\"contrast\",{\"_index\":407,\"name\":{\"543\":{}},\"comment\":{}}],[\"conv1d\",{\"_index\":120,\"name\":{\"137\":{}},\"comment\":{}}],[\"conv2d\",{\"_index\":122,\"name\":{\"139\":{}},\"comment\":{}}],[\"conv2dtranspose\",{\"_index\":121,\"name\":{\"138\":{}},\"comment\":{}}],[\"cos\",{\"_index\":123,\"name\":{\"140\":{}},\"comment\":{}}],[\"cosh\",{\"_index\":124,\"name\":{\"141\":{}},\"comment\":{}}],[\"cpu\",{\"_index\":309,\"name\":{\"353\":{}},\"comment\":{}}],[\"crop\",{\"_index\":350,\"name\":{\"401\":{}},\"comment\":{}}],[\"cumprod\",{\"_index\":125,\"name\":{\"142\":{}},\"comment\":{}}],[\"cumsum\",{\"_index\":126,\"name\":{\"143\":{}},\"comment\":{}}],[\"data\",{\"_index\":82,\"name\":{\"98\":{}},\"comment\":{}}],[\"dataid\",{\"_index\":69,\"name\":{\"85\":{}},\"comment\":{}}],[\"datasync\",{\"_index\":84,\"name\":{\"100\":{}},\"comment\":{}}],[\"datatogpu\",{\"_index\":83,\"name\":{\"99\":{}},\"comment\":{}}],[\"deallocate\",{\"_index\":428,\"name\":{\"570\":{}},\"comment\":{}}],[\"debug\",{\"_index\":348,\"name\":{\"399\":{},\"561\":{}},\"comment\":{}}],[\"default\",{\"_index\":35,\"name\":{\"35\":{}},\"comment\":{}}],[\"defaults\",{\"_index\":430,\"name\":{\"579\":{}},\"comment\":{}}],[\"depthtospace\",{\"_index\":127,\"name\":{\"144\":{}},\"comment\":{}}],[\"depthwiseconv2d\",{\"_index\":128,\"name\":{\"145\":{}},\"comment\":{}}],[\"description\",{\"_index\":391,\"name\":{\"487\":{}},\"comment\":{}}],[\"descriptor\",{\"_index\":40,\"name\":{\"44\":{}},\"comment\":{}}],[\"detect\",{\"_index\":32,\"name\":{\"32\":{}},\"comment\":{}}],[\"detector\",{\"_index\":387,\"name\":{\"483\":{},\"509\":{}},\"comment\":{}}],[\"devices\",{\"_index\":333,\"name\":{\"383\":{}},\"comment\":{}}],[\"dilation2d\",{\"_index\":129,\"name\":{\"146\":{}},\"comment\":{}}],[\"dispose\",{\"_index\":86,\"name\":{\"102\":{},\"276\":{}},\"comment\":{}}],[\"disposeintermediatetensors\",{\"_index\":248,\"name\":{\"275\":{}},\"comment\":{}}],[\"distance\",{\"_index\":36,\"name\":{\"37\":{},\"42\":{},\"596\":{},\"611\":{}},\"comment\":{}}],[\"div\",{\"_index\":131,\"name\":{\"148\":{}},\"comment\":{}}],[\"divnonan\",{\"_index\":130,\"name\":{\"147\":{}},\"comment\":{}}],[\"dot\",{\"_index\":132,\"name\":{\"149\":{}},\"comment\":{}}],[\"draw\",{\"_index\":12,\"name\":{\"12\":{},\"46\":{}},\"comment\":{}}],[\"drawattention\",{\"_index\":268,\"name\":{\"297\":{}},\"comment\":{}}],[\"drawboxes\",{\"_index\":270,\"name\":{\"299\":{}},\"comment\":{}}],[\"drawgaze\",{\"_index\":272,\"name\":{\"301\":{}},\"comment\":{}}],[\"drawgestures\",{\"_index\":269,\"name\":{\"298\":{}},\"comment\":{}}],[\"drawlabels\",{\"_index\":267,\"name\":{\"296\":{}},\"comment\":{}}],[\"drawoptions\",{\"_index\":256,\"name\":{\"285\":{}},\"comment\":{}}],[\"drawpoints\",{\"_index\":266,\"name\":{\"295\":{}},\"comment\":{}}],[\"drawpolygons\",{\"_index\":271,\"name\":{\"300\":{}},\"comment\":{}}],[\"dtype\",{\"_index\":72,\"name\":{\"88\":{}},\"comment\":{}}],[\"element\",{\"_index\":331,\"name\":{\"381\":{},\"398\":{}},\"comment\":{}}],[\"elu\",{\"_index\":133,\"name\":{\"150\":{}},\"comment\":{}}],[\"embedding\",{\"_index\":440,\"name\":{\"595\":{}},\"comment\":{}}],[\"emit\",{\"_index\":28,\"name\":{\"28\":{}},\"comment\":{}}],[\"emotion\",{\"_index\":320,\"name\":{\"367\":{},\"488\":{},\"593\":{}},\"comment\":{}}],[\"empty\",{\"_index\":468,\"name\":{\"663\":{}},\"comment\":{}}],[\"enabled\",{\"_index\":366,\"name\":{\"423\":{},\"434\":{},\"440\":{},\"445\":{},\"450\":{},\"456\":{},\"462\":{},\"467\":{},\"472\":{},\"478\":{},\"492\":{},\"499\":{},\"515\":{},\"523\":{},\"530\":{},\"535\":{},\"556\":{}},\"comment\":{}}],[\"enumerate\",{\"_index\":342,\"name\":{\"392\":{}},\"comment\":{}}],[\"env\",{\"_index\":11,\"name\":{\"11\":{},\"314\":{},\"315\":{}},\"comment\":{}}],[\"equal\",{\"_index\":134,\"name\":{\"151\":{}},\"comment\":{}}],[\"equalization\",{\"_index\":403,\"name\":{\"536\":{}},\"comment\":{}}],[\"erf\",{\"_index\":135,\"name\":{\"152\":{}},\"comment\":{}}],[\"error\",{\"_index\":467,\"name\":{\"660\":{}},\"comment\":{}}],[\"euclideannorm\",{\"_index\":136,\"name\":{\"153\":{}},\"comment\":{}}],[\"events\",{\"_index\":14,\"name\":{\"14\":{},\"412\":{}},\"comment\":{}}],[\"execute\",{\"_index\":245,\"name\":{\"272\":{}},\"comment\":{}}],[\"executeasync\",{\"_index\":246,\"name\":{\"273\":{}},\"comment\":{}}],[\"exp\",{\"_index\":137,\"name\":{\"154\":{}},\"comment\":{}}],[\"expanddims\",{\"_index\":138,\"name\":{\"155\":{}},\"comment\":{}}],[\"expm1\",{\"_index\":139,\"name\":{\"156\":{}},\"comment\":{}}],[\"externalcanvas\",{\"_index\":360,\"name\":{\"417\":{}},\"comment\":{}}],[\"face\",{\"_index\":45,\"name\":{\"52\":{},\"574\":{},\"641\":{},\"651\":{}},\"comment\":{}}],[\"faceantispoofconfig\",{\"_index\":383,\"name\":{\"466\":{}},\"comment\":{}}],[\"faceattentionconfig\",{\"_index\":380,\"name\":{\"449\":{}},\"comment\":{}}],[\"faceconfig\",{\"_index\":386,\"name\":{\"482\":{}},\"comment\":{}}],[\"facedescriptionconfig\",{\"_index\":381,\"name\":{\"454\":{}},\"comment\":{}}],[\"facedetectorconfig\",{\"_index\":370,\"name\":{\"427\":{}},\"comment\":{}}],[\"faceemotionconfig\",{\"_index\":382,\"name\":{\"460\":{}},\"comment\":{}}],[\"facegearconfig\",{\"_index\":385,\"name\":{\"476\":{}},\"comment\":{}}],[\"facegesture\",{\"_index\":316,\"name\":{\"363\":{}},\"comment\":{}}],[\"faceirisconfig\",{\"_index\":379,\"name\":{\"444\":{}},\"comment\":{}}],[\"facelabels\",{\"_index\":276,\"name\":{\"305\":{}},\"comment\":{}}],[\"facelandmark\",{\"_index\":327,\"name\":{\"374\":{}},\"comment\":{}}],[\"facelivenessconfig\",{\"_index\":384,\"name\":{\"471\":{}},\"comment\":{}}],[\"facemeshconfig\",{\"_index\":377,\"name\":{\"438\":{}},\"comment\":{}}],[\"faceresult\",{\"_index\":431,\"name\":{\"580\":{}},\"comment\":{}}],[\"facescore\",{\"_index\":434,\"name\":{\"584\":{}},\"comment\":{}}],[\"facetriangulation\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"faceuvmap\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"fft\",{\"_index\":140,\"name\":{\"157\":{}},\"comment\":{}}],[\"fillpolygons\",{\"_index\":273,\"name\":{\"302\":{}},\"comment\":{}}],[\"filter\",{\"_index\":292,\"name\":{\"324\":{},\"572\":{}},\"comment\":{}}],[\"filterconfig\",{\"_index\":402,\"name\":{\"534\":{}},\"comment\":{}}],[\"find\",{\"_index\":38,\"name\":{\"39\":{}},\"comment\":{}}],[\"finger\",{\"_index\":321,\"name\":{\"368\":{}},\"comment\":{}}],[\"fingercurl\",{\"_index\":322,\"name\":{\"369\":{}},\"comment\":{}}],[\"fingerdirection\",{\"_index\":323,\"name\":{\"370\":{}},\"comment\":{}}],[\"fingerlabels\",{\"_index\":280,\"name\":{\"309\":{}},\"comment\":{}}],[\"fingerscore\",{\"_index\":456,\"name\":{\"624\":{}},\"comment\":{}}],[\"flags\",{\"_index\":311,\"name\":{\"356\":{},\"568\":{}},\"comment\":{}}],[\"flatten\",{\"_index\":141,\"name\":{\"158\":{}},\"comment\":{}}],[\"flip\",{\"_index\":404,\"name\":{\"540\":{}},\"comment\":{}}],[\"floor\",{\"_index\":142,\"name\":{\"159\":{}},\"comment\":{}}],[\"floordiv\",{\"_index\":143,\"name\":{\"160\":{}},\"comment\":{}}],[\"font\",{\"_index\":261,\"name\":{\"290\":{}},\"comment\":{}}],[\"gather\",{\"_index\":144,\"name\":{\"161\":{}},\"comment\":{}}],[\"gear\",{\"_index\":394,\"name\":{\"491\":{}},\"comment\":{}}],[\"gender\",{\"_index\":325,\"name\":{\"372\":{},\"591\":{}},\"comment\":{}}],[\"genderscore\",{\"_index\":439,\"name\":{\"592\":{}},\"comment\":{}}],[\"genericconfig\",{\"_index\":365,\"name\":{\"422\":{}},\"comment\":{}}],[\"gesture\",{\"_index\":49,\"name\":{\"56\":{},\"573\":{},\"654\":{}},\"comment\":{}}],[\"gestureconfig\",{\"_index\":419,\"name\":{\"555\":{}},\"comment\":{}}],[\"gesturelabels\",{\"_index\":282,\"name\":{\"311\":{}},\"comment\":{}}],[\"gestureresult\",{\"_index\":459,\"name\":{\"638\":{}},\"comment\":{}}],[\"gestures\",{\"_index\":464,\"name\":{\"647\":{}},\"comment\":{}}],[\"getintermediatetensors\",{\"_index\":247,\"name\":{\"274\":{}},\"comment\":{}}],[\"gpu\",{\"_index\":297,\"name\":{\"333\":{}},\"comment\":{}}],[\"graphmodel\",{\"_index\":232,\"name\":{\"254\":{}},\"comment\":{}}],[\"greater\",{\"_index\":146,\"name\":{\"163\":{}},\"comment\":{}}],[\"greaterequal\",{\"_index\":145,\"name\":{\"162\":{}},\"comment\":{}}],[\"hand\",{\"_index\":47,\"name\":{\"54\":{},\"576\":{},\"653\":{}},\"comment\":{}}],[\"handconfig\",{\"_index\":396,\"name\":{\"503\":{}},\"comment\":{}}],[\"handgesture\",{\"_index\":318,\"name\":{\"365\":{}},\"comment\":{}}],[\"handlabels\",{\"_index\":279,\"name\":{\"308\":{}},\"comment\":{}}],[\"handresult\",{\"_index\":455,\"name\":{\"620\":{}},\"comment\":{}}],[\"hands\",{\"_index\":461,\"name\":{\"643\":{}},\"comment\":{}}],[\"handtype\",{\"_index\":324,\"name\":{\"371\":{}},\"comment\":{}}],[\"height\",{\"_index\":341,\"name\":{\"391\":{},\"403\":{},\"538\":{},\"662\":{}},\"comment\":{}}],[\"hue\",{\"_index\":411,\"name\":{\"547\":{}},\"comment\":{}}],[\"human\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"id\",{\"_index\":68,\"name\":{\"84\":{},\"404\":{},\"581\":{},\"614\":{},\"621\":{},\"632\":{},\"640\":{}},\"comment\":{}}],[\"ifft\",{\"_index\":147,\"name\":{\"164\":{}},\"comment\":{}}],[\"image\",{\"_index\":22,\"name\":{\"22\":{},\"359\":{}},\"comment\":{}}],[\"imagedata\",{\"_index\":313,\"name\":{\"360\":{}},\"comment\":{}}],[\"imageobjects\",{\"_index\":359,\"name\":{\"416\":{}},\"comment\":{}}],[\"incache\",{\"_index\":352,\"name\":{\"407\":{}},\"comment\":{}}],[\"index\",{\"_index\":39,\"name\":{\"41\":{}},\"comment\":{}}],[\"indices\",{\"_index\":224,\"name\":{\"242\":{},\"247\":{}},\"comment\":{}}],[\"init\",{\"_index\":25,\"name\":{\"25\":{},\"50\":{}},\"comment\":{}}],[\"initial\",{\"_index\":291,\"name\":{\"323\":{}},\"comment\":{}}],[\"input\",{\"_index\":361,\"name\":{\"418\":{}},\"comment\":{}}],[\"inputnodes\",{\"_index\":234,\"name\":{\"257\":{}},\"comment\":{}}],[\"inputs\",{\"_index\":236,\"name\":{\"259\":{}},\"comment\":{}}],[\"instance\",{\"_index\":64,\"name\":{\"74\":{}},\"comment\":{}}],[\"iouthreshold\",{\"_index\":374,\"name\":{\"431\":{},\"506\":{},\"521\":{}},\"comment\":{}}],[\"irfft\",{\"_index\":148,\"name\":{\"165\":{}},\"comment\":{}}],[\"iris\",{\"_index\":390,\"name\":{\"486\":{}},\"comment\":{}}],[\"irisgesture\",{\"_index\":319,\"name\":{\"366\":{}},\"comment\":{}}],[\"isdisposed\",{\"_index\":87,\"name\":{\"103\":{}},\"comment\":{}}],[\"isfinite\",{\"_index\":149,\"name\":{\"166\":{}},\"comment\":{}}],[\"isinf\",{\"_index\":150,\"name\":{\"167\":{}},\"comment\":{}}],[\"isnan\",{\"_index\":151,\"name\":{\"168\":{}},\"comment\":{}}],[\"keepinvalid\",{\"_index\":378,\"name\":{\"439\":{}},\"comment\":{}}],[\"kept\",{\"_index\":74,\"name\":{\"90\":{}},\"comment\":{}}],[\"kernelops\",{\"_index\":52,\"name\":{\"59\":{}},\"comment\":{}}],[\"kernels\",{\"_index\":312,\"name\":{\"357\":{}},\"comment\":{}}],[\"keypoints\",{\"_index\":454,\"name\":{\"618\":{},\"627\":{}},\"comment\":{}}],[\"kodachrome\",{\"_index\":415,\"name\":{\"551\":{}},\"comment\":{}}],[\"label\",{\"_index\":338,\"name\":{\"388\":{},\"628\":{},\"635\":{}},\"comment\":{}}],[\"labelcolor\",{\"_index\":259,\"name\":{\"288\":{}},\"comment\":{}}],[\"landmarks\",{\"_index\":397,\"name\":{\"508\":{},\"630\":{}},\"comment\":{}}],[\"leakyrelu\",{\"_index\":152,\"name\":{\"169\":{}},\"comment\":{}}],[\"left\",{\"_index\":462,\"name\":{\"645\":{}},\"comment\":{}}],[\"less\",{\"_index\":154,\"name\":{\"171\":{}},\"comment\":{}}],[\"lessequal\",{\"_index\":153,\"name\":{\"170\":{}},\"comment\":{}}],[\"lineheight\",{\"_index\":262,\"name\":{\"291\":{}},\"comment\":{}}],[\"linewidth\",{\"_index\":263,\"name\":{\"292\":{}},\"comment\":{}}],[\"list\",{\"_index\":66,\"name\":{\"79\":{}},\"comment\":{}}],[\"live\",{\"_index\":442,\"name\":{\"598\":{}},\"comment\":{}}],[\"liveness\",{\"_index\":393,\"name\":{\"490\":{}},\"comment\":{}}],[\"load\",{\"_index\":27,\"name\":{\"27\":{},\"78\":{},\"268\":{}},\"comment\":{}}],[\"loaded\",{\"_index\":67,\"name\":{\"80\":{}},\"comment\":{}}],[\"loadsync\",{\"_index\":242,\"name\":{\"269\":{}},\"comment\":{}}],[\"localresponsenormalization\",{\"_index\":155,\"name\":{\"172\":{}},\"comment\":{}}],[\"log\",{\"_index\":159,\"name\":{\"176\":{}},\"comment\":{}}],[\"log1p\",{\"_index\":160,\"name\":{\"177\":{}},\"comment\":{}}],[\"logicaland\",{\"_index\":161,\"name\":{\"178\":{}},\"comment\":{}}],[\"logicalnot\",{\"_index\":162,\"name\":{\"179\":{}},\"comment\":{}}],[\"logicalor\",{\"_index\":163,\"name\":{\"180\":{}},\"comment\":{}}],[\"logicalxor\",{\"_index\":164,\"name\":{\"181\":{}},\"comment\":{}}],[\"logsigmoid\",{\"_index\":156,\"name\":{\"173\":{}},\"comment\":{}}],[\"logsoftmax\",{\"_index\":157,\"name\":{\"174\":{}},\"comment\":{}}],[\"logsumexp\",{\"_index\":158,\"name\":{\"175\":{}},\"comment\":{}}],[\"mask\",{\"_index\":375,\"name\":{\"432\":{}},\"comment\":{}}],[\"match\",{\"_index\":13,\"name\":{\"13\":{},\"36\":{}},\"comment\":{}}],[\"matchoptions\",{\"_index\":41,\"name\":{\"45\":{}},\"comment\":{}}],[\"matmul\",{\"_index\":165,\"name\":{\"182\":{}},\"comment\":{}}],[\"max\",{\"_index\":167,\"name\":{\"184\":{}},\"comment\":{}}],[\"maxdetected\",{\"_index\":372,\"name\":{\"429\":{},\"497\":{},\"507\":{},\"522\":{}},\"comment\":{}}],[\"maximum\",{\"_index\":168,\"name\":{\"185\":{}},\"comment\":{}}],[\"maxpool\",{\"_index\":166,\"name\":{\"183\":{}},\"comment\":{}}],[\"mean\",{\"_index\":169,\"name\":{\"186\":{}},\"comment\":{}}],[\"mesh\",{\"_index\":388,\"name\":{\"484\":{},\"587\":{}},\"comment\":{}}],[\"meshraw\",{\"_index\":436,\"name\":{\"588\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":239,\"name\":{\"262\":{}},\"comment\":{}}],[\"min\",{\"_index\":170,\"name\":{\"187\":{}},\"comment\":{}}],[\"minconfidence\",{\"_index\":373,\"name\":{\"430\":{},\"455\":{},\"461\":{},\"477\":{},\"498\":{},\"505\":{},\"520\":{}},\"comment\":{}}],[\"minimum\",{\"_index\":171,\"name\":{\"188\":{}},\"comment\":{}}],[\"mirrorpad\",{\"_index\":172,\"name\":{\"189\":{}},\"comment\":{}}],[\"missing\",{\"_index\":55,\"name\":{\"62\":{}},\"comment\":{}}],[\"mod\",{\"_index\":173,\"name\":{\"190\":{}},\"comment\":{}}],[\"mode\",{\"_index\":349,\"name\":{\"400\":{},\"529\":{}},\"comment\":{}}],[\"model\",{\"_index\":310,\"name\":{\"355\":{}},\"comment\":{}}],[\"modelbasepath\",{\"_index\":423,\"name\":{\"564\":{}},\"comment\":{}}],[\"modelinfo\",{\"_index\":351,\"name\":{\"405\":{}},\"comment\":{}}],[\"modelpath\",{\"_index\":367,\"name\":{\"424\":{},\"435\":{},\"441\":{},\"446\":{},\"451\":{},\"457\":{},\"463\":{},\"468\":{},\"473\":{},\"479\":{},\"493\":{},\"500\":{},\"511\":{},\"514\":{},\"516\":{},\"524\":{},\"531\":{}},\"comment\":{}}],[\"models\",{\"_index\":50,\"name\":{\"57\":{},\"72\":{},\"75\":{}},\"comment\":{}}],[\"modelsignature\",{\"_index\":240,\"name\":{\"264\":{}},\"comment\":{}}],[\"modelstats\",{\"_index\":57,\"name\":{\"64\":{},\"71\":{}},\"comment\":{}}],[\"modelstructuredoutputkeys\",{\"_index\":241,\"name\":{\"266\":{}},\"comment\":{}}],[\"modelversion\",{\"_index\":233,\"name\":{\"256\":{}},\"comment\":{}}],[\"mul\",{\"_index\":174,\"name\":{\"191\":{}},\"comment\":{}}],[\"multithread\",{\"_index\":302,\"name\":{\"339\":{}},\"comment\":{}}],[\"name\",{\"_index\":53,\"name\":{\"60\":{},\"406\":{}},\"comment\":{}}],[\"neg\",{\"_index\":175,\"name\":{\"192\":{}},\"comment\":{}}],[\"negative\",{\"_index\":412,\"name\":{\"548\":{}},\"comment\":{}}],[\"next\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"node\",{\"_index\":286,\"name\":{\"318\":{}},\"comment\":{}}],[\"norm\",{\"_index\":176,\"name\":{\"193\":{}},\"comment\":{}}],[\"notequal\",{\"_index\":177,\"name\":{\"194\":{}},\"comment\":{}}],[\"now\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"numdefinedmodels\",{\"_index\":59,\"name\":{\"66\":{}},\"comment\":{}}],[\"numloadedmodels\",{\"_index\":58,\"name\":{\"65\":{}},\"comment\":{}}],[\"object\",{\"_index\":48,\"name\":{\"55\":{},\"577\":{},\"655\":{}},\"comment\":{}}],[\"objectconfig\",{\"_index\":399,\"name\":{\"519\":{}},\"comment\":{}}],[\"objectlabels\",{\"_index\":281,\"name\":{\"310\":{}},\"comment\":{}}],[\"objectresult\",{\"_index\":457,\"name\":{\"631\":{}},\"comment\":{}}],[\"objecttype\",{\"_index\":330,\"name\":{\"377\":{}},\"comment\":{}}],[\"offscreen\",{\"_index\":294,\"name\":{\"328\":{}},\"comment\":{}}],[\"onehot\",{\"_index\":178,\"name\":{\"195\":{}},\"comment\":{}}],[\"oneslike\",{\"_index\":179,\"name\":{\"196\":{}},\"comment\":{}}],[\"ops\",{\"_index\":56,\"name\":{\"63\":{}},\"comment\":{}}],[\"options\",{\"_index\":44,\"name\":{\"51\":{}},\"comment\":{}}],[\"outputnodes\",{\"_index\":235,\"name\":{\"258\":{}},\"comment\":{}}],[\"outputs\",{\"_index\":237,\"name\":{\"260\":{}},\"comment\":{}}],[\"pad\",{\"_index\":180,\"name\":{\"197\":{}},\"comment\":{}}],[\"part\",{\"_index\":450,\"name\":{\"608\":{}},\"comment\":{}}],[\"pause\",{\"_index\":344,\"name\":{\"394\":{}},\"comment\":{}}],[\"paused\",{\"_index\":339,\"name\":{\"389\":{}},\"comment\":{}}],[\"percentageloaded\",{\"_index\":60,\"name\":{\"67\":{}},\"comment\":{}}],[\"perfadd\",{\"_index\":295,\"name\":{\"329\":{}},\"comment\":{}}],[\"performance\",{\"_index\":17,\"name\":{\"17\":{},\"656\":{}},\"comment\":{}}],[\"person\",{\"_index\":42,\"name\":{\"47\":{}},\"comment\":{}}],[\"personresult\",{\"_index\":460,\"name\":{\"639\":{}},\"comment\":{}}],[\"persons\",{\"_index\":466,\"name\":{\"659\":{}},\"comment\":{}}],[\"pixelate\",{\"_index\":418,\"name\":{\"554\":{}},\"comment\":{}}],[\"platform\",{\"_index\":288,\"name\":{\"320\":{}},\"comment\":{}}],[\"play\",{\"_index\":345,\"name\":{\"395\":{}},\"comment\":{}}],[\"point\",{\"_index\":284,\"name\":{\"313\":{}},\"comment\":{}}],[\"pointsize\",{\"_index\":264,\"name\":{\"293\":{}},\"comment\":{}}],[\"polaroid\",{\"_index\":417,\"name\":{\"553\":{}},\"comment\":{}}],[\"pool\",{\"_index\":181,\"name\":{\"198\":{}},\"comment\":{}}],[\"position\",{\"_index\":451,\"name\":{\"609\":{}},\"comment\":{}}],[\"positionraw\",{\"_index\":452,\"name\":{\"610\":{}},\"comment\":{}}],[\"pow\",{\"_index\":182,\"name\":{\"199\":{}},\"comment\":{}}],[\"predict\",{\"_index\":244,\"name\":{\"271\":{}},\"comment\":{}}],[\"prelu\",{\"_index\":183,\"name\":{\"200\":{}},\"comment\":{}}],[\"print\",{\"_index\":89,\"name\":{\"105\":{}},\"comment\":{}}],[\"process\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"prod\",{\"_index\":184,\"name\":{\"201\":{}},\"comment\":{}}],[\"profile\",{\"_index\":31,\"name\":{\"31\":{}},\"comment\":{}}],[\"r0\",{\"_index\":249,\"name\":{\"278\":{}},\"comment\":{}}],[\"r1\",{\"_index\":250,\"name\":{\"279\":{}},\"comment\":{}}],[\"r2\",{\"_index\":251,\"name\":{\"280\":{}},\"comment\":{}}],[\"r3\",{\"_index\":252,\"name\":{\"281\":{}},\"comment\":{}}],[\"r4\",{\"_index\":253,\"name\":{\"282\":{}},\"comment\":{}}],[\"r5\",{\"_index\":254,\"name\":{\"283\":{}},\"comment\":{}}],[\"r6\",{\"_index\":255,\"name\":{\"284\":{}},\"comment\":{}}],[\"race\",{\"_index\":326,\"name\":{\"373\":{},\"594\":{}},\"comment\":{}}],[\"rank\",{\"_index\":77,\"name\":{\"93\":{},\"277\":{}},\"comment\":{}}],[\"ranktype\",{\"_index\":73,\"name\":{\"89\":{}},\"comment\":{}}],[\"ratio\",{\"_index\":401,\"name\":{\"528\":{}},\"comment\":{}}],[\"real\",{\"_index\":441,\"name\":{\"597\":{}},\"comment\":{}}],[\"reciprocal\",{\"_index\":185,\"name\":{\"202\":{}},\"comment\":{}}],[\"relu\",{\"_index\":186,\"name\":{\"203\":{}},\"comment\":{}}],[\"relu6\",{\"_index\":187,\"name\":{\"204\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":304,\"name\":{\"345\":{}},\"comment\":{}}],[\"reset\",{\"_index\":19,\"name\":{\"19\":{},\"77\":{}},\"comment\":{}}],[\"reshape\",{\"_index\":189,\"name\":{\"206\":{}},\"comment\":{}}],[\"reshapeas\",{\"_index\":188,\"name\":{\"205\":{}},\"comment\":{}}],[\"resizebilinear\",{\"_index\":190,\"name\":{\"207\":{}},\"comment\":{}}],[\"resizenearestneighbor\",{\"_index\":191,\"name\":{\"208\":{}},\"comment\":{}}],[\"result\",{\"_index\":4,\"name\":{\"4\":{},\"650\":{}},\"comment\":{}}],[\"return\",{\"_index\":376,\"name\":{\"433\":{},\"539\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":192,\"name\":{\"209\":{}},\"comment\":{}}],[\"rfft\",{\"_index\":193,\"name\":{\"210\":{}},\"comment\":{}}],[\"right\",{\"_index\":463,\"name\":{\"646\":{}},\"comment\":{}}],[\"rotation\",{\"_index\":371,\"name\":{\"428\":{},\"504\":{},\"599\":{}},\"comment\":{}}],[\"round\",{\"_index\":194,\"name\":{\"211\":{}},\"comment\":{}}],[\"roundrect\",{\"_index\":265,\"name\":{\"294\":{}},\"comment\":{}}],[\"rsqrt\",{\"_index\":195,\"name\":{\"212\":{}},\"comment\":{}}],[\"saturation\",{\"_index\":410,\"name\":{\"546\":{}},\"comment\":{}}],[\"save\",{\"_index\":243,\"name\":{\"270\":{}},\"comment\":{}}],[\"scopeid\",{\"_index\":75,\"name\":{\"91\":{}},\"comment\":{}}],[\"score\",{\"_index\":432,\"name\":{\"582\":{},\"612\":{},\"615\":{},\"622\":{},\"633\":{}},\"comment\":{}}],[\"segmentation\",{\"_index\":23,\"name\":{\"23\":{},\"578\":{}},\"comment\":{}}],[\"segmentationconfig\",{\"_index\":400,\"name\":{\"527\":{}},\"comment\":{}}],[\"segmentationenum\",{\"_index\":364,\"name\":{\"421\":{}},\"comment\":{}}],[\"selu\",{\"_index\":196,\"name\":{\"213\":{}},\"comment\":{}}],[\"separableconv2d\",{\"_index\":197,\"name\":{\"214\":{}},\"comment\":{}}],[\"sepia\",{\"_index\":413,\"name\":{\"549\":{}},\"comment\":{}}],[\"settings\",{\"_index\":337,\"name\":{\"387\":{}},\"comment\":{}}],[\"shader\",{\"_index\":305,\"name\":{\"346\":{}},\"comment\":{}}],[\"shadowcolor\",{\"_index\":260,\"name\":{\"289\":{}},\"comment\":{}}],[\"shape\",{\"_index\":70,\"name\":{\"86\":{}},\"comment\":{}}],[\"sharpness\",{\"_index\":408,\"name\":{\"544\":{}},\"comment\":{}}],[\"sigmoid\",{\"_index\":198,\"name\":{\"215\":{}},\"comment\":{}}],[\"sign\",{\"_index\":199,\"name\":{\"216\":{}},\"comment\":{}}],[\"simd\",{\"_index\":301,\"name\":{\"338\":{}},\"comment\":{}}],[\"similarity\",{\"_index\":37,\"name\":{\"38\":{},\"43\":{}},\"comment\":{}}],[\"sin\",{\"_index\":200,\"name\":{\"217\":{}},\"comment\":{}}],[\"sinh\",{\"_index\":201,\"name\":{\"218\":{}},\"comment\":{}}],[\"size\",{\"_index\":71,\"name\":{\"87\":{}},\"comment\":{}}],[\"sizedesired\",{\"_index\":353,\"name\":{\"408\":{}},\"comment\":{}}],[\"sizefrommanifest\",{\"_index\":354,\"name\":{\"409\":{}},\"comment\":{}}],[\"sizeloadedweights\",{\"_index\":355,\"name\":{\"410\":{}},\"comment\":{}}],[\"skeleton\",{\"_index\":398,\"name\":{\"512\":{}},\"comment\":{}}],[\"skipallowed\",{\"_index\":429,\"name\":{\"571\":{}},\"comment\":{}}],[\"skipframes\",{\"_index\":368,\"name\":{\"425\":{},\"436\":{},\"442\":{},\"447\":{},\"452\":{},\"458\":{},\"464\":{},\"469\":{},\"474\":{},\"480\":{},\"494\":{},\"501\":{},\"517\":{},\"525\":{},\"532\":{}},\"comment\":{}}],[\"skiptime\",{\"_index\":369,\"name\":{\"426\":{},\"437\":{},\"443\":{},\"448\":{},\"453\":{},\"459\":{},\"465\":{},\"470\":{},\"475\":{},\"481\":{},\"495\":{},\"502\":{},\"518\":{},\"526\":{},\"533\":{}},\"comment\":{}}],[\"sleep\",{\"_index\":33,\"name\":{\"33\":{}},\"comment\":{}}],[\"slice\",{\"_index\":202,\"name\":{\"219\":{}},\"comment\":{}}],[\"softmax\",{\"_index\":203,\"name\":{\"220\":{}},\"comment\":{}}],[\"softplus\",{\"_index\":204,\"name\":{\"221\":{}},\"comment\":{}}],[\"softwarekernels\",{\"_index\":427,\"name\":{\"569\":{}},\"comment\":{}}],[\"spacetobatchnd\",{\"_index\":205,\"name\":{\"222\":{}},\"comment\":{}}],[\"split\",{\"_index\":206,\"name\":{\"223\":{}},\"comment\":{}}],[\"sqrt\",{\"_index\":207,\"name\":{\"224\":{}},\"comment\":{}}],[\"square\",{\"_index\":208,\"name\":{\"225\":{}},\"comment\":{}}],[\"squareddifference\",{\"_index\":209,\"name\":{\"226\":{}},\"comment\":{}}],[\"squeeze\",{\"_index\":210,\"name\":{\"227\":{}},\"comment\":{}}],[\"stack\",{\"_index\":211,\"name\":{\"228\":{}},\"comment\":{}}],[\"start\",{\"_index\":343,\"name\":{\"393\":{}},\"comment\":{}}],[\"state\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"stats\",{\"_index\":65,\"name\":{\"76\":{}},\"comment\":{}}],[\"step\",{\"_index\":212,\"name\":{\"229\":{}},\"comment\":{}}],[\"stop\",{\"_index\":346,\"name\":{\"396\":{}},\"comment\":{}}],[\"stream\",{\"_index\":332,\"name\":{\"382\":{}},\"comment\":{}}],[\"stridedslice\",{\"_index\":213,\"name\":{\"230\":{}},\"comment\":{}}],[\"strides\",{\"_index\":76,\"name\":{\"92\":{}},\"comment\":{}}],[\"sub\",{\"_index\":214,\"name\":{\"231\":{}},\"comment\":{}}],[\"sum\",{\"_index\":215,\"name\":{\"232\":{}},\"comment\":{}}],[\"supported\",{\"_index\":299,\"name\":{\"336\":{},\"342\":{},\"350\":{}},\"comment\":{}}],[\"tan\",{\"_index\":216,\"name\":{\"233\":{}},\"comment\":{}}],[\"tanh\",{\"_index\":217,\"name\":{\"234\":{}},\"comment\":{}}],[\"technicolor\",{\"_index\":416,\"name\":{\"552\":{}},\"comment\":{}}],[\"tensor\",{\"_index\":8,\"name\":{\"8\":{},\"82\":{},\"252\":{},\"600\":{}},\"comment\":{}}],[\"tensor4d\",{\"_index\":231,\"name\":{\"253\":{}},\"comment\":{}}],[\"tensorflow\",{\"_index\":296,\"name\":{\"330\":{}},\"comment\":{}}],[\"tf\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"tfjs\",{\"_index\":293,\"name\":{\"325\":{}},\"comment\":{}}],[\"throwifdisposed\",{\"_index\":88,\"name\":{\"104\":{}},\"comment\":{}}],[\"tile\",{\"_index\":218,\"name\":{\"235\":{}},\"comment\":{}}],[\"timestamp\",{\"_index\":465,\"name\":{\"658\":{}},\"comment\":{}}],[\"tobool\",{\"_index\":219,\"name\":{\"236\":{}},\"comment\":{}}],[\"tofloat\",{\"_index\":220,\"name\":{\"237\":{}},\"comment\":{}}],[\"toint\",{\"_index\":221,\"name\":{\"238\":{}},\"comment\":{}}],[\"topk\",{\"_index\":222,\"name\":{\"239\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":91,\"name\":{\"107\":{}},\"comment\":{}}],[\"totalsizefrommanifest\",{\"_index\":61,\"name\":{\"68\":{}},\"comment\":{}}],[\"totalsizeloading\",{\"_index\":63,\"name\":{\"70\":{}},\"comment\":{}}],[\"totalsizeweights\",{\"_index\":62,\"name\":{\"69\":{}},\"comment\":{}}],[\"track\",{\"_index\":334,\"name\":{\"384\":{}},\"comment\":{}}],[\"transpose\",{\"_index\":225,\"name\":{\"243\":{}},\"comment\":{}}],[\"unique\",{\"_index\":226,\"name\":{\"244\":{}},\"comment\":{}}],[\"unsortedsegmentsum\",{\"_index\":227,\"name\":{\"248\":{}},\"comment\":{}}],[\"unstack\",{\"_index\":228,\"name\":{\"249\":{}},\"comment\":{}}],[\"updatebackend\",{\"_index\":314,\"name\":{\"361\":{}},\"comment\":{}}],[\"updatecpu\",{\"_index\":315,\"name\":{\"362\":{}},\"comment\":{}}],[\"url\",{\"_index\":54,\"name\":{\"61\":{},\"411\":{}},\"comment\":{}}],[\"usecurves\",{\"_index\":275,\"name\":{\"304\":{}},\"comment\":{}}],[\"usedepth\",{\"_index\":274,\"name\":{\"303\":{}},\"comment\":{}}],[\"validate\",{\"_index\":20,\"name\":{\"20\":{},\"81\":{}},\"comment\":{}}],[\"validatemodel\",{\"_index\":51,\"name\":{\"58\":{}},\"comment\":{}}],[\"validatemodels\",{\"_index\":425,\"name\":{\"566\":{}},\"comment\":{}}],[\"values\",{\"_index\":223,\"name\":{\"241\":{},\"246\":{}},\"comment\":{}}],[\"variable\",{\"_index\":92,\"name\":{\"108\":{}},\"comment\":{}}],[\"vendor\",{\"_index\":306,\"name\":{\"347\":{}},\"comment\":{}}],[\"version\",{\"_index\":2,\"name\":{\"2\":{},\"327\":{},\"332\":{},\"344\":{}},\"comment\":{}}],[\"video\",{\"_index\":34,\"name\":{\"34\":{}},\"comment\":{}}],[\"vintage\",{\"_index\":414,\"name\":{\"550\":{}},\"comment\":{}}],[\"warmup\",{\"_index\":30,\"name\":{\"30\":{},\"563\":{}},\"comment\":{}}],[\"warmupenum\",{\"_index\":363,\"name\":{\"420\":{}},\"comment\":{}}],[\"wasm\",{\"_index\":298,\"name\":{\"334\":{}},\"comment\":{}}],[\"wasmpath\",{\"_index\":420,\"name\":{\"559\":{}},\"comment\":{}}],[\"wasmplatformfetch\",{\"_index\":421,\"name\":{\"560\":{}},\"comment\":{}}],[\"webcam\",{\"_index\":26,\"name\":{\"26\":{},\"378\":{}},\"comment\":{}}],[\"webcamconfig\",{\"_index\":347,\"name\":{\"397\":{}},\"comment\":{}}],[\"webgl\",{\"_index\":303,\"name\":{\"340\":{}},\"comment\":{}}],[\"webgpu\",{\"_index\":307,\"name\":{\"348\":{}},\"comment\":{}}],[\"weights\",{\"_index\":238,\"name\":{\"261\":{}},\"comment\":{}}],[\"where\",{\"_index\":229,\"name\":{\"250\":{}},\"comment\":{}}],[\"width\",{\"_index\":340,\"name\":{\"390\":{},\"402\":{},\"537\":{},\"661\":{}},\"comment\":{}}],[\"worker\",{\"_index\":287,\"name\":{\"319\":{}},\"comment\":{}}],[\"zeroslike\",{\"_index\":230,\"name\":{\"251\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\",\"8388608\":\"Reference\"},\"rows\":[{\"kind\":128,\"name\":\"Human\",\"url\":\"classes/Human.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Human.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Human.html#version\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/Human.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"classes/Human.html#result\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"classes/Human.html#state\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"process\",\"url\":\"classes/Human.html#process\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Human.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"classes/Human.html#__type.tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.__type\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"classes/Human.html#__type.canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.__type\"},{\"kind\":1024,\"name\":\"tf\",\"url\":\"classes/Human.html#tf\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"env\",\"url\":\"classes/Human.html#env\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Human.html#draw\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"match\",\"url\":\"classes/Human.html#match\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"events\",\"url\":\"classes/Human.html#events\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceTriangulation\",\"url\":\"classes/Human.html#faceTriangulation\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceUVMap\",\"url\":\"classes/Human.html#faceUVMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"classes/Human.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"analyze\",\"url\":\"classes/Human.html#analyze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Human.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/Human.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"now\",\"url\":\"classes/Human.html#now\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"image\",\"url\":\"classes/Human.html#image\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"segmentation\",\"url\":\"classes/Human.html#segmentation\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"compare\",\"url\":\"classes/Human.html#compare\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"init\",\"url\":\"classes/Human.html#init\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"webcam\",\"url\":\"classes/Human.html#webcam\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/Human.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"emit\",\"url\":\"classes/Human.html#emit\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"next\",\"url\":\"classes/Human.html#next\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"warmup\",\"url\":\"classes/Human.html#warmup\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"profile\",\"url\":\"classes/Human.html#profile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"detect\",\"url\":\"classes/Human.html#detect\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"sleep\",\"url\":\"classes/Human.html#sleep\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"video\",\"url\":\"classes/Human.html#video\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"index.html#default\",\"classes\":\"tsd-kind-reference\"},{\"kind\":4,\"name\":\"match\",\"url\":\"modules/match.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/match.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"similarity\",\"url\":\"functions/match.similarity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"find\",\"url\":\"functions/match.find.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/match.find.html#find.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"match.find.find\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"functions/match.find.html#find.__type.index\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"functions/match.find.html#find.__type.distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"similarity\",\"url\":\"functions/match.find.html#find.__type.similarity\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":4194304,\"name\":\"Descriptor\",\"url\":\"types/match.Descriptor.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4194304,\"name\":\"MatchOptions\",\"url\":\"types/match.MatchOptions.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4,\"name\":\"draw\",\"url\":\"modules/draw.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"person\",\"url\":\"functions/draw.person.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"canvas\",\"url\":\"functions/draw.canvas.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"all\",\"url\":\"functions/draw.all.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"init\",\"url\":\"functions/draw.init.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":32,\"name\":\"options\",\"url\":\"variables/draw.options.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"face\",\"url\":\"functions/draw.face.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"body\",\"url\":\"functions/draw.body.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"hand\",\"url\":\"functions/draw.hand.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"object\",\"url\":\"functions/draw.object.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"gesture\",\"url\":\"functions/draw.gesture.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":4,\"name\":\"models\",\"url\":\"modules/models.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"validateModel\",\"url\":\"functions/models.validateModel.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":256,\"name\":\"KernelOps\",\"url\":\"interfaces/models.KernelOps.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/models.KernelOps.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/models.KernelOps.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"missing\",\"url\":\"interfaces/models.KernelOps.html#missing\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"ops\",\"url\":\"interfaces/models.KernelOps.html#ops\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":256,\"name\":\"ModelStats\",\"url\":\"interfaces/models.ModelStats.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"numLoadedModels\",\"url\":\"interfaces/models.ModelStats.html#numLoadedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"numDefinedModels\",\"url\":\"interfaces/models.ModelStats.html#numDefinedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"percentageLoaded\",\"url\":\"interfaces/models.ModelStats.html#percentageLoaded\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeFromManifest\",\"url\":\"interfaces/models.ModelStats.html#totalSizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeWeights\",\"url\":\"interfaces/models.ModelStats.html#totalSizeWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeLoading\",\"url\":\"interfaces/models.ModelStats.html#totalSizeLoading\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"modelStats\",\"url\":\"interfaces/models.ModelStats.html#modelStats\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":128,\"name\":\"Models\",\"url\":\"classes/models.Models.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/models.Models.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":1024,\"name\":\"instance\",\"url\":\"classes/models.Models.html#instance\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":1024,\"name\":\"models\",\"url\":\"classes/models.Models.html#models\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"stats\",\"url\":\"classes/models.Models.html#stats\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/models.Models.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/models.Models.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"list\",\"url\":\"classes/models.Models.html#list\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"loaded\",\"url\":\"classes/models.Models.html#loaded\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/models.Models.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":128,\"name\":\"Tensor\",\"url\":\"classes/Tensor-1.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tensor-1.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"classes/Tensor-1.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dataId\",\"url\":\"classes/Tensor-1.html#dataId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"shape\",\"url\":\"classes/Tensor-1.html#shape\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"classes/Tensor-1.html#size\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dtype\",\"url\":\"classes/Tensor-1.html#dtype\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"rankType\",\"url\":\"classes/Tensor-1.html#rankType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"kept\",\"url\":\"classes/Tensor-1.html#kept\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"scopeId\",\"url\":\"classes/Tensor-1.html#scopeId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"strides\",\"url\":\"classes/Tensor-1.html#strides\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"rank\",\"url\":\"classes/Tensor-1.html#rank\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"buffer\",\"url\":\"classes/Tensor-1.html#buffer\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bufferSync\",\"url\":\"classes/Tensor-1.html#bufferSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"array\",\"url\":\"classes/Tensor-1.html#array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"arraySync\",\"url\":\"classes/Tensor-1.html#arraySync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"data\",\"url\":\"classes/Tensor-1.html#data\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataToGPU\",\"url\":\"classes/Tensor-1.html#dataToGPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataSync\",\"url\":\"classes/Tensor-1.html#dataSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bytes\",\"url\":\"classes/Tensor-1.html#bytes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/Tensor-1.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"isDisposed\",\"url\":\"classes/Tensor-1.html#isDisposed\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"throwIfDisposed\",\"url\":\"classes/Tensor-1.html#throwIfDisposed\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"print\",\"url\":\"classes/Tensor-1.html#print\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/Tensor-1.html#clone\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Tensor-1.html#toString\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"variable\",\"url\":\"classes/Tensor-1.html#variable\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"abs\",\"url\":\"classes/Tensor-1.html#abs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acos\",\"url\":\"classes/Tensor-1.html#acos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acosh\",\"url\":\"classes/Tensor-1.html#acosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/Tensor-1.html#add\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"all\",\"url\":\"classes/Tensor-1.html#all\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"any\",\"url\":\"classes/Tensor-1.html#any\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMax\",\"url\":\"classes/Tensor-1.html#argMax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMin\",\"url\":\"classes/Tensor-1.html#argMin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asScalar\",\"url\":\"classes/Tensor-1.html#asScalar\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asType\",\"url\":\"classes/Tensor-1.html#asType\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as1D\",\"url\":\"classes/Tensor-1.html#as1D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as2D\",\"url\":\"classes/Tensor-1.html#as2D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as3D\",\"url\":\"classes/Tensor-1.html#as3D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as4D\",\"url\":\"classes/Tensor-1.html#as4D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as5D\",\"url\":\"classes/Tensor-1.html#as5D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asin\",\"url\":\"classes/Tensor-1.html#asin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asinh\",\"url\":\"classes/Tensor-1.html#asinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan\",\"url\":\"classes/Tensor-1.html#atan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan2\",\"url\":\"classes/Tensor-1.html#atan2\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atanh\",\"url\":\"classes/Tensor-1.html#atanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"avgPool\",\"url\":\"classes/Tensor-1.html#avgPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchToSpaceND\",\"url\":\"classes/Tensor-1.html#batchToSpaceND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchNorm\",\"url\":\"classes/Tensor-1.html#batchNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"broadcastTo\",\"url\":\"classes/Tensor-1.html#broadcastTo\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cast\",\"url\":\"classes/Tensor-1.html#cast\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ceil\",\"url\":\"classes/Tensor-1.html#ceil\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clipByValue\",\"url\":\"classes/Tensor-1.html#clipByValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"concat\",\"url\":\"classes/Tensor-1.html#concat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv1d\",\"url\":\"classes/Tensor-1.html#conv1d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2dTranspose\",\"url\":\"classes/Tensor-1.html#conv2dTranspose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2d\",\"url\":\"classes/Tensor-1.html#conv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cos\",\"url\":\"classes/Tensor-1.html#cos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cosh\",\"url\":\"classes/Tensor-1.html#cosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumprod\",\"url\":\"classes/Tensor-1.html#cumprod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumsum\",\"url\":\"classes/Tensor-1.html#cumsum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthToSpace\",\"url\":\"classes/Tensor-1.html#depthToSpace\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthwiseConv2d\",\"url\":\"classes/Tensor-1.html#depthwiseConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dilation2d\",\"url\":\"classes/Tensor-1.html#dilation2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"divNoNan\",\"url\":\"classes/Tensor-1.html#divNoNan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"div\",\"url\":\"classes/Tensor-1.html#div\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dot\",\"url\":\"classes/Tensor-1.html#dot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"elu\",\"url\":\"classes/Tensor-1.html#elu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"equal\",\"url\":\"classes/Tensor-1.html#equal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"erf\",\"url\":\"classes/Tensor-1.html#erf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"euclideanNorm\",\"url\":\"classes/Tensor-1.html#euclideanNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"exp\",\"url\":\"classes/Tensor-1.html#exp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expandDims\",\"url\":\"classes/Tensor-1.html#expandDims\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expm1\",\"url\":\"classes/Tensor-1.html#expm1\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"fft\",\"url\":\"classes/Tensor-1.html#fft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"flatten\",\"url\":\"classes/Tensor-1.html#flatten\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floor\",\"url\":\"classes/Tensor-1.html#floor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floorDiv\",\"url\":\"classes/Tensor-1.html#floorDiv\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"gather\",\"url\":\"classes/Tensor-1.html#gather\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greaterEqual\",\"url\":\"classes/Tensor-1.html#greaterEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greater\",\"url\":\"classes/Tensor-1.html#greater\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ifft\",\"url\":\"classes/Tensor-1.html#ifft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"irfft\",\"url\":\"classes/Tensor-1.html#irfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isFinite\",\"url\":\"classes/Tensor-1.html#isFinite\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isInf\",\"url\":\"classes/Tensor-1.html#isInf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isNaN\",\"url\":\"classes/Tensor-1.html#isNaN\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"leakyRelu\",\"url\":\"classes/Tensor-1.html#leakyRelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"lessEqual\",\"url\":\"classes/Tensor-1.html#lessEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"less\",\"url\":\"classes/Tensor-1.html#less\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"localResponseNormalization\",\"url\":\"classes/Tensor-1.html#localResponseNormalization\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSigmoid\",\"url\":\"classes/Tensor-1.html#logSigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSoftmax\",\"url\":\"classes/Tensor-1.html#logSoftmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSumExp\",\"url\":\"classes/Tensor-1.html#logSumExp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log\",\"url\":\"classes/Tensor-1.html#log\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log1p\",\"url\":\"classes/Tensor-1.html#log1p\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalAnd\",\"url\":\"classes/Tensor-1.html#logicalAnd\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalNot\",\"url\":\"classes/Tensor-1.html#logicalNot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalOr\",\"url\":\"classes/Tensor-1.html#logicalOr\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalXor\",\"url\":\"classes/Tensor-1.html#logicalXor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"matMul\",\"url\":\"classes/Tensor-1.html#matMul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maxPool\",\"url\":\"classes/Tensor-1.html#maxPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"max\",\"url\":\"classes/Tensor-1.html#max\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maximum\",\"url\":\"classes/Tensor-1.html#maximum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mean\",\"url\":\"classes/Tensor-1.html#mean\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"min\",\"url\":\"classes/Tensor-1.html#min\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"minimum\",\"url\":\"classes/Tensor-1.html#minimum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mirrorPad\",\"url\":\"classes/Tensor-1.html#mirrorPad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mod\",\"url\":\"classes/Tensor-1.html#mod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mul\",\"url\":\"classes/Tensor-1.html#mul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"neg\",\"url\":\"classes/Tensor-1.html#neg\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"norm\",\"url\":\"classes/Tensor-1.html#norm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"notEqual\",\"url\":\"classes/Tensor-1.html#notEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"oneHot\",\"url\":\"classes/Tensor-1.html#oneHot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"onesLike\",\"url\":\"classes/Tensor-1.html#onesLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pad\",\"url\":\"classes/Tensor-1.html#pad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pool\",\"url\":\"classes/Tensor-1.html#pool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pow\",\"url\":\"classes/Tensor-1.html#pow\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prelu\",\"url\":\"classes/Tensor-1.html#prelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prod\",\"url\":\"classes/Tensor-1.html#prod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reciprocal\",\"url\":\"classes/Tensor-1.html#reciprocal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu\",\"url\":\"classes/Tensor-1.html#relu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu6\",\"url\":\"classes/Tensor-1.html#relu6\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshapeAs\",\"url\":\"classes/Tensor-1.html#reshapeAs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshape\",\"url\":\"classes/Tensor-1.html#reshape\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeBilinear\",\"url\":\"classes/Tensor-1.html#resizeBilinear\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeNearestNeighbor\",\"url\":\"classes/Tensor-1.html#resizeNearestNeighbor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reverse\",\"url\":\"classes/Tensor-1.html#reverse\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rfft\",\"url\":\"classes/Tensor-1.html#rfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"round\",\"url\":\"classes/Tensor-1.html#round\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rsqrt\",\"url\":\"classes/Tensor-1.html#rsqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"selu\",\"url\":\"classes/Tensor-1.html#selu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"separableConv2d\",\"url\":\"classes/Tensor-1.html#separableConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sigmoid\",\"url\":\"classes/Tensor-1.html#sigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sign\",\"url\":\"classes/Tensor-1.html#sign\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sin\",\"url\":\"classes/Tensor-1.html#sin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sinh\",\"url\":\"classes/Tensor-1.html#sinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"slice\",\"url\":\"classes/Tensor-1.html#slice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softmax\",\"url\":\"classes/Tensor-1.html#softmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softplus\",\"url\":\"classes/Tensor-1.html#softplus\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"spaceToBatchND\",\"url\":\"classes/Tensor-1.html#spaceToBatchND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"split\",\"url\":\"classes/Tensor-1.html#split\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sqrt\",\"url\":\"classes/Tensor-1.html#sqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"square\",\"url\":\"classes/Tensor-1.html#square\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squaredDifference\",\"url\":\"classes/Tensor-1.html#squaredDifference\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squeeze\",\"url\":\"classes/Tensor-1.html#squeeze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stack\",\"url\":\"classes/Tensor-1.html#stack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"step\",\"url\":\"classes/Tensor-1.html#step\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stridedSlice\",\"url\":\"classes/Tensor-1.html#stridedSlice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sub\",\"url\":\"classes/Tensor-1.html#sub\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sum\",\"url\":\"classes/Tensor-1.html#sum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tan\",\"url\":\"classes/Tensor-1.html#tan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tanh\",\"url\":\"classes/Tensor-1.html#tanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tile\",\"url\":\"classes/Tensor-1.html#tile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toBool\",\"url\":\"classes/Tensor-1.html#toBool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toFloat\",\"url\":\"classes/Tensor-1.html#toFloat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toInt\",\"url\":\"classes/Tensor-1.html#toInt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"topk\",\"url\":\"classes/Tensor-1.html#topk\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.topk.topk\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.values\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.indices\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":2048,\"name\":\"transpose\",\"url\":\"classes/Tensor-1.html#transpose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unique\",\"url\":\"classes/Tensor-1.html#unique\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.unique.unique\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.values-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.indices-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":2048,\"name\":\"unsortedSegmentSum\",\"url\":\"classes/Tensor-1.html#unsortedSegmentSum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unstack\",\"url\":\"classes/Tensor-1.html#unstack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"where\",\"url\":\"classes/Tensor-1.html#where\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"zerosLike\",\"url\":\"classes/Tensor-1.html#zerosLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":4,\"name\":\"Tensor\",\"url\":\"modules/Tensor.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":4194304,\"name\":\"Tensor4D\",\"url\":\"types/Tensor4D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"GraphModel\",\"url\":\"classes/GraphModel.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraphModel.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"modelVersion\",\"url\":\"classes/GraphModel.html#modelVersion\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputNodes\",\"url\":\"classes/GraphModel.html#inputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputNodes\",\"url\":\"classes/GraphModel.html#outputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputs\",\"url\":\"classes/GraphModel.html#inputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputs\",\"url\":\"classes/GraphModel.html#outputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"weights\",\"url\":\"classes/GraphModel.html#weights\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"metadata\",\"url\":\"classes/GraphModel.html#metadata\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#metadata.metadata-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.metadata.metadata\"},{\"kind\":262144,\"name\":\"modelSignature\",\"url\":\"classes/GraphModel.html#modelSignature\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelSignature.modelSignature-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelSignature.modelSignature\"},{\"kind\":262144,\"name\":\"modelStructuredOutputKeys\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys.modelStructuredOutputKeys-1.__type-2\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelStructuredOutputKeys.modelStructuredOutputKeys\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/GraphModel.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"loadSync\",\"url\":\"classes/GraphModel.html#loadSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/GraphModel.html#save\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"predict\",\"url\":\"classes/GraphModel.html#predict\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"predictAsync\",\"url\":\"classes/GraphModel.html#predictAsync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"execute\",\"url\":\"classes/GraphModel.html#execute\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"executeAsync\",\"url\":\"classes/GraphModel.html#executeAsync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"getIntermediateTensors\",\"url\":\"classes/GraphModel.html#getIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"disposeIntermediateTensors\",\"url\":\"classes/GraphModel.html#disposeIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/GraphModel.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":8,\"name\":\"Rank\",\"url\":\"enums/Rank.html\",\"classes\":\"tsd-kind-enum\"},{\"kind\":16,\"name\":\"R0\",\"url\":\"enums/Rank.html#R0\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R1\",\"url\":\"enums/Rank.html#R1\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R2\",\"url\":\"enums/Rank.html#R2\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R3\",\"url\":\"enums/Rank.html#R3\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R4\",\"url\":\"enums/Rank.html#R4\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R5\",\"url\":\"enums/Rank.html#R5\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R6\",\"url\":\"enums/Rank.html#R6\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":256,\"name\":\"DrawOptions\",\"url\":\"interfaces/DrawOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"interfaces/DrawOptions.html#color\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"alpha\",\"url\":\"interfaces/DrawOptions.html#alpha\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"labelColor\",\"url\":\"interfaces/DrawOptions.html#labelColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"shadowColor\",\"url\":\"interfaces/DrawOptions.html#shadowColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/DrawOptions.html#font\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineHeight\",\"url\":\"interfaces/DrawOptions.html#lineHeight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/DrawOptions.html#lineWidth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"pointSize\",\"url\":\"interfaces/DrawOptions.html#pointSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"roundRect\",\"url\":\"interfaces/DrawOptions.html#roundRect\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPoints\",\"url\":\"interfaces/DrawOptions.html#drawPoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawLabels\",\"url\":\"interfaces/DrawOptions.html#drawLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawAttention\",\"url\":\"interfaces/DrawOptions.html#drawAttention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGestures\",\"url\":\"interfaces/DrawOptions.html#drawGestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawBoxes\",\"url\":\"interfaces/DrawOptions.html#drawBoxes\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPolygons\",\"url\":\"interfaces/DrawOptions.html#drawPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGaze\",\"url\":\"interfaces/DrawOptions.html#drawGaze\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fillPolygons\",\"url\":\"interfaces/DrawOptions.html#fillPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useDepth\",\"url\":\"interfaces/DrawOptions.html#useDepth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useCurves\",\"url\":\"interfaces/DrawOptions.html#useCurves\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"faceLabels\",\"url\":\"interfaces/DrawOptions.html#faceLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyLabels\",\"url\":\"interfaces/DrawOptions.html#bodyLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyPartLabels\",\"url\":\"interfaces/DrawOptions.html#bodyPartLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"handLabels\",\"url\":\"interfaces/DrawOptions.html#handLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fingerLabels\",\"url\":\"interfaces/DrawOptions.html#fingerLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"objectLabels\",\"url\":\"interfaces/DrawOptions.html#objectLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"gestureLabels\",\"url\":\"interfaces/DrawOptions.html#gestureLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":4194304,\"name\":\"Box\",\"url\":\"types/Box.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Point\",\"url\":\"types/Point.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":32,\"name\":\"env\",\"url\":\"variables/env-1.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":128,\"name\":\"Env\",\"url\":\"classes/Env.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Env.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"browser\",\"url\":\"classes/Env.html#browser\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"node\",\"url\":\"classes/Env.html#node\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"worker\",\"url\":\"classes/Env.html#worker\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"platform\",\"url\":\"classes/Env.html#platform\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"agent\",\"url\":\"classes/Env.html#agent\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"backends\",\"url\":\"classes/Env.html#backends\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"initial\",\"url\":\"classes/Env.html#initial\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"classes/Env.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tfjs\",\"url\":\"classes/Env.html#tfjs\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-2.version-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"offscreen\",\"url\":\"classes/Env.html#offscreen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"perfadd\",\"url\":\"classes/Env.html#perfadd\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tensorflow\",\"url\":\"classes/Env.html#tensorflow\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-1.version\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"gpu\",\"url\":\"classes/Env.html#__type-1.gpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"wasm\",\"url\":\"classes/Env.html#wasm\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-3.supported\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-3.backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"simd\",\"url\":\"classes/Env.html#__type-3.simd\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"multithread\",\"url\":\"classes/Env.html#__type-3.multithread\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"webgl\",\"url\":\"classes/Env.html#webgl\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-4.supported-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-4.backend-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#__type-4.version-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"classes/Env.html#__type-4.renderer\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"shader\",\"url\":\"classes/Env.html#__type-4.shader\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"vendor\",\"url\":\"classes/Env.html#__type-4.vendor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"webgpu\",\"url\":\"classes/Env.html#webgpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type-5\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#__type-5.supported-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#__type-5.backend-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"adapter\",\"url\":\"classes/Env.html#__type-5.adapter\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"cpu\",\"url\":\"classes/Env.html#cpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"model\",\"url\":\"classes/Env.html#__type.model\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"classes/Env.html#__type.flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.__type\"},{\"kind\":1024,\"name\":\"kernels\",\"url\":\"classes/Env.html#kernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"Canvas\",\"url\":\"classes/Env.html#Canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"Image\",\"url\":\"classes/Env.html#Image\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"ImageData\",\"url\":\"classes/Env.html#ImageData\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateBackend\",\"url\":\"classes/Env.html#updateBackend\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateCPU\",\"url\":\"classes/Env.html#updateCPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":4194304,\"name\":\"FaceGesture\",\"url\":\"types/FaceGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyGesture\",\"url\":\"types/BodyGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandGesture\",\"url\":\"types/HandGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"IrisGesture\",\"url\":\"types/IrisGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Emotion\",\"url\":\"types/Emotion.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Finger\",\"url\":\"types/Finger.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerCurl\",\"url\":\"types/FingerCurl.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerDirection\",\"url\":\"types/FingerDirection.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandType\",\"url\":\"types/HandType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Gender\",\"url\":\"types/Gender.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Race\",\"url\":\"types/Race.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FaceLandmark\",\"url\":\"types/FaceLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmark\",\"url\":\"types/BodyLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotation\",\"url\":\"types/BodyAnnotation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ObjectType\",\"url\":\"types/ObjectType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"WebCam\",\"url\":\"classes/WebCam.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/WebCam.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/WebCam.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"classes/WebCam.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"stream\",\"url\":\"classes/WebCam.html#stream\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"devices\",\"url\":\"classes/WebCam.html#devices\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"track\",\"url\":\"classes/WebCam.html#track\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"capabilities\",\"url\":\"classes/WebCam.html#capabilities\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"constraints\",\"url\":\"classes/WebCam.html#constraints\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"settings\",\"url\":\"classes/WebCam.html#settings\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"label\",\"url\":\"classes/WebCam.html#label\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"paused\",\"url\":\"classes/WebCam.html#paused\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"width\",\"url\":\"classes/WebCam.html#width\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"height\",\"url\":\"classes/WebCam.html#height\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"enumerate\",\"url\":\"classes/WebCam.html#enumerate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"start\",\"url\":\"classes/WebCam.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"pause\",\"url\":\"classes/WebCam.html#pause\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"play\",\"url\":\"classes/WebCam.html#play\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/WebCam.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":256,\"name\":\"WebCamConfig\",\"url\":\"interfaces/WebCamConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"interfaces/WebCamConfig.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/WebCamConfig.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/WebCamConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"crop\",\"url\":\"interfaces/WebCamConfig.html#crop\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/WebCamConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/WebCamConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/WebCamConfig.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":256,\"name\":\"ModelInfo\",\"url\":\"interfaces/ModelInfo.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/ModelInfo.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"inCache\",\"url\":\"interfaces/ModelInfo.html#inCache\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeDesired\",\"url\":\"interfaces/ModelInfo.html#sizeDesired\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeFromManifest\",\"url\":\"interfaces/ModelInfo.html#sizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeLoadedWeights\",\"url\":\"interfaces/ModelInfo.html#sizeLoadedWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/ModelInfo.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":4194304,\"name\":\"Events\",\"url\":\"types/Events.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyCanvas\",\"url\":\"types/AnyCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyImage\",\"url\":\"types/AnyImage.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyVideo\",\"url\":\"types/AnyVideo.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ImageObjects\",\"url\":\"types/ImageObjects.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ExternalCanvas\",\"url\":\"types/ExternalCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Input\",\"url\":\"types/Input.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BackendEnum\",\"url\":\"types/BackendEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"WarmupEnum\",\"url\":\"types/WarmupEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"SegmentationEnum\",\"url\":\"types/SegmentationEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"GenericConfig\",\"url\":\"interfaces/GenericConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GenericConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/GenericConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/GenericConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/GenericConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":256,\"name\":\"FaceDetectorConfig\",\"url\":\"interfaces/FaceDetectorConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceDetectorConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/FaceDetectorConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDetectorConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/FaceDetectorConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"mask\",\"url\":\"interfaces/FaceDetectorConfig.html#mask\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FaceDetectorConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDetectorConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDetectorConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDetectorConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDetectorConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":256,\"name\":\"FaceMeshConfig\",\"url\":\"interfaces/FaceMeshConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"keepInvalid\",\"url\":\"interfaces/FaceMeshConfig.html#keepInvalid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceMeshConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceMeshConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceMeshConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceMeshConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":256,\"name\":\"FaceIrisConfig\",\"url\":\"interfaces/FaceIrisConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceIrisConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceIrisConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceIrisConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceIrisConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":256,\"name\":\"FaceAttentionConfig\",\"url\":\"interfaces/FaceAttentionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAttentionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAttentionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAttentionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAttentionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":256,\"name\":\"FaceDescriptionConfig\",\"url\":\"interfaces/FaceDescriptionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDescriptionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDescriptionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDescriptionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":256,\"name\":\"FaceEmotionConfig\",\"url\":\"interfaces/FaceEmotionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceEmotionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceEmotionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceEmotionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceEmotionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceEmotionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":256,\"name\":\"FaceAntiSpoofConfig\",\"url\":\"interfaces/FaceAntiSpoofConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":256,\"name\":\"FaceLivenessConfig\",\"url\":\"interfaces/FaceLivenessConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceLivenessConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceLivenessConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceLivenessConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceLivenessConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":256,\"name\":\"FaceGearConfig\",\"url\":\"interfaces/FaceGearConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceGearConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceGearConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceGearConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceGearConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceGearConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":256,\"name\":\"FaceConfig\",\"url\":\"interfaces/FaceConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/FaceConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceConfig.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"attention\",\"url\":\"interfaces/FaceConfig.html#attention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"iris\",\"url\":\"interfaces/FaceConfig.html#iris\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"interfaces/FaceConfig.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceConfig.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"antispoof\",\"url\":\"interfaces/FaceConfig.html#antispoof\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"liveness\",\"url\":\"interfaces/FaceConfig.html#liveness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"gear\",\"url\":\"interfaces/FaceConfig.html#gear\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":256,\"name\":\"BodyConfig\",\"url\":\"interfaces/BodyConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/BodyConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/BodyConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/BodyConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/BodyConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/BodyConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/BodyConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":256,\"name\":\"HandConfig\",\"url\":\"interfaces/HandConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/HandConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/HandConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/HandConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/HandConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandConfig.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/HandConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#__type.modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.__type\"},{\"kind\":1024,\"name\":\"skeleton\",\"url\":\"interfaces/HandConfig.html#skeleton\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#__type-1.modelPath-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.__type\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/HandConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#modelPath-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/HandConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/HandConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":256,\"name\":\"ObjectConfig\",\"url\":\"interfaces/ObjectConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/ObjectConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/ObjectConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/ObjectConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/ObjectConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/ObjectConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/ObjectConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/ObjectConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":256,\"name\":\"SegmentationConfig\",\"url\":\"interfaces/SegmentationConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"ratio\",\"url\":\"interfaces/SegmentationConfig.html#ratio\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/SegmentationConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/SegmentationConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/SegmentationConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/SegmentationConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/SegmentationConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":256,\"name\":\"FilterConfig\",\"url\":\"interfaces/FilterConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FilterConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"equalization\",\"url\":\"interfaces/FilterConfig.html#equalization\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/FilterConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/FilterConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FilterConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"flip\",\"url\":\"interfaces/FilterConfig.html#flip\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"autoBrightness\",\"url\":\"interfaces/FilterConfig.html#autoBrightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"brightness\",\"url\":\"interfaces/FilterConfig.html#brightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"contrast\",\"url\":\"interfaces/FilterConfig.html#contrast\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sharpness\",\"url\":\"interfaces/FilterConfig.html#sharpness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"blur\",\"url\":\"interfaces/FilterConfig.html#blur\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"saturation\",\"url\":\"interfaces/FilterConfig.html#saturation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"hue\",\"url\":\"interfaces/FilterConfig.html#hue\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"negative\",\"url\":\"interfaces/FilterConfig.html#negative\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sepia\",\"url\":\"interfaces/FilterConfig.html#sepia\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"vintage\",\"url\":\"interfaces/FilterConfig.html#vintage\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"kodachrome\",\"url\":\"interfaces/FilterConfig.html#kodachrome\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"technicolor\",\"url\":\"interfaces/FilterConfig.html#technicolor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"polaroid\",\"url\":\"interfaces/FilterConfig.html#polaroid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"pixelate\",\"url\":\"interfaces/FilterConfig.html#pixelate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":256,\"name\":\"GestureConfig\",\"url\":\"interfaces/GestureConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GestureConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GestureConfig\"},{\"kind\":256,\"name\":\"Config\",\"url\":\"interfaces/Config.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"interfaces/Config.html#backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPath\",\"url\":\"interfaces/Config.html#wasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPlatformFetch\",\"url\":\"interfaces/Config.html#wasmPlatformFetch\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/Config.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"async\",\"url\":\"interfaces/Config.html#async\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"warmup\",\"url\":\"interfaces/Config.html#warmup\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"modelBasePath\",\"url\":\"interfaces/Config.html#modelBasePath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheModels\",\"url\":\"interfaces/Config.html#cacheModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"validateModels\",\"url\":\"interfaces/Config.html#validateModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheSensitivity\",\"url\":\"interfaces/Config.html#cacheSensitivity\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/Config.html#flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"softwareKernels\",\"url\":\"interfaces/Config.html#softwareKernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"deallocate\",\"url\":\"interfaces/Config.html#deallocate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"skipAllowed\",\"url\":\"interfaces/Config.html#skipAllowed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"interfaces/Config.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Config.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Config.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Config.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Config.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Config.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"segmentation\",\"url\":\"interfaces/Config.html#segmentation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":32,\"name\":\"defaults\",\"url\":\"variables/defaults.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":256,\"name\":\"FaceResult\",\"url\":\"interfaces/FaceResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/FaceResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/FaceResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/FaceResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"faceScore\",\"url\":\"interfaces/FaceResult.html#faceScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/FaceResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/FaceResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceResult.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"meshRaw\",\"url\":\"interfaces/FaceResult.html#meshRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/FaceResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/FaceResult.html#age\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"gender\",\"url\":\"interfaces/FaceResult.html#gender\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"genderScore\",\"url\":\"interfaces/FaceResult.html#genderScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceResult.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"race\",\"url\":\"interfaces/FaceResult.html#race\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"embedding\",\"url\":\"interfaces/FaceResult.html#embedding\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/FaceResult.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"real\",\"url\":\"interfaces/FaceResult.html#real\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"live\",\"url\":\"interfaces/FaceResult.html#live\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceResult.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"interfaces/FaceResult.html#tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":4194304,\"name\":\"BodyLandmarkPoseNet\",\"url\":\"types/BodyLandmarkPoseNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkMoveNet\",\"url\":\"types/BodyLandmarkMoveNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkEfficientNet\",\"url\":\"types/BodyLandmarkEfficientNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkBlazePose\",\"url\":\"types/BodyLandmarkBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationBlazePose\",\"url\":\"types/BodyAnnotationBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationEfficientPose\",\"url\":\"types/BodyAnnotationEfficientPose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"BodyKeypoint\",\"url\":\"interfaces/BodyKeypoint.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"part\",\"url\":\"interfaces/BodyKeypoint.html#part\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/BodyKeypoint.html#position\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"positionRaw\",\"url\":\"interfaces/BodyKeypoint.html#positionRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/BodyKeypoint.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyKeypoint.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":256,\"name\":\"BodyResult\",\"url\":\"interfaces/BodyResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BodyResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/BodyResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/BodyResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/BodyResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/BodyResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":256,\"name\":\"HandResult\",\"url\":\"interfaces/HandResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/HandResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/HandResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/HandResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"fingerScore\",\"url\":\"interfaces/HandResult.html#fingerScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/HandResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/HandResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/HandResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/HandResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/HandResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandResult.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":256,\"name\":\"ObjectResult\",\"url\":\"interfaces/ObjectResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ObjectResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/ObjectResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"class\",\"url\":\"interfaces/ObjectResult.html#class\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/ObjectResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/ObjectResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/ObjectResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":4194304,\"name\":\"GestureResult\",\"url\":\"types/GestureResult.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"PersonResult\",\"url\":\"interfaces/PersonResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PersonResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/PersonResult.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/PersonResult.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"hands\",\"url\":\"interfaces/PersonResult.html#hands\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PersonResult.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"interfaces/PersonResult.html#__type.left\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"interfaces/PersonResult.html#__type.right\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.__type\"},{\"kind\":1024,\"name\":\"gestures\",\"url\":\"interfaces/PersonResult.html#gestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/PersonResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/PersonResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":256,\"name\":\"Result\",\"url\":\"interfaces/Result.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Result.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Result.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Result.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Result.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Result.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"interfaces/Result.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"interfaces/Result.html#canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"timestamp\",\"url\":\"interfaces/Result.html#timestamp\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"persons\",\"url\":\"interfaces/Result.html#persons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"interfaces/Result.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/Result.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/Result.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":64,\"name\":\"empty\",\"url\":\"functions/empty.html\",\"classes\":\"tsd-kind-function\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,60.958]],[\"comment/0\",[]],[\"name/1\",[1,46.295]],[\"comment/1\",[]],[\"name/2\",[2,49.972]],[\"comment/2\",[]],[\"name/3\",[3,52.485]],[\"comment/3\",[]],[\"name/4\",[4,55.85]],[\"comment/4\",[]],[\"name/5\",[5,60.958]],[\"comment/5\",[]],[\"name/6\",[6,60.958]],[\"comment/6\",[]],[\"name/7\",[7,36.979]],[\"comment/7\",[]],[\"name/8\",[8,49.972]],[\"comment/8\",[]],[\"name/9\",[9,49.972]],[\"comment/9\",[]],[\"name/10\",[10,60.958]],[\"comment/10\",[]],[\"name/11\",[11,52.485]],[\"comment/11\",[]],[\"name/12\",[12,55.85]],[\"comment/12\",[]],[\"name/13\",[13,55.85]],[\"comment/13\",[]],[\"name/14\",[14,55.85]],[\"comment/14\",[]],[\"name/15\",[15,60.958]],[\"comment/15\",[]],[\"name/16\",[16,60.958]],[\"comment/16\",[]],[\"name/17\",[17,55.85]],[\"comment/17\",[]],[\"name/18\",[18,60.958]],[\"comment/18\",[]],[\"name/19\",[19,55.85]],[\"comment/19\",[]],[\"name/20\",[20,55.85]],[\"comment/20\",[]],[\"name/21\",[21,60.958]],[\"comment/21\",[]],[\"name/22\",[22,55.85]],[\"comment/22\",[]],[\"name/23\",[23,55.85]],[\"comment/23\",[]],[\"name/24\",[24,60.958]],[\"comment/24\",[]],[\"name/25\",[25,55.85]],[\"comment/25\",[]],[\"name/26\",[26,55.85]],[\"comment/26\",[]],[\"name/27\",[27,52.485]],[\"comment/27\",[]],[\"name/28\",[28,60.958]],[\"comment/28\",[]],[\"name/29\",[29,60.958]],[\"comment/29\",[]],[\"name/30\",[30,55.85]],[\"comment/30\",[]],[\"name/31\",[31,60.958]],[\"comment/31\",[]],[\"name/32\",[32,60.958]],[\"comment/32\",[]],[\"name/33\",[33,60.958]],[\"comment/33\",[]],[\"name/34\",[34,60.958]],[\"comment/34\",[]],[\"name/35\",[35,60.958]],[\"comment/35\",[]],[\"name/36\",[13,55.85]],[\"comment/36\",[]],[\"name/37\",[36,49.972]],[\"comment/37\",[]],[\"name/38\",[37,55.85]],[\"comment/38\",[]],[\"name/39\",[38,60.958]],[\"comment/39\",[]],[\"name/40\",[7,36.979]],[\"comment/40\",[]],[\"name/41\",[39,60.958]],[\"comment/41\",[]],[\"name/42\",[36,49.972]],[\"comment/42\",[]],[\"name/43\",[37,55.85]],[\"comment/43\",[]],[\"name/44\",[40,60.958]],[\"comment/44\",[]],[\"name/45\",[41,60.958]],[\"comment/45\",[]],[\"name/46\",[12,55.85]],[\"comment/46\",[]],[\"name/47\",[42,60.958]],[\"comment/47\",[]],[\"name/48\",[9,49.972]],[\"comment/48\",[]],[\"name/49\",[43,55.85]],[\"comment/49\",[]],[\"name/50\",[25,55.85]],[\"comment/50\",[]],[\"name/51\",[44,60.958]],[\"comment/51\",[]],[\"name/52\",[45,49.972]],[\"comment/52\",[]],[\"name/53\",[46,49.972]],[\"comment/53\",[]],[\"name/54\",[47,52.485]],[\"comment/54\",[]],[\"name/55\",[48,52.485]],[\"comment/55\",[]],[\"name/56\",[49,52.485]],[\"comment/56\",[]],[\"name/57\",[50,52.485]],[\"comment/57\",[]],[\"name/58\",[51,60.958]],[\"comment/58\",[]],[\"name/59\",[52,60.958]],[\"comment/59\",[]],[\"name/60\",[53,55.85]],[\"comment/60\",[]],[\"name/61\",[54,55.85]],[\"comment/61\",[]],[\"name/62\",[55,60.958]],[\"comment/62\",[]],[\"name/63\",[56,60.958]],[\"comment/63\",[]],[\"name/64\",[57,55.85]],[\"comment/64\",[]],[\"name/65\",[58,60.958]],[\"comment/65\",[]],[\"name/66\",[59,60.958]],[\"comment/66\",[]],[\"name/67\",[60,60.958]],[\"comment/67\",[]],[\"name/68\",[61,60.958]],[\"comment/68\",[]],[\"name/69\",[62,60.958]],[\"comment/69\",[]],[\"name/70\",[63,60.958]],[\"comment/70\",[]],[\"name/71\",[57,55.85]],[\"comment/71\",[]],[\"name/72\",[50,52.485]],[\"comment/72\",[]],[\"name/73\",[1,46.295]],[\"comment/73\",[]],[\"name/74\",[64,60.958]],[\"comment/74\",[]],[\"name/75\",[50,52.485]],[\"comment/75\",[]],[\"name/76\",[65,60.958]],[\"comment/76\",[]],[\"name/77\",[19,55.85]],[\"comment/77\",[]],[\"name/78\",[27,52.485]],[\"comment/78\",[]],[\"name/79\",[66,60.958]],[\"comment/79\",[]],[\"name/80\",[67,60.958]],[\"comment/80\",[]],[\"name/81\",[20,55.85]],[\"comment/81\",[]],[\"name/82\",[8,49.972]],[\"comment/82\",[]],[\"name/83\",[1,46.295]],[\"comment/83\",[]],[\"name/84\",[68,44.864]],[\"comment/84\",[]],[\"name/85\",[69,60.958]],[\"comment/85\",[]],[\"name/86\",[70,60.958]],[\"comment/86\",[]],[\"name/87\",[71,60.958]],[\"comment/87\",[]],[\"name/88\",[72,60.958]],[\"comment/88\",[]],[\"name/89\",[73,60.958]],[\"comment/89\",[]],[\"name/90\",[74,60.958]],[\"comment/90\",[]],[\"name/91\",[75,60.958]],[\"comment/91\",[]],[\"name/92\",[76,60.958]],[\"comment/92\",[]],[\"name/93\",[77,55.85]],[\"comment/93\",[]],[\"name/94\",[78,60.958]],[\"comment/94\",[]],[\"name/95\",[79,60.958]],[\"comment/95\",[]],[\"name/96\",[80,60.958]],[\"comment/96\",[]],[\"name/97\",[81,60.958]],[\"comment/97\",[]],[\"name/98\",[82,60.958]],[\"comment/98\",[]],[\"name/99\",[83,60.958]],[\"comment/99\",[]],[\"name/100\",[84,60.958]],[\"comment/100\",[]],[\"name/101\",[85,60.958]],[\"comment/101\",[]],[\"name/102\",[86,55.85]],[\"comment/102\",[]],[\"name/103\",[87,60.958]],[\"comment/103\",[]],[\"name/104\",[88,60.958]],[\"comment/104\",[]],[\"name/105\",[89,60.958]],[\"comment/105\",[]],[\"name/106\",[90,60.958]],[\"comment/106\",[]],[\"name/107\",[91,60.958]],[\"comment/107\",[]],[\"name/108\",[92,60.958]],[\"comment/108\",[]],[\"name/109\",[93,60.958]],[\"comment/109\",[]],[\"name/110\",[94,60.958]],[\"comment/110\",[]],[\"name/111\",[95,60.958]],[\"comment/111\",[]],[\"name/112\",[96,60.958]],[\"comment/112\",[]],[\"name/113\",[43,55.85]],[\"comment/113\",[]],[\"name/114\",[97,60.958]],[\"comment/114\",[]],[\"name/115\",[98,60.958]],[\"comment/115\",[]],[\"name/116\",[99,60.958]],[\"comment/116\",[]],[\"name/117\",[100,60.958]],[\"comment/117\",[]],[\"name/118\",[101,60.958]],[\"comment/118\",[]],[\"name/119\",[102,60.958]],[\"comment/119\",[]],[\"name/120\",[103,60.958]],[\"comment/120\",[]],[\"name/121\",[104,60.958]],[\"comment/121\",[]],[\"name/122\",[105,60.958]],[\"comment/122\",[]],[\"name/123\",[106,60.958]],[\"comment/123\",[]],[\"name/124\",[107,60.958]],[\"comment/124\",[]],[\"name/125\",[108,60.958]],[\"comment/125\",[]],[\"name/126\",[109,60.958]],[\"comment/126\",[]],[\"name/127\",[110,60.958]],[\"comment/127\",[]],[\"name/128\",[111,60.958]],[\"comment/128\",[]],[\"name/129\",[112,60.958]],[\"comment/129\",[]],[\"name/130\",[113,60.958]],[\"comment/130\",[]],[\"name/131\",[114,60.958]],[\"comment/131\",[]],[\"name/132\",[115,60.958]],[\"comment/132\",[]],[\"name/133\",[116,60.958]],[\"comment/133\",[]],[\"name/134\",[117,60.958]],[\"comment/134\",[]],[\"name/135\",[118,60.958]],[\"comment/135\",[]],[\"name/136\",[119,60.958]],[\"comment/136\",[]],[\"name/137\",[120,60.958]],[\"comment/137\",[]],[\"name/138\",[121,60.958]],[\"comment/138\",[]],[\"name/139\",[122,60.958]],[\"comment/139\",[]],[\"name/140\",[123,60.958]],[\"comment/140\",[]],[\"name/141\",[124,60.958]],[\"comment/141\",[]],[\"name/142\",[125,60.958]],[\"comment/142\",[]],[\"name/143\",[126,60.958]],[\"comment/143\",[]],[\"name/144\",[127,60.958]],[\"comment/144\",[]],[\"name/145\",[128,60.958]],[\"comment/145\",[]],[\"name/146\",[129,60.958]],[\"comment/146\",[]],[\"name/147\",[130,60.958]],[\"comment/147\",[]],[\"name/148\",[131,60.958]],[\"comment/148\",[]],[\"name/149\",[132,60.958]],[\"comment/149\",[]],[\"name/150\",[133,60.958]],[\"comment/150\",[]],[\"name/151\",[134,60.958]],[\"comment/151\",[]],[\"name/152\",[135,60.958]],[\"comment/152\",[]],[\"name/153\",[136,60.958]],[\"comment/153\",[]],[\"name/154\",[137,60.958]],[\"comment/154\",[]],[\"name/155\",[138,60.958]],[\"comment/155\",[]],[\"name/156\",[139,60.958]],[\"comment/156\",[]],[\"name/157\",[140,60.958]],[\"comment/157\",[]],[\"name/158\",[141,60.958]],[\"comment/158\",[]],[\"name/159\",[142,60.958]],[\"comment/159\",[]],[\"name/160\",[143,60.958]],[\"comment/160\",[]],[\"name/161\",[144,60.958]],[\"comment/161\",[]],[\"name/162\",[145,60.958]],[\"comment/162\",[]],[\"name/163\",[146,60.958]],[\"comment/163\",[]],[\"name/164\",[147,60.958]],[\"comment/164\",[]],[\"name/165\",[148,60.958]],[\"comment/165\",[]],[\"name/166\",[149,60.958]],[\"comment/166\",[]],[\"name/167\",[150,60.958]],[\"comment/167\",[]],[\"name/168\",[151,60.958]],[\"comment/168\",[]],[\"name/169\",[152,60.958]],[\"comment/169\",[]],[\"name/170\",[153,60.958]],[\"comment/170\",[]],[\"name/171\",[154,60.958]],[\"comment/171\",[]],[\"name/172\",[155,60.958]],[\"comment/172\",[]],[\"name/173\",[156,60.958]],[\"comment/173\",[]],[\"name/174\",[157,60.958]],[\"comment/174\",[]],[\"name/175\",[158,60.958]],[\"comment/175\",[]],[\"name/176\",[159,60.958]],[\"comment/176\",[]],[\"name/177\",[160,60.958]],[\"comment/177\",[]],[\"name/178\",[161,60.958]],[\"comment/178\",[]],[\"name/179\",[162,60.958]],[\"comment/179\",[]],[\"name/180\",[163,60.958]],[\"comment/180\",[]],[\"name/181\",[164,60.958]],[\"comment/181\",[]],[\"name/182\",[165,60.958]],[\"comment/182\",[]],[\"name/183\",[166,60.958]],[\"comment/183\",[]],[\"name/184\",[167,60.958]],[\"comment/184\",[]],[\"name/185\",[168,60.958]],[\"comment/185\",[]],[\"name/186\",[169,60.958]],[\"comment/186\",[]],[\"name/187\",[170,60.958]],[\"comment/187\",[]],[\"name/188\",[171,60.958]],[\"comment/188\",[]],[\"name/189\",[172,60.958]],[\"comment/189\",[]],[\"name/190\",[173,60.958]],[\"comment/190\",[]],[\"name/191\",[174,60.958]],[\"comment/191\",[]],[\"name/192\",[175,60.958]],[\"comment/192\",[]],[\"name/193\",[176,60.958]],[\"comment/193\",[]],[\"name/194\",[177,60.958]],[\"comment/194\",[]],[\"name/195\",[178,60.958]],[\"comment/195\",[]],[\"name/196\",[179,60.958]],[\"comment/196\",[]],[\"name/197\",[180,60.958]],[\"comment/197\",[]],[\"name/198\",[181,60.958]],[\"comment/198\",[]],[\"name/199\",[182,60.958]],[\"comment/199\",[]],[\"name/200\",[183,60.958]],[\"comment/200\",[]],[\"name/201\",[184,60.958]],[\"comment/201\",[]],[\"name/202\",[185,60.958]],[\"comment/202\",[]],[\"name/203\",[186,60.958]],[\"comment/203\",[]],[\"name/204\",[187,60.958]],[\"comment/204\",[]],[\"name/205\",[188,60.958]],[\"comment/205\",[]],[\"name/206\",[189,60.958]],[\"comment/206\",[]],[\"name/207\",[190,60.958]],[\"comment/207\",[]],[\"name/208\",[191,60.958]],[\"comment/208\",[]],[\"name/209\",[192,60.958]],[\"comment/209\",[]],[\"name/210\",[193,60.958]],[\"comment/210\",[]],[\"name/211\",[194,60.958]],[\"comment/211\",[]],[\"name/212\",[195,60.958]],[\"comment/212\",[]],[\"name/213\",[196,60.958]],[\"comment/213\",[]],[\"name/214\",[197,60.958]],[\"comment/214\",[]],[\"name/215\",[198,60.958]],[\"comment/215\",[]],[\"name/216\",[199,60.958]],[\"comment/216\",[]],[\"name/217\",[200,60.958]],[\"comment/217\",[]],[\"name/218\",[201,60.958]],[\"comment/218\",[]],[\"name/219\",[202,60.958]],[\"comment/219\",[]],[\"name/220\",[203,60.958]],[\"comment/220\",[]],[\"name/221\",[204,60.958]],[\"comment/221\",[]],[\"name/222\",[205,60.958]],[\"comment/222\",[]],[\"name/223\",[206,60.958]],[\"comment/223\",[]],[\"name/224\",[207,60.958]],[\"comment/224\",[]],[\"name/225\",[208,60.958]],[\"comment/225\",[]],[\"name/226\",[209,60.958]],[\"comment/226\",[]],[\"name/227\",[210,60.958]],[\"comment/227\",[]],[\"name/228\",[211,60.958]],[\"comment/228\",[]],[\"name/229\",[212,60.958]],[\"comment/229\",[]],[\"name/230\",[213,60.958]],[\"comment/230\",[]],[\"name/231\",[214,60.958]],[\"comment/231\",[]],[\"name/232\",[215,60.958]],[\"comment/232\",[]],[\"name/233\",[216,60.958]],[\"comment/233\",[]],[\"name/234\",[217,60.958]],[\"comment/234\",[]],[\"name/235\",[218,60.958]],[\"comment/235\",[]],[\"name/236\",[219,60.958]],[\"comment/236\",[]],[\"name/237\",[220,60.958]],[\"comment/237\",[]],[\"name/238\",[221,60.958]],[\"comment/238\",[]],[\"name/239\",[222,60.958]],[\"comment/239\",[]],[\"name/240\",[7,36.979]],[\"comment/240\",[]],[\"name/241\",[223,55.85]],[\"comment/241\",[]],[\"name/242\",[224,55.85]],[\"comment/242\",[]],[\"name/243\",[225,60.958]],[\"comment/243\",[]],[\"name/244\",[226,60.958]],[\"comment/244\",[]],[\"name/245\",[7,36.979]],[\"comment/245\",[]],[\"name/246\",[223,55.85]],[\"comment/246\",[]],[\"name/247\",[224,55.85]],[\"comment/247\",[]],[\"name/248\",[227,60.958]],[\"comment/248\",[]],[\"name/249\",[228,60.958]],[\"comment/249\",[]],[\"name/250\",[229,60.958]],[\"comment/250\",[]],[\"name/251\",[230,60.958]],[\"comment/251\",[]],[\"name/252\",[8,49.972]],[\"comment/252\",[]],[\"name/253\",[231,60.958]],[\"comment/253\",[]],[\"name/254\",[232,60.958]],[\"comment/254\",[]],[\"name/255\",[1,46.295]],[\"comment/255\",[]],[\"name/256\",[233,60.958]],[\"comment/256\",[]],[\"name/257\",[234,60.958]],[\"comment/257\",[]],[\"name/258\",[235,60.958]],[\"comment/258\",[]],[\"name/259\",[236,60.958]],[\"comment/259\",[]],[\"name/260\",[237,60.958]],[\"comment/260\",[]],[\"name/261\",[238,60.958]],[\"comment/261\",[]],[\"name/262\",[239,60.958]],[\"comment/262\",[]],[\"name/263\",[7,36.979]],[\"comment/263\",[]],[\"name/264\",[240,60.958]],[\"comment/264\",[]],[\"name/265\",[7,36.979]],[\"comment/265\",[]],[\"name/266\",[241,60.958]],[\"comment/266\",[]],[\"name/267\",[7,36.979]],[\"comment/267\",[]],[\"name/268\",[27,52.485]],[\"comment/268\",[]],[\"name/269\",[242,60.958]],[\"comment/269\",[]],[\"name/270\",[243,60.958]],[\"comment/270\",[]],[\"name/271\",[244,60.958]],[\"comment/271\",[]],[\"name/272\",[245,60.958]],[\"comment/272\",[]],[\"name/273\",[246,60.958]],[\"comment/273\",[]],[\"name/274\",[247,60.958]],[\"comment/274\",[]],[\"name/275\",[248,60.958]],[\"comment/275\",[]],[\"name/276\",[249,60.958]],[\"comment/276\",[]],[\"name/277\",[86,55.85]],[\"comment/277\",[]],[\"name/278\",[77,55.85]],[\"comment/278\",[]],[\"name/279\",[250,60.958]],[\"comment/279\",[]],[\"name/280\",[251,60.958]],[\"comment/280\",[]],[\"name/281\",[252,60.958]],[\"comment/281\",[]],[\"name/282\",[253,60.958]],[\"comment/282\",[]],[\"name/283\",[254,60.958]],[\"comment/283\",[]],[\"name/284\",[255,60.958]],[\"comment/284\",[]],[\"name/285\",[256,60.958]],[\"comment/285\",[]],[\"name/286\",[257,60.958]],[\"comment/286\",[]],[\"name/287\",[258,60.958]],[\"comment/287\",[]],[\"name/288\",[259,60.958]],[\"comment/288\",[]],[\"name/289\",[260,60.958]],[\"comment/289\",[]],[\"name/290\",[261,60.958]],[\"comment/290\",[]],[\"name/291\",[262,60.958]],[\"comment/291\",[]],[\"name/292\",[263,60.958]],[\"comment/292\",[]],[\"name/293\",[264,60.958]],[\"comment/293\",[]],[\"name/294\",[265,60.958]],[\"comment/294\",[]],[\"name/295\",[266,60.958]],[\"comment/295\",[]],[\"name/296\",[267,60.958]],[\"comment/296\",[]],[\"name/297\",[268,60.958]],[\"comment/297\",[]],[\"name/298\",[269,60.958]],[\"comment/298\",[]],[\"name/299\",[270,60.958]],[\"comment/299\",[]],[\"name/300\",[271,60.958]],[\"comment/300\",[]],[\"name/301\",[272,60.958]],[\"comment/301\",[]],[\"name/302\",[273,60.958]],[\"comment/302\",[]],[\"name/303\",[274,60.958]],[\"comment/303\",[]],[\"name/304\",[275,60.958]],[\"comment/304\",[]],[\"name/305\",[276,60.958]],[\"comment/305\",[]],[\"name/306\",[277,60.958]],[\"comment/306\",[]],[\"name/307\",[278,60.958]],[\"comment/307\",[]],[\"name/308\",[279,60.958]],[\"comment/308\",[]],[\"name/309\",[280,60.958]],[\"comment/309\",[]],[\"name/310\",[281,60.958]],[\"comment/310\",[]],[\"name/311\",[282,60.958]],[\"comment/311\",[]],[\"name/312\",[283,60.958]],[\"comment/312\",[]],[\"name/313\",[284,46.295]],[\"comment/313\",[]],[\"name/314\",[285,60.958]],[\"comment/314\",[]],[\"name/315\",[11,52.485]],[\"comment/315\",[]],[\"name/316\",[11,52.485]],[\"comment/316\",[]],[\"name/317\",[1,46.295]],[\"comment/317\",[]],[\"name/318\",[286,60.958]],[\"comment/318\",[]],[\"name/319\",[287,60.958]],[\"comment/319\",[]],[\"name/320\",[288,60.958]],[\"comment/320\",[]],[\"name/321\",[289,60.958]],[\"comment/321\",[]],[\"name/322\",[290,60.958]],[\"comment/322\",[]],[\"name/323\",[291,60.958]],[\"comment/323\",[]],[\"name/324\",[292,60.958]],[\"comment/324\",[]],[\"name/325\",[293,55.85]],[\"comment/325\",[]],[\"name/326\",[294,60.958]],[\"comment/326\",[]],[\"name/327\",[7,36.979]],[\"comment/327\",[]],[\"name/328\",[2,49.972]],[\"comment/328\",[]],[\"name/329\",[295,60.958]],[\"comment/329\",[]],[\"name/330\",[296,60.958]],[\"comment/330\",[]],[\"name/331\",[297,60.958]],[\"comment/331\",[]],[\"name/332\",[7,36.979]],[\"comment/332\",[]],[\"name/333\",[2,49.972]],[\"comment/333\",[]],[\"name/334\",[298,60.958]],[\"comment/334\",[]],[\"name/335\",[299,60.958]],[\"comment/335\",[]],[\"name/336\",[7,36.979]],[\"comment/336\",[]],[\"name/337\",[300,52.485]],[\"comment/337\",[]],[\"name/338\",[301,49.972]],[\"comment/338\",[]],[\"name/339\",[302,60.958]],[\"comment/339\",[]],[\"name/340\",[303,60.958]],[\"comment/340\",[]],[\"name/341\",[304,60.958]],[\"comment/341\",[]],[\"name/342\",[7,36.979]],[\"comment/342\",[]],[\"name/343\",[300,52.485]],[\"comment/343\",[]],[\"name/344\",[301,49.972]],[\"comment/344\",[]],[\"name/345\",[2,49.972]],[\"comment/345\",[]],[\"name/346\",[305,60.958]],[\"comment/346\",[]],[\"name/347\",[306,60.958]],[\"comment/347\",[]],[\"name/348\",[307,60.958]],[\"comment/348\",[]],[\"name/349\",[308,60.958]],[\"comment/349\",[]],[\"name/350\",[7,36.979]],[\"comment/350\",[]],[\"name/351\",[300,52.485]],[\"comment/351\",[]],[\"name/352\",[301,49.972]],[\"comment/352\",[]],[\"name/353\",[309,60.958]],[\"comment/353\",[]],[\"name/354\",[310,60.958]],[\"comment/354\",[]],[\"name/355\",[7,36.979]],[\"comment/355\",[]],[\"name/356\",[311,60.958]],[\"comment/356\",[]],[\"name/357\",[312,55.85]],[\"comment/357\",[]],[\"name/358\",[313,60.958]],[\"comment/358\",[]],[\"name/359\",[9,49.972]],[\"comment/359\",[]],[\"name/360\",[22,55.85]],[\"comment/360\",[]],[\"name/361\",[314,60.958]],[\"comment/361\",[]],[\"name/362\",[315,60.958]],[\"comment/362\",[]],[\"name/363\",[316,60.958]],[\"comment/363\",[]],[\"name/364\",[317,60.958]],[\"comment/364\",[]],[\"name/365\",[318,60.958]],[\"comment/365\",[]],[\"name/366\",[319,60.958]],[\"comment/366\",[]],[\"name/367\",[320,60.958]],[\"comment/367\",[]],[\"name/368\",[321,52.485]],[\"comment/368\",[]],[\"name/369\",[322,60.958]],[\"comment/369\",[]],[\"name/370\",[323,60.958]],[\"comment/370\",[]],[\"name/371\",[324,60.958]],[\"comment/371\",[]],[\"name/372\",[325,60.958]],[\"comment/372\",[]],[\"name/373\",[326,55.85]],[\"comment/373\",[]],[\"name/374\",[327,55.85]],[\"comment/374\",[]],[\"name/375\",[328,60.958]],[\"comment/375\",[]],[\"name/376\",[329,60.958]],[\"comment/376\",[]],[\"name/377\",[330,60.958]],[\"comment/377\",[]],[\"name/378\",[331,60.958]],[\"comment/378\",[]],[\"name/379\",[26,55.85]],[\"comment/379\",[]],[\"name/380\",[1,46.295]],[\"comment/380\",[]],[\"name/381\",[3,52.485]],[\"comment/381\",[]],[\"name/382\",[332,55.85]],[\"comment/382\",[]],[\"name/383\",[333,60.958]],[\"comment/383\",[]],[\"name/384\",[334,60.958]],[\"comment/384\",[]],[\"name/385\",[335,60.958]],[\"comment/385\",[]],[\"name/386\",[336,60.958]],[\"comment/386\",[]],[\"name/387\",[337,60.958]],[\"comment/387\",[]],[\"name/388\",[338,60.958]],[\"comment/388\",[]],[\"name/389\",[339,52.485]],[\"comment/389\",[]],[\"name/390\",[340,60.958]],[\"comment/390\",[]],[\"name/391\",[341,49.972]],[\"comment/391\",[]],[\"name/392\",[342,49.972]],[\"comment/392\",[]],[\"name/393\",[343,60.958]],[\"comment/393\",[]],[\"name/394\",[344,60.958]],[\"comment/394\",[]],[\"name/395\",[345,60.958]],[\"comment/395\",[]],[\"name/396\",[346,60.958]],[\"comment/396\",[]],[\"name/397\",[347,60.958]],[\"comment/397\",[]],[\"name/398\",[348,60.958]],[\"comment/398\",[]],[\"name/399\",[332,55.85]],[\"comment/399\",[]],[\"name/400\",[349,55.85]],[\"comment/400\",[]],[\"name/401\",[350,55.85]],[\"comment/401\",[]],[\"name/402\",[351,60.958]],[\"comment/402\",[]],[\"name/403\",[341,49.972]],[\"comment/403\",[]],[\"name/404\",[342,49.972]],[\"comment/404\",[]],[\"name/405\",[68,44.864]],[\"comment/405\",[]],[\"name/406\",[352,60.958]],[\"comment/406\",[]],[\"name/407\",[53,55.85]],[\"comment/407\",[]],[\"name/408\",[353,60.958]],[\"comment/408\",[]],[\"name/409\",[354,60.958]],[\"comment/409\",[]],[\"name/410\",[355,60.958]],[\"comment/410\",[]],[\"name/411\",[356,60.958]],[\"comment/411\",[]],[\"name/412\",[54,55.85]],[\"comment/412\",[]],[\"name/413\",[14,55.85]],[\"comment/413\",[]],[\"name/414\",[357,60.958]],[\"comment/414\",[]],[\"name/415\",[358,60.958]],[\"comment/415\",[]],[\"name/416\",[359,60.958]],[\"comment/416\",[]],[\"name/417\",[360,60.958]],[\"comment/417\",[]],[\"name/418\",[361,60.958]],[\"comment/418\",[]],[\"name/419\",[362,60.958]],[\"comment/419\",[]],[\"name/420\",[363,60.958]],[\"comment/420\",[]],[\"name/421\",[364,60.958]],[\"comment/421\",[]],[\"name/422\",[365,60.958]],[\"comment/422\",[]],[\"name/423\",[366,60.958]],[\"comment/423\",[]],[\"name/424\",[367,36.391]],[\"comment/424\",[]],[\"name/425\",[368,36.391]],[\"comment/425\",[]],[\"name/426\",[369,37.604]],[\"comment/426\",[]],[\"name/427\",[370,37.604]],[\"comment/427\",[]],[\"name/428\",[371,60.958]],[\"comment/428\",[]],[\"name/429\",[372,52.485]],[\"comment/429\",[]],[\"name/430\",[373,49.972]],[\"comment/430\",[]],[\"name/431\",[374,44.864]],[\"comment/431\",[]],[\"name/432\",[375,52.485]],[\"comment/432\",[]],[\"name/433\",[376,60.958]],[\"comment/433\",[]],[\"name/434\",[377,55.85]],[\"comment/434\",[]],[\"name/435\",[367,36.391]],[\"comment/435\",[]],[\"name/436\",[368,36.391]],[\"comment/436\",[]],[\"name/437\",[369,37.604]],[\"comment/437\",[]],[\"name/438\",[370,37.604]],[\"comment/438\",[]],[\"name/439\",[378,60.958]],[\"comment/439\",[]],[\"name/440\",[379,60.958]],[\"comment/440\",[]],[\"name/441\",[367,36.391]],[\"comment/441\",[]],[\"name/442\",[368,36.391]],[\"comment/442\",[]],[\"name/443\",[369,37.604]],[\"comment/443\",[]],[\"name/444\",[370,37.604]],[\"comment/444\",[]],[\"name/445\",[380,60.958]],[\"comment/445\",[]],[\"name/446\",[367,36.391]],[\"comment/446\",[]],[\"name/447\",[368,36.391]],[\"comment/447\",[]],[\"name/448\",[369,37.604]],[\"comment/448\",[]],[\"name/449\",[370,37.604]],[\"comment/449\",[]],[\"name/450\",[381,60.958]],[\"comment/450\",[]],[\"name/451\",[367,36.391]],[\"comment/451\",[]],[\"name/452\",[368,36.391]],[\"comment/452\",[]],[\"name/453\",[369,37.604]],[\"comment/453\",[]],[\"name/454\",[370,37.604]],[\"comment/454\",[]],[\"name/455\",[382,60.958]],[\"comment/455\",[]],[\"name/456\",[374,44.864]],[\"comment/456\",[]],[\"name/457\",[367,36.391]],[\"comment/457\",[]],[\"name/458\",[368,36.391]],[\"comment/458\",[]],[\"name/459\",[369,37.604]],[\"comment/459\",[]],[\"name/460\",[370,37.604]],[\"comment/460\",[]],[\"name/461\",[383,60.958]],[\"comment/461\",[]],[\"name/462\",[374,44.864]],[\"comment/462\",[]],[\"name/463\",[367,36.391]],[\"comment/463\",[]],[\"name/464\",[368,36.391]],[\"comment/464\",[]],[\"name/465\",[369,37.604]],[\"comment/465\",[]],[\"name/466\",[370,37.604]],[\"comment/466\",[]],[\"name/467\",[384,60.958]],[\"comment/467\",[]],[\"name/468\",[367,36.391]],[\"comment/468\",[]],[\"name/469\",[368,36.391]],[\"comment/469\",[]],[\"name/470\",[369,37.604]],[\"comment/470\",[]],[\"name/471\",[370,37.604]],[\"comment/471\",[]],[\"name/472\",[385,60.958]],[\"comment/472\",[]],[\"name/473\",[367,36.391]],[\"comment/473\",[]],[\"name/474\",[368,36.391]],[\"comment/474\",[]],[\"name/475\",[369,37.604]],[\"comment/475\",[]],[\"name/476\",[370,37.604]],[\"comment/476\",[]],[\"name/477\",[386,60.958]],[\"comment/477\",[]],[\"name/478\",[374,44.864]],[\"comment/478\",[]],[\"name/479\",[367,36.391]],[\"comment/479\",[]],[\"name/480\",[368,36.391]],[\"comment/480\",[]],[\"name/481\",[369,37.604]],[\"comment/481\",[]],[\"name/482\",[370,37.604]],[\"comment/482\",[]],[\"name/483\",[387,60.958]],[\"comment/483\",[]],[\"name/484\",[388,55.85]],[\"comment/484\",[]],[\"name/485\",[389,55.85]],[\"comment/485\",[]],[\"name/486\",[390,60.958]],[\"comment/486\",[]],[\"name/487\",[391,60.958]],[\"comment/487\",[]],[\"name/488\",[392,60.958]],[\"comment/488\",[]],[\"name/489\",[321,52.485]],[\"comment/489\",[]],[\"name/490\",[393,60.958]],[\"comment/490\",[]],[\"name/491\",[394,60.958]],[\"comment/491\",[]],[\"name/492\",[395,60.958]],[\"comment/492\",[]],[\"name/493\",[367,36.391]],[\"comment/493\",[]],[\"name/494\",[368,36.391]],[\"comment/494\",[]],[\"name/495\",[369,37.604]],[\"comment/495\",[]],[\"name/496\",[370,37.604]],[\"comment/496\",[]],[\"name/497\",[396,60.958]],[\"comment/497\",[]],[\"name/498\",[373,49.972]],[\"comment/498\",[]],[\"name/499\",[374,44.864]],[\"comment/499\",[]],[\"name/500\",[367,36.391]],[\"comment/500\",[]],[\"name/501\",[368,36.391]],[\"comment/501\",[]],[\"name/502\",[369,37.604]],[\"comment/502\",[]],[\"name/503\",[370,37.604]],[\"comment/503\",[]],[\"name/504\",[397,60.958]],[\"comment/504\",[]],[\"name/505\",[372,52.485]],[\"comment/505\",[]],[\"name/506\",[374,44.864]],[\"comment/506\",[]],[\"name/507\",[375,52.485]],[\"comment/507\",[]],[\"name/508\",[373,49.972]],[\"comment/508\",[]],[\"name/509\",[398,55.85]],[\"comment/509\",[]],[\"name/510\",[388,55.85]],[\"comment/510\",[]],[\"name/511\",[7,36.979]],[\"comment/511\",[]],[\"name/512\",[368,36.391]],[\"comment/512\",[]],[\"name/513\",[399,60.958]],[\"comment/513\",[]],[\"name/514\",[7,36.979]],[\"comment/514\",[]],[\"name/515\",[368,36.391]],[\"comment/515\",[]],[\"name/516\",[367,36.391]],[\"comment/516\",[]],[\"name/517\",[368,36.391]],[\"comment/517\",[]],[\"name/518\",[369,37.604]],[\"comment/518\",[]],[\"name/519\",[370,37.604]],[\"comment/519\",[]],[\"name/520\",[400,60.958]],[\"comment/520\",[]],[\"name/521\",[374,44.864]],[\"comment/521\",[]],[\"name/522\",[375,52.485]],[\"comment/522\",[]],[\"name/523\",[373,49.972]],[\"comment/523\",[]],[\"name/524\",[367,36.391]],[\"comment/524\",[]],[\"name/525\",[368,36.391]],[\"comment/525\",[]],[\"name/526\",[369,37.604]],[\"comment/526\",[]],[\"name/527\",[370,37.604]],[\"comment/527\",[]],[\"name/528\",[401,60.958]],[\"comment/528\",[]],[\"name/529\",[402,60.958]],[\"comment/529\",[]],[\"name/530\",[350,55.85]],[\"comment/530\",[]],[\"name/531\",[367,36.391]],[\"comment/531\",[]],[\"name/532\",[368,36.391]],[\"comment/532\",[]],[\"name/533\",[369,37.604]],[\"comment/533\",[]],[\"name/534\",[370,37.604]],[\"comment/534\",[]],[\"name/535\",[403,60.958]],[\"comment/535\",[]],[\"name/536\",[367,36.391]],[\"comment/536\",[]],[\"name/537\",[404,60.958]],[\"comment/537\",[]],[\"name/538\",[341,49.972]],[\"comment/538\",[]],[\"name/539\",[342,49.972]],[\"comment/539\",[]],[\"name/540\",[377,55.85]],[\"comment/540\",[]],[\"name/541\",[405,60.958]],[\"comment/541\",[]],[\"name/542\",[406,60.958]],[\"comment/542\",[]],[\"name/543\",[407,60.958]],[\"comment/543\",[]],[\"name/544\",[408,60.958]],[\"comment/544\",[]],[\"name/545\",[409,60.958]],[\"comment/545\",[]],[\"name/546\",[410,60.958]],[\"comment/546\",[]],[\"name/547\",[411,60.958]],[\"comment/547\",[]],[\"name/548\",[412,60.958]],[\"comment/548\",[]],[\"name/549\",[413,60.958]],[\"comment/549\",[]],[\"name/550\",[414,60.958]],[\"comment/550\",[]],[\"name/551\",[415,60.958]],[\"comment/551\",[]],[\"name/552\",[416,60.958]],[\"comment/552\",[]],[\"name/553\",[417,60.958]],[\"comment/553\",[]],[\"name/554\",[418,60.958]],[\"comment/554\",[]],[\"name/555\",[419,60.958]],[\"comment/555\",[]],[\"name/556\",[420,60.958]],[\"comment/556\",[]],[\"name/557\",[367,36.391]],[\"comment/557\",[]],[\"name/558\",[3,52.485]],[\"comment/558\",[]],[\"name/559\",[301,49.972]],[\"comment/559\",[]],[\"name/560\",[421,60.958]],[\"comment/560\",[]],[\"name/561\",[422,60.958]],[\"comment/561\",[]],[\"name/562\",[349,55.85]],[\"comment/562\",[]],[\"name/563\",[423,60.958]],[\"comment/563\",[]],[\"name/564\",[30,55.85]],[\"comment/564\",[]],[\"name/565\",[424,60.958]],[\"comment/565\",[]],[\"name/566\",[425,60.958]],[\"comment/566\",[]],[\"name/567\",[426,60.958]],[\"comment/567\",[]],[\"name/568\",[427,60.958]],[\"comment/568\",[]],[\"name/569\",[312,55.85]],[\"comment/569\",[]],[\"name/570\",[428,60.958]],[\"comment/570\",[]],[\"name/571\",[429,60.958]],[\"comment/571\",[]],[\"name/572\",[430,60.958]],[\"comment/572\",[]],[\"name/573\",[293,55.85]],[\"comment/573\",[]],[\"name/574\",[49,52.485]],[\"comment/574\",[]],[\"name/575\",[45,49.972]],[\"comment/575\",[]],[\"name/576\",[46,49.972]],[\"comment/576\",[]],[\"name/577\",[47,52.485]],[\"comment/577\",[]],[\"name/578\",[48,52.485]],[\"comment/578\",[]],[\"name/579\",[23,55.85]],[\"comment/579\",[]],[\"name/580\",[431,60.958]],[\"comment/580\",[]],[\"name/581\",[432,60.958]],[\"comment/581\",[]],[\"name/582\",[68,44.864]],[\"comment/582\",[]],[\"name/583\",[433,47.965]],[\"comment/583\",[]],[\"name/584\",[434,55.85]],[\"comment/584\",[]],[\"name/585\",[435,60.958]],[\"comment/585\",[]],[\"name/586\",[284,46.295]],[\"comment/586\",[]],[\"name/587\",[436,47.965]],[\"comment/587\",[]],[\"name/588\",[389,55.85]],[\"comment/588\",[]],[\"name/589\",[437,60.958]],[\"comment/589\",[]],[\"name/590\",[438,52.485]],[\"comment/590\",[]],[\"name/591\",[439,60.958]],[\"comment/591\",[]],[\"name/592\",[326,55.85]],[\"comment/592\",[]],[\"name/593\",[440,60.958]],[\"comment/593\",[]],[\"name/594\",[321,52.485]],[\"comment/594\",[]],[\"name/595\",[327,55.85]],[\"comment/595\",[]],[\"name/596\",[441,60.958]],[\"comment/596\",[]],[\"name/597\",[36,49.972]],[\"comment/597\",[]],[\"name/598\",[442,60.958]],[\"comment/598\",[]],[\"name/599\",[443,60.958]],[\"comment/599\",[]],[\"name/600\",[372,52.485]],[\"comment/600\",[]],[\"name/601\",[8,49.972]],[\"comment/601\",[]],[\"name/602\",[444,60.958]],[\"comment/602\",[]],[\"name/603\",[445,60.958]],[\"comment/603\",[]],[\"name/604\",[446,60.958]],[\"comment/604\",[]],[\"name/605\",[447,60.958]],[\"comment/605\",[]],[\"name/606\",[448,60.958]],[\"comment/606\",[]],[\"name/607\",[449,60.958]],[\"comment/607\",[]],[\"name/608\",[450,60.958]],[\"comment/608\",[]],[\"name/609\",[451,60.958]],[\"comment/609\",[]],[\"name/610\",[452,60.958]],[\"comment/610\",[]],[\"name/611\",[453,60.958]],[\"comment/611\",[]],[\"name/612\",[36,49.972]],[\"comment/612\",[]],[\"name/613\",[433,47.965]],[\"comment/613\",[]],[\"name/614\",[454,60.958]],[\"comment/614\",[]],[\"name/615\",[68,44.864]],[\"comment/615\",[]],[\"name/616\",[433,47.965]],[\"comment/616\",[]],[\"name/617\",[284,46.295]],[\"comment/617\",[]],[\"name/618\",[436,47.965]],[\"comment/618\",[]],[\"name/619\",[455,55.85]],[\"comment/619\",[]],[\"name/620\",[438,52.485]],[\"comment/620\",[]],[\"name/621\",[456,60.958]],[\"comment/621\",[]],[\"name/622\",[68,44.864]],[\"comment/622\",[]],[\"name/623\",[433,47.965]],[\"comment/623\",[]],[\"name/624\",[434,55.85]],[\"comment/624\",[]],[\"name/625\",[457,60.958]],[\"comment/625\",[]],[\"name/626\",[284,46.295]],[\"comment/626\",[]],[\"name/627\",[436,47.965]],[\"comment/627\",[]],[\"name/628\",[455,55.85]],[\"comment/628\",[]],[\"name/629\",[339,52.485]],[\"comment/629\",[]],[\"name/630\",[438,52.485]],[\"comment/630\",[]],[\"name/631\",[398,55.85]],[\"comment/631\",[]],[\"name/632\",[458,60.958]],[\"comment/632\",[]],[\"name/633\",[68,44.864]],[\"comment/633\",[]],[\"name/634\",[433,47.965]],[\"comment/634\",[]],[\"name/635\",[459,60.958]],[\"comment/635\",[]],[\"name/636\",[339,52.485]],[\"comment/636\",[]],[\"name/637\",[284,46.295]],[\"comment/637\",[]],[\"name/638\",[436,47.965]],[\"comment/638\",[]],[\"name/639\",[460,60.958]],[\"comment/639\",[]],[\"name/640\",[461,60.958]],[\"comment/640\",[]],[\"name/641\",[68,44.864]],[\"comment/641\",[]],[\"name/642\",[45,49.972]],[\"comment/642\",[]],[\"name/643\",[46,49.972]],[\"comment/643\",[]],[\"name/644\",[462,60.958]],[\"comment/644\",[]],[\"name/645\",[7,36.979]],[\"comment/645\",[]],[\"name/646\",[463,60.958]],[\"comment/646\",[]],[\"name/647\",[464,60.958]],[\"comment/647\",[]],[\"name/648\",[465,60.958]],[\"comment/648\",[]],[\"name/649\",[284,46.295]],[\"comment/649\",[]],[\"name/650\",[436,47.965]],[\"comment/650\",[]],[\"name/651\",[4,55.85]],[\"comment/651\",[]],[\"name/652\",[45,49.972]],[\"comment/652\",[]],[\"name/653\",[46,49.972]],[\"comment/653\",[]],[\"name/654\",[47,52.485]],[\"comment/654\",[]],[\"name/655\",[49,52.485]],[\"comment/655\",[]],[\"name/656\",[48,52.485]],[\"comment/656\",[]],[\"name/657\",[17,55.85]],[\"comment/657\",[]],[\"name/658\",[9,49.972]],[\"comment/658\",[]],[\"name/659\",[466,60.958]],[\"comment/659\",[]],[\"name/660\",[467,60.958]],[\"comment/660\",[]],[\"name/661\",[468,60.958]],[\"comment/661\",[]],[\"name/662\",[341,49.972]],[\"comment/662\",[]],[\"name/663\",[342,49.972]],[\"comment/663\",[]],[\"name/664\",[469,60.958]],[\"comment/664\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":7,\"name\":{\"7\":{},\"40\":{},\"240\":{},\"245\":{},\"263\":{},\"265\":{},\"267\":{},\"327\":{},\"332\":{},\"336\":{},\"342\":{},\"350\":{},\"355\":{},\"511\":{},\"514\":{},\"645\":{}},\"comment\":{}}],[\"abs\",{\"_index\":93,\"name\":{\"109\":{}},\"comment\":{}}],[\"acos\",{\"_index\":94,\"name\":{\"110\":{}},\"comment\":{}}],[\"acosh\",{\"_index\":95,\"name\":{\"111\":{}},\"comment\":{}}],[\"adapter\",{\"_index\":309,\"name\":{\"353\":{}},\"comment\":{}}],[\"add\",{\"_index\":96,\"name\":{\"112\":{}},\"comment\":{}}],[\"age\",{\"_index\":439,\"name\":{\"591\":{}},\"comment\":{}}],[\"agent\",{\"_index\":290,\"name\":{\"322\":{}},\"comment\":{}}],[\"all\",{\"_index\":43,\"name\":{\"49\":{},\"113\":{}},\"comment\":{}}],[\"alpha\",{\"_index\":259,\"name\":{\"288\":{}},\"comment\":{}}],[\"analyze\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"annotations\",{\"_index\":438,\"name\":{\"590\":{},\"620\":{},\"630\":{}},\"comment\":{}}],[\"antispoof\",{\"_index\":393,\"name\":{\"490\":{}},\"comment\":{}}],[\"any\",{\"_index\":97,\"name\":{\"114\":{}},\"comment\":{}}],[\"anycanvas\",{\"_index\":357,\"name\":{\"414\":{}},\"comment\":{}}],[\"anyimage\",{\"_index\":358,\"name\":{\"415\":{}},\"comment\":{}}],[\"anyvideo\",{\"_index\":359,\"name\":{\"416\":{}},\"comment\":{}}],[\"argmax\",{\"_index\":98,\"name\":{\"115\":{}},\"comment\":{}}],[\"argmin\",{\"_index\":99,\"name\":{\"116\":{}},\"comment\":{}}],[\"array\",{\"_index\":80,\"name\":{\"96\":{}},\"comment\":{}}],[\"arraysync\",{\"_index\":81,\"name\":{\"97\":{}},\"comment\":{}}],[\"as1d\",{\"_index\":102,\"name\":{\"119\":{}},\"comment\":{}}],[\"as2d\",{\"_index\":103,\"name\":{\"120\":{}},\"comment\":{}}],[\"as3d\",{\"_index\":104,\"name\":{\"121\":{}},\"comment\":{}}],[\"as4d\",{\"_index\":105,\"name\":{\"122\":{}},\"comment\":{}}],[\"as5d\",{\"_index\":106,\"name\":{\"123\":{}},\"comment\":{}}],[\"asin\",{\"_index\":107,\"name\":{\"124\":{}},\"comment\":{}}],[\"asinh\",{\"_index\":108,\"name\":{\"125\":{}},\"comment\":{}}],[\"asscalar\",{\"_index\":100,\"name\":{\"117\":{}},\"comment\":{}}],[\"astype\",{\"_index\":101,\"name\":{\"118\":{}},\"comment\":{}}],[\"async\",{\"_index\":423,\"name\":{\"563\":{}},\"comment\":{}}],[\"atan\",{\"_index\":109,\"name\":{\"126\":{}},\"comment\":{}}],[\"atan2\",{\"_index\":110,\"name\":{\"127\":{}},\"comment\":{}}],[\"atanh\",{\"_index\":111,\"name\":{\"128\":{}},\"comment\":{}}],[\"attention\",{\"_index\":390,\"name\":{\"486\":{}},\"comment\":{}}],[\"autobrightness\",{\"_index\":406,\"name\":{\"542\":{}},\"comment\":{}}],[\"avgpool\",{\"_index\":112,\"name\":{\"129\":{}},\"comment\":{}}],[\"backend\",{\"_index\":301,\"name\":{\"338\":{},\"344\":{},\"352\":{},\"559\":{}},\"comment\":{}}],[\"backendenum\",{\"_index\":363,\"name\":{\"420\":{}},\"comment\":{}}],[\"backends\",{\"_index\":291,\"name\":{\"323\":{}},\"comment\":{}}],[\"batchnorm\",{\"_index\":114,\"name\":{\"131\":{}},\"comment\":{}}],[\"batchtospacend\",{\"_index\":113,\"name\":{\"130\":{}},\"comment\":{}}],[\"blur\",{\"_index\":410,\"name\":{\"546\":{}},\"comment\":{}}],[\"body\",{\"_index\":46,\"name\":{\"53\":{},\"576\":{},\"643\":{},\"653\":{}},\"comment\":{}}],[\"bodyannotation\",{\"_index\":330,\"name\":{\"377\":{}},\"comment\":{}}],[\"bodyannotationblazepose\",{\"_index\":448,\"name\":{\"606\":{}},\"comment\":{}}],[\"bodyannotationefficientpose\",{\"_index\":449,\"name\":{\"607\":{}},\"comment\":{}}],[\"bodyconfig\",{\"_index\":396,\"name\":{\"497\":{}},\"comment\":{}}],[\"bodygesture\",{\"_index\":318,\"name\":{\"365\":{}},\"comment\":{}}],[\"bodykeypoint\",{\"_index\":450,\"name\":{\"608\":{}},\"comment\":{}}],[\"bodylabels\",{\"_index\":278,\"name\":{\"307\":{}},\"comment\":{}}],[\"bodylandmark\",{\"_index\":329,\"name\":{\"376\":{}},\"comment\":{}}],[\"bodylandmarkblazepose\",{\"_index\":447,\"name\":{\"605\":{}},\"comment\":{}}],[\"bodylandmarkefficientnet\",{\"_index\":446,\"name\":{\"604\":{}},\"comment\":{}}],[\"bodylandmarkmovenet\",{\"_index\":445,\"name\":{\"603\":{}},\"comment\":{}}],[\"bodylandmarkposenet\",{\"_index\":444,\"name\":{\"602\":{}},\"comment\":{}}],[\"bodypartlabels\",{\"_index\":279,\"name\":{\"308\":{}},\"comment\":{}}],[\"bodyresult\",{\"_index\":454,\"name\":{\"614\":{}},\"comment\":{}}],[\"box\",{\"_index\":284,\"name\":{\"313\":{},\"586\":{},\"617\":{},\"626\":{},\"637\":{},\"649\":{}},\"comment\":{}}],[\"boxraw\",{\"_index\":436,\"name\":{\"587\":{},\"618\":{},\"627\":{},\"638\":{},\"650\":{}},\"comment\":{}}],[\"boxscore\",{\"_index\":434,\"name\":{\"584\":{},\"624\":{}},\"comment\":{}}],[\"brightness\",{\"_index\":407,\"name\":{\"543\":{}},\"comment\":{}}],[\"broadcastto\",{\"_index\":115,\"name\":{\"132\":{}},\"comment\":{}}],[\"browser\",{\"_index\":286,\"name\":{\"318\":{}},\"comment\":{}}],[\"buffer\",{\"_index\":78,\"name\":{\"94\":{}},\"comment\":{}}],[\"buffersync\",{\"_index\":79,\"name\":{\"95\":{}},\"comment\":{}}],[\"bytes\",{\"_index\":85,\"name\":{\"101\":{}},\"comment\":{}}],[\"cachemodels\",{\"_index\":425,\"name\":{\"566\":{}},\"comment\":{}}],[\"cachesensitivity\",{\"_index\":427,\"name\":{\"568\":{}},\"comment\":{}}],[\"canvas\",{\"_index\":9,\"name\":{\"9\":{},\"48\":{},\"359\":{},\"658\":{}},\"comment\":{}}],[\"capabilities\",{\"_index\":336,\"name\":{\"386\":{}},\"comment\":{}}],[\"cast\",{\"_index\":116,\"name\":{\"133\":{}},\"comment\":{}}],[\"ceil\",{\"_index\":117,\"name\":{\"134\":{}},\"comment\":{}}],[\"class\",{\"_index\":459,\"name\":{\"635\":{}},\"comment\":{}}],[\"clipbyvalue\",{\"_index\":118,\"name\":{\"135\":{}},\"comment\":{}}],[\"clone\",{\"_index\":90,\"name\":{\"106\":{}},\"comment\":{}}],[\"color\",{\"_index\":258,\"name\":{\"287\":{}},\"comment\":{}}],[\"compare\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"concat\",{\"_index\":119,\"name\":{\"136\":{}},\"comment\":{}}],[\"config\",{\"_index\":3,\"name\":{\"3\":{},\"381\":{},\"558\":{}},\"comment\":{}}],[\"constraints\",{\"_index\":337,\"name\":{\"387\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":1,\"name\":{\"1\":{},\"73\":{},\"83\":{},\"255\":{},\"317\":{},\"380\":{}},\"comment\":{}}],[\"contrast\",{\"_index\":408,\"name\":{\"544\":{}},\"comment\":{}}],[\"conv1d\",{\"_index\":120,\"name\":{\"137\":{}},\"comment\":{}}],[\"conv2d\",{\"_index\":122,\"name\":{\"139\":{}},\"comment\":{}}],[\"conv2dtranspose\",{\"_index\":121,\"name\":{\"138\":{}},\"comment\":{}}],[\"cos\",{\"_index\":123,\"name\":{\"140\":{}},\"comment\":{}}],[\"cosh\",{\"_index\":124,\"name\":{\"141\":{}},\"comment\":{}}],[\"cpu\",{\"_index\":310,\"name\":{\"354\":{}},\"comment\":{}}],[\"crop\",{\"_index\":351,\"name\":{\"402\":{}},\"comment\":{}}],[\"cumprod\",{\"_index\":125,\"name\":{\"142\":{}},\"comment\":{}}],[\"cumsum\",{\"_index\":126,\"name\":{\"143\":{}},\"comment\":{}}],[\"data\",{\"_index\":82,\"name\":{\"98\":{}},\"comment\":{}}],[\"dataid\",{\"_index\":69,\"name\":{\"85\":{}},\"comment\":{}}],[\"datasync\",{\"_index\":84,\"name\":{\"100\":{}},\"comment\":{}}],[\"datatogpu\",{\"_index\":83,\"name\":{\"99\":{}},\"comment\":{}}],[\"deallocate\",{\"_index\":429,\"name\":{\"571\":{}},\"comment\":{}}],[\"debug\",{\"_index\":349,\"name\":{\"400\":{},\"562\":{}},\"comment\":{}}],[\"default\",{\"_index\":35,\"name\":{\"35\":{}},\"comment\":{}}],[\"defaults\",{\"_index\":431,\"name\":{\"580\":{}},\"comment\":{}}],[\"depthtospace\",{\"_index\":127,\"name\":{\"144\":{}},\"comment\":{}}],[\"depthwiseconv2d\",{\"_index\":128,\"name\":{\"145\":{}},\"comment\":{}}],[\"description\",{\"_index\":392,\"name\":{\"488\":{}},\"comment\":{}}],[\"descriptor\",{\"_index\":40,\"name\":{\"44\":{}},\"comment\":{}}],[\"detect\",{\"_index\":32,\"name\":{\"32\":{}},\"comment\":{}}],[\"detector\",{\"_index\":388,\"name\":{\"484\":{},\"510\":{}},\"comment\":{}}],[\"devices\",{\"_index\":334,\"name\":{\"384\":{}},\"comment\":{}}],[\"dilation2d\",{\"_index\":129,\"name\":{\"146\":{}},\"comment\":{}}],[\"dispose\",{\"_index\":86,\"name\":{\"102\":{},\"277\":{}},\"comment\":{}}],[\"disposeintermediatetensors\",{\"_index\":249,\"name\":{\"276\":{}},\"comment\":{}}],[\"distance\",{\"_index\":36,\"name\":{\"37\":{},\"42\":{},\"597\":{},\"612\":{}},\"comment\":{}}],[\"div\",{\"_index\":131,\"name\":{\"148\":{}},\"comment\":{}}],[\"divnonan\",{\"_index\":130,\"name\":{\"147\":{}},\"comment\":{}}],[\"dot\",{\"_index\":132,\"name\":{\"149\":{}},\"comment\":{}}],[\"draw\",{\"_index\":12,\"name\":{\"12\":{},\"46\":{}},\"comment\":{}}],[\"drawattention\",{\"_index\":269,\"name\":{\"298\":{}},\"comment\":{}}],[\"drawboxes\",{\"_index\":271,\"name\":{\"300\":{}},\"comment\":{}}],[\"drawgaze\",{\"_index\":273,\"name\":{\"302\":{}},\"comment\":{}}],[\"drawgestures\",{\"_index\":270,\"name\":{\"299\":{}},\"comment\":{}}],[\"drawlabels\",{\"_index\":268,\"name\":{\"297\":{}},\"comment\":{}}],[\"drawoptions\",{\"_index\":257,\"name\":{\"286\":{}},\"comment\":{}}],[\"drawpoints\",{\"_index\":267,\"name\":{\"296\":{}},\"comment\":{}}],[\"drawpolygons\",{\"_index\":272,\"name\":{\"301\":{}},\"comment\":{}}],[\"dtype\",{\"_index\":72,\"name\":{\"88\":{}},\"comment\":{}}],[\"element\",{\"_index\":332,\"name\":{\"382\":{},\"399\":{}},\"comment\":{}}],[\"elu\",{\"_index\":133,\"name\":{\"150\":{}},\"comment\":{}}],[\"embedding\",{\"_index\":441,\"name\":{\"596\":{}},\"comment\":{}}],[\"emit\",{\"_index\":28,\"name\":{\"28\":{}},\"comment\":{}}],[\"emotion\",{\"_index\":321,\"name\":{\"368\":{},\"489\":{},\"594\":{}},\"comment\":{}}],[\"empty\",{\"_index\":469,\"name\":{\"664\":{}},\"comment\":{}}],[\"enabled\",{\"_index\":367,\"name\":{\"424\":{},\"435\":{},\"441\":{},\"446\":{},\"451\":{},\"457\":{},\"463\":{},\"468\":{},\"473\":{},\"479\":{},\"493\":{},\"500\":{},\"516\":{},\"524\":{},\"531\":{},\"536\":{},\"557\":{}},\"comment\":{}}],[\"enumerate\",{\"_index\":343,\"name\":{\"393\":{}},\"comment\":{}}],[\"env\",{\"_index\":11,\"name\":{\"11\":{},\"315\":{},\"316\":{}},\"comment\":{}}],[\"equal\",{\"_index\":134,\"name\":{\"151\":{}},\"comment\":{}}],[\"equalization\",{\"_index\":404,\"name\":{\"537\":{}},\"comment\":{}}],[\"erf\",{\"_index\":135,\"name\":{\"152\":{}},\"comment\":{}}],[\"error\",{\"_index\":468,\"name\":{\"661\":{}},\"comment\":{}}],[\"euclideannorm\",{\"_index\":136,\"name\":{\"153\":{}},\"comment\":{}}],[\"events\",{\"_index\":14,\"name\":{\"14\":{},\"413\":{}},\"comment\":{}}],[\"execute\",{\"_index\":246,\"name\":{\"273\":{}},\"comment\":{}}],[\"executeasync\",{\"_index\":247,\"name\":{\"274\":{}},\"comment\":{}}],[\"exp\",{\"_index\":137,\"name\":{\"154\":{}},\"comment\":{}}],[\"expanddims\",{\"_index\":138,\"name\":{\"155\":{}},\"comment\":{}}],[\"expm1\",{\"_index\":139,\"name\":{\"156\":{}},\"comment\":{}}],[\"externalcanvas\",{\"_index\":361,\"name\":{\"418\":{}},\"comment\":{}}],[\"face\",{\"_index\":45,\"name\":{\"52\":{},\"575\":{},\"642\":{},\"652\":{}},\"comment\":{}}],[\"faceantispoofconfig\",{\"_index\":384,\"name\":{\"467\":{}},\"comment\":{}}],[\"faceattentionconfig\",{\"_index\":381,\"name\":{\"450\":{}},\"comment\":{}}],[\"faceconfig\",{\"_index\":387,\"name\":{\"483\":{}},\"comment\":{}}],[\"facedescriptionconfig\",{\"_index\":382,\"name\":{\"455\":{}},\"comment\":{}}],[\"facedetectorconfig\",{\"_index\":371,\"name\":{\"428\":{}},\"comment\":{}}],[\"faceemotionconfig\",{\"_index\":383,\"name\":{\"461\":{}},\"comment\":{}}],[\"facegearconfig\",{\"_index\":386,\"name\":{\"477\":{}},\"comment\":{}}],[\"facegesture\",{\"_index\":317,\"name\":{\"364\":{}},\"comment\":{}}],[\"faceirisconfig\",{\"_index\":380,\"name\":{\"445\":{}},\"comment\":{}}],[\"facelabels\",{\"_index\":277,\"name\":{\"306\":{}},\"comment\":{}}],[\"facelandmark\",{\"_index\":328,\"name\":{\"375\":{}},\"comment\":{}}],[\"facelivenessconfig\",{\"_index\":385,\"name\":{\"472\":{}},\"comment\":{}}],[\"facemeshconfig\",{\"_index\":378,\"name\":{\"439\":{}},\"comment\":{}}],[\"faceresult\",{\"_index\":432,\"name\":{\"581\":{}},\"comment\":{}}],[\"facescore\",{\"_index\":435,\"name\":{\"585\":{}},\"comment\":{}}],[\"facetriangulation\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"faceuvmap\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"fft\",{\"_index\":140,\"name\":{\"157\":{}},\"comment\":{}}],[\"fillpolygons\",{\"_index\":274,\"name\":{\"303\":{}},\"comment\":{}}],[\"filter\",{\"_index\":293,\"name\":{\"325\":{},\"573\":{}},\"comment\":{}}],[\"filterconfig\",{\"_index\":403,\"name\":{\"535\":{}},\"comment\":{}}],[\"find\",{\"_index\":38,\"name\":{\"39\":{}},\"comment\":{}}],[\"finger\",{\"_index\":322,\"name\":{\"369\":{}},\"comment\":{}}],[\"fingercurl\",{\"_index\":323,\"name\":{\"370\":{}},\"comment\":{}}],[\"fingerdirection\",{\"_index\":324,\"name\":{\"371\":{}},\"comment\":{}}],[\"fingerlabels\",{\"_index\":281,\"name\":{\"310\":{}},\"comment\":{}}],[\"fingerscore\",{\"_index\":457,\"name\":{\"625\":{}},\"comment\":{}}],[\"flags\",{\"_index\":312,\"name\":{\"357\":{},\"569\":{}},\"comment\":{}}],[\"flatten\",{\"_index\":141,\"name\":{\"158\":{}},\"comment\":{}}],[\"flip\",{\"_index\":405,\"name\":{\"541\":{}},\"comment\":{}}],[\"floor\",{\"_index\":142,\"name\":{\"159\":{}},\"comment\":{}}],[\"floordiv\",{\"_index\":143,\"name\":{\"160\":{}},\"comment\":{}}],[\"font\",{\"_index\":262,\"name\":{\"291\":{}},\"comment\":{}}],[\"gather\",{\"_index\":144,\"name\":{\"161\":{}},\"comment\":{}}],[\"gear\",{\"_index\":395,\"name\":{\"492\":{}},\"comment\":{}}],[\"gender\",{\"_index\":326,\"name\":{\"373\":{},\"592\":{}},\"comment\":{}}],[\"genderscore\",{\"_index\":440,\"name\":{\"593\":{}},\"comment\":{}}],[\"genericconfig\",{\"_index\":366,\"name\":{\"423\":{}},\"comment\":{}}],[\"gesture\",{\"_index\":49,\"name\":{\"56\":{},\"574\":{},\"655\":{}},\"comment\":{}}],[\"gestureconfig\",{\"_index\":420,\"name\":{\"556\":{}},\"comment\":{}}],[\"gesturelabels\",{\"_index\":283,\"name\":{\"312\":{}},\"comment\":{}}],[\"gestureresult\",{\"_index\":460,\"name\":{\"639\":{}},\"comment\":{}}],[\"gestures\",{\"_index\":465,\"name\":{\"648\":{}},\"comment\":{}}],[\"getintermediatetensors\",{\"_index\":248,\"name\":{\"275\":{}},\"comment\":{}}],[\"gpu\",{\"_index\":298,\"name\":{\"334\":{}},\"comment\":{}}],[\"graphmodel\",{\"_index\":232,\"name\":{\"254\":{}},\"comment\":{}}],[\"greater\",{\"_index\":146,\"name\":{\"163\":{}},\"comment\":{}}],[\"greaterequal\",{\"_index\":145,\"name\":{\"162\":{}},\"comment\":{}}],[\"hand\",{\"_index\":47,\"name\":{\"54\":{},\"577\":{},\"654\":{}},\"comment\":{}}],[\"handconfig\",{\"_index\":397,\"name\":{\"504\":{}},\"comment\":{}}],[\"handgesture\",{\"_index\":319,\"name\":{\"366\":{}},\"comment\":{}}],[\"handlabels\",{\"_index\":280,\"name\":{\"309\":{}},\"comment\":{}}],[\"handresult\",{\"_index\":456,\"name\":{\"621\":{}},\"comment\":{}}],[\"hands\",{\"_index\":462,\"name\":{\"644\":{}},\"comment\":{}}],[\"handtype\",{\"_index\":325,\"name\":{\"372\":{}},\"comment\":{}}],[\"height\",{\"_index\":342,\"name\":{\"392\":{},\"404\":{},\"539\":{},\"663\":{}},\"comment\":{}}],[\"hue\",{\"_index\":412,\"name\":{\"548\":{}},\"comment\":{}}],[\"human\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"id\",{\"_index\":68,\"name\":{\"84\":{},\"405\":{},\"582\":{},\"615\":{},\"622\":{},\"633\":{},\"641\":{}},\"comment\":{}}],[\"ifft\",{\"_index\":147,\"name\":{\"164\":{}},\"comment\":{}}],[\"image\",{\"_index\":22,\"name\":{\"22\":{},\"360\":{}},\"comment\":{}}],[\"imagedata\",{\"_index\":314,\"name\":{\"361\":{}},\"comment\":{}}],[\"imageobjects\",{\"_index\":360,\"name\":{\"417\":{}},\"comment\":{}}],[\"incache\",{\"_index\":353,\"name\":{\"408\":{}},\"comment\":{}}],[\"index\",{\"_index\":39,\"name\":{\"41\":{}},\"comment\":{}}],[\"indices\",{\"_index\":224,\"name\":{\"242\":{},\"247\":{}},\"comment\":{}}],[\"init\",{\"_index\":25,\"name\":{\"25\":{},\"50\":{}},\"comment\":{}}],[\"initial\",{\"_index\":292,\"name\":{\"324\":{}},\"comment\":{}}],[\"input\",{\"_index\":362,\"name\":{\"419\":{}},\"comment\":{}}],[\"inputnodes\",{\"_index\":234,\"name\":{\"257\":{}},\"comment\":{}}],[\"inputs\",{\"_index\":236,\"name\":{\"259\":{}},\"comment\":{}}],[\"instance\",{\"_index\":64,\"name\":{\"74\":{}},\"comment\":{}}],[\"iouthreshold\",{\"_index\":375,\"name\":{\"432\":{},\"507\":{},\"522\":{}},\"comment\":{}}],[\"irfft\",{\"_index\":148,\"name\":{\"165\":{}},\"comment\":{}}],[\"iris\",{\"_index\":391,\"name\":{\"487\":{}},\"comment\":{}}],[\"irisgesture\",{\"_index\":320,\"name\":{\"367\":{}},\"comment\":{}}],[\"isdisposed\",{\"_index\":87,\"name\":{\"103\":{}},\"comment\":{}}],[\"isfinite\",{\"_index\":149,\"name\":{\"166\":{}},\"comment\":{}}],[\"isinf\",{\"_index\":150,\"name\":{\"167\":{}},\"comment\":{}}],[\"isnan\",{\"_index\":151,\"name\":{\"168\":{}},\"comment\":{}}],[\"keepinvalid\",{\"_index\":379,\"name\":{\"440\":{}},\"comment\":{}}],[\"kept\",{\"_index\":74,\"name\":{\"90\":{}},\"comment\":{}}],[\"kernelops\",{\"_index\":52,\"name\":{\"59\":{}},\"comment\":{}}],[\"kernels\",{\"_index\":313,\"name\":{\"358\":{}},\"comment\":{}}],[\"keypoints\",{\"_index\":455,\"name\":{\"619\":{},\"628\":{}},\"comment\":{}}],[\"kodachrome\",{\"_index\":416,\"name\":{\"552\":{}},\"comment\":{}}],[\"label\",{\"_index\":339,\"name\":{\"389\":{},\"629\":{},\"636\":{}},\"comment\":{}}],[\"labelcolor\",{\"_index\":260,\"name\":{\"289\":{}},\"comment\":{}}],[\"landmarks\",{\"_index\":398,\"name\":{\"509\":{},\"631\":{}},\"comment\":{}}],[\"leakyrelu\",{\"_index\":152,\"name\":{\"169\":{}},\"comment\":{}}],[\"left\",{\"_index\":463,\"name\":{\"646\":{}},\"comment\":{}}],[\"less\",{\"_index\":154,\"name\":{\"171\":{}},\"comment\":{}}],[\"lessequal\",{\"_index\":153,\"name\":{\"170\":{}},\"comment\":{}}],[\"lineheight\",{\"_index\":263,\"name\":{\"292\":{}},\"comment\":{}}],[\"linewidth\",{\"_index\":264,\"name\":{\"293\":{}},\"comment\":{}}],[\"list\",{\"_index\":66,\"name\":{\"79\":{}},\"comment\":{}}],[\"live\",{\"_index\":443,\"name\":{\"599\":{}},\"comment\":{}}],[\"liveness\",{\"_index\":394,\"name\":{\"491\":{}},\"comment\":{}}],[\"load\",{\"_index\":27,\"name\":{\"27\":{},\"78\":{},\"268\":{}},\"comment\":{}}],[\"loaded\",{\"_index\":67,\"name\":{\"80\":{}},\"comment\":{}}],[\"loadsync\",{\"_index\":242,\"name\":{\"269\":{}},\"comment\":{}}],[\"localresponsenormalization\",{\"_index\":155,\"name\":{\"172\":{}},\"comment\":{}}],[\"log\",{\"_index\":159,\"name\":{\"176\":{}},\"comment\":{}}],[\"log1p\",{\"_index\":160,\"name\":{\"177\":{}},\"comment\":{}}],[\"logicaland\",{\"_index\":161,\"name\":{\"178\":{}},\"comment\":{}}],[\"logicalnot\",{\"_index\":162,\"name\":{\"179\":{}},\"comment\":{}}],[\"logicalor\",{\"_index\":163,\"name\":{\"180\":{}},\"comment\":{}}],[\"logicalxor\",{\"_index\":164,\"name\":{\"181\":{}},\"comment\":{}}],[\"logsigmoid\",{\"_index\":156,\"name\":{\"173\":{}},\"comment\":{}}],[\"logsoftmax\",{\"_index\":157,\"name\":{\"174\":{}},\"comment\":{}}],[\"logsumexp\",{\"_index\":158,\"name\":{\"175\":{}},\"comment\":{}}],[\"mask\",{\"_index\":376,\"name\":{\"433\":{}},\"comment\":{}}],[\"match\",{\"_index\":13,\"name\":{\"13\":{},\"36\":{}},\"comment\":{}}],[\"matchoptions\",{\"_index\":41,\"name\":{\"45\":{}},\"comment\":{}}],[\"matmul\",{\"_index\":165,\"name\":{\"182\":{}},\"comment\":{}}],[\"max\",{\"_index\":167,\"name\":{\"184\":{}},\"comment\":{}}],[\"maxdetected\",{\"_index\":373,\"name\":{\"430\":{},\"498\":{},\"508\":{},\"523\":{}},\"comment\":{}}],[\"maximum\",{\"_index\":168,\"name\":{\"185\":{}},\"comment\":{}}],[\"maxpool\",{\"_index\":166,\"name\":{\"183\":{}},\"comment\":{}}],[\"mean\",{\"_index\":169,\"name\":{\"186\":{}},\"comment\":{}}],[\"mesh\",{\"_index\":389,\"name\":{\"485\":{},\"588\":{}},\"comment\":{}}],[\"meshraw\",{\"_index\":437,\"name\":{\"589\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":239,\"name\":{\"262\":{}},\"comment\":{}}],[\"min\",{\"_index\":170,\"name\":{\"187\":{}},\"comment\":{}}],[\"minconfidence\",{\"_index\":374,\"name\":{\"431\":{},\"456\":{},\"462\":{},\"478\":{},\"499\":{},\"506\":{},\"521\":{}},\"comment\":{}}],[\"minimum\",{\"_index\":171,\"name\":{\"188\":{}},\"comment\":{}}],[\"mirrorpad\",{\"_index\":172,\"name\":{\"189\":{}},\"comment\":{}}],[\"missing\",{\"_index\":55,\"name\":{\"62\":{}},\"comment\":{}}],[\"mod\",{\"_index\":173,\"name\":{\"190\":{}},\"comment\":{}}],[\"mode\",{\"_index\":350,\"name\":{\"401\":{},\"530\":{}},\"comment\":{}}],[\"model\",{\"_index\":311,\"name\":{\"356\":{}},\"comment\":{}}],[\"modelbasepath\",{\"_index\":424,\"name\":{\"565\":{}},\"comment\":{}}],[\"modelinfo\",{\"_index\":352,\"name\":{\"406\":{}},\"comment\":{}}],[\"modelpath\",{\"_index\":368,\"name\":{\"425\":{},\"436\":{},\"442\":{},\"447\":{},\"452\":{},\"458\":{},\"464\":{},\"469\":{},\"474\":{},\"480\":{},\"494\":{},\"501\":{},\"512\":{},\"515\":{},\"517\":{},\"525\":{},\"532\":{}},\"comment\":{}}],[\"models\",{\"_index\":50,\"name\":{\"57\":{},\"72\":{},\"75\":{}},\"comment\":{}}],[\"modelsignature\",{\"_index\":240,\"name\":{\"264\":{}},\"comment\":{}}],[\"modelstats\",{\"_index\":57,\"name\":{\"64\":{},\"71\":{}},\"comment\":{}}],[\"modelstructuredoutputkeys\",{\"_index\":241,\"name\":{\"266\":{}},\"comment\":{}}],[\"modelversion\",{\"_index\":233,\"name\":{\"256\":{}},\"comment\":{}}],[\"mul\",{\"_index\":174,\"name\":{\"191\":{}},\"comment\":{}}],[\"multithread\",{\"_index\":303,\"name\":{\"340\":{}},\"comment\":{}}],[\"name\",{\"_index\":53,\"name\":{\"60\":{},\"407\":{}},\"comment\":{}}],[\"neg\",{\"_index\":175,\"name\":{\"192\":{}},\"comment\":{}}],[\"negative\",{\"_index\":413,\"name\":{\"549\":{}},\"comment\":{}}],[\"next\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"node\",{\"_index\":287,\"name\":{\"319\":{}},\"comment\":{}}],[\"norm\",{\"_index\":176,\"name\":{\"193\":{}},\"comment\":{}}],[\"notequal\",{\"_index\":177,\"name\":{\"194\":{}},\"comment\":{}}],[\"now\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"numdefinedmodels\",{\"_index\":59,\"name\":{\"66\":{}},\"comment\":{}}],[\"numloadedmodels\",{\"_index\":58,\"name\":{\"65\":{}},\"comment\":{}}],[\"object\",{\"_index\":48,\"name\":{\"55\":{},\"578\":{},\"656\":{}},\"comment\":{}}],[\"objectconfig\",{\"_index\":400,\"name\":{\"520\":{}},\"comment\":{}}],[\"objectlabels\",{\"_index\":282,\"name\":{\"311\":{}},\"comment\":{}}],[\"objectresult\",{\"_index\":458,\"name\":{\"632\":{}},\"comment\":{}}],[\"objecttype\",{\"_index\":331,\"name\":{\"378\":{}},\"comment\":{}}],[\"offscreen\",{\"_index\":295,\"name\":{\"329\":{}},\"comment\":{}}],[\"onehot\",{\"_index\":178,\"name\":{\"195\":{}},\"comment\":{}}],[\"oneslike\",{\"_index\":179,\"name\":{\"196\":{}},\"comment\":{}}],[\"ops\",{\"_index\":56,\"name\":{\"63\":{}},\"comment\":{}}],[\"options\",{\"_index\":44,\"name\":{\"51\":{}},\"comment\":{}}],[\"outputnodes\",{\"_index\":235,\"name\":{\"258\":{}},\"comment\":{}}],[\"outputs\",{\"_index\":237,\"name\":{\"260\":{}},\"comment\":{}}],[\"pad\",{\"_index\":180,\"name\":{\"197\":{}},\"comment\":{}}],[\"part\",{\"_index\":451,\"name\":{\"609\":{}},\"comment\":{}}],[\"pause\",{\"_index\":345,\"name\":{\"395\":{}},\"comment\":{}}],[\"paused\",{\"_index\":340,\"name\":{\"390\":{}},\"comment\":{}}],[\"percentageloaded\",{\"_index\":60,\"name\":{\"67\":{}},\"comment\":{}}],[\"perfadd\",{\"_index\":296,\"name\":{\"330\":{}},\"comment\":{}}],[\"performance\",{\"_index\":17,\"name\":{\"17\":{},\"657\":{}},\"comment\":{}}],[\"person\",{\"_index\":42,\"name\":{\"47\":{}},\"comment\":{}}],[\"personresult\",{\"_index\":461,\"name\":{\"640\":{}},\"comment\":{}}],[\"persons\",{\"_index\":467,\"name\":{\"660\":{}},\"comment\":{}}],[\"pixelate\",{\"_index\":419,\"name\":{\"555\":{}},\"comment\":{}}],[\"platform\",{\"_index\":289,\"name\":{\"321\":{}},\"comment\":{}}],[\"play\",{\"_index\":346,\"name\":{\"396\":{}},\"comment\":{}}],[\"point\",{\"_index\":285,\"name\":{\"314\":{}},\"comment\":{}}],[\"pointsize\",{\"_index\":265,\"name\":{\"294\":{}},\"comment\":{}}],[\"polaroid\",{\"_index\":418,\"name\":{\"554\":{}},\"comment\":{}}],[\"pool\",{\"_index\":181,\"name\":{\"198\":{}},\"comment\":{}}],[\"position\",{\"_index\":452,\"name\":{\"610\":{}},\"comment\":{}}],[\"positionraw\",{\"_index\":453,\"name\":{\"611\":{}},\"comment\":{}}],[\"pow\",{\"_index\":182,\"name\":{\"199\":{}},\"comment\":{}}],[\"predict\",{\"_index\":244,\"name\":{\"271\":{}},\"comment\":{}}],[\"predictasync\",{\"_index\":245,\"name\":{\"272\":{}},\"comment\":{}}],[\"prelu\",{\"_index\":183,\"name\":{\"200\":{}},\"comment\":{}}],[\"print\",{\"_index\":89,\"name\":{\"105\":{}},\"comment\":{}}],[\"process\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"prod\",{\"_index\":184,\"name\":{\"201\":{}},\"comment\":{}}],[\"profile\",{\"_index\":31,\"name\":{\"31\":{}},\"comment\":{}}],[\"r0\",{\"_index\":250,\"name\":{\"279\":{}},\"comment\":{}}],[\"r1\",{\"_index\":251,\"name\":{\"280\":{}},\"comment\":{}}],[\"r2\",{\"_index\":252,\"name\":{\"281\":{}},\"comment\":{}}],[\"r3\",{\"_index\":253,\"name\":{\"282\":{}},\"comment\":{}}],[\"r4\",{\"_index\":254,\"name\":{\"283\":{}},\"comment\":{}}],[\"r5\",{\"_index\":255,\"name\":{\"284\":{}},\"comment\":{}}],[\"r6\",{\"_index\":256,\"name\":{\"285\":{}},\"comment\":{}}],[\"race\",{\"_index\":327,\"name\":{\"374\":{},\"595\":{}},\"comment\":{}}],[\"rank\",{\"_index\":77,\"name\":{\"93\":{},\"278\":{}},\"comment\":{}}],[\"ranktype\",{\"_index\":73,\"name\":{\"89\":{}},\"comment\":{}}],[\"ratio\",{\"_index\":402,\"name\":{\"529\":{}},\"comment\":{}}],[\"real\",{\"_index\":442,\"name\":{\"598\":{}},\"comment\":{}}],[\"reciprocal\",{\"_index\":185,\"name\":{\"202\":{}},\"comment\":{}}],[\"relu\",{\"_index\":186,\"name\":{\"203\":{}},\"comment\":{}}],[\"relu6\",{\"_index\":187,\"name\":{\"204\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":305,\"name\":{\"346\":{}},\"comment\":{}}],[\"reset\",{\"_index\":19,\"name\":{\"19\":{},\"77\":{}},\"comment\":{}}],[\"reshape\",{\"_index\":189,\"name\":{\"206\":{}},\"comment\":{}}],[\"reshapeas\",{\"_index\":188,\"name\":{\"205\":{}},\"comment\":{}}],[\"resizebilinear\",{\"_index\":190,\"name\":{\"207\":{}},\"comment\":{}}],[\"resizenearestneighbor\",{\"_index\":191,\"name\":{\"208\":{}},\"comment\":{}}],[\"result\",{\"_index\":4,\"name\":{\"4\":{},\"651\":{}},\"comment\":{}}],[\"return\",{\"_index\":377,\"name\":{\"434\":{},\"540\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":192,\"name\":{\"209\":{}},\"comment\":{}}],[\"rfft\",{\"_index\":193,\"name\":{\"210\":{}},\"comment\":{}}],[\"right\",{\"_index\":464,\"name\":{\"647\":{}},\"comment\":{}}],[\"rotation\",{\"_index\":372,\"name\":{\"429\":{},\"505\":{},\"600\":{}},\"comment\":{}}],[\"round\",{\"_index\":194,\"name\":{\"211\":{}},\"comment\":{}}],[\"roundrect\",{\"_index\":266,\"name\":{\"295\":{}},\"comment\":{}}],[\"rsqrt\",{\"_index\":195,\"name\":{\"212\":{}},\"comment\":{}}],[\"saturation\",{\"_index\":411,\"name\":{\"547\":{}},\"comment\":{}}],[\"save\",{\"_index\":243,\"name\":{\"270\":{}},\"comment\":{}}],[\"scopeid\",{\"_index\":75,\"name\":{\"91\":{}},\"comment\":{}}],[\"score\",{\"_index\":433,\"name\":{\"583\":{},\"613\":{},\"616\":{},\"623\":{},\"634\":{}},\"comment\":{}}],[\"segmentation\",{\"_index\":23,\"name\":{\"23\":{},\"579\":{}},\"comment\":{}}],[\"segmentationconfig\",{\"_index\":401,\"name\":{\"528\":{}},\"comment\":{}}],[\"segmentationenum\",{\"_index\":365,\"name\":{\"422\":{}},\"comment\":{}}],[\"selu\",{\"_index\":196,\"name\":{\"213\":{}},\"comment\":{}}],[\"separableconv2d\",{\"_index\":197,\"name\":{\"214\":{}},\"comment\":{}}],[\"sepia\",{\"_index\":414,\"name\":{\"550\":{}},\"comment\":{}}],[\"settings\",{\"_index\":338,\"name\":{\"388\":{}},\"comment\":{}}],[\"shader\",{\"_index\":306,\"name\":{\"347\":{}},\"comment\":{}}],[\"shadowcolor\",{\"_index\":261,\"name\":{\"290\":{}},\"comment\":{}}],[\"shape\",{\"_index\":70,\"name\":{\"86\":{}},\"comment\":{}}],[\"sharpness\",{\"_index\":409,\"name\":{\"545\":{}},\"comment\":{}}],[\"sigmoid\",{\"_index\":198,\"name\":{\"215\":{}},\"comment\":{}}],[\"sign\",{\"_index\":199,\"name\":{\"216\":{}},\"comment\":{}}],[\"simd\",{\"_index\":302,\"name\":{\"339\":{}},\"comment\":{}}],[\"similarity\",{\"_index\":37,\"name\":{\"38\":{},\"43\":{}},\"comment\":{}}],[\"sin\",{\"_index\":200,\"name\":{\"217\":{}},\"comment\":{}}],[\"sinh\",{\"_index\":201,\"name\":{\"218\":{}},\"comment\":{}}],[\"size\",{\"_index\":71,\"name\":{\"87\":{}},\"comment\":{}}],[\"sizedesired\",{\"_index\":354,\"name\":{\"409\":{}},\"comment\":{}}],[\"sizefrommanifest\",{\"_index\":355,\"name\":{\"410\":{}},\"comment\":{}}],[\"sizeloadedweights\",{\"_index\":356,\"name\":{\"411\":{}},\"comment\":{}}],[\"skeleton\",{\"_index\":399,\"name\":{\"513\":{}},\"comment\":{}}],[\"skipallowed\",{\"_index\":430,\"name\":{\"572\":{}},\"comment\":{}}],[\"skipframes\",{\"_index\":369,\"name\":{\"426\":{},\"437\":{},\"443\":{},\"448\":{},\"453\":{},\"459\":{},\"465\":{},\"470\":{},\"475\":{},\"481\":{},\"495\":{},\"502\":{},\"518\":{},\"526\":{},\"533\":{}},\"comment\":{}}],[\"skiptime\",{\"_index\":370,\"name\":{\"427\":{},\"438\":{},\"444\":{},\"449\":{},\"454\":{},\"460\":{},\"466\":{},\"471\":{},\"476\":{},\"482\":{},\"496\":{},\"503\":{},\"519\":{},\"527\":{},\"534\":{}},\"comment\":{}}],[\"sleep\",{\"_index\":33,\"name\":{\"33\":{}},\"comment\":{}}],[\"slice\",{\"_index\":202,\"name\":{\"219\":{}},\"comment\":{}}],[\"softmax\",{\"_index\":203,\"name\":{\"220\":{}},\"comment\":{}}],[\"softplus\",{\"_index\":204,\"name\":{\"221\":{}},\"comment\":{}}],[\"softwarekernels\",{\"_index\":428,\"name\":{\"570\":{}},\"comment\":{}}],[\"spacetobatchnd\",{\"_index\":205,\"name\":{\"222\":{}},\"comment\":{}}],[\"split\",{\"_index\":206,\"name\":{\"223\":{}},\"comment\":{}}],[\"sqrt\",{\"_index\":207,\"name\":{\"224\":{}},\"comment\":{}}],[\"square\",{\"_index\":208,\"name\":{\"225\":{}},\"comment\":{}}],[\"squareddifference\",{\"_index\":209,\"name\":{\"226\":{}},\"comment\":{}}],[\"squeeze\",{\"_index\":210,\"name\":{\"227\":{}},\"comment\":{}}],[\"stack\",{\"_index\":211,\"name\":{\"228\":{}},\"comment\":{}}],[\"start\",{\"_index\":344,\"name\":{\"394\":{}},\"comment\":{}}],[\"state\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"stats\",{\"_index\":65,\"name\":{\"76\":{}},\"comment\":{}}],[\"step\",{\"_index\":212,\"name\":{\"229\":{}},\"comment\":{}}],[\"stop\",{\"_index\":347,\"name\":{\"397\":{}},\"comment\":{}}],[\"stream\",{\"_index\":333,\"name\":{\"383\":{}},\"comment\":{}}],[\"stridedslice\",{\"_index\":213,\"name\":{\"230\":{}},\"comment\":{}}],[\"strides\",{\"_index\":76,\"name\":{\"92\":{}},\"comment\":{}}],[\"sub\",{\"_index\":214,\"name\":{\"231\":{}},\"comment\":{}}],[\"sum\",{\"_index\":215,\"name\":{\"232\":{}},\"comment\":{}}],[\"supported\",{\"_index\":300,\"name\":{\"337\":{},\"343\":{},\"351\":{}},\"comment\":{}}],[\"tan\",{\"_index\":216,\"name\":{\"233\":{}},\"comment\":{}}],[\"tanh\",{\"_index\":217,\"name\":{\"234\":{}},\"comment\":{}}],[\"technicolor\",{\"_index\":417,\"name\":{\"553\":{}},\"comment\":{}}],[\"tensor\",{\"_index\":8,\"name\":{\"8\":{},\"82\":{},\"252\":{},\"601\":{}},\"comment\":{}}],[\"tensor4d\",{\"_index\":231,\"name\":{\"253\":{}},\"comment\":{}}],[\"tensorflow\",{\"_index\":297,\"name\":{\"331\":{}},\"comment\":{}}],[\"tf\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"tfjs\",{\"_index\":294,\"name\":{\"326\":{}},\"comment\":{}}],[\"throwifdisposed\",{\"_index\":88,\"name\":{\"104\":{}},\"comment\":{}}],[\"tile\",{\"_index\":218,\"name\":{\"235\":{}},\"comment\":{}}],[\"timestamp\",{\"_index\":466,\"name\":{\"659\":{}},\"comment\":{}}],[\"tobool\",{\"_index\":219,\"name\":{\"236\":{}},\"comment\":{}}],[\"tofloat\",{\"_index\":220,\"name\":{\"237\":{}},\"comment\":{}}],[\"toint\",{\"_index\":221,\"name\":{\"238\":{}},\"comment\":{}}],[\"topk\",{\"_index\":222,\"name\":{\"239\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":91,\"name\":{\"107\":{}},\"comment\":{}}],[\"totalsizefrommanifest\",{\"_index\":61,\"name\":{\"68\":{}},\"comment\":{}}],[\"totalsizeloading\",{\"_index\":63,\"name\":{\"70\":{}},\"comment\":{}}],[\"totalsizeweights\",{\"_index\":62,\"name\":{\"69\":{}},\"comment\":{}}],[\"track\",{\"_index\":335,\"name\":{\"385\":{}},\"comment\":{}}],[\"transpose\",{\"_index\":225,\"name\":{\"243\":{}},\"comment\":{}}],[\"unique\",{\"_index\":226,\"name\":{\"244\":{}},\"comment\":{}}],[\"unsortedsegmentsum\",{\"_index\":227,\"name\":{\"248\":{}},\"comment\":{}}],[\"unstack\",{\"_index\":228,\"name\":{\"249\":{}},\"comment\":{}}],[\"updatebackend\",{\"_index\":315,\"name\":{\"362\":{}},\"comment\":{}}],[\"updatecpu\",{\"_index\":316,\"name\":{\"363\":{}},\"comment\":{}}],[\"url\",{\"_index\":54,\"name\":{\"61\":{},\"412\":{}},\"comment\":{}}],[\"usecurves\",{\"_index\":276,\"name\":{\"305\":{}},\"comment\":{}}],[\"usedepth\",{\"_index\":275,\"name\":{\"304\":{}},\"comment\":{}}],[\"validate\",{\"_index\":20,\"name\":{\"20\":{},\"81\":{}},\"comment\":{}}],[\"validatemodel\",{\"_index\":51,\"name\":{\"58\":{}},\"comment\":{}}],[\"validatemodels\",{\"_index\":426,\"name\":{\"567\":{}},\"comment\":{}}],[\"values\",{\"_index\":223,\"name\":{\"241\":{},\"246\":{}},\"comment\":{}}],[\"variable\",{\"_index\":92,\"name\":{\"108\":{}},\"comment\":{}}],[\"vendor\",{\"_index\":307,\"name\":{\"348\":{}},\"comment\":{}}],[\"version\",{\"_index\":2,\"name\":{\"2\":{},\"328\":{},\"333\":{},\"345\":{}},\"comment\":{}}],[\"video\",{\"_index\":34,\"name\":{\"34\":{}},\"comment\":{}}],[\"vintage\",{\"_index\":415,\"name\":{\"551\":{}},\"comment\":{}}],[\"warmup\",{\"_index\":30,\"name\":{\"30\":{},\"564\":{}},\"comment\":{}}],[\"warmupenum\",{\"_index\":364,\"name\":{\"421\":{}},\"comment\":{}}],[\"wasm\",{\"_index\":299,\"name\":{\"335\":{}},\"comment\":{}}],[\"wasmpath\",{\"_index\":421,\"name\":{\"560\":{}},\"comment\":{}}],[\"wasmplatformfetch\",{\"_index\":422,\"name\":{\"561\":{}},\"comment\":{}}],[\"webcam\",{\"_index\":26,\"name\":{\"26\":{},\"379\":{}},\"comment\":{}}],[\"webcamconfig\",{\"_index\":348,\"name\":{\"398\":{}},\"comment\":{}}],[\"webgl\",{\"_index\":304,\"name\":{\"341\":{}},\"comment\":{}}],[\"webgpu\",{\"_index\":308,\"name\":{\"349\":{}},\"comment\":{}}],[\"weights\",{\"_index\":238,\"name\":{\"261\":{}},\"comment\":{}}],[\"where\",{\"_index\":229,\"name\":{\"250\":{}},\"comment\":{}}],[\"width\",{\"_index\":341,\"name\":{\"391\":{},\"403\":{},\"538\":{},\"662\":{}},\"comment\":{}}],[\"worker\",{\"_index\":288,\"name\":{\"320\":{}},\"comment\":{}}],[\"zeroslike\",{\"_index\":230,\"name\":{\"251\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/typedoc/classes/GraphModel.html b/typedoc/classes/GraphModel.html index f47449fc..d3ba530d 100644 --- a/typedoc/classes/GraphModel.html +++ b/typedoc/classes/GraphModel.html @@ -37,7 +37,7 @@ the command line converter tool and loaded via tf.loadGraphModel.
  • InferenceModel
  • +
  • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:34
  • @@ -69,6 +69,7 @@ the command line converter tool and loaded via tf.loadGraphModel.load loadSync predict +predictAsync save
    @@ -96,7 +97,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Optional tfio: __module

    Returns GraphModel<ModelURL>

    +
  • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:66
  • Accessors

    @@ -106,7 +107,7 @@ the command line converter tool and loaded via tf.loadGraphModel.

    Returns string[]

    +
  • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:49
    • @@ -115,7 +116,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Returns TensorInfo[]
    +
  • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:51
    • @@ -124,7 +125,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Returns {}
      +
    • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:54
      • @@ -133,7 +134,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Returns {}
        +
      • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:55
        • @@ -142,7 +143,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Returns {}
          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:56
          • @@ -150,7 +151,7 @@ the command line converter tool and loaded via tf.loadGraphModel.

            Returns string

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:48
          • @@ -158,7 +159,7 @@ the command line converter tool and loaded via tf.loadGraphModel.

            Returns string[]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:50
          • @@ -167,7 +168,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Returns TensorInfo[]
          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:52
          • @@ -175,7 +176,7 @@ the command line converter tool and loaded via tf.loadGraphModel.

            Returns NamedTensorsMap

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:53
        • Methods

          @@ -188,7 +189,7 @@ the command line converter tool and loaded via tf.loadGraphModel.Doc

          Returns void

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:266
          • @@ -200,7 +201,7 @@ KEEP_INTERMEDIATE_TENSORS is true).

            Doc

            Returns void

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:259
          • @@ -232,7 +233,7 @@ outputs array.

            Returns Tensor<Rank> | Tensor<Rank>[]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:228
          • @@ -263,7 +264,7 @@ array.

          Returns Promise<Tensor<Rank> | Tensor<Rank>[]>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:245
          • @@ -275,7 +276,7 @@ KEEP_INTERMEDIATE_TENSORS is true).

            Doc

            Returns NamedTensorsMap

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:252
          • @@ -286,7 +287,7 @@ compile the inference graph.

            Returns UrlIOHandler<ModelURL> extends IOHandlerSync ? boolean : Promise<boolean>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:72
          • @@ -303,7 +304,7 @@ compile the inference graph.

            artifacts: ModelArtifacts

          Returns boolean

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:79
          • @@ -345,7 +346,49 @@ Currently the batch size option is ignored for graph model.

            Returns Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:165
        • +
          + +
            + +
          • +

            Execute the inference for the input tensors in async fashion, use this +method when your model contains control flow ops.

            + +

            See

            inputNodes

            +

            You can also feed any intermediate nodes using the NamedTensorMap as the +input type. For example, given the graph + InputNode => Intermediate => OutputNode, +you can execute the subgraph Intermediate => OutputNode by calling + model.execute('IntermediateNode' : tf.tensor(...));

            +

            This is useful for models that uses tf.dynamic_rnn, where the intermediate +state needs to be fed manually.

            +

            For batch inference execution, the tensors for each input need to be +concatenated together. For example with mobilenet, the required input shape +is [1, 244, 244, 3], which represents the [batch, height, width, channel]. +If we are provide a batched data of 100 images, the input tensor should be +in the shape of [100, 244, 244, 3].

            + +

            Returns

            A Promise of inference result tensors. If the model is converted +and it originally had structured_outputs in tensorflow, then a +NamedTensorMap will be returned matching the structured_outputs. If no +structured_outputs are present, the output will be single tf.Tensor if +the model has single output node, otherwise Tensor[].

            + +

            Doc

            +
            +

            Parameters

            +
              +
            • +
              inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
            • +
            • +
              Optional config: ModelPredictConfig
              +

              Prediction configuration for specifying the batch size. +Currently the batch size option is ignored for graph model.

              +
            +

            Returns Promise<Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap>

            @@ -389,7 +432,7 @@ scheme-based string shortcut for IOHandler.

          Returns Promise<SaveResult>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-converter@4.1.0_npjwttp6o2hhjgfcmiedqvkgoa/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts:124
        • \ No newline at end of file diff --git a/typedoc/classes/Tensor-1.html b/typedoc/classes/Tensor-1.html index 8647a704..c603a288 100644 --- a/typedoc/classes/Tensor-1.html +++ b/typedoc/classes/Tensor-1.html @@ -34,147 +34,151 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0)

          Hierarchy

            -
          • Tensor
          @@ -380,7 +384,7 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0)
          id: number

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:157
        • Properties

          @@ -389,57 +393,60 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0)

          Id of the bucket holding the data for this tensor. Multiple arrays can point to the same bucket (e.g. when calling array.reshape()).

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:138
        • dtype: keyof DataTypeMap

          The data type for the array.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:144
        • id: number

          Unique id of this tensor.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:133
        • kept: boolean

          Whether this tensor has been globally kept.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:148
        • rankType: R

          The rank type for the array (see Rank enum).

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:146
        • scopeId: number

          The id of the scope this tensor is being tracked in.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:150
        • shape: ShapeMap[R]

          The shape of the tensor.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:140
        • size: number

          Number of elements in the tensor.

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:142
        • strides: number[]
          @@ -448,7 +455,7 @@ point to the same bucket (e.g. when calling array.reshape()).

          numpy.ndarray.strides.html

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:156
        • Accessors

          @@ -458,7 +465,7 @@ numpy.ndarray.strides.html

        • Returns boolean

        • +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:244
          • @@ -466,7 +473,7 @@ numpy.ndarray.strides.html

          • Returns number

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:158
        • Methods

          @@ -486,7 +493,7 @@ numpy.ndarray.strides.html

          this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/abs.d.ts:21
          • @@ -504,7 +511,7 @@ numpy.ndarray.strides.html

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acos.d.ts:21
          • @@ -522,7 +529,7 @@ numpy.ndarray.strides.html

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acosh.d.ts:21
          • @@ -540,7 +547,7 @@ numpy.ndarray.strides.html

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/add.d.ts:21
          • @@ -562,7 +569,7 @@ numpy.ndarray.strides.html

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/all.d.ts:5
          • @@ -584,7 +591,7 @@ numpy.ndarray.strides.html

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/any.d.ts:5
          • @@ -602,7 +609,7 @@ numpy.ndarray.strides.html

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_max.d.ts:5
          • @@ -620,7 +627,7 @@ numpy.ndarray.strides.html

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_min.d.ts:5
          • @@ -632,7 +639,7 @@ asynchronously.

            Doc

            Returns Promise<ArrayMap[R]>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:176
          • @@ -644,7 +651,7 @@ synchronously.

            Doc

            Returns ArrayMap[R]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:183
          • @@ -657,7 +664,7 @@ synchronously.

            T extends Tensor<Rank, T>

          Returns Tensor1D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as1d.d.ts:21
          • @@ -677,7 +684,7 @@ synchronously.

            columns: number

          Returns Tensor2D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as2d.d.ts:21
          • @@ -699,7 +706,7 @@ synchronously.

            depth: number

          Returns Tensor3D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as3d.d.ts:21
          • @@ -723,7 +730,7 @@ synchronously.

            depth2: number

          Returns Tensor4D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as4d.d.ts:21
          • @@ -749,7 +756,7 @@ synchronously.

            depth3: number

          Returns Tensor5D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as5d.d.ts:21
          • @@ -762,7 +769,7 @@ synchronously.

            T extends Tensor<Rank, T>

          Returns Scalar

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_scalar.d.ts:21
          • @@ -782,7 +789,7 @@ synchronously.

            dtype: keyof DataTypeMap

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_type.d.ts:21
          • @@ -800,7 +807,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asin.d.ts:21
          • @@ -818,7 +825,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asinh.d.ts:21
          • @@ -836,7 +843,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan.d.ts:21
          • @@ -854,7 +861,7 @@ synchronously.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan2.d.ts:5
          • @@ -872,7 +879,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atanh.d.ts:21
          • @@ -896,7 +903,7 @@ synchronously.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/avg_pool.d.ts:22
          • @@ -922,7 +929,7 @@ synchronously.

            Optional varianceEpsilon: number

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batchnorm.d.ts:5
          • @@ -942,7 +949,7 @@ synchronously.

            crops: number[][]

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batch_to_space_nd.d.ts:5
          • @@ -960,7 +967,7 @@ synchronously.

            shape: ShapeMap[R]

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/broadcast_to.d.ts:21
          • @@ -976,7 +983,7 @@ synchronously.

            D extends keyof DataTypeMap = "float32"

          Returns Promise<TensorBuffer<R, D>>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:164
          • @@ -992,7 +999,7 @@ synchronously.

            D extends keyof DataTypeMap = "float32"

          Returns TensorBuffer<R, D>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:169
          • @@ -1002,7 +1009,7 @@ synchronously.

            Returns Promise<Uint8Array | Uint8Array[]>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:236
          • @@ -1020,7 +1027,7 @@ synchronously.

            dtype: keyof DataTypeMap

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cast.d.ts:21
          • @@ -1038,7 +1045,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ceil.d.ts:21
          • @@ -1058,7 +1065,7 @@ synchronously.

            max: number

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/clip_by_value.d.ts:21
          • @@ -1079,7 +1086,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:259
          • @@ -1099,7 +1106,7 @@ synchronously.

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/concat.d.ts:5
          • @@ -1127,7 +1134,7 @@ synchronously.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv1d.d.ts:6
          • @@ -1155,7 +1162,7 @@ synchronously.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d.d.ts:5
          • @@ -1181,7 +1188,7 @@ synchronously.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d_transpose.d.ts:5
          • @@ -1199,7 +1206,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cos.d.ts:21
          • @@ -1217,7 +1224,7 @@ synchronously.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cosh.d.ts:21
          • @@ -1239,7 +1246,7 @@ synchronously.

            Optional reverse: boolean

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumprod.d.ts:5
          • @@ -1261,7 +1268,7 @@ synchronously.

            Optional reverse: boolean

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumsum.d.ts:5
          • @@ -1278,7 +1285,7 @@ promise of TypedArray that resolves when the computation has finish

            D extends keyof DataTypeMap = NumericDataType

          Returns Promise<DataTypeMap[D]>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:190
          • @@ -1295,7 +1302,7 @@ UI thread until the values are ready, which can cause performance issues.

            D extends keyof DataTypeMap = NumericDataType

          Returns DataTypeMap[D]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:234
          • @@ -1326,7 +1333,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional options: DataToGPUWebGLOption

          Returns GPUData

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:227
          • @@ -1346,7 +1353,7 @@ parameter, so can not use a user-defined size to create the buffer.

            dataFormat: "NHWC" | "NCHW"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depth_to_space.d.ts:5
          • @@ -1374,7 +1381,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depthwise_conv2d.d.ts:5
          • @@ -1400,7 +1407,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dataFormat: "NHWC"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dilation2d.d.ts:5
          • @@ -1411,7 +1418,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Doc

            Returns void

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:242
          • @@ -1429,7 +1436,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div.d.ts:21
          • @@ -1447,7 +1454,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div_no_nan.d.ts:21
          • @@ -1465,7 +1472,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dot.d.ts:5
          • @@ -1478,7 +1485,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/elu.d.ts:5
          • @@ -1496,7 +1503,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/equal.d.ts:5
          • @@ -1514,7 +1521,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/erf.d.ts:21
          • @@ -1536,7 +1543,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/euclidean_norm.d.ts:21
          • @@ -1554,7 +1561,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/exp.d.ts:21
          • @@ -1572,7 +1579,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expand_dims.d.ts:5
          • @@ -1590,7 +1597,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expm1.d.ts:21
          • @@ -1608,7 +1615,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: Tensor<Rank>

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/fft.d.ts:21
          • @@ -1621,7 +1628,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns Tensor1D

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/flatten.d.ts:21
          • @@ -1639,7 +1646,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floor.d.ts:21
          • @@ -1657,7 +1664,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floorDiv.d.ts:5
          • @@ -1679,7 +1686,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/gather.d.ts:21
          • @@ -1697,7 +1704,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater.d.ts:5
          • @@ -1715,7 +1722,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater_equal.d.ts:5
          • @@ -1733,7 +1740,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: Tensor<Rank>

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ifft.d.ts:21
          • @@ -1751,7 +1758,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: Tensor<Rank>

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/irfft.d.ts:21
          • @@ -1769,7 +1776,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_finite.d.ts:21
          • @@ -1787,7 +1794,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_inf.d.ts:21
          • @@ -1805,7 +1812,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_nan.d.ts:21
          • @@ -1823,7 +1830,7 @@ parameter, so can not use a user-defined size to create the buffer.

            alpha: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/leaky_relu.d.ts:5
          • @@ -1841,7 +1848,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less.d.ts:5
          • @@ -1859,7 +1866,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less_equal.d.ts:5
          • @@ -1883,7 +1890,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional beta: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/local_response_normalization.d.ts:5
          • @@ -1901,7 +1908,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log.d.ts:21
          • @@ -1919,7 +1926,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log1p.d.ts:21
          • @@ -1937,7 +1944,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sigmoid.d.ts:21
          • @@ -1957,7 +1964,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_softmax.d.ts:21
          • @@ -1979,7 +1986,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sum_exp.d.ts:5
          • @@ -1997,7 +2004,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_and.d.ts:5
          • @@ -2010,7 +2017,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_not.d.ts:5
          • @@ -2028,7 +2035,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_or.d.ts:5
          • @@ -2046,7 +2053,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_xor.d.ts:5
          • @@ -2068,7 +2075,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional transposeB: boolean

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mat_mul.d.ts:5
          • @@ -2088,7 +2095,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max.d.ts:21
          • @@ -2112,7 +2119,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max_pool.d.ts:22
          • @@ -2130,7 +2137,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/maximum.d.ts:5
          • @@ -2150,7 +2157,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mean.d.ts:5
          • @@ -2170,7 +2177,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/min.d.ts:21
          • @@ -2188,7 +2195,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/minimum.d.ts:5
          • @@ -2208,7 +2215,7 @@ parameter, so can not use a user-defined size to create the buffer.

            mode: "reflect" | "symmetric"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mirror_pad.d.ts:21
          • @@ -2226,7 +2233,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mod.d.ts:5
          • @@ -2244,7 +2251,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mul.d.ts:5
          • @@ -2262,7 +2269,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/neg.d.ts:21
          • @@ -2284,7 +2291,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/norm.d.ts:21
          • @@ -2302,7 +2309,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/not_equal.d.ts:5
          • @@ -2319,7 +2326,7 @@ parameter, so can not use a user-defined size to create the buffer.

            offValue: number

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/one_hot.d.ts:21
          • @@ -2337,7 +2344,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ones_like.d.ts:21
          • @@ -2357,7 +2364,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional constantValue: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pad.d.ts:21
          • @@ -2385,7 +2392,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dimRoundingMode: "round" | "floor" | "ceil"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pool.d.ts:22
          • @@ -2403,7 +2410,7 @@ parameter, so can not use a user-defined size to create the buffer.

            exp: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pow.d.ts:5
          • @@ -2421,7 +2428,7 @@ parameter, so can not use a user-defined size to create the buffer.

            alpha: TensorLike | T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prelu.d.ts:5
          • @@ -2440,7 +2447,7 @@ parameter, so can not use a user-defined size to create the buffer.

          Returns void

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:254
          • @@ -2462,7 +2469,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prod.d.ts:5
          • @@ -2480,7 +2487,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reciprocal.d.ts:21
          • @@ -2493,7 +2500,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu.d.ts:5
          • @@ -2506,7 +2513,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu6.d.ts:5
          • @@ -2524,7 +2531,7 @@ parameter, so can not use a user-defined size to create the buffer.

            shape: number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape.d.ts:5
          • @@ -2542,7 +2549,7 @@ parameter, so can not use a user-defined size to create the buffer.

            x: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape_as.d.ts:21
          • @@ -2564,7 +2571,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional halfPixelCenters: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_bilinear.d.ts:5
          • @@ -2586,7 +2593,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional halfFloatCenters: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_nearest_neighbor.d.ts:5
          • @@ -2606,7 +2613,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number | number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reverse.d.ts:5
          • @@ -2624,7 +2631,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: Tensor<Rank>

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rfft.d.ts:21
          • @@ -2642,7 +2649,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/round.d.ts:21
          • @@ -2660,7 +2667,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rsqrt.d.ts:21
          • @@ -2673,7 +2680,7 @@ parameter, so can not use a user-defined size to create the buffer.

            T extends Tensor<Rank, T>

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/selu.d.ts:5
          • @@ -2701,7 +2708,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dataFormat: "NHWC" | "NCHW"

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/separable_conv2d.d.ts:5
          • @@ -2719,7 +2726,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sigmoid.d.ts:21
          • @@ -2737,7 +2744,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sign.d.ts:21
          • @@ -2755,7 +2762,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sin.d.ts:21
          • @@ -2773,7 +2780,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sinh.d.ts:21
          • @@ -2795,7 +2802,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional size: number | number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/slice.d.ts:21
          • @@ -2815,7 +2822,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dim: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softmax.d.ts:21
          • @@ -2833,7 +2840,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softplus.d.ts:21
          • @@ -2853,7 +2860,7 @@ parameter, so can not use a user-defined size to create the buffer.

            paddings: number[][]

          Returns Tensor<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/space_to_batch_nd.d.ts:5
          • @@ -2873,7 +2880,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T[]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/split.d.ts:5
          • @@ -2891,7 +2898,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sqrt.d.ts:21
          • @@ -2909,7 +2916,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/square.d.ts:21
          • @@ -2927,7 +2934,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squared_difference.d.ts:21
          • @@ -2945,7 +2952,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squeeze.d.ts:5
          • @@ -2965,7 +2972,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/stack.d.ts:5
          • @@ -2985,7 +2992,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional alpha: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/step.d.ts:21
          • @@ -3019,7 +3026,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional shrinkAxisMask: number

          Returns Tensor<Rank>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/strided_slice.d.ts:21
          • @@ -3037,7 +3044,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sub.d.ts:5
          • @@ -3057,7 +3064,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional keepDims: boolean

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sum.d.ts:5
          • @@ -3075,7 +3082,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tan.d.ts:21
          • @@ -3093,7 +3100,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tanh.d.ts:21
          • @@ -3101,7 +3108,7 @@ parameter, so can not use a user-defined size to create the buffer.

          • Returns void

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:245
          • @@ -3119,7 +3126,7 @@ parameter, so can not use a user-defined size to create the buffer.

            b: number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tile.d.ts:21
          • @@ -3137,7 +3144,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_bool.d.ts:21
          • @@ -3155,7 +3162,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_float.d.ts:21
          • @@ -3173,7 +3180,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_int.d.ts:21
          • @@ -3189,7 +3196,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional verbose: boolean

          Returns string

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:265
          • @@ -3216,7 +3223,7 @@ parameter, so can not use a user-defined size to create the buffer.

          • values: T
          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/topk.d.ts:21
          • @@ -3234,7 +3241,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional perm: number[]

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/transpose.d.ts:21
          • @@ -3259,7 +3266,7 @@ parameter, so can not use a user-defined size to create the buffer.

          • values: T
          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unique.d.ts:21
          • @@ -3281,7 +3288,7 @@ parameter, so can not use a user-defined size to create the buffer.

            numSegments: number

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unsorted_segment_sum.d.ts:21
          • @@ -3299,7 +3306,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional axis: number

          Returns T[]

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unstack.d.ts:5
          • @@ -3316,7 +3323,7 @@ parameter, so can not use a user-defined size to create the buffer.

            Optional dtype: keyof DataTypeMap

          Returns Variable<R>

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:266
          • @@ -3336,7 +3343,7 @@ parameter, so can not use a user-defined size to create the buffer.

            x: Tensor<Rank> | TensorLike

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/where.d.ts:21
          • @@ -3354,7 +3361,7 @@ parameter, so can not use a user-defined size to create the buffer.

            this: T

          Returns T

          +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/zeros_like.d.ts:21
        • +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/types.d.ts:67
        • +
        • Defined in node_modules/.pnpm/@tensorflow+tfjs-core@4.1.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts:289